ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWwucHkgYi9MaWIvdGVzdC90ZXN0X2FsLnB5CmluZGV4IGQxMWM3ZTUuLjRmODZmMzkgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hbC5weQpAQCAtMyw3ICszLDcgQEAKICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKIGltcG9ydCBhbAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIAogYWxhdHRycyA9IFsnX19kb2NfXycsICdfX25hbWVfXycsICdnZXRkZWZhdWx0JywgJ2dldG1pbm1heCcsICdnZXRuYW1lJywgJ2dldHBhcmFtcycsCiAgICAgICAgICAgICduZXdjb25maWcnLCAnb3BlbnBvcnQnLCAncXVlcnlwYXJhbXMnLCAnc2V0cGFyYW1zJ10KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CmluZGV4IDA4N2U2NWIuLmEyMGI4NzAgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQpAQCAtMyw3ICszLDcgQEAKICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKIGltcG9ydCBhcnJheQotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgdW5saW5rLCBUZXN0RmFpbGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBURVNURk4sIHVubGluaywgVGVzdEZhaWxlZAogCiBkZWYgbWFpbigpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CmluZGV4IDUxNzYxMGIuLmY3NmYxMTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5CkBAIC0xLDUgKzEsNSBAQAogIyBUZXN0IHRoZSBleGl0IG1vZHVsZQotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIGltcG9ydCBhdGV4aXQKIAogZGVmIGhhbmRsZXIxKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkgYi9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKaW5kZXggNDk1YTkxOC4uZjc0MjQyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQpAQCAtMSw2ICsxLDYgQEAKICMgVGVzdCBhdWRpb29wLgogaW1wb3J0IGF1ZGlvb3AKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiAKIGRlZiBnZW5kYXRhMSgpOgogICAgIHJldHVybiAnXDBcMVwyJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iMi5weSBiL0xpYi90ZXN0L3Rlc3RfYjIucHkKaW5kZXggOTg3MTY1Mi4uM2FmNWU2NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iMi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2IyLnB5CkBAIC0yNjcsNyArMjY3LDcgQEAKICAgICByYWlzZSBUZXN0RmFpbGVkLCAneHJhbmdlKDAsMTAsMiknCiAjIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFNvdXJjZUZvcmdlIGJ1ZyAjMTIxNjk1CiBkZWYgX3JhbmdlX3Rlc3Qocik6Ci0gICAgYXNzZXJ0IHIuc3RhcnQgIT0gci5zdG9wLCAnVGVzdCBub3QgdmFsaWQgZm9yIHBhc3NlZC1pbiB4cmFuZ2Ugb2JqZWN0LicKKyAgICB2ZXJpZnkoci5zdGFydCAhPSByLnN0b3AsICdUZXN0IG5vdCB2YWxpZCBmb3IgcGFzc2VkLWluIHhyYW5nZSBvYmplY3QuJykKICAgICBpZiByLnN0b3AgaW4gcjoKICAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCwgJ3Iuc3RvcCBpbiAnICsgYHJgCiAgICAgaWYgci5zdG9wLXIuc3RlcCBub3QgaW4gcjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkgYi9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CmluZGV4IDIwZjU0MDAuLmYwM2ZjNTUgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQpAQCAtMSw2ICsxLDYgQEAKICIiIlRlc3QgdGhlIGJpbmFzY2lpIEMgbW9kdWxlLiIiIgogCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQogaW1wb3J0IGJpbmFzY2lpCiAKICMgU2hvdyBtb2R1bGUgZG9jIHN0cmluZwpAQCAtNDIsNyArNDIsNyBAQAogZm9yIGxpbmUgaW4gbGluZXM6CiAgICAgYiA9IGJpbmFzY2lpLmEyYl9iYXNlNjQobGluZSkKICAgICByZXMgPSByZXMgKyBiCi1hc3NlcnQgcmVzID09IHRlc3RkYXRhCit2ZXJpZnkocmVzID09IHRlc3RkYXRhKQogCiAjIFRlc3QgYmFzZTY0IHdpdGggcmFuZG9tIGludmFsaWQgY2hhcmFjdGVycyBzcHJpbmtsZWQgdGhyb3VnaG91dAogIyAoVGhpcyByZXF1aXJlcyBhIG5ldyB2ZXJzaW9uIG9mIGJpbmFzY2lpLikKQEAgLTY3LDcgKzY3LDcgQEAKIGZvciBsaW5lIGluIG1hcChhZGRub2lzZSwgbGluZXMpOgogICAgIGIgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCiAgICAgcmVzID0gcmVzICsgYgotYXNzZXJ0IHJlcyA9PSB0ZXN0ZGF0YQordmVyaWZ5KHJlcyA9PSB0ZXN0ZGF0YSkKIAogIyBUZXN0IHV1CiBwcmludCAidXUgdGVzdCIKQEAgLTgyLDcgKzgyLDcgQEAKIGZvciBsaW5lIGluIGxpbmVzOgogICAgIGIgPSBiaW5hc2NpaS5hMmJfdXUobGluZSkKICAgICByZXMgPSByZXMgKyBiCi1hc3NlcnQgcmVzID09IHRlc3RkYXRhCit2ZXJpZnkocmVzID09IHRlc3RkYXRhKQogCiAjIFRlc3QgY3JjMzIoKQogY3JjID0gYmluYXNjaWkuY3JjMzIoIlRlc3QgdGhlIENSQy0zMiBvZiIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2JpbmhleC5weSBiL0xpYi90ZXN0L3Rlc3RfYmluaGV4LnB5CmluZGV4IGEyYjJhMmMuLjRjZWU0ZmIgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmluaGV4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmluaGV4LnB5CkBAIC02LDcgKzYsNyBAQAogIiIiCiBpbXBvcnQgYmluaGV4CiBpbXBvcnQgdGVtcGZpbGUKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZSwgVGVzdFNraXBwZWQKIAogZGVmIHRlc3QoKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ic2RkYi5weSBiL0xpYi90ZXN0L3Rlc3RfYnNkZGIucHkKaW5kZXggYjU5YTRlMC4uZTU1OWIyMCAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9ic2RkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2JzZGRiLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgYnNkZGIKIGltcG9ydCB0ZW1wZmlsZQotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIAogZGVmIHRlc3Qob3Blbm1ldGhvZCwgd2hhdCk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5CmluZGV4IDE2OGE2YjIuLmZiOGZlMTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWZpby5weQpAQCAtMTMsNyArMTMsNyBAQAogZGVmIGRyaXZlX29uZShwYXR0ZXJuLCBsZW5ndGgpOgogICAgIHEsIHIgPSBkaXZtb2QobGVuZ3RoLCBsZW4ocGF0dGVybikpCiAgICAgdGVzdHN0cmluZyA9IHBhdHRlcm4gKiBxICsgcGF0dGVybls6cl0KLSAgICBhc3NlcnQgbGVuKHRlc3RzdHJpbmcpID09IGxlbmd0aAorICAgIHZlcmlmeShsZW4odGVzdHN0cmluZykgPT0gbGVuZ3RoKQogICAgIHRyeV9vbmUodGVzdHN0cmluZykKICAgICB0cnlfb25lKHRlc3RzdHJpbmcgKyAieCIpCiAgICAgdHJ5X29uZSh0ZXN0c3RyaW5nWzotMV0pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NkLnB5IGIvTGliL3Rlc3QvdGVzdF9jZC5weQppbmRleCA5YTQ1YTdkLi43YWYyZTBiIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2NkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2QucHkKQEAgLTMsNyArMyw3IEBACiAgICBSb2dlciBFLiBNYXNzZQogIiIiCiBpbXBvcnQgY2QKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiAKIGNkYXR0cnMgPSBbJ0JMT0NLU0laRScsICdDRFJPTScsICdEQVRBU0laRScsICdFUlJPUicsICdOT0RJU0MnLCAnUEFVU0VEJywgJ1BMQVlJTkcnLCAnUkVBRFknLAogICAgICAgICAgICAnU1RJTEwnLCAnX19kb2NfXycsICdfX25hbWVfXycsICdhdGltZScsICdhdWRpbycsICdjYXRhbG9nJywgJ2NvbnRyb2wnLCAnY3JlYXRlcGFyc2VyJywgJ2Vycm9yJywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2dpLnB5IGIvTGliL3Rlc3QvdGVzdF9jZ2kucHkKaW5kZXggNzFlMjc1Zi4uYjFmNTc1OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jZ2kucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jZ2kucHkKQEAgLTEsMyArMSw0IEBACitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBpbXBvcnQgY2dpCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKQEAgLTExNyw5ICsxMTgsOSBAQAogICAgICAgICAjIFRlc3QgYmFzaWMgcGFyc2luZwogICAgICAgICBwcmludCByZXByKG9yaWcpCiAgICAgICAgIGQgPSBkb190ZXN0KG9yaWcsICJHRVQiKQotICAgICAgICBhc3NlcnQgZCA9PSBleHBlY3QsICJFcnJvciBwYXJzaW5nICVzIiAlIHJlcHIob3JpZykKKyAgICAgICAgdmVyaWZ5KGQgPT0gZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlcyIgJSByZXByKG9yaWcpKQogICAgICAgICBkID0gZG9fdGVzdChvcmlnLCAiUE9TVCIpCi0gICAgICAgIGFzc2VydCBkID09IGV4cGVjdCwgIkVycm9yIHBhcnNpbmcgJXMiICUgcmVwcihvcmlnKQorICAgICAgICB2ZXJpZnkoZCA9PSBleHBlY3QsICJFcnJvciBwYXJzaW5nICVzIiAlIHJlcHIob3JpZykpCiAKICAgICAgICAgZW52ID0geydRVUVSWV9TVFJJTkcnOiBvcmlnfQogICAgICAgICBmY2QgPSBjZ2kuRm9ybUNvbnRlbnREaWN0KGVudikKQEAgLTEyNywyMSArMTI4LDIxIEBACiAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShlbnZpcm9uPWVudikKICAgICAgICAgaWYgdHlwZShleHBlY3QpID09IHR5cGUoe30pOgogICAgICAgICAgICAgIyB0ZXN0IGRpY3QgaW50ZXJmYWNlCi0gICAgICAgICAgICBhc3NlcnQgbGVuKGV4cGVjdCkgPT0gbGVuKGZjZCkKLSAgICAgICAgICAgIGFzc2VydCBub3JtKGV4cGVjdC5rZXlzKCkpID09IG5vcm0oZmNkLmtleXMoKSkKLSAgICAgICAgICAgIGFzc2VydCBub3JtKGV4cGVjdC52YWx1ZXMoKSkgPT0gbm9ybShmY2QudmFsdWVzKCkpCi0gICAgICAgICAgICBhc3NlcnQgbm9ybShleHBlY3QuaXRlbXMoKSkgPT0gbm9ybShmY2QuaXRlbXMoKSkKLSAgICAgICAgICAgIGFzc2VydCBmY2QuZ2V0KCJub25leGlzdGVudCBmaWVsZCIsICJkZWZhdWx0IikgPT0gImRlZmF1bHQiCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHNkKSA9PSBsZW4oZnMpCi0gICAgICAgICAgICBhc3NlcnQgbm9ybShzZC5rZXlzKCkpID09IG5vcm0oZnMua2V5cygpKQotICAgICAgICAgICAgYXNzZXJ0IGZzLmdldHZhbHVlKCJub25leGlzdGVudCBmaWVsZCIsICJkZWZhdWx0IikgPT0gImRlZmF1bHQiCisgICAgICAgICAgICB2ZXJpZnkobGVuKGV4cGVjdCkgPT0gbGVuKGZjZCkpCisgICAgICAgICAgICB2ZXJpZnkobm9ybShleHBlY3Qua2V5cygpKSA9PSBub3JtKGZjZC5rZXlzKCkpKQorICAgICAgICAgICAgdmVyaWZ5KG5vcm0oZXhwZWN0LnZhbHVlcygpKSA9PSBub3JtKGZjZC52YWx1ZXMoKSkpCisgICAgICAgICAgICB2ZXJpZnkobm9ybShleHBlY3QuaXRlbXMoKSkgPT0gbm9ybShmY2QuaXRlbXMoKSkpCisgICAgICAgICAgICB2ZXJpZnkoZmNkLmdldCgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpID09ICJkZWZhdWx0IikKKyAgICAgICAgICAgIHZlcmlmeShsZW4oc2QpID09IGxlbihmcykpCisgICAgICAgICAgICB2ZXJpZnkobm9ybShzZC5rZXlzKCkpID09IG5vcm0oZnMua2V5cygpKSkKKyAgICAgICAgICAgIHZlcmlmeShmcy5nZXR2YWx1ZSgibm9uZXhpc3RlbnQgZmllbGQiLCAiZGVmYXVsdCIpID09ICJkZWZhdWx0IikKICAgICAgICAgICAgICMgdGVzdCBpbmRpdmlkdWFsIGZpZWxkcwogICAgICAgICAgICAgZm9yIGtleSBpbiBleHBlY3Qua2V5cygpOgogICAgICAgICAgICAgICAgIGV4cGVjdF92YWwgPSBleHBlY3Rba2V5XQotICAgICAgICAgICAgICAgIGFzc2VydCBmY2QuaGFzX2tleShrZXkpCi0gICAgICAgICAgICAgICAgYXNzZXJ0IG5vcm0oZmNkW2tleV0pID09IG5vcm0oZXhwZWN0W2tleV0pCi0gICAgICAgICAgICAgICAgYXNzZXJ0IGZjZC5nZXQoa2V5LCAiZGVmYXVsdCIpID09IGZjZFtrZXldCi0gICAgICAgICAgICAgICAgYXNzZXJ0IGZzLmhhc19rZXkoa2V5KQorICAgICAgICAgICAgICAgIHZlcmlmeShmY2QuaGFzX2tleShrZXkpKQorICAgICAgICAgICAgICAgIHZlcmlmeShub3JtKGZjZFtrZXldKSA9PSBub3JtKGV4cGVjdFtrZXldKSkKKyAgICAgICAgICAgICAgICB2ZXJpZnkoZmNkLmdldChrZXksICJkZWZhdWx0IikgPT0gZmNkW2tleV0pCisgICAgICAgICAgICAgICAgdmVyaWZ5KGZzLmhhc19rZXkoa2V5KSkKICAgICAgICAgICAgICAgICBpZiBsZW4oZXhwZWN0X3ZhbCkgPiAxOgogICAgICAgICAgICAgICAgICAgICBzaW5nbGVfdmFsdWUgPSAwCiAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTE0OSwyOCArMTUwLDI4IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICB2YWwgPSBzZFtrZXldCiAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgc2luZ2xlX3ZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBmcy5nZXR2YWx1ZShrZXkpID09IGV4cGVjdF92YWwKKyAgICAgICAgICAgICAgICAgICAgdmVyaWZ5KG5vdCBzaW5nbGVfdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHZlcmlmeShmcy5nZXR2YWx1ZShrZXkpID09IGV4cGVjdF92YWwpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHNpbmdsZV92YWx1ZQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgdmFsID09IGV4cGVjdF92YWxbMF0KLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZzLmdldHZhbHVlKGtleSkgPT0gZXhwZWN0X3ZhbFswXQotICAgICAgICAgICAgICAgIGFzc2VydCBub3JtKHNkLmdldGxpc3Qoa2V5KSkgPT0gbm9ybShleHBlY3RfdmFsKQorICAgICAgICAgICAgICAgICAgICB2ZXJpZnkoc2luZ2xlX3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICB2ZXJpZnkodmFsID09IGV4cGVjdF92YWxbMF0pCisgICAgICAgICAgICAgICAgICAgIHZlcmlmeShmcy5nZXR2YWx1ZShrZXkpID09IGV4cGVjdF92YWxbMF0pCisgICAgICAgICAgICAgICAgdmVyaWZ5KG5vcm0oc2QuZ2V0bGlzdChrZXkpKSA9PSBub3JtKGV4cGVjdF92YWwpKQogICAgICAgICAgICAgICAgIGlmIHNpbmdsZV92YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vcm0oc2QudmFsdWVzKCkpID09IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VsdHMobm9ybShleHBlY3QudmFsdWVzKCkpKQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm9ybShzZC5pdGVtcygpKSA9PSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9zZWNvbmRfZWx0cyhub3JtKGV4cGVjdC5pdGVtcygpKSkKKyAgICAgICAgICAgICAgICAgICAgdmVyaWZ5KG5vcm0oc2QudmFsdWVzKCkpID09IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2VsdHMobm9ybShleHBlY3QudmFsdWVzKCkpKSkKKyAgICAgICAgICAgICAgICAgICAgdmVyaWZ5KG5vcm0oc2QuaXRlbXMoKSkgPT0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Rfc2Vjb25kX2VsdHMobm9ybShleHBlY3QuaXRlbXMoKSkpKQogCiAgICAgIyBUZXN0IHRoZSB3ZWlyZCBGb3JtQ29udGVudERpY3QgY2xhc3NlcwogICAgIGVudiA9IHsnUVVFUllfU1RSSU5HJzogIng9MSZ5PTIuMCZ6PTItMy4lMmIwJjE9MWFiYyJ9CiAgICAgZXhwZWN0ID0geyd4JzogMSwgJ3knOiAyLjAsICd6JzogJzItMy4rMCcsICcxJzogJzFhYmMnfQogICAgIGQgPSBjZ2kuSW50ZXJwRm9ybUNvbnRlbnREaWN0KGVudikKICAgICBmb3IgaywgdiBpbiBleHBlY3QuaXRlbXMoKToKLSAgICAgICAgYXNzZXJ0IGRba10gPT0gdgorICAgICAgICB2ZXJpZnkoZFtrXSA9PSB2KQogICAgIGZvciBrLCB2IGluIGQuaXRlbXMoKToKLSAgICAgICAgYXNzZXJ0IGV4cGVjdFtrXSA9PSB2Ci0gICAgYXNzZXJ0IG5vcm0oZXhwZWN0LnZhbHVlcygpKSA9PSBub3JtKGQudmFsdWVzKCkpCisgICAgICAgIHZlcmlmeShleHBlY3Rba10gPT0gdikKKyAgICB2ZXJpZnkobm9ybShleHBlY3QudmFsdWVzKCkpID09IG5vcm0oZC52YWx1ZXMoKSkpCiAKICAgICBwcmludCAiVGVzdGluZyBsb2ciCiAgICAgY2dpLmluaXRsb2coKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbC5weSBiL0xpYi90ZXN0L3Rlc3RfY2wucHkKaW5kZXggMjZjNTE0Ni4uZjgxMTJlYiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NsLnB5CkBAIC0zLDcgKzMsNyBAQAogICAgUm9nZXIgRS4gTWFzc2UKICIiIgogaW1wb3J0IGNsCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQogCiBjbGF0dHJzID0gWydBRERFRF9BTEdPUklUSE1fRVJST1InLCAnQUxBVycsICdBTEdPUklUSE1fSUQnLAogJ0FMR09SSVRITV9WRVJTSU9OJywgJ0FVRElPJywgJ0FXQVJFX0VSUk9SJywgJ0FXQVJFX01QRUdfQVVESU8nLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfY21hdGgucHkKaW5kZXggNTA5YzczOS4uOWNhYTIxNiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5CkBAIC0zLDcgKzMsNyBAQAogICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKIGltcG9ydCBjbWF0aAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIAogdGVzdGRpY3QgPSB7J2Fjb3MnIDogMS4wLAogICAgICAgICAgICAgJ2Fjb3NoJyA6IDEuMCwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQppbmRleCA4OTA1ODY0Li5mYTYwOGIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsIFRlc3RGYWlsZWQKIAogaWYgdmVyYm9zZToKICAgICBwcmludCAnUnVubmluZyB0ZXN0IG9uIGR1cGxpY2F0ZSBhcmd1bWVudHMnCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nvb2tpZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29va2llLnB5CmluZGV4IGJmM2U5YWYuLjhkZDBmNmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29va2llLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29va2llLnB5CkBAIC0xNiwxNSArMTYsMTUgQEAKICAgICBwcmludCBzdHIoQykKICAgICBmb3IgaywgdiBpbiBkaWN0Lml0ZW1zKCk6CiAgICAgICAgIHByaW50ICcgJywgaywgcmVwciggQ1trXS52YWx1ZSApLCByZXByKHYpCi0gICAgICAgIGFzc2VydCBDW2tdLnZhbHVlID09IHYKKyAgICAgICAgdmVyaWZ5KENba10udmFsdWUgPT0gdikKICAgICAgICAgcHJpbnQgQ1trXQogCiBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCiBDLmxvYWQoJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0xOyBQYXRoPS9hY21lJykKIAotYXNzZXJ0IENbJ0N1c3RvbWVyJ10udmFsdWUgPT0gJ1dJTEVfRV9DT1lPVEUnCi1hc3NlcnQgQ1snQ3VzdG9tZXInXVsndmVyc2lvbiddID09ICcxJwotYXNzZXJ0IENbJ0N1c3RvbWVyJ11bJ3BhdGgnXSA9PSAnL2FjbWUnCit2ZXJpZnkoQ1snQ3VzdG9tZXInXS52YWx1ZSA9PSAnV0lMRV9FX0NPWU9URScpCit2ZXJpZnkoQ1snQ3VzdG9tZXInXVsndmVyc2lvbiddID09ICcxJykKK3ZlcmlmeShDWydDdXN0b21lciddWydwYXRoJ10gPT0gJy9hY21lJykKIAogcHJpbnQgQy5vdXRwdXQoWydwYXRoJ10pCiBwcmludCBDLmpzX291dHB1dCgpCkBAIC0zMyw2ICszMyw2IEBACiAjIFRyeSBjb29raWUgd2l0aCBxdW90ZWQgbWV0YS1kYXRhCiBDID0gQ29va2llLlNpbXBsZUNvb2tpZSgpCiBDLmxvYWQoJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgVmVyc2lvbj0iMSI7IFBhdGg9Ii9hY21lIicpCi1hc3NlcnQgQ1snQ3VzdG9tZXInXS52YWx1ZSA9PSAnV0lMRV9FX0NPWU9URScKLWFzc2VydCBDWydDdXN0b21lciddWyd2ZXJzaW9uJ10gPT0gJzEnCi1hc3NlcnQgQ1snQ3VzdG9tZXInXVsncGF0aCddID09ICcvYWNtZScKK3ZlcmlmeShDWydDdXN0b21lciddLnZhbHVlID09ICdXSUxFX0VfQ09ZT1RFJykKK3ZlcmlmeShDWydDdXN0b21lciddWyd2ZXJzaW9uJ10gPT0gJzEnKQordmVyaWZ5KENbJ0N1c3RvbWVyJ11bJ3BhdGgnXSA9PSAnL2FjbWUnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKaW5kZXggOWZiOTNkZC4uNDQyMDQwZiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CkBAIC0zLDcgKzMsNyBAQAogICAgUm9nZXIgRS4gTWFzc2UKICIiIgogCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZSAgICAKIGltcG9ydCBjcnlwdAogCiBjID0gY3J5cHQuY3J5cHQoJ215cGFzc3dvcmQnLCAnYWInKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2RibS5weQppbmRleCA5NDk0OWNmLi42NTEwMTI1IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2RibS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RibS5weQpAQCAtNCw3ICs0LDcgQEAKICIiIgogaW1wb3J0IGRibQogZnJvbSBkYm0gaW1wb3J0IGVycm9yCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQogCiBmaWxlbmFtZSA9ICcvdG1wL2RlbGV0ZV9tZScKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGwucHkKaW5kZXggNjBhNWNmMC4uYzViM2JiNCAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9kbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RsLnB5CkBAIC00LDcgKzQsNyBAQAogIiIiCiAKIGltcG9ydCBkbAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsVGVzdFNraXBwZWQKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsVGVzdFNraXBwZWQKIAogc2hhcmVkbGlicyA9IFsKICAgICAoJy91c3IvbGliL2xpYmMuc28nLCAnZ2V0cGlkJyksCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5IGIvTGliL3Rlc3QvdGVzdF9lcnJuby5weQppbmRleCBjYjFlNzI5Li4yZmI2YjM0IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkKQEAgLTQsNyArNCw3IEBACiAiIiIKIAogaW1wb3J0IGVycm5vCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQogCiBlcnJvcnMgPSBbJ0UyQklHJywgJ0VBQ0NFUycsICdFQUREUklOVVNFJywgJ0VBRERSTk9UQVZBSUwnLCAnRUFEVicsCiAgICAgICAgICAgJ0VBRk5PU1VQUE9SVCcsICdFQUdBSU4nLCAnRUFMUkVBRFknLCAnRUJBREUnLCAnRUJBREYnLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CmluZGV4IGI1M2NlZDcuLjViNmM1ZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkKQEAgLTEsMyArMSw0IEBACitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAogZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQKIGltcG9ydCBzdHJpbmcKQEAgLTc5LDExICs4MCwxMSBAQAogIyBtYWtlIHN1cmUgdGhlIGZ1bmN0aW9uIGNhbGwgZG9lc24ndCBzdG9tcCBvbiB0aGUgZGljdGlvbmFyeT8KIGQgPSB7J2EnOiAxLCAnYic6IDIsICdjJzogM30KIGQyID0gZC5jb3B5KCkKLWFzc2VydCBkID09IGQyCit2ZXJpZnkoZCA9PSBkMikKIGcoMSwgZD00LCAqKmQpCiBwcmludCBkCiBwcmludCBkMgotYXNzZXJ0IGQgPT0gZDIsICJmdW5jdGlvbiBjYWxsIG1vZGlmaWVkIGRpY3Rpb25hcnkiCit2ZXJpZnkoZCA9PSBkMiwgImZ1bmN0aW9uIGNhbGwgbW9kaWZpZWQgZGljdGlvbmFyeSIpCiAKICMgd2hhdCBhYm91dCB3aWxsZnVsIG1pc2NvbmR1Y3Q/CiBkZWYgc2Fib3RldXIoKiprdyk6CkBAIC05MSw3ICs5Miw3IEBACiAgICAgcmV0dXJuIGt3CiBkID0ge30KIGt3ID0gc2Fib3RldXIoYT0xLCAqKmQpCi1hc3NlcnQgZCA9PSB7fQordmVyaWZ5KGQgPT0ge30pCiAjIGJyZWFrIHRoZSBjeWNsZQogZGVsIGt3Wyd4J10KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mY250bC5weSBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKaW5kZXggYjZkNGRmYS4uYTU5OGE0MSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IGZjbnRsCiBpbXBvcnQgRkNOVEwKIGltcG9ydCBvcywgc3lzCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVEVTVEZOCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBURVNURk4KIAogZmlsZW5hbWUgPSBURVNURk4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CmluZGV4IGQ3MzE2N2EuLmE4NWUwN2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTEsNiArMSw2IEBACiBpbXBvcnQgb3MKIAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgVEVTVEZOCiBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAogCiAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW5zdGFuY2Ugc2VxdWVuY2UKQEAgLTExLDcgKzExLDcgQEAKIGYgPSBvcGVuKFRFU1RGTiwgJ3JiJykKIGJ1ZiA9IGYucmVhZCgpCiBmLmNsb3NlKCkKLWFzc2VydCBidWYgPT0gJzEyJwordmVyaWZ5KGJ1ZiA9PSAnMTInKQogCiAjIHZlcmlmeSB3cml0ZWxpbmVzIHdpdGggaW50ZWdlcnMKIGYgPSBvcGVuKFRFU1RGTiwgJ3diJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CmluZGV4IDRmZDI2NjIuLmJkM2U5NzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpAQCAtMTIsNyArMTIsNyBAQAogIiIiCiAKIGltcG9ydCBvcywgc3lzLCB0aW1lLCB0aHJlYWQKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZSwgVGVzdFNraXBwZWQKIAogdHJ5OgogICAgIGlmIG9zLnVuYW1lKClbMF0gPT0gIkJlT1MiOgpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgYSA9IGFsaXZlLmtleXMoKQogICAgIGEuc29ydCgpCi0gICAgYXNzZXJ0IGEgPT0gcmFuZ2UoTlVNX1RIUkVBRFMpCisgICAgdmVyaWZ5KGEgPT0gcmFuZ2UoTlVNX1RIUkVBRFMpKQogCiAgICAgcHJlZm9ya19saXZlcyA9IGFsaXZlLmNvcHkoKQogCkBAIC02OCw4ICs2OCw5IEBACiAgICAgZWxzZToKICAgICAgICAgIyBQYXJlbnQKICAgICAgICAgc3BpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChjcGlkLCAwKQotICAgICAgICBhc3NlcnQgc3BpZCA9PSBjcGlkCi0gICAgICAgIGFzc2VydCBzdGF0dXMgPT0gMCwgImNhdXNlID0gJWQsIGV4aXQgPSAlZCIgJSAoc3RhdHVzJjB4ZmYsIHN0YXR1cz4+OCkKKyAgICAgICAgdmVyaWZ5KHNwaWQgPT0gY3BpZCkKKyAgICAgICAgdmVyaWZ5KHN0YXR1cyA9PSAwLAorICAgICAgICAgICAgICAgICJjYXVzZSA9ICVkLCBleGl0ID0gJWQiICUgKHN0YXR1cyYweGZmLCBzdGF0dXM+PjgpICkKICAgICAgICAgZ2xvYmFsIHN0b3AKICAgICAgICAgIyBUZWxsIHRocmVhZHMgdG8gZGllCiAgICAgICAgIHN0b3AgPSAxCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IGYxMWViNTQuLmE4NWM5ZjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIGltcG9ydCBzdHJpbmcsIHN5cwogCiAjIHRlc3Qgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0b3IgKEkgYW0gbm90IHN1cmUgaWYgdGhpcyBpcyBiZWluZyB0ZXN0ZWQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2MucHkgYi9MaWIvdGVzdC90ZXN0X2djLnB5CmluZGV4IGY0NzE0ZDUuLjFjMDA4YmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nYy5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkCiBpbXBvcnQgZ2MKIAogZGVmIHJ1bl90ZXN0KG5hbWUsIHRodW5rKToKQEAgLTE2MSw3ICsxNjEsNyBAQAogICAgICAgICBwcmludCAiZGlzYWJsaW5nIGF1dG9tYXRpYyBjb2xsZWN0aW9uIgogICAgIGVuYWJsZWQgPSBnYy5pc2VuYWJsZWQoKQogICAgIGdjLmRpc2FibGUoKQotICAgIGFzc2VydCBub3QgZ2MuaXNlbmFibGVkKCkKKyAgICB2ZXJpZnkobm90IGdjLmlzZW5hYmxlZCgpICkKICAgICBkZWJ1ZyA9IGdjLmdldF9kZWJ1ZygpCiAgICAgZ2Muc2V0X2RlYnVnKGRlYnVnICYgfmdjLkRFQlVHX0xFQUspICMgdGhpcyB0ZXN0IGlzIHN1cHBvc2VkIHRvIGxlYWsKIApAQCAtMTc0LDcgKzE3NCw3IEBACiAgICAgICAgICAgICBwcmludCAicmVzdG9yaW5nIGF1dG9tYXRpYyBjb2xsZWN0aW9uIgogICAgICAgICAjIG1ha2Ugc3VyZSB0byBhbHdheXMgdGVzdCBnYy5lbmFibGUoKQogICAgICAgICBnYy5lbmFibGUoKQotICAgICAgICBhc3NlcnQgZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgdmVyaWZ5KGdjLmlzZW5hYmxlZCgpKQogICAgICAgICBpZiBub3QgZW5hYmxlZDoKICAgICAgICAgICAgIGdjLmRpc2FibGUoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2dkYm0ucHkKaW5kZXggNjdjNjdlYi4uZGZkMDViNyAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2RibS5weQpAQCAtNSw3ICs1LDcgQEAKIAogaW1wb3J0IGdkYm0KIGZyb20gZ2RibSBpbXBvcnQgZXJyb3IKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkCiAKIGZpbGVuYW1lPSAnL3RtcC9kZWxldGVfbWUnCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKaW5kZXggMTQ2MDIwMC4uZjg5ODlmMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKQEAgLTMsNyArMyw3IEBACiAKIGltcG9ydCBnZXRvcHQKIGZyb20gZ2V0b3B0IGltcG9ydCBHZXRvcHRFcnJvcgotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIAogZGVmIGV4cGVjdEV4Y2VwdGlvbih0ZXN0c3RyLCBleHBlY3RlZCwgZmFpbHVyZT1Bc3NlcnRpb25FcnJvcik6CiAgICAgIiIiRXhlY3V0ZXMgYSBzdGF0ZW1lbnQgcGFzc2VkIGluIHRlc3RzdHIsIGFuZCByYWlzZXMgYW4gZXhjZXB0aW9uCkBAIC0xNywyMiArMTcsMjIgQEAKIAogaWYgdmVyYm9zZToKICAgICBwcmludCAnUnVubmluZyB0ZXN0cyBvbiBnZXRvcHQuc2hvcnRfaGFzX2FyZycKLWFzc2VydCBnZXRvcHQuc2hvcnRfaGFzX2FyZygnYScsICdhOicpCi1hc3NlcnQgbm90IGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2EnKQordmVyaWZ5KGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2E6JykpCit2ZXJpZnkobm90IGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJ2EnKSkKIGV4cGVjdEV4Y2VwdGlvbigidG1wID0gZ2V0b3B0LnNob3J0X2hhc19hcmcoJ2EnLCAnYicpIiwgR2V0b3B0RXJyb3IpCiBleHBlY3RFeGNlcHRpb24oInRtcCA9IGdldG9wdC5zaG9ydF9oYXNfYXJnKCdhJywgJycpIiwgR2V0b3B0RXJyb3IpCiAKIGlmIHZlcmJvc2U6CiAgICAgcHJpbnQgJ1J1bm5pbmcgdGVzdHMgb24gZ2V0b3B0LmxvbmdfaGFzX2FyZ3MnCiBoYXNfYXJnLCBvcHRpb24gPSBnZXRvcHQubG9uZ19oYXNfYXJncygnYWJjJywgWydhYmM9J10pCi1hc3NlcnQgaGFzX2FyZwotYXNzZXJ0IG9wdGlvbiA9PSAnYWJjJwordmVyaWZ5KGhhc19hcmcpCit2ZXJpZnkob3B0aW9uID09ICdhYmMnKQogaGFzX2FyZywgb3B0aW9uID0gZ2V0b3B0LmxvbmdfaGFzX2FyZ3MoJ2FiYycsIFsnYWJjJ10pCi1hc3NlcnQgbm90IGhhc19hcmcKLWFzc2VydCBvcHRpb24gPT0gJ2FiYycKK3ZlcmlmeShub3QgaGFzX2FyZykKK3ZlcmlmeShvcHRpb24gPT0gJ2FiYycpCiBoYXNfYXJnLCBvcHRpb24gPSBnZXRvcHQubG9uZ19oYXNfYXJncygnYWJjJywgWydhYmNkJ10pCi1hc3NlcnQgbm90IGhhc19hcmcKLWFzc2VydCBvcHRpb24gPT0gJ2FiY2QnCit2ZXJpZnkobm90IGhhc19hcmcpCit2ZXJpZnkob3B0aW9uID09ICdhYmNkJykKIGV4cGVjdEV4Y2VwdGlvbigiaGFzX2FyZywgb3B0aW9uID0gZ2V0b3B0LmxvbmdfaGFzX2FyZ3MoJ2FiYycsIFsnZGVmJ10pIiwKICAgICAgICAgICAgICAgICBHZXRvcHRFcnJvcikKIGV4cGVjdEV4Y2VwdGlvbigiaGFzX2FyZywgb3B0aW9uID0gZ2V0b3B0LmxvbmdfaGFzX2FyZ3MoJ2FiYycsIFtdKSIsCkBAIC00NCwyMCArNDQsMjAgQEAKIGlmIHZlcmJvc2U6CiAgICAgcHJpbnQgJ1J1bm5pbmcgdGVzdHMgb24gZ2V0b3B0LmRvX3Nob3J0cycKIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYScsICdhJywgW10pCi1hc3NlcnQgb3B0cyA9PSBbKCctYScsICcnKV0KLWFzc2VydCBhcmdzID09IFtdCit2ZXJpZnkob3B0cyA9PSBbKCctYScsICcnKV0pCit2ZXJpZnkoYXJncyA9PSBbXSkKIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYTEnLCAnYTonLCBbXSkKLWFzc2VydCBvcHRzID09IFsoJy1hJywgJzEnKV0KLWFzc2VydCBhcmdzID09IFtdCit2ZXJpZnkob3B0cyA9PSBbKCctYScsICcxJyldKQordmVyaWZ5KGFyZ3MgPT0gW10pCiAjb3B0cywgYXJncyA9IGdldG9wdC5kb19zaG9ydHMoW10sICdhPTEnLCAnYTonLCBbXSkKLSNhc3NlcnQgb3B0cyA9PSBbKCctYScsICcxJyldCi0jYXNzZXJ0IGFyZ3MgPT0gW10KKyN2ZXJpZnkob3B0cyA9PSBbKCctYScsICcxJyldKQorI3ZlcmlmeShhcmdzID09IFtdKQogb3B0cywgYXJncyA9IGdldG9wdC5kb19zaG9ydHMoW10sICdhJywgJ2E6JywgWycxJ10pCi1hc3NlcnQgb3B0cyA9PSBbKCctYScsICcxJyldCi1hc3NlcnQgYXJncyA9PSBbXQordmVyaWZ5KG9wdHMgPT0gWygnLWEnLCAnMScpXSkKK3ZlcmlmeShhcmdzID09IFtdKQogb3B0cywgYXJncyA9IGdldG9wdC5kb19zaG9ydHMoW10sICdhJywgJ2E6JywgWycxJywgJzInXSkKLWFzc2VydCBvcHRzID09IFsoJy1hJywgJzEnKV0KLWFzc2VydCBhcmdzID09IFsnMiddCit2ZXJpZnkob3B0cyA9PSBbKCctYScsICcxJyldKQordmVyaWZ5KGFyZ3MgPT0gWycyJ10pCiBleHBlY3RFeGNlcHRpb24oIm9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYTEnLCAnYScsIFtdKSIsCiAgICAgICAgICAgICAgICAgR2V0b3B0RXJyb3IpCiBleHBlY3RFeGNlcHRpb24oIm9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fc2hvcnRzKFtdLCAnYScsICdhOicsIFtdKSIsCkBAIC02NiwyMyArNjYsMjMgQEAKIGlmIHZlcmJvc2U6CiAgICAgcHJpbnQgJ1J1bm5pbmcgdGVzdHMgb24gZ2V0b3B0LmRvX2xvbmdzJwogb3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2FiYycsIFsnYWJjJ10sIFtdKQotYXNzZXJ0IG9wdHMgPT0gWygnLS1hYmMnLCAnJyldCi1hc3NlcnQgYXJncyA9PSBbXQordmVyaWZ5KG9wdHMgPT0gWygnLS1hYmMnLCAnJyldKQordmVyaWZ5KGFyZ3MgPT0gW10pCiBvcHRzLCBhcmdzID0gZ2V0b3B0LmRvX2xvbmdzKFtdLCAnYWJjPTEnLCBbJ2FiYz0nXSwgW10pCi1hc3NlcnQgb3B0cyA9PSBbKCctLWFiYycsICcxJyldCi1hc3NlcnQgYXJncyA9PSBbXQordmVyaWZ5KG9wdHMgPT0gWygnLS1hYmMnLCAnMScpXSkKK3ZlcmlmeShhcmdzID09IFtdKQogb3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2FiYz0xJywgWydhYmNkPSddLCBbXSkKLWFzc2VydCBvcHRzID09IFsoJy0tYWJjZCcsICcxJyldCi1hc3NlcnQgYXJncyA9PSBbXQordmVyaWZ5KG9wdHMgPT0gWygnLS1hYmNkJywgJzEnKV0pCit2ZXJpZnkoYXJncyA9PSBbXSkKIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZG9fbG9uZ3MoW10sICdhYmMnLCBbJ2FiJywgJ2FiYycsICdhYmNkJ10sIFtdKQotYXNzZXJ0IG9wdHMgPT0gWygnLS1hYmMnLCAnJyldCi1hc3NlcnQgYXJncyA9PSBbXQordmVyaWZ5KG9wdHMgPT0gWygnLS1hYmMnLCAnJyldKQordmVyaWZ5KGFyZ3MgPT0gW10pCiAjIE11Y2ggbGlrZSB0aGUgcHJlY2VkaW5nLCBleGNlcHQgd2l0aCBhIG5vbi1hbHBoYSBjaGFyYWN0ZXIgKCItIikgaW4KICMgb3B0aW9uIG5hbWUgdGhhdCBwcmVjZWRlcyAiPSI7IGZhaWxlZCBpbgogIyBodHRwOi8vc291cmNlZm9yZ2UubmV0L2J1Z3MvP2Z1bmM9ZGV0YWlsYnVnJmJ1Z19pZD0xMjY4NjMmZ3JvdXBfaWQ9NTQ3MAogb3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2Zvbz00MicsIFsnZm9vLWJhcicsICdmb289JyxdLCBbXSkKLWFzc2VydCBvcHRzID09IFsoJy0tZm9vJywgJzQyJyldCi1hc3NlcnQgYXJncyA9PSBbXQordmVyaWZ5KG9wdHMgPT0gWygnLS1mb28nLCAnNDInKV0pCit2ZXJpZnkoYXJncyA9PSBbXSkKIGV4cGVjdEV4Y2VwdGlvbigib3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2FiYz0xJywgWydhYmMnXSwgW10pIiwKICAgICAgICAgICAgICAgICBHZXRvcHRFcnJvcikKIGV4cGVjdEV4Y2VwdGlvbigib3B0cywgYXJncyA9IGdldG9wdC5kb19sb25ncyhbXSwgJ2FiYycsIFsnYWJjPSddLCBbXSkiLApAQCAtOTYsMTEgKzk2LDExIEBACiBpZiB2ZXJib3NlOgogICAgIHByaW50ICdSdW5uaW5nIHRlc3RzIG9uIGdldG9wdC5nZXRvcHQnCiBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChjbWRsaW5lLCAnYTpiJywgWydhbHBoYT0nLCAnYmV0YSddKQotYXNzZXJ0IG9wdHMgPT0gWygnLWEnLCAnMScpLCAoJy1iJywgJycpLCAoJy0tYWxwaGEnLCAnMicpLCAoJy0tYmV0YScsICcnKSwKLSAgICAgICAgICAgICAgICAoJy1hJywgJzMnKSwgKCctYScsICcnKSwgKCctLWJldGEnLCAnJyldCit2ZXJpZnkob3B0cyA9PSBbKCctYScsICcxJyksICgnLWInLCAnJyksICgnLS1hbHBoYScsICcyJyksICgnLS1iZXRhJywgJycpLAorICAgICAgICAgICAgICAgICgnLWEnLCAnMycpLCAoJy1hJywgJycpLCAoJy0tYmV0YScsICcnKV0gKQogIyBOb3RlIGFtYmlndWl0eSBvZiAoJy1iJywgJycpIGFuZCAoJy1hJywgJycpIGFib3ZlLiBUaGlzIG11c3QgYmUKICMgYWNjb3VudGVkIGZvciBpbiB0aGUgY29kZSB0aGF0IGNhbGxzIGdldG9wdCgpLgotYXNzZXJ0IGFyZ3MgPT0gWydhcmcxJywgJ2FyZzInXQordmVyaWZ5KGFyZ3MgPT0gWydhcmcxJywgJ2FyZzInXSkKIAogZXhwZWN0RXhjZXB0aW9uKAogICAgICJvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChjbWRsaW5lLCAnYTpiJywgWydhbHBoYScsICdiZXRhJ10pIiwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2wucHkgYi9MaWIvdGVzdC90ZXN0X2dsLnB5CmluZGV4IDYxZWFhODMuLjcyYjA4OTUgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nbC5weQpAQCAtMyw3ICszLDcgQEAKICAgICB0YWtlbiBtb3N0bHkgZnJvbSB0aGUgZG9jdW1lbnRhdGlvbi4KICAgICBSb2dlciBFLiBNYXNzZQogIiIiCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdFNraXBwZWQKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsIFRlc3RTa2lwcGVkCiBpbXBvcnQgZ2wsIEdMLCB0aW1lCiAKIGdsYXR0cnMgPSBbJ1JHQmNvbG9yJywgJ1JHQmN1cnNvcicsICdSR0Jtb2RlJywgJ1JHQnJhbmdlJywgJ1JHQndyaXRlbWFzaycsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkgYi9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKaW5kZXggYjk5MGM4My4uNTAzY2M4MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQpAQCAtODMsMTggKzgzLDE4IEBACiAKIHByaW50ICcxLjEuMyBTdHJpbmcgbGl0ZXJhbHMnCiAKLSMjZGVmIGFzc2VydChzKToKKyMjZGVmIHZlcmlmeShzKToKICMjICAgICAgaWYgbm90IHM6IHJhaXNlIFRlc3RGYWlsZWQsICdzZWUgdHJhY2ViYWNrJwogCi14ID0gJyc7IHkgPSAiIjsgYXNzZXJ0KGxlbih4KSA9PSAwIGFuZCB4ID09IHkpCi14ID0gJ1wnJzsgeSA9ICInIjsgYXNzZXJ0KGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzOSkKLXggPSAnIic7IHkgPSAiXCIiOyBhc3NlcnQobGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM0KQoreCA9ICcnOyB5ID0gIiI7IHZlcmlmeShsZW4oeCkgPT0gMCBhbmQgeCA9PSB5KQoreCA9ICdcJyc7IHkgPSAiJyI7IHZlcmlmeShsZW4oeCkgPT0gMSBhbmQgeCA9PSB5IGFuZCBvcmQoeCkgPT0gMzkpCit4ID0gJyInOyB5ID0gIlwiIjsgdmVyaWZ5KGxlbih4KSA9PSAxIGFuZCB4ID09IHkgYW5kIG9yZCh4KSA9PSAzNCkKIHggPSAiZG9lc24ndCBcInNocmlua1wiIGRvZXMgaXQiCiB5ID0gJ2RvZXNuXCd0ICJzaHJpbmsiIGRvZXMgaXQnCi1hc3NlcnQobGVuKHgpID09IDI0IGFuZCB4ID09IHkpCit2ZXJpZnkobGVuKHgpID09IDI0IGFuZCB4ID09IHkpCiB4ID0gImRvZXMgXCJzaHJpbmtcIiBkb2Vzbid0IGl0IgogeSA9ICdkb2VzICJzaHJpbmsiIGRvZXNuXCd0IGl0JwotYXNzZXJ0KGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQordmVyaWZ5KGxlbih4KSA9PSAyNCBhbmQgeCA9PSB5KQogeCA9ICIiIgogVGhlICJxdWljayIKIGJyb3duIGZveApAQCAtMTAyLDI1ICsxMDIsMjUgQEAKIHRoZSAnbGF6eScgZG9nLgogIiIiCiB5ID0gJ1xuVGhlICJxdWljayJcbmJyb3duIGZveFxuanVtcHMgb3ZlclxudGhlIFwnbGF6eVwnIGRvZy5cbicKLWFzc2VydCh4ID09IHkpCit2ZXJpZnkoeCA9PSB5KQogeSA9ICcnJwogVGhlICJxdWljayIKIGJyb3duIGZveAoganVtcHMgb3ZlcgogdGhlICdsYXp5JyBkb2cuCi0nJyc7IGFzc2VydCh4ID09IHkpCisnJyc7IHZlcmlmeSh4ID09IHkpCiB5ID0gIlxuXAogVGhlIFwicXVpY2tcIlxuXAogYnJvd24gZm94XG5cCiBqdW1wcyBvdmVyXG5cCiB0aGUgJ2xhenknIGRvZy5cblwKLSI7IGFzc2VydCh4ID09IHkpCisiOyB2ZXJpZnkoeCA9PSB5KQogeSA9ICdcblwKIFRoZSBcInF1aWNrXCJcblwKIGJyb3duIGZveFxuXAoganVtcHMgb3ZlclxuXAogdGhlIFwnbGF6eVwnIGRvZy5cblwKLSc7IGFzc2VydCh4ID09IHkpCisnOyB2ZXJpZnkoeCA9PSB5KQogCiAKIHByaW50ICcxLjIgR3JhbW1hcicKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3JwLnB5IGIvTGliL3Rlc3QvdGVzdF9ncnAucHkKaW5kZXggYjczN2RhOS4uZWRhMzlkNSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9ncnAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ncnAucHkKQEAgLTQsNyArNCw3IEBACiAiIiIKIAogaW1wb3J0IGdycAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIAogZ3JvdXBzID0gZ3JwLmdldGdyYWxsKCkKIGlmIHZlcmJvc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKaW5kZXggN2VkYzYxNy4uODE5MTI2NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtMTgsMTMgKzE4LDEzIEBACiBmID0gZ3ppcC5HemlwRmlsZShmaWxlbmFtZSwgJ3diJykgOyBmLndyaXRlKGRhdGExICogNTApIDsgZi5jbG9zZSgpCiAKIGYgPSBnemlwLkd6aXBGaWxlKGZpbGVuYW1lLCAncmInKSA7IGQgPSBmLnJlYWQoKSA7IGYuY2xvc2UoKQotYXNzZXJ0IGQgPT0gZGF0YTEqNTAKK3ZlcmlmeShkID09IGRhdGExKjUwKQogCiAjIEFwcGVuZCB0byB0aGUgcHJldmlvdXMgZmlsZQogZiA9IGd6aXAuR3ppcEZpbGUoZmlsZW5hbWUsICdhYicpIDsgZi53cml0ZShkYXRhMiAqIDE1KSA7IGYuY2xvc2UoKQogCiBmID0gZ3ppcC5HemlwRmlsZShmaWxlbmFtZSwgJ3JiJykgOyBkID0gZi5yZWFkKCkgOyBmLmNsb3NlKCkKLWFzc2VydCBkID09IChkYXRhMSo1MCkgKyAoZGF0YTIqMTUpCit2ZXJpZnkoZCA9PSAoZGF0YTEqNTApICsgKGRhdGEyKjE1KSkKIAogIyBUcnkgLnJlYWRsaW5lKCkgd2l0aCB2YXJ5aW5nIGxpbmUgbGVuZ3RocwogCkBAIC0zMyw3ICszMyw3IEBACiB3aGlsZSAxOgogICAgIEwgPSBmLnJlYWRsaW5lKCBsaW5lX2xlbmd0aCApCiAgICAgaWYgTCA9PSAiIiBhbmQgbGluZV9sZW5ndGggIT0gMDogYnJlYWsKLSAgICBhc3NlcnQgbGVuKEwpIDw9IGxpbmVfbGVuZ3RoCisgICAgdmVyaWZ5KGxlbihMKSA8PSBsaW5lX2xlbmd0aCkKICAgICBsaW5lX2xlbmd0aCA9IChsaW5lX2xlbmd0aCArIDEpICUgNTAKIGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltYWdlb3AucHkgYi9MaWIvdGVzdC90ZXN0X2ltYWdlb3AucHkKaW5kZXggN2E2OTgxZS4uM2E2M2UzYyAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbWFnZW9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1hZ2VvcC5weQpAQCAtNSw3ICs1LDcgQEAKICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKIAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHVubGluaworZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZSwgdW5saW5rCiAKIGltcG9ydCBpbWFnZW9wLCB1dQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltZ2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2ltZ2ZpbGUucHkKaW5kZXggOGViMzMwZC4uNTYwNmJiMCAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbWdmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1nZmlsZS5weQpAQCAtNCw3ICs0LDcgQEAKICAgIFJvZ2VyIEUuIE1hc3NlCiAiIiIKIAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHVubGluaywgZmluZGZpbGUKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsIHVubGluaywgZmluZGZpbGUKIAogaW1wb3J0IGltZ2ZpbGUsIHV1LCBvcwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKaW5kZXggNWUwZTAwMS4uMTA1OWVmNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0RmFpbGVkLCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkCiBmcm9tIHN0cmluZyBpbXBvcnQgam9pbgogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRvbSwgcmFuZGludAogCkBAIC00MSw3ICs0MSw3IEBACiAjIFRoZSBzaWduIG9mIHRoZSBudW1iZXIgaXMgYWxzbyByYW5kb20uCiAKIGRlZiBnZXRyYW4obmRpZ2l0cyk6Ci0gICAgYXNzZXJ0IG5kaWdpdHMgPiAwCisgICAgdmVyaWZ5KG5kaWdpdHMgPiAwKQogICAgIG5iaXRzX2hpID0gbmRpZ2l0cyAqIFNISUZUCiAgICAgbmJpdHNfbG8gPSBuYml0c19oaSAtIFNISUZUICsgMQogICAgIGFuc3dlciA9IDBMCkBAIC01MCwxMyArNTAsMTMgQEAKICAgICB3aGlsZSBuYml0cyA8IG5iaXRzX2xvOgogICAgICAgICBiaXRzID0gKHIgPj4gMSkgKyAxCiAgICAgICAgIGJpdHMgPSBtaW4oYml0cywgbmJpdHNfaGkgLSBuYml0cykKLSAgICAgICAgYXNzZXJ0IDEgPD0gYml0cyA8PSBTSElGVAorICAgICAgICB2ZXJpZnkoMSA8PSBiaXRzIDw9IFNISUZUKQogICAgICAgICBuYml0cyA9IG5iaXRzICsgYml0cwogICAgICAgICBhbnN3ZXIgPSBhbnN3ZXIgPDwgYml0cwogICAgICAgICBpZiByICYgMToKICAgICAgICAgICAgIGFuc3dlciA9IGFuc3dlciB8ICgoMSA8PCBiaXRzKSAtIDEpCiAgICAgICAgIHIgPSBpbnQocmFuZG9tKCkgKiAoU0hJRlQgKiAyKSkKLSAgICBhc3NlcnQgbmJpdHNfbG8gPD0gbmJpdHMgPD0gbmJpdHNfaGkKKyAgICB2ZXJpZnkobmJpdHNfbG8gPD0gbmJpdHMgPD0gbmJpdHNfaGkpCiAgICAgaWYgcmFuZG9tKCkgPCAwLjU6CiAgICAgICAgIGFuc3dlciA9IC1hbnN3ZXIKICAgICByZXR1cm4gYW5zd2VyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKaW5kZXggZWUxMDVjMi4uNzJmM2U0MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHJhY2ViYWNrCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGJhc2UgPSBzeXMuYXJndlswXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5IGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CmluZGV4IDdjNDljZjIuLjQ2NzM5MTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKQEAgLTEsMyArMSw0IEBACitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5CiBpbXBvcnQgbW1hcAogaW1wb3J0IHN0cmluZywgb3MsIHJlLCBzeXMKIApAQCAtMjEsMTUgKzIyLDE1IEBACiAKICAgICBwcmludCB0eXBlKG0pICAjIFNGIGJ1ZyAxMjg3MTM6ICBzZWdmYXVsdGVkIG9uIExpbnV4CiAgICAgcHJpbnQgJyAgUG9zaXRpb24gb2YgZm9vOicsIHN0cmluZy5maW5kKG0sICdmb28nKSAvIGZsb2F0KFBBR0VTSVpFKSwgJ3BhZ2VzJwotICAgIGFzc2VydCBzdHJpbmcuZmluZChtLCAnZm9vJykgPT0gUEFHRVNJWkUKKyAgICB2ZXJpZnkoc3RyaW5nLmZpbmQobSwgJ2ZvbycpID09IFBBR0VTSVpFKQogCiAgICAgcHJpbnQgJyAgTGVuZ3RoIG9mIGZpbGU6JywgbGVuKG0pIC8gZmxvYXQoUEFHRVNJWkUpLCAncGFnZXMnCi0gICAgYXNzZXJ0IGxlbihtKSA9PSAyKlBBR0VTSVpFCisgICAgdmVyaWZ5KGxlbihtKSA9PSAyKlBBR0VTSVpFKQogCiAgICAgcHJpbnQgJyAgQ29udGVudHMgb2YgYnl0ZSAwOicsIHJlcHIobVswXSkKLSAgICBhc3NlcnQgbVswXSA9PSAnXDAnCisgICAgdmVyaWZ5KG1bMF0gPT0gJ1wwJykKICAgICBwcmludCAnICBDb250ZW50cyBvZiBmaXJzdCAzIGJ5dGVzOicsIHJlcHIobVswOjNdKQotICAgIGFzc2VydCBtWzA6M10gPT0gJ1wwXDBcMCcKKyAgICB2ZXJpZnkobVswOjNdID09ICdcMFwwXDAnKQogCiAgICAgIyBNb2RpZnkgdGhlIGZpbGUncyBjb250ZW50CiAgICAgcHJpbnQgIlxuICBNb2RpZnlpbmcgZmlsZSdzIGNvbnRlbnQuLi4iCkBAIC0zOCwxMSArMzksMTEgQEAKIAogICAgICMgQ2hlY2sgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHdvcmtlZAogICAgIHByaW50ICcgIENvbnRlbnRzIG9mIGJ5dGUgMDonLCByZXByKG1bMF0pCi0gICAgYXNzZXJ0IG1bMF0gPT0gJzMnCisgICAgdmVyaWZ5KG1bMF0gPT0gJzMnKQogICAgIHByaW50ICcgIENvbnRlbnRzIG9mIGZpcnN0IDMgYnl0ZXM6JywgcmVwcihtWzA6M10pCi0gICAgYXNzZXJ0IG1bMDozXSA9PSAnM1wwXDAnCisgICAgdmVyaWZ5KG1bMDozXSA9PSAnM1wwXDAnKQogICAgIHByaW50ICcgIENvbnRlbnRzIG9mIHNlY29uZCBwYWdlOicsICByZXByKG1bUEFHRVNJWkUtMSA6IFBBR0VTSVpFICsgN10pCi0gICAgYXNzZXJ0IG1bUEFHRVNJWkUtMSA6IFBBR0VTSVpFICsgN10gPT0gJ1wwZm9vYmFyXDAnCisgICAgdmVyaWZ5KG1bUEFHRVNJWkUtMSA6IFBBR0VTSVpFICsgN10gPT0gJ1wwZm9vYmFyXDAnKQogCiAgICAgbS5mbHVzaCgpCiAKQEAgLTU3LDE5ICs1OCwxOSBAQAogICAgICAgICBwcmludCAnICBSZWdleCBtYXRjaCBvbiBtbWFwIChwYWdlIHN0YXJ0LCBsZW5ndGggb2YgbWF0Y2gpOicsCiAgICAgICAgIHByaW50IHN0YXJ0IC8gZmxvYXQoUEFHRVNJWkUpLCBsZW5ndGgKIAotICAgICAgICBhc3NlcnQgc3RhcnQgPT0gUEFHRVNJWkUKLSAgICAgICAgYXNzZXJ0IGVuZCA9PSBQQUdFU0laRSArIDYKKyAgICAgICAgdmVyaWZ5KHN0YXJ0ID09IFBBR0VTSVpFKQorICAgICAgICB2ZXJpZnkoZW5kID09IFBBR0VTSVpFICsgNikKIAogICAgICMgdGVzdCBzZWVraW5nIGFyb3VuZCAodHJ5IHRvIG92ZXJmbG93IHRoZSBzZWVrIGltcGxlbWVudGF0aW9uKQogICAgIG0uc2VlaygwLDApCiAgICAgcHJpbnQgJyAgU2VlayB0byB6ZXJvdGggYnl0ZScKLSAgICBhc3NlcnQgbS50ZWxsKCkgPT0gMAorICAgIHZlcmlmeShtLnRlbGwoKSA9PSAwKQogICAgIG0uc2Vlayg0MiwxKQogICAgIHByaW50ICcgIFNlZWsgdG8gNDJuZCBieXRlJwotICAgIGFzc2VydCBtLnRlbGwoKSA9PSA0MgorICAgIHZlcmlmeShtLnRlbGwoKSA9PSA0MikKICAgICBtLnNlZWsoMCwyKQogICAgIHByaW50ICcgIFNlZWsgdG8gbGFzdCBieXRlJwotICAgIGFzc2VydCBtLnRlbGwoKSA9PSBsZW4obSkKKyAgICB2ZXJpZnkobS50ZWxsKCkgPT0gbGVuKG0pKQogCiAgICAgcHJpbnQgJyAgVHJ5IHRvIHNlZWsgdG8gbmVnYXRpdmUgcG9zaXRpb24uLi4nCiAgICAgdHJ5OgpAQCAtNzcsNyArNzgsNyBAQAogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBwYXNzCiAgICAgZWxzZToKLSAgICAgICAgYXNzZXJ0IDAsICdleHBlY3RlZCBhIFZhbHVlRXJyb3IgYnV0IGRpZCBub3QgZ2V0IGl0JworICAgICAgICB2ZXJpZnkoMCwgJ2V4cGVjdGVkIGEgVmFsdWVFcnJvciBidXQgZGlkIG5vdCBnZXQgaXQnKQogCiAgICAgcHJpbnQgJyAgVHJ5IHRvIHNlZWsgYmV5b25kIGVuZCBvZiBtbWFwLi4uJwogICAgIHRyeToKQEAgLTg1LDcgKzg2LDcgQEAKICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGVsc2U6Ci0gICAgICAgIGFzc2VydCAwLCAnZXhwZWN0ZWQgYSBWYWx1ZUVycm9yIGJ1dCBkaWQgbm90IGdldCBpdCcKKyAgICAgICAgdmVyaWZ5KDAsICdleHBlY3RlZCBhIFZhbHVlRXJyb3IgYnV0IGRpZCBub3QgZ2V0IGl0JykKIAogICAgIHByaW50ICcgIFRyeSB0byBzZWVrIHRvIG5lZ2F0aXZlIHBvc2l0aW9uLi4uJwogICAgIHRyeToKQEAgLTkzLDcgKzk0LDcgQEAKICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGVsc2U6Ci0gICAgICAgIGFzc2VydCAwLCAnZXhwZWN0ZWQgYSBWYWx1ZUVycm9yIGJ1dCBkaWQgbm90IGdldCBpdCcKKyAgICAgICAgdmVyaWZ5KDAsICdleHBlY3RlZCBhIFZhbHVlRXJyb3IgYnV0IGRpZCBub3QgZ2V0IGl0JykKIAogICAgICMgVHJ5IHJlc2l6aW5nIG1hcAogICAgIHByaW50ICcgIEF0dGVtcHRpbmcgcmVzaXplKCknCkBAIC0xMDYsMTQgKzEwNywxNSBAQAogICAgICAgICBwYXNzCiAgICAgZWxzZToKICAgICAgICAgIyByZXNpemUoKSBpcyBzdXBwb3J0ZWQKLSAgICAgICAgYXNzZXJ0IGxlbihtKSA9PSA1MTIsICJsZW4obSkgaXMgJWQsIGJ1dCBleHBlY3RpbmcgNTEyIiAlIChsZW4obSksKQorICAgICAgICB2ZXJpZnkobGVuKG0pID09IDUxMiwKKyAgICAgICAgICAgICAgICAibGVuKG0pIGlzICVkLCBidXQgZXhwZWN0aW5nIDUxMiIgJSAobGVuKG0pLCkgKQogICAgICAgICAjIENoZWNrIHRoYXQgd2UgY2FuIG5vIGxvbmdlciBzZWVrIGJleW9uZCB0aGUgbmV3IHNpemUuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG0uc2Vlayg1MTMsMCkKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhc3NlcnQgMCwgJ0NvdWxkIHNlZWsgYmV5b25kIHRoZSBuZXcgc2l6ZScKKyAgICAgICAgICAgIHZlcmlmeSgwLCAnQ291bGQgc2VlayBiZXlvbmQgdGhlIG5ldyBzaXplJykKIAogICAgIG0uY2xvc2UoKQogICAgIG9zLnVubGluaygiZm9vIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmV3LnB5IGIvTGliL3Rlc3QvdGVzdF9uZXcucHkKaW5kZXggNzBlYTM4Yi4uOTI5MTU1YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9uZXcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uZXcucHkKQEAgLTEsNCArMSw0IEBACi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQogaW1wb3J0IHN5cwogaW1wb3J0IG5ldwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25pcy5weSBiL0xpYi90ZXN0L3Rlc3RfbmlzLnB5CmluZGV4IGUxNjcwZDEuLjU2MzgyYzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbmlzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbmlzLnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBUZXN0U2tpcHBlZAogaW1wb3J0IG5pcwogCiBwcmludCAnbmlzLm1hcHMoKScKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQppbmRleCBmYjgxNzE5Li5jZDAxOTFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CkBAIC0xLDcgKzEsNyBAQAogIyBUZXN0IHRvIHNlZSBpZiBvcGVucHR5IHdvcmtzLiAoQnV0IGRvbid0IHdvcnJ5IGlmIGl0IGlzbid0IGF2YWlsYWJsZS4pCiAKIGltcG9ydCBvcwotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBUZXN0U2tpcHBlZAogCiB0cnk6CiAgICAgaWYgdmVyYm9zZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkKaW5kZXggNjg4NTc2Ny4uODkxODU1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkKQEAgLTMsNyArMyw3IEBACiBpbXBvcnQgcHByaW50CiBpbXBvcnQgc3lzCiAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCBUZXN0RmFpbGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCBUZXN0RmFpbGVkCiAKICMKICMgIEZpcnN0LCB3ZSB0ZXN0IHRoYXQgd2UgY2FuIGdlbmVyYXRlIHRyZWVzIGZyb20gdmFsaWQgc291cmNlIGZyYWdtZW50cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnLnB5IGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKaW5kZXggNTQ1NjEwMC4uODBhMTFkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKQEAgLTMsNyArMyw3IEBACiBpbXBvcnQgc3lzLCBvcywgc3RyaW5nLCB0ZW1wZmlsZSwgdHJhY2ViYWNrCiBmcm9tIG9zIGltcG9ydCBta2Rpciwgcm1kaXIgICAgICAgICAgICAgIyBDYW4ndCB0ZXN0IGlmIHRoZXNlIGZhaWwKIGRlbCBta2Rpciwgcm1kaXIKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkCiAKICMgSGVscGVycyB0byBjcmVhdGUgYW5kIGRlc3Ryb3kgaGllcmFyY2hpZXMuCiAKQEAgLTE4OCwxNiArMTg4LDE2IEBACiB0Nywgc3ViLCBzdWJzdWIgPSBOb25lLCBOb25lLCBOb25lCiBpbXBvcnQgdDcgYXMgdGFzCiBwcmludCBkaXIodGFzKQotYXNzZXJ0IG5vdCB0NwordmVyaWZ5KG5vdCB0NykKIGZyb20gdDcgaW1wb3J0IHN1YiBhcyBzdWJwYXIKIHByaW50IGRpcihzdWJwYXIpCi1hc3NlcnQgbm90IHQ3IGFuZCBub3Qgc3ViCit2ZXJpZnkobm90IHQ3IGFuZCBub3Qgc3ViKQogZnJvbSB0Ny5zdWIgaW1wb3J0IHN1YnN1YiBhcyBzdWJzdWJzdWIKIHByaW50IGRpcihzdWJzdWJzdWIpCi1hc3NlcnQgbm90IHQ3IGFuZCBub3Qgc3ViIGFuZCBub3Qgc3Vic3ViCit2ZXJpZnkobm90IHQ3IGFuZCBub3Qgc3ViIGFuZCBub3Qgc3Vic3ViKQogZnJvbSB0Ny5zdWIuc3Vic3ViIGltcG9ydCBzcGFtIGFzIGhhbQogcHJpbnQgInQ3LnN1Yi5zdWJzdWIuc3BhbSA9IiwgaGFtCi1hc3NlcnQgbm90IHQ3IGFuZCBub3Qgc3ViIGFuZCBub3Qgc3Vic3ViCit2ZXJpZnkobm90IHQ3IGFuZCBub3Qgc3ViIGFuZCBub3Qgc3Vic3ViKQogIiIiKSwKIAogXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CmluZGV4IDU3NmU0Y2MuLmY2ZDQyN2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvbGwucHkKQEAgLTEsNyArMSw3IEBACiAjIFRlc3QgY2FzZSBmb3IgdGhlIG9zLnBvbGwoKSBmdW5jdGlvbgogCiBpbXBvcnQgc3lzLCBvcywgc2VsZWN0LCByYW5kb20KLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0U2tpcHBlZCwgVEVTVEZOCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0U2tpcHBlZCwgVEVTVEZOCiAKIHRyeToKICAgICBzZWxlY3QucG9sbApAQCAtNTUsNyArNTUsNyBAQAogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAibm8gcGlwZXMgcmVhZHkgZm9yIHJlYWRpbmciCiAgICAgICAgIHJkID0gcmFuZG9tLmNob2ljZShyZWFkeV9yZWFkZXJzKQogICAgICAgICBidWYgPSBvcy5yZWFkKHJkLCBNU0dfTEVOKQotICAgICAgICBhc3NlcnQgbGVuKGJ1ZikgPT0gTVNHX0xFTgorICAgICAgICB2ZXJpZnkobGVuKGJ1ZikgPT0gTVNHX0xFTikKICAgICAgICAgcHJpbnQgYnVmCiAgICAgICAgIG9zLmNsb3NlKHIyd1tyZF0pIDsgb3MuY2xvc2UoIHJkICkKICAgICAgICAgcC51bnJlZ2lzdGVyKCByMndbcmRdICkKQEAgLTc1LDE3ICs3NSwxNyBAQAogICAgIHAgPSBzZWxlY3QucG9sbCgpCiAgICAgcC5yZWdpc3RlcihGRCkKICAgICByID0gcC5wb2xsKCkKLSAgICBhc3NlcnQgclswXSA9PSAoRkQsIHNlbGVjdC5QT0xMTlZBTCkKKyAgICB2ZXJpZnkoclswXSA9PSAoRkQsIHNlbGVjdC5QT0xMTlZBTCkpCiAKICAgICBmID0gb3BlbihURVNURk4sICd3JykKICAgICBmZCA9IGYuZmlsZW5vKCkKICAgICBwID0gc2VsZWN0LnBvbGwoKQogICAgIHAucmVnaXN0ZXIoZikKICAgICByID0gcC5wb2xsKCkKLSAgICBhc3NlcnQgclswXVswXSA9PSBmZAorICAgIHZlcmlmeShyWzBdWzBdID09IGZkKQogICAgIGYuY2xvc2UoKQogICAgIHIgPSBwLnBvbGwoKQotICAgIGFzc2VydCByWzBdID09IChmZCwgc2VsZWN0LlBPTExOVkFMKQorICAgIHZlcmlmeShyWzBdID09IChmZCwgc2VsZWN0LlBPTExOVkFMKSkKICAgICBvcy51bmxpbmsoVEVTVEZOKQogCiAgICAgIyB0eXBlIGVycm9yIGZvciBpbnZhbGlkIGFyZ3VtZW50cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wdHkucHkgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQppbmRleCA1ZWE3ZTZmLi4wMzU0MzEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B0eS5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCBwdHksIG9zLCBzeXMsIHN0cmluZwotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBUZXN0U2tpcHBlZAogCiBURVNUX1NUUklOR18xID0gIkkgd2lzaCB0byBidXkgYSBmaXNoIGxpY2Vuc2UuIgogVEVTVF9TVFJJTkdfMiA9ICJGb3IgbXkgcGV0IGZpc2gsIEVyaWMuIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wd2QucHkgYi9MaWIvdGVzdC90ZXN0X3B3ZC5weQppbmRleCA3NDI1ZjUzLi5kMTc5ZWQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B3ZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B3ZC5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBpbXBvcnQgcHdkCiBpbXBvcnQgc3RyaW5nCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CmluZGV4IDRkNTJjMTQuLjhhYjZjN2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZS5weQpAQCAtMSw3ICsxLDcgQEAKIGltcG9ydCBzeXMKIHN5cy5wYXRoID0gWycuJ10gKyBzeXMucGF0aAogCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdEZhaWxlZAorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZSwgVGVzdEZhaWxlZAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzLCBvcywgc3RyaW5nLCB0cmFjZWJhY2sKIApAQCAtMTEsMjAgKzExLDIwIEBACiAgICAgcHJpbnQgJ1J1bm5pbmcgdGVzdHMgb24gcmUuc2VhcmNoIGFuZCByZS5tYXRjaCcKIAogdHJ5OgotICAgIGFzc2VydCByZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oMCkgPT0gKDAsIDApCi0gICAgYXNzZXJ0IHJlLnNlYXJjaCgneConLCAnYXh4Jykuc3BhbigpID09ICgwLCAwKQotICAgIGFzc2VydCByZS5zZWFyY2goJ3grJywgJ2F4eCcpLnNwYW4oMCkgPT0gKDEsIDMpCi0gICAgYXNzZXJ0IHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigpID09ICgxLCAzKQotICAgIGFzc2VydCByZS5zZWFyY2goJ3gnLCAnYWFhJykgaXMgTm9uZQorICAgIHZlcmlmeShyZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oMCkgPT0gKDAsIDApKQorICAgIHZlcmlmeShyZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oKSA9PSAoMCwgMCkpCisgICAgdmVyaWZ5KHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigwKSA9PSAoMSwgMykpCisgICAgdmVyaWZ5KHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigpID09ICgxLCAzKSkKKyAgICB2ZXJpZnkocmUuc2VhcmNoKCd4JywgJ2FhYScpIGlzIE5vbmUpCiBleGNlcHQ6CiAgICAgcmFpc2UgVGVzdEZhaWxlZCwgInJlLnNlYXJjaCIKIAogdHJ5OgotICAgIGFzc2VydCByZS5tYXRjaCgnYSonLCAneHh4Jykuc3BhbigwKSA9PSAoMCwgMCkKLSAgICBhc3NlcnQgcmUubWF0Y2goJ2EqJywgJ3h4eCcpLnNwYW4oKSA9PSAoMCwgMCkKLSAgICBhc3NlcnQgcmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKDApID09ICgwLCAzKQotICAgIGFzc2VydCByZS5tYXRjaCgneConLCAneHh4YScpLnNwYW4oKSA9PSAoMCwgMykKLSAgICBhc3NlcnQgcmUubWF0Y2goJ2ErJywgJ3h4eCcpIGlzIE5vbmUKKyAgICB2ZXJpZnkocmUubWF0Y2goJ2EqJywgJ3h4eCcpLnNwYW4oMCkgPT0gKDAsIDApKQorICAgIHZlcmlmeShyZS5tYXRjaCgnYSonLCAneHh4Jykuc3BhbigpID09ICgwLCAwKSkKKyAgICB2ZXJpZnkocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKDApID09ICgwLCAzKSkKKyAgICB2ZXJpZnkocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKCkgPT0gKDAsIDMpKQorICAgIHZlcmlmeShyZS5tYXRjaCgnYSsnLCAneHh4JykgaXMgTm9uZSkKIGV4Y2VwdDoKICAgICByYWlzZSBUZXN0RmFpbGVkLCAicmUuc2VhcmNoIgogCkBAIC0zMiw0MCArMzIsNDAgQEAKICAgICBwcmludCAnUnVubmluZyB0ZXN0cyBvbiByZS5zdWInCiAKIHRyeToKLSAgICBhc3NlcnQgcmUuc3ViKCIoP2kpYisiLCAieCIsICJiYmJiIEJCQkIiKSA9PSAneCB4JworICAgIHZlcmlmeShyZS5zdWIoIig/aSliKyIsICJ4IiwgImJiYmIgQkJCQiIpID09ICd4IHgnKQogCiAgICAgZGVmIGJ1bXBfbnVtKG1hdGNob2JqKToKICAgICAgICAgaW50X3ZhbHVlID0gaW50KG1hdGNob2JqLmdyb3VwKDApKQogICAgICAgICByZXR1cm4gc3RyKGludF92YWx1ZSArIDEpCiAKLSAgICBhc3NlcnQgcmUuc3ViKHInXGQrJywgYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScpID09ICc5LjMgLTMgMjR4MTAweScKLSAgICBhc3NlcnQgcmUuc3ViKHInXGQrJywgYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScsIDMpID09ICc5LjMgLTMgMjN4OTl5JworICAgIHZlcmlmeShyZS5zdWIocidcZCsnLCBidW1wX251bSwgJzA4LjIgLTIgMjN4OTl5JykgPT0gJzkuMyAtMyAyNHgxMDB5JykKKyAgICB2ZXJpZnkocmUuc3ViKHInXGQrJywgYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScsIDMpID09ICc5LjMgLTMgMjN4OTl5JykKIAotICAgIGFzc2VydCByZS5zdWIoJy4nLCBsYW1iZGEgbTogciJcbiIsICd4JykgPT0gJ1xcbicKLSAgICBhc3NlcnQgcmUuc3ViKCcuJywgciJcbiIsICd4JykgPT0gJ1xuJworICAgIHZlcmlmeShyZS5zdWIoJy4nLCBsYW1iZGEgbTogciJcbiIsICd4JykgPT0gJ1xcbicpCisgICAgdmVyaWZ5KHJlLnN1YignLicsIHIiXG4iLCAneCcpID09ICdcbicpCiAKICAgICBzID0gciJcMVwxIgotICAgIGFzc2VydCByZS5zdWIoJyguKScsIHMsICd4JykgPT0gJ3h4JwotICAgIGFzc2VydCByZS5zdWIoJyguKScsIHJlLmVzY2FwZShzKSwgJ3gnKSA9PSBzCi0gICAgYXNzZXJ0IHJlLnN1YignKC4pJywgbGFtYmRhIG06IHMsICd4JykgPT0gcworICAgIHZlcmlmeShyZS5zdWIoJyguKScsIHMsICd4JykgPT0gJ3h4JykKKyAgICB2ZXJpZnkocmUuc3ViKCcoLiknLCByZS5lc2NhcGUocyksICd4JykgPT0gcykKKyAgICB2ZXJpZnkocmUuc3ViKCcoLiknLCBsYW1iZGEgbTogcywgJ3gnKSA9PSBzKQogCi0gICAgYXNzZXJ0IHJlLnN1YignKD9QPGE+eCknLCAnXGc8YT5cZzxhPicsICd4eCcpID09ICd4eHh4JwotICAgIGFzc2VydCByZS5zdWIoJyg/UDxhPngpJywgJ1xnPGE+XGc8MT4nLCAneHgnKSA9PSAneHh4eCcKLSAgICBhc3NlcnQgcmUuc3ViKCcoP1A8dW5rPngpJywgJ1xnPHVuaz5cZzx1bms+JywgJ3h4JykgPT0gJ3h4eHgnCi0gICAgYXNzZXJ0IHJlLnN1YignKD9QPHVuaz54KScsICdcZzwxPlxnPDE+JywgJ3h4JykgPT0gJ3h4eHgnCisgICAgdmVyaWZ5KHJlLnN1YignKD9QPGE+eCknLCAnXGc8YT5cZzxhPicsICd4eCcpID09ICd4eHh4JykKKyAgICB2ZXJpZnkocmUuc3ViKCcoP1A8YT54KScsICdcZzxhPlxnPDE+JywgJ3h4JykgPT0gJ3h4eHgnKQorICAgIHZlcmlmeShyZS5zdWIoJyg/UDx1bms+eCknLCAnXGc8dW5rPlxnPHVuaz4nLCAneHgnKSA9PSAneHh4eCcpCisgICAgdmVyaWZ5KHJlLnN1YignKD9QPHVuaz54KScsICdcZzwxPlxnPDE+JywgJ3h4JykgPT0gJ3h4eHgnKQogCi0gICAgYXNzZXJ0IHJlLnN1YignYScsIHInXHRcblx2XHJcZlxhXGJcQlxaXGFcQVx3XFdcc1xTXGRcRCcsICdhJykgPT0gJ1x0XG5cdlxyXGZcYVxiXFxCXFxaXGFcXEFcXHdcXFdcXHNcXFNcXGRcXEQnCi0gICAgYXNzZXJ0IHJlLnN1YignYScsICdcdFxuXHZcclxmXGEnLCAnYScpID09ICdcdFxuXHZcclxmXGEnCi0gICAgYXNzZXJ0IHJlLnN1YignYScsICdcdFxuXHZcclxmXGEnLCAnYScpID09IChjaHIoOSkrY2hyKDEwKStjaHIoMTEpK2NocigxMykrY2hyKDEyKStjaHIoNykpCisgICAgdmVyaWZ5KHJlLnN1YignYScsIHInXHRcblx2XHJcZlxhXGJcQlxaXGFcQVx3XFdcc1xTXGRcRCcsICdhJykgPT0gJ1x0XG5cdlxyXGZcYVxiXFxCXFxaXGFcXEFcXHdcXFdcXHNcXFNcXGRcXEQnKQorICAgIHZlcmlmeShyZS5zdWIoJ2EnLCAnXHRcblx2XHJcZlxhJywgJ2EnKSA9PSAnXHRcblx2XHJcZlxhJykKKyAgICB2ZXJpZnkocmUuc3ViKCdhJywgJ1x0XG5cdlxyXGZcYScsICdhJykgPT0gKGNocig5KStjaHIoMTApK2NocigxMSkrY2hyKDEzKStjaHIoMTIpK2Nocig3KSkpCiAKLSAgICBhc3NlcnQgcmUuc3ViKCdeXHMqJywgJ1gnLCAndGVzdCcpID09ICdYdGVzdCcKKyAgICB2ZXJpZnkocmUuc3ViKCdeXHMqJywgJ1gnLCAndGVzdCcpID09ICdYdGVzdCcpCiBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CiAgICAgcmFpc2UgVGVzdEZhaWxlZCwgInJlLnN1YiIKIAogCiB0cnk6Ci0gICAgYXNzZXJ0IHJlLnN1YignYScsICdiJywgJ2FhYWFhJykgPT0gJ2JiYmJiJwotICAgIGFzc2VydCByZS5zdWIoJ2EnLCAnYicsICdhYWFhYScsIDEpID09ICdiYWFhYScKKyAgICB2ZXJpZnkocmUuc3ViKCdhJywgJ2InLCAnYWFhYWEnKSA9PSAnYmJiYmInKQorICAgIHZlcmlmeShyZS5zdWIoJ2EnLCAnYicsICdhYWFhYScsIDEpID09ICdiYWFhYScpCiBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CiAgICAgcmFpc2UgVGVzdEZhaWxlZCwgInF1YWxpZmllZCByZS5zdWIiCiAKQEAgLTEzMiwxMSArMTMyLDExIEBACiAgICAgcHJpbnQgJ1J1bm5pbmcgdGVzdHMgb24gcmUuc3VibicKIAogdHJ5OgotICAgIGFzc2VydCByZS5zdWJuKCIoP2kpYisiLCAieCIsICJiYmJiIEJCQkIiKSA9PSAoJ3ggeCcsIDIpCi0gICAgYXNzZXJ0IHJlLnN1Ym4oImIrIiwgIngiLCAiYmJiYiBCQkJCIikgPT0gKCd4IEJCQkInLCAxKQotICAgIGFzc2VydCByZS5zdWJuKCJiKyIsICJ4IiwgInh5eiIpID09ICgneHl6JywgMCkKLSAgICBhc3NlcnQgcmUuc3VibigiYioiLCAieCIsICJ4eXoiKSA9PSAoJ3h4eHl4engnLCA0KQotICAgIGFzc2VydCByZS5zdWJuKCJiKiIsICJ4IiwgInh5eiIsIDIpID09ICgneHh4eXonLCAyKQorICAgIHZlcmlmeShyZS5zdWJuKCIoP2kpYisiLCAieCIsICJiYmJiIEJCQkIiKSA9PSAoJ3ggeCcsIDIpKQorICAgIHZlcmlmeShyZS5zdWJuKCJiKyIsICJ4IiwgImJiYmIgQkJCQiIpID09ICgneCBCQkJCJywgMSkpCisgICAgdmVyaWZ5KHJlLnN1Ym4oImIrIiwgIngiLCAieHl6IikgPT0gKCd4eXonLCAwKSkKKyAgICB2ZXJpZnkocmUuc3VibigiYioiLCAieCIsICJ4eXoiKSA9PSAoJ3h4eHl4engnLCA0KSkKKyAgICB2ZXJpZnkocmUuc3VibigiYioiLCAieCIsICJ4eXoiLCAyKSA9PSAoJ3h4eHl6JywgMikpCiBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CiAgICAgcmFpc2UgVGVzdEZhaWxlZCwgInJlLnN1Ym4iCiAKQEAgLTE0NCwyNCArMTQ0LDI0IEBACiAgICAgcHJpbnQgJ1J1bm5pbmcgdGVzdHMgb24gcmUuc3BsaXQnCiAKIHRyeToKLSAgICBhc3NlcnQgcmUuc3BsaXQoIjoiLCAiOmE6Yjo6YyIpID09IFsnJywgJ2EnLCAnYicsICcnLCAnYyddCi0gICAgYXNzZXJ0IHJlLnNwbGl0KCI6KiIsICI6YTpiOjpjIikgPT0gWycnLCAnYScsICdiJywgJ2MnXQotICAgIGFzc2VydCByZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIikgPT0gWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10KLSAgICBhc3NlcnQgcmUuc3BsaXQoIig/OjoqKSIsICI6YTpiOjpjIikgPT0gWycnLCAnYScsICdiJywgJ2MnXQotICAgIGFzc2VydCByZS5zcGxpdCgiKDopKiIsICI6YTpiOjpjIikgPT0gWycnLCAnOicsICdhJywgJzonLCAnYicsICc6JywgJ2MnXQotICAgIGFzc2VydCByZS5zcGxpdCgiKFtiOl0rKSIsICI6YTpiOjpjIikgPT0gWycnLCAnOicsICdhJywgJzpiOjonLCAnYyddCi0gICAgYXNzZXJ0IHJlLnNwbGl0KCIoYil8KDorKSIsICI6YTpiOjpjIikgPT0gXAotICAgICAgICAgICBbJycsIE5vbmUsICc6JywgJ2EnLCBOb25lLCAnOicsICcnLCAnYicsIE5vbmUsICcnLCBOb25lLCAnOjonLCAnYyddCi0gICAgYXNzZXJ0IHJlLnNwbGl0KCIoPzpiKXwoPzo6KykiLCAiOmE6Yjo6YyIpID09IFsnJywgJ2EnLCAnJywgJycsICdjJ10KKyAgICB2ZXJpZnkocmUuc3BsaXQoIjoiLCAiOmE6Yjo6YyIpID09IFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQorICAgIHZlcmlmeShyZS5zcGxpdCgiOioiLCAiOmE6Yjo6YyIpID09IFsnJywgJ2EnLCAnYicsICdjJ10pCisgICAgdmVyaWZ5KHJlLnNwbGl0KCIoOiopIiwgIjphOmI6OmMiKSA9PSBbJycsICc6JywgJ2EnLCAnOicsICdiJywgJzo6JywgJ2MnXSkKKyAgICB2ZXJpZnkocmUuc3BsaXQoIig/OjoqKSIsICI6YTpiOjpjIikgPT0gWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICB2ZXJpZnkocmUuc3BsaXQoIig6KSoiLCAiOmE6Yjo6YyIpID09IFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOicsICdjJ10pCisgICAgdmVyaWZ5KHJlLnNwbGl0KCIoW2I6XSspIiwgIjphOmI6OmMiKSA9PSBbJycsICc6JywgJ2EnLCAnOmI6OicsICdjJ10pCisgICAgdmVyaWZ5KHJlLnNwbGl0KCIoYil8KDorKSIsICI6YTpiOjpjIikgPT0gXAorICAgICAgICAgICBbJycsIE5vbmUsICc6JywgJ2EnLCBOb25lLCAnOicsICcnLCAnYicsIE5vbmUsICcnLCBOb25lLCAnOjonLCAnYyddICkKKyAgICB2ZXJpZnkocmUuc3BsaXQoIig/OmIpfCg/OjorKSIsICI6YTpiOjpjIikgPT0gWycnLCAnYScsICcnLCAnJywgJ2MnXSkKIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKICAgICByYWlzZSBUZXN0RmFpbGVkLCAicmUuc3BsaXQiCiAKIHRyeToKLSAgICBhc3NlcnQgcmUuc3BsaXQoIjoiLCAiOmE6Yjo6YyIsIDIpID09IFsnJywgJ2EnLCAnYjo6YyddCi0gICAgYXNzZXJ0IHJlLnNwbGl0KCc6JywgJ2E6YjpjOmQnLCAyKSA9PSBbJ2EnLCAnYicsICdjOmQnXQorICAgIHZlcmlmeShyZS5zcGxpdCgiOiIsICI6YTpiOjpjIiwgMikgPT0gWycnLCAnYScsICdiOjpjJ10pCisgICAgdmVyaWZ5KHJlLnNwbGl0KCc6JywgJ2E6YjpjOmQnLCAyKSA9PSBbJ2EnLCAnYicsICdjOmQnXSkKIAotICAgIGFzc2VydCByZS5zcGxpdCgiKDopIiwgIjphOmI6OmMiLCAyKSA9PSBbJycsICc6JywgJ2EnLCAnOicsICdiOjpjJ10KLSAgICBhc3NlcnQgcmUuc3BsaXQoIig6KikiLCAiOmE6Yjo6YyIsIDIpID09IFsnJywgJzonLCAnYScsICc6JywgJ2I6OmMnXQorICAgIHZlcmlmeShyZS5zcGxpdCgiKDopIiwgIjphOmI6OmMiLCAyKSA9PSBbJycsICc6JywgJ2EnLCAnOicsICdiOjpjJ10pCisgICAgdmVyaWZ5KHJlLnNwbGl0KCIoOiopIiwgIjphOmI6OmMiLCAyKSA9PSBbJycsICc6JywgJ2EnLCAnOicsICdiOjpjJ10pCiBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CiAgICAgcmFpc2UgVGVzdEZhaWxlZCwgInF1YWxpZmllZCByZS5zcGxpdCIKIApAQCAtMTY5LDEyICsxNjksMTIgQEAKICAgICBwcmludCAiUnVubmluZyB0ZXN0cyBvbiByZS5maW5kYWxsIgogCiB0cnk6Ci0gICAgYXNzZXJ0IHJlLmZpbmRhbGwoIjorIiwgImFiYyIpID09IFtdCi0gICAgYXNzZXJ0IHJlLmZpbmRhbGwoIjorIiwgImE6Yjo6Yzo6OmQiKSA9PSBbIjoiLCAiOjoiLCAiOjo6Il0KLSAgICBhc3NlcnQgcmUuZmluZGFsbCgiKDorKSIsICJhOmI6OmM6OjpkIikgPT0gWyI6IiwgIjo6IiwgIjo6OiJdCi0gICAgYXNzZXJ0IHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpID09IFsoIjoiLCAiIiksCisgICAgdmVyaWZ5KHJlLmZpbmRhbGwoIjorIiwgImFiYyIpID09IFtdKQorICAgIHZlcmlmeShyZS5maW5kYWxsKCI6KyIsICJhOmI6OmM6OjpkIikgPT0gWyI6IiwgIjo6IiwgIjo6OiJdKQorICAgIHZlcmlmeShyZS5maW5kYWxsKCIoOispIiwgImE6Yjo6Yzo6OmQiKSA9PSBbIjoiLCAiOjoiLCAiOjo6Il0pCisgICAgdmVyaWZ5KHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpID09IFsoIjoiLCAiIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjoiLCAiOiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI6IiwgIjo6IildCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjoiLCAiOjoiKV0gKQogZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgIHJhaXNlIFRlc3RGYWlsZWQsICJyZS5maW5kYWxsIgogCkBAIC0xODMsMjkgKzE4MywzMSBAQAogCiB0cnk6CiAgICAgIyBObyBncm91cHMgYXQgYWxsCi0gICAgbSA9IHJlLm1hdGNoKCdhJywgJ2EnKSA7IGFzc2VydCBtLmdyb3VwcygpID09ICgpCisgICAgbSA9IHJlLm1hdGNoKCdhJywgJ2EnKSA7IHZlcmlmeShtLmdyb3VwcygpID09ICgpKQogICAgICMgQSBzaW5nbGUgZ3JvdXAKLSAgICBtID0gcmUubWF0Y2goJyhhKScsICdhJykgOyBhc3NlcnQgbS5ncm91cHMoKSA9PSAoJ2EnLCkKKyAgICBtID0gcmUubWF0Y2goJyhhKScsICdhJykgOyB2ZXJpZnkobS5ncm91cHMoKSA9PSAoJ2EnLCkpCiAKICAgICBwYXQgPSByZS5jb21waWxlKCcoKGEpfChiKSkoYyk/JykKLSAgICBhc3NlcnQgcGF0Lm1hdGNoKCdhJykuZ3JvdXBzKCkgPT0gKCdhJywgJ2EnLCBOb25lLCBOb25lKQotICAgIGFzc2VydCBwYXQubWF0Y2goJ2InKS5ncm91cHMoKSA9PSAoJ2InLCBOb25lLCAnYicsIE5vbmUpCi0gICAgYXNzZXJ0IHBhdC5tYXRjaCgnYWMnKS5ncm91cHMoKSA9PSAoJ2EnLCAnYScsIE5vbmUsICdjJykKLSAgICBhc3NlcnQgcGF0Lm1hdGNoKCdiYycpLmdyb3VwcygpID09ICgnYicsIE5vbmUsICdiJywgJ2MnKQotICAgIGFzc2VydCBwYXQubWF0Y2goJ2JjJykuZ3JvdXBzKCIiKSA9PSAoJ2InLCAiIiwgJ2InLCAnYycpCisgICAgdmVyaWZ5KHBhdC5tYXRjaCgnYScpLmdyb3VwcygpID09ICgnYScsICdhJywgTm9uZSwgTm9uZSkpCisgICAgdmVyaWZ5KHBhdC5tYXRjaCgnYicpLmdyb3VwcygpID09ICgnYicsIE5vbmUsICdiJywgTm9uZSkpCisgICAgdmVyaWZ5KHBhdC5tYXRjaCgnYWMnKS5ncm91cHMoKSA9PSAoJ2EnLCAnYScsIE5vbmUsICdjJykpCisgICAgdmVyaWZ5KHBhdC5tYXRjaCgnYmMnKS5ncm91cHMoKSA9PSAoJ2InLCBOb25lLCAnYicsICdjJykpCisgICAgdmVyaWZ5KHBhdC5tYXRjaCgnYmMnKS5ncm91cHMoIiIpID09ICgnYicsICIiLCAnYicsICdjJykpCiBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CiAgICAgcmFpc2UgVGVzdEZhaWxlZCwgIm1hdGNoIC5ncm91cHMoKSBtZXRob2QiCiAKIHRyeToKICAgICAjIEEgc2luZ2xlIGdyb3VwCiAgICAgbSA9IHJlLm1hdGNoKCcoYSknLCAnYScpCi0gICAgYXNzZXJ0IG0uZ3JvdXAoMCkgPT0gJ2EnIDsgYXNzZXJ0IG0uZ3JvdXAoMCkgPT0gJ2EnCi0gICAgYXNzZXJ0IG0uZ3JvdXAoMSkgPT0gJ2EnIDsgYXNzZXJ0IG0uZ3JvdXAoMSwgMSkgPT0gKCdhJywgJ2EnKQorICAgIHZlcmlmeShtLmdyb3VwKDApID09ICdhJykKKyAgICB2ZXJpZnkobS5ncm91cCgwKSA9PSAnYScpCisgICAgdmVyaWZ5KG0uZ3JvdXAoMSkgPT0gJ2EnKQorICAgIHZlcmlmeShtLmdyb3VwKDEsIDEpID09ICgnYScsICdhJykpCiAKICAgICBwYXQgPSByZS5jb21waWxlKCcoPzooP1A8YTE+YSl8KD9QPGIyPmIpKSg/UDxjMz5jKT8nKQotICAgIGFzc2VydCBwYXQubWF0Y2goJ2EnKS5ncm91cCgxLCAyLCAzKSA9PSAoJ2EnLCBOb25lLCBOb25lKQotICAgIGFzc2VydCBwYXQubWF0Y2goJ2InKS5ncm91cCgnYTEnLCAnYjInLCAnYzMnKSA9PSAoTm9uZSwgJ2InLCBOb25lKQotICAgIGFzc2VydCBwYXQubWF0Y2goJ2FjJykuZ3JvdXAoMSwgJ2IyJywgMykgPT0gKCdhJywgTm9uZSwgJ2MnKQorICAgIHZlcmlmeShwYXQubWF0Y2goJ2EnKS5ncm91cCgxLCAyLCAzKSA9PSAoJ2EnLCBOb25lLCBOb25lKSkKKyAgICB2ZXJpZnkocGF0Lm1hdGNoKCdiJykuZ3JvdXAoJ2ExJywgJ2IyJywgJ2MzJykgPT0gKE5vbmUsICdiJywgTm9uZSkpCisgICAgdmVyaWZ5KHBhdC5tYXRjaCgnYWMnKS5ncm91cCgxLCAnYjInLCAzKSA9PSAoJ2EnLCBOb25lLCAnYycpKQogZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgIHJhaXNlIFRlc3RGYWlsZWQsICJtYXRjaCAuZ3JvdXAoKSBtZXRob2QiCiAKQEAgLTIxNiwxMiArMjE4LDEyIEBACiAgICAgcD0iIgogICAgIGZvciBpIGluIHJhbmdlKDAsIDI1Nik6CiAgICAgICAgIHAgPSBwICsgY2hyKGkpCi0gICAgICAgIGFzc2VydCByZS5tYXRjaChyZS5lc2NhcGUoY2hyKGkpKSwgY2hyKGkpKSBpcyBub3QgTm9uZQotICAgICAgICBhc3NlcnQgcmUubWF0Y2gocmUuZXNjYXBlKGNocihpKSksIGNocihpKSkuc3BhbigpID09ICgwLDEpCisgICAgICAgIHZlcmlmeShyZS5tYXRjaChyZS5lc2NhcGUoY2hyKGkpKSwgY2hyKGkpKSBpcyBub3QgTm9uZSkKKyAgICAgICAgdmVyaWZ5KHJlLm1hdGNoKHJlLmVzY2FwZShjaHIoaSkpLCBjaHIoaSkpLnNwYW4oKSA9PSAoMCwxKSkKIAogICAgIHBhdD1yZS5jb21waWxlKCByZS5lc2NhcGUocCkgKQotICAgIGFzc2VydCBwYXQubWF0Y2gocCkgaXMgbm90IE5vbmUKLSAgICBhc3NlcnQgcGF0Lm1hdGNoKHApLnNwYW4oKSA9PSAoMCwyNTYpCisgICAgdmVyaWZ5KHBhdC5tYXRjaChwKSBpcyBub3QgTm9uZSkKKyAgICB2ZXJpZnkocGF0Lm1hdGNoKHApLnNwYW4oKSA9PSAoMCwyNTYpKQogZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgIHJhaXNlIFRlc3RGYWlsZWQsICJyZS5lc2NhcGUiCiAKQEAgLTIzNSwxMSArMjM3LDExIEBACiBwYXQgPSBwaWNrbGUubG9hZHMocykKIAogdHJ5OgotICAgIGFzc2VydCByZS5JID09IHJlLklHTk9SRUNBU0UKLSAgICBhc3NlcnQgcmUuTCA9PSByZS5MT0NBTEUKLSAgICBhc3NlcnQgcmUuTSA9PSByZS5NVUxUSUxJTkUKLSAgICBhc3NlcnQgcmUuUyA9PSByZS5ET1RBTEwKLSAgICBhc3NlcnQgcmUuWCA9PSByZS5WRVJCT1NFCisgICAgdmVyaWZ5KHJlLkkgPT0gcmUuSUdOT1JFQ0FTRSkKKyAgICB2ZXJpZnkocmUuTCA9PSByZS5MT0NBTEUpCisgICAgdmVyaWZ5KHJlLk0gPT0gcmUuTVVMVElMSU5FKQorICAgIHZlcmlmeShyZS5TID09IHJlLkRPVEFMTCkKKyAgICB2ZXJpZnkocmUuWCA9PSByZS5WRVJCT1NFKQogZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgIHJhaXNlIFRlc3RGYWlsZWQsICdyZSBtb2R1bGUgY29uc3RhbnRzJwogCkBAIC0yNTUsNyArMjU3LDcgQEAKICMgVHJ5IG5hc3R5IGNhc2UgdGhhdCBvdmVyZmxvd3MgdGhlIHN0cmFpZ2h0Zm9yd2FyZCByZWN1cnNpdmUKICMgaW1wbGVtZW50YXRpb24gb2YgcmVwZWF0ZWQgZ3JvdXBzLgogdHJ5OgotICAgIGFzc2VydCByZS5tYXRjaCgnKHgpKicsIDUwMDAwKid4Jykuc3BhbigpID09ICgwLCA1MDAwMCkKKyAgICB2ZXJpZnkocmUubWF0Y2goJyh4KSonLCA1MDAwMConeCcpLnNwYW4oKSA9PSAoMCwgNTAwMDApKQogZXhjZXB0IFJ1bnRpbWVFcnJvciwgdjoKICAgICBwcmludCB2CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVnZXgucHkgYi9MaWIvdGVzdC90ZXN0X3JlZ2V4LnB5CmluZGV4IGEzMjQ4MjEuLmE0OWFiZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmVnZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZWdleC5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBpbXBvcnQgd2FybmluZ3MKIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAidGhlIHJlZ2V4IG1vZHVsZSBpcyBkZXByZWNhdGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgX19uYW1lX18pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JmYzgyMi5weSBiL0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5CmluZGV4IDk2N2I5MWIuLmM2ZGY5MjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmZjODIyLnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIGltcG9ydCByZmM4MjIsIHN5cwogdHJ5OgogICAgIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZ2JpbWcucHkgYi9MaWIvdGVzdC90ZXN0X3JnYmltZy5weQppbmRleCBmMjYyMmU0Li5iMDc4ZDQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JnYmltZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JnYmltZy5weQpAQCAtMiw3ICsyLDcgQEAKIAogaW1wb3J0IHJnYmltZywgb3MsIHV1CiAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCB1bmxpbmssIGZpbmRmaWxlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCB1bmxpbmssIGZpbmRmaWxlCiAKIGNsYXNzIGVycm9yKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zYXgucHkgYi9MaWIvdGVzdC90ZXN0X3NheC5weQppbmRleCBlNmYyNzU1Li5jMjgyYzE3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NheC5weQpAQCAtMTIsNyArMTIsNyBAQAogZnJvbSB4bWwuc2F4LmV4cGF0cmVhZGVyIGltcG9ydCBjcmVhdGVfcGFyc2VyCiBmcm9tIHhtbC5zYXgueG1scmVhZGVyIGltcG9ydCBJbnB1dFNvdXJjZSwgQXR0cmlidXRlc0ltcGwsIEF0dHJpYnV0ZXNOU0ltcGwKIGZyb20gY1N0cmluZ0lPIGltcG9ydCBTdHJpbmdJTwotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQsIGZpbmRmaWxlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkLCBmaW5kZmlsZQogCiAjID09PT09IFV0aWxpdGllcwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CmluZGV4IGQ1YmNmZDUuLmJlMTI5MjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC0xLDUgKzEsNSBAQAogIyBUZXN0aW5nIHNlbGVjdCBtb2R1bGUKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgb3MKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQppbmRleCBhNmMzMmI0Li45ZDRjMjc3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQpAQCAtMSw1ICsxLDUgQEAKICMgVGVzdCB0aGUgc2lnbmFsIG1vZHVsZQotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RTa2lwcGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0U2tpcHBlZAogaW1wb3J0IHNpZ25hbAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CmluZGV4IGZlMzc5MzYuLmRhYjQzMmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CkBAIC04LDcgKzgsNyBAQAogIyAgICAgICBza3RvYmouc2h1dGRvd24oKQogCiAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0RmFpbGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBUZXN0RmFpbGVkCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgb3MKIGltcG9ydCB0aW1lCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NyZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3JlLnB5CmluZGV4IDg4YzBkNjIuLjBhYTgzNDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3JlLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHN5cwogc3lzLnBhdGg9WycuJ10rc3lzLnBhdGgKIAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRlc3RGYWlsZWQKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsIFRlc3RGYWlsZWQKIGltcG9ydCBzcmUKIGltcG9ydCBzeXMsIG9zLCBzdHJpbmcsIHRyYWNlYmFjawogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQppbmRleCA3ZjVjYjgwLi43M2RlMmQzIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKQEAgLTMsNyArMyw3IEBACiAjIFNhbml0eSBjaGVja2VyIGZvciB0aW1lLnN0cmZ0aW1lCiAKIGltcG9ydCB0aW1lLCBjYWxlbmRhciwgc3lzLCBzdHJpbmcsIG9zLCByZQotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIAogZGVmIG1haW4oKToKICAgICBnbG9iYWwgdmVyYm9zZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQppbmRleCAzNTc0NzE5Li5mZDFjYmFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZSwgVGVzdFNraXBwZWQKIGltcG9ydCBzdHJpbmdfdGVzdHMKIGltcG9ydCBzdHJpbmcsIHN5cwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cm9wLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJvcC5weQppbmRleCA1NzcwMDQ2Li5kNDQ0ZjNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cm9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3Ryb3AucHkKQEAgLTEsNCArMSw0IEBACi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQogaW1wb3J0IHN0cm9wLCBzeXMKIAogZGVmIHRlc3QobmFtZSwgaW5wdXQsIG91dHB1dCwgKmFyZ3MpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuYXVkaW9kZXYucHkKaW5kZXggYWYxODc2MS4uNDA4M2M2OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5hdWRpb2Rldi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1bmF1ZGlvZGV2LnB5CkBAIC0xLDQgKzEsNCBAQAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIGZpbmRmaWxlLCBUZXN0RmFpbGVkCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlLCBmaW5kZmlsZSwgVGVzdEZhaWxlZAogaW1wb3J0IHN1bmF1ZGlvZGV2CiBpbXBvcnQgb3MKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CmluZGV4IGEyNGIzY2UuLjhkY2VjMzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKQEAgLTcxLDMgKzcxLDE1IEBACiAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGRuLCBmaWxlKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbik6IHJldHVybiBmbgogICAgIHJldHVybiBmaWxlCisKK2RlZiB2ZXJpZnkoY29uZGl0aW9uLCByZWFzb249J3Rlc3QgZmFpbGVkJyk6CisJCisJIiIiIFZlcmlmeSB0aGF0IGNvbmRpdGlvbiBpcyB0cnVlLiBJZiBub3QsIHJhaXNlIGFuCisJICAgIEFzc2VydGlvbkVycm9yLgorCisJICAgIFRoZSBvcHRpbmFsIGFyZ3VtZW50IHJlYXNvbiBjYW4gYmUgZ2l2ZW4gdG8gcHJvdmlkZQorCSAgICBhIGJldHRlciBlcnJvciB0ZXh0LgorCQorCSIiIgorCWlmIG5vdCBjb25kaXRpb246CisJCXJhaXNlIEFzc2VydGlvbkVycm9yLHJlYXNvbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQppbmRleCAwMmRhOTRlLi4xMzRiYWRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtMiw3ICsyLDcgQEAKIAogIyBDcmVhdGUgYSBidW5jaCBvZiB0aHJlYWRzLCBsZXQgZWFjaCBkbyBzb21lIHdvcmssIHdhaXQgdW50aWwgYWxsIGFyZSBkb25lCiAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdGhyZWFkCiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aW1pbmcucHkgYi9MaWIvdGVzdC90ZXN0X3RpbWluZy5weQppbmRleCA1ZGJjODk1Li45ODQ2MzhlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RpbWluZy5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBpbXBvcnQgdGltaW5nCiAKIHIgPSByYW5nZSgxMDAwMDApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5IGIvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQppbmRleCBhMDcxM2QxLi41MmQ0MzAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKQEAgLTEsNCArMSw0IEBACi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgZmluZGZpbGUKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UsIGZpbmRmaWxlCiBpbXBvcnQgdG9rZW5pemUsIG9zLCBzeXMKIAogaWYgdmVyYm9zZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5IGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKaW5kZXggZjFhNjIyOS4uOTIxNTViZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91Y24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKQEAgLTUsNiArNSw4IEBACiAoYykgQ29weXJpZ2h0IENOUkksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE5PIFdBUlJBTlRZLgogCiAiIiIjIgorZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmlmeSwgdmVyYm9zZQorCiBwcmludCAnVGVzdGluZyBHZW5lcmFsIFVuaWNvZGUgQ2hhcmFjdGVyIE5hbWUsIGFuZCBjYXNlIGluc2Vuc2l0aXZpdHkuLi4nLAogCiAjIEdlbmVyYWwgYW5kIGNhc2UgaW5zZW5zaXRpdml0eSB0ZXN0OgpAQCAtMzQsMTUgKzM2LDE1IEBACiAgICAgdSJcTntMQVRJTiBTTUFMTCBMRVRURVIgRX0iIFwKICAgICB1IlxOe0xBVElOIFNNQUxMIExFVFRFUiBQfSIgXAogICAgIHUiXE57RlVMTCBTVE9QfSIKLWFzc2VydCBzID09IHUiVGhlIHJFZCBmT3ggYXRlIHRoZSBzaGVlcC4iLCBzCit2ZXJpZnkocyA9PSB1IlRoZSByRWQgZk94IGF0ZSB0aGUgc2hlZXAuIiwgcykKIHByaW50ICJkb25lLiIKIAogIyBtaXNjLiBzeW1ib2wgdGVzdGluZwogcHJpbnQgIlRlc3RpbmcgbWlzYy4gc3ltYm9scyBmb3IgdW5pY29kZSBjaGFyYWN0ZXIgbmFtZSBleHBhbnNpb24uLi4uIiwKLWFzc2VydCB1IlxOe1BJTENST1cgU0lHTn0iID09IHUiXHUwMGI2IgotYXNzZXJ0IHUiXE57UkVQTEFDRU1FTlQgQ0hBUkFDVEVSfSIgPT0gdSJcdUZGRkQiCi1hc3NlcnQgdSJcTntIQUxGV0lEVEggS0FUQUtBTkEgU0VNSS1WT0lDRUQgU09VTkQgTUFSS30iID09IHUiXHVGRjlGIgotYXNzZXJ0IHUiXE57RlVMTFdJRFRIIExBVElOIFNNQUxMIExFVFRFUiBBfSIgPT0gdSJcdUZGNDEiCit2ZXJpZnkodSJcTntQSUxDUk9XIFNJR059IiA9PSB1Ilx1MDBiNiIpCit2ZXJpZnkodSJcTntSRVBMQUNFTUVOVCBDSEFSQUNURVJ9IiA9PSB1Ilx1RkZGRCIpCit2ZXJpZnkodSJcTntIQUxGV0lEVEggS0FUQUtBTkEgU0VNSS1WT0lDRUQgU09VTkQgTUFSS30iID09IHUiXHVGRjlGIikKK3ZlcmlmeSh1IlxOe0ZVTExXSURUSCBMQVRJTiBTTUFMTCBMRVRURVIgQX0iID09IHUiXHVGRjQxIikKIHByaW50ICJkb25lLiIKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggYzcxZjkyNy4uZjE5OTgyOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtNCw4ICs0LDggQEAKIAogKGMpIENvcHlyaWdodCBDTlJJLCBBbGwgUmlnaHRzIFJlc2VydmVkLiBOTyBXQVJSQU5UWS4KIAotIiIiCi1mcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyYm9zZQorIiIiIyIKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIGltcG9ydCBzeXMKIAogZGVmIHRlc3QobWV0aG9kLCBpbnB1dCwgb3V0cHV0LCAqYXJncyk6CkBAIC0xNzMsMTUgKzE3MywxNSBAQAogCiAjIENvbXBhcmlzb25zOgogcHJpbnQgJ1Rlc3RpbmcgVW5pY29kZSBjb21wYXJpc29ucy4uLicsCi1hc3NlcnQgdSdhYmMnID09ICdhYmMnCi1hc3NlcnQgJ2FiYycgPT0gdSdhYmMnCi1hc3NlcnQgdSdhYmMnID09IHUnYWJjJwotYXNzZXJ0IHUnYWJjZCcgPiAnYWJjJwotYXNzZXJ0ICdhYmNkJyA+IHUnYWJjJwotYXNzZXJ0IHUnYWJjZCcgPiB1J2FiYycKLWFzc2VydCB1J2FiYycgPCAnYWJjZCcKLWFzc2VydCAnYWJjJyA8IHUnYWJjZCcKLWFzc2VydCB1J2FiYycgPCB1J2FiY2QnCit2ZXJpZnkodSdhYmMnID09ICdhYmMnKQordmVyaWZ5KCdhYmMnID09IHUnYWJjJykKK3ZlcmlmeSh1J2FiYycgPT0gdSdhYmMnKQordmVyaWZ5KHUnYWJjZCcgPiAnYWJjJykKK3ZlcmlmeSgnYWJjZCcgPiB1J2FiYycpCit2ZXJpZnkodSdhYmNkJyA+IHUnYWJjJykKK3ZlcmlmeSh1J2FiYycgPCAnYWJjZCcpCit2ZXJpZnkoJ2FiYycgPCB1J2FiY2QnKQordmVyaWZ5KHUnYWJjJyA8IHUnYWJjZCcpCiBwcmludCAnZG9uZS4nCiAKIGlmIDA6CkBAIC0xODksMTMgKzE4OSwxMyBAQAogCiAgICAgcHJpbnQgJ1Rlc3RpbmcgVVRGLTE2IGNvZGUgcG9pbnQgb3JkZXIgY29tcGFyaXNvbnMuLi4nLAogICAgICNObyBzdXJyb2dhdGVzLCBubyBmaXh1cCByZXF1aXJlZC4KLSAgICBhc3NlcnQgdSdcdTAwNjEnIDwgdSdcdTIwYWMnCisgICAgdmVyaWZ5KHUnXHUwMDYxJyA8IHUnXHUyMGFjJykKICAgICAjIE5vbiBzdXJyb2dhdGUgYmVsb3cgc3Vycm9nYXRlIHZhbHVlLCBubyBmaXh1cCByZXF1aXJlZAotICAgIGFzc2VydCB1J1x1MDA2MScgPCB1J1x1ZDgwMFx1ZGMwMicKKyAgICB2ZXJpZnkodSdcdTAwNjEnIDwgdSdcdWQ4MDBcdWRjMDInKQogCiAgICAgIyBOb24gc3Vycm9nYXRlIGFib3ZlIHN1cnJvZ2F0ZSB2YWx1ZSwgZml4dXAgcmVxdWlyZWQKICAgICBkZWYgdGVzdF9sZWNtcChzLCBzMik6Ci0gICAgICAgIGFzc2VydCBzIDwgIHMyICwgImNvbXBhcmlzb24gZmFpbGVkIG9uICVzIDwgJXMiICUgKHMsIHMyKQorICAgICAgdmVyaWZ5KHMgPCAgczIgLCAiY29tcGFyaXNvbiBmYWlsZWQgb24gJXMgPCAlcyIgJSAocywgczIpKQogCiAgICAgZGVmIHRlc3RfZml4dXAocyk6CiAgICAgICAgIHMyID0gdSdcdWQ4MDBcdWRjMDEnCkBAIC0yMzUsNyArMjM1LDcgQEAKICAgICB0ZXN0X2ZpeHVwKHUnXHVmZjYxJykKIAogICAgICMgU3Vycm9nYXRlcyBvbiBib3RoIHNpZGVzLCBubyBmaXh1cCByZXF1aXJlZAotICAgIGFzc2VydCB1J1x1ZDgwMFx1ZGMwMicgPCB1J1x1ZDg0ZFx1ZGM1NicKKyAgICB2ZXJpZnkodSdcdWQ4MDBcdWRjMDInIDwgdSdcdWQ4NGRcdWRjNTYnKQogICAgIHByaW50ICdkb25lLicKIAogdGVzdCgnbGp1c3QnLCB1J2FiYycsICB1J2FiYyAgICAgICAnLCAxMCkKQEAgLTMwNiw3OCArMzA2LDc4IEBACiAKICMgQ29udGFpbnM6CiBwcmludCAnVGVzdGluZyBVbmljb2RlIGNvbnRhaW5zIG1ldGhvZC4uLicsCi1hc3NlcnQgKCdhJyBpbiB1J2FiZGInKSA9PSAxCi1hc3NlcnQgKCdhJyBpbiB1J2JkYWInKSA9PSAxCi1hc3NlcnQgKCdhJyBpbiB1J2JkYWJhJykgPT0gMQotYXNzZXJ0ICgnYScgaW4gdSdiZGJhJykgPT0gMQotYXNzZXJ0ICgnYScgaW4gdSdiZGJhJykgPT0gMQotYXNzZXJ0ICh1J2EnIGluIHUnYmRiYScpID09IDEKLWFzc2VydCAodSdhJyBpbiB1J2JkYicpID09IDAKLWFzc2VydCAodSdhJyBpbiAnYmRiJykgPT0gMAotYXNzZXJ0ICh1J2EnIGluICdiZGJhJykgPT0gMQotYXNzZXJ0ICh1J2EnIGluICgnYScsMSxOb25lKSkgPT0gMQotYXNzZXJ0ICh1J2EnIGluICgxLE5vbmUsJ2EnKSkgPT0gMQotYXNzZXJ0ICh1J2EnIGluICgxLE5vbmUsdSdhJykpID09IDEKLWFzc2VydCAoJ2EnIGluICgnYScsMSxOb25lKSkgPT0gMQotYXNzZXJ0ICgnYScgaW4gKDEsTm9uZSwnYScpKSA9PSAxCi1hc3NlcnQgKCdhJyBpbiAoMSxOb25lLHUnYScpKSA9PSAxCi1hc3NlcnQgKCdhJyBpbiAoJ3gnLDEsdSd5JykpID09IDAKLWFzc2VydCAoJ2EnIGluICgneCcsMSxOb25lKSkgPT0gMAordmVyaWZ5KCgnYScgaW4gdSdhYmRiJykgPT0gMSkKK3ZlcmlmeSgoJ2EnIGluIHUnYmRhYicpID09IDEpCit2ZXJpZnkoKCdhJyBpbiB1J2JkYWJhJykgPT0gMSkKK3ZlcmlmeSgoJ2EnIGluIHUnYmRiYScpID09IDEpCit2ZXJpZnkoKCdhJyBpbiB1J2JkYmEnKSA9PSAxKQordmVyaWZ5KCh1J2EnIGluIHUnYmRiYScpID09IDEpCit2ZXJpZnkoKHUnYScgaW4gdSdiZGInKSA9PSAwKQordmVyaWZ5KCh1J2EnIGluICdiZGInKSA9PSAwKQordmVyaWZ5KCh1J2EnIGluICdiZGJhJykgPT0gMSkKK3ZlcmlmeSgodSdhJyBpbiAoJ2EnLDEsTm9uZSkpID09IDEpCit2ZXJpZnkoKHUnYScgaW4gKDEsTm9uZSwnYScpKSA9PSAxKQordmVyaWZ5KCh1J2EnIGluICgxLE5vbmUsdSdhJykpID09IDEpCit2ZXJpZnkoKCdhJyBpbiAoJ2EnLDEsTm9uZSkpID09IDEpCit2ZXJpZnkoKCdhJyBpbiAoMSxOb25lLCdhJykpID09IDEpCit2ZXJpZnkoKCdhJyBpbiAoMSxOb25lLHUnYScpKSA9PSAxKQordmVyaWZ5KCgnYScgaW4gKCd4JywxLHUneScpKSA9PSAwKQordmVyaWZ5KCgnYScgaW4gKCd4JywxLE5vbmUpKSA9PSAwKQogcHJpbnQgJ2RvbmUuJwogCiAjIEZvcm1hdHRpbmc6CiBwcmludCAnVGVzdGluZyBVbmljb2RlIGZvcm1hdHRpbmcgc3RyaW5ncy4uLicsCi1hc3NlcnQgdSIlcywgJXMiICUgKHUiYWJjIiwgImFiYyIpID09IHUnYWJjLCBhYmMnCi1hc3NlcnQgdSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIDEsIDIsIDMpID09IHUnYWJjLCBhYmMsIDEsIDIuMDAwMDAwLCAgMy4wMCcKLWFzc2VydCB1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgMSwgLTIsIDMpID09IHUnYWJjLCBhYmMsIDEsIC0yLjAwMDAwMCwgIDMuMDAnCi1hc3NlcnQgdSIlcywgJXMsICVpLCAlZiwgJTUuMmYiICUgKHUiYWJjIiwgImFiYyIsIC0xLCAtMiwgMy41KSA9PSB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAgMy41MCcKLWFzc2VydCB1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAzLjU3KSA9PSB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAgMy41NycKLWFzc2VydCB1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAxMDAzLjU3KSA9PSB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAxMDAzLjU3JwotYXNzZXJ0IHUiJWMiICUgKHUiYSIsKSA9PSB1J2EnCi1hc3NlcnQgdSIlYyIgJSAoImEiLCkgPT0gdSdhJwotYXNzZXJ0IHUiJWMiICUgKDM0LCkgPT0gdSciJwotYXNzZXJ0IHUiJWMiICUgKDM2LCkgPT0gdSckJwordmVyaWZ5KHUiJXMsICVzIiAlICh1ImFiYyIsICJhYmMiKSA9PSB1J2FiYywgYWJjJykKK3ZlcmlmeSh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgMSwgMiwgMykgPT0gdSdhYmMsIGFiYywgMSwgMi4wMDAwMDAsICAzLjAwJykKK3ZlcmlmeSh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgMSwgLTIsIDMpID09IHUnYWJjLCBhYmMsIDEsIC0yLjAwMDAwMCwgIDMuMDAnKQordmVyaWZ5KHUiJXMsICVzLCAlaSwgJWYsICU1LjJmIiAlICh1ImFiYyIsICJhYmMiLCAtMSwgLTIsIDMuNSkgPT0gdSdhYmMsIGFiYywgLTEsIC0yLjAwMDAwMCwgIDMuNTAnKQordmVyaWZ5KHUiJXMsICVzLCAlaSwgJWYsICU1LjJmIiAlICh1ImFiYyIsICJhYmMiLCAtMSwgLTIsIDMuNTcpID09IHUnYWJjLCBhYmMsIC0xLCAtMi4wMDAwMDAsICAzLjU3JykKK3ZlcmlmeSh1IiVzLCAlcywgJWksICVmLCAlNS4yZiIgJSAodSJhYmMiLCAiYWJjIiwgLTEsIC0yLCAxMDAzLjU3KSA9PSB1J2FiYywgYWJjLCAtMSwgLTIuMDAwMDAwLCAxMDAzLjU3JykKK3ZlcmlmeSh1IiVjIiAlICh1ImEiLCkgPT0gdSdhJykKK3ZlcmlmeSh1IiVjIiAlICgiYSIsKSA9PSB1J2EnKQordmVyaWZ5KHUiJWMiICUgKDM0LCkgPT0gdSciJykKK3ZlcmlmeSh1IiVjIiAlICgzNiwpID09IHUnJCcpCiB2YWx1ZSA9IHUiJXIsICVyIiAlICh1ImFiYyIsICJhYmMiKQogaWYgdmFsdWUgIT0gdSJ1J2FiYycsICdhYmMnIjoKICAgICBwcmludCAnKioqIGZvcm1hdHRpbmcgZmFpbGVkIGZvciAiJXMiJyAlICd1IiVyLCAlciIgJSAodSJhYmMiLCAiYWJjIiknCiAKLWFzc2VydCB1IiUoeClzLCAlKHkpcyIgJSB7J3gnOnUiYWJjIiwgJ3knOiJkZWYifSA9PSB1J2FiYywgZGVmJwordmVyaWZ5KHUiJSh4KXMsICUoeSlzIiAlIHsneCc6dSJhYmMiLCAneSc6ImRlZiJ9ID09IHUnYWJjLCBkZWYnKQogdHJ5OgogICAgIHZhbHVlID0gdSIlKHgpcywgJSjkKXMiICUgeyd4Jzp1ImFiYyIsIHUn5CcuZW5jb2RlKCd1dGYtOCcpOiJkZWYifQogZXhjZXB0IEtleUVycm9yOgogICAgIHByaW50ICcqKiogZm9ybWF0dGluZyBmYWlsZWQgZm9yICIlcyInICUgInUnYWJjLCBkZWYnIgogZWxzZToKLSAgICBhc3NlcnQgdmFsdWUgPT0gdSdhYmMsIGRlZicKKyAgICB2ZXJpZnkodmFsdWUgPT0gdSdhYmMsIGRlZicpCiAKICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246Ci1hc3NlcnQgJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOnUiYWJjIn0gPT0gdScuLi5hYmMuLi4nCi1hc3NlcnQgJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOiJhYmMifSA9PSAnLi4uYWJjLi4uJwotYXNzZXJ0ICcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6ImFiYyJ9ID09ICcuLi5hYmMuLi4nCi1hc3NlcnQgJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzp1ImFiYyJ9ID09IHUnLi4uYWJjLi4uJwotYXNzZXJ0ICcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6dSJhYmMiLCdkZWYnOjEyM30gPT0gIHUnLi4uYWJjLi4uJwotYXNzZXJ0ICcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6dSJhYmMiLHUnZGVmJzoxMjN9ID09IHUnLi4uYWJjLi4uJwotYXNzZXJ0ICcuLi4lcy4uLiVzLi4uJXMuLi4lcy4uLicgJSAoMSwyLDMsdSJhYmMiKSA9PSB1Jy4uLjEuLi4yLi4uMy4uLmFiYy4uLicKLWFzc2VydCAnLi4uJSUuLi4lJXMuLi4lcy4uLiVzLi4uJXMuLi4lcy4uLicgJSAoMSwyLDMsdSJhYmMiKSA9PSB1Jy4uLiUuLi4lcy4uLjEuLi4yLi4uMy4uLmFiYy4uLicKLWFzc2VydCAnLi4uJXMuLi4nICUgdSJhYmMiID09IHUnLi4uYWJjLi4uJwordmVyaWZ5KCcuLi4lKGZvbylzLi4uJyAlIHsnZm9vJzp1ImFiYyJ9ID09IHUnLi4uYWJjLi4uJykKK3ZlcmlmeSgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6ImFiYyJ9ID09ICcuLi5hYmMuLi4nKQordmVyaWZ5KCcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6ImFiYyJ9ID09ICcuLi5hYmMuLi4nKQordmVyaWZ5KCcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6dSJhYmMifSA9PSB1Jy4uLmFiYy4uLicpCit2ZXJpZnkoJy4uLiUoZm9vKXMuLi4nICUge3UnZm9vJzp1ImFiYyIsJ2RlZic6MTIzfSA9PSAgdScuLi5hYmMuLi4nKQordmVyaWZ5KCcuLi4lKGZvbylzLi4uJyAlIHt1J2Zvbyc6dSJhYmMiLHUnZGVmJzoxMjN9ID09IHUnLi4uYWJjLi4uJykKK3ZlcmlmeSgnLi4uJXMuLi4lcy4uLiVzLi4uJXMuLi4nICUgKDEsMiwzLHUiYWJjIikgPT0gdScuLi4xLi4uMi4uLjMuLi5hYmMuLi4nKQordmVyaWZ5KCcuLi4lJS4uLiUlcy4uLiVzLi4uJXMuLi4lcy4uLiVzLi4uJyAlICgxLDIsMyx1ImFiYyIpID09IHUnLi4uJS4uLiVzLi4uMS4uLjIuLi4zLi4uYWJjLi4uJykKK3ZlcmlmeSgnLi4uJXMuLi4nICUgdSJhYmMiID09IHUnLi4uYWJjLi4uJykKIHByaW50ICdkb25lLicKIAogIyBUZXN0IGJ1aWx0aW4gY29kZWNzCiBwcmludCAnVGVzdGluZyBidWlsdGluIGNvZGVjcy4uLicsCiAKICMgVVRGLTggc3BlY2lmaWMgZW5jb2RpbmcgdGVzdHM6Ci1hc3NlcnQgdSdcdTIwYWMnLmVuY29kZSgndXRmLTgnKSA9PSBcCi0gICAgICAgJycuam9pbigoY2hyKDB4ZTIpLCBjaHIoMHg4MiksIGNocigweGFjKSkpCi1hc3NlcnQgdSdcdWQ4MDBcdWRjMDInLmVuY29kZSgndXRmLTgnKSA9PSBcCi0gICAgICAgJycuam9pbigoY2hyKDB4ZjApLCBjaHIoMHg5MCksIGNocigweDgwKSwgY2hyKDB4ODIpKSkKLWFzc2VydCB1J1x1ZDg0ZFx1ZGM1NicuZW5jb2RlKCd1dGYtOCcpID09IFwKLSAgICAgICAnJy5qb2luKChjaHIoMHhmMCksIGNocigweGEzKSwgY2hyKDB4OTEpLCBjaHIoMHg5NikpKQordmVyaWZ5KHUnXHUyMGFjJy5lbmNvZGUoJ3V0Zi04JykgPT0gXAorICAgICAgICcnLmpvaW4oKGNocigweGUyKSwgY2hyKDB4ODIpLCBjaHIoMHhhYykpKSApCit2ZXJpZnkodSdcdWQ4MDBcdWRjMDInLmVuY29kZSgndXRmLTgnKSA9PSBcCisgICAgICAgJycuam9pbigoY2hyKDB4ZjApLCBjaHIoMHg5MCksIGNocigweDgwKSwgY2hyKDB4ODIpKSkgKQordmVyaWZ5KHUnXHVkODRkXHVkYzU2Jy5lbmNvZGUoJ3V0Zi04JykgPT0gXAorICAgICAgICcnLmpvaW4oKGNocigweGYwKSwgY2hyKDB4YTMpLCBjaHIoMHg5MSksIGNocigweDk2KSkpICkKICMgVVRGLTggc3BlY2lmaWMgZGVjb2RpbmcgdGVzdHMKLWFzc2VydCB1bmljb2RlKCcnLmpvaW4oKGNocigweGYwKSwgY2hyKDB4YTMpLCBjaHIoMHg5MSksIGNocigweDk2KSkpLAotICAgICAgICAgICAgICAgJ3V0Zi04JykgPT0gdSdcdWQ4NGRcdWRjNTYnCi1hc3NlcnQgdW5pY29kZSgnJy5qb2luKChjaHIoMHhmMCksIGNocigweDkwKSwgY2hyKDB4ODApLCBjaHIoMHg4MikpKSwKLSAgICAgICAgICAgICAgICd1dGYtOCcpID09IHUnXHVkODAwXHVkYzAyJwotYXNzZXJ0IHVuaWNvZGUoJycuam9pbigoY2hyKDB4ZTIpLCBjaHIoMHg4MiksIGNocigweGFjKSkpLAotICAgICAgICAgICAgICAgJ3V0Zi04JykgPT0gdSdcdTIwYWMnCit2ZXJpZnkodW5pY29kZSgnJy5qb2luKChjaHIoMHhmMCksIGNocigweGEzKSwgY2hyKDB4OTEpLCBjaHIoMHg5NikpKSwgCisgICAgICAgICAgICAgICAndXRmLTgnKSA9PSB1J1x1ZDg0ZFx1ZGM1NicgKQordmVyaWZ5KHVuaWNvZGUoJycuam9pbigoY2hyKDB4ZjApLCBjaHIoMHg5MCksIGNocigweDgwKSwgY2hyKDB4ODIpKSksIAorICAgICAgICAgICAgICAgJ3V0Zi04JykgPT0gdSdcdWQ4MDBcdWRjMDInICkKK3ZlcmlmeSh1bmljb2RlKCcnLmpvaW4oKGNocigweGUyKSwgY2hyKDB4ODIpLCBjaHIoMHhhYykpKSwgCisgICAgICAgICAgICAgICAndXRmLTgnKSA9PSB1J1x1MjBhYycgKQogCiAjIE90aGVyIHBvc3NpYmxlIHV0Zi04IHRlc3QgY2FzZXM6CiAjICogc3RyaWN0IGRlY29kaW5nIHRlc3RpbmcgZm9yIGFsbCBvZiB0aGUKQEAgLTM4NSwxMCArMzg1LDEwIEBACiAKIAogCi1hc3NlcnQgdW5pY29kZSgnaGVsbG8nLCdhc2NpaScpID09IHUnaGVsbG8nCi1hc3NlcnQgdW5pY29kZSgnaGVsbG8nLCd1dGYtOCcpID09IHUnaGVsbG8nCi1hc3NlcnQgdW5pY29kZSgnaGVsbG8nLCd1dGY4JykgPT0gdSdoZWxsbycKLWFzc2VydCB1bmljb2RlKCdoZWxsbycsJ2xhdGluLTEnKSA9PSB1J2hlbGxvJwordmVyaWZ5KHVuaWNvZGUoJ2hlbGxvJywnYXNjaWknKSA9PSB1J2hlbGxvJykKK3ZlcmlmeSh1bmljb2RlKCdoZWxsbycsJ3V0Zi04JykgPT0gdSdoZWxsbycpCit2ZXJpZnkodW5pY29kZSgnaGVsbG8nLCd1dGY4JykgPT0gdSdoZWxsbycpCit2ZXJpZnkodW5pY29kZSgnaGVsbG8nLCdsYXRpbi0xJykgPT0gdSdoZWxsbycpCiAKIGNsYXNzIFN0cmluZzoKICAgICB4ID0gJycKQEAgLTM5OCwxMiArMzk4LDEyIEBACiBvID0gU3RyaW5nKCkKIAogby54ID0gJ2FiYycKLWFzc2VydCB1bmljb2RlKG8pID09IHUnYWJjJwotYXNzZXJ0IHN0cihvKSA9PSAnYWJjJwordmVyaWZ5KHVuaWNvZGUobykgPT0gdSdhYmMnKQordmVyaWZ5KHN0cihvKSA9PSAnYWJjJykKIAogby54ID0gdSdhYmMnCi1hc3NlcnQgdW5pY29kZShvKSA9PSB1J2FiYycKLWFzc2VydCBzdHIobykgPT0gJ2FiYycKK3ZlcmlmeSh1bmljb2RlKG8pID09IHUnYWJjJykKK3ZlcmlmeShzdHIobykgPT0gJ2FiYycpCiAKIHRyeToKICAgICB1J0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknKQpAQCAtNDEyLDggKzQxMiw4IEBACiAgICAgcGFzcwogZWxzZToKICAgICByYWlzZSBBc3NlcnRpb25FcnJvciwgInUnQW5kclwyMDInLmVuY29kZSgnYXNjaWknKSBmYWlsZWQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIgotYXNzZXJ0IHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ2lnbm9yZScpID09ICJBbmRyIHgiCi1hc3NlcnQgdSdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywncmVwbGFjZScpID09ICJBbmRyPyB4IgordmVyaWZ5KHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ2lnbm9yZScpID09ICJBbmRyIHgiKQordmVyaWZ5KHUnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ3JlcGxhY2UnKSA9PSAiQW5kcj8geCIpCiAKIHRyeToKICAgICB1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknKQpAQCAtNDIyLDI3ICs0MjIsMjcgQEAKICAgICBwYXNzCiBlbHNlOgogICAgIHJhaXNlIEFzc2VydGlvbkVycm9yLCAidW5pY29kZSgnQW5kclwyMDInKSBmYWlsZWQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uIgotYXNzZXJ0IHVuaWNvZGUoJ0FuZHJcMjAyIHgnLCdhc2NpaScsJ2lnbm9yZScpID09IHUiQW5kciB4IgotYXNzZXJ0IHVuaWNvZGUoJ0FuZHJcMjAyIHgnLCdhc2NpaScsJ3JlcGxhY2UnKSA9PSB1J0FuZHJcdUZGRkQgeCcKK3ZlcmlmeSh1bmljb2RlKCdBbmRyXDIwMiB4JywnYXNjaWknLCdpZ25vcmUnKSA9PSB1IkFuZHIgeCIpCit2ZXJpZnkodW5pY29kZSgnQW5kclwyMDIgeCcsJ2FzY2lpJywncmVwbGFjZScpID09IHUnQW5kclx1RkZGRCB4JykKIAotYXNzZXJ0IHUnaGVsbG8nLmVuY29kZSgnYXNjaWknKSA9PSAnaGVsbG8nCi1hc3NlcnQgdSdoZWxsbycuZW5jb2RlKCd1dGYtOCcpID09ICdoZWxsbycKLWFzc2VydCB1J2hlbGxvJy5lbmNvZGUoJ3V0ZjgnKSA9PSAnaGVsbG8nCi1hc3NlcnQgdSdoZWxsbycuZW5jb2RlKCd1dGYtMTYtbGUnKSA9PSAnaFwwMDBlXDAwMGxcMDAwbFwwMDBvXDAwMCcKLWFzc2VydCB1J2hlbGxvJy5lbmNvZGUoJ3V0Zi0xNi1iZScpID09ICdcMDAwaFwwMDBlXDAwMGxcMDAwbFwwMDBvJwotYXNzZXJ0IHUnaGVsbG8nLmVuY29kZSgnbGF0aW4tMScpID09ICdoZWxsbycKK3ZlcmlmeSh1J2hlbGxvJy5lbmNvZGUoJ2FzY2lpJykgPT0gJ2hlbGxvJykKK3ZlcmlmeSh1J2hlbGxvJy5lbmNvZGUoJ3V0Zi04JykgPT0gJ2hlbGxvJykKK3ZlcmlmeSh1J2hlbGxvJy5lbmNvZGUoJ3V0ZjgnKSA9PSAnaGVsbG8nKQordmVyaWZ5KHUnaGVsbG8nLmVuY29kZSgndXRmLTE2LWxlJykgPT0gJ2hcMDAwZVwwMDBsXDAwMGxcMDAwb1wwMDAnKQordmVyaWZ5KHUnaGVsbG8nLmVuY29kZSgndXRmLTE2LWJlJykgPT0gJ1wwMDBoXDAwMGVcMDAwbFwwMDBsXDAwMG8nKQordmVyaWZ5KHUnaGVsbG8nLmVuY29kZSgnbGF0aW4tMScpID09ICdoZWxsbycpCiAKIHUgPSB1Jycuam9pbihtYXAodW5pY2hyLCByYW5nZSgxMDI0KSkpCiBmb3IgZW5jb2RpbmcgaW4gKCd1dGYtOCcsICd1dGYtMTYnLCAndXRmLTE2LWxlJywgJ3V0Zi0xNi1iZScsCiAgICAgICAgICAgICAgICAgICdyYXdfdW5pY29kZV9lc2NhcGUnLCAndW5pY29kZV9lc2NhcGUnLCAndW5pY29kZV9pbnRlcm5hbCcpOgotICAgIGFzc2VydCB1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZykgPT0gdQorICAgIHZlcmlmeSh1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZykgPT0gdSkKIAogdSA9IHUnJy5qb2luKG1hcCh1bmljaHIsIHJhbmdlKDI1NikpKQogZm9yIGVuY29kaW5nIGluICgKICAgICAnbGF0aW4tMScsCiAgICAgKToKICAgICB0cnk6Ci0gICAgICAgIGFzc2VydCB1bmljb2RlKHUuZW5jb2RlKGVuY29kaW5nKSxlbmNvZGluZykgPT0gdQorICAgICAgICB2ZXJpZnkodW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpID09IHUpCiAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgICAgICBwcmludCAnKioqIGNvZGVjICIlcyIgZmFpbGVkIHJvdW5kLXRyaXAnICUgZW5jb2RpbmcKICAgICBleGNlcHQgVmFsdWVFcnJvcix3aHk6CkBAIC00NTMsNyArNDUzLDcgQEAKICAgICAnYXNjaWknLAogICAgICk6CiAgICAgdHJ5OgotICAgICAgICBhc3NlcnQgdW5pY29kZSh1LmVuY29kZShlbmNvZGluZyksZW5jb2RpbmcpID09IHUKKyAgICAgICAgdmVyaWZ5KHVuaWNvZGUodS5lbmNvZGUoZW5jb2RpbmcpLGVuY29kaW5nKSA9PSB1KQogICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKICAgICAgICAgcHJpbnQgJyoqKiBjb2RlYyAiJXMiIGZhaWxlZCByb3VuZC10cmlwJyAlIGVuY29kaW5nCiAgICAgZXhjZXB0IFZhbHVlRXJyb3Isd2h5OgpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAKICAgICApOgogICAgIHRyeToKLSAgICAgICAgYXNzZXJ0IHVuaWNvZGUocyxlbmNvZGluZykuZW5jb2RlKGVuY29kaW5nKSA9PSBzCisgICAgICAgIHZlcmlmeSh1bmljb2RlKHMsZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZykgPT0gcykKICAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6CiAgICAgICAgIHByaW50ICcqKiogY29kZWMgIiVzIiBmYWlsZWQgcm91bmQtdHJpcCcgJSBlbmNvZGluZwogICAgIGV4Y2VwdCBWYWx1ZUVycm9yLHdoeToKQEAgLTUxNyw3ICs1MTcsNyBAQAogCiAgICAgKToKICAgICB0cnk6Ci0gICAgICAgIGFzc2VydCB1bmljb2RlKHMsZW5jb2RpbmcpLmVuY29kZShlbmNvZGluZykgPT0gcworICAgICAgICB2ZXJpZnkodW5pY29kZShzLGVuY29kaW5nKS5lbmNvZGUoZW5jb2RpbmcpID09IHMpCiAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgogICAgICAgICBwcmludCAnKioqIGNvZGVjICIlcyIgZmFpbGVkIHJvdW5kLXRyaXAnICUgZW5jb2RpbmcKICAgICBleGNlcHQgVmFsdWVFcnJvcix3aHk6CkBAIC01MjYsOSArNTI2LDkgQEAKIHByaW50ICdkb25lLicKIAogcHJpbnQgJ1Rlc3RpbmcgVW5pY29kZSBzdHJpbmcgY29uY2F0ZW5hdGlvbi4uLicsCi1hc3NlcnQgKHUiYWJjIiB1ImRlZiIpID09IHUiYWJjZGVmIgotYXNzZXJ0ICgiYWJjIiB1ImRlZiIpID09IHUiYWJjZGVmIgotYXNzZXJ0ICh1ImFiYyIgImRlZiIpID09IHUiYWJjZGVmIgotYXNzZXJ0ICh1ImFiYyIgdSJkZWYiICJnaGkiKSA9PSB1ImFiY2RlZmdoaSIKLWFzc2VydCAoImFiYyIgImRlZiIgdSJnaGkiKSA9PSB1ImFiY2RlZmdoaSIKK3ZlcmlmeSgodSJhYmMiIHUiZGVmIikgPT0gdSJhYmNkZWYiKQordmVyaWZ5KCgiYWJjIiB1ImRlZiIpID09IHUiYWJjZGVmIikKK3ZlcmlmeSgodSJhYmMiICJkZWYiKSA9PSB1ImFiY2RlZiIpCit2ZXJpZnkoKHUiYWJjIiB1ImRlZiIgImdoaSIpID09IHUiYWJjZGVmZ2hpIikKK3ZlcmlmeSgoImFiYyIgImRlZiIgdSJnaGkiKSA9PSB1ImFiY2RlZmdoaSIpCiBwcmludCAnZG9uZS4nCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQppbmRleCA3ZTNjZjIyLi5kYjAzZDM1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKQEAgLTUsNiArNSw3IEBACiAgICAgKGMpIENvcHlyaWdodCBDTlJJLCBBbGwgUmlnaHRzIFJlc2VydmVkLiBOTyBXQVJSQU5UWS4KIAogIiIiIyIKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIGltcG9ydCBzaGEKIAogZW5jb2RpbmcgPSAndXRmLTgnCkBAIC04NywzOCArODgsMzggQEAKICMgU29tZSBhZGRpdGlvbmFsIGNoZWNrcyBvZiB0aGUgQVBJOgogcHJpbnQgJ0FQSTonLAogCi1hc3NlcnQgdW5pY29kZWRhdGEuZGlnaXQodSdBJyxOb25lKSBpcyBOb25lCi1hc3NlcnQgdW5pY29kZWRhdGEuZGlnaXQodSc5JykgPT0gOQotYXNzZXJ0IHVuaWNvZGVkYXRhLmRpZ2l0KHUnXHUyMTViJyxOb25lKSBpcyBOb25lCi1hc3NlcnQgdW5pY29kZWRhdGEuZGlnaXQodSdcdTI0NjgnKSA9PSA5Cit2ZXJpZnkodW5pY29kZWRhdGEuZGlnaXQodSdBJyxOb25lKSBpcyBOb25lKQordmVyaWZ5KHVuaWNvZGVkYXRhLmRpZ2l0KHUnOScpID09IDkpCit2ZXJpZnkodW5pY29kZWRhdGEuZGlnaXQodSdcdTIxNWInLE5vbmUpIGlzIE5vbmUpCit2ZXJpZnkodW5pY29kZWRhdGEuZGlnaXQodSdcdTI0NjgnKSA9PSA5KQogCi1hc3NlcnQgdW5pY29kZWRhdGEubnVtZXJpYyh1J0EnLE5vbmUpIGlzIE5vbmUKLWFzc2VydCB1bmljb2RlZGF0YS5udW1lcmljKHUnOScpID09IDkKLWFzc2VydCB1bmljb2RlZGF0YS5udW1lcmljKHUnXHUyMTViJykgPT0gMC4xMjUKLWFzc2VydCB1bmljb2RlZGF0YS5udW1lcmljKHUnXHUyNDY4JykgPT0gOS4wCit2ZXJpZnkodW5pY29kZWRhdGEubnVtZXJpYyh1J0EnLE5vbmUpIGlzIE5vbmUpCit2ZXJpZnkodW5pY29kZWRhdGEubnVtZXJpYyh1JzknKSA9PSA5KQordmVyaWZ5KHVuaWNvZGVkYXRhLm51bWVyaWModSdcdTIxNWInKSA9PSAwLjEyNSkKK3ZlcmlmeSh1bmljb2RlZGF0YS5udW1lcmljKHUnXHUyNDY4JykgPT0gOS4wKQogCi1hc3NlcnQgdW5pY29kZWRhdGEuZGVjaW1hbCh1J0EnLE5vbmUpIGlzIE5vbmUKLWFzc2VydCB1bmljb2RlZGF0YS5kZWNpbWFsKHUnOScpID09IDkKLWFzc2VydCB1bmljb2RlZGF0YS5kZWNpbWFsKHUnXHUyMTViJyxOb25lKSBpcyBOb25lCi1hc3NlcnQgdW5pY29kZWRhdGEuZGVjaW1hbCh1J1x1MjQ2OCcsTm9uZSkgaXMgTm9uZQordmVyaWZ5KHVuaWNvZGVkYXRhLmRlY2ltYWwodSdBJyxOb25lKSBpcyBOb25lKQordmVyaWZ5KHVuaWNvZGVkYXRhLmRlY2ltYWwodSc5JykgPT0gOSkKK3ZlcmlmeSh1bmljb2RlZGF0YS5kZWNpbWFsKHUnXHUyMTViJyxOb25lKSBpcyBOb25lKQordmVyaWZ5KHVuaWNvZGVkYXRhLmRlY2ltYWwodSdcdTI0NjgnLE5vbmUpIGlzIE5vbmUpCiAKLWFzc2VydCB1bmljb2RlZGF0YS5jYXRlZ29yeSh1J1x1RkZGRScpID09ICdDbicKLWFzc2VydCB1bmljb2RlZGF0YS5jYXRlZ29yeSh1J2EnKSA9PSAnTGwnCi1hc3NlcnQgdW5pY29kZWRhdGEuY2F0ZWdvcnkodSdBJykgPT0gJ0x1JwordmVyaWZ5KHVuaWNvZGVkYXRhLmNhdGVnb3J5KHUnXHVGRkZFJykgPT0gJ0NuJykKK3ZlcmlmeSh1bmljb2RlZGF0YS5jYXRlZ29yeSh1J2EnKSA9PSAnTGwnKQordmVyaWZ5KHVuaWNvZGVkYXRhLmNhdGVnb3J5KHUnQScpID09ICdMdScpCiAKLWFzc2VydCB1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKHUnXHVGRkZFJykgPT0gJycKLWFzc2VydCB1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKHUnICcpID09ICdXUycKLWFzc2VydCB1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKHUnQScpID09ICdMJwordmVyaWZ5KHVuaWNvZGVkYXRhLmJpZGlyZWN0aW9uYWwodSdcdUZGRkUnKSA9PSAnJykKK3ZlcmlmeSh1bmljb2RlZGF0YS5iaWRpcmVjdGlvbmFsKHUnICcpID09ICdXUycpCit2ZXJpZnkodW5pY29kZWRhdGEuYmlkaXJlY3Rpb25hbCh1J0EnKSA9PSAnTCcpCiAKLWFzc2VydCB1bmljb2RlZGF0YS5kZWNvbXBvc2l0aW9uKHUnXHVGRkZFJykgPT0gJycKLWFzc2VydCB1bmljb2RlZGF0YS5kZWNvbXBvc2l0aW9uKHUnXHUwMGJjJykgPT0gJzxmcmFjdGlvbj4gMDAzMSAyMDQ0IDAwMzQnCit2ZXJpZnkodW5pY29kZWRhdGEuZGVjb21wb3NpdGlvbih1J1x1RkZGRScpID09ICcnKQordmVyaWZ5KHVuaWNvZGVkYXRhLmRlY29tcG9zaXRpb24odSdcdTAwYmMnKSA9PSAnPGZyYWN0aW9uPiAwMDMxIDIwNDQgMDAzNCcpCiAKLWFzc2VydCB1bmljb2RlZGF0YS5taXJyb3JlZCh1J1x1RkZGRScpID09IDAKLWFzc2VydCB1bmljb2RlZGF0YS5taXJyb3JlZCh1J2EnKSA9PSAwCi1hc3NlcnQgdW5pY29kZWRhdGEubWlycm9yZWQodSdcdTIyMDEnKSA9PSAxCit2ZXJpZnkodW5pY29kZWRhdGEubWlycm9yZWQodSdcdUZGRkUnKSA9PSAwKQordmVyaWZ5KHVuaWNvZGVkYXRhLm1pcnJvcmVkKHUnYScpID09IDApCit2ZXJpZnkodW5pY29kZWRhdGEubWlycm9yZWQodSdcdTIyMDEnKSA9PSAxKQogCi1hc3NlcnQgdW5pY29kZWRhdGEuY29tYmluaW5nKHUnXHVGRkZFJykgPT0gMAotYXNzZXJ0IHVuaWNvZGVkYXRhLmNvbWJpbmluZyh1J2EnKSA9PSAwCi1hc3NlcnQgdW5pY29kZWRhdGEuY29tYmluaW5nKHUnXHUyMGUxJykgPT0gMjMwCit2ZXJpZnkodW5pY29kZWRhdGEuY29tYmluaW5nKHUnXHVGRkZFJykgPT0gMCkKK3ZlcmlmeSh1bmljb2RlZGF0YS5jb21iaW5pbmcodSdhJykgPT0gMCkKK3ZlcmlmeSh1bmljb2RlZGF0YS5jb21iaW5pbmcodSdcdTIwZTEnKSA9PSAyMzApCiAKIHByaW50ICdvaycKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKaW5kZXggODE1MzNlMS4uZDJkNWQ2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkKQEAgLTEsNCArMSw1IEBACiAjIE1pbmltYWwgdGVzdCBvZiB0aGUgcXVvdGUgZnVuY3Rpb24KK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIGltcG9ydCB1cmxsaWIKIAogY2hhcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXApAQCAtMTEsMjAgKzEyLDIwIEBACiBleHBlY3RlZCA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiVkZiVlMCVlMSVlMiVlMyVlNCVlNSVlNiVlNyVlOCVlOSVlYSVlYiVlYyVlZCVlZSVlZiVmMCVmMSVmMiVmMyVmNCVmNSVmNiVmOCVmOSVmYSVmYiVmYyVmZCVmZSVmZkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJWMwJWMxJWMyJWMzJWM0JWM1JWM2JWM3JWM4JWM5JWNhJWNiJWNjJWNkJWNlJWNmJWQwJWQxJWQyJWQzJWQ0JWQ1JWQ2JWQ4JWQ5JWRhJWRiJWRjJWRkJWRlJwogCiB0ZXN0ID0gdXJsbGliLnF1b3RlKGNoYXJzKQotYXNzZXJ0IHRlc3QgPT0gZXhwZWN0ZWQsICJ1cmxsaWIucXVvdGUgcHJvYmxlbSIKK3ZlcmlmeSh0ZXN0ID09IGV4cGVjdGVkLCAidXJsbGliLnF1b3RlIHByb2JsZW0iKQogdGVzdDIgPSB1cmxsaWIudW5xdW90ZShleHBlY3RlZCkKLWFzc2VydCB0ZXN0MiA9PSBjaGFycwordmVyaWZ5KHRlc3QyID09IGNoYXJzKQogCiBpbjEgPSAiYWJjL2RlZiIKIG91dDFfMSA9ICJhYmMvZGVmIgogb3V0MV8yID0gImFiYyUyZmRlZiIKIAotYXNzZXJ0IHVybGxpYi5xdW90ZShpbjEpID09IG91dDFfMSwgInVybGxpYi5xdW90ZSBwcm9ibGVtIgotYXNzZXJ0IHVybGxpYi5xdW90ZShpbjEsICcnKSA9PSBvdXQxXzIsICJ1cmxsaWIucXVvdGUgcHJvYmxlbSIKK3ZlcmlmeSh1cmxsaWIucXVvdGUoaW4xKSA9PSBvdXQxXzEsICJ1cmxsaWIucXVvdGUgcHJvYmxlbSIpCit2ZXJpZnkodXJsbGliLnF1b3RlKGluMSwgJycpID09IG91dDFfMiwgInVybGxpYi5xdW90ZSBwcm9ibGVtIikKIAogaW4yID0gImFiYz9kZWYiCiBvdXQyXzEgPSAiYWJjJTNmZGVmIgogb3V0Ml8yID0gImFiYz9kZWYiCiAKLWFzc2VydCB1cmxsaWIucXVvdGUoaW4yKSA9PSBvdXQyXzEsICJ1cmxsaWIucXVvdGUgcHJvYmxlbSIKLWFzc2VydCB1cmxsaWIucXVvdGUoaW4yLCAnPycpID09IG91dDJfMiwgInVybGxpYi5xdW90ZSBwcm9ibGVtIgordmVyaWZ5KHVybGxpYi5xdW90ZShpbjIpID09IG91dDJfMSwgInVybGxpYi5xdW90ZSBwcm9ibGVtIikKK3ZlcmlmeSh1cmxsaWIucXVvdGUoaW4yLCAnPycpID09IG91dDJfMiwgInVybGxpYi5xdW90ZSBwcm9ibGVtIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CmluZGV4IDYzNjMyZjcuLjA4YjdhMTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQpAQCAtMSw1ICsxLDYgQEAKICMgQ2hlY2sgZXZlcnkgcGF0aCB0aHJvdWdoIGV2ZXJ5IG1ldGhvZCBvZiBVc2VyRGljdAogCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBmcm9tIFVzZXJEaWN0IGltcG9ydCBVc2VyRGljdAogCiBkMCA9IHt9CkBAIC0yMCwyNiArMjEsMjYgQEAKIAogIyBUZXN0IF9fcmVwcl9fCiAKLWFzc2VydCBzdHIodTApID09IHN0cihkMCkKLWFzc2VydCByZXByKHUxKSA9PSByZXByKGQxKQotYXNzZXJ0IGB1MmAgPT0gYGQyYAordmVyaWZ5KHN0cih1MCkgPT0gc3RyKGQwKSkKK3ZlcmlmeShyZXByKHUxKSA9PSByZXByKGQxKSkKK3ZlcmlmeShgdTJgID09IGBkMmApCiAKICMgVGVzdCBfX2NtcF9fIGFuZCBfX2xlbl9fCiAKIGFsbCA9IFtkMCwgZDEsIGQyLCB1LCB1MCwgdTEsIHUyLCB1dSwgdXUwLCB1dTEsIHV1Ml0KIGZvciBhIGluIGFsbDoKICAgICBmb3IgYiBpbiBhbGw6Ci0gICAgICAgIGFzc2VydCBjbXAoYSwgYikgPT0gY21wKGxlbihhKSwgbGVuKGIpKQorICAgICAgICB2ZXJpZnkoY21wKGEsIGIpID09IGNtcChsZW4oYSksIGxlbihiKSkpCiAKICMgVGVzdCBfX2dldGl0ZW1fXwogCi1hc3NlcnQgdTJbIm9uZSJdID09IDEKK3ZlcmlmeSh1Mlsib25lIl0gPT0gMSkKIHRyeToKICAgICB1MVsidHdvIl0KIGV4Y2VwdCBLZXlFcnJvcjoKICAgICBwYXNzCiBlbHNlOgotICAgIGFzc2VydCAwLCAidTFbJ3R3byddIHNob3VsZG4ndCBleGlzdCIKKyAgICB2ZXJpZnkoMCwgInUxWyd0d28nXSBzaG91bGRuJ3QgZXhpc3QiKQogCiAjIFRlc3QgX19zZXRpdGVtX18KIApAQCAtNTUsNDcgKzU2LDQ3IEBACiBleGNlcHQgS2V5RXJyb3I6CiAgICAgcGFzcwogZWxzZToKLSAgICBhc3NlcnQgMCwgInUzWyd0aHJlZSddIHNob3VsZG4ndCBleGlzdCIKKyAgICB2ZXJpZnkoMCwgInUzWyd0aHJlZSddIHNob3VsZG4ndCBleGlzdCIpCiAKICMgVGVzdCBjbGVhcgogCiB1My5jbGVhcigpCi1hc3NlcnQgdTMgPT0ge30KK3ZlcmlmeSh1MyA9PSB7fSkKIAogIyBUZXN0IGNvcHkoKQogCiB1MmEgPSB1Mi5jb3B5KCkKLWFzc2VydCB1MmEgPT0gdTIKK3ZlcmlmeSh1MmEgPT0gdTIpCiAKIGNsYXNzIE15VXNlckRpY3QoVXNlckRpY3QpOgogICAgIGRlZiBkaXNwbGF5KHNlbGYpOiBwcmludCBzZWxmCiAKIG0yID0gTXlVc2VyRGljdCh1MikKIG0yYSA9IG0yLmNvcHkoKQotYXNzZXJ0IG0yYSA9PSBtMgordmVyaWZ5KG0yYSA9PSBtMikKIAogIyBUZXN0IGtleXMsIGl0ZW1zLCB2YWx1ZXMKIAotYXNzZXJ0IHUyLmtleXMoKSA9PSBkMi5rZXlzKCkKLWFzc2VydCB1Mi5pdGVtcygpID09IGQyLml0ZW1zKCkKLWFzc2VydCB1Mi52YWx1ZXMoKSA9PSBkMi52YWx1ZXMoKQordmVyaWZ5KHUyLmtleXMoKSA9PSBkMi5rZXlzKCkpCit2ZXJpZnkodTIuaXRlbXMoKSA9PSBkMi5pdGVtcygpKQordmVyaWZ5KHUyLnZhbHVlcygpID09IGQyLnZhbHVlcygpKQogCiAjIFRlc3QgaGFzX2tleQogCiBmb3IgaSBpbiB1Mi5rZXlzKCk6Ci0gICAgYXNzZXJ0IHUyLmhhc19rZXkoaSkgPT0gMQotICAgIGFzc2VydCB1MS5oYXNfa2V5KGkpID09IGQxLmhhc19rZXkoaSkKLSAgICBhc3NlcnQgdTAuaGFzX2tleShpKSA9PSBkMC5oYXNfa2V5KGkpCisgICAgdmVyaWZ5KHUyLmhhc19rZXkoaSkgPT0gMSkKKyAgICB2ZXJpZnkodTEuaGFzX2tleShpKSA9PSBkMS5oYXNfa2V5KGkpKQorICAgIHZlcmlmeSh1MC5oYXNfa2V5KGkpID09IGQwLmhhc19rZXkoaSkpCiAKICMgVGVzdCB1cGRhdGUKIAogdCA9IFVzZXJEaWN0KCkKIHQudXBkYXRlKHUyKQotYXNzZXJ0IHQgPT0gdTIKK3ZlcmlmeSh0ID09IHUyKQogCiAjIFRlc3QgZ2V0CiAKIGZvciBpIGluIHUyLmtleXMoKToKLSAgICBhc3NlcnQgdTIuZ2V0KGkpID09IHUyW2ldCi0gICAgYXNzZXJ0IHUxLmdldChpKSA9PSBkMS5nZXQoaSkKLSAgICBhc3NlcnQgdTAuZ2V0KGkpID09IGQwLmdldChpKQorICAgIHZlcmlmeSh1Mi5nZXQoaSkgPT0gdTJbaV0pCisgICAgdmVyaWZ5KHUxLmdldChpKSA9PSBkMS5nZXQoaSkpCisgICAgdmVyaWZ5KHUwLmdldChpKSA9PSBkMC5nZXQoaSkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5IGIvTGliL3Rlc3QvdGVzdF91c2VybGlzdC5weQppbmRleCBlOGQ5Y2IwLi5kYTg2NmNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJsaXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcmxpc3QucHkKQEAgLTMsNyArMyw3IEBACiBmcm9tIFVzZXJMaXN0IGltcG9ydCBVc2VyTGlzdAogZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IFRlc3RGYWlsZWQKIAotIyBVc2UgY2hlY2sgaW5zdGVhZCBvZiBhc3NlcnQgc28gLU8gZG9lc24ndCByZW5kZXIgdGhlCisjIFVzZSBjaGVjayBpbnN0ZWFkIG9mIHZlcmlmeShzbyAtTyBkb2Vzbid0IHJlbmRlciB0aGUpCiAjIHRlc3QgdXNlbGVzcy4KIGRlZiBjaGVjayhwcmVkaWNhdGUsIG1zZyk6CiAgICAgaWYgbm90IHByZWRpY2F0ZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weSBiL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQppbmRleCBhNDdiZmRkLi40ZjU0ZGIyIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiBpbXBvcnQgc3lzLCBzdHJpbmcKLWZyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJib3NlCitmcm9tIHRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyaWZ5LCB2ZXJib3NlCiBpbXBvcnQgc3RyaW5nX3Rlc3RzCiAjIFVzZXJTdHJpbmcgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIGJ1aWx0aW4gc3RyaW5nIHR5cGUuCiAjIFVzZXJTdHJpbmcgaW5zdGFuY2VzIHNob3VsZCBiZWhhdmUgc2ltaWxhciB0byBidWlsdGluIHN0cmluZyBvYmplY3RzLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQppbmRleCBmM2Q1Y2RmLi4yMGRmN2RlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQpAQCAtMzEsMTEgKzMxLDExIEBACiAKICAgICAjIENoZWNrIHdlIHdyb3RlIGFzIG1hbnkgaXRlbXMgYXMgd2UgdGhvdWdodC4KICAgICBua2V5cywgbnZhbHVlcywgc2luY2VfbW9kID0gUXVlcnlJbmZvS2V5KGtleSkKLSAgICBhc3NlcnQgbmtleXM9PTEsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHN1YiBrZXlzIgotICAgIGFzc2VydCBudmFsdWVzPT0xLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiB2YWx1ZXMiCisgICAgdmVyaWZ5KG5rZXlzPT0xLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiBzdWIga2V5cyIpCisgICAgdmVyaWZ5KG52YWx1ZXM9PTEsICJOb3QgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHZhbHVlcyIpCiAgICAgbmtleXMsIG52YWx1ZXMsIHNpbmNlX21vZCA9IFF1ZXJ5SW5mb0tleShzdWJfa2V5KQotICAgIGFzc2VydCBua2V5cz09MCwgIk5vdCB0aGUgY29ycmVjdCBudW1iZXIgb2Ygc3ViIGtleXMiCi0gICAgYXNzZXJ0IG52YWx1ZXM9PWxlbih0ZXN0X2RhdGEpLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiB2YWx1ZXMiCisgICAgdmVyaWZ5KG5rZXlzPT0wLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiBzdWIga2V5cyIpCisgICAgdmVyaWZ5KG52YWx1ZXM9PWxlbih0ZXN0X2RhdGEpLCAiTm90IHRoZSBjb3JyZWN0IG51bWJlciBvZiB2YWx1ZXMiKQogICAgICMgQ2xvc2UgdGhpcyBrZXkgdGhpcyB3YXkuLi4KICAgICAjIChidXQgYmVmb3JlIHdlIGRvLCBjb3B5IHRoZSBrZXkgYXMgYW4gaW50ZWdlciAtIHRoaXMgYWxsb3dzCiAgICAgIyB1cyB0byB0ZXN0IHRoYXQgdGhlIGtleSByZWFsbHkgZ2V0cyBjbG9zZWQpLgpAQCAtNTgsNyArNTgsNyBAQAogZGVmIFJlYWRUZXN0RGF0YShyb290X2tleSk6CiAgICAgIyBDaGVjayB3ZSBjYW4gZ2V0IGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMga2V5LgogICAgIHZhbCA9IFF1ZXJ5VmFsdWUocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCi0gICAgYXNzZXJ0IHZhbD09IkRlZmF1bHQgdmFsdWUiLCAiUmVnaXN0cnkgZGlkbid0IGdpdmUgYmFjayB0aGUgY29ycmVjdCB2YWx1ZSIKKyAgICB2ZXJpZnkodmFsPT0iRGVmYXVsdCB2YWx1ZSIsICJSZWdpc3RyeSBkaWRuJ3QgZ2l2ZSBiYWNrIHRoZSBjb3JyZWN0IHZhbHVlIikKIAogICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCiAgICAgIyBSZWFkIHRoZSBzdWIta2V5cwpAQCAtNzAsMjEgKzcwLDIxIEBACiAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQogICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGFzc2VydCBkYXRhIGluIHRlc3RfZGF0YSwgIkRpZG4ndCByZWFkIGJhY2sgdGhlIGNvcnJlY3QgdGVzdCBkYXRhIgorICAgICAgICB2ZXJpZnkoZGF0YSBpbiB0ZXN0X2RhdGEsICJEaWRuJ3QgcmVhZCBiYWNrIHRoZSBjb3JyZWN0IHRlc3QgZGF0YSIpCiAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0gICAgYXNzZXJ0IGluZGV4PT1sZW4odGVzdF9kYXRhKSwgIkRpZG4ndCByZWFkIHRoZSBjb3JyZWN0IG51bWJlciBvZiBpdGVtcyIKKyAgICB2ZXJpZnkoaW5kZXg9PWxlbih0ZXN0X2RhdGEpLCAiRGlkbid0IHJlYWQgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIikKICAgICAjIENoZWNrIEkgY2FuIGRpcmVjdGx5IGFjY2VzcyBlYWNoIGl0ZW0KICAgICBmb3IgdmFsdWVfbmFtZSwgdmFsdWVfZGF0YSwgdmFsdWVfdHlwZSBpbiB0ZXN0X2RhdGE6CiAgICAgICAgIHJlYWRfdmFsLCByZWFkX3R5cCA9IFF1ZXJ5VmFsdWVFeChzdWJfa2V5LCB2YWx1ZV9uYW1lKQotICAgICAgICBhc3NlcnQgcmVhZF92YWw9PXZhbHVlX2RhdGEgYW5kIHJlYWRfdHlwID09IHZhbHVlX3R5cGUsIFwKLSAgICAgICAgICAgICAgICJDb3VsZCBub3QgZGlyZWN0bHkgcmVhZCB0aGUgdmFsdWUiCisgICAgICAgIHZlcmlmeShyZWFkX3ZhbD09dmFsdWVfZGF0YSBhbmQgcmVhZF90eXAgPT0gdmFsdWVfdHlwZSwgXAorICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBkaXJlY3RseSByZWFkIHRoZSB2YWx1ZSIgKQogICAgIHN1Yl9rZXkuQ2xvc2UoKQogICAgICMgRW51bWVyYXRlIG91ciBtYWluIGtleS4KICAgICByZWFkX3ZhbCA9IEVudW1LZXkoa2V5LCAwKQotICAgIGFzc2VydCByZWFkX3ZhbCA9PSAic3ViX2tleSIsICJSZWFkIHN1YmtleSB2YWx1ZSB3cm9uZyIKKyAgICB2ZXJpZnkocmVhZF92YWwgPT0gInN1Yl9rZXkiLCAiUmVhZCBzdWJrZXkgdmFsdWUgd3JvbmciKQogICAgIHRyeToKICAgICAgICAgRW51bUtleShrZXksIDEpCi0gICAgICAgIGFzc2VydCAwLCAiV2FzIGFibGUgdG8gZ2V0IGEgc2Vjb25kIGtleSB3aGVuIEkgb25seSBoYXZlIG9uZSEiCisgICAgICAgIHZlcmlmeSgwLCAiV2FzIGFibGUgdG8gZ2V0IGEgc2Vjb25kIGtleSB3aGVuIEkgb25seSBoYXZlIG9uZSEiKQogICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgogICAgICAgICBwYXNzCiAKQEAgLTEwMCwxNCArMTAwLDE0IEBACiAgICAgICAgIERlbGV0ZVZhbHVlKHN1Yl9rZXksIHZhbHVlX25hbWUpCiAKICAgICBua2V5cywgbnZhbHVlcywgc2luY2VfbW9kID0gUXVlcnlJbmZvS2V5KHN1Yl9rZXkpCi0gICAgYXNzZXJ0IG5rZXlzPT0wIGFuZCBudmFsdWVzPT0wLCAic3Via2V5IG5vdCBlbXB0eSBiZWZvcmUgZGVsZXRlIgorICAgIHZlcmlmeShua2V5cz09MCBhbmQgbnZhbHVlcz09MCwgInN1YmtleSBub3QgZW1wdHkgYmVmb3JlIGRlbGV0ZSIpCiAgICAgc3ViX2tleS5DbG9zZSgpCiAgICAgRGVsZXRlS2V5KGtleSwgInN1Yl9rZXkiKQogCiAgICAgdHJ5OgogICAgICAgICAjIFNob3VsZG50IGJlIGFibGUgdG8gZGVsZXRlIGl0IHR3aWNlIQogICAgICAgICBEZWxldGVLZXkoa2V5LCAic3ViX2tleSIpCi0gICAgICAgIGFzc2VydCAwLCAiRGVsZXRpbmcgdGhlIGtleSB0d2ljZSBzdWNjZWVkZWQiCisgICAgICAgIHZlcmlmeSgwLCAiRGVsZXRpbmcgdGhlIGtleSB0d2ljZSBzdWNjZWVkZWQiKQogICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgogICAgICAgICBwYXNzCiAgICAga2V5LkNsb3NlKCkKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICMgT3BlbmluZyBzaG91bGQgbm93IGZhaWwhCiAgICAgdHJ5OgogICAgICAgICBrZXkgPSBPcGVuS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQotICAgICAgICBhc3NlcnQgMCwgIkNvdWxkIG9wZW4gdGhlIG5vbi1leGlzdGVudCBrZXkiCisgICAgICAgIHZlcmlmeSgwLCAiQ291bGQgb3BlbiB0aGUgbm9uLWV4aXN0ZW50IGtleSIpCiAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjogIyBVc2UgdGhpcyBlcnJvciBuYW1lIHRoaXMgdGltZQogICAgICAgICBwYXNzCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sbGliLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkKaW5kZXggNjI4MDNiNS4uMzJmNmI4NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxsaWIucHkKQEAgLTIsNyArMiw3IEBACiAgICBTam9lcmQgTXVsbGVuZGVyCiAnJycKIAotZnJvbSB0ZXN0X3N1cHBvcnQgaW1wb3J0IHZlcmJvc2UKK2Zyb20gdGVzdF9zdXBwb3J0IGltcG9ydCB2ZXJpZnksIHZlcmJvc2UKIAogdGVzdGRvYyA9ICIiIlwKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSd5ZXMnID8+Cg==