ZGlmZiAtLWdpdCBhL0xpYi9haWZjLnB5IGIvTGliL2FpZmMucHkKaW5kZXggMjZiMGZmNS4uMzYzMTJiMyAxMDA2NDQKLS0tIGEvTGliL2FpZmMucHkKKysrIGIvTGliL2FpZmMucHkKQEAgLTE0NCw5ICsxNDQsNiBAQAogCiBfQUlGQ192ZXJzaW9uID0gMHhBMjgwNTE0MCAgICAgIyBWZXJzaW9uIDEgb2YgQUlGRi1DCiAKLV9za2lwbGlzdCA9IGInQ09NVCcsIGInSU5TVCcsIGInTUlESScsIGInQUVTRCcsIFwKLSAgICAgIGInQVBQTCcsIGInTkFNRScsIGInQVVUSCcsIGInKGMpICcsIGInQU5OTycKLQogZGVmIF9yZWFkX2xvbmcoZmlsZSk6CiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmwnLCBmaWxlLnJlYWQoNCkpWzBdCkBAIC0zMTMsMTEgKzMxMCw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fdmVyc2lvbiA9IF9yZWFkX3Vsb25nKGNodW5rKQogICAgICAgICAgICAgZWxpZiBjaHVua25hbWUgPT0gYidNQVJLJzoKICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkbWFyayhjaHVuaykKLSAgICAgICAgICAgIGVsaWYgY2h1bmtuYW1lIGluIF9za2lwbGlzdDoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCd1bnJlY29nbml6ZWQgY2h1bmsgdHlwZSAnICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua25hbWUuZGVjb2RlKCdsYXRpbjEnKSkKICAgICAgICAgICAgIGNodW5rLnNraXAoKQogICAgICAgICBpZiBub3Qgc2VsZi5fY29tbV9jaHVua19yZWFkIG9yIG5vdCBzZWxmLl9zc25kX2NodW5rOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ0NPTU0gY2h1bmsgYW5kL29yIFNTTkQgY2h1bmsgbWlzc2luZycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9TaW5lLTEwMDBIei0zMDBtcy5haWYgYi9MaWIvdGVzdC9TaW5lLTEwMDBIei0zMDBtcy5haWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwOGY1YwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L1NpbmUtMTAwMEh6LTMwMG1zLmFpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FpZmMucHkgYi9MaWIvdGVzdC90ZXN0X2FpZmMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ0MTEyNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQpAQCAtMCwwICsxLDU5IEBACitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBhaWZjCisKKworY2xhc3MgQUlGQ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNuZGZpbGVwYXRoID0gZmluZGZpbGUoJ1NpbmUtMTAwMEh6LTMwMG1zLmFpZicpCisKKyAgICBkZWYgdGVzdF9za2lwdW5rbm93bihzZWxmKToKKyAgICAgICAgI0lzc3VlIDIyNDUKKyAgICAgICAgI1RoaXMgZmlsZSBjb250YWlucyBjaHVuayB0eXBlcyBhaWZjIGRvZXNuJ3QgcmVjb2duaXplLgorICAgICAgICBmID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcGFyYW1zKHNlbGYpOgorICAgICAgICBmID0gYWlmYy5vcGVuKHNlbGYuc25kZmlsZXBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuY2hhbm5lbHMoKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIDQ4MDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0bmZyYW1lcygpLCAxNDQwMCkKKyAgICAgICAgIyBYWFg6IGFyZSB0aGUgbmV4dCB0d28gY29ycmVjdD8gIFRoZSBkb2NzIHNheS9pbXBseSB0aGV5IGFyZSBzdXBwb3NlZAorICAgICAgICAjIHRvIGJlIHN0cmluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRjb21wdHlwZSgpLCBiJ05PTkUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0Y29tcG5hbWUoKSwgYidub3QgY29tcHJlc3NlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBmLmdldHBhcmFtcygpLAorICAgICAgICAgICAgKDIsIDIsIDQ4MDAwLCAxNDQwMCwgYidOT05FJywgYidub3QgY29tcHJlc3NlZCcpLAorICAgICAgICAgICAgKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIGYgPSBhaWZjLm9wZW4oc2VsZi5zbmRmaWxlcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksIGInXHgwMFx4MDBceDAwXHgwMFx4MGJceGQ0XHgwYlx4ZDQnKQorICAgICAgICBmLnJld2luZCgpCisgICAgICAgIHBvczAgPSBmLnRlbGwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvczAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDIpLCBiJ1x4MDBceDAwXHgwMFx4MDBceDBiXHhkNFx4MGJceGQ0JykKKyAgICAgICAgcG9zMiA9IGYudGVsbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoMiksIGInXHgxN3RceDE3dCJceGFkIlx4YWQnKQorICAgICAgICBmLnNldHBvcyhwb3MyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcygyKSwgYidceDE3dFx4MTd0Ilx4YWQiXHhhZCcpCisgICAgICAgIGYuc2V0cG9zKHBvczApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkZnJhbWVzKDIpLCBiJ1x4MDBceDAwXHgwMFx4MDBceDBiXHhkNFx4MGJceGQ0JykKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAjWFhYIE5lZWQgbW9yZSB0ZXN0cyEKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEFJRkNUZXN0KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CmluZGV4IGJiYTU0ZmUuLmVlMzg3YzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5CkBAIC05LDcgKzksNiBAQAogICAgIGRlZiB0ZXN0X2F0X2xlYXN0X2ltcG9ydF91bnRlc3RlZF9tb2R1bGVzKHNlbGYpOgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCi0gICAgICAgICAgICBpbXBvcnQgYWlmYwogICAgICAgICAgICAgaW1wb3J0IGJkYgogICAgICAgICAgICAgaW1wb3J0IGNnaXRiCiAgICAgICAgICAgICBpbXBvcnQgY29kZQpkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IGE0Zjg0ODEuLjdlYWI0MDcgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTM3Miw2ICszNzIsNyBAQAogUGV0ZXIgdmFuIEthbXBlbgogSmFjb2IgS2FwbGFuLU1vc3MKIExvdSBLYXRlcworSGlyb2FraSBLYXdhaQogU2ViYXN0aWVuIEtlaW0KIFJvYmVydCBLZXJuCiBSYW5kYWxsIEtlcm4KQEAgLTU0NSw2ICs1NDYsNyBAQAogU2FtdWVsZSBQZWRyb25pCiBNYXJjZWwgdmFuIGRlciBQZWlqbAogU3RldmVuIFBlbWJlcnRvbgorU2FudGlhZ28gUGVyZXPzbgogTWFyayBQZXJyZWdvCiBUcmV2b3IgUGVycmluCiBUaW0gUGV0ZXJzCmRpZmYgLS1naXQgYS9NaXNjL05FV1MgYi9NaXNjL05FV1MKaW5kZXggNTRhM2IwOS4uYmI0YzEzNCAxMDA2NDQKLS0tIGEvTWlzYy9ORVdTCisrKyBiL01pc2MvTkVXUwpAQCAtNDczLDYgKzQ3Myw4IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzIyNDU6IGFpZmMgbm93IHNraXBzIGNodW5rIHR5cGVzIGl0IGRvZXNuJ3QgcmVjb2duaXplLCBwZXIgc3BlYy4KKwogLSBJc3N1ZSAjNTg3NDogZGlzdHV0aWxzLnRlc3RzLnRlc3RfY29uZmlnX2NtZCBpcyBub3QgbG9jYWxlLXNlbnNpdGl2ZSAKICAgYW55bW9yZS4KIAo=