ZGlmZiAtLWdpdCBhL2NhbWVyYS9DYW1lcmEuY3BwIGIvY2FtZXJhL0NhbWVyYS5jcHAKaW5kZXggODVmNDRmMC4uM2E5ZmI0YyAxMDA2NDQKLS0tIGEvY2FtZXJhL0NhbWVyYS5jcHAKKysrIGIvY2FtZXJhL0NhbWVyYS5jcHAKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBpZiAoY2FtZXJhLT5jb25uZWN0KGMpID09IE5PX0VSUk9SKSB7CiAgICAgICAgIGMtPm1TdGF0dXMgPSBOT19FUlJPUjsKICAgICAgICAgYy0+bUNhbWVyYSA9IGNhbWVyYTsKLSAgICAgICAgY2FtZXJhLT5hc0JpbmRlcigpLT5saW5rVG9EZWF0aChjKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhKS0+bGlua1RvRGVhdGgoYyk7CiAgICAgICAgIHJldHVybiBjOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRVaWQsIC8qb3V0Ki9jLT5tQ2FtZXJhKTsKICAgICB9CiAgICAgaWYgKHN0YXR1cyA9PSBPSyAmJiBjLT5tQ2FtZXJhICE9IDApIHsKLSAgICAgICAgYy0+bUNhbWVyYS0+YXNCaW5kZXIoKS0+bGlua1RvRGVhdGgoYyk7CisgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKGMtPm1DYW1lcmEpLT5saW5rVG9EZWF0aChjKTsKICAgICAgICAgYy0+bVN0YXR1cyA9IE5PX0VSUk9SOwogICAgICAgICBjYW1lcmEgPSBjOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9jYW1lcmEvQ2FtZXJhQmFzZS5jcHAgYi9jYW1lcmEvQ2FtZXJhQmFzZS5jcHAKaW5kZXggMDQ2OTRjZC4uNjVhMWE0NyAxMDA2NDQKLS0tIGEvY2FtZXJhL0NhbWVyYUJhc2UuY3BwCisrKyBiL2NhbWVyYS9DYW1lcmFCYXNlLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm91dCovIGMtPm1DYW1lcmEpOwogICAgIH0KICAgICBpZiAoc3RhdHVzID09IE9LICYmIGMtPm1DYW1lcmEgIT0gMCkgewotICAgICAgICBjLT5tQ2FtZXJhLT5hc0JpbmRlcigpLT5saW5rVG9EZWF0aChjKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIoYy0+bUNhbWVyYSktPmxpbmtUb0RlYXRoKGMpOwogICAgICAgICBjLT5tU3RhdHVzID0gTk9fRVJST1I7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQUxPR1coIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGNvbm5lY3RpbmcgdG8gY2FtZXJhOiAlZCIsIGNhbWVyYUlkKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogICAgIEFMT0dWKCIlczogZGlzY29ubmVjdCIsIF9fRlVOQ1RJT05fXyk7CiAgICAgaWYgKG1DYW1lcmEgIT0gMCkgewogICAgICAgICBtQ2FtZXJhLT5kaXNjb25uZWN0KCk7Ci0gICAgICAgIG1DYW1lcmEtPmFzQmluZGVyKCktPnVubGlua1RvRGVhdGgodGhpcyk7CisgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKG1DYW1lcmEpLT51bmxpbmtUb0RlYXRoKHRoaXMpOwogICAgICAgICBtQ2FtZXJhID0gMDsKICAgICB9CiAgICAgQUxPR1YoIiVzOiBkaXNjb25uZWN0IChkb25lKSIsIF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9jYW1lcmEvSUNhbWVyYS5jcHAgYi9jYW1lcmEvSUNhbWVyYS5jcHAKaW5kZXggOGM2ZTFmNy4uOTk0M2JlNiAxMDA2NDQKLS0tIGEvY2FtZXJhL0lDYW1lcmEuY3BwCisrKyBiL2NhbWVyYS9JQ2FtZXJhLmNwcApAQCAtNzUsNyArNzUsNyBAQAogICAgICAgICBBTE9HVigic2V0UHJldmlld1RhcmdldCIpOwogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQ2FtZXJhOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBzcDxJQmluZGVyPiBiKGJ1ZmZlclByb2R1Y2VyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgc3A8SUJpbmRlcj4gYihJSW50ZXJmYWNlOjphc0JpbmRlcihidWZmZXJQcm9kdWNlcikpOwogICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGIpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoU0VUX1BSRVZJRVdfVEFSR0VULCBkYXRhLCAmcmVwbHkpOwogICAgICAgICByZXR1cm4gcmVwbHkucmVhZEludDMyKCk7CkBAIC05OCw3ICs5OCw3IEBACiAgICAgICAgIEFMT0dWKCJzZXRQcmV2aWV3Q2FsbGJhY2tUYXJnZXQiKTsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNhbWVyYTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgc3A8SUJpbmRlcj4gYihjYWxsYmFja1Byb2R1Y2VyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgc3A8SUJpbmRlcj4gYihJSW50ZXJmYWNlOjphc0JpbmRlcihjYWxsYmFja1Byb2R1Y2VyKSk7CiAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoYik7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChTRVRfUFJFVklFV19DQUxMQkFDS19UQVJHRVQsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiByZXBseS5yZWFkSW50MzIoKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgICAgICBBTE9HVigicmVsZWFzZVJlY29yZGluZ0ZyYW1lIik7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElDYW1lcmE6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIobWVtLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihtZW0pKTsKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KFJFTEVBU0VfUkVDT1JESU5HX0ZSQU1FLCBkYXRhLCAmcmVwbHkpOwogICAgIH0KIApAQCAtMjUwLDcgKzI1MCw3IEBACiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQ2FtZXJhOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGNhbWVyYUNsaWVudC0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhQ2xpZW50KSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChDT05ORUNULCBkYXRhLCAmcmVwbHkpOwogICAgICAgICByZXR1cm4gcmVwbHkucmVhZEludDMyKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvY2FtZXJhL0lDYW1lcmFDbGllbnQuY3BwIGIvY2FtZXJhL0lDYW1lcmFDbGllbnQuY3BwCmluZGV4IDIwNWM4YmEuLjE3OWEzNDEgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9JQ2FtZXJhQ2xpZW50LmNwcAorKysgYi9jYW1lcmEvSUNhbWVyYUNsaWVudC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNhbWVyYUNsaWVudDo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKG1zZ1R5cGUpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGltYWdlRGF0YS0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoaW1hZ2VEYXRhKSk7CiAgICAgICAgIGlmIChtZXRhZGF0YSkgewogICAgICAgICAgICAgZGF0YS53cml0ZUludDMyKG1ldGFkYXRhLT5udW1iZXJfb2ZfZmFjZXMpOwogICAgICAgICAgICAgZGF0YS53cml0ZShtZXRhZGF0YS0+ZmFjZXMsIHNpemVvZihjYW1lcmFfZmFjZV90KSAqIG1ldGFkYXRhLT5udW1iZXJfb2ZfZmFjZXMpOwpAQCAtNzQsNyArNzQsNyBAQAogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNhbWVyYUNsaWVudDo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKICAgICAgICAgZGF0YS53cml0ZUludDY0KHRpbWVzdGFtcCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihtc2dUeXBlKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihpbWFnZURhdGEtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGltYWdlRGF0YSkpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoREFUQV9DQUxMQkFDS19USU1FU1RBTVAsIGRhdGEsICZyZXBseSwgSUJpbmRlcjo6RkxBR19PTkVXQVkpOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9jYW1lcmEvSUNhbWVyYVJlY29yZGluZ1Byb3h5LmNwcCBiL2NhbWVyYS9JQ2FtZXJhUmVjb3JkaW5nUHJveHkuY3BwCmluZGV4IDcyMjNiNmQuLjNkYzBmZmIgMTAwNjQ0Ci0tLSBhL2NhbWVyYS9JQ2FtZXJhUmVjb3JkaW5nUHJveHkuY3BwCisrKyBiL2NhbWVyYS9JQ2FtZXJhUmVjb3JkaW5nUHJveHkuY3BwCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICAgIEFMT0dWKCJzdGFydFJlY29yZGluZyIpOwogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQ2FtZXJhUmVjb3JkaW5nUHJveHk6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIobGlzdGVuZXItPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGxpc3RlbmVyKSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChTVEFSVF9SRUNPUkRJTkcsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiByZXBseS5yZWFkSW50MzIoKTsKICAgICB9CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIEFMT0dWKCJyZWxlYXNlUmVjb3JkaW5nRnJhbWUiKTsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNhbWVyYVJlY29yZGluZ1Byb3h5OjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKG1lbS0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIobWVtKSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChSRUxFQVNFX1JFQ09SRElOR19GUkFNRSwgZGF0YSwgJnJlcGx5KTsKICAgICB9CiB9OwpkaWZmIC0tZ2l0IGEvY2FtZXJhL0lDYW1lcmFSZWNvcmRpbmdQcm94eUxpc3RlbmVyLmNwcCBiL2NhbWVyYS9JQ2FtZXJhUmVjb3JkaW5nUHJveHlMaXN0ZW5lci5jcHAKaW5kZXggY2IxN2YxOS4uY2Y4NDhmYyAxMDA2NDQKLS0tIGEvY2FtZXJhL0lDYW1lcmFSZWNvcmRpbmdQcm94eUxpc3RlbmVyLmNwcAorKysgYi9jYW1lcmEvSUNhbWVyYVJlY29yZGluZ1Byb3h5TGlzdGVuZXIuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQ2FtZXJhUmVjb3JkaW5nUHJveHlMaXN0ZW5lcjo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKICAgICAgICAgZGF0YS53cml0ZUludDY0KHRpbWVzdGFtcCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihtc2dUeXBlKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihpbWFnZURhdGEtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGltYWdlRGF0YSkpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoREFUQV9DQUxMQkFDS19USU1FU1RBTVAsIGRhdGEsICZyZXBseSwgSUJpbmRlcjo6RkxBR19PTkVXQVkpOwogICAgIH0KIH07CmRpZmYgLS1naXQgYS9jYW1lcmEvSUNhbWVyYVNlcnZpY2UuY3BwIGIvY2FtZXJhL0lDYW1lcmFTZXJ2aWNlLmNwcAppbmRleCA1NDg1MjA1Li5mYzNlNDM3IDEwMDY0NAotLS0gYS9jYW1lcmEvSUNhbWVyYVNlcnZpY2UuY3BwCisrKyBiL2NhbWVyYS9JQ2FtZXJhU2VydmljZS5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQAogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNhbWVyYVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoY2FtZXJhQ2xpZW50LT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihjYW1lcmFDbGllbnQpKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGNhbWVyYUlkKTsKICAgICAgICAgZGF0YS53cml0ZVN0cmluZzE2KGNsaWVudFBhY2thZ2VOYW1lKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGNsaWVudFVpZCk7CkBAIC0xOTQsNyArMTk0LDcgQEAKICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElDYW1lcmFTZXJ2aWNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGNhbWVyYUNsaWVudC0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhQ2xpZW50KSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihjYW1lcmFJZCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihoYWxWZXJzaW9uKTsKICAgICAgICAgZGF0YS53cml0ZVN0cmluZzE2KGNsaWVudFBhY2thZ2VOYW1lKTsKQEAgLTIxNyw3ICsyMTcsNyBAQAogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNhbWVyYVNlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoY2FtZXJhQ2ItPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGNhbWVyYUNiKSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihjYW1lcmFJZCk7CiAgICAgICAgIGRhdGEud3JpdGVTdHJpbmcxNihjbGllbnRQYWNrYWdlTmFtZSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihjbGllbnRVaWQpOwpAQCAtMjQyLDcgKzI0Miw3IEBACiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQ2FtZXJhU2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihjYW1lcmFDYi0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhQ2IpKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGNhbWVyYUlkKTsKICAgICAgICAgZGF0YS53cml0ZVN0cmluZzE2KGNsaWVudFBhY2thZ2VOYW1lKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGNsaWVudFVpZCk7CkBAIC0yNjAsNyArMjYwLDcgQEAKICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElDYW1lcmFTZXJ2aWNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGxpc3RlbmVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihsaXN0ZW5lcikpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoQm5DYW1lcmFTZXJ2aWNlOjpBRERfTElTVEVORVIsIGRhdGEsICZyZXBseSk7CiAKICAgICAgICAgaWYgKHJlYWRFeGNlcHRpb25Db2RlKHJlcGx5KSkgcmV0dXJuIC1FUFJPVE87CkBAIC0yNzEsNyArMjcxLDcgQEAKICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElDYW1lcmFTZXJ2aWNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGxpc3RlbmVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihsaXN0ZW5lcikpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoQm5DYW1lcmFTZXJ2aWNlOjpSRU1PVkVfTElTVEVORVIsIGRhdGEsICZyZXBseSk7CiAKICAgICAgICAgaWYgKHJlYWRFeGNlcHRpb25Db2RlKHJlcGx5KSkgcmV0dXJuIC1FUFJPVE87CkBAIC0zODQsNyArMzg0LDcgQEAKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXR1cyk7CiAgICAgICAgICAgICBpZiAoY2FtZXJhICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMigxKTsKLSAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoY2FtZXJhLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKDApOwogICAgICAgICAgICAgfQpAQCAtNDA0LDcgKzQwNCw3IEBACiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0dXMpOwogICAgICAgICAgICAgaWYgKGNhbWVyYSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoMSk7Ci0gICAgICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKGNhbWVyYS0+YXNCaW5kZXIoKSk7CisgICAgICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGNhbWVyYSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMigwKTsKICAgICAgICAgICAgIH0KQEAgLTQyNCw3ICs0MjQsNyBAQAogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdHVzKTsKICAgICAgICAgICAgIGlmIChjYW1lcmEgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKDEpOwotICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihjYW1lcmEtPmFzQmluZGVyKCkpOworICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihjYW1lcmEpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoMCk7CiAgICAgICAgICAgICB9CkBAIC00ODQsNyArNDg0LDcgQEAKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXR1cyk7CiAgICAgICAgICAgICBpZiAoY2FtZXJhICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMigxKTsKLSAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoY2FtZXJhLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKDApOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvY2FtZXJhL0lQcm9DYW1lcmFVc2VyLmNwcCBiL2NhbWVyYS9JUHJvQ2FtZXJhVXNlci5jcHAKaW5kZXggOGYyMjEyNC4uOWJkNzU5NyAxMDA2NDQKLS0tIGEvY2FtZXJhL0lQcm9DYW1lcmFVc2VyLmNwcAorKysgYi9jYW1lcmEvSVByb0NhbWVyYVVzZXIuY3BwCkBAIC02NSw3ICs2NSw3IEBACiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJUHJvQ2FtZXJhVXNlcjo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihjYW1lcmFDbGllbnQtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGNhbWVyYUNsaWVudCkpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoQ09OTkVDVCwgZGF0YSwgJnJlcGx5KTsKICAgICAgICAgcmV0dXJuIHJlcGx5LnJlYWRJbnQzMigpOwogICAgIH0KQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgICAgICBkYXRhLndyaXRlSW50MzIoaGVpZ2h0KTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGZvcm1hdCk7CiAKLSAgICAgICAgc3A8SUJpbmRlcj4gYihidWZmZXJQcm9kdWNlci0+YXNCaW5kZXIoKSk7CisgICAgICAgIHNwPElCaW5kZXI+IGIoSUludGVyZmFjZTo6YXNCaW5kZXIoYnVmZmVyUHJvZHVjZXIpKTsKICAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihiKTsKIAogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoQ1JFQVRFX1NUUkVBTSwgZGF0YSwgJnJlcGx5KTsKZGlmZiAtLWdpdCBhL2NhbWVyYS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0LmNwcCBiL2NhbWVyYS9jYW1lcmEyL0NhcHR1cmVSZXF1ZXN0LmNwcAppbmRleCBmYjc0YzhkLi42NmQ2OTEzIDEwMDY0NAotLS0gYS9jYW1lcmEvY2FtZXJhMi9DYXB0dXJlUmVxdWVzdC5jcHAKKysrIGIvY2FtZXJhL2NhbWVyYTIvQ2FwdHVyZVJlcXVlc3QuY3BwCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogICAgICAgICBzcDxJQmluZGVyPiBiaW5kZXI7CiAgICAgICAgIGlmIChzdXJmYWNlICE9IDApIHsKLSAgICAgICAgICAgIGJpbmRlciA9IHN1cmZhY2UtPmdldElHcmFwaGljQnVmZmVyUHJvZHVjZXIoKS0+YXNCaW5kZXIoKTsKKyAgICAgICAgICAgIGJpbmRlciA9IElJbnRlcmZhY2U6OmFzQmluZGVyKHN1cmZhY2UtPmdldElHcmFwaGljQnVmZmVyUHJvZHVjZXIoKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBub3Qgc3VyZSBpZiByZWFkUGFyY2VsYWJsZUFycmF5IGRvZXMgdGhpcywgaGFyZCB0byB0ZWxsIGZyb20gc291cmNlCmRpZmYgLS1naXQgYS9jYW1lcmEvY2FtZXJhMi9JQ2FtZXJhRGV2aWNlVXNlci5jcHAgYi9jYW1lcmEvY2FtZXJhMi9JQ2FtZXJhRGV2aWNlVXNlci5jcHAKaW5kZXggZmY0YTBjMi4uMzUzNDVkMiAxMDA2NDQKLS0tIGEvY2FtZXJhL2NhbWVyYTIvSUNhbWVyYURldmljZVVzZXIuY3BwCisrKyBiL2NhbWVyYS9jYW1lcmEyL0lDYW1lcmFEZXZpY2VVc2VyLmNwcApAQCAtMjE5LDcgKzIxOSw3IEBACiAKICAgICAgICAgZGF0YS53cml0ZUludDMyKDEpOyAvLyBtYXJrZXIgdGhhdCBidWZmZXJQcm9kdWNlciBpcyBub3QgbnVsbAogICAgICAgICBkYXRhLndyaXRlU3RyaW5nMTYoU3RyaW5nMTYoInVua25vd25fbmFtZSIpKTsgLy8gbmFtZSBvZiBzdXJmYWNlCi0gICAgICAgIHNwPElCaW5kZXI+IGIoYnVmZmVyUHJvZHVjZXItPmFzQmluZGVyKCkpOworICAgICAgICBzcDxJQmluZGVyPiBiKElJbnRlcmZhY2U6OmFzQmluZGVyKGJ1ZmZlclByb2R1Y2VyKSk7CiAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoYik7CiAKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KENSRUFURV9TVFJFQU0sIGRhdGEsICZyZXBseSk7CmRpZmYgLS1naXQgYS9jYW1lcmEvdGVzdHMvQW5kcm9pZC5tayBiL2NhbWVyYS90ZXN0cy9BbmRyb2lkLm1rCmluZGV4IDYxMzg1ZTUuLjJkYjRjMTQgMTAwNjQ0Ci0tLSBhL2NhbWVyYS90ZXN0cy9BbmRyb2lkLm1rCisrKyBiL2NhbWVyYS90ZXN0cy9BbmRyb2lkLm1rCkBAIC0xNCwxNiArMTQsMTUgQEAKIAogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogCiBMT0NBTF9TUkNfRklMRVM6PSBcCi0JbWFpbi5jcHAgXAogCVByb0NhbWVyYVRlc3RzLmNwcCBcCiAJVmVuZG9yVGFnRGVzY3JpcHRvclRlc3RzLmNwcAogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKIAlsaWJ1dGlscyBcCiAJbGliY3V0aWxzIFwKLQlsaWJzdGxwb3J0IFwKIAlsaWJjYW1lcmFfbWV0YWRhdGEgXAogCWxpYmNhbWVyYV9jbGllbnQgXAogCWxpYmd1aSBcCkBAIC0zMiwxNCArMzEsNyBAQAogCWxpYmRsIFwKIAlsaWJiaW5kZXIKIAotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0JbGliZ3Rlc3QKLQogTE9DQUxfQ19JTkNMVURFUyArPSBcCi0JYmlvbmljIFwKLQliaW9uaWMvbGlic3RkYysrL2luY2x1ZGUgXAotCWV4dGVybmFsL2d0ZXN0L2luY2x1ZGUgXAotCWV4dGVybmFsL3N0bHBvcnQvc3RscG9ydCBcCiAJc3lzdGVtL21lZGlhL2NhbWVyYS9pbmNsdWRlIFwKIAlzeXN0ZW0vbWVkaWEvcHJpdmF0ZS9jYW1lcmEvaW5jbHVkZSBcCiAJc3lzdGVtL21lZGlhL2NhbWVyYS90ZXN0cyBcCmRpZmYgLS1naXQgYS9jYW1lcmEvdGVzdHMvbWFpbi5jcHAgYi9jYW1lcmEvdGVzdHMvbWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjOGM1MTUuLjAwMDAwMDAKLS0tIGEvY2FtZXJhL3Rlc3RzL21haW4uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLSNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgotCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgewotCi0gICAgOjp0ZXN0aW5nOjpJbml0R29vZ2xlVGVzdCgmYXJnYywgYXJndik7Ci0KLSAgICBpbnQgcmV0ID0gUlVOX0FMTF9URVNUUygpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2NtZHMvc3RhZ2VmcmlnaHQvU2luZVNvdXJjZS5oIGIvY21kcy9zdGFnZWZyaWdodC9TaW5lU291cmNlLmgKaW5kZXggNzZhYjY2OS4uYmUwNTY2MSAxMDA2NDQKLS0tIGEvY21kcy9zdGFnZWZyaWdodC9TaW5lU291cmNlLmgKKysrIGIvY21kcy9zdGFnZWZyaWdodC9TaW5lU291cmNlLmgKQEAgLTMsMTAgKzMsMTEgQEAKICNkZWZpbmUgU0lORV9TT1VSQ0VfSF8KIAogI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhU291cmNlLmg+CisjaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotc3RydWN0IE1lZGlhQnVmZmVyR3JvdXA7CitjbGFzcyBNZWRpYUJ1ZmZlckdyb3VwOwogCiBzdHJ1Y3QgU2luZVNvdXJjZSA6IHB1YmxpYyBNZWRpYVNvdXJjZSB7CiAgICAgU2luZVNvdXJjZShpbnQzMl90IHNhbXBsZVJhdGUsIGludDMyX3QgbnVtQ2hhbm5lbHMpOwpAQCAtMjQsNyArMjUsNyBAQAogCiBwcml2YXRlOgogICAgIGVudW0geyBrQnVmZmVyU2l6ZSA9IDgxOTIgfTsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIGtGcmVxdWVuY3kgPSA1MDAuMDsKKyAgICBzdGF0aWMgY29uc3QgQ09OU1RFWFBSIGRvdWJsZSBrRnJlcXVlbmN5ID0gNTAwLjA7CiAKICAgICBib29sIG1TdGFydGVkOwogICAgIGludDMyX3QgbVNhbXBsZVJhdGU7CmRpZmYgLS1naXQgYS9kcm0vY29tbW9uL0lEcm1NYW5hZ2VyU2VydmljZS5jcHAgYi9kcm0vY29tbW9uL0lEcm1NYW5hZ2VyU2VydmljZS5jcHAKaW5kZXggZGI0MWUwYi4uM2Y2MmVkNyAxMDA2NDQKLS0tIGEvZHJtL2NvbW1vbi9JRHJtTWFuYWdlclNlcnZpY2UuY3BwCisrKyBiL2RybS9jb21tb24vSURybU1hbmFnZXJTZXJ2aWNlLmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBACiAKICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSURybU1hbmFnZXJTZXJ2aWNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwogICAgIGRhdGEud3JpdGVJbnQzMih1bmlxdWVJZCk7Ci0gICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihkcm1TZXJ2aWNlTGlzdGVuZXItPmFzQmluZGVyKCkpOworICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoZHJtU2VydmljZUxpc3RlbmVyKSk7CiAgICAgcmVtb3RlKCktPnRyYW5zYWN0KFNFVF9EUk1fU0VSVklDRV9MSVNURU5FUiwgZGF0YSwgJnJlcGx5KTsKICAgICByZXR1cm4gcmVwbHkucmVhZEludDMyKCk7CiB9CmRpZmYgLS1naXQgYS9kcm0vZHJtc2VydmVyL0FuZHJvaWQubWsgYi9kcm0vZHJtc2VydmVyL0FuZHJvaWQubWsKaW5kZXggYWEwYWI5Yi4uNDhlYTM4NSAxMDA2NDQKLS0tIGEvZHJtL2RybXNlcnZlci9BbmRyb2lkLm1rCisrKyBiL2RybS9kcm1zZXJ2ZXIvQW5kcm9pZC5tawpAQCAtMjYsNyArMjYsOCBAQAogICAgIGxpYnV0aWxzIFwKICAgICBsaWJsb2cgXAogICAgIGxpYmJpbmRlciBcCi0gICAgbGliZGwKKyAgICBsaWJkbCBcCisgICAgbGlic2VsaW51eAogCiBMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmRybWZyYW1ld29ya2NvbW1vbgogCmRpZmYgLS1naXQgYS9kcm0vZHJtc2VydmVyL0RybU1hbmFnZXJTZXJ2aWNlLmNwcCBiL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlclNlcnZpY2UuY3BwCmluZGV4IDYzMzQxZTAuLjg1N2Q3M2UgMTAwNjQ0Ci0tLSBhL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlclNlcnZpY2UuY3BwCisrKyBiL2RybS9kcm1zZXJ2ZXIvRHJtTWFuYWdlclNlcnZpY2UuY3BwCkBAIC0yOSwyMCArMjksNjggQEAKICNpbmNsdWRlICJEcm1NYW5hZ2VyU2VydmljZS5oIgogI2luY2x1ZGUgIkRybU1hbmFnZXIuaCIKIAorI2luY2x1ZGUgPHNlbGludXgvYW5kcm9pZC5oPgorCiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDsKIAorc3RhdGljIGludCBzZWxpbnV4X2VuYWJsZWQ7CitzdGF0aWMgY2hhciAqZHJtc2VydmVyX2NvbnRleHQ7CiBzdGF0aWMgVmVjdG9yPHVpZF90PiB0cnVzdGVkVWlkczsKIAotc3RhdGljIGJvb2wgaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZCgpIHsKK2NvbnN0IGNoYXIgKmNvbnN0IERybU1hbmFnZXJTZXJ2aWNlOjpkcm1fcGVybV9sYWJlbHNbXSA9IHsKKyAgICAiY29uc3VtZVJpZ2h0cyIsCisgICAgInNldFBsYXliYWNrU3RhdHVzIiwKKyAgICAib3BlbkRlY3J5cHRTZXNzaW9uIiwKKyAgICAiY2xvc2VEZWNyeXB0U2Vzc2lvbiIsCisgICAgImluaXRpYWxpemVEZWNyeXB0VW5pdCIsCisgICAgImRlY3J5cHQiLAorICAgICJmaW5hbGl6ZURlY3J5cHRVbml0IiwKKyAgICAicHJlYWQiCit9OworCitjb25zdCBjaGFyICpEcm1NYW5hZ2VyU2VydmljZTo6Z2V0X3Blcm1fbGFiZWwoZHJtX3Blcm1fdCBwZXJtKSB7CisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gcGVybTsKKworICAgIGlmIChpbmRleCA8IDAgfHwKKyAgICAgICAgICAgIGluZGV4ID49IChzaXplb2YoZHJtX3Blcm1fbGFiZWxzKSAvIHNpemVvZihkcm1fcGVybV9sYWJlbHNbMF0pKSkgeworICAgICAgICBBTE9HRSgiU0VMaW51eDogRmFpbGVkIHRvIHJldHJpZXZlIHBlcm1pc3Npb24gbGFiZWwocGVybT0lZCkuXG4iLCBwZXJtKTsKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisgICAgcmV0dXJuIGRybV9wZXJtX2xhYmVsc1tpbmRleF07Cit9CisKK2Jvb2wgRHJtTWFuYWdlclNlcnZpY2U6OnNlbGludXhJc1Byb3RlY3RlZENhbGxBbGxvd2VkKHBpZF90IHNwaWQsIGRybV9wZXJtX3QgcGVybSkgeworICAgIGlmIChzZWxpbnV4X2VuYWJsZWQgPD0gMCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjaGFyICpzY3R4OworICAgIGNvbnN0IGNoYXIgKnNlbGludXhfY2xhc3MgPSAiZHJtc2VydmljZSI7CisgICAgY29uc3QgY2hhciAqc3RyX3Blcm0gPSBnZXRfcGVybV9sYWJlbChwZXJtKTsKKworICAgIGlmIChnZXRwaWRjb24oc3BpZCwgJnNjdHgpICE9IDApIHsKKyAgICAgICAgQUxPR0UoIlNFTGludXg6IGdldHBpZGNvbihwaWQ9JWQpIGZhaWxlZC5cbiIsIHNwaWQpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBhbGxvd2VkID0gKHNlbGludXhfY2hlY2tfYWNjZXNzKHNjdHgsIGRybXNlcnZlcl9jb250ZXh0LCBzZWxpbnV4X2NsYXNzLAorICAgICAgICAgICAgc3RyX3Blcm0sIE5VTEwpID09IDApOworICAgIGZyZWVjb24oc2N0eCk7CisKKyAgICByZXR1cm4gYWxsb3dlZDsKK30KKworYm9vbCBEcm1NYW5hZ2VyU2VydmljZTo6aXNQcm90ZWN0ZWRDYWxsQWxsb3dlZChkcm1fcGVybV90IHBlcm0pIHsKICAgICAvLyBUT0RPCiAgICAgLy8gRm9sbG93aW5nIGltcGxlbWVudGF0aW9uIGlzIGp1c3QgZm9yIHJlZmVyZW5jZS4KICAgICAvLyBFYWNoIE9FTSBtYW51ZmFjdHVyZXIgc2hvdWxkIGltcGxlbWVudC9yZXBsYWNlIHdpdGggdGhlaXIgb3duIHNvbHV0aW9ucy4KICAgICBJUENUaHJlYWRTdGF0ZSogaXBjU3RhdGUgPSBJUENUaHJlYWRTdGF0ZTo6c2VsZigpOwogICAgIHVpZF90IHVpZCA9IGlwY1N0YXRlLT5nZXRDYWxsaW5nVWlkKCk7CisgICAgcGlkX3Qgc3BpZCA9IGlwY1N0YXRlLT5nZXRDYWxsaW5nUGlkKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHRydXN0ZWRVaWRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICh0cnVzdGVkVWlkc1tpXSA9PSB1aWQpIHsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHNlbGludXhJc1Byb3RlY3RlZENhbGxBbGxvd2VkKHNwaWQsIHBlcm0pOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTYwLDYgKzEwOCwxNiBAQAogICAgICAgICAvLyBBZGQgdHJ1c3RlZCB1aWRzIGhlcmUKICAgICAgICAgdHJ1c3RlZFVpZHMucHVzaChBSURfTUVESUEpOwogICAgIH0KKworICAgIHNlbGludXhfZW5hYmxlZCA9IGlzX3NlbGludXhfZW5hYmxlZCgpOworICAgIGlmIChzZWxpbnV4X2VuYWJsZWQgPiAwICYmIGdldGNvbigmZHJtc2VydmVyX2NvbnRleHQpICE9IDApIHsKKyAgICAgICAgQUxPR0UoIlNFTGludXg6IERybU1hbmFnZXJTZXJ2aWNlIGZhaWxlZCB0byBnZXQgY29udGV4dCBmb3IgRHJtTWFuYWdlclNlcnZpY2UuIEFib3J0aW5nLlxuIik7CisgICAgICAgIGFib3J0KCk7CisgICAgfQorCisgICAgdW5pb24gc2VsaW51eF9jYWxsYmFjayBjYjsKKyAgICBjYi5mdW5jX2xvZyA9IHNlbGludXhfbG9nX2NhbGxiYWNrOworICAgIHNlbGludXhfc2V0X2NhbGxiYWNrKFNFTElOVVhfQ0JfTE9HLCBjYik7CiB9CiAKIERybU1hbmFnZXJTZXJ2aWNlOjpEcm1NYW5hZ2VyU2VydmljZSgpIDoKQEAgLTE1MSw3ICsyMDksNyBAQAogc3RhdHVzX3QgRHJtTWFuYWdlclNlcnZpY2U6OmNvbnN1bWVSaWdodHMoCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBhY3Rpb24sIGJvb2wgcmVzZXJ2ZSkgewogICAgIEFMT0dWKCJFbnRlcmluZyBjb25zdW1lUmlnaHRzIik7Ci0gICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKCkpIHsKKyAgICBpZiAoIWlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoQ09OU1VNRV9SSUdIVFMpKSB7CiAgICAgICAgIHJldHVybiBEUk1fRVJST1JfTk9fUEVSTUlTU0lPTjsKICAgICB9CiAgICAgcmV0dXJuIG1Ecm1NYW5hZ2VyLT5jb25zdW1lUmlnaHRzKHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLCBhY3Rpb24sIHJlc2VydmUpOwpAQCAtMTYwLDcgKzIxOCw3IEBACiBzdGF0dXNfdCBEcm1NYW5hZ2VyU2VydmljZTo6c2V0UGxheWJhY2tTdGF0dXMoCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsIGludCBwbGF5YmFja1N0YXR1cywgaW50NjRfdCBwb3NpdGlvbikgewogICAgIEFMT0dWKCJFbnRlcmluZyBzZXRQbGF5YmFja1N0YXR1cyIpOwotICAgIGlmICghaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZCgpKSB7CisgICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKFNFVF9QTEFZQkFDS19TVEFUVVMpKSB7CiAgICAgICAgIHJldHVybiBEUk1fRVJST1JfTk9fUEVSTUlTU0lPTjsKICAgICB9CiAgICAgcmV0dXJuIG1Ecm1NYW5hZ2VyLT5zZXRQbGF5YmFja1N0YXR1cyh1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZSwgcGxheWJhY2tTdGF0dXMsIHBvc2l0aW9uKTsKQEAgLTIwOCw3ICsyNjYsNyBAQAogRGVjcnlwdEhhbmRsZSogRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbigKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgaW50IGZkLCBvZmY2NF90IG9mZnNldCwgb2ZmNjRfdCBsZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWUpIHsKICAgICBBTE9HVigiRW50ZXJpbmcgRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbiIpOwotICAgIGlmIChpc1Byb3RlY3RlZENhbGxBbGxvd2VkKCkpIHsKKyAgICBpZiAoaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZChPUEVOX0RFQ1JZUFRfU0VTU0lPTikpIHsKICAgICAgICAgcmV0dXJuIG1Ecm1NYW5hZ2VyLT5vcGVuRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGZkLCBvZmZzZXQsIGxlbmd0aCwgbWltZSk7CiAgICAgfQogCkBAIC0yMTgsNyArMjc2LDcgQEAKIERlY3J5cHRIYW5kbGUqIERybU1hbmFnZXJTZXJ2aWNlOjpvcGVuRGVjcnlwdFNlc3Npb24oCiAgICAgICAgICAgICBpbnQgdW5pcXVlSWQsIGNvbnN0IGNoYXIqIHVyaSwgY29uc3QgY2hhciogbWltZSkgewogICAgIEFMT0dWKCJFbnRlcmluZyBEcm1NYW5hZ2VyU2VydmljZTo6b3BlbkRlY3J5cHRTZXNzaW9uIHdpdGggdXJpIik7Ci0gICAgaWYgKGlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoKSkgeworICAgIGlmIChpc1Byb3RlY3RlZENhbGxBbGxvd2VkKE9QRU5fREVDUllQVF9TRVNTSU9OKSkgewogICAgICAgICByZXR1cm4gbURybU1hbmFnZXItPm9wZW5EZWNyeXB0U2Vzc2lvbih1bmlxdWVJZCwgdXJpLCBtaW1lKTsKICAgICB9CiAKQEAgLTIyOCw3ICsyODYsNyBAQAogRGVjcnlwdEhhbmRsZSogRHJtTWFuYWdlclNlcnZpY2U6Om9wZW5EZWNyeXB0U2Vzc2lvbigKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgY29uc3QgRHJtQnVmZmVyJiBidWYsIGNvbnN0IFN0cmluZzgmIG1pbWVUeXBlKSB7CiAgICAgQUxPR1YoIkVudGVyaW5nIERybU1hbmFnZXJTZXJ2aWNlOjpvcGVuRGVjcnlwdFNlc3Npb24gZm9yIHN0cmVhbWluZyIpOwotICAgIGlmIChpc1Byb3RlY3RlZENhbGxBbGxvd2VkKCkpIHsKKyAgICBpZiAoaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZChPUEVOX0RFQ1JZUFRfU0VTU0lPTikpIHsKICAgICAgICAgcmV0dXJuIG1Ecm1NYW5hZ2VyLT5vcGVuRGVjcnlwdFNlc3Npb24odW5pcXVlSWQsIGJ1ZiwgbWltZVR5cGUpOwogICAgIH0KIApAQCAtMjM3LDcgKzI5NSw3IEBACiAKIHN0YXR1c190IERybU1hbmFnZXJTZXJ2aWNlOjpjbG9zZURlY3J5cHRTZXNzaW9uKGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSkgewogICAgIEFMT0dWKCJFbnRlcmluZyBjbG9zZURlY3J5cHRTZXNzaW9uIik7Ci0gICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKCkpIHsKKyAgICBpZiAoIWlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoQ0xPU0VfREVDUllQVF9TRVNTSU9OKSkgewogICAgICAgICByZXR1cm4gRFJNX0VSUk9SX05PX1BFUk1JU1NJT047CiAgICAgfQogICAgIHJldHVybiBtRHJtTWFuYWdlci0+Y2xvc2VEZWNyeXB0U2Vzc2lvbih1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZSk7CkBAIC0yNDYsNyArMzA0LDcgQEAKIHN0YXR1c190IERybU1hbmFnZXJTZXJ2aWNlOjppbml0aWFsaXplRGVjcnlwdFVuaXQoaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLAogICAgICAgICAgICAgaW50IGRlY3J5cHRVbml0SWQsIGNvbnN0IERybUJ1ZmZlciogaGVhZGVySW5mbykgewogICAgIEFMT0dWKCJFbnRlcmluZyBpbml0aWFsaXplRGVjcnlwdFVuaXQiKTsKLSAgICBpZiAoIWlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoKSkgeworICAgIGlmICghaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZChJTklUSUFMSVpFX0RFQ1JZUFRfVU5JVCkpIHsKICAgICAgICAgcmV0dXJuIERSTV9FUlJPUl9OT19QRVJNSVNTSU9OOwogICAgIH0KICAgICByZXR1cm4gbURybU1hbmFnZXItPmluaXRpYWxpemVEZWNyeXB0VW5pdCh1bmlxdWVJZCxkZWNyeXB0SGFuZGxlLCBkZWNyeXB0VW5pdElkLCBoZWFkZXJJbmZvKTsKQEAgLTI1Niw3ICszMTQsNyBAQAogICAgICAgICAgICAgaW50IHVuaXF1ZUlkLCBEZWNyeXB0SGFuZGxlKiBkZWNyeXB0SGFuZGxlLCBpbnQgZGVjcnlwdFVuaXRJZCwKICAgICAgICAgICAgIGNvbnN0IERybUJ1ZmZlciogZW5jQnVmZmVyLCBEcm1CdWZmZXIqKiBkZWNCdWZmZXIsIERybUJ1ZmZlciogSVYpIHsKICAgICBBTE9HVigiRW50ZXJpbmcgZGVjcnlwdCIpOwotICAgIGlmICghaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZCgpKSB7CisgICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKERFQ1JZUFQpKSB7CiAgICAgICAgIHJldHVybiBEUk1fRVJST1JfTk9fUEVSTUlTU0lPTjsKICAgICB9CiAgICAgcmV0dXJuIG1Ecm1NYW5hZ2VyLT5kZWNyeXB0KHVuaXF1ZUlkLCBkZWNyeXB0SGFuZGxlLCBkZWNyeXB0VW5pdElkLCBlbmNCdWZmZXIsIGRlY0J1ZmZlciwgSVYpOwpAQCAtMjY1LDcgKzMyMyw3IEBACiBzdGF0dXNfdCBEcm1NYW5hZ2VyU2VydmljZTo6ZmluYWxpemVEZWNyeXB0VW5pdCgKICAgICAgICAgICAgIGludCB1bmlxdWVJZCwgRGVjcnlwdEhhbmRsZSogZGVjcnlwdEhhbmRsZSwgaW50IGRlY3J5cHRVbml0SWQpIHsKICAgICBBTE9HVigiRW50ZXJpbmcgZmluYWxpemVEZWNyeXB0VW5pdCIpOwotICAgIGlmICghaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZCgpKSB7CisgICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKEZJTkFMSVpFX0RFQ1JZUFRfVU5JVCkpIHsKICAgICAgICAgcmV0dXJuIERSTV9FUlJPUl9OT19QRVJNSVNTSU9OOwogICAgIH0KICAgICByZXR1cm4gbURybU1hbmFnZXItPmZpbmFsaXplRGVjcnlwdFVuaXQodW5pcXVlSWQsIGRlY3J5cHRIYW5kbGUsIGRlY3J5cHRVbml0SWQpOwpAQCAtMjc0LDcgKzMzMiw3IEBACiBzc2l6ZV90IERybU1hbmFnZXJTZXJ2aWNlOjpwcmVhZChpbnQgdW5pcXVlSWQsIERlY3J5cHRIYW5kbGUqIGRlY3J5cHRIYW5kbGUsCiAgICAgICAgICAgICB2b2lkKiBidWZmZXIsIHNzaXplX3QgbnVtQnl0ZXMsIG9mZjY0X3Qgb2Zmc2V0KSB7CiAgICAgQUxPR1YoIkVudGVyaW5nIHByZWFkIik7Ci0gICAgaWYgKCFpc1Byb3RlY3RlZENhbGxBbGxvd2VkKCkpIHsKKyAgICBpZiAoIWlzUHJvdGVjdGVkQ2FsbEFsbG93ZWQoUFJFQUQpKSB7CiAgICAgICAgIHJldHVybiBEUk1fRVJST1JfTk9fUEVSTUlTU0lPTjsKICAgICB9CiAgICAgcmV0dXJuIG1Ecm1NYW5hZ2VyLT5wcmVhZCh1bmlxdWVJZCwgZGVjcnlwdEhhbmRsZSwgYnVmZmVyLCBudW1CeXRlcywgb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RybS9saWJkcm1mcmFtZXdvcmsvRHJtTWFuYWdlckNsaWVudEltcGwuY3BwIGIvZHJtL2xpYmRybWZyYW1ld29yay9Ecm1NYW5hZ2VyQ2xpZW50SW1wbC5jcHAKaW5kZXggMmQyYzkwZS4uOTQ1N2JiNiAxMDA2NDQKLS0tIGEvZHJtL2xpYmRybWZyYW1ld29yay9Ecm1NYW5hZ2VyQ2xpZW50SW1wbC5jcHAKKysrIGIvZHJtL2xpYmRybWZyYW1ld29yay9Ecm1NYW5hZ2VyQ2xpZW50SW1wbC5jcHAKQEAgLTM0Niw3ICszNDYsNyBAQAogRHJtTWFuYWdlckNsaWVudEltcGw6OkRlYXRoTm90aWZpZXI6On5EZWF0aE5vdGlmaWVyKCkgewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKHNNdXRleCk7CiAgICAgaWYgKE5VTEwgIT0gc0RybU1hbmFnZXJTZXJ2aWNlLmdldCgpKSB7Ci0gICAgICAgIHNEcm1NYW5hZ2VyU2VydmljZS0+YXNCaW5kZXIoKS0+dW5saW5rVG9EZWF0aCh0aGlzKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIoc0RybU1hbmFnZXJTZXJ2aWNlKS0+dW5saW5rVG9EZWF0aCh0aGlzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL2RybS9saWJkcm1mcmFtZXdvcmsvaW5jbHVkZS9Ecm1NYW5hZ2VyU2VydmljZS5oIGIvZHJtL2xpYmRybWZyYW1ld29yay9pbmNsdWRlL0RybU1hbmFnZXJTZXJ2aWNlLmgKaW5kZXggOGJjNTliNC4uNDVjZWUyZSAxMDA2NDQKLS0tIGEvZHJtL2xpYmRybWZyYW1ld29yay9pbmNsdWRlL0RybU1hbmFnZXJTZXJ2aWNlLmgKKysrIGIvZHJtL2xpYmRybWZyYW1ld29yay9pbmNsdWRlL0RybU1hbmFnZXJTZXJ2aWNlLmgKQEAgLTQyLDkgKzQyLDI4IEBACiAgICAgc3RhdGljIHZvaWQgaW5zdGFudGlhdGUoKTsKIAogcHJpdmF0ZToKKyAgICBlbnVtIGRybV9wZXJtX3QgeworICAgICAgICBDT05TVU1FX1JJR0hUUyAgICAgICAgICA9IDAsCisgICAgICAgIFNFVF9QTEFZQkFDS19TVEFUVVMgICAgID0gMSwKKyAgICAgICAgT1BFTl9ERUNSWVBUX1NFU1NJT04gICAgPSAyLAorICAgICAgICBDTE9TRV9ERUNSWVBUX1NFU1NJT04gICA9IDMsCisgICAgICAgIElOSVRJQUxJWkVfREVDUllQVF9VTklUID0gNCwKKyAgICAgICAgREVDUllQVCAgICAgICAgICAgICAgICAgPSA1LAorICAgICAgICBGSU5BTElaRV9ERUNSWVBUX1VOSVQgICA9IDYsCisgICAgICAgIFBSRUFEICAgICAgICAgICAgICAgICAgID0gNywKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGRybV9wZXJtX2xhYmVsc1tdOworCiAgICAgRHJtTWFuYWdlclNlcnZpY2UoKTsKICAgICB2aXJ0dWFsIH5Ecm1NYW5hZ2VyU2VydmljZSgpOwogCisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmdldF9wZXJtX2xhYmVsKGRybV9wZXJtX3QgcGVybSk7CisKKyAgICBzdGF0aWMgYm9vbCBzZWxpbnV4SXNQcm90ZWN0ZWRDYWxsQWxsb3dlZChwaWRfdCBzcGlkLCBkcm1fcGVybV90IHBlcm0pOworCisgICAgc3RhdGljIGJvb2wgaXNQcm90ZWN0ZWRDYWxsQWxsb3dlZChkcm1fcGVybV90IHBlcm0pOworCiBwdWJsaWM6CiAgICAgaW50IGFkZFVuaXF1ZUlkKGJvb2wgaXNOYXRpdmUpOwogCmRpZmYgLS1naXQgYS9kcm0vbGliZHJtZnJhbWV3b3JrL2luY2x1ZGUvUGx1Z0luTWFuYWdlci5oIGIvZHJtL2xpYmRybWZyYW1ld29yay9pbmNsdWRlL1BsdWdJbk1hbmFnZXIuaAppbmRleCBjMWQwMTlhLi40NjY4NDRkIDEwMDY0NAotLS0gYS9kcm0vbGliZHJtZnJhbWV3b3JrL2luY2x1ZGUvUGx1Z0luTWFuYWdlci5oCisrKyBiL2RybS9saWJkcm1mcmFtZXdvcmsvaW5jbHVkZS9QbHVnSW5NYW5hZ2VyLmgKQEAgLTIzNCwxNCArMjM0LDYgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiBUcnVlIGlmIHRoZSBpbnB1dCBlbnRyeSBpcyAiLiIgb3IgIi4uIgotICAgICAqLwotICAgIGJvb2wgaXNEb3RPckREb3QoY29uc3Qgc3RydWN0IGRpcmVudCogcEVudHJ5KSBjb25zdCB7Ci0gICAgICAgIFN0cmluZzggc05hbWUocEVudHJ5LT5kX25hbWUpOwotICAgICAgICByZXR1cm4gIi4iID09IHNOYW1lIHx8ICIuLiIgPT0gc05hbWU7Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogVHJ1ZSBpZiBpbnB1dCBlbnRyeSBpcyBkaXJlY3RvcnkKICAgICAgKi8KICAgICBib29sIGlzRGlyZWN0b3J5KGNvbnN0IHN0cnVjdCBkaXJlbnQqIHBFbnRyeSkgY29uc3QgewpkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvQW5kcm9pZC5tayBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L0FuZHJvaWQubWsKaW5kZXggMjJhODViNC4uYjcxM2E3ZiAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvQW5kcm9pZC5taworKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS9BbmRyb2lkLm1rCkBAIC0zMSw3ICszMSw2IEBACiAgICAgVXRpbHMuY3BwIFwKIAogTE9DQUxfQ19JTkNMVURFUyA6PSBcCi0gICAgYmlvbmljIFwKICAgICBleHRlcm5hbC9qc21uIFwKICAgICBleHRlcm5hbC9vcGVuc3NsL2luY2x1ZGUgXAogICAgIGZyYW1ld29ya3MvYXYvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkgXApkaWZmIC0tZ2l0IGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvdGVzdHMvQW5kcm9pZC5tayBiL2RybS9tZWRpYWRybS9wbHVnaW5zL2NsZWFya2V5L3Rlc3RzL0FuZHJvaWQubWsKaW5kZXggYWM1YmIyMS4uODBmOTRlMCAxMDA2NDQKLS0tIGEvZHJtL21lZGlhZHJtL3BsdWdpbnMvY2xlYXJrZXkvdGVzdHMvQW5kcm9pZC5taworKysgYi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleS90ZXN0cy9BbmRyb2lkLm1rCkBAIC0yOCwyNSArMjgsMTcgQEAKICAgICBKc29uV2ViS2V5VW5pdHRlc3QuY3BwIFwKIAogTE9DQUxfQ19JTkNMVURFUyA6PSBcCi0gICAgYmlvbmljIFwKLSAgICBleHRlcm5hbC9ndGVzdC9pbmNsdWRlIFwKICAgICBleHRlcm5hbC9qc21uIFwKICAgICBleHRlcm5hbC9vcGVuc3NsL2luY2x1ZGUgXAotICAgIGV4dGVybmFsL3N0bHBvcnQvc3RscG9ydCBcCiAgICAgZnJhbWV3b3Jrcy9hdi9kcm0vbWVkaWFkcm0vcGx1Z2lucy9jbGVhcmtleSBcCiAgICAgZnJhbWV3b3Jrcy9hdi9pbmNsdWRlIFwKICAgICBmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlIFwKIAotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0gICAgbGliZ3Rlc3QgXAotICAgIGxpYmd0ZXN0X21haW4gXAotCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKICAgICBsaWJjcnlwdG8gXAogICAgIGxpYmRybWNsZWFya2V5cGx1Z2luIFwKICAgICBsaWJsb2cgXAogICAgIGxpYnN0YWdlZnJpZ2h0X2ZvdW5kYXRpb24gXAotICAgIGxpYnN0bHBvcnQgXAogICAgIGxpYnV0aWxzIFwKIAogaW5jbHVkZSAkKEJVSUxEX05BVElWRV9URVNUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9KZXRQbGF5ZXIuaCBiL2luY2x1ZGUvbWVkaWEvSmV0UGxheWVyLmgKaW5kZXggMzg4Zjc2Ny4uNjNkMTk4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9KZXRQbGF5ZXIuaAorKysgYi9pbmNsdWRlL21lZGlhL0pldFBsYXllci5oCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGlic29uaXZveC9qZXQuaD4KICNpbmNsdWRlIDxsaWJzb25pdm94L2Vhc190eXBlcy5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvVHJhY2suaD4KKyNpbmNsdWRlIDxtZWRpYS9NaWRpSW9XcmFwcGVyLmg+CiAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewpAQCAtODYsMTUgKzg3LDEzIEBACiAKICAgICBpbnQgICAgICAgICAgICAgICAgIG1NYXhUcmFja3M7IC8vIG1heCBudW1iZXIgb2YgTUlESSB0cmFja3MsIHVzdWFsbHkgMzIKICAgICBFQVNfREFUQV9IQU5ETEUgICAgIG1FYXNEYXRhOwotICAgIEVBU19GSUxFX0xPQ0FUT1IgICAgbUVhc0pldEZpbGVMb2M7CisgICAgc3A8TWlkaUlvV3JhcHBlcj4gICBtSW9XcmFwcGVyOwogICAgIEVBU19QQ00qICAgICAgICAgICAgbUF1ZGlvQnVmZmVyOy8vIEVBUyByZW5kZXJzIHRoZSBNSURJIGRhdGEgaW50byB0aGlzIGJ1ZmZlciwKICAgICBzcDxBdWRpb1RyYWNrPiAgICAgIG1BdWRpb1RyYWNrOyAvLyBhbmQgd2UgcGxheSBpdCBpbiB0aGlzIGF1ZGlvIHRyYWNrCiAgICAgaW50ICAgICAgICAgICAgICAgICBtVHJhY2tCdWZmZXJTaXplOwogICAgIFNfSkVUX1NUQVRVUyAgICAgICAgbUpldFN0YXR1czsKICAgICBTX0pFVF9TVEFUVVMgICAgICAgIG1QcmV2aW91c0pldFN0YXR1czsKIAotICAgIGNoYXIgICAgICAgICAgICAgICAgbUpldEZpbGVQYXRoW1BBVEhfTUFYXTsKLQogICAgIGNsYXNzIEpldFBsYXllclRocmVhZCA6IHB1YmxpYyBUaHJlYWQgewogICAgIHB1YmxpYzoKICAgICAgICAgSmV0UGxheWVyVGhyZWFkKEpldFBsYXllciAqcGxheWVyKSA6IG1QbGF5ZXIocGxheWVyKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL01lZGlhUGxheWVySW50ZXJmYWNlLmggYi9pbmNsdWRlL21lZGlhL01lZGlhUGxheWVySW50ZXJmYWNlLmgKaW5kZXggYzQxMjI5OS4uMGZjN2RjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9NZWRpYVBsYXllckludGVyZmFjZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvTWVkaWFQbGF5ZXJJbnRlcmZhY2UuaApAQCAtNDMsOCArNDMsNiBAQAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgU29ydGVkVmVjdG9yOwogCiBlbnVtIHBsYXllcl90eXBlIHsKLSAgICBQVl9QTEFZRVIgPSAxLAotICAgIFNPTklWT1hfUExBWUVSID0gMiwKICAgICBTVEFHRUZSSUdIVF9QTEFZRVIgPSAzLAogICAgIE5VX1BMQVlFUiA9IDQsCiAgICAgLy8gVGVzdCBwbGF5ZXJzIGFyZSBhdmFpbGFibGUgb25seSBpbiB0aGUgJ3Rlc3QnIGFuZCAnZW5nJyBidWlsZHMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL01pZGlJb1dyYXBwZXIuaCBiL2luY2x1ZGUvbWVkaWEvTWlkaUlvV3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZjhjZjcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL21lZGlhL01pZGlJb1dyYXBwZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBNSURJX0lPX1dSQVBQRVJfSF8KKyNkZWZpbmUgTUlESV9JT19XUkFQUEVSX0hfCisKKyNpbmNsdWRlIDxsaWJzb25pdm94L2Vhc190eXBlcy5oPgorCisjaW5jbHVkZSAibWVkaWEvc3RhZ2VmcmlnaHQvRGF0YVNvdXJjZS5oIgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIE1pZGlJb1dyYXBwZXIgOiBwdWJsaWMgUmVmQmFzZSB7CitwdWJsaWM6CisgICAgTWlkaUlvV3JhcHBlcihjb25zdCBjaGFyICpwYXRoKTsKKyAgICBNaWRpSW9XcmFwcGVyKGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIGludDY0X3Qgc2l6ZSk7CisgICAgTWlkaUlvV3JhcHBlcihjb25zdCBzcDxEYXRhU291cmNlPiAmc291cmNlKTsKKworICAgIH5NaWRpSW9XcmFwcGVyKCk7CisKKyAgICBpbnQgcmVhZEF0KHZvaWQgKmJ1ZmZlciwgaW50IG9mZnNldCwgaW50IHNpemUpOworICAgIGludCBzaXplKCk7CisKKyAgICBFQVNfRklMRV9MT0NBVE9SIGdldExvY2F0b3IoKTsKKworcHJpdmF0ZToKKyAgICBpbnQgbUZkOworICAgIG9mZjY0X3QgbUJhc2U7CisgICAgaW50NjRfdCAgbUxlbmd0aDsKKyAgICBzcDxEYXRhU291cmNlPiBtRGF0YVNvdXJjZTsKKyAgICBFQVNfRklMRSBtRWFzRmlsZTsKK307CisKKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKKworI2VuZGlmIC8vIE1JRElfSU9fV1JBUFBFUl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9Ub25lR2VuZXJhdG9yLmggYi9pbmNsdWRlL21lZGlhL1RvbmVHZW5lcmF0b3IuaAppbmRleCA5OGM0MzMyLi44NDA2ZWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL1RvbmVHZW5lcmF0b3IuaAorKysgYi9pbmNsdWRlL21lZGlhL1RvbmVHZW5lcmF0b3IuaApAQCAtMTcsMTEgKzE3LDEyIEBACiAjaWZuZGVmIEFORFJPSURfVE9ORUdFTkVSQVRPUl9IXwogI2RlZmluZSBBTkRST0lEX1RPTkVHRU5FUkFUT1JfSF8KIAotI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KLSNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgotI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1N5c3RlbS5oPgogI2luY2x1ZGUgPG1lZGlhL0F1ZGlvVHJhY2suaD4KKyNpbmNsdWRlIDx1dGlscy9Db21wYXQuaD4KKyNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKyNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+CiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIApAQCAtMjA3LDcgKzIwOCw3IEBACiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUT05FR0VOX01BWF9XQVZFUyA9IDM7ICAgICAvLyBNYXhpbXVuIG51bWJlciBvZiBzaW5lIHdhdmVzIGluIGEgdG9uZSBzZWdtZW50CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBUT05FR0VOX01BWF9TRUdNRU5UUyA9IDEyOyAgLy8gTWF4aW11biBudW1iZXIgb2Ygc2VnbWVudHMgaW4gYSB0b25lIGRlc2NyaXB0b3IKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFRPTkVHRU5fSU5GID0gMHhGRkZGRkZGRjsgIC8vIFJlcHJlc2VudHMgaW5maW5pdGUgdGltZSBkdXJhdGlvbgotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBUT05FR0VOX0dBSU4gPSAwLjk7ICAvLyBEZWZhdWx0IGdhaW4gcGFzc2VkIHRvICBXYXZlR2VuZXJhdG9yKCkuCisgICAgc3RhdGljIGNvbnN0IENPTlNURVhQUiBmbG9hdCBUT05FR0VOX0dBSU4gPSAwLjk7ICAvLyBEZWZhdWx0IGdhaW4gcGFzc2VkIHRvICBXYXZlR2VuZXJhdG9yKCkuCiAKICAgICAvLyBUb25lRGVzY3JpcHRvciBjbGFzcyBjb250YWlucyBhbGwgcGFyYW1ldGVycyBuZWVkZWQgdG8gZ2VuZXJhdGUgYSB0b25lOgogICAgIC8vICAgIC0gVGhlIGFycmF5IHdhdmVGcmVxW106CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FBQ1dyaXRlci5oIGIvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9BQUNXcml0ZXIuaAppbmRleCBkZjFiMDUzLi5kMjI3MDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0FBQ1dyaXRlci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQUFDV3JpdGVyLmgKQEAgLTE3LDYgKzE3LDcgQEAKICNpZm5kZWYgQUFDX1dSSVRFUl9IXwogI2RlZmluZSBBQUNfV1JJVEVSX0hfCiAKKyNpbmNsdWRlICJmb3VuZGF0aW9uL0FCYXNlLmgiCiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFXcml0ZXIuaD4KICNpbmNsdWRlIDx1dGlscy90aHJlYWRzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ2xvY2tFc3RpbWF0b3IuaCBiL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvQ2xvY2tFc3RpbWF0b3IuaAppbmRleCAyZmQ2ZTc1Li4xNDU1YjdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L0Nsb2NrRXN0aW1hdG9yLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9DbG9ja0VzdGltYXRvci5oCkBAIC0xOSw3ICsxOSw3IEBACiAKICNkZWZpbmUgQ0xPQ0tfRVNUSU1BVE9SX0hfCiAKLQorI2luY2x1ZGUgImZvdW5kYXRpb24vQUJhc2UuaCIKICNpbmNsdWRlIDx1dGlscy9SZWZCYXNlLmg+CiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmggYi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRGVmcy5oCmluZGV4IDEzNjk1ZDUuLmEwMDM2ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaApAQCAtMzYsNiArMzYsNyBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX01QRUc7ICAgICAgICAgICAvLyBsYXllciBJSUkKIGV4dGVybiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19NUEVHX0xBWUVSX0k7CiBleHRlcm4gY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fTVBFR19MQVlFUl9JSTsKK2V4dGVybiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19NSURJOwogZXh0ZXJuIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX0FBQzsKIGV4dGVybiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19RQ0VMUDsKIGV4dGVybiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19WT1JCSVM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L01lZGlhTXV4ZXIuaCBiL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFNdXhlci5oCmluZGV4IGJiZTQzMDMuLjlkYTk4ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFNdXhlci5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFNdXhlci5oCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8dXRpbHMvVmVjdG9yLmg+CiAjaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgogCisjaW5jbHVkZSAiZm91bmRhdGlvbi9BQmFzZS5oIgorCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHN0cnVjdCBBQnVmZmVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9TdXJmYWNlTWVkaWFTb3VyY2UuaCBiL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvU3VyZmFjZU1lZGlhU291cmNlLmgKaW5kZXggZDE1YTIyNi4uMjE3N2MwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9TdXJmYWNlTWVkaWFTb3VyY2UuaAorKysgYi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L1N1cmZhY2VNZWRpYVNvdXJjZS5oCkBAIC0yNSw2ICsyNSw4IEBACiAjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFTb3VyY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlci5oPgogCisjaW5jbHVkZSAiZm91bmRhdGlvbi9BQmFzZS5oIgorCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzMyw3ICsyMzUsNyBAQAogICAgIENvbmRpdGlvbiBtTWVkaWFCdWZmZXJzQXZhaWxhYmxlQ29uZGl0aW9uOwogCiAgICAgLy8gQXZvaWQgY29weWluZyBhbmQgZXF1YXRpbmcgYW5kIGRlZmF1bHQgY29uc3RydWN0b3IKLSAgICBESVNBTExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoU3VyZmFjZU1lZGlhU291cmNlKTsKKyAgICBESVNBTExPV19FVklMX0NPTlNUUlVDVE9SUyhTdXJmYWNlTWVkaWFTb3VyY2UpOwogfTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FTdHJpbmcuaCBiL2luY2x1ZGUvbWVkaWEvc3RhZ2VmcmlnaHQvZm91bmRhdGlvbi9BU3RyaW5nLmgKaW5kZXggN2M5ODY5OS4uYzNhNjhlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FTdHJpbmcuaAorKysgYi9pbmNsdWRlL21lZGlhL3N0YWdlZnJpZ2h0L2ZvdW5kYXRpb24vQVN0cmluZy5oCkBAIC0yMyw3ICsyMyw3IEBACiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotc3RydWN0IFN0cmluZzg7CitjbGFzcyBTdHJpbmc4Owogc3RydWN0IFBhcmNlbDsKIAogc3RydWN0IEFTdHJpbmcgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZGsvTmRrTWVkaWFEcm0uaCBiL2luY2x1ZGUvbmRrL05ka01lZGlhRHJtLmgKaW5kZXggMTBhZmRkOS4uM2MzMTJhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZGsvTmRrTWVkaWFEcm0uaAorKysgYi9pbmNsdWRlL25kay9OZGtNZWRpYURybS5oCkBAIC0zMjcsMjQgKzMyNywyNCBAQAogLyoqCiAgKiBTdHJpbmcgcHJvcGVydHkgbmFtZTogaWRlbnRpZmllcyB0aGUgbWFrZXIgb2YgdGhlIERSTSBlbmdpbmUgcGx1Z2luCiAgKi8KLWNvbnN0IGNoYXIgKlBST1BFUlRZX1ZFTkRPUiA9ICJ2ZW5kb3IiOworI2RlZmluZSBQUk9QRVJUWV9WRU5ET1IgInZlbmRvciIKIAogLyoqCiAgKiBTdHJpbmcgcHJvcGVydHkgbmFtZTogaWRlbnRpZmllcyB0aGUgdmVyc2lvbiBvZiB0aGUgRFJNIGVuZ2luZSBwbHVnaW4KICAqLwotY29uc3QgY2hhciAqUFJPUEVSVFlfVkVSU0lPTiA9ICJ2ZXJzaW9uIjsKKyNkZWZpbmUgUFJPUEVSVFlfVkVSU0lPTiAidmVyc2lvbiIKIAogLyoqCiAgKiBTdHJpbmcgcHJvcGVydHkgbmFtZTogZGVzY3JpYmVzIHRoZSBEUk0gZW5naW5lIHBsdWdpbgogICovCi1jb25zdCBjaGFyICpQUk9QRVJUWV9ERVNDUklQVElPTiA9ICJkZXNjcmlwdGlvbiI7CisjZGVmaW5lIFBST1BFUlRZX0RFU0NSSVBUSU9OICJkZXNjcmlwdGlvbiIKIAogLyoqCiAgKiBTdHJpbmcgcHJvcGVydHkgbmFtZTogYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBjaXBoZXIgYW5kIG1hYyBhbGdvcml0aG1zCiAgKiBzdXBwb3J0ZWQgYnkgQ3J5cHRvU2Vzc2lvbi4gIFRoZSBsaXN0IG1heSBiZSBlbXB0eSBpZiB0aGUgRFJNIGVuZ2luZQogICogcGx1Z2luIGRvZXMgbm90IHN1cHBvcnQgQ3J5cHRvU2Vzc2lvbiBvcGVyYXRpb25zLgogICovCi1jb25zdCBjaGFyICpQUk9QRVJUWV9BTEdPUklUSE1TID0gImFsZ29yaXRobXMiOworI2RlZmluZSBQUk9QRVJUWV9BTEdPUklUSE1TICJhbGdvcml0aG1zIgogCiAvKioKICAqIFJlYWQgYSBEUk0gZW5naW5lIHBsdWdpbiBTdHJpbmcgcHJvcGVydHkgdmFsdWUsIGdpdmVuIHRoZSBwcm9wZXJ0eSBuYW1lIHN0cmluZy4KQEAgLTM2MSw3ICszNjEsNyBAQAogICogQnl0ZSBhcnJheSBwcm9wZXJ0eSBuYW1lOiB0aGUgZGV2aWNlIHVuaXF1ZSBpZGVudGlmaWVyIGlzIGVzdGFibGlzaGVkIGR1cmluZwogICogZGV2aWNlIHByb3Zpc2lvbmluZyBhbmQgcHJvdmlkZXMgYSBtZWFucyBvZiB1bmlxdWVseSBpZGVudGlmeWluZyBlYWNoIGRldmljZS4KICAqLwotY29uc3QgY2hhciAqUFJPUEVSVFlfREVWSUNFX1VOSVFVRV9JRCA9ICJkZXZpY2VVbmlxdWVJZCI7CisjZGVmaW5lIFBST1BFUlRZX0RFVklDRV9VTklRVUVfSUQgImRldmljZVVuaXF1ZUlkIgogCiAvKioKICAqIFJlYWQgYSBEUk0gZW5naW5lIHBsdWdpbiBieXRlIGFycmF5IHByb3BlcnR5IHZhbHVlLCBnaXZlbiB0aGUgcHJvcGVydHkgbmFtZSBzdHJpbmcuCmRpZmYgLS1naXQgYS9tZWRpYS9jb21tb25fdGltZS9JQ29tbW9uQ2xvY2suY3BwIGIvbWVkaWEvY29tbW9uX3RpbWUvSUNvbW1vbkNsb2NrLmNwcAppbmRleCAyNWFlNjllLi4xOWI3ZDZlIDEwMDY0NAotLS0gYS9tZWRpYS9jb21tb25fdGltZS9JQ29tbW9uQ2xvY2suY3BwCisrKyBiL21lZGlhL2NvbW1vbl90aW1lL0lDb21tb25DbG9jay5jcHAKQEAgLTIwNiw3ICsyMDYsNyBAQAogICAgICAgICAgICAgY29uc3Qgc3A8SUNvbW1vbkNsb2NrTGlzdGVuZXI+JiBsaXN0ZW5lcikgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQ29tbW9uQ2xvY2s6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIobGlzdGVuZXItPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGxpc3RlbmVyKSk7CiAKICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVtb3RlKCktPnRyYW5zYWN0KFJFR0lTVEVSX0xJU1RFTkVSLCBkYXRhLCAmcmVwbHkpOwogCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgICAgICAgICAgIGNvbnN0IHNwPElDb21tb25DbG9ja0xpc3RlbmVyPiYgbGlzdGVuZXIpIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUNvbW1vbkNsb2NrOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGxpc3RlbmVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihsaXN0ZW5lcikpOwogICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoVU5SRUdJU1RFUl9MSVNURU5FUiwgZGF0YSwgJnJlcGx5KTsKIAogICAgICAgICBpZiAoc3RhdHVzID09IE9LKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9pbWdfdXRpbHMvaW5jbHVkZS9pbWdfdXRpbHMvVGlmZkVudHJ5SW1wbC5oIGIvbWVkaWEvaW1nX3V0aWxzL2luY2x1ZGUvaW1nX3V0aWxzL1RpZmZFbnRyeUltcGwuaAppbmRleCBmNWNjYjVlLi5jNzNlMjMxIDEwMDY0NAotLS0gYS9tZWRpYS9pbWdfdXRpbHMvaW5jbHVkZS9pbWdfdXRpbHMvVGlmZkVudHJ5SW1wbC5oCisrKyBiL21lZGlhL2ltZ191dGlscy9pbmNsdWRlL2ltZ191dGlscy9UaWZmRW50cnlJbXBsLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdHVzX3QgVGlmZkVudHJ5SW1wbDxUPjo6d3JpdGVEYXRhKHVpbnQzMl90IG9mZnNldCwgRW5kaWFuT3V0cHV0KiBvdXQpIGNvbnN0IHsKK3N0YXR1c190IFRpZmZFbnRyeUltcGw8VD46OndyaXRlRGF0YSh1aW50MzJfdCAvKm9mZnNldCovLCBFbmRpYW5PdXRwdXQqIG91dCkgY29uc3QgewogICAgIHN0YXR1c190IHJldCA9IE9LOwogCiAgICAgLy8gU29tZSB0YWdzIGhhdmUgZml4ZWQtZW5kaWFuIHZhbHVlIG91dHB1dApkaWZmIC0tZ2l0IGEvbWVkaWEvaW1nX3V0aWxzL3NyYy9GaWxlSW5wdXQuY3BwIGIvbWVkaWEvaW1nX3V0aWxzL3NyYy9GaWxlSW5wdXQuY3BwCmluZGV4IDQ5OGU3MTUuLjRjODVhNTEgMTAwNjQ0Ci0tLSBhL21lZGlhL2ltZ191dGlscy9zcmMvRmlsZUlucHV0LmNwcAorKysgYi9tZWRpYS9pbWdfdXRpbHMvc3JjL0ZpbGVJbnB1dC5jcHAKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcmV0ID0gQkFEX1ZBTFVFOwogICAgIH0KICAgICBtT3BlbiA9IGZhbHNlOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gcmV0OwogfQogCiB9IC8qbmFtZXNwYWNlIGltZ191dGlscyovCmRpZmYgLS1naXQgYS9tZWRpYS9pbWdfdXRpbHMvc3JjL0ZpbGVPdXRwdXQuY3BwIGIvbWVkaWEvaW1nX3V0aWxzL3NyYy9GaWxlT3V0cHV0LmNwcAppbmRleCBjZTc2M2ZmLi4wMzQ2NzYyIDEwMDY0NAotLS0gYS9tZWRpYS9pbWdfdXRpbHMvc3JjL0ZpbGVPdXRwdXQuY3BwCisrKyBiL21lZGlhL2ltZ191dGlscy9zcmMvRmlsZU91dHB1dC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAgICAgcmV0ID0gQkFEX1ZBTFVFOwogICAgIH0KICAgICBtT3BlbiA9IGZhbHNlOwotICAgIHJldHVybiBPSzsKKyAgICByZXR1cm4gcmV0OwogfQogCiB9IC8qbmFtZXNwYWNlIGltZ191dGlscyovCmRpZmYgLS1naXQgYS9tZWRpYS9pbWdfdXRpbHMvc3JjL1RpZmZXcml0ZXIuY3BwIGIvbWVkaWEvaW1nX3V0aWxzL3NyYy9UaWZmV3JpdGVyLmNwcAppbmRleCBhYzQxNzM0Li5hNmY5MjE4IDEwMDY0NAotLS0gYS9tZWRpYS9pbWdfdXRpbHMvc3JjL1RpZmZXcml0ZXIuY3BwCisrKyBiL21lZGlhL2ltZ191dGlscy9zcmMvVGlmZldyaXRlci5jcHAKQEAgLTEwNiw3ICsxMDYsNiBAQAogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvZmZWZWNTaXplOyArK2kpIHsKICAgICAgICAgdWludDMyX3QgaWZkS2V5ID0gb2Zmc2V0VmVjdG9yLmtleUF0KGkpOwotICAgICAgICB1aW50MzJfdCBuZXh0T2Zmc2V0ID0gb2Zmc2V0VmVjdG9yW2ldOwogICAgICAgICB1aW50MzJfdCBzaXplVG9Xcml0ZSA9IG1OYW1lZElmZHNbaWZkS2V5XS0+Z2V0U3RyaXBTaXplKCk7CiAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBzb3VyY2VzQ291bnQ7ICsraikgewpAQCAtMTI0LDcgKzEyMyw3IEBACiAgICAgICAgICAgICBBTE9HRSgiJXM6IE5vIHN0cmVhbSBmb3IgYnl0ZSBzdHJpcHMgZm9yIElGRCAldSIsIF9fRlVOQ1RJT05fXywgaWZkS2V5KTsKICAgICAgICAgICAgIHJldHVybiBCQURfVkFMVUU7CiAgICAgICAgIH0KLSAgICAgICAgYXNzZXJ0KG5leHRPZmZzZXQgPT0gZW5kT3V0LmdldEN1cnJlbnRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydChvZmZzZXRWZWN0b3JbaV0gPT0gZW5kT3V0LmdldEN1cnJlbnRPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYmNwdXN0YXRzL1RocmVhZENwdVVzYWdlLmNwcCBiL21lZGlhL2xpYmNwdXN0YXRzL1RocmVhZENwdVVzYWdlLmNwcAppbmRleCBjZmRjYjUxLi43YjViNjYxIDEwMDY0NAotLS0gYS9tZWRpYS9saWJjcHVzdGF0cy9UaHJlYWRDcHVVc2FnZS5jcHAKKysrIGIvbWVkaWEvbGliY3B1c3RhdHMvVGhyZWFkQ3B1VXNhZ2UuY3BwCkBAIC03NCw3ICs3NCw2IEBACiAKIGJvb2wgVGhyZWFkQ3B1VXNhZ2U6OnNhbXBsZUFuZEVuYWJsZShkb3VibGUmIG5zKQogewotICAgIGJvb2wgcmV0OwogICAgIGJvb2wgd2FzRXZlckVuYWJsZWQgPSBtV2FzRXZlckVuYWJsZWQ7CiAgICAgaWYgKGVuYWJsZSgpKSB7CiAgICAgICAgIC8vIGFscmVhZHkgZW5hYmxlZCwgc28gYWRkIGEgbmV3IHNhbXBsZSByZWxhdGl2ZSB0byBwcmV2aW91cwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGliZWZmZWN0cy9sb3VkbmVzcy9BbmRyb2lkLm1rIGIvbWVkaWEvbGliZWZmZWN0cy9sb3VkbmVzcy9BbmRyb2lkLm1rCmluZGV4IGVkZjk2NGUuLjU1ZDA2MTEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYmVmZmVjdHMvbG91ZG5lc3MvQW5kcm9pZC5taworKysgYi9tZWRpYS9saWJlZmZlY3RzL2xvdWRuZXNzL0FuZHJvaWQubWsKQEAgLTEyLDE2ICsxMiwxMSBAQAogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCiAJbGliY3V0aWxzIFwKIAlsaWJsb2cgXAotCWxpYnN0bHBvcnQKIAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gc291bmRmeAogTE9DQUxfTU9EVUxFOj0gbGlibGRuaG5jcgogCiBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKIAkkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tZWZmZWN0cykgXAotCWJpb25pYyBcCi0JYmlvbmljL2xpYnN0ZGMrKy9pbmNsdWRlIFwKLQlleHRlcm5hbC9zdGxwb3J0L3N0bHBvcnQKLQogCiBpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9tZWRpYS9saWJlZmZlY3RzL3Byb3h5L0FuZHJvaWQubWsgYi9tZWRpYS9saWJlZmZlY3RzL3Byb3h5L0FuZHJvaWQubWsKaW5kZXggYjQzODc5Ni4uMmJhNDUyZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGliZWZmZWN0cy9wcm94eS9BbmRyb2lkLm1rCisrKyBiL21lZGlhL2xpYmVmZmVjdHMvcHJveHkvQW5kcm9pZC5tawpAQCAtMjgsNyArMjgsNiBAQAogCiBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKICAgICAgICAgc3lzdGVtL21lZGlhL2F1ZGlvX2VmZmVjdHMvaW5jbHVkZSBcCi0gICAgICAgIGJpb25pYy9saWJjL2luY2x1ZGUgXAogICAgICAgICBmcmFtZXdvcmtzL2F2L21lZGlhL2xpYmVmZmVjdHMvZmFjdG9yeQogCiBpbmNsdWRlICQoQlVJTERfU0hBUkVEX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9tZWRpYS9saWJlZmZlY3RzL3Rlc3RsaWJzL0FuZHJvaWQubWtfIGIvbWVkaWEvbGliZWZmZWN0cy90ZXN0bGlicy9BbmRyb2lkLm1rXwppbmRleCA2NzJlYmJhLi4xNGMzNzNmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJlZmZlY3RzL3Rlc3RsaWJzL0FuZHJvaWQubWtfCisrKyBiL21lZGlhL2xpYmVmZmVjdHMvdGVzdGxpYnMvQW5kcm9pZC5ta18KQEAgLTMsMjQgKzMsMTggQEAKICMgVGVzdCBSZXZlcmIgbGlicmFyeQogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKLUxPQ0FMX1NSQ19GSUxFUzo9IFwKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCiAJRWZmZWN0UmV2ZXJiLmMuYXJtIFwKIAlFZmZlY3RzTWF0aC5jLmFybQotTE9DQUxfQ0ZMQUdTKz0gLU8yCisKK0xPQ0FMX0NGTEFHUyA6PSAtTzIKIAogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBcCi0JbGliY3V0aWxzCisJbGliY3V0aWxzIFwKKwlsaWJkbAogCiBMT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSBzb3VuZGZ4Ci1MT0NBTF9NT0RVTEU6PSBsaWJyZXZlcmJ0ZXN0Ci0KLWlmZXEgKCQoVEFSR0VUX09TKS0kKFRBUkdFVF9TSU1VTEFUT1IpLGxpbnV4LXRydWUpCi1MT0NBTF9MRExJQlMgKz0gLWxkbAotZW5kaWYKLQotaWZuZXEgKCQoVEFSR0VUX1NJTVVMQVRPUiksdHJ1ZSkKLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gbGliZGwKLWVuZGlmCitMT0NBTF9NT0RVTEUgOj0gbGlicmV2ZXJidGVzdAogCiBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKIAkkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tZWZmZWN0cykgXApAQCAtMzMsNyArMjcsNyBAQAogIyBUZXN0IEVxdWFsaXplciBsaWJyYXJ5CiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotTE9DQUxfU1JDX0ZJTEVTOj0gXAorTE9DQUxfU1JDX0ZJTEVTIDo9IFwKIAlFZmZlY3RzTWF0aC5jLmFybSBcCiAJRWZmZWN0RXF1YWxpemVyLmNwcCBcCiAJQXVkaW9CaXF1YWRGaWx0ZXIuY3BwLmFybSBcCkBAIC00MiwyMSArMzYsMTQgQEAKIAlBdWRpb1NoZWx2aW5nRmlsdGVyLmNwcC5hcm0gXAogCUF1ZGlvRXF1YWxpemVyLmNwcC5hcm0KIAotTE9DQUxfQ0ZMQUdTKz0gLU8yCitMT0NBTF9DRkxBR1MgOj0gLU8yCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAotCWxpYmN1dGlscworCWxpYmN1dGlscyBcCisJbGliZGwKIAogTE9DQUxfTU9EVUxFX1JFTEFUSVZFX1BBVEggOj0gc291bmRmeAotTE9DQUxfTU9EVUxFOj0gbGliZXF1YWxpemVydGVzdAotCi1pZmVxICgkKFRBUkdFVF9PUyktJChUQVJHRVRfU0lNVUxBVE9SKSxsaW51eC10cnVlKQotTE9DQUxfTERMSUJTICs9IC1sZGwKLWVuZGlmCi0KLWlmbmVxICgkKFRBUkdFVF9TSU1VTEFUT1IpLHRydWUpCi1MT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYmRsCi1lbmRpZgorTE9DQUxfTU9EVUxFIDo9IGxpYmVxdWFsaXplcnRlc3QKIAogTE9DQUxfQ19JTkNMVURFUyA6PSBcCiAJJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGdyYXBoaWNzIGNvcmVjZykgXApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvQW5kcm9pZC5tayBiL21lZGlhL2xpYm1lZGlhL0FuZHJvaWQubWsKaW5kZXggYTJlMDkwOS4uOGM1M2M3MiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvQW5kcm9pZC5taworKysgYi9tZWRpYS9saWJtZWRpYS9BbmRyb2lkLm1rCkBAIC00Miw2ICs0Miw3IEBACiAgICAgbWVkaWFyZWNvcmRlci5jcHAgXAogICAgIElNZWRpYU1ldGFkYXRhUmV0cmlldmVyLmNwcCBcCiAgICAgbWVkaWFtZXRhZGF0YXJldHJpZXZlci5jcHAgXAorICAgIE1pZGlJb1dyYXBwZXIuY3BwIFwKICAgICBUb25lR2VuZXJhdG9yLmNwcCBcCiAgICAgSmV0UGxheWVyLmNwcCBcCiAgICAgSU9NWC5jcHAgXApAQCAtNzUsMTIgKzc2LDEyIEBACiAKIExPQ0FMX01PRFVMRTo9IGxpYm1lZGlhCiAKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworCiBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKICAgICAkKFRPUCkvZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9vcGVubWF4IFwKICAgICAkKFRPUCkvZnJhbWV3b3Jrcy9hdi9pbmNsdWRlL21lZGlhLyBcCiAgICAgJChUT1ApL2ZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQgXAotICAgICQoVE9QKS9leHRlcm5hbC9pY3UvaWN1NGMvc291cmNlL2NvbW1vbiBcCi0gICAgJChUT1ApL2V4dGVybmFsL2ljdS9pY3U0Yy9zb3VyY2UvaTE4biBcCiAgICAgJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGF1ZGlvLWVmZmVjdHMpIFwKICAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpCiAKQEAgLTg4LDggKzg5LDYgQEAKIAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiAKLSMgZm9yIDxjdXRpbHMvYXRvbWljLWlubGluZS5oPgotTE9DQUxfQ0ZMQUdTICs9IC1EQU5EUk9JRF9TTVA9JChpZiAkKGZpbmRzdHJpbmcgdHJ1ZSwkKFRBUkdFVF9DUFVfU01QKSksMSwwKQogTE9DQUxfU1JDX0ZJTEVTICs9IFNpbmdsZVN0YXRlUXVldWUuY3BwCiBMT0NBTF9DRkxBR1MgKz0gLURTSU5HTEVfU1RBVEVfUVVFVUVfSU5TVEFOVElBVElPTlM9JyJTaW5nbGVTdGF0ZVF1ZXVlSW5zdGFudGlhdGlvbnMuY3BwIicKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvQXVkaW9FZmZlY3QuY3BwIGIvbWVkaWEvbGlibWVkaWEvQXVkaW9FZmZlY3QuY3BwCmluZGV4IDBkNWQ3ZTQuLmFmMTAzYzEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0F1ZGlvRWZmZWN0LmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9BdWRpb0VmZmVjdC5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQAogICAgIGludCBidWZPZmZzZXQgPSAoKHNpemVvZihlZmZlY3RfcGFyYW1fY2Jsa190KSAtIDEpIC8gc2l6ZW9mKGludCkgKyAxKSAqIHNpemVvZihpbnQpOwogICAgIG1DYmxrLT5idWZmZXIgPSAodWludDhfdCAqKW1DYmxrICsgYnVmT2Zmc2V0OwogCi0gICAgaUVmZmVjdC0+YXNCaW5kZXIoKS0+bGlua1RvRGVhdGgobUlFZmZlY3RDbGllbnQpOworICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKGlFZmZlY3QpLT5saW5rVG9EZWF0aChtSUVmZmVjdENsaWVudCk7CiAgICAgbUNsaWVudFBpZCA9IElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmdldENhbGxpbmdQaWQoKTsKICAgICBBTE9HVigic2V0KCkgJXAgT0sgZWZmZWN0OiAlcyBpZDogJWQgc3RhdHVzICVkIGVuYWJsZWQgJWQgcGlkICVkIiwgdGhpcywgbURlc2NyaXB0b3IubmFtZSwgbUlkLAogICAgICAgICAgICAgbVN0YXR1cywgbUVuYWJsZWQsIG1DbGllbnRQaWQpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKG1JRWZmZWN0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIG1JRWZmZWN0LT5kaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICBtSUVmZmVjdC0+YXNCaW5kZXIoKS0+dW5saW5rVG9EZWF0aChtSUVmZmVjdENsaWVudCk7CisgICAgICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihtSUVmZmVjdCktPnVubGlua1RvRGVhdGgobUlFZmZlY3RDbGllbnQpOwogICAgICAgICB9CiAgICAgICAgIElQQ1RocmVhZFN0YXRlOjpzZWxmKCktPmZsdXNoQ29tbWFuZHMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9BdWRpb1JlY29yZC5jcHAgYi9tZWRpYS9saWJtZWRpYS9BdWRpb1JlY29yZC5jcHAKaW5kZXggY2EzODMyZC4uMDdjYTE0ZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvQXVkaW9SZWNvcmQuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0F1ZGlvUmVjb3JkLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICBtQXVkaW9SZWNvcmRUaHJlYWQtPnJlcXVlc3RFeGl0QW5kV2FpdCgpOwogICAgICAgICAgICAgbUF1ZGlvUmVjb3JkVGhyZWFkLmNsZWFyKCk7CiAgICAgICAgIH0KLSAgICAgICAgbUF1ZGlvUmVjb3JkLT5hc0JpbmRlcigpLT51bmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCB0aGlzKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIobUF1ZGlvUmVjb3JkKS0+dW5saW5rVG9EZWF0aChtRGVhdGhOb3RpZmllciwgdGhpcyk7CiAgICAgICAgIG1BdWRpb1JlY29yZC5jbGVhcigpOwogICAgICAgICBtQ2Jsa01lbW9yeS5jbGVhcigpOwogICAgICAgICBtQnVmZmVyTWVtb3J5LmNsZWFyKCk7CkBAIC01MjUsNyArNTI1LDcgQEAKIAogICAgIC8vIGludmFyaWFudCB0aGF0IG1BdWRpb1JlY29yZCAhPSAwIGlzIHRydWUgb25seSBhZnRlciBzZXQoKSByZXR1cm5zIHN1Y2Nlc3NmdWxseQogICAgIGlmIChtQXVkaW9SZWNvcmQgIT0gMCkgewotICAgICAgICBtQXVkaW9SZWNvcmQtPmFzQmluZGVyKCktPnVubGlua1RvRGVhdGgobURlYXRoTm90aWZpZXIsIHRoaXMpOworICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihtQXVkaW9SZWNvcmQpLT51bmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCB0aGlzKTsKICAgICAgICAgbURlYXRoTm90aWZpZXIuY2xlYXIoKTsKICAgICB9CiAgICAgbUF1ZGlvUmVjb3JkID0gcmVjb3JkOwpAQCAtNTc1LDcgKzU3NSw3IEBACiAgICAgbVByb3h5LT5zZXRNaW5pbXVtKG1Ob3RpZmljYXRpb25GcmFtZXNBY3QpOwogCiAgICAgbURlYXRoTm90aWZpZXIgPSBuZXcgRGVhdGhOb3RpZmllcih0aGlzKTsKLSAgICBtQXVkaW9SZWNvcmQtPmFzQmluZGVyKCktPmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCB0aGlzKTsKKyAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihtQXVkaW9SZWNvcmQpLT5saW5rVG9EZWF0aChtRGVhdGhOb3RpZmllciwgdGhpcyk7CiAKICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvQXVkaW9UcmFjay5jcHAgYi9tZWRpYS9saWJtZWRpYS9BdWRpb1RyYWNrLmNwcAppbmRleCAzODlhYWNjLi43MzVkYjVjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9BdWRpb1RyYWNrLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9BdWRpb1RyYWNrLmNwcApAQCAtMTk0LDcgKzE5NCw3IEBACiAgICAgICAgICAgICBtQXVkaW9UcmFja1RocmVhZC0+cmVxdWVzdEV4aXRBbmRXYWl0KCk7CiAgICAgICAgICAgICBtQXVkaW9UcmFja1RocmVhZC5jbGVhcigpOwogICAgICAgICB9Ci0gICAgICAgIG1BdWRpb1RyYWNrLT5hc0JpbmRlcigpLT51bmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCB0aGlzKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIobUF1ZGlvVHJhY2spLT51bmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCB0aGlzKTsKICAgICAgICAgbUF1ZGlvVHJhY2suY2xlYXIoKTsKICAgICAgICAgbUNibGtNZW1vcnkuY2xlYXIoKTsKICAgICAgICAgbVNoYXJlZEJ1ZmZlci5jbGVhcigpOwpAQCAtMTEzOCw3ICsxMTM4LDcgQEAKICAgICB9CiAgICAgLy8gaW52YXJpYW50IHRoYXQgbUF1ZGlvVHJhY2sgIT0gMCBpcyB0cnVlIG9ubHkgYWZ0ZXIgc2V0KCkgcmV0dXJucyBzdWNjZXNzZnVsbHkKICAgICBpZiAobUF1ZGlvVHJhY2sgIT0gMCkgewotICAgICAgICBtQXVkaW9UcmFjay0+YXNCaW5kZXIoKS0+dW5saW5rVG9EZWF0aChtRGVhdGhOb3RpZmllciwgdGhpcyk7CisgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKG1BdWRpb1RyYWNrKS0+dW5saW5rVG9EZWF0aChtRGVhdGhOb3RpZmllciwgdGhpcyk7CiAgICAgICAgIG1EZWF0aE5vdGlmaWVyLmNsZWFyKCk7CiAgICAgfQogICAgIG1BdWRpb1RyYWNrID0gdHJhY2s7CkBAIC0xMjQ1LDcgKzEyNDUsNyBAQAogICAgIG1Qcm94eS0+c2V0TWluaW11bShtTm90aWZpY2F0aW9uRnJhbWVzQWN0KTsKIAogICAgIG1EZWF0aE5vdGlmaWVyID0gbmV3IERlYXRoTm90aWZpZXIodGhpcyk7Ci0gICAgbUF1ZGlvVHJhY2stPmFzQmluZGVyKCktPmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCB0aGlzKTsKKyAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihtQXVkaW9UcmFjayktPmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyLCB0aGlzKTsKIAogICAgIHJldHVybiBOT19FUlJPUjsKICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JQXVkaW9GbGluZ2VyLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lBdWRpb0ZsaW5nZXIuY3BwCmluZGV4IDM0NmExOTIuLjhlM2I2MzMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lBdWRpb0ZsaW5nZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lBdWRpb0ZsaW5nZXIuY3BwCkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgLy8gaGF2ZVNoYXJlZEJ1ZmZlcgogICAgICAgICBpZiAoc2hhcmVkQnVmZmVyICE9IDApIHsKICAgICAgICAgICAgIGRhdGEud3JpdGVJbnQzMih0cnVlKTsKLSAgICAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoc2hhcmVkQnVmZmVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoc2hhcmVkQnVmZmVyKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBkYXRhLndyaXRlSW50MzIoZmFsc2UpOwogICAgICAgICB9CkBAIC00MTksNyArNDE5LDcgQEAKICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElBdWRpb0ZsaW5nZXI6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoY2xpZW50LT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihjbGllbnQpKTsKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KFJFR0lTVEVSX0NMSUVOVCwgZGF0YSwgJnJlcGx5KTsKICAgICB9CiAKQEAgLTcxNiw3ICs3MTYsNyBAQAogCiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXVkaW9GbGluZ2VyOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwogICAgICAgICBkYXRhLndyaXRlKHBEZXNjLCBzaXplb2YoZWZmZWN0X2Rlc2NyaXB0b3JfdCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGNsaWVudC0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoY2xpZW50KSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihwcmlvcml0eSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMigoaW50MzJfdCkgb3V0cHV0KTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKHNlc3Npb25JZCk7CkBAIC05MzksNyArOTM5LDcgQEAKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKGZsYWdzKTsKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHNlc3Npb25JZCk7CiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0dXMpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKHRyYWNrLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcih0cmFjaykpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9IGJyZWFrOwogICAgICAgICBjYXNlIE9QRU5fUkVDT1JEOiB7CkBAIC05NjYsOSArOTY2LDkgQEAKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHNlc3Npb25JZCk7CiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQ2NChub3RpZmljYXRpb25GcmFtZXMpOwogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdHVzKTsKLSAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihyZWNvcmQtPmFzQmluZGVyKCkpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKGNibGstPmFzQmluZGVyKCkpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKGJ1ZmZlcnMtPmFzQmluZGVyKCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKHJlY29yZCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGNibGspKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihidWZmZXJzKSk7CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgU0FNUExFX1JBVEU6IHsKQEAgLTEyNTQsNyArMTI1NCw3IEBACiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0dXMpOwogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoaWQpOwogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoZW5hYmxlZCk7Ci0gICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoZWZmZWN0LT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihlZmZlY3QpKTsKICAgICAgICAgICAgIHJlcGx5LT53cml0ZSgmZGVzYywgc2l6ZW9mKGVmZmVjdF9kZXNjcmlwdG9yX3QpKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL0lBdWRpb1BvbGljeVNlcnZpY2UuY3BwIGIvbWVkaWEvbGlibWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5jcHAKaW5kZXggNzA1NTFjNC4uZGJjN2E5ZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvSUF1ZGlvUG9saWN5U2VydmljZS5jcHAKQEAgLTYyOCw3ICs2MjgsNyBAQAogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSUF1ZGlvUG9saWN5U2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihjbGllbnQtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGNsaWVudCkpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoUkVHSVNURVJfQ0xJRU5ULCBkYXRhLCAmcmVwbHkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvSUF1ZGlvVHJhY2suY3BwIGIvbWVkaWEvbGlibWVkaWEvSUF1ZGlvVHJhY2suY3BwCmluZGV4IDI2NWJiMWIuLmRmMjA5ZmQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lBdWRpb1RyYWNrLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9JQXVkaW9UcmFjay5jcHAKQEAgLTEzNyw3ICsxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHB0cykgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJQXVkaW9UcmFjazo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihidWZmZXItPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGJ1ZmZlcikpOwogICAgICAgICBkYXRhLndyaXRlSW50NjQocHRzKTsKICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVtb3RlKCktPnRyYW5zYWN0KFFVRVVFX1RJTUVEX0JVRkZFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsICZyZXBseSk7CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICBzd2l0Y2ggKGNvZGUpIHsKICAgICAgICAgY2FzZSBHRVRfQ0JMSzogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElBdWRpb1RyYWNrLCBkYXRhLCByZXBseSk7Ci0gICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoZ2V0Q2JsaygpLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihnZXRDYmxrKCkpKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKICAgICAgICAgY2FzZSBTVEFSVDogewpAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSBhbGxvY2F0ZVRpbWVkQnVmZmVyKGRhdGEucmVhZEludDY0KCksICZidWZmZXIpOwogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoc3RhdHVzKTsKICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKLSAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoYnVmZmVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoYnVmZmVyKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JRHJtLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lEcm0uY3BwCmluZGV4IDdlNzRkZTkuLmIwOGZhODIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lEcm0uY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lEcm0uY3BwCkBAIC00NTAsNyArNDUwLDcgQEAKICAgICB2aXJ0dWFsIHN0YXR1c190IHNldExpc3RlbmVyKGNvbnN0IHNwPElEcm1DbGllbnQ+JiBsaXN0ZW5lcikgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJRHJtOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGxpc3RlbmVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihsaXN0ZW5lcikpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoU0VUX0xJU1RFTkVSLCBkYXRhLCAmcmVwbHkpOwogICAgICAgICByZXR1cm4gcmVwbHkucmVhZEludDMyKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvSUVmZmVjdC5jcHAgYi9tZWRpYS9saWJtZWRpYS9JRWZmZWN0LmNwcAppbmRleCBiOTQwMTJhLi5jMmZmZjc4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9JRWZmZWN0LmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9JRWZmZWN0LmNwcApAQCAtMTkwLDcgKzE5MCw3IEBACiAKICAgICAgICAgY2FzZSBHRVRfQ0JMSzogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElFZmZlY3QsIGRhdGEsIHJlcGx5KTsKLSAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihnZXRDYmxrKCktPmFzQmluZGVyKCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGdldENibGsoKSkpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9IGJyZWFrOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JSERDUC5jcHAgYi9tZWRpYS9saWJtZWRpYS9JSERDUC5jcHAKaW5kZXggMWNmOTg3YS4uOTEyMmY3NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvSUhEQ1AuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lIRENQLmNwcApAQCAtNjUsNyArNjUsNyBAQAogICAgIHZpcnR1YWwgc3RhdHVzX3Qgc2V0T2JzZXJ2ZXIoY29uc3Qgc3A8SUhEQ1BPYnNlcnZlcj4gJm9ic2VydmVyKSB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElIRENQOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKG9ic2VydmVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihvYnNlcnZlcikpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoSERDUF9TRVRfT0JTRVJWRVIsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiByZXBseS5yZWFkSW50MzIoKTsKICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JTWVkaWFEZWF0aE5vdGlmaWVyLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lNZWRpYURlYXRoTm90aWZpZXIuY3BwCmluZGV4IDEwYjQ5MzQuLjM4ZTljYTAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lNZWRpYURlYXRoTm90aWZpZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lNZWRpYURlYXRoTm90aWZpZXIuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAKICAgICBNdXRleDo6QXV0b2xvY2sgX2woc1NlcnZpY2VMb2NrKTsKICAgICBzT2JpdFJlY2lwaWVudHMuY2xlYXIoKTsKICAgICBpZiAoc01lZGlhUGxheWVyU2VydmljZSAhPSAwKSB7Ci0gICAgICAgIHNNZWRpYVBsYXllclNlcnZpY2UtPmFzQmluZGVyKCktPnVubGlua1RvRGVhdGgodGhpcyk7CisgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKHNNZWRpYVBsYXllclNlcnZpY2UpLT51bmxpbmtUb0RlYXRoKHRoaXMpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvSU1lZGlhTG9nU2VydmljZS5jcHAgYi9tZWRpYS9saWJtZWRpYS9JTWVkaWFMb2dTZXJ2aWNlLmNwcAppbmRleCA4YTY2YzdjLi5hNGFmN2I3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9JTWVkaWFMb2dTZXJ2aWNlLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9JTWVkaWFMb2dTZXJ2aWNlLmNwcApAQCAtNDIsNyArNDIsNyBAQAogICAgIHZpcnR1YWwgdm9pZCAgICByZWdpc3RlcldyaXRlcihjb25zdCBzcDxJTWVtb3J5PiYgc2hhcmVkLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJTWVkaWFMb2dTZXJ2aWNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKHNoYXJlZC0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoc2hhcmVkKSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQ2NCgoaW50NjRfdCkgc2l6ZSk7CiAgICAgICAgIGRhdGEud3JpdGVDU3RyaW5nKG5hbWUpOwogICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoUkVHSVNURVJfV1JJVEVSLCBkYXRhLCAmcmVwbHkpOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIHZpcnR1YWwgdm9pZCAgICB1bnJlZ2lzdGVyV3JpdGVyKGNvbnN0IHNwPElNZW1vcnk+JiBzaGFyZWQpIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSU1lZGlhTG9nU2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihzaGFyZWQtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKHNoYXJlZCkpOwogICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoVU5SRUdJU1RFUl9XUklURVIsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIC8vIEZJWE1FIGlnbm9yZXMgc3RhdHVzCiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvSU1lZGlhTWV0YWRhdGFSZXRyaWV2ZXIuY3BwIGIvbWVkaWEvbGlibWVkaWEvSU1lZGlhTWV0YWRhdGFSZXRyaWV2ZXIuY3BwCmluZGV4IDM4ZjcxN2MuLmFhMjY2NWEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lNZWRpYU1ldGFkYXRhUmV0cmlldmVyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9JTWVkaWFNZXRhZGF0YVJldHJpZXZlci5jcHAKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElNZWRpYU1ldGFkYXRhUmV0cmlldmVyOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwogICAgICAgICBkYXRhLndyaXRlSW50MzIoaHR0cFNlcnZpY2UgIT0gTlVMTCk7CiAgICAgICAgIGlmIChodHRwU2VydmljZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGh0dHBTZXJ2aWNlLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoaHR0cFNlcnZpY2UpKTsKICAgICAgICAgfQogICAgICAgICBkYXRhLndyaXRlQ1N0cmluZyhzcmNVcmwpOwogCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgICAgICAgICAgIHNwPElNZW1vcnk+IGJpdG1hcCA9IGdldEZyYW1lQXRUaW1lKHRpbWVVcywgb3B0aW9uKTsKICAgICAgICAgICAgIGlmIChiaXRtYXAgIT0gMCkgeyAgLy8gRG9uJ3Qgc2VuZCBOVUxMIGFjcm9zcyB0aGUgYmluZGVyIGludGVyZmFjZQogICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKE5PX0VSUk9SKTsKLSAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoYml0bWFwLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoYml0bWFwKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKFVOS05PV05fRVJST1IpOwogICAgICAgICAgICAgfQpAQCAtMjYzLDcgKzI2Myw3IEBACiAgICAgICAgICAgICBzcDxJTWVtb3J5PiBhbGJ1bUFydCA9IGV4dHJhY3RBbGJ1bUFydCgpOwogICAgICAgICAgICAgaWYgKGFsYnVtQXJ0ICE9IDApIHsgIC8vIERvbid0IHNlbmQgTlVMTCBhY3Jvc3MgdGhlIGJpbmRlciBpbnRlcmZhY2UKICAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihOT19FUlJPUik7Ci0gICAgICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKGFsYnVtQXJ0LT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoYWxidW1BcnQpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoVU5LTk9XTl9FUlJPUik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JTWVkaWFQbGF5ZXIuY3BwIGIvbWVkaWEvbGlibWVkaWEvSU1lZGlhUGxheWVyLmNwcAppbmRleCBkNzc4ZDA1Li43ZjNlNWNjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9JTWVkaWFQbGF5ZXIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lNZWRpYVBsYXllci5jcHAKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElNZWRpYVBsYXllcjo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGh0dHBTZXJ2aWNlICE9IE5VTEwpOwogICAgICAgICBpZiAoaHR0cFNlcnZpY2UgIT0gTlVMTCkgewotICAgICAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihodHRwU2VydmljZS0+YXNCaW5kZXIoKSk7CisgICAgICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGh0dHBTZXJ2aWNlKSk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YS53cml0ZUNTdHJpbmcodXJsKTsKICAgICAgICAgaWYgKGhlYWRlcnMgPT0gTlVMTCkgewpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgc3RhdHVzX3Qgc2V0RGF0YVNvdXJjZShjb25zdCBzcDxJU3RyZWFtU291cmNlPiAmc291cmNlKSB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElNZWRpYVBsYXllcjo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihzb3VyY2UtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKHNvdXJjZSkpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoU0VUX0RBVEFfU09VUkNFX1NUUkVBTSwgZGF0YSwgJnJlcGx5KTsKICAgICAgICAgcmV0dXJuIHJlcGx5LnJlYWRJbnQzMigpOwogICAgIH0KQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSU1lZGlhUGxheWVyOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBzcDxJQmluZGVyPiBiKGJ1ZmZlclByb2R1Y2VyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgc3A8SUJpbmRlcj4gYihJSW50ZXJmYWNlOjphc0JpbmRlcihidWZmZXJQcm9kdWNlcikpOwogICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGIpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoU0VUX1ZJREVPX1NVUkZBQ0VURVhUVVJFLCBkYXRhLCAmcmVwbHkpOwogICAgICAgICByZXR1cm4gcmVwbHkucmVhZEludDMyKCk7CkBAIC0zMjMsNyArMzIzLDcgQEAKICAgICBzdGF0dXNfdCBzZXROZXh0UGxheWVyKGNvbnN0IHNwPElNZWRpYVBsYXllcj4mIHBsYXllcikgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJTWVkaWFQbGF5ZXI6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIHNwPElCaW5kZXI+IGIocGxheWVyLT5hc0JpbmRlcigpKTsKKyAgICAgICAgc3A8SUJpbmRlcj4gYihJSW50ZXJmYWNlOjphc0JpbmRlcihwbGF5ZXIpKTsKICAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihiKTsKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KFNFVF9ORVhUX1BMQVlFUiwgZGF0YSwgJnJlcGx5KTsKICAgICAgICAgcmV0dXJuIHJlcGx5LnJlYWRJbnQzMigpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvSU1lZGlhUGxheWVyU2VydmljZS5jcHAgYi9tZWRpYS9saWJtZWRpYS9JTWVkaWFQbGF5ZXJTZXJ2aWNlLmNwcAppbmRleCAyZTAyZDE3Li40ZDMzZDQwIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9JTWVkaWFQbGF5ZXJTZXJ2aWNlLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9JTWVkaWFQbGF5ZXJTZXJ2aWNlLmNwcApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgY29uc3Qgc3A8SU1lZGlhUGxheWVyQ2xpZW50PiYgY2xpZW50LCBpbnQgYXVkaW9TZXNzaW9uSWQpIHsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSU1lZGlhUGxheWVyU2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihjbGllbnQtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGNsaWVudCkpOwogICAgICAgICBkYXRhLndyaXRlSW50MzIoYXVkaW9TZXNzaW9uSWQpOwogCiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChDUkVBVEUsIGRhdGEsICZyZXBseSk7CkBAIC0xMDEsMTAgKzEwMSwxMCBAQAogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSU1lZGlhUGxheWVyU2VydmljZTo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGh0dHBTZXJ2aWNlICE9IE5VTEwpOwogICAgICAgICBpZiAoaHR0cFNlcnZpY2UgIT0gTlVMTCkgewotICAgICAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihodHRwU2VydmljZS0+YXNCaW5kZXIoKSk7CisgICAgICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGh0dHBTZXJ2aWNlKSk7CiAgICAgICAgIH0KICAgICAgICAgZGF0YS53cml0ZUNTdHJpbmcodXJsKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihoZWFwLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihoZWFwKSk7CiAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHJlbW90ZSgpLT50cmFuc2FjdChERUNPREVfVVJMLCBkYXRhLCAmcmVwbHkpOwogICAgICAgICBpZiAoc3RhdHVzID09IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICBzdGF0dXMgPSAoc3RhdHVzX3QpcmVwbHkucmVhZEludDMyKCk7CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgZGF0YS53cml0ZUZpbGVEZXNjcmlwdG9yKGZkKTsKICAgICAgICAgZGF0YS53cml0ZUludDY0KG9mZnNldCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQ2NChsZW5ndGgpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGhlYXAtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGhlYXApKTsKICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVtb3RlKCktPnRyYW5zYWN0KERFQ09ERV9GRCwgZGF0YSwgJnJlcGx5KTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewogICAgICAgICAgICAgc3RhdHVzID0gKHN0YXR1c190KXJlcGx5LnJlYWRJbnQzMigpOwpAQCAtMTg4LDcgKzE4OCw3IEBACiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJTWVkaWFQbGF5ZXJTZXJ2aWNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGNsaWVudC0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoY2xpZW50KSk7CiAgICAgICAgIGRhdGEud3JpdGVTdHJpbmc4KGlmYWNlKTsKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KExJU1RFTl9GT1JfUkVNT1RFX0RJU1BMQVksIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiBpbnRlcmZhY2VfY2FzdDxJUmVtb3RlRGlzcGxheT4ocmVwbHkucmVhZFN0cm9uZ0JpbmRlcigpKTsKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgICAgIGludGVyZmFjZV9jYXN0PElNZWRpYVBsYXllckNsaWVudD4oZGF0YS5yZWFkU3Ryb25nQmluZGVyKCkpOwogICAgICAgICAgICAgaW50IGF1ZGlvU2Vzc2lvbklkID0gZGF0YS5yZWFkSW50MzIoKTsKICAgICAgICAgICAgIHNwPElNZWRpYVBsYXllcj4gcGxheWVyID0gY3JlYXRlKGNsaWVudCwgYXVkaW9TZXNzaW9uSWQpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKHBsYXllci0+YXNCaW5kZXIoKSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIocGxheWVyKSk7CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgREVDT0RFX1VSTDogewpAQCAtMjYxLDYgKzI2MSw3IEBACiAgICAgICAgICAgICBzaXplX3Qgc2l6ZTsKICAgICAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IGRlY29kZShmZCwgb2Zmc2V0LCBsZW5ndGgsICZzYW1wbGVSYXRlLCAmbnVtQ2hhbm5lbHMsICZmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhcCwgJnNpemUpOworICAgICAgICAgICAgOjpjbG9zZShmZCk7CiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihzdGF0dXMpOwogICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBOT19FUlJPUikgewogICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHNhbXBsZVJhdGUpOwpAQCAtMjczLDM4ICsyNzQsMzggQEAKICAgICAgICAgY2FzZSBDUkVBVEVfTUVESUFfUkVDT1JERVI6IHsKICAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJTWVkaWFQbGF5ZXJTZXJ2aWNlLCBkYXRhLCByZXBseSk7CiAgICAgICAgICAgICBzcDxJTWVkaWFSZWNvcmRlcj4gcmVjb3JkZXIgPSBjcmVhdGVNZWRpYVJlY29yZGVyKCk7Ci0gICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIocmVjb3JkZXItPmFzQmluZGVyKCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKHJlY29yZGVyKSk7CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgQ1JFQVRFX01FVEFEQVRBX1JFVFJJRVZFUjogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElNZWRpYVBsYXllclNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKICAgICAgICAgICAgIHNwPElNZWRpYU1ldGFkYXRhUmV0cmlldmVyPiByZXRyaWV2ZXIgPSBjcmVhdGVNZXRhZGF0YVJldHJpZXZlcigpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKHJldHJpZXZlci0+YXNCaW5kZXIoKSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIocmV0cmlldmVyKSk7CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgR0VUX09NWDogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElNZWRpYVBsYXllclNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKICAgICAgICAgICAgIHNwPElPTVg+IG9teCA9IGdldE9NWCgpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKG9teC0+YXNCaW5kZXIoKSk7CisgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIob214KSk7CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CiAgICAgICAgIGNhc2UgTUFLRV9DUllQVE86IHsKICAgICAgICAgICAgIENIRUNLX0lOVEVSRkFDRShJTWVkaWFQbGF5ZXJTZXJ2aWNlLCBkYXRhLCByZXBseSk7CiAgICAgICAgICAgICBzcDxJQ3J5cHRvPiBjcnlwdG8gPSBtYWtlQ3J5cHRvKCk7Ci0gICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoY3J5cHRvLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihjcnlwdG8pKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKICAgICAgICAgY2FzZSBNQUtFX0RSTTogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElNZWRpYVBsYXllclNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKICAgICAgICAgICAgIHNwPElEcm0+IGRybSA9IG1ha2VEcm0oKTsKLSAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihkcm0tPmFzQmluZGVyKCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGRybSkpOwogICAgICAgICAgICAgcmV0dXJuIE5PX0VSUk9SOwogICAgICAgICB9IGJyZWFrOwogICAgICAgICBjYXNlIE1BS0VfSERDUDogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElNZWRpYVBsYXllclNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKICAgICAgICAgICAgIGJvb2wgY3JlYXRlRW5jcnlwdGlvbk1vZHVsZSA9IGRhdGEucmVhZEludDMyKCk7CiAgICAgICAgICAgICBzcDxJSERDUD4gaGRjcCA9IG1ha2VIRENQKGNyZWF0ZUVuY3J5cHRpb25Nb2R1bGUpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKGhkY3AtPmFzQmluZGVyKCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGhkY3ApKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKICAgICAgICAgY2FzZSBBRERfQkFUVEVSWV9EQVRBOiB7CkBAIC0zMjQsMTMgKzMyNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VfY2FzdDxJUmVtb3RlRGlzcGxheUNsaWVudD4oZGF0YS5yZWFkU3Ryb25nQmluZGVyKCkpKTsKICAgICAgICAgICAgIFN0cmluZzggaWZhY2UoZGF0YS5yZWFkU3RyaW5nOCgpKTsKICAgICAgICAgICAgIHNwPElSZW1vdGVEaXNwbGF5PiBkaXNwbGF5KGxpc3RlbkZvclJlbW90ZURpc3BsYXkoY2xpZW50LCBpZmFjZSkpOwotICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKGRpc3BsYXktPmFzQmluZGVyKCkpOworICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGRpc3BsYXkpKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKICAgICAgICAgY2FzZSBHRVRfQ09ERUNfTElTVDogewogICAgICAgICAgICAgQ0hFQ0tfSU5URVJGQUNFKElNZWRpYVBsYXllclNlcnZpY2UsIGRhdGEsIHJlcGx5KTsKICAgICAgICAgICAgIHNwPElNZWRpYUNvZGVjTGlzdD4gbWNsID0gZ2V0Q29kZWNMaXN0KCk7Ci0gICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIobWNsLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihtY2wpKTsKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICAgICAgfSBicmVhazsKICAgICAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL0lNZWRpYVJlY29yZGVyLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lNZWRpYVJlY29yZGVyLmNwcAppbmRleCA5NWFmMDA2Li5hNzMzYjY4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9JTWVkaWFSZWNvcmRlci5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvSU1lZGlhUmVjb3JkZXIuY3BwCkBAIC03MCw4ICs3MCw4IEBACiAgICAgICAgIEFMT0dWKCJzZXRDYW1lcmEoJXAsJXApIiwgY2FtZXJhLmdldCgpLCBwcm94eS5nZXQoKSk7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElNZWRpYVJlY29yZGVyOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGNhbWVyYS0+YXNCaW5kZXIoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIocHJveHktPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGNhbWVyYSkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKHByb3h5KSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChTRVRfQ0FNRVJBLCBkYXRhLCAmcmVwbHkpOwogICAgICAgICByZXR1cm4gcmVwbHkucmVhZEludDMyKCk7CiAgICAgfQpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICBBTE9HVigic2V0UHJldmlld1N1cmZhY2UoJXApIiwgc3VyZmFjZS5nZXQoKSk7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElNZWRpYVJlY29yZGVyOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKHN1cmZhY2UtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKHN1cmZhY2UpKTsKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KFNFVF9QUkVWSUVXX1NVUkZBQ0UsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiByZXBseS5yZWFkSW50MzIoKTsKICAgICB9CkBAIC0yMTUsNyArMjE1LDcgQEAKICAgICAgICAgQUxPR1YoInNldExpc3RlbmVyKCVwKSIsIGxpc3RlbmVyLmdldCgpKTsKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSU1lZGlhUmVjb3JkZXI6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIobGlzdGVuZXItPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGxpc3RlbmVyKSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChTRVRfTElTVEVORVIsIGRhdGEsICZyZXBseSk7CiAgICAgICAgIHJldHVybiByZXBseS5yZWFkSW50MzIoKTsKICAgICB9CkBAIC00NjgsNyArNDY4LDcgQEAKICAgICAgICAgICAgIGludCByZXR1cm5lZE51bGw9IChzdXJmYWNlTWVkaWFTb3VyY2UgPT0gTlVMTCkgPyAxIDogMCA7CiAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMihyZXR1cm5lZE51bGwpOwogICAgICAgICAgICAgaWYgKCFyZXR1cm5lZE51bGwpIHsKLSAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoc3VyZmFjZU1lZGlhU291cmNlLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoc3VyZmFjZU1lZGlhU291cmNlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gTk9fRVJST1I7CiAgICAgICAgIH0gYnJlYWs7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JT01YLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lPTVguY3BwCmluZGV4IGM1ODNkMzIuLmUyMDhkZjkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lPTVguY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lPTVguY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgUGFyY2VsIGRhdGEsIHJlcGx5OwogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSU9NWDo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKICAgICAgICAgZGF0YS53cml0ZUNTdHJpbmcobmFtZSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIob2JzZXJ2ZXItPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKG9ic2VydmVyKSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChBTExPQ0FURV9OT0RFLCBkYXRhLCAmcmVwbHkpOwogCiAgICAgICAgIHN0YXR1c190IGVyciA9IHJlcGx5LnJlYWRJbnQzMigpOwpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJT01YOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwogICAgICAgICBkYXRhLndyaXRlSW50MzIoKGludDMyX3Qpbm9kZSk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihwb3J0X2luZGV4KTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihwYXJhbXMtPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKHBhcmFtcykpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoVVNFX0JVRkZFUiwgZGF0YSwgJnJlcGx5KTsKIAogICAgICAgICBzdGF0dXNfdCBlcnIgPSByZXBseS5yZWFkSW50MzIoKTsKQEAgLTQxOCw3ICs0MTgsNyBAQAogICAgICAgICBkYXRhLndyaXRlSW50ZXJmYWNlVG9rZW4oSU9NWDo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKChpbnQzMl90KW5vZGUpOwogICAgICAgICBkYXRhLndyaXRlSW50MzIocG9ydF9pbmRleCk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIocGFyYW1zLT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihwYXJhbXMpKTsKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KEFMTE9DX0JVRkZFUl9XSVRIX0JBQ0tVUCwgZGF0YSwgJnJlcGx5KTsKIAogICAgICAgICBzdGF0dXNfdCBlcnIgPSByZXBseS5yZWFkSW50MzIoKTsKQEAgLTc3NSw3ICs3NzUsNyBAQAogICAgICAgICAgICAgcmVwbHktPndyaXRlSW50MzIoZXJyKTsKIAogICAgICAgICAgICAgaWYgKGVyciA9PSBPSykgewotICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZVN0cm9uZ0JpbmRlcihidWZmZXJQcm9kdWNlci0+YXNCaW5kZXIoKSk7CisgICAgICAgICAgICAgICAgcmVwbHktPndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGJ1ZmZlclByb2R1Y2VyKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiBOT19FUlJPUjsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL0lSZW1vdGVEaXNwbGF5Q2xpZW50LmNwcCBiL21lZGlhL2xpYm1lZGlhL0lSZW1vdGVEaXNwbGF5Q2xpZW50LmNwcAppbmRleCA3MTkwODc5Li45ZDYzYmM5IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9JUmVtb3RlRGlzcGxheUNsaWVudC5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvSVJlbW90ZURpc3BsYXlDbGllbnQuY3BwCkBAIC00Miw3ICs0Miw3IEBACiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJUmVtb3RlRGlzcGxheUNsaWVudDo6Z2V0SW50ZXJmYWNlRGVzY3JpcHRvcigpKTsKLSAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihidWZmZXJQcm9kdWNlci0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoYnVmZmVyUHJvZHVjZXIpKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKHdpZHRoKTsKICAgICAgICAgZGF0YS53cml0ZUludDMyKGhlaWdodCk7CiAgICAgICAgIGRhdGEud3JpdGVJbnQzMihmbGFncyk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9JU3RyZWFtU291cmNlLmNwcCBiL21lZGlhL2xpYm1lZGlhL0lTdHJlYW1Tb3VyY2UuY3BwCmluZGV4IGZlMmNjNjEuLmQ0ODBhZWYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhL0lTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhL0lTdHJlYW1Tb3VyY2UuY3BwCkBAIC01NSw3ICs1NSw3IEBACiAgICAgdmlydHVhbCB2b2lkIHNldExpc3RlbmVyKGNvbnN0IHNwPElTdHJlYW1MaXN0ZW5lcj4gJmxpc3RlbmVyKSB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElTdHJlYW1Tb3VyY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIobGlzdGVuZXItPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGxpc3RlbmVyKSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChTRVRfTElTVEVORVIsIGRhdGEsICZyZXBseSk7CiAgICAgfQogCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJU3RyZWFtU291cmNlOjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwogICAgICAgICBkYXRhLndyaXRlSW50NjQoc3RhdGljX2Nhc3Q8aW50NjRfdD4oYnVmZmVycy5zaXplKCkpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBidWZmZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGJ1ZmZlcnMuaXRlbUF0KGkpLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoYnVmZmVycy5pdGVtQXQoaSkpKTsKICAgICAgICAgfQogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoU0VUX0JVRkZFUlMsIGRhdGEsICZyZXBseSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvSmV0UGxheWVyLmNwcCBiL21lZGlhL2xpYm1lZGlhL0pldFBsYXllci5jcHAKaW5kZXggZjBmMTgzMi4uNzIxZDhkNyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvSmV0UGxheWVyLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9KZXRQbGF5ZXIuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAgICAgICAgIG1QYXVzZWQoZmFsc2UpLAogICAgICAgICBtTWF4VHJhY2tzKG1heFRyYWNrcyksCiAgICAgICAgIG1FYXNEYXRhKE5VTEwpLAotICAgICAgICBtRWFzSmV0RmlsZUxvYyhOVUxMKSwKICAgICAgICAgbVRyYWNrQnVmZmVyU2l6ZSh0cmFja0J1ZmZlclNpemUpCiB7CiAgICAgQUxPR1YoIkpldFBsYXllciBjb25zdHJ1Y3RvciIpOwpAQCAtMTMzLDEwICsxMzIsNyBAQAogICAgICAgICBKRVRfU2h1dGRvd24obUVhc0RhdGEpOwogICAgICAgICBFQVNfU2h1dGRvd24obUVhc0RhdGEpOwogICAgIH0KLSAgICBpZiAobUVhc0pldEZpbGVMb2MpIHsKLSAgICAgICAgZnJlZShtRWFzSmV0RmlsZUxvYyk7Ci0gICAgICAgIG1FYXNKZXRGaWxlTG9jID0gTlVMTDsKLSAgICB9CisgICAgbUlvV3JhcHBlci5jbGVhcigpOwogICAgIGlmIChtQXVkaW9UcmFjayAhPSAwKSB7CiAgICAgICAgIG1BdWRpb1RyYWNrLT5zdG9wKCk7CiAgICAgICAgIG1BdWRpb1RyYWNrLT5mbHVzaCgpOwpAQCAtMzI3LDE2ICszMjMsOSBAQAogCiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKIAotICAgIG1FYXNKZXRGaWxlTG9jID0gKEVBU19GSUxFX0xPQ0FUT1IpIG1hbGxvYyhzaXplb2YoRUFTX0ZJTEUpKTsKLSAgICBzdHJuY3B5KG1KZXRGaWxlUGF0aCwgcGF0aCwgc2l6ZW9mKG1KZXRGaWxlUGF0aCkpOwotICAgIG1KZXRGaWxlUGF0aFtzaXplb2YobUpldEZpbGVQYXRoKSAtIDFdID0gJ1wwJzsKLSAgICBtRWFzSmV0RmlsZUxvYy0+cGF0aCA9IG1KZXRGaWxlUGF0aDsKKyAgICBtSW9XcmFwcGVyID0gbmV3IE1pZGlJb1dyYXBwZXIocGF0aCk7CiAKLSAgICBtRWFzSmV0RmlsZUxvYy0+ZmQgPSAwOwotICAgIG1FYXNKZXRGaWxlTG9jLT5sZW5ndGggPSAwOwotICAgIG1FYXNKZXRGaWxlTG9jLT5vZmZzZXQgPSAwOwotCi0gICAgRUFTX1JFU1VMVCByZXN1bHQgPSBKRVRfT3BlbkZpbGUobUVhc0RhdGEsIG1FYXNKZXRGaWxlTG9jKTsKKyAgICBFQVNfUkVTVUxUIHJlc3VsdCA9IEpFVF9PcGVuRmlsZShtRWFzRGF0YSwgbUlvV3JhcHBlci0+Z2V0TG9jYXRvcigpKTsKICAgICBpZiAocmVzdWx0ICE9IEVBU19TVUNDRVNTKQogICAgICAgICBtU3RhdGUgPSBFQVNfU1RBVEVfRVJST1I7CiAgICAgZWxzZQpAQCAtMzUyLDEzICszNDEsOSBAQAogCiAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKIAotICAgIG1FYXNKZXRGaWxlTG9jID0gKEVBU19GSUxFX0xPQ0FUT1IpIG1hbGxvYyhzaXplb2YoRUFTX0ZJTEUpKTsKLSAgICBtRWFzSmV0RmlsZUxvYy0+ZmQgPSBmZDsKLSAgICBtRWFzSmV0RmlsZUxvYy0+b2Zmc2V0ID0gb2Zmc2V0OwotICAgIG1FYXNKZXRGaWxlTG9jLT5sZW5ndGggPSBsZW5ndGg7Ci0gICAgbUVhc0pldEZpbGVMb2MtPnBhdGggPSBOVUxMOworICAgIG1Jb1dyYXBwZXIgPSBuZXcgTWlkaUlvV3JhcHBlcihmZCwgb2Zmc2V0LCBsZW5ndGgpOwogCi0gICAgRUFTX1JFU1VMVCByZXN1bHQgPSBKRVRfT3BlbkZpbGUobUVhc0RhdGEsIG1FYXNKZXRGaWxlTG9jKTsKKyAgICBFQVNfUkVTVUxUIHJlc3VsdCA9IEpFVF9PcGVuRmlsZShtRWFzRGF0YSwgbUlvV3JhcHBlci0+Z2V0TG9jYXRvcigpKTsKICAgICBpZiAocmVzdWx0ICE9IEVBU19TVUNDRVNTKQogICAgICAgICBtU3RhdGUgPSBFQVNfU1RBVEVfRVJST1I7CiAgICAgZWxzZQpAQCAtNDU5LDcgKzQ0NCw2IEBACiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQgSmV0UGxheWVyOjpkdW1wKCkKIHsKLSAgICBBTE9HRSgiSmV0UGxheWVyIGR1bXA6IEpFVCBmaWxlPSVzIiwgbUVhc0pldEZpbGVMb2MtPnBhdGgpOwogfQogCiB2b2lkIEpldFBsYXllcjo6ZHVtcEpldFN0YXR1cyhTX0pFVF9TVEFUVVMqIHBKZXRTdGF0dXMpCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYS9NaWRpSW9XcmFwcGVyLmNwcCBiL21lZGlhL2xpYm1lZGlhL01pZGlJb1dyYXBwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODExMTEKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJtZWRpYS9NaWRpSW9XcmFwcGVyLmNwcApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8jZGVmaW5lIExPR19OREVCVUcgMAorI2RlZmluZSBMT0dfVEFHICJNaWRpSW9XcmFwcGVyIgorI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgorI2luY2x1ZGUgPHV0aWxzL1JlZkJhc2UuaD4KKworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2luY2x1ZGUgIm1lZGlhL01pZGlJb1dyYXBwZXIuaCIKKworc3RhdGljIGludCByZWFkQXQodm9pZCAqaGFuZGxlLCB2b2lkICpidWZmZXIsIGludCBwb3MsIGludCBzaXplKSB7CisgICAgcmV0dXJuICgoYW5kcm9pZDo6TWlkaUlvV3JhcHBlciopaGFuZGxlKS0+cmVhZEF0KGJ1ZmZlciwgcG9zLCBzaXplKTsKK30KK3N0YXRpYyBpbnQgc2l6ZSh2b2lkICpoYW5kbGUpIHsKKyAgICByZXR1cm4gKChhbmRyb2lkOjpNaWRpSW9XcmFwcGVyKiloYW5kbGUpLT5zaXplKCk7Cit9CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworTWlkaUlvV3JhcHBlcjo6TWlkaUlvV3JhcHBlcihjb25zdCBjaGFyICpwYXRoKSB7CisgICAgQUxPR1YoIk1pZGlJb1dyYXBwZXIoJXMpIiwgcGF0aCk7CisgICAgbUZkID0gb3BlbihwYXRoLCBPX1JET05MWSB8IE9fTEFSR0VGSUxFKTsKKyAgICBtQmFzZSA9IDA7CisgICAgbUxlbmd0aCA9IGxzZWVrKG1GZCwgMCwgU0VFS19FTkQpOworfQorCitNaWRpSW9XcmFwcGVyOjpNaWRpSW9XcmFwcGVyKGludCBmZCwgb2ZmNjRfdCBvZmZzZXQsIGludDY0X3Qgc2l6ZSkgeworICAgIEFMT0dWKCJNaWRpSW9XcmFwcGVyKGZkPSVkKSIsIGZkKTsKKyAgICBtRmQgPSBkdXAoZmQpOworICAgIG1CYXNlID0gb2Zmc2V0OworICAgIG1MZW5ndGggPSBzaXplOworfQorCitNaWRpSW9XcmFwcGVyOjpNaWRpSW9XcmFwcGVyKGNvbnN0IHNwPERhdGFTb3VyY2U+ICZzb3VyY2UpIHsKKyAgICBtRGF0YVNvdXJjZSA9IHNvdXJjZTsKKyAgICBvZmY2NF90IGw7CisgICAgaWYgKG1EYXRhU291cmNlLT5nZXRTaXplKCZsKSA9PSBPSykgeworICAgICAgICBtTGVuZ3RoID0gbDsKKyAgICB9IGVsc2UgeworICAgICAgICBtTGVuZ3RoID0gMDsKKyAgICB9Cit9CisKK01pZGlJb1dyYXBwZXI6On5NaWRpSW9XcmFwcGVyKCkgeworICAgIEFMT0dWKCJ+TWlkaUlvV3JhcHBlciIpOworICAgIGNsb3NlKG1GZCk7Cit9CisKK2ludCBNaWRpSW9XcmFwcGVyOjpyZWFkQXQodm9pZCAqYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSkgeworICAgIEFMT0dWKCJyZWFkQXQoJXAsICVkLCAlZCkiLCBidWZmZXIsIG9mZnNldCwgc2l6ZSk7CisKKyAgICBpZiAobURhdGFTb3VyY2UgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gbURhdGFTb3VyY2UtPnJlYWRBdChvZmZzZXQsIGJ1ZmZlciwgc2l6ZSk7CisgICAgfQorICAgIGxzZWVrKG1GZCwgbUJhc2UgKyBvZmZzZXQsIFNFRUtfU0VUKTsKKyAgICBpZiAob2Zmc2V0ICsgc2l6ZSA+IG1MZW5ndGgpIHsKKyAgICAgICAgc2l6ZSA9IG1MZW5ndGggLSBvZmZzZXQ7CisgICAgfQorICAgIHJldHVybiByZWFkKG1GZCwgYnVmZmVyLCBzaXplKTsKK30KKworaW50IE1pZGlJb1dyYXBwZXI6OnNpemUoKSB7CisgICAgQUxPR1YoInNpemUoKSA9ICVkIiwgbUxlbmd0aCk7CisgICAgcmV0dXJuIG1MZW5ndGg7Cit9CisKK0VBU19GSUxFX0xPQ0FUT1IgTWlkaUlvV3JhcHBlcjo6Z2V0TG9jYXRvcigpIHsKKyAgICBtRWFzRmlsZS5oYW5kbGUgPSB0aGlzOworICAgIG1FYXNGaWxlLnJlYWRBdCA9IDo6cmVhZEF0OworICAgIG1FYXNGaWxlLnNpemUgPSA6OnNpemU7CisgICAgcmV0dXJuICZtRWFzRmlsZTsKK30KKworfSAgLy8gbmFtZXNwYWNlIGFuZHJvaWQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL1NpbmdsZVN0YXRlUXVldWUuY3BwIGIvbWVkaWEvbGlibWVkaWEvU2luZ2xlU3RhdGVRdWV1ZS5jcHAKaW5kZXggMzUwM2JhYS4uYzI0MTE4NCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvU2luZ2xlU3RhdGVRdWV1ZS5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvU2luZ2xlU3RhdGVRdWV1ZS5jcHAKQEAgLTE2LDcgKzE2LDYgQEAKIAogI2luY2x1ZGUgPG5ldz4KICNpbmNsdWRlIDxjdXRpbHMvYXRvbWljLmg+Ci0jaW5jbHVkZSA8Y3V0aWxzL2F0b21pYy1pbmxpbmUuaD4gLy8gZm9yIGFuZHJvaWRfbWVtb3J5X2JhcnJpZXIoKQogI2luY2x1ZGUgPG1lZGlhL1NpbmdsZVN0YXRlUXVldWUuaD4KIAogbmFtZXNwYWNlIGFuZHJvaWQgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWEvVG9uZUdlbmVyYXRvci5jcHAgYi9tZWRpYS9saWJtZWRpYS9Ub25lR2VuZXJhdG9yLmNwcAppbmRleCA2MWI2ZDM2Li4yY2M0Njg1IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYS9Ub25lR2VuZXJhdG9yLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYS9Ub25lR2VuZXJhdG9yLmNwcApAQCAtMjgsNzE4ICsyOCw3MTggQEAKIAogLy8gRGVzY3JpcHRvcnMgZm9yIGFsbCBhdmFpbGFibGUgdG9uZXMgKFNlZSBUb25lR2VuZXJhdG9yOjpUb25lRGVzY3JpcHRvciBjbGFzcyBkZWNsYXJhdGlvbiBmb3IgZGV0YWlscykKIGNvbnN0IFRvbmVHZW5lcmF0b3I6OlRvbmVEZXNjcmlwdG9yIFRvbmVHZW5lcmF0b3I6OnNUb25lRGVzY3JpcHRvcnNbXSA9IHsKLSAgICAgICAgeyBzZWdtZW50czoge3sgZHVyYXRpb246IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCB3YXZlRnJlcTogeyAxMzM2LCA5NDEsIDAgfSwgMCwgMH0sCi0gICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzAKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTIwOSwgNjk3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzEKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTMzNiwgNjk3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzIKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTQ3NywgNjk3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzMKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTIwOSwgNzcwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzQKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTMzNiwgNzcwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzUKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTQ3NywgNzcwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzYKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTIwOSwgODUyLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzcKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTMzNiwgODUyLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzgKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTQ3NywgODUyLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzkKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTIwOSwgOTQxLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GX1MKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTQ3NywgOTQxLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GX1AKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTYzMywgNjk3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GX0EKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgMTYzMywgNzcwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfQgotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCB3YXZlRnJlcTogeyAxNjMzLCA4NTIsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfQwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCB3YXZlRnJlcTogeyAxNjMzLCA5NDEsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfRAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCB3YXZlRnJlcTogeyA0MjUsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9ESUFMCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogNTAwICwgd2F2ZUZyZXE6IHsgNDI1LCAwIH0sIDAsIDB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfQlVTWQotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgNDI1LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9DT05HRVNUSU9OCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyA0MjUsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfU1VQX1JBRElPX0FDSwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgNDI1LCAwIH0sIDAsIDB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAyLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9SQURJT19OT1RBVkFJTAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDMzMCwgd2F2ZUZyZXE6IHsgOTUwLCAxNDAwLCAxODAwLCAwIH0sIDAsIDB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEwMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfU1VQX0VSUk9SCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyA0MjUsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDYwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyA0MjUsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDMwMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9DQUxMX1dBSVRJTkcKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAxMDAwLCB3YXZlRnJlcTogeyA0MjUsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDQwMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9SSU5HVE9ORQotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDQwLCB3YXZlRnJlcTogeyA0MDAsIDEyMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfUFJPUF9CRUVQCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTAwLCB3YXZlRnJlcTogeyAxMjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAxLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1BST1BfQUNLCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogNDAwLCB3YXZlRnJlcTogeyAzMDAsIDQwMCwgNTAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1BST1BfTkFDSwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgNDAwLCAxMjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1BST1BfUFJPTVBUCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogNDAsIHdhdmVGcmVxOiB7IDQwMCwgMTIwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA0MCwgd2F2ZUZyZXE6IHsgNDAwLCAxMjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfUFJPUF9CRUVQMgotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1MCwgd2F2ZUZyZXE6IHsgNDQwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNTAsIHdhdmVGcmVxOiB7IDYyMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9JTlRFUkNFUFQKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNTAsIHdhdmVGcmVxOiB7IDQ0MCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUwLCB3YXZlRnJlcTogeyA2MjAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDcsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfSU5URVJDRVBUX0FCQlJFVgotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1MCwgd2F2ZUZyZXE6IHsgNDgwLCA2MjAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1MCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogNywKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9DT05HRVNUSU9OX0FCQlJFVgotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDEwMCwgd2F2ZUZyZXE6IHsgMzUwLCA0NDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogMiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9DT05GSVJNCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTAwLCB3YXZlRnJlcTogeyA0ODAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogMywKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfUElQCi0gICAgICAgIHsgc2VnbWVudHM6IHt7IGR1cmF0aW9uOiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgd2F2ZUZyZXE6IHsgNDI1LCAwIH0sIDAsIDB9LAotICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ESUFMX1RPTkVfTElURQotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDIwMDAsIHdhdmVGcmVxOiB7IDQ0MCwgNDgwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA0MDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX05FVFdPUktfVVNBX1JJTkdCQUNLCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUwLCB3YXZlRnJlcTogeyA0NDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1MCwgd2F2ZUZyZXE6IHsgNjIwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAgVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0lOVEVSQ0VQVAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1MCwgd2F2ZUZyZXE6IHsgNDQwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNTAsIHdhdmVGcmVxOiB7IDYyMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogIDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0FCQlJfSU5URVJDRVBUCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUwLCB3YXZlRnJlcTogeyA0ODAsIDYyMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX1JFT1JERVIKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNTAsIHdhdmVGcmVxOiB7IDQ4MCwgNjIwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNTAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDcsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9BQkJSX1JFT1JERVIKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDQ4MCwgNjIwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTkVUV09SS19CVVNZCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTAwLCB3YXZlRnJlcTogeyAzNTAsIDQ0MCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAyLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQ09ORklSTQotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDUwMCwgd2F2ZUZyZXE6IHsgNjYwLCAxMDAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQU5TV0VSCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMzAwLCB3YXZlRnJlcTogeyA0NDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ORVRXT1JLX0NBTExXQUlUSU5HCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTAwLCB3YXZlRnJlcTogeyA0ODAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogMywKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX1BJUAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyAxMzM2LCA5NDEsIDAgfSwgMCwgMH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfMAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyAxMjA5LCA2OTcsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzEKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsIC53YXZlRnJlcSA9IHsgMTMzNiwgNjk3LCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfRFRNRl8yCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCAud2F2ZUZyZXEgPSB7IDE0NzcsIDY5NywgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfMworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyAxMjA5LCA3NzAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzQKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsIC53YXZlRnJlcSA9IHsgMTMzNiwgNzcwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfRFRNRl81CisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCAud2F2ZUZyZXEgPSB7IDE0NzcsIDc3MCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfNgorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyAxMjA5LCA4NTIsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GXzcKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsIC53YXZlRnJlcSA9IHsgMTMzNiwgODUyLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfRFRNRl84CisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCAud2F2ZUZyZXEgPSB7IDE0NzcsIDg1MiwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfOQorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyAxMjA5LCA5NDEsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GX1MKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsIC53YXZlRnJlcSA9IHsgMTQ3NywgOTQxLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfRFRNRl9QCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCAud2F2ZUZyZXEgPSB7IDE2MzMsIDY5NywgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfQQorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyAxNjMzLCA3NzAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0RUTUZfQgorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyAxNjMzLCA4NTIsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9EVE1GX0MKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsIC53YXZlRnJlcSA9IHsgMTYzMywgOTQxLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfRFRNRl9ECisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCAud2F2ZUZyZXEgPSB7IDQyNSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9ESUFMCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDUwMCAsIC53YXZlRnJlcSA9IHsgNDI1LCAwIH0sIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfU1VQX0JVU1kKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDQyNSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfU1VQX0NPTkdFU1RJT04KKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDQyNSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfU1VQX1JBRElPX0FDSworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgNDI1LCAwIH0sIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDIsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfUkFESU9fTk9UQVZBSUwKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMzMwLCAud2F2ZUZyZXEgPSB7IDk1MCwgMTQwMCwgMTgwMCwgMCB9LCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMTAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfRVJST1IKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDQyNSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDYwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDQyNSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDMwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9DQUxMX1dBSVRJTkcKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMTAwMCwgLndhdmVGcmVxID0geyA0MjUsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA0MDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfUklOR1RPTkUKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gNDAsIC53YXZlRnJlcSA9IHsgNDAwLCAxMjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9QUk9QX0JFRVAKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMTAwLCAud2F2ZUZyZXEgPSB7IDEyMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMSwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1BST1BfQUNLCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDQwMCwgLndhdmVGcmVxID0geyAzMDAsIDQwMCwgNTAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9QUk9QX05BQ0sKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDQwMCwgMTIwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfUFJPUF9QUk9NUFQKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gNDAsIC53YXZlRnJlcSA9IHsgNDAwLCAxMjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA0MCwgLndhdmVGcmVxID0geyA0MDAsIDEyMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfUFJPUF9CRUVQMgorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNTAsIC53YXZlRnJlcSA9IHsgNDQwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUwLCAud2F2ZUZyZXEgPSB7IDYyMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfSU5URVJDRVBUCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyA0NDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNTAsIC53YXZlRnJlcSA9IHsgNjIwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDcsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9JTlRFUkNFUFRfQUJCUkVWCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyA0ODAsIDYyMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDcsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9DT05HRVNUSU9OX0FCQlJFVgorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAxMDAsIC53YXZlRnJlcSA9IHsgMzUwLCA0NDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAyLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9TVVBfQ09ORklSTQorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAxMDAsIC53YXZlRnJlcSA9IHsgNDgwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMywKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX1NVUF9QSVAKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7eyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyA0MjUsIDAgfSwgMCwgMH0sCisgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ESUFMX1RPTkVfTElURQorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyMDAwLCAud2F2ZUZyZXEgPSB7IDQ0MCwgNDgwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNDAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ORVRXT1JLX1VTQV9SSU5HQkFDSworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNTAsIC53YXZlRnJlcSA9IHsgNDQwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUwLCAud2F2ZUZyZXEgPSB7IDYyMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAgVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSU5URVJDRVBUCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyA0NDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNTAsIC53YXZlRnJlcSA9IHsgNjIwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9ICAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0FCQlJfSU5URVJDRVBUCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyA0ODAsIDYyMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9SRU9SREVSCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyA0ODAsIDYyMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1MCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDcsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0FCQlJfUkVPUkRFUgorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgNDgwLCA2MjAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTkVUV09SS19CVVNZCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDEwMCwgLndhdmVGcmVxID0geyAzNTAsIDQ0MCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDIsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NPTkZJUk0KKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDY2MCwgMTAwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9BTlNXRVIKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMzAwLCAud2F2ZUZyZXEgPSB7IDQ0MCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ORVRXT1JLX0NBTExXQUlUSU5HCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDEwMCwgLndhdmVGcmVxID0geyA0ODAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAzLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9QSVAKIAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDMyLCB3YXZlRnJlcTogeyAyMDkxLCAwfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDY0LCB3YXZlRnJlcTogeyAyNTU2LCAwfSwgMTksIDB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDMyLCB3YXZlRnJlcTogeyAyMDkxLCAwfSwgMCwgMH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNDgsIHdhdmVGcmVxOiB7IDI1NTYsIDB9LCAwLCAwfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA0MDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsICB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fTk9STUFMCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMzIsIHdhdmVGcmVxOiB7IDIwOTEsIDB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNjQsIHdhdmVGcmVxOiB7IDI1NTYsIDB9LCA3LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMzIsIHdhdmVGcmVxOiB7IDIwOTEsIDB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAzMiwgIHdhdmVGcmVxOiB7IDIwOTEsIDB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNjQsICB3YXZlRnJlcTogeyAyNTU2LCAwfSwgNywgNCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDMyLCAgd2F2ZUZyZXE6IHsgMjA5MSwgMH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA0MDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCAgICB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSB9LAotICAgICAgICAgIHJlcGVhdENudDogMCwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fSU5URVJHUk9VUAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDMyLCB3YXZlRnJlcTogeyAyMDkxLCAwfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDY0LCB3YXZlRnJlcTogeyAyNTU2LCAwfSwgMywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDE2LCB3YXZlRnJlcTogeyAyMDkxLCAwfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAgICAgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDMyLCB3YXZlRnJlcTogeyAyMDkxLCAwfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDY0LCB3YXZlRnJlcTogeyAyNTU2LCAwfSwgMywgNCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDE2LCB3YXZlRnJlcTogeyAyMDkxLCAwfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAgICAgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsICAgd2F2ZUZyZXE6IHsgMCB9LCAgICAgMCwgMCB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fU1BfUFJJCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMCwgIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH0gfSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQ0FMTF9TSUdOQUxfSVNETl9QQVQzCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMzIsIHdhdmVGcmVxOiB7IDIwOTEsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDY0LCB3YXZlRnJlcTogeyAyNTU2LCAwIH0sIDQsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMCwgd2F2ZUZyZXE6IHsgMjA5MSwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgIHdhdmVGcmVxOiB7IDAgfSAgICAgICwgMCwgMCB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9DQUxMX1NJR05BTF9JU0ROX1BJTkdfUklORwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDAsICB3YXZlRnJlcTogeyAwIH0sIDAsIDB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9DQUxMX1NJR05BTF9JU0ROX1BBVDUKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAwLCAgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfSB9LAotICAgICAgICAgIHJlcGVhdENudDogMCwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQ0FMTF9TSUdOQUxfSVNETl9QQVQ2Ci0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMCwgIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH0gfSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fUEFUNworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAzMiwgLndhdmVGcmVxID0geyAyMDkxLCAwfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2NCwgLndhdmVGcmVxID0geyAyNTU2LCAwfSwgMTksIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAzMiwgLndhdmVGcmVxID0geyAyMDkxLCAwfSwgMCwgMH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDQ4LCAud2F2ZUZyZXEgPSB7IDI1NTYsIDB9LCAwLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNDAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9DQUxMX1NJR05BTF9JU0ROX05PUk1BTAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAzMiwgLndhdmVGcmVxID0geyAyMDkxLCAwfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2NCwgLndhdmVGcmVxID0geyAyNTU2LCAwfSwgNywgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAzMiwgLndhdmVGcmVxID0geyAyMDkxLCAwfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA0MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDMyLCAgLndhdmVGcmVxID0geyAyMDkxLCAwfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2NCwgIC53YXZlRnJlcSA9IHsgMjU1NiwgMH0sIDcsIDQgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMzIsICAud2F2ZUZyZXEgPSB7IDIwOTEsIDB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDQwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsICAgIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQ0FMTF9TSUdOQUxfSVNETl9JTlRFUkdST1VQCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDMyLCAud2F2ZUZyZXEgPSB7IDIwOTEsIDB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDY0LCAud2F2ZUZyZXEgPSB7IDI1NTYsIDB9LCAzLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDE2LCAud2F2ZUZyZXEgPSB7IDIwOTEsIDB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sICAgICAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDMyLCAud2F2ZUZyZXEgPSB7IDIwOTEsIDB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDY0LCAud2F2ZUZyZXEgPSB7IDI1NTYsIDB9LCAzLCA0IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDE2LCAud2F2ZUZyZXEgPSB7IDIwOTEsIDB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sICAgICAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsICAgLndhdmVGcmVxID0geyAwIH0sICAgICAwLCAwIH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fU1BfUFJJCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDAsICAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fUEFUMworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAzMiwgLndhdmVGcmVxID0geyAyMDkxLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNjQsIC53YXZlRnJlcSA9IHsgMjU1NiwgMCB9LCA0LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwLCAud2F2ZUZyZXEgPSB7IDIwOTEsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAgLndhdmVGcmVxID0geyAwIH0gICAgICAsIDAsIDAgfSB9LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fUElOR19SSU5HCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDAsICAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9DQUxMX1NJR05BTF9JU0ROX1BBVDUKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMCwgIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfSB9LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0NBTExfU0lHTkFMX0lTRE5fUEFUNgorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAwLCAgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9IH0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQ0FMTF9TSUdOQUxfSVNETl9QQVQ3CiAKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgMzksIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA0MDAwLCB3YXZlRnJlcTogeyAwIH0sICAgICAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgICAgd2F2ZUZyZXE6IHsgMCB9LCAgICAgMCwgMCB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0hJR0hfTAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCAzOSwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDQwMDAsIHdhdmVGcmVxOiB7IDAgfSwgICAgIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCAgICB3YXZlRnJlcTogeyAwIH0sICAgICAwLCAwIH0gfSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTUVEX0wKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgMzksIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA0MDAwLCB3YXZlRnJlcTogeyAwIH0sICAgICAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgICAgd2F2ZUZyZXE6IHsgMCB9LCAgICAgMCwgMCB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19MCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDE1LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSB9LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1NTCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDE1LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX01FRF9TUwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCAxNSwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDQwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfU1MKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgNywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDcsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCAxNSwgNiB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDQwMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9TU0wKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgNywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDcsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCAxNSwgNiB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDQwMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTUVEX1NTTAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCA3LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgNywgMyB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDE1LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNDAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfU1NMCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDE5LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMTAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDE5LCAzIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMzAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1NTXzIKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgMTksIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgMTksIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAzMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX01FRF9TU18yCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDE5LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMTAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDE5LCAzIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMzAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfU1NfMgotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCA5LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgMTksIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCA5LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMzAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1NMUwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCA5LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgMTksIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCA5LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMzAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfU0xTCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDksIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCAxOSwgMyB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDksIDYgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAzMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19TTFMKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgOSwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDksIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCA5LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgOSwgOSB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9TX1g0Ci0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDksIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCA5LCAzIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgOSwgNiB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDksIDkgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX01FRF9TX1g0Ci0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDksIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCA5LCAzIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgOSwgNiB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDUwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDksIDkgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19TX1g0Ci0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDE5LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1BCWF9MCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDE5LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfUEJYX0wKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgMTksIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19QQlhfTAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCA3LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgNywgMyB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9QQlhfU1MKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgNywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDcsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX01FRF9QQlhfU1MKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgNywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDcsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19QQlhfU1MKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgNywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDcsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCAxNSwgNiB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEwMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9QQlhfU1NMCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDcsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCA3LCAzIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgMTUsIDYgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX01FRF9QQlhfU1NMCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDcsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCA3LCAzIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgMTUsIDYgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19QQlhfU1NMCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDcsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCAxNSwgMyB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDcsIDYgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0hJR0hfUEJYX1NMUwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCA3LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgMTUsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCA3LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMTAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfUEJYX1NMUwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCA3LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgMTUsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCA3LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMTAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfUEJYX1NMUwotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCA3LCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMzcwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDQwMDAsIDAgfSwgNywgMyB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDM3MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyA0MDAwLCAwIH0sIDcsIDYgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAzNzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgNDAwMCwgMCB9LCA3LCA5IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogODAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0hJR0hfUEJYX1NfWDQKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgNywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI2MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyOTAwLCAwIH0sIDcsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAyNjAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjkwMCwgMCB9LCA3LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMjYwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDI5MDAsIDAgfSwgNywgOSB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDgwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfUEJYX1NfWDQKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgNywgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDIwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDEzMDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxNDUwLCAwIH0sIDcsIDMgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDI1LCB3YXZlRnJlcTogeyAxMzAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTQ1MCwgMCB9LCA3LCA2IH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNSwgd2F2ZUZyZXE6IHsgMTMwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMjUsIHdhdmVGcmVxOiB7IDE0NTAsIDAgfSwgNywgOSB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDgwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfUEJYX1NfWDQKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgMzksIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNDAwMCwgLndhdmVGcmVxID0geyAwIH0sICAgICAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsICAgIC53YXZlRnJlcSA9IHsgMCB9LCAgICAgMCwgMCB9IH0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX0wKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgMzksIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNDAwMCwgLndhdmVGcmVxID0geyAwIH0sICAgICAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsICAgIC53YXZlRnJlcSA9IHsgMCB9LCAgICAgMCwgMCB9IH0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfTAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCAzOSwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA0MDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgICAgIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgICAgLndhdmVGcmVxID0geyAwIH0sICAgICAwLCAwIH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19MCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDE1LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDQwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSB9LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9TUworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCAxNSwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA0MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTUVEX1NTCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDE1LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDQwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfU1MKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgNywgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDcsIDMgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCAxNSwgNiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA0MDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0hJR0hfU1NMCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDcsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA3LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgMTUsIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNDAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfU1NMCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDcsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA3LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTMwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDE0NTAsIDAgfSwgMTUsIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNDAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfU1NMCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgMTksIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMTAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgMTksIDMgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMzAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1NTXzIKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgMTksIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMTAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgMTksIDMgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMzAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfU1NfMgorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCAxOSwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCAxOSwgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAzMDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0xPV19TU18yCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDksIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCAxOSwgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDksIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMzAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1NMUworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA5LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDUwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgMTksIDMgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA5LCA2IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDMwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTUVEX1NMUworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA5LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDUwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTMwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDE0NTAsIDAgfSwgMTksIDMgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA5LCA2IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDMwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTE9XX1NMUworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCA5LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDUwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgOSwgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDksIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCA5LCA5IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9TX1g0CisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDksIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA5LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDUwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgOSwgNiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDksIDkgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfU19YNAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA5LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDUwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTMwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDE0NTAsIDAgfSwgOSwgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDksIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA5LCA5IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTE9XX1NfWDQKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgMTksIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1BCWF9MCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDE5LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTUVEX1BCWF9MCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDE5LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTE9XX1BCWF9MCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDcsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCA3LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9QQlhfU1MKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgNywgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDcsIDMgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfUEJYX1NTCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDcsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA3LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTE9XX1BCWF9TUworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCA3LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgNywgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDE1LCA2IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfSElHSF9QQlhfU1NMCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDcsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA3LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgMTUsIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMTAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9NRURfUEJYX1NTTAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA3LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTMwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDE0NTAsIDAgfSwgNywgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDE1LCA2IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTE9XX1BCWF9TU0wKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgNywgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDE1LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgNywgNiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0hJR0hfUEJYX1NMUworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA3LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgMTUsIDMgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA3LCA2IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEwMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTUVEX1BCWF9TTFMKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTMwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDE0NTAsIDAgfSwgNywgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDE1LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTMwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDE0NTAsIDAgfSwgNywgNiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9fSwKKyAgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfUEJYX1NMUworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCA3LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMzcwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDQwMDAsIDAgfSwgNywgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDM3MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyA0MDAwLCAwIH0sIDcsIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAzNzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgNDAwMCwgMCB9LCA3LCA5IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDgwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9ISUdIX1BCWF9TX1g0CisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDcsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyNjAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjkwMCwgMCB9LCA3LCAzIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMjYwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI5MDAsIDAgfSwgNywgNiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDI2MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAyOTAwLCAwIH0sIDcsIDkgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gODAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX01FRF9QQlhfU19YNAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA3LCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDIwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTMwMCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDE0NTAsIDAgfSwgNywgMyB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDI1LCAud2F2ZUZyZXEgPSB7IDEzMDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxNDUwLCAwIH0sIDcsIDYgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyNSwgLndhdmVGcmVxID0geyAxMzAwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUsIC53YXZlRnJlcSA9IHsgMTQ1MCwgMCB9LCA3LCA5IH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDgwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9MT1dfUEJYX1NfWDQKIAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDYyLCB3YXZlRnJlcTogeyAxMTA5LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgNzg0LCAwIH0sICAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNjIsIHdhdmVGcmVxOiB7IDc0MCwgMCB9LCAgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDYyLCB3YXZlRnJlcTogeyA2MjIsIDAgfSwgIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgMTEwOSwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgIHdhdmVGcmVxOiB7IDAgfSwgICAgICAgMCwgMCB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0FMRVJUX05FVFdPUktfTElURQotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDYyLCB3YXZlRnJlcTogeyAxMjQ1LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgNjU5LCAwIH0sICAyLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNjIsIHdhdmVGcmVxOiB7IDEyNDUsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsICB3YXZlRnJlcTogeyAwIH0sICAgICAgIDAsIDAgfSB9LAotICAgICAgICAgIHJlcGVhdENudDogMCwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9BTEVSVF9BVVRPUkVESUFMX0xJVEUKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiA0MDAsIHdhdmVGcmVxOiB7IDExNTAsIDc3MCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgICB3YXZlRnJlcTogeyAwIH0sICAgICAgICAgICAgMCwgMCB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX09ORV9NSU5fQkVFUAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDEyMCwgd2F2ZUZyZXE6IHsgOTQxLCAxNDc3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCAgIHdhdmVGcmVxOiB7IDAgfSwgICAgICAgICAgICAwLCAwIH0gfSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfS0VZUEFEX1ZPTFVNRV9LRVlfTElURQotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDM3NSwgd2F2ZUZyZXE6IHsgNTg3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMjUsIHdhdmVGcmVxOiB7IDExNzUsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsICAgd2F2ZUZyZXE6IHsgMCB9LCAgICAgICAwLCAwIH0gfSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfUFJFU1NIT0xES0VZX0xJVEUKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgNTg3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgNzg0LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgODMxLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgNzg0LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA2Miwgd2F2ZUZyZXE6IHsgMTEwOSwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNjIsIHdhdmVGcmVxOiB7IDc4NCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNjIsIHdhdmVGcmVxOiB7IDgzMSwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNjIsIHdhdmVGcmVxOiB7IDc4NCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgIHdhdmVGcmVxOiB7IDAgfSwgICAgICAwLCAwIH0gfSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0FMRVJUX0lOQ0FMTF9MSVRFCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTI1LCB3YXZlRnJlcTogeyA5NDEsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEwLCAgd2F2ZUZyZXE6IHsgMCB9LCAgICAgIDIsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA0OTkwLCB3YXZlRnJlcTogeyAwIH0sICAgICAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgICAgd2F2ZUZyZXE6IHsgMCB9LCAgICAgMCwgMCB9IH0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9FTUVSR0VOQ1lfUklOR0JBQ0sKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAxMjUsIHdhdmVGcmVxOiB7IDEzMTksIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEyNSwgd2F2ZUZyZXE6IHsgMCB9LCAgICAgICAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgICB3YXZlRnJlcTogeyAwIH0sICAgICAgIDAsIDAgfSB9LAotICAgICAgICAgIHJlcGVhdENudDogMiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9BTEVSVF9DQUxMX0dVQVJECi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTI1LCB3YXZlRnJlcTogeyAxMDQ3LCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMjUsIHdhdmVGcmVxOiB7IDM3MCwgIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsICAgd2F2ZUZyZXE6IHsgMCB9LCAgICAgICAwLCAwIH0gfSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfU09GVF9FUlJPUl9MSVRFCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTI1LCB3YXZlRnJlcTogeyAxNDgwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMjUsIHdhdmVGcmVxOiB7IDEzOTcsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDEyNSwgd2F2ZUZyZXE6IHsgNzg0LCAwIH0sICAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCwgICB3YXZlRnJlcTogeyAwIH0sICAgICAgIDAsIDAgfSB9LAotICAgICAgICAgIHJlcGVhdENudDogMCwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9DQUxMRFJPUF9MSVRFCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDExMDksIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2MiwgLndhdmVGcmVxID0geyA3ODQsIDAgfSwgIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNjIsIC53YXZlRnJlcSA9IHsgNzQwLCAwIH0sICAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDYyMiwgMCB9LCAgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2MiwgLndhdmVGcmVxID0geyAxMTA5LCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgIC53YXZlRnJlcSA9IHsgMCB9LCAgICAgICAwLCAwIH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0FMRVJUX05FVFdPUktfTElURQorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSA2MiwgLndhdmVGcmVxID0geyAxMjQ1LCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNjIsIC53YXZlRnJlcSA9IHsgNjU5LCAwIH0sICAyLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDEyNDUsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAgLndhdmVGcmVxID0geyAwIH0sICAgICAgIDAsIDAgfSB9LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQUxFUlRfQVVUT1JFRElBTF9MSVRFCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDQwMCwgLndhdmVGcmVxID0geyAxMTUwLCA3NzAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAgIC53YXZlRnJlcSA9IHsgMCB9LCAgICAgICAgICAgIDAsIDAgfSB9LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfT05FX01JTl9CRUVQCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDEyMCwgLndhdmVGcmVxID0geyA5NDEsIDE0NzcsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAgIC53YXZlRnJlcSA9IHsgMCB9LCAgICAgICAgICAgIDAsIDAgfSB9LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAwLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfS0VZUEFEX1ZPTFVNRV9LRVlfTElURQorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAzNzUsIC53YXZlRnJlcSA9IHsgNTg3LCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMTI1LCAud2F2ZUZyZXEgPSB7IDExNzUsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAgIC53YXZlRnJlcSA9IHsgMCB9LCAgICAgICAwLCAwIH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX1BSRVNTSE9MREtFWV9MSVRFCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDU4NywgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDc4NCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDgzMSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDc4NCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDYyLCAud2F2ZUZyZXEgPSB7IDExMDksIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2MiwgLndhdmVGcmVxID0geyA3ODQsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2MiwgLndhdmVGcmVxID0geyA4MzEsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA2MiwgLndhdmVGcmVxID0geyA3ODQsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwLCAgLndhdmVGcmVxID0geyAwIH0sICAgICAgMCwgMCB9IH0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQUxFUlRfSU5DQUxMX0xJVEUKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMTI1LCAud2F2ZUZyZXEgPSB7IDk0MSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEwLCAgLndhdmVGcmVxID0geyAwIH0sICAgICAgMiwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA0OTkwLCAud2F2ZUZyZXEgPSB7IDAgfSwgICAgIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgICAgLndhdmVGcmVxID0geyAwIH0sICAgICAwLCAwIH0gfSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9FTUVSR0VOQ1lfUklOR0JBQ0sKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMTI1LCAud2F2ZUZyZXEgPSB7IDEzMTksIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMjUsIC53YXZlRnJlcSA9IHsgMCB9LCAgICAgICAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAsICAgLndhdmVGcmVxID0geyAwIH0sICAgICAgIDAsIDAgfSB9LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSAyLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfQUxFUlRfQ0FMTF9HVUFSRAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAxMjUsIC53YXZlRnJlcSA9IHsgMTA0NywgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEyNSwgLndhdmVGcmVxID0geyAzNzAsICAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgICAud2F2ZUZyZXEgPSB7IDAgfSwgICAgICAgMCwgMCB9IH0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9TT0ZUX0VSUk9SX0xJVEUKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMTI1LCAud2F2ZUZyZXEgPSB7IDE0ODAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMjUsIC53YXZlRnJlcSA9IHsgMTM5NywgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEyNSwgLndhdmVGcmVxID0geyA3ODQsIDAgfSwgIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgICAud2F2ZUZyZXEgPSB7IDAgfSwgICAgICAgMCwgMCB9IH0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9DQUxMRFJPUF9MSVRFCiAKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDQyNSwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0NETUFfTkVUV09SS19CVVNZX09ORV9TSE9UCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogNDAwLCB3YXZlRnJlcTogeyAxMTUwLCA3NzAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IDAsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQ0RNQV9BQkJSX0FMRVJUCi0gICAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiAwLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX1NJR05BTF9PRkYKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDQyNSwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDUwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX05FVFdPUktfQlVTWV9PTkVfU0hPVAorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSA0MDAsIC53YXZlRnJlcSA9IHsgMTE1MCwgNzcwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IDAsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX0FCQlJfQUxFUlQKKyAgICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gMCwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9DRE1BX1NJR05BTF9PRkYKIAotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCB3YXZlRnJlcTogeyAzNTAsIDQ0MCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQU5TSV9ESUFMCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyA0ODAsIDYyMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9BTlNJX0JVU1kKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyNTAsIHdhdmVGcmVxOiB7IDQ4MCwgNjIwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyNTAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0FOU0lfQ09OR0VTVElPTgotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IDMwMCwgd2F2ZUZyZXE6IHsgNDQwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiA5NzAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMDAsIHdhdmVGcmVxOiB7IDQ0MCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAxMDAsIHdhdmVGcmVxOiB7IDQ0MCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMSB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQU5TSV9DQUxMX1dBSVRJTkcKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiAyMDAwLCB3YXZlRnJlcTogeyA0NDAsIDQ4MCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNDAwMCwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogMCAsIHdhdmVGcmVxOiB7IDAgfSwgMCwgMH19LAotICAgICAgICAgIHJlcGVhdENudDogVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCi0gICAgICAgICAgcmVwZWF0U2VnbWVudDogMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQU5TSV9SSU5HVE9ORQotICAgICAgICB7IHNlZ21lbnRzOiB7IHsgZHVyYXRpb246IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLCB3YXZlRnJlcTogeyA0MDAsIDAgfSwgMCwgMCB9LAotICAgICAgICAgICAgICAgICAgICAgIHsgZHVyYXRpb246IDAgLCB3YXZlRnJlcTogeyAwIH0sIDAsIDB9fSwKLSAgICAgICAgICByZXBlYXRDbnQ6IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAotICAgICAgICAgIHJlcGVhdFNlZ21lbnQ6IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0pBUEFOX0RJQUwKLSAgICAgICAgeyBzZWdtZW50czogeyB7IGR1cmF0aW9uOiA1MDAsIHdhdmVGcmVxOiB7IDQwMCwgMCB9LCAwLCAwIH0sCi0gICAgICAgICAgICAgICAgICAgICAgeyBkdXJhdGlvbjogNTAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9KQVBBTl9CVVNZCi0gICAgICAgIHsgc2VnbWVudHM6IHsgeyBkdXJhdGlvbjogMTAwMCwgd2F2ZUZyZXE6IHsgNDAwLCAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAyMDAwLCB3YXZlRnJlcTogeyAwIH0sIDAsIDAgfSwKLSAgICAgICAgICAgICAgICAgICAgICB7IGR1cmF0aW9uOiAwICwgd2F2ZUZyZXE6IHsgMCB9LCAwLCAwfX0sCi0gICAgICAgICAgcmVwZWF0Q250OiBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKLSAgICAgICAgICByZXBlYXRTZWdtZW50OiAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9KQVBBTl9SQURJT19BQ0sKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsIC53YXZlRnJlcSA9IHsgMzUwLCA0NDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9BTlNJX0RJQUwKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDQ4MCwgNjIwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNTAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9BTlNJX0JVU1kKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMjUwLCAud2F2ZUZyZXEgPSB7IDQ4MCwgNjIwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMjUwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9BTlNJX0NPTkdFU1RJT04KKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMzAwLCAud2F2ZUZyZXEgPSB7IDQ0MCwgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDk3MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEwMCwgLndhdmVGcmVxID0geyA0NDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAxMDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDEwMCwgLndhdmVGcmVxID0geyA0NDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAxIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9BTlNJX0NBTExfV0FJVElORworICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSAyMDAwLCAud2F2ZUZyZXEgPSB7IDQ0MCwgNDgwLCAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gNDAwMCwgLndhdmVGcmVxID0geyAwIH0sIDAsIDAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHsgLmR1cmF0aW9uID0gMCAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwfX0sCisgICAgICAgICAgLnJlcGVhdENudCA9IFRvbmVHZW5lcmF0b3I6OlRPTkVHRU5fSU5GLAorICAgICAgICAgIC5yZXBlYXRTZWdtZW50ID0gMCB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPTkVfQU5TSV9SSU5HVE9ORQorICAgICAgICB7IC5zZWdtZW50cyA9IHsgeyAuZHVyYXRpb24gPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwgLndhdmVGcmVxID0geyA0MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9KQVBBTl9ESUFMCisgICAgICAgIHsgLnNlZ21lbnRzID0geyB7IC5kdXJhdGlvbiA9IDUwMCwgLndhdmVGcmVxID0geyA0MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSA1MDAsIC53YXZlRnJlcSA9IHsgMCB9LCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICB7IC5kdXJhdGlvbiA9IDAgLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMH19LAorICAgICAgICAgIC5yZXBlYXRDbnQgPSBUb25lR2VuZXJhdG9yOjpUT05FR0VOX0lORiwKKyAgICAgICAgICAucmVwZWF0U2VnbWVudCA9IDAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT05FX0pBUEFOX0JVU1kKKyAgICAgICAgeyAuc2VnbWVudHMgPSB7IHsgLmR1cmF0aW9uID0gMTAwMCwgLndhdmVGcmVxID0geyA0MDAsIDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAyMDAwLCAud2F2ZUZyZXEgPSB7IDAgfSwgMCwgMCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgeyAuZHVyYXRpb24gPSAwICwgLndhdmVGcmVxID0geyAwIH0sIDAsIDB9fSwKKyAgICAgICAgICAucmVwZWF0Q250ID0gVG9uZUdlbmVyYXRvcjo6VE9ORUdFTl9JTkYsCisgICAgICAgICAgLnJlcGVhdFNlZ21lbnQgPSAwIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ORV9KQVBBTl9SQURJT19BQ0sKIAogCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhL21lZGlhbWV0YWRhdGFyZXRyaWV2ZXIuY3BwIGIvbWVkaWEvbGlibWVkaWEvbWVkaWFtZXRhZGF0YXJldHJpZXZlci5jcHAKaW5kZXggMzlhMjM5ZC4uOGU4YTFlZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWEvbWVkaWFtZXRhZGF0YXJldHJpZXZlci5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWEvbWVkaWFtZXRhZGF0YXJldHJpZXZlci5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQAogewogICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKHNTZXJ2aWNlTG9jayk7CiAgICAgaWYgKHNTZXJ2aWNlICE9IDApIHsKLSAgICAgICAgc1NlcnZpY2UtPmFzQmluZGVyKCktPnVubGlua1RvRGVhdGgodGhpcyk7CisgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKHNTZXJ2aWNlKS0+dW5saW5rVG9EZWF0aCh0aGlzKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9BbmRyb2lkLm1rIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQubWsKaW5kZXggMmNmNTcxMC4uOWQ4ZmU2MiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQubWsKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL0FuZHJvaWQubWsKQEAgLTE1LDggKzE1LDYgQEAKICAgICBNZWRpYVBsYXllclNlcnZpY2UuY3BwICAgICAgXAogICAgIE1lZGlhUmVjb3JkZXJDbGllbnQuY3BwICAgICBcCiAgICAgTWV0YWRhdGFSZXRyaWV2ZXJDbGllbnQuY3BwIFwKLSAgICBNaWRpRmlsZS5jcHAgICAgICAgICAgICAgICAgXAotICAgIE1pZGlNZXRhZGF0YVJldHJpZXZlci5jcHAgICBcCiAgICAgUmVtb3RlRGlzcGxheS5jcHAgICAgICAgICAgIFwKICAgICBTaGFyZWRMaWJyYXJ5LmNwcCAgICAgICAgICAgXAogICAgIFN0YWdlZnJpZ2h0UGxheWVyLmNwcCAgICAgICBcCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvRHJtLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9Ecm0uY3BwCmluZGV4IDgxZGFkNDEuLjczZjFhMmEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9Ecm0uY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9Ecm0uY3BwCkBAIC04NCwxMCArODQsMTAgQEAKIHsKICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtRXZlbnRMb2NrKTsKICAgICBpZiAobUxpc3RlbmVyICE9IE5VTEwpewotICAgICAgICBtTGlzdGVuZXItPmFzQmluZGVyKCktPnVubGlua1RvRGVhdGgodGhpcyk7CisgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKG1MaXN0ZW5lciktPnVubGlua1RvRGVhdGgodGhpcyk7CiAgICAgfQogICAgIGlmIChsaXN0ZW5lciAhPSBOVUxMKSB7Ci0gICAgICAgIGxpc3RlbmVyLT5hc0JpbmRlcigpLT5saW5rVG9EZWF0aCh0aGlzKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIobGlzdGVuZXIpLT5saW5rVG9EZWF0aCh0aGlzKTsKICAgICB9CiAgICAgbUxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICAgcmV0dXJuIE5PX0VSUk9SOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL01lZGlhUGxheWVyRmFjdG9yeS5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWVkaWFQbGF5ZXJGYWN0b3J5LmNwcAppbmRleCBhZWVmYjRjLi40ODg4NGI5IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWVkaWFQbGF5ZXJGYWN0b3J5LmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWVkaWFQbGF5ZXJGYWN0b3J5LmNwcApAQCAtMTUsNiArMTUsNyBAQAogKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAqLwogCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCiAjZGVmaW5lIExPR19UQUcgIk1lZGlhUGxheWVyRmFjdG9yeSIKICNpbmNsdWRlIDx1dGlscy9Mb2cuaD4KIApAQCAtMjksNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJGYWN0b3J5LmgiCiAKLSNpbmNsdWRlICJNaWRpRmlsZS5oIgogI2luY2x1ZGUgIlRlc3RQbGF5ZXJTdHViLmgiCiAjaW5jbHVkZSAiU3RhZ2VmcmlnaHRQbGF5ZXIuaCIKICNpbmNsdWRlICJudXBsYXllci9OdVBsYXllckRyaXZlci5oIgpAQCAtMjc5LDc1ICsyNzksNiBAQAogICAgIH0KIH07CiAKLWNsYXNzIFNvbml2b3hQbGF5ZXJGYWN0b3J5IDogcHVibGljIE1lZGlhUGxheWVyRmFjdG9yeTo6SUZhY3RvcnkgewotICBwdWJsaWM6Ci0gICAgdmlydHVhbCBmbG9hdCBzY29yZUZhY3RvcnkoY29uc3Qgc3A8SU1lZGlhUGxheWVyPiYgLypjbGllbnQqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB1cmwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VyU2NvcmUpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGtPdXJTY29yZSA9IDAuNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEZJTEVfRVhUU1tdID0geyAiLm1pZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5taWRpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLnNtZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi54bWYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIubXhtZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi5pbXkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIucnR0dGwiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIucnR4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLm90YSIgfTsKLSAgICAgICAgaWYgKGtPdXJTY29yZSA8PSBjdXJTY29yZSkKLSAgICAgICAgICAgIHJldHVybiAwLjA7Ci0KLSAgICAgICAgLy8gdXNlIE1pZGlGaWxlIGZvciBNSURJIGV4dGVuc2lvbnMKLSAgICAgICAgaW50IGxlblVSTCA9IHN0cmxlbih1cmwpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5FTEVNKEZJTEVfRVhUUyk7ICsraSkgewotICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihGSUxFX0VYVFNbaV0pOwotICAgICAgICAgICAgaW50IHN0YXJ0ID0gbGVuVVJMIC0gbGVuOwotICAgICAgICAgICAgaWYgKHN0YXJ0ID4gMCkgewotICAgICAgICAgICAgICAgIGlmICghc3RybmNhc2VjbXAodXJsICsgc3RhcnQsIEZJTEVfRVhUU1tpXSwgbGVuKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4ga091clNjb3JlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAwLjA7Ci0gICAgfQotCi0gICAgdmlydHVhbCBmbG9hdCBzY29yZUZhY3RvcnkoY29uc3Qgc3A8SU1lZGlhUGxheWVyPiYgLypjbGllbnQqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgY3VyU2NvcmUpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGtPdXJTY29yZSA9IDAuODsKLQotICAgICAgICBpZiAoa091clNjb3JlIDw9IGN1clNjb3JlKQotICAgICAgICAgICAgcmV0dXJuIDAuMDsKLQotICAgICAgICAvLyBTb21lIGtpbmQgb2YgTUlEST8KLSAgICAgICAgRUFTX0RBVEFfSEFORExFIGVhc2RhdGE7Ci0gICAgICAgIGlmIChFQVNfSW5pdCgmZWFzZGF0YSkgPT0gRUFTX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIEVBU19GSUxFIGxvY2F0b3I7Ci0gICAgICAgICAgICBsb2NhdG9yLnBhdGggPSBOVUxMOwotICAgICAgICAgICAgbG9jYXRvci5mZCA9IGZkOwotICAgICAgICAgICAgbG9jYXRvci5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgICAgICAgICBsb2NhdG9yLmxlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgIEVBU19IQU5ETEUgIGVhc2hhbmRsZTsKLSAgICAgICAgICAgIGlmIChFQVNfT3BlbkZpbGUoZWFzZGF0YSwgJmxvY2F0b3IsICZlYXNoYW5kbGUpID09IEVBU19TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgRUFTX0Nsb3NlRmlsZShlYXNkYXRhLCBlYXNoYW5kbGUpOwotICAgICAgICAgICAgICAgIEVBU19TaHV0ZG93bihlYXNkYXRhKTsKLSAgICAgICAgICAgICAgICByZXR1cm4ga091clNjb3JlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRUFTX1NodXRkb3duKGVhc2RhdGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIDAuMDsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHNwPE1lZGlhUGxheWVyQmFzZT4gY3JlYXRlUGxheWVyKCkgewotICAgICAgICBBTE9HVigiIGNyZWF0ZSBNaWRpRmlsZSIpOwotICAgICAgICByZXR1cm4gbmV3IE1pZGlGaWxlKCk7Ci0gICAgfQotfTsKLQogY2xhc3MgVGVzdFBsYXllckZhY3RvcnkgOiBwdWJsaWMgTWVkaWFQbGF5ZXJGYWN0b3J5OjpJRmFjdG9yeSB7CiAgIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IHNjb3JlRmFjdG9yeShjb25zdCBzcDxJTWVkaWFQbGF5ZXI+JiAvKmNsaWVudCovLApAQCAtMzc0LDcgKzMwNSw2IEBACiAKICAgICByZWdpc3RlckZhY3RvcnlfbChuZXcgU3RhZ2VmcmlnaHRQbGF5ZXJGYWN0b3J5KCksIFNUQUdFRlJJR0hUX1BMQVlFUik7CiAgICAgcmVnaXN0ZXJGYWN0b3J5X2wobmV3IE51UGxheWVyRmFjdG9yeSgpLCBOVV9QTEFZRVIpOwotICAgIHJlZ2lzdGVyRmFjdG9yeV9sKG5ldyBTb25pdm94UGxheWVyRmFjdG9yeSgpLCBTT05JVk9YX1BMQVlFUik7CiAgICAgcmVnaXN0ZXJGYWN0b3J5X2wobmV3IFRlc3RQbGF5ZXJGYWN0b3J5KCksIFRFU1RfUExBWUVSKTsKIAogICAgIHNJbml0Q29tcGxldGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL01lZGlhUGxheWVyU2VydmljZS5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWVkaWFQbGF5ZXJTZXJ2aWNlLmNwcAppbmRleCBkNDYxYWYzLi5jZjY3NzFlIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWVkaWFQbGF5ZXJTZXJ2aWNlLmNwcAorKysgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWVkaWFQbGF5ZXJTZXJ2aWNlLmNwcApAQCAtNzAsNyArNzAsNiBAQAogI2luY2x1ZGUgIk1ldGFkYXRhUmV0cmlldmVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJGYWN0b3J5LmgiCiAKLSNpbmNsdWRlICJNaWRpRmlsZS5oIgogI2luY2x1ZGUgIlRlc3RQbGF5ZXJTdHViLmgiCiAjaW5jbHVkZSAiU3RhZ2VmcmlnaHRQbGF5ZXIuaCIKICNpbmNsdWRlICJudXBsYXllci9OdVBsYXllckRyaXZlci5oIgpAQCAtODE3LDggKzgxNiw3IEBACiAgICAgc3A8TWVkaWFQbGF5ZXJCYXNlPiBwID0gZ2V0UGxheWVyKCk7CiAgICAgaWYgKHAgPT0gMCkgcmV0dXJuIFVOS05PV05fRVJST1I7CiAKLSAgICBzcDxJQmluZGVyPiBiaW5kZXIoYnVmZmVyUHJvZHVjZXIgPT0gTlVMTCA/IE5VTEwgOgotICAgICAgICAgICAgYnVmZmVyUHJvZHVjZXItPmFzQmluZGVyKCkpOworICAgIHNwPElCaW5kZXI+IGJpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihidWZmZXJQcm9kdWNlcikpOwogICAgIGlmIChtQ29ubmVjdGVkV2luZG93QmluZGVyID09IGJpbmRlcikgewogICAgICAgICByZXR1cm4gT0s7CiAgICAgfQpAQCAtMTM5OSw3ICsxMzk3LDYgQEAKIAogRXhpdDoKICAgICBpZiAocGxheWVyICE9IDApIHBsYXllci0+cmVzZXQoKTsKLSAgICA6OmNsb3NlKGZkKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWV0YWRhdGFSZXRyaWV2ZXJDbGllbnQuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL01ldGFkYXRhUmV0cmlldmVyQ2xpZW50LmNwcAppbmRleCBmYTI4NDUxLi43MTVjYzBjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWV0YWRhdGFSZXRyaWV2ZXJDbGllbnQuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9NZXRhZGF0YVJldHJpZXZlckNsaWVudC5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxtZWRpYS9NZWRpYU1ldGFkYXRhUmV0cmlldmVySW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvTWVkaWFQbGF5ZXJJbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxwcml2YXRlL21lZGlhL1ZpZGVvRnJhbWUuaD4KLSNpbmNsdWRlICJNaWRpTWV0YWRhdGFSZXRyaWV2ZXIuaCIKICNpbmNsdWRlICJNZXRhZGF0YVJldHJpZXZlckNsaWVudC5oIgogI2luY2x1ZGUgIlN0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllckZhY3RvcnkuaCIKQEAgLTkwLDEwICs4OSw2IEBACiAgICAgICAgICAgICBwID0gbmV3IFN0YWdlZnJpZ2h0TWV0YWRhdGFSZXRyaWV2ZXI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIFNPTklWT1hfUExBWUVSOgotICAgICAgICAgICAgQUxPR1YoImNyZWF0ZSBtaWRpIG1ldGFkYXRhIHJldHJpZXZlciIpOwotICAgICAgICAgICAgcCA9IG5ldyBNaWRpTWV0YWRhdGFSZXRyaWV2ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gVE9ETzoKICAgICAgICAgICAgIC8vIHN1cHBvcnQgZm9yIFRFU1RfUExBWUVSCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWlkaUZpbGUuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL01pZGlGaWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBjYmQzYy4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWlkaUZpbGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTYwICswLDAgQEAKLS8qIE1pZGlGaWxlLmNwcAotKioKLSoqIENvcHlyaWdodCAyMDA3LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi0vLyNkZWZpbmUgTE9HX05ERUJVRyAwCi0jZGVmaW5lIExPR19UQUcgIk1pZGlGaWxlIgotI2luY2x1ZGUgInV0aWxzL0xvZy5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHNjaGVkLmg+Ci0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpYnNvbml2b3gvZWFzX3JldmVyYi5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlIDxzeXN0ZW0vYXVkaW8uaD4KLQotI2luY2x1ZGUgIk1pZGlGaWxlLmgiCi0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS8vIFRoZSBtaWRpIGVuZ2luZSBidWZmZXJzIGFyZSBhIGJpdCBzbWFsbCAoMTI4IGZyYW1lcyksIHNvIHdlIGJhdGNoIHRoZW0gdXAKLXN0YXRpYyBjb25zdCBpbnQgTlVNX0JVRkZFUlMgPSA0OwotCi0vLyBUT0RPOiBEZXRlcm1pbmUgYXBwcm9wcmlhdGUgcmV0dXJuIGNvZGVzCi1zdGF0aWMgc3RhdHVzX3QgRVJST1JfTk9UX09QRU4gPSAtMTsKLXN0YXRpYyBzdGF0dXNfdCBFUlJPUl9PUEVOX0ZBSUxFRCA9IC0yOwotc3RhdGljIHN0YXR1c190IEVSUk9SX0VBU19GQUlMVVJFID0gLTM7Ci1zdGF0aWMgc3RhdHVzX3QgRVJST1JfQUxMT0NBVEVfRkFJTEVEID0gLTQ7Ci0KLXN0YXRpYyBjb25zdCBTX0VBU19MSUJfQ09ORklHKiBwTGliQ29uZmlnID0gTlVMTDsKLQotTWlkaUZpbGU6Ok1pZGlGaWxlKCkgOgotICAgIG1FYXNEYXRhKE5VTEwpLCBtRWFzSGFuZGxlKE5VTEwpLCBtQXVkaW9CdWZmZXIoTlVMTCksCi0gICAgbVBsYXlUaW1lKC0xKSwgbUR1cmF0aW9uKC0xKSwgbVN0YXRlKEVBU19TVEFURV9FUlJPUiksCi0gICAgbVN0cmVhbVR5cGUoQVVESU9fU1RSRUFNX01VU0lDKSwgbUxvb3AoZmFsc2UpLCBtRXhpdChmYWxzZSksCi0gICAgbVBhdXNlZChmYWxzZSksIG1SZW5kZXIoZmFsc2UpLCBtVGlkKC0xKQotewotICAgIEFMT0dWKCJjb25zdHJ1Y3RvciIpOwotCi0gICAgbUZpbGVMb2NhdG9yLnBhdGggPSBOVUxMOwotICAgIG1GaWxlTG9jYXRvci5mZCA9IC0xOwotICAgIG1GaWxlTG9jYXRvci5vZmZzZXQgPSAwOwotICAgIG1GaWxlTG9jYXRvci5sZW5ndGggPSAwOwotCi0gICAgLy8gZ2V0IHRoZSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gYW5kIGRvIHNhbml0eSBjaGVjawotICAgIGlmIChwTGliQ29uZmlnID09IE5VTEwpCi0gICAgICAgIHBMaWJDb25maWcgPSBFQVNfQ29uZmlnKCk7Ci0gICAgaWYgKChwTGliQ29uZmlnID09IE5VTEwpIHx8IChMSUJfVkVSU0lPTiAhPSBwTGliQ29uZmlnLT5saWJWZXJzaW9uKSkgewotICAgICAgICBBTE9HRSgiRUFTIGxpYnJhcnkvaGVhZGVyIG1pc21hdGNoIik7Ci0gICAgICAgIGdvdG8gRmFpbGVkOwotICAgIH0KLQotICAgIC8vIGluaXRpYWxpemUgRUFTIGxpYnJhcnkKLSAgICBpZiAoRUFTX0luaXQoJm1FYXNEYXRhKSAhPSBFQVNfU1VDQ0VTUykgewotICAgICAgICBBTE9HRSgiRUFTX0luaXQgZmFpbGVkIik7Ci0gICAgICAgIGdvdG8gRmFpbGVkOwotICAgIH0KLQotICAgIC8vIHNlbGVjdCByZXZlcmIgcHJlc2V0IGFuZCBlbmFibGUKLSAgICBFQVNfU2V0UGFyYW1ldGVyKG1FYXNEYXRhLCBFQVNfTU9EVUxFX1JFVkVSQiwgRUFTX1BBUkFNX1JFVkVSQl9QUkVTRVQsIEVBU19QQVJBTV9SRVZFUkJfQ0hBTUJFUik7Ci0gICAgRUFTX1NldFBhcmFtZXRlcihtRWFzRGF0YSwgRUFTX01PRFVMRV9SRVZFUkIsIEVBU19QQVJBTV9SRVZFUkJfQllQQVNTLCBFQVNfRkFMU0UpOwotCi0gICAgLy8gY3JlYXRlIHBsYXliYWNrIHRocmVhZAotICAgIHsKLSAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGwobU11dGV4KTsKLSAgICAgICAgbVRocmVhZCA9IG5ldyBNaWRpRmlsZVRocmVhZCh0aGlzKTsKLSAgICAgICAgbVRocmVhZC0+cnVuKCJtaWRpdGhyZWFkIiwgQU5EUk9JRF9QUklPUklUWV9BVURJTyk7Ci0gICAgICAgIG1Db25kaXRpb24ud2FpdChtTXV0ZXgpOwotICAgICAgICBBTE9HVigidGhyZWFkIHN0YXJ0ZWQiKTsKLSAgICB9Ci0KLSAgICAvLyBpbmRpY2F0ZSBzdWNjZXNzCi0gICAgaWYgKG1UaWQgPiAwKSB7Ci0gICAgICAgIEFMT0dWKCIgcmVuZGVyIHRocmVhZCglZCkgc3RhcnRlZCIsIG1UaWQpOwotICAgICAgICBtU3RhdGUgPSBFQVNfU1RBVEVfUkVBRFk7Ci0gICAgfQotCi1GYWlsZWQ6Ci0gICAgcmV0dXJuOwotfQotCi1zdGF0dXNfdCBNaWRpRmlsZTo6aW5pdENoZWNrKCkKLXsKLSAgICBpZiAobVN0YXRlID09IEVBU19TVEFURV9FUlJPUikgcmV0dXJuIEVSUk9SX0VBU19GQUlMVVJFOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotTWlkaUZpbGU6On5NaWRpRmlsZSgpIHsKLSAgICBBTE9HVigiTWlkaUZpbGUgZGVzdHJ1Y3RvciIpOwotICAgIHJlbGVhc2UoKTsKLX0KLQotc3RhdHVzX3QgTWlkaUZpbGU6OnNldERhdGFTb3VyY2UoCi0gICAgICAgIGNvbnN0IHNwPElNZWRpYUhUVFBTZXJ2aWNlPiAmIC8qaHR0cFNlcnZpY2UqLywKLSAgICAgICAgY29uc3QgY2hhciogcGF0aCwKLSAgICAgICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgU3RyaW5nOD4gKikgewotICAgIEFMT0dWKCJNaWRpRmlsZTo6c2V0RGF0YVNvdXJjZSB1cmw9JXMiLCBwYXRoKTsKLSAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTXV0ZXgpOwotCi0gICAgLy8gZmlsZSBzdGlsbCBvcGVuPwotICAgIGlmIChtRWFzSGFuZGxlKSB7Ci0gICAgICAgIHJlc2V0X25vc3luYygpOwotICAgIH0KLQotICAgIC8vIG9wZW4gZmlsZSBhbmQgc2V0IHBhdXNlZCBzdGF0ZQotICAgIG1GaWxlTG9jYXRvci5wYXRoID0gc3RyZHVwKHBhdGgpOwotICAgIG1GaWxlTG9jYXRvci5mZCA9IC0xOwotICAgIG1GaWxlTG9jYXRvci5vZmZzZXQgPSAwOwotICAgIG1GaWxlTG9jYXRvci5sZW5ndGggPSAwOwotICAgIEVBU19SRVNVTFQgcmVzdWx0ID0gRUFTX09wZW5GaWxlKG1FYXNEYXRhLCAmbUZpbGVMb2NhdG9yLCAmbUVhc0hhbmRsZSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBFQVNfU1VDQ0VTUykgewotICAgICAgICB1cGRhdGVTdGF0ZSgpOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0gRUFTX1NVQ0NFU1MpIHsKLSAgICAgICAgQUxPR0UoIkVBU19PcGVuRmlsZSBmYWlsZWQ6IFslZF0iLCAoaW50KXJlc3VsdCk7Ci0gICAgICAgIG1TdGF0ZSA9IEVBU19TVEFURV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIEVSUk9SX09QRU5fRkFJTEVEOwotICAgIH0KLQotICAgIG1TdGF0ZSA9IEVBU19TVEFURV9PUEVOOwotICAgIG1QbGF5VGltZSA9IDA7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBNaWRpRmlsZTo6c2V0RGF0YVNvdXJjZShpbnQgZmQsIGludDY0X3Qgb2Zmc2V0LCBpbnQ2NF90IGxlbmd0aCkKLXsKLSAgICBBTE9HVigiTWlkaUZpbGU6OnNldERhdGFTb3VyY2UgZmQ9JWQiLCBmZCk7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKLQotICAgIC8vIGZpbGUgc3RpbGwgb3Blbj8KLSAgICBpZiAobUVhc0hhbmRsZSkgewotICAgICAgICByZXNldF9ub3N5bmMoKTsKLSAgICB9Ci0KLSAgICAvLyBvcGVuIGZpbGUgYW5kIHNldCBwYXVzZWQgc3RhdGUKLSAgICBtRmlsZUxvY2F0b3IuZmQgPSBkdXAoZmQpOwotICAgIG1GaWxlTG9jYXRvci5vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgbUZpbGVMb2NhdG9yLmxlbmd0aCA9IGxlbmd0aDsKLSAgICBFQVNfUkVTVUxUIHJlc3VsdCA9IEVBU19PcGVuRmlsZShtRWFzRGF0YSwgJm1GaWxlTG9jYXRvciwgJm1FYXNIYW5kbGUpOwotICAgIHVwZGF0ZVN0YXRlKCk7Ci0KLSAgICBpZiAocmVzdWx0ICE9IEVBU19TVUNDRVNTKSB7Ci0gICAgICAgIEFMT0dFKCJFQVNfT3BlbkZpbGUgZmFpbGVkOiBbJWRdIiwgKGludClyZXN1bHQpOwotICAgICAgICBtU3RhdGUgPSBFQVNfU1RBVEVfRVJST1I7Ci0gICAgICAgIHJldHVybiBFUlJPUl9PUEVOX0ZBSUxFRDsKLSAgICB9Ci0KLSAgICBtU3RhdGUgPSBFQVNfU1RBVEVfT1BFTjsKLSAgICBtUGxheVRpbWUgPSAwOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgTWlkaUZpbGU6OnByZXBhcmUoKQotewotICAgIEFMT0dWKCJNaWRpRmlsZTo6cHJlcGFyZSIpOwotICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1NdXRleCk7Ci0gICAgaWYgKCFtRWFzSGFuZGxlKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9OT1RfT1BFTjsKLSAgICB9Ci0gICAgRUFTX1JFU1VMVCByZXN1bHQ7Ci0gICAgaWYgKChyZXN1bHQgPSBFQVNfUHJlcGFyZShtRWFzRGF0YSwgbUVhc0hhbmRsZSkpICE9IEVBU19TVUNDRVNTKSB7Ci0gICAgICAgIEFMT0dFKCJFQVNfUHJlcGFyZSBmYWlsZWQ6IFslbGRdIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIEVSUk9SX0VBU19GQUlMVVJFOwotICAgIH0KLSAgICB1cGRhdGVTdGF0ZSgpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgTWlkaUZpbGU6OnByZXBhcmVBc3luYygpCi17Ci0gICAgQUxPR1YoIk1pZGlGaWxlOjpwcmVwYXJlQXN5bmMiKTsKLSAgICBzdGF0dXNfdCByZXQgPSBwcmVwYXJlKCk7Ci0KLSAgICAvLyBkb24ndCBob2xkIGxvY2sgZHVyaW5nIGNhbGxiYWNrCi0gICAgaWYgKHJldCA9PSBOT19FUlJPUikgewotICAgICAgICBzZW5kRXZlbnQoTUVESUFfUFJFUEFSRUQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlbmRFdmVudChNRURJQV9FUlJPUiwgTUVESUFfRVJST1JfVU5LTk9XTiwgcmV0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotc3RhdHVzX3QgTWlkaUZpbGU6OnN0YXJ0KCkKLXsKLSAgICBBTE9HVigiTWlkaUZpbGU6OnN0YXJ0Iik7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKLSAgICBpZiAoIW1FYXNIYW5kbGUpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX05PVF9PUEVOOwotICAgIH0KLQotICAgIC8vIHJlc3VtaW5nIGFmdGVyIHBhdXNlPwotICAgIGlmIChtUGF1c2VkKSB7Ci0gICAgICAgIGlmIChFQVNfUmVzdW1lKG1FYXNEYXRhLCBtRWFzSGFuZGxlKSAhPSBFQVNfU1VDQ0VTUykgewotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0VBU19GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIG1QYXVzZWQgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBtUmVuZGVyID0gdHJ1ZTsKLSAgICBpZiAobVN0YXRlID09IEVBU19TVEFURV9QTEFZKSB7Ci0gICAgICAgIHNlbmRFdmVudChNRURJQV9TVEFSVEVEKTsKLSAgICB9Ci0KLSAgICAvLyB3YWtlIHVwIHJlbmRlciB0aHJlYWQKLSAgICBBTE9HVigiICB3YWtldXAgcmVuZGVyIHRocmVhZCIpOwotICAgIG1Db25kaXRpb24uc2lnbmFsKCk7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBNaWRpRmlsZTo6c3RvcCgpCi17Ci0gICAgQUxPR1YoIk1pZGlGaWxlOjpzdG9wIik7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKLSAgICBpZiAoIW1FYXNIYW5kbGUpIHsKLSAgICAgICAgcmV0dXJuIEVSUk9SX05PVF9PUEVOOwotICAgIH0KLSAgICBpZiAoIW1QYXVzZWQgJiYgKG1TdGF0ZSAhPSBFQVNfU1RBVEVfU1RPUFBFRCkpIHsKLSAgICAgICAgRUFTX1JFU1VMVCByZXN1bHQgPSBFQVNfUGF1c2UobUVhc0RhdGEsIG1FYXNIYW5kbGUpOwotICAgICAgICBpZiAocmVzdWx0ICE9IEVBU19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBBTE9HRSgiRUFTX1BhdXNlIHJldHVybmVkIGVycm9yICVsZCIsIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfRUFTX0ZBSUxVUkU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbVBhdXNlZCA9IGZhbHNlOwotICAgIHNlbmRFdmVudChNRURJQV9TVE9QUEVEKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IE1pZGlGaWxlOjpzZWVrVG8oaW50IHBvc2l0aW9uKQotewotICAgIEFMT0dWKCJNaWRpRmlsZTo6c2Vla1RvICVkIiwgcG9zaXRpb24pOwotICAgIC8vIGhvbGQgbG9jayBkdXJpbmcgRUFTIGNhbGxzCi0gICAgewotICAgICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTXV0ZXgpOwotICAgICAgICBpZiAoIW1FYXNIYW5kbGUpIHsKLSAgICAgICAgICAgIHJldHVybiBFUlJPUl9OT1RfT1BFTjsKLSAgICAgICAgfQotICAgICAgICBFQVNfUkVTVUxUIHJlc3VsdDsKLSAgICAgICAgaWYgKChyZXN1bHQgPSBFQVNfTG9jYXRlKG1FYXNEYXRhLCBtRWFzSGFuZGxlLCBwb3NpdGlvbiwgZmFsc2UpKQotICAgICAgICAgICAgICAgICE9IEVBU19TVUNDRVNTKQotICAgICAgICB7Ci0gICAgICAgICAgICBBTE9HRSgiRUFTX0xvY2F0ZSByZXR1cm5lZCAlbGQiLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0VBU19GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIEVBU19HZXRMb2NhdGlvbihtRWFzRGF0YSwgbUVhc0hhbmRsZSwgJm1QbGF5VGltZSk7Ci0gICAgfQotICAgIHNlbmRFdmVudChNRURJQV9TRUVLX0NPTVBMRVRFKTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IE1pZGlGaWxlOjpwYXVzZSgpCi17Ci0gICAgQUxPR1YoIk1pZGlGaWxlOjpwYXVzZSIpOwotICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1NdXRleCk7Ci0gICAgaWYgKCFtRWFzSGFuZGxlKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9OT1RfT1BFTjsKLSAgICB9Ci0gICAgaWYgKChtU3RhdGUgPT0gRUFTX1NUQVRFX1BBVVNJTkcpIHx8IChtU3RhdGUgPT0gRUFTX1NUQVRFX1BBVVNFRCkpIHJldHVybiBOT19FUlJPUjsKLSAgICBpZiAoRUFTX1BhdXNlKG1FYXNEYXRhLCBtRWFzSGFuZGxlKSAhPSBFQVNfU1VDQ0VTUykgewotICAgICAgICByZXR1cm4gRVJST1JfRUFTX0ZBSUxVUkU7Ci0gICAgfQotICAgIG1QYXVzZWQgPSB0cnVlOwotICAgIHNlbmRFdmVudChNRURJQV9QQVVTRUQpOwotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotYm9vbCBNaWRpRmlsZTo6aXNQbGF5aW5nKCkKLXsKLSAgICBBTE9HVigiTWlkaUZpbGU6OmlzUGxheWluZywgbVN0YXRlPSVkIiwgaW50KG1TdGF0ZSkpOwotICAgIGlmICghbUVhc0hhbmRsZSB8fCBtUGF1c2VkKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIChtU3RhdGUgPT0gRUFTX1NUQVRFX1BMQVkgfHwgKG1TdGF0ZSA9PSBFQVNfU1RBVEVfUkVBRFkgJiYgbVJlbmRlcikpOwotfQotCi1zdGF0dXNfdCBNaWRpRmlsZTo6Z2V0Q3VycmVudFBvc2l0aW9uKGludCogcG9zaXRpb24pCi17Ci0gICAgQUxPR1YoIk1pZGlGaWxlOjpnZXRDdXJyZW50UG9zaXRpb24iKTsKLSAgICBpZiAoIW1FYXNIYW5kbGUpIHsKLSAgICAgICAgQUxPR0UoImdldEN1cnJlbnRQb3NpdGlvbigpOiBmaWxlIG5vdCBvcGVuIik7Ci0gICAgICAgIHJldHVybiBFUlJPUl9OT1RfT1BFTjsKLSAgICB9Ci0gICAgaWYgKG1QbGF5VGltZSA8IDApIHsKLSAgICAgICAgQUxPR0UoImdldEN1cnJlbnRQb3NpdGlvbigpOiBtUGxheVRpbWUgPSAlbGQiLCBtUGxheVRpbWUpOwotICAgICAgICByZXR1cm4gRVJST1JfRUFTX0ZBSUxVUkU7Ci0gICAgfQotICAgICpwb3NpdGlvbiA9IG1QbGF5VGltZTsKLSAgICByZXR1cm4gTk9fRVJST1I7Ci19Ci0KLXN0YXR1c190IE1pZGlGaWxlOjpnZXREdXJhdGlvbihpbnQqIGR1cmF0aW9uKQotewotCi0gICAgQUxPR1YoIk1pZGlGaWxlOjpnZXREdXJhdGlvbiIpOwotICAgIHsKLSAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobU11dGV4KTsKLSAgICAgICAgaWYgKCFtRWFzSGFuZGxlKSByZXR1cm4gRVJST1JfTk9UX09QRU47Ci0gICAgICAgICpkdXJhdGlvbiA9IG1EdXJhdGlvbjsKLSAgICB9Ci0KLSAgICAvLyBpZiBubyBkdXJhdGlvbiBjYWNoZWQsIGdldCB0aGUgZHVyYXRpb24KLSAgICAvLyBkb24ndCBuZWVkIGEgbG9jayBoZXJlIGJlY2F1c2Ugd2Ugc3BpbiB1cCBhIG5ldyBlbmdpbmUKLSAgICBpZiAoKmR1cmF0aW9uIDwgMCkgewotICAgICAgICBFQVNfSTMyIHRlbXA7Ci0gICAgICAgIEVBU19EQVRBX0hBTkRMRSBlYXNEYXRhID0gTlVMTDsKLSAgICAgICAgRUFTX0hBTkRMRSBlYXNIYW5kbGUgPSBOVUxMOwotICAgICAgICBFQVNfUkVTVUxUIHJlc3VsdCA9IEVBU19Jbml0KCZlYXNEYXRhKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFQVNfU1VDQ0VTUykgewotICAgICAgICAgICAgcmVzdWx0ID0gRUFTX09wZW5GaWxlKGVhc0RhdGEsICZtRmlsZUxvY2F0b3IsICZlYXNIYW5kbGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gRUFTX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEVBU19QcmVwYXJlKGVhc0RhdGEsIGVhc0hhbmRsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdCA9PSBFQVNfU1VDQ0VTUykgewotICAgICAgICAgICAgcmVzdWx0ID0gRUFTX1BhcnNlTWV0YURhdGEoZWFzRGF0YSwgZWFzSGFuZGxlLCAmdGVtcCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVhc0hhbmRsZSkgewotICAgICAgICAgICAgRUFTX0Nsb3NlRmlsZShlYXNEYXRhLCBlYXNIYW5kbGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlYXNEYXRhKSB7Ci0gICAgICAgICAgICBFQVNfU2h1dGRvd24oZWFzRGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocmVzdWx0ICE9IEVBU19TVUNDRVNTKSB7Ci0gICAgICAgICAgICByZXR1cm4gRVJST1JfRUFTX0ZBSUxVUkU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjYWNoZSBzdWNjZXNzZnVsIHJlc3VsdAotICAgICAgICBtRHVyYXRpb24gPSAqZHVyYXRpb24gPSBpbnQodGVtcCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBNaWRpRmlsZTo6cmVsZWFzZSgpCi17Ci0gICAgQUxPR1YoIk1pZGlGaWxlOjpyZWxlYXNlIik7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGwobU11dGV4KTsKLSAgICByZXNldF9ub3N5bmMoKTsKLQotICAgIC8vIHdhaXQgZm9yIHJlbmRlciB0aHJlYWQgdG8gZXhpdAotICAgIG1FeGl0ID0gdHJ1ZTsKLSAgICBtQ29uZGl0aW9uLnNpZ25hbCgpOwotCi0gICAgLy8gd2FpdCBmb3IgdGhyZWFkIHRvIGV4aXQKLSAgICBpZiAobUF1ZGlvQnVmZmVyKSB7Ci0gICAgICAgIG1Db25kaXRpb24ud2FpdChtTXV0ZXgpOwotICAgIH0KLQotICAgIC8vIHJlbGVhc2UgcmVzb3VyY2VzCi0gICAgaWYgKG1FYXNEYXRhKSB7Ci0gICAgICAgIEVBU19TaHV0ZG93bihtRWFzRGF0YSk7Ci0gICAgICAgIG1FYXNEYXRhID0gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBNaWRpRmlsZTo6cmVzZXQoKQotewotICAgIEFMT0dWKCJNaWRpRmlsZTo6cmVzZXQiKTsKLSAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTXV0ZXgpOwotICAgIHJldHVybiByZXNldF9ub3N5bmMoKTsKLX0KLQotLy8gY2FsbCBvbmx5IHdpdGggbXV0ZXggaGVsZAotc3RhdHVzX3QgTWlkaUZpbGU6OnJlc2V0X25vc3luYygpCi17Ci0gICAgQUxPR1YoIk1pZGlGaWxlOjpyZXNldF9ub3N5bmMiKTsKLSAgICBzZW5kRXZlbnQoTUVESUFfU1RPUFBFRCk7Ci0gICAgLy8gY2xvc2UgZmlsZQotICAgIGlmIChtRWFzSGFuZGxlKSB7Ci0gICAgICAgIEVBU19DbG9zZUZpbGUobUVhc0RhdGEsIG1FYXNIYW5kbGUpOwotICAgICAgICBtRWFzSGFuZGxlID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG1GaWxlTG9jYXRvci5wYXRoKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQqKW1GaWxlTG9jYXRvci5wYXRoKTsKLSAgICAgICAgbUZpbGVMb2NhdG9yLnBhdGggPSBOVUxMOwotICAgIH0KLSAgICBpZiAobUZpbGVMb2NhdG9yLmZkID49IDApIHsKLSAgICAgICAgY2xvc2UobUZpbGVMb2NhdG9yLmZkKTsKLSAgICB9Ci0gICAgbUZpbGVMb2NhdG9yLmZkID0gLTE7Ci0gICAgbUZpbGVMb2NhdG9yLm9mZnNldCA9IDA7Ci0gICAgbUZpbGVMb2NhdG9yLmxlbmd0aCA9IDA7Ci0KLSAgICBtUGxheVRpbWUgPSAtMTsKLSAgICBtRHVyYXRpb24gPSAtMTsKLSAgICBtTG9vcCA9IGZhbHNlOwotICAgIG1QYXVzZWQgPSBmYWxzZTsKLSAgICBtUmVuZGVyID0gZmFsc2U7Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1zdGF0dXNfdCBNaWRpRmlsZTo6c2V0TG9vcGluZyhpbnQgbG9vcCkKLXsKLSAgICBBTE9HVigiTWlkaUZpbGU6OnNldExvb3BpbmciKTsKLSAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTXV0ZXgpOwotICAgIGlmICghbUVhc0hhbmRsZSkgewotICAgICAgICByZXR1cm4gRVJST1JfTk9UX09QRU47Ci0gICAgfQotICAgIGxvb3AgPSBsb29wID8gLTEgOiAwOwotICAgIGlmIChFQVNfU2V0UmVwZWF0KG1FYXNEYXRhLCBtRWFzSGFuZGxlLCBsb29wKSAhPSBFQVNfU1VDQ0VTUykgewotICAgICAgICByZXR1cm4gRVJST1JfRUFTX0ZBSUxVUkU7Ci0gICAgfQotICAgIHJldHVybiBOT19FUlJPUjsKLX0KLQotc3RhdHVzX3QgTWlkaUZpbGU6OmNyZWF0ZU91dHB1dFRyYWNrKCkgewotICAgIGlmIChtQXVkaW9TaW5rLT5vcGVuKHBMaWJDb25maWctPnNhbXBsZVJhdGUsIHBMaWJDb25maWctPm51bUNoYW5uZWxzLAotICAgICAgICAgICAgQ0hBTk5FTF9NQVNLX1VTRV9DSEFOTkVMX09SREVSLCBBVURJT19GT1JNQVRfUENNXzE2X0JJVCwgMiAvKmJ1ZmZlckNvdW50Ki8pICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFMT0dFKCJtQXVkaW9TaW5rIG9wZW4gZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBFUlJPUl9PUEVOX0ZBSUxFRDsKLSAgICB9Ci0gICAgcmV0dXJuIE5PX0VSUk9SOwotfQotCi1pbnQgTWlkaUZpbGU6OnJlbmRlcigpIHsKLSAgICBFQVNfUkVTVUxUIHJlc3VsdCA9IEVBU19GQUlMVVJFOwotICAgIEVBU19JMzIgY291bnQ7Ci0gICAgaW50IHRlbXA7Ci0gICAgYm9vbCBhdWRpb1N0YXJ0ZWQgPSBmYWxzZTsKLQotICAgIEFMT0dWKCJNaWRpRmlsZTo6cmVuZGVyIik7Ci0KLSAgICAvLyBhbGxvY2F0ZSByZW5kZXIgYnVmZmVyCi0gICAgbUF1ZGlvQnVmZmVyID0gbmV3IEVBU19QQ01bcExpYkNvbmZpZy0+bWl4QnVmZmVyU2l6ZSAqIHBMaWJDb25maWctPm51bUNoYW5uZWxzICogTlVNX0JVRkZFUlNdOwotICAgIGlmICghbUF1ZGlvQnVmZmVyKSB7Ci0gICAgICAgIEFMT0dFKCJtQXVkaW9CdWZmZXIgYWxsb2NhdGUgZmFpbGVkIik7Ci0gICAgICAgIGdvdG8gdGhyZWFkRXhpdDsKLSAgICB9Ci0KLSAgICAvLyBzaWduYWwgbWFpbiB0aHJlYWQgdGhhdCB3ZSBzdGFydGVkCi0gICAgewotICAgICAgICBNdXRleDo6QXV0b2xvY2sgbChtTXV0ZXgpOwotICAgICAgICBtVGlkID0gZ2V0dGlkKCk7Ci0gICAgICAgIEFMT0dWKCJyZW5kZXIgdGhyZWFkKCVkKSBzaWduYWwiLCBtVGlkKTsKLSAgICAgICAgbUNvbmRpdGlvbi5zaWduYWwoKTsKLSAgICB9Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBtTXV0ZXgubG9jaygpOwotCi0gICAgICAgIC8vIG5vdGhpbmcgdG8gcmVuZGVyLCB3YWl0IGZvciBjbGllbnQgdGhyZWFkIHRvIHdha2UgdXMgdXAKLSAgICAgICAgd2hpbGUgKCFtUmVuZGVyICYmICFtRXhpdCkKLSAgICAgICAgewotICAgICAgICAgICAgQUxPR1YoIk1pZGlGaWxlOjpyZW5kZXIgLSBzaWduYWwgd2FpdCIpOwotICAgICAgICAgICAgbUNvbmRpdGlvbi53YWl0KG1NdXRleCk7Ci0gICAgICAgICAgICBBTE9HVigiTWlkaUZpbGU6OnJlbmRlciAtIHNpZ25hbCByeCdkIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1FeGl0KSB7Ci0gICAgICAgICAgICBtTXV0ZXgudW5sb2NrKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHJlbmRlciBtaWRpIGRhdGEgaW50byB0aGUgaW5wdXQgYnVmZmVyCi0gICAgICAgIC8vQUxPR1YoIk1pZGlGaWxlOjpyZW5kZXIgLSByZW5kZXJpbmcgYXVkaW8iKTsKLSAgICAgICAgaW50IG51bV9vdXRwdXQgPSAwOwotICAgICAgICBFQVNfUENNKiBwID0gbUF1ZGlvQnVmZmVyOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9CVUZGRVJTOyBpKyspIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IEVBU19SZW5kZXIobUVhc0RhdGEsIHAsIHBMaWJDb25maWctPm1peEJ1ZmZlclNpemUsICZjb3VudCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ICE9IEVBU19TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoIkVBU19SZW5kZXIgcmV0dXJuZWQgJWxkIiwgcmVzdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAgKz0gY291bnQgKiBwTGliQ29uZmlnLT5udW1DaGFubmVsczsKLSAgICAgICAgICAgIG51bV9vdXRwdXQgKz0gY291bnQgKiBwTGliQ29uZmlnLT5udW1DaGFubmVscyAqIHNpemVvZihFQVNfUENNKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHVwZGF0ZSBwbGF5YmFjayBzdGF0ZSBhbmQgcG9zaXRpb24KLSAgICAgICAgLy8gQUxPR1YoIk1pZGlGaWxlOjpyZW5kZXIgLSB1cGRhdGluZyBzdGF0ZSIpOwotICAgICAgICBFQVNfR2V0TG9jYXRpb24obUVhc0RhdGEsIG1FYXNIYW5kbGUsICZtUGxheVRpbWUpOwotICAgICAgICBFQVNfU3RhdGUobUVhc0RhdGEsIG1FYXNIYW5kbGUsICZtU3RhdGUpOwotICAgICAgICBtTXV0ZXgudW5sb2NrKCk7Ci0KLSAgICAgICAgLy8gY3JlYXRlIGF1ZGlvIG91dHB1dCB0cmFjayBpZiBuZWNlc3NhcnkKLSAgICAgICAgaWYgKCFtQXVkaW9TaW5rLT5yZWFkeSgpKSB7Ci0gICAgICAgICAgICBBTE9HVigiTWlkaUZpbGU6OnJlbmRlciAtIGNyZWF0ZSBvdXRwdXQgdHJhY2siKTsKLSAgICAgICAgICAgIGlmIChjcmVhdGVPdXRwdXRUcmFjaygpICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgICAgIGdvdG8gdGhyZWFkRXhpdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdyaXRlIGRhdGEgdG8gdGhlIGF1ZGlvIGhhcmR3YXJlCi0gICAgICAgIC8vIEFMT0dWKCJNaWRpRmlsZTo6cmVuZGVyIC0gd3JpdGluZyB0byBhdWRpbyBvdXRwdXQiKTsKLSAgICAgICAgaWYgKCh0ZW1wID0gbUF1ZGlvU2luay0+d3JpdGUobUF1ZGlvQnVmZmVyLCBudW1fb3V0cHV0KSkgPCAwKSB7Ci0gICAgICAgICAgICBBTE9HRSgiRXJyb3IgaW4gd3JpdGluZzolZCIsdGVtcCk7Ci0gICAgICAgICAgICByZXR1cm4gdGVtcDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHN0YXJ0IGF1ZGlvIG91dHB1dCBpZiBuZWNlc3NhcnkKLSAgICAgICAgaWYgKCFhdWRpb1N0YXJ0ZWQpIHsKLSAgICAgICAgICAgIC8vQUxPR1YoIk1pZGlGaWxlOjpyZW5kZXIgLSBzdGFydGluZyBhdWRpbyIpOwotICAgICAgICAgICAgbUF1ZGlvU2luay0+c3RhcnQoKTsKLSAgICAgICAgICAgIGF1ZGlvU3RhcnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzdGlsbCBwbGF5aW5nPwotICAgICAgICBpZiAoKG1TdGF0ZSA9PSBFQVNfU1RBVEVfU1RPUFBFRCkgfHwgKG1TdGF0ZSA9PSBFQVNfU1RBVEVfRVJST1IpIHx8Ci0gICAgICAgICAgICAgICAgKG1TdGF0ZSA9PSBFQVNfU1RBVEVfUEFVU0VEKSkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoKG1TdGF0ZSkgewotICAgICAgICAgICAgY2FzZSBFQVNfU1RBVEVfU1RPUFBFRDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBTE9HVigiTWlkaUZpbGU6OnJlbmRlciAtIHN0b3BwZWQiKTsKLSAgICAgICAgICAgICAgICBzZW5kRXZlbnQoTUVESUFfUExBWUJBQ0tfQ09NUExFVEUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBFQVNfU1RBVEVfRVJST1I6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQUxPR0UoIk1pZGlGaWxlOjpyZW5kZXIgLSBlcnJvciIpOwotICAgICAgICAgICAgICAgIHNlbmRFdmVudChNRURJQV9FUlJPUiwgTUVESUFfRVJST1JfVU5LTk9XTik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIEVBU19TVEFURV9QQVVTRUQ6Ci0gICAgICAgICAgICAgICAgQUxPR1YoIk1pZGlGaWxlOjpyZW5kZXIgLSBwYXVzZWQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtQXVkaW9TaW5rLT5zdG9wKCk7Ci0gICAgICAgICAgICBhdWRpb1N0YXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIG1SZW5kZXIgPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotdGhyZWFkRXhpdDoKLSAgICBtQXVkaW9TaW5rLmNsZWFyKCk7Ci0gICAgaWYgKG1BdWRpb0J1ZmZlcikgewotICAgICAgICBkZWxldGUgW10gbUF1ZGlvQnVmZmVyOwotICAgICAgICBtQXVkaW9CdWZmZXIgPSBOVUxMOwotICAgIH0KLSAgICBtTXV0ZXgubG9jaygpOwotICAgIG1UaWQgPSAtMTsKLSAgICBtQ29uZGl0aW9uLnNpZ25hbCgpOwotICAgIG1NdXRleC51bmxvY2soKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIGVuZCBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL01pZGlGaWxlLmggYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWlkaUZpbGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlNGU4OC4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWlkaUZpbGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotKioKLSoqIENvcHlyaWdodCAyMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi0jaWZuZGVmIEFORFJPSURfTUlESUZJTEVfSAotI2RlZmluZSBBTkRST0lEX01JRElGSUxFX0gKLQotI2luY2x1ZGUgPG1lZGlhL01lZGlhUGxheWVySW50ZXJmYWNlLmg+Ci0jaW5jbHVkZSA8bGlic29uaXZveC9lYXMuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi0vLyBOb3RlIHRoYXQgdGhlIG5hbWUgTWlkaUZpbGUgaXMgbWlzbGVhZGluZzsgdGhpcyBhY3R1YWxseSByZXByZXNlbnRzIGEgTUlESSBmaWxlIHBsYXllcgotY2xhc3MgTWlkaUZpbGUgOiBwdWJsaWMgTWVkaWFQbGF5ZXJJbnRlcmZhY2UgewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICAgICAgTWlkaUZpbGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH5NaWRpRmlsZSgpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCAgICBpbml0Q2hlY2soKTsKLQotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgc2V0RGF0YVNvdXJjZSgKLSAgICAgICAgICAgIGNvbnN0IHNwPElNZWRpYUhUVFBTZXJ2aWNlPiAmaHR0cFNlcnZpY2UsCi0gICAgICAgICAgICBjb25zdCBjaGFyKiBwYXRoLAotICAgICAgICAgICAgY29uc3QgS2V5ZWRWZWN0b3I8U3RyaW5nOCwgU3RyaW5nOD4gKmhlYWRlcnMpOwotCi0gICAgdmlydHVhbCBzdGF0dXNfdCAgICBzZXREYXRhU291cmNlKGludCBmZCwgaW50NjRfdCBvZmZzZXQsIGludDY0X3QgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190ICAgIHNldFZpZGVvU3VyZmFjZVRleHR1cmUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwPElHcmFwaGljQnVmZmVyUHJvZHVjZXI+JiAvKmJ1ZmZlclByb2R1Y2VyKi8pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyByZXR1cm4gVU5LTk9XTl9FUlJPUjsgfQotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgcHJlcGFyZSgpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgcHJlcGFyZUFzeW5jKCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCAgICBzdGFydCgpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgc3RvcCgpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgc2Vla1RvKGludCBtc2VjKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190ICAgIHBhdXNlKCk7Ci0gICAgdmlydHVhbCBib29sICAgICAgICBpc1BsYXlpbmcoKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190ICAgIGdldEN1cnJlbnRQb3NpdGlvbihpbnQqIG1zZWMpOwotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgZ2V0RHVyYXRpb24oaW50KiBtc2VjKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190ICAgIHJlbGVhc2UoKTsKLSAgICB2aXJ0dWFsIHN0YXR1c190ICAgIHJlc2V0KCk7Ci0gICAgdmlydHVhbCBzdGF0dXNfdCAgICBzZXRMb29waW5nKGludCBsb29wKTsKLSAgICB2aXJ0dWFsIHBsYXllcl90eXBlIHBsYXllclR5cGUoKSB7IHJldHVybiBTT05JVk9YX1BMQVlFUjsgfQotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgaW52b2tlKGNvbnN0IFBhcmNlbCYgLypyZXF1ZXN0Ki8sIFBhcmNlbCogLypyZXBseSovKSB7Ci0gICAgICAgIHJldHVybiBJTlZBTElEX09QRVJBVElPTjsKLSAgICB9Ci0gICAgdmlydHVhbCBzdGF0dXNfdCAgICBzZXRQYXJhbWV0ZXIoaW50IC8qa2V5Ki8sIGNvbnN0IFBhcmNlbCAmLypyZXF1ZXN0Ki8pIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLSAgICB2aXJ0dWFsIHN0YXR1c190ICAgIGdldFBhcmFtZXRlcihpbnQgLyprZXkqLywgUGFyY2VsKiAvKnJlcGx5Ki8pIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfT1BFUkFUSU9OOwotICAgIH0KLQotCi1wcml2YXRlOgotICAgICAgICAgICAgc3RhdHVzX3QgICAgY3JlYXRlT3V0cHV0VHJhY2soKTsKLSAgICAgICAgICAgIHN0YXR1c190ICAgIHJlc2V0X25vc3luYygpOwotICAgICAgICAgICAgaW50ICAgICAgICAgcmVuZGVyKCk7Ci0gICAgICAgICAgICB2b2lkICAgICAgICB1cGRhdGVTdGF0ZSgpeyBFQVNfU3RhdGUobUVhc0RhdGEsIG1FYXNIYW5kbGUsICZtU3RhdGUpOyB9Ci0KLSAgICBNdXRleCAgICAgICAgICAgICAgIG1NdXRleDsKLSAgICBDb25kaXRpb24gICAgICAgICAgIG1Db25kaXRpb247Ci0gICAgRUFTX0RBVEFfSEFORExFICAgICBtRWFzRGF0YTsKLSAgICBFQVNfSEFORExFICAgICAgICAgIG1FYXNIYW5kbGU7Ci0gICAgRUFTX1BDTSogICAgICAgICAgICBtQXVkaW9CdWZmZXI7Ci0gICAgRUFTX0kzMiAgICAgICAgICAgICBtUGxheVRpbWU7Ci0gICAgRUFTX0kzMiAgICAgICAgICAgICBtRHVyYXRpb247Ci0gICAgRUFTX1NUQVRFICAgICAgICAgICBtU3RhdGU7Ci0gICAgRUFTX0ZJTEUgICAgICAgICAgICBtRmlsZUxvY2F0b3I7Ci0gICAgYXVkaW9fc3RyZWFtX3R5cGVfdCBtU3RyZWFtVHlwZTsKLSAgICBib29sICAgICAgICAgICAgICAgIG1Mb29wOwotICAgIHZvbGF0aWxlIGJvb2wgICAgICAgbUV4aXQ7Ci0gICAgYm9vbCAgICAgICAgICAgICAgICBtUGF1c2VkOwotICAgIHZvbGF0aWxlIGJvb2wgICAgICAgbVJlbmRlcjsKLSAgICBwaWRfdCAgICAgICAgICAgICAgIG1UaWQ7Ci0KLSAgICBjbGFzcyBNaWRpRmlsZVRocmVhZCA6IHB1YmxpYyBUaHJlYWQgewotICAgIHB1YmxpYzoKLSAgICAgICAgTWlkaUZpbGVUaHJlYWQoTWlkaUZpbGUgKm1pZGlQbGF5ZXIpIDogbU1pZGlGaWxlKG1pZGlQbGF5ZXIpIHsKLSAgICAgICAgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIH5NaWRpRmlsZVRocmVhZCgpIHt9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBNaWRpRmlsZSAqbU1pZGlGaWxlOwotCi0gICAgICAgIGJvb2wgdGhyZWFkTG9vcCgpIHsKLSAgICAgICAgICAgIGludCByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQgPSBtTWlkaUZpbGUtPnJlbmRlcigpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgTWlkaUZpbGVUaHJlYWQoY29uc3QgTWlkaUZpbGVUaHJlYWQgJik7Ci0gICAgICAgIE1pZGlGaWxlVGhyZWFkICZvcGVyYXRvcj0oY29uc3QgTWlkaUZpbGVUaHJlYWQgJik7Ci0gICAgfTsKLQotICAgIHNwPE1pZGlGaWxlVGhyZWFkPiBtVGhyZWFkOwotfTsKLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfTUlESUZJTEVfSApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL01pZGlNZXRhZGF0YVJldHJpZXZlci5jcHAgYi9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWlkaU1ldGFkYXRhUmV0cmlldmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjZjZlZi4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWlkaU1ldGFkYXRhUmV0cmlldmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0qKgotKiogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSoqCi0qKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSoqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSoqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotKioKLSoqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSoqCi0qKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0qKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotKiogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0qKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSovCi0KLS8vI2RlZmluZSBMT0dfTkRFQlVHIDAKLSNkZWZpbmUgTE9HX1RBRyAiTWlkaU1ldGFkYXRhUmV0cmlldmVyIgotI2luY2x1ZGUgPHV0aWxzL0xvZy5oPgotCi0jaW5jbHVkZSAiTWlkaU1ldGFkYXRhUmV0cmlldmVyLmgiCi0jaW5jbHVkZSA8bWVkaWEvbWVkaWFtZXRhZGF0YXJldHJpZXZlci5oPgotCi0jaW5jbHVkZSA8bWVkaWEvSU1lZGlhSFRUUFNlcnZpY2UuaD4KLQotbmFtZXNwYWNlIGFuZHJvaWQgewotCi1zdGF0aWMgc3RhdHVzX3QgRVJST1JfTk9UX09QRU4gPSAtMTsKLXN0YXRpYyBzdGF0dXNfdCBFUlJPUl9PUEVOX0ZBSUxFRCA9IC0yOwotc3RhdGljIHN0YXR1c190IEVSUk9SX0VBU19GQUlMVVJFID0gLTM7Ci1zdGF0aWMgc3RhdHVzX3QgRVJST1JfQUxMT0NBVEVfRkFJTEVEID0gLTQ7Ci0KLXZvaWQgTWlkaU1ldGFkYXRhUmV0cmlldmVyOjpjbGVhck1ldGFkYXRhVmFsdWVzKCkKLXsKLSAgICBBTE9HVigiY2xlYXJNZXRhZGF0YVZhbHVlcyIpOwotICAgIG1NZXRhZGF0YVZhbHVlc1swXVswXSA9ICdcMCc7Ci19Ci0KLXN0YXR1c190IE1pZGlNZXRhZGF0YVJldHJpZXZlcjo6c2V0RGF0YVNvdXJjZSgKLSAgICAgICAgY29uc3Qgc3A8SU1lZGlhSFRUUFNlcnZpY2U+ICZodHRwU2VydmljZSwKLSAgICAgICAgY29uc3QgY2hhciAqdXJsLAotICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqaGVhZGVycykKLXsKLSAgICBBTE9HVigic2V0RGF0YVNvdXJjZTogJXMiLCB1cmw/IHVybDogIk5VTEwgcG9pbnRlciIpOwotICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1Mb2NrKTsKLSAgICBjbGVhck1ldGFkYXRhVmFsdWVzKCk7Ci0gICAgaWYgKG1NaWRpUGxheWVyID09IDApIHsKLSAgICAgICAgbU1pZGlQbGF5ZXIgPSBuZXcgTWlkaUZpbGUoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1NaWRpUGxheWVyLT5zZXREYXRhU291cmNlKGh0dHBTZXJ2aWNlLCB1cmwsIGhlYWRlcnMpOwotfQotCi1zdGF0dXNfdCBNaWRpTWV0YWRhdGFSZXRyaWV2ZXI6OnNldERhdGFTb3VyY2UoaW50IGZkLCBpbnQ2NF90IG9mZnNldCwgaW50NjRfdCBsZW5ndGgpCi17Ci0gICAgQUxPR1YoInNldERhdGFTb3VyY2U6IGZkKCVkKSwgb2Zmc2V0KCVsbGQpLCBhbmQgbGVuZ3RoKCVsbGQpIiwgZmQsIG9mZnNldCwgbGVuZ3RoKTsKLSAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtTG9jayk7Ci0gICAgY2xlYXJNZXRhZGF0YVZhbHVlcygpOwotICAgIGlmIChtTWlkaVBsYXllciA9PSAwKSB7Ci0gICAgICAgIG1NaWRpUGxheWVyID0gbmV3IE1pZGlGaWxlKCk7Ci0gICAgfQotICAgIHJldHVybiBtTWlkaVBsYXllci0+c2V0RGF0YVNvdXJjZShmZCwgb2Zmc2V0LCBsZW5ndGgpOzsKLX0KLQotY29uc3QgY2hhciogTWlkaU1ldGFkYXRhUmV0cmlldmVyOjpleHRyYWN0TWV0YWRhdGEoaW50IGtleUNvZGUpCi17Ci0gICAgQUxPR1YoImV4dHJhY3RNZXRkYXRhOiBrZXkoJWQpIiwga2V5Q29kZSk7Ci0gICAgTXV0ZXg6OkF1dG9sb2NrIGxvY2sobUxvY2spOwotICAgIGlmIChtTWlkaVBsYXllciA9PSAwIHx8IG1NaWRpUGxheWVyLT5pbml0Q2hlY2soKSAhPSBOT19FUlJPUikgewotICAgICAgICBBTE9HRSgiTWlkaSBwbGF5ZXIgaXMgbm90IGluaXRpYWxpemVkIHlldCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc3dpdGNoIChrZXlDb2RlKSB7Ci0gICAgY2FzZSBNRVRBREFUQV9LRVlfRFVSQVRJT046Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtTWV0YWRhdGFWYWx1ZXNbMF1bMF0gPT0gJ1wwJykgewotICAgICAgICAgICAgICAgIGludCBkdXJhdGlvbiA9IC0xOwotICAgICAgICAgICAgICAgIGlmIChtTWlkaVBsYXllci0+Z2V0RHVyYXRpb24oJmR1cmF0aW9uKSAhPSBOT19FUlJPUikgewotICAgICAgICAgICAgICAgICAgICBBTE9HRSgiZmFpbGVkIHRvIGdldCBkdXJhdGlvbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc25wcmludGYobU1ldGFkYXRhVmFsdWVzWzBdLCBNQVhfTUVUQURBVEFfU1RSSU5HX0xFTkdUSCwgIiVkIiwgZHVyYXRpb24pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBTE9HVigiZHVyYXRpb246ICVzIG1zIiwgbU1ldGFkYXRhVmFsdWVzWzBdKTsKLSAgICAgICAgICAgIHJldHVybiBtTWV0YWRhdGFWYWx1ZXNbMF07Ci0gICAgICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBBTE9HRSgiVW5zdXBwb3J0ZWQga2V5IGNvZGUgKCVkKSIsIGtleUNvZGUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLX07Ci0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9NaWRpTWV0YWRhdGFSZXRyaWV2ZXIuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9NaWRpTWV0YWRhdGFSZXRyaWV2ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyMTRlZS4uMDAwMDAwMAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvTWlkaU1ldGFkYXRhUmV0cmlldmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotKioKLSoqIENvcHlyaWdodCAyMDA5LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0qKgotKiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0qKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0qKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSoqCi0qKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qKgotKiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotKiogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSoqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotKiogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotKiogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0qLwotCi0jaWZuZGVmIEFORFJPSURfTUlESU1FVEFEQVRBUkVUUklFVkVSX0gKLSNkZWZpbmUgQU5EUk9JRF9NSURJTUVUQURBVEFSRVRSSUVWRVJfSAotCi0jaW5jbHVkZSA8dXRpbHMvdGhyZWFkcy5oPgotI2luY2x1ZGUgPHV0aWxzL0Vycm9ycy5oPgotI2luY2x1ZGUgPG1lZGlhL01lZGlhTWV0YWRhdGFSZXRyaWV2ZXJJbnRlcmZhY2UuaD4KLQotI2luY2x1ZGUgIk1pZGlGaWxlLmgiCi0KLW5hbWVzcGFjZSBhbmRyb2lkIHsKLQotY2xhc3MgTWlkaU1ldGFkYXRhUmV0cmlldmVyIDogcHVibGljIE1lZGlhTWV0YWRhdGFSZXRyaWV2ZXJJbnRlcmZhY2UgewotcHVibGljOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaWRpTWV0YWRhdGFSZXRyaWV2ZXIoKSB7fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB+TWlkaU1ldGFkYXRhUmV0cmlldmVyKCkge30KLQotICAgIHZpcnR1YWwgc3RhdHVzX3QgICAgICAgICAgICAgICAgc2V0RGF0YVNvdXJjZSgKLSAgICAgICAgICAgIGNvbnN0IHNwPElNZWRpYUhUVFBTZXJ2aWNlPiAmaHR0cFNlcnZpY2UsCi0gICAgICAgICAgICBjb25zdCBjaGFyICp1cmwsCi0gICAgICAgICAgICBjb25zdCBLZXllZFZlY3RvcjxTdHJpbmc4LCBTdHJpbmc4PiAqaGVhZGVycyk7Ci0KLSAgICB2aXJ0dWFsIHN0YXR1c190ICAgICAgICAgICAgICAgIHNldERhdGFTb3VyY2UoaW50IGZkLCBpbnQ2NF90IG9mZnNldCwgaW50NjRfdCBsZW5ndGgpOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogICAgICAgICAgICAgZXh0cmFjdE1ldGFkYXRhKGludCBrZXlDb2RlKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgTUFYX01FVEFEQVRBX1NUUklOR19MRU5HVEggPSAxMjg7Ci0gICAgdm9pZCBjbGVhck1ldGFkYXRhVmFsdWVzKCk7Ci0KLSAgICBNdXRleCAgICAgICAgICAgICAgIG1Mb2NrOwotICAgIHNwPE1pZGlGaWxlPiAgICAgICAgbU1pZGlQbGF5ZXI7Ci0gICAgY2hhciAgICAgICAgICAgICAgICBtTWV0YWRhdGFWYWx1ZXNbMV1bTUFYX01FVEFEQVRBX1NUUklOR19MRU5HVEhdOwotfTsKLQotfTsgLy8gbmFtZXNwYWNlIGFuZHJvaWQKLQotI2VuZGlmIC8vIEFORFJPSURfTUlESU1FVEFEQVRBUkVUUklFVkVSX0gKZGlmZiAtLWdpdCBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9TdGFnZWZyaWdodFJlY29yZGVyLmNwcCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9TdGFnZWZyaWdodFJlY29yZGVyLmNwcAppbmRleCAzZDA5M2ZhLi44NjYzOWNiIDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvU3RhZ2VmcmlnaHRSZWNvcmRlci5jcHAKKysrIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL1N0YWdlZnJpZ2h0UmVjb3JkZXIuY3BwCkBAIC0yNjAsNiArMjYwLDkgQEAKICAgICAgICAgcmV0dXJuIC1FQkFERjsKICAgICB9CiAKKyAgICAvLyBzdGFydCB3aXRoIGEgY2xlYW4sIGVtcHR5IGZpbGUKKyAgICBmdHJ1bmNhdGUoZmQsIDApOworCiAgICAgaWYgKG1PdXRwdXRGZCA+PSAwKSB7CiAgICAgICAgIDo6Y2xvc2UobU91dHB1dEZkKTsKICAgICB9CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvVGVzdFBsYXllclN0dWIuY3BwIGIvbWVkaWEvbGlibWVkaWFwbGF5ZXJzZXJ2aWNlL1Rlc3RQbGF5ZXJTdHViLmNwcAppbmRleCA1Nzk1NzczLi5jOGJmNmM1IDEwMDY0NAotLS0gYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvVGVzdFBsYXllclN0dWIuY3BwCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9UZXN0UGxheWVyU3R1Yi5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAKIHsKICAgICBjaGFyIHByb3BbUFJPUEVSVFlfVkFMVUVfTUFYXSA9IHsgJ1wwJywgfTsKIAotICAgIHByb3BlcnR5X2dldChrQnVpbGRUeXBlUHJvcE5hbWUsIHByb3AsICdcMCcpOworICAgIHByb3BlcnR5X2dldChrQnVpbGRUeXBlUHJvcE5hbWUsIHByb3AsICJcMCIpOwogICAgIHJldHVybiBzdHJjbXAocHJvcCwga0VuZ0J1aWxkKSA9PSAwIHx8IHN0cmNtcChwcm9wLCBrVGVzdEJ1aWxkKSA9PSAwOwogfQogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvTnVQbGF5ZXIuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllci5oCmluZGV4IDE1Njk4MTYuLmJiMzJlYWMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllci5oCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllci5oCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0cnVjdCBBQnVmZmVyOwogc3RydWN0IEFNZXNzYWdlOwotc3RydWN0IE1ldGFEYXRhOworY2xhc3MgTWV0YURhdGE7CiBzdHJ1Y3QgTnVQbGF5ZXJEcml2ZXI7CiAKIHN0cnVjdCBOdVBsYXllciA6IHB1YmxpYyBBSGFuZGxlciB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJtZWRpYXBsYXllcnNlcnZpY2UvbnVwbGF5ZXIvTnVQbGF5ZXJTb3VyY2UuaCBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllclNvdXJjZS5oCmluZGV4IDViZjkxODcuLmM4MWQzYjkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllclNvdXJjZS5oCisrKyBiL21lZGlhL2xpYm1lZGlhcGxheWVyc2VydmljZS9udXBsYXllci9OdVBsYXllclNvdXJjZS5oCkBAIC0yOCw3ICsyOCw2IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHN0cnVjdCBBQnVmZmVyOwotc3RydWN0IE1ldGFEYXRhOwogc3RydWN0IE1lZGlhQnVmZmVyOwogCiBzdHJ1Y3QgTnVQbGF5ZXI6OlNvdXJjZSA6IHB1YmxpYyBBSGFuZGxlciB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BQUNXcml0ZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUFDV3JpdGVyLmNwcAppbmRleCA3Y2M5NDMwLi4yZTQxZDgwIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BQUNXcml0ZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FBQ1dyaXRlci5jcHAKQEAgLTgwLDEwICs4MCw2IEBACiAgICAgcmV0dXJuIG1Jbml0Q2hlY2s7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVJbnQ4KGludCBmZCwgdWludDhfdCB4KSB7Ci0gICAgcmV0dXJuIDo6d3JpdGUoZmQsICZ4LCAxKTsKLX0KLQogCiBzdGF0dXNfdCBBQUNXcml0ZXI6OmFkZFNvdXJjZShjb25zdCBzcDxNZWRpYVNvdXJjZT4gJnNvdXJjZSkgewogICAgIGlmIChtSW5pdENoZWNrICE9IE9LKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BQ29kZWMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQUNvZGVjLmNwcAppbmRleCA4NzYwNmE1Li5mYTMxYzQ0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9BQ29kZWMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FDb2RlYy5jcHAKQEAgLTkyMiw3ICs5MjIsNiBAQAogCiBBQ29kZWM6OkJ1ZmZlckluZm8gKkFDb2RlYzo6ZGVxdWV1ZUJ1ZmZlckZyb21OYXRpdmVXaW5kb3coKSB7CiAgICAgQU5hdGl2ZVdpbmRvd0J1ZmZlciAqYnVmOwotICAgIGludCBmZW5jZUZkID0gLTE7CiAgICAgQ0hFQ0sobU5hdGl2ZVdpbmRvdy5nZXQoKSAhPSBOVUxMKTsKIAogICAgIGlmIChtVHVubmVsZWQpIHsKQEAgLTMwOTksNyArMzA5OCw2IEBACiB9CiAKIHZvaWQgQUNvZGVjOjpkZWZlck1lc3NhZ2UoY29uc3Qgc3A8QU1lc3NhZ2U+ICZtc2cpIHsKLSAgICBib29sIHdhc0VtcHR5QmVmb3JlID0gbURlZmVycmVkUXVldWUuZW1wdHkoKTsKICAgICBtRGVmZXJyZWRRdWV1ZS5wdXNoX2JhY2sobXNnKTsKIH0KIApAQCAtMzc1Miw3ICszNzUwLDYgQEAKICAgICAvLyBvbiB0aGUgc2NyZWVuIGFuZCB0aGVuIGJlZW4gcmVwbGFjZWQsIHNvIGFuIHByZXZpb3VzIHZpZGVvIGZyYW1lcyBhcmUKICAgICAvLyBndWFyYW50ZWVkIE5PVCB0byBiZSBjdXJyZW50bHkgZGlzcGxheWVkLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQnVmcyArIDE7IGkrKykgewotICAgICAgICBpbnQgZmVuY2VGZCA9IC0xOwogICAgICAgICBlcnIgPSBuYXRpdmVfd2luZG93X2RlcXVldWVfYnVmZmVyX2FuZF93YWl0KG1OYXRpdmVXaW5kb3cuZ2V0KCksICZhbmIpOwogICAgICAgICBpZiAoZXJyICE9IE5PX0VSUk9SKSB7CiAgICAgICAgICAgICBBTE9HRSgiZXJyb3IgcHVzaGluZyBibGFuayBmcmFtZXM6IGRlcXVldWVCdWZmZXIgZmFpbGVkOiAlcyAoJWQpIiwKQEAgLTQ1MzEsNyArNDUyOCw3IEBACiAgICAgQUxPR1YoIk5vdyB1bmluaXRpYWxpemVkIik7CiAKICAgICBpZiAobURlYXRoTm90aWZpZXIgIT0gTlVMTCkgewotICAgICAgICBtQ29kZWMtPm1PTVgtPmFzQmluZGVyKCktPnVubGlua1RvRGVhdGgobURlYXRoTm90aWZpZXIpOworICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihtQ29kZWMtPm1PTVgpLT51bmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyKTsKICAgICAgICAgbURlYXRoTm90aWZpZXIuY2xlYXIoKTsKICAgICB9CiAKQEAgLTQ2MjQsNyArNDYyMSw3IEBACiAgICAgc3A8QU1lc3NhZ2U+IG5vdGlmeSA9IG5ldyBBTWVzc2FnZShrV2hhdE9NWERpZWQsIG1Db2RlYy0+aWQoKSk7CiAKICAgICBtRGVhdGhOb3RpZmllciA9IG5ldyBEZWF0aE5vdGlmaWVyKG5vdGlmeSk7Ci0gICAgaWYgKG9teC0+YXNCaW5kZXIoKS0+bGlua1RvRGVhdGgobURlYXRoTm90aWZpZXIpICE9IE9LKSB7CisgICAgaWYgKElJbnRlcmZhY2U6OmFzQmluZGVyKG9teCktPmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyKSAhPSBPSykgewogICAgICAgICAvLyBUaGlzIHdhcyBhIGxvY2FsIGJpbmRlciwgaWYgaXQgZGllcyBzbyBkbyB3ZSwgd2Ugd29uJ3QgY2FyZQogICAgICAgICAvLyBhYm91dCBhbnkgbm90aWZpY2F0aW9ucyBpbiB0aGUgYWZ0ZXJsaWZlLgogICAgICAgICBtRGVhdGhOb3RpZmllci5jbGVhcigpOwpAQCAtNDY2OSw3ICs0NjY2LDcgQEAKICAgICAgICAgY29tcG9uZW50TmFtZSA9IG1hdGNoaW5nQ29kZWNzLml0ZW1BdChtYXRjaEluZGV4KS5tTmFtZS5zdHJpbmcoKTsKICAgICAgICAgcXVpcmtzID0gbWF0Y2hpbmdDb2RlY3MuaXRlbUF0KG1hdGNoSW5kZXgpLm1RdWlya3M7CiAKLSAgICAgICAgcGlkX3QgdGlkID0gYW5kcm9pZEdldFRpZCgpOworICAgICAgICBwaWRfdCB0aWQgPSBnZXR0aWQoKTsKICAgICAgICAgaW50IHByZXZQcmlvcml0eSA9IGFuZHJvaWRHZXRUaHJlYWRQcmlvcml0eSh0aWQpOwogICAgICAgICBhbmRyb2lkU2V0VGhyZWFkUHJpb3JpdHkodGlkLCBBTkRST0lEX1BSSU9SSVRZX0ZPUkVHUk9VTkQpOwogICAgICAgICBzdGF0dXNfdCBlcnIgPSBvbXgtPmFsbG9jYXRlTm9kZShjb21wb25lbnROYW1lLmNfc3RyKCksIG9ic2VydmVyLCAmbm9kZSk7CkBAIC01NDcwLDYgKzU0NjcsNyBAQAogICAgICAgICBjYXNlIGtXaGF0Rmx1c2g6CiAgICAgICAgIGNhc2Uga1doYXRTaHV0ZG93bjoKICAgICAgICAgY2FzZSBrV2hhdFJlc3VtZToKKyAgICAgICAgY2FzZSBrV2hhdFNldFBhcmFtZXRlcnM6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtc2ctPndoYXQoKSA9PSBrV2hhdFJlc3VtZSkgewogICAgICAgICAgICAgICAgIEFMT0dWKCJbJXNdIERlZmVycmluZyByZXN1bWUiLCBtQ29kZWMtPm1Db21wb25lbnROYW1lLmNfc3RyKCkpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQW5kcm9pZC5tayBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0FuZHJvaWQubWsKaW5kZXggMTkzZjhhNy4uMjYyOWFmYyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQW5kcm9pZC5taworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9BbmRyb2lkLm1rCkBAIC0zNiw2ICszNiw3IEBACiAgICAgICAgIE1lZGlhQ29kZWNTb3VyY2UuY3BwICAgICAgICAgICAgICBcCiAgICAgICAgIE1lZGlhRGVmcy5jcHAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE1lZGlhRXh0cmFjdG9yLmNwcCAgICAgICAgICAgICAgICBcCisgICAgICAgIE1pZGlFeHRyYWN0b3IuY3BwICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGh0dHAvTWVkaWFIVFRQLmNwcCAgICAgICAgICAgICAgICBcCiAgICAgICAgIE1lZGlhTXV4ZXIuY3BwICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE1lZGlhU291cmNlLmNwcCAgICAgICAgICAgICAgICAgICBcCkBAIC02OCwxMSArNjksOCBAQAogICAgICAgICAkKFRPUCkvZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9vcGVubWF4IFwKICAgICAgICAgJChUT1ApL2V4dGVybmFsL2ZsYWMvaW5jbHVkZSBcCiAgICAgICAgICQoVE9QKS9leHRlcm5hbC90cmVtb2xvIFwKLSAgICAgICAgJChUT1ApL2V4dGVybmFsL29wZW5zc2wvaW5jbHVkZSBcCiAgICAgICAgICQoVE9QKS9leHRlcm5hbC9saWJ2cHgvbGlid2VibSBcCiAgICAgICAgICQoVE9QKS9zeXN0ZW0vbmV0ZC9pbmNsdWRlIFwKLSAgICAgICAgJChUT1ApL2V4dGVybmFsL2ljdS9pY3U0Yy9zb3VyY2UvY29tbW9uIFwKLSAgICAgICAgJChUT1ApL2V4dGVybmFsL2ljdS9pY3U0Yy9zb3VyY2UvaTE4biBcCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAogICAgICAgICBsaWJiaW5kZXIgXApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQ2FtZXJhU291cmNlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L0NhbWVyYVNvdXJjZS5jcHAKaW5kZXggYzNhOTQwYS4uYWQxMmJkZCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvQ2FtZXJhU291cmNlLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9DYW1lcmFTb3VyY2UuY3BwCkBAIC0yMTksNyArMjE5LDcgQEAKICAgICAgICAgbUNhbWVyYUZsYWdzIHw9IEZMQUdTX0hPVF9DQU1FUkE7CiAgICAgICAgIG1EZWF0aE5vdGlmaWVyID0gbmV3IERlYXRoTm90aWZpZXIoKTsKICAgICAgICAgLy8gaXNCaW5kZXJBbGl2ZSBuZWVkcyBsaW5rVG9EZWF0aCB0byB3b3JrLgotICAgICAgICBtQ2FtZXJhUmVjb3JkaW5nUHJveHktPmFzQmluZGVyKCktPmxpbmtUb0RlYXRoKG1EZWF0aE5vdGlmaWVyKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIobUNhbWVyYVJlY29yZGluZ1Byb3h5KS0+bGlua1RvRGVhdGgobURlYXRoTm90aWZpZXIpOwogICAgIH0KIAogICAgIG1DYW1lcmEtPmxvY2soKTsKQEAgLTcwMiw3ICs3MDIsNyBAQAogICAgIHsKICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKICAgICAgICAgaWYgKG1DYW1lcmFSZWNvcmRpbmdQcm94eSAhPSAwKSB7Ci0gICAgICAgICAgICBtQ2FtZXJhUmVjb3JkaW5nUHJveHktPmFzQmluZGVyKCktPnVubGlua1RvRGVhdGgobURlYXRoTm90aWZpZXIpOworICAgICAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIobUNhbWVyYVJlY29yZGluZ1Byb3h5KS0+dW5saW5rVG9EZWF0aChtRGVhdGhOb3RpZmllcik7CiAgICAgICAgICAgICBtQ2FtZXJhUmVjb3JkaW5nUHJveHkuY2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICBtQ2FtZXJhRmxhZ3MgPSAwOwpAQCAtODI1LDcgKzgyNSw3IEBACiAgICAgICAgICAgICAgICAgbUZyYW1lQXZhaWxhYmxlQ29uZGl0aW9uLndhaXRSZWxhdGl2ZShtTG9jaywKICAgICAgICAgICAgICAgICAgICAgbVRpbWVCZXR3ZWVuRnJhbWVDYXB0dXJlVXMgKiAxMDAwTEwgKyBDQU1FUkFfU09VUkNFX1RJTUVPVVRfTlMpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1DYW1lcmFSZWNvcmRpbmdQcm94eSAhPSAwICYmCi0gICAgICAgICAgICAgICAgICAgICFtQ2FtZXJhUmVjb3JkaW5nUHJveHktPmFzQmluZGVyKCktPmlzQmluZGVyQWxpdmUoKSkgeworICAgICAgICAgICAgICAgICAgICAhSUludGVyZmFjZTo6YXNCaW5kZXIobUNhbWVyYVJlY29yZGluZ1Byb3h5KS0+aXNCaW5kZXJBbGl2ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFMT0dXKCJjYW1lcmEgcmVjb3JkaW5nIHByb3h5IGlzIGdvbmUiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0VORF9PRl9TVFJFQU07CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvRGF0YVNvdXJjZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9EYXRhU291cmNlLmNwcAppbmRleCBjOTlkYjg0Li5mN2RjZjM1IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9EYXRhU291cmNlLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9EYXRhU291cmNlLmNwcApAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgImluY2x1ZGUvRFJNRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiaW5jbHVkZS9GTEFDRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiaW5jbHVkZS9IVFRQQmFzZS5oIgorI2luY2x1ZGUgImluY2x1ZGUvTWlkaUV4dHJhY3Rvci5oIgogI2luY2x1ZGUgImluY2x1ZGUvTVAzRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiaW5jbHVkZS9NUEVHMlBTRXh0cmFjdG9yLmgiCiAjaW5jbHVkZSAiaW5jbHVkZS9NUEVHMlRTRXh0cmFjdG9yLmgiCkBAIC0xNzIsNiArMTczLDcgQEAKICAgICBSZWdpc3RlclNuaWZmZXJfbChTbmlmZkFBQyk7CiAgICAgUmVnaXN0ZXJTbmlmZmVyX2woU25pZmZNUEVHMlBTKTsKICAgICBSZWdpc3RlclNuaWZmZXJfbChTbmlmZldWTSk7CisgICAgUmVnaXN0ZXJTbmlmZmVyX2woU25pZmZNaWRpKTsKIAogICAgIGNoYXIgdmFsdWVbUFJPUEVSVFlfVkFMVUVfTUFYXTsKICAgICBpZiAocHJvcGVydHlfZ2V0KCJkcm0uc2VydmljZS5lbmFibGVkIiwgdmFsdWUsIE5VTEwpCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9NUEVHNEV4dHJhY3Rvci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NUEVHNEV4dHJhY3Rvci5jcHAKaW5kZXggMmViN2U1Yy4uZGVjNTJmMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTVBFRzRFeHRyYWN0b3IuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01QRUc0RXh0cmFjdG9yLmNwcApAQCAtMjY1LDYgKzI2NSw4IEBACiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKK3N0YXRpYyBjb25zdCBib29sIGtVc2VIZXhEdW1wID0gZmFsc2U7CisKIHN0YXRpYyB2b2lkIGhleGR1bXAoY29uc3Qgdm9pZCAqX2RhdGEsIHNpemVfdCBzaXplKSB7CiAgICAgY29uc3QgdWludDhfdCAqZGF0YSA9IChjb25zdCB1aW50OF90ICopX2RhdGE7CiAgICAgc2l6ZV90IG9mZnNldCA9IDA7CkBAIC02MDcsNyArNjA5LDYgQEAKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgcmV0dXJuIEVSUk9SX0lPOwogICAgIH0KLSAgICBpbnQzMl90IGNsYXNzU2l6ZSA9IHNpemU7CiAgICAgZGF0YV9vZmZzZXQgKz0gbnVtT2ZCeXRlczsKIAogICAgIHdoaWxlKHNpemUgPj0gMTEgKSB7CkBAIC02NjgsNyArNjY5LDYgQEAKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgcmV0dXJuIEVSUk9SX0lPOwogICAgIH0KLSAgICBjbGFzc1NpemUgPSBzaXplOwogICAgIGRhdGFfb2Zmc2V0ICs9IG51bU9mQnl0ZXM7CiAKICAgICB3aGlsZSAoc2l6ZSA+IDApIHsKQEAgLTc2Niw3ICs3NjYsNyBAQAogICAgICAgICByZXR1cm4gRVJST1JfSU87CiAgICAgfQogICAgIHVpbnQ2NF90IGNodW5rX3NpemUgPSBudG9obChoZHJbMF0pOwotICAgIHVpbnQzMl90IGNodW5rX3R5cGUgPSBudG9obChoZHJbMV0pOworICAgIGludDMyX3QgY2h1bmtfdHlwZSA9IG50b2hsKGhkclsxXSk7CiAgICAgb2ZmNjRfdCBkYXRhX29mZnNldCA9ICpvZmZzZXQgKyA4OwogCiAgICAgaWYgKGNodW5rX3NpemUgPT0gMSkgewpAQCAtODA2LDIzICs4MDYsMjMgQEAKICAgICBNYWtlRm91ckNDU3RyaW5nKGNodW5rX3R5cGUsIGNodW5rKTsKICAgICBBTE9HVigiY2h1bms6ICVzIEAgJWxsZCwgJWQiLCBjaHVuaywgKm9mZnNldCwgZGVwdGgpOwogCi0jaWYgMAotICAgIHN0YXRpYyBjb25zdCBjaGFyIGtXaGl0ZXNwYWNlW10gPSAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI7Ci0gICAgY29uc3QgY2hhciAqaW5kZW50ID0gJmtXaGl0ZXNwYWNlW3NpemVvZihrV2hpdGVzcGFjZSkgLSAxIC0gMiAqIGRlcHRoXTsKLSAgICBwcmludGYoIiVzZm91bmQgY2h1bmsgJyVzJyBvZiBzaXplICUiIFBSSXU2NCAiXG4iLCBpbmRlbnQsIGNodW5rLCBjaHVua19zaXplKTsKKyAgICBpZiAoa1VzZUhleER1bXApIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIga1doaXRlc3BhY2VbXSA9ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKKyAgICAgICAgY29uc3QgY2hhciAqaW5kZW50ID0gJmtXaGl0ZXNwYWNlW3NpemVvZihrV2hpdGVzcGFjZSkgLSAxIC0gMiAqIGRlcHRoXTsKKyAgICAgICAgcHJpbnRmKCIlc2ZvdW5kIGNodW5rICclcycgb2Ygc2l6ZSAlIiBQUkl1NjQgIlxuIiwgaW5kZW50LCBjaHVuaywgY2h1bmtfc2l6ZSk7CiAKLSAgICBjaGFyIGJ1ZmZlclsyNTZdOwotICAgIHNpemVfdCBuID0gY2h1bmtfc2l6ZTsKLSAgICBpZiAobiA+IHNpemVvZihidWZmZXIpKSB7Ci0gICAgICAgIG4gPSBzaXplb2YoYnVmZmVyKTsKLSAgICB9Ci0gICAgaWYgKG1EYXRhU291cmNlLT5yZWFkQXQoKm9mZnNldCwgYnVmZmVyLCBuKQotICAgICAgICAgICAgPCAoc3NpemVfdCluKSB7Ci0gICAgICAgIHJldHVybiBFUlJPUl9JTzsKLSAgICB9CisgICAgICAgIGNoYXIgYnVmZmVyWzI1Nl07CisgICAgICAgIHNpemVfdCBuID0gY2h1bmtfc2l6ZTsKKyAgICAgICAgaWYgKG4gPiBzaXplb2YoYnVmZmVyKSkgeworICAgICAgICAgICAgbiA9IHNpemVvZihidWZmZXIpOworICAgICAgICB9CisgICAgICAgIGlmIChtRGF0YVNvdXJjZS0+cmVhZEF0KCpvZmZzZXQsIGJ1ZmZlciwgbikKKyAgICAgICAgICAgICAgICA8IChzc2l6ZV90KW4pIHsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTzsKKyAgICAgICAgfQogCi0gICAgaGV4ZHVtcChidWZmZXIsIG4pOwotI2VuZGlmCisgICAgICAgIGhleGR1bXAoYnVmZmVyLCBuKTsKKyAgICB9CiAKICAgICBQYXRoQWRkZXIgYXV0b0FkZGVyKCZtUGF0aCwgY2h1bmtfdHlwZSk7CiAKQEAgLTEzMDEsNyArMTMwMSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lPOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICB1aW50MTZfdCBkYXRhX3JlZl9pbmRleCA9IFUxNl9BVCgmYnVmZmVyWzZdKTsKKyAgICAgICAgICAgIHVpbnQxNl90IGRhdGFfcmVmX2luZGV4IF9fdW51c2VkID0gVTE2X0FUKCZidWZmZXJbNl0pOwogICAgICAgICAgICAgdWludDMyX3QgbnVtX2NoYW5uZWxzID0gVTE2X0FUKCZidWZmZXJbMTZdKTsKIAogICAgICAgICAgICAgdWludDE2X3Qgc2FtcGxlX3NpemUgPSBVMTZfQVQoJmJ1ZmZlclsxOF0pOwpAQCAtMTM1NCw3ICsxMzU0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfSU87CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHVpbnQxNl90IGRhdGFfcmVmX2luZGV4ID0gVTE2X0FUKCZidWZmZXJbNl0pOworICAgICAgICAgICAgdWludDE2X3QgZGF0YV9yZWZfaW5kZXggX191bnVzZWQgPSBVMTZfQVQoJmJ1ZmZlcls2XSk7CiAgICAgICAgICAgICB1aW50MTZfdCB3aWR0aCA9IFUxNl9BVCgmYnVmZmVyWzYgKyAxOF0pOwogICAgICAgICAgICAgdWludDE2X3QgaGVpZ2h0ID0gVTE2X0FUKCZidWZmZXJbNiArIDIwXSk7CiAKQEAgLTE1MzYsMTMgKzE1MzYsMTMgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gQHh5egotICAgICAgICBjYXNlIEZPVVJDQygnXHhBOScsICd4JywgJ3knLCAneicpOgorICAgICAgICAvLyCpeHl6CisgICAgICAgIGNhc2UgRk9VUkNDKDB4QTksICd4JywgJ3knLCAneicpOgogICAgICAgICB7CiAgICAgICAgICAgICAqb2Zmc2V0ICs9IGNodW5rX3NpemU7CiAKLSAgICAgICAgICAgIC8vIEJlc3QgY2FzZSB0aGUgdG90YWwgZGF0YSBsZW5ndGggaW5zaWRlICJAeHl6IiBib3gKLSAgICAgICAgICAgIC8vIHdvdWxkIGJlIDgsIGZvciBpbnN0YW5jZSAiQHh5eiIgKyAiXHgwMFx4MDRceDE1XHhjNyIgKyAiMCswLyIsCisgICAgICAgICAgICAvLyBCZXN0IGNhc2UgdGhlIHRvdGFsIGRhdGEgbGVuZ3RoIGluc2lkZSAiqXh5eiIgYm94CisgICAgICAgICAgICAvLyB3b3VsZCBiZSA4LCBmb3IgaW5zdGFuY2UgIql4eXoiICsgIlx4MDBceDA0XHgxNVx4YzciICsgIjArMC8iLAogICAgICAgICAgICAgLy8gd2hlcmUgIlx4MDBceDA0IiBpcyB0aGUgdGV4dCBzdHJpbmcgbGVuZ3RoIHdpdGggdmFsdWUgPSA0LAogICAgICAgICAgICAgLy8gIlwweDE1XHhjNyIgaXMgdGhlIGxhbmd1YWdlIGNvZGUgPSBlbiwgYW5kICIwKzAiIGlzIGEKICAgICAgICAgICAgIC8vIGxvY2F0aW9uIChzdHJpbmcpIHZhbHVlIHdpdGggbG9uZ2l0dWRlID0gMCBhbmQgbGF0aXR1ZGUgPSAwLgpAQCAtMTg3MCw3ICsxODcwLDYgQEAKICAgICAgICAgICAgIGlmIChjaHVua19kYXRhX3NpemUgPCAyNCkgewogICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVpbnQzMl90IGR1cmF0aW9uOwogICAgICAgICAgICAgVHJleCB0cmV4OwogICAgICAgICAgICAgaWYgKCFtRGF0YVNvdXJjZS0+Z2V0VUludDMyKGRhdGFfb2Zmc2V0ICsgNCwgJnRyZXgudHJhY2tfSUQpIHx8CiAgICAgICAgICAgICAgICAgIW1EYXRhU291cmNlLT5nZXRVSW50MzIoZGF0YV9vZmZzZXQgKyA4LCAmdHJleC5kZWZhdWx0X3NhbXBsZV9kZXNjcmlwdGlvbl9pbmRleCkgfHwKQEAgLTIxNDIsNyArMjE0MSw3IEBACiAgICAgICAgIHJldHVybiBFUlJPUl9JTzsKICAgICB9CiAKLSAgICB1aW50NjRfdCBjdGltZSwgbXRpbWUsIGR1cmF0aW9uOworICAgIHVpbnQ2NF90IGN0aW1lIF9fdW51c2VkLCBtdGltZSBfX3VudXNlZCwgZHVyYXRpb24gX191bnVzZWQ7CiAgICAgaW50MzJfdCBpZDsKIAogICAgIGlmICh2ZXJzaW9uID09IDEpIHsKQEAgLTIxNjQsMTIgKzIxNjMsMTMgQEAKICAgICBzaXplX3QgbWF0cml4T2Zmc2V0ID0gZHluU2l6ZSArIDE2OwogICAgIGludDMyX3QgYTAwID0gVTMyX0FUKCZidWZmZXJbbWF0cml4T2Zmc2V0XSk7CiAgICAgaW50MzJfdCBhMDEgPSBVMzJfQVQoJmJ1ZmZlclttYXRyaXhPZmZzZXQgKyA0XSk7Ci0gICAgaW50MzJfdCBkeCA9IFUzMl9BVCgmYnVmZmVyW21hdHJpeE9mZnNldCArIDhdKTsKICAgICBpbnQzMl90IGExMCA9IFUzMl9BVCgmYnVmZmVyW21hdHJpeE9mZnNldCArIDEyXSk7CiAgICAgaW50MzJfdCBhMTEgPSBVMzJfQVQoJmJ1ZmZlclttYXRyaXhPZmZzZXQgKyAxNl0pOwotICAgIGludDMyX3QgZHkgPSBVMzJfQVQoJmJ1ZmZlclttYXRyaXhPZmZzZXQgKyAyMF0pOwogCiAjaWYgMAorICAgIGludDMyX3QgZHggPSBVMzJfQVQoJmJ1ZmZlclttYXRyaXhPZmZzZXQgKyA4XSk7CisgICAgaW50MzJfdCBkeSA9IFUzMl9BVCgmYnVmZmVyW21hdHJpeE9mZnNldCArIDIwXSk7CisKICAgICBBTE9HSSgieCcgPSAlLjJmICogeCArICUuMmYgKiB5ICsgJS4yZiIsCiAgICAgICAgICBhMDAgLyA2NTUzNi4wZiwgYTAxIC8gNjU1MzYuMGYsIGR4IC8gNjU1MzYuMGYpOwogICAgIEFMT0dJKCJ5JyA9ICUuMmYgKiB4ICsgJS4yZiAqIHkgKyAlLjJmIiwKQEAgLTIyMzAsNyArMjIzMCw3IEBACiAgICAgY2hhciBjaHVua1s1XTsKICAgICBNYWtlRm91ckNDU3RyaW5nKG1QYXRoWzRdLCBjaHVuayk7CiAgICAgQUxPR1YoIm1ldGE6ICVzIEAgJWxsZCIsIGNodW5rLCBvZmZzZXQpOwotICAgIHN3aXRjaCAobVBhdGhbNF0pIHsKKyAgICBzd2l0Y2ggKChpbnQzMl90KW1QYXRoWzRdKSB7CiAgICAgICAgIGNhc2UgRk9VUkNDKDB4YTksICdhJywgJ2wnLCAnYicpOgogICAgICAgICB7CiAgICAgICAgICAgICBtZXRhZGF0YUtleSA9IGtLZXlBbGJ1bTsKQEAgLTI3MjEsMTAgKzI3MjEsMTAgQEAKICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKICAgICB9CiAKLSNpZiAwCi0gICAgcHJpbnRmKCJFU0Qgb2Ygc2l6ZSAlZFxuIiwgY3NkX3NpemUpOwotICAgIGhleGR1bXAoY3NkLCBjc2Rfc2l6ZSk7Ci0jZW5kaWYKKyAgICBpZiAoa1VzZUhleER1bXApIHsKKyAgICAgICAgcHJpbnRmKCJFU0Qgb2Ygc2l6ZSAlZFxuIiwgY3NkX3NpemUpOworICAgICAgICBoZXhkdW1wKGNzZCwgY3NkX3NpemUpOworICAgIH0KIAogICAgIGlmIChjc2Rfc2l6ZSA9PSAwKSB7CiAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gZnVydGhlciBpbmZvcm1hdGlvbiwgaS5lLiBubyBjb2RlYyBzcGVjaWZpYyBkYXRhCkBAIC0yNzc1LDcgKzI3NzUsNyBAQAogCiAgICAgaWYgKG9iamVjdFR5cGUgPT0gQU9UX1NCUiB8fCBvYmplY3RUeXBlID09IEFPVF9QUykgey8vU0JSIHNwZWNpZmljIGNvbmZpZyBwZXIgMTQ0OTYtMyB0YWJsZSAxLjEzCiAgICAgICAgIHVpbnQzMl90IGV4dEZyZXFJbmRleCA9IGJyLmdldEJpdHMoNCk7Ci0gICAgICAgIGludDMyX3QgZXh0U2FtcGxlUmF0ZTsKKyAgICAgICAgaW50MzJfdCBleHRTYW1wbGVSYXRlIF9fdW51c2VkOwogICAgICAgICBpZiAoZXh0RnJlcUluZGV4ID09IDE1KSB7CiAgICAgICAgICAgICBpZiAoY3NkX3NpemUgPCA4KSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SX01BTEZPUk1FRDsKQEAgLTI4MjUsMTIgKzI4MjUsMTIgQEAKICAgICAgICAgaWYgKG9iamVjdFR5cGUgPT0gQU9UX0FBQ19MQyB8fCBvYmplY3RUeXBlID09IEFPVF9FUl9BQUNfTEMgfHwKICAgICAgICAgICAgICAgICBvYmplY3RUeXBlID09IEFPVF9FUl9BQUNfTEQgfHwgb2JqZWN0VHlwZSA9PSBBT1RfRVJfQUFDX1NDQUwgfHwKICAgICAgICAgICAgICAgICBvYmplY3RUeXBlID09IEFPVF9FUl9CU0FDKSB7Ci0gICAgICAgICAgICBjb25zdCBpbnQzMl90IGZyYW1lTGVuZ3RoRmxhZyA9IGJyLmdldEJpdHMoMSk7CisgICAgICAgICAgICBjb25zdCBpbnQzMl90IGZyYW1lTGVuZ3RoRmxhZyBfX3VudXNlZCA9IGJyLmdldEJpdHMoMSk7CiAKICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgZGVwZW5kc09uQ29yZUNvZGVyID0gYnIuZ2V0Qml0cygxKTsKIAogICAgICAgICAgICAgaWYgKGRlcGVuZHNPbkNvcmVDb2RlciApIHsKLSAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNvcmVDb2RlckRlbGF5ID0gYnIuZ2V0Qml0cygxNCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBjb3JlQ29kZXJEZWxheSBfX3VudXNlZCA9IGJyLmdldEJpdHMoMTQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbnQzMl90IGV4dGVuc2lvbkZsYWcgPSAtMTsKQEAgLTI4NTksNTQgKzI4NTksNTQgQEAKICAgICAgICAgICAgIGlmIChudW1DaGFubmVscyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBjaGFubmVsc0VmZmVjdGl2ZU51bSA9IDA7CiAgICAgICAgICAgICAgICAgaW50MzJfdCBjaGFubmVsc051bSA9IDA7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBFbGVtZW50SW5zdGFuY2VUYWcgPSBici5nZXRCaXRzKDQpOwotICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgUHJvZmlsZSA9IGJyLmdldEJpdHMoMik7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBTYW1wbGluZ0ZyZXF1ZW5jeUluZGV4ID0gYnIuZ2V0Qml0cyg0KTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IEVsZW1lbnRJbnN0YW5jZVRhZyBfX3VudXNlZCA9IGJyLmdldEJpdHMoNCk7CisgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBQcm9maWxlIF9fdW51c2VkID0gYnIuZ2V0Qml0cygyKTsKKyAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IFNhbXBsaW5nRnJlcXVlbmN5SW5kZXggX191bnVzZWQgPSBici5nZXRCaXRzKDQpOwogICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTnVtRnJvbnRDaGFubmVsRWxlbWVudHMgPSBici5nZXRCaXRzKDQpOwogICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTnVtU2lkZUNoYW5uZWxFbGVtZW50cyA9IGJyLmdldEJpdHMoNCk7CiAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBOdW1CYWNrQ2hhbm5lbEVsZW1lbnRzID0gYnIuZ2V0Qml0cyg0KTsKICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IE51bUxmZUNoYW5uZWxFbGVtZW50cyA9IGJyLmdldEJpdHMoMik7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBOdW1Bc3NvY0RhdGFFbGVtZW50cyA9IGJyLmdldEJpdHMoMyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBOdW1WYWxpZENjRWxlbWVudHMgPSBici5nZXRCaXRzKDQpOworICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTnVtQXNzb2NEYXRhRWxlbWVudHMgX191bnVzZWQgPSBici5nZXRCaXRzKDMpOworICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTnVtVmFsaWRDY0VsZW1lbnRzIF9fdW51c2VkID0gYnIuZ2V0Qml0cyg0KTsKIAogICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTW9ub01peGRvd25QcmVzZW50ID0gYnIuZ2V0Qml0cygxKTsKICAgICAgICAgICAgICAgICBpZiAoTW9ub01peGRvd25QcmVzZW50ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBNb25vTWl4ZG93bkVsZW1lbnROdW1iZXIgPSBici5nZXRCaXRzKDQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IE1vbm9NaXhkb3duRWxlbWVudE51bWJlciBfX3VudXNlZCA9IGJyLmdldEJpdHMoNCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBTdGVyZW9NaXhkb3duUHJlc2VudCA9IGJyLmdldEJpdHMoMSk7CiAgICAgICAgICAgICAgICAgaWYgKFN0ZXJlb01peGRvd25QcmVzZW50ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBTdGVyZW9NaXhkb3duRWxlbWVudE51bWJlciA9IGJyLmdldEJpdHMoNCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgU3RlcmVvTWl4ZG93bkVsZW1lbnROdW1iZXIgX191bnVzZWQgPSBici5nZXRCaXRzKDQpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTWF0cml4TWl4ZG93bkluZGV4UHJlc2VudCA9IGJyLmdldEJpdHMoMSk7CiAgICAgICAgICAgICAgICAgaWYgKE1hdHJpeE1peGRvd25JbmRleFByZXNlbnQgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IE1hdHJpeE1peGRvd25JbmRleCA9IGJyLmdldEJpdHMoMik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgUHNldWRvU3Vycm91bmRFbmFibGUgPSBici5nZXRCaXRzKDEpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IE1hdHJpeE1peGRvd25JbmRleCBfX3VudXNlZCA9IGJyLmdldEJpdHMoMik7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgUHNldWRvU3Vycm91bmRFbmFibGUgX191bnVzZWQgPSBici5nZXRCaXRzKDEpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgTnVtRnJvbnRDaGFubmVsRWxlbWVudHM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IEZyb250RWxlbWVudElzQ3BlID0gYnIuZ2V0Qml0cygxKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBGcm9udEVsZW1lbnRUYWdTZWxlY3QgPSBici5nZXRCaXRzKDQpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IEZyb250RWxlbWVudFRhZ1NlbGVjdCBfX3VudXNlZCA9IGJyLmdldEJpdHMoNCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzTnVtICs9IEZyb250RWxlbWVudElzQ3BlID8gMiA6IDE7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBOdW1TaWRlQ2hhbm5lbEVsZW1lbnRzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBTaWRlRWxlbWVudElzQ3BlID0gYnIuZ2V0Qml0cygxKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBTaWRlRWxlbWVudFRhZ1NlbGVjdCA9IGJyLmdldEJpdHMoNCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgU2lkZUVsZW1lbnRUYWdTZWxlY3QgX191bnVzZWQgPSBici5nZXRCaXRzKDQpOwogICAgICAgICAgICAgICAgICAgICBjaGFubmVsc051bSArPSBTaWRlRWxlbWVudElzQ3BlID8gMiA6IDE7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBOdW1CYWNrQ2hhbm5lbEVsZW1lbnRzOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBCYWNrRWxlbWVudElzQ3BlID0gYnIuZ2V0Qml0cygxKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50MzJfdCBCYWNrRWxlbWVudFRhZ1NlbGVjdCA9IGJyLmdldEJpdHMoNCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgQmFja0VsZW1lbnRUYWdTZWxlY3QgX191bnVzZWQgPSBici5nZXRCaXRzKDQpOwogICAgICAgICAgICAgICAgICAgICBjaGFubmVsc051bSArPSBCYWNrRWxlbWVudElzQ3BlID8gMiA6IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNoYW5uZWxzRWZmZWN0aXZlTnVtID0gY2hhbm5lbHNOdW07CiAKICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IE51bUxmZUNoYW5uZWxFbGVtZW50czsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTGZlRWxlbWVudFRhZ1NlbGVjdCA9IGJyLmdldEJpdHMoNCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgTGZlRWxlbWVudFRhZ1NlbGVjdCBfX3VudXNlZCA9IGJyLmdldEJpdHMoNCk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxzTnVtICs9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFMT0dWKCJtcGVnNCBhdWRpbyBjaGFubmVsc051bSA9ICVkIiwgY2hhbm5lbHNOdW0pOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhRGVmcy5jcHAKaW5kZXggYzVhNjkzOS4uYzQ4YTVhZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFEZWZzLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYURlZnMuY3BwCkBAIC0zNCw2ICszNCw3IEBACiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19NUEVHID0gImF1ZGlvL21wZWciOwogY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fTVBFR19MQVlFUl9JID0gImF1ZGlvL21wZWctTDEiOwogY29uc3QgY2hhciAqTUVESUFfTUlNRVRZUEVfQVVESU9fTVBFR19MQVlFUl9JSSA9ICJhdWRpby9tcGVnLUwyIjsKK2NvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX01JREkgPSAiYXVkaW8vbWlkaSI7CiBjb25zdCBjaGFyICpNRURJQV9NSU1FVFlQRV9BVURJT19BQUMgPSAiYXVkaW8vbXA0YS1sYXRtIjsKIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX1FDRUxQID0gImF1ZGlvL3FjZWxwIjsKIGNvbnN0IGNoYXIgKk1FRElBX01JTUVUWVBFX0FVRElPX1ZPUkJJUyA9ICJhdWRpby92b3JiaXMiOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWVkaWFFeHRyYWN0b3IuY3BwCmluZGV4IDlhYjY2MTEuLmUyMWZlNmUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NZWRpYUV4dHJhY3Rvci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJpbmNsdWRlL1dWTUV4dHJhY3Rvci5oIgogI2luY2x1ZGUgImluY2x1ZGUvRkxBQ0V4dHJhY3Rvci5oIgogI2luY2x1ZGUgImluY2x1ZGUvQUFDRXh0cmFjdG9yLmgiCisjaW5jbHVkZSAiaW5jbHVkZS9NaWRpRXh0cmFjdG9yLmgiCiAKICNpbmNsdWRlICJtYXRyb3NrYS9NYXRyb3NrYUV4dHJhY3Rvci5oIgogCkBAIC0xMTYsNiArMTE3LDggQEAKICAgICAgICAgcmV0ID0gbmV3IEFBQ0V4dHJhY3Rvcihzb3VyY2UsIG1ldGEpOwogICAgIH0gZWxzZSBpZiAoIXN0cmNhc2VjbXAobWltZSwgTUVESUFfTUlNRVRZUEVfQ09OVEFJTkVSX01QRUcyUFMpKSB7CiAgICAgICAgIHJldCA9IG5ldyBNUEVHMlBTRXh0cmFjdG9yKHNvdXJjZSk7CisgICAgfSBlbHNlIGlmICghc3RyY2FzZWNtcChtaW1lLCBNRURJQV9NSU1FVFlQRV9BVURJT19NSURJKSkgeworICAgICAgICByZXQgPSBuZXcgTWlkaUV4dHJhY3Rvcihzb3VyY2UpOwogICAgIH0KIAogICAgIGlmIChyZXQgIT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWlkaUV4dHJhY3Rvci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9NaWRpRXh0cmFjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmZhYjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvTWlkaUV4dHJhY3Rvci5jcHAKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisvLyNkZWZpbmUgTE9HX05ERUJVRyAwCisjZGVmaW5lIExPR19UQUcgIk1pZGlFeHRyYWN0b3IiCisjaW5jbHVkZSA8dXRpbHMvTG9nLmg+CisKKyNpbmNsdWRlICJpbmNsdWRlL01pZGlFeHRyYWN0b3IuaCIKKworI2luY2x1ZGUgPG1lZGlhL01pZGlJb1dyYXBwZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9mb3VuZGF0aW9uL0FEZWJ1Zy5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhQnVmZmVyR3JvdXAuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYURlZnMuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZXRhRGF0YS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhU291cmNlLmg+CisjaW5jbHVkZSA8bGlic29uaXZveC9lYXNfcmV2ZXJiLmg+CisKK25hbWVzcGFjZSBhbmRyb2lkIHsKKworLy8gaG93IG1hbnkgU29uaXZveCBvdXRwdXQgYnVmZmVycyB0byBhZ2dyZWdhdGUgaW50byBvbmUgTWVkaWFCdWZmZXIKK3N0YXRpYyBjb25zdCBpbnQgTlVNX0NPTUJJTkVfQlVGRkVSUyA9IDQ7CisKK2NsYXNzIE1pZGlTb3VyY2UgOiBwdWJsaWMgTWVkaWFTb3VyY2UgeworCitwdWJsaWM6CisgICAgTWlkaVNvdXJjZSgKKyAgICAgICAgICAgIGNvbnN0IHNwPE1pZGlFbmdpbmU+ICZlbmdpbmUsCisgICAgICAgICAgICBjb25zdCBzcDxNZXRhRGF0YT4gJnRyYWNrTWV0YWRhdGEpOworCisgICAgdmlydHVhbCBzdGF0dXNfdCBzdGFydChNZXRhRGF0YSAqcGFyYW1zKTsKKyAgICB2aXJ0dWFsIHN0YXR1c190IHN0b3AoKTsKKyAgICB2aXJ0dWFsIHNwPE1ldGFEYXRhPiBnZXRGb3JtYXQoKTsKKworICAgIHZpcnR1YWwgc3RhdHVzX3QgcmVhZCgKKyAgICAgICAgICAgIE1lZGlhQnVmZmVyICoqYnVmZmVyLCBjb25zdCBSZWFkT3B0aW9ucyAqb3B0aW9ucyA9IE5VTEwpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+TWlkaVNvdXJjZSgpOworCitwcml2YXRlOgorICAgIHNwPE1pZGlFbmdpbmU+IG1FbmdpbmU7CisgICAgc3A8TWV0YURhdGE+IG1UcmFja01ldGFkYXRhOworICAgIGJvb2wgbUluaXRDaGVjazsKKyAgICBib29sIG1TdGFydGVkOworCisgICAgc3RhdHVzX3QgaW5pdCgpOworCisgICAgLy8gbm8gY29weSBjb25zdHJ1Y3RvciBvciBhc3NpZ25tZW50CisgICAgTWlkaVNvdXJjZShjb25zdCBNaWRpU291cmNlICYpOworICAgIE1pZGlTb3VyY2UgJm9wZXJhdG9yPShjb25zdCBNaWRpU291cmNlICYpOworCit9OworCisKKy8vIE1pZGlzb3VyY2UKKworTWlkaVNvdXJjZTo6TWlkaVNvdXJjZSgKKyAgICAgICAgY29uc3Qgc3A8TWlkaUVuZ2luZT4gJmVuZ2luZSwKKyAgICAgICAgY29uc3Qgc3A8TWV0YURhdGE+ICZ0cmFja01ldGFkYXRhKQorICAgIDogbUVuZ2luZShlbmdpbmUpLAorICAgICAgbVRyYWNrTWV0YWRhdGEodHJhY2tNZXRhZGF0YSksCisgICAgICBtSW5pdENoZWNrKGZhbHNlKSwKKyAgICAgIG1TdGFydGVkKGZhbHNlKQoreworICAgIEFMT0dWKCJNaWRpU291cmNlIGN0b3IiKTsKKyAgICBtSW5pdENoZWNrID0gaW5pdCgpOworfQorCitNaWRpU291cmNlOjp+TWlkaVNvdXJjZSgpCit7CisgICAgQUxPR1YoIk1pZGlTb3VyY2UgZHRvciIpOworICAgIGlmIChtU3RhcnRlZCkgeworICAgICAgICBzdG9wKCk7CisgICAgfQorfQorCitzdGF0dXNfdCBNaWRpU291cmNlOjpzdGFydChNZXRhRGF0YSAqIC8qIHBhcmFtcyAqLykKK3sKKyAgICBBTE9HVigiTWlkaVNvdXJjZTo6c3RhcnQiKTsKKworICAgIENIRUNLKCFtU3RhcnRlZCk7CisgICAgbVN0YXJ0ZWQgPSB0cnVlOworICAgIG1FbmdpbmUtPmFsbG9jYXRlQnVmZmVycygpOworICAgIHJldHVybiBPSzsKK30KKworc3RhdHVzX3QgTWlkaVNvdXJjZTo6c3RvcCgpCit7CisgICAgQUxPR1YoIk1pZGlTb3VyY2U6OnN0b3AiKTsKKworICAgIENIRUNLKG1TdGFydGVkKTsKKyAgICBtU3RhcnRlZCA9IGZhbHNlOworICAgIG1FbmdpbmUtPnJlbGVhc2VCdWZmZXJzKCk7CisKKyAgICByZXR1cm4gT0s7Cit9CisKK3NwPE1ldGFEYXRhPiBNaWRpU291cmNlOjpnZXRGb3JtYXQoKQoreworICAgIHJldHVybiBtVHJhY2tNZXRhZGF0YTsKK30KKworc3RhdHVzX3QgTWlkaVNvdXJjZTo6cmVhZCgKKyAgICAgICAgTWVkaWFCdWZmZXIgKipvdXRCdWZmZXIsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zKQoreworICAgIEFMT0dWKCJNaWRpU291cmNlOjpyZWFkIik7CisgICAgTWVkaWFCdWZmZXIgKmJ1ZmZlcjsKKyAgICAvLyBwcm9jZXNzIGFuIG9wdGlvbmFsIHNlZWsgcmVxdWVzdAorICAgIGludDY0X3Qgc2Vla1RpbWVVczsKKyAgICBSZWFkT3B0aW9uczo6U2Vla01vZGUgbW9kZTsKKyAgICBpZiAoKE5VTEwgIT0gb3B0aW9ucykgJiYgb3B0aW9ucy0+Z2V0U2Vla1RvKCZzZWVrVGltZVVzLCAmbW9kZSkpIHsKKyAgICAgICAgaWYgKHNlZWtUaW1lVXMgPD0gMExMKSB7CisgICAgICAgICAgICBzZWVrVGltZVVzID0gMExMOworICAgICAgICB9CisgICAgICAgIG1FbmdpbmUtPnNlZWtUbyhzZWVrVGltZVVzKTsKKyAgICB9CisgICAgYnVmZmVyID0gbUVuZ2luZS0+cmVhZEJ1ZmZlcigpOworICAgICpvdXRCdWZmZXIgPSBidWZmZXI7CisgICAgQUxPR1YoIk1pZGlTb3VyY2U6OnJlYWQgJXAgZG9uZSIsIHRoaXMpOworICAgIHJldHVybiBidWZmZXIgIT0gTlVMTCA/IChzdGF0dXNfdCkgT0sgOiAoc3RhdHVzX3QpIEVSUk9SX0VORF9PRl9TVFJFQU07Cit9CisKK3N0YXR1c190IE1pZGlTb3VyY2U6OmluaXQoKQoreworICAgIEFMT0dWKCJNaWRpU291cmNlOjppbml0Iik7CisgICAgcmV0dXJuIE9LOworfQorCisvLyBNaWRpRW5naW5lCisKK01pZGlFbmdpbmU6Ok1pZGlFbmdpbmUoY29uc3Qgc3A8RGF0YVNvdXJjZT4gJmRhdGFTb3VyY2UsCisgICAgICAgIGNvbnN0IHNwPE1ldGFEYXRhPiAmZmlsZU1ldGFkYXRhLAorICAgICAgICBjb25zdCBzcDxNZXRhRGF0YT4gJnRyYWNrTWV0YWRhdGEpIDoKKyAgICAgICAgICAgIG1Hcm91cChOVUxMKSwKKyAgICAgICAgICAgIG1FYXNEYXRhKE5VTEwpLAorICAgICAgICAgICAgbUVhc0hhbmRsZShOVUxMKSwKKyAgICAgICAgICAgIG1FYXNDb25maWcoTlVMTCksCisgICAgICAgICAgICBtSXNJbml0aWFsaXplZChmYWxzZSkgeworICAgIG1Jb1dyYXBwZXIgPSBuZXcgTWlkaUlvV3JhcHBlcihkYXRhU291cmNlKTsKKyAgICAvLyBzcGluIHVwIGEgbmV3IEVBUyBlbmdpbmUKKyAgICBFQVNfSTMyIHRlbXA7CisgICAgRUFTX1JFU1VMVCByZXN1bHQgPSBFQVNfSW5pdCgmbUVhc0RhdGEpOworCisgICAgaWYgKHJlc3VsdCA9PSBFQVNfU1VDQ0VTUykgeworICAgICAgICByZXN1bHQgPSBFQVNfT3BlbkZpbGUobUVhc0RhdGEsIG1Jb1dyYXBwZXItPmdldExvY2F0b3IoKSwgJm1FYXNIYW5kbGUpOworICAgIH0KKyAgICBpZiAocmVzdWx0ID09IEVBU19TVUNDRVNTKSB7CisgICAgICAgIHJlc3VsdCA9IEVBU19QcmVwYXJlKG1FYXNEYXRhLCBtRWFzSGFuZGxlKTsKKyAgICB9CisgICAgaWYgKHJlc3VsdCA9PSBFQVNfU1VDQ0VTUykgeworICAgICAgICByZXN1bHQgPSBFQVNfUGFyc2VNZXRhRGF0YShtRWFzRGF0YSwgbUVhc0hhbmRsZSwgJnRlbXApOworICAgIH0KKworICAgIGlmIChyZXN1bHQgIT0gRUFTX1NVQ0NFU1MpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChmaWxlTWV0YWRhdGEgIT0gTlVMTCkgeworICAgICAgICBmaWxlTWV0YWRhdGEtPnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19NSURJKTsKKyAgICB9CisKKyAgICBpZiAodHJhY2tNZXRhZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIHRyYWNrTWV0YWRhdGEtPnNldENTdHJpbmcoa0tleU1JTUVUeXBlLCBNRURJQV9NSU1FVFlQRV9BVURJT19SQVcpOworICAgICAgICB0cmFja01ldGFkYXRhLT5zZXRJbnQ2NChrS2V5RHVyYXRpb24sIDEwMDBsbCAqIHRlbXApOyAvLyBtaWxsaS0+bWljcm8KKyAgICAgICAgbUVhc0NvbmZpZyA9IEVBU19Db25maWcoKTsKKyAgICAgICAgdHJhY2tNZXRhZGF0YS0+c2V0SW50MzIoa0tleVNhbXBsZVJhdGUsIG1FYXNDb25maWctPnNhbXBsZVJhdGUpOworICAgICAgICB0cmFja01ldGFkYXRhLT5zZXRJbnQzMihrS2V5Q2hhbm5lbENvdW50LCBtRWFzQ29uZmlnLT5udW1DaGFubmVscyk7CisgICAgfQorICAgIG1Jc0luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworTWlkaUVuZ2luZTo6fk1pZGlFbmdpbmUoKSB7CisgICAgaWYgKG1FYXNIYW5kbGUpIHsKKyAgICAgICAgRUFTX0Nsb3NlRmlsZShtRWFzRGF0YSwgbUVhc0hhbmRsZSk7CisgICAgfQorICAgIGlmIChtRWFzRGF0YSkgeworICAgICAgICBFQVNfU2h1dGRvd24obUVhc0RhdGEpOworICAgIH0KKyAgICBkZWxldGUgbUdyb3VwOworCit9CisKK3N0YXR1c190IE1pZGlFbmdpbmU6OmluaXRDaGVjaygpIHsKKyAgICByZXR1cm4gbUlzSW5pdGlhbGl6ZWQgPyBPSyA6IFVOS05PV05fRVJST1I7Cit9CisKK3N0YXR1c190IE1pZGlFbmdpbmU6OmFsbG9jYXRlQnVmZmVycygpIHsKKyAgICAvLyBzZWxlY3QgcmV2ZXJiIHByZXNldCBhbmQgZW5hYmxlCisgICAgRUFTX1NldFBhcmFtZXRlcihtRWFzRGF0YSwgRUFTX01PRFVMRV9SRVZFUkIsIEVBU19QQVJBTV9SRVZFUkJfUFJFU0VULCBFQVNfUEFSQU1fUkVWRVJCX0NIQU1CRVIpOworICAgIEVBU19TZXRQYXJhbWV0ZXIobUVhc0RhdGEsIEVBU19NT0RVTEVfUkVWRVJCLCBFQVNfUEFSQU1fUkVWRVJCX0JZUEFTUywgRUFTX0ZBTFNFKTsKKworICAgIG1Hcm91cCA9IG5ldyBNZWRpYUJ1ZmZlckdyb3VwOworICAgIGludCBidWZzaXplID0gc2l6ZW9mKEVBU19QQ00pCisgICAgICAgICAgICAqIG1FYXNDb25maWctPm1peEJ1ZmZlclNpemUgKiBtRWFzQ29uZmlnLT5udW1DaGFubmVscyAqIE5VTV9DT01CSU5FX0JVRkZFUlM7CisgICAgQUxPR1YoInVzaW5nICVkIGJ5dGUgYnVmZmVyIiwgYnVmc2l6ZSk7CisgICAgbUdyb3VwLT5hZGRfYnVmZmVyKG5ldyBNZWRpYUJ1ZmZlcihidWZzaXplKSk7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBNaWRpRW5naW5lOjpyZWxlYXNlQnVmZmVycygpIHsKKyAgICBkZWxldGUgbUdyb3VwOworICAgIG1Hcm91cCA9IE5VTEw7CisgICAgcmV0dXJuIE9LOworfQorCitzdGF0dXNfdCBNaWRpRW5naW5lOjpzZWVrVG8oaW50NjRfdCBwb3NpdGlvblVzKSB7CisgICAgQUxPR1YoInNlZWtUbyAlbGxkIiwgcG9zaXRpb25Vcyk7CisgICAgRUFTX1JFU1VMVCByZXN1bHQgPSBFQVNfTG9jYXRlKG1FYXNEYXRhLCBtRWFzSGFuZGxlLCBwb3NpdGlvblVzIC8gMTAwMCwgZmFsc2UpOworICAgIHJldHVybiByZXN1bHQgPT0gRUFTX1NVQ0NFU1MgPyBPSyA6IFVOS05PV05fRVJST1I7Cit9CisKK01lZGlhQnVmZmVyKiBNaWRpRW5naW5lOjpyZWFkQnVmZmVyKCkgeworICAgIEVBU19TVEFURSBzdGF0ZTsKKyAgICBFQVNfU3RhdGUobUVhc0RhdGEsIG1FYXNIYW5kbGUsICZzdGF0ZSk7CisgICAgaWYgKChzdGF0ZSA9PSBFQVNfU1RBVEVfU1RPUFBFRCkgfHwgKHN0YXRlID09IEVBU19TVEFURV9FUlJPUikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIE1lZGlhQnVmZmVyICpidWZmZXI7CisgICAgc3RhdHVzX3QgZXJyID0gbUdyb3VwLT5hY3F1aXJlX2J1ZmZlcigmYnVmZmVyKTsKKyAgICBpZiAoZXJyICE9IE9LKSB7CisgICAgICAgIEFMT0dFKCJyZWFkQnVmZmVyOiBubyBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEVBU19JMzIgdGltZU1zOworICAgIEVBU19HZXRMb2NhdGlvbihtRWFzRGF0YSwgbUVhc0hhbmRsZSwgJnRpbWVNcyk7CisgICAgaW50NjRfdCB0aW1lVXMgPSAxMDAwbGwgKiB0aW1lTXM7CisgICAgYnVmZmVyLT5tZXRhX2RhdGEoKS0+c2V0SW50NjQoa0tleVRpbWUsIHRpbWVVcyk7CisKKyAgICBFQVNfUENNKiBwID0gKEVBU19QQ00qKSBidWZmZXItPmRhdGEoKTsKKyAgICBpbnQgbnVtQnl0ZXNPdXRwdXQgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0NPTUJJTkVfQlVGRkVSUzsgaSsrKSB7CisgICAgICAgIEVBU19JMzIgbnVtUmVuZGVyZWQ7CisgICAgICAgIEVBU19SRVNVTFQgcmVzdWx0ID0gRUFTX1JlbmRlcihtRWFzRGF0YSwgcCwgbUVhc0NvbmZpZy0+bWl4QnVmZmVyU2l6ZSwgJm51bVJlbmRlcmVkKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBFQVNfU1VDQ0VTUykgeworICAgICAgICAgICAgQUxPR0UoIkVBU19SZW5kZXIgcmV0dXJuZWQgJWxkIiwgcmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHAgKz0gbnVtUmVuZGVyZWQgKiBtRWFzQ29uZmlnLT5udW1DaGFubmVsczsKKyAgICAgICAgbnVtQnl0ZXNPdXRwdXQgKz0gbnVtUmVuZGVyZWQgKiBtRWFzQ29uZmlnLT5udW1DaGFubmVscyAqIHNpemVvZihFQVNfUENNKTsKKyAgICB9CisgICAgYnVmZmVyLT5zZXRfcmFuZ2UoMCwgbnVtQnl0ZXNPdXRwdXQpOworICAgIEFMT0dWKCJyZWFkQnVmZmVyOiByZXR1cm5pbmcgJXpkIGluIGJ1ZmZlciAlcCIsIGJ1ZmZlci0+cmFuZ2VfbGVuZ3RoKCksIGJ1ZmZlcik7CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworCisvLyBNaWRpRXh0cmFjdG9yCisKK01pZGlFeHRyYWN0b3I6Ok1pZGlFeHRyYWN0b3IoCisgICAgICAgIGNvbnN0IHNwPERhdGFTb3VyY2U+ICZkYXRhU291cmNlKQorICAgIDogbURhdGFTb3VyY2UoZGF0YVNvdXJjZSksCisgICAgICBtSW5pdENoZWNrKGZhbHNlKQoreworICAgIEFMT0dWKCJNaWRpRXh0cmFjdG9yIGN0b3IiKTsKKyAgICBtRmlsZU1ldGFkYXRhID0gbmV3IE1ldGFEYXRhOworICAgIG1UcmFja01ldGFkYXRhID0gbmV3IE1ldGFEYXRhOworICAgIG1FbmdpbmUgPSBuZXcgTWlkaUVuZ2luZShtRGF0YVNvdXJjZSwgbUZpbGVNZXRhZGF0YSwgbVRyYWNrTWV0YWRhdGEpOworICAgIG1Jbml0Q2hlY2sgPSBtRW5naW5lLT5pbml0Q2hlY2soKTsKK30KKworTWlkaUV4dHJhY3Rvcjo6fk1pZGlFeHRyYWN0b3IoKQoreworICAgIEFMT0dWKCJNaWRpRXh0cmFjdG9yIGR0b3IiKTsKK30KKworc2l6ZV90IE1pZGlFeHRyYWN0b3I6OmNvdW50VHJhY2tzKCkKK3sKKyAgICByZXR1cm4gbUluaXRDaGVjayA9PSBPSyA/IDEgOiAwOworfQorCitzcDxNZWRpYVNvdXJjZT4gTWlkaUV4dHJhY3Rvcjo6Z2V0VHJhY2soc2l6ZV90IGluZGV4KQoreworICAgIGlmIChtSW5pdENoZWNrICE9IE9LIHx8IGluZGV4ID4gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBNaWRpU291cmNlKG1FbmdpbmUsIG1UcmFja01ldGFkYXRhKTsKK30KKworc3A8TWV0YURhdGE+IE1pZGlFeHRyYWN0b3I6OmdldFRyYWNrTWV0YURhdGEoCisgICAgICAgIHNpemVfdCBpbmRleCwgdWludDMyX3QgLyogZmxhZ3MgKi8pIHsKKyAgICBBTE9HVigiTWlkaUV4dHJhY3Rvcjo6Z2V0VHJhY2tNZXRhRGF0YSIpOworICAgIGlmIChtSW5pdENoZWNrICE9IE9LIHx8IGluZGV4ID4gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1UcmFja01ldGFkYXRhOworfQorCitzcDxNZXRhRGF0YT4gTWlkaUV4dHJhY3Rvcjo6Z2V0TWV0YURhdGEoKQoreworICAgIEFMT0dWKCJNaWRpRXh0cmFjdG9yOjpnZXRNZXRhRGF0YSIpOworICAgIHJldHVybiBtRmlsZU1ldGFkYXRhOworfQorCisvLyBTbmlmZmVyCisKK2Jvb2wgU25pZmZNaWRpKAorICAgICAgICBjb25zdCBzcDxEYXRhU291cmNlPiAmc291cmNlLCBTdHJpbmc4ICptaW1lVHlwZSwgZmxvYXQgKmNvbmZpZGVuY2UsCisgICAgICAgIHNwPEFNZXNzYWdlPiAqKQoreworICAgIHNwPE1pZGlFbmdpbmU+IHAgPSBuZXcgTWlkaUVuZ2luZShzb3VyY2UsIE5VTEwsIE5VTEwpOworICAgIGlmIChwLT5pbml0Q2hlY2soKSA9PSBPSykgeworICAgICAgICAqbWltZVR5cGUgPSBNRURJQV9NSU1FVFlQRV9BVURJT19NSURJOworICAgICAgICAqY29uZmlkZW5jZSA9IDAuODsKKyAgICAgICAgQUxPR1YoIlNuaWZmTWlkaTogeWVzIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBBTE9HVigiU25pZmZNaWRpOiBubyIpOworICAgIHJldHVybiBmYWxzZTsKKworfQorCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvT01YQ2xpZW50LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L09NWENsaWVudC5jcHAKaW5kZXggY2EwMzFhYS4uMjMwYzFmNyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvT01YQ2xpZW50LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9PTVhDbGllbnQuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAgICAgTXV4T01YKGNvbnN0IHNwPElPTVg+ICZyZW1vdGVPTVgpOwogICAgIHZpcnR1YWwgfk11eE9NWCgpOwogCi0gICAgdmlydHVhbCBJQmluZGVyICpvbkFzQmluZGVyKCkgeyByZXR1cm4gbVJlbW90ZU9NWC0+YXNCaW5kZXIoKS5nZXQoKTsgfQorICAgIHZpcnR1YWwgSUJpbmRlciAqb25Bc0JpbmRlcigpIHsgcmV0dXJuIElJbnRlcmZhY2U6OmFzQmluZGVyKG1SZW1vdGVPTVgpLmdldCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgbGl2ZXNMb2NhbGx5KG5vZGVfaWQgbm9kZSwgcGlkX3QgcGlkKTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvT01YQ29kZWMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvT01YQ29kZWMuY3BwCmluZGV4IGYyNjU2M2UuLjY5ZjQ5ODkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L09NWENvZGVjLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9PTVhDb2RlYy5jcHAKQEAgLTEwMSwxMCArMTAxLDEwIEBACiAjdW5kZWYgRkFDVE9SWV9DUkVBVEVfRU5DT0RFUgogI3VuZGVmIEZBQ1RPUllfUkVGCiAKLSNkZWZpbmUgQ09ERUNfTE9HSSh4LCAuLi4pIEFMT0dJKCJbJXNdICJ4LCBtQ29tcG9uZW50TmFtZSwgIyNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQ09ERUNfTE9HVih4LCAuLi4pIEFMT0dWKCJbJXNdICJ4LCBtQ29tcG9uZW50TmFtZSwgIyNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQ09ERUNfTE9HVyh4LCAuLi4pIEFMT0dXKCJbJXNdICJ4LCBtQ29tcG9uZW50TmFtZSwgIyNfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQ09ERUNfTE9HRSh4LCAuLi4pIEFMT0dFKCJbJXNdICJ4LCBtQ29tcG9uZW50TmFtZSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgQ09ERUNfTE9HSSh4LCAuLi4pIEFMT0dJKCJbJXNdICIgeCwgbUNvbXBvbmVudE5hbWUsICMjX19WQV9BUkdTX18pCisjZGVmaW5lIENPREVDX0xPR1YoeCwgLi4uKSBBTE9HVigiWyVzXSAiIHgsIG1Db21wb25lbnROYW1lLCAjI19fVkFfQVJHU19fKQorI2RlZmluZSBDT0RFQ19MT0dXKHgsIC4uLikgQUxPR1coIlslc10gIiB4LCBtQ29tcG9uZW50TmFtZSwgIyNfX1ZBX0FSR1NfXykKKyNkZWZpbmUgQ09ERUNfTE9HRSh4LCAuLi4pIEFMT0dFKCJbJXNdICIgeCwgbUNvbXBvbmVudE5hbWUsICMjX19WQV9BUkdTX18pCiAKIHN0cnVjdCBPTVhDb2RlY09ic2VydmVyIDogcHVibGljIEJuT01YT2JzZXJ2ZXIgewogICAgIE9NWENvZGVjT2JzZXJ2ZXIoKSB7CkBAIC00NTEsNyArNDUxLDcgQEAKICAgICAvLyBhc3NlcnRpb24sIGxldCdzIGJlIGxlbmllbnQgZm9yIG5vdy4uLgogICAgIC8vIENIRUNLKChwdHJbNF0gPj4gMikgPT0gMHgzZik7ICAvLyByZXNlcnZlZAogCi0gICAgc2l6ZV90IGxlbmd0aFNpemUgPSAxICsgKHB0cls0XSAmIDMpOworICAgIHNpemVfdCBsZW5ndGhTaXplIF9fdW51c2VkID0gMSArIChwdHJbNF0gJiAzKTsKIAogICAgIC8vIGNvbW1lbnRlZCBvdXQgY2hlY2sgYmVsb3cgYXMgSDI2NF9RVkdBXzUwMF9OT19BVURJTy4zZ3AKICAgICAvLyB2aW9sYXRlcyBpdC4uLgpAQCAtMjAwNiw3ICsyMDA2LDYgQEAKIE9NWENvZGVjOjpCdWZmZXJJbmZvKiBPTVhDb2RlYzo6ZGVxdWV1ZUJ1ZmZlckZyb21OYXRpdmVXaW5kb3coKSB7CiAgICAgLy8gRGVxdWV1ZSB0aGUgbmV4dCBidWZmZXIgZnJvbSB0aGUgbmF0aXZlIHdpbmRvdy4KICAgICBBTmF0aXZlV2luZG93QnVmZmVyKiBidWY7Ci0gICAgaW50IGZlbmNlRmQgPSAtMTsKICAgICBpbnQgZXJyID0gbmF0aXZlX3dpbmRvd19kZXF1ZXVlX2J1ZmZlcl9hbmRfd2FpdChtTmF0aXZlV2luZG93LmdldCgpLCAmYnVmKTsKICAgICBpZiAoZXJyICE9IDApIHsKICAgICAgIENPREVDX0xPR0UoImRlcXVldWVCdWZmZXIgZmFpbGVkIHcvIGVycm9yIDB4JTA4eCIsIGVycik7CkBAIC0yMTExLDcgKzIxMTAsNiBAQAogICAgIC8vIG9uIHRoZSBzY3JlZW4gYW5kIHRoZW4gYmVlbiByZXBsYWNlZCwgc28gYW4gcHJldmlvdXMgdmlkZW8gZnJhbWVzIGFyZQogICAgIC8vIGd1YXJhbnRlZWQgTk9UIHRvIGJlIGN1cnJlbnRseSBkaXNwbGF5ZWQuCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1CdWZzICsgMTsgaSsrKSB7Ci0gICAgICAgIGludCBmZW5jZUZkID0gLTE7CiAgICAgICAgIGVyciA9IG5hdGl2ZV93aW5kb3dfZGVxdWV1ZV9idWZmZXJfYW5kX3dhaXQobU5hdGl2ZVdpbmRvdy5nZXQoKSwgJmFuYik7CiAgICAgICAgIGlmIChlcnIgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgIEFMT0dFKCJlcnJvciBwdXNoaW5nIGJsYW5rIGZyYW1lczogZGVxdWV1ZUJ1ZmZlciBmYWlsZWQ6ICVzICglZCkiLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvT2dnRXh0cmFjdG9yLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L09nZ0V4dHJhY3Rvci5jcHAKaW5kZXggYjg4NjhhYS4uNmUzMjQ5NCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvT2dnRXh0cmFjdG9yLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9PZ2dFeHRyYWN0b3IuY3BwCkBAIC04NDksNiArODQ5LDcgQEAKICAgICAgICAgeyAiVFJBQ0tOVU1CRVIiLCBrS2V5Q0RUcmFja051bWJlciB9LAogICAgICAgICB7ICJESVNDTlVNQkVSIiwga0tleURpc2NOdW1iZXIgfSwKICAgICAgICAgeyAiREFURSIsIGtLZXlEYXRlIH0sCisgICAgICAgIHsgIllFQVIiLCBrS2V5WWVhciB9LAogICAgICAgICB7ICJMWVJJQ0lTVCIsIGtLZXlXcml0ZXIgfSwKICAgICAgICAgeyAiTUVUQURBVEFfQkxPQ0tfUElDVFVSRSIsIGtLZXlBbGJ1bUFydCB9LAogICAgICAgICB7ICJBTkRST0lEX0xPT1AiLCBrS2V5QXV0b0xvb3AgfSwKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1N0YWdlZnJpZ2h0TWVkaWFTY2FubmVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1N0YWdlZnJpZ2h0TWVkaWFTY2FubmVyLmNwcAppbmRleCA0NDQ5ZDU3Li5kYjMzZTgzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9TdGFnZWZyaWdodE1lZGlhU2Nhbm5lci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvU3RhZ2VmcmlnaHRNZWRpYVNjYW5uZXIuY3BwCkBAIC0yOCw5ICsyOCw2IEBACiAjaW5jbHVkZSA8bWVkaWEvbWVkaWFtZXRhZGF0YXJldHJpZXZlci5oPgogI2luY2x1ZGUgPHByaXZhdGUvbWVkaWEvVmlkZW9GcmFtZS5oPgogCi0vLyBTb25pdm94IGluY2x1ZGVzCi0jaW5jbHVkZSA8bGlic29uaXZveC9lYXMuaD4KLQogbmFtZXNwYWNlIGFuZHJvaWQgewogCiBTdGFnZWZyaWdodE1lZGlhU2Nhbm5lcjo6U3RhZ2VmcmlnaHRNZWRpYVNjYW5uZXIoKSB7fQpAQCAtNTcsNTQgKzU0LDYgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBNZWRpYVNjYW5SZXN1bHQgSGFuZGxlTUlESSgKLSAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIE1lZGlhU2Nhbm5lckNsaWVudCAqY2xpZW50KSB7Ci0gICAgLy8gZ2V0IHRoZSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gYW5kIGRvIHNhbml0eSBjaGVjawotICAgIGNvbnN0IFNfRUFTX0xJQl9DT05GSUcqIHBMaWJDb25maWcgPSBFQVNfQ29uZmlnKCk7Ci0gICAgaWYgKChwTGliQ29uZmlnID09IE5VTEwpIHx8IChMSUJfVkVSU0lPTiAhPSBwTGliQ29uZmlnLT5saWJWZXJzaW9uKSkgewotICAgICAgICBBTE9HRSgiRUFTIGxpYnJhcnkvaGVhZGVyIG1pc21hdGNoXG4iKTsKLSAgICAgICAgcmV0dXJuIE1FRElBX1NDQU5fUkVTVUxUX0VSUk9SOwotICAgIH0KLSAgICBFQVNfSTMyIHRlbXA7Ci0KLSAgICAvLyBzcGluIHVwIGEgbmV3IEVBUyBlbmdpbmUKLSAgICBFQVNfREFUQV9IQU5ETEUgZWFzRGF0YSA9IE5VTEw7Ci0gICAgRUFTX0hBTkRMRSBlYXNIYW5kbGUgPSBOVUxMOwotICAgIEVBU19SRVNVTFQgcmVzdWx0ID0gRUFTX0luaXQoJmVhc0RhdGEpOwotICAgIGlmIChyZXN1bHQgPT0gRUFTX1NVQ0NFU1MpIHsKLSAgICAgICAgRUFTX0ZJTEUgZmlsZTsKLSAgICAgICAgZmlsZS5wYXRoID0gZmlsZW5hbWU7Ci0gICAgICAgIGZpbGUuZmQgPSAwOwotICAgICAgICBmaWxlLm9mZnNldCA9IDA7Ci0gICAgICAgIGZpbGUubGVuZ3RoID0gMDsKLSAgICAgICAgcmVzdWx0ID0gRUFTX09wZW5GaWxlKGVhc0RhdGEsICZmaWxlLCAmZWFzSGFuZGxlKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA9PSBFQVNfU1VDQ0VTUykgewotICAgICAgICByZXN1bHQgPSBFQVNfUHJlcGFyZShlYXNEYXRhLCBlYXNIYW5kbGUpOwotICAgIH0KLSAgICBpZiAocmVzdWx0ID09IEVBU19TVUNDRVNTKSB7Ci0gICAgICAgIHJlc3VsdCA9IEVBU19QYXJzZU1ldGFEYXRhKGVhc0RhdGEsIGVhc0hhbmRsZSwgJnRlbXApOwotICAgIH0KLSAgICBpZiAoZWFzSGFuZGxlKSB7Ci0gICAgICAgIEVBU19DbG9zZUZpbGUoZWFzRGF0YSwgZWFzSGFuZGxlKTsKLSAgICB9Ci0gICAgaWYgKGVhc0RhdGEpIHsKLSAgICAgICAgRUFTX1NodXRkb3duKGVhc0RhdGEpOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0gRUFTX1NVQ0NFU1MpIHsKLSAgICAgICAgcmV0dXJuIE1FRElBX1NDQU5fUkVTVUxUX1NLSVBQRUQ7Ci0gICAgfQotCi0gICAgY2hhciBidWZmZXJbMjBdOwotICAgIHNwcmludGYoYnVmZmVyLCAiJWxkIiwgdGVtcCk7Ci0gICAgc3RhdHVzX3Qgc3RhdHVzID0gY2xpZW50LT5hZGRTdHJpbmdUYWcoImR1cmF0aW9uIiwgYnVmZmVyKTsKLSAgICBpZiAoc3RhdHVzICE9IE9LKSB7Ci0gICAgICAgIHJldHVybiBNRURJQV9TQ0FOX1JFU1VMVF9FUlJPUjsKLSAgICB9Ci0gICAgcmV0dXJuIE1FRElBX1NDQU5fUkVTVUxUX09LOwotfQotCiBNZWRpYVNjYW5SZXN1bHQgU3RhZ2VmcmlnaHRNZWRpYVNjYW5uZXI6OnByb2Nlc3NGaWxlKAogICAgICAgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptaW1lVHlwZSwKICAgICAgICAgTWVkaWFTY2FubmVyQ2xpZW50ICZjbGllbnQpIHsKQEAgLTEzMCwxOCArNzksNiBAQAogICAgICAgICByZXR1cm4gTUVESUFfU0NBTl9SRVNVTFRfU0tJUFBFRDsKICAgICB9CiAKLSAgICBpZiAoIXN0cmNhc2VjbXAoZXh0ZW5zaW9uLCAiLm1pZCIpCi0gICAgICAgICAgICB8fCAhc3RyY2FzZWNtcChleHRlbnNpb24sICIuc21mIikKLSAgICAgICAgICAgIHx8ICFzdHJjYXNlY21wKGV4dGVuc2lvbiwgIi5pbXkiKQotICAgICAgICAgICAgfHwgIXN0cmNhc2VjbXAoZXh0ZW5zaW9uLCAiLm1pZGkiKQotICAgICAgICAgICAgfHwgIXN0cmNhc2VjbXAoZXh0ZW5zaW9uLCAiLnhtZiIpCi0gICAgICAgICAgICB8fCAhc3RyY2FzZWNtcChleHRlbnNpb24sICIucnR0dGwiKQotICAgICAgICAgICAgfHwgIXN0cmNhc2VjbXAoZXh0ZW5zaW9uLCAiLnJ0eCIpCi0gICAgICAgICAgICB8fCAhc3RyY2FzZWNtcChleHRlbnNpb24sICIub3RhIikKLSAgICAgICAgICAgIHx8ICFzdHJjYXNlY21wKGV4dGVuc2lvbiwgIi5teG1mIikpIHsKLSAgICAgICAgcmV0dXJuIEhhbmRsZU1JREkocGF0aCwgJmNsaWVudCk7Ci0gICAgfQotCiAgICAgc3A8TWVkaWFNZXRhZGF0YVJldHJpZXZlcj4gbVJldHJpZXZlcihuZXcgTWVkaWFNZXRhZGF0YVJldHJpZXZlcik7CiAKICAgICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19MQVJHRUZJTEUpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVGltZWRFdmVudFF1ZXVlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1RpbWVkRXZlbnRRdWV1ZS5jcHAKaW5kZXggMWZkYjI0NC4uN2QxNTIyMCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVGltZWRFdmVudFF1ZXVlLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9UaW1lZEV2ZW50UXVldWUuY3BwCkBAIC01Miw3ICs1Miw3IEBACiBUaW1lZEV2ZW50UXVldWU6On5UaW1lZEV2ZW50UXVldWUoKSB7CiAgICAgc3RvcCgpOwogICAgIGlmIChtUG93ZXJNYW5hZ2VyICE9IDApIHsKLSAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gbVBvd2VyTWFuYWdlci0+YXNCaW5kZXIoKTsKKyAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gSUludGVyZmFjZTo6YXNCaW5kZXIobVBvd2VyTWFuYWdlcik7CiAgICAgICAgIGJpbmRlci0+dW5saW5rVG9EZWF0aChtRGVhdGhSZWNpcGllbnQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1V0aWxzLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L1V0aWxzLmNwcAppbmRleCAyNWFmYzViLi5iM2E3OWEwIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9VdGlscy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvVXRpbHMuY3BwCkBAIC0xODEsMTQgKzE4MSwxNCBAQAogCiAgICAgICAgIENIRUNLKHNpemUgPj0gNyk7CiAgICAgICAgIENIRUNLX0VRKCh1bnNpZ25lZClwdHJbMF0sIDF1KTsgIC8vIGNvbmZpZ3VyYXRpb25WZXJzaW9uID09IDEKLSAgICAgICAgdWludDhfdCBwcm9maWxlID0gcHRyWzFdOwotICAgICAgICB1aW50OF90IGxldmVsID0gcHRyWzNdOworICAgICAgICB1aW50OF90IHByb2ZpbGUgX191bnVzZWQgPSBwdHJbMV07CisgICAgICAgIHVpbnQ4X3QgbGV2ZWwgX191bnVzZWQgPSBwdHJbM107CiAKICAgICAgICAgLy8gVGhlcmUgaXMgZGVjb2RhYmxlIGNvbnRlbnQgb3V0IHRoZXJlIHRoYXQgZmFpbHMgdGhlIGZvbGxvd2luZwogICAgICAgICAvLyBhc3NlcnRpb24sIGxldCdzIGJlIGxlbmllbnQgZm9yIG5vdy4uLgogICAgICAgICAvLyBDSEVDSygocHRyWzRdID4+IDIpID09IDB4M2YpOyAgLy8gcmVzZXJ2ZWQKIAotICAgICAgICBzaXplX3QgbGVuZ3RoU2l6ZSA9IDEgKyAocHRyWzRdICYgMyk7CisgICAgICAgIHNpemVfdCBsZW5ndGhTaXplIF9fdW51c2VkID0gMSArIChwdHJbNF0gJiAzKTsKIAogICAgICAgICAvLyBjb21tZW50ZWQgb3V0IGNoZWNrIGJlbG93IGFzIEgyNjRfUVZHQV81MDBfTk9fQVVESU8uM2dwCiAgICAgICAgIC8vIHZpb2xhdGVzIGl0Li4uCkBAIC0yNTcsOCArMjU3LDggQEAKIAogICAgICAgICBDSEVDSyhzaXplID49IDcpOwogICAgICAgICBDSEVDS19FUSgodW5zaWduZWQpcHRyWzBdLCAxdSk7ICAvLyBjb25maWd1cmF0aW9uVmVyc2lvbiA9PSAxCi0gICAgICAgIHVpbnQ4X3QgcHJvZmlsZSA9IHB0clsxXSAmIDMxOwotICAgICAgICB1aW50OF90IGxldmVsID0gcHRyWzEyXTsKKyAgICAgICAgdWludDhfdCBwcm9maWxlIF9fdW51c2VkID0gcHRyWzFdICYgMzE7CisgICAgICAgIHVpbnQ4X3QgbGV2ZWwgX191bnVzZWQgPSBwdHJbMTJdOwogICAgICAgICBwdHIgKz0gMjI7CiAgICAgICAgIHNpemUgLT0gMjI7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2F2Y191dGlscy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9hdmNfdXRpbHMuY3BwCmluZGV4IGNiZGI4MTYuLjVlYzM0MzggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2F2Y191dGlscy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvYXZjX3V0aWxzLmNwcApAQCAtNTA1LDggKzUwNSw4IEBACiAgICAgQ0hFQ0tfTkUodmlkZW9fb2JqZWN0X3R5cGVfaW5kaWNhdGlvbiwKICAgICAgICAgICAgICAweDIxdSAvKiBGaW5lIEdyYW51bGFyaXR5IFNjYWxhYmxlICovKTsKIAotICAgIHVuc2lnbmVkIHZpZGVvX29iamVjdF9sYXllcl92ZXJpZDsKLSAgICB1bnNpZ25lZCB2aWRlb19vYmplY3RfbGF5ZXJfcHJpb3JpdHk7CisgICAgdW5zaWduZWQgdmlkZW9fb2JqZWN0X2xheWVyX3ZlcmlkIF9fdW51c2VkOworICAgIHVuc2lnbmVkIHZpZGVvX29iamVjdF9sYXllcl9wcmlvcml0eSBfX3VudXNlZDsKICAgICBpZiAoYnIuZ2V0Qml0cygxKSkgewogICAgICAgICB2aWRlb19vYmplY3RfbGF5ZXJfdmVyaWQgPSBici5nZXRCaXRzKDQpOwogICAgICAgICB2aWRlb19vYmplY3RfbGF5ZXJfcHJpb3JpdHkgPSBici5nZXRCaXRzKDMpOwpAQCAtNTY4LDcgKzU2OCw3IEBACiAgICAgdW5zaWduZWQgdmlkZW9fb2JqZWN0X2xheWVyX2hlaWdodCA9IGJyLmdldEJpdHMoMTMpOwogICAgIENIRUNLKGJyLmdldEJpdHMoMSkpOyAgLy8gbWFya2VyX2JpdAogCi0gICAgdW5zaWduZWQgaW50ZXJsYWNlZCA9IGJyLmdldEJpdHMoMSk7CisgICAgdW5zaWduZWQgaW50ZXJsYWNlZCBfX3VudXNlZCA9IGJyLmdldEJpdHMoMSk7CiAKICAgICAqd2lkdGggPSB2aWRlb19vYmplY3RfbGF5ZXJfd2lkdGg7CiAgICAgKmhlaWdodCA9IHZpZGVvX29iamVjdF9sYXllcl9oZWlnaHQ7CkBAIC02MTQsNyArNjE0LDcgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHByb3RlY3Rpb24gPSAoaGVhZGVyID4+IDE2KSAmIDE7CisgICAgdW5zaWduZWQgcHJvdGVjdGlvbiBfX3VudXNlZCA9IChoZWFkZXIgPj4gMTYpICYgMTsKIAogICAgIHVuc2lnbmVkIGJpdHJhdGVfaW5kZXggPSAoaGVhZGVyID4+IDEyKSAmIDB4MGY7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNkZWMvU29mdEFBQzIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2RlYy9Tb2Z0QUFDMi5jcHAKaW5kZXggMzUxYmExZS4uNDk1YmFkMCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2RlYy9Tb2Z0QUFDMi5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2RlYy9Tb2Z0QUFDMi5jcHAKQEAgLTg3Niw3ICs4NzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKm5leHRUaW1lU3RhbXAgKz0gbVN0cmVhbUluZm8tPmFhY1NhbXBsZXNQZXJGcmFtZSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDBsbCAvIG1TdHJlYW1JbmZvLT5zYW1wbGVSYXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgQUxPR1YoImFkanVzdGVkIG5leHRUaW1lU3RhbXAvc2l6ZSB0byAlbGxkLyVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5leHRUaW1lU3RhbXAsICpjdXJyZW50QnVmTGVmdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpICpuZXh0VGltZVN0YW1wLCAqY3VycmVudEJ1ZkxlZnQpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW92ZSB0byBuZXh0IHRpbWVzdGFtcCBpbiBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobUJ1ZmZlclRpbWVzdGFtcHMuc2l6ZSgpID4gMCkgewpAQCAtODg1LDcgKzg4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUJ1ZmZlclNpemVzLnJlbW92ZUF0KDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCdWZMZWZ0ID0gJm1CdWZmZXJTaXplcy5lZGl0SXRlbUF0KDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMT0dWKCJtb3ZlZCB0byBuZXh0IHRpbWUvc2l6ZTogJWxsZC8lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmV4dFRpbWVTdGFtcCwgKmN1cnJlbnRCdWZMZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpICpuZXh0VGltZVN0YW1wLCAqY3VycmVudEJ1ZkxlZnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGxpbWl0IG91dHB1dCBidWZmZXIgc2l6ZSB0byBtYXRjaCBpbnB1dCBidWZmZXJzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoZS5nIHdoZW4gYW4gaW5wdXQgYnVmZmVyIGNvbnRhaW5lZCA0ICJzdWIiIGZyYW1lcywgb3V0cHV0CkBAIC05OTMsOCArOTkzLDYgQEAKIH0KIAogdm9pZCBTb2Z0QUFDMjo6ZHJhaW5EZWNvZGVyKCkgewotICAgIGludDMyX3Qgb3V0cHV0RGVsYXkgPSBtU3RyZWFtSW5mby0+b3V0cHV0RGVsYXkgKiBtU3RyZWFtSW5mby0+bnVtQ2hhbm5lbHM7Ci0KICAgICAvLyBmbHVzaCBkZWNvZGVyIHVudGlsIG91dHB1dERlbGF5IGlzIGNvbXBlbnNhdGVkCiAgICAgd2hpbGUgKG1PdXRwdXREZWxheUNvbXBlbnNhdGVkID4gMCkgewogICAgICAgICAvLyBhIGJ1ZmZlciBiaWcgZW5vdWdoIGZvciBNQVhfQ0hBTk5FTF9DT1VOVCBjaGFubmVscyBvZiBkZWNvZGVkIEhFLUFBQwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9BQUNFbmNvZGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvQUFDRW5jb2Rlci5jcHAKaW5kZXggOGI1MDA3ZS4uYmViYjlkYyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9BQUNFbmNvZGVyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL0FBQ0VuY29kZXIuY3BwCkBAIC0yMTQsOCArMjE0LDYgQEAKIAogc3RhdHVzX3QgQUFDRW5jb2Rlcjo6cmVhZCgKICAgICAgICAgTWVkaWFCdWZmZXIgKipvdXQsIGNvbnN0IFJlYWRPcHRpb25zICpvcHRpb25zKSB7Ci0gICAgc3RhdHVzX3QgZXJyOwotCiAgICAgKm91dCA9IE5VTEw7CiAKICAgICBpbnQ2NF90IHNlZWtUaW1lVXM7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL2Jhc2ljX29wL2Jhc2ljX29wLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL2Jhc2ljX29wL2Jhc2ljX29wLmgKaW5kZXggNWNkN2U1Zi4uYmJjNzUzYiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9iYXNpY19vcC9iYXNpY19vcC5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvYmFzaWNfb3AvYmFzaWNfb3AuaApAQCAtNTE4LDggKzUxOCw2IEBACiAgICAgICAgIHJldHVybiAgQVNNX0xfc2hyKCBMX3ZhcjEsIC12YXIyKTsKICAgICB9CiAjZWxzZQotICAgIFdvcmQzMiBMX3Zhcl9vdXQgPSAwTDsKLQogICAgIGlmICh2YXIyIDw9IDApCiAgICAgewogICAgICAgICBMX3ZhcjEgPSBMX3NocihMX3ZhcjEsIChXb3JkMTYpLXZhcjIpOwpAQCAtNTQwLDcgKzUzOCw2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgTF92YXIxIDw8PSAxOwotICAgICAgICAgICAgTF92YXJfb3V0ID0gTF92YXIxOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAoTF92YXIxKTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvYmFzaWNfb3Avb3Blcl8zMmIuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvYmFzaWNfb3Avb3Blcl8zMmIuYwppbmRleCAxZDAyOWZjLi5kMWZlODMzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL2Jhc2ljX29wL29wZXJfMzJiLmMKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9iYXNpY19vcC9vcGVyXzMyYi5jCkBAIC0zNTEsMTIgKzM1MSwxMSBAQAogICBVV29yZDMyIGlQYXJ0OwogICBVV29yZDMyIGZQYXJ0OwogICBXb3JkMzIgcmVzOwotICBXb3JkMzIgdG1wLCB0bXAyOwotICBXb3JkMzIgc2hpZnQsIHNoaWZ0MjsKKyAgV29yZDMyIHRtcDsKIAotICB0bXAyID0gLXg7Ci0gIGlQYXJ0ID0gdG1wMiAvIHk7Ci0gIGZQYXJ0ID0gdG1wMiAtIGlQYXJ0Knk7CisgIHRtcCA9IC14OworICBpUGFydCA9IHRtcCAvIHk7CisgIGZQYXJ0ID0gdG1wIC0gaVBhcnQqeTsKICAgaVBhcnQgPSBtaW4oaVBhcnQsSU5UX0JJVFMtMSk7CiAKICAgcmVzID0gcG93MlRhYmxlWyhQT1cyX1RBQkxFX1NJWkUqZlBhcnQpL3ldID4+IGlQYXJ0OwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvYWFjZW5jLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9hYWNlbmMuYwppbmRleCA0MGRiOTJjLi5kZjE3Nzg3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9hYWNlbmMuYworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9hYWNlbmMuYwpAQCAtMzksMTggKzM5LDIwIEBACiBWT19VMzIgVk9fQVBJIHZvQUFDRW5jSW5pdChWT19IQU5ETEUgKiBwaENvZGVjLFZPX0FVRElPX0NPRElOR1RZUEUgdlR5cGUsIFZPX0NPREVDX0lOSVRfVVNFUkRBVEEgKnBVc2VyRGF0YSkKIHsKIAlBQUNfRU5DT0RFUipoQWFjRW5jOwotCUFBQ0VOQ19DT05GSUcgY29uZmlnOwogCWludCBlcnJvcjsKIAogI2lmZGVmIFVTRV9ERUFVTFRfTUVNCiAJVk9fTUVNX09QRVJBVE9SIHZvTWVtb3ByYXRvcjsKICNlbmRpZgogCVZPX01FTV9PUEVSQVRPUiAqcE1lbU9QOworCisjaWZkZWYgVVNFX0RFQVVMVF9NRU0KIAlpbnQgaW50ZXJNZW07CisgICAgICAgIGludGVyTWVtID0gMDsKKyNlbmRpZgogCiAgICAgICAgIFVOVVNFRCh2VHlwZSk7CiAKLQlpbnRlck1lbSA9IDA7CiAJZXJyb3IgPSAwOwogCiAJLyogaW5pdCB0aGUgbWVtb3J5IG9wZXJhdG9yICovCkBAIC0yMTQsNyArMjE2LDcgQEAKIAlBQUNfRU5DT0RFUiogaEFhY0VuYyA9IChBQUNfRU5DT0RFUiopaENvZGVjOwogCVdvcmQxNiBudW1BbmNEYXRhQnl0ZXM9MDsKIAlXb3JkMzIgIGluYnVmbGVuOwotCWludCByZXQsIGxlbmd0aDsKKwlpbnQgbGVuZ3RoOwogCWlmKE5VTEwgPT0gaEFhY0VuYykKIAkJcmV0dXJuIFZPX0VSUl9JTlZBTElEX0FSRzsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvYWFjZW5jX2NvcmUuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2FhY2VuY19jb3JlLmMKaW5kZXggY2VjYmM4Zi4uZGU0NTJkNCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvYWFjZW5jX2NvcmUuYworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9hYWNlbmNfY29yZS5jCkBAIC01OCw3ICs1OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCAgQUFDRU5DX0NPTkZJRyAgICAgY29uZmlnICAgLyogcHJlLWluaXRpYWxpemVkIGNvbmZpZyBzdHJ1Y3QgKi8KICAgICAgICAgICAgICAgICAgICAgICkKIHsKLSAgV29yZDMyIGk7CiAgIFdvcmQzMiBlcnJvciA9IDA7CiAgIFdvcmQxNiBwcm9maWxlID0gMTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvYWRqX3Roci5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvYWRqX3Roci5jCmluZGV4IDQ3MTYzMWMuLjhiOGJlMGUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2Fkal90aHIuYworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9hZGpfdGhyLmMKQEAgLTk2LDcgKzk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE1JTlNOUl9BREFQVF9QQVJBTSAqbXNhUGFyYW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXb3JkMTYgICAgICAgIG5DaGFubmVscykKIHsKLSAgV29yZDE2IGNoLCBzZmIsIHNmYk9mZnMsIHNoaWZ0OworICBXb3JkMTYgY2gsIHNmYiwgc2ZiT2ZmczsKICAgV29yZDMyIG5TZmIsIGF2Z0VuOwogICBXb3JkMTYgbG9nX2F2Z0VuID0gMDsKICAgV29yZDMyIHN0YXJ0UmF0aW9feF9hdmdFbiA9IDA7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9iaXRidWZmZXIuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2JpdGJ1ZmZlci5jCmluZGV4IDBjZTkzZDMuLjE1ZWViZDAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2JpdGJ1ZmZlci5jCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2JpdGJ1ZmZlci5jCkBAIC0yNCwyOSArMjQsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKLSogZnVuY3Rpb24gbmFtZTogdXBkYXRlQml0QnVmV29yZFB0cgotKiBkZXNjcmlwdGlvbjogIHVwZGF0ZSBCaXQgQnVmZmVyIHBvaW50ZXIKLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQgdXBkYXRlQml0QnVmV29yZFB0cihIQU5ETEVfQklUX0JVRiBoQml0QnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVV29yZDggKipwQml0QnVmV29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29yZDE2ICAgY250KQotewotICAqcEJpdEJ1ZldvcmQgKz0gY250OwotCi0KLSAgaWYoKnBCaXRCdWZXb3JkID4gaEJpdEJ1Zi0+cEJpdEJ1ZkVuZCkgewotICAgICpwQml0QnVmV29yZCAtPSAoaEJpdEJ1Zi0+cEJpdEJ1ZkVuZCAtIGhCaXRCdWYtPnBCaXRCdWZCYXNlICsgMSk7Ci0gIH0KLQotICBpZigqcEJpdEJ1ZldvcmQgPCBoQml0QnVmLT5wQml0QnVmQmFzZSkgewotICAgICpwQml0QnVmV29yZCArPSAoaEJpdEJ1Zi0+cEJpdEJ1ZkVuZCAtIGhCaXRCdWYtPnBCaXRCdWZCYXNlICsgMSk7Ci0gIH0KLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSoKICogZnVuY3Rpb24gbmFtZTogQ3JlYXRlQml0QnVmZmVyCiAqIGRlc2NyaXB0aW9uOiAgY3JlYXRlIGFuZCBpbml0IEJpdCBCdWZmZXIgTWFuYWdlbWVudAogKgpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvYml0ZW5jLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9iaXRlbmMuYwppbmRleCBkMWZkNjQ3Li45YzgxMjA0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9iaXRlbmMuYworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9iaXRlbmMuYwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAgICAgdG90RmlsbEJpdHMgPSB0b3RGaWxsQml0cyAtICgzKzQpOwogCiAKLSAgICBpZiAoKGNudCA9PSAoMTw8NCktMSkpIHsKKyAgICBpZiAoY250ID09ICgxPDw0KS0xKSB7CiAKICAgICAgIGVzY19jb3VudCA9IG1pbiggKCh0b3RGaWxsQml0cyA+PiAzKSAtICgoMTw8NCktMSkpLCAoMTw8OCktMSk7CiAgICAgICBXcml0ZUJpdHMoaEJpdFN0cmVhbSxlc2NfY291bnQsOCk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9ibG9ja19zd2l0Y2guYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2Jsb2NrX3N3aXRjaC5jCmluZGV4IGM4MDUzOGYuLjExYmM3ZTcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2Jsb2NrX3N3aXRjaC5jCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL2Jsb2NrX3N3aXRjaC5jCkBAIC0zMCw5ICszMCw2IEBACiAjZGVmaW5lIEVORVJHWV9TSElGVCAoOCAtIDEpCiAKIC8qKioqKioqKioqKioqKioqIGludGVybmFsIGZ1bmN0aW9uIHByb3RvdHlwZXMgKioqKioqKioqKiovCi1zdGF0aWMgV29yZDE2Ci1JSVJGaWx0ZXIoY29uc3QgV29yZDE2IGluLCBjb25zdCBXb3JkMzIgY29lZmZbXSwgV29yZDMyIHN0YXRlc1tdKTsKLQogc3RhdGljIFdvcmQzMgogU3JjaE1heFdpdGhJbmRleChjb25zdCBXb3JkMzIgKmluLCBXb3JkMTYgKmluZGV4LCBXb3JkMTYgbik7CiAKQEAgLTI4MCw3ICsyNzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgV29yZDE2IGNoSW5jcmVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgV29yZDE2IHdpbmRvd0xlbikKIHsKLSAgV29yZDMyIHcsIGksIHdPZmZzZXQsIHRpZHgsIGNoOworICBXb3JkMzIgdywgaSwgdGlkeDsKICAgV29yZDMyIGFjY3VVRSwgYWNjdUZFOwogICBXb3JkMzIgdGVtcFVuZmlsdGVyZWQ7CiAgIFdvcmQzMiB0ZW1wRmlsdGVyZWQ7CkBAIC0zMjksMzAgKzMyNiw2IEBACiB9CiAjZW5kaWYKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIGZ1bmN0aW9uIG5hbWU6IElJUkZpbHRlcgotKiBkZXNjcmlwdGlvbjogIGNhbGN1bGF0ZSB0aGUgaWlyLWZpbHRlciBmb3IgYW4gYXJyYXkKLSogcmV0dXJuczogICAgICB0aGUgcmVzdWx0IGFmdGVyIGlpci1maWx0ZXIKLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgV29yZDE2IElJUkZpbHRlcihjb25zdCBXb3JkMTYgaW4sIGNvbnN0IFdvcmQzMiBjb2VmZltdLCBXb3JkMzIgc3RhdGVzW10pCi17Ci0gIFdvcmQzMiBhY2N1MSwgYWNjdTIsIGFjY3UzOwotICBXb3JkMzIgb3V0OwotCi0gIGFjY3UxID0gTF9tcHlfbHMoY29lZmZbMV0sIGluKTsKLSAgYWNjdTMgPSBhY2N1MSAtIHN0YXRlc1swXTsKLSAgYWNjdTIgPSBmaXhtdWwoIGNvZWZmWzBdLCBzdGF0ZXNbMV0gKTsKLSAgb3V0ID0gYWNjdTMgLSBhY2N1MjsKLQotICBzdGF0ZXNbMF0gPSBhY2N1MTsKLSAgc3RhdGVzWzFdID0gb3V0OwotCi0gIHJldHVybiByb3VuZDE2KG91dCk7Ci19Ci0KLQogc3RhdGljIFdvcmQxNiBzeW5jaHJvbml6ZWRCbG9ja1R5cGVUYWJsZVs0XVs0XSA9IHsKICAgLyogICAgICAgICAgICAgICAgIExPTkdfV0lORE9XICAgU1RBUlRfV0lORE9XICBTSE9SVF9XSU5ET1cgIFNUT1BfV0lORE9XICovCiAgIC8qIExPTkdfV0lORE9XICAqL3tMT05HX1dJTkRPVywgIFNUQVJUX1dJTkRPVywgU0hPUlRfV0lORE9XLCBTVE9QX1dJTkRPV30sCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9tc19zdGVyZW8uYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL21zX3N0ZXJlby5jCmluZGV4IDJlMzRmMTQuLjFlNGIyMjcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL21zX3N0ZXJlby5jCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL21zX3N0ZXJlby5jCkBAIC01MCw3ICs1MCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXb3JkMTYgIHNmYlBlckdyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV29yZDE2ICBtYXhTZmJQZXJHcm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdvcmQxNiAqc2ZiT2Zmc2V0KSB7Ci0gIFdvcmQzMiB0ZW1wOwogICBXb3JkMzIgc2ZiLHNmYm9mZnMsIGo7CiAgIFdvcmQzMiBtc01hc2tUcnVlU29tZXdoZXJlID0gMDsKICAgV29yZDMyIG1zTWFza0ZhbHNlU29tZXdoZXJlID0gMDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL3NmX2VzdGltLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYWFjZW5jL3NyYy9zZl9lc3RpbS5jCmluZGV4IGJjMzIwZWMuLjc4OTQ3ZTEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL3NmX2VzdGltLmMKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvc2ZfZXN0aW0uYwpAQCAtOTksNyArOTksNyBAQAogewogCVdvcmQzMiBzZmJ3LCBzZmJ3MTsKIAlXb3JkMzIgaSwgajsKLQlXb3JkMzIgc2ZiT2Zmcywgc2ZiLCBzaGlmdDsKKwlXb3JkMzIgc2ZiT2Zmcywgc2ZiOwogCiAJc2ZidyA9IHNmYncxID0gMDsKIAlmb3IgKHNmYk9mZnM9MDsgc2ZiT2Zmczxwc3lPdXRDaGFuLT5zZmJDbnQ7IHNmYk9mZnMrPXBzeU91dENoYW4tPnNmYlBlckdyb3VwKXsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL3Rucy5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvdG5zLmMKaW5kZXggNTE3MjYxMi4uMjdjMzk3MSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvdG5zLmMKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvdG5zLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkMTYgYWN0aXZlKSAgICAgICAgICAgICAgLyohPCB0bnMgYWN0aXZlIGZsYWcgKi8KIHsKIAotICBXb3JkMzIgYml0cmF0ZVBlckNoYW5uZWw7CisgIFdvcmQzMiBiaXRyYXRlUGVyQ2hhbm5lbCBfX3VudXNlZDsKICAgdEMtPm1heE9yZGVyICAgICA9IFROU19NQVhfT1JERVI7CiAgIHRDLT50bnNTdGFydEZyZXEgPSAxMjc1OwogICB0Qy0+Y29lZlJlcyAgICAgID0gNDsKQEAgLTIwNiw3ICsyMDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFNZX0NPTkZJR1VSQVRJT05fU0hPUlQgKnBDLCAvKiE8IHBzeSBjb25maWcgc3RydWN0ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JkMTYgYWN0aXZlKSAgICAgICAgICAgICAgIC8qITwgdG5zIGFjdGl2ZSBmbGFnICovCiB7Ci0gIFdvcmQzMiBiaXRyYXRlUGVyQ2hhbm5lbDsKKyAgV29yZDMyIGJpdHJhdGVQZXJDaGFubmVsIF9fdW51c2VkOwogICB0Qy0+bWF4T3JkZXIgICAgID0gVE5TX01BWF9PUkRFUl9TSE9SVDsKICAgdEMtPnRuc1N0YXJ0RnJlcSA9IDI3NTA7CiAgIHRDLT5jb2VmUmVzICAgICAgPSAzOwpAQCAtNDk3LDM2ICs0OTcsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKLSogZnVuY3Rpb24gbmFtZTogbV9wb3cyX2NvcmRpYwotKiBkZXNjcmlwdGlvbjogSXRlcmF0aXZlIHBvd2VyIGZ1bmN0aW9uCi0qCi0qCUNhbGN1bGF0ZXMgcG93KDIuMCx4LTEuMCooc2NhbGUrMSkpIHdpdGggSU5UX0JJVFMgYml0IHByZWNpc2lvbgotKgl1c2luZyBtb2RpZmllZCBjb3JkaWMgYWxnb3JpdGhtCi0qIHJldHVybnM6ICAgICB0aGUgcmVzdWx0IG9mIHBvdzIKLSoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIFdvcmQzMiBtX3BvdzJfY29yZGljKFdvcmQzMiB4LCBXb3JkMTYgc2NhbGUpCi17Ci0gIFdvcmQzMiBrOwotCi0gIFdvcmQzMiBhY2N1X3kgPSAweDQwMDAwMDAwOwotICBhY2N1X3kgPSBMX3NocihhY2N1X3ksc2NhbGUpOwotCi0gIGZvcihrPTE7IGs8SU5UX0JJVFM7IGsrKykgewotICAgIGNvbnN0IFdvcmQzMiB6ID0gbV9sb2cyX3RhYmxlW2tdOwotCi0gICAgd2hpbGUoTF9zdWIoeCx6KSA+PSAwKSB7Ci0KLSAgICAgIHggPSBMX3N1Yih4LCB6KTsKLSAgICAgIGFjY3VfeSA9IExfYWRkKGFjY3VfeSwgKGFjY3VfeSA+PiBrKSk7Ci0gICAgfQotICB9Ci0gIHJldHVybihhY2N1X3kpOwotfQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgogKiBmdW5jdGlvbiBuYW1lOiBDYWxjV2VpZ2h0ZWRTcGVjdHJ1bQogKiBkZXNjcmlwdGlvbjogQ2FsY3VsYXRlIHdlaWdodGVkIHNwZWN0cnVtIGZvciBMUEMgY2FsY3VsYXRpb24KICoKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hYWNlbmMvc3JjL3RyYW5zZm9ybS5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvdHJhbnNmb3JtLmMKaW5kZXggYTAyMzM2Zi4uMDA4MDgxMCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvdHJhbnNmb3JtLmMKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FhY2VuYy9zcmMvdHJhbnNmb3JtLmMKQEAgLTQ3NSw3ICs0NzUsNiBAQAogCVdvcmQzMiAqd2luUHRyOwogCiAJV29yZDMyIGRlbGF5QnVmZmVyU2YsdGltZVNpZ25hbFNmLG1pblNmOwotCVdvcmQzMiBoZWFkUm9vbT0wOwogCiAJc3dpdGNoKGJsb2NrVHlwZSl7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vQW5kcm9pZC5tayBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vQW5kcm9pZC5tawppbmRleCBhMmIzYzhmLi41ZTYzMmE2IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL0FuZHJvaWQubWsKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9BbmRyb2lkLm1rCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICQoTE9DQUxfUEFUSCkvaW5jbHVkZQogCiBMT0NBTF9DRkxBR1MgOj0gXAotICAgICAgICAtRE9TQ0xfVU5VU0VEX0FSRz0gLURPU0NMX0lNUE9SVF9SRUY9IC1ET1NDTF9FWFBPUlRfUkVGPQorICAgICAgICAtRCJPU0NMX1VOVVNFRF9BUkcoeCk9KHZvaWQpKHgpIiAtRE9TQ0xfSU1QT1JUX1JFRj0gLURPU0NMX0VYUE9SVF9SRUY9CiAKIExPQ0FMX0NGTEFHUyArPSAtV2Vycm9yCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vaW5jbHVkZS9iYXNpY19vcF9jX2VxdWl2YWxlbnQuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vaW5jbHVkZS9iYXNpY19vcF9jX2VxdWl2YWxlbnQuaAppbmRleCAzNTYzOGUzLi5jNGU0ZDRmIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL2luY2x1ZGUvYmFzaWNfb3BfY19lcXVpdmFsZW50LmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9pbmNsdWRlL2Jhc2ljX29wX2NfZXF1aXZhbGVudC5oCkBAIC0xMTUsNyArMTE1LDcgQEAKICAgICAgUmV0dXJuczoKICAgICAgICAgTF9zdW0gPSAzMi1iaXQgc3VtIG9mIExfdmFyMSBhbmQgTF92YXIyIChXb3JkMzIpCiAgICAgKi8KLSAgICBzdGF0aWMgaW5saW5lIFdvcmQzMiBMX2FkZChyZWdpc3RlciBXb3JkMzIgTF92YXIxLCByZWdpc3RlciBXb3JkMzIgTF92YXIyLCBGbGFnICpwT3ZlcmZsb3cpCisgICAgc3RhdGljIGlubGluZSBXb3JkMzIgTF9hZGQoV29yZDMyIExfdmFyMSwgV29yZDMyIExfdmFyMiwgRmxhZyAqcE92ZXJmbG93KQogICAgIHsKICAgICAgICAgV29yZDMyIExfc3VtOwogCkBAIC0xNTQsOCArMTU0LDggQEAKICAgICAgUmV0dXJuczoKICAgICAgICAgTF9kaWZmID0gMzItYml0IGRpZmZlcmVuY2Ugb2YgTF92YXIxIGFuZCBMX3ZhcjIgKFdvcmQzMikKICAgICAqLwotICAgIHN0YXRpYyBpbmxpbmUgV29yZDMyIExfc3ViKHJlZ2lzdGVyIFdvcmQzMiBMX3ZhcjEsIHJlZ2lzdGVyIFdvcmQzMiBMX3ZhcjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgRmxhZyAqcE92ZXJmbG93KQorICAgIHN0YXRpYyBpbmxpbmUgV29yZDMyIExfc3ViKFdvcmQzMiBMX3ZhcjEsIFdvcmQzMiBMX3ZhcjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxhZyAqcE92ZXJmbG93KQogICAgIHsKICAgICAgICAgV29yZDMyIExfZGlmZjsKIApAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgKi8KICAgICBzdGF0aWMgaW5saW5lIFdvcmQzMiBMX211bHQoV29yZDE2IHZhcjEsIFdvcmQxNiB2YXIyLCBGbGFnICpwT3ZlcmZsb3cpCiAgICAgewotICAgICAgICByZWdpc3RlciBXb3JkMzIgTF9wcm9kdWN0OworICAgICAgICBXb3JkMzIgTF9wcm9kdWN0OwogCiAgICAgICAgIExfcHJvZHVjdCA9IChXb3JkMzIpIHZhcjEgKiB2YXIyOwogCkBAIC00NTIsNyArNDUyLDcgQEAKICAgICAqLwogICAgIHN0YXRpYyBpbmxpbmUgV29yZDE2IG11bHQoV29yZDE2IHZhcjEsIFdvcmQxNiB2YXIyLCBGbGFnICpwT3ZlcmZsb3cpCiAgICAgewotICAgICAgICByZWdpc3RlciBXb3JkMzIgcHJvZHVjdDsKKyAgICAgICAgV29yZDMyIHByb2R1Y3Q7CiAKICAgICAgICAgcHJvZHVjdCA9ICgoV29yZDMyKSB2YXIxICogdmFyMikgPj4gMTU7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL2F6X2xzcC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9hel9sc3AuY3BwCmluZGV4IDQxMzVmMzAuLjk3NmIxYTYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL2F6X2xzcC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvYXpfbHNwLmNwcApAQCAtNTY0LDEwICs1NjQsMTAgQEAKICAgICBGbGFnICAgKnBPdmVyZmxvdyAgIC8qIChpL28pOiBvdmVyZmxvdyBmbGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKLSAgICByZWdpc3RlciBXb3JkMTYgajsKLSAgICByZWdpc3RlciBXb3JkMTYgbmY7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGlwOworICAgIFdvcmQxNiBpOworICAgIFdvcmQxNiBqOworICAgIFdvcmQxNiBuZjsKKyAgICBXb3JkMTYgaXA7CiAgICAgV29yZDE2IHhsb3c7CiAgICAgV29yZDE2IHlsb3c7CiAgICAgV29yZDE2IHhoaWdoOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvZGl2X3MuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvZGl2X3MuY3BwCmluZGV4IGYzYmVkN2UuLjE0ZDMwYzUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL2Rpdl9zLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9kaXZfcy5jcHAKQEAgLTIwNywxMyArMjA3LDEzIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsgRlVOQ1RJT04gQ09ERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1Xb3JkMTYgZGl2X3MocmVnaXN0ZXIgV29yZDE2IHZhcjEsIHJlZ2lzdGVyIFdvcmQxNiB2YXIyKQorV29yZDE2IGRpdl9zKFdvcmQxNiB2YXIxLCBXb3JkMTYgdmFyMikKIHsKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICA7IERlZmluZSBhbGwgbG9jYWwgdmFyaWFibGVzCiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgV29yZDE2IHZhcl9vdXQgPSAwOwotICAgIHJlZ2lzdGVyIFdvcmQxNiBpdGVyYXRpb247CisgICAgV29yZDE2IGl0ZXJhdGlvbjsKICAgICBXb3JkMzIgTF9udW07CiAgICAgV29yZDMyIExfZGVub207CiAgICAgV29yZDMyIExfZGVub21fYnlfMjsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL2djX3ByZWQuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvZ2NfcHJlZC5jcHAKaW5kZXggMzY1MGYzYy4uMWM4YTcwMCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvZ2NfcHJlZC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvZ2NfcHJlZC5jcHAKQEAgLTQ3Nyw5ICs0NzcsOSBAQAogICAgIEZsYWcgICAqcE92ZXJmbG93CiApCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGk7Ci0gICAgcmVnaXN0ZXIgV29yZDMyIExfdGVtcDEsIExfdGVtcDI7Ci0gICAgcmVnaXN0ZXIgV29yZDMyIExfdG1wOworICAgIFdvcmQxNiBpOworICAgIFdvcmQzMiBMX3RlbXAxLCBMX3RlbXAyOworICAgIFdvcmQzMiBMX3RtcDsKICAgICBXb3JkMzIgZW5lcl9jb2RlOwogICAgIFdvcmQzMiBlbmVyOwogICAgIFdvcmQxNiBleHAsIGZyYWM7CkBAIC05OTMsNyArOTkzLDcgQEAKICkKIHsKICAgICBXb3JkMTYgYXZfcHJlZF9lbjsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKKyAgICBXb3JkMTYgaTsKIAogICAgIC8qIGRvIGF2ZXJhZ2UgaW4gTVIxMjIgbW9kZSAobG9nMigpIGRvbWFpbikgKi8KICAgICBhdl9wcmVkX2VuID0gMDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL2dtZWRfbi5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9nbWVkX24uY3BwCmluZGV4IGJlNzYyNDEuLjJkM2I5ZTQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL2dtZWRfbi5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvZ21lZF9uLmNwcApAQCAtMTg1LDkgKzE4NSw5IEBACiAgICAgV29yZDE2IG4gICAgICAgIC8qIGkgOiBudW1iZXIgb2YgaW5wdXRzICAgICovCiApCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGksIGosIGl4ID0gMDsKLSAgICByZWdpc3RlciBXb3JkMTYgbWF4OwotICAgIHJlZ2lzdGVyIFdvcmQxNiBtZWRpYW5JbmRleDsKKyAgICBXb3JkMTYgaSwgaiwgaXggPSAwOworICAgIFdvcmQxNiBtYXg7CisgICAgV29yZDE2IG1lZGlhbkluZGV4OwogICAgIFdvcmQxNiAgdG1wW05NQVhdOwogICAgIFdvcmQxNiAgdG1wMltOTUFYXTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvbHNwX2F6LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL2xzcF9hei5jcHAKaW5kZXggNmI3YjQ3MS4uNDk1MzU5ZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvbHNwX2F6LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9sc3BfYXouY3BwCkBAIC0yNTQsOCArMjU0LDggQEAKICAgICBXb3JkMzIgKmYsCiAgICAgRmxhZyAgICpwT3ZlcmZsb3cpCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGk7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGo7CisgICAgV29yZDE2IGk7CisgICAgV29yZDE2IGo7CiAKICAgICBXb3JkMTYgaGk7CiAgICAgV29yZDE2IGxvOwpAQCAtNTExLDggKzUxMSw4IEBACiAgICAgRmxhZyAgKnBPdmVyZmxvdyAgICAgLyogKG8pICA6IG92ZXJmbG93IGZsYWcgICAgICAgICAgICAgICAgICAgICAgICAqLwogKQogewotICAgIHJlZ2lzdGVyIFdvcmQxNiBpOwotICAgIHJlZ2lzdGVyIFdvcmQxNiBqOworICAgIFdvcmQxNiBpOworICAgIFdvcmQxNiBqOwogCiAgICAgV29yZDMyIGYxWzZdOwogICAgIFdvcmQzMiBmMls2XTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL211bHRfci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9tdWx0X3IuY3BwCmluZGV4IDA3NzdlNjguLjcxMTJiM2QgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL211bHRfci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvbXVsdF9yLmNwcApAQCAtMTkwLDcgKzE5MCw3IEBACiBXb3JkMTYgbXVsdF9yKFdvcmQxNiB2YXIxLCBXb3JkMTYgdmFyMiwgRmxhZyAqcE92ZXJmbG93KQogewogCi0gICAgcmVnaXN0ZXIgV29yZDMyIExfcHJvZHVjdF9hcnI7CisgICAgV29yZDMyIExfcHJvZHVjdF9hcnI7CiAKICAgICBMX3Byb2R1Y3RfYXJyID0gKChXb3JkMzIpIHZhcjEpICogdmFyMjsgICAgICAgICAgICAgIC8qIHByb2R1Y3QgKi8KICAgICBMX3Byb2R1Y3RfYXJyICs9IChXb3JkMzIpIDB4MDAwMDQwMDBMOyAgICAgICAgICAgICAgIC8qIHJvdW5kICovCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9ub3JtX2wuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvbm9ybV9sLmNwcAppbmRleCAxMzJmZWQ2Li5kOGQxMjU5IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9ub3JtX2wuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL25vcm1fbC5jcHAKQEAgLTE5NywxMiArMTk3LDEyIEBACiA7IEZVTkNUSU9OIENPREUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2lmICEoIGRlZmluZWQoUFZfQVJNX1Y1KSB8fCBkZWZpbmVkKFBWX0FSTV9HQ0NfVjUpICkKLVdvcmQxNiBub3JtX2wocmVnaXN0ZXIgV29yZDMyIExfdmFyMSkKK1dvcmQxNiBub3JtX2woV29yZDMyIExfdmFyMSkKIHsKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICA7IERlZmluZSBhbGwgbG9jYWwgdmFyaWFibGVzCiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0gICAgcmVnaXN0ZXIgV29yZDE2IHZhcl9vdXQgPSAwOworICAgIFdvcmQxNiB2YXJfb3V0ID0gMDsKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIDsgRnVuY3Rpb24gYm9keSBoZXJlCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9ub3JtX3MuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvbm9ybV9zLmNwcAppbmRleCA4Y2RjZGI4Li42NDY4YjY3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9ub3JtX3MuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL25vcm1fcy5jcHAKQEAgLTE5NCwxMyArMTk0LDEzIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNpZiAhKCBkZWZpbmVkKFBWX0FSTV9WNSkgfHwgZGVmaW5lZChQVl9BUk1fR0NDX1Y1KSApCiAKLVdvcmQxNiBub3JtX3MocmVnaXN0ZXIgV29yZDE2IHZhcjEpCitXb3JkMTYgbm9ybV9zKFdvcmQxNiB2YXIxKQogewogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIDsgRGVmaW5lIGFsbCBsb2NhbCB2YXJpYWJsZXMKICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotICAgIHJlZ2lzdGVyIFdvcmQxNiB2YXJfb3V0ID0gMDsKKyAgICBXb3JkMTYgdmFyX291dCA9IDA7CiAKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICA7IEZ1bmN0aW9uIGJvZHkgaGVyZQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvcHJlZF9sdC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9wcmVkX2x0LmNwcAppbmRleCA5MTYzNjIzLi44YTFhYTllIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9wcmVkX2x0LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9wcmVkX2x0LmNwcApAQCAtMjYwLDkgKzI2MCw5IEBACiAgICAgRmxhZyAgKnBPdmVyZmxvdyAgLyogb3V0cHV0OiBpZiBzZXQsIG92ZXJmbG93IG9jY3VycmVkIGluIHRoaXMgZnVuY3Rpb24gKi8KICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKLSAgICByZWdpc3RlciBXb3JkMTYgajsKLSAgICByZWdpc3RlciBXb3JkMTYgazsKKyAgICBXb3JkMTYgaTsKKyAgICBXb3JkMTYgajsKKyAgICBXb3JkMTYgazsKIAogICAgIFdvcmQxNiAqcFgwOwogICAgIFdvcmQxNiAqcFgyOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvcV9wbHNmXzMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvcV9wbHNmXzMuY3BwCmluZGV4IDJiMzBiZjQuLmM3MDg0N2UgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL3FfcGxzZl8zLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9xX3Bsc2ZfMy5jcHAKQEAgLTI4MSw3ICsyODEsNyBAQAogICAgIEZsYWcgICpwT3ZlcmZsb3cgICAgICAvKiBvIDogRmxhZyBzZXQgd2hlbiBvdmVyZmxvdyBvY2N1cnMgICAgICovCiApCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGk7CisgICAgV29yZDE2IGk7CiAgICAgV29yZDE2IHRlbXA7CiAgICAgY29uc3QgV29yZDE2ICpwX2RpY287CiAgICAgV29yZDE2IGluZGV4ID0gMDsKQEAgLTYwNyw3ICs2MDcsNyBAQAogICAgIEZsYWcgdXNlX2hhbGYsICAgICAgICAvKiBpOiB1c2UgZXZlcnkgc2Vjb25kIGVudHJ5IGluIGNvZGVib29rICovCiAgICAgRmxhZyAgKnBPdmVyZmxvdykgICAgIC8qIG8gOiBGbGFnIHNldCB3aGVuIG92ZXJmbG93IG9jY3VycyAgICAgKi8KIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKKyAgICBXb3JkMTYgaTsKICAgICBXb3JkMTYgdGVtcDsKIAogICAgIGNvbnN0IFdvcmQxNiAqcF9kaWNvOwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKICAgICBGbGFnICAqcE92ZXJmbG93ICAgIC8qIG8gOiBGbGFnIHNldCB3aGVuIG92ZXJmbG93IG9jY3VycyAgICAgICAgICAgICAqLwogKQogewotICAgIHJlZ2lzdGVyIFdvcmQxNiBpLCBqOworICAgIFdvcmQxNiBpLCBqOwogICAgIFdvcmQxNiBsc2YxW01dOwogICAgIFdvcmQxNiB3ZjFbTV07CiAgICAgV29yZDE2IGxzZl9wW01dOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvcmVzaWR1LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL3Jlc2lkdS5jcHAKaW5kZXggYjI1ZDNiZS4uMmFkMTMyZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvcmVzaWR1LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9yZXNpZHUuY3BwCkBAIC0yMDIsNyArMjAyLDcgQEAKIHsKIAogCi0gICAgcmVnaXN0ZXIgV29yZDE2IGksIGo7CisgICAgV29yZDE2IGksIGo7CiAgICAgV29yZDMyIHMxOwogICAgIFdvcmQzMiBzMjsKICAgICBXb3JkMzIgczM7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9zaHIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvc2hyLmNwcAppbmRleCA3NzVkYzY5Li4xMDE4ZDljIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy9zaHIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL3Noci5jcHAKQEAgLTIwMiwxMCArMjAyLDEwIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDsgRlVOQ1RJT04gQ09ERQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1Xb3JkMTYgc2hyKHJlZ2lzdGVyIFdvcmQxNiB2YXIxLCByZWdpc3RlciBXb3JkMTYgdmFyMiwgRmxhZyAqcE92ZXJmbG93KQorV29yZDE2IHNocihXb3JkMTYgdmFyMSwgV29yZDE2IHZhcjIsIEZsYWcgKnBPdmVyZmxvdykKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgcmVzdWx0OwotICAgIHJlZ2lzdGVyIFdvcmQzMiB0ZW1wX3JlczsKKyAgICBXb3JkMTYgcmVzdWx0OworICAgIFdvcmQzMiB0ZW1wX3JlczsKIAogICAgIGlmICh2YXIyICE9IDApCiAgICAgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvd2VpZ2h0X2EuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2NvbW1vbi9zcmMvd2VpZ2h0X2EuY3BwCmluZGV4IDJlMmVmYzQuLmVlODIxZWYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9jb21tb24vc3JjL3dlaWdodF9hLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvY29tbW9uL3NyYy93ZWlnaHRfYS5jcHAKQEAgLTE3OCw3ICsxNzgsNyBAQAogICAgIFdvcmQxNiBhX2V4cFtdICAgICAgLyogKG8pICAgOiBTcGVjdHJhbCBleHBhbmRlZCBMUEMgY29lZmZpY2llbnRzICAgKi8KICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKKyAgICBXb3JkMTYgaTsKIAogICAgICooYV9leHApID0gKihhKTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy9BbmRyb2lkLm1rIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy9BbmRyb2lkLm1rCmluZGV4IGIwNjc0NTYuLjM3NTBlMmUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvQW5kcm9pZC5taworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZGVjL0FuZHJvaWQubWsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgJChMT0NBTF9QQVRIKS8uLi9jb21tb24vaW5jbHVkZQogCiBMT0NBTF9DRkxBR1MgOj0gXAotICAgICAgICAtRE9TQ0xfVU5VU0VEX0FSRz0gLURPU0NMX0lNUE9SVF9SRUY9CisgICAgICAgIC1EIk9TQ0xfVU5VU0VEX0FSRyh4KT0odm9pZCkoeCkiIC1ET1NDTF9JTVBPUlRfUkVGPQogCiBMT0NBTF9DRkxBR1MgKz0gLVdlcnJvcgogCkBAIC04MywzICs4MywyNCBAQAogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKIAogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9TUkNfRklMRVMgOj0gXAorICAgICAgICB0ZXN0L2Ftcm5iZGVjX3Rlc3QuY3BwCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gXAorICAgICAgICAkKExPQ0FMX1BBVEgpL3NyYyBcCisgICAgICAgICQoTE9DQUxfUEFUSCkvLi4vY29tbW9uL2luY2x1ZGUgXAorICAgICAgICAkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tdXRpbHMpCisKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAorICAgICAgICBsaWJzdGFnZWZyaWdodF9hbXJuYmRlYyBsaWJzbmRmaWxlCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gXAorICAgICAgICBsaWJzdGFnZWZyaWdodF9hbXJuYl9jb21tb24gbGliYXVkaW91dGlscworCitMT0NBTF9NT0RVTEUgOj0gbGlic3RhZ2VmcmlnaHRfYW1ybmJkZWNfdGVzdAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKKworaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZGVjL3NyYy9kMTAzNXBmLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL2QxMDM1cGYuY3BwCmluZGV4IDg5OWRhYmEuLjg2MWIzZTYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL2QxMDM1cGYuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL2QxMDM1cGYuY3BwCkBAIC0yMDksNyArMjA5LDcgQEAKICAgICBXb3JkMTYgY29kW10gICAgICAgLyogKG8pICAgICA6IGFsZ2VicmFpYyAoZml4ZWQpIGNvZGVib29rIGV4Y2l0YXRpb24gICAgKi8KICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaSwgaiwgcG9zMSwgcG9zMjsKKyAgICBXb3JkMTYgaSwgaiwgcG9zMSwgcG9zMjsKICAgICBXb3JkMTYgc2lnbiwgdG1wOwogCiAgICAgZm9yIChpID0gMDsgaSA8IExfQ09ERTsgaSsrKQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy9zcmMvZF9wbHNmXzUuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy9zcmMvZF9wbHNmXzUuY3BwCmluZGV4IDA4YjY5MGQuLjcwNjhjMGEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL2RfcGxzZl81LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZGVjL3NyYy9kX3Bsc2ZfNS5jcHAKQEAgLTMwOCw3ICszMDgsNyBAQAogICAgIEZsYWcgICpwT3ZlcmZsb3cgICAgLyogbyA6IEZsYWcgc2V0IHdoZW4gb3ZlcmZsb3cgb2NjdXJzICAgICAgICAgICAgICAgICovCiApCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGk7CisgICAgV29yZDE2IGk7CiAgICAgV29yZDE2IHRlbXA7CiAgICAgV29yZDE2IHNpZ247CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL2ludF9sc2YuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy9zcmMvaW50X2xzZi5jcHAKaW5kZXggYzVhZWZlNC4uMmNhMzBkZSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy9zcmMvaW50X2xzZi5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy9zcmMvaW50X2xzZi5jcHAKQEAgLTIxOCw5ICsyMTgsOSBAQAogICAgIEZsYWcgICpwT3ZlcmZsb3cgIC8qIG8gOiBmbGFnIHNldCBpZiBvdmVyZmxvdyBvY2N1cnMgICAgICAgICAgICAgICAgICAgICovCiApCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGk7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IHRlbXAxOwotICAgIHJlZ2lzdGVyIFdvcmQxNiB0ZW1wMjsKKyAgICBXb3JkMTYgaTsKKyAgICBXb3JkMTYgdGVtcDE7CisgICAgV29yZDE2IHRlbXAyOwogCiAgICAgaWYgKGlfc3ViZnIgPT0gMCkKICAgICB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZGVjL3NyYy9waF9kaXNwLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL3BoX2Rpc3AuY3BwCmluZGV4IGRhNTQ0NWIuLjI4NTQ2NWYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL3BoX2Rpc3AuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL3BoX2Rpc3AuY3BwCkBAIC0yMDcsNyArMjA3LDcgQEAKIAogV29yZDE2IHBoX2Rpc3BfcmVzZXQocGhfZGlzcFN0YXRlICpzdGF0ZSkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKKyAgICBXb3JkMTYgaTsKIAogICAgIGlmIChzdGF0ZSA9PSAocGhfZGlzcFN0YXRlICopIE5VTEwpCiAgICAgewpAQCAtNjY3LDE1ICs2NjcsMTUgQEAKICAgICBGbGFnICAgKnBPdmVyZmxvdyAgICAgICAvKiBpL28gICAgIDogb3ZlZmxvdyBpbmRpY2F0b3IgICAgICAgICAgICAgICAgICAqLwogKQogewotICAgIHJlZ2lzdGVyIFdvcmQxNiBpLCBpMTsKLSAgICByZWdpc3RlciBXb3JkMTYgdG1wMTsKKyAgICBXb3JkMTYgaSwgaTE7CisgICAgV29yZDE2IHRtcDE7CiAgICAgV29yZDMyIExfdGVtcDsKICAgICBXb3JkMzIgTF90ZW1wMjsKICAgICBXb3JkMTYgaW1wTnI7ICAgICAgICAgICAvKiBpbmRpY2F0b3IgZm9yIGFtb3VudCBvZiBkaXNwLi9maWx0ZXIgdXNlZCAqLwogCiAgICAgV29yZDE2IGlubm9fc2F2W0xfU1VCRlJdOwogICAgIFdvcmQxNiBwc19wb3NzW0xfU1VCRlJdOwotICAgIHJlZ2lzdGVyIFdvcmQxNiBuemUsIG5QdWxzZTsKKyAgICBXb3JkMTYgbnplLCBuUHVsc2U7CiAgICAgV29yZDE2IHBwb3M7CiAgICAgY29uc3QgV29yZDE2ICpwaF9pbXA7ICAgLyogUG9pbnRlciB0byBwaGFzZSBkaXNwZXJzaW9uIGZpbHRlciAqLwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZGVjL3NyYy9wc3RmaWx0LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL3BzdGZpbHQuY3BwCmluZGV4IDAzMzY5OTAuLjM5ZTAxYTIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL3BzdGZpbHQuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvc3JjL3BzdGZpbHQuY3BwCkBAIC00NDUsMTMgKzQ0NSwxMyBAQAogKQogewogICAgIFdvcmQxNiBBcDNbTVAxXTsKLSAgICBXb3JkMTYgQXA0W01QMV07ICAgICAgICAgICAgLyogYmFuZHdpZHRoIGV4cGFuZGVkIExQIHBhcmFtZXRlcnMgKi8KLSAgICBXb3JkMTYgKkF6OyAgICAgICAgICAgICAgICAgLyogcG9pbnRlciB0byBBel80OiAgICAgICAgICAgICAgICAgKi8KKyAgICBXb3JkMTYgQXA0W01QMV07ICAgICAgLyogYmFuZHdpZHRoIGV4cGFuZGVkIExQIHBhcmFtZXRlcnMgKi8KKyAgICBXb3JkMTYgKkF6OyAgICAgICAgICAgLyogcG9pbnRlciB0byBBel80OiAgICAgICAgICAgICAgICAgKi8KICAgICAvKiAgTFBDIHBhcmFtZXRlcnMgaW4gZWFjaCBzdWJmcmFtZSAqLwotICAgIHJlZ2lzdGVyIFdvcmQxNiBpX3N1YmZyOyAgICAvKiBpbmRleCBmb3IgYmVnaW5uaW5nIG9mIHN1YmZyYW1lICAqLworICAgIFdvcmQxNiBpX3N1YmZyOyAgICAgICAvKiBpbmRleCBmb3IgYmVnaW5uaW5nIG9mIHN1YmZyYW1lICAqLwogICAgIFdvcmQxNiBoW0xfSF07CiAKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKKyAgICBXb3JkMTYgaTsKICAgICBXb3JkMTYgdGVtcDE7CiAgICAgV29yZDE2IHRlbXAyOwogICAgIFdvcmQzMiBMX3RtcDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvdGVzdC9hbXJuYmRlY190ZXN0LmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9kZWMvdGVzdC9hbXJuYmRlY190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjFmZTJiCi0tLSAvZGV2L251bGwKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2RlYy90ZXN0L2Ftcm5iZGVjX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAiZ3NtYW1yX2RlYy5oIgorI2luY2x1ZGUgPGF1ZGlvX3V0aWxzL3NuZGZpbGUuaD4KKworLy8gQ29uc3RhbnRzIGZvciBBTVItTkIKK2VudW0geworICAgIGtJbnB1dEJ1ZmZlclNpemUgPSA2NCwKKyAgICBrU2FtcGxlc1BlckZyYW1lID0gMTYwLAorICAgIGtCaXRzUGVyU2FtcGxlID0gMTYsCisgICAga091dHB1dEJ1ZmZlclNpemUgPSBrU2FtcGxlc1BlckZyYW1lICoga0JpdHNQZXJTYW1wbGUvOCwKKyAgICBrU2FtcGxlUmF0ZSA9IDgwMDAsCisgICAga0NoYW5uZWxzID0gMSwKKyAgICBrRmlsZUhlYWRlclNpemUgPSA2Cit9OworY29uc3QgdWludDMyX3Qga0ZyYW1lU2l6ZXNbXSA9IHsxMiwgMTMsIDE1LCAxNywgMTksIDIwLCAyNiwgMzF9OworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKworICAgIGlmKGFyZ2MgIT0gMykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzYWdlICVzIDxpbnB1dCBmaWxlPiA8b3V0cHV0IGZpbGU+XG4iLCBhcmd2WzBdKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLy8gT3BlbiB0aGUgaW5wdXQgZmlsZQorICAgIEZJTEUqIGZwSW5wdXQgPSBmb3Blbihhcmd2WzFdLCAicmIiKTsKKyAgICBpZiAoIWZwSW5wdXQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiAlc1xuIiwgYXJndlsxXSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8vIFZhbGlkYXRlIHRoZSBpbnB1dCBBTVIgZmlsZQorICAgIGNoYXIgaGVhZGVyW2tGaWxlSGVhZGVyU2l6ZV07CisgICAgaW50IGJ5dGVzUmVhZCA9IGZyZWFkKGhlYWRlciwgMSwga0ZpbGVIZWFkZXJTaXplLCBmcElucHV0KTsKKyAgICBpZiAoYnl0ZXNSZWFkICE9IGtGaWxlSGVhZGVyU2l6ZSB8fCBtZW1jbXAoaGVhZGVyLCAiIyFBTVJcbiIsIGtGaWxlSGVhZGVyU2l6ZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIEFNUi1OQiBmaWxlXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLy8gT3BlbiB0aGUgb3V0cHV0IGZpbGUKKyAgICBTRl9JTkZPIHNmSW5mbzsKKyAgICBtZW1zZXQoJnNmSW5mbywgMCwgc2l6ZW9mKFNGX0lORk8pKTsKKyAgICBzZkluZm8uY2hhbm5lbHMgPSBrQ2hhbm5lbHM7CisgICAgc2ZJbmZvLmZvcm1hdCA9IFNGX0ZPUk1BVF9XQVYgfCBTRl9GT1JNQVRfUENNXzE2OworICAgIHNmSW5mby5zYW1wbGVyYXRlID0ga1NhbXBsZVJhdGU7CisgICAgU05ERklMRSAqaGFuZGxlID0gc2Zfb3Blbihhcmd2WzJdLCBTRk1fV1JJVEUsICZzZkluZm8pOworICAgIGlmKCFoYW5kbGUpeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjcmVhdGUgJXNcbiIsIGFyZ3ZbMl0pOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgQU1SLU5CIGRlY29kZXIgaW5zdGFuY2UKKyAgICB2b2lkKiBhbXJIYW5kbGU7CisgICAgaW50IGVyciA9IEdTTUluaXREZWNvZGUoJmFtckhhbmRsZSwgKFdvcmQ4KikiQU1STkJEZWNvZGVyIik7CisgICAgaWYoZXJyICE9IDApeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGNyZWF0aW5nIEFNUi1OQiBkZWNvZGVyIGluc3RhbmNlXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLy9BbGxvY2F0ZSBpbnB1dCBidWZmZXIKKyAgICB2b2lkICppbnB1dEJ1ZiA9IG1hbGxvYyhrSW5wdXRCdWZmZXJTaXplKTsKKyAgICBhc3NlcnQoaW5wdXRCdWYgIT0gTlVMTCk7CisKKyAgICAvL0FsbG9jYXRlIG91dHB1dCBidWZmZXIKKyAgICB2b2lkICpvdXRwdXRCdWYgPSBtYWxsb2Moa091dHB1dEJ1ZmZlclNpemUpOworICAgIGFzc2VydChvdXRwdXRCdWYgIT0gTlVMTCk7CisKKworICAgIC8vIERlY29kZSBsb29wCisgICAgdWludDMyX3QgcmV0VmFsID0gMDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICAvLyBSZWFkIG1vZGUKKyAgICAgICAgdWludDhfdCBtb2RlOworICAgICAgICBieXRlc1JlYWQgPSBmcmVhZCgmbW9kZSwgMSwgMSwgZnBJbnB1dCk7CisgICAgICAgIGlmIChieXRlc1JlYWQgIT0gMSkgYnJlYWs7CisKKyAgICAgICAgLy8gRmluZCBmcmFtZSB0eXBlCisgICAgICAgIEZyYW1lX1R5cGVfM0dQUCBmcmFtZVR5cGUgPSAoRnJhbWVfVHlwZV8zR1BQKSgobW9kZSA+PiAzKSAmIDB4MGYpOworICAgICAgICBpZiAoZnJhbWVUeXBlID49IEFNUl9TSUQpeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGcmFtZSB0eXBlICVkIG5vdCBzdXBwb3J0ZWRcbiIsZnJhbWVUeXBlKTsKKyAgICAgICAgICAgIHJldFZhbCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmQgZnJhbWUgdHlwZQorICAgICAgICBpbnQzMl90IGZyYW1lU2l6ZSA9IGtGcmFtZVNpemVzW2ZyYW1lVHlwZV07CisgICAgICAgIGJ5dGVzUmVhZCA9IGZyZWFkKGlucHV0QnVmLCAxLCBmcmFtZVNpemUsIGZwSW5wdXQpOworICAgICAgICBpZiAoYnl0ZXNSZWFkICE9IGZyYW1lU2l6ZSkgYnJlYWs7CisKKyAgICAgICAgLy9EZWNvZGUgZnJhbWUKKyAgICAgICAgaW50MzJfdCBkZWNvZGVTdGF0dXM7CisgICAgICAgIGRlY29kZVN0YXR1cyA9IEFNUkRlY29kZShhbXJIYW5kbGUsIGZyYW1lVHlwZSwgKHVpbnQ4X3QqKWlucHV0QnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludDE2X3QqKW91dHB1dEJ1ZiwgTUlNRV9JRVRGKTsKKyAgICAgICAgaWYoZGVjb2RlU3RhdHVzID09IC0xKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29kZXIgZW5jb3VudGVyZWQgZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0VmFsID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy9Xcml0ZSBvdXRwdXQgdG8gd2F2CisgICAgICAgIHNmX3dyaXRlZl9zaG9ydChoYW5kbGUsIChpbnQxNl90KilvdXRwdXRCdWYsIGtTYW1wbGVzUGVyRnJhbWUpOworCisgICAgfQorCisgICAgLy8gQ2xvc2UgaW5wdXQgYW5kIG91dHB1dCBmaWxlCisgICAgZmNsb3NlKGZwSW5wdXQpOworICAgIHNmX2Nsb3NlKGhhbmRsZSk7CisKKyAgICAvL0ZyZWUgYWxsb2NhdGVkIG1lbW9yeQorICAgIGZyZWUoaW5wdXRCdWYpOworICAgIGZyZWUob3V0cHV0QnVmKTsKKworICAgIC8vIENsb3NlIGRlY29kZXIgaW5zdGFuY2UKKyAgICBHU01EZWNvZGVGcmFtZUV4aXQoJmFtckhhbmRsZSk7CisKKyAgICByZXR1cm4gcmV0VmFsOworfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9BbmRyb2lkLm1rIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9BbmRyb2lkLm1rCmluZGV4IGFmYzBiODkuLmJkYmE4YTkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvQW5kcm9pZC5taworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL0FuZHJvaWQubWsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgJChMT0NBTF9QQVRIKS8uLi9jb21tb24vaW5jbHVkZQogCiBMT0NBTF9DRkxBR1MgOj0gXAotICAgICAgICAtRE9TQ0xfVU5VU0VEX0FSRz0KKyAgICAgICAgLUQiT1NDTF9VTlVTRURfQVJHKHgpPSh2b2lkKSh4KSIKIAogTE9DQUxfQ0ZMQUdTICs9IC1XZXJyb3IKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvYXV0b2NvcnIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvYXV0b2NvcnIuY3BwCmluZGV4IDBkM2FjYWMuLmM3MTgxMWQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2F1dG9jb3JyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9hdXRvY29yci5jcHAKQEAgLTMwNiw5ICszMDYsOSBAQAogICAgIEZsYWcgICpwT3ZlcmZsb3cgICAgICAgLyogKG8pICAgIDogaW5kaWNhdGVzIG92ZXJmbG93ICAgICAgICAgICAgICAgICAqLwogKQogewotICAgIHJlZ2lzdGVyIFdvcmQxNiBpOwotICAgIHJlZ2lzdGVyIFdvcmQxNiBqOwotICAgIHJlZ2lzdGVyIFdvcmQxNiBub3JtOworICAgIFdvcmQxNiBpOworICAgIFdvcmQxNiBqOworICAgIFdvcmQxNiBub3JtOwogCiAgICAgV29yZDE2IHlbTF9XSU5ET1ddOwogICAgIFdvcmQzMiBzdW07CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jMl85cGYuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvYzJfOXBmLmNwcAppbmRleCBhMzNjZGY3NC4uYjIxMTAzMiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvYzJfOXBmLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jMl85cGYuY3BwCkBAIC0zMTgsNyArMzE4LDcgQEAKICAgICAgICAgV29yZDE2IGRuX3NpZ25bTF9DT0RFXTsKICAgICAgICAgV29yZDE2IHJyW0xfQ09ERV1bTF9DT0RFXTsKIAotICAgICAgICByZWdpc3RlciBXb3JkMTYgaTsKKyAgICAgICAgV29yZDE2IGk7CiAKICAgICAgICAgV29yZDE2IGluZGV4OwogICAgICAgICBXb3JkMTYgc2hhcnA7CkBAIC01OTIsMTAgKzU5MiwxMCBAQAogICAgICAgICBGbGFnICAgKiBwT3ZlcmZsb3cgICAvKiBvIDogRmxhZyBzZXQgd2hlbiBvdmVyZmxvdyBvY2N1cnMgICAgICAqLwogICAgICkKICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFdvcmQxNiBpMDsKLSAgICAgICAgcmVnaXN0ZXIgV29yZDE2IGkxOworICAgICAgICBXb3JkMTYgaTA7CisgICAgICAgIFdvcmQxNiBpMTsKICAgICAgICAgV29yZDE2IGl4ID0gMDsgLyogaW5pdGlhbGl6YXRpb24gb25seSBuZWVkZWQgdG8ga2VlcCBnY2Mgc2lsZW50ICovCi0gICAgICAgIHJlZ2lzdGVyIFdvcmQxNiAgdHJhY2sxOworICAgICAgICBXb3JkMTYgdHJhY2sxOwogICAgICAgICBXb3JkMTYgaXBvc1tOQl9QVUxTRV07CiAgICAgICAgIFdvcmQxNiBwc2s7CiAgICAgICAgIFdvcmQxNiBwczA7CkBAIC02MDgsNyArNjA4LDcgQEAKICAgICAgICAgV29yZDMyIHM7CiAgICAgICAgIFdvcmQzMiBhbHAwOwogICAgICAgICBXb3JkMzIgYWxwMTsKLSAgICAgICAgcmVnaXN0ZXIgV29yZDE2IGk7CisgICAgICAgIFdvcmQxNiBpOwogICAgICAgICBXb3JkMzIgTF90ZW1wOwogICAgICAgICBXb3JkMTYgKnBfY29kdmVjID0gJmNvZHZlY1swXTsKIApAQCAtOTkzLDEzICs5OTMsMTMgQEAKICAgICAgICAgRmxhZyAgKnBPdmVyZmxvdyAgLyogbyA6IEZsYWcgc2V0IHdoZW4gb3ZlcmZsb3cgb2NjdXJzICAgICAgICAgICAgICAqLwogICAgICkKICAgICB7Ci0gICAgICAgIHJlZ2lzdGVyIFdvcmQxNiBpOwotICAgICAgICByZWdpc3RlciBXb3JkMTYgajsKLSAgICAgICAgcmVnaXN0ZXIgV29yZDE2IGs7Ci0gICAgICAgIHJlZ2lzdGVyIFdvcmQxNiB0cmFjazsKLSAgICAgICAgcmVnaXN0ZXIgV29yZDE2IGZpcnN0OwotICAgICAgICByZWdpc3RlciBXb3JkMTYgaW5kZXg7Ci0gICAgICAgIHJlZ2lzdGVyIFdvcmQxNiByc2lnbjsKKyAgICAgICAgV29yZDE2IGk7CisgICAgICAgIFdvcmQxNiBqOworICAgICAgICBXb3JkMTYgazsKKyAgICAgICAgV29yZDE2IHRyYWNrOworICAgICAgICBXb3JkMTYgZmlyc3Q7CisgICAgICAgIFdvcmQxNiBpbmRleDsKKyAgICAgICAgV29yZDE2IHJzaWduOwogICAgICAgICBXb3JkMTYgaW5keDsKICAgICAgICAgV29yZDE2IF9zaWduW05CX1BVTFNFXTsKICAgICAgICAgV29yZDE2ICpwMDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2NsX2x0cC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jbF9sdHAuY3BwCmluZGV4IDRhMDUzMjcuLjUyNWU1N2QgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2NsX2x0cC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvY2xfbHRwLmNwcApAQCAtNjM4LDcgKzYzOCw3IEBACiAgICAgRmxhZyAgICpwT3ZlcmZsb3cgICAgLyogbyAgIDogb3ZlcmZsb3cgaW5kaWNhdG9yICAgICAgICAgICAgICAgICAgICAgICAgKi8KICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKKyAgICBXb3JkMTYgaTsKICAgICBXb3JkMTYgaW5kZXg7CiAgICAgV29yZDMyIExfdGVtcDsgICAgIC8qIHRlbXBvcmFyaWx5IHZhcmlhYmxlICovCiAgICAgV29yZDE2IHJlc3UzOyAgICAgIC8qIGZsYWcgZm9yIHVwc2FtcGxlIHJlc29sdXRpb24gKi8KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2NvbnZvbHZlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2NvbnZvbHZlLmNwcAppbmRleCBlOWNlN2JhLi41MDE1YTRhIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jb252b2x2ZS5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvY29udm9sdmUuY3BwCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgICBXb3JkMTYgTCAgICAgICAgICAgLyogKGkpICAgICA6IHZlY3RvciBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiApCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGksIG47CisgICAgV29yZDE2IGksIG47CiAgICAgV29yZDMyIHMxLCBzMjsKIAogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jb3JfaC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jb3JfaC5jcHAKaW5kZXggZTQ2ZDk5Zi4uMjA1ODNjNCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvY29yX2guY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2Nvcl9oLmNwcApAQCAtMjcyLDggKzI3Miw4IEBACiAgICAgRmxhZyAgKnBPdmVyZmxvdwogKQogewotICAgIHJlZ2lzdGVyIFdvcmQxNiBpOwotICAgIHJlZ2lzdGVyIFdvcmQxNiBkZWM7CisgICAgV29yZDE2IGk7CisgICAgV29yZDE2IGRlYzsKIAogICAgIFdvcmQxNiBoMltMX0NPREVdOwogICAgIFdvcmQzMiBzOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvY29yX2hfeC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jb3JfaF94LmNwcAppbmRleCBiZWIyYWVjLi5jMjVjMDI2IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jb3JfaF94LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jb3JfaF94LmNwcApAQCAtMjQ5LDkgKzI0OSw5IEBACiAgICAgRmxhZyAgICpwT3ZlcmZsb3cgLyogKG8pOiBwb2ludGVyIHRvIG92ZXJmbG93IGZsYWcgICAgICAgICAgICAgICAgICAgICAgKi8KICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKLSAgICByZWdpc3RlciBXb3JkMTYgajsKLSAgICByZWdpc3RlciBXb3JkMTYgazsKKyAgICBXb3JkMTYgaTsKKyAgICBXb3JkMTYgajsKKyAgICBXb3JkMTYgazsKIAogICAgIFdvcmQzMiBzOwogICAgIFdvcmQzMiB5MzJbTF9DT0RFXTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2Nvcl9oX3gyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2Nvcl9oX3gyLmNwcAppbmRleCBkYTYwNjQwLi5iNGZkODY3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9jb3JfaF94Mi5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvY29yX2hfeDIuY3BwCkBAIC0yMzYsOSArMjM2LDkgQEAKICAgICBGbGFnICpwT3ZlcmZsb3cKICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaTsKLSAgICByZWdpc3RlciBXb3JkMTYgajsKLSAgICByZWdpc3RlciBXb3JkMTYgazsKKyAgICBXb3JkMTYgaTsKKyAgICBXb3JkMTYgajsKKyAgICBXb3JkMTYgazsKICAgICBXb3JkMzIgczsKICAgICBXb3JkMzIgeTMyW0xfQ09ERV07CiAgICAgV29yZDMyIG1heDsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2R0eF9lbmMuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvZHR4X2VuYy5jcHAKaW5kZXggMjc2ZTU5MC4uMmNjYjc3NyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvZHR4X2VuYy5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvZHR4X2VuYy5jcHAKQEAgLTEzMCw3ICsxMzAsNyBAQAogOyBNQUNST1MKIDsgRGVmaW5lIG1vZHVsZSBzcGVjaWZpYyBtYWNyb3MgaGVyZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi1leHRlcm4gV29yZDMyIExfYWRkKHJlZ2lzdGVyIFdvcmQzMiBMX3ZhcjEsIHJlZ2lzdGVyIFdvcmQzMiBMX3ZhcjIsIEZsYWcgKnBPdmVyZmxvdyk7CitleHRlcm4gV29yZDMyIExfYWRkKFdvcmQzMiBMX3ZhcjEsIFdvcmQzMiBMX3ZhcjIsIEZsYWcgKnBPdmVyZmxvdyk7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogOyBERUZJTkVTCkBAIC02NzEsNyArNjcxLDcgQEAKICAgICAgICAgICAgICBGbGFnICAgKnBPdmVyZmxvdyAgICAgICAgLyogaS9vIDogb3ZlcmZsb3cgaW5kaWNhdG9yICAgICAgICAgICAgKi8KICAgICAgICAgICAgICkKIHsKLSAgICByZWdpc3RlciBXb3JkMTYgaSwgajsKKyAgICBXb3JkMTYgaSwgajsKICAgICBXb3JkMTYgdGVtcDsKICAgICBXb3JkMTYgbG9nX2VuOwogICAgIFdvcmQxNiBsc2ZbTV07CkBAIC05NDMsNyArOTQzLDcgQEAKICAgICAgICAgICAgICAgICkKIHsKIAotICAgIHJlZ2lzdGVyIFdvcmQxNiBpOworICAgIFdvcmQxNiBpOwogICAgIFdvcmQzMiBMX2ZyYW1lX2VuOwogICAgIFdvcmQzMiBMX3RlbXA7CiAgICAgV29yZDE2IGxvZ19lbl9lOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvbGV2aW5zb24uY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvbGV2aW5zb24uY3BwCmluZGV4IDAwMTg5N2IuLjI5Y2RhYzYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL2xldmluc29uLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9sZXZpbnNvbi5jcHAKQEAgLTYzOCw4ICs2MzgsOCBAQAogICAgIEZsYWcgICAqcE92ZXJmbG93CiApCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGk7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGo7CisgICAgV29yZDE2IGk7CisgICAgV29yZDE2IGo7CiAgICAgV29yZDE2IGhpOwogICAgIFdvcmQxNiBsbzsKICAgICBXb3JkMTYgS2g7ICAgICAgICAgICAgICAgICAgICAvKiByZWZsZXhpb24gY29lZmZpY2llbnQ7IGhpIGFuZCBsbyAgICovCkBAIC02NTEsOSArNjUxLDkgQEAKICAgICBXb3JkMTYgQWxbTSArIDFdOwogICAgIFdvcmQxNiBBbmhbTSArIDFdOyAgICAgICAgICAgIC8qIExQQyBjb2VmLmZvciBuZXh0IGl0ZXJhdGlvbiBpbiAgICAgKi8KICAgICBXb3JkMTYgQW5sW00gKyAxXTsgICAgICAgICAgICAvKiBkb3VibGUgcHJlYy4gICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgcmVnaXN0ZXIgV29yZDMyIHQwOyAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlICAgICAgICAgICAgICAgICAqLwotICAgIHJlZ2lzdGVyIFdvcmQzMiB0MTsgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZSAgICAgICAgICAgICAgICAgKi8KLSAgICByZWdpc3RlciBXb3JkMzIgdDI7ICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgICAgICAgICAgICAgICAgICovCisgICAgV29yZDMyIHQwOyAgICAgICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IHZhcmlhYmxlICAgICAgICAgICAgICAgICAqLworICAgIFdvcmQzMiB0MTsgICAgICAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZSAgICAgICAgICAgICAgICAgKi8KKyAgICBXb3JkMzIgdDI7ICAgICAgICAgICAgICAgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgICAgICAgICAgICAgICAgICovCiAKICAgICBXb3JkMTYgKnBfUmg7CiAgICAgV29yZDE2ICpwX1JsOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvcGl0Y2hfb2wuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvcGl0Y2hfb2wuY3BwCmluZGV4IGQzYTJlYzAuLmMwMzliYjAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL3BpdGNoX29sLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9waXRjaF9vbC5jcHAKQEAgLTMyMCw3ICszMjAsNyBAQAogKQogI2VuZGlmCiB7Ci0gICAgcmVnaXN0ZXIgV29yZDE2IGk7CisgICAgV29yZDE2IGk7CiAgICAgV29yZDE2ICpwOwogICAgIFdvcmQzMiBtYXg7CiAgICAgV29yZDMyIHQwOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvcHJlX3Byb2MuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvcHJlX3Byb2MuY3BwCmluZGV4IGZkYzI0NDAuLjA0MjkyMGUgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL3ByZV9wcm9jLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9wcmVfcHJvYy5jcHAKQEAgLTU0Miw3ICs1NDIsNyBAQAogICAgIFdvcmQxNiBzaWduYWxbXSwgLyogaW5wdXQvb3V0cHV0IHNpZ25hbCAqLwogICAgIFdvcmQxNiBsZykgICAgICAgLyogbGVuZ3RoIG9mIHNpZ25hbCAgICAqLwogewotICAgIHJlZ2lzdGVyIFdvcmQxNiBpOworICAgIFdvcmQxNiBpOwogICAgIFdvcmQxNiB4X25fMjsKICAgICBXb3JkMTYgeF9uXzE7CiAgICAgV29yZDMyIExfdG1wOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvc2V0X3NpZ24uY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2Ftcm5iL2VuYy9zcmMvc2V0X3NpZ24uY3BwCmluZGV4IGQ2MjZkZTMuLmZhNDNmNzggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJuYi9lbmMvc3JjL3NldF9zaWduLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1ybmIvZW5jL3NyYy9zZXRfc2lnbi5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAgICAgICBXb3JkMTYgbiAgICAgICAvKiBpICAgOiAjIG9mIG1heGltdW0gY29ycmVsYXRpb25zIGluIGRuMltdICAgICovCiAgICAgICAgICAgICAgKQogewotICAgIHJlZ2lzdGVyIFdvcmQxNiBpLCBqLCBrOworICAgIFdvcmQxNiBpLCBqLCBrOwogICAgIFdvcmQxNiB2YWwsIG1pbjsKICAgICBXb3JkMTYgcG9zID0gMDsgLyogaW5pdGlhbGl6YXRpb24gb25seSBuZWVkZWQgdG8ga2VlcCBnY2Mgc2lsZW50ICovCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3Yi9BbmRyb2lkLm1rIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FtcndiL0FuZHJvaWQubWsKaW5kZXggZWZkZjk4OC4uNjg2ZjdhMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FtcndiL0FuZHJvaWQubWsKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FtcndiL0FuZHJvaWQubWsKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgICAgICAgJChMT0NBTF9QQVRIKS9pbmNsdWRlCiAKIExPQ0FMX0NGTEFHUyA6PSBcCi0gICAgICAgIC1ET1NDTF9VTlVTRURfQVJHPSAtRE9TQ0xfSU1QT1JUX1JFRj0KKyAgICAgICAgLUQiT1NDTF9VTlVTRURfQVJHKHgpPSh2b2lkKSh4KSIgLURPU0NMX0lNUE9SVF9SRUY9CiAKIExPQ0FMX0NGTEFHUyArPSAtV2Vycm9yCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3Yi9zcmMvcHZhbXJ3Yl9tYXRoX29wLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3Yi9zcmMvcHZhbXJ3Yl9tYXRoX29wLmNwcAppbmRleCBkMWVjNzkwLi41ODcyNTEyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1yd2Ivc3JjL3B2YW1yd2JfbWF0aF9vcC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FtcndiL3NyYy9wdmFtcndiX21hdGhfb3AuY3BwCkBAIC0yMDUsNyArMjA1LDcgQEAKIHsKIAogICAgIGludDE2IHZhcl9vdXQgPSAwOwotICAgIHJlZ2lzdGVyIGludDE2IGl0ZXJhdGlvbjsKKyAgICBpbnQxNiBpdGVyYXRpb247CiAgICAgaW50MzIgTF9udW07CiAgICAgaW50MzIgTF9kZW5vbTsKICAgICBpbnQzMiBMX2Rlbm9tX2J5XzI7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1yd2JlbmMvQW5kcm9pZC5tayBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3YmVuYy9BbmRyb2lkLm1rCmluZGV4IDY0ZmU4ZDEuLjAyNGEyOTIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3YmVuYy9BbmRyb2lkLm1rCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3YmVuYy9BbmRyb2lkLm1rCkBAIC04Niw2ICs4Niw5IEBACiAKIGVuZGlmCiAKKyMgQVJNVjVFL0ZpbHRfNmtfN2tfb3B0LnMgZG9lcyBub3QgY29tcGlsZSB3aXRoIENsYW5nLgorTE9DQUxfQ0xBTkdfQVNGTEFHU19hcm0gKz0gLW5vLWludGVncmF0ZWQtYXMKKwogTE9DQUxfTU9EVUxFIDo9IGxpYnN0YWdlZnJpZ2h0X2FtcndiZW5jCiAKIExPQ0FMX0FSTV9NT0RFIDo9IGFybQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FtcndiZW5jL3NyYy9xX3B1bHNlLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1yd2JlbmMvc3JjL3FfcHVsc2UuYwppbmRleCA4MGEwYjczLi5kNjU4NjAyIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1yd2JlbmMvc3JjL3FfcHVsc2UuYworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1yd2JlbmMvc3JjL3FfcHVsc2UuYwpAQCAtMTg4LDcgKzE4OCw3IEBACiAJCVdvcmQxNiBwb3NbXSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogKGkpIHBvc2l0aW9uIG9mIHRoZSBwdWxzZSAxLi40ICAqLwogCQlXb3JkMTYgTikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIChpKSBudW1iZXIgb2YgYml0cyBmb3IgcG9zaXRpb24gKi8KIHsKLQlXb3JkMTYgbmJfcG9zLCBtYXNrLCBuXzEsIHRtcDsKKwlXb3JkMTYgbmJfcG9zLCBtYXNrIF9fdW51c2VkLCBuXzEsIHRtcDsKIAlXb3JkMTYgcG9zQVs0XSwgcG9zQls0XTsKIAlXb3JkMzIgaSwgaiwgaywgaW5kZXg7CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3YmVuYy9zcmMvd2JfdmFkLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYW1yd2JlbmMvc3JjL3diX3ZhZC5jCmluZGV4IDEzZGQyYWEuLjJiZWFlZmQgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hbXJ3YmVuYy9zcmMvd2JfdmFkLmMKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2FtcndiZW5jL3NyYy93Yl92YWQuYwpAQCAtNDA0LDcgKzQwNCw3IEBACiAJCWFscGhhX2Rvd24gPSBBTFBIQV9ET1dOMTsKIAl9IGVsc2UKIAl7Ci0JCWlmICgoc3QtPnN0YXRfY291bnQgPT0gMCkpCisJCWlmIChzdC0+c3RhdF9jb3VudCA9PSAwKQogCQl7CiAJCQlhbHBoYV91cCA9IEFMUEhBX1VQMjsKIAkJCWFscGhhX2Rvd24gPSBBTFBIQV9ET1dOMjsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvY29tbW9uL3NyYy9kZWJsb2NrLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvY29tbW9uL3NyYy9kZWJsb2NrLmNwcAppbmRleCBkZTJkMmI2Li41ZjhiNjkzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2NvbW1vbi9zcmMvZGVibG9jay5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9jb21tb24vc3JjL2RlYmxvY2suY3BwCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogICAgIGludCAgQzAsIGMwLCBkaWYsIEFic0RlbHRhLCBTdHJuZywgdG1wLCB0bXAxOwogICAgIGludCAgTDIgPSAwLCBMMSwgTDAsIFIwLCBSMSwgUjIgPSAwOwogICAgIHVpbnQ4ICpwdHIsICpwdHIxOwotICAgIHJlZ2lzdGVyIHVpbnQgUl9pbiwgTF9pbjsKKyAgICB1aW50IFJfaW4sIExfaW47CiAgICAgdWludCBSX291dCwgTF9vdXQ7CiAKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvQW5kcm9pZC5tayBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvZW5jL0FuZHJvaWQubWsKaW5kZXggNTM3YmE0Mi4uMmNlZWJjOCAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvQW5kcm9pZC5taworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9BbmRyb2lkLm1rCkBAIC0yOCw3ICsyOCw3IEBACiAgICAgJChUT1ApL2ZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUvbWVkaWEvb3Blbm1heAogCiBMT0NBTF9DRkxBR1MgOj0gXAotICAgIC1ET1NDTF9JTVBPUlRfUkVGPSAtRE9TQ0xfVU5VU0VEX0FSRz0gLURPU0NMX0VYUE9SVF9SRUY9CisgICAgLURPU0NMX0lNUE9SVF9SRUY9IC1EIk9TQ0xfVU5VU0VEX0FSRyh4KT0odm9pZCkoeCkiIC1ET1NDTF9FWFBPUlRfUkVGPQogCiBMT0NBTF9DRkxBR1MgKz0gLVdlcnJvcgogCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICQoTE9DQUxfUEFUSCkvLi4vY29tbW9uCiAKIExPQ0FMX0NGTEFHUyA6PSBcCi0gICAgLURPU0NMX0lNUE9SVF9SRUY9IC1ET1NDTF9VTlVTRURfQVJHPSAtRE9TQ0xfRVhQT1JUX1JFRj0KKyAgICAtRE9TQ0xfSU1QT1JUX1JFRj0gLUQiT1NDTF9VTlVTRURfQVJHKHgpPSh2b2lkKSh4KSIgLURPU0NMX0VYUE9SVF9SRUY9CiAKIAogTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9Tb2Z0QVZDRW5jb2Rlci5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9Tb2Z0QVZDRW5jb2Rlci5jcHAKaW5kZXggMjRkZmMyOS4uOTI4YTc0ZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvU29mdEFWQ0VuY29kZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvZW5jL1NvZnRBVkNFbmNvZGVyLmNwcApAQCAtNTYxLDEzICs1NjEsNiBAQAogICAgICAgICAgICAgICAgIHZpZGVvSW5wdXQuY29kaW5nX3RpbWVzdGFtcCA9IChpbkhlYWRlci0+blRpbWVTdGFtcCArIDUwMCkgLyAxMDAwOyAgLy8gaW4gbXMKICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICppbnB1dERhdGEgPSBOVUxMOwogICAgICAgICAgICAgICAgIGlmIChtSW5wdXREYXRhSXNNZXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbkhlYWRlci0+bkZpbGxlZExlbiAhPSA4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiTWV0YURhdGEgYnVmZmVyIGlzIHdyb25nIHNpemUhICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihnb3QgJXUgYnl0ZXMsIGV4cGVjdGVkIDgpIiwgaW5IZWFkZXItPm5GaWxsZWRMZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgbVNpZ25hbGxlZEVycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShPTVhfRXZlbnRFcnJvciwgT01YX0Vycm9yVW5kZWZpbmVkLCAwLCAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpbnB1dERhdGEgPQogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdEdyYXBoaWNCdWZmZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1JbnB1dEZyYW1lRGF0YSwgKG1XaWR0aCAqIG1IZWlnaHQgKiAzKSA+PiAxLApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvU29mdEFWQ0VuY29kZXIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvZW5jL1NvZnRBVkNFbmNvZGVyLmgKaW5kZXggZjMxYzFmNC4uODFkZTEwOSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvU29mdEFWQ0VuY29kZXIuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9Tb2Z0QVZDRW5jb2Rlci5oCkBAIC0yNiw4ICsyNiw2IEBACiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotc3RydWN0IE1lZGlhQnVmZmVyOwotCiBzdHJ1Y3QgU29mdEFWQ0VuY29kZXIgOiBwdWJsaWMgTWVkaWFCdWZmZXJPYnNlcnZlciwKICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTb2Z0VmlkZW9FbmNvZGVyT01YQ29tcG9uZW50IHsKICAgICBTb2Z0QVZDRW5jb2RlcigKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvZW5jL3NyYy9maW5kaGFsZnBlbC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9zcmMvZmluZGhhbGZwZWwuY3BwCmluZGV4IDM4YTJhMTUuLjBiOGQ5ZTIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvZW5jL3NyYy9maW5kaGFsZnBlbC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvc3JjL2ZpbmRoYWxmcGVsLmNwcApAQCAtMTUxLDggKzE1MSw3IEBACiAgICAgdWludDggdG1wODsKICAgICBpbnQzMiB0bXAzMjsKICAgICBpbnQxNiB0bXBfaG9yelsxOCoyMl0sICpkc3RfMTYsICpzcmNfMTY7Ci0gICAgcmVnaXN0ZXIgaW50IGEgPSAwLCBiID0gMCwgYyA9IDAsIGQgPSAwLCBlID0gMCwgZiA9IDA7IC8vIHRlbXAgcmVnaXN0ZXIKLSAgICBpbnQgbXNrOworICAgIGludCBhID0gMCwgYiA9IDAsIGMgPSAwLCBkID0gMCwgZSA9IDAsIGYgPSAwOyAvLyB0ZW1wCiAgICAgaW50IGksIGo7CiAKICAgICAvKiBmaXJzdCBjb3B5IGZ1bGwtcGVsIHRvIHRoZSBmaXJzdCBhcnJheSAqLwpAQCAtMzc5LDcgKzM3OCw2IEBACiAgICAgLy8gb25lIGNhbiBqdXN0IHVzZSB0aGUgYWJvdmUgY29kZSBhbmQgY2hhbmdlIHRoZSBmb3IoaT0yIHRvIGZvcihpPTE4CiAgICAgZm9yIChpID0gMTY7IGkgPiAwOyBpIC09IDQpCiAgICAgewotICAgICAgICBtc2sgPSAwOwogICAgICAgICBmb3IgKGogPSAxNzsgaiA+IDA7IGotLSkKICAgICAgICAgewogICAgICAgICAgICAgYSA9ICooKHVpbnQzMiopcmVmKTsgLyogbG9hZCA0IGJ5dGVzICovCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9zcmMvaW5pdC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9zcmMvaW5pdC5jcHAKaW5kZXggYzI1OGI1Ny4uNmUxNDEzYSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvc3JjL2luaXQuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9hdmMvZW5jL3NyYy9pbml0LmNwcApAQCAtMTc3LDEwICsxNzcsNiBAQAogICAgICAgICAgICAgc2VxUGFyYW0tPm9mZnNldF9mb3Jfbm9uX3JlZl9waWMgPSBleHRTLT5vZmZzZXRfZm9yX25vbl9yZWZfcGljOwogICAgICAgICAgICAgc2VxUGFyYW0tPm9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZCA9IGV4dFMtPm9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZDsKICAgICAgICAgICAgIHNlcVBhcmFtLT5udW1fcmVmX2ZyYW1lc19pbl9waWNfb3JkZXJfY250X2N5Y2xlID0gZXh0Uy0+bnVtX3JlZl9mcmFtZXNfaW5fcGljX29yZGVyX2NudF9jeWNsZTsKLSAgICAgICAgICAgIGlmIChleHRTLT5vZmZzZXRfZm9yX3JlZl9mcmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBBVkNFTkNfRU5DUEFSQU1fTUVNX0ZBSUw7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCAoaW50KSBleHRTLT5udW1fcmVmX2ZyYW1lczsgaWkrKykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBzZXFQYXJhbS0+b2Zmc2V0X2Zvcl9yZWZfZnJhbWVbaWldID0gZXh0Uy0+b2Zmc2V0X2Zvcl9yZWZfZnJhbWVbaWldOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL2F2Yy9lbmMvc3JjL3JhdGVfY29udHJvbC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9zcmMvcmF0ZV9jb250cm9sLmNwcAppbmRleCBhYTEzODczLi4wOWRjYzI4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9zcmMvcmF0ZV9jb250cm9sLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvYXZjL2VuYy9zcmMvcmF0ZV9jb250cm9sLmNwcApAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgQVZDUmF0ZUNvbnRyb2wgKnJhdGVDdHJsID0gZW5jdmlkLT5yYXRlQ3RybDsKICAgICBkb3VibGUgTDEsIEwyLCBMMywgYnBwOwogICAgIGludCBxcDsKLSAgICBpbnQgaSwgajsKKyAgICBpbnQgaTsKIAogICAgIHJhdGVDdHJsLT5iYXNpY1VuaXQgPSB2aWRlby0+UGljU2l6ZUluTWJzOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvZmxhYy9lbmMvU29mdEZsYWNFbmNvZGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9mbGFjL2VuYy9Tb2Z0RmxhY0VuY29kZXIuY3BwCmluZGV4IDEzMDEwNjAuLjllZGZmZDIgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9mbGFjL2VuYy9Tb2Z0RmxhY0VuY29kZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9mbGFjL2VuYy9Tb2Z0RmxhY0VuY29kZXIuY3BwCkBAIC00MjEsNyArNDIxLDYgQEAKICAgICB9CiAKICAgICBGTEFDX19ib29sIG9rID0gdHJ1ZTsKLSAgICBGTEFDX19TdHJlYW1FbmNvZGVySW5pdFN0YXR1cyBpbml0U3RhdHVzID0gRkxBQ19fU1RSRUFNX0VOQ09ERVJfSU5JVF9TVEFUVVNfT0s7CiAgICAgb2sgPSBvayAmJiBGTEFDX19zdHJlYW1fZW5jb2Rlcl9zZXRfY2hhbm5lbHMobUZsYWNTdHJlYW1FbmNvZGVyLCBtTnVtQ2hhbm5lbHMpOwogICAgIG9rID0gb2sgJiYgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X3NhbXBsZV9yYXRlKG1GbGFjU3RyZWFtRW5jb2RlciwgbVNhbXBsZVJhdGUpOwogICAgIG9rID0gb2sgJiYgRkxBQ19fc3RyZWFtX2VuY29kZXJfc2V0X2JpdHNfcGVyX3NhbXBsZShtRmxhY1N0cmVhbUVuY29kZXIsIDE2KTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9kZWMvc3JjL2ZpbmRfbWluX21heC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZGVjL3NyYy9maW5kX21pbl9tYXguY3BwCmluZGV4IGEzNTdlYTYuLjFhYzg4YTEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9kZWMvc3JjL2ZpbmRfbWluX21heC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2RlYy9zcmMvZmluZF9taW5fbWF4LmNwcApAQCAtMTM4LDggKzEzOCw4IEBACiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgOyBEZWZpbmUgYWxsIGxvY2FsIHZhcmlhYmxlcwogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotICAgIHJlZ2lzdGVyICAgIHVpbnQgICAgaSwgajsKLSAgICByZWdpc3RlciAgICBpbnQgbWluLCBtYXg7CisgICAgdWludCAgICBpLCBqOworICAgIGludCBtaW4sIG1heDsKIAogICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIDsgRnVuY3Rpb24gYm9keSBoZXJlCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL0FuZHJvaWQubWsgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL0FuZHJvaWQubWsKaW5kZXggYzkwMDZkOS4uNzExNzY5MiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2VuYy9BbmRyb2lkLm1rCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvQW5kcm9pZC5tawpAQCAtMjUsNyArMjUsNyBAQAogCiBMT0NBTF9DRkxBR1MgOj0gXAogICAgIC1EQlhfUkMgXAotICAgIC1ET1NDTF9JTVBPUlRfUkVGPSAtRE9TQ0xfVU5VU0VEX0FSRz0gLURPU0NMX0VYUE9SVF9SRUY9CisgICAgLURPU0NMX0lNUE9SVF9SRUY9IC1EIk9TQ0xfVU5VU0VEX0FSRyh4KT0odm9pZCkoeCkiIC1ET1NDTF9FWFBPUlRfUkVGPQogCiBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKICAgICAkKExPQ0FMX1BBVEgpL3NyYyBcCkBAIC01NSw3ICs1NSw3IEBACiAKIExPQ0FMX0NGTEFHUyA6PSBcCiAgICAgLURCWF9SQyBcCi0gICAgLURPU0NMX0lNUE9SVF9SRUY9IC1ET1NDTF9VTlVTRURfQVJHPSAtRE9TQ0xfRVhQT1JUX1JFRj0KKyAgICAtRE9TQ0xfSU1QT1JUX1JFRj0gLUQiT1NDTF9VTlVTRURfQVJHKHgpPSh2b2lkKSh4KSIgLURPU0NMX0VYUE9SVF9SRUY9CiAKIAogTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL1NvZnRNUEVHNEVuY29kZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2VuYy9Tb2Z0TVBFRzRFbmNvZGVyLmNwcAppbmRleCBmYTM0ODZjLi44MjQwZjgzIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL1NvZnRNUEVHNEVuY29kZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvU29mdE1QRUc0RW5jb2Rlci5jcHAKQEAgLTQxMywxMyArNDEzLDYgQEAKICAgICAgICAgaWYgKGluSGVhZGVyLT5uRmlsbGVkTGVuID4gMCkgewogICAgICAgICAgICAgY29uc3QgdWludDhfdCAqaW5wdXREYXRhID0gTlVMTDsKICAgICAgICAgICAgIGlmIChtSW5wdXREYXRhSXNNZXRhKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGluSGVhZGVyLT5uRmlsbGVkTGVuICE9IDgpIHsKLSAgICAgICAgICAgICAgICAgICAgQUxPR0UoIk1ldGFEYXRhIGJ1ZmZlciBpcyB3cm9uZyBzaXplISAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIihnb3QgJXUgYnl0ZXMsIGV4cGVjdGVkIDgpIiwgaW5IZWFkZXItPm5GaWxsZWRMZW4pOwotICAgICAgICAgICAgICAgICAgICBtU2lnbmFsbGVkRXJyb3IgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBub3RpZnkoT01YX0V2ZW50RXJyb3IsIE9NWF9FcnJvclVuZGVmaW5lZCwgMCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaW5wdXREYXRhID0KICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdEdyYXBoaWNCdWZmZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbUlucHV0RnJhbWVEYXRhLCAobVdpZHRoICogbUhlaWdodCAqIDMpID4+IDEsCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL1NvZnRNUEVHNEVuY29kZXIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvU29mdE1QRUc0RW5jb2Rlci5oCmluZGV4IDI1ZWNkYzkuLjMzODljMzcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvU29mdE1QRUc0RW5jb2Rlci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvU29mdE1QRUc0RW5jb2Rlci5oCkBAIC0yNiw3ICsyNiw2IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHN0cnVjdCBDb2RlY1Byb2ZpbGVMZXZlbDsKLXN0cnVjdCBNZWRpYUJ1ZmZlcjsKIAogc3RydWN0IFNvZnRNUEVHNEVuY29kZXIgOiBwdWJsaWMgU29mdFZpZGVvRW5jb2Rlck9NWENvbXBvbmVudCB7CiAgICAgU29mdE1QRUc0RW5jb2RlcigKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL2RjdC5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy9kY3QuY3BwCmluZGV4IGZhNGFlMjMuLjhkN2Q5ZjEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tNHZfaDI2My9lbmMvc3JjL2RjdC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2VuYy9zcmMvZGN0LmNwcApAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgVm9pZCBCbG9jazR4NERDVF9BQU53U3ViKFNob3J0ICpvdXQsIFVDaGFyICpjdXIsIFVDaGFyICpwcmVkLCBJbnQgd2lkdGgpCiAgICAgewogICAgICAgICBTaG9ydCAqZHN0OwotICAgICAgICByZWdpc3RlciBJbnQgazAsIGsxLCBrMiwgazMsIGs0LCBrNSwgazYsIGs3OworICAgICAgICBJbnQgazAsIGsxLCBrMiwgazMsIGs0LCBrNSwgazYsIGs3OwogICAgICAgICBJbnQgcm91bmQ7CiAgICAgICAgIEludCBrMTIgPSAweDAyMkEwMkQ0OwogICAgICAgICBJbnQgazE0ID0gMHgwMTg4MDUzQTsKQEAgLTQ3Myw3ICs0NzMsNyBAQAogICAgIFZvaWQgQmxvY2syeDJEQ1RfQUFOd1N1YihTaG9ydCAqb3V0LCBVQ2hhciAqY3VyLCBVQ2hhciAqcHJlZCwgSW50IHdpZHRoKQogICAgIHsKICAgICAgICAgU2hvcnQgKmRzdDsKLSAgICAgICAgcmVnaXN0ZXIgSW50IGswLCBrMSwgazIsIGszLCBrNCwgazUsIGs2LCBrNzsKKyAgICAgICAgSW50IGswLCBrMSwgazIsIGszLCBrNCwgazUsIGs2LCBrNzsKICAgICAgICAgSW50IHJvdW5kOwogICAgICAgICBJbnQgazEyID0gMHgwMjJBMDJENDsKICAgICAgICAgSW50IGsxNCA9IDB4MDE4ODAzQjI7CkBAIC04NjMsNyArODYzLDcgQEAKICAgICBWb2lkIEJsb2NrNHg0RENUX0FBTkludHJhKFNob3J0ICpvdXQsIFVDaGFyICpjdXIsIFVDaGFyICpkdW1teTIsIEludCB3aWR0aCkKICAgICB7CiAgICAgICAgIFNob3J0ICpkc3Q7Ci0gICAgICAgIHJlZ2lzdGVyIEludCBrMCwgazEsIGsyLCBrMywgazQsIGs1LCBrNiwgazc7CisgICAgICAgIEludCBrMCwgazEsIGsyLCBrMywgazQsIGs1LCBrNiwgazc7CiAgICAgICAgIEludCByb3VuZDsKICAgICAgICAgSW50IGsxMiA9IDB4MDIyQTAyRDQ7CiAgICAgICAgIEludCBrMTQgPSAweDAxODgwNTNBOwpAQCAtMTA1MCw3ICsxMDUwLDcgQEAKICAgICBWb2lkIEJsb2NrMngyRENUX0FBTkludHJhKFNob3J0ICpvdXQsIFVDaGFyICpjdXIsIFVDaGFyICpkdW1teTIsIEludCB3aWR0aCkKICAgICB7CiAgICAgICAgIFNob3J0ICpkc3Q7Ci0gICAgICAgIHJlZ2lzdGVyIEludCBrMCwgazEsIGsyLCBrMywgazQsIGs1LCBrNiwgazc7CisgICAgICAgIEludCBrMCwgazEsIGsyLCBrMywgazQsIGs1LCBrNiwgazc7CiAgICAgICAgIEludCByb3VuZDsKICAgICAgICAgSW50IGsxMiA9IDB4MDIyQTAyRDQ7CiAgICAgICAgIEludCBrMTQgPSAweDAxODgwM0IyOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL200dl9oMjYzL2VuYy9zcmMvdmxjX2VuY29kZS5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy92bGNfZW5jb2RlLmNwcAppbmRleCA3ZWE1ZGM0Li4yYWVjODE1IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy92bGNfZW5jb2RlLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbTR2X2gyNjMvZW5jL3NyYy92bGNfZW5jb2RlLmNwcApAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgSW50IGluZDsKICAgICBJbnQgbGVuZ3RoOwogCi0gICAgaWYgKChpbnRyYSA9PSAwKSkKKyAgICBpZiAoaW50cmEgPT0gMCkKICAgICAgICAgY2JweSA9IDE1IC0gY2JweTsKIAogICAgIGluZCA9IGNicHk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbXAzZGVjL0FuZHJvaWQubWsgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3MvbXAzZGVjL0FuZHJvaWQubWsKaW5kZXggODI4NDQ5MC4uOTQ4YWUyOSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL21wM2RlYy9BbmRyb2lkLm1rCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9tcDNkZWMvQW5kcm9pZC5tawpAQCAtNDgsNyArNDgsNyBAQAogICAgICAgICAkKExPQ0FMX1BBVEgpL2luY2x1ZGUKIAogTE9DQUxfQ0ZMQUdTIDo9IFwKLSAgICAgICAgLURPU0NMX1VOVVNFRF9BUkc9CisgICAgICAgIC1EIk9TQ0xfVU5VU0VEX0FSRyh4KT0odm9pZCkoeCkiCiAKIExPQ0FMX0NGTEFHUyArPSAtV2Vycm9yCiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9BbmRyb2lkLm1rIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL0FuZHJvaWQubWsKaW5kZXggYmYwM2FkOS4uZTYzYjZiMSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL0FuZHJvaWQubWsKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL0FuZHJvaWQubWsKQEAgLTk0LDYgKzk0LDggQEAKICAgICBMT0NBTF9DX0lOQ0xVREVTICs9ICQoTE9DQUxfUEFUSCkvLi9vbXhkbC9hcm1fbmVvbi9hcGkgXAogICAgICAgICAgICAgICAgICAgICAgICAgJChMT0NBTF9QQVRIKS8uL29teGRsL2FybV9uZW9uL3ZjL2FwaSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAkKExPQ0FMX1BBVEgpLy4vb214ZGwvYXJtX25lb24vdmMvbTRwMTAvYXBpCisgICAgIyBoMjY0YnNkV3JpdGVNYWNyb2Jsb2NrLlMgZG9lcyBub3QgY29tcGlsZSB3aXRoIENsYW5nLgorICAgIExPQ0FMX0NMQU5HX0FTRkxBR1NfYXJtICs9IC1uby1pbnRlZ3JhdGVkLWFzCiAgIGVuZGlmCiBlbmRpZgogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvaW5jL0gyNjRTd0RlY0FwaS5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL2luYy9IMjY0U3dEZWNBcGkuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvaW5jL2Jhc2V0eXBlLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvaW5jL2Jhc2V0eXBlLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL2FwaS9hcm1DT01NLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL2FybUNPTU0uaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL2FybUNPTU1fQml0RGVjX3MuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9hcGkvYXJtQ09NTV9CaXREZWNfcy5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9hcGkvYXJtQ09NTV9CaXRzdHJlYW0uaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9hcGkvYXJtQ09NTV9CaXRzdHJlYW0uaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL2FybUNPTU1fSURDVFRhYmxlLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL2FybUNPTU1fSURDVFRhYmxlLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL2FwaS9hcm1DT01NX0lEQ1Rfcy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL2FwaS9hcm1DT01NX0lEQ1Rfcy5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9hcGkvYXJtQ09NTV9NYXNrVGFibGUuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9hcGkvYXJtQ09NTV9NYXNrVGFibGUuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL2FybUNPTU1fVmVyc2lvbi5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL2FwaS9hcm1DT01NX1ZlcnNpb24uaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL2FybUNPTU1fcy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL2FwaS9hcm1DT01NX3MuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL2FybU9NWC5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL2FwaS9hcm1PTVguaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL29teHR5cGVzLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL29teHR5cGVzLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL2FwaS9vbXh0eXBlc19zLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vYXBpL29teHR5cGVzX3MuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vc3JjL2FybUNPTU0uYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9zcmMvYXJtQ09NTS5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9zcmMvYXJtQ09NTV9CaXRzdHJlYW0uYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi9zcmMvYXJtQ09NTV9CaXRzdHJlYW0uYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vc3JjL2FybUNPTU1fSURDVFRhYmxlLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vc3JjL2FybUNPTU1fSURDVFRhYmxlLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3NyYy9hcm1DT01NX01hc2tUYWJsZS5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3NyYy9hcm1DT01NX01hc2tUYWJsZS5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9hcGkvYXJtVkMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9hcGkvYXJtVkMuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvYXBpL2FybVZDQ09NTV9zLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvYXBpL2FybVZDQ09NTV9zLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL2FwaS9vbXhWQy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL2FwaS9vbXhWQy5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9hcGkvb214VkNfcy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL2FwaS9vbXhWQ19zLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDEwL2FwaS9hcm1WQ000UDEwX0NBVkxDVGFibGVzLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMTAvYXBpL2FybVZDTTRQMTBfQ0FWTENUYWJsZXMuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMTAvc3JjL2FybVZDTTRQMTBfQ0FWTENUYWJsZXMuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAxMC9zcmMvYXJtVkNNNFAxMF9DQVZMQ1RhYmxlcy5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAxMC9zcmMvb214VkNNNFAxMF9EZWJsb2NrQ2hyb21hX0kuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAxMC9zcmMvb214VkNNNFAxMF9EZWJsb2NrQ2hyb21hX0kuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMTAvc3JjL29teFZDTTRQMTBfRGVibG9ja0x1bWFfSS5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDEwL3NyYy9vbXhWQ000UDEwX0RlYmxvY2tMdW1hX0kuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMTAvc3JjL29teFZDTTRQMTBfRGVjb2RlQ2hyb21hRGNDb2VmZnNUb1BhaXJDQVZMQy5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDEwL3NyYy9vbXhWQ000UDEwX0RlY29kZUNocm9tYURjQ29lZmZzVG9QYWlyQ0FWTEMuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMTAvc3JjL29teFZDTTRQMTBfRGVjb2RlQ29lZmZzVG9QYWlyQ0FWTEMuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAxMC9zcmMvb214VkNNNFAxMF9EZWNvZGVDb2VmZnNUb1BhaXJDQVZMQy5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAxMC9zcmMvb214VkNNNFAxMF9JbnRlcnBvbGF0ZUNocm9tYS5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDEwL3NyYy9vbXhWQ000UDEwX0ludGVycG9sYXRlQ2hyb21hLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDIvYXBpL2FybVZDTTRQMl9IdWZmX1RhYmxlc19WTEMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAyL2FwaS9hcm1WQ000UDJfSHVmZl9UYWJsZXNfVkxDLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDIvYXBpL2FybVZDTTRQMl9aaWdaYWdfVGFibGVzLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMi9hcGkvYXJtVkNNNFAyX1ppZ1phZ19UYWJsZXMuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMi9zcmMvYXJtVkNNNFAyX0h1ZmZfVGFibGVzX1ZMQy5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDIvc3JjL2FybVZDTTRQMl9IdWZmX1RhYmxlc19WTEMuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvbTRwMi9zcmMvYXJtVkNNNFAyX0xvb2t1cF9UYWJsZXMuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAyL3NyYy9hcm1WQ000UDJfTG9va3VwX1RhYmxlcy5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAyL3NyYy9hcm1WQ000UDJfWmlnemFnX1RhYmxlcy5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDIvc3JjL2FybVZDTTRQMl9aaWd6YWdfVGFibGVzLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDIvc3JjL29teFZDTTRQMl9EZWNvZGVCbG9ja0NvZWZfSW50ZXIuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAyL3NyYy9vbXhWQ000UDJfRGVjb2RlQmxvY2tDb2VmX0ludGVyLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL200cDIvc3JjL29teFZDTTRQMl9EZWNvZGVCbG9ja0NvZWZfSW50cmEuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9vbXhkbC9hcm1fbmVvbi92Yy9tNHAyL3NyYy9vbXhWQ000UDJfRGVjb2RlQmxvY2tDb2VmX0ludHJhLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL29teGRsL2FybV9uZW9uL3ZjL3NyYy9hcm1WQ19WZXJzaW9uLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvb214ZGwvYXJtX25lb24vdmMvc3JjL2FybVZDX1ZlcnNpb24uYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL0RlY1Rlc3RCZW5jaC5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9EZWNUZXN0QmVuY2guYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL0V2YWx1YXRpb25UZXN0QmVuY2guYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvRXZhbHVhdGlvblRlc3RCZW5jaC5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvVGVzdEJlbmNoTXVsdGlwbGVJbnN0YW5jZS5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9UZXN0QmVuY2hNdWx0aXBsZUluc3RhbmNlLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2J5dGVfc3RyZWFtLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfYnl0ZV9zdHJlYW0uYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfYnl0ZV9zdHJlYW0uaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9ieXRlX3N0cmVhbS5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9jYXZsYy5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2NhdmxjLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2NhdmxjLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfY2F2bGMuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfY2ZnLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfY2ZnLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2NvbmNlYWwuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9jb25jZWFsLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2NvbmNlYWwuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9jb25jZWFsLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2NvbnRhaW5lci5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2NvbnRhaW5lci5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9kZWJsb2NraW5nLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfZGVibG9ja2luZy5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9kZWJsb2NraW5nLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfZGVibG9ja2luZy5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9kcGIuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9kcGIuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfZHBiLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfZHBiLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX2ltYWdlLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfaW1hZ2UuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfaW1hZ2UuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9pbWFnZS5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9pbnRlcl9wcmVkaWN0aW9uLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfaW50ZXJfcHJlZGljdGlvbi5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9pbnRlcl9wcmVkaWN0aW9uLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfaW50ZXJfcHJlZGljdGlvbi5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9pbnRyYV9wcmVkaWN0aW9uLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfaW50cmFfcHJlZGljdGlvbi5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9pbnRyYV9wcmVkaWN0aW9uLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfaW50cmFfcHJlZGljdGlvbi5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9tYWNyb2Jsb2NrX2xheWVyLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfbWFjcm9ibG9ja19sYXllci5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9tYWNyb2Jsb2NrX2xheWVyLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfbWFjcm9ibG9ja19sYXllci5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9uYWxfdW5pdC5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX25hbF91bml0LmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX25hbF91bml0LmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfbmFsX3VuaXQuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfbmVpZ2hib3VyLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfbmVpZ2hib3VyLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX25laWdoYm91ci5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX25laWdoYm91ci5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9waWNfb3JkZXJfY250LmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfcGljX29yZGVyX2NudC5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9waWNfb3JkZXJfY250LmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfcGljX29yZGVyX2NudC5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9waWNfcGFyYW1fc2V0LmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfcGljX3BhcmFtX3NldC5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9waWNfcGFyYW1fc2V0LmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfcGljX3BhcmFtX3NldC5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9yZWNvbnN0cnVjdC5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3JlY29uc3RydWN0LmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3JlY29uc3RydWN0LmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfcmVjb25zdHJ1Y3QuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc2VpLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc2VpLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3NlaS5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3NlaS5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9zZXFfcGFyYW1fc2V0LmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc2VxX3BhcmFtX3NldC5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9zbGljZV9kYXRhLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc2xpY2VfZGF0YS5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9zbGljZV9kYXRhLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc2xpY2VfZGF0YS5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9zbGljZV9ncm91cF9tYXAuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9zbGljZV9ncm91cF9tYXAuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc2xpY2VfZ3JvdXBfbWFwLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc2xpY2VfZ3JvdXBfbWFwLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3NsaWNlX2hlYWRlci5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3NsaWNlX2hlYWRlci5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9zbGljZV9oZWFkZXIuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF9zbGljZV9oZWFkZXIuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc3RvcmFnZS5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3N0b3JhZ2UuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc3RvcmFnZS5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3N0b3JhZ2UuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc3RyZWFtLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2Rfc3RyZWFtLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3N0cmVhbS5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3N0cmVhbS5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF90cmFuc2Zvcm0uYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF90cmFuc2Zvcm0uYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfdHJhbnNmb3JtLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfdHJhbnNmb3JtLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3V0aWwuYyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF91dGlsLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3V0aWwuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF91dGlsLmgKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3ZsYy5jIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3ZsYy5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF92bGMuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2NvZGVjcy9vbjIvaDI2NGRlYy9zb3VyY2UvaDI2NGJzZF92bGMuaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfdnVpLmMgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9jb2RlY3Mvb24yL2gyNjRkZWMvc291cmNlL2gyNjRic2RfdnVpLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3Z1aS5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvY29kZWNzL29uMi9oMjY0ZGVjL3NvdXJjZS9oMjY0YnNkX3Z1aS5oCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHAvTWVkaWFIVFRQLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHAvTWVkaWFIVFRQLmNwcAppbmRleCAyZDI5OTEzLi5iYjg5NTY3IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwL01lZGlhSFRUUC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cC9NZWRpYUhUVFAuY3BwCkBAIC0xMjksNyArMTI5LDcgQEAKIAogICAgICpzaXplID0gbUNhY2hlZFNpemU7CiAKLSAgICByZXR1cm4gKnNpemUgPCAwID8gKnNpemUgOiBPSzsKKyAgICByZXR1cm4gKnNpemUgPCAwID8gKnNpemUgOiBzdGF0aWNfY2FzdDxzdGF0dXNfdD4oT0spOwogfQogCiB1aW50MzJfdCBNZWRpYUhUVFA6OmZsYWdzKCkgewpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvTGl2ZVNlc3Npb24uY3BwCmluZGV4IDlkYWFiM2IuLjE5MDE4OGEgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL0xpdmVTZXNzaW9uLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9MaXZlU2Vzc2lvbi5jcHAKQEAgLTcwOSw3ICs3MDksNiBAQAogICAgICAgICAgICAgQVN0cmluZyB1cmk7CiAgICAgICAgICAgICBtUGxheWxpc3QtPml0ZW1BdChpLCAmdXJpLCAmbWV0YSk7CiAKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmFuZHdpZHRoOwogICAgICAgICAgICAgQ0hFQ0sobWV0YS0+ZmluZEludDMyKCJiYW5kd2lkdGgiLCAoaW50MzJfdCAqKSZpdGVtLm1CYW5kd2lkdGgpKTsKIAogICAgICAgICAgICAgaWYgKGluaXRpYWxCYW5kd2lkdGggPT0gMCkgewpAQCAtOTkwLDkgKzk4OSwxMSBAQAogICAgIHJldHVybiBwbGF5bGlzdDsKIH0KIAorI2lmIDAKIHN0YXRpYyBkb3VibGUgdW5pZm9ybVJhbmQoKSB7CiAgICAgcmV0dXJuIChkb3VibGUpcmFuZCgpIC8gUkFORF9NQVg7CiB9CisjZW5kaWYKIAogc2l6ZV90IExpdmVTZXNzaW9uOjpnZXRCYW5kd2lkdGhJbmRleCgpIHsKICAgICBpZiAobUJhbmR3aWR0aEl0ZW1zLnNpemUoKSA9PSAwKSB7CkBAIC0xNDY5LDcgKzE0NzAsNiBAQAogICAgICAgICBzcDxQbGF5bGlzdEZldGNoZXI+IGZldGNoZXIgPSBhZGRGZXRjaGVyKHVyaS5jX3N0cigpKTsKICAgICAgICAgQ0hFQ0soZmV0Y2hlciAhPSBOVUxMKTsKIAotICAgICAgICBpbnQzMl90IGxhdGVzdFNlcSA9IC0xOwogICAgICAgICBpbnQ2NF90IHN0YXJ0VGltZVVzID0gLTE7CiAgICAgICAgIGludDY0X3Qgc2VnbWVudFN0YXJ0VGltZVVzID0gLTFsbDsKICAgICAgICAgaW50MzJfdCBkaXNjb250aW51aXR5U2VxID0gLTE7CkBAIC0xNDk3LDcgKzE0OTcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUU1BhcnNlcjo6RElTQ09OVElOVUlUWV9USU1FLCBleHRyYSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCB0eXBlOwotICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHNyY1NlZ21lbnRTdGFydFRpbWVVczsKICAgICAgICAgICAgICAgICAgICAgc3A8QU1lc3NhZ2U+IG1ldGE7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwaWNrVHJhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGVjdGluZwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvUGxheWxpc3RGZXRjaGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL1BsYXlsaXN0RmV0Y2hlci5jcHAKaW5kZXggNGE5NzgwMy4uMTUyNmFmMSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvUGxheWxpc3RGZXRjaGVyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9odHRwbGl2ZS9QbGF5bGlzdEZldGNoZXIuY3BwCkBAIC0yOTEsNyArMjkxLDYgQEAKIH0KIAogc3RhdHVzX3QgUGxheWxpc3RGZXRjaGVyOjpjaGVja0RlY3J5cHRQYWRkaW5nKGNvbnN0IHNwPEFCdWZmZXI+ICZidWZmZXIpIHsKLSAgICBzdGF0dXNfdCBlcnI7CiAgICAgQVN0cmluZyBtZXRob2Q7CiAgICAgQ0hFQ0soYnVmZmVyLT5tZXRhKCktPmZpbmRTdHJpbmcoImNpcGhlci1tZXRob2QiLCAmbWV0aG9kKSk7CiAgICAgaWYgKG1ldGhvZCA9PSAiTk9ORSIpIHsKQEAgLTE1MzYsNyArMTUzNSw3IEBACiAKICAgICAgICAgQ0hFQ0tfRVEoYml0cy5nZXRCaXRzKDEyKSwgMHhmZmZ1KTsKICAgICAgICAgYml0cy5za2lwQml0cygzKTsgIC8vIElELCBsYXllcgotICAgICAgICBib29sIHByb3RlY3Rpb25fYWJzZW50ID0gYml0cy5nZXRCaXRzKDEpICE9IDA7CisgICAgICAgIGJvb2wgcHJvdGVjdGlvbl9hYnNlbnQgX191bnVzZWQgPSBiaXRzLmdldEJpdHMoMSkgIT0gMDsKIAogICAgICAgICB1bnNpZ25lZCBwcm9maWxlID0gYml0cy5nZXRCaXRzKDIpOwogICAgICAgICBDSEVDS19ORShwcm9maWxlLCAzdSk7CkBAIC0xNjc4LDcgKzE2NzcsNyBAQAogfQogCiBpbnQ2NF90IFBsYXlsaXN0RmV0Y2hlcjo6cmVzdW1lVGhyZXNob2xkKGNvbnN0IHNwPEFNZXNzYWdlPiAmbXNnKSB7Ci0gICAgaW50NjRfdCBkdXJhdGlvblVzLCB0aHJlc2hvbGQ7CisgICAgaW50NjRfdCBkdXJhdGlvblVzOwogICAgIGlmIChtc2ctPmZpbmRJbnQ2NCgiZHVyYXRpb25VcyIsICZkdXJhdGlvblVzKSAmJiBkdXJhdGlvblVzID4gMCkgewogICAgICAgICByZXR1cm4ga051bVNraXBGcmFtZXMgKiBkdXJhdGlvblVzOwogICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2h0dHBsaXZlL1BsYXlsaXN0RmV0Y2hlci5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvUGxheWxpc3RGZXRjaGVyLmgKaW5kZXggNjcxNjFhOS4uNGUxNWY4NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvUGxheWxpc3RGZXRjaGVyLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaHR0cGxpdmUvUGxheWxpc3RGZXRjaGVyLmgKQEAgLTMxLDcgKzMxLDcgQEAKIHN0cnVjdCBIVFRQQmFzZTsKIHN0cnVjdCBMaXZlRGF0YVNvdXJjZTsKIHN0cnVjdCBNM1VQYXJzZXI7Ci1zdHJ1Y3QgU3RyaW5nODsKK2NsYXNzIFN0cmluZzg7CiAKIHN0cnVjdCBQbGF5bGlzdEZldGNoZXIgOiBwdWJsaWMgQUhhbmRsZXIgewogICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IGtNaW5CdWZmZXJlZER1cmF0aW9uVXM7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pZDMvSUQzLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2lkMy9JRDMuY3BwCmluZGV4IDdmMjIxYTAuLmQ5NDkxZDYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2lkMy9JRDMuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2lkMy9JRDMuY3BwCkBAIC02MzAsNyArNjMwLDEwIEBACiAgICAgICAgICAgICAgICAgfCAobVBhcmVudC5tRGF0YVttT2Zmc2V0ICsgNF0gPDwgOCkKICAgICAgICAgICAgICAgICB8IG1QYXJlbnQubURhdGFbbU9mZnNldCArIDVdOwogCi0gICAgICAgICAgICBtRnJhbWVTaXplICs9IDY7CisgICAgICAgICAgICBpZiAobUZyYW1lU2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbUZyYW1lU2l6ZSArPSA2OyAvLyBhZGQgdGFnIGlkIGFuZCBzaXplIGZpZWxkCiAKICAgICAgICAgICAgIGlmIChtT2Zmc2V0ICsgbUZyYW1lU2l6ZSA+IG1QYXJlbnQubVNpemUpIHsKICAgICAgICAgICAgICAgICBBTE9HVigicGFydGlhbCBmcmFtZSBhdCBvZmZzZXQgJXp1IChzaXplID0gJXp1LCBieXRlcy1yZW1haW5pbmcgPSAlenUpIiwKQEAgLTY3MSw3ICs2NzQsMTEgQEAKICAgICAgICAgICAgICAgICBiYXNlU2l6ZSA9IFUzMl9BVCgmbVBhcmVudC5tRGF0YVttT2Zmc2V0ICsgNF0pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBtRnJhbWVTaXplID0gMTAgKyBiYXNlU2l6ZTsKKyAgICAgICAgICAgIGlmIChiYXNlU2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtRnJhbWVTaXplID0gMTAgKyBiYXNlU2l6ZTsgLy8gYWRkIHRhZyBpZCwgc2l6ZSBmaWVsZCBhbmQgZmxhZ3MKIAogICAgICAgICAgICAgaWYgKG1PZmZzZXQgKyBtRnJhbWVTaXplID4gbVBhcmVudC5tU2l6ZSkgewogICAgICAgICAgICAgICAgIEFMT0dWKCJwYXJ0aWFsIGZyYW1lIGF0IG9mZnNldCAlenUgKHNpemUgPSAlenUsIGJ5dGVzLXJlbWFpbmluZyA9ICV6dSkiLApAQCAtNzkzLDggKzgwMCw4IEBACiAgICAgICAgICAgICBtaW1lLT5zZXRUbygoY29uc3QgY2hhciAqKSZkYXRhWzFdKTsKICAgICAgICAgICAgIHNpemVfdCBtaW1lTGVuID0gc3RybGVuKChjb25zdCBjaGFyICopJmRhdGFbMV0pICsgMTsKIAotICAgICAgICAgICAgdWludDhfdCBwaWNUeXBlID0gZGF0YVsxICsgbWltZUxlbl07CiAjaWYgMAorICAgICAgICAgICAgdWludDhfdCBwaWNUeXBlID0gZGF0YVsxICsgbWltZUxlbl07CiAgICAgICAgICAgICBpZiAocGljVHlwZSAhPSAweDAzKSB7CiAgICAgICAgICAgICAgICAgLy8gRnJvbnQgQ292ZXIgQXJ0CiAgICAgICAgICAgICAgICAgaXQubmV4dCgpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9BQUNFbmNvZGVyLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL0FBQ0VuY29kZXIuaAppbmRleCAzZDVmYzYwLi41MmJlYjBlIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL0FBQ0VuY29kZXIuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL0FBQ0VuY29kZXIuaApAQCAtMjUsNyArMjUsNyBAQAogCiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKLXN0cnVjdCBNZWRpYUJ1ZmZlckdyb3VwOworY2xhc3MgTWVkaWFCdWZmZXJHcm91cDsKIAogY2xhc3MgQUFDRW5jb2RlcjogcHVibGljIE1lZGlhU291cmNlIHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL0lEMy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9JRDMuaAppbmRleCBlODNmM2VmLi5jMmM0YTZkIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL0lEMy5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvSUQzLmgKQEAgLTIyLDggKzIyLDggQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1zdHJ1Y3QgRGF0YVNvdXJjZTsKLXN0cnVjdCBTdHJpbmc4OworY2xhc3MgRGF0YVNvdXJjZTsKK2NsYXNzIFN0cmluZzg7CiAKIHN0cnVjdCBJRDMgewogICAgIGVudW0gVmVyc2lvbiB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL01QRUcyVFNFeHRyYWN0b3IuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvTVBFRzJUU0V4dHJhY3Rvci5oCmluZGV4IGM1ZTg2YTYuLmRiMTE4N2QgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvTVBFRzJUU0V4dHJhY3Rvci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvTVBFRzJUU0V4dHJhY3Rvci5oCkBAIC0yOCw3ICsyOCw3IEBACiBzdHJ1Y3QgQU1lc3NhZ2U7CiBzdHJ1Y3QgQW5vdGhlclBhY2tldFNvdXJjZTsKIHN0cnVjdCBBVFNQYXJzZXI7Ci1zdHJ1Y3QgRGF0YVNvdXJjZTsKK2NsYXNzIERhdGFTb3VyY2U7CiBzdHJ1Y3QgTVBFRzJUU1NvdXJjZTsKIHN0cnVjdCBTdHJpbmc4OwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL01pZGlFeHRyYWN0b3IuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvTWlkaUV4dHJhY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMmFiYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL01pZGlFeHRyYWN0b3IuaApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBNSURJX0VYVFJBQ1RPUl9IXworI2RlZmluZSBNSURJX0VYVFJBQ1RPUl9IXworCisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvRGF0YVNvdXJjZS5oPgorI2luY2x1ZGUgPG1lZGlhL3N0YWdlZnJpZ2h0L01lZGlhRXh0cmFjdG9yLmg+CisjaW5jbHVkZSA8bWVkaWEvc3RhZ2VmcmlnaHQvTWVkaWFCdWZmZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9zdGFnZWZyaWdodC9NZWRpYUJ1ZmZlckdyb3VwLmg+CisjaW5jbHVkZSA8bWVkaWEvTWlkaUlvV3JhcHBlci5oPgorI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KKyNpbmNsdWRlIDxsaWJzb25pdm94L2Vhcy5oPgorCituYW1lc3BhY2UgYW5kcm9pZCB7CisKK2NsYXNzIE1pZGlFbmdpbmUgOiBwdWJsaWMgUmVmQmFzZSB7CitwdWJsaWM6CisgICAgTWlkaUVuZ2luZShjb25zdCBzcDxEYXRhU291cmNlPiAmZGF0YVNvdXJjZSwKKyAgICAgICAgICAgIGNvbnN0IHNwPE1ldGFEYXRhPiAmZmlsZU1ldGFkYXRhLAorICAgICAgICAgICAgY29uc3Qgc3A8TWV0YURhdGE+ICZ0cmFja01ldGFkYXRhKTsKKyAgICB+TWlkaUVuZ2luZSgpOworCisgICAgc3RhdHVzX3QgaW5pdENoZWNrKCk7CisKKyAgICBzdGF0dXNfdCBhbGxvY2F0ZUJ1ZmZlcnMoKTsKKyAgICBzdGF0dXNfdCByZWxlYXNlQnVmZmVycygpOworICAgIHN0YXR1c190IHNlZWtUbyhpbnQ2NF90IHBvc2l0aW9uVXMpOworICAgIE1lZGlhQnVmZmVyKiByZWFkQnVmZmVyKCk7Citwcml2YXRlOgorICAgIHNwPE1pZGlJb1dyYXBwZXI+IG1Jb1dyYXBwZXI7CisgICAgTWVkaWFCdWZmZXJHcm91cCAqbUdyb3VwOworICAgIEVBU19EQVRBX0hBTkRMRSBtRWFzRGF0YTsKKyAgICBFQVNfSEFORExFIG1FYXNIYW5kbGU7CisgICAgY29uc3QgU19FQVNfTElCX0NPTkZJRyogbUVhc0NvbmZpZzsKKyAgICBib29sIG1Jc0luaXRpYWxpemVkOworfTsKKworY2xhc3MgTWlkaUV4dHJhY3RvciA6IHB1YmxpYyBNZWRpYUV4dHJhY3RvciB7CisKK3B1YmxpYzoKKyAgICAvLyBFeHRyYWN0b3IgYXNzdW1lcyBvd25lcnNoaXAgb2Ygc291cmNlCisgICAgTWlkaUV4dHJhY3Rvcihjb25zdCBzcDxEYXRhU291cmNlPiAmc291cmNlKTsKKworICAgIHZpcnR1YWwgc2l6ZV90IGNvdW50VHJhY2tzKCk7CisgICAgdmlydHVhbCBzcDxNZWRpYVNvdXJjZT4gZ2V0VHJhY2soc2l6ZV90IGluZGV4KTsKKyAgICB2aXJ0dWFsIHNwPE1ldGFEYXRhPiBnZXRUcmFja01ldGFEYXRhKHNpemVfdCBpbmRleCwgdWludDMyX3QgZmxhZ3MpOworCisgICAgdmlydHVhbCBzcDxNZXRhRGF0YT4gZ2V0TWV0YURhdGEoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfk1pZGlFeHRyYWN0b3IoKTsKKworcHJpdmF0ZToKKyAgICBzcDxEYXRhU291cmNlPiBtRGF0YVNvdXJjZTsKKyAgICBzdGF0dXNfdCBtSW5pdENoZWNrOworICAgIHNwPE1ldGFEYXRhPiBtRmlsZU1ldGFkYXRhOworCisgICAgLy8gVGhlcmUgaXMgb25seSBvbmUgdHJhY2sKKyAgICBzcDxNZXRhRGF0YT4gbVRyYWNrTWV0YWRhdGE7CisKKyAgICBzcDxNaWRpRW5naW5lPiBtRW5naW5lOworCisgICAgRUFTX0RBVEFfSEFORExFICAgICBtRWFzRGF0YTsKKyAgICBFQVNfSEFORExFICAgICAgICAgIG1FYXNIYW5kbGU7CisgICAgRUFTX1BDTSogICAgICAgICAgICBtQXVkaW9CdWZmZXI7CisgICAgRUFTX0kzMiAgICAgICAgICAgICBtUGxheVRpbWU7CisgICAgRUFTX0kzMiAgICAgICAgICAgICBtRHVyYXRpb247CisgICAgRUFTX1NUQVRFICAgICAgICAgICBtU3RhdGU7CisgICAgRUFTX0ZJTEUgICAgICAgICAgICBtRmlsZUxvY2F0b3I7CisKKyAgICBNaWRpRXh0cmFjdG9yKGNvbnN0IE1pZGlFeHRyYWN0b3IgJik7CisgICAgTWlkaUV4dHJhY3RvciAmb3BlcmF0b3I9KGNvbnN0IE1pZGlFeHRyYWN0b3IgJik7CisKK307CisKK2Jvb2wgU25pZmZNaWRpKGNvbnN0IHNwPERhdGFTb3VyY2U+ICZzb3VyY2UsIFN0cmluZzggKm1pbWVUeXBlLAorICAgICAgICBmbG9hdCAqY29uZmlkZW5jZSwgc3A8QU1lc3NhZ2U+ICopOworCit9ICAvLyBuYW1lc3BhY2UgYW5kcm9pZAorCisjZW5kaWYgIC8vIE1JRElfRVhUUkFDVE9SX0hfCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL2F2Y191dGlscy5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZS9hdmNfdXRpbHMuaAppbmRleCBkNTE3MzIwLi5jMjcwYmMxIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlL2F2Y191dGlscy5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L2luY2x1ZGUvYXZjX3V0aWxzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1zdHJ1Y3QgQUJpdFJlYWRlcjsKK2NsYXNzIEFCaXRSZWFkZXI7CiAKIGVudW0gewogICAgIGtBVkNQcm9maWxlQmFzZWxpbmUgICAgICA9IDB4NDIsCkBAIC00OSw3ICs0OSw3IEBACiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKipuYWxTdGFydCwgc2l6ZV90ICpuYWxTaXplLAogICAgICAgICBib29sIHN0YXJ0Q29kZUZvbGxvd3MgPSBmYWxzZSk7CiAKLXN0cnVjdCBNZXRhRGF0YTsKK2NsYXNzIE1ldGFEYXRhOwogc3A8TWV0YURhdGE+IE1ha2VBVkNDb2RlY1NwZWNpZmljRGF0YShjb25zdCBzcDxBQnVmZmVyPiAmYWNjZXNzVW5pdCk7CiAKIGJvb2wgSXNJRFIoY29uc3Qgc3A8QUJ1ZmZlcj4gJmFjY2Vzc1VuaXQpOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbWF0cm9za2EvTWF0cm9za2FFeHRyYWN0b3IuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbWF0cm9za2EvTWF0cm9za2FFeHRyYWN0b3IuY3BwCmluZGV4IDRmMDg2MmMuLjA3MTJiZjAgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21hdHJvc2thL01hdHJvc2thRXh0cmFjdG9yLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9tYXRyb3NrYS9NYXRyb3NrYUV4dHJhY3Rvci5jcHAKQEAgLTUwMCwxNyArNTAwLDYgQEAKICAgICByZXR1cm4gcHRyWzBdIDw8IDE2IHwgcHRyWzFdIDw8IDggfCBwdHJbMl07CiB9CiAKLXN0YXRpYyBzaXplX3QgY2x6KHVpbnQ4X3QgeCkgewotICAgIHNpemVfdCBudW1MZWFkaW5nWmVyb2VzID0gMDsKLQotICAgIHdoaWxlICghKHggJiAweDgwKSkgewotICAgICAgICArK251bUxlYWRpbmdaZXJvZXM7Ci0gICAgICAgIHggPSB4IDw8IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bUxlYWRpbmdaZXJvZXM7Ci19Ci0KIHZvaWQgTWF0cm9za2FTb3VyY2U6OmNsZWFyUGVuZGluZ0ZyYW1lcygpIHsKICAgICB3aGlsZSAoIW1QZW5kaW5nRnJhbWVzLmVtcHR5KCkpIHsKICAgICAgICAgTWVkaWFCdWZmZXIgKmZyYW1lID0gKm1QZW5kaW5nRnJhbWVzLmJlZ2luKCk7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0FUU1BhcnNlci5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9BVFNQYXJzZXIuaAppbmRleCA1ZDc2Y2JkLi43NWQ3NmRjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0FUU1BhcnNlci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvQVRTUGFyc2VyLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1zdHJ1Y3QgQUJpdFJlYWRlcjsKK2NsYXNzIEFCaXRSZWFkZXI7CiBzdHJ1Y3QgQUJ1ZmZlcjsKIHN0cnVjdCBNZWRpYVNvdXJjZTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9FU1F1ZXVlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5jcHAKaW5kZXggMmVkM2NjYy4uYTYwNTU5NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9FU1F1ZXVlLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0VTUXVldWUuY3BwCkBAIC02Myw4ICs2Myw2IEBACiAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnB0ciwgc2l6ZV90IHNpemUsIHNwPE1ldGFEYXRhPiAqbWV0YURhdGEpIHsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhbm5lbENvdW50VGFibGVbXSA9IHsyLCAxLCAyLCAzLCAzLCA0LCA0LCA1fTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2FtcGxpbmdSYXRlVGFibGVbXSA9IHs0ODAwMCwgNDQxMDAsIDMyMDAwfTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmF0ZXNbXSA9IHszMiwgNDAsIDQ4LCA1NiwgNjQsIDgwLCA5NiwgMTEyLCAxMjgsIDE2MCwgMTkyLCAyMjQsIDI1NiwKLSAgICAgICAgICAgIDMyMCwgMzg0LCA0NDgsIDUxMiwgNTc2LCA2NDB9OwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZyYW1lU2l6ZVRhYmxlWzE5XVszXSA9IHsKICAgICAgICAgeyA2NCwgNjksIDk2IH0sCkBAIC04OSw3ICs4Nyw2IEBACiAgICAgfTsKIAogICAgIEFCaXRSZWFkZXIgYml0cyhwdHIsIHNpemUpOwotICAgIHVuc2lnbmVkIHN5bmNTdGFydFBvcyA9IDA7ICAvLyBpbiBieXRlcwogICAgIGlmIChiaXRzLm51bUJpdHNMZWZ0KCkgPCAxNikgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMjEsMTEgKzExOCwxMSBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBic21vZCA9IGJpdHMuZ2V0Qml0cygzKTsKKyAgICB1bnNpZ25lZCBic21vZCBfX3VudXNlZCA9IGJpdHMuZ2V0Qml0cygzKTsKICAgICB1bnNpZ25lZCBhY21vZCA9IGJpdHMuZ2V0Qml0cygzKTsKLSAgICB1bnNpZ25lZCBjbWl4bGV2ID0gMDsKLSAgICB1bnNpZ25lZCBzdXJtaXhsZXYgPSAwOwotICAgIHVuc2lnbmVkIGRzdXJtb2QgPSAwOworICAgIHVuc2lnbmVkIGNtaXhsZXYgX191bnVzZWQgPSAwOworICAgIHVuc2lnbmVkIHN1cm1peGxldiBfX3VudXNlZCA9IDA7CisgICAgdW5zaWduZWQgZHN1cm1vZCBfX3VudXNlZCA9IDA7CiAKICAgICBpZiAoKGFjbW9kICYgMSkgPiAwICYmIGFjbW9kICE9IDEpIHsKICAgICAgICAgaWYgKGJpdHMubnVtQml0c0xlZnQoKSA8IDIpIHsKQEAgLTU1Niw3ICs1NTMsNyBAQAogICAgIENIRUNLX0VRKGJpdHMuZ2V0Qml0cyg4KSwgMHhhMCk7CiAgICAgdW5zaWduZWQgbnVtQVVzID0gYml0cy5nZXRCaXRzKDgpOwogICAgIGJpdHMuc2tpcEJpdHMoOCk7Ci0gICAgdW5zaWduZWQgcXVhbnRpemF0aW9uX3dvcmRfbGVuZ3RoID0gYml0cy5nZXRCaXRzKDIpOworICAgIHVuc2lnbmVkIHF1YW50aXphdGlvbl93b3JkX2xlbmd0aCBfX3VudXNlZCA9IGJpdHMuZ2V0Qml0cygyKTsKICAgICB1bnNpZ25lZCBhdWRpb19zYW1wbGluZ19mcmVxdWVuY3kgPSBiaXRzLmdldEJpdHMoMyk7CiAgICAgdW5zaWduZWQgbnVtX2NoYW5uZWxzID0gYml0cy5nZXRCaXRzKDMpOwogCkBAIC02MzQsNyArNjMxLDcgQEAKIAogICAgICAgICBDSEVDS19FUShiaXRzLmdldEJpdHMoMTIpLCAweGZmZnUpOwogICAgICAgICBiaXRzLnNraXBCaXRzKDMpOyAgLy8gSUQsIGxheWVyCi0gICAgICAgIGJvb2wgcHJvdGVjdGlvbl9hYnNlbnQgPSBiaXRzLmdldEJpdHMoMSkgIT0gMDsKKyAgICAgICAgYm9vbCBwcm90ZWN0aW9uX2Fic2VudCBfX3VudXNlZCA9IGJpdHMuZ2V0Qml0cygxKSAhPSAwOwogCiAgICAgICAgIGlmIChtRm9ybWF0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIHByb2ZpbGUgPSBiaXRzLmdldEJpdHMoMik7CkBAIC02ODMsNyArNjgwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgc2l6ZV90IGhlYWRlclNpemUgPSBwcm90ZWN0aW9uX2Fic2VudCA/IDcgOiA5OworICAgICAgICBzaXplX3QgaGVhZGVyU2l6ZSBfX3VudXNlZCA9IHByb3RlY3Rpb25fYWJzZW50ID8gNyA6IDk7CiAKICAgICAgICAgb2Zmc2V0ICs9IGFhY19mcmFtZV9sZW5ndGg7CiAgICAgICAgIC8vIFRPRE86IG1vdmUgYmFjayB0byBjb25jYXRlbmF0aW9uIHdoZW4gY29kZWMgY2FuIHN1cHBvcnQgYXJiaXRyYXJ5IGlucHV0IGJ1ZmZlcnMuCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL0VTUXVldWUuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5oCmluZGV4IDdjODFmZjAuLmViNGIxYzkgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvRVNRdWV1ZS5oCkBAIC0yNiw3ICsyNiw3IEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIHN0cnVjdCBBQnVmZmVyOwotc3RydWN0IE1ldGFEYXRhOworY2xhc3MgTWV0YURhdGE7CiAKIHN0cnVjdCBFbGVtZW50YXJ5U3RyZWFtUXVldWUgewogICAgIGVudW0gTW9kZSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL01QRUcyVFNFeHRyYWN0b3IuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvbXBlZzJ0cy9NUEVHMlRTRXh0cmFjdG9yLmNwcAppbmRleCAzNWNhMTE4Li4xZjQzZDZkIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9tcGVnMnRzL01QRUcyVFNFeHRyYWN0b3IuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L21wZWcydHMvTVBFRzJUU0V4dHJhY3Rvci5jcHAKQEAgLTE1OSw3ICsxNTksNiBAQAogICAgIGludCBudW1QYWNrZXRzUGFyc2VkID0gMDsKIAogICAgIHdoaWxlIChmZWVkTW9yZSgpID09IE9LKSB7Ci0gICAgICAgIEFUU1BhcnNlcjo6U291cmNlVHlwZSB0eXBlOwogICAgICAgICBpZiAoaGF2ZUF1ZGlvICYmIGhhdmVWaWRlbykgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC9PTVguY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L09NWC5jcHAKaW5kZXggNmQ0NmVlZS4uZjhkMzhmZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L09NWC5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L09NWC5jcHAKQEAgLTI0NSw4ICsyNDUsOCBAQAogCiAgICAgaW5zdGFuY2UtPnNldEhhbmRsZSgqbm9kZSwgaGFuZGxlKTsKIAotICAgIG1MaXZlTm9kZXMuYWRkKG9ic2VydmVyLT5hc0JpbmRlcigpLCBpbnN0YW5jZSk7Ci0gICAgb2JzZXJ2ZXItPmFzQmluZGVyKCktPmxpbmtUb0RlYXRoKHRoaXMpOworICAgIG1MaXZlTm9kZXMuYWRkKElJbnRlcmZhY2U6OmFzQmluZGVyKG9ic2VydmVyKSwgaW5zdGFuY2UpOworICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKG9ic2VydmVyKS0+bGlua1RvRGVhdGgodGhpcyk7CiAKICAgICByZXR1cm4gT0s7CiB9CkBAIC0yNTYsNyArMjU2LDcgQEAKIAogICAgIHsKICAgICAgICAgTXV0ZXg6OkF1dG9sb2NrIGF1dG9Mb2NrKG1Mb2NrKTsKLSAgICAgICAgc3NpemVfdCBpbmRleCA9IG1MaXZlTm9kZXMuaW5kZXhPZktleShpbnN0YW5jZS0+b2JzZXJ2ZXIoKS0+YXNCaW5kZXIoKSk7CisgICAgICAgIHNzaXplX3QgaW5kZXggPSBtTGl2ZU5vZGVzLmluZGV4T2ZLZXkoSUludGVyZmFjZTo6YXNCaW5kZXIoaW5zdGFuY2UtPm9ic2VydmVyKCkpKTsKICAgICAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBjb25jZWl2YWJseSBoYXBwZW4gaWYgdGhlIG9ic2VydmVyIGRpZXMgYXQgcm91Z2hseSB0aGUKICAgICAgICAgICAgIC8vIHNhbWUgdGltZSB0aGF0IGEgY2xpZW50IGF0dGVtcHRzIHRvIGZyZWUgdGhlIG5vZGUgZXhwbGljaXRseS4KQEAgLTI2NSw3ICsyNjUsNyBAQAogICAgICAgICBtTGl2ZU5vZGVzLnJlbW92ZUl0ZW1zQXQoaW5kZXgpOwogICAgIH0KIAotICAgIGluc3RhbmNlLT5vYnNlcnZlcigpLT5hc0JpbmRlcigpLT51bmxpbmtUb0RlYXRoKHRoaXMpOworICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKGluc3RhbmNlLT5vYnNlcnZlcigpKS0+dW5saW5rVG9EZWF0aCh0aGlzKTsKIAogICAgIHN0YXR1c190IGVyciA9IGluc3RhbmNlLT5mcmVlTm9kZShtTWFzdGVyKTsKIApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L1NvZnRWaWRlb0VuY29kZXJPTVhDb21wb25lbnQuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L1NvZnRWaWRlb0VuY29kZXJPTVhDb21wb25lbnQuY3BwCmluZGV4IGIyZDM2MjMuLmQ0ZDYyMTcgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC9Tb2Z0VmlkZW9FbmNvZGVyT01YQ29tcG9uZW50LmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvU29mdFZpZGVvRW5jb2Rlck9NWENvbXBvbmVudC5jcHAKQEAgLTUwMCwxMiArNTAwLDEyIEBACiAgICAgc2l6ZV90IHNyY1N0cmlkZTsKICAgICBzaXplX3Qgc3JjVlN0cmlkZTsKICAgICBpZiAodXNpbmdHcmFwaGljQnVmZmVyKSB7Ci0gICAgICAgIGlmIChzcmNTaXplIDwgNCArIHNpemVvZihHcmFwaGljQnVmZmVyICopKSB7Ci0gICAgICAgICAgICBBTE9HRSgiTWV0YWRhdGEgaXMgdG9vIHNtYWxsICglenUgdnMgJXp1KSIsIHNyY1NpemUsIDQgKyBzaXplb2YoR3JhcGhpY0J1ZmZlciAqKSk7CisgICAgICAgIGlmIChzcmNTaXplIDwgc2l6ZW9mKE9NWF9VMzIpICsgc2l6ZW9mKEdyYXBoaWNCdWZmZXIgKikpIHsKKyAgICAgICAgICAgIEFMT0dFKCJNZXRhZGF0YSBpcyB0b28gc21hbGwgKCV6dSB2cyAlenUpIiwgc3JjU2l6ZSwgc2l6ZW9mKE9NWF9VMzIpICsgc2l6ZW9mKEdyYXBoaWNCdWZmZXIgKikpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBHcmFwaGljQnVmZmVyICpidWZmZXIgPSAqKEdyYXBoaWNCdWZmZXIgKiopKHNyYyArIDQpOworICAgICAgICBHcmFwaGljQnVmZmVyICpidWZmZXIgPSAqKEdyYXBoaWNCdWZmZXIgKiopKHNyYyArIHNpemVvZihPTVhfVTMyKSk7CiAgICAgICAgIGhhbmRsZSA9IGJ1ZmZlci0+aGFuZGxlOwogICAgICAgICBmb3JtYXQgPSBidWZmZXItPmZvcm1hdDsKICAgICAgICAgc3JjU3RyaWRlID0gYnVmZmVyLT5zdHJpZGU7CkBAIC01MTksMTIgKzUxOSwxMiBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIHBhcnQuICBDaGVjayBpZiBhbnlvbmUgdXNlcyB0aGlzLgogCi0gICAgICAgIGlmIChzcmNTaXplIDwgNCArIHNpemVvZihidWZmZXJfaGFuZGxlX3QpKSB7Ci0gICAgICAgICAgICBBTE9HRSgiTWV0YWRhdGEgaXMgdG9vIHNtYWxsICglenUgdnMgJXp1KSIsIHNyY1NpemUsIDQgKyBzaXplb2YoYnVmZmVyX2hhbmRsZV90KSk7CisgICAgICAgIGlmIChzcmNTaXplIDwgc2l6ZW9mKE9NWF9VMzIpICsgc2l6ZW9mKGJ1ZmZlcl9oYW5kbGVfdCkpIHsKKyAgICAgICAgICAgIEFMT0dFKCJNZXRhZGF0YSBpcyB0b28gc21hbGwgKCV6dSB2cyAlenUpIiwgc3JjU2l6ZSwgc2l6ZW9mKE9NWF9VMzIpICsgc2l6ZW9mKGJ1ZmZlcl9oYW5kbGVfdCkpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBoYW5kbGUgPSAqKGJ1ZmZlcl9oYW5kbGVfdCAqKShzcmMgKyA0KTsKKyAgICAgICAgaGFuZGxlID0gKihidWZmZXJfaGFuZGxlX3QgKikoc3JjICsgc2l6ZW9mKE9NWF9VMzIpKTsKICAgICAgICAgLy8gYXNzdW1lIEhBTF9QSVhFTF9GT1JNQVRfUkdCQV84ODg4CiAgICAgICAgIC8vIHRoZXJlIGlzIG5vIHdheSB0byBnZXQgdGhlIHNyYyBzdHJpZGUgd2l0aG91dCB0aGUgZ3JhcGhpYyBidWZmZXIKICAgICAgICAgZm9ybWF0ID0gSEFMX1BJWEVMX0ZPUk1BVF9SR0JBXzg4ODg7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvdGVzdHMvT01YSGFybmVzcy5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9vbXgvdGVzdHMvT01YSGFybmVzcy5jcHAKaW5kZXggZjRkZmQ2Yi4uNjdmZjE0NSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvb214L3Rlc3RzL09NWEhhcm5lc3MuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L29teC90ZXN0cy9PTVhIYXJuZXNzLmNwcApAQCAtMjUzLDI5ICsyNTMsNiBAQAogICAgIHJldHVybiBNZWRpYUV4dHJhY3Rvcjo6Q3JlYXRlKHNvdXJjZSk7CiB9CiAKLXN0YXRpYyBzcDxNZWRpYVNvdXJjZT4gTWFrZVNvdXJjZSgKLSAgICAgICAgY29uc3QgY2hhciAqdXJpLAotICAgICAgICBjb25zdCBjaGFyICptaW1lVHlwZSkgewotICAgIHNwPE1lZGlhRXh0cmFjdG9yPiBleHRyYWN0b3IgPSBDcmVhdGVFeHRyYWN0b3JGcm9tVVJJKHVyaSk7Ci0KLSAgICBpZiAoZXh0cmFjdG9yID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHRyYWN0b3ItPmNvdW50VHJhY2tzKCk7ICsraSkgewotICAgICAgICBzcDxNZXRhRGF0YT4gbWV0YSA9IGV4dHJhY3Rvci0+Z2V0VHJhY2tNZXRhRGF0YShpKTsKLQotICAgICAgICBjb25zdCBjaGFyICp0cmFja01JTUU7Ci0gICAgICAgIENIRUNLKG1ldGEtPmZpbmRDU3RyaW5nKGtLZXlNSU1FVHlwZSwgJnRyYWNrTUlNRSkpOwotCi0gICAgICAgIGlmICghc3RyY2FzZWNtcCh0cmFja01JTUUsIG1pbWVUeXBlKSkgewotICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3Rvci0+Z2V0VHJhY2soaSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQogc3RhdHVzX3QgSGFybmVzczo6dGVzdFN0YXRlVHJhbnNpdGlvbnMoCiAgICAgICAgIGNvbnN0IGNoYXIgKmNvbXBvbmVudE5hbWUsIGNvbnN0IGNoYXIgKmNvbXBvbmVudFJvbGUpIHsKICAgICBpZiAoc3RybmNtcChjb21wb25lbnROYW1lLCAiT01YLiIsIDQpKSB7CmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FBTVJBc3NlbWJsZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BQU1SQXNzZW1ibGVyLmNwcAppbmRleCA5ZTg3MjVhLi5iYjJhMjM4IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FBTVJBc3NlbWJsZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQUFNUkFzc2VtYmxlci5jcHAKQEAgLTE0Myw4ICsxNDMsOCBAQAogICAgICAgICByZXR1cm4gTUFMRk9STUVEX1BBQ0tFVDsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBwYXlsb2FkSGVhZGVyID0gYnVmZmVyLT5kYXRhKClbMF07Ci0gICAgdW5zaWduZWQgQ01SID0gcGF5bG9hZEhlYWRlciA+PiA0OworICAgIHVuc2lnbmVkIHBheWxvYWRIZWFkZXIgX191bnVzZWQgPSBidWZmZXItPmRhdGEoKVswXTsKKyAgICB1bnNpZ25lZCBDTVIgX191bnVzZWQgPSBwYXlsb2FkSGVhZGVyID4+IDQ7CiAKICAgICBWZWN0b3I8dWludDhfdD4gdGFibGVPZkNvbnRlbnRzOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FNUEVHMlRTQXNzZW1ibGVyLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FNUEVHMlRTQXNzZW1ibGVyLmgKaW5kZXggNzEyZTE4ZS4uZjM5YzJiNSAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BTVBFRzJUU0Fzc2VtYmxlci5oCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQU1QRUcyVFNBc3NlbWJsZXIuaApAQCAtMjQsNyArMjQsNyBAQAogCiBzdHJ1Y3QgQU1lc3NhZ2U7CiBzdHJ1Y3QgQVN0cmluZzsKLXN0cnVjdCBNZXRhRGF0YTsKK2NsYXNzIE1ldGFEYXRhOwogCiBzdHJ1Y3QgQU1QRUcyVFNBc3NlbWJsZXIgOiBwdWJsaWMgQVJUUEFzc2VtYmxlciB7CiAgICAgQU1QRUcyVFNBc3NlbWJsZXIoCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FNUEVHNEF1ZGlvQXNzZW1ibGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQU1QRUc0QXVkaW9Bc3NlbWJsZXIuY3BwCmluZGV4IGFhOGZmYzYuLjFmNzYwNjggMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQU1QRUc0QXVkaW9Bc3NlbWJsZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQU1QRUc0QXVkaW9Bc3NlbWJsZXIuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAKIHN0YXRpYyBzdGF0dXNfdCBwYXJzZUdBU3BlY2lmaWNDb25maWcoCiAgICAgICAgIEFCaXRSZWFkZXIgKmJpdHMsCiAgICAgICAgIHVuc2lnbmVkIGF1ZGlvT2JqZWN0VHlwZSwgdW5zaWduZWQgY2hhbm5lbENvbmZpZ3VyYXRpb24pIHsKLSAgICB1bnNpZ25lZCBmcmFtZUxlbmd0aEZsYWcgPSBiaXRzLT5nZXRCaXRzKDEpOworICAgIHVuc2lnbmVkIGZyYW1lTGVuZ3RoRmxhZyBfX3VudXNlZCA9IGJpdHMtPmdldEJpdHMoMSk7CiAgICAgdW5zaWduZWQgZGVwZW5kc09uQ29yZUNvZGVyID0gYml0cy0+Z2V0Qml0cygxKTsKICAgICBpZiAoZGVwZW5kc09uQ29yZUNvZGVyKSB7CiAgICAgICAgIC8qIHVuc2lnbmVkIGNvcmVDb2RlckRlbGF5ID0gKi9iaXRzLT5nZXRCaXRzKDEpOwpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgICAgICAgICAgICAgLy8gQXBwYXJlbnRseSBhbiBleHRlbnNpb24gaXMgYWx3YXlzIGNvbnNpZGVyZWQgYW4gZXZlbgogICAgICAgICAgICAgICAgIC8vIG11bHRpcGxlIG9mIDggYml0cyBsb25nLgogCi0gICAgICAgICAgICAgICAgQUxPR0koIlNraXBwaW5nICVkIGJpdHMgYWZ0ZXIgc3luYyBleHRlbnNpb24iLAorICAgICAgICAgICAgICAgIEFMT0dJKCJTa2lwcGluZyAlenUgYml0cyBhZnRlciBzeW5jIGV4dGVuc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICA4IC0gKG51bUJpdHNJbkV4dGVuc2lvbiAmIDcpKTsKIAogICAgICAgICAgICAgICAgIGJpdHMtPnNraXBCaXRzKDggLSAobnVtQml0c0luRXh0ZW5zaW9uICYgNykpOwpAQCAtNDIyLDcgKzQyMiw3IEBACiAgICAgfQogCiAgICAgaWYgKG9mZnNldCA8IGJ1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgIEFMT0dJKCJpZ25vcmluZyAlZCBieXRlcyBvZiB0cmFpbGluZyBkYXRhIiwgYnVmZmVyLT5zaXplKCkgLSBvZmZzZXQpOworICAgICAgICBBTE9HSSgiaWdub3JpbmcgJXp1IGJ5dGVzIG9mIHRyYWlsaW5nIGRhdGEiLCBidWZmZXItPnNpemUoKSAtIG9mZnNldCk7CiAgICAgfQogICAgIENIRUNLX0xFKG9mZnNldCwgYnVmZmVyLT5zaXplKCkpOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FNUEVHNEVsZW1lbnRhcnlBc3NlbWJsZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BTVBFRzRFbGVtZW50YXJ5QXNzZW1ibGVyLmNwcAppbmRleCA3ZWI2NTQyLi4xNTYwMDRjIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FNUEVHNEVsZW1lbnRhcnlBc3NlbWJsZXIuY3BwCisrKyBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQU1QRUc0RWxlbWVudGFyeUFzc2VtYmxlci5jcHAKQEAgLTM2MCw3ICszNjAsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKG9mZnNldCAhPSBidWZmZXItPnNpemUoKSkgewotICAgICAgICAgICAgQUxPR1coInBvdGVudGlhbGx5IG1hbGZvcm1lZCBwYWNrZXQgKG9mZnNldCAlZCwgc2l6ZSAlZCkiLAorICAgICAgICAgICAgQUxPR1coInBvdGVudGlhbGx5IG1hbGZvcm1lZCBwYWNrZXQgKG9mZnNldCAlenUsIHNpemUgJXp1KSIsCiAgICAgICAgICAgICAgICAgICAgIG9mZnNldCwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BUGFja2V0U291cmNlLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQVBhY2tldFNvdXJjZS5jcHAKaW5kZXggMDlmNTJiYy4uY2ZhZmFhNyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BUGFja2V0U291cmNlLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FQYWNrZXRTb3VyY2UuY3BwCkBAIC0yNzksOCArMjc5LDYgQEAKICAgICAvLyBiZSBlbmNvZGVkLgogICAgIENIRUNLX0xUKDIwICsgY29uZmlnLT5zaXplKCksIDEyOHUpOwogCi0gICAgY29uc3QgdWludDhfdCAqZGF0YSA9IGNvbmZpZy0+ZGF0YSgpOwotCiAgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qga1N0YXRpY0VTRFNbXSA9IHsKICAgICAgICAgMHgwMywgMjIsCiAgICAgICAgIDB4MDAsIDB4MDAsICAgICAvLyBFU19JRApkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BUlRQQ29ubmVjdGlvbi5jcHAgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FSVFBDb25uZWN0aW9uLmNwcAppbmRleCAzNzJmYmU5Li5hNmJkODI0IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FSVFBDb25uZWN0aW9uLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FSVFBDb25uZWN0aW9uLmNwcApAQCAtNjY0LDExICs2NjQsMTAgQEAKIAogICAgIFN0cmVhbUluZm8gKnMgPSAmKml0OwogCi0gICAgc3RhdHVzX3QgZXJyOwogICAgIGlmIChpdC0+bVJUUFNvY2tldCA9PSBpbmRleCkgewotICAgICAgICBlcnIgPSBwYXJzZVJUUChzLCBidWZmZXIpOworICAgICAgICBwYXJzZVJUUChzLCBidWZmZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGVyciA9IHBhcnNlUlRDUChzLCBidWZmZXIpOworICAgICAgICBwYXJzZVJUQ1AocywgYnVmZmVyKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQVJhd0F1ZGlvQXNzZW1ibGVyLmggYi9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL0FSYXdBdWRpb0Fzc2VtYmxlci5oCmluZGV4IGVkN2FmMDguLmJjMWRlYTYgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvQVJhd0F1ZGlvQXNzZW1ibGVyLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9BUmF3QXVkaW9Bc3NlbWJsZXIuaApAQCAtMjQsNyArMjQsNyBAQAogCiBzdHJ1Y3QgQU1lc3NhZ2U7CiBzdHJ1Y3QgQVN0cmluZzsKLXN0cnVjdCBNZXRhRGF0YTsKK2NsYXNzIE1ldGFEYXRhOwogCiBzdHJ1Y3QgQVJhd0F1ZGlvQXNzZW1ibGVyIDogcHVibGljIEFSVFBBc3NlbWJsZXIgewogICAgIEFSYXdBdWRpb0Fzc2VtYmxlcigKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvU0RQTG9hZGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3J0c3AvU0RQTG9hZGVyLmNwcAppbmRleCA0MjRiYWRmLi5hMjRlYjY5IDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC9ydHNwL1NEUExvYWRlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvcnRzcC9TRFBMb2FkZXIuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICAgICAgaGVhZGVycyA9IE5VTEw7CiAgICAgfQogCi0gICAgb2ZmNjRfdCBzZHBTaXplOworICAgIG9mZjY0X3Qgc2RwU2l6ZSA9IDA7CiAgICAgaWYgKGVyciA9PSBPSyAmJiAhbUNhbmNlbGxlZCkgewogICAgICAgICBlcnIgPSBtSFRUUERhdGFTb3VyY2UtPmdldFNpemUoJnNkcFNpemUpOwogCmRpZmYgLS1naXQgYS9tZWRpYS9saWJzdGFnZWZyaWdodC90ZXN0cy9BbmRyb2lkLm1rIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGVzdHMvQW5kcm9pZC5tawppbmRleCA5OWI0ODBhZC4uOGQ2ZmY1YiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGVzdHMvQW5kcm9pZC5taworKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC90ZXN0cy9BbmRyb2lkLm1rCkBAIC0xLDggKzEsNyBAQAogIyBCdWlsZCB0aGUgdW5pdCB0ZXN0cy4KIExPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLWlmbmVxICgkKFRBUkdFVF9TSU1VTEFUT1IpLHRydWUpCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIAogTE9DQUxfTU9EVUxFIDo9IFN1cmZhY2VNZWRpYVNvdXJjZV90ZXN0CiAKQEAgLTIyLDMzICsyMSwyMyBAQAogCWxpYnN0YWdlZnJpZ2h0IFwKIAlsaWJzdGFnZWZyaWdodF9mb3VuZGF0aW9uIFwKIAlsaWJzdGFnZWZyaWdodF9vbXggXAotCWxpYnN0bHBvcnQgXAogCWxpYnN5bmMgXAogCWxpYnVpIFwKIAlsaWJ1dGlscyBcCiAJbGlibG9nCiAKLUxPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gXAotCWxpYmd0ZXN0IFwKLQlsaWJndGVzdF9tYWluIFwKLQogTE9DQUxfQ19JTkNMVURFUyA6PSBcCi0JYmlvbmljIFwKLQliaW9uaWMvbGlic3RkYysrL2luY2x1ZGUgXAotCWV4dGVybmFsL2d0ZXN0L2luY2x1ZGUgXAotCWV4dGVybmFsL3N0bHBvcnQvc3RscG9ydCBcCiAJZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodCBcCiAJZnJhbWV3b3Jrcy9hdi9tZWRpYS9saWJzdGFnZWZyaWdodC9pbmNsdWRlIFwKIAkkKFRPUCkvZnJhbWV3b3Jrcy9uYXRpdmUvaW5jbHVkZS9tZWRpYS9vcGVubWF4IFwKIAogTE9DQUxfMzJfQklUX09OTFkgOj0gdHJ1ZQogCi1pbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKLQotZW5kaWYKK2luY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkKIAogCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogCiBMT0NBTF9NT0RVTEUgOj0gVXRpbHNfdGVzdAogCkBAIC02NCwyMyArNTMsMTQgQEAKIAlsaWJzdGFnZWZyaWdodCBcCiAJbGlic3RhZ2VmcmlnaHRfZm91bmRhdGlvbiBcCiAJbGlic3RhZ2VmcmlnaHRfb214IFwKLQlsaWJzdGxwb3J0IFwKLQotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0JbGliZ3Rlc3QgXAotCWxpYmd0ZXN0X21haW4gXAogCiBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKLQliaW9uaWMgXAotCWJpb25pYy9saWJzdGRjKysvaW5jbHVkZSBcCi0JZXh0ZXJuYWwvZ3Rlc3QvaW5jbHVkZSBcCi0JZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0IFwKIAlmcmFtZXdvcmtzL2F2L2luY2x1ZGUgXAogCWZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQgXAogCWZyYW1ld29ya3MvYXYvbWVkaWEvbGlic3RhZ2VmcmlnaHQvaW5jbHVkZSBcCiAJJChUT1ApL2ZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUvbWVkaWEvb3Blbm1heCBcCiAKLWluY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQoraW5jbHVkZSAkKEJVSUxEX05BVElWRV9URVNUKQogCiAjIEluY2x1ZGUgc3ViZGlyZWN0b3J5IG1ha2VmaWxlcwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3RpbWVkdGV4dC9UaW1lZFRleHREcml2ZXIuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RpbWVkVGV4dERyaXZlci5jcHAKaW5kZXggNzFhYTIxZS4uNTVhOTgwMyAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RpbWVkVGV4dERyaXZlci5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RpbWVkVGV4dERyaXZlci5jcHAKQEAgLTEzMyw3ICsxMzMsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgbVBsYXllci0+c3RhcnQoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdXQ6CisgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBUUkVTUEFTUygpOwogICAgIH0KICAgICByZXR1cm4gcmV0OwpAQCAtMTgxLDcgKzE4MSw3IEBACiAgICAgICAgIGNhc2UgUExBWUlORzoKICAgICAgICAgICAgIG1QbGF5ZXItPnNlZWtUb0FzeW5jKHRpbWVVcyk7CiAgICAgICAgICAgICByZXR1cm4gT0s7Ci0gICAgICAgIGRlZmF1dDoKKyAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFRSRVNQQVNTKCk7CiAgICAgfQogICAgIHJldHVybiBVTktOT1dOX0VSUk9SOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RpbWVkVGV4dFBsYXllci5oIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RpbWVkVGV4dFBsYXllci5oCmluZGV4IGVjOGVkMjUuLjljYjQ5ZWMgMTAwNjQ0Ci0tLSBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3RpbWVkdGV4dC9UaW1lZFRleHRQbGF5ZXIuaAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvVGltZWRUZXh0UGxheWVyLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogbmFtZXNwYWNlIGFuZHJvaWQgewogCi1jbGFzcyBBTWVzc2FnZTsKK3N0cnVjdCBBTWVzc2FnZTsKIGNsYXNzIE1lZGlhUGxheWVyQmFzZTsKIGNsYXNzIFRpbWVkVGV4dERyaXZlcjsKIGNsYXNzIFRpbWVkVGV4dFNvdXJjZTsKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3RpbWVkdGV4dC9UaW1lZFRleHRTUlRTb3VyY2UuaCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3RpbWVkdGV4dC9UaW1lZFRleHRTUlRTb3VyY2UuaAppbmRleCA1OThjMjAwLi4yMzI2NzVlIDEwMDY0NAotLS0gYS9tZWRpYS9saWJzdGFnZWZyaWdodC90aW1lZHRleHQvVGltZWRUZXh0U1JUU291cmNlLmgKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvdGltZWR0ZXh0L1RpbWVkVGV4dFNSVFNvdXJjZS5oCkBAIC0yNSw3ICsyNSw3IEBACiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotY2xhc3MgQVN0cmluZzsKK3N0cnVjdCBBU3RyaW5nOwogY2xhc3MgRGF0YVNvdXJjZTsKIGNsYXNzIE1lZGlhQnVmZmVyOwogY2xhc3MgUGFyY2VsOwpkaWZmIC0tZ2l0IGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvd2VibS9XZWJtV3JpdGVyLmNwcCBiL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3dlYm0vV2VibVdyaXRlci5jcHAKaW5kZXggMDNjZjkyYS4uMDY5OTYxYiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvd2VibS9XZWJtV3JpdGVyLmNwcAorKysgYi9tZWRpYS9saWJzdGFnZWZyaWdodC93ZWJtL1dlYm1Xcml0ZXIuY3BwCkBAIC0zMzMsNyArMzMzLDYgQEAKICAgICBzZXJpYWxpemVDb2RlZFVuc2lnbmVkKHNlZ21lbnRTaXplQ29kZWQsIGJhcnkpOwogICAgIDo6d3JpdGUobUZkLCBiYXJ5LCBzaXplT2Yoa01rdlVua25vd25MZW5ndGgpKTsKIAotICAgIHVpbnQ2NF90IHNpemU7CiAgICAgdWludDY0X3QgZHVyYXRpb25PZmZzZXQgPSBtSW5mb09mZnNldCArIHNpemVPZihrTWt2SW5mbykgKyBzaXplT2YobUluZm9TaXplKQogICAgICAgICArIHNpemVPZihrTWt2U2VnbWVudER1cmF0aW9uKSArIHNpemVPZihzaXplb2YoZG91YmxlKSk7CiAgICAgc3A8V2VibUVsZW1lbnQ+IGR1cmF0aW9uID0gbmV3IFdlYm1GbG9hdCgKZGlmZiAtLWdpdCBhL21lZGlhL2xpYnN0YWdlZnJpZ2h0L3dpZmktZGlzcGxheS9zb3VyY2UvV2lmaURpc3BsYXlTb3VyY2UuY3BwIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvd2lmaS1kaXNwbGF5L3NvdXJjZS9XaWZpRGlzcGxheVNvdXJjZS5jcHAKaW5kZXggZGE0MDVlMi4uMGMzOWNjZiAxMDA2NDQKLS0tIGEvbWVkaWEvbGlic3RhZ2VmcmlnaHQvd2lmaS1kaXNwbGF5L3NvdXJjZS9XaWZpRGlzcGxheVNvdXJjZS5jcHAKKysrIGIvbWVkaWEvbGlic3RhZ2VmcmlnaHQvd2lmaS1kaXNwbGF5L3NvdXJjZS9XaWZpRGlzcGxheVNvdXJjZS5jcHAKQEAgLTQzLDYgKzQzLDEwIEBACiBuYW1lc3BhY2UgYW5kcm9pZCB7CiAKIC8vIHN0YXRpYworY29uc3QgaW50NjRfdCBXaWZpRGlzcGxheVNvdXJjZTo6a1JlYXBlckludGVydmFsVXM7Citjb25zdCBpbnQ2NF90IFdpZmlEaXNwbGF5U291cmNlOjprVGVhcmRvd25UcmlnZ2VyVGltZW91U2VjczsKK2NvbnN0IGludDY0X3QgV2lmaURpc3BsYXlTb3VyY2U6OmtQbGF5YmFja1Nlc3Npb25UaW1lb3V0U2VjczsKK2NvbnN0IGludDY0X3QgV2lmaURpc3BsYXlTb3VyY2U6OmtQbGF5YmFja1Nlc3Npb25UaW1lb3V0VXM7CiBjb25zdCBBU3RyaW5nIFdpZmlEaXNwbGF5U291cmNlOjpzVXNlckFnZW50ID0gTWFrZVVzZXJBZ2VudCgpOwogCiBXaWZpRGlzcGxheVNvdXJjZTo6V2lmaURpc3BsYXlTb3VyY2UoCmRpZmYgLS1naXQgYS9tZWRpYS9tdHAvTXRwRGV2aWNlLmNwcCBiL21lZGlhL210cC9NdHBEZXZpY2UuY3BwCmluZGV4IGUwZDY3OWQuLjNlYWZkNmYgMTAwNjQ0Ci0tLSBhL21lZGlhL210cC9NdHBEZXZpY2UuY3BwCisrKyBiL21lZGlhL210cC9NdHBEZXZpY2UuY3BwCkBAIC0xMzEsMTMgKzEzMSwyMiBAQAogICAgICAgICAgICAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pbl9kZXNjID0gTlVMTDsKICAgICAgICAgICAgIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBfb3V0X2Rlc2MgPSBOVUxMOwogICAgICAgICAgICAgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9pbnRyX2Rlc2MgPSBOVUxMOworICAgICAgICAgICAgLy9VU0IzIGFkZCBVU0JfRFRfU1NfRU5EUE9JTlRfQ09NUCBhcyBjb21wYW5pb24gZGVzY3JpcHRvcjsKKyAgICAgICAgICAgIHN0cnVjdCB1c2Jfc3NfZXBfY29tcF9kZXNjcmlwdG9yICplcF9zc19lcF9jb21wX2Rlc2MgPSBOVUxMOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICAgICAgICAgICBlcCA9IChzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKil1c2JfZGVzY3JpcHRvcl9pdGVyX25leHQoJml0ZXIpOworICAgICAgICAgICAgICAgIGlmIChlcCAmJiBlcC0+YkRlc2NyaXB0b3JUeXBlID09IFVTQl9EVF9TU19FTkRQT0lOVF9DT01QKSB7CisgICAgICAgICAgICAgICAgICAgIEFMT0dEKCJEZXNjcmlwdG9yIHR5cGUgaXMgVVNCX0RUX1NTX0VORFBPSU5UX0NPTVAgZm9yIFVTQjMgXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZXBfc3NfZXBfY29tcF9kZXNjID0gKHVzYl9zc19lcF9jb21wX2Rlc2NyaXB0b3IqKWVwOworICAgICAgICAgICAgICAgICAgICBlcCA9IChzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKil1c2JfZGVzY3JpcHRvcl9pdGVyX25leHQoJml0ZXIpOworICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAoIWVwIHx8IGVwLT5iRGVzY3JpcHRvclR5cGUgIT0gVVNCX0RUX0VORFBPSU5UKSB7CiAgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJlbmRwb2ludHMgbm90IGZvdW5kXG4iKTsKICAgICAgICAgICAgICAgICAgICAgdXNiX2RldmljZV9jbG9zZShkZXZpY2UpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAoZXAtPmJtQXR0cmlidXRlcyA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlcC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKICAgICAgICAgICAgICAgICAgICAgICAgIGVwX2luX2Rlc2MgPSBlcDsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BbmRyb2lkLm1rIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0FuZHJvaWQubWsKaW5kZXggZjAxOTZjNi4uNDRkMjU1MyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0FuZHJvaWQubWsKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0FuZHJvaWQubWsKQEAgLTI5LDYgKzI5LDEyIEBACiAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCisjIENsYW5nKysgYWJvcnRzIG9uIEF1ZGlvTWl4ZXIuY3BwLAorIyBiLzE4MzczODY2LCAiZG8gbm90IGtub3cgaG93IHRvIHNwbGl0IHRoaXMgb3BlcmF0b3IuIgoraWZlcSAoJChmaWx0ZXIgJChUQVJHRVRfQVJDSCksYXJtIGFybTY0KSwkKFRBUkdFVF9BUkNIKSkKKyAgICBMT0NBTF9DTEFORyA6PSBmYWxzZQorZW5kaWYKKwogTE9DQUxfU1JDX0ZJTEVTOj0gICAgICAgICAgICAgICBcCiAgICAgQXVkaW9GbGluZ2VyLmNwcCAgICAgICAgICAgIFwKICAgICBUaHJlYWRzLmNwcCAgICAgICAgICAgICAgICAgXApAQCAtNzQsMTMgKzgwLDYgQEAKIAogTE9DQUxfQ0ZMQUdTICs9IC1EU1RBVEVfUVVFVUVfSU5TVEFOVElBVElPTlM9JyJTdGF0ZVF1ZXVlSW5zdGFudGlhdGlvbnMuY3BwIicKIAotIyBEZWZpbmUgQU5EUk9JRF9TTVAgYXBwcm9wcmlhdGVseS4gVXNlZCB0byBnZXQgaW5saW5lIHRyYWNpbmcgZmFzdC1wYXRoLgotaWZlcSAoJChUQVJHRVRfQ1BVX1NNUCksdHJ1ZSkKLSAgICBMT0NBTF9DRkxBR1MgKz0gLURBTkRST0lEX1NNUD0xCi1lbHNlCi0gICAgTE9DQUxfQ0ZMQUdTICs9IC1EQU5EUk9JRF9TTVA9MAotZW5kaWYKLQogTE9DQUxfQ0ZMQUdTICs9IC1mdmlzaWJpbGl0eT1oaWRkZW4KIAogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvRmxpbmdlci5jcHAgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcAppbmRleCBjY2MwNWExLi45OTNkYjczIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9GbGluZ2VyLmNwcApAQCAtMTIxMSw3ICsxMjExLDcgQEAKIAogICAgICAgICAgICAgbU5vdGlmaWNhdGlvbkNsaWVudHMuYWRkKHBpZCwgbm90aWZpY2F0aW9uQ2xpZW50KTsKIAotICAgICAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gY2xpZW50LT5hc0JpbmRlcigpOworICAgICAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gSUludGVyZmFjZTo6YXNCaW5kZXIoY2xpZW50KTsKICAgICAgICAgICAgIGJpbmRlci0+bGlua1RvRGVhdGgobm90aWZpY2F0aW9uQ2xpZW50KTsKICAgICAgICAgICAgIGNsaWVudEFkZGVkID0gdHJ1ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvTWl4ZXIuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb01peGVyLmgKaW5kZXggM2I5NzJiYi4uZjRmMTQyYiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvTWl4ZXIuaAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9NaXhlci5oCkBAIC0yMSwxNSArMjEsMTUgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAorI2luY2x1ZGUgPGhhcmR3YXJlL2F1ZGlvX2VmZmVjdC5oPgorI2luY2x1ZGUgPG1lZGlhL0F1ZGlvQnVmZmVyUHJvdmlkZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS9uYmFpby9OQkxvZy5oPgorI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgorI2luY2x1ZGUgPHV0aWxzL0NvbXBhdC5oPgogI2luY2x1ZGUgPHV0aWxzL3RocmVhZHMuaD4KIAotI2luY2x1ZGUgPG1lZGlhL0F1ZGlvQnVmZmVyUHJvdmlkZXIuaD4KICNpbmNsdWRlICJBdWRpb1Jlc2FtcGxlci5oIgogCi0jaW5jbHVkZSA8aGFyZHdhcmUvYXVkaW9fZWZmZWN0Lmg+Ci0jaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+Ci0jaW5jbHVkZSA8bWVkaWEvbmJhaW8vTkJMb2cuaD4KLQogLy8gRklYTUUgVGhpcyBpcyBhY3R1YWxseSB1bml0eSBnYWluLCB3aGljaCBtaWdodCBub3QgYmUgbWF4IGluIGZ1dHVyZSwgZXhwcmVzc2VkIGluIFUuMTIKICNkZWZpbmUgTUFYX0dBSU5fSU5UIEF1ZGlvTWl4ZXI6OlVOSVRZX0dBSU5fSU5UCiAKQEAgLTU4LDcgKzU4LDcgQEAKICAgICBzdGF0aWMgY29uc3QgdWludDMyX3QgTUFYX05VTV9DSEFOTkVMU19UT19ET1dOTUlYID0gQVVESU9fQ0hBTk5FTF9DT1VOVF9NQVg7CiAKICAgICBzdGF0aWMgY29uc3QgdWludDE2X3QgVU5JVFlfR0FJTl9JTlQgPSAweDEwMDA7Ci0gICAgc3RhdGljIGNvbnN0IGZsb2F0ICAgIFVOSVRZX0dBSU5fRkxPQVQgPSAxLjBmOworICAgIHN0YXRpYyBjb25zdCBDT05TVEVYUFIgZmxvYXQgVU5JVFlfR0FJTl9GTE9BVCA9IDEuMGY7CiAKICAgICBlbnVtIHsgLy8gbmFtZXMKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvTWl4ZXJPcHMuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb01peGVyT3BzLmgKaW5kZXggZjczNzZhOC4uMjY3ODg1NyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvTWl4ZXJPcHMuaAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9NaXhlck9wcy5oCkBAIC01MiwxNSArNTIsMTIgQEAKICAqCiAgKiBGb3IgaGlnaCBwcmVjaXNpb24gYXVkaW8sIG9ubHkgdGhlIDxUTywgVEksIFRWPiA9IDxmbG9hdCwgZmxvYXQsIGZsb2F0PgogICogbmVlZHMgdG8gYmUgYWNjZWxlcmF0ZWQuIFRoaXMgaXMgcGVyaGFwcyB0aGUgZWFzaWVzdCBmb3JtIHRvIGRvIHF1aWNrbHkgYXMgd2VsbC4KKyAqCisgKiBBIGdlbmVyaWMgdmVyc2lvbiBpcyBOT1QgZGVmaW5lZCB0byBjYXRjaCBhbnkgbWlzdGFrZSBvZiB1c2luZyBpdC4KICAqLwogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVE8sIHR5cGVuYW1lIFRJLCB0eXBlbmFtZSBUVj4KLWlubGluZSBUTyBNaXhNdWwoVEkgdmFsdWUsIFRWIHZvbHVtZSkgewotICAgIENPTVBJTEVfVElNRV9BU1NFUlRfRlVOQ1RJT05fU0NPUEUoZmFsc2UpOwotICAgIC8vIHNob3VsZCBub3QgYmUgaGVyZSA6LSkuCi0gICAgLy8gVG8gYXZvaWQgbWlzdGFrZXMsIHRoaXMgdGVtcGxhdGUgaXMgYWx3YXlzIHNwZWNpYWxpemVkLgotICAgIHJldHVybiB2YWx1ZSAqIHZvbHVtZTsKLX0KK1RPIE1peE11bChUSSB2YWx1ZSwgVFYgdm9sdW1lKTsKIAogdGVtcGxhdGUgPD4KIGlubGluZSBpbnQzMl90IE1peE11bDxpbnQzMl90LCBpbnQxNl90LCBpbnQxNl90PihpbnQxNl90IHZhbHVlLCBpbnQxNl90IHZvbHVtZSkgewpkaWZmIC0tZ2l0IGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb1Jlc2FtcGxlci5jcHAKaW5kZXggMWY3YTYxMy4uNDZlM2Q2YyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyLmNwcAorKysgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9SZXNhbXBsZXIuY3BwCkBAIC0yOSwxNCArMjksMTEgQEAKICNpbmNsdWRlICJBdWRpb1Jlc2FtcGxlckR5bi5oIgogCiAjaWZkZWYgX19hcm1fXwotI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CisgICAgI2RlZmluZSBBU01fQVJNX1JFU0FNUDEgLy8gZW5hYmxlIGFzbSBvcHRpbWlzYXRpb24gZm9yIFJlc2FtcGxlck9yZGVyMQogI2VuZGlmCiAKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAotI2lmZGVmIF9fQVJNX0hBVkVfSEFMRldPUkRfTVVMVElQTFkgLy8gb3B0aW1pemVkIGFzbSBvcHRpb24KLSAgICAjZGVmaW5lIEFTTV9BUk1fUkVTQU1QMSAvLyBlbmFibGUgYXNtIG9wdGltaXNhdGlvbiBmb3IgUmVzYW1wbGVyT3JkZXIxCi0jZW5kaWYgLy8gX19BUk1fSEFWRV9IQUxGV09SRF9NVUxUSVBMWQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBBdWRpb1Jlc2FtcGxlck9yZGVyMSA6IHB1YmxpYyBBdWRpb1Jlc2FtcGxlciB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvQXVkaW9SZXNhbXBsZXIuaCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb1Jlc2FtcGxlci5oCmluZGV4IGNkYzZkOTIuLjA2OWQ5NDYgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb1Jlc2FtcGxlci5oCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb1Jlc2FtcGxlci5oCkBAIC0xOSw3ICsxOSw5IEBACiAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKwogI2luY2x1ZGUgPGN1dGlscy9jb21waWxlci5oPgorI2luY2x1ZGUgPHV0aWxzL0NvbXBhdC5oPgogCiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9CdWZmZXJQcm92aWRlci5oPgogI2luY2x1ZGUgPHN5c3RlbS9hdWRpby5oPgpAQCAtNDcsNyArNDksNyBAQAogICAgICAgICBEWU5fSElHSF9RVUFMSVRZPTcsCiAgICAgfTsKIAotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBVTklUWV9HQUlOX0ZMT0FUID0gMS4wZjsKKyAgICBzdGF0aWMgY29uc3QgQ09OU1RFWFBSIGZsb2F0IFVOSVRZX0dBSU5fRkxPQVQgPSAxLjBmOwogCiAgICAgc3RhdGljIEF1ZGlvUmVzYW1wbGVyKiBjcmVhdGUoYXVkaW9fZm9ybWF0X3QgZm9ybWF0LCBpbnQgaW5DaGFubmVsQ291bnQsCiAgICAgICAgICAgICBpbnQzMl90IHNhbXBsZVJhdGUsIHNyY19xdWFsaXR5IHF1YWxpdHk9REVGQVVMVF9RVUFMSVRZKTsKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb1Jlc2FtcGxlckZpckdlbi5oIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyRmlyR2VuLmgKaW5kZXggZDAyNGIyZi4uZjM3MThiNiAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyRmlyR2VuLmgKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyRmlyR2VuLmgKQEAgLTE3LDYgKzE3LDggQEAKICNpZm5kZWYgQU5EUk9JRF9BVURJT19SRVNBTVBMRVJfRklSX0dFTl9ICiAjZGVmaW5lIEFORFJPSURfQVVESU9fUkVTQU1QTEVSX0ZJUl9HRU5fSAogCisjaW5jbHVkZSAidXRpbHMvQ29tcGF0LmgiCisKIG5hbWVzcGFjZSBhbmRyb2lkIHsKIAogLyoKQEAgLTE4NywyMiArMTg5LDIyIEBACiAKIHRlbXBsYXRlIDxpbnQgTj4KIHN0cnVjdCBJMFRlcm0gewotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgdmFsdWUgPSBJMFRlcm08Ti0xPjo6dmFsdWUgLyAoNC4gKiBOICogTik7CisgICAgc3RhdGljIGNvbnN0IENPTlNURVhQUiBkb3VibGUgdmFsdWUgPSBJMFRlcm08Ti0xPjo6dmFsdWUgLyAoNC4gKiBOICogTik7CiB9OwogCiB0ZW1wbGF0ZSA8Pgogc3RydWN0IEkwVGVybTwwPiB7Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSB2YWx1ZSA9IDEuOworICAgIHN0YXRpYyBjb25zdCBDT05TVEVYUFIgZG91YmxlIHZhbHVlID0gMS47CiB9OwogCiB0ZW1wbGF0ZSA8aW50IE4+CiBzdHJ1Y3QgSTBBVGVybSB7Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSB2YWx1ZSA9IEkwQVRlcm08Ti0xPjo6dmFsdWUgKiAoMi4qTi0xLikgKiAoMi4qTi0xLikgLyAoOC4gKiBOKTsKKyAgICBzdGF0aWMgY29uc3QgQ09OU1RFWFBSIGRvdWJsZSB2YWx1ZSA9IEkwQVRlcm08Ti0xPjo6dmFsdWUgKiAoMi4qTi0xLikgKiAoMi4qTi0xLikgLyAoOC4gKiBOKTsKIH07CiAKIHRlbXBsYXRlIDw+CiBzdHJ1Y3QgSTBBVGVybTwwPiB7IC8vIDEvc3FydCgyKlBJKTsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHZhbHVlID0gMC4zOTg5NDIyODA0MDE0MzI2Nzc5Mzk5NDYwNTk5MzQzODE4Njg0NzU4NTg2MzExNjQ5MzQ2NTc2NjU5MjU7CisgICAgc3RhdGljIGNvbnN0IENPTlNURVhQUiBkb3VibGUgdmFsdWUgPSAwLjM5ODk0MjI4MDQwMTQzMjY3NzkzOTk0NjA1OTkzNDM4MTg2ODQ3NTg1ODYzMTE2NDkzNDY1NzY2NTkyNTsKIH07CiAKICNpZiBVU0VfSE9STkVSU19NRVRIT0QKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9BdWRpb1Jlc2FtcGxlclNpbmMuY3BwIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyU2luYy5jcHAKaW5kZXggZDAzZTU3OC4uZTZmYjc2YyAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyU2luYy5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL0F1ZGlvUmVzYW1wbGVyU2luYy5jcHAKQEAgLTMxLDcgKzMxLDEwIEBACiAKICNpbmNsdWRlICJBdWRpb1Jlc2FtcGxlclNpbmMuaCIKIAotCisjaWYgZGVmaW5lZChfX2NsYW5nX18pICYmICFfX2hhc19idWlsdGluKF9fYnVpbHRpbl9hc3N1bWVfYWxpZ25lZCkKKyNkZWZpbmUgX19idWlsdGluX2Fzc3VtZV9hbGlnbmVkKHAsIGEpIFwKKwkoKCh1aW50cHRyX3QocCkgJSAoYSkpID09IDApID8gKHApIDogKF9fYnVpbHRpbl91bnJlYWNoYWJsZSgpLCAocCkpKQorI2VuZGlmCiAKICNpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fdGh1bWJfXykKICNkZWZpbmUgVVNFX0lOTElORV9BU1NFTUJMWSAodHJ1ZSkKZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9TdGF0ZVF1ZXVlLmNwcCBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9TdGF0ZVF1ZXVlLmNwcAppbmRleCA0MGQ3YmNkLi45ZDQxODhmIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvU3RhdGVRdWV1ZS5jcHAKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL1N0YXRlUXVldWUuY3BwCkBAIC00OCw3ICs0OCw3IEBACiAgICAgLCBtT2JzZXJ2ZXJEdW1wKCZtT2JzZXJ2ZXJEdW1teUR1bXApLCBtTXV0YXRvckR1bXAoJm1NdXRhdG9yRHVtbXlEdW1wKQogI2VuZGlmCiB7Ci0gICAgYXRvbWljX2luaXQoJm1OZXh0LCAwKTsKKyAgICBhdG9taWNfaW5pdCgmbU5leHQsIHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdGF0ZVF1ZXVlPFQ+Ojp+U3RhdGVRdWV1ZSgpCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVGhyZWFkcy5jcHAgYi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIvVGhyZWFkcy5jcHAKaW5kZXggOWZjY2RhMS4uNTEwMjVmZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL1RocmVhZHMuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci9UaHJlYWRzLmNwcApAQCAtMzM4LDcgKzMzOCw3IEBACiAgICAgLy8gZG8gbm90IGxvY2sgdGhlIG11dGV4IGluIGRlc3RydWN0b3IKICAgICByZWxlYXNlV2FrZUxvY2tfbCgpOwogICAgIGlmIChtUG93ZXJNYW5hZ2VyICE9IDApIHsKLSAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gbVBvd2VyTWFuYWdlci0+YXNCaW5kZXIoKTsKKyAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gSUludGVyZmFjZTo6YXNCaW5kZXIobVBvd2VyTWFuYWdlcik7CiAgICAgICAgIGJpbmRlci0+dW5saW5rVG9EZWF0aChtRGVhdGhSZWNpcGllbnQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvZmxpbmdlci90ZXN0cy9BbmRyb2lkLm1rIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL3Rlc3RzL0FuZHJvaWQubWsKaW5kZXggN2JiYTA1Yi4uODYwNGVmNSAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9mbGluZ2VyL3Rlc3RzL0FuZHJvaWQubWsKKysrIGIvc2VydmljZXMvYXVkaW9mbGluZ2VyL3Rlc3RzL0FuZHJvaWQubWsKQEAgLTEwLDE5ICsxMCwxMCBAQAogCWxpYmxvZyBcCiAJbGlidXRpbHMgXAogCWxpYmN1dGlscyBcCi0JbGlic3RscG9ydCBcCiAJbGliYXVkaW91dGlscyBcCiAJbGliYXVkaW9yZXNhbXBsZXIKIAotTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBcCi0JbGliZ3Rlc3QgXAotCWxpYmd0ZXN0X21haW4KLQogTE9DQUxfQ19JTkNMVURFUyA6PSBcCi0JYmlvbmljIFwKLQliaW9uaWMvbGlic3RkYysrL2luY2x1ZGUgXAotCWV4dGVybmFsL2d0ZXN0L2luY2x1ZGUgXAotCWV4dGVybmFsL3N0bHBvcnQvc3RscG9ydCBcCiAJJChjYWxsIGluY2x1ZGUtcGF0aC1mb3IsIGF1ZGlvLXV0aWxzKSBcCiAJZnJhbWV3b3Jrcy9hdi9zZXJ2aWNlcy9hdWRpb2ZsaW5nZXIKIApAQCAtMzIsMjEgKzIzLDI0IEBACiBMT0NBTF9NT0RVTEUgOj0gcmVzYW1wbGVyX3Rlc3RzCiBMT0NBTF9NT0RVTEVfVEFHUyA6PSB0ZXN0cwogCi1pbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKK2luY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkKIAogIwogIyBhdWRpbyBtaXhlciB0ZXN0IHRvb2wKICMKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCisjIENsYW5nKysgYWJvcnRzIG9uIEF1ZGlvTWl4ZXIuY3BwLAorIyBiLzE4MzczODY2LCAiZG8gbm90IGtub3cgaG93IHRvIHNwbGl0IHRoaXMgb3BlcmF0b3IuIgoraWZlcSAoJChmaWx0ZXIgJChUQVJHRVRfQVJDSCksYXJtIGFybTY0KSwkKFRBUkdFVF9BUkNIKSkKKyAgICBMT0NBTF9DTEFORyA6PSBmYWxzZQorZW5kaWYKKwogTE9DQUxfU1JDX0ZJTEVTOj0gXAogCXRlc3QtbWl4ZXIuY3BwIFwKIAkuLi9BdWRpb01peGVyLmNwcC5hcm0gXAogCiBMT0NBTF9DX0lOQ0xVREVTIDo9IFwKLQliaW9uaWMgXAotCWJpb25pYy9saWJzdGRjKysvaW5jbHVkZSBcCi0JZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0IFwKIAkkKGNhbGwgaW5jbHVkZS1wYXRoLWZvciwgYXVkaW8tZWZmZWN0cykgXAogCSQoY2FsbCBpbmNsdWRlLXBhdGgtZm9yLCBhdWRpby11dGlscykgXAogCWZyYW1ld29ya3MvYXYvc2VydmljZXMvYXVkaW9mbGluZ2VyCkBAIC01NSw3ICs0OSw2IEBACiAJbGlic25kZmlsZQogCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IFwKLQlsaWJzdGxwb3J0IFwKIAlsaWJlZmZlY3RzIFwKIAlsaWJuYmFpbyBcCiAJbGliY29tbW9uX3RpbWVfY2xpZW50IFwKQEAgLTcwLDQgKzYzLDYgQEAKIAogTE9DQUxfTU9EVUxFX1RBR1MgOj0gb3B0aW9uYWwKIAorTE9DQUxfQ1hYX1NUTCA6PSBsaWJjKysKKwogaW5jbHVkZSAkKEJVSUxEX0VYRUNVVEFCTEUpCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9BdWRpb1BvbGljeVNlcnZpY2UuY3BwIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvQXVkaW9Qb2xpY3lTZXJ2aWNlLmNwcAppbmRleCA4YTlhYmM5Li5iODAzODBlIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9hdWRpb3BvbGljeS9BdWRpb1BvbGljeVNlcnZpY2UuY3BwCisrKyBiL3NlcnZpY2VzL2F1ZGlvcG9saWN5L0F1ZGlvUG9saWN5U2VydmljZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxoYXJkd2FyZV9sZWdhY3kvcG93ZXIuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb0VmZmVjdC5oPgogI2luY2x1ZGUgPG1lZGlhL0VmZmVjdHNGYWN0b3J5QXBpLmg+CisjaW5jbHVkZSA8bWVkaWEvQXVkaW9QYXJhbWV0ZXIuaD4KIAogI2luY2x1ZGUgPGhhcmR3YXJlL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8c3lzdGVtL2F1ZGlvLmg+CkBAIC0xNjAsNyArMTYxLDcgQEAKIAogICAgICAgICBtTm90aWZpY2F0aW9uQ2xpZW50cy5hZGQodWlkLCBub3RpZmljYXRpb25DbGllbnQpOwogCi0gICAgICAgIHNwPElCaW5kZXI+IGJpbmRlciA9IGNsaWVudC0+YXNCaW5kZXIoKTsKKyAgICAgICAgc3A8SUJpbmRlcj4gYmluZGVyID0gSUludGVyZmFjZTo6YXNCaW5kZXIoY2xpZW50KTsKICAgICAgICAgYmluZGVyLT5saW5rVG9EZWF0aChub3RpZmljYXRpb25DbGllbnQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3NlcnZpY2VzL2F1ZGlvcG9saWN5L0F1ZGlvUG9saWN5U2VydmljZS5oIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvQXVkaW9Qb2xpY3lTZXJ2aWNlLmgKaW5kZXggMDkzNzVjZi4uODAyODRhNCAxMDA2NDQKLS0tIGEvc2VydmljZXMvYXVkaW9wb2xpY3kvQXVkaW9Qb2xpY3lTZXJ2aWNlLmgKKysrIGIvc2VydmljZXMvYXVkaW9wb2xpY3kvQXVkaW9Qb2xpY3lTZXJ2aWNlLmgKQEAgLTMxLDcgKzMxLDkgQEAKICNpbmNsdWRlIDxtZWRpYS9Ub25lR2VuZXJhdG9yLmg+CiAjaW5jbHVkZSA8bWVkaWEvQXVkaW9FZmZlY3QuaD4KICNpbmNsdWRlIDxtZWRpYS9BdWRpb1BvbGljeS5oPgorI2lmZGVmIFVTRV9MRUdBQ1lfQVVESU9fUE9MSUNZCiAjaW5jbHVkZSA8aGFyZHdhcmVfbGVnYWN5L0F1ZGlvUG9saWN5SW50ZXJmYWNlLmg+CisjZW5kaWYKICNpbmNsdWRlICJBdWRpb1BvbGljeUVmZmVjdHMuaCIKICNpbmNsdWRlICJBdWRpb1BvbGljeU1hbmFnZXIuaCIKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmNwcAppbmRleCA3NjQyOGRhLi4xMjMyYzMyIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmNwcApAQCAtNzU1LDcgKzc1NSw3IEBACiAgICAgICAgIE11dGV4OjpBdXRvbG9jayBsb2NrKG1TZXJ2aWNlTG9jayk7CiAgICAgICAgIHNwPEJhc2ljQ2xpZW50PiBjbGllbnRUbXA7CiAgICAgICAgIGlmICghY2FuQ29ubmVjdFVuc2FmZShjYW1lcmFJZCwgY2xpZW50UGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFDbGllbnQtPmFzQmluZGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihjYW1lcmFDbGllbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypvdXQqL2NsaWVudFRtcCkpIHsKICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CiAgICAgICAgIH0gZWxzZSBpZiAoY2xpZW50LmdldCgpICE9IE5VTEwpIHsKQEAgLTgxOCw3ICs4MTgsNyBAQAogICAgICAgICBNdXRleDo6QXV0b2xvY2sgbG9jayhtU2VydmljZUxvY2spOwogICAgICAgICBzcDxCYXNpY0NsaWVudD4gY2xpZW50VG1wOwogICAgICAgICBpZiAoIWNhbkNvbm5lY3RVbnNhZmUoY2FtZXJhSWQsIGNsaWVudFBhY2thZ2VOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhQ2xpZW50LT5hc0JpbmRlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhQ2xpZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qb3V0Ki9jbGllbnRUbXApKSB7CiAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwogICAgICAgICB9IGVsc2UgaWYgKGNsaWVudC5nZXQoKSAhPSBOVUxMKSB7CkBAIC04ODksNyArODg5LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgc3A8QmFzaWNDbGllbnQ+IGNsaWVudDsKICAgICAgICAgICAgIGlmICghY2FuQ29ubmVjdFVuc2FmZShjYW1lcmFJZCwgY2xpZW50UGFja2FnZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FtZXJhQ2ItPmFzQmluZGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIoY2FtZXJhQ2IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qb3V0Ki9jbGllbnQpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKICAgICAgICAgICAgIH0KQEAgLTk2Miw3ICs5NjIsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBzcDxCYXNpY0NsaWVudD4gY2xpZW50OwogICAgICAgICAgICAgaWYgKCFjYW5Db25uZWN0VW5zYWZlKGNhbWVyYUlkLCBjbGllbnRQYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmFDYi0+YXNCaW5kZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihjYW1lcmFDYiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypvdXQqL2NsaWVudCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOwogICAgICAgICAgICAgfQpAQCAtMTAyNCw3ICsxMDI0LDcgQEAKIAogICAgIFZlY3RvcjxzcDxJQ2FtZXJhU2VydmljZUxpc3RlbmVyPiA+OjppdGVyYXRvciBpdCwgZW5kOwogICAgIGZvciAoaXQgPSBtTGlzdGVuZXJMaXN0LmJlZ2luKCk7IGl0ICE9IG1MaXN0ZW5lckxpc3QuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKCgqaXQpLT5hc0JpbmRlcigpID09IGxpc3RlbmVyLT5hc0JpbmRlcigpKSB7CisgICAgICAgIGlmIChJSW50ZXJmYWNlOjphc0JpbmRlcigqaXQpID09IElJbnRlcmZhY2U6OmFzQmluZGVyKGxpc3RlbmVyKSkgewogICAgICAgICAgICAgQUxPR1coIiVzOiBUcmllZCB0byBhZGQgbGlzdGVuZXIgJXAgd2hpY2ggd2FzIGFscmVhZHkgc3Vic2NyaWJlZCIsCiAgICAgICAgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIGxpc3RlbmVyLmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiBBTFJFQURZX0VYSVNUUzsKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiAKICAgICBWZWN0b3I8c3A8SUNhbWVyYVNlcnZpY2VMaXN0ZW5lcj4gPjo6aXRlcmF0b3IgaXQ7CiAgICAgZm9yIChpdCA9IG1MaXN0ZW5lckxpc3QuYmVnaW4oKTsgaXQgIT0gbUxpc3RlbmVyTGlzdC5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoKCppdCktPmFzQmluZGVyKCkgPT0gbGlzdGVuZXItPmFzQmluZGVyKCkpIHsKKyAgICAgICAgaWYgKElJbnRlcmZhY2U6OmFzQmluZGVyKCppdCkgPT0gSUludGVyZmFjZTo6YXNCaW5kZXIobGlzdGVuZXIpKSB7CiAgICAgICAgICAgICBtTGlzdGVuZXJMaXN0LmVyYXNlKGl0KTsKICAgICAgICAgICAgIHJldHVybiBPSzsKICAgICAgICAgfQpAQCAtMTE3MCw3ICsxMTcwLDcgQEAKICAgICAgICAgICAgIC8vIEZvdW5kIG91ciBjYW1lcmEsIGNsZWFyIGFuZCBsZWF2ZS4KICAgICAgICAgICAgIExPRzEoInJlbW92ZUNsaWVudDogY2xlYXIgcHJvICVwIiwgY2xpZW50UHJvLmdldCgpKTsKIAotICAgICAgICAgICAgY2xpZW50UHJvLT5nZXRSZW1vdGVDYWxsYmFjaygpLT5hc0JpbmRlcigpLT51bmxpbmtUb0RlYXRoKHRoaXMpOworICAgICAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIoY2xpZW50UHJvLT5nZXRSZW1vdGVDYWxsYmFjaygpKS0+dW5saW5rVG9EZWF0aCh0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTM2NCw3ICsxMzY0LDggQEAKICAgICAgICAgaW50IGNhbWVyYUlkLCBpbnQgY2FtZXJhRmFjaW5nLAogICAgICAgICBpbnQgY2xpZW50UGlkLCB1aWRfdCBjbGllbnRVaWQsCiAgICAgICAgIGludCBzZXJ2aWNlUGlkKSA6Ci0gICAgICAgIENhbWVyYVNlcnZpY2U6OkJhc2ljQ2xpZW50KGNhbWVyYVNlcnZpY2UsIGNhbWVyYUNsaWVudC0+YXNCaW5kZXIoKSwKKyAgICAgICAgQ2FtZXJhU2VydmljZTo6QmFzaWNDbGllbnQoY2FtZXJhU2VydmljZSwKKyAgICAgICAgICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihjYW1lcmFDbGllbnQpLAogICAgICAgICAgICAgICAgIGNsaWVudFBhY2thZ2VOYW1lLAogICAgICAgICAgICAgICAgIGNhbWVyYUlkLCBjYW1lcmFGYWNpbmcsCiAgICAgICAgICAgICAgICAgY2xpZW50UGlkLCBjbGllbnRVaWQsCkBAIC0xNDc3LDcgKzE0NzgsOSBAQAogCiAgICAgfQogICAgIC8vIEFsd2F5cyBzdG9wIHdhdGNoaW5nLCBldmVuIGlmIG5vIGNhbWVyYSBvcCBpcyBhY3RpdmUKLSAgICBtQXBwT3BzTWFuYWdlci5zdG9wV2F0Y2hpbmdNb2RlKG1PcHNDYWxsYmFjayk7CisgICAgaWYgKG1PcHNDYWxsYmFjayAhPSBOVUxMKSB7CisgICAgICAgIG1BcHBPcHNNYW5hZ2VyLnN0b3BXYXRjaGluZ01vZGUobU9wc0NhbGxiYWNrKTsKKyAgICB9CiAgICAgbU9wc0NhbGxiYWNrLmNsZWFyKCk7CiAKICAgICByZXR1cm4gT0s7CkBAIC0xNTczLDcgKzE1NzYsNyBAQAogICAgICAgICBpbnQgY2xpZW50UGlkLAogICAgICAgICB1aWRfdCBjbGllbnRVaWQsCiAgICAgICAgIGludCBzZXJ2aWNlUGlkKQotICAgICAgICA6IENhbWVyYVNlcnZpY2U6OkJhc2ljQ2xpZW50KGNhbWVyYVNlcnZpY2UsIHJlbW90ZUNhbGxiYWNrLT5hc0JpbmRlcigpLAorICAgICAgICA6IENhbWVyYVNlcnZpY2U6OkJhc2ljQ2xpZW50KGNhbWVyYVNlcnZpY2UsIElJbnRlcmZhY2U6OmFzQmluZGVyKHJlbW90ZUNhbGxiYWNrKSwKICAgICAgICAgICAgICAgICBjbGllbnRQYWNrYWdlTmFtZSwgY2FtZXJhSWQsIGNhbWVyYUZhY2luZywKICAgICAgICAgICAgICAgICBjbGllbnRQaWQsICBjbGllbnRVaWQsIHNlcnZpY2VQaWQpCiB7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9DYW1lcmFTZXJ2aWNlLmgKaW5kZXggYTczMjhjZi4uMTI2ZDhkOSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvQ2FtZXJhU2VydmljZS5oCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL0NhbWVyYVNlcnZpY2UuaApAQCAtMjczLDcgKzI3Myw3IEBACiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIHNwPElCaW5kZXI+IGFzQmluZGVyV3JhcHBlcigpIHsKLSAgICAgICAgICAgIHJldHVybiBhc0JpbmRlcigpOworICAgICAgICAgICAgcmV0dXJuIGFzQmluZGVyKHRoaXMpOwogICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYTJDbGllbnQuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmEyQ2xpZW50LmNwcAppbmRleCBkY2FiNGFkLi4wZWQ1NTg2IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYTJDbGllbnQuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvQ2FtZXJhMkNsaWVudC5jcHAKQEAgLTE2NSw3ICsxNjUsOCBAQAogICAgIFN0cmluZzggcmVzdWx0OwogICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIkNsaWVudDJbJWRdICglcCkgQ2xpZW50OiAlcyBQSUQ6ICVkLCBkdW1wOlxuIiwKICAgICAgICAgICAgIG1DYW1lcmFJZCwKLSAgICAgICAgICAgIGdldFJlbW90ZUNhbGxiYWNrKCktPmFzQmluZGVyKCkuZ2V0KCksCisgICAgICAgICAgICAoZ2V0UmVtb3RlQ2FsbGJhY2soKSAhPSBOVUxMID8KKyAgICAgICAgICAgICAgICAgICAgKElJbnRlcmZhY2U6OmFzQmluZGVyKGdldFJlbW90ZUNhbGxiYWNrKCkpLmdldCgpKSA6IE5VTEwpLAogICAgICAgICAgICAgU3RyaW5nOChtQ2xpZW50UGFja2FnZU5hbWUpLnN0cmluZygpLAogICAgICAgICAgICAgbUNsaWVudFBpZCk7CiAgICAgcmVzdWx0LmFwcGVuZCgiICBTdGF0ZTogIik7CkBAIC01MzEsNyArNTMyLDcgQEAKICAgICBzcDxJQmluZGVyPiBiaW5kZXI7CiAgICAgc3A8QU5hdGl2ZVdpbmRvdz4gd2luZG93OwogICAgIGlmIChidWZmZXJQcm9kdWNlciAhPSAwKSB7Ci0gICAgICAgIGJpbmRlciA9IGJ1ZmZlclByb2R1Y2VyLT5hc0JpbmRlcigpOworICAgICAgICBiaW5kZXIgPSBJSW50ZXJmYWNlOjphc0JpbmRlcihidWZmZXJQcm9kdWNlcik7CiAgICAgICAgIC8vIFVzaW5nIGNvbnRyb2xsZWRCeUFwcCBmbGFnIHRvIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgcXVldWUgcmVtYWlucyBpbgogICAgICAgICAvLyBhc3luYyBtb2RlIGZvciB0aGUgb2xkIGNhbWVyYSBBUEksIHdoZXJlIG1hbnkgYXBwbGljYXRpb25zIGRlcGVuZAogICAgICAgICAvLyBvbiB0aGF0IGJlaGF2aW9yLgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmFDbGllbnQuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9DYW1lcmFDbGllbnQuY3BwCmluZGV4IDFhNGQ5YTYuLmJiYjJmZTAgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvQ2FtZXJhQ2xpZW50LmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL0NhbWVyYUNsaWVudC5jcHAKQEAgLTExOCw3ICsxMTgsOCBAQAogCiAgICAgc2l6ZV90IGxlbiA9IHNucHJpbnRmKGJ1ZmZlciwgU0laRSwgIkNsaWVudFslZF0gKCVwKSBQSUQ6ICVkXG4iLAogICAgICAgICAgICAgbUNhbWVyYUlkLAotICAgICAgICAgICAgZ2V0UmVtb3RlQ2FsbGJhY2soKS0+YXNCaW5kZXIoKS5nZXQoKSwKKyAgICAgICAgICAgIChnZXRSZW1vdGVDYWxsYmFjaygpICE9IE5VTEwgPworICAgICAgICAgICAgICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihnZXRSZW1vdGVDYWxsYmFjaygpKS5nZXQoKSA6IE5VTEwpLAogICAgICAgICAgICAgbUNsaWVudFBpZCk7CiAgICAgbGVuID0gKGxlbiA+IFNJWkUgLSAxKSA/IFNJWkUgLSAxIDogbGVuOwogICAgIHdyaXRlKGZkLCBidWZmZXIsIGxlbik7CkBAIC0yMDUsNyArMjA2LDcgQEAKICAgICB9CiAKICAgICBpZiAobVJlbW90ZUNhbGxiYWNrICE9IDAgJiYKLSAgICAgICAgKGNsaWVudC0+YXNCaW5kZXIoKSA9PSBtUmVtb3RlQ2FsbGJhY2stPmFzQmluZGVyKCkpKSB7CisgICAgICAgIChJSW50ZXJmYWNlOjphc0JpbmRlcihjbGllbnQpID09IElJbnRlcmZhY2U6OmFzQmluZGVyKG1SZW1vdGVDYWxsYmFjaykpKSB7CiAgICAgICAgIExPRzEoIkNvbm5lY3QgdG8gdGhlIHNhbWUgY2xpZW50Iik7CiAgICAgICAgIHJldHVybiBOT19FUlJPUjsKICAgICB9CkBAIC0zMjgsNyArMzI5LDcgQEAKICAgICBzcDxJQmluZGVyPiBiaW5kZXI7CiAgICAgc3A8QU5hdGl2ZVdpbmRvdz4gd2luZG93OwogICAgIGlmIChidWZmZXJQcm9kdWNlciAhPSAwKSB7Ci0gICAgICAgIGJpbmRlciA9IGJ1ZmZlclByb2R1Y2VyLT5hc0JpbmRlcigpOworICAgICAgICBiaW5kZXIgPSBJSW50ZXJmYWNlOjphc0JpbmRlcihidWZmZXJQcm9kdWNlcik7CiAgICAgICAgIC8vIFVzaW5nIGNvbnRyb2xsZWRCeUFwcCBmbGFnIHRvIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgcXVldWUgcmVtYWlucyBpbgogICAgICAgICAvLyBhc3luYyBtb2RlIGZvciB0aGUgb2xkIGNhbWVyYSBBUEksIHdoZXJlIG1hbnkgYXBwbGljYXRpb25zIGRlcGVuZAogICAgICAgICAvLyBvbiB0aGF0IGJlaGF2aW9yLgpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL1BhcmFtZXRlcnMuaCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTEvY2xpZW50Mi9QYXJhbWV0ZXJzLmgKaW5kZXggN2U1YmU4NC4uZTYyOGE3ZSAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMS9jbGllbnQyL1BhcmFtZXRlcnMuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkxL2NsaWVudDIvUGFyYW1ldGVycy5oCkBAIC0xOSwxMSArMTksMTMgQEAKIAogI2luY2x1ZGUgPHN5c3RlbS9ncmFwaGljcy5oPgogCisjaW5jbHVkZSA8dXRpbHMvQ29tcGF0Lmg+CiAjaW5jbHVkZSA8dXRpbHMvRXJyb3JzLmg+CisjaW5jbHVkZSA8dXRpbHMvS2V5ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx1dGlscy9NdXRleC5oPgogI2luY2x1ZGUgPHV0aWxzL1N0cmluZzguaD4KICNpbmNsdWRlIDx1dGlscy9WZWN0b3IuaD4KLSNpbmNsdWRlIDx1dGlscy9LZXllZFZlY3Rvci5oPgorCiAjaW5jbHVkZSA8Y2FtZXJhL0NhbWVyYVBhcmFtZXRlcnMuaD4KICNpbmNsdWRlIDxjYW1lcmEvQ2FtZXJhUGFyYW1ldGVyczIuaD4KICNpbmNsdWRlIDxjYW1lcmEvQ2FtZXJhTWV0YWRhdGEuaD4KQEAgLTE4Nyw3ICsxODksNyBAQAogICAgIHN0YXRpYyBjb25zdCBpbnQgTUFYX0lOSVRJQUxfUFJFVklFV19XSURUSCA9IDE5MjA7CiAgICAgc3RhdGljIGNvbnN0IGludCBNQVhfSU5JVElBTF9QUkVWSUVXX0hFSUdIVCA9IDEwODA7CiAgICAgLy8gQXNwZWN0IHJhdGlvIHRvbGVyYW5jZQotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFID0gMC4wMDE7CisgICAgc3RhdGljIGNvbnN0IENPTlNURVhQUiBmbG9hdCBBU1BFQ1RfUkFUSU9fVE9MRVJBTkNFID0gMC4wMDE7CiAKICAgICAvLyBGdWxsIHN0YXRpYyBjYW1lcmEgaW5mbywgb2JqZWN0IG93bmVkIGJ5IHNvbWVvbmUgZWxzZSwgc3VjaCBhcwogICAgIC8vIENhbWVyYTJEZXZpY2UuCmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkyL0NhbWVyYURldmljZUNsaWVudC5jcHAgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGkyL0NhbWVyYURldmljZUNsaWVudC5jcHAKaW5kZXggZTY4NjViYi4uNmExZWU0NCAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpMi9DYW1lcmFEZXZpY2VDbGllbnQuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaTIvQ2FtZXJhRGV2aWNlQ2xpZW50LmNwcApAQCAtNDIsOCArNDIsMTQgQEAKICAgICAgICAgaW50IGNsaWVudFBpZCwKICAgICAgICAgdWlkX3QgY2xpZW50VWlkLAogICAgICAgICBpbnQgc2VydmljZVBpZCkgOgotICAgIEJhc2ljQ2xpZW50KGNhbWVyYVNlcnZpY2UsIHJlbW90ZUNhbGxiYWNrLT5hc0JpbmRlcigpLCBjbGllbnRQYWNrYWdlTmFtZSwKLSAgICAgICAgICAgICAgICBjYW1lcmFJZCwgY2FtZXJhRmFjaW5nLCBjbGllbnRQaWQsIGNsaWVudFVpZCwgc2VydmljZVBpZCksCisgICAgQmFzaWNDbGllbnQoY2FtZXJhU2VydmljZSwKKyAgICAgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKHJlbW90ZUNhbGxiYWNrKSwKKyAgICAgICAgICAgIGNsaWVudFBhY2thZ2VOYW1lLAorICAgICAgICAgICAgY2FtZXJhSWQsCisgICAgICAgICAgICBjYW1lcmFGYWNpbmcsCisgICAgICAgICAgICBjbGllbnRQaWQsCisgICAgICAgICAgICBjbGllbnRVaWQsCisgICAgICAgICAgICBzZXJ2aWNlUGlkKSwKICAgICBtUmVtb3RlQ2FsbGJhY2socmVtb3RlQ2FsbGJhY2spIHsKIH0KIApAQCAtMTU3LDcgKzE2Myw3IEBACiAgICAgICAgICAgICBpZiAoc3VyZmFjZSA9PSAwKSBjb250aW51ZTsKIAogICAgICAgICAgICAgc3A8SUdyYXBoaWNCdWZmZXJQcm9kdWNlcj4gZ2JwID0gc3VyZmFjZS0+Z2V0SUdyYXBoaWNCdWZmZXJQcm9kdWNlcigpOwotICAgICAgICAgICAgaW50IGlkeCA9IG1TdHJlYW1NYXAuaW5kZXhPZktleShnYnAtPmFzQmluZGVyKCkpOworICAgICAgICAgICAgaW50IGlkeCA9IG1TdHJlYW1NYXAuaW5kZXhPZktleShJSW50ZXJmYWNlOjphc0JpbmRlcihnYnApKTsKIAogICAgICAgICAgICAgLy8gVHJ5aW5nIHRvIHN1Ym1pdCByZXF1ZXN0IHdpdGggc3VyZmFjZSB0aGF0IHdhc24ndCBjcmVhdGVkCiAgICAgICAgICAgICBpZiAoaWR4ID09IE5BTUVfTk9UX0ZPVU5EKSB7CkBAIC0zMjcsNyArMzMzLDcgQEAKIAogICAgIC8vIERvbid0IGNyZWF0ZSBtdWx0aXBsZSBzdHJlYW1zIGZvciB0aGUgc2FtZSB0YXJnZXQgc3VyZmFjZQogICAgIHsKLSAgICAgICAgc3NpemVfdCBpbmRleCA9IG1TdHJlYW1NYXAuaW5kZXhPZktleShidWZmZXJQcm9kdWNlci0+YXNCaW5kZXIoKSk7CisgICAgICAgIHNzaXplX3QgaW5kZXggPSBtU3RyZWFtTWFwLmluZGV4T2ZLZXkoSUludGVyZmFjZTo6YXNCaW5kZXIoYnVmZmVyUHJvZHVjZXIpKTsKICAgICAgICAgaWYgKGluZGV4ICE9IE5BTUVfTk9UX0ZPVU5EKSB7CiAgICAgICAgICAgICBBTE9HVygiJXM6IENhbWVyYSAlZDogQnVmZmVyIHByb2R1Y2VyIGFscmVhZHkgaGFzIGEgc3RyZWFtIGZvciBpdCAiCiAgICAgICAgICAgICAgICAgICAiKElEICV6ZCkiLApAQCAtMzYxLDEyICszNjcsOCBAQAogICAgIGJvb2wgZmxleGlibGVDb25zdW1lciA9IChjb25zdW1lclVzYWdlICYgZGlzYWxsb3dlZEZsYWdzKSA9PSAwICYmCiAgICAgICAgICAgICAoY29uc3VtZXJVc2FnZSAmIGFsbG93ZWRGbGFncykgIT0gMDsKIAotICAgIHNwPElCaW5kZXI+IGJpbmRlcjsKLSAgICBzcDxBTmF0aXZlV2luZG93PiBhbnc7Ci0gICAgaWYgKGJ1ZmZlclByb2R1Y2VyICE9IDApIHsKLSAgICAgICAgYmluZGVyID0gYnVmZmVyUHJvZHVjZXItPmFzQmluZGVyKCk7Ci0gICAgICAgIGFudyA9IG5ldyBTdXJmYWNlKGJ1ZmZlclByb2R1Y2VyLCB1c2VBc3luYyk7Ci0gICAgfQorICAgIHNwPElCaW5kZXI+IGJpbmRlciA9IElJbnRlcmZhY2U6OmFzQmluZGVyKGJ1ZmZlclByb2R1Y2VyKTsKKyAgICBzcDxBTmF0aXZlV2luZG93PiBhbncgPSBuZXcgU3VyZmFjZShidWZmZXJQcm9kdWNlciwgdXNlQXN5bmMpOwogCiAgICAgLy8gVE9ETzogcmVtb3ZlIHcsaCxmIHNpbmNlIHdlIGFyZSBpZ25vcmluZyB0aGVtCiAKQEAgLTQwNyw3ICs0MDksNyBAQAogICAgIHJlcyA9IG1EZXZpY2UtPmNyZWF0ZVN0cmVhbShhbncsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgJnN0cmVhbUlkKTsKIAogICAgIGlmIChyZXMgPT0gT0spIHsKLSAgICAgICAgbVN0cmVhbU1hcC5hZGQoYnVmZmVyUHJvZHVjZXItPmFzQmluZGVyKCksIHN0cmVhbUlkKTsKKyAgICAgICAgbVN0cmVhbU1hcC5hZGQoYmluZGVyLCBzdHJlYW1JZCk7CiAKICAgICAgICAgQUxPR1YoIiVzOiBDYW1lcmEgJWQ6IFN1Y2Nlc3NmdWxseSBjcmVhdGVkIGEgbmV3IHN0cmVhbSBJRCAlZCIsCiAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgbUNhbWVyYUlkLCBzdHJlYW1JZCk7CkBAIC01ODIsNyArNTg0LDggQEAKICAgICBTdHJpbmc4IHJlc3VsdDsKICAgICByZXN1bHQuYXBwZW5kRm9ybWF0KCJDYW1lcmFEZXZpY2VDbGllbnRbJWRdICglcCkgZHVtcDpcbiIsCiAgICAgICAgICAgICBtQ2FtZXJhSWQsCi0gICAgICAgICAgICBnZXRSZW1vdGVDYWxsYmFjaygpLT5hc0JpbmRlcigpLmdldCgpKTsKKyAgICAgICAgICAgIChnZXRSZW1vdGVDYWxsYmFjaygpICE9IE5VTEwgPworICAgICAgICAgICAgICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihnZXRSZW1vdGVDYWxsYmFjaygpKS5nZXQoKSA6IE5VTEwpICk7CiAgICAgcmVzdWx0LmFwcGVuZEZvcm1hdCgiICBDdXJyZW50IGNsaWVudDogJXMgKFBJRCAlZCwgVUlEICV1KVxuIiwKICAgICAgICAgICAgIFN0cmluZzgobUNsaWVudFBhY2thZ2VOYW1lKS5zdHJpbmcoKSwKICAgICAgICAgICAgIG1DbGllbnRQaWQsIG1DbGllbnRVaWQpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpX3Byby9Qcm9DYW1lcmEyQ2xpZW50LmNwcCBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2FwaV9wcm8vUHJvQ2FtZXJhMkNsaWVudC5jcHAKaW5kZXggMmVhNDYwZi4uNTllNTA4MyAxMDA2NDQKLS0tIGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvYXBpX3Byby9Qcm9DYW1lcmEyQ2xpZW50LmNwcAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9hcGlfcHJvL1Byb0NhbWVyYTJDbGllbnQuY3BwCkBAIC0yNzYsNyArMjc2LDcgQEAKICAgICBzcDxJQmluZGVyPiBiaW5kZXI7CiAgICAgc3A8QU5hdGl2ZVdpbmRvdz4gd2luZG93OwogICAgIGlmIChidWZmZXJQcm9kdWNlciAhPSAwKSB7Ci0gICAgICAgIGJpbmRlciA9IGJ1ZmZlclByb2R1Y2VyLT5hc0JpbmRlcigpOworICAgICAgICBiaW5kZXIgPSBJSW50ZXJmYWNlOjphc0JpbmRlcihidWZmZXJQcm9kdWNlcik7CiAgICAgICAgIHdpbmRvdyA9IG5ldyBTdXJmYWNlKGJ1ZmZlclByb2R1Y2VyKTsKICAgICB9CiAKQEAgLTMzNCw3ICszMzQsOCBAQAogICAgIFN0cmluZzggcmVzdWx0OwogICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIlByb0NhbWVyYTJDbGllbnRbJWRdICglcCkgUElEOiAlZCwgZHVtcDpcbiIsCiAgICAgICAgICAgICBtQ2FtZXJhSWQsCi0gICAgICAgICAgICBnZXRSZW1vdGVDYWxsYmFjaygpLT5hc0JpbmRlcigpLmdldCgpLAorICAgICAgICAgICAgKGdldFJlbW90ZUNhbGxiYWNrKCkgIT0gTlVMTCA/CisgICAgICAgICAgICAgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKGdldFJlbW90ZUNhbGxiYWNrKCkpLmdldCgpIDogTlVMTCksCiAgICAgICAgICAgICBtQ2xpZW50UGlkKTsKICAgICByZXN1bHQuYXBwZW5kKCIgIFN0YXRlOlxuIik7CiAgICAgd3JpdGUoZmQsIHJlc3VsdC5zdHJpbmcoKSwgcmVzdWx0LnNpemUoKSk7CmRpZmYgLS1naXQgYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuY3BwIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYTJDbGllbnRCYXNlLmNwcAppbmRleCBkNmRiMTUxLi40NTNjOGJkIDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuY3BwCisrKyBiL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2NvbW1vbi9DYW1lcmEyQ2xpZW50QmFzZS5jcHAKQEAgLTEyOCw3ICsxMjgsOCBAQAogICAgIFN0cmluZzggcmVzdWx0OwogICAgIHJlc3VsdC5hcHBlbmRGb3JtYXQoIkNhbWVyYTJDbGllbnRCYXNlWyVkXSAoJXApIFBJRDogJWQsIGR1bXA6XG4iLAogICAgICAgICAgICAgVENsaWVudEJhc2U6Om1DYW1lcmFJZCwKLSAgICAgICAgICAgIFRDbGllbnRCYXNlOjpnZXRSZW1vdGVDYWxsYmFjaygpLT5hc0JpbmRlcigpLmdldCgpLAorICAgICAgICAgICAgKFRDbGllbnRCYXNlOjpnZXRSZW1vdGVDYWxsYmFjaygpICE9IE5VTEwgPworICAgICAgICAgICAgICAgICAgICBJSW50ZXJmYWNlOjphc0JpbmRlcihUQ2xpZW50QmFzZTo6Z2V0UmVtb3RlQ2FsbGJhY2soKSkuZ2V0KCkgOiBOVUxMKSwKICAgICAgICAgICAgIFRDbGllbnRCYXNlOjptQ2xpZW50UGlkKTsKICAgICByZXN1bHQuYXBwZW5kKCIgIFN0YXRlOiAiKTsKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvY29tbW9uL0NhbWVyYTJDbGllbnRCYXNlLmggYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuaAppbmRleCBkMTk4ZTRlLi5lMDljMWI1IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9jb21tb24vQ2FtZXJhMkNsaWVudEJhc2UuaApAQCAtMTExLDcgKzExMSw3IEBACiAgICAgcGlkX3QgbUluaXRpYWxDbGllbnRQaWQ7CiAKICAgICB2aXJ0dWFsIHNwPElCaW5kZXI+IGFzQmluZGVyV3JhcHBlcigpIHsKLSAgICAgICAgcmV0dXJuIElJbnRlcmZhY2U6OmFzQmluZGVyKCk7CisgICAgICAgIHJldHVybiBJSW50ZXJmYWNlOjphc0JpbmRlcih0aGlzKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHN0YXR1c190ICAgICAgZHVtcERldmljZShpbnQgZmQsIGNvbnN0IFZlY3RvcjxTdHJpbmcxNj4mIGFyZ3MpOwpkaWZmIC0tZ2l0IGEvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMS9DYW1lcmFIYXJkd2FyZUludGVyZmFjZS5oIGIvc2VydmljZXMvY2FtZXJhL2xpYmNhbWVyYXNlcnZpY2UvZGV2aWNlMS9DYW1lcmFIYXJkd2FyZUludGVyZmFjZS5oCmluZGV4IDYzODY4MzguLjE5MzVjMmIgMTAwNjQ0Ci0tLSBhL3NlcnZpY2VzL2NhbWVyYS9saWJjYW1lcmFzZXJ2aWNlL2RldmljZTEvQ2FtZXJhSGFyZHdhcmVJbnRlcmZhY2UuaAorKysgYi9zZXJ2aWNlcy9jYW1lcmEvbGliY2FtZXJhc2VydmljZS9kZXZpY2UxL0NhbWVyYUhhcmR3YXJlSW50ZXJmYWNlLmgKQEAgLTU4OCw3ICs1ODgsNyBAQAogCiAjaWZuZGVmIGNvbnRhaW5lcl9vZgogI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgdHlwZW9mKCgodHlwZSAqKSAwKS0+bWVtYmVyKSAqX19tcHRyID0gKHB0cik7ICAgICBcCisgICAgICAgIGNvbnN0IF9fdHlwZW9mX18oKCh0eXBlICopIDApLT5tZW1iZXIpICpfX21wdHIgPSAocHRyKTsgICAgIFwKICAgICAgICAgKHR5cGUgKikgKChjaGFyICopIF9fbXB0ciAtIChjaGFyICopKCYoKHR5cGUgKikwKS0+bWVtYmVyKSk7IH0pCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc2VydmljZXMvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlckh3U2VydmljZS5jcHAgYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcAppbmRleCBkM2I2N2Y2Li4wODFhZmY3IDEwMDY0NAotLS0gYS9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcAorKysgYi9zZXJ2aWNlcy9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcApAQCAtMTQzLDcgKzE0Myw3IEBACiAgICAgc3A8TW9kdWxlPiBtb2R1bGUgPSBtTW9kdWxlcy52YWx1ZUF0KGluZGV4KTsKIAogICAgIG1vZHVsZS0+c2V0Q2xpZW50KGNsaWVudCk7Ci0gICAgY2xpZW50LT5hc0JpbmRlcigpLT5saW5rVG9EZWF0aChtb2R1bGUpOworICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKGNsaWVudCktPmxpbmtUb0RlYXRoKG1vZHVsZSk7CiAgICAgbW9kdWxlSW50ZXJmYWNlID0gbW9kdWxlOwogCiAgICAgbW9kdWxlLT5zZXRDYXB0dXJlU3RhdGVfbChtQ2FwdHVyZVN0YXRlKTsKQEAgLTUxMCw3ICs1MTAsNyBAQAogICAgICAgICBtTW9kZWxzLmNsZWFyKCk7CiAgICAgfQogICAgIGlmIChtQ2xpZW50ICE9IDApIHsKLSAgICAgICAgbUNsaWVudC0+YXNCaW5kZXIoKS0+dW5saW5rVG9EZWF0aCh0aGlzKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIobUNsaWVudCktPnVubGlua1RvRGVhdGgodGhpcyk7CiAgICAgfQogICAgIHNwPFNvdW5kVHJpZ2dlckh3U2VydmljZT4gc2VydmljZSA9IG1TZXJ2aWNlLnByb21vdGUoKTsKICAgICBpZiAoc2VydmljZSA9PSAwKSB7CmRpZmYgLS1naXQgYS9zb3VuZHRyaWdnZXIvSVNvdW5kVHJpZ2dlci5jcHAgYi9zb3VuZHRyaWdnZXIvSVNvdW5kVHJpZ2dlci5jcHAKaW5kZXggNDIyODBkMS4uZWVjYzFlYSAxMDA2NDQKLS0tIGEvc291bmR0cmlnZ2VyL0lTb3VuZFRyaWdnZXIuY3BwCisrKyBiL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VyLmNwcApAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICB9CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElTb3VuZFRyaWdnZXI6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIobW9kZWxNZW1vcnktPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKG1vZGVsTWVtb3J5KSk7CiAgICAgICAgIHN0YXR1c190IHN0YXR1cyA9IHJlbW90ZSgpLT50cmFuc2FjdChMT0FEX1NPVU5EX01PREVMLCBkYXRhLCAmcmVwbHkpOwogICAgICAgICBpZiAoc3RhdHVzICE9IE5PX0VSUk9SIHx8CiAgICAgICAgICAgICAgICAgKHN0YXR1cyA9IChzdGF0dXNfdClyZXBseS5yZWFkSW50MzIoKSkgIT0gTk9fRVJST1IpIHsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGRhdGEud3JpdGVJbnQzMihkYXRhTWVtb3J5LT5zaXplKCkpOwogICAgICAgICB9Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoZGF0YU1lbW9yeS0+YXNCaW5kZXIoKSk7CisgICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIoZGF0YU1lbW9yeSkpOwogICAgICAgICBzdGF0dXNfdCBzdGF0dXMgPSByZW1vdGUoKS0+dHJhbnNhY3QoU1RBUlRfUkVDT0dOSVRJT04sIGRhdGEsICZyZXBseSk7CiAgICAgICAgIGlmIChzdGF0dXMgIT0gTk9fRVJST1IpIHsKICAgICAgICAgICAgIHN0YXR1cyA9IChzdGF0dXNfdClyZXBseS5yZWFkSW50MzIoKTsKZGlmZiAtLWdpdCBhL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VyQ2xpZW50LmNwcCBiL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VyQ2xpZW50LmNwcAppbmRleCBiMGI0NDI4Li5lMGQzYWRkIDEwMDY0NAotLS0gYS9zb3VuZHRyaWdnZXIvSVNvdW5kVHJpZ2dlckNsaWVudC5jcHAKKysrIGIvc291bmR0cmlnZ2VyL0lTb3VuZFRyaWdnZXJDbGllbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBACiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJU291bmRUcmlnZ2VyQ2xpZW50OjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGV2ZW50TWVtb3J5LT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihldmVudE1lbW9yeSkpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoT05fUkVDT0dOSVRJT05fRVZFTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcGx5KTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICB7CiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElTb3VuZFRyaWdnZXJDbGllbnQ6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoZXZlbnRNZW1vcnktPmFzQmluZGVyKCkpOworICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKElJbnRlcmZhY2U6OmFzQmluZGVyKGV2ZW50TWVtb3J5KSk7CiAgICAgICAgIHJlbW90ZSgpLT50cmFuc2FjdChPTl9TT1VORE1PREVMX0VWRU5ULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZXBseSk7CkBAIC02Myw3ICs2Myw3IEBACiAgICAgewogICAgICAgICBQYXJjZWwgZGF0YSwgcmVwbHk7CiAgICAgICAgIGRhdGEud3JpdGVJbnRlcmZhY2VUb2tlbihJU291bmRUcmlnZ2VyQ2xpZW50OjpnZXRJbnRlcmZhY2VEZXNjcmlwdG9yKCkpOwotICAgICAgICBkYXRhLndyaXRlU3Ryb25nQmluZGVyKGV2ZW50TWVtb3J5LT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihldmVudE1lbW9yeSkpOwogICAgICAgICByZW1vdGUoKS0+dHJhbnNhY3QoT05fU0VSVklDRV9TVEFURV9DSEFOR0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJlcGx5KTsKZGlmZiAtLWdpdCBhL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcCBiL3NvdW5kdHJpZ2dlci9JU291bmRUcmlnZ2VySHdTZXJ2aWNlLmNwcAppbmRleCAwNTcyOGU5Li43NWY2OGI4IDEwMDY0NAotLS0gYS9zb3VuZHRyaWdnZXIvSVNvdW5kVHJpZ2dlckh3U2VydmljZS5jcHAKKysrIGIvc291bmR0cmlnZ2VyL0lTb3VuZFRyaWdnZXJId1NlcnZpY2UuY3BwCkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIFBhcmNlbCBkYXRhLCByZXBseTsKICAgICAgICAgZGF0YS53cml0ZUludGVyZmFjZVRva2VuKElTb3VuZFRyaWdnZXJId1NlcnZpY2U6OmdldEludGVyZmFjZURlc2NyaXB0b3IoKSk7CiAgICAgICAgIGRhdGEud3JpdGUoJmhhbmRsZSwgc2l6ZW9mKHNvdW5kX3RyaWdnZXJfbW9kdWxlX2hhbmRsZV90KSk7Ci0gICAgICAgIGRhdGEud3JpdGVTdHJvbmdCaW5kZXIoY2xpZW50LT5hc0JpbmRlcigpKTsKKyAgICAgICAgZGF0YS53cml0ZVN0cm9uZ0JpbmRlcihJSW50ZXJmYWNlOjphc0JpbmRlcihjbGllbnQpKTsKICAgICAgICAgcmVtb3RlKCktPnRyYW5zYWN0KEFUVEFDSCwgZGF0YSwgJnJlcGx5KTsKICAgICAgICAgc3RhdHVzX3Qgc3RhdHVzID0gcmVwbHkucmVhZEludDMyKCk7CiAgICAgICAgIGlmIChyZXBseS5yZWFkSW50MzIoKSAhPSAwKSB7CkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKHN0YXR1cyk7CiAgICAgICAgICAgICBpZiAobW9kdWxlICE9IDApIHsKICAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVJbnQzMigxKTsKLSAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIobW9kdWxlLT5hc0JpbmRlcigpKTsKKyAgICAgICAgICAgICAgICByZXBseS0+d3JpdGVTdHJvbmdCaW5kZXIoSUludGVyZmFjZTo6YXNCaW5kZXIobW9kdWxlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJlcGx5LT53cml0ZUludDMyKDApOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc291bmR0cmlnZ2VyL1NvdW5kVHJpZ2dlci5jcHAgYi9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VyLmNwcAppbmRleCAwMDE1YzMwLi4yMTM4Y2I3IDEwMDY0NAotLS0gYS9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VyLmNwcAorKysgYi9zb3VuZHRyaWdnZXIvU291bmRUcmlnZ2VyLmNwcApAQCAtMTA0LDcgKzEwNCw3IEBACiAgICAgc3RhdHVzX3Qgc3RhdHVzID0gc2VydmljZS0+YXR0YWNoKG1vZHVsZSwgc291bmRUcmlnZ2VyLCBzb3VuZFRyaWdnZXItPm1JU291bmRUcmlnZ2VyKTsKIAogICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IgJiYgc291bmRUcmlnZ2VyLT5tSVNvdW5kVHJpZ2dlciAhPSAwKSB7Ci0gICAgICAgIHNvdW5kVHJpZ2dlci0+bUlTb3VuZFRyaWdnZXItPmFzQmluZGVyKCktPmxpbmtUb0RlYXRoKHNvdW5kVHJpZ2dlcik7CisgICAgICAgIElJbnRlcmZhY2U6OmFzQmluZGVyKHNvdW5kVHJpZ2dlci0+bUlTb3VuZFRyaWdnZXIpLT5saW5rVG9EZWF0aChzb3VuZFRyaWdnZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFMT0dXKCJFcnJvciAlZCBjb25uZWN0aW5nIHRvIHNvdW5kIHRyaWdnZXIgc2VydmljZSIsIHN0YXR1cyk7CiAgICAgICAgIHNvdW5kVHJpZ2dlci5jbGVhcigpOwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAgICAgbUNhbGxiYWNrLmNsZWFyKCk7CiAgICAgaWYgKG1JU291bmRUcmlnZ2VyICE9IDApIHsKICAgICAgICAgbUlTb3VuZFRyaWdnZXItPmRldGFjaCgpOwotICAgICAgICBtSVNvdW5kVHJpZ2dlci0+YXNCaW5kZXIoKS0+dW5saW5rVG9EZWF0aCh0aGlzKTsKKyAgICAgICAgSUludGVyZmFjZTo6YXNCaW5kZXIobUlTb3VuZFRyaWdnZXIpLT51bmxpbmtUb0RlYXRoKHRoaXMpOwogICAgICAgICBtSVNvdW5kVHJpZ2dlciA9IDA7CiAgICAgfQogfQo=