ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5IGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU1Zjg5OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5CkBAIC0wLDAgKzEsMTEyIEBACitpbXBvcnQgdGVzdF9zdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjU3RyaW5nSU8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIHF1b3ByaSBpbXBvcnQgKgorCisKKwwKK0VOQ1NBTVBMRSA9ICIiIlwKK0hlcmUncyBhIGJ1bmNoIG9mIHNwZWNpYWw9MjAKKworPUExPUEyPUEzPUE0PUE1PUE2PUE3PUE4PUE5Cis9QUE9QUI9QUM9QUQ9QUU9QUY9QjA9QjE9QjI9QjMKKz1CND1CNT1CNj1CNz1COD1COT1CQT1CQj1CQz1CRD1CRQorPUJGPUMwPUMxPUMyPUMzPUM0PUM1PUM2Cis9Qzc9Qzg9Qzk9Q0E9Q0I9Q0M9Q0Q9Q0U9Q0YKKz1EMD1EMT1EMj1EMz1END1ENT1ENj1ENworPUQ4PUQ5PURBPURCPURDPUREPURFPURGCis9RTA9RTE9RTI9RTM9RTQ9RTU9RTY9RTcKKz1FOD1FOT1FQT1FQj1FQz1FRD1FRT1FRgorPUYwPUYxPUYyPUYzPUY0PUY1PUY2PUY3Cis9Rjg9Rjk9RkE9RkI9RkM9RkQ9RkU9RkYKKworY2hhcmFjdGVycy4uLiBoYXZlIGZ1biEKKyIiIgorCisjIEZpcnN0IGxpbmUgZW5kcyB3aXRoIGEgc3BhY2UKK0RFQ1NBTVBMRSA9ICIiIlwKK0hlcmUncyBhIGJ1bmNoIG9mIHNwZWNpYWwgCisKK6Gio6SlpqeoqQorqqusra6vsLGyswortLW2t7i5uru8vb4KK7/AwcLDxMXGCivHyMnKy8zNzs8KK9DR0tPU1dbXCivY2drb3N3e3wor4OHi4+Tl5ucKK+jp6uvs7e7vCivw8fLz9PX29wor+Pn6+/z9/v8KKworY2hhcmFjdGVycy4uLiBoYXZlIGZ1biEKKyIiIgorCisKKwwKK2NsYXNzIFF1b3ByaVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEVhY2ggZW50cnkgaXMgYSB0dXBsZSBvZiAocGxhaW50ZXh0LCBlbmNvZGVkIHN0cmluZykuICBUaGVzZSBzdHJpbmdzIGFyZQorICAgICMgdXNlZCBpbiB0aGUgInF1b3RldGFicz0wIiB0ZXN0cy4KKyAgICBTVFJJTkdTID0gKAorICAgICAgICAjIFNvbWUgbm9ybWFsIHN0cmluZ3MKKyAgICAgICAgKCdoZWxsbycsICdoZWxsbycpLAorICAgICAgICAoJycnaGVsbG8KKyAgICAgICAgdGhlcmUKKyAgICAgICAgd29ybGQnJycsICcnJ2hlbGxvCisgICAgICAgIHRoZXJlCisgICAgICAgIHdvcmxkJycnKSwKKyAgICAgICAgKCcnJ2hlbGxvCisgICAgICAgIHRoZXJlCisgICAgICAgIHdvcmxkCisnJycsICcnJ2hlbGxvCisgICAgICAgIHRoZXJlCisgICAgICAgIHdvcmxkCisnJycpLAorICAgICAgICAoJ1wyMDFcMjAyXDIwMycsICc9ODE9ODI9ODMnKSwKKyAgICAgICAgIyBBZGQgc29tZSB0cmFpbGluZyBNVVNUIFFVT1RFIHN0cmluZ3MKKyAgICAgICAgKCdoZWxsbyAnLCAnaGVsbG89MjAnKSwKKyAgICAgICAgKCdoZWxsb1x0JywgJ2hlbGxvPTA5JyksCisgICAgICAgICMgTm93IHNvbWUgcmVhbGx5IGNvbXBsZXggc3R1ZmYKKyAgICAgICAgKERFQ1NBTVBMRSwgRU5DU0FNUExFKSwKKyAgICAgICAgKQorCisgICAgIyBUaGVzZSBhcmUgdXNlZCBpbiB0aGUgInF1b3RldGFicz0xIiB0ZXN0cy4KKyAgICBFU1RSSU5HUyA9ICgKKyAgICAgICAgKCdoZWxsbyB3b3JsZCcsICdoZWxsbz0yMHdvcmxkJyksCisgICAgICAgICgnaGVsbG9cdHdvcmxkJywgJ2hlbGxvPTA5d29ybGQnKSwKKyAgICAgICAgKQorICAgICAgICAKKyAgICBkZWYgdGVzdF9lbmNvZGVzdHJpbmcoc2VsZik6CisgICAgICAgIGZvciBwLCBlIGluIHNlbGYuU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhlbmNvZGVzdHJpbmcocCkgPT0gZSkKKyAgICAgICAgCisgICAgZGVmIHRlc3RfZGVjb2Rlc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydF8oZGVjb2Rlc3RyaW5nKGUpID09IHApCisgICAgICAgIAorICAgIGRlZiB0ZXN0X2lkZW1wb3RlbnRfc3RyaW5nKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6CisgICAgICAgICAgICBzZWxmLmFzc2VydF8oZGVjb2Rlc3RyaW5nKGVuY29kZXN0cmluZyhlKSkgPT0gZSkKKworICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKKyAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgorICAgICAgICAgICAgaW5mcCA9IFN0cmluZ0lPKHApCisgICAgICAgICAgICBvdXRmcCA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIGVuY29kZShpbmZwLCBvdXRmcCwgcXVvdGV0YWJzPTApCisgICAgICAgICAgICBzZWxmLmFzc2VydF8ob3V0ZnAuZ2V0dmFsdWUoKSA9PSBlKQorCisgICAgZGVmIHRlc3RfZGVjb2RlKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLlNUUklOR1M6CisgICAgICAgICAgICBpbmZwID0gU3RyaW5nSU8oZSkKKyAgICAgICAgICAgIG91dGZwID0gU3RyaW5nSU8oKQorICAgICAgICAgICAgZGVjb2RlKGluZnAsIG91dGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG91dGZwLmdldHZhbHVlKCkgPT0gcCkKKworICAgIGRlZiB0ZXN0X2VtYmVkZGVkX3dzKHNlbGYpOgorICAgICAgICBmb3IgcCwgZSBpbiBzZWxmLkVTVFJJTkdTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKGVuY29kZXN0cmluZyhwLCBxdW90ZXRhYnM9MSkgPT0gZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhkZWNvZGVzdHJpbmcoZSkgPT0gcCkKKworDAordGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChRdW9wcmlUZXN0Q2FzZSkK