ZGlmZiAtLWdpdCBhLy5idWNrY29uZmlnIGIvLmJ1Y2tjb25maWcKaW5kZXggYjJlMDdhYy4uOGQyNTcyYiAxMDA2NDQKLS0tIGEvLmJ1Y2tjb25maWcKKysrIGIvLmJ1Y2tjb25maWcKQEAgLTEsMyArMSwxMiBAQAorW2FsaWFzXQorICBhbGwgPSAvLzphbGwKKyAgamdpdCA9IC8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0CisgIGpnaXQtYXJjaGl2ZSA9IC8vb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlOmpnaXQtYXJjaGl2ZQorICBqZ2l0X2JpbiA9IC8vOmpnaXRfYmluCisgIGpnaXQtbGZzID0gLy9vcmcuZWNsaXBzZS5qZ2l0LmxmczpqZ2l0LWxmcworICBqZ2l0LWxmcy1zZXJ2ZXIgPSAvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjpqZ2l0LWxmcy1zZXJ2ZXIKKyAgamdpdC1zZXJ2bGV0ID0gLy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyOmpnaXQtc2VydmxldAorCiBbYnVpbGRmaWxlXQogICBpbmNsdWRlcyA9IC8vdG9vbHMvZGVmYXVsdC5kZWZzCiAKZGlmZiAtLWdpdCBhLy5idWNrdmVyc2lvbiBiLy5idWNrdmVyc2lvbgppbmRleCA5ZGFhYzJjLi41NjFhNzY5IDEwMDY0NAotLS0gYS8uYnVja3ZlcnNpb24KKysrIGIvLmJ1Y2t2ZXJzaW9uCkBAIC0xICsxIEBACi0xYjAzYjQzMTNiOTFiNjM0YmQ2MDRmYzM0ODdhMDVmODc3ZTU5ZGVlCitjYThkNmNiYWMzNzNhNjkwZjU0M2M1MTU5ZWVjMDExNmU3NjE4N2E5CmRpZmYgLS1naXQgYS8ubWFpbG1hcCBiLy5tYWlsbWFwCmluZGV4IDg3MDFiMTkuLjhmMTFhMWMgMTAwNjQ0Ci0tLSBhLy5tYWlsbWFwCisrKyBiLy5tYWlsbWFwCkBAIC0xLDUgKzEsNiBAQAotU2hhd24gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPglTaGF3biBPLiBQZWFyY2UgPHNvcEBnb29nbGUuY29tPgotU2hhd24gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPglTaGF3biBQZWFyY2UgPHNvcEBnb29nbGUuY29tPgotU2hhd24gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPglTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+Ci1TYcWhYSDFvWl2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPglTYXNhIFppdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4KLVNhxaFhIMW9aXZrb3YgPHNhc2Eueml2a292QHNhcC5jb20+CVNhxaFhIMW9aXZrb3YgPHppdmtvdkBnbWFpbC5jb20+CitSb2JlcnRvIFR5bGV5IDxyb2JlcnRvLnR5bGV5QGd1YXJkaWFuLmNvLnVrPiByb2JlcnRvIDxyb2JlcnRvLnR5bGV5QGd1YXJkaWFuLmNvLnVrPgorU2HFoWEgxb1pdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4gICAgICAgICAgICBTYXNhIFppdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4KK1NhxaFhIMW9aXZrb3YgPHNhc2Eueml2a292QHNhcC5jb20+ICAgICAgICAgICAgU2HFoWEgxb1pdmtvdiA8eml2a292QGdtYWlsLmNvbT4KK1NoYXduIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4gICAgICAgICAgIFNoYXduIE8uIFBlYXJjZSA8c29wQGdvb2dsZS5jb20+CitTaGF3biBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+ICAgICAgICAgICBTaGF3biBQZWFyY2UgPHNvcEBnb29nbGUuY29tPgorU2hhd24gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiAgICAgICAgICAgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPgpkaWZmIC0tZ2l0IGEvQlVDSyBiL0JVQ0sKaW5kZXggZjE5YjdiZC4uNDU3OGUxNyAxMDA2NDQKLS0tIGEvQlVDSworKysgYi9CVUNLCkBAIC0xLDQ1ICsxLDE4IEBACi1qYXZhX2xpYnJhcnkoCi0gIG5hbWUgPSAnamdpdCcsCi0gIGV4cG9ydGVkX2RlcHMgPSBbJy8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0J10sCi0gIHZpc2liaWxpdHkgPSBbJ1BVQkxJQyddLAorREVQUyA9IFsKKyAgJy8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0JywKKyAgJy8vb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlOmpnaXQtYXJjaGl2ZScsCisgICcvL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI6amdpdC1zZXJ2bGV0JywKKyAgJy8vb3JnLmVjbGlwc2UuamdpdC5sZnM6amdpdC1sZnMnLAorICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI6amdpdC1sZnMtc2VydmVyJywKKyAgJy8vb3JnLmVjbGlwc2UuamdpdC5wZ206amdpdCcsCitdCisKK3ppcF9maWxlKAorICBuYW1lID0gJ2FsbCcsCisgIHNyY3MgPSBERVBTLAogKQogCi1nZW5ydWxlKAotICBuYW1lID0gJ2pnaXRfc3JjJywKLSAgY21kID0gJ2xuIC1zICQobG9jYXRpb24gLy9vcmcuZWNsaXBzZS5qZ2l0OmpnaXRfc3JjKSAkT1VUJywKLSAgb3V0ID0gJ2pnaXRfc3JjLnppcCcsCi0gIHZpc2liaWxpdHkgPSBbJ1BVQkxJQyddLAotKQotCi1qYXZhX2xpYnJhcnkoCi0gIG5hbWUgPSAnamdpdC1zZXJ2bGV0JywKLSAgZXhwb3J0ZWRfZGVwcyA9IFsKLSAgICAnOmpnaXQnLAotICAgICcvL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI6amdpdC1zZXJ2bGV0JwotICBdLAotICB2aXNpYmlsaXR5ID0gWydQVUJMSUMnXSwKLSkKLQotamF2YV9saWJyYXJ5KAotICBuYW1lID0gJ2pnaXQtYXJjaGl2ZScsCi0gIGV4cG9ydGVkX2RlcHMgPSBbCi0gICAgJzpqZ2l0JywKLSAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU6amdpdC1hcmNoaXZlJwotICBdLAotICB2aXNpYmlsaXR5ID0gWydQVUJMSUMnXSwKLSkKLQotamF2YV9saWJyYXJ5KAotICBuYW1lID0gJ2p1bml0JywKLSAgZXhwb3J0ZWRfZGVwcyA9IFsKLSAgICAnOmpnaXQnLAotICAgICcvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQ6anVuaXQnCi0gIF0sCi0gIHZpc2liaWxpdHkgPSBbJ1BVQkxJQyddLAotKQotCi1nZW5ydWxlKAorc2hfYmluYXJ5KAogICBuYW1lID0gJ2pnaXRfYmluJywKLSAgY21kID0gJ2xuIC1zICQobG9jYXRpb24gLy9vcmcuZWNsaXBzZS5qZ2l0LnBnbTpqZ2l0KSAkT1VUJywKLSAgb3V0ID0gJ2pnaXRfYmluJywKKyAgbWFpbiA9ICcvL29yZy5lY2xpcHNlLmpnaXQucGdtOmpnaXQnLAogKQpkaWZmIC0tZ2l0IGEvbGliL0JVQ0sgYi9saWIvQlVDSwppbmRleCA1MjQ2MTJiLi4yNDIxYjQwIDEwMDY0NAotLS0gYS9saWIvQlVDSworKysgYi9saWIvQlVDSwpAQCAtMTIzLDMgKzEyMywxMiBAQAogICBhcnRpZmFjdCA9ICdoYW1jcmVzdC1jb3JlJywKICAgdmVyc2lvbiA9ICcxLjMnLAogKQorCittYXZlbl9qYXIoCisgIG5hbWUgPSAnZ3NvbicsCisgIGJpbl9zaGExID0gJ2E2MGE1ZTk5M2M5OGM4NjQwMTAwNTNjYjkwMWI3ZWFiMjUzMDY1NjgnLAorICBzcmNfc2hhMSA9ICdhNmRjNWRiOGExMjkyOGU1ODNiZDNmMjNlNzJkM2FiNjExZWNkNThmJywKKyAgZ3JvdXAgPSAnY29tLmdvb2dsZS5jb2RlLmdzb24nLAorICBhcnRpZmFjdCA9ICdnc29uJywKKyAgdmVyc2lvbiA9ICcyLjIuNCcsCispCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL0JVQ0sgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL0JVQ0sKaW5kZXggZjQ4ZjMzYS4uM2I3YTgyMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9CVUNLCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvQlVDSwpAQCAtNCw3ICs0LDYgQEAKICAgcmVzb3VyY2VzID0gZ2xvYihbJ3Jlc291cmNlcy8qKiddKSwKICAgZGVwcyA9IFsKICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0OmpnaXQnLAotICAgICcvL2xpYjpjb21tb25zLWxvZ2dpbmcnLAogICAgICcvL2xpYjpodHRwY29tcG9uZW50cycsCiAgICAgJy8vbGliOmh0dHBjb3JlJywKICAgXSwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDk4NzE2MjIuLjI2MTY1MjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNyw4ICs3LDcgQEAKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJVByb3ZpZGVyLU5hbWUKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1JbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmc7dmVyc2lvbj0iWzEuMS4xLDIuMC4wKSIsCi0gb3JnLmFwYWNoZS5odHRwO3ZlcnNpb249Ils0LjEuMCw1LjAuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUuaHR0cDt2ZXJzaW9uPSJbNC4xLjAsNS4wLjApIiwKICBvcmcuYXBhY2hlLmh0dHAuY2xpZW50O3ZlcnNpb249Ils0LjEuMCw1LjAuMCkiLAogIG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kczt2ZXJzaW9uPSJbNC4xLjAsNS4wLjApIiwKICBvcmcuYXBhY2hlLmh0dHAuY2xpZW50LnBhcmFtczt2ZXJzaW9uPSJbNC4xLjAsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L2h0dHAvYXBhY2hlL0h0dHBDbGllbnRDb25uZWN0aW9uLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9odHRwL2FwYWNoZS9IdHRwQ2xpZW50Q29ubmVjdGlvbi5qYXZhCmluZGV4IGRlODFiZjguLmEwZWVlZjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L2h0dHAvYXBhY2hlL0h0dHBDbGllbnRDb25uZWN0aW9uLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvaHR0cC9hcGFjaGUvSHR0cENsaWVudENvbm5lY3Rpb24uamF2YQpAQCAtNDIsNiArNDIsMTEgQEAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTsKIAoraW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQuTUVUSE9EX0dFVDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC51dGlsLkh0dHBTdXBwb3J0Lk1FVEhPRF9IRUFEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQuTUVUSE9EX1BPU1Q7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydC5NRVRIT0RfUFVUOworCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwpAQCAtNzYsNiArODEsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQuQ2xpZW50UHJvdG9jb2xFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5IdHRwQ2xpZW50OwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwR2V0OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwSGVhZDsKIGltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuSHR0cFBvc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBQdXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5tZXRob2RzLkh0dHBVcmlSZXF1ZXN0OwpAQCAtMjUwLDEzICsyNTYsMTUgQEAgcHVibGljIHZvaWQgc2V0UmVxdWVzdFByb3BlcnR5KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKIAogCXB1YmxpYyB2b2lkIHNldFJlcXVlc3RNZXRob2QoU3RyaW5nIG1ldGhvZCkgdGhyb3dzIFByb3RvY29sRXhjZXB0aW9uIHsKIAkJdGhpcy5tZXRob2QgPSBtZXRob2Q7Ci0JCWlmICgiR0VUIi5lcXVhbHNJZ25vcmVDYXNlKG1ldGhvZCkpIC8vJE5PTi1OTFMtMSQKKwkJaWYgKE1FVEhPRF9HRVQuZXF1YWxzSWdub3JlQ2FzZShtZXRob2QpKSB7CiAJCQlyZXEgPSBuZXcgSHR0cEdldCh1cmwudG9TdHJpbmcoKSk7Ci0JCWVsc2UgaWYgKCJQVVQiLmVxdWFsc0lnbm9yZUNhc2UobWV0aG9kKSkgLy8kTk9OLU5MUy0xJAorCQl9IGVsc2UgaWYgKE1FVEhPRF9IRUFELmVxdWFsc0lnbm9yZUNhc2UobWV0aG9kKSkgeworCQkJcmVxID0gbmV3IEh0dHBIZWFkKHVybC50b1N0cmluZygpKTsKKwkJfSBlbHNlIGlmIChNRVRIT0RfUFVULmVxdWFsc0lnbm9yZUNhc2UobWV0aG9kKSkgewogCQkJcmVxID0gbmV3IEh0dHBQdXQodXJsLnRvU3RyaW5nKCkpOwotCQllbHNlIGlmICgiUE9TVCIuZXF1YWxzSWdub3JlQ2FzZShtZXRob2QpKSAvLyROT04tTkxTLTEkCisJCX0gZWxzZSBpZiAoTUVUSE9EX1BPU1QuZXF1YWxzSWdub3JlQ2FzZShtZXRob2QpKSB7CiAJCQlyZXEgPSBuZXcgSHR0cFBvc3QodXJsLnRvU3RyaW5nKCkpOwotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCXRoaXMubWV0aG9kID0gbnVsbDsKIAkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogCQl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9CVUNLIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvQlVDSwppbmRleCBkMmNlZDdhLi5kNjVjZGFkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9CVUNLCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L0JVQ0sKQEAgLTIzLDYgKzIzLDcgQEAKICAgICAgICcvL2xpYi9qZXR0eTpzZXJ2bGV0JywKICAgICAgICcvL2xpYi9qZXR0eTpzZWN1cml0eScsCiAgICAgICAnLy9saWIvamV0dHk6dXRpbCcsCisgICAgICAnLy9saWI6Y29tbW9ucy1sb2dnaW5nJywKICAgICBdLAogICAgIHNvdXJjZV91bmRlcl90ZXN0ID0gWycvL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI6amdpdC1zZXJ2bGV0J10sCiAgICkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0FwcFNlcnZlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L2h0dHAvQXBwU2VydmVyLmphdmEKaW5kZXggY2UwNGJkZi4uYzM2YzI5NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L2h0dHAvQXBwU2VydmVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L2h0dHAvQXBwU2VydmVyLmphdmEKQEAgLTEwNCw2ICsxMDQsMTUgQEAgcHVibGljIGNsYXNzIEFwcFNlcnZlciB7CiAJcHJpdmF0ZSBmaW5hbCBUZXN0UmVxdWVzdExvZyBsb2c7CiAKIAlwdWJsaWMgQXBwU2VydmVyKCkgeworCQl0aGlzKDApOworCX0KKworCS8qKgorCSAqIEBwYXJhbSBwb3J0CisJICogICAgICAgICAgICB0aGUgaHR0cCBwb3J0IG51bWJlcgorCSAqIEBzaW5jZSA0LjIKKwkgKi8KKwlwdWJsaWMgQXBwU2VydmVyKGludCBwb3J0KSB7CiAJCXNlcnZlciA9IG5ldyBTZXJ2ZXIoKTsKIAogCQlIdHRwQ29uZmlndXJhdGlvbiBodHRwX2NvbmZpZyA9IG5ldyBIdHRwQ29uZmlndXJhdGlvbigpOwpAQCAtMTEzLDcgKzEyMiw3IEBAIHB1YmxpYyBBcHBTZXJ2ZXIoKSB7CiAKIAkJY29ubmVjdG9yID0gbmV3IFNlcnZlckNvbm5lY3RvcihzZXJ2ZXIsCiAJCQkJbmV3IEh0dHBDb25uZWN0aW9uRmFjdG9yeShodHRwX2NvbmZpZykpOwotCQljb25uZWN0b3Iuc2V0UG9ydCgwKTsKKwkJY29ubmVjdG9yLnNldFBvcnQocG9ydCk7CiAJCXRyeSB7CiAJCQlmaW5hbCBJbmV0QWRkcmVzcyBtZSA9IEluZXRBZGRyZXNzLmdldEJ5TmFtZSgibG9jYWxob3N0Iik7CiAJCQljb25uZWN0b3Iuc2V0SG9zdChtZS5nZXRIb3N0QWRkcmVzcygpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L1JlcG9zaXRvcnlUZXN0Q2FzZS5qYXZhCmluZGV4IGM2NDllYjkuLjBkYjcxZjcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9SZXBvc2l0b3J5VGVzdENhc2UuamF2YQpAQCAtNDAxLDggKzQwMSw3IEBAIHByb3RlY3RlZCBGaWxlIHdyaXRlVHJhc2hGaWxlcyhib29sZWFuIGVuc3VyZURpc3RpbmN0VGltZXN0YW1wcywKIAkgKiBAcmV0dXJuIHRoZSBjcmVhdGVkIGNvbW1pdAogCSAqLwogCXByb3RlY3RlZCBSZXZDb21taXQgY29tbWl0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBjb250ZW50cywgU3RyaW5nIGJyYW5jaCkgewotCQl0cnkgewotCQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgewogCQkJUmVwb3NpdG9yeSByZXBvID0gZ2l0LmdldFJlcG9zaXRvcnkoKTsKIAkJCVN0cmluZyBvcmlnaW5hbEJyYW5jaCA9IHJlcG8uZ2V0RnVsbEJyYW5jaCgpOwogCQkJYm9vbGVhbiBlbXB0eSA9IHJlcG8ucmVzb2x2ZShDb25zdGFudHMuSEVBRCkgPT0gbnVsbDsKQEAgLTQ0Myw4ICs0NDIsMTAgQEAgcHJvdGVjdGVkIERpckNhY2hlRW50cnkgY3JlYXRlRW50cnkoZmluYWwgU3RyaW5nIHBhdGgsIGZpbmFsIEZpbGVNb2RlIG1vZGUsCiAJCQlmaW5hbCBpbnQgc3RhZ2UsIGZpbmFsIFN0cmluZyBjb250ZW50KSB7CiAJCWZpbmFsIERpckNhY2hlRW50cnkgZW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeShwYXRoLCBzdGFnZSk7CiAJCWVudHJ5LnNldEZpbGVNb2RlKG1vZGUpOwotCQllbnRyeS5zZXRPYmplY3RJZChuZXcgT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyKCkuaWRGb3IoCi0JCQkJQ29uc3RhbnRzLk9CSl9CTE9CLCBDb25zdGFudHMuZW5jb2RlKGNvbnRlbnQpKSk7CisJCXRyeSAoT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyIGZvcm1hdHRlciA9IG5ldyBPYmplY3RJbnNlcnRlci5Gb3JtYXR0ZXIoKSkgeworCQkJZW50cnkuc2V0T2JqZWN0SWQoZm9ybWF0dGVyLmlkRm9yKAorCQkJCQlDb25zdGFudHMuT0JKX0JMT0IsIENvbnN0YW50cy5lbmNvZGUoY29udGVudCkpKTsKKwkJfQogCQlyZXR1cm4gZW50cnk7CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uY2xhc3NwYXRoIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLmNsYXNzcGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmRjYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLmNsYXNzcGF0aApAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InRzdCIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uZ2l0aWdub3JlIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGMwMDkxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKy90YXJnZXQKKy9iaW4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5wcm9qZWN0IGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNhNDc0OAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5wcm9qZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0PC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyNGI4MAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorZW5jb2RpbmcvPHByb2plY3Q+PVVURi04DQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwYWQyMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbGluZS5zZXBhcmF0b3I9XG4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2MwZDNhCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMzk4IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5pbmhlcml0TnVsbEFubm90YXRpb25zPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm1pc3NpbmdOb25OdWxsQnlEZWZhdWx0QW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbD1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5Ob25OdWxsCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxieWRlZmF1bHQ9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTm9uTnVsbEJ5RGVmYXVsdAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYWJsZT1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5OdWxsYWJsZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYW5hbHlzaXM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5tZXRob2RQYXJhbWV0ZXJzPWRvIG5vdCBnZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS43CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5leHBsaWNpdGx5Q2xvc2VkQXV0b0Nsb3NlYWJsZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNsdWRlTnVsbEluZm9Gcm9tQXNzZXJ0cz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlZmF1bHRDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdFbnVtQ2FzZURlc3BpdGVEZWZhdWx0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wcm90ZWN0ZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NNZXRob2RUeXBlUGFyYW1ldGVycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uRm9ySW50ZXJmYWNlTWV0aG9kSW1wbGVtZW50YXRpb249ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbm51bGxQYXJhbWV0ZXJBbm5vdGF0aW9uRHJvcHBlZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxBbm5vdGF0aW9uSW5mZXJlbmNlQ29uZmxpY3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsU3BlY1Zpb2xhdGlvbj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsVW5jaGVja2VkQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxseVVuY2xvc2VkQ2xvc2VhYmxlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFNwZWNpZmljYXRpb25PZlR5cGVBcmd1bWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlUG90ZW50aWFsbHlTdGF0aWM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlU3RhdGljPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NPcHRpb25hbEVycm9ycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGFjdGljTnVsbEFuYWx5c2lzRm9yRmllbGRzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuYXZvaWRhYmxlR2VuZXJpY1R5cGVQcm9ibGVtcz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNsb3NlZENsb3NlYWJsZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZE9iamVjdEFsbG9jYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkVHlwZVBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbl90eXBlX21lbWJlcnNfb25fY29sdW1ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2Fubm90YXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2VudW1fY29uc3RhbnQ9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9leHBsaWNpdF9jb25zdHJ1Y3Rvcl9jYWxsPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9xdWFsaWZpZWRfYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2JpbmFyeV9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb21wYWN0X2lmPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb25kaXRpb25hbF9leHByZXNzaW9uPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9lbnVtX2NvbnN0YW50cz0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9leHByZXNzaW9uc19pbl9hcnJheV9pbml0aWFsaXplcj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Jlc291cmNlc19pbl90cnk9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3VuaW9uX3R5cGVfaW5fbXVsdGljYXRjaD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2s9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2NvbnN0YW50PWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lcz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9saW5lX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfYmxvY2tfYm91bmRhcmllcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfamF2YWRvY19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LnByZXNlcnZlX3doaXRlX3NwYWNlX2JldHdlZW5fY29kZV9hbmRfbGluZV9jb21tZW50cz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5kaXNhYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9mZgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmVuYWJsaW5nX3RhZz1AZm9ybWF0dGVyXDpvbgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfbGluZV9jb21tZW50X3N0YXJ0aW5nX29uX2ZpcnN0X2NvbHVtbj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2ZpZWxkPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2xvY2FsX3ZhcmlhYmxlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21lbWJlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9tZXRob2Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFja2FnZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fdHlwZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfbGFiZWw9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZWxzZV9pbl9pZl9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fubm90YXRpb25fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fdHJ5PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3RyeT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fdHJ5X3Jlc291cmNlcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX2xpbmVzX2luX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX3dyYXBwZWRfbGluZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfaW1wbGVfaWZfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX3RoZW5fc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmxpbmVTcGxpdD04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9ibG9ja19jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5uZXZlcl9pbmRlbnRfbGluZV9jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfYmxhbmtfbGluZXNfYXRfYmVnaW5uaW5nX29mX21ldGhvZF9ib2R5PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfZW1wdHlfbGluZXNfdG9fcHJlc2VydmU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnB1dF9lbXB0eV9zdGF0ZW1lbnRfb25fbmV3X2xpbmU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj10YWIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV9vbl9vZmZfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX29yX29wZXJhdG9yX211bHRpY2F0Y2g9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfb3V0ZXJfZXhwcmVzc2lvbnNfd2hlbl9uZXN0ZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNmNjZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw2MSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VkaXRvcl9zYXZlX3BhcnRpY2lwYW50X29yZy5lY2xpcHNlLmpkdC51aS5wb3N0c2F2ZWxpc3RlbmVyLmNsZWFudXA9dHJ1ZQorZm9ybWF0dGVyX3Byb2ZpbGU9X0pHaXQgRm9ybWF0Citmb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMgorb3JnLmVjbGlwc2UuamR0LnVpLmlnbm9yZWxvd2VyY2FzZW5hbWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC51aS5pbXBvcnRvcmRlcj1qYXZhO2phdmF4O29yZztjb207CitvcmcuZWNsaXBzZS5qZHQudWkub25kZW1hbmR0aHJlc2hvbGQ9OTkKK29yZy5lY2xpcHNlLmpkdC51aS5zdGF0aWNvbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz48dGVtcGxhdGVzLz4KK3NwX2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorc3BfY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19tZXRob2RzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnNfaW50ZXJmYWNlX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9ZmFsc2UKK3NwX2NsZWFudXAuY29ycmVjdF9pbmRlbnRhdGlvbj1mYWxzZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGVfY2hhbmdlc19vbmx5PXRydWUKK3NwX2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9ZmFsc2UKK3NwX2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitzcF9jbGVhbnVwLm1ha2VfdHlwZV9hYnN0cmFjdF9pZl9taXNzaW5nX21ldGhvZD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitzcF9jbGVhbnVwLm9uX3NhdmVfdXNlX2FkZGl0aW9uYWxfYWN0aW9ucz10cnVlCitzcF9jbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitzcF9jbGVhbnVwLnVzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitzcF9jbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGVjNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Byb2plY3QucmVwb3NpdG9yeS5raW5kPWJ1Z3ppbGxhCitwcm9qZWN0LnJlcG9zaXRvcnkudXJsPWh0dHBzXDovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTdhMGYwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKQEAgLTAsMCArMSwyIEBACitjb21taXQuY29tbWVudC50ZW1wbGF0ZT0ke3Rhc2suZGVzY3JpcHRpb259IFxuXG5CdWdcOiAke3Rhc2sua2V5fQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4NTY4NwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCkBAIC0wLDAgKzEsOTMgQEAKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRF9XSVRIT1VUX0RFRkFVTFRfVkFMVUU9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BUElfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9SRUVYUE9SVEVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fQUJTVFJBQ1RfVE9fQUJTVFJBQ1Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DT05TVFJVQ1RPUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfU1VQRVJDTEFTUz1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFSQVJHU19UT19BUlJBWT1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9FTlVNX0NPTlNUQU5UPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0FEREVEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0ZJTkFMX1RPX05PTl9GSU5BTF9TVEFUSUNfQ09OU1RBTlQ9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1NUQVRJQ19UT19OT05fU1RBVElDPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQUxVRT1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9BUkdVTUVOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVkFMVUU9RXJyb3IKK0lMTEVHQUxfRVhURU5EPVdhcm5pbmcKK0lMTEVHQUxfSU1QTEVNRU5UPVdhcm5pbmcKK0lMTEVHQUxfSU5TVEFOVElBVEU9V2FybmluZworSUxMRUdBTF9PVkVSUklERT1XYXJuaW5nCitJTExFR0FMX1JFRkVSRU5DRT1XYXJuaW5nCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfU1VQRVJfSU5URVJGQUNFX1dJVEhfTUVUSE9EUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5WQUxJRF9KQVZBRE9DX1RBRz1JZ25vcmUKK0lOVkFMSURfUkVGRVJFTkNFX0lOX1NZU1RFTV9MSUJSQVJJRVM9RXJyb3IKK0xFQUtfRVhURU5EPVdhcm5pbmcKK0xFQUtfRklFTERfREVDTD1XYXJuaW5nCitMRUFLX0lNUExFTUVOVD1XYXJuaW5nCitMRUFLX01FVEhPRF9QQVJBTT1XYXJuaW5nCitMRUFLX01FVEhPRF9SRVRVUk5fVFlQRT1XYXJuaW5nCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9TVEFUSUNfVE9fU1RBVElDPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfQU5OT1RBVElPTl9ERUZBVUxUX1ZBTFVFPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVU5VU0VEX1BST0JMRU1fRklMVEVSUz1XYXJuaW5nCithdXRvbWF0aWNhbGx5X3JlbW92ZWRfdW51c2VkX3Byb2JsZW1fZmlsdGVycz1mYWxzZQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb249RXJyb3IKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9tYWpvcl93aXRob3V0X2JyZWFraW5nX2NoYW5nZT1EaXNhYmxlZAoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21pbm9yX3dpdGhvdXRfYXBpX2NoYW5nZT1EaXNhYmxlZAoraW52YWxpZF9zaW5jZV90YWdfdmVyc2lvbj1FcnJvcgorbWFsZm9ybWVkX3NpbmNlX3RhZz1FcnJvcgorbWlzc2luZ19zaW5jZV90YWc9RXJyb3IKK3JlcG9ydF9hcGlfYnJlYWthZ2Vfd2hlbl9tYWpvcl92ZXJzaW9uX2luY3JlbWVudGVkPURpc2FibGVkCityZXBvcnRfcmVzb2x1dGlvbl9lcnJvcnNfYXBpX2NvbXBvbmVudD1XYXJuaW5nCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXNvbHZlLnJlcXVpcmVidW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L0JVQ0sgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9CVUNLCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNmU3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9CVUNLCkBAIC0wLDAgKzEsMzUgQEAKK1RFU1RfQkFTRSA9IFsndHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9MZnNTZXJ2ZXJUZXN0LmphdmEnXQorVEVTVFMgPSBnbG9iKFsndHN0LyoqLyouamF2YSddLAorICAgIGV4Y2x1ZGVzID0gVEVTVF9CQVNFCispCisKK2ZvciB0IGluIFRFU1RTOgorICBuID0gdFtsZW4oJ3RzdC8nKTpsZW4odCktbGVuKCcuamF2YScpXS5yZXBsYWNlKCcvJywgJy4nKQorICBqYXZhX3Rlc3QoCisgICAgbmFtZSA9IG4sCisgICAgbGFiZWxzID0gWydsZnMtc2VydmVyJ10sCisgICAgc3JjcyA9IFt0XSArIFRFU1RfQkFTRSwKKyAgICBkZXBzID0gWworICAgICAgJy8vb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDpoZWxwZXJzJywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQ6amdpdCcsCisgICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Omp1bml0JywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDpqdW5pdC1odHRwJywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQubGZzOmpnaXQtbGZzJywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjpqZ2l0LWxmcy1zZXJ2ZXInLAorICAgICAgJy8vbGliOmhhbWNyZXN0LWNvcmUnLAorICAgICAgJy8vbGliOmhhbWNyZXN0LWxpYnJhcnknLAorICAgICAgJy8vbGliOmh0dHBjb3JlJywKKyAgICAgICcvL2xpYjpodHRwY29tcG9uZW50cycsCisgICAgICAnLy9saWI6anVuaXQnLAorICAgICAgJy8vbGliL2pldHR5Omh0dHAnLAorICAgICAgJy8vbGliL2pldHR5OmlvJywKKyAgICAgICcvL2xpYi9qZXR0eTpzZXJ2ZXInLAorICAgICAgJy8vbGliL2pldHR5OnNlcnZsZXQnLAorICAgICAgJy8vbGliL2pldHR5OnNlY3VyaXR5JywKKyAgICAgICcvL2xpYi9qZXR0eTp1dGlsJywKKyAgICAgICcvL2xpYjpzZXJ2bGV0LWFwaScsCisgICAgICAnLy9saWI6Y29tbW9ucy1sb2dnaW5nJywKKyAgICBdLAorICAgIHNvdXJjZV91bmRlcl90ZXN0ID0gWycvL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjpqZ2l0LWxmcy1zZXJ2ZXInXSwKKyAgICB2bV9hcmdzID0gWyctWG14MjU2bScsICctRGZpbGUuZW5jb2Rpbmc9VVRGLTgnXSwKKyAgKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjYzYzNhCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwzOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbl9uYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdAorQnVuZGxlLVZlcnNpb246IDQuMy4wLnF1YWxpZmllcgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyX25hbWUKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjcKK0ltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IlszLjEuMCw0LjAuMCkiLAorIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSJbMy4xLjAsNC4wLjApIiwKKyBvcmcuYXBhY2hlLmh0dHA7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCisgb3JnLmFwYWNoZS5odHRwLmNsaWVudDt2ZXJzaW9uPSJbNC4zLjAsNS4wLjApIiwKKyBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHM7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCisgb3JnLmFwYWNoZS5odHRwLmVudGl0eTt2ZXJzaW9uPSJbNC4zLjAsNS4wLjApIiwKKyBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQ7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5odHRwO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5pbzt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHk7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LmF1dGhlbnRpY2F0aW9uO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXI7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5oYW5kbGVyO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIubmlvO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0O3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS51dGlsO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmNvbXBvbmVudDt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5sb2c7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwudGhyZWFkO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKKyBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMC4wLDUuMC4wKSIsCisgb3JnLmp1bml0LnJ1bm5lcjt2ZXJzaW9uPSJbNC4wLjAsNS4wLjApIiwKKyBvcmcuanVuaXQucnVubmVyczt2ZXJzaW9uPSJbNC4wLjAsNS4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvYnVpbGQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZmYTBjYQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1IEBACitzb3VyY2UuLiA9IHRzdC8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcGx1Z2luLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4ZTY0MgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMiBAQAorcGx1Z2luX25hbWU9SkdpdCBMRlMgU2VydmVyIFRlc3RzCitwcm92aWRlcl9uYW1lPUVjbGlwc2UgSkdpdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU0NjFhYQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BvbS54bWwKQEAgLTAsMCArMSwxNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICBDb3B5cmlnaHQgKEMpIDIwMTUgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICAgYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKworICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgICBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgICBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICAgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgICB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICAgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tPgorCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICA8cGFyZW50PgorICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDwvcGFyZW50PgorCisgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0PC9hcnRpZmFjdElkPgorICA8bmFtZT5KR2l0IC0gTEZTIFNlcnZlciBUZXN0czwvbmFtZT4KKworICA8ZGVzY3JpcHRpb24+CisgICAgVGVzdHMgZm9yIHRoZSBMRlMgc2VydmVyLgorICA8L2Rlc2NyaXB0aW9uPgorCisgIDxkZXBlbmRlbmNpZXM+CisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuanVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZXR0eTwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPmpldHR5LXNlcnZsZXQ8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzPC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+aHR0cGNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPjQuMy42PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisKKyAgPGJ1aWxkPgorICAgIDx0ZXN0U291cmNlRGlyZWN0b3J5PnRzdC88L3Rlc3RTb3VyY2VEaXJlY3Rvcnk+CisKKyAgICA8dGVzdFJlc291cmNlcz4KKyAgICAgIDx0ZXN0UmVzb3VyY2U+CisgICAgICAgIDxkaXJlY3Rvcnk+dHN0LXJzcmMvPC9kaXJlY3Rvcnk+CisgICAgICA8L3Rlc3RSZXNvdXJjZT4KKyAgICA8L3Rlc3RSZXNvdXJjZXM+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgIDxnb2FsPnRlc3QtamFyPC9nb2FsPgorICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxhcmdMaW5lPi1EamF2YS5pby50bXBkaXI9JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0gIC1YbXgzMDBtPC9hcmdMaW5lPgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0Rvd25sb2FkVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9Eb3dubG9hZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzRmM2NiCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9Eb3dubG9hZFRlc3QuamF2YQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obmtAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50LkNsaWVudFByb3RvY29sRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5BbnlMb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC5Mb25nT2JqZWN0SWRUZXN0VXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlsczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIERvd25sb2FkVGVzdCBleHRlbmRzIExmc1NlcnZlclRlc3QgeworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RG93bmxvYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIFRFWFQgPSAidGVzdCI7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IHB1dENvbnRlbnQoVEVYVCk7CisJCVBhdGggZiA9IFBhdGhzLmdldChnZXRUZW1wRGlyZWN0b3J5KCkudG9TdHJpbmcoKSwgImRvd25sb2FkIik7CisJCWxvbmcgbGVuID0gZ2V0Q29udGVudChpZCwgZik7CisJCWFzc2VydEVxdWFscyhURVhULmxlbmd0aCgpLCBsZW4pOworCQlGaWxlVXRpbHMuZGVsZXRlKGYudG9GaWxlKCksIEZpbGVVdGlscy5SRVRSWSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RG93bmxvYWRJbnZhbGlkUGF0aEluZm8oKQorCQkJdGhyb3dzIENsaWVudFByb3RvY29sRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBURVhUID0gInRlc3QiOworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBwdXRDb250ZW50KFRFWFQpOworCQlQYXRoIGYgPSBQYXRocy5nZXQoZ2V0VGVtcERpcmVjdG9yeSgpLnRvU3RyaW5nKCksICJkb3dubG9hZCIpOworCQl0cnkgeworCQkJZ2V0Q29udGVudChpZC5uYW1lKCkuc3Vic3RyaW5nKDAsIDYwKSwgZik7CisJCQlmYWlsKCJleHBlY3RlZCBSdW50aW1lRXhjZXB0aW9uIik7CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJYXNzZXJ0RXF1YWxzKCJTdGF0dXM6IDQwMCBCYWQgUmVxdWVzdCIsCisJCQkJCWUuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERvd25sb2FkSW52YWxpZElkKCkKKwkJCXRocm93cyBDbGllbnRQcm90b2NvbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlTdHJpbmcgVEVYVCA9ICJ0ZXN0IjsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gcHV0Q29udGVudChURVhUKTsKKwkJUGF0aCBmID0gUGF0aHMuZ2V0KGdldFRlbXBEaXJlY3RvcnkoKS50b1N0cmluZygpLCAiZG93bmxvYWQiKTsKKwkJdHJ5IHsKKwkJCWdldENvbnRlbnQoaWQubmFtZSgpLnJlcGxhY2UoJ2YnLCAneicpLCBmKTsKKwkJCWZhaWwoImV4cGVjdGVkIFJ1bnRpbWVFeGNlcHRpb24iKTsKKwkJfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7CisJCQlhc3NlcnRFcXVhbHMoIlN0YXR1czogNDAwIEJhZCBSZXF1ZXN0IiwKKwkJCQkJZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RG93bmxvYWROb3RGb3VuZCgpCisJCQl0aHJvd3MgQ2xpZW50UHJvdG9jb2xFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJU3RyaW5nIFRFWFQgPSAidGVzdCI7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKFRFWFQpOworCQlQYXRoIGYgPSBQYXRocy5nZXQoZ2V0VGVtcERpcmVjdG9yeSgpLnRvU3RyaW5nKCksICJkb3dubG9hZCIpOworCQl0cnkgeworCQkJZ2V0Q29udGVudChpZCwgZik7CisJCQlmYWlsKCJleHBlY3RlZCBSdW50aW1lRXhjZXB0aW9uIik7CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJYXNzZXJ0RXF1YWxzKCJTdGF0dXM6IDQwNCBOb3QgRm91bmQiLAorCQkJCQllLmdldE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RMYXJnZUZpbGVEb3dubG9hZCgpIHRocm93cyBFeGNlcHRpb24geworCQlQYXRoIGYgPSBQYXRocy5nZXQoZ2V0VGVtcERpcmVjdG9yeSgpLnRvU3RyaW5nKCksICJsYXJnZVJhbmRvbUZpbGUiKTsKKwkJbG9uZyBleHBlY3RlZExlbiA9IGNyZWF0ZVBzZXVkb1JhbmRvbUNvbnRlbnRGaWxlKGYsIDUgKiBNaUIpOworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBwdXRDb250ZW50KGYpOworCQlQYXRoIGYyID0gUGF0aHMuZ2V0KGdldFRlbXBEaXJlY3RvcnkoKS50b1N0cmluZygpLCAiZG93bmxvYWQiKTsKKwkJbG9uZyBzdGFydCA9IFN5c3RlbS5uYW5vVGltZSgpOworCQlsb25nIGxlbiA9IGdldENvbnRlbnQoaWQsIGYyKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKAorCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KCJkb3dsb2FkZWQgMTAgTWlCIHJhbmRvbSBkYXRhIGluIHswfW1zIiwKKwkJCQkJCShTeXN0ZW0ubmFub1RpbWUoKSAtIHN0YXJ0KSAvIDFlNikpOworCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRMZW4sIGxlbik7CisJCUZpbGVVdGlscy5kZWxldGUoZi50b0ZpbGUoKSwgRmlsZVV0aWxzLlJFVFJZKTsKKworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvTGZzU2VydmVyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9MZnNTZXJ2ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMyNjZkNAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvTGZzU2VydmVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2hua0BzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5DaGFubmVsczsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5SZWFkYWJsZUJ5dGVDaGFubmVsOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5TdGFuZGFyZE9wZW5PcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5EaWdlc3RJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LlNlY3VyZVJhbmRvbTsKKworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwRW50aXR5OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwUmVzcG9uc2U7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLlN0YXR1c0xpbmU7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmNsaWVudC5DbGllbnRQcm90b2NvbEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHMuQ2xvc2VhYmxlSHR0cFJlc3BvbnNlOworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwR2V0OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5jbGllbnQubWV0aG9kcy5IdHRwUHV0OworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5lbnRpdHkuQ29udGVudFR5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLmVudGl0eS5JbnB1dFN0cmVhbUVudGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LlN0cmluZ0VudGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQuQ2xvc2VhYmxlSHR0cENsaWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQuSHR0cENsaWVudEJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5TZXJ2bGV0Q29udGV4dEhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5TZXJ2bGV0SG9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC5BcHBTZXJ2ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Mb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC5Mb25nT2JqZWN0SWRUZXN0VXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlsczsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKKworQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKK3B1YmxpYyBhYnN0cmFjdCBjbGFzcyBMZnNTZXJ2ZXJUZXN0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgdGltZW91dCA9IC8qIDEwIHNlYyAqLyAxMCAqIDEwMDA7CisKKwlwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIGludCBNaUIgPSAxMDI0ICogMTAyNDsKKworCS8qKiBJbi1tZW1vcnkgYXBwbGljYXRpb24gc2VydmVyOyBzdWJjbGFzcyBtdXN0IHN0YXJ0LiAqLworCXByb3RlY3RlZCBBcHBTZXJ2ZXIgc2VydmVyOworCisJcHJpdmF0ZSBQYXRoIHRtcDsKKworCXByaXZhdGUgUGF0aCBkaXI7CisKKwlwcm90ZWN0ZWQgRmlsZUxmc1JlcG9zaXRvcnkgcmVwb3NpdG9yeTsKKworCXByb3RlY3RlZCBGaWxlTGZzU2VydmxldCBzZXJ2bGV0OworCisJcHVibGljIExmc1NlcnZlclRlc3QoKSB7CisJCXN1cGVyKCk7CisJfQorCisJcHVibGljIFBhdGggZ2V0VGVtcERpcmVjdG9yeSgpIHsKKwkJcmV0dXJuIHRtcDsKKwl9CisKKwlwdWJsaWMgUGF0aCBnZXREaXIoKSB7CisJCXJldHVybiBkaXI7CisJfQorCisJQEJlZm9yZQorCXB1YmxpYyB2b2lkIHNldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRtcCA9IEZpbGVzLmNyZWF0ZVRlbXBEaXJlY3RvcnkoImpnaXRfdGVzdF8iKTsKKwkJc2VydmVyID0gbmV3IEFwcFNlcnZlcigpOworCQlTZXJ2bGV0Q29udGV4dEhhbmRsZXIgYXBwID0gc2VydmVyLmFkZENvbnRleHQoIi9sZnMiKTsKKwkJZGlyID0gUGF0aHMuZ2V0KHRtcC50b1N0cmluZygpLCAibGZzIik7CisJCXRoaXMucmVwb3NpdG9yeSA9IG5ldyBGaWxlTGZzUmVwb3NpdG9yeShudWxsLCBkaXIpOworCQlzZXJ2bGV0ID0gbmV3IEZpbGVMZnNTZXJ2bGV0KHJlcG9zaXRvcnksIHRpbWVvdXQpOworCQlhcHAuYWRkU2VydmxldChuZXcgU2VydmxldEhvbGRlcihzZXJ2bGV0KSwgIi9vYmplY3RzLyoiKTsKKwkJc2VydmVyLnNldFVwKCk7CisJfQorCisJQEFmdGVyCisJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2VydmVyLnRlYXJEb3duKCk7CisJCUZpbGVVdGlscy5kZWxldGUodG1wLnRvRmlsZSgpLCBGaWxlVXRpbHMuUkVDVVJTSVZFIHwgRmlsZVV0aWxzLlJFVFJZKTsKKwl9CisKKwlwcm90ZWN0ZWQgQW55TG9uZ09iamVjdElkIHB1dENvbnRlbnQoU3RyaW5nIHMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24sIENsaWVudFByb3RvY29sRXhjZXB0aW9uIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2gocyk7CisJCXJldHVybiBwdXRDb250ZW50KGlkLCBzKTsKKwl9CisKKwlwcm90ZWN0ZWQgQW55TG9uZ09iamVjdElkIHB1dENvbnRlbnQoQW55TG9uZ09iamVjdElkIGlkLCBTdHJpbmcgcykKKwkJCXRocm93cyBDbGllbnRQcm90b2NvbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQl0cnkgKENsb3NlYWJsZUh0dHBDbGllbnQgY2xpZW50ID0gSHR0cENsaWVudEJ1aWxkZXIuY3JlYXRlKCkuYnVpbGQoKSkgeworCQkJSHR0cEVudGl0eSBlbnRpdHkgPSBuZXcgU3RyaW5nRW50aXR5KHMsCisJCQkJCUNvbnRlbnRUeXBlLkFQUExJQ0FUSU9OX09DVEVUX1NUUkVBTSk7CisJCQlTdHJpbmcgaGV4SWQgPSBpZC5uYW1lKCk7CisJCQlIdHRwUHV0IHJlcXVlc3QgPSBuZXcgSHR0cFB1dCgKKwkJCQkJc2VydmVyLmdldFVSSSgpICsgIi9sZnMvb2JqZWN0cy8iICsgaGV4SWQpOworCQkJcmVxdWVzdC5zZXRFbnRpdHkoZW50aXR5KTsKKwkJCXRyeSAoQ2xvc2VhYmxlSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gY2xpZW50LmV4ZWN1dGUocmVxdWVzdCkpIHsKKwkJCQlTdGF0dXNMaW5lIHN0YXR1c0xpbmUgPSByZXNwb25zZS5nZXRTdGF0dXNMaW5lKCk7CisJCQkJaW50IHN0YXR1cyA9IHN0YXR1c0xpbmUuZ2V0U3RhdHVzQ29kZSgpOworCQkJCWlmIChzdGF0dXMgPj0gNDAwKSB7CisJCQkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTdGF0dXM6ICIgKyBzdGF0dXMgKyAiLiAiCisJCQkJCQkJKyBzdGF0dXNMaW5lLmdldFJlYXNvblBocmFzZSgpKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gaWQ7CisJCX0KKwl9CisKKwlwcm90ZWN0ZWQgTG9uZ09iamVjdElkIHB1dENvbnRlbnQoUGF0aCBmKQorCQkJdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQl0cnkgKENsb3NlYWJsZUh0dHBDbGllbnQgY2xpZW50ID0gSHR0cENsaWVudEJ1aWxkZXIuY3JlYXRlKCkuYnVpbGQoKSkgeworCQkJTG9uZ09iamVjdElkIGlkMSwgaWQyOworCQkJU3RyaW5nIGhleElkMSwgaGV4SWQyOworCQkJdHJ5IChEaWdlc3RJbnB1dFN0cmVhbSBpbiA9IG5ldyBEaWdlc3RJbnB1dFN0cmVhbSgKKwkJCQkJbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oRmlsZXMubmV3SW5wdXRTdHJlYW0oZikpLAorCQkJCQlDb25zdGFudHMubmV3TWVzc2FnZURpZ2VzdCgpKSkgeworCQkJCUlucHV0U3RyZWFtRW50aXR5IGVudGl0eSA9IG5ldyBJbnB1dFN0cmVhbUVudGl0eShpbiwKKwkJCQkJCUZpbGVzLnNpemUoZiksIENvbnRlbnRUeXBlLkFQUExJQ0FUSU9OX09DVEVUX1NUUkVBTSk7CisJCQkJaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goZik7CisJCQkJaGV4SWQxID0gaWQxLm5hbWUoKTsKKwkJCQlIdHRwUHV0IHJlcXVlc3QgPSBuZXcgSHR0cFB1dCgKKwkJCQkJCXNlcnZlci5nZXRVUkkoKSArICIvbGZzL29iamVjdHMvIiArIGhleElkMSk7CisJCQkJcmVxdWVzdC5zZXRFbnRpdHkoZW50aXR5KTsKKwkJCQlIdHRwUmVzcG9uc2UgcmVzcG9uc2UgPSBjbGllbnQuZXhlY3V0ZShyZXF1ZXN0KTsKKwkJCQljaGVja1Jlc3BvbnNlU3RhdHVzKHJlc3BvbnNlKTsKKwkJCQlpZDIgPSBMb25nT2JqZWN0SWQuZnJvbVJhdyhpbi5nZXRNZXNzYWdlRGlnZXN0KCkuZGlnZXN0KCkpOworCQkJCWhleElkMiA9IGlkMi5uYW1lKCk7CisJCQkJYXNzZXJ0RXF1YWxzKGhleElkMSwgaGV4SWQyKTsKKwkJCX0KKwkJCXJldHVybiBpZDE7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgY2hlY2tSZXNwb25zZVN0YXR1cyhIdHRwUmVzcG9uc2UgcmVzcG9uc2UpIHsKKwkJU3RhdHVzTGluZSBzdGF0dXNMaW5lID0gcmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpOworCQlpbnQgc3RhdHVzID0gc3RhdHVzTGluZS5nZXRTdGF0dXNDb2RlKCk7CisJCWlmIChzdGF0dXNMaW5lLmdldFN0YXR1c0NvZGUoKSA+PSA0MDApIHsKKwkJCXRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJTdGF0dXM6ICIgKyBzdGF0dXMgKyAiICIKKwkJCQkJKyBzdGF0dXNMaW5lLmdldFJlYXNvblBocmFzZSgpKTsKKwkJfQorCQlhc3NlcnRFcXVhbHMoMjAwLCBzdGF0dXMpOworCX0KKworCXByb3RlY3RlZCBsb25nIGdldENvbnRlbnQoQW55TG9uZ09iamVjdElkIGlkLCBQYXRoIGYpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBoZXhJZCA9IGlkLm5hbWUoKTsKKwkJcmV0dXJuIGdldENvbnRlbnQoaGV4SWQsIGYpOworCX0KKworCXByb3RlY3RlZCBsb25nIGdldENvbnRlbnQoU3RyaW5nIGhleElkLCBQYXRoIGYpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRyeSAoQ2xvc2VhYmxlSHR0cENsaWVudCBjbGllbnQgPSBIdHRwQ2xpZW50QnVpbGRlci5jcmVhdGUoKS5idWlsZCgpKSB7CisJCQlIdHRwR2V0IHJlcXVlc3QgPSBuZXcgSHR0cEdldCgKKwkJCQkJc2VydmVyLmdldFVSSSgpICsgIi9sZnMvb2JqZWN0cy8iICsgaGV4SWQpOworCQkJSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gY2xpZW50LmV4ZWN1dGUocmVxdWVzdCk7CisJCQljaGVja1Jlc3BvbnNlU3RhdHVzKHJlc3BvbnNlKTsKKwkJCUh0dHBFbnRpdHkgZW50aXR5ID0gcmVzcG9uc2UuZ2V0RW50aXR5KCk7CisJCQlsb25nIHBvcyA9IDA7CisJCQl0cnkgKElucHV0U3RyZWFtIGluID0gZW50aXR5LmdldENvbnRlbnQoKTsKKwkJCQkJUmVhZGFibGVCeXRlQ2hhbm5lbCBpbkNoYW5uZWwgPSBDaGFubmVscy5uZXdDaGFubmVsKGluKTsKKwkJCQkJRmlsZUNoYW5uZWwgb3V0Q2hhbm5lbCA9IEZpbGVDaGFubmVsLm9wZW4oZiwKKwkJCQkJCQlTdGFuZGFyZE9wZW5PcHRpb24uQ1JFQVRFX05FVywKKwkJCQkJCQlTdGFuZGFyZE9wZW5PcHRpb24uV1JJVEUpKSB7CisJCQkJbG9uZyB0cmFuc2ZlcnJlZDsKKwkJCQlkbyB7CisJCQkJCXRyYW5zZmVycmVkID0gb3V0Q2hhbm5lbC50cmFuc2ZlckZyb20oaW5DaGFubmVsLCBwb3MsIE1pQik7CisJCQkJCXBvcyArPSB0cmFuc2ZlcnJlZDsKKwkJCQl9IHdoaWxlICh0cmFuc2ZlcnJlZCA+IDApOworCQkJfQorCQkJcmV0dXJuIHBvczsKKwkJfQorCX0KKworCS8qKgorCSAqIENyZWF0ZXMgYSBmaWxlIHdpdGggcmFuZG9tIGNvbnRlbnQsIHJlcGVhdGVkbHkgd3JpdGluZyBhIHJhbmRvbSBzdHJpbmcgb2YKKwkgKiA0ayBsZW5ndGggdG8gdGhlIGZpbGUgdW50aWwgdGhlIGZpbGUgaGFzIGF0IGxlYXN0IHRoZSBzcGVjaWZpZWQgbGVuZ3RoLgorCSAqCisJICogQHBhcmFtIGYKKwkgKiAgICAgICAgICAgIGZpbGUgdG8gZmlsbAorCSAqIEBwYXJhbSBzaXplCisJICogICAgICAgICAgICBzaXplIG9mIHRoZSBmaWxlIHRvIGdlbmVyYXRlCisJICogQHJldHVybiBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBmaWxlIGluIGJ5dGVzCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByb3RlY3RlZCBsb25nIGNyZWF0ZVBzZXVkb1JhbmRvbUNvbnRlbnRGaWxlKFBhdGggZiwgbG9uZyBzaXplKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJU2VjdXJlUmFuZG9tIHJuZCA9IG5ldyBTZWN1cmVSYW5kb20oKTsKKwkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzQwOTZdOworCQlybmQubmV4dEJ5dGVzKGJ1Zik7CisJCUJ5dGVCdWZmZXIgYnl0ZWJ1ZiA9IEJ5dGVCdWZmZXIud3JhcChidWYpOworCQl0cnkgKEZpbGVDaGFubmVsIG91dENoYW5uZWwgPSBGaWxlQ2hhbm5lbC5vcGVuKGYsCisJCQkJU3RhbmRhcmRPcGVuT3B0aW9uLkNSRUFURV9ORVcsIFN0YW5kYXJkT3Blbk9wdGlvbi5XUklURSkpIHsKKwkJCWxvbmcgbGVuID0gMDsKKwkJCWRvIHsKKwkJCQlsZW4gKz0gb3V0Q2hhbm5lbC53cml0ZShieXRlYnVmKTsKKwkJCQlpZiAoYnl0ZWJ1Zi5wb3NpdGlvbigpID09IDQwOTYpIHsKKwkJCQkJYnl0ZWJ1Zi5yZXdpbmQoKTsKKwkJCQl9CisJCQl9IHdoaWxlIChsZW4gPCBzaXplKTsKKwkJfQorCQlyZXR1cm4gRmlsZXMuc2l6ZShmKTsKKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9VcGxvYWRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL1VwbG9hZFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWJmMDliCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9VcGxvYWRUZXN0LmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5rQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKKworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQW55TG9uZ09iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Mb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC5Mb25nT2JqZWN0SWRUZXN0VXRpbHM7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBVcGxvYWRUZXN0IGV4dGVuZHMgTGZzU2VydmVyVGVzdCB7CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RVcGxvYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIFRFWFQgPSAidGVzdCI7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IHB1dENvbnRlbnQoVEVYVCk7CisJCWFzc2VydFRydWUoImV4cGVjdCBvYmplY3QgIiArIGlkLm5hbWUoKSArICIgdG8gZXhpc3QiLAorCQkJCXJlcG9zaXRvcnkuZ2V0U2l6ZShpZCkgPj0gMCk7CisJCWFzc2VydEVxdWFscygiZXhwZWN0ZWQgb2JqZWN0IGxlbmd0aCAiICsgVEVYVC5sZW5ndGgoKSwgVEVYVC5sZW5ndGgoKSwKKwkJCQlyZXBvc2l0b3J5LmdldFNpemUoaWQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3JydXB0VXBsb2FkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBURVhUID0gInRlc3QiOworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgid3JvbmdIYXNoIik7CisJCXRyeSB7CisJCQlwdXRDb250ZW50KGlkLCBURVhUKTsKKwkJCWZhaWwoImV4cGVjdGVkIFJ1bnRpbWVFeGNlcHRpb24oXCJTdGF0dXMgNDAwXCIpIik7CisJCX0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgeworCQkJYXNzZXJ0RXF1YWxzKCJTdGF0dXM6IDQwMC4gQmFkIFJlcXVlc3QiLCBlLmdldE1lc3NhZ2UoKSk7CisJCX0KKwkJYXNzZXJ0RmFsc2UoImV4cGVjdCBvYmplY3QgIiArIGlkLm5hbWUoKSArICIgbm90IHRvIGV4aXN0IiwKKwkJCQlyZXBvc2l0b3J5LmdldFNpemUoaWQpID49IDApOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJib3hpbmciKQorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdExhcmdlRmlsZVVwbG9hZCgpIHRocm93cyBFeGNlcHRpb24geworCQlQYXRoIGYgPSBQYXRocy5nZXQoZ2V0VGVtcERpcmVjdG9yeSgpLnRvU3RyaW5nKCksICJsYXJnZVJhbmRvbUZpbGUiKTsKKwkJY3JlYXRlUHNldWRvUmFuZG9tQ29udGVudEZpbGUoZiwgNSAqIE1pQik7CisJCWxvbmcgc3RhcnQgPSBTeXN0ZW0ubmFub1RpbWUoKTsKKwkJTG9uZ09iamVjdElkIGlkID0gcHV0Q29udGVudChmKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKAorCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KCJ1cGxvYWRlZCAxMCBNaUIgcmFuZG9tIGRhdGEgaW4gezB9bXMiLAorCQkJCQkJKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnQpIC8gMWU2KSk7CisJCWFzc2VydFRydWUoImV4cGVjdCBvYmplY3QgIiArIGlkLm5hbWUoKSArICIgdG8gZXhpc3QiLAorCQkJCXJlcG9zaXRvcnkuZ2V0U2l6ZShpZCkgPj0gMCk7CisJCWFzc2VydEVxdWFscygiZXhwZWN0ZWQgb2JqZWN0IGxlbmd0aCAiICsgRmlsZXMuc2l6ZShmKSwgRmlsZXMuc2l6ZShmKSwKKwkJCQlyZXBvc2l0b3J5LmdldFNpemUoaWQpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLmNsYXNzcGF0aCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTJiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLmNsYXNzcGF0aApAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y2xhc3NwYXRoPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InJlc291cmNlcyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgorPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLmZicHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLmZicHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhMDc2NwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uZmJwcmVmcwpAQCAtMCwwICsxLDEyNSBAQAorI0ZpbmRCdWdzIFVzZXIgUHJlZmVyZW5jZXMKKyNNb24gTWF5IDA0IDE2OjI0OjEzIFBEVCAyMDA5CitkZXRlY3RvckFwcGVuZGluZ1RvQW5PYmplY3RPdXRwdXRTdHJlYW09QXBwZW5kaW5nVG9Bbk9iamVjdE91dHB1dFN0cmVhbXx0cnVlCitkZXRlY3RvckJhZEFwcGxldENvbnN0cnVjdG9yPUJhZEFwcGxldENvbnN0cnVjdG9yfGZhbHNlCitkZXRlY3RvckJhZFJlc3VsdFNldEFjY2Vzcz1CYWRSZXN1bHRTZXRBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JCYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbj1CYWRTeW50YXhGb3JSZWd1bGFyRXhwcmVzc2lvbnx0cnVlCitkZXRlY3RvckJhZFVzZU9mUmV0dXJuVmFsdWU9QmFkVXNlT2ZSZXR1cm5WYWx1ZXx0cnVlCitkZXRlY3RvckJhZGx5T3ZlcnJpZGRlbkFkYXB0ZXI9QmFkbHlPdmVycmlkZGVuQWRhcHRlcnx0cnVlCitkZXRlY3RvckJvb2xlYW5SZXR1cm5OdWxsPUJvb2xlYW5SZXR1cm5OdWxsfHRydWUKK2RldGVjdG9yQ2FsbFRvVW5zdXBwb3J0ZWRNZXRob2Q9Q2FsbFRvVW5zdXBwb3J0ZWRNZXRob2R8dHJ1ZQorZGV0ZWN0b3JDaGVja0ltbXV0YWJsZUFubm90YXRpb249Q2hlY2tJbW11dGFibGVBbm5vdGF0aW9ufHRydWUKK2RldGVjdG9yQ2hlY2tUeXBlUXVhbGlmaWVycz1DaGVja1R5cGVRdWFsaWZpZXJzfHRydWUKK2RldGVjdG9yQ2xvbmVJZGlvbT1DbG9uZUlkaW9tfGZhbHNlCitkZXRlY3RvckNvbXBhcmF0b3JJZGlvbT1Db21wYXJhdG9ySWRpb218dHJ1ZQorZGV0ZWN0b3JDb25mdXNlZEluaGVyaXRhbmNlPUNvbmZ1c2VkSW5oZXJpdGFuY2V8dHJ1ZQorZGV0ZWN0b3JDb25mdXNpb25CZXR3ZWVuSW5oZXJpdGVkQW5kT3V0ZXJNZXRob2Q9Q29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kfHRydWUKK2RldGVjdG9yQ3Jvc3NTaXRlU2NyaXB0aW5nPUNyb3NzU2l0ZVNjcmlwdGluZ3x0cnVlCitkZXRlY3RvckRvSW5zaWRlRG9Qcml2aWxlZ2VkPURvSW5zaWRlRG9Qcml2aWxlZ2VkfHRydWUKK2RldGVjdG9yRG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbj1Eb250Q2F0Y2hJbGxlZ2FsTW9uaXRvclN0YXRlRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRG9udFVzZUVudW09RG9udFVzZUVudW18dHJ1ZQorZGV0ZWN0b3JEcm9wcGVkRXhjZXB0aW9uPURyb3BwZWRFeGNlcHRpb258dHJ1ZQorZGV0ZWN0b3JEdW1iTWV0aG9kSW52b2NhdGlvbnM9RHVtYk1ldGhvZEludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZHM9RHVtYk1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JEdXBsaWNhdGVCcmFuY2hlcz1EdXBsaWNhdGVCcmFuY2hlc3x0cnVlCitkZXRlY3RvckVtcHR5WmlwRmlsZUVudHJ5PUVtcHR5WmlwRmlsZUVudHJ5fHRydWUKK2RldGVjdG9yRXF1YWxzT3BlcmFuZFNob3VsZEhhdmVDbGFzc0NvbXBhdGlibGVXaXRoVGhpcz1FcXVhbHNPcGVyYW5kU2hvdWxkSGF2ZUNsYXNzQ29tcGF0aWJsZVdpdGhUaGlzfHRydWUKK2RldGVjdG9yRmluYWxpemVyTnVsbHNGaWVsZHM9RmluYWxpemVyTnVsbHNGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kQmFkQ2FzdDI9RmluZEJhZENhc3QyfHRydWUKK2RldGVjdG9yRmluZEJhZEZvckxvb3A9RmluZEJhZEZvckxvb3B8dHJ1ZQorZGV0ZWN0b3JGaW5kQ2lyY3VsYXJEZXBlbmRlbmNpZXM9RmluZENpcmN1bGFyRGVwZW5kZW5jaWVzfGZhbHNlCitkZXRlY3RvckZpbmREZWFkTG9jYWxTdG9yZXM9RmluZERlYWRMb2NhbFN0b3Jlc3x0cnVlCitkZXRlY3RvckZpbmREb3VibGVDaGVjaz1GaW5kRG91YmxlQ2hlY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9jaz1GaW5kRW1wdHlTeW5jaHJvbml6ZWRCbG9ja3x0cnVlCitkZXRlY3RvckZpbmRGaWVsZFNlbGZBc3NpZ25tZW50PUZpbmRGaWVsZFNlbGZBc3NpZ25tZW50fHRydWUKK2RldGVjdG9yRmluZEZpbmFsaXplSW52b2NhdGlvbnM9RmluZEZpbmFsaXplSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kRmxvYXRFcXVhbGl0eT1GaW5kRmxvYXRFcXVhbGl0eXx0cnVlCitkZXRlY3RvckZpbmRIRW1pc21hdGNoPUZpbmRIRW1pc21hdGNofHRydWUKK2RldGVjdG9yRmluZEluY29uc2lzdGVudFN5bmMyPUZpbmRJbmNvbnNpc3RlbnRTeW5jMnx0cnVlCitkZXRlY3RvckZpbmRKU1IxNjZMb2NrTW9uaXRvcmVudGVyPUZpbmRKU1IxNjZMb2NrTW9uaXRvcmVudGVyfHRydWUKK2RldGVjdG9yRmluZExvY2FsU2VsZkFzc2lnbm1lbnQyPUZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mnx0cnVlCitkZXRlY3RvckZpbmRNYXNrZWRGaWVsZHM9RmluZE1hc2tlZEZpZWxkc3x0cnVlCitkZXRlY3RvckZpbmRNaXNtYXRjaGVkV2FpdE9yTm90aWZ5PUZpbmRNaXNtYXRjaGVkV2FpdE9yTm90aWZ5fHRydWUKK2RldGVjdG9yRmluZE5ha2VkTm90aWZ5PUZpbmROYWtlZE5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVTdG9yZUludG9TZXNzaW9uPUZpbmROb25TZXJpYWxpemFibGVTdG9yZUludG9TZXNzaW9ufHRydWUKK2RldGVjdG9yRmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdD1GaW5kTm9uU2VyaWFsaXphYmxlVmFsdWVQYXNzZWRUb1dyaXRlT2JqZWN0fHRydWUKK2RldGVjdG9yRmluZE5vblNob3J0Q2lyY3VpdD1GaW5kTm9uU2hvcnRDaXJjdWl0fHRydWUKK2RldGVjdG9yRmluZE51bGxEZXJlZj1GaW5kTnVsbERlcmVmfHRydWUKK2RldGVjdG9yRmluZE51bGxEZXJlZnNJbnZvbHZpbmdOb25TaG9ydENpcmN1aXRFdmFsdWF0aW9uPUZpbmROdWxsRGVyZWZzSW52b2x2aW5nTm9uU2hvcnRDaXJjdWl0RXZhbHVhdGlvbnx0cnVlCitkZXRlY3RvckZpbmRPcGVuU3RyZWFtPUZpbmRPcGVuU3RyZWFtfHRydWUKK2RldGVjdG9yRmluZFB1enpsZXJzPUZpbmRQdXp6bGVyc3x0cnVlCitkZXRlY3RvckZpbmRSZWZDb21wYXJpc29uPUZpbmRSZWZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFJldHVyblJlZj1GaW5kUmV0dXJuUmVmfHRydWUKK2RldGVjdG9yRmluZFJ1bkludm9jYXRpb25zPUZpbmRSdW5JbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckZpbmRTZWxmQ29tcGFyaXNvbj1GaW5kU2VsZkNvbXBhcmlzb258dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb24yPUZpbmRTZWxmQ29tcGFyaXNvbjJ8dHJ1ZQorZGV0ZWN0b3JGaW5kU2xlZXBXaXRoTG9ja0hlbGQ9RmluZFNsZWVwV2l0aExvY2tIZWxkfHRydWUKK2RldGVjdG9yRmluZFNwaW5Mb29wPUZpbmRTcGluTG9vcHx0cnVlCitkZXRlY3RvckZpbmRTcWxJbmplY3Rpb249RmluZFNxbEluamVjdGlvbnx0cnVlCitkZXRlY3RvckZpbmRUd29Mb2NrV2FpdD1GaW5kVHdvTG9ja1dhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kcz1GaW5kVW5jYWxsZWRQcml2YXRlTWV0aG9kc3x0cnVlCitkZXRlY3RvckZpbmRVbmNvbmRpdGlvbmFsV2FpdD1GaW5kVW5jb25kaXRpb25hbFdhaXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5pbml0aWFsaXplZEdldD1GaW5kVW5pbml0aWFsaXplZEdldHx0cnVlCitkZXRlY3RvckZpbmRVbnJlbGF0ZWRUeXBlc0luR2VuZXJpY0NvbnRhaW5lcj1GaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXJ8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxlYXNlZExvY2s9RmluZFVucmVsZWFzZWRMb2NrfHRydWUKK2RldGVjdG9yRmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbj1GaW5kVW5zYXRpc2ZpZWRPYmxpZ2F0aW9ufHRydWUKK2RldGVjdG9yRmluZFVuc3luY0dldD1GaW5kVW5zeW5jR2V0fHRydWUKK2RldGVjdG9yRmluZFVzZWxlc3NDb250cm9sRmxvdz1GaW5kVXNlbGVzc0NvbnRyb2xGbG93fHRydWUKK2RldGVjdG9yRm9ybWF0U3RyaW5nQ2hlY2tlcj1Gb3JtYXRTdHJpbmdDaGVja2VyfHRydWUKK2RldGVjdG9ySHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50cz1IdWdlU2hhcmVkU3RyaW5nQ29uc3RhbnRzfHRydWUKK2RldGVjdG9ySURpdlJlc3VsdENhc3RUb0RvdWJsZT1JRGl2UmVzdWx0Q2FzdFRvRG91YmxlfHRydWUKK2RldGVjdG9ySW5jb21wYXRNYXNrPUluY29tcGF0TWFza3x0cnVlCitkZXRlY3RvckluY29uc2lzdGVudEFubm90YXRpb25zPUluY29uc2lzdGVudEFubm90YXRpb25zfHRydWUKK2RldGVjdG9ySW5lZmZpY2llbnRNZW1iZXJBY2Nlc3M9SW5lZmZpY2llbnRNZW1iZXJBY2Nlc3N8ZmFsc2UKK2RldGVjdG9ySW5lZmZpY2llbnRUb0FycmF5PUluZWZmaWNpZW50VG9BcnJheXx0cnVlCitkZXRlY3RvckluZmluaXRlTG9vcD1JbmZpbml0ZUxvb3B8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZVJlY3Vyc2l2ZUxvb3A9SW5maW5pdGVSZWN1cnNpdmVMb29wfHRydWUKK2RldGVjdG9ySW5maW5pdGVSZWN1cnNpdmVMb29wMj1JbmZpbml0ZVJlY3Vyc2l2ZUxvb3AyfGZhbHNlCitkZXRlY3RvckluaGVyaXRhbmNlVW5zYWZlR2V0UmVzb3VyY2U9SW5oZXJpdGFuY2VVbnNhZmVHZXRSZXNvdXJjZXx0cnVlCitkZXRlY3RvckluaXRpYWxpemF0aW9uQ2hhaW49SW5pdGlhbGl6YXRpb25DaGFpbnx0cnVlCitkZXRlY3Rvckluc3RhbnRpYXRlU3RhdGljQ2xhc3M9SW5zdGFudGlhdGVTdGF0aWNDbGFzc3x0cnVlCitkZXRlY3RvckludmFsaWRKVW5pdFRlc3Q9SW52YWxpZEpVbml0VGVzdHx0cnVlCitkZXRlY3Rvckl0ZXJhdG9ySWRpb21zPUl0ZXJhdG9ySWRpb21zfHRydWUKK2RldGVjdG9yTGF6eUluaXQ9TGF6eUluaXR8dHJ1ZQorZGV0ZWN0b3JMb2FkT2ZLbm93bk51bGxWYWx1ZT1Mb2FkT2ZLbm93bk51bGxWYWx1ZXx0cnVlCitkZXRlY3Rvck1ldGhvZFJldHVybkNoZWNrPU1ldGhvZFJldHVybkNoZWNrfHRydWUKK2RldGVjdG9yTXVsdGl0aHJlYWRlZEluc3RhbmNlQWNjZXNzPU11bHRpdGhyZWFkZWRJbnN0YW5jZUFjY2Vzc3x0cnVlCitkZXRlY3Rvck11dGFibGVMb2NrPU11dGFibGVMb2NrfHRydWUKK2RldGVjdG9yTXV0YWJsZVN0YXRpY0ZpZWxkcz1NdXRhYmxlU3RhdGljRmllbGRzfHRydWUKK2RldGVjdG9yTmFtaW5nPU5hbWluZ3x0cnVlCitkZXRlY3Rvck51bWJlckNvbnN0cnVjdG9yPU51bWJlckNvbnN0cnVjdG9yfHRydWUKK2RldGVjdG9yT3ZlcnJpZGluZ0VxdWFsc05vdFN5bW1ldHJpY2FsPU92ZXJyaWRpbmdFcXVhbHNOb3RTeW1tZXRyaWNhbHx0cnVlCitkZXRlY3RvclByZWZlclplcm9MZW5ndGhBcnJheXM9UHJlZmVyWmVyb0xlbmd0aEFycmF5c3x0cnVlCitkZXRlY3RvclB1YmxpY1NlbWFwaG9yZXM9UHVibGljU2VtYXBob3Jlc3xmYWxzZQorZGV0ZWN0b3JRdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudD1RdWVzdGlvbmFibGVCb29sZWFuQXNzaWdubWVudHx0cnVlCitkZXRlY3RvclJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWQ9UmVhZFJldHVyblNob3VsZEJlQ2hlY2tlZHx0cnVlCitkZXRlY3RvclJlZHVuZGFudEludGVyZmFjZXM9UmVkdW5kYW50SW50ZXJmYWNlc3x0cnVlCitkZXRlY3RvclJlcGVhdGVkQ29uZGl0aW9uYWxzPVJlcGVhdGVkQ29uZGl0aW9uYWxzfHRydWUKK2RldGVjdG9yUnVudGltZUV4Y2VwdGlvbkNhcHR1cmU9UnVudGltZUV4Y2VwdGlvbkNhcHR1cmV8dHJ1ZQorZGV0ZWN0b3JTZXJpYWxpemFibGVJZGlvbT1TZXJpYWxpemFibGVJZGlvbXx0cnVlCitkZXRlY3RvclN0YXJ0SW5Db25zdHJ1Y3Rvcj1TdGFydEluQ29uc3RydWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdGF0aWNDYWxlbmRhckRldGVjdG9yPVN0YXRpY0NhbGVuZGFyRGV0ZWN0b3J8dHJ1ZQorZGV0ZWN0b3JTdHJpbmdDb25jYXRlbmF0aW9uPVN0cmluZ0NvbmNhdGVuYXRpb258dHJ1ZQorZGV0ZWN0b3JTdXBlcmZsdW91c0luc3RhbmNlT2Y9U3VwZXJmbHVvdXNJbnN0YW5jZU9mfHRydWUKK2RldGVjdG9yU3VzcGljaW91c1RocmVhZEludGVycnVwdGVkPVN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZHx0cnVlCitkZXRlY3RvclN3aXRjaEZhbGx0aHJvdWdoPVN3aXRjaEZhbGx0aHJvdWdofHRydWUKK2RldGVjdG9yU3luY2hyb25pemVBbmROdWxsQ2hlY2tGaWVsZD1TeW5jaHJvbml6ZUFuZE51bGxDaGVja0ZpZWxkfHRydWUKK2RldGVjdG9yU3luY2hyb25pemVPbkNsYXNzTGl0ZXJhbE5vdEdldENsYXNzPVN5bmNocm9uaXplT25DbGFzc0xpdGVyYWxOb3RHZXRDbGFzc3x0cnVlCitkZXRlY3RvclN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkPVN5bmNocm9uaXppbmdPbkNvbnRlbnRzT2ZGaWVsZFRvUHJvdGVjdEZpZWxkfHRydWUKK2RldGVjdG9yVVJMUHJvYmxlbXM9VVJMUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JVbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzcz1VbmNhbGxhYmxlTWV0aG9kT2ZBbm9ueW1vdXNDbGFzc3x0cnVlCitkZXRlY3RvclVubmVjZXNzYXJ5TWF0aD1Vbm5lY2Vzc2FyeU1hdGh8dHJ1ZQorZGV0ZWN0b3JVbnJlYWRGaWVsZHM9VW5yZWFkRmllbGRzfHRydWUKK2RldGVjdG9yVXNlT2JqZWN0RXF1YWxzPVVzZU9iamVjdEVxdWFsc3xmYWxzZQorZGV0ZWN0b3JVc2VsZXNzU3ViY2xhc3NNZXRob2Q9VXNlbGVzc1N1YmNsYXNzTWV0aG9kfGZhbHNlCitkZXRlY3RvclZhckFyZ3NQcm9ibGVtcz1WYXJBcmdzUHJvYmxlbXN8dHJ1ZQorZGV0ZWN0b3JWb2xhdGlsZVVzYWdlPVZvbGF0aWxlVXNhZ2V8dHJ1ZQorZGV0ZWN0b3JXYWl0SW5Mb29wPVdhaXRJbkxvb3B8dHJ1ZQorZGV0ZWN0b3JXcm9uZ01hcEl0ZXJhdG9yPVdyb25nTWFwSXRlcmF0b3J8dHJ1ZQorZGV0ZWN0b3JYTUxGYWN0b3J5QnlwYXNzPVhNTEZhY3RvcnlCeXBhc3N8dHJ1ZQorZGV0ZWN0b3JfdGhyZXNob2xkPTIKK2VmZm9ydD1kZWZhdWx0CitleGNsdWRlZmlsdGVyMD1maW5kQnVncy9GaW5kQnVnc0V4Y2x1ZGVGaWx0ZXIueG1sCitmaWx0ZXJfc2V0dGluZ3M9TWVkaXVtfEJBRF9QUkFDVElDRSxDT1JSRUNUTkVTUyxNVF9DT1JSRUNUTkVTUyxQRVJGT1JNQU5DRSxTVFlMRXxmYWxzZQorZmlsdGVyX3NldHRpbmdzX25lZz1NQUxJQ0lPVVNfQ09ERSxOT0lTRSxJMThOLFNFQ1VSSVRZLEVYUEVSSU1FTlRBTHwKK3J1bl9hdF9mdWxsX2J1aWxkPXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uZ2l0aWdub3JlIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0ZTBlMAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMiBAQAorL2JpbgorL3RhcmdldApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5wcm9qZWN0IGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5wcm9qZWN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNzlmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnByb2plY3QKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWYyNmMwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZy88cHJvamVjdD49VVRGLTgKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWEwYWQyMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2xpbmUuc2VwYXJhdG9yPVxuCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjM5ZDE2Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDM5OCBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24uaW5oZXJpdE51bGxBbm5vdGF0aW9ucz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5taXNzaW5nTm9uTnVsbEJ5RGVmYXVsdEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGw9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTm9uTnVsbAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsYnlkZWZhdWx0PW9yZy5lY2xpcHNlLmpkdC5hbm5vdGF0aW9uLk5vbk51bGxCeURlZmF1bHQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubnVsbGFibGU9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTnVsbGFibGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubnVsbGFuYWx5c2lzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4ubWV0aG9kUGFyYW1ldGVycz1kbyBub3QgZ2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS43CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZWFkQ29kZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZXhwbGljaXRseUNsb3NlZEF1dG9DbG9zZWFibGU9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jbHVkZU51bGxJbmZvRnJvbUFzc2VydHM9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZWZhdWx0Q2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRW51bUNhc2VEZXNwaXRlRGVmYXVsdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wcm90ZWN0ZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NNZXRob2RUeXBlUGFyYW1ldGVycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uRm9ySW50ZXJmYWNlTWV0aG9kSW1wbGVtZW50YXRpb249ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25udWxsUGFyYW1ldGVyQW5ub3RhdGlvbkRyb3BwZWQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsQW5ub3RhdGlvbkluZmVyZW5jZUNvbmZsaWN0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFNwZWNWaW9sYXRpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFVuY2hlY2tlZENvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsbHlVbmNsb3NlZENsb3NlYWJsZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTcGVjaWZpY2F0aW9uT2ZUeXBlQXJndW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZXBvcnRNZXRob2RDYW5CZVBvdGVudGlhbGx5U3RhdGljPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZXBvcnRNZXRob2RDYW5CZVN0YXRpYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzT3B0aW9uYWxFcnJvcnM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRhY3RpY051bGxBbmFseXNpc0ZvckZpZWxkcz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmF2b2lkYWJsZUdlbmVyaWNUeXBlUHJvYmxlbXM9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jbG9zZWRDbG9zZWFibGU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZE9iamVjdEFsbG9jYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkVHlwZVBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbl90eXBlX21lbWJlcnNfb25fY29sdW1ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2Fubm90YXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2VudW1fY29uc3RhbnQ9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9leHBsaWNpdF9jb25zdHJ1Y3Rvcl9jYWxsPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9xdWFsaWZpZWRfYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2JpbmFyeV9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb21wYWN0X2lmPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb25kaXRpb25hbF9leHByZXNzaW9uPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9lbnVtX2NvbnN0YW50cz0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9leHByZXNzaW9uc19pbl9hcnJheV9pbml0aWFsaXplcj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Jlc291cmNlc19pbl90cnk9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3VuaW9uX3R5cGVfaW5fbXVsdGljYXRjaD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2s9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2NvbnN0YW50PWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lcz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9saW5lX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfYmxvY2tfYm91bmRhcmllcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfamF2YWRvY19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LnByZXNlcnZlX3doaXRlX3NwYWNlX2JldHdlZW5fY29kZV9hbmRfbGluZV9jb21tZW50cz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5kaXNhYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9mZgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmVuYWJsaW5nX3RhZz1AZm9ybWF0dGVyXDpvbgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfbGluZV9jb21tZW50X3N0YXJ0aW5nX29uX2ZpcnN0X2NvbHVtbj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2ZpZWxkPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2xvY2FsX3ZhcmlhYmxlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21lbWJlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9tZXRob2Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFja2FnZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fdHlwZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfbGFiZWw9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZWxzZV9pbl9pZl9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fubm90YXRpb25fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fdHJ5PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3RyeT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fdHJ5X3Jlc291cmNlcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX2xpbmVzX2luX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX3dyYXBwZWRfbGluZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfaW1wbGVfaWZfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX3RoZW5fc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmxpbmVTcGxpdD04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9ibG9ja19jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5uZXZlcl9pbmRlbnRfbGluZV9jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfYmxhbmtfbGluZXNfYXRfYmVnaW5uaW5nX29mX21ldGhvZF9ib2R5PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfZW1wdHlfbGluZXNfdG9fcHJlc2VydmU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnB1dF9lbXB0eV9zdGF0ZW1lbnRfb25fbmV3X2xpbmU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj10YWIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV9vbl9vZmZfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX29yX29wZXJhdG9yX211bHRpY2F0Y2g9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfb3V0ZXJfZXhwcmVzc2lvbnNfd2hlbl9uZXN0ZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzM2Y2NlCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw2MSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VkaXRvcl9zYXZlX3BhcnRpY2lwYW50X29yZy5lY2xpcHNlLmpkdC51aS5wb3N0c2F2ZWxpc3RlbmVyLmNsZWFudXA9dHJ1ZQorZm9ybWF0dGVyX3Byb2ZpbGU9X0pHaXQgRm9ybWF0Citmb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMgorb3JnLmVjbGlwc2UuamR0LnVpLmlnbm9yZWxvd2VyY2FzZW5hbWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC51aS5pbXBvcnRvcmRlcj1qYXZhO2phdmF4O29yZztjb207CitvcmcuZWNsaXBzZS5qZHQudWkub25kZW1hbmR0aHJlc2hvbGQ9OTkKK29yZy5lY2xpcHNlLmpkdC51aS5zdGF0aWNvbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz48dGVtcGxhdGVzLz4KK3NwX2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorc3BfY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19tZXRob2RzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnNfaW50ZXJmYWNlX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9ZmFsc2UKK3NwX2NsZWFudXAuY29ycmVjdF9pbmRlbnRhdGlvbj1mYWxzZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGVfY2hhbmdlc19vbmx5PXRydWUKK3NwX2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9ZmFsc2UKK3NwX2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitzcF9jbGVhbnVwLm1ha2VfdHlwZV9hYnN0cmFjdF9pZl9taXNzaW5nX21ldGhvZD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitzcF9jbGVhbnVwLm9uX3NhdmVfdXNlX2FkZGl0aW9uYWxfYWN0aW9ucz10cnVlCitzcF9jbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitzcF9jbGVhbnVwLnVzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitzcF9jbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkZWM0ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Byb2plY3QucmVwb3NpdG9yeS5raW5kPWJ1Z3ppbGxhCitwcm9qZWN0LnJlcG9zaXRvcnkudXJsPWh0dHBzXDovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50ZWFtLnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50ZWFtLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlN2EwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKQEAgLTAsMCArMSwyIEBACitjb21taXQuY29tbWVudC50ZW1wbGF0ZT0ke3Rhc2suZGVzY3JpcHRpb259IFxuXG5CdWdcOiAke3Rhc2sua2V5fQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjk0ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCkBAIC0wLDAgKzEsOTggQEAKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRF9XSVRIT1VUX0RFRkFVTFRfVkFMVUU9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BUElfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9SRUVYUE9SVEVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFPUVycm9yCitBUElfVVNFX1NDQU5fRklFTERfU0VWRVJJVFk9RXJyb3IKK0FQSV9VU0VfU0NBTl9NRVRIT0RfU0VWRVJJVFk9RXJyb3IKK0FQSV9VU0VfU0NBTl9UWVBFX1NFVkVSSVRZPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fQUJTVFJBQ1RfVE9fQUJTVFJBQ1Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DT05TVFJVQ1RPUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfU1VQRVJDTEFTUz1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFSQVJHU19UT19BUlJBWT1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9FTlVNX0NPTlNUQU5UPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0FEREVEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0ZJTkFMX1RPX05PTl9GSU5BTF9TVEFUSUNfQ09OU1RBTlQ9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1NUQVRJQ19UT19OT05fU1RBVElDPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQUxVRT1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9BUkdVTUVOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVkFMVUU9RXJyb3IKK0lMTEVHQUxfRVhURU5EPVdhcm5pbmcKK0lMTEVHQUxfSU1QTEVNRU5UPVdhcm5pbmcKK0lMTEVHQUxfSU5TVEFOVElBVEU9V2FybmluZworSUxMRUdBTF9PVkVSUklERT1XYXJuaW5nCitJTExFR0FMX1JFRkVSRU5DRT1XYXJuaW5nCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfU1VQRVJfSU5URVJGQUNFX1dJVEhfTUVUSE9EUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5WQUxJRF9BTk5PVEFUSU9OPUlnbm9yZQorSU5WQUxJRF9KQVZBRE9DX1RBRz1JZ25vcmUKK0lOVkFMSURfUkVGRVJFTkNFX0lOX1NZU1RFTV9MSUJSQVJJRVM9RXJyb3IKK0xFQUtfRVhURU5EPVdhcm5pbmcKK0xFQUtfRklFTERfREVDTD1XYXJuaW5nCitMRUFLX0lNUExFTUVOVD1XYXJuaW5nCitMRUFLX01FVEhPRF9QQVJBTT1XYXJuaW5nCitMRUFLX01FVEhPRF9SRVRVUk5fVFlQRT1XYXJuaW5nCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9TVEFUSUNfVE9fU1RBVElDPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfQU5OT1RBVElPTl9ERUZBVUxUX1ZBTFVFPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK01JU1NJTkdfRUVfREVTQ1JJUFRJT05TPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQURERURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1VOVVNFRF9QUk9CTEVNX0ZJTFRFUlM9V2FybmluZworYXV0b21hdGljYWxseV9yZW1vdmVkX3VudXNlZF9wcm9ibGVtX2ZpbHRlcnM9ZmFsc2UKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uPUVycm9yCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uX2luY2x1ZGVfbWFqb3Jfd2l0aG91dF9icmVha2luZ19jaGFuZ2U9RGlzYWJsZWQKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9taW5vcl93aXRob3V0X2FwaV9jaGFuZ2U9RGlzYWJsZWQKK2ludmFsaWRfc2luY2VfdGFnX3ZlcnNpb249RXJyb3IKK21hbGZvcm1lZF9zaW5jZV90YWc9RXJyb3IKK21pc3Npbmdfc2luY2VfdGFnPUVycm9yCityZXBvcnRfYXBpX2JyZWFrYWdlX3doZW5fbWFqb3JfdmVyc2lvbl9pbmNyZW1lbnRlZD1EaXNhYmxlZAorcmVwb3J0X3Jlc29sdXRpb25fZXJyb3JzX2FwaV9jb21wb25lbnQ9V2FybmluZwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzYzM3ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcmVzb2x2ZS5yZXF1aXJlYnVuZGxlPWZhbHNlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvQlVDSyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9CVUNLCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDBiN2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvQlVDSwpAQCAtMCwwICsxLDIyIEBACitTUkNTID0gZ2xvYihbJ3NyYy8qKiddKQorUkVTT1VSQ0VTID0gZ2xvYihbJ3Jlc291cmNlcy8qKiddKQorCitqYXZhX2xpYnJhcnkoCisgIG5hbWUgPSAnamdpdC1sZnMtc2VydmVyJywKKyAgc3JjcyA9IFNSQ1MsCisgIHJlc291cmNlcyA9IFJFU09VUkNFUywKKyAgZGVwcyA9IFsKKyAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlOmh0dHAtYXBhY2hlJywKKyAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0OmpnaXQnLAorICAgICcvL29yZy5lY2xpcHNlLmpnaXQubGZzOmpnaXQtbGZzJywKKyAgICAnLy9saWI6Z3NvbicsCisgICAgJy8vbGliOmh0dHBjb3JlJywKKyAgICAnLy9saWI6c2VydmxldC1hcGknCisgIF0sCisgIHZpc2liaWxpdHkgPSBbJ1BVQkxJQyddLAorKQorCitqYXZhX3NvdXJjZXMoCisgIG5hbWUgPSAnamdpdC1sZnMtc2VydmVyX3NyYycsCisgIHNyY3MgPSBTUkNTICsgUkVTT1VSQ0VTLAorKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZmY3NDAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyOCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbl9uYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyX25hbWUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7dmVyc2lvbj0iNC4zLjAiOworICB1c2VzOj0iamF2YXguc2VydmxldC5odHRwLAorICAgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7dmVyc2lvbj0iNC4zLjAiOworICB1c2VzOj0iamF2YXguc2VydmxldCwKKyAgIGphdmF4LnNlcnZsZXQuaHR0cCwKKyAgIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciwKKyAgIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYiIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmludGVybmFsO3ZlcnNpb249IjQuMy4wIjt4LWludGVybmFsOj10cnVlCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNworSW1wb3J0LVBhY2thZ2U6IGNvbS5nb29nbGUuZ3Nvbjt2ZXJzaW9uPSJbMi4yLjQsMy4wLjApIiwKKyBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IlszLjEuMCw0LjAuMCkiLAorIGphdmF4LnNlcnZsZXQuYW5ub3RhdGlvbjt2ZXJzaW9uPSJbMy4xLjAsNC4wLjApIiwKKyBqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2lvbj0iWzMuMS4wLDQuMC4wKSIsCisgb3JnLmFwYWNoZS5odHRwO3ZlcnNpb249Ils0LjMuMCw1LjAuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9hYm91dC5odG1sIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL2Fib3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFhMjY3MQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9hYm91dC5odG1sCkBAIC0wLDAgKzEsNTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEiID8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisKKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KKzx0aXRsZT5FY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIC0gVmVyc2lvbiAxLjA8L3RpdGxlPgorPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKyAgYm9keSB7CisgICAgc2l6ZTogOC41aW4gMTEuMGluOworICAgIG1hcmdpbjogMC4yNWluIDAuNWluIDAuMjVpbiAwLjVpbjsKKyAgICB0YWItaW50ZXJ2YWw6IDAuNWluOworICAgIH0KKyAgcCB7ICAJCisgICAgbWFyZ2luLWxlZnQ6IGF1dG87CisgICAgbWFyZ2luLXRvcDogIDAuNWVtOworICAgIG1hcmdpbi1ib3R0b206IDAuNWVtOworICAgIH0KKyAgcC5saXN0IHsKKyAgCW1hcmdpbi1sZWZ0OiAwLjVpbjsKKyAgICBtYXJnaW4tdG9wOiAgMC4wNWVtOworICAgIG1hcmdpbi1ib3R0b206IDAuMDVlbTsKKyAgICB9CisgIDwvc3R5bGU+CisKKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorCis8cD48Yj5FY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIC0gdiAxLjA8L2I+PC9wPgorCis8cD5Db3B5cmlnaHQgKGMpIDIwMDcsIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGxpY2Vuc29ycy4gPC9wPgorCis8cD5BbGwgcmlnaHRzIHJlc2VydmVkLjwvcD4KKzxwPlJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIAorCWFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKzx1bD48bGk+UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKKwl0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiA8L2xpPgorPGxpPlJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCisJdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKwlhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gPC9saT4KKzxsaT5OZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgCisJY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gCisJdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gPC9saT48L3VsPgorPC9wPgorPHA+VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIAorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCAKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLjwvcD4KKworPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvYnVpbGQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDgyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDcgQEAKK3NvdXJjZS4uID0gc3JjLyxcCisgICAgICAgICAgIHJlc291cmNlcy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgcGx1Z2luLnByb3BlcnRpZXMsXAorICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3BsdWdpbi5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZjAxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcGx1Z2luLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyIEBACitwbHVnaW5fbmFtZT1KR2l0IExhcmdlIEZpbGUgU3RvcmFnZSBTZXJ2ZXIKK3Byb3ZpZGVyX25hbWU9RWNsaXBzZSBKR2l0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZmRmM2IKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbApAQCAtMCwwICsxLDE1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICAgYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKworICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgICBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgICBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICAgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgICB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICAgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tPgorCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICA8cGFyZW50PgorICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDwvcGFyZW50PgorCisgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvYXJ0aWZhY3RJZD4KKyAgPG5hbWU+SkdpdCAtIExhcmdlIEZpbGUgU3RvcmFnZSBTZXJ2ZXI8L25hbWU+CisKKyAgPGRlc2NyaXB0aW9uPgorICAgIEpHaXQgTGFyZ2UgRmlsZSBTdG9yYWdlIFNlcnZlciBpbXBsZW1lbnRhdGlvbi4KKyAgPC9kZXNjcmlwdGlvbj4KKworICA8cHJvcGVydGllcz4KKyAgICA8dHJhbnNsYXRlLXF1YWxpZmllci8+CisgIDwvcHJvcGVydGllcz4KKworICA8ZGVwZW5kZW5jaWVzPgorICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnM8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+amF2YXguc2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5jb2RlLmdzb248L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5nc29uPC9hcnRpZmFjdElkPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisKKyAgPGJ1aWxkPgorICAgIDxzb3VyY2VEaXJlY3Rvcnk+c3JjLzwvc291cmNlRGlyZWN0b3J5PgorCisgICAgPHJlc291cmNlcz4KKyAgICAgIDxyZXNvdXJjZT4KKyAgICAgICAgPGRpcmVjdG9yeT4uPC9kaXJlY3Rvcnk+CisgICAgICAgIDxpbmNsdWRlcz4KKyAgICAgICAgICA8aW5jbHVkZT5wbHVnaW4ucHJvcGVydGllczwvaW5jbHVkZT4KKyAgICAgICAgICA8aW5jbHVkZT5hYm91dC5odG1sPC9pbmNsdWRlPgorICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgPC9yZXNvdXJjZT4KKyAgICAgIDxyZXNvdXJjZT4KKyAgICAgICAgPGRpcmVjdG9yeT5yZXNvdXJjZXMvPC9kaXJlY3Rvcnk+CisgICAgICA8L3Jlc291cmNlPgorICAgIDwvcmVzb3VyY2VzPgorCisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNvdXJjZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxpbmhlcml0ZWQ+dHJ1ZTwvaW5oZXJpdGVkPgorICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgPGlkPmF0dGFjaC1zb3VyY2VzPC9pZD4KKyAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLWNsYXNzZXM8L3BoYXNlPgorICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICA8Z29hbD5qYXI8L2dvYWw+CisgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxhcmNoaXZlPgorICAgICAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtzb3VyY2UtYnVuZGxlLW1hbmlmZXN0fTwvbWFuaWZlc3RGaWxlPgorICAgICAgICAgICAgICA8L2FyY2hpdmU+CisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgIDwvcGx1Z2luPgorCisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICA8YXJjaGl2ZT4KKyAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtidW5kbGUtbWFuaWZlc3R9PC9tYW5pZmVzdEZpbGU+CisgICAgICAgICAgPC9hcmNoaXZlPgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKworICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmNsaXJyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKworICA8cmVwb3J0aW5nPgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmNsaXJyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+JHtjbGlyci12ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGNvbXBhcmlzb25WZXJzaW9uPiR7amdpdC1sYXN0LXJlbGVhc2UtdmVyc2lvbn08L2NvbXBhcmlzb25WZXJzaW9uPgorICAgICAgICAgIDxtaW5TZXZlcml0eT5pbmZvPC9taW5TZXZlcml0eT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICA8L3JlcG9ydGluZz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ludGVybmFsL0xmc1NlcnZlclRleHQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ludGVybmFsL0xmc1NlcnZlclRleHQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTJhNzc0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvaW50ZXJuYWwvTGZzU2VydmVyVGV4dC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNCBAQAorY29ycnVwdExvbmdPYmplY3Q9VGhlIGNvbnRlbnQgaGFzaCAnJ3swfScnIG9mIHRoZSBsb25nIG9iamVjdCAnJ3sxfScnIGRvZXNuJyd0IG1hdGNoIGl0cyBpZCwgdGhlIGNvcnJ1cHQgb2JqZWN0IHdpbGwgYmUgZGVsZXRlZC4KK2ludmFsaWRQYXRoSW5mbz1JbnZhbGlkIHBhdGhJbmZvICcnezB9JycgZG9lcyBub3QgbWF0Y2ggJycvJ3snU0hBLTI1Nid9JycnCitvYmplY3ROb3RGb3VuZD1PYmplY3QgJyd7MH0nJyBub3QgZm91bmQKK3Vuc3VwcG9ydGVkT3BlcmF0aW9uPU9wZXJhdGlvbiAnJ3swfScnIGlzIG5vdCBzdXBwb3J0ZWQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xhcmdlRmlsZVJlcG9zaXRvcnkuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xhcmdlRmlsZVJlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmRmOGQwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvTGFyZ2VGaWxlUmVwb3NpdG9yeS5qYXZhCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQW55TG9uZ09iamVjdElkOworCisvKioKKyAqIEFic3RyYWN0aW9uIG9mIGEgcmVwb3NpdG9yeSBmb3Igc3RvcmluZyBsYXJnZSBvYmplY3RzCisgKgorICogQHNpbmNlIDQuMworICovCitwdWJsaWMgaW50ZXJmYWNlIExhcmdlRmlsZVJlcG9zaXRvcnkgeworCisJLyoqCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICBpZCBvZiB0aGUgb2JqZWN0IHRvIGRvd25sb2FkCisJICogQHJldHVybiBBY3Rpb24gZm9yIGRvd25sb2FkaW5nIHRoZSBvYmplY3QKKwkgKi8KKwlwdWJsaWMgUmVzcG9uc2UuQWN0aW9uIGdldERvd25sb2FkQWN0aW9uKEFueUxvbmdPYmplY3RJZCBpZCk7CisKKwkvKioKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIGlkIG9mIHRoZSBvYmplY3QgdG8gdXBsb2FkCisJICogQHBhcmFtIHNpemUKKwkgKiAgICAgICAgICAgIHNpemUgb2YgdGhlIG9iamVjdCB0byBiZSB1cGxvYWRlZAorCSAqIEByZXR1cm4gQWN0aW9uIGZvciB1cGxvYWRpbmcgdGhlIG9iamVjdAorCSAqLworCXB1YmxpYyBSZXNwb25zZS5BY3Rpb24gZ2V0VXBsb2FkQWN0aW9uKEFueUxvbmdPYmplY3RJZCBpZCwgbG9uZyBzaXplKTsKKworCS8qKgorCSAqIEBwYXJhbSBpZAorCSAqICAgICAgICAgICAgaWQgb2YgdGhlIG9iamVjdCB0byBiZSB2ZXJpZmllZAorCSAqIEByZXR1cm4gQWN0aW9uIGZvciB2ZXJpZnlpbmcgdGhlIG9iamVjdCwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSBzZXJ2ZXIKKwkgKiAgICAgICAgIGRvZXNuJ3Qgc3VwcG9ydCBvciByZXF1aXJlIHZlcmlmaWNhdGlvbgorCSAqLworCXB1YmxpYyBATnVsbGFibGUgUmVzcG9uc2UuQWN0aW9uIGdldFZlcmlmeUFjdGlvbihBbnlMb25nT2JqZWN0SWQgaWQpOworCisJLyoqCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICBpZCBvZiB0aGUgb2JqZWN0CisJICogQHJldHVybiBsZW5ndGggb2YgdGhlIG9iamVjdCBjb250ZW50IGluIGJ5dGVzLCAtMSBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QKKwkgKiAgICAgICAgIGV4aXN0CisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBsb25nIGdldFNpemUoQW55TG9uZ09iamVjdElkIGlkKSB0aHJvd3MgSU9FeGNlcHRpb247Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9MZnNPYmplY3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xmc09iamVjdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYmEyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9MZnNPYmplY3QuamF2YQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBTYXNhIFppdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7CisKK2NsYXNzIExmc09iamVjdCB7CisJU3RyaW5nIG9pZDsKKwlsb25nIHNpemU7Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9MZnNQcm90b2NvbFNlcnZsZXQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL0xmc1Byb3RvY29sU2VydmxldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NDEzN2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9MZnNQcm90b2NvbFNlcnZsZXQuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgU2FzYSBaaXZrb3YgPHNhc2Eueml2a292QHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyOworCitpbXBvcnQgc3RhdGljIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy5VVEZfODsKK2ltcG9ydCBzdGF0aWMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfT0s7CitpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX1NFUlZJQ0VfVU5BVkFJTEFCTEU7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOworaW1wb3J0IGphdmEuaW8uUmVhZGVyOworaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworCitpbXBvcnQgY29tLmdvb2dsZS5nc29uLkZpZWxkTmFtaW5nUG9saWN5OworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uOworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uQnVpbGRlcjsKKworLyoqCisgKiBMRlMgcHJvdG9jb2wgaGFuZGxlciBpbXBsZW1lbnRpbmcgdGhlIExGUyBiYXRjaCBBUEkgWzFdCisgKgorICogWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9naXRodWIvZ2l0LWxmcy9ibG9iL21hc3Rlci9kb2NzL2FwaS9odHRwLXYxLWJhdGNoLm1kCisgKgorICogQHNpbmNlIDQuMworICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgTGZzUHJvdG9jb2xTZXJ2bGV0IGV4dGVuZHMgSHR0cFNlcnZsZXQgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVEVOVFRZUEVfVk5EX0dJVF9MRlNfSlNPTiA9ICJhcHBsaWNhdGlvbi92bmQuZ2l0LWxmcytqc29uIjsgLy8kTk9OLU5MUy0xJAorCisJcHJpdmF0ZSBHc29uIGdzb24gPSBjcmVhdGVHc29uKCk7CisKKwkvKioKKwkgKiBHZXQgdGhlIGxhcmdlIGZpbGUgcmVwb3NpdG9yeQorCSAqCisJICogQHJldHVybiB0aGUgbGFyZ2UgZmlsZSByZXBvc2l0b3J5IHN0b3JpbmcgbGFyZ2UgZmlsZXMKKwkgKi8KKwlwcm90ZWN0ZWQgYWJzdHJhY3QgTGFyZ2VGaWxlUmVwb3NpdG9yeSBnZXRMYXJnZUZpbGVSZXBvc2l0b3J5KCk7CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMpCisJCQl0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlyZXMuc2V0U3RhdHVzKFNDX09LKTsKKwkJcmVzLnNldENvbnRlbnRUeXBlKENPTlRFTlRUWVBFX1ZORF9HSVRfTEZTX0pTT04pOworCisJCVdyaXRlciB3ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKAorCQkJCW5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIocmVzLmdldE91dHB1dFN0cmVhbSgpLCBVVEZfOCkpOworCisJCVJlYWRlciByID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihyZXEuZ2V0SW5wdXRTdHJlYW0oKSwgVVRGXzgpKTsKKwkJTGZzUmVxdWVzdCByZXF1ZXN0ID0gZ3Nvbi5mcm9tSnNvbihyLCBMZnNSZXF1ZXN0LmNsYXNzKTsKKworCQlMYXJnZUZpbGVSZXBvc2l0b3J5IHJlcG8gPSBnZXRMYXJnZUZpbGVSZXBvc2l0b3J5KCk7CisJCWlmIChyZXBvID09IG51bGwpIHsKKwkJCXJlcy5zZXRTdGF0dXMoU0NfU0VSVklDRV9VTkFWQUlMQUJMRSk7CisJCQlyZXR1cm47CisJCX0KKworCQlUcmFuc2ZlckhhbmRsZXIgaGFuZGxlciA9IFRyYW5zZmVySGFuZGxlcgorCQkJCS5mb3JPcGVyYXRpb24ocmVxdWVzdC5vcGVyYXRpb24sIHJlcG8sIHJlcXVlc3Qub2JqZWN0cyk7CisJCWdzb24udG9Kc29uKGhhbmRsZXIucHJvY2VzcygpLCB3KTsKKwkJdy5mbHVzaCgpOworCX0KKworCXByaXZhdGUgc3RhdGljIGNsYXNzIExmc1JlcXVlc3QgeworCQlTdHJpbmcgb3BlcmF0aW9uOworCisJCUxpc3Q8TGZzT2JqZWN0PiBvYmplY3RzOworCX0KKworCXByaXZhdGUgc3RhdGljIEdzb24gY3JlYXRlR3NvbigpIHsKKwkJR3NvbkJ1aWxkZXIgZ2IgPSBuZXcgR3NvbkJ1aWxkZXIoKQorCQkJCS5zZXRGaWVsZE5hbWluZ1BvbGljeSgKKwkJCQkJCUZpZWxkTmFtaW5nUG9saWN5LkxPV0VSX0NBU0VfV0lUSF9VTkRFUlNDT1JFUykKKwkJCQkuc2V0UHJldHR5UHJpbnRpbmcoKS5kaXNhYmxlSHRtbEVzY2FwaW5nKCk7CisJCXJldHVybiBnYi5jcmVhdGUoKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9SZXNwb25zZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvUmVzcG9uc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzk3MmUwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvUmVzcG9uc2UuamF2YQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBTYXNhIFppdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCisvKioKKyAqIFBPSk9zIGZvciBHc29uIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uCisgKgorICogU2VlCisgKiB7QGxpbmsgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXQtbGZzL3RyZWUvbWFzdGVyL2RvY3MvYXBpIj5MRlMKKyAqIEFQSSBzcGVjaWZpY2F0aW9uPC9hPn0KKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVzcG9uc2UgeworCS8qKiBEZXNjcmliZXMgYW4gYWN0aW9uIHRoZSBjbGllbnQgY2FuIGV4ZWN1dGUgb24gYSBzaW5nbGUgb2JqZWN0ICovCisJY2xhc3MgQWN0aW9uIHsKKwkJcHVibGljIFN0cmluZyBocmVmOworCQlwdWJsaWMgTWFwPFN0cmluZywgU3RyaW5nPiBoZWFkZXI7CisJfQorCisJLyoqIERlc2NyaWJlcyBhbiBlcnJvciB0byBiZSByZXR1cm5lZCBieSB0aGUgTEZTIGJhdGNoIEFQSSAqLworCWNsYXNzIEVycm9yIHsKKwkJcHVibGljIGludCBjb2RlOworCQlwdWJsaWMgU3RyaW5nIG1lc3NhZ2U7CisJfQorCisJLyoqIERlc2NyaWJlcyB0aGUgYWN0aW9ucyB0aGUgTEZTIHNlcnZlciBvZmZlcnMgZm9yIGEgc2luZ2xlIG9iamVjdCAqLworCWNsYXNzIE9iamVjdEluZm8geworCQlwdWJsaWMgU3RyaW5nIG9pZDsKKwkJcHVibGljIGxvbmcgc2l6ZTsKKwkJcHVibGljIE1hcDxTdHJpbmcsIEFjdGlvbj4gYWN0aW9uczsKKwkJcHVibGljIEVycm9yIGVycm9yOworCX0KKworCS8qKiBEZXNjcmliZXMgdGhlIGJvZHkgb2YgYSBMRlMgYmF0Y2ggQVBJIHJlc3BvbnNlICovCisJY2xhc3MgQm9keSB7CisJCXB1YmxpYyBMaXN0PE9iamVjdEluZm8+IG9iamVjdHM7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvVHJhbnNmZXJIYW5kbGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9UcmFuc2ZlckhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjViNjFjCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvVHJhbnNmZXJIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIFNhc2EgWml2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyOworCitpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX05PVF9GT1VORDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Mb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLlJlc3BvbnNlLkFjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuUmVzcG9uc2UuQm9keTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWwuTGZzU2VydmVyVGV4dDsKKworYWJzdHJhY3QgY2xhc3MgVHJhbnNmZXJIYW5kbGVyIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBET1dOTE9BRCA9ICJkb3dubG9hZCI7IC8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVVBMT0FEID0gInVwbG9hZCI7IC8vJE5PTi1OTFMtMSQKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSSUZZID0gInZlcmlmeSI7IC8vJE5PTi1OTFMtMSQKKworCXN0YXRpYyBUcmFuc2ZlckhhbmRsZXIgZm9yT3BlcmF0aW9uKFN0cmluZyBvcGVyYXRpb24sCisJCQlMYXJnZUZpbGVSZXBvc2l0b3J5IHJlcG9zaXRvcnksIExpc3Q8TGZzT2JqZWN0PiBvYmplY3RzKSB7CisJCXN3aXRjaCAob3BlcmF0aW9uKSB7CisJCWNhc2UgVHJhbnNmZXJIYW5kbGVyLlVQTE9BRDoKKwkJCXJldHVybiBuZXcgVXBsb2FkKHJlcG9zaXRvcnksIG9iamVjdHMpOworCQljYXNlIFRyYW5zZmVySGFuZGxlci5ET1dOTE9BRDoKKwkJCXJldHVybiBuZXcgRG93bmxvYWQocmVwb3NpdG9yeSwgb2JqZWN0cyk7CisJCWNhc2UgVHJhbnNmZXJIYW5kbGVyLlZFUklGWToKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJTGZzU2VydmVyVGV4dC5nZXQoKS51bnN1cHBvcnRlZE9wZXJhdGlvbiwgb3BlcmF0aW9uKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBVcGxvYWQgZXh0ZW5kcyBUcmFuc2ZlckhhbmRsZXIgeworCQlVcGxvYWQoTGFyZ2VGaWxlUmVwb3NpdG9yeSByZXBvc2l0b3J5LAorCQkJCUxpc3Q8TGZzT2JqZWN0PiBvYmplY3RzKSB7CisJCQlzdXBlcihyZXBvc2l0b3J5LCBvYmplY3RzKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlCb2R5IHByb2Nlc3MoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJUmVzcG9uc2UuQm9keSBib2R5ID0gbmV3IFJlc3BvbnNlLkJvZHkoKTsKKwkJCWlmIChvYmplY3RzLnNpemUoKSA+IDApIHsKKwkJCQlib2R5Lm9iamVjdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJCQlmb3IgKExmc09iamVjdCBvIDogb2JqZWN0cykgeworCQkJCQlhZGRPYmplY3RJbmZvKGJvZHksIG8pOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBib2R5OworCQl9CisKKwkJcHJpdmF0ZSB2b2lkIGFkZE9iamVjdEluZm8oUmVzcG9uc2UuQm9keSBib2R5LCBMZnNPYmplY3QgbykKKwkJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQkJUmVzcG9uc2UuT2JqZWN0SW5mbyBpbmZvID0gbmV3IFJlc3BvbnNlLk9iamVjdEluZm8oKTsKKwkJCWJvZHkub2JqZWN0cy5hZGQoaW5mbyk7CisJCQlpbmZvLm9pZCA9IG8ub2lkOworCQkJaW5mby5zaXplID0gby5zaXplOworCisJCQlMb25nT2JqZWN0SWQgb2lkID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoby5vaWQpOworCQkJaWYgKHJlcG9zaXRvcnkuZ2V0U2l6ZShvaWQpID09IC0xKSB7CisJCQkJaW5mby5hY3Rpb25zID0gbmV3IEhhc2hNYXA8PigpOworCQkJCWluZm8uYWN0aW9ucy5wdXQoVVBMT0FELAorCQkJCQkJcmVwb3NpdG9yeS5nZXRVcGxvYWRBY3Rpb24ob2lkLCBvLnNpemUpKTsKKwkJCQlBY3Rpb24gdmVyaWZ5ID0gcmVwb3NpdG9yeS5nZXRWZXJpZnlBY3Rpb24ob2lkKTsKKwkJCQlpZiAodmVyaWZ5ICE9IG51bGwpIHsKKwkJCQkJaW5mby5hY3Rpb25zLnB1dChWRVJJRlksIHZlcmlmeSk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRG93bmxvYWQgZXh0ZW5kcyBUcmFuc2ZlckhhbmRsZXIgeworCQlEb3dubG9hZChMYXJnZUZpbGVSZXBvc2l0b3J5IHJlcG9zaXRvcnksCisJCQkJTGlzdDxMZnNPYmplY3Q+IG9iamVjdHMpIHsKKwkJCXN1cGVyKHJlcG9zaXRvcnksIG9iamVjdHMpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCUJvZHkgcHJvY2VzcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlSZXNwb25zZS5Cb2R5IGJvZHkgPSBuZXcgUmVzcG9uc2UuQm9keSgpOworCQkJaWYgKG9iamVjdHMuc2l6ZSgpID4gMCkgeworCQkJCWJvZHkub2JqZWN0cyA9IG5ldyBBcnJheUxpc3Q8PigpOworCQkJCWZvciAoTGZzT2JqZWN0IG8gOiBvYmplY3RzKSB7CisJCQkJCWFkZE9iamVjdEluZm8oYm9keSwgbyk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGJvZHk7CisJCX0KKworCQlwcml2YXRlIHZvaWQgYWRkT2JqZWN0SW5mbyhSZXNwb25zZS5Cb2R5IGJvZHksIExmc09iamVjdCBvKQorCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlSZXNwb25zZS5PYmplY3RJbmZvIGluZm8gPSBuZXcgUmVzcG9uc2UuT2JqZWN0SW5mbygpOworCQkJYm9keS5vYmplY3RzLmFkZChpbmZvKTsKKwkJCWluZm8ub2lkID0gby5vaWQ7CisJCQlpbmZvLnNpemUgPSBvLnNpemU7CisKKwkJCUxvbmdPYmplY3RJZCBvaWQgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhvLm9pZCk7CisJCQlpZiAocmVwb3NpdG9yeS5nZXRTaXplKG9pZCkgPj0gMCkgeworCQkJCWluZm8uYWN0aW9ucyA9IG5ldyBIYXNoTWFwPD4oKTsKKwkJCQlpbmZvLmFjdGlvbnMucHV0KERPV05MT0FELAorCQkJCQkJcmVwb3NpdG9yeS5nZXREb3dubG9hZEFjdGlvbihvaWQpKTsKKwkJCX0gZWxzZSB7CisJCQkJaW5mby5lcnJvciA9IG5ldyBSZXNwb25zZS5FcnJvcigpOworCQkJCWluZm8uZXJyb3IuY29kZSA9IFNDX05PVF9GT1VORDsKKwkJCQlpbmZvLmVycm9yLm1lc3NhZ2UgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCUxmc1NlcnZlclRleHQuZ2V0KCkub2JqZWN0Tm90Rm91bmQsCisJCQkJCQlvaWQuZ2V0TmFtZSgpKTsKKwkJCX0KKwkJfQorCX0KKworCWZpbmFsIExhcmdlRmlsZVJlcG9zaXRvcnkgcmVwb3NpdG9yeTsKKworCWZpbmFsIExpc3Q8TGZzT2JqZWN0PiBvYmplY3RzOworCisJVHJhbnNmZXJIYW5kbGVyKExhcmdlRmlsZVJlcG9zaXRvcnkgcmVwb3NpdG9yeSwKKwkJCUxpc3Q8TGZzT2JqZWN0PiBvYmplY3RzKSB7CisJCXRoaXMucmVwb3NpdG9yeSA9IHJlcG9zaXRvcnk7CisJCXRoaXMub2JqZWN0cyA9IG9iamVjdHM7CisJfQorCisJYWJzdHJhY3QgUmVzcG9uc2UuQm9keSBwcm9jZXNzKCkgdGhyb3dzIElPRXhjZXB0aW9uOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0F0b21pY09iamVjdE91dHB1dFN0cmVhbS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvQXRvbWljT2JqZWN0T3V0cHV0U3RyZWFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNjN2MxZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0F0b21pY09iamVjdE91dHB1dFN0cmVhbS5qYXZhCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5zZWN1cml0eS5EaWdlc3RPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZS5Mb2NrRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnMuQ29ycnVwdExvbmdPYmplY3RFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Mb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmludGVybmFsLkxmc1NlcnZlclRleHQ7CisKKy8qKgorICogT3V0cHV0IHN0cmVhbSB3cml0aW5nIGNvbnRlbnQgdG8gYSB7QGxpbmsgTG9ja0ZpbGV9IHdoaWNoIGlzIGNvbW1pdHRlZCBvbgorICogY2xvc2UoKS4gVGhlIHN0cmVhbSBjaGVja3MgaWYgdGhlIGhhc2ggb2YgdGhlIHN0cmVhbSBjb250ZW50IG1hdGNoZXMgdGhlCisgKiBpZC4KKyAqLworY2xhc3MgQXRvbWljT2JqZWN0T3V0cHV0U3RyZWFtIGV4dGVuZHMgT3V0cHV0U3RyZWFtIHsKKworCXByaXZhdGUgTG9ja0ZpbGUgbG9ja2VkOworCisJcHJpdmF0ZSBEaWdlc3RPdXRwdXRTdHJlYW0gb3V0OworCisJcHJpdmF0ZSBib29sZWFuIGFib3J0ZWQ7CisKKwlwcml2YXRlIEFueUxvbmdPYmplY3RJZCBpZDsKKworCUF0b21pY09iamVjdE91dHB1dFN0cmVhbShQYXRoIHBhdGgsIEFueUxvbmdPYmplY3RJZCBpZCkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWxvY2tlZCA9IG5ldyBMb2NrRmlsZShwYXRoLnRvRmlsZSgpKTsKKwkJbG9ja2VkLmxvY2soKTsKKwkJdGhpcy5pZCA9IGlkOworCQlvdXQgPSBuZXcgRGlnZXN0T3V0cHV0U3RyZWFtKGxvY2tlZC5nZXRPdXRwdXRTdHJlYW0oKSwKKwkJCQlDb25zdGFudHMubmV3TWVzc2FnZURpZ2VzdCgpKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB3cml0ZShpbnQgYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJb3V0LndyaXRlKGIpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHdyaXRlKGJ5dGVbXSBiKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlvdXQud3JpdGUoYik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgd3JpdGUoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCW91dC53cml0ZShiLCBvZmYsIGxlbik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlvdXQuY2xvc2UoKTsKKwkJaWYgKCFhYm9ydGVkKSB7CisJCQl2ZXJpZnlIYXNoKCk7CisJCQlsb2NrZWQuY29tbWl0KCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgdmVyaWZ5SGFzaCgpIHsKKwkJQW55TG9uZ09iamVjdElkIGNvbnRlbnRIYXNoID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21SYXcob3V0LmdldE1lc3NhZ2VEaWdlc3QoKS5kaWdlc3QoKSk7CisJCWlmICghY29udGVudEhhc2guZXF1YWxzKGlkKSkgeworCQkJYWJvcnQoKTsKKwkJCXRocm93IG5ldyBDb3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbihpZCwgY29udGVudEhhc2gsCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KExmc1NlcnZlclRleHQuZ2V0KCkuY29ycnVwdExvbmdPYmplY3QsCisJCQkJCQkJY29udGVudEhhc2gsIGlkKSk7CisJCX0KKwl9CisKKwl2b2lkIGFib3J0KCkgeworCQlsb2NrZWQudW5sb2NrKCk7CisJCWFib3J0ZWQgPSB0cnVlOworCX0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9GaWxlTGZzUmVwb3NpdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvRmlsZUxmc1JlcG9zaXRvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmRhMjcxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvRmlsZUxmc1JlcG9zaXRvcnkuamF2YQpAQCAtMCwwICsxLDE4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQuSERSX0FVVEhPUklaQVRJT047CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkNoYW5uZWxzOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkZpbGVDaGFubmVsOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLlJlYWRhYmxlQnl0ZUNoYW5uZWw7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuV3JpdGFibGVCeXRlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkT3Blbk9wdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5BbnlMb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuTGFyZ2VGaWxlUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuUmVzcG9uc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLlJlc3BvbnNlLkFjdGlvbjsKKworLyoqCisgKiBSZXBvc2l0b3J5IHN0b3JpbmcgbGFyZ2Ugb2JqZWN0cyBpbiB0aGUgZmlsZSBzeXN0ZW0KKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBjbGFzcyBGaWxlTGZzUmVwb3NpdG9yeSBpbXBsZW1lbnRzIExhcmdlRmlsZVJlcG9zaXRvcnkgeworCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXJsOworCXByaXZhdGUgZmluYWwgUGF0aCBkaXI7CisJcHJpdmF0ZSBBdG9taWNPYmplY3RPdXRwdXRTdHJlYW0gb3V0OworCisJLyoqCisJICogQHBhcmFtIHVybAorCSAqICAgICAgICAgICAgZXh0ZXJuYWwgVVJMIG9mIHRoaXMgcmVwb3NpdG9yeQorCSAqIEBwYXJhbSBkaXIKKwkgKiAgICAgICAgICAgIHN0b3JhZ2UgZGlyZWN0b3J5CisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBGaWxlTGZzUmVwb3NpdG9yeShTdHJpbmcgdXJsLCBQYXRoIGRpcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdGhpcy51cmwgPSB1cmw7CisJCXRoaXMuZGlyID0gZGlyOworCQlGaWxlcy5jcmVhdGVEaXJlY3RvcmllcyhkaXIpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBSZXNwb25zZS5BY3Rpb24gZ2V0RG93bmxvYWRBY3Rpb24oQW55TG9uZ09iamVjdElkIGlkKSB7CisJCXJldHVybiBnZXRBY3Rpb24oaWQpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBBY3Rpb24gZ2V0VXBsb2FkQWN0aW9uKEFueUxvbmdPYmplY3RJZCBpZCwgbG9uZyBzaXplKSB7CisJCXJldHVybiBnZXRBY3Rpb24oaWQpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBATnVsbGFibGUgQWN0aW9uIGdldFZlcmlmeUFjdGlvbihBbnlMb25nT2JqZWN0SWQgaWQpIHsKKwkJcmV0dXJuIG51bGw7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGxvbmcgZ2V0U2l6ZShBbnlMb25nT2JqZWN0SWQgaWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVBhdGggcCA9IGdldFBhdGgoaWQpOworCQlpZiAoRmlsZXMuZXhpc3RzKHApKSB7CisJCQlyZXR1cm4gRmlsZXMuc2l6ZShwKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qKgorCSAqIEdldCB0aGUgc3RvcmFnZSBkaXJlY3RvcnkKKwkgKgorCSAqIEByZXR1cm4gdGhlIHBhdGggb2YgdGhlIHN0b3JhZ2UgZGlyZWN0b3J5CisJICovCisJcHVibGljIFBhdGggZ2V0RGlyKCkgeworCQlyZXR1cm4gZGlyOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgcGF0aCB3aGVyZSB0aGUgZ2l2ZW4gb2JqZWN0IGlzIHN0b3JlZAorCSAqCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICBpZCBvZiBhIGxhcmdlIG9iamVjdAorCSAqIEByZXR1cm4gcGF0aCB0aGUgb2JqZWN0J3Mgc3RvcmFnZSBwYXRoCisJICovCisJcHJvdGVjdGVkIFBhdGggZ2V0UGF0aChBbnlMb25nT2JqZWN0SWQgaWQpIHsKKwkJU3RyaW5nQnVpbGRlciBzID0gbmV3IFN0cmluZ0J1aWxkZXIoCisJCQkJQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEggKyA2KTsKKwkJcy5hcHBlbmQodG9IZXhDaGFyQXJyYXkoaWQuZ2V0Rmlyc3RCeXRlKCkpKS5hcHBlbmQoJy8nKTsKKwkJcy5hcHBlbmQodG9IZXhDaGFyQXJyYXkoaWQuZ2V0U2Vjb25kQnl0ZSgpKSkuYXBwZW5kKCcvJyk7CisJCXMuYXBwZW5kKGlkLm5hbWUoKSk7CisJCXJldHVybiBkaXIucmVzb2x2ZShzLnRvU3RyaW5nKCkpOworCX0KKworCXByaXZhdGUgUmVzcG9uc2UuQWN0aW9uIGdldEFjdGlvbihBbnlMb25nT2JqZWN0SWQgaWQpIHsKKwkJUmVzcG9uc2UuQWN0aW9uIGEgPSBuZXcgUmVzcG9uc2UuQWN0aW9uKCk7CisJCWEuaHJlZiA9IHVybCArIGlkLmdldE5hbWUoKTsKKwkJYS5oZWFkZXIgPSBDb2xsZWN0aW9ucy5zaW5nbGV0b25NYXAoSERSX0FVVEhPUklaQVRJT04sICJub3Q6cmVxdWlyZWQiKTsgLy8kTk9OLU5MUy0xJAorCQlyZXR1cm4gYTsKKwl9CisKKwlSZWFkYWJsZUJ5dGVDaGFubmVsIGdldFJlYWRDaGFubmVsKEFueUxvbmdPYmplY3RJZCBpZCkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJldHVybiBGaWxlQ2hhbm5lbC5vcGVuKGdldFBhdGgoaWQpLCBTdGFuZGFyZE9wZW5PcHRpb24uUkVBRCk7CisJfQorCisJV3JpdGFibGVCeXRlQ2hhbm5lbCBnZXRXcml0ZUNoYW5uZWwoQW55TG9uZ09iamVjdElkIGlkKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJUGF0aCBwYXRoID0gZ2V0UGF0aChpZCk7CisJCUZpbGVzLmNyZWF0ZURpcmVjdG9yaWVzKHBhdGguZ2V0UGFyZW50KCkpOworCQlvdXQgPSBuZXcgQXRvbWljT2JqZWN0T3V0cHV0U3RyZWFtKHBhdGgsIGlkKTsKKwkJcmV0dXJuIENoYW5uZWxzLm5ld0NoYW5uZWwob3V0KTsKKwl9CisKKwkvKioKKwkgKiBBYm9ydCB0aGUgb3V0cHV0IHN0cmVhbQorCSAqLworCXZvaWQgYWJvcnRXcml0ZSgpIHsKKwkJaWYgKG91dCAhPSBudWxsKSB7CisJCQlvdXQuYWJvcnQoKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIGNoYXJbXSB0b0hleENoYXJBcnJheShpbnQgYikgeworCQlmaW5hbCBjaGFyW10gZHN0ID0gbmV3IGNoYXJbMl07CisJCWZvcm1hdEhleENoYXIoZHN0LCAwLCBiKTsKKwkJcmV0dXJuIGRzdDsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4Y2hhciA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLAorCQkJJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJyB9OworCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBmb3JtYXRIZXhDaGFyKGZpbmFsIGNoYXJbXSBkc3QsIGZpbmFsIGludCBwLCBpbnQgYikgeworCQlpbnQgbyA9IHAgKyAxOworCQl3aGlsZSAobyA+PSBwICYmIGIgIT0gMCkgeworCQkJZHN0W28tLV0gPSBoZXhjaGFyW2IgJiAweGZdOworCQkJYiA+Pj49IDQ7CisJCX0KKwkJd2hpbGUgKG8gPj0gcCkKKwkJCWRzdFtvLS1dID0gJzAnOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL0ZpbGVMZnNTZXJ2bGV0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9GaWxlTGZzU2VydmxldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NjRhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9GaWxlTGZzU2VydmxldC5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuQXN5bmNDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LmFubm90YXRpb24uV2ViU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKworaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5IdHRwU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5JbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5BbnlMb25nT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuTG9uZ09iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5pbnRlcm5hbC5MZnNTZXJ2ZXJUZXh0OworCisvKioKKyAqIFNlcnZsZXQgc3VwcG9ydGluZyB1cGxvYWQgYW5kIGRvd25sb2FkIG9mIGxhcmdlIG9iamVjdHMgYXMgZGVmaW5lZCBieSB0aGUKKyAqIEdpdEh1YiBMYXJnZSBGaWxlIFN0b3JhZ2UgZXh0ZW5zaW9uIEFQSSBleHRlbmRpbmcgZ2l0IHRvIGFsbG93IHNlcGFyYXRlCisgKiBzdG9yYWdlIG9mIGxhcmdlIGZpbGVzCisgKiAoaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXQtbGZzL3RyZWUvbWFzdGVyL2RvY3MvYXBpKS4KKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK0BXZWJTZXJ2bGV0KGFzeW5jU3VwcG9ydGVkID0gdHJ1ZSkKK3B1YmxpYyBjbGFzcyBGaWxlTGZzU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJcHJpdmF0ZSBmaW5hbCBGaWxlTGZzUmVwb3NpdG9yeSByZXBvc2l0b3J5OworCisJcHJpdmF0ZSBmaW5hbCBsb25nIHRpbWVvdXQ7CisKKwkvKioKKwkgKiBAcGFyYW0gcmVwb3NpdG9yeQorCSAqICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgc3RvcmluZyB0aGUgbGFyZ2Ugb2JqZWN0cworCSAqIEBwYXJhbSB0aW1lb3V0CisJICogICAgICAgICAgICB0aW1lb3V0IGZvciBvYmplY3QgdXBsb2FkIC8gZG93bmxvYWQgaW4gbWlsbGlzZWNvbmRzCisJICovCisJcHVibGljIEZpbGVMZnNTZXJ2bGV0KEZpbGVMZnNSZXBvc2l0b3J5IHJlcG9zaXRvcnksIGxvbmcgdGltZW91dCkgeworCQl0aGlzLnJlcG9zaXRvcnkgPSByZXBvc2l0b3J5OworCQl0aGlzLnRpbWVvdXQgPSB0aW1lb3V0OworCX0KKworCS8qKgorCSAqIEhhbmRsZXMgb2JqZWN0IGRvd25sb2FkcworCSAqCisJICogQHBhcmFtIHJlcQorCSAqICAgICAgICAgICAgc2VydmxldCByZXF1ZXN0CisJICogQHBhcmFtIHJzcAorCSAqICAgICAgICAgICAgc2VydmxldCByZXNwb25zZQorCSAqIEB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIGEgc2VydmxldC1zcGVjaWZpYyBlcnJvciBvY2N1cnMKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgYW4gSS9PIGVycm9yIG9jY3VycworCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJzcCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJQW55TG9uZ09iamVjdElkIG9iaiA9IGdldE9iamVjdFRvVHJhbnNmZXIocmVxLCByc3ApOworCQlpZiAob2JqICE9IG51bGwpIHsKKwkJCWlmIChyZXBvc2l0b3J5LmdldFNpemUob2JqKSA9PSAtMSkgeworCQkJCXNlbmRFcnJvcihyc3AsIEh0dHBTdGF0dXMuU0NfTk9UX0ZPVU5ELCBNZXNzYWdlRm9ybWF0CisJCQkJCQkuZm9ybWF0KExmc1NlcnZlclRleHQuZ2V0KCkub2JqZWN0Tm90Rm91bmQsIG9iaikpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCUFzeW5jQ29udGV4dCBjb250ZXh0ID0gcmVxLnN0YXJ0QXN5bmMoKTsKKwkJCWNvbnRleHQuc2V0VGltZW91dCh0aW1lb3V0KTsKKwkJCXJzcC5nZXRPdXRwdXRTdHJlYW0oKQorCQkJCQkuc2V0V3JpdGVMaXN0ZW5lcihuZXcgT2JqZWN0RG93bmxvYWRMaXN0ZW5lcihyZXBvc2l0b3J5LAorCQkJCQkJCWNvbnRleHQsIHJzcCwgb2JqKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIEFueUxvbmdPYmplY3RJZCBnZXRPYmplY3RUb1RyYW5zZmVyKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJzcCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGluZm8gPSByZXEuZ2V0UGF0aEluZm8oKTsKKwkJaWYgKGluZm8ubGVuZ3RoKCkgIT0gMSArIENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKSB7CisJCQlzZW5kRXJyb3IocnNwLCBIdHRwU3RhdHVzLlNDX0JBRF9SRVFVRVNULCBNZXNzYWdlRm9ybWF0CisJCQkJCS5mb3JtYXQoTGZzU2VydmVyVGV4dC5nZXQoKS5pbnZhbGlkUGF0aEluZm8sIGluZm8pKTsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXRyeSB7CisJCQlyZXR1cm4gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoaW5mby5zdWJzdHJpbmcoMSwgNjUpKTsKKwkJfSBjYXRjaCAoSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbiBlKSB7CisJCQlzZW5kRXJyb3IocnNwLCBIdHRwU3RhdHVzLlNDX0JBRF9SRVFVRVNULCBlLmdldE1lc3NhZ2UoKSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCX0KKworCS8qKgorCSAqIEhhbmRsZSBvYmplY3QgdXBsb2FkcworCSAqCisJICogQHBhcmFtIHJlcQorCSAqICAgICAgICAgICAgc2VydmxldCByZXF1ZXN0CisJICogQHBhcmFtIHJzcAorCSAqICAgICAgICAgICAgc2VydmxldCByZXNwb25zZQorCSAqIEB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIGEgc2VydmxldC1zcGVjaWZpYyBlcnJvciBvY2N1cnMKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgYW4gSS9PIGVycm9yIG9jY3VycworCSAqLworCUBPdmVycmlkZQorCXByb3RlY3RlZCB2b2lkIGRvUHV0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJzcCkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gZ2V0T2JqZWN0VG9UcmFuc2ZlcihyZXEsIHJzcCk7CisJCWlmIChpZCAhPSBudWxsKSB7CisJCQlBc3luY0NvbnRleHQgY29udGV4dCA9IHJlcS5zdGFydEFzeW5jKCk7CisJCQljb250ZXh0LnNldFRpbWVvdXQodGltZW91dCk7CisJCQlyZXEuZ2V0SW5wdXRTdHJlYW0oKS5zZXRSZWFkTGlzdGVuZXIobmV3IE9iamVjdFVwbG9hZExpc3RlbmVyKAorCQkJCQlyZXBvc2l0b3J5LCBjb250ZXh0LCByZXEsIHJzcCwgaWQpKTsKKwkJfQorCX0KKworCXN0YXRpYyB2b2lkIHNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlIHJzcCwgaW50IHN0YXR1cywgU3RyaW5nIG1lc3NhZ2UpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlyc3Auc2V0U3RhdHVzKHN0YXR1cyk7CisJCS8vIFRPRE8gcmV0dXJuIG1lc3NhZ2UgaW4gcmVzcG9uc2UgYm9keSBpbiBqc29uIGZvcm1hdCBhcyBzcGVjaWZpZWQgaW4KKwkJLy8gaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXQtbGZzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpL2h0dHAtdjEtYmF0Y2gubWQKKwkJcnNwLmZsdXNoQnVmZmVyKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvT2JqZWN0RG93bmxvYWRMaXN0ZW5lci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvT2JqZWN0RG93bmxvYWRMaXN0ZW5lci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmZGVhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9PYmplY3REb3dubG9hZExpc3RlbmVyLmphdmEKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5rQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkNoYW5uZWxzOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLlJlYWRhYmxlQnl0ZUNoYW5uZWw7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuV3JpdGFibGVCeXRlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CisKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LkFzeW5jQ29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YXguc2VydmxldC5Xcml0ZUxpc3RlbmVyOworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworCitpbXBvcnQgb3JnLmFwYWNoZS5odHRwLkh0dHBTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydDsKKworLyoqCisgKiBIYW5kbGUgYXN5bmNocm9ub3VzIGxhcmdlIG9iamVjdCBkb3dubG9hZAorICovCitjbGFzcyBPYmplY3REb3dubG9hZExpc3RlbmVyIGltcGxlbWVudHMgV3JpdGVMaXN0ZW5lciB7CisKKwlwcml2YXRlIHN0YXRpYyBMb2dnZXIgTE9HID0gTG9nZ2VyCisJCQkuZ2V0TG9nZ2VyKE9iamVjdERvd25sb2FkTGlzdGVuZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKworCXByaXZhdGUgZmluYWwgQXN5bmNDb250ZXh0IGNvbnRleHQ7CisKKwlwcml2YXRlIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2U7CisKKwlwcml2YXRlIGZpbmFsIFNlcnZsZXRPdXRwdXRTdHJlYW0gb3V0OworCisJcHJpdmF0ZSBmaW5hbCBSZWFkYWJsZUJ5dGVDaGFubmVsIGluOworCisJcHJpdmF0ZSBmaW5hbCBXcml0YWJsZUJ5dGVDaGFubmVsIG91dENoYW5uZWw7CisKKwlwcml2YXRlIGZpbmFsIEJ5dGVCdWZmZXIgYnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCg4MTkyKTsKKworCS8qKgorCSAqIEBwYXJhbSByZXBvc2l0b3J5CisJICogICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSBzdG9yaW5nIGxhcmdlIG9iamVjdHMKKwkgKiBAcGFyYW0gY29udGV4dAorCSAqICAgICAgICAgICAgdGhlIHNlcnZsZXQgYXN5bmNocm9ub3VzIGNvbnRleHQKKwkgKiBAcGFyYW0gcmVzcG9uc2UKKwkgKiAgICAgICAgICAgIHRoZSBzZXJ2bGV0IHJlc3BvbnNlCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICBpZCBvZiB0aGUgb2JqZWN0IHRvIGJlIGRvd25sb2FkZWQKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIE9iamVjdERvd25sb2FkTGlzdGVuZXIoRmlsZUxmc1JlcG9zaXRvcnkgcmVwb3NpdG9yeSwKKwkJCUFzeW5jQ29udGV4dCBjb250ZXh0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlLAorCQkJQW55TG9uZ09iamVjdElkIGlkKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OworCQl0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7CisJCXRoaXMuaW4gPSByZXBvc2l0b3J5LmdldFJlYWRDaGFubmVsKGlkKTsKKwkJdGhpcy5vdXQgPSByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKTsKKwkJdGhpcy5vdXRDaGFubmVsID0gQ2hhbm5lbHMubmV3Q2hhbm5lbChvdXQpOworCisJCXJlc3BvbnNlLmFkZEhlYWRlcihIdHRwU3VwcG9ydC5IRFJfQ09OVEVOVF9MRU5HVEgsCisJCQkJU3RyaW5nLnZhbHVlT2YocmVwb3NpdG9yeS5nZXRTaXplKGlkKSkpOworCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZShDb25zdGFudHMuSERSX0FQUExJQ0FUSU9OX09DVEVUX1NUUkVBTSk7CisJfQorCisJLyoqCisJICogV3JpdGUgZmlsZSBjb250ZW50CisJICoKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgb25Xcml0ZVBvc3NpYmxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJd2hpbGUgKG91dC5pc1JlYWR5KCkpIHsKKwkJCWlmIChpbi5yZWFkKGJ1ZmZlcikgIT0gLTEpIHsKKwkJCQlidWZmZXIuZmxpcCgpOworCQkJCW91dENoYW5uZWwud3JpdGUoYnVmZmVyKTsKKwkJCQlidWZmZXIuY29tcGFjdCgpOworCQkJfSBlbHNlIHsKKwkJCQlpbi5jbG9zZSgpOworCQkJCWJ1ZmZlci5mbGlwKCk7CisJCQkJd2hpbGUgKG91dC5pc1JlYWR5KCkpIHsKKwkJCQkJaWYgKGJ1ZmZlci5oYXNSZW1haW5pbmcoKSkgeworCQkJCQkJb3V0Q2hhbm5lbC53cml0ZShidWZmZXIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJY29udGV4dC5jb21wbGV0ZSgpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoqCisJICogSGFuZGxlIGVycm9ycworCSAqCisJICogQHBhcmFtIGUKKwkgKiAgICAgICAgICAgIHRoZSBjYXVzZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG9uRXJyb3IoVGhyb3dhYmxlIGUpIHsKKwkJdHJ5IHsKKwkJCUZpbGVMZnNTZXJ2bGV0LnNlbmRFcnJvcihyZXNwb25zZSwKKwkJCQkJSHR0cFN0YXR1cy5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCWNvbnRleHQuY29tcGxldGUoKTsKKwkJCWluLmNsb3NlKCk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CisJCQlMT0cubG9nKExldmVsLlNFVkVSRSwgZXguZ2V0TWVzc2FnZSgpLCBleCk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9PYmplY3RVcGxvYWRMaXN0ZW5lci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvT2JqZWN0VXBsb2FkTGlzdGVuZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTk3MGFkCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvT2JqZWN0VXBsb2FkTGlzdGVuZXIuamF2YQpAQCAtMCwwICsxLDE3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obmtAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuQ2hhbm5lbHM7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuUmVhZGFibGVCeXRlQ2hhbm5lbDsKK2ltcG9ydCBqYXZhLm5pby5jaGFubmVscy5Xcml0YWJsZUJ5dGVDaGFubmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuQXN5bmNDb250ZXh0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuUmVhZExpc3RlbmVyOworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldElucHV0U3RyZWFtOworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmh0dHAuSHR0cFN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnMuQ29ycnVwdExvbmdPYmplY3RFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkFueUxvbmdPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworCisvKioKKyAqIEhhbmRsZSBhc3luY2hyb25vdXMgb2JqZWN0IHVwbG9hZAorICovCitjbGFzcyBPYmplY3RVcGxvYWRMaXN0ZW5lciBpbXBsZW1lbnRzIFJlYWRMaXN0ZW5lciB7CisKKwlwcml2YXRlIHN0YXRpYyBMb2dnZXIgTE9HID0gTG9nZ2VyCisJCQkuZ2V0TG9nZ2VyKE9iamVjdFVwbG9hZExpc3RlbmVyLmNsYXNzLmdldE5hbWUoKSk7CisKKwlwcml2YXRlIGZpbmFsIEFzeW5jQ29udGV4dCBjb250ZXh0OworCisJcHJpdmF0ZSBmaW5hbCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlOworCisJcHJpdmF0ZSBGaWxlTGZzUmVwb3NpdG9yeSByZXBvc2l0b3J5OworCisJcHJpdmF0ZSBmaW5hbCBTZXJ2bGV0SW5wdXRTdHJlYW0gaW47CisKKwlwcml2YXRlIGZpbmFsIFJlYWRhYmxlQnl0ZUNoYW5uZWwgaW5DaGFubmVsOworCisJcHJpdmF0ZSBXcml0YWJsZUJ5dGVDaGFubmVsIG91dDsKKworCXByaXZhdGUgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KDgxOTIpOworCisJLyoqCisJICogQHBhcmFtIHJlcG9zaXRvcnkKKwkgKiAgICAgICAgICAgIHRoZSByZXBvc2l0b3J5IHN0b3JpbmcgbGFyZ2Ugb2JqZWN0cworCSAqIEBwYXJhbSBjb250ZXh0CisJICogQHBhcmFtIHJlcXVlc3QKKwkgKiBAcGFyYW0gcmVzcG9uc2UKKwkgKiBAcGFyYW0gaWQKKwkgKiBAdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgT2JqZWN0VXBsb2FkTGlzdGVuZXIoRmlsZUxmc1JlcG9zaXRvcnkgcmVwb3NpdG9yeSwKKwkJCUFzeW5jQ29udGV4dCBjb250ZXh0LCBIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwKKwkJCUh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UsIEFueUxvbmdPYmplY3RJZCBpZCkKKwkJCQkJdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQl0aGlzLnJlcG9zaXRvcnkgPSByZXBvc2l0b3J5OworCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OworCQl0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7CisJCXRoaXMuaW4gPSByZXF1ZXN0LmdldElucHV0U3RyZWFtKCk7CisJCXRoaXMuaW5DaGFubmVsID0gQ2hhbm5lbHMubmV3Q2hhbm5lbChpbik7CisJCXRoaXMub3V0ID0gcmVwb3NpdG9yeS5nZXRXcml0ZUNoYW5uZWwoaWQpOworCQlyZXNwb25zZS5zZXRDb250ZW50VHlwZShDb25zdGFudHMuQ09OVEVOVF9UWVBFX0dJVF9MRlNfSlNPTik7CisJfQorCisJLyoqCisJICogV3JpdGVzIGFsbCB0aGUgcmVjZWl2ZWQgZGF0YSB0byB0aGUgb3V0cHV0IGNoYW5uZWwKKwkgKgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBvbkRhdGFBdmFpbGFibGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl3aGlsZSAoaW4uaXNSZWFkeSgpKSB7CisJCQlpZiAoaW5DaGFubmVsLnJlYWQoYnVmZmVyKSA+IDApIHsKKwkJCQlidWZmZXIuZmxpcCgpOworCQkJCW91dC53cml0ZShidWZmZXIpOworCQkJCWJ1ZmZlci5jb21wYWN0KCk7CisJCQl9IGVsc2UgeworCQkJCWJ1ZmZlci5mbGlwKCk7CisJCQkJd2hpbGUgKGJ1ZmZlci5oYXNSZW1haW5pbmcoKSkgeworCQkJCQlvdXQud3JpdGUoYnVmZmVyKTsKKwkJCQl9CisJCQkJY2xvc2UoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgb25BbGxEYXRhUmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWNsb3NlKCk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgeworCQkJaW5DaGFubmVsLmNsb3NlKCk7CisJCQlvdXQuY2xvc2UoKTsKKwkJCS8vIFRPRE8gY2hlY2sgaWYgc3RhdHVzIDIwMCBpcyBvayBmb3IgUFVUIHJlcXVlc3QsIEhUVFAgZm9yZXNlZXMgMjA0CisJCQkvLyBmb3Igc3VjY2Vzc2Z1bCBQVVQgd2l0aG91dCByZXNwb25zZSBib2R5CisJCQlyZXNwb25zZS5zZXRTdGF0dXMoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19PSyk7CisJCX0gZmluYWxseSB7CisJCQljb250ZXh0LmNvbXBsZXRlKCk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZQorCSAqICAgICAgICAgICAgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgcHJvYmxlbQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIG9uRXJyb3IoVGhyb3dhYmxlIGUpIHsKKwkJdHJ5IHsKKwkJCXJlcG9zaXRvcnkuYWJvcnRXcml0ZSgpOworCQkJaW5DaGFubmVsLmNsb3NlKCk7CisJCQlvdXQuY2xvc2UoKTsKKwkJCWludCBzdGF0dXM7CisJCQlpZiAoZSBpbnN0YW5jZW9mIENvcnJ1cHRMb25nT2JqZWN0RXhjZXB0aW9uKSB7CisJCQkJc3RhdHVzID0gSHR0cFN0YXR1cy5TQ19CQURfUkVRVUVTVDsKKwkJCQlMT0cubG9nKExldmVsLldBUk5JTkcsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJCX0gZWxzZSB7CisJCQkJc3RhdHVzID0gSHR0cFN0YXR1cy5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisJCQkJTE9HLmxvZyhMZXZlbC5TRVZFUkUsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKKwkJCX0KKwkJCUZpbGVMZnNTZXJ2bGV0LnNlbmRFcnJvcihyZXNwb25zZSwgc3RhdHVzLCBlLmdldE1lc3NhZ2UoKSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CisJCQlMT0cubG9nKExldmVsLlNFVkVSRSwgZXguZ2V0TWVzc2FnZSgpLCBleCk7CisJCX0KKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvaW50ZXJuYWwvTGZzU2VydmVyVGV4dC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvaW50ZXJuYWwvTGZzU2VydmVyVGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMWM0YzYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9pbnRlcm5hbC9MZnNTZXJ2ZXJUZXh0LmphdmEKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5pbnRlcm5hbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubmxzLk5MUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm5scy5UcmFuc2xhdGlvbkJ1bmRsZTsKKworLyoqCisgKiBUcmFuc2xhdGlvbiBidW5kbGUgZm9yIEpHaXQgTEZTIHNlcnZlcgorICovCitwdWJsaWMgY2xhc3MgTGZzU2VydmVyVGV4dCBleHRlbmRzIFRyYW5zbGF0aW9uQnVuZGxlIHsKKworCS8qKgorCSAqIEByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhpcyB0cmFuc2xhdGlvbiBidW5kbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExmc1NlcnZlclRleHQgZ2V0KCkgeworCQlyZXR1cm4gTkxTLmdldEJ1bmRsZUZvcihMZnNTZXJ2ZXJUZXh0LmNsYXNzKTsKKwl9CisKKwkvLyBAZm9ybWF0dGVyOm9mZgorCS8qKiovIHB1YmxpYyBTdHJpbmcgY29ycnVwdExvbmdPYmplY3Q7CisJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkUGF0aEluZm87CisJLyoqKi8gcHVibGljIFN0cmluZyBvYmplY3ROb3RGb3VuZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHVuc3VwcG9ydGVkT3BlcmF0aW9uOworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uY2xhc3NwYXRoIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYzc4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5jbGFzc3BhdGgKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjciLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJ0c3QiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uZ2l0aWdub3JlIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkYzAwOTEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACisvdGFyZ2V0CisvYmluCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5wcm9qZWN0IGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8ucHJvamVjdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWRkZGIwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8ucHJvamVjdApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0PC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MjRiODAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorZW5jb2RpbmcvPHByb2plY3Q+PVVURi04DQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMGFkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorbGluZS5zZXBhcmF0b3I9XG4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGNjMGQzYQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCkBAIC0wLDAgKzEsMzk4IEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5pbmhlcml0TnVsbEFubm90YXRpb25zPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm1pc3NpbmdOb25OdWxsQnlEZWZhdWx0QW5ub3RhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubm9ubnVsbD1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5Ob25OdWxsCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGxieWRlZmF1bHQ9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTm9uTnVsbEJ5RGVmYXVsdAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYWJsZT1vcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbi5OdWxsYWJsZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5udWxsYW5hbHlzaXM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5tZXRob2RQYXJhbWV0ZXJzPWRvIG5vdCBnZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS43CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uY29tcGFyaW5nSWRlbnRpY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlYWRDb2RlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5leHBsaWNpdGx5Q2xvc2VkQXV0b0Nsb3NlYWJsZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmFsbHRocm91Z2hDYXNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmF0YWxPcHRpb25hbEVycm9yPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNsdWRlTnVsbEluZm9Gcm9tQXNzZXJ0cz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlZmF1bHRDYXNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdFbnVtQ2FzZURlc3BpdGVEZWZhdWx0PWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdIYXNoQ29kZU1ldGhvZD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wcm90ZWN0ZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NNZXRob2RUeXBlUGFyYW1ldGVycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uRm9ySW50ZXJmYWNlTWV0aG9kSW1wbGVtZW50YXRpb249ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbm51bGxQYXJhbWV0ZXJBbm5vdGF0aW9uRHJvcHBlZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxBbm5vdGF0aW9uSW5mZXJlbmNlQ29uZmxpY3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFJlZmVyZW5jZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsU3BlY1Zpb2xhdGlvbj1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsVW5jaGVja2VkQ29udmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBhcmFtZXRlckFzc2lnbm1lbnQ9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvdGVudGlhbE51bGxSZWZlcmVuY2U9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxseVVuY2xvc2VkQ2xvc2VhYmxlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yYXdUeXBlUmVmZXJlbmNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQW5ub3RhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudE51bGxDaGVjaz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFNwZWNpZmljYXRpb25PZlR5cGVBcmd1bWVudHM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlZHVuZGFudFN1cGVyaW50ZXJmYWNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlUG90ZW50aWFsbHlTdGF0aWM9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnJlcG9ydE1ldGhvZENhbkJlU3RhdGljPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NPcHRpb25hbEVycm9ycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGFjdGljTnVsbEFuYWx5c2lzRm9yRmllbGRzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuYXZvaWRhYmxlR2VuZXJpY1R5cGVQcm9ibGVtcz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNsb3NlZENsb3NlYWJsZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZE9iamVjdEFsbG9jYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkVHlwZVBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbl90eXBlX21lbWJlcnNfb25fY29sdW1ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2Fubm90YXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2VudW1fY29uc3RhbnQ9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9leHBsaWNpdF9jb25zdHJ1Y3Rvcl9jYWxsPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9xdWFsaWZpZWRfYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2JpbmFyeV9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb21wYWN0X2lmPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb25kaXRpb25hbF9leHByZXNzaW9uPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9lbnVtX2NvbnN0YW50cz0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9leHByZXNzaW9uc19pbl9hcnJheV9pbml0aWFsaXplcj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Jlc291cmNlc19pbl90cnk9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3VuaW9uX3R5cGVfaW5fbXVsdGljYXRjaD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2s9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2NvbnN0YW50PWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lcz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9saW5lX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfYmxvY2tfYm91bmRhcmllcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfamF2YWRvY19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LnByZXNlcnZlX3doaXRlX3NwYWNlX2JldHdlZW5fY29kZV9hbmRfbGluZV9jb21tZW50cz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5kaXNhYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9mZgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmVuYWJsaW5nX3RhZz1AZm9ybWF0dGVyXDpvbgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfbGluZV9jb21tZW50X3N0YXJ0aW5nX29uX2ZpcnN0X2NvbHVtbj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2ZpZWxkPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2xvY2FsX3ZhcmlhYmxlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21lbWJlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9tZXRob2Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFja2FnZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fdHlwZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfbGFiZWw9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZWxzZV9pbl9pZl9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fubm90YXRpb25fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fdHJ5PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3RyeT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fdHJ5X3Jlc291cmNlcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX2xpbmVzX2luX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX3dyYXBwZWRfbGluZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfaW1wbGVfaWZfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX3RoZW5fc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmxpbmVTcGxpdD04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9ibG9ja19jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5uZXZlcl9pbmRlbnRfbGluZV9jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfYmxhbmtfbGluZXNfYXRfYmVnaW5uaW5nX29mX21ldGhvZF9ib2R5PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfZW1wdHlfbGluZXNfdG9fcHJlc2VydmU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnB1dF9lbXB0eV9zdGF0ZW1lbnRfb25fbmV3X2xpbmU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj10YWIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV9vbl9vZmZfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX29yX29wZXJhdG9yX211bHRpY2F0Y2g9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfb3V0ZXJfZXhwcmVzc2lvbnNfd2hlbl9uZXN0ZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzZjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw2MSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VkaXRvcl9zYXZlX3BhcnRpY2lwYW50X29yZy5lY2xpcHNlLmpkdC51aS5wb3N0c2F2ZWxpc3RlbmVyLmNsZWFudXA9dHJ1ZQorZm9ybWF0dGVyX3Byb2ZpbGU9X0pHaXQgRm9ybWF0Citmb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMgorb3JnLmVjbGlwc2UuamR0LnVpLmlnbm9yZWxvd2VyY2FzZW5hbWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC51aS5pbXBvcnRvcmRlcj1qYXZhO2phdmF4O29yZztjb207CitvcmcuZWNsaXBzZS5qZHQudWkub25kZW1hbmR0aHJlc2hvbGQ9OTkKK29yZy5lY2xpcHNlLmpkdC51aS5zdGF0aWNvbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz48dGVtcGxhdGVzLz4KK3NwX2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorc3BfY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19tZXRob2RzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnNfaW50ZXJmYWNlX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9ZmFsc2UKK3NwX2NsZWFudXAuY29ycmVjdF9pbmRlbnRhdGlvbj1mYWxzZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGVfY2hhbmdlc19vbmx5PXRydWUKK3NwX2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9ZmFsc2UKK3NwX2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitzcF9jbGVhbnVwLm1ha2VfdHlwZV9hYnN0cmFjdF9pZl9taXNzaW5nX21ldGhvZD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitzcF9jbGVhbnVwLm9uX3NhdmVfdXNlX2FkZGl0aW9uYWxfYWN0aW9ucz10cnVlCitzcF9jbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitzcF9jbGVhbnVwLnVzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitzcF9jbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGFza3MudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlYzRkOQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Byb2plY3QucmVwb3NpdG9yeS5raW5kPWJ1Z3ppbGxhCitwcm9qZWN0LnJlcG9zaXRvcnkudXJsPWh0dHBzXDovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U3YTBmMAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKQEAgLTAsMCArMSwyIEBACitjb21taXQuY29tbWVudC50ZW1wbGF0ZT0ke3Rhc2suZGVzY3JpcHRpb259IFxuXG5CdWdcOiAke3Rhc2sua2V5fQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ODU2ODcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCkBAIC0wLDAgKzEsOTMgQEAKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRF9XSVRIT1VUX0RFRkFVTFRfVkFMVUU9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BUElfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9SRUVYUE9SVEVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fQUJTVFJBQ1RfVE9fQUJTVFJBQ1Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DT05TVFJVQ1RPUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfU1VQRVJDTEFTUz1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFSQVJHU19UT19BUlJBWT1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9FTlVNX0NPTlNUQU5UPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0FEREVEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0ZJTkFMX1RPX05PTl9GSU5BTF9TVEFUSUNfQ09OU1RBTlQ9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1NUQVRJQ19UT19OT05fU1RBVElDPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQUxVRT1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9BUkdVTUVOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVkFMVUU9RXJyb3IKK0lMTEVHQUxfRVhURU5EPVdhcm5pbmcKK0lMTEVHQUxfSU1QTEVNRU5UPVdhcm5pbmcKK0lMTEVHQUxfSU5TVEFOVElBVEU9V2FybmluZworSUxMRUdBTF9PVkVSUklERT1XYXJuaW5nCitJTExFR0FMX1JFRkVSRU5DRT1XYXJuaW5nCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfU1VQRVJfSU5URVJGQUNFX1dJVEhfTUVUSE9EUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5WQUxJRF9KQVZBRE9DX1RBRz1JZ25vcmUKK0lOVkFMSURfUkVGRVJFTkNFX0lOX1NZU1RFTV9MSUJSQVJJRVM9RXJyb3IKK0xFQUtfRVhURU5EPVdhcm5pbmcKK0xFQUtfRklFTERfREVDTD1XYXJuaW5nCitMRUFLX0lNUExFTUVOVD1XYXJuaW5nCitMRUFLX01FVEhPRF9QQVJBTT1XYXJuaW5nCitMRUFLX01FVEhPRF9SRVRVUk5fVFlQRT1XYXJuaW5nCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9TVEFUSUNfVE9fU1RBVElDPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfQU5OT1RBVElPTl9ERUZBVUxUX1ZBTFVFPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9DTEFTU19CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0FEREVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX0NIQU5HRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVFlQRV9QQVJBTUVURVJfRUxFTUVOVF9UWVBFX1JFTU9WRURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0lOVEVSRkFDRV9CT1VORD1FcnJvcgorVU5VU0VEX1BST0JMRU1fRklMVEVSUz1XYXJuaW5nCithdXRvbWF0aWNhbGx5X3JlbW92ZWRfdW51c2VkX3Byb2JsZW1fZmlsdGVycz1mYWxzZQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb249RXJyb3IKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9tYWpvcl93aXRob3V0X2JyZWFraW5nX2NoYW5nZT1EaXNhYmxlZAoraW5jb21wYXRpYmxlX2FwaV9jb21wb25lbnRfdmVyc2lvbl9pbmNsdWRlX21pbm9yX3dpdGhvdXRfYXBpX2NoYW5nZT1EaXNhYmxlZAoraW52YWxpZF9zaW5jZV90YWdfdmVyc2lvbj1FcnJvcgorbWFsZm9ybWVkX3NpbmNlX3RhZz1FcnJvcgorbWlzc2luZ19zaW5jZV90YWc9RXJyb3IKK3JlcG9ydF9hcGlfYnJlYWthZ2Vfd2hlbl9tYWpvcl92ZXJzaW9uX2luY3JlbWVudGVkPURpc2FibGVkCityZXBvcnRfcmVzb2x1dGlvbl9lcnJvcnNfYXBpX2NvbXBvbmVudD1XYXJuaW5nCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyM2MzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuY29yZS5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCityZXNvbHZlLnJlcXVpcmVidW5kbGU9ZmFsc2UKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvQlVDSyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvQlVDSwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGZiOTZmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9CVUNLCkBAIC0wLDAgKzEsMzEgQEAKK1RFU1RTID0gZ2xvYihbJ3RzdC8qKi8qLmphdmEnXSkKKworZm9yIHQgaW4gVEVTVFM6CisgIG4gPSB0W2xlbigndHN0LycpOmxlbih0KS1sZW4oJy5qYXZhJyldLnJlcGxhY2UoJy8nLCAnLicpCisgIGphdmFfdGVzdCgKKyAgICBuYW1lID0gbiwKKyAgICBsYWJlbHMgPSBbJ2xmcyddLAorICAgIHNyY3MgPSBbdF0sCisgICAgZGVwcyA9IFsKKyAgICAgICc6aGVscGVycycsCisgICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Omp1bml0JywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQubGZzOmpnaXQtbGZzJywKKyAgICAgICcvL29yZy5lY2xpcHNlLmpnaXQ6amdpdCcsCisgICAgICAnLy9saWI6aGFtY3Jlc3QtY29yZScsCisgICAgICAnLy9saWI6aGFtY3Jlc3QtbGlicmFyeScsCisgICAgICAnLy9saWI6anVuaXQnLAorICAgIF0sCisgICAgc291cmNlX3VuZGVyX3Rlc3QgPSBbJy8vb3JnLmVjbGlwc2UuamdpdC5sZnM6amdpdC1sZnMnXSwKKyAgKQorCitqYXZhX2xpYnJhcnkoCisgIG5hbWUgPSAnaGVscGVycycsCisgIHNyY3MgPSBnbG9iKFsnc3JjLyoqLyouamF2YSddKSwKKyAgZGVwcyA9IFsKKyAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0OmpnaXQnLAorICAgICcvL29yZy5lY2xpcHNlLmpnaXQubGZzOmpnaXQtbGZzJywKKyAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Omp1bml0JywKKyAgICAnLy9saWI6anVuaXQnLAorICBdLAorICB2aXNpYmlsaXR5ID0gWydQVUJMSUMnXQorKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE0NTZmMQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyMCBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCitCdW5kbGUtTmFtZTogJXBsdWdpbl9uYW1lCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0CitCdW5kbGUtVmVyc2lvbjogNC4zLjAucXVhbGlmaWVyCitCdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJfbmFtZQorQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNworSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmhhbWNyZXN0LmNvcmU7dmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCisgb3JnLmp1bml0O3ZlcnNpb249Ils0LjAuMCw1LjAuMCkiLAorIG9yZy5qdW5pdC5ydW5uZXI7dmVyc2lvbj0iWzQuMC4wLDUuMC4wKSIsCisgb3JnLmp1bml0LnJ1bm5lcnM7dmVyc2lvbj0iWzQuMC4wLDUuMC4wKSIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iNC4zLjAiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDt2ZXJzaW9uPSI0LjMuMCI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QiCisKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvYnVpbGQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2FlMDkxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNSBAQAorc291cmNlLi4gPSB0c3QvLCBzcmMvCitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BsdWdpbi5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9wbHVnaW4ucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTAwNzgwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKK3BsdWdpbl9uYW1lPUpHaXQgTEZTIFRlc3RzCitwcm92aWRlcl9uYW1lPUVjbGlwc2UgSkdpdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNzJhODAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BvbS54bWwKQEAgLTAsMCArMSwxMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICBDb3B5cmlnaHQgKEMpIDIwMTUgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICAgYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKworICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgICBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgICBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICAgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICAgICB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICAgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICAgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tPgorCis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIgorICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+CisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICA8cGFyZW50PgorICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+NC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDwvcGFyZW50PgorCisgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Q8L2FydGlmYWN0SWQ+CisgIDxuYW1lPkpHaXQgLSBMYXJnZSBGaWxlIFN0b3JhZ2UgVGVzdHM8L25hbWU+CisKKyAgPGRlc2NyaXB0aW9uPgorICAgIFRlc3RzIGZvciB0aGUgTGFyZ2UgRmlsZSBFeHRlbnNpb24gKExGUykuCisgIDwvZGVzY3JpcHRpb24+CisKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdDwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmxmczwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisKKyAgPGJ1aWxkPgorICAgIDx0ZXN0U291cmNlRGlyZWN0b3J5PnRzdC88L3Rlc3RTb3VyY2VEaXJlY3Rvcnk+CisgICAgPHNvdXJjZURpcmVjdG9yeT5zcmMvPC9zb3VyY2VEaXJlY3Rvcnk+CisKKyAgICA8dGVzdFJlc291cmNlcz4KKyAgICAgIDx0ZXN0UmVzb3VyY2U+CisgICAgICAgIDxkaXJlY3Rvcnk+dHN0LXJzcmMvPC9kaXJlY3Rvcnk+CisgICAgICA8L3Rlc3RSZXNvdXJjZT4KKyAgICA8L3Rlc3RSZXNvdXJjZXM+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgIDxnb2FsPnRlc3QtamFyPC9nb2FsPgorICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgPC9wbHVnaW4+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxhcmdMaW5lPi1EamF2YS5pby50bXBkaXI9JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0gIC1YbXgzMDBtPC9hcmdMaW5lPgorICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy90ZXN0L0xvbmdPYmplY3RJZFRlc3RVdGlscy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvdGVzdC9Mb25nT2JqZWN0SWRUZXN0VXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzY0MDBmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvdGVzdC9Mb25nT2JqZWN0SWRUZXN0VXRpbHMuamF2YQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEuc2VjdXJpdHkuTWVzc2FnZURpZ2VzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkxvbmdPYmplY3RJZDsKKworcHVibGljIGNsYXNzIExvbmdPYmplY3RJZFRlc3RVdGlscyB7CisKKwkvKioKKwkgKiBDcmVhdGUgaWQgYXMgaGFzaCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLgorCSAqCisJICogQHBhcmFtIHMKKwkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgdG8gaGFzaAorCSAqIEByZXR1cm4gaWQgY2FsY3VsYXRlZCBieSBoYXNoaW5nIHN0cmluZworCSAqLworCXB1YmxpYyBzdGF0aWMgTG9uZ09iamVjdElkIGhhc2goU3RyaW5nIHMpIHsKKwkJTWVzc2FnZURpZ2VzdCBtZCA9IENvbnN0YW50cy5uZXdNZXNzYWdlRGlnZXN0KCk7CisJCW1kLnVwZGF0ZShzLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKTsKKwkJcmV0dXJuIExvbmdPYmplY3RJZC5mcm9tUmF3KG1kLmRpZ2VzdCgpKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgaWQgYXMgaGFzaCBvZiBhIGZpbGUgY29udGVudAorCSAqCisJICogQHBhcmFtIGZpbGUKKwkgKiAgICAgICAgICAgIHRoZSBmaWxlIHRvIGhhc2gKKwkgKiBAcmV0dXJuIGlkIGNhbGN1bGF0ZWQgYnkgaGFzaGluZyBmaWxlIGNvbnRlbnQKKwkgKiBAdGhyb3dzIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIGZpbGUgZG9lc24ndCBleGlzdAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgc3RhdGljIExvbmdPYmplY3RJZCBoYXNoKFBhdGggZmlsZSkKKwkJCXRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJTWVzc2FnZURpZ2VzdCBtZCA9IENvbnN0YW50cy5uZXdNZXNzYWdlRGlnZXN0KCk7CisJCXRyeSAoSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSgKKwkJCQlGaWxlcy5uZXdJbnB1dFN0cmVhbShmaWxlKSkpIHsKKwkJCWZpbmFsIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVs0MDk2XTsKKwkJCWZvciAoaW50IHJlYWQgPSAwOyAocmVhZCA9IGlzLnJlYWQoYnVmZmVyKSkgIT0gLTE7KSB7CisJCQkJbWQudXBkYXRlKGJ1ZmZlciwgMCwgcmVhZCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIExvbmdPYmplY3RJZC5mcm9tUmF3KG1kLmRpZ2VzdCgpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQWJicmV2aWF0ZWRMb25nT2JqZWN0SWRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQWJicmV2aWF0ZWRMb25nT2JqZWN0SWRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzOGE3OAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BYmJyZXZpYXRlZExvbmdPYmplY3RJZFRlc3QuamF2YQpAQCAtMCwwICsxLDU5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMubGliOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90U2FtZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QuTG9uZ09iamVjdElkVGVzdFV0aWxzOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCisvKgorICogUG9ydGVkIHRvIFNIQS0yNTYgZnJvbSBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BYmJyZXZpYXRlZE9iamVjdElkVGVzdAorICovCitwdWJsaWMgY2xhc3MgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWRUZXN0IHsKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFbXB0eV9Gcm9tQnl0ZUFycmF5KCkgeworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpOworCQlpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhuZXcgYnl0ZVtdIHt9LCAwLCAwKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscygiIiwgaS5uYW1lKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEVtcHR5X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGkgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKCIiKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscygiIiwgaS5uYW1lKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEZ1bGxfRnJvbUJ5dGVBcnJheSgpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIGJ5dGVbXSBiID0gb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLmVuY29kZUFTQ0lJKHMpOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhiLAorCQkJCTAsIGIubGVuZ3RoKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRUcnVlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKworCQlmaW5hbCBMb25nT2JqZWN0SWQgZiA9IGkudG9Mb25nT2JqZWN0SWQoKTsKKwkJYXNzZXJ0Tm90TnVsbChmKTsKKwkJYXNzZXJ0RXF1YWxzKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpLCBmKTsKKwkJYXNzZXJ0RXF1YWxzKGYuaGFzaENvZGUoKSwgaS5oYXNoQ29kZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RGdWxsX0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRUcnVlKGkuaXNDb21wbGV0ZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKHMsIGkubmFtZSgpKTsKKworCQlmaW5hbCBMb25nT2JqZWN0SWQgZiA9IGkudG9Mb25nT2JqZWN0SWQoKTsKKwkJYXNzZXJ0Tm90TnVsbChmKTsKKwkJYXNzZXJ0RXF1YWxzKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpLCBmKTsKKwkJYXNzZXJ0RXF1YWxzKGYuaGFzaENvZGUoKSwgaS5oYXNoQ29kZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QxX0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjIiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QyX0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3IjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgaSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyk7CisJCWFzc2VydE5vdE51bGwoaSk7CisJCWFzc2VydEVxdWFscyhzLmxlbmd0aCgpLCBpLmxlbmd0aCgpKTsKKwkJYXNzZXJ0RmFsc2UoaS5pc0NvbXBsZXRlKCkpOworCQlhc3NlcnRFcXVhbHMocywgaS5uYW1lKCkpOworCQlhc3NlcnROdWxsKGkudG9Mb25nT2JqZWN0SWQoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0M19Gcm9tU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3Q0X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTEiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3Q1X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1IjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgaSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyk7CisJCWFzc2VydE5vdE51bGwoaSk7CisJCWFzc2VydEVxdWFscyhzLmxlbmd0aCgpLCBpLmxlbmd0aCgpKTsKKwkJYXNzZXJ0RmFsc2UoaS5pc0NvbXBsZXRlKCkpOworCQlhc3NlcnRFcXVhbHMocywgaS5uYW1lKCkpOworCQlhc3NlcnROdWxsKGkudG9Mb25nT2JqZWN0SWQoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Nl9Gcm9tU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWIiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3Q3X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjciOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3Q4X0Zyb21TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjcyIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgaSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyk7CisJCWFzc2VydE5vdE51bGwoaSk7CisJCWFzc2VydEVxdWFscyhzLmxlbmd0aCgpLCBpLmxlbmd0aCgpKTsKKwkJYXNzZXJ0RmFsc2UoaS5pc0NvbXBsZXRlKCkpOworCQlhc3NlcnRFcXVhbHMocywgaS5uYW1lKCkpOworCQlhc3NlcnROdWxsKGkudG9Mb25nT2JqZWN0SWQoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0OV9Gcm9tU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWI3MjkiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QxNV9Gcm9tU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWI3MjkzN2ZjOGYiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QxNl9Gcm9tU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWI3MjkzN2ZjOGY1IjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgaSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyk7CisJCWFzc2VydE5vdE51bGwoaSk7CisJCWFzc2VydEVxdWFscyhzLmxlbmd0aCgpLCBpLmxlbmd0aCgpKTsKKwkJYXNzZXJ0RmFsc2UoaS5pc0NvbXBsZXRlKCkpOworCQlhc3NlcnRFcXVhbHMocywgaS5uYW1lKCkpOworCQlhc3NlcnROdWxsKGkudG9Mb25nT2JqZWN0SWQoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MTdfRnJvbVN0cmluZygpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTViNzI5MzdmYzhmNTUiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QzM19Gcm9tU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgcyA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMiOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBpID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90TnVsbChpKTsKKwkJYXNzZXJ0RXF1YWxzKHMubGVuZ3RoKCksIGkubGVuZ3RoKCkpOworCQlhc3NlcnRGYWxzZShpLmlzQ29tcGxldGUoKSk7CisJCWFzc2VydEVxdWFscyhzLCBpLm5hbWUoKSk7CisJCWFzc2VydE51bGwoaS50b0xvbmdPYmplY3RJZCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFcXVhbHNfU2hvcnQoKSB7CisJCWZpbmFsIFN0cmluZyBzID0gIjI3ZTE1YjcyIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcocyk7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGIgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlhc3NlcnROb3RTYW1lKGEsIGIpOworCQlhc3NlcnRUcnVlKGEuaGFzaENvZGUoKSA9PSBiLmhhc2hDb2RlKCkpOworCQlhc3NlcnRFcXVhbHMoYiwgYSk7CisJCWFzc2VydEVxdWFscyhhLCBiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFcXVhbHNfRnVsbCgpIHsKKwkJZmluYWwgU3RyaW5nIHMgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGEgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMpOworCQlmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBiID0gQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzKTsKKwkJYXNzZXJ0Tm90U2FtZShhLCBiKTsKKwkJYXNzZXJ0VHJ1ZShhLmhhc2hDb2RlKCkgPT0gYi5oYXNoQ29kZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKGIsIGEpOworCQlhc3NlcnRFcXVhbHMoYSwgYik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Tm90RXF1YWxzX1NhbWVMZW5ndGgoKSB7CisJCWZpbmFsIFN0cmluZyBzYSA9ICIyN2UxNWI3MiI7CisJCWZpbmFsIFN0cmluZyBzYiA9ICIyN2UxNWI3ZiI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGEgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKHNhKTsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYiA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2IpOworCQlhc3NlcnRGYWxzZShhLmVxdWFscyhiKSk7CisJCWFzc2VydEZhbHNlKGIuZXF1YWxzKGEpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3ROb3RFcXVhbHNfRGlmZkxlbmd0aCgpIHsKKwkJZmluYWwgU3RyaW5nIHNhID0gIjI3ZTE1YjcyYWJjZCI7CisJCWZpbmFsIFN0cmluZyBzYiA9ICIyN2UxNWI3MiI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGEgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKHNhKTsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYiA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2IpOworCQlhc3NlcnRGYWxzZShhLmVxdWFscyhiKSk7CisJCWFzc2VydEZhbHNlKGIuZXF1YWxzKGEpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQcmVmaXhDb21wYXJlX0Z1bGwoKSB7CisJCWZpbmFsIFN0cmluZyBzMSA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoczEpOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTEgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMSk7CisJCWFzc2VydEVxdWFscygwLCBhLnByZWZpeENvbXBhcmUoaTEpKTsKKwkJYXNzZXJ0VHJ1ZShpMS5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczIgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMSI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMiA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMyKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTIpIDwgMCk7CisJCWFzc2VydEZhbHNlKGkyLnN0YXJ0c1dpdGgoYSkpOworCisJCWZpbmFsIFN0cmluZyBzMyA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjBmIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkzID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczMpOworCQlhc3NlcnRUcnVlKGEucHJlZml4Q29tcGFyZShpMykgPiAwKTsKKwkJYXNzZXJ0RmFsc2UoaTMuc3RhcnRzV2l0aChhKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHJlZml4Q29tcGFyZV8xKCkgeworCQlmaW5hbCBTdHJpbmcgc2EgPSAiMiI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGEgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKHNhKTsKKworCQlmaW5hbCBTdHJpbmcgczEgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMSA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMxKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGEucHJlZml4Q29tcGFyZShpMSkpOworCQlhc3NlcnRUcnVlKGkxLnN0YXJ0c1dpdGgoYSkpOworCisJCWZpbmFsIFN0cmluZyBzMiA9ICIzN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkyID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczIpOworCQlhc3NlcnRUcnVlKGEucHJlZml4Q29tcGFyZShpMikgPCAwKTsKKwkJYXNzZXJ0RmFsc2UoaTIuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMzID0gIjE3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTMgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMyk7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkzKSA+IDApOworCQlhc3NlcnRGYWxzZShpMy5zdGFydHNXaXRoKGEpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQcmVmaXhDb21wYXJlXzE1KCkgeworCQlmaW5hbCBTdHJpbmcgc2EgPSAiMjdlMTViNzI5MzdmYzhmIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2EpOworCisJCWZpbmFsIFN0cmluZyBzMSA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkxID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczEpOworCQlhc3NlcnRFcXVhbHMoMCwgYS5wcmVmaXhDb21wYXJlKGkxKSk7CisJCWFzc2VydFRydWUoaTEuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMyID0gIjI3ZTE1YjcyOTM3ZmM5MDU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTIgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMik7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkyKSA8IDApOworCQlhc3NlcnRGYWxzZShpMi5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczMgPSAiMjdlMTViNzI5MzdmYzhlNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMyA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMzKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTMpID4gMCk7CisJCWFzc2VydEZhbHNlKGkzLnN0YXJ0c1dpdGgoYSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFByZWZpeENvbXBhcmVfMTYoKSB7CisJCWZpbmFsIFN0cmluZyBzYSA9ICIyN2UxNWI3MjkzN2ZjOGY1IjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2EpOworCisJCWZpbmFsIFN0cmluZyBzMSA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkxID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczEpOworCQlhc3NlcnRFcXVhbHMoMCwgYS5wcmVmaXhDb21wYXJlKGkxKSk7CisJCWFzc2VydFRydWUoaTEuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMyID0gIjI3ZTE1YjcyOTM3ZmM4ZjY1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTIgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMik7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkyKSA8IDApOworCQlhc3NlcnRGYWxzZShpMi5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczMgPSAiMjdlMTViNzI5MzdmYzhmNDU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMyA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMzKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTMpID4gMCk7CisJCWFzc2VydEZhbHNlKGkzLnN0YXJ0c1dpdGgoYSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFByZWZpeENvbXBhcmVfMTcoKSB7CisJCWZpbmFsIFN0cmluZyBzYSA9ICIyN2UxNWI3MjkzN2ZjOGY1NSI7CisJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGEgPSBBYmJyZXZpYXRlZExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKHNhKTsKKworCQlmaW5hbCBTdHJpbmcgczEgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMSA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMxKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGEucHJlZml4Q29tcGFyZShpMSkpOworCQlhc3NlcnRUcnVlKGkxLnN0YXJ0c1dpdGgoYSkpOworCisJCWZpbmFsIFN0cmluZyBzMiA9ICIyN2UxNWI3MjkzN2ZjOGY1NjhkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkyID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczIpOworCQlhc3NlcnRUcnVlKGEucHJlZml4Q29tcGFyZShpMikgPCAwKTsKKwkJYXNzZXJ0RmFsc2UoaTIuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMzID0gIjI3ZTE1YjcyOTM3ZmM4ZjU0OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTMgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMyk7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkzKSA+IDApOworCQlhc3NlcnRGYWxzZShpMy5zdGFydHNXaXRoKGEpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQcmVmaXhDb21wYXJlXzMzKCkgeworCQlmaW5hbCBTdHJpbmcgc2EgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAzIjsKKwkJZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoc2EpOworCisJCWZpbmFsIFN0cmluZyBzMSA9ICIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIGkxID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoczEpOworCQlhc3NlcnRFcXVhbHMoMCwgYS5wcmVmaXhDb21wYXJlKGkxKSk7CisJCWFzc2VydFRydWUoaTEuc3RhcnRzV2l0aChhKSk7CisKKwkJZmluYWwgU3RyaW5nIHMyID0gIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwNDAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgaTIgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhzMik7CisJCWFzc2VydFRydWUoYS5wcmVmaXhDb21wYXJlKGkyKSA8IDApOworCQlhc3NlcnRGYWxzZShpMi5zdGFydHNXaXRoKGEpKTsKKworCQlmaW5hbCBTdHJpbmcgczMgPSAiMjdlMTViNzI5MzdmYzhmNTU4ZGEyNGFjM2Q1MGVjMjAyMDJhNGNmMjFlMzNiODdhZThlNGNlOTBlODljNGIxMCI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBpMyA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHMzKTsKKwkJYXNzZXJ0VHJ1ZShhLnByZWZpeENvbXBhcmUoaTMpID4gMCk7CisJCWFzc2VydEZhbHNlKGkzLnN0YXJ0c1dpdGgoYSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdElzSWQoKSB7CisJCS8vIFRoZXNlIGFyZSBhbGwgdG9vIHNob3J0LgorCQlhc3NlcnRGYWxzZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKCIiKSk7CisJCWFzc2VydEZhbHNlKEFiYnJldmlhdGVkTG9uZ09iamVjdElkLmlzSWQoImEiKSk7CisKKwkJLy8gVGhlc2UgYXJlIHRvbyBsb25nLgorCQlhc3NlcnRGYWxzZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjI3ZTE1YjcyOTM3ZmM4ZjU1OGRhMjRhYzNkNTBlYzIwMzAyYTRjZjIxZTMzYjg3YWU4ZTRjZTkwZTg5YzRiMTAiKQorCQkJCS5uYW1lKCkgKyAiMCIpKTsKKwkJYXNzZXJ0RmFsc2UoQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuaXNJZChMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZygKKwkJCQkJCSIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIikKKwkJCQkubmFtZSgpICsgImMwZmZlZSIpKTsKKworCQkvLyBUaGVzZSBjb250YWluIG5vbi1oZXggY2hhcmFjdGVycy4KKwkJYXNzZXJ0RmFsc2UoQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuaXNJZCgiMDFub3RhaGV4c3RyaW5nIikpOworCisJCS8vIFRoZXNlIHNob3VsZCBhbGwgd29yay4KKwkJYXNzZXJ0VHJ1ZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKCJhYiIpKTsKKwkJYXNzZXJ0VHJ1ZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKCJhYmMiKSk7CisJCWFzc2VydFRydWUoQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuaXNJZCgiYWJjZCIpKTsKKwkJYXNzZXJ0VHJ1ZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKCJhYmNkMCIpKTsKKwkJYXNzZXJ0VHJ1ZShBYmJyZXZpYXRlZExvbmdPYmplY3RJZC5pc0lkKCJhYmNkMDkiKSk7CisJCWFzc2VydFRydWUoQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuaXNJZChMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZygKKwkJCQkJCSIyN2UxNWI3MjkzN2ZjOGY1NThkYTI0YWMzZDUwZWMyMDMwMmE0Y2YyMWUzM2I4N2FlOGU0Y2U5MGU4OWM0YjEwIikKKwkJCQkubmFtZSgpKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0QWJicmV2aWF0ZSgpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJYXNzZXJ0RXF1YWxzKAorCQkJCSJhYmJyZXZpYXRlZCBpZCBzaG91bGQgbWF0Y2ggdGhlIGlkIGl0IHdhcyBhYmJyZXZpYXRlZCBmcm9tIiwgMCwKKwkJCQlpZC5hYmJyZXZpYXRlKDEwKS5wcmVmaXhDb21wYXJlKGlkKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RnJvbVN0cmluZ0J5dGVXcm9uZ0xlbmd0aCgpIHsKKwkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzY1XTsKKwkJdHJ5IHsKKwkJCUFiYnJldmlhdGVkTG9uZ09iamVjdElkLmZyb21TdHJpbmcoYnVmLCAwLCA2NSk7CisJCQlmYWlsKCJleHBlY3RlZCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZm9yIHRvbyBsb25nIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIik7CisJCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBleHBlY3RlZAorCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RnJvbVN0cmluZ1dyb25nTGVuZ3RoKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQl0cnkgeworCQkJQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhpZC5uYW1lKCkgKyAiYzBmZmVlIik7CisJCQlmYWlsKCJleHBlY3RlZCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZm9yIHRvbyBsb25nIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIik7CisJCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBleHBlY3RlZAorCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RnJvbUxvbmdPYmplY3RJZCgpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJYXNzZXJ0RXF1YWxzKDAsCisJCQkJQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuZnJvbUxvbmdPYmplY3RJZChpZCkucHJlZml4Q29tcGFyZShpZCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFByZWZpeENvbXBhcmVCeXRlKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQgPSBMb25nT2JqZWN0SWQuZnJvbVN0cmluZygKKwkJCQkiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpOworCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbMzJdOworCQlpZC5jb3B5UmF3VG8oYnVmLCAwKTsKKworCQlBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gaWQuYWJicmV2aWF0ZSg2Mik7CisJCWFzc2VydEVxdWFscygwLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisKKwkJYSA9IExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjAwMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKQorCQkJCS5hYmJyZXZpYXRlKDE2KTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJCWEgPSBMb25nT2JqZWN0SWQKKwkJCQkuZnJvbVN0cmluZygKKwkJCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDAyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikKKwkJCQkuYWJicmV2aWF0ZSgzMik7CisJCWFzc2VydEVxdWFscygtMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCQlhID0gTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMDIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmFiYnJldmlhdGUoNDgpOworCQlhc3NlcnRFcXVhbHMoLTEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAwMjM0NTY3ODlhYmNkZWYiKQorCQkJCS5hYmJyZXZpYXRlKDY0KTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisKKwkJYSA9IExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjExMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKQorCQkJCS5hYmJyZXZpYXRlKDE2KTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjAxMjM0NTY3ODlhYmNkZWYxMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKQorCQkJCS5hYmJyZXZpYXRlKDMyKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMTEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKQorCQkJCS5hYmJyZXZpYXRlKDQ4KTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IExvbmdPYmplY3RJZAorCQkJCS5mcm9tU3RyaW5nKAorCQkJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjExMjM0NTY3ODlhYmNkZWYiKQorCQkJCS5hYmJyZXZpYXRlKDY0KTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQcmVmaXhDb21wYXJlTG9uZygpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gbmV3IExvbmdPYmplY3RJZCgxTCwgMkwsIDNMLCA0TCk7CisJCWxvbmdbXSBidWYgPSBuZXcgbG9uZ1s0XTsKKwkJaWQuY29weVJhd1RvKGJ1ZiwgMCk7CisKKwkJQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IGlkLmFiYnJldmlhdGUoNjIpOworCQlhc3NlcnRFcXVhbHMoMCwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCisJCWEgPSBuZXcgTG9uZ09iamVjdElkKDBMLCAyTCwgM0wsIDRMKS5hYmJyZXZpYXRlKDE2KTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJCWEgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAxTCwgM0wsIDRMKS5hYmJyZXZpYXRlKDMyKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJCWEgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgMkwsIDRMKS5hYmJyZXZpYXRlKDQ4KTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJCWEgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgM0wsIDNMKS5hYmJyZXZpYXRlKDY0KTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisKKwkJYSA9IG5ldyBMb25nT2JqZWN0SWQoMkwsIDJMLCAzTCwgNEwpLmFiYnJldmlhdGUoMTYpOworCQlhc3NlcnRFcXVhbHMoMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCQlhID0gbmV3IExvbmdPYmplY3RJZCgxTCwgM0wsIDNMLCA0TCkuYWJicmV2aWF0ZSgzMik7CisJCWFzc2VydEVxdWFscygxLCBhLnByZWZpeENvbXBhcmUoYnVmLCAwKSk7CisJCWEgPSBuZXcgTG9uZ09iamVjdElkKDFMLCAyTCwgNEwsIDRMKS5hYmJyZXZpYXRlKDQ4KTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGEucHJlZml4Q29tcGFyZShidWYsIDApKTsKKwkJYSA9IG5ldyBMb25nT2JqZWN0SWQoMUwsIDJMLCAzTCwgNUwpLmFiYnJldmlhdGUoNjQpOworCQlhc3NlcnRFcXVhbHMoMSwgYS5wcmVmaXhDb21wYXJlKGJ1ZiwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldEZpcnN0Qnl0ZSgpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJImY0MjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjExMjM0NTY3ODlhYmNkZWYiKTsKKwkJQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYSA9IGlkLmFiYnJldmlhdGUoMTApOworCQlhc3NlcnRFcXVhbHMoMHhmNCwgYS5nZXRGaXJzdEJ5dGUoKSk7CisJCWFzc2VydEVxdWFscyhpZC5nZXRGaXJzdEJ5dGUoKSwgYS5nZXRGaXJzdEJ5dGUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Tm90RXF1YWxzKCkgeworCQlBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBhID0gbmV3IExvbmdPYmplY3RJZCgxTCwgMkwsIDNMLCA0TCkKKwkJCQkuYWJicmV2aWF0ZSgxMCk7CisJCWFzc2VydEZhbHNlKGEuZXF1YWxzKCJkaWZmZXJlbnQiKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0xvbmdPYmplY3RJZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9Mb25nT2JqZWN0SWRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1YTJhMwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9Mb25nT2JqZWN0SWRUZXN0LmphdmEKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LkpHaXRUZXN0VXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnMuSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LkxvbmdPYmplY3RJZFRlc3RVdGlsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlsczsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qCisgKiBQb3J0ZWQgdG8gU0hBLTI1NiBmcm9tIG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkVGVzdAorICovCitwdWJsaWMgY2xhc3MgTG9uZ09iamVjdElkVGVzdCB7CisJcHJpdmF0ZSBzdGF0aWMgUGF0aCB0bXA7CisKKwlAQmVmb3JlQ2xhc3MKKwlwdWJsaWMgc3RhdGljIHZvaWQgc2V0dXAoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0bXAgPSBGaWxlcy5jcmVhdGVUZW1wRGlyZWN0b3J5KCJqZ2l0X3Rlc3RfIik7CisJfQorCisJQEFmdGVyQ2xhc3MKKwlwdWJsaWMgc3RhdGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlGaWxlVXRpbHMuZGVsZXRlKHRtcC50b0ZpbGUoKSwgRmlsZVV0aWxzLlJFQ1VSU0lWRSB8IEZpbGVVdGlscy5SRVRSWSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDAxX3RvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgeCA9ICI4MzY3YjBlZGM4MWRmODBlNmI0MmViMWI3MWY3ODMxMTEyMjRlMDU4Y2IzZGEzNzg5NGQwNjVkMmRlYjdhYjBhIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIG9pZCA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHgpOworCQlhc3NlcnRFcXVhbHMoeCwgb2lkLm5hbWUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDAyX3RvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgeCA9ICIxNDBjZTcxZDYyOGNjZWI3OGUzNzA5OTQwYmE1MmE2NTFhMGM0YTljMTQwMGYyZTE1ZTk5OGExYTQzODg3ZWRmIjsKKwkJZmluYWwgTG9uZ09iamVjdElkIG9pZCA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHgpOworCQlhc3NlcnRFcXVhbHMoeCwgb2lkLm5hbWUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDAzX2VxdWFscygpIHsKKwkJZmluYWwgU3RyaW5nIHggPSAiODM2N2IwZWRjODFkZjgwZTZiNDJlYjFiNzFmNzgzMTExMjI0ZTA1OGNiM2RhMzc4OTRkMDY1ZDJkZWI3YWIwYSI7CisJCWZpbmFsIExvbmdPYmplY3RJZCBhID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoeCk7CisJCWZpbmFsIExvbmdPYmplY3RJZCBiID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoeCk7CisJCWFzc2VydEVxdWFscyhhLmhhc2hDb2RlKCksIGIuaGFzaENvZGUoKSk7CisJCWFzc2VydEVxdWFscygiYSBhbmQgYiBzaG91bGQgYmUgZXF1YWwiLCBiLCBhKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMDRfaXNJZCgpIHsKKwkJYXNzZXJ0VHJ1ZSgidmFsaWQgaWQiLCBMb25nT2JqZWN0SWQuaXNJZCgKKwkJCQkiODM2N2IwZWRjODFkZjgwZTZiNDJlYjFiNzFmNzgzMTExMjI0ZTA1OGNiM2RhMzc4OTRkMDY1ZDJkZWI3YWIwYSIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMDVfbm90SXNJZCgpIHsKKwkJYXNzZXJ0RmFsc2UoImJvYiBpcyBub3QgYW4gaWQiLCBMb25nT2JqZWN0SWQuaXNJZCgiYm9iIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDAwNl9ub3RJc0lkKCkgeworCQlhc3NlcnRGYWxzZSgiNjMgZGlnaXRzIGlzIG5vdCBhbiBpZCIsIExvbmdPYmplY3RJZC5pc0lkKAorCQkJCSI4MzY3YjBlZGM4MWRmODBlNmI0MmViMWI3MWY3ODMxMTEyMjRlMDU4Y2IzZGEzNzg5NGQwNjVkMmRlYjdhYjAiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDA3X2lzSWQoKSB7CisJCWFzc2VydFRydWUoInVwcGVyY2FzZSBpcyBhY2NlcHRlZCIsIExvbmdPYmplY3RJZC5pc0lkKAorCQkJCSI4MzY3YjBlZGM4MWRmODBlNmI0MmViMWI3MWY3ODMxMTEyMjRlMDU4Y2IzZGEzNzg5NGQwNjVkMmRFYjdhYjBBIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdDAwOF9ub3RJc0lkKCkgeworCQlhc3NlcnRGYWxzZSgiZyBpcyBub3QgYSB2YWxpZCBoZXggZGlnaXQiLCBMb25nT2JqZWN0SWQuaXNJZCgKKwkJCQkiZzM2N2IwZWRjODFkZjgwZTZiNDJlYjFiNzFmNzgzMTExMjI0ZTA1OGNiM2RhMzc4OTRkMDY1ZDJkZWI3YWIwYSIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3QwMDlfdG9TdHJpbmcoKSB7CisJCWZpbmFsIFN0cmluZyB4ID0gIjE0MGNlNzFkNjI4Y2NlYjc4ZTM3MDk5NDBiYTUyYTY1MWEwYzRhOWMxNDAwZjJlMTVlOTk4YTFhNDM4ODdlZGYiOworCQlmaW5hbCBMb25nT2JqZWN0SWQgb2lkID0gTG9uZ09iamVjdElkLmZyb21TdHJpbmcoeCk7CisJCWFzc2VydEVxdWFscyh4LCBMb25nT2JqZWN0SWQudG9TdHJpbmcob2lkKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDEwX3RvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgeCA9ICIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIjsKKwkJYXNzZXJ0RXF1YWxzKHgsIExvbmdPYmplY3RJZC50b1N0cmluZyhudWxsKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0MDExX3RvU3RyaW5nKCkgeworCQlmaW5hbCBTdHJpbmcgeCA9ICIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmMDEyMzQ1Njc4OTAxMjM0NTY3ODlBQkNERUZhYmNkZWYwMTIzNDU2Nzg5IjsKKwkJZmluYWwgTG9uZ09iamVjdElkIG9pZCA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHgpOworCQlhc3NlcnRFcXVhbHMoeC50b0xvd2VyQ2FzZSgpLCBvaWQubmFtZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RHZXRCeXRlKCkgeworCQlieXRlW10gcmF3ID0gbmV3IGJ5dGVbMzJdOworCQlmb3IgKGludCBpID0gMDsgaSA8IDMyOyBpKyspCisJCQlyYXdbaV0gPSAoYnl0ZSkgKDB4YTAgKyBpKTsKKwkJTG9uZ09iamVjdElkIGlkID0gTG9uZ09iamVjdElkLmZyb21SYXcocmF3KTsKKworCQlhc3NlcnRFcXVhbHMocmF3WzBdICYgMHhmZiwgaWQuZ2V0Rmlyc3RCeXRlKCkpOworCQlhc3NlcnRFcXVhbHMocmF3WzBdICYgMHhmZiwgaWQuZ2V0Qnl0ZSgwKSk7CisJCWFzc2VydEVxdWFscyhyYXdbMV0gJiAweGZmLCBpZC5nZXRCeXRlKDEpKTsKKwkJYXNzZXJ0RXF1YWxzKHJhd1sxXSAmIDB4ZmYsIGlkLmdldFNlY29uZEJ5dGUoKSk7CisKKwkJZm9yIChpbnQgaSA9IDI7IGkgPCAzMjsgaSsrKSB7CisJCQlhc3NlcnRFcXVhbHMoImluZGV4ICIgKyBpLCByYXdbaV0gJiAweGZmLCBpZC5nZXRCeXRlKGkpKTsKKwkJfQorCQl0cnkgeworCQkJaWQuZ2V0Qnl0ZSgzMik7CisJCQlmYWlsKCJMb25nT2JqZWN0SWQgaGFzIDMyIGJ5dGUgb25seSIpOworCQl9IGNhdGNoIChBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24gZSkgeworCQkJLy8gZXhwZWN0ZWQKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFNldEJ5dGUoKSB7CisJCWJ5dGVbXSBleHAgPSBuZXcgYnl0ZVszMl07CisJCWZvciAoaW50IGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQkJZXhwW2ldID0gKGJ5dGUpICgweGEwICsgaSk7CisJCX0KKworCQlNdXRhYmxlTG9uZ09iamVjdElkIGlkID0gbmV3IE11dGFibGVMb25nT2JqZWN0SWQoKTsKKwkJaWQuZnJvbVJhdyhleHApOworCQlhc3NlcnRFcXVhbHMoTG9uZ09iamVjdElkLmZyb21SYXcoZXhwKS5uYW1lKCksIGlkLm5hbWUoKSk7CisKKwkJaWQuc2V0Qnl0ZSgwLCAweDEwKTsKKwkJYXNzZXJ0RXF1YWxzKDB4MTAsIGlkLmdldEJ5dGUoMCkpOworCQlleHBbMF0gPSAweDEwOworCQlhc3NlcnRFcXVhbHMoTG9uZ09iamVjdElkLmZyb21SYXcoZXhwKS5uYW1lKCksIGlkLm5hbWUoKSk7CisKKwkJZm9yIChpbnQgcCA9IDE7IHAgPCAzMjsgcCsrKSB7CisJCQlpZC5zZXRCeXRlKHAsIDB4MTAgKyBwKTsKKwkJCWFzc2VydEVxdWFscygweDEwICsgcCwgaWQuZ2V0Qnl0ZShwKSk7CisJCQlleHBbcF0gPSAoYnl0ZSkgKDB4MTAgKyBwKTsKKwkJCWFzc2VydEVxdWFscyhMb25nT2JqZWN0SWQuZnJvbVJhdyhleHApLm5hbWUoKSwgaWQubmFtZSgpKTsKKwkJfQorCisJCWZvciAoaW50IHAgPSAwOyBwIDwgMzI7IHArKykgeworCQkJaWQuc2V0Qnl0ZShwLCAweDgwICsgcCk7CisJCQlhc3NlcnRFcXVhbHMoMHg4MCArIHAsIGlkLmdldEJ5dGUocCkpOworCQkJZXhwW3BdID0gKGJ5dGUpICgweDgwICsgcCk7CisJCQlhc3NlcnRFcXVhbHMoTG9uZ09iamVjdElkLmZyb21SYXcoZXhwKS5uYW1lKCksIGlkLm5hbWUoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RaZXJvSWQoKSB7CisJCUFueUxvbmdPYmplY3RJZCB6ZXJvID0gbmV3IExvbmdPYmplY3RJZCgwTCwgMEwsIDBMLCAwTCk7CisJCWFzc2VydEVxdWFscyh6ZXJvLCBMb25nT2JqZWN0SWQuemVyb0lkKCkpOworCQlhc3NlcnRFcXVhbHMoCisJCQkJIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLAorCQkJCUxvbmdPYmplY3RJZC56ZXJvSWQoKS5uYW1lKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEVxdWFscygpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ0ZXN0Iik7CisJCWFzc2VydFRydWUoImlkIHNob3VsZCBlcXVhbCBpdHNlbGYiLCBpZDEuZXF1YWxzKGlkMSkpOworCQlBbnlMb25nT2JqZWN0SWQgaWQyID0gbmV3IExvbmdPYmplY3RJZChpZDEpOworCQlhc3NlcnRFcXVhbHMoIm9iamVjdHMgc2hvdWxkIGJlIGVxdWFscyIsIGlkMSwgaWQyKTsKKworCQlpZDIgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgib3RoZXIiKTsKKwkJYXNzZXJ0Tm90RXF1YWxzKCJvYmplY3RzIHNob3VsZCBiZSBub3QgZXF1YWwiLCBpZDEsIGlkMik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29weVJhd0J5dGVzKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJQW55TG9uZ09iamVjdElkIGlkMiA9IG5ldyBMb25nT2JqZWN0SWQoaWQxKTsKKworCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbNjRdOworCQlpZDEuY29weVJhd1RvKGJ1ZiwgMCk7CisJCWlkMi5jb3B5UmF3VG8oYnVmLCAzMik7CisJCWFzc2VydFRydWUoIm9iamVjdHMgc2hvdWxkIGJlIGVxdWFscyIsCisJCQkJTG9uZ09iamVjdElkLmVxdWFscyhidWYsIDAsIGJ1ZiwgMzIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5UmF3TG9uZ3MoKSB7CisJCWxvbmdbXSBhID0gbmV3IGxvbmdbNF07CisJCWFbMF0gPSAxTDsKKwkJYVsxXSA9IDJMOworCQlhWzJdID0gM0w7CisJCWFbM10gPSA0TDsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IG5ldyBMb25nT2JqZWN0SWQoYVswXSwgYVsxXSwgYVsyXSwgYVszXSk7CisJCUFueUxvbmdPYmplY3RJZCBpZDIgPSBMb25nT2JqZWN0SWQuZnJvbVJhdyhhKTsKKwkJYXNzZXJ0RXF1YWxzKCJvYmplY3RzIHNob3VsZCBiZSBlcXVhbHMiLCBpZDEsIGlkMik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29weUZyb21TdHJpbmdJbnZhbGlkKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJdHJ5IHsKKwkJCUxvbmdPYmplY3RJZC5mcm9tU3RyaW5nKGlkMS5uYW1lKCkgKyAiMDEyMzQiKTsKKwkJCWZhaWwoImV4cGVjdGVkIEludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24iKTsKKwkJfSBjYXRjaCAoSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbiBlKSB7CisJCQlhc3NlcnRFcXVhbHMoIkludmFsaWQgaWQ6ICIgKyBpZDEubmFtZSgpICsgIjAxMjM0IiwKKwkJCQkJZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29weUZyb21TdHJpbmdCeXRlKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzY0XTsKKwkJQ2hhcnNldCBjcyA9IFN0YW5kYXJkQ2hhcnNldHMuVVNfQVNDSUk7CisJCWNzLmVuY29kZShpZDEubmFtZSgpKS5nZXQoYnVmKTsKKwkJQW55TG9uZ09iamVjdElkIGlkMiA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKGJ1ZiwgMCk7CisJCWFzc2VydEVxdWFscygib2JqZWN0cyBzaG91bGQgYmUgZXF1YWxzIiwgaWQxLCBpZDIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEhhc2hGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ0ZXN0Iik7CisJCVBhdGggZiA9IHRtcC5yZXNvbHZlKCJ0ZXN0Iik7CisJCUpHaXRUZXN0VXRpbC53cml0ZShmLnRvRmlsZSgpLCAidGVzdCIpOworCQlBbnlMb25nT2JqZWN0SWQgaWQyID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goZik7CisJCWFzc2VydEVxdWFscygib2JqZWN0cyBzaG91bGQgYmUgZXF1YWxzIiwgaWQxLCBpZDIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvbXBhcmVUbygpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIik7CisJCWFzc2VydEVxdWFscygwLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikpKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGlkMS5jb21wYXJlVG8oaWQxKSk7CisKKwkJYXNzZXJ0RXF1YWxzKC0xLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIxMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMTEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjExMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYxMTIzNDU2Nzg5YWJjZGVmIikpKTsKKworCQlhc3NlcnRFcXVhbHMoMSwgaWQxLmNvbXBhcmVUbyhMb25nT2JqZWN0SWQuZnJvbVN0cmluZygKKwkJCQkiMDAyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpKSk7CisJCWFzc2VydEVxdWFscygxLCBpZDEuY29tcGFyZVRvKExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDAyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIikpKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGlkMS5jb21wYXJlVG8oTG9uZ09iamVjdElkLmZyb21TdHJpbmcoCisJCQkJIjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDAyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYiKSkpOworCQlhc3NlcnRFcXVhbHMoMSwgaWQxLmNvbXBhcmVUbyhMb25nT2JqZWN0SWQuZnJvbVN0cmluZygKKwkJCQkiMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDAyMzQ1Njc4OWFiY2RlZiIpKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZVRvQnl0ZSgpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKAorCQkJCSIwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmIik7CisJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVszMl07CisJCWlkMS5jb3B5UmF3VG8oYnVmLCAwKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGlkMS5jb21wYXJlVG8oYnVmLCAwKSk7CisKKwkJTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMTEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmNvcHlSYXdUbyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoLTEsIGlkMS5jb21wYXJlVG8oYnVmLCAwKSk7CisKKwkJTG9uZ09iamVjdElkCisJCQkJLmZyb21TdHJpbmcoCisJCQkJCQkiMDAyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiIpCisJCQkJLmNvcHlSYXdUbyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoMSwgaWQxLmNvbXBhcmVUbyhidWYsIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb21wYXJlVG9Mb25nKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gbmV3IExvbmdPYmplY3RJZCgxTCwgMkwsIDNMLCA0TCk7CisJCWxvbmdbXSBidWYgPSBuZXcgbG9uZ1s0XTsKKwkJaWQxLmNvcHlSYXdUbyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoMCwgaWQxLmNvbXBhcmVUbyhidWYsIDApKTsKKworCQluZXcgTG9uZ09iamVjdElkKDJMLCAyTCwgM0wsIDRMKS5jb3B5UmF3VG8oYnVmLCAwKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBpZDEuY29tcGFyZVRvKGJ1ZiwgMCkpOworCisJCW5ldyBMb25nT2JqZWN0SWQoMEwsIDJMLCAzTCwgNEwpLmNvcHlSYXdUbyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoMSwgaWQxLmNvbXBhcmVUbyhidWYsIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5VG9CeXRlKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzY0XTsKKwkJaWQxLmNvcHlUbyhidWYsIDApOworCQlhc3NlcnRFcXVhbHMoaWQxLCBMb25nT2JqZWN0SWQuZnJvbVN0cmluZyhidWYsIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5UmF3VG9CeXRlQnVmZmVyKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJQnl0ZUJ1ZmZlciBidWYgPSBCeXRlQnVmZmVyLmFsbG9jYXRlKDMyKTsKKwkJaWQxLmNvcHlSYXdUbyhidWYpOworCQlhc3NlcnRFcXVhbHMoaWQxLCBMb25nT2JqZWN0SWQuZnJvbVJhdyhidWYuYXJyYXkoKSwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlUb0J5dGVCdWZmZXIoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlCeXRlQnVmZmVyIGJ1ZiA9IEJ5dGVCdWZmZXIuYWxsb2NhdGUoNjQpOworCQlpZDEuY29weVRvKGJ1Zik7CisJCWFzc2VydEVxdWFscyhpZDEsIExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKGJ1Zi5hcnJheSgpLCAwKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29weVJhd1RvT3V0cHV0U3RyZWFtKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ0ZXN0Iik7CisJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oMzIpOworCQlpZDEuY29weVJhd1RvKG9zKTsKKwkJYXNzZXJ0RXF1YWxzKGlkMSwgTG9uZ09iamVjdElkLmZyb21SYXcob3MudG9CeXRlQXJyYXkoKSwgMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvcHlUb091dHB1dFN0cmVhbSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCUFueUxvbmdPYmplY3RJZCBpZDEgPSBMb25nT2JqZWN0SWRUZXN0VXRpbHMuaGFzaCgidGVzdCIpOworCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3MgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKDY0KTsKKwkJaWQxLmNvcHlUbyhvcyk7CisJCWFzc2VydEVxdWFscyhpZDEsIExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKG9zLnRvQnl0ZUFycmF5KCksIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5VG9Xcml0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSg2NCk7CisJCU91dHB1dFN0cmVhbVdyaXRlciB3ID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvcywgQ29uc3RhbnRzLkNIQVJTRVQpOworCQlpZDEuY29weVRvKHcpOworCQl3LmNsb3NlKCk7CisJCWFzc2VydEVxdWFscyhpZDEsIExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKG9zLnRvQnl0ZUFycmF5KCksIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5VG9Xcml0ZXJXaXRoQnVmKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJQW55TG9uZ09iamVjdElkIGlkMSA9IExvbmdPYmplY3RJZFRlc3RVdGlscy5oYXNoKCJ0ZXN0Iik7CisJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oNjQpOworCQlPdXRwdXRTdHJlYW1Xcml0ZXIgdyA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIob3MsIENvbnN0YW50cy5DSEFSU0VUKTsKKwkJY2hhcltdIGJ1ZiA9IG5ldyBjaGFyWzY0XTsKKwkJaWQxLmNvcHlUbyhidWYsIHcpOworCQl3LmNsb3NlKCk7CisJCWFzc2VydEVxdWFscyhpZDEsIExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKG9zLnRvQnl0ZUFycmF5KCksIDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5VG9TdHJpbmdCdWlsZGVyKCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWNoYXJbXSBidWYgPSBuZXcgY2hhcls2NF07CisJCWlkMS5jb3B5VG8oYnVmLCBzYik7CisJCWFzc2VydEVxdWFscyhpZDEsIExvbmdPYmplY3RJZC5mcm9tU3RyaW5nKHNiLnRvU3RyaW5nKCkpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5KCkgeworCQlBbnlMb25nT2JqZWN0SWQgaWQxID0gTG9uZ09iamVjdElkVGVzdFV0aWxzLmhhc2goInRlc3QiKTsKKwkJYXNzZXJ0RXF1YWxzKGlkMS5jb3B5KCksIGlkMSk7CisJCU11dGFibGVMb25nT2JqZWN0SWQgaWQyID0gbmV3IE11dGFibGVMb25nT2JqZWN0SWQoKTsKKwkJaWQyLmZyb21PYmplY3RJZChpZDEpOworCQlhc3NlcnRFcXVhbHMoaWQxLCBpZDIuY29weSgpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvTXV0YWJsZUxvbmdPYmplY3RJZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9NdXRhYmxlTG9uZ09iamVjdElkVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZGMzYWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvTXV0YWJsZUxvbmdPYmplY3RJZFRlc3QuamF2YQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMubGliOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qCisgKiBQb3J0ZWQgdG8gU0hBLTI1NiBmcm9tIG9yZy5lY2xpcHNlLmpnaXQubGliLk11dGFibGVPYmplY3RJZFRlc3QKKyAqLworcHVibGljIGNsYXNzIE11dGFibGVMb25nT2JqZWN0SWRUZXN0IHsKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEZyb21SYXdMb25nKCkgeworCQlNdXRhYmxlTG9uZ09iamVjdElkIG0gPSBuZXcgTXV0YWJsZUxvbmdPYmplY3RJZCgpOworCQltLmZyb21SYXcobmV3IGxvbmdbXSB7IDFMLCAyTCwgM0wsIDRMIH0pOworCQlhc3NlcnRFcXVhbHMobmV3IExvbmdPYmplY3RJZCgxTCwgMkwsIDNMLCA0TCksIG0pOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEZyb21TdHJpbmcoKSB7CisJCUFueUxvbmdPYmplY3RJZCBpZCA9IG5ldyBMb25nT2JqZWN0SWQoMUwsIDJMLCAzTCwgNEwpOworCQlNdXRhYmxlTG9uZ09iamVjdElkIG0gPSBuZXcgTXV0YWJsZUxvbmdPYmplY3RJZCgpOworCQltLmZyb21TdHJpbmcoaWQubmFtZSgpKTsKKwkJYXNzZXJ0RXF1YWxzKGlkLCBtKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RGcm9tU3RyaW5nQnl0ZSgpIHsKKwkJQW55TG9uZ09iamVjdElkIGlkID0gbmV3IExvbmdPYmplY3RJZCgxTCwgMkwsIDNMLCA0TCk7CisJCU11dGFibGVMb25nT2JqZWN0SWQgbSA9IG5ldyBNdXRhYmxlTG9uZ09iamVjdElkKCk7CisJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVs2NF07CisJCWlkLmNvcHlUbyhidWYsIDApOworCQltLmZyb21TdHJpbmcoYnVmLCAwKTsKKwkJYXNzZXJ0RXF1YWxzKGlkLCBtKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb3B5KCkgeworCQlNdXRhYmxlTG9uZ09iamVjdElkIG0gPSBuZXcgTXV0YWJsZUxvbmdPYmplY3RJZCgpOworCQltLmZyb21SYXcobmV3IGxvbmdbXSB7IDFMLCAyTCwgM0wsIDRMIH0pOworCQlhc3NlcnRFcXVhbHMobSwgbmV3IE11dGFibGVMb25nT2JqZWN0SWQobSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvT2JqZWN0SWQoKSB7CisJCU11dGFibGVMb25nT2JqZWN0SWQgbSA9IG5ldyBNdXRhYmxlTG9uZ09iamVjdElkKCk7CisJCW0uZnJvbVJhdyhuZXcgbG9uZ1tdIHsgMUwsIDJMLCAzTCwgNEwgfSk7CisJCWFzc2VydEVxdWFscyhtLCBtLnRvT2JqZWN0SWQoKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLmNsYXNzcGF0aCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5jbGFzc3BhdGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRhMmJlNwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5jbGFzc3BhdGgKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGNsYXNzcGF0aD4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJyZXNvdXJjZXMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjciLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLmZicHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uZmJwcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWEwNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLmZicHJlZnMKQEAgLTAsMCArMSwxMjUgQEAKKyNGaW5kQnVncyBVc2VyIFByZWZlcmVuY2VzCisjTW9uIE1heSAwNCAxNjoyNDoxMyBQRFQgMjAwOQorZGV0ZWN0b3JBcHBlbmRpbmdUb0FuT2JqZWN0T3V0cHV0U3RyZWFtPUFwcGVuZGluZ1RvQW5PYmplY3RPdXRwdXRTdHJlYW18dHJ1ZQorZGV0ZWN0b3JCYWRBcHBsZXRDb25zdHJ1Y3Rvcj1CYWRBcHBsZXRDb25zdHJ1Y3RvcnxmYWxzZQorZGV0ZWN0b3JCYWRSZXN1bHRTZXRBY2Nlc3M9QmFkUmVzdWx0U2V0QWNjZXNzfHRydWUKK2RldGVjdG9yQmFkU3ludGF4Rm9yUmVndWxhckV4cHJlc3Npb249QmFkU3ludGF4Rm9yUmVndWxhckV4cHJlc3Npb258dHJ1ZQorZGV0ZWN0b3JCYWRVc2VPZlJldHVyblZhbHVlPUJhZFVzZU9mUmV0dXJuVmFsdWV8dHJ1ZQorZGV0ZWN0b3JCYWRseU92ZXJyaWRkZW5BZGFwdGVyPUJhZGx5T3ZlcnJpZGRlbkFkYXB0ZXJ8dHJ1ZQorZGV0ZWN0b3JCb29sZWFuUmV0dXJuTnVsbD1Cb29sZWFuUmV0dXJuTnVsbHx0cnVlCitkZXRlY3RvckNhbGxUb1Vuc3VwcG9ydGVkTWV0aG9kPUNhbGxUb1Vuc3VwcG9ydGVkTWV0aG9kfHRydWUKK2RldGVjdG9yQ2hlY2tJbW11dGFibGVBbm5vdGF0aW9uPUNoZWNrSW1tdXRhYmxlQW5ub3RhdGlvbnx0cnVlCitkZXRlY3RvckNoZWNrVHlwZVF1YWxpZmllcnM9Q2hlY2tUeXBlUXVhbGlmaWVyc3x0cnVlCitkZXRlY3RvckNsb25lSWRpb209Q2xvbmVJZGlvbXxmYWxzZQorZGV0ZWN0b3JDb21wYXJhdG9ySWRpb209Q29tcGFyYXRvcklkaW9tfHRydWUKK2RldGVjdG9yQ29uZnVzZWRJbmhlcml0YW5jZT1Db25mdXNlZEluaGVyaXRhbmNlfHRydWUKK2RldGVjdG9yQ29uZnVzaW9uQmV0d2VlbkluaGVyaXRlZEFuZE91dGVyTWV0aG9kPUNvbmZ1c2lvbkJldHdlZW5Jbmhlcml0ZWRBbmRPdXRlck1ldGhvZHx0cnVlCitkZXRlY3RvckNyb3NzU2l0ZVNjcmlwdGluZz1Dcm9zc1NpdGVTY3JpcHRpbmd8dHJ1ZQorZGV0ZWN0b3JEb0luc2lkZURvUHJpdmlsZWdlZD1Eb0luc2lkZURvUHJpdmlsZWdlZHx0cnVlCitkZXRlY3RvckRvbnRDYXRjaElsbGVnYWxNb25pdG9yU3RhdGVFeGNlcHRpb249RG9udENhdGNoSWxsZWdhbE1vbml0b3JTdGF0ZUV4Y2VwdGlvbnx0cnVlCitkZXRlY3RvckRvbnRVc2VFbnVtPURvbnRVc2VFbnVtfHRydWUKK2RldGVjdG9yRHJvcHBlZEV4Y2VwdGlvbj1Ecm9wcGVkRXhjZXB0aW9ufHRydWUKK2RldGVjdG9yRHVtYk1ldGhvZEludm9jYXRpb25zPUR1bWJNZXRob2RJbnZvY2F0aW9uc3x0cnVlCitkZXRlY3RvckR1bWJNZXRob2RzPUR1bWJNZXRob2RzfHRydWUKK2RldGVjdG9yRHVwbGljYXRlQnJhbmNoZXM9RHVwbGljYXRlQnJhbmNoZXN8dHJ1ZQorZGV0ZWN0b3JFbXB0eVppcEZpbGVFbnRyeT1FbXB0eVppcEZpbGVFbnRyeXx0cnVlCitkZXRlY3RvckVxdWFsc09wZXJhbmRTaG91bGRIYXZlQ2xhc3NDb21wYXRpYmxlV2l0aFRoaXM9RXF1YWxzT3BlcmFuZFNob3VsZEhhdmVDbGFzc0NvbXBhdGlibGVXaXRoVGhpc3x0cnVlCitkZXRlY3RvckZpbmFsaXplck51bGxzRmllbGRzPUZpbmFsaXplck51bGxzRmllbGRzfHRydWUKK2RldGVjdG9yRmluZEJhZENhc3QyPUZpbmRCYWRDYXN0Mnx0cnVlCitkZXRlY3RvckZpbmRCYWRGb3JMb29wPUZpbmRCYWRGb3JMb29wfHRydWUKK2RldGVjdG9yRmluZENpcmN1bGFyRGVwZW5kZW5jaWVzPUZpbmRDaXJjdWxhckRlcGVuZGVuY2llc3xmYWxzZQorZGV0ZWN0b3JGaW5kRGVhZExvY2FsU3RvcmVzPUZpbmREZWFkTG9jYWxTdG9yZXN8dHJ1ZQorZGV0ZWN0b3JGaW5kRG91YmxlQ2hlY2s9RmluZERvdWJsZUNoZWNrfHRydWUKK2RldGVjdG9yRmluZEVtcHR5U3luY2hyb25pemVkQmxvY2s9RmluZEVtcHR5U3luY2hyb25pemVkQmxvY2t8dHJ1ZQorZGV0ZWN0b3JGaW5kRmllbGRTZWxmQXNzaWdubWVudD1GaW5kRmllbGRTZWxmQXNzaWdubWVudHx0cnVlCitkZXRlY3RvckZpbmRGaW5hbGl6ZUludm9jYXRpb25zPUZpbmRGaW5hbGl6ZUludm9jYXRpb25zfHRydWUKK2RldGVjdG9yRmluZEZsb2F0RXF1YWxpdHk9RmluZEZsb2F0RXF1YWxpdHl8dHJ1ZQorZGV0ZWN0b3JGaW5kSEVtaXNtYXRjaD1GaW5kSEVtaXNtYXRjaHx0cnVlCitkZXRlY3RvckZpbmRJbmNvbnNpc3RlbnRTeW5jMj1GaW5kSW5jb25zaXN0ZW50U3luYzJ8dHJ1ZQorZGV0ZWN0b3JGaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcj1GaW5kSlNSMTY2TG9ja01vbml0b3JlbnRlcnx0cnVlCitkZXRlY3RvckZpbmRMb2NhbFNlbGZBc3NpZ25tZW50Mj1GaW5kTG9jYWxTZWxmQXNzaWdubWVudDJ8dHJ1ZQorZGV0ZWN0b3JGaW5kTWFza2VkRmllbGRzPUZpbmRNYXNrZWRGaWVsZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeT1GaW5kTWlzbWF0Y2hlZFdhaXRPck5vdGlmeXx0cnVlCitkZXRlY3RvckZpbmROYWtlZE5vdGlmeT1GaW5kTmFrZWROb3RpZnl8dHJ1ZQorZGV0ZWN0b3JGaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbj1GaW5kTm9uU2VyaWFsaXphYmxlU3RvcmVJbnRvU2Vzc2lvbnx0cnVlCitkZXRlY3RvckZpbmROb25TZXJpYWxpemFibGVWYWx1ZVBhc3NlZFRvV3JpdGVPYmplY3Q9RmluZE5vblNlcmlhbGl6YWJsZVZhbHVlUGFzc2VkVG9Xcml0ZU9iamVjdHx0cnVlCitkZXRlY3RvckZpbmROb25TaG9ydENpcmN1aXQ9RmluZE5vblNob3J0Q2lyY3VpdHx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWY9RmluZE51bGxEZXJlZnx0cnVlCitkZXRlY3RvckZpbmROdWxsRGVyZWZzSW52b2x2aW5nTm9uU2hvcnRDaXJjdWl0RXZhbHVhdGlvbj1GaW5kTnVsbERlcmVmc0ludm9sdmluZ05vblNob3J0Q2lyY3VpdEV2YWx1YXRpb258dHJ1ZQorZGV0ZWN0b3JGaW5kT3BlblN0cmVhbT1GaW5kT3BlblN0cmVhbXx0cnVlCitkZXRlY3RvckZpbmRQdXp6bGVycz1GaW5kUHV6emxlcnN8dHJ1ZQorZGV0ZWN0b3JGaW5kUmVmQ29tcGFyaXNvbj1GaW5kUmVmQ29tcGFyaXNvbnx0cnVlCitkZXRlY3RvckZpbmRSZXR1cm5SZWY9RmluZFJldHVyblJlZnx0cnVlCitkZXRlY3RvckZpbmRSdW5JbnZvY2F0aW9ucz1GaW5kUnVuSW52b2NhdGlvbnN8dHJ1ZQorZGV0ZWN0b3JGaW5kU2VsZkNvbXBhcmlzb249RmluZFNlbGZDb21wYXJpc29ufHRydWUKK2RldGVjdG9yRmluZFNlbGZDb21wYXJpc29uMj1GaW5kU2VsZkNvbXBhcmlzb24yfHRydWUKK2RldGVjdG9yRmluZFNsZWVwV2l0aExvY2tIZWxkPUZpbmRTbGVlcFdpdGhMb2NrSGVsZHx0cnVlCitkZXRlY3RvckZpbmRTcGluTG9vcD1GaW5kU3Bpbkxvb3B8dHJ1ZQorZGV0ZWN0b3JGaW5kU3FsSW5qZWN0aW9uPUZpbmRTcWxJbmplY3Rpb258dHJ1ZQorZGV0ZWN0b3JGaW5kVHdvTG9ja1dhaXQ9RmluZFR3b0xvY2tXYWl0fHRydWUKK2RldGVjdG9yRmluZFVuY2FsbGVkUHJpdmF0ZU1ldGhvZHM9RmluZFVuY2FsbGVkUHJpdmF0ZU1ldGhvZHN8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5jb25kaXRpb25hbFdhaXQ9RmluZFVuY29uZGl0aW9uYWxXYWl0fHRydWUKK2RldGVjdG9yRmluZFVuaW5pdGlhbGl6ZWRHZXQ9RmluZFVuaW5pdGlhbGl6ZWRHZXR8dHJ1ZQorZGV0ZWN0b3JGaW5kVW5yZWxhdGVkVHlwZXNJbkdlbmVyaWNDb250YWluZXI9RmluZFVucmVsYXRlZFR5cGVzSW5HZW5lcmljQ29udGFpbmVyfHRydWUKK2RldGVjdG9yRmluZFVucmVsZWFzZWRMb2NrPUZpbmRVbnJlbGVhc2VkTG9ja3x0cnVlCitkZXRlY3RvckZpbmRVbnNhdGlzZmllZE9ibGlnYXRpb249RmluZFVuc2F0aXNmaWVkT2JsaWdhdGlvbnx0cnVlCitkZXRlY3RvckZpbmRVbnN5bmNHZXQ9RmluZFVuc3luY0dldHx0cnVlCitkZXRlY3RvckZpbmRVc2VsZXNzQ29udHJvbEZsb3c9RmluZFVzZWxlc3NDb250cm9sRmxvd3x0cnVlCitkZXRlY3RvckZvcm1hdFN0cmluZ0NoZWNrZXI9Rm9ybWF0U3RyaW5nQ2hlY2tlcnx0cnVlCitkZXRlY3Rvckh1Z2VTaGFyZWRTdHJpbmdDb25zdGFudHM9SHVnZVNoYXJlZFN0cmluZ0NvbnN0YW50c3x0cnVlCitkZXRlY3RvcklEaXZSZXN1bHRDYXN0VG9Eb3VibGU9SURpdlJlc3VsdENhc3RUb0RvdWJsZXx0cnVlCitkZXRlY3RvckluY29tcGF0TWFzaz1JbmNvbXBhdE1hc2t8dHJ1ZQorZGV0ZWN0b3JJbmNvbnNpc3RlbnRBbm5vdGF0aW9ucz1JbmNvbnNpc3RlbnRBbm5vdGF0aW9uc3x0cnVlCitkZXRlY3RvckluZWZmaWNpZW50TWVtYmVyQWNjZXNzPUluZWZmaWNpZW50TWVtYmVyQWNjZXNzfGZhbHNlCitkZXRlY3RvckluZWZmaWNpZW50VG9BcnJheT1JbmVmZmljaWVudFRvQXJyYXl8dHJ1ZQorZGV0ZWN0b3JJbmZpbml0ZUxvb3A9SW5maW5pdGVMb29wfHRydWUKK2RldGVjdG9ySW5maW5pdGVSZWN1cnNpdmVMb29wPUluZmluaXRlUmVjdXJzaXZlTG9vcHx0cnVlCitkZXRlY3RvckluZmluaXRlUmVjdXJzaXZlTG9vcDI9SW5maW5pdGVSZWN1cnNpdmVMb29wMnxmYWxzZQorZGV0ZWN0b3JJbmhlcml0YW5jZVVuc2FmZUdldFJlc291cmNlPUluaGVyaXRhbmNlVW5zYWZlR2V0UmVzb3VyY2V8dHJ1ZQorZGV0ZWN0b3JJbml0aWFsaXphdGlvbkNoYWluPUluaXRpYWxpemF0aW9uQ2hhaW58dHJ1ZQorZGV0ZWN0b3JJbnN0YW50aWF0ZVN0YXRpY0NsYXNzPUluc3RhbnRpYXRlU3RhdGljQ2xhc3N8dHJ1ZQorZGV0ZWN0b3JJbnZhbGlkSlVuaXRUZXN0PUludmFsaWRKVW5pdFRlc3R8dHJ1ZQorZGV0ZWN0b3JJdGVyYXRvcklkaW9tcz1JdGVyYXRvcklkaW9tc3x0cnVlCitkZXRlY3RvckxhenlJbml0PUxhenlJbml0fHRydWUKK2RldGVjdG9yTG9hZE9mS25vd25OdWxsVmFsdWU9TG9hZE9mS25vd25OdWxsVmFsdWV8dHJ1ZQorZGV0ZWN0b3JNZXRob2RSZXR1cm5DaGVjaz1NZXRob2RSZXR1cm5DaGVja3x0cnVlCitkZXRlY3Rvck11bHRpdGhyZWFkZWRJbnN0YW5jZUFjY2Vzcz1NdWx0aXRocmVhZGVkSW5zdGFuY2VBY2Nlc3N8dHJ1ZQorZGV0ZWN0b3JNdXRhYmxlTG9jaz1NdXRhYmxlTG9ja3x0cnVlCitkZXRlY3Rvck11dGFibGVTdGF0aWNGaWVsZHM9TXV0YWJsZVN0YXRpY0ZpZWxkc3x0cnVlCitkZXRlY3Rvck5hbWluZz1OYW1pbmd8dHJ1ZQorZGV0ZWN0b3JOdW1iZXJDb25zdHJ1Y3Rvcj1OdW1iZXJDb25zdHJ1Y3Rvcnx0cnVlCitkZXRlY3Rvck92ZXJyaWRpbmdFcXVhbHNOb3RTeW1tZXRyaWNhbD1PdmVycmlkaW5nRXF1YWxzTm90U3ltbWV0cmljYWx8dHJ1ZQorZGV0ZWN0b3JQcmVmZXJaZXJvTGVuZ3RoQXJyYXlzPVByZWZlclplcm9MZW5ndGhBcnJheXN8dHJ1ZQorZGV0ZWN0b3JQdWJsaWNTZW1hcGhvcmVzPVB1YmxpY1NlbWFwaG9yZXN8ZmFsc2UKK2RldGVjdG9yUXVlc3Rpb25hYmxlQm9vbGVhbkFzc2lnbm1lbnQ9UXVlc3Rpb25hYmxlQm9vbGVhbkFzc2lnbm1lbnR8dHJ1ZQorZGV0ZWN0b3JSZWFkUmV0dXJuU2hvdWxkQmVDaGVja2VkPVJlYWRSZXR1cm5TaG91bGRCZUNoZWNrZWR8dHJ1ZQorZGV0ZWN0b3JSZWR1bmRhbnRJbnRlcmZhY2VzPVJlZHVuZGFudEludGVyZmFjZXN8dHJ1ZQorZGV0ZWN0b3JSZXBlYXRlZENvbmRpdGlvbmFscz1SZXBlYXRlZENvbmRpdGlvbmFsc3x0cnVlCitkZXRlY3RvclJ1bnRpbWVFeGNlcHRpb25DYXB0dXJlPVJ1bnRpbWVFeGNlcHRpb25DYXB0dXJlfHRydWUKK2RldGVjdG9yU2VyaWFsaXphYmxlSWRpb209U2VyaWFsaXphYmxlSWRpb218dHJ1ZQorZGV0ZWN0b3JTdGFydEluQ29uc3RydWN0b3I9U3RhcnRJbkNvbnN0cnVjdG9yfHRydWUKK2RldGVjdG9yU3RhdGljQ2FsZW5kYXJEZXRlY3Rvcj1TdGF0aWNDYWxlbmRhckRldGVjdG9yfHRydWUKK2RldGVjdG9yU3RyaW5nQ29uY2F0ZW5hdGlvbj1TdHJpbmdDb25jYXRlbmF0aW9ufHRydWUKK2RldGVjdG9yU3VwZXJmbHVvdXNJbnN0YW5jZU9mPVN1cGVyZmx1b3VzSW5zdGFuY2VPZnx0cnVlCitkZXRlY3RvclN1c3BpY2lvdXNUaHJlYWRJbnRlcnJ1cHRlZD1TdXNwaWNpb3VzVGhyZWFkSW50ZXJydXB0ZWR8dHJ1ZQorZGV0ZWN0b3JTd2l0Y2hGYWxsdGhyb3VnaD1Td2l0Y2hGYWxsdGhyb3VnaHx0cnVlCitkZXRlY3RvclN5bmNocm9uaXplQW5kTnVsbENoZWNrRmllbGQ9U3luY2hyb25pemVBbmROdWxsQ2hlY2tGaWVsZHx0cnVlCitkZXRlY3RvclN5bmNocm9uaXplT25DbGFzc0xpdGVyYWxOb3RHZXRDbGFzcz1TeW5jaHJvbml6ZU9uQ2xhc3NMaXRlcmFsTm90R2V0Q2xhc3N8dHJ1ZQorZGV0ZWN0b3JTeW5jaHJvbml6aW5nT25Db250ZW50c09mRmllbGRUb1Byb3RlY3RGaWVsZD1TeW5jaHJvbml6aW5nT25Db250ZW50c09mRmllbGRUb1Byb3RlY3RGaWVsZHx0cnVlCitkZXRlY3RvclVSTFByb2JsZW1zPVVSTFByb2JsZW1zfHRydWUKK2RldGVjdG9yVW5jYWxsYWJsZU1ldGhvZE9mQW5vbnltb3VzQ2xhc3M9VW5jYWxsYWJsZU1ldGhvZE9mQW5vbnltb3VzQ2xhc3N8dHJ1ZQorZGV0ZWN0b3JVbm5lY2Vzc2FyeU1hdGg9VW5uZWNlc3NhcnlNYXRofHRydWUKK2RldGVjdG9yVW5yZWFkRmllbGRzPVVucmVhZEZpZWxkc3x0cnVlCitkZXRlY3RvclVzZU9iamVjdEVxdWFscz1Vc2VPYmplY3RFcXVhbHN8ZmFsc2UKK2RldGVjdG9yVXNlbGVzc1N1YmNsYXNzTWV0aG9kPVVzZWxlc3NTdWJjbGFzc01ldGhvZHxmYWxzZQorZGV0ZWN0b3JWYXJBcmdzUHJvYmxlbXM9VmFyQXJnc1Byb2JsZW1zfHRydWUKK2RldGVjdG9yVm9sYXRpbGVVc2FnZT1Wb2xhdGlsZVVzYWdlfHRydWUKK2RldGVjdG9yV2FpdEluTG9vcD1XYWl0SW5Mb29wfHRydWUKK2RldGVjdG9yV3JvbmdNYXBJdGVyYXRvcj1Xcm9uZ01hcEl0ZXJhdG9yfHRydWUKK2RldGVjdG9yWE1MRmFjdG9yeUJ5cGFzcz1YTUxGYWN0b3J5QnlwYXNzfHRydWUKK2RldGVjdG9yX3RocmVzaG9sZD0yCitlZmZvcnQ9ZGVmYXVsdAorZXhjbHVkZWZpbHRlcjA9ZmluZEJ1Z3MvRmluZEJ1Z3NFeGNsdWRlRmlsdGVyLnhtbAorZmlsdGVyX3NldHRpbmdzPU1lZGl1bXxCQURfUFJBQ1RJQ0UsQ09SUkVDVE5FU1MsTVRfQ09SUkVDVE5FU1MsUEVSRk9STUFOQ0UsU1RZTEV8ZmFsc2UKK2ZpbHRlcl9zZXR0aW5nc19uZWc9TUFMSUNJT1VTX0NPREUsTk9JU0UsSTE4TixTRUNVUklUWSxFWFBFUklNRU5UQUx8CitydW5fYXRfZnVsbF9idWlsZD10cnVlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uZ2l0aWdub3JlIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzRlMGUwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDIgQEAKKy9iaW4KKy90YXJnZXQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLy5wcm9qZWN0IGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliZWVjMQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5wcm9qZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9uYW1lPgorCTxjb21tZW50PjwvY29tbWVudD4KKwk8cHJvamVjdHM+CisJPC9wcm9qZWN0cz4KKwk8YnVpbGRTcGVjPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLmFwaUFuYWx5c2lzTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmMjZjMAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpAQCAtMCwwICsxLDIgQEAKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZy88cHJvamVjdD49VVRGLTgKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMGFkMjIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCkBAIC0wLDAgKzEsMiBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2xpbmUuc2VwYXJhdG9yPVxuCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzOWQxNgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMCwwICsxLDM5OCBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24uaW5oZXJpdE51bGxBbm5vdGF0aW9ucz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5taXNzaW5nTm9uTnVsbEJ5RGVmYXVsdEFubm90YXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5hbm5vdGF0aW9uLm5vbm51bGw9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTm9uTnVsbAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuYW5ub3RhdGlvbi5ub25udWxsYnlkZWZhdWx0PW9yZy5lY2xpcHNlLmpkdC5hbm5vdGF0aW9uLk5vbk51bGxCeURlZmF1bHQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubnVsbGFibGU9b3JnLmVjbGlwc2UuamR0LmFubm90YXRpb24uTnVsbGFibGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmFubm90YXRpb24ubnVsbGFuYWx5c2lzPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4ubWV0aG9kUGFyYW1ldGVycz1kbyBub3QgZ2VuZXJhdGUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS43CitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmNvbXBhcmluZ0lkZW50aWNhbD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZWFkQ29kZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZXhwbGljaXRseUNsb3NlZEF1dG9DbG9zZWFibGU9aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhbGx0aHJvdWdoQ2FzZT13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZhdGFsT3B0aW9uYWxFcnJvcj1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jbHVkZU51bGxJbmZvRnJvbUFzc2VydHM9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZWZhdWx0Q2FzZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRW51bUNhc2VEZXNwaXRlRGVmYXVsdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSGFzaENvZGVNZXRob2Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wcm90ZWN0ZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdEZXNjcmlwdGlvbj1yZXR1cm5fdGFnCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NNZXRob2RUeXBlUGFyYW1ldGVycz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uRm9ySW50ZXJmYWNlTWV0aG9kSW1wbGVtZW50YXRpb249ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTeW5jaHJvbml6ZWRPbkluaGVyaXRlZE1ldGhvZD1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25udWxsUGFyYW1ldGVyQW5ub3RhdGlvbkRyb3BwZWQ9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5udWxsQW5ub3RhdGlvbkluZmVyZW5jZUNvbmZsaWN0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm51bGxSZWZlcmVuY2U9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFNwZWNWaW9sYXRpb249ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubnVsbFVuY2hlY2tlZENvbnZlcnNpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wYXJhbWV0ZXJBc3NpZ25tZW50PWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3RlbnRpYWxOdWxsUmVmZXJlbmNlPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG90ZW50aWFsbHlVbmNsb3NlZENsb3NlYWJsZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmF3VHlwZVJlZmVyZW5jZT1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucmVkdW5kYW50TnVsbEFubm90YXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnROdWxsQ2hlY2s9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTcGVjaWZpY2F0aW9uT2ZUeXBlQXJndW1lbnRzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZWR1bmRhbnRTdXBlcmludGVyZmFjZT1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZXBvcnRNZXRob2RDYW5CZVBvdGVudGlhbGx5U3RhdGljPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5yZXBvcnRNZXRob2RDYW5CZVN0YXRpYz1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzT3B0aW9uYWxFcnJvcnM9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRhY3RpY051bGxBbmFseXNpc0ZvckZpZWxkcz1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmF2b2lkYWJsZUdlbmVyaWNUeXBlUHJvYmxlbXM9ZW5hYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jbG9zZWRDbG9zZWFibGU9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj13YXJuaW5nCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uRXhlbXB0RXhjZXB0aW9uQW5kVGhyb3dhYmxlPWVuYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25JbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZE9iamVjdEFsbG9jYXRpb249d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9d2FybmluZworb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJJbmNsdWRlRG9jQ29tbWVudFJlZmVyZW5jZT1lbmFibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkVHlwZVBhcmFtZXRlcj1pZ25vcmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkV2FybmluZ1Rva2VuPXdhcm5pbmcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9ZXJyb3IKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjcKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbl90eXBlX21lbWJlcnNfb25fY29sdW1ucz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2Fubm90YXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfYXJndW1lbnRzX2luX2VudW1fY29uc3RhbnQ9MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9leHBsaWNpdF9jb25zdHJ1Y3Rvcl9jYWxsPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hcmd1bWVudHNfaW5fbWV0aG9kX2ludm9jYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2FyZ3VtZW50c19pbl9xdWFsaWZpZWRfYWxsb2NhdGlvbl9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9hc3NpZ25tZW50PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX2JpbmFyeV9leHByZXNzaW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb21wYWN0X2lmPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9jb25kaXRpb25hbF9leHByZXNzaW9uPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9lbnVtX2NvbnN0YW50cz0wCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9leHByZXNzaW9uc19pbl9hcnJheV9pbml0aWFsaXplcj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX211bHRpcGxlX2ZpZWxkcz0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfcGFyYW1ldGVyc19pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3Jlc291cmNlc19pbl90cnk9ODAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3NlbGVjdG9yX2luX21ldGhvZF9pbnZvY2F0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmNsYXNzX2luX3R5cGVfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3N1cGVyaW50ZXJmYWNlc19pbl9lbnVtX2RlY2xhcmF0aW9uPTE2CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYWxpZ25tZW50X2Zvcl9zdXBlcmludGVyZmFjZXNfaW5fdHlwZV9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmFsaWdubWVudF9mb3JfdGhyb3dzX2NsYXVzZV9pbl9tZXRob2RfZGVjbGFyYXRpb249MTYKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5hbGlnbm1lbnRfZm9yX3VuaW9uX3R5cGVfaW5fbXVsdGljYXRjaD0xNgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX2ltcG9ydHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2FmdGVyX3BhY2thZ2U9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9maWVsZD0xCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYmxhbmtfbGluZXNfYmVmb3JlX2ZpcnN0X2NsYXNzX2JvZHlfZGVjbGFyYXRpb249MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9pbXBvcnRzPTEKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZWZvcmVfbWVtYmVyX3R5cGU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9tZXRob2Q9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9uZXdfY2h1bms9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JlZm9yZV9wYWNrYWdlPTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5ibGFua19saW5lc19iZXR3ZWVuX2ltcG9ydF9ncm91cHM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJsYW5rX2xpbmVzX2JldHdlZW5fdHlwZV9kZWNsYXJhdGlvbnM9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9hbm5vdGF0aW9uX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYXJyYXlfaW5pdGlhbGl6ZXI9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2s9ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfYmxvY2tfaW5fY2FzZT1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl9lbnVtX2NvbnN0YW50PWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX2VudW1fZGVjbGFyYXRpb249ZW5kX29mX2xpbmUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5icmFjZV9wb3NpdGlvbl9mb3JfbWV0aG9kX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuYnJhY2VfcG9zaXRpb25fZm9yX3N3aXRjaD1lbmRfb2ZfbGluZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmJyYWNlX3Bvc2l0aW9uX2Zvcl90eXBlX2RlY2xhcmF0aW9uPWVuZF9vZl9saW5lCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5jbGVhcl9ibGFua19saW5lcz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5fYmxvY2tfY29tbWVudD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuY2xlYXJfYmxhbmtfbGluZXNfaW5famF2YWRvY19jb21tZW50PWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5mb3JtYXRfYmxvY2tfY29tbWVudHM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuZm9ybWF0X2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9oZWFkZXI9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9odG1sPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9qYXZhZG9jX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9saW5lX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmZvcm1hdF9zb3VyY2VfY29kZT10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbmRlbnRfcGFyYW1ldGVyX2Rlc2NyaXB0aW9uPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmluZGVudF9yb290X3RhZ3M9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbW1lbnQuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9yb290X3RhZ3M9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5pbnNlcnRfbmV3X2xpbmVfZm9yX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LmxpbmVfbGVuZ3RoPTgwCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfYmxvY2tfYm91bmRhcmllcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29tbWVudC5uZXdfbGluZXNfYXRfamF2YWRvY19ib3VuZGFyaWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb21tZW50LnByZXNlcnZlX3doaXRlX3NwYWNlX2JldHdlZW5fY29kZV9hbmRfbGluZV9jb21tZW50cz1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmNvbXBhY3RfZWxzZV9pZj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuY29udGludWF0aW9uX2luZGVudGF0aW9uPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5jb250aW51YXRpb25faW5kZW50YXRpb25fZm9yX2FycmF5X2luaXRpYWxpemVyPTIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5kaXNhYmxpbmdfdGFnPUBmb3JtYXR0ZXJcOm9mZgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmVuYWJsaW5nX3RhZz1AZm9ybWF0dGVyXDpvbgorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmZvcm1hdF9ndWFyZGlhbl9jbGF1c2Vfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5mb3JtYXRfbGluZV9jb21tZW50X3N0YXJ0aW5nX29uX2ZpcnN0X2NvbHVtbj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fYW5ub3RhdGlvbl9kZWNsYXJhdGlvbl9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9ib2R5X2RlY2xhcmF0aW9uc19jb21wYXJlX3RvX2VudW1fY29uc3RhbnRfaGVhZGVyPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfYm9keV9kZWNsYXJhdGlvbnNfY29tcGFyZV90b19lbnVtX2RlY2xhcmF0aW9uX2hlYWRlcj10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2JvZHlfZGVjbGFyYXRpb25zX2NvbXBhcmVfdG9fdHlwZV9oZWFkZXI9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudF9icmVha3NfY29tcGFyZV90b19jYXNlcz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X2VtcHR5X2xpbmVzPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ibG9jaz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5kZW50X3N0YXRlbWVudHNfY29tcGFyZV90b19ib2R5PXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX2Nhc2VzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbmRlbnRfc3dpdGNoc3RhdGVtZW50c19jb21wYXJlX3RvX3N3aXRjaD1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluZGVudGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2ZpZWxkPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX2xvY2FsX3ZhcmlhYmxlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9hbm5vdGF0aW9uX29uX21lbWJlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9tZXRob2Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fcGFja2FnZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfYW5ub3RhdGlvbl9vbl9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2FmdGVyX2Fubm90YXRpb25fb25fdHlwZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYWZ0ZXJfbGFiZWw9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYXRfZW5kX29mX2ZpbGVfaWZfbWlzc2luZz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2JlZm9yZV9jYXRjaF9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX2Nsb3NpbmdfYnJhY2VfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZWxzZV9pbl9pZl9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9iZWZvcmVfZmluYWxseV9pbl90cnlfc3RhdGVtZW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfYmVmb3JlX3doaWxlX2luX2RvX3N0YXRlbWVudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fubm90YXRpb25fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X2Fub255bW91c190eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9uZXdfbGluZV9pbl9lbXB0eV9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9jb25zdGFudD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfZW51bV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfbmV3X2xpbmVfaW5fZW1wdHlfbWV0aG9kX2JvZHk9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X25ld19saW5lX2luX2VtcHR5X3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2FuZF9pbl90eXBlX3BhcmFtZXRlcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXNzaWdubWVudF9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfYXRfaW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2F0X2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2JpbmFyeV9vcGVyYXRvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX2JyYWNlX2luX2Jsb2NrPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jbG9zaW5nX3BhcmVuX2luX2Nhc3Q9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Fzc2VydD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY2FzZT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbG9uX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2FsbG9jYXRpb25fZXhwcmVzc2lvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYW5ub3RhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uX3Rocm93cz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2VudW1fZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9leHBsaWNpdGNvbnN0cnVjdG9yY2FsbF9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9mb3JfaW5pdHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX21ldGhvZF9kZWNsYXJhdGlvbl9wYXJhbWV0ZXJzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9tZXRob2RfaW52b2NhdGlvbl9hcmd1bWVudHM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX211bHRpcGxlX2ZpZWxkX2RlY2xhcmF0aW9ucz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9wYXJhbWV0ZXJpemVkX3R5cGVfcmVmZXJlbmNlPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl9zdXBlcmludGVyZmFjZXM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9jb21tYV9pbl90eXBlX3BhcmFtZXRlcnM9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX2VsbGlwc2lzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fYW5ub3RhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2FzdD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9lbnVtX2NvbnN0YW50PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX2lmPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9tZXRob2RfZGVjbGFyYXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3N3aXRjaD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX29wZW5pbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfb3BlbmluZ19wYXJlbl9pbl90cnk9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9vcGVuaW5nX3BhcmVuX2luX3doaWxlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYWZ0ZXJfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3ByZWZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3F1ZXN0aW9uX2luX2NvbmRpdGlvbmFsPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl9mb3I9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2FmdGVyX3NlbWljb2xvbl9pbl90cnlfcmVzb3VyY2VzPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9hZnRlcl91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hbmRfaW5fdHlwZV9wYXJhbWV0ZXI9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9hc3NpZ25tZW50X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYXRfaW5fYW5ub3RhdGlvbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfYmluYXJ5X29wZXJhdG9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19hbmdsZV9icmFja2V0X2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYW5nbGVfYnJhY2tldF9pbl90eXBlX3BhcmFtZXRlcnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFjZV9pbl9hcnJheV9pbml0aWFsaXplcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfYnJhY2tldF9pbl9hcnJheV9hbGxvY2F0aW9uX2V4cHJlc3Npb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19icmFja2V0X2luX2FycmF5X3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jYXN0PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fY2F0Y2g9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX2VudW1fY29uc3RhbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9mb3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY2xvc2luZ19wYXJlbl9pbl9pZj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jbG9zaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3dpdGNoPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fc3luY2hyb25pemVkPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fdHJ5PWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2Nsb3NpbmdfcGFyZW5faW5fd2hpbGU9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fYXNzZXJ0PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fY2FzZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb2xvbl9pbl9jb25kaXRpb25hbD1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbG9uX2luX2RlZmF1bHQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fZm9yPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29sb25faW5fbGFiZWxlZF9zdGF0ZW1lbnQ9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fYXJyYXlfaW5pdGlhbGl6ZXI9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9jb25zdHJ1Y3Rvcl9kZWNsYXJhdGlvbl90aHJvd3M9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9jb25zdGFudF9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZW51bV9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fZXhwbGljaXRjb25zdHJ1Y3RvcmNhbGxfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbmNyZW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX2Zvcl9pbml0cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tZXRob2RfZGVjbGFyYXRpb25fdGhyb3dzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX21ldGhvZF9pbnZvY2F0aW9uX2FyZ3VtZW50cz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9jb21tYV9pbl9tdWx0aXBsZV9maWVsZF9kZWNsYXJhdGlvbnM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fbXVsdGlwbGVfbG9jYWxfZGVjbGFyYXRpb25zPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3BhcmFtZXRlcml6ZWRfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfY29tbWFfaW5fc3VwZXJpbnRlcmZhY2VzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfYXJndW1lbnRzPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX2NvbW1hX2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9lbGxpcHNpcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fcGFyYW1ldGVyaXplZF90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2FuZ2xlX2JyYWNrZXRfaW5fdHlwZV9hcmd1bWVudHM9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19hbmdsZV9icmFja2V0X2luX3R5cGVfcGFyYW1ldGVycz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2Fubm90YXRpb25fdHlwZV9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fYW5vbnltb3VzX3R5cGVfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2FycmF5X2luaXRpYWxpemVyPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl9ibG9jaz1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fY29uc3RydWN0b3JfZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fY29uc3RhbnQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX2VudW1fZGVjbGFyYXRpb249aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNlX2luX21ldGhvZF9kZWNsYXJhdGlvbj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2VfaW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFjZV9pbl90eXBlX2RlY2xhcmF0aW9uPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19icmFja2V0X2luX2FycmF5X2FsbG9jYXRpb25fZXhwcmVzc2lvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX2JyYWNrZXRfaW5fYXJyYXlfcmVmZXJlbmNlPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfYnJhY2tldF9pbl9hcnJheV90eXBlX3JlZmVyZW5jZT1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Fubm90YXRpb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9hbm5vdGF0aW9uX3R5cGVfbWVtYmVyX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fY2F0Y2g9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX2Zvcj1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5faWY9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fcGFyZW50aGVzaXplZF9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fc3dpdGNoPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfb3BlbmluZ19wYXJlbl9pbl9zeW5jaHJvbml6ZWQ9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9vcGVuaW5nX3BhcmVuX2luX3RyeT1pbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmVmb3JlX29wZW5pbmdfcGFyZW5faW5fd2hpbGU9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wYXJlbnRoZXNpemVkX2V4cHJlc3Npb25faW5fcmV0dXJuPWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcGFyZW50aGVzaXplZF9leHByZXNzaW9uX2luX3Rocm93PWluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcG9zdGZpeF9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9wcmVmaXhfb3BlcmF0b3I9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfcXVlc3Rpb25faW5fY29uZGl0aW9uYWw9aW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9xdWVzdGlvbl9pbl93aWxkY2FyZD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb249ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZWZvcmVfc2VtaWNvbG9uX2luX2Zvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV9zZW1pY29sb25faW5fdHJ5X3Jlc291cmNlcz1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JlZm9yZV91bmFyeV9vcGVyYXRvcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fYnJhY2tldHNfaW5fYXJyYXlfdHlwZV9yZWZlcmVuY2U9ZG8gbm90IGluc2VydAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmluc2VydF9zcGFjZV9iZXR3ZWVuX2VtcHR5X2JyYWNlc19pbl9hcnJheV9pbml0aWFsaXplcj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfYnJhY2tldHNfaW5fYXJyYXlfYWxsb2NhdGlvbl9leHByZXNzaW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fYW5ub3RhdGlvbl90eXBlX21lbWJlcl9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX2NvbnN0cnVjdG9yX2RlY2xhcmF0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5pbnNlcnRfc3BhY2VfYmV0d2Vlbl9lbXB0eV9wYXJlbnNfaW5fZW51bV9jb25zdGFudD1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9kZWNsYXJhdGlvbj1kbyBub3QgaW5zZXJ0CitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIuaW5zZXJ0X3NwYWNlX2JldHdlZW5fZW1wdHlfcGFyZW5zX2luX21ldGhvZF9pbnZvY2F0aW9uPWRvIG5vdCBpbnNlcnQKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX2xpbmVzX2luX2NvbW1lbnRzPXRydWUKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5qb2luX3dyYXBwZWRfbGluZXM9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfZWxzZV9zdGF0ZW1lbnRfb25fc2FtZV9saW5lPWZhbHNlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIua2VlcF9lbXB0eV9hcnJheV9pbml0aWFsaXplcl9vbl9vbmVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmtlZXBfaW1wbGVfaWZfb25fb25lX2xpbmU9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5rZWVwX3RoZW5fc3RhdGVtZW50X29uX3NhbWVfbGluZT1mYWxzZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLmxpbmVTcGxpdD04MAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLm5ldmVyX2luZGVudF9ibG9ja19jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5uZXZlcl9pbmRlbnRfbGluZV9jb21tZW50c19vbl9maXJzdF9jb2x1bW49ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfYmxhbmtfbGluZXNfYXRfYmVnaW5uaW5nX29mX21ldGhvZF9ib2R5PTAKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci5udW1iZXJfb2ZfZW1wdHlfbGluZXNfdG9fcHJlc2VydmU9MQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnB1dF9lbXB0eV9zdGF0ZW1lbnRfb25fbmV3X2xpbmU9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnRhYnVsYXRpb24uY2hhcj10YWIKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci50YWJ1bGF0aW9uLnNpemU9NAorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLnVzZV9vbl9vZmZfdGFncz10cnVlCitvcmcuZWNsaXBzZS5qZHQuY29yZS5mb3JtYXR0ZXIudXNlX3RhYnNfb25seV9mb3JfbGVhZGluZ19pbmRlbnRhdGlvbnM9ZmFsc2UKK29yZy5lY2xpcHNlLmpkdC5jb3JlLmZvcm1hdHRlci53cmFwX2JlZm9yZV9iaW5hcnlfb3BlcmF0b3I9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfYmVmb3JlX29yX29wZXJhdG9yX211bHRpY2F0Y2g9dHJ1ZQorb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVyLndyYXBfb3V0ZXJfZXhwcmVzc2lvbnNfd2hlbl9uZXN0ZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMzNmNjZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKQEAgLTAsMCArMSw2MSBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VkaXRvcl9zYXZlX3BhcnRpY2lwYW50X29yZy5lY2xpcHNlLmpkdC51aS5wb3N0c2F2ZWxpc3RlbmVyLmNsZWFudXA9dHJ1ZQorZm9ybWF0dGVyX3Byb2ZpbGU9X0pHaXQgRm9ybWF0Citmb3JtYXR0ZXJfc2V0dGluZ3NfdmVyc2lvbj0xMgorb3JnLmVjbGlwc2UuamR0LnVpLmlnbm9yZWxvd2VyY2FzZW5hbWVzPXRydWUKK29yZy5lY2xpcHNlLmpkdC51aS5pbXBvcnRvcmRlcj1qYXZhO2phdmF4O29yZztjb207CitvcmcuZWNsaXBzZS5qZHQudWkub25kZW1hbmR0aHJlc2hvbGQ9OTkKK29yZy5lY2xpcHNlLmpkdC51aS5zdGF0aWNvbmRlbWFuZHRocmVzaG9sZD05OQorb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz48dGVtcGxhdGVzLz4KK3NwX2NsZWFudXAuYWRkX2RlZmF1bHRfc2VyaWFsX3ZlcnNpb25faWQ9dHJ1ZQorc3BfY2xlYW51cC5hZGRfZ2VuZXJhdGVkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2Fubm90YXRpb25zPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX2RlcHJlY2F0ZWRfYW5ub3RhdGlvbnM9dHJ1ZQorc3BfY2xlYW51cC5hZGRfbWlzc2luZ19tZXRob2RzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX25sc190YWdzPWZhbHNlCitzcF9jbGVhbnVwLmFkZF9taXNzaW5nX292ZXJyaWRlX2Fubm90YXRpb25zPXRydWUKK3NwX2NsZWFudXAuYWRkX21pc3Npbmdfb3ZlcnJpZGVfYW5ub3RhdGlvbnNfaW50ZXJmYWNlX21ldGhvZHM9ZmFsc2UKK3NwX2NsZWFudXAuYWRkX3NlcmlhbF92ZXJzaW9uX2lkPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfYmxvY2tzPXRydWUKK3NwX2NsZWFudXAuYWx3YXlzX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC5hbHdheXNfdXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmFsd2F5c191c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzPWZhbHNlCitzcF9jbGVhbnVwLmNvbnZlcnRfdG9fZW5oYW5jZWRfZm9yX2xvb3A9ZmFsc2UKK3NwX2NsZWFudXAuY29ycmVjdF9pbmRlbnRhdGlvbj1mYWxzZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGU9dHJ1ZQorc3BfY2xlYW51cC5mb3JtYXRfc291cmNlX2NvZGVfY2hhbmdlc19vbmx5PXRydWUKK3NwX2NsZWFudXAubWFrZV9sb2NhbF92YXJpYWJsZV9maW5hbD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3BhcmFtZXRlcnNfZmluYWw9ZmFsc2UKK3NwX2NsZWFudXAubWFrZV9wcml2YXRlX2ZpZWxkc19maW5hbD10cnVlCitzcF9jbGVhbnVwLm1ha2VfdHlwZV9hYnN0cmFjdF9pZl9taXNzaW5nX21ldGhvZD1mYWxzZQorc3BfY2xlYW51cC5tYWtlX3ZhcmlhYmxlX2RlY2xhcmF0aW9uc19maW5hbD1mYWxzZQorc3BfY2xlYW51cC5uZXZlcl91c2VfYmxvY2tzPWZhbHNlCitzcF9jbGVhbnVwLm5ldmVyX3VzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz10cnVlCitzcF9jbGVhbnVwLm9uX3NhdmVfdXNlX2FkZGl0aW9uYWxfYWN0aW9ucz10cnVlCitzcF9jbGVhbnVwLm9yZ2FuaXplX2ltcG9ydHM9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfZmllbGRfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfaW5zdGFuY2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPXRydWUKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWVtYmVyX2FjY2Vzc2VzX3Rocm91Z2hfc3VidHlwZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9dHJ1ZQorc3BfY2xlYW51cC5xdWFsaWZ5X3N0YXRpY19tZW1iZXJfYWNjZXNzZXNfd2l0aF9kZWNsYXJpbmdfY2xhc3M9ZmFsc2UKK3NwX2NsZWFudXAucXVhbGlmeV9zdGF0aWNfbWV0aG9kX2FjY2Vzc2VzX3dpdGhfZGVjbGFyaW5nX2NsYXNzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV9wcml2YXRlX2NvbnN0cnVjdG9ycz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV90cmFpbGluZ193aGl0ZXNwYWNlc19hbGw9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdHJhaWxpbmdfd2hpdGVzcGFjZXNfaWdub3JlX2VtcHR5PWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bm5lY2Vzc2FyeV9jYXN0cz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW5uZWNlc3NhcnlfbmxzX3RhZ3M9ZmFsc2UKK3NwX2NsZWFudXAucmVtb3ZlX3VudXNlZF9pbXBvcnRzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfbG9jYWxfdmFyaWFibGVzPWZhbHNlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV9maWVsZHM9dHJ1ZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5yZW1vdmVfdW51c2VkX3ByaXZhdGVfbWV0aG9kcz10cnVlCitzcF9jbGVhbnVwLnJlbW92ZV91bnVzZWRfcHJpdmF0ZV90eXBlcz10cnVlCitzcF9jbGVhbnVwLnNvcnRfbWVtYmVycz1mYWxzZQorc3BfY2xlYW51cC5zb3J0X21lbWJlcnNfYWxsPWZhbHNlCitzcF9jbGVhbnVwLnVzZV9ibG9ja3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX2Jsb2Nrc19vbmx5X2Zvcl9yZXR1cm5fYW5kX3Rocm93PWZhbHNlCitzcF9jbGVhbnVwLnVzZV9wYXJlbnRoZXNlc19pbl9leHByZXNzaW9ucz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19maWVsZF9hY2Nlc3M9ZmFsc2UKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfZmllbGRfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKK3NwX2NsZWFudXAudXNlX3RoaXNfZm9yX25vbl9zdGF0aWNfbWV0aG9kX2FjY2Vzcz1mYWxzZQorc3BfY2xlYW51cC51c2VfdGhpc19mb3Jfbm9uX3N0YXRpY19tZXRob2RfYWNjZXNzX29ubHlfaWZfbmVjZXNzYXJ5PXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGVjNGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Byb2plY3QucmVwb3NpdG9yeS5raW5kPWJ1Z3ppbGxhCitwcm9qZWN0LnJlcG9zaXRvcnkudXJsPWh0dHBzXDovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTdhMGYwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKQEAgLTAsMCArMSwyIEBACitjb21taXQuY29tbWVudC50ZW1wbGF0ZT0ke3Rhc2suZGVzY3JpcHRpb259IFxuXG5CdWdcOiAke3Rhc2sua2V5fQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5NGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUuYXBpLnRvb2xzLnByZWZzCkBAIC0wLDAgKzEsOTggQEAKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRF9XSVRIT1VUX0RFRkFVTFRfVkFMVUU9RXJyb3IKK0FOTk9UQVRJT05fRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitBTk5PVEFUSU9OX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQU5OT1RBVElPTl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9BUElfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9SRUVYUE9SVEVEX0FQSV9UWVBFPUVycm9yCitBUElfQ09NUE9ORU5UX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1JFRVhQT1JURURfVFlQRT1FcnJvcgorQVBJX0NPTVBPTkVOVF9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFPUVycm9yCitBUElfVVNFX1NDQU5fRklFTERfU0VWRVJJVFk9RXJyb3IKK0FQSV9VU0VfU0NBTl9NRVRIT0RfU0VWRVJJVFk9RXJyb3IKK0FQSV9VU0VfU0NBTl9UWVBFX1NFVkVSSVRZPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfTUVUSE9EPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfUkVTVFJJQ1RJT05TPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfREVDUkVBU0VfQUNDRVNTPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfQ0hBTkdFRF9OT05fQUJTVFJBQ1RfVE9fQUJTVFJBQ1Q9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX0NIQU5HRURfVFlQRV9DT05WRVJTSU9OPUVycm9yCitDTEFTU19FTEVNRU5UX1RZUEVfUkVNT1ZFRF9DT05TVFJVQ1RPUj1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfRklFTEQ9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfU1VQRVJDTEFTUz1FcnJvcgorQ0xBU1NfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0NMQVNTX0VMRU1FTlRfVFlQRV9SRU1PVkVEX1RZUEVfUEFSQU1FVEVSPUVycm9yCitDT05TVFJVQ1RPUl9FTEVNRU5UX1RZUEVfQURERURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0NPTlNUUlVDVE9SX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX0NIQU5HRURfVkFSQVJHU19UT19BUlJBWT1FcnJvcgorQ09OU1RSVUNUT1JfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK0VOVU1fRUxFTUVOVF9UWVBFX0NIQU5HRURfQ09OVFJBQ1RFRF9TVVBFUklOVEVSRkFDRVNfU0VUPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9FTlVNX0NPTlNUQU5UPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitFTlVNX0VMRU1FTlRfVFlQRV9SRU1PVkVEX01FVEhPRD1FcnJvcgorRU5VTV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX01FTUJFUj1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0FEREVEX1ZBTFVFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9ERUNSRUFTRV9BQ0NFU1M9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0ZJTkFMX1RPX05PTl9GSU5BTF9TVEFUSUNfQ09OU1RBTlQ9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX0NIQU5HRURfTk9OX1NUQVRJQ19UT19TVEFUSUM9RXJyb3IKK0ZJRUxEX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1NUQVRJQ19UT19OT05fU1RBVElDPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9UWVBFPUVycm9yCitGSUVMRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQUxVRT1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9BUkdVTUVOVD1FcnJvcgorRklFTERfRUxFTUVOVF9UWVBFX1JFTU9WRURfVkFMVUU9RXJyb3IKK0lMTEVHQUxfRVhURU5EPVdhcm5pbmcKK0lMTEVHQUxfSU1QTEVNRU5UPVdhcm5pbmcKK0lMTEVHQUxfSU5TVEFOVElBVEU9V2FybmluZworSUxMRUdBTF9PVkVSUklERT1XYXJuaW5nCitJTExFR0FMX1JFRkVSRU5DRT1XYXJuaW5nCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX0FEREVEX01FVEhPRD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9SRVNUUklDVElPTlM9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfQURERURfU1VQRVJfSU5URVJGQUNFX1dJVEhfTUVUSE9EUz1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NPTlRSQUNURURfU1VQRVJJTlRFUkZBQ0VTX1NFVD1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9DSEFOR0VEX1RZUEVfQ09OVkVSU0lPTj1FcnJvcgorSU5URVJGQUNFX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0ZJRUxEPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfTUVUSE9EPUVycm9yCitJTlRFUkZBQ0VfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9NRU1CRVI9RXJyb3IKK0lOVEVSRkFDRV9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorSU5WQUxJRF9BTk5PVEFUSU9OPUlnbm9yZQorSU5WQUxJRF9KQVZBRE9DX1RBRz1JZ25vcmUKK0lOVkFMSURfUkVGRVJFTkNFX0lOX1NZU1RFTV9MSUJSQVJJRVM9RXJyb3IKK0xFQUtfRVhURU5EPVdhcm5pbmcKK0xFQUtfRklFTERfREVDTD1XYXJuaW5nCitMRUFLX0lNUExFTUVOVD1XYXJuaW5nCitMRUFLX01FVEhPRF9QQVJBTT1XYXJuaW5nCitMRUFLX01FVEhPRF9SRVRVUk5fVFlQRT1XYXJuaW5nCitNRVRIT0RfRUxFTUVOVF9UWVBFX0FEREVEX1JFU1RSSUNUSU9OUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9BRERFRF9UWVBFX1BBUkFNRVRFUj1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0RFQ1JFQVNFX0FDQ0VTUz1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9BQlNUUkFDVF9UT19BQlNUUkFDVD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9GSU5BTF9UT19GSU5BTD1FcnJvcgorTUVUSE9EX0VMRU1FTlRfVFlQRV9DSEFOR0VEX05PTl9TVEFUSUNfVE9fU1RBVElDPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX0NIQU5HRURfU1RBVElDX1RPX05PTl9TVEFUSUM9RXJyb3IKK01FVEhPRF9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9WQVJBUkdTX1RPX0FSUkFZPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfQU5OT1RBVElPTl9ERUZBVUxUX1ZBTFVFPUVycm9yCitNRVRIT0RfRUxFTUVOVF9UWVBFX1JFTU9WRURfVFlQRV9QQVJBTUVURVI9RXJyb3IKK01JU1NJTkdfRUVfREVTQ1JJUFRJT05TPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQURERURfQ0xBU1NfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9BRERFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9DSEFOR0VEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfQ0hBTkdFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1RZUEVfUEFSQU1FVEVSX0VMRU1FTlRfVFlQRV9SRU1PVkVEX0NMQVNTX0JPVU5EPUVycm9yCitUWVBFX1BBUkFNRVRFUl9FTEVNRU5UX1RZUEVfUkVNT1ZFRF9JTlRFUkZBQ0VfQk9VTkQ9RXJyb3IKK1VOVVNFRF9QUk9CTEVNX0ZJTFRFUlM9V2FybmluZworYXV0b21hdGljYWxseV9yZW1vdmVkX3VudXNlZF9wcm9ibGVtX2ZpbHRlcnM9ZmFsc2UKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uPUVycm9yCitpbmNvbXBhdGlibGVfYXBpX2NvbXBvbmVudF92ZXJzaW9uX2luY2x1ZGVfbWFqb3Jfd2l0aG91dF9icmVha2luZ19jaGFuZ2U9RGlzYWJsZWQKK2luY29tcGF0aWJsZV9hcGlfY29tcG9uZW50X3ZlcnNpb25faW5jbHVkZV9taW5vcl93aXRob3V0X2FwaV9jaGFuZ2U9RGlzYWJsZWQKK2ludmFsaWRfc2luY2VfdGFnX3ZlcnNpb249RXJyb3IKK21hbGZvcm1lZF9zaW5jZV90YWc9RXJyb3IKK21pc3Npbmdfc2luY2VfdGFnPUVycm9yCityZXBvcnRfYXBpX2JyZWFrYWdlX3doZW5fbWFqb3JfdmVyc2lvbl9pbmNyZW1lbnRlZD1EaXNhYmxlZAorcmVwb3J0X3Jlc29sdXRpb25fZXJyb3JzX2FwaV9jb21wb25lbnQ9V2FybmluZwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5jb3JlLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyM2MzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLmNvcmUucHJlZnMKQEAgLTAsMCArMSwyIEBACitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorcmVzb2x2ZS5yZXF1aXJlYnVuZGxlPWZhbHNlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9CVUNLIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvQlVDSwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIzYTEwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvQlVDSwpAQCAtMCwwICsxLDE3IEBACitTUkNTID0gZ2xvYihbJ3NyYy8qKiddKQorUkVTT1VSQ0VTID0gZ2xvYihbJ3Jlc291cmNlcy8qKiddKQorCitqYXZhX2xpYnJhcnkoCisgIG5hbWUgPSAnamdpdC1sZnMnLAorICBzcmNzID0gU1JDUywKKyAgcmVzb3VyY2VzID0gUkVTT1VSQ0VTLAorICBkZXBzID0gWworICAgICcvL29yZy5lY2xpcHNlLmpnaXQ6amdpdCcKKyAgXSwKKyAgdmlzaWJpbGl0eSA9IFsnUFVCTElDJ10sCispCisKK2phdmFfc291cmNlcygKKyAgbmFtZSA9ICdqZ2l0LWxmc19zcmMnLAorICBzcmNzID0gU1JDUyArIFJFU09VUkNFUywKKykKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWExZmQ3YgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTUgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6ICVwbHVnaW5fbmFtZQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMKK0J1bmRsZS1WZXJzaW9uOiA0LjMuMC5xdWFsaWZpZXIKK0J1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgorQnVuZGxlLVZlbmRvcjogJXByb3ZpZGVyX25hbWUKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iNC4zLjAiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsO3ZlcnNpb249IjQuMy4wIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0IiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iNC4zLjAiCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNworSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvYWJvdXQuaHRtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzL2Fib3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIxZTYyZAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL2Fib3V0Lmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBib2R5IHsKKyAgICBzaXplOiA4LjVpbiAxMS4waW47CisgICAgbWFyZ2luOiAwLjI1aW4gMC41aW4gMC4yNWluIDAuNWluOworICAgIHRhYi1pbnRlcnZhbDogMC41aW47CisgICAgfQorICBwIHsKKyAgICBtYXJnaW4tbGVmdDogYXV0bzsKKyAgICBtYXJnaW4tdG9wOiAgMC41ZW07CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgICAgfQorICBwLmxpc3QgeworICAJbWFyZ2luLWxlZnQ6IDAuNWluOworICAgIG1hcmdpbi10b3A6ICAwLjA1ZW07CisgICAgbWFyZ2luLWJvdHRvbTogMC4wNWVtOworICAgIH0KKyAgPC9zdHlsZT4KKworPC9oZWFkPgorCis8Ym9keSBsYW5nPSJFTi1VUyI+CisKKzxwPjxiPkVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSB2IDEuMDwvYj48L3A+CisKKzxwPkNvcHlyaWdodCAoYykgMjAwNywgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgbGljZW5zb3JzLiA8L3A+CisKKzxwPkFsbCByaWdodHMgcmVzZXJ2ZWQuPC9wPgorPHA+UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKwlhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Cis8dWw+PGxpPlJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKwl0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiA8L2xpPgorPGxpPlJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKwl0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisJYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIDwvbGk+Cis8bGk+TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisJY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKwl0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiA8L2xpPjwvdWw+Cis8L3A+Cis8cD5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuPC9wPgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL2J1aWxkLnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxNDgyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9idWlsZC5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNyBAQAorc291cmNlLi4gPSBzcmMvLFwKKyAgICAgICAgICAgcmVzb3VyY2VzLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLixcCisgICAgICAgICAgICAgICBwbHVnaW4ucHJvcGVydGllcyxcCisgICAgICAgICAgICAgICBhYm91dC5odG1sCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9wbHVnaW4ucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3BsdWdpbi5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjJkZGIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9wbHVnaW4ucHJvcGVydGllcwpAQCAtMCwwICsxLDIgQEAKK3BsdWdpbl9uYW1lPUpHaXQgTGFyZ2UgRmlsZSBTdG9yYWdlCitwcm92aWRlcl9uYW1lPUVjbGlwc2UgSkdpdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlZTRjYQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwKQEAgLTAsMCArMSwxNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAgIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisKKyAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICAgYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICAgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAgIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgICBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgICBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKworPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIKKyAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgorICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgPHBhcmVudD4KKyAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjQuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8L3BhcmVudD4KKworICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmxmczwvYXJ0aWZhY3RJZD4KKyAgPG5hbWU+SkdpdCAtIExhcmdlIEZpbGUgU3RvcmFnZTwvbmFtZT4KKworICA8ZGVzY3JpcHRpb24+CisgICAgSkdpdCBMYXJnZSBGaWxlIFN0b3JhZ2UgKExGUykgaW1wbGVtZW50YXRpb24uCisgIDwvZGVzY3JpcHRpb24+CisKKyAgPHByb3BlcnRpZXM+CisgICAgPHRyYW5zbGF0ZS1xdWFsaWZpZXIvPgorICA8L3Byb3BlcnRpZXM+CisKKyAgPGRlcGVuZGVuY2llcz4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKyAgPC9kZXBlbmRlbmNpZXM+CisgIDxidWlsZD4KKyAgICA8c291cmNlRGlyZWN0b3J5PnNyYy88L3NvdXJjZURpcmVjdG9yeT4KKworICAgIDxyZXNvdXJjZXM+CisgICAgICA8cmVzb3VyY2U+CisgICAgICAgIDxkaXJlY3Rvcnk+LjwvZGlyZWN0b3J5PgorICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgPGluY2x1ZGU+cGx1Z2luLnByb3BlcnRpZXM8L2luY2x1ZGU+CisgICAgICAgICAgPGluY2x1ZGU+YWJvdXQuaHRtbDwvaW5jbHVkZT4KKyAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgIDwvcmVzb3VyY2U+CisgICAgICA8cmVzb3VyY2U+CisgICAgICAgIDxkaXJlY3Rvcnk+cmVzb3VyY2VzLzwvZGlyZWN0b3J5PgorICAgICAgPC9yZXNvdXJjZT4KKyAgICA8L3Jlc291cmNlcz4KKworICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8aW5oZXJpdGVkPnRydWU8L2luaGVyaXRlZD4KKyAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgIDxpZD5hdHRhY2gtc291cmNlczwvaWQ+CisgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy1jbGFzc2VzPC9waGFzZT4KKyAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgPGdvYWw+amFyPC9nb2FsPgorICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICA8YXJjaGl2ZT4KKyAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7c291cmNlLWJ1bmRsZS1tYW5pZmVzdH08L21hbmlmZXN0RmlsZT4KKyAgICAgICAgICAgICAgPC9hcmNoaXZlPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICA8L3BsdWdpbj4KKworICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPGFyY2hpdmU+CisgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YnVuZGxlLW1hbmlmZXN0fTwvbWFuaWZlc3RGaWxlPgorICAgICAgICAgIDwvYXJjaGl2ZT4KKyAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisKKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5jbGlyci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+CisKKyAgPHJlcG9ydGluZz4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5jbGlyci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPiR7Y2xpcnItdmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgIDxjb21wYXJpc29uVmVyc2lvbj4ke2pnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb259PC9jb21wYXJpc29uVmVyc2lvbj4KKyAgICAgICAgICA8bWluU2V2ZXJpdHk+aW5mbzwvbWluU2V2ZXJpdHk+CisgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9yZXBvcnRpbmc+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBlMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK2luY29ycmVjdExPTkdfT0JKRUNUX0lEX0xFTkdUSD1JbmNvcnJlY3QgTE9OR19PQkpFQ1RfSURfTEVOR1RILgoraW52YWxpZExvbmdJZD1JbnZhbGlkIGlkOiB7MH0KK2ludmFsaWRMb25nSWRMZW5ndGg9SW52YWxpZCBpZCBsZW5ndGggezB9OyBzaG91bGQgYmUgezF9CityZXF1aXJlZEhhc2hGdW5jdGlvbk5vdEF2YWlsYWJsZT1SZXF1aXJlZCBoYXNoIGZ1bmN0aW9uIHswfSBub3QgYXZhaWxhYmxlLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9lcnJvcnMvQ29ycnVwdExvbmdPYmplY3RFeGNlcHRpb24uamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9lcnJvcnMvQ29ycnVwdExvbmdPYmplY3RFeGNlcHRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWExNDhiCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9Db3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5BbnlMb25nT2JqZWN0SWQ7CisKKy8qKgorICogVGhyb3duIHdoZW4gYW4gb2JqZWN0IGlkIGlzIGdpdmVuIHRoYXQgZG9lc24ndCBtYXRjaCB0aGUgaGFzaCBvZiB0aGUgb2JqZWN0J3MKKyAqIGNvbnRlbnQKKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBjbGFzcyBDb3JydXB0TG9uZ09iamVjdEV4Y2VwdGlvbiBleHRlbmRzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworCXByaXZhdGUgZmluYWwgQW55TG9uZ09iamVjdElkIGlkOworCisJcHJpdmF0ZSBmaW5hbCBBbnlMb25nT2JqZWN0SWQgY29udGVudEhhc2g7CisKKwkvKioKKwkgKiBDb3JydXB0IGxvbmcgb2JqZWN0IGRldGVjdGVkLgorCSAqCisJICogQHBhcmFtIGlkCisJICogICAgICAgICAgICBpZCBvZiB0aGUgbG9uZyBvYmplY3QKKwkgKiBAcGFyYW0gY29udGVudEhhc2gKKwkgKiAgICAgICAgICAgIGhhc2ggb2YgdGhlIGxvbmcgb2JqZWN0J3MgY29udGVudAorCSAqCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKi8KKwlwdWJsaWMgQ29ycnVwdExvbmdPYmplY3RFeGNlcHRpb24oQW55TG9uZ09iamVjdElkIGlkLAorCQkJQW55TG9uZ09iamVjdElkIGNvbnRlbnRIYXNoLAorCQkJU3RyaW5nIG1lc3NhZ2UpIHsKKwkJc3VwZXIobWVzc2FnZSk7CisJCXRoaXMuaWQgPSBpZDsKKwkJdGhpcy5jb250ZW50SGFzaCA9IGNvbnRlbnRIYXNoOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGlkIG9mIHRoZSBvYmplY3QsIGkuZS4gdGhlIGV4cGVjdGVkIGhhc2ggb2YgdGhlIG9iamVjdCdzCisJICogICAgICAgICBjb250ZW50CisJICovCisJcHVibGljIEFueUxvbmdPYmplY3RJZCBnZXRJZCgpIHsKKwkJcmV0dXJuIGlkOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGFjdHVhbCBoYXNoIG9mIHRoZSBvYmplY3QncyBjb250ZW50IHdoaWNoIGRvZXNuJ3QgbWF0Y2ggdGhlCisJICogICAgICAgICBvYmplY3QncyBpZCB3aGVuIHRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGljaCBzaWduYWxzIHRoYXQgdGhlCisJICogICAgICAgICBvYmplY3QgaGFzIGJlZW4gY29ycnVwdGVkCisJICovCisJcHVibGljIEFueUxvbmdPYmplY3RJZCBnZXRDb250ZW50SGFzaCgpIHsKKwkJcmV0dXJuIGNvbnRlbnRIYXNoOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9lcnJvcnMvSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9JbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY2ZTJkMQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9lcnJvcnMvSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbi5qYXZhCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIEpvbmFzIEZvbnNlY2EgPGZvbnNlY2FAZGlrdS5kaz4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgUm9iaW4gUm9zZW5iZXJnIDxyb2Jpbi5yb3NlbmJlcmdAZGV3aXJlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzOworCitpbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWwuTGZzVGV4dDsKKworLyoqCisgKiBUaHJvd24gd2hlbiBhbiBpbnZhbGlkIGxvbmcgb2JqZWN0IGlkIGlzIHBhc3NlZCBpbiBhcyBhbiBhcmd1bWVudC4KKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBjbGFzcyBJbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uIGV4dGVuZHMgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworCS8qKgorCSAqIENyZWF0ZSBleGNlcHRpb24gd2l0aCBieXRlcyBvZiB0aGUgaW52YWxpZCBvYmplY3QgaWQuCisJICoKKwkgKiBAcGFyYW0gYnl0ZXMgY29udGFpbmluZyB0aGUgaW52YWxpZCBpZC4KKwkgKiBAcGFyYW0gb2Zmc2V0IGluIHRoZSBieXRlIGFycmF5IHdoZXJlIHRoZSBlcnJvciBvY2N1cnJlZC4KKwkgKiBAcGFyYW0gbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSBvZiBpbnZhbGlkIGJ5dGVzLgorCSAqLworCXB1YmxpYyBJbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uKGJ5dGVbXSBieXRlcywgaW50IG9mZnNldCwgaW50IGxlbmd0aCkgeworCQlzdXBlcihNZXNzYWdlRm9ybWF0LmZvcm1hdChMZnNUZXh0LmdldCgpLmludmFsaWRMb25nSWQsCisJCQkJYXNBc2NpaShieXRlcywgb2Zmc2V0LCBsZW5ndGgpKSk7CisJfQorCisJLyoqCisJICogQHBhcmFtIGlkU3RyaW5nCisJICogICAgICAgICAgICBTdHJpbmcgY29udGFpbmluZyB0aGUgaW52YWxpZCBpZAorCSAqLworCXB1YmxpYyBJbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uKFN0cmluZyBpZFN0cmluZykgeworCQlzdXBlcihNZXNzYWdlRm9ybWF0LmZvcm1hdChMZnNUZXh0LmdldCgpLmludmFsaWRMb25nSWQsIGlkU3RyaW5nKSk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGFzQXNjaWkoYnl0ZVtdIGJ5dGVzLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7CisJCXRyeSB7CisJCQlyZXR1cm4gIjogIiArIG5ldyBTdHJpbmcoYnl0ZXMsIG9mZnNldCwgbGVuZ3RoLCAiVVMtQVNDSUkiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCX0gY2F0Y2ggKFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gZTIpIHsKKwkJCXJldHVybiAiIjsgLy8kTk9OLU5MUy0xJAorCQl9IGNhdGNoIChTdHJpbmdJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUyKSB7CisJCQlyZXR1cm4gIiI7IC8vJE5PTi1OTFMtMSQKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZmZjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5qYXZhCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubmxzLk5MUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm5scy5UcmFuc2xhdGlvbkJ1bmRsZTsKKworLyoqCisgKiBUcmFuc2xhdGlvbiBidW5kbGUgZm9yIEpHaXQgTEZTIHNlcnZlcgorICovCitwdWJsaWMgY2xhc3MgTGZzVGV4dCBleHRlbmRzIFRyYW5zbGF0aW9uQnVuZGxlIHsKKworCS8qKgorCSAqIEByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgdGhpcyB0cmFuc2xhdGlvbiBidW5kbGUKKwkgKi8KKwlwdWJsaWMgc3RhdGljIExmc1RleHQgZ2V0KCkgeworCQlyZXR1cm4gTkxTLmdldEJ1bmRsZUZvcihMZnNUZXh0LmNsYXNzKTsKKwl9CisKKwkvLyBAZm9ybWF0dGVyOm9mZgorCS8qKiovIHB1YmxpYyBTdHJpbmcgaW5jb3JyZWN0TE9OR19PQkpFQ1RfSURfTEVOR1RIOworCS8qKiovIHB1YmxpYyBTdHJpbmcgaW52YWxpZExvbmdJZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRMb25nSWRMZW5ndGg7CisJLyoqKi8gcHVibGljIFN0cmluZyByZXF1aXJlZEhhc2hGdW5jdGlvbk5vdEF2YWlsYWJsZTsKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWViMGUzCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BYmJyZXZpYXRlZExvbmdPYmplY3RJZC5qYXZhCkBAIC0wLDAgKzEsMzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7CisKK2ltcG9ydCBqYXZhLmlvLlNlcmlhbGl6YWJsZTsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5JbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsLkxmc1RleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQWJicmV2aWF0ZWRPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BbnlPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuTkI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlJhd1BhcnNlVXRpbHM7CisKKy8qKgorICogQSBwcmVmaXggYWJicmV2aWF0aW9uIG9mIGFuIHtAbGluayBMb25nT2JqZWN0SWR9LgorICogPHA+CisgKiBFbmFibGUgYWJicmV2aWF0aW5nIFNIQS0yNTYgc3RyaW5ncyB1c2VkIGJ5IEdpdCBMRlMsIHVzaW5nIHN1ZmZpY2llbnQgbGVhZGluZworICogZGlnaXRzIGZyb20gdGhlIExvbmdPYmplY3RJZCBuYW1lIHRvIHN0aWxsIGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHJlcG9zaXRvcnkKKyAqIHRoZSBzdHJpbmcgd2FzIGdlbmVyYXRlZCBmcm9tLiBUaGVzZSBpZHMgYXJlIGxpa2VseSB0byBiZSB1bmlxdWUgZm9yIGEgdXNlZnVsCisgKiBwZXJpb2Qgb2YgdGltZSwgZXNwZWNpYWxseSBpZiB0aGV5IGNvbnRhaW4gYXQgbGVhc3QgNi0xMCBoZXggZGlnaXRzLgorICogPHA+CisgKiBUaGlzIGNsYXNzIGNvbnZlcnRzIHRoZSBoZXggc3RyaW5nIGludG8gYSBiaW5hcnkgZm9ybSwgdG8gbWFrZSBpdCBtb3JlCisgKiBlZmZpY2llbnQgZm9yIG1hdGNoaW5nIGFnYWluc3QgYW4gb2JqZWN0LgorICoKKyAqIFBvcnRlZCB0byBTSEEtMjU2IGZyb20ge0BsaW5rIEFiYnJldmlhdGVkT2JqZWN0SWR9CisgKgorICogQHNpbmNlIDQuMworICovCitwdWJsaWMgZmluYWwgY2xhc3MgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJLyoqCisJICogVGVzdCBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRvIHZlcmlmeSBpdCBpcyBhIGhleCBmb3JtYXQuCisJICogPHA+CisJICogSWYgdHJ1ZSB0aGUgc3RyaW5nIGNhbiBiZSBwYXJzZWQgd2l0aCB7QGxpbmsgI2Zyb21TdHJpbmcoU3RyaW5nKX0uCisJICoKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgdG8gdGVzdC4KKwkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBjYW4gY29udmVydGVkIGludG8gYW4gQWJicmV2aWF0ZWRPYmplY3RJZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gaXNJZChmaW5hbCBTdHJpbmcgaWQpIHsKKwkJaWYgKGlkLmxlbmd0aCgpIDwgMgorCQkJCXx8IENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIIDwgaWQubGVuZ3RoKCkpCisJCQlyZXR1cm4gZmFsc2U7CisJCXRyeSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGlkLmxlbmd0aCgpOyBpKyspCisJCQkJUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDQoKGJ5dGUpIGlkLmNoYXJBdChpKSk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfSBjYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCX0KKworCS8qKgorCSAqIENvbnZlcnQgYW4gQWJicmV2aWF0ZWRPYmplY3RJZCBmcm9tIGhleCBjaGFyYWN0ZXJzIChVUy1BU0NJSSkuCisJICoKKwkgKiBAcGFyYW0gYnVmCisJICogICAgICAgICAgICB0aGUgVVMtQVNDSUkgYnVmZmVyIHRvIHJlYWQgZnJvbS4KKwkgKiBAcGFyYW0gb2Zmc2V0CisJICogICAgICAgICAgICBwb3NpdGlvbiB0byByZWFkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbS4KKwkgKiBAcGFyYW0gZW5kCisJICogICAgICAgICAgICBvbmUgcGFzdCB0aGUgbGFzdCBwb3NpdGlvbiB0byByZWFkICg8Y29kZT5lbmQtb2Zmc2V0PC9jb2RlPiBpcworCSAqICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nKS4KKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgb2JqZWN0IGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgZnJvbVN0cmluZyhmaW5hbCBieXRlW10gYnVmLAorCQkJZmluYWwgaW50IG9mZnNldCwgZmluYWwgaW50IGVuZCkgeworCQlpZiAoZW5kIC0gb2Zmc2V0ID4gQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpCisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCUxmc1RleHQuZ2V0KCkuaW52YWxpZExvbmdJZExlbmd0aCwKKwkJCQkJSW50ZWdlci52YWx1ZU9mKGVuZCAtIG9mZnNldCksCisJCQkJCUludGVnZXIudmFsdWVPZihDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCkpKTsKKwkJcmV0dXJuIGZyb21IZXhTdHJpbmcoYnVmLCBvZmZzZXQsIGVuZCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBBYmJyZXZpYXRlZE9iamVjdElkIGZyb20gYW4ge0BsaW5rIEFueU9iamVjdElkfS4KKwkgKiA8cD4KKwkgKiBUaGlzIG1ldGhvZCBjb3BpZXMgb3ZlciBhbGwgYml0cyBvZiB0aGUgSWQsIGFuZCBpcyB0aGVyZWZvcmUgY29tcGxldGUKKwkgKiAoc2VlIHtAbGluayAjaXNDb21wbGV0ZSgpfSkuCisJICoKKwkgKiBAcGFyYW0gaWQKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgT2JqZWN0SWR9IHRvIGNvbnZlcnQgZnJvbS4KKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgb2JqZWN0IGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgZnJvbUxvbmdPYmplY3RJZCgKKwkJCUFueUxvbmdPYmplY3RJZCBpZCkgeworCQlyZXR1cm4gbmV3IEFiYnJldmlhdGVkTG9uZ09iamVjdElkKAorCQkJCUNvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RILCBpZC53MSwgaWQudzIsIGlkLnczLAorCQkJCWlkLnc0KTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGFuIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGZyb20gaGV4IGNoYXJhY3RlcnMuCisJICoKKwkgKiBAcGFyYW0gc3RyCisJICogICAgICAgICAgICB0aGUgc3RyaW5nIHRvIHJlYWQgZnJvbS4gTXVzdCBiZSAmbHQ7PSA2NCBjaGFyYWN0ZXJzLgorCSAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBvYmplY3QgaWQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBBYmJyZXZpYXRlZExvbmdPYmplY3RJZCBmcm9tU3RyaW5nKGZpbmFsIFN0cmluZyBzdHIpIHsKKwkJaWYgKHN0ci5sZW5ndGgoKSA+IENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKQorCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKwkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoTGZzVGV4dC5nZXQoKS5pbnZhbGlkTG9uZ0lkLCBzdHIpKTsKKwkJZmluYWwgYnl0ZVtdIGIgPSBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuZW5jb2RlQVNDSUkoc3RyKTsKKwkJcmV0dXJuIGZyb21IZXhTdHJpbmcoYiwgMCwgYi5sZW5ndGgpOworCX0KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGZyb21IZXhTdHJpbmcoZmluYWwgYnl0ZVtdIGJzLAorCQkJaW50IHB0ciwgZmluYWwgaW50IGVuZCkgeworCQl0cnkgeworCQkJZmluYWwgbG9uZyBhID0gaGV4VUludDY0KGJzLCBwdHIsIGVuZCk7CisJCQlmaW5hbCBsb25nIGIgPSBoZXhVSW50NjQoYnMsIHB0ciArIDE2LCBlbmQpOworCQkJZmluYWwgbG9uZyBjID0gaGV4VUludDY0KGJzLCBwdHIgKyAzMiwgZW5kKTsKKwkJCWZpbmFsIGxvbmcgZCA9IGhleFVJbnQ2NChicywgcHRyICsgNDgsIGVuZCk7CisJCQlyZXR1cm4gbmV3IEFiYnJldmlhdGVkTG9uZ09iamVjdElkKGVuZCAtIHB0ciwgYSwgYiwgYywgZCk7CisJCX0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlMSkgeworCQkJdGhyb3cgbmV3IEludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24oYnMsIHB0ciwgZW5kIC0gcHRyKTsKKwkJfQorCX0KKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgaGV4VUludDY0KGZpbmFsIGJ5dGVbXSBicywgaW50IHAsIGZpbmFsIGludCBlbmQpIHsKKwkJaWYgKDE2IDw9IGVuZCAtIHApCisJCQlyZXR1cm4gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDY0KGJzLCBwKTsKKworCQlsb25nIHIgPSAwOworCQlpbnQgbiA9IDA7CisJCXdoaWxlIChuIDwgMTYgJiYgcCA8IGVuZCkgeworCQkJciA8PD0gNDsKKwkJCXIgfD0gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDQoYnNbcCsrXSk7CisJCQluKys7CisJCX0KKwkJcmV0dXJuIHIgPDwgKDE2IC0gbikgKiA0OworCX0KKworCXN0YXRpYyBsb25nIG1hc2soZmluYWwgaW50IG5pYmJsZXMsIGZpbmFsIGxvbmcgd29yZCwgZmluYWwgbG9uZyB2KSB7CisJCWZpbmFsIGxvbmcgYiA9ICh3b3JkIC0gMSkgKiAxNjsKKwkJaWYgKGIgKyAxNiA8PSBuaWJibGVzKSB7CisJCQkvLyBXZSBoYXZlIGFsbCBvZiB0aGUgYml0cyByZXF1aXJlZCBmb3IgdGhpcyB3b3JkLgorCQkJLy8KKwkJCXJldHVybiB2OworCQl9CisKKwkJaWYgKG5pYmJsZXMgPD0gYikgeworCQkJLy8gV2UgaGF2ZSBub25lIG9mIHRoZSBiaXRzIHJlcXVpcmVkIGZvciB0aGlzIHdvcmQuCisJCQkvLworCQkJcmV0dXJuIDA7CisJCX0KKworCQlmaW5hbCBsb25nIHMgPSA2NCAtIChuaWJibGVzIC0gYikgKiA0OworCQlyZXR1cm4gKHYgPj4+IHMpIDw8IHM7CisJfQorCisJLyoqIE51bWJlciBvZiBoYWxmLWJ5dGVzIHVzZWQgYnkgdGhpcyBpZC4gKi8KKwlmaW5hbCBpbnQgbmliYmxlczsKKworCWZpbmFsIGxvbmcgdzE7CisKKwlmaW5hbCBsb25nIHcyOworCisJZmluYWwgbG9uZyB3MzsKKworCWZpbmFsIGxvbmcgdzQ7CisKKwlBYmJyZXZpYXRlZExvbmdPYmplY3RJZChmaW5hbCBpbnQgbiwgZmluYWwgbG9uZyBuZXdfMSwgZmluYWwgbG9uZyBuZXdfMiwKKwkJCWZpbmFsIGxvbmcgbmV3XzMsIGZpbmFsIGxvbmcgbmV3XzQpIHsKKwkJbmliYmxlcyA9IG47CisJCXcxID0gbmV3XzE7CisJCXcyID0gbmV3XzI7CisJCXczID0gbmV3XzM7CisJCXc0ID0gbmV3XzQ7CisJfQorCisJLyoqIEByZXR1cm4gbnVtYmVyIG9mIGhleCBkaWdpdHMgYXBwZWFyaW5nIGluIHRoaXMgaWQgKi8KKwlwdWJsaWMgaW50IGxlbmd0aCgpIHsKKwkJcmV0dXJuIG5pYmJsZXM7CisJfQorCisJLyoqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIE9iamVjdElkIGlzIGFjdHVhbGx5IGEgY29tcGxldGUgaWQuICovCisJcHVibGljIGJvb2xlYW4gaXNDb21wbGV0ZSgpIHsKKwkJcmV0dXJuIGxlbmd0aCgpID09IENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIOworCX0KKworCS8qKiBAcmV0dXJuIGEgY29tcGxldGUgT2JqZWN0SWQ7IG51bGwgaWYge0BsaW5rICNpc0NvbXBsZXRlKCl9IGlzIGZhbHNlICovCisJcHVibGljIExvbmdPYmplY3RJZCB0b0xvbmdPYmplY3RJZCgpIHsKKwkJcmV0dXJuIGlzQ29tcGxldGUoKSA/IG5ldyBMb25nT2JqZWN0SWQodzEsIHcyLCB3MywgdzQpIDogbnVsbDsKKwl9CisKKwkvKioKKwkgKiBDb21wYXJlcyB0aGlzIGFiYnJldmlhdGlvbiB0byBhIGZ1bGwgb2JqZWN0IGlkLgorCSAqCisJICogQHBhcmFtIG90aGVyCisJICogICAgICAgICAgICB0aGUgb3RoZXIgb2JqZWN0IGlkLgorCSAqIEByZXR1cm4gJmx0OzAgaWYgdGhpcyBhYmJyZXZpYXRpb24gbmFtZXMgYW4gb2JqZWN0IHRoYXQgaXMgbGVzcyB0aGFuCisJICogICAgICAgICA8Y29kZT5vdGhlcjwvY29kZT47IDAgaWYgdGhpcyBhYmJyZXZpYXRpb24gZXhhY3RseSBtYXRjaGVzIHRoZQorCSAqICAgICAgICAgZmlyc3Qge0BsaW5rICNsZW5ndGgoKX0gZGlnaXRzIG9mIDxjb2RlPm90aGVyLm5hbWUoKTwvY29kZT47CisJICogICAgICAgICAmZ3Q7MCBpZiB0aGlzIGFiYnJldmlhdGlvbiBuYW1lcyBhbiBvYmplY3QgdGhhdCBpcyBhZnRlcgorCSAqICAgICAgICAgPGNvZGU+b3RoZXI8L2NvZGU+LgorCSAqLworCXB1YmxpYyBmaW5hbCBpbnQgcHJlZml4Q29tcGFyZShmaW5hbCBBbnlMb25nT2JqZWN0SWQgb3RoZXIpIHsKKwkJaW50IGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcxLCBtYXNrKDEsIG90aGVyLncxKSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MiwgbWFzaygyLCBvdGhlci53MikpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzMsIG1hc2soMywgb3RoZXIudzMpKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQlyZXR1cm4gTkIuY29tcGFyZVVJbnQ2NCh3NCwgbWFzayg0LCBvdGhlci53NCkpOworCX0KKworCS8qKgorCSAqIENvbXBhcmUgdGhpcyBhYmJyZXZpYXRpb24gdG8gYSBuZXR3b3JrLWJ5dGUtb3JkZXIgTG9uZ09iamVjdElkLgorCSAqCisJICogQHBhcmFtIGJzCisJICogICAgICAgICAgICBhcnJheSBjb250YWluaW5nIHRoZSBvdGhlciBMb25nT2JqZWN0SWQgaW4gbmV0d29yayBieXRlIG9yZGVyLgorCSAqIEBwYXJhbSBwCisJICogICAgICAgICAgICBwb3NpdGlvbiB3aXRoaW4ge0Bjb2RlIGJzfSB0byBzdGFydCB0aGUgY29tcGFyZSBhdC4gQXQgbGVhc3QKKwkgKiAgICAgICAgICAgIDMyIGJ5dGVzLCBzdGFydGluZyBhdCB0aGlzIHBvc2l0aW9uIGFyZSByZXF1aXJlZC4KKwkgKiBAcmV0dXJuICZsdDswIGlmIHRoaXMgYWJicmV2aWF0aW9uIG5hbWVzIGFuIG9iamVjdCB0aGF0IGlzIGxlc3MgdGhhbgorCSAqICAgICAgICAgPGNvZGU+b3RoZXI8L2NvZGU+OyAwIGlmIHRoaXMgYWJicmV2aWF0aW9uIGV4YWN0bHkgbWF0Y2hlcyB0aGUKKwkgKiAgICAgICAgIGZpcnN0IHtAbGluayAjbGVuZ3RoKCl9IGRpZ2l0cyBvZiA8Y29kZT5vdGhlci5uYW1lKCk8L2NvZGU+OworCSAqICAgICAgICAgJmd0OzAgaWYgdGhpcyBhYmJyZXZpYXRpb24gbmFtZXMgYW4gb2JqZWN0IHRoYXQgaXMgYWZ0ZXIKKwkgKiAgICAgICAgIDxjb2RlPm90aGVyPC9jb2RlPi4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IHByZWZpeENvbXBhcmUoZmluYWwgYnl0ZVtdIGJzLCBmaW5hbCBpbnQgcCkgeworCQlpbnQgY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzEsIG1hc2soMSwgTkIuZGVjb2RlSW50NjQoYnMsIHApKSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MiwgbWFzaygyLCBOQi5kZWNvZGVJbnQ2NChicywgcCArIDgpKSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MywgbWFzaygzLCBOQi5kZWNvZGVJbnQ2NChicywgcCArIDE2KSkpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCXJldHVybiBOQi5jb21wYXJlVUludDY0KHc0LCBtYXNrKDQsIE5CLmRlY29kZUludDY0KGJzLCBwICsgMjQpKSk7CisJfQorCisJLyoqCisJICogQ29tcGFyZSB0aGlzIGFiYnJldmlhdGlvbiB0byBhIG5ldHdvcmstYnl0ZS1vcmRlciBMb25nT2JqZWN0SWQuCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIGFycmF5IGNvbnRhaW5pbmcgdGhlIG90aGVyIExvbmdPYmplY3RJZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisJICogQHBhcmFtIHAKKwkgKiAgICAgICAgICAgIHBvc2l0aW9uIHdpdGhpbiB7QGNvZGUgYnN9IHRvIHN0YXJ0IHRoZSBjb21wYXJlIGF0LiBBdCBsZWFzdCA0CisJICogICAgICAgICAgICBsb25ncywgc3RhcnRpbmcgYXQgdGhpcyBwb3NpdGlvbiBhcmUgcmVxdWlyZWQuCisJICogQHJldHVybiAmbHQ7MCBpZiB0aGlzIGFiYnJldmlhdGlvbiBuYW1lcyBhbiBvYmplY3QgdGhhdCBpcyBsZXNzIHRoYW4KKwkgKiAgICAgICAgIDxjb2RlPm90aGVyPC9jb2RlPjsgMCBpZiB0aGlzIGFiYnJldmlhdGlvbiBleGFjdGx5IG1hdGNoZXMgdGhlCisJICogICAgICAgICBmaXJzdCB7QGxpbmsgI2xlbmd0aCgpfSBkaWdpdHMgb2YgPGNvZGU+b3RoZXIubmFtZSgpPC9jb2RlPjsKKwkgKiAgICAgICAgICZndDswIGlmIHRoaXMgYWJicmV2aWF0aW9uIG5hbWVzIGFuIG9iamVjdCB0aGF0IGlzIGFmdGVyCisJICogICAgICAgICA8Y29kZT5vdGhlcjwvY29kZT4uCisJICovCisJcHVibGljIGZpbmFsIGludCBwcmVmaXhDb21wYXJlKGZpbmFsIGxvbmdbXSBicywgZmluYWwgaW50IHApIHsKKwkJaW50IGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcxLCBtYXNrKDEsIGJzW3BdKSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MiwgbWFzaygyLCBic1twICsgMV0pKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHczLCBtYXNrKDMsIGJzW3AgKyAyXSkpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCXJldHVybiBOQi5jb21wYXJlVUludDY0KHc0LCBtYXNrKDQsIGJzW3AgKyAzXSkpOworCX0KKworCS8qKiBAcmV0dXJuIHZhbHVlIGZvciBhIGZhbi1vdXQgc3R5bGUgbWFwLCBvbmx5IHZhbGlkIG9mIGxlbmd0aCAmZ3Q7PSAyLiAqLworCXB1YmxpYyBmaW5hbCBpbnQgZ2V0Rmlyc3RCeXRlKCkgeworCQlyZXR1cm4gKGludCkgKHcxID4+PiA1Nik7CisJfQorCisJcHJpdmF0ZSBsb25nIG1hc2soZmluYWwgbG9uZyB3b3JkLCBmaW5hbCBsb25nIHYpIHsKKwkJcmV0dXJuIG1hc2sobmliYmxlcywgd29yZCwgdik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGludCBoYXNoQ29kZSgpIHsKKwkJcmV0dXJuIChpbnQpICh3MSA+PiAzMik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIE9iamVjdCBvKSB7CisJCWlmIChvIGluc3RhbmNlb2YgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQpIHsKKwkJCWZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGIgPSAoQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQpIG87CisJCQlyZXR1cm4gbmliYmxlcyA9PSBiLm5pYmJsZXMgJiYgdzEgPT0gYi53MSAmJiB3MiA9PSBiLncyCisJCQkJCSYmIHczID09IGIudzMgJiYgdzQgPT0gYi53NDsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQHJldHVybiBzdHJpbmcgZm9ybSBvZiB0aGUgYWJicmV2aWF0aW9uLCBpbiBsb3dlciBjYXNlIGhleGFkZWNpbWFsLgorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZSgpIHsKKwkJZmluYWwgY2hhcltdIGIgPSBuZXcgY2hhcltDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSF07CisKKwkJQW55TG9uZ09iamVjdElkLmZvcm1hdEhleENoYXIoYiwgMCwgdzEpOworCQlpZiAobmliYmxlcyA8PSAxNikKKwkJCXJldHVybiBuZXcgU3RyaW5nKGIsIDAsIG5pYmJsZXMpOworCisJCUFueUxvbmdPYmplY3RJZC5mb3JtYXRIZXhDaGFyKGIsIDE2LCB3Mik7CisJCWlmIChuaWJibGVzIDw9IDMyKQorCQkJcmV0dXJuIG5ldyBTdHJpbmcoYiwgMCwgbmliYmxlcyk7CisKKwkJQW55TG9uZ09iamVjdElkLmZvcm1hdEhleENoYXIoYiwgMzIsIHczKTsKKwkJaWYgKG5pYmJsZXMgPD0gNDgpCisJCQlyZXR1cm4gbmV3IFN0cmluZyhiLCAwLCBuaWJibGVzKTsKKworCQlBbnlMb25nT2JqZWN0SWQuZm9ybWF0SGV4Q2hhcihiLCA0OCwgdzQpOworCQlyZXR1cm4gbmV3IFN0cmluZyhiLCAwLCBuaWJibGVzKTsKKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworCQlyZXR1cm4gIkFiYnJldmlhdGVkTG9uZ09iamVjdElkWyIgKyBuYW1lKCkgKyAiXSI7IC8vJE5PTi1OTFMtMSQKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0FueUxvbmdPYmplY3RJZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BbnlMb25nT2JqZWN0SWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjBkZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9BbnlMb25nT2JqZWN0SWQuamF2YQpAQCAtMCwwICsxLDU1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMubGliOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLldyaXRlcjsKK2ltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQW55T2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0UmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5OQjsKKworLyoqCisgKiBBIChwb3NzaWJseSBtdXRhYmxlKSBTSEEtMjU2IGFic3RyYWN0aW9uLgorICogPHA+CisgKiBJZiB0aGlzIGlzIGFuIGluc3RhbmNlIG9mIHtAbGluayBNdXRhYmxlTG9uZ09iamVjdElkfSB0aGUgY29uY2VwdCBvZiBlcXVhbGl0eQorICogd2l0aCB0aGlzIGluc3RhbmNlIGNhbiBhbHRlciBhdCBhbnkgdGltZSwgaWYgdGhpcyBpbnN0YW5jZSBpcyBtb2RpZmllZCB0bworICogcmVwcmVzZW50IGEgZGlmZmVyZW50IG9iamVjdCBuYW1lLgorICoKKyAqIFBvcnRlZCB0byBTSEEtMjU2IGZyb20ge0BsaW5rIEFueU9iamVjdElkfQorICoKKyAqIEBzaW5jZSA0LjMKKyAqLworcHVibGljIGFic3RyYWN0IGNsYXNzIEFueUxvbmdPYmplY3RJZCBpbXBsZW1lbnRzIENvbXBhcmFibGU8QW55TG9uZ09iamVjdElkPiB7CisKKwkvKioKKwkgKiBDb21wYXJlIHR3byBvYmplY3QgaWRlbnRpZmllciBieXRlIHNlcXVlbmNlcyBmb3IgZXF1YWxpdHkuCisJICoKKwkgKiBAcGFyYW0gZmlyc3RPYmplY3RJZAorCSAqICAgICAgICAgICAgdGhlIGZpcnN0IGlkZW50aWZpZXIgdG8gY29tcGFyZS4gTXVzdCBub3QgYmUgbnVsbC4KKwkgKiBAcGFyYW0gc2Vjb25kT2JqZWN0SWQKKwkgKiAgICAgICAgICAgIHRoZSBzZWNvbmQgaWRlbnRpZmllciB0byBjb21wYXJlLiBNdXN0IG5vdCBiZSBudWxsLgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdHdvIGlkZW50aWZpZXJzIGFyZSB0aGUgc2FtZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIEFueUxvbmdPYmplY3RJZCBmaXJzdE9iamVjdElkLAorCQkJZmluYWwgQW55TG9uZ09iamVjdElkIHNlY29uZE9iamVjdElkKSB7CisJCWlmIChmaXJzdE9iamVjdElkID09IHNlY29uZE9iamVjdElkKQorCQkJcmV0dXJuIHRydWU7CisKKwkJLy8gV2UgdGVzdCB3b3JkIDIgZmlyc3QgYXMgb2RkcyBhcmUgc29tZW9uZSBhbHJlYWR5IHVzZWQgb3VyCisJCS8vIHdvcmQgMSBhcyBhIGhhc2ggY29kZSwgYW5kIGFwcGx5aW5nIHRoYXQgY2FtZSB1cCB3aXRoIHRoZXNlCisJCS8vIHR3byBpbnN0YW5jZXMgd2UgYXJlIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkuIFRoZXJlZm9yZSB0aGUKKwkJLy8gZmlyc3QgdHdvIHdvcmRzIGFyZSB2ZXJ5IGxpa2VseSB0byBiZSBpZGVudGljYWwuIFdlIHdhbnQgdG8KKwkJLy8gYnJlYWsgYXdheSBmcm9tIGNvbGxpc2lvbnMgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS4KKwkJLy8KKwkJcmV0dXJuIGZpcnN0T2JqZWN0SWQudzIgPT0gc2Vjb25kT2JqZWN0SWQudzIKKwkJCQkmJiBmaXJzdE9iamVjdElkLnczID09IHNlY29uZE9iamVjdElkLnczCisJCQkJJiYgZmlyc3RPYmplY3RJZC53NCA9PSBzZWNvbmRPYmplY3RJZC53NAorCQkJCSYmIGZpcnN0T2JqZWN0SWQudzEgPT0gc2Vjb25kT2JqZWN0SWQudzE7CisJfQorCisJbG9uZyB3MTsKKworCWxvbmcgdzI7CisKKwlsb25nIHczOworCisJbG9uZyB3NDsKKworCS8qKgorCSAqIEdldCB0aGUgZmlyc3QgOCBiaXRzIG9mIHRoZSBMb25nT2JqZWN0SWQuCisJICoKKwkgKiBUaGlzIGlzIGEgZmFzdGVyIHZlcnNpb24gb2Yge0Bjb2RlIGdldEJ5dGUoMCl9LgorCSAqCisJICogQHJldHVybiBhIGRpc2NyaW1pbmF0b3IgdXNhYmxlIGZvciBhIGZhbi1vdXQgc3R5bGUgbWFwLiBSZXR1cm5lZCB2YWx1ZXMKKwkgKiAgICAgICAgIGFyZSB1bnNpZ25lZCBhbmQgdGh1cyBhcmUgaW4gdGhlIHJhbmdlIFswLDI1NV0gcmF0aGVyIHRoYW4gdGhlCisJICogICAgICAgICBzaWduZWQgYnl0ZSByYW5nZSBvZiBbLTEyOCwgMTI3XS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IGdldEZpcnN0Qnl0ZSgpIHsKKwkJcmV0dXJuIChpbnQpICh3MSA+Pj4gNTYpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgc2Vjb25kIDggYml0cyBvZiB0aGUgTG9uZ09iamVjdElkLgorCSAqCisJICogQHJldHVybiBhIGRpc2NyaW1pbmF0b3IgdXNhYmxlIGZvciBhIGZhbi1vdXQgc3R5bGUgbWFwLiBSZXR1cm5lZCB2YWx1ZXMKKwkgKiAgICAgICAgIGFyZSB1bnNpZ25lZCBhbmQgdGh1cyBhcmUgaW4gdGhlIHJhbmdlIFswLDI1NV0gcmF0aGVyIHRoYW4gdGhlCisJICogICAgICAgICBzaWduZWQgYnl0ZSByYW5nZSBvZiBbLTEyOCwgMTI3XS4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IGdldFNlY29uZEJ5dGUoKSB7CisJCXJldHVybiAoaW50KSAoKHcxID4+PiA0OCkgJiAweGZmKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgYW55IGJ5dGUgZnJvbSB0aGUgTG9uZ09iamVjdElkLgorCSAqCisJICogQ2FsbGVycyBoYXJkLWNvZGluZyB7QGNvZGUgZ2V0Qnl0ZSgwKX0gc2hvdWxkIGluc3RlYWQgdXNlIHRoZSBtdWNoIGZhc3RlcgorCSAqIHNwZWNpYWwgY2FzZSB2YXJpYW50IHtAbGluayAjZ2V0Rmlyc3RCeXRlKCl9LgorCSAqCisJICogQHBhcmFtIGluZGV4CisJICogICAgICAgICAgICBpbmRleCBvZiB0aGUgYnl0ZSB0byBvYnRhaW4gZnJvbSB0aGUgcmF3IGZvcm0gb2YgdGhlCisJICogICAgICAgICAgICBMb25nT2JqZWN0SWQuIE11c3QgYmUgaW4gcmFuZ2UgWzAsCisJICogICAgICAgICAgICB7QGxpbmsgQ29uc3RhbnRzI0xPTkdfT0JKRUNUX0lEX0xFTkdUSH0pLgorCSAqIEByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgYnl0ZSBhdCB7QGNvZGUgaW5kZXh9LiBSZXR1cm5lZCB2YWx1ZXMKKwkgKiAgICAgICAgIGFyZSB1bnNpZ25lZCBhbmQgdGh1cyBhcmUgaW4gdGhlIHJhbmdlIFswLDI1NV0gcmF0aGVyIHRoYW4gdGhlCisJICogICAgICAgICBzaWduZWQgYnl0ZSByYW5nZSBvZiBbLTEyOCwgMTI3XS4KKwkgKiBAdGhyb3dzIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIHtAY29kZSBpbmRleH0gaXMgbGVzcyB0aGFuIDAsIGVxdWFsIHRvCisJICogICAgICAgICAgICAge0BsaW5rIENvbnN0YW50cyNMT05HX09CSkVDVF9JRF9MRU5HVEh9LCBvciBncmVhdGVyIHRoYW4KKwkgKiAgICAgICAgICAgICB7QGxpbmsgQ29uc3RhbnRzI0xPTkdfT0JKRUNUX0lEX0xFTkdUSH0uCisJICovCisJcHVibGljIGZpbmFsIGludCBnZXRCeXRlKGludCBpbmRleCkgeworCQlsb25nIHc7CisJCXN3aXRjaCAoaW5kZXggPj4gMykgeworCQljYXNlIDA6CisJCQl3ID0gdzE7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdyA9IHcyOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXcgPSB3MzsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl3ID0gdzQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oaW5kZXgpOworCQl9CisKKwkJcmV0dXJuIChpbnQpICgodyA+Pj4gKDggKiAoMTUgLSAoaW5kZXggJiAxNSkpKSkgJiAweGZmKTsKKwl9CisKKwkvKioKKwkgKiBDb21wYXJlIHRoaXMgTG9uZ09iamVjdElkIHRvIGFub3RoZXIgYW5kIG9idGFpbiBhIHNvcnQgb3JkZXJpbmcuCisJICoKKwkgKiBAcGFyYW0gb3RoZXIKKwkgKiAgICAgICAgICAgIHRoZSBvdGhlciBpZCB0byBjb21wYXJlIHRvLiBNdXN0IG5vdCBiZSBudWxsLgorCSAqIEByZXR1cm4gJmx0OyAwIGlmIHRoaXMgaWQgY29tZXMgYmVmb3JlIG90aGVyOyAwIGlmIHRoaXMgaWQgaXMgZXF1YWwgdG8KKwkgKiAgICAgICAgIG90aGVyOyAmZ3Q7IDAgaWYgdGhpcyBpZCBjb21lcyBhZnRlciBvdGhlci4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IGNvbXBhcmVUbyhmaW5hbCBBbnlMb25nT2JqZWN0SWQgb3RoZXIpIHsKKwkJaWYgKHRoaXMgPT0gb3RoZXIpCisJCQlyZXR1cm4gMDsKKworCQlpbnQgY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzEsIG90aGVyLncxKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcyLCBvdGhlci53Mik7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3Mywgb3RoZXIudzMpOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCXJldHVybiBOQi5jb21wYXJlVUludDY0KHc0LCBvdGhlci53NCk7CisJfQorCisJLyoqCisJICogQ29tcGFyZSB0aGlzIExvbmdPYmplY3RJZCB0byBhIG5ldHdvcmstYnl0ZS1vcmRlciBMb25nT2JqZWN0SWQuCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIGFycmF5IGNvbnRhaW5pbmcgdGhlIG90aGVyIExvbmdPYmplY3RJZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisJICogQHBhcmFtIHAKKwkgKiAgICAgICAgICAgIHBvc2l0aW9uIHdpdGhpbiB7QGNvZGUgYnN9IHRvIHN0YXJ0IHRoZSBjb21wYXJlIGF0LiBBdCBsZWFzdAorCSAqICAgICAgICAgICAgMzIgYnl0ZXMsIHN0YXJ0aW5nIGF0IHRoaXMgcG9zaXRpb24gYXJlIHJlcXVpcmVkLgorCSAqIEByZXR1cm4gYSBuZWdhdGl2ZSBpbnRlZ2VyLCB6ZXJvLCBvciBhIHBvc2l0aXZlIGludGVnZXIgYXMgdGhpcyBvYmplY3QgaXMKKwkgKiAgICAgICAgIGxlc3MgdGhhbiwgZXF1YWwgdG8sIG9yIGdyZWF0ZXIgdGhhbiB0aGUgc3BlY2lmaWVkIG9iamVjdC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgaW50IGNvbXBhcmVUbyhmaW5hbCBieXRlW10gYnMsIGZpbmFsIGludCBwKSB7CisJCWludCBjbXA7CisKKwkJY21wID0gTkIuY29tcGFyZVVJbnQ2NCh3MSwgTkIuZGVjb2RlSW50NjQoYnMsIHApKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcyLCBOQi5kZWNvZGVJbnQ2NChicywgcCArIDgpKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHczLCBOQi5kZWNvZGVJbnQ2NChicywgcCArIDE2KSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJcmV0dXJuIE5CLmNvbXBhcmVVSW50NjQodzQsIE5CLmRlY29kZUludDY0KGJzLCBwICsgMjQpKTsKKwl9CisKKwkvKioKKwkgKiBDb21wYXJlIHRoaXMgTG9uZ09iamVjdElkIHRvIGEgbmV0d29yay1ieXRlLW9yZGVyIExvbmdPYmplY3RJZC4KKwkgKgorCSAqIEBwYXJhbSBicworCSAqICAgICAgICAgICAgYXJyYXkgY29udGFpbmluZyB0aGUgb3RoZXIgTG9uZ09iamVjdElkIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgcG9zaXRpb24gd2l0aGluIHtAY29kZSBic30gdG8gc3RhcnQgdGhlIGNvbXBhcmUgYXQuIEF0IGxlYXN0IDQKKwkgKiAgICAgICAgICAgIGxvbmdzLCBzdGFydGluZyBhdCB0aGlzIHBvc2l0aW9uIGFyZSByZXF1aXJlZC4KKwkgKiBAcmV0dXJuIGEgbmVnYXRpdmUgaW50ZWdlciwgemVybywgb3IgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFzIHRoaXMgb2JqZWN0IGlzCisJICogICAgICAgICBsZXNzIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCBvYmplY3QuCisJICovCisJcHVibGljIGZpbmFsIGludCBjb21wYXJlVG8oZmluYWwgbG9uZ1tdIGJzLCBmaW5hbCBpbnQgcCkgeworCQlpbnQgY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzEsIGJzW3BdKTsKKwkJaWYgKGNtcCAhPSAwKQorCQkJcmV0dXJuIGNtcDsKKworCQljbXAgPSBOQi5jb21wYXJlVUludDY0KHcyLCBic1twICsgMV0pOworCQlpZiAoY21wICE9IDApCisJCQlyZXR1cm4gY21wOworCisJCWNtcCA9IE5CLmNvbXBhcmVVSW50NjQodzMsIGJzW3AgKyAyXSk7CisJCWlmIChjbXAgIT0gMCkKKwkJCXJldHVybiBjbXA7CisKKwkJcmV0dXJuIE5CLmNvbXBhcmVVSW50NjQodzQsIGJzW3AgKyAzXSk7CisJfQorCisJLyoqCisJICogVGVzdHMgaWYgdGhpcyBMb25nT2JqZWN0SWQgc3RhcnRzIHdpdGggdGhlIGdpdmVuIGFiYnJldmlhdGlvbi4KKwkgKgorCSAqIEBwYXJhbSBhYmJyCisJICogICAgICAgICAgICB0aGUgYWJicmV2aWF0aW9uLgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIExvbmdPYmplY3RJZCBiZWdpbnMgd2l0aCB0aGUgYWJicmV2aWF0aW9uOyBlbHNlCisJICogICAgICAgICBmYWxzZS4KKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBzdGFydHNXaXRoKGZpbmFsIEFiYnJldmlhdGVkTG9uZ09iamVjdElkIGFiYnIpIHsKKwkJcmV0dXJuIGFiYnIucHJlZml4Q29tcGFyZSh0aGlzKSA9PSAwOworCX0KKworCXB1YmxpYyBmaW5hbCBpbnQgaGFzaENvZGUoKSB7CisJCXJldHVybiAoaW50KSAodzEgPj4gMzIpOworCX0KKworCS8qKgorCSAqIERldGVybWluZSBpZiB0aGlzIExvbmdPYmplY3RJZCBoYXMgZXhhY3RseSB0aGUgc2FtZSB2YWx1ZSBhcyBhbm90aGVyLgorCSAqCisJICogQHBhcmFtIG90aGVyCisJICogICAgICAgICAgICB0aGUgb3RoZXIgaWQgdG8gY29tcGFyZSB0by4gTWF5IGJlIG51bGwuCisJICogQHJldHVybiB0cnVlIG9ubHkgaWYgYm90aCBMb25nT2JqZWN0SWRzIGhhdmUgaWRlbnRpY2FsIGJpdHMuCisJICovCisJcHVibGljIGZpbmFsIGJvb2xlYW4gZXF1YWxzKGZpbmFsIEFueUxvbmdPYmplY3RJZCBvdGhlcikgeworCQlyZXR1cm4gb3RoZXIgIT0gbnVsbCA/IGVxdWFscyh0aGlzLCBvdGhlcikgOiBmYWxzZTsKKwl9CisKKwlwdWJsaWMgZmluYWwgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IG8pIHsKKwkJaWYgKG8gaW5zdGFuY2VvZiBBbnlMb25nT2JqZWN0SWQpCisJCQlyZXR1cm4gZXF1YWxzKChBbnlMb25nT2JqZWN0SWQpIG8pOworCQllbHNlCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhbiBvdXRwdXQgd3JpdGVyIGluIHJhdyBiaW5hcnkuCisJICoKKwkgKiBAcGFyYW0gdworCSAqICAgICAgICAgICAgdGhlIGJ1ZmZlciB0byBjb3B5IHRvLiBNdXN0IGJlIGluIGJpZyBlbmRpYW4gb3JkZXIuCisJICovCisJcHVibGljIHZvaWQgY29weVJhd1RvKGZpbmFsIEJ5dGVCdWZmZXIgdykgeworCQl3LnB1dExvbmcodzEpOworCQl3LnB1dExvbmcodzIpOworCQl3LnB1dExvbmcodzMpOworCQl3LnB1dExvbmcodzQpOworCX0KKworCS8qKgorCSAqIENvcHkgdGhpcyBMb25nT2JqZWN0SWQgdG8gYSBieXRlIGFycmF5LgorCSAqCisJICogQHBhcmFtIGIKKwkgKiAgICAgICAgICAgIHRoZSBidWZmZXIgdG8gY29weSB0by4KKwkgKiBAcGFyYW0gbworCSAqICAgICAgICAgICAgdGhlIG9mZnNldCB3aXRoaW4gYiB0byB3cml0ZSBhdC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3B5UmF3VG8oZmluYWwgYnl0ZVtdIGIsIGZpbmFsIGludCBvKSB7CisJCU5CLmVuY29kZUludDY0KGIsIG8sIHcxKTsKKwkJTkIuZW5jb2RlSW50NjQoYiwgbyArIDgsIHcyKTsKKwkJTkIuZW5jb2RlSW50NjQoYiwgbyArIDE2LCB3Myk7CisJCU5CLmVuY29kZUludDY0KGIsIG8gKyAyNCwgdzQpOworCX0KKworCS8qKgorCSAqIENvcHkgdGhpcyBMb25nT2JqZWN0SWQgdG8gYW4gbG9uZyBhcnJheS4KKwkgKgorCSAqIEBwYXJhbSBiCisJICogICAgICAgICAgICB0aGUgYnVmZmVyIHRvIGNvcHkgdG8uCisJICogQHBhcmFtIG8KKwkgKiAgICAgICAgICAgIHRoZSBvZmZzZXQgd2l0aGluIGIgdG8gd3JpdGUgYXQuCisJICovCisJcHVibGljIHZvaWQgY29weVJhd1RvKGZpbmFsIGxvbmdbXSBiLCBmaW5hbCBpbnQgbykgeworCQliW29dID0gdzE7CisJCWJbbyArIDFdID0gdzI7CisJCWJbbyArIDJdID0gdzM7CisJCWJbbyArIDNdID0gdzQ7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhbiBvdXRwdXQgd3JpdGVyIGluIHJhdyBiaW5hcnkuCisJICoKKwkgKiBAcGFyYW0gdworCSAqICAgICAgICAgICAgdGhlIHN0cmVhbSB0byB3cml0ZSB0by4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgdGhlIHN0cmVhbSB3cml0aW5nIGZhaWxlZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3B5UmF3VG8oZmluYWwgT3V0cHV0U3RyZWFtIHcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXdyaXRlUmF3TG9uZyh3LCB3MSk7CisJCXdyaXRlUmF3TG9uZyh3LCB3Mik7CisJCXdyaXRlUmF3TG9uZyh3LCB3Myk7CisJCXdyaXRlUmF3TG9uZyh3LCB3NCk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCB3cml0ZVJhd0xvbmcoZmluYWwgT3V0cHV0U3RyZWFtIHcsIGxvbmcgdikKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXcud3JpdGUoKGludCkgKHYgPj4+IDU2KSk7CisJCXcud3JpdGUoKGludCkgKHYgPj4+IDQ4KSk7CisJCXcud3JpdGUoKGludCkgKHYgPj4+IDQwKSk7CisJCXcud3JpdGUoKGludCkgKHYgPj4+IDMyKSk7CisJCXcud3JpdGUoKGludCkgKHYgPj4+IDI0KSk7CisJCXcud3JpdGUoKGludCkgKHYgPj4+IDE2KSk7CisJCXcud3JpdGUoKGludCkgKHYgPj4+IDgpKTsKKwkJdy53cml0ZSgoaW50KSB2KTsKKwl9CisKKwkvKioKKwkgKiBDb3B5IHRoaXMgTG9uZ09iamVjdElkIHRvIGFuIG91dHB1dCB3cml0ZXIgaW4gaGV4IGZvcm1hdC4KKwkgKgorCSAqIEBwYXJhbSB3CisJICogICAgICAgICAgICB0aGUgc3RyZWFtIHRvIGNvcHkgdG8uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIHRoZSBzdHJlYW0gd3JpdGluZyBmYWlsZWQuCisJICovCisJcHVibGljIHZvaWQgY29weVRvKGZpbmFsIE91dHB1dFN0cmVhbSB3KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl3LndyaXRlKHRvSGV4Qnl0ZUFycmF5KCkpOworCX0KKworCS8qKgorCSAqIENvcHkgdGhpcyBMb25nT2JqZWN0SWQgdG8gYSBieXRlIGFycmF5IGluIGhleCBmb3JtYXQuCisJICoKKwkgKiBAcGFyYW0gYgorCSAqICAgICAgICAgICAgdGhlIGJ1ZmZlciB0byBjb3B5IHRvLgorCSAqIEBwYXJhbSBvCisJICogICAgICAgICAgICB0aGUgb2Zmc2V0IHdpdGhpbiBiIHRvIHdyaXRlIGF0LgorCSAqLworCXB1YmxpYyB2b2lkIGNvcHlUbyhieXRlW10gYiwgaW50IG8pIHsKKwkJZm9ybWF0SGV4Qnl0ZShiLCBvICsgMCwgdzEpOworCQlmb3JtYXRIZXhCeXRlKGIsIG8gKyAxNiwgdzIpOworCQlmb3JtYXRIZXhCeXRlKGIsIG8gKyAzMiwgdzMpOworCQlmb3JtYXRIZXhCeXRlKGIsIG8gKyA0OCwgdzQpOworCX0KKworCS8qKgorCSAqIENvcHkgdGhpcyBMb25nT2JqZWN0SWQgdG8gYSBCeXRlQnVmZmVyIGluIGhleCBmb3JtYXQuCisJICoKKwkgKiBAcGFyYW0gYgorCSAqICAgICAgICAgICAgdGhlIGJ1ZmZlciB0byBjb3B5IHRvLgorCSAqLworCXB1YmxpYyB2b2lkIGNvcHlUbyhCeXRlQnVmZmVyIGIpIHsKKwkJYi5wdXQodG9IZXhCeXRlQXJyYXkoKSk7CisJfQorCisJcHJpdmF0ZSBieXRlW10gdG9IZXhCeXRlQXJyYXkoKSB7CisJCWZpbmFsIGJ5dGVbXSBkc3QgPSBuZXcgYnl0ZVtDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSF07CisJCWZvcm1hdEhleEJ5dGUoZHN0LCAwLCB3MSk7CisJCWZvcm1hdEhleEJ5dGUoZHN0LCAxNiwgdzIpOworCQlmb3JtYXRIZXhCeXRlKGRzdCwgMzIsIHczKTsKKwkJZm9ybWF0SGV4Qnl0ZShkc3QsIDQ4LCB3NCk7CisJCXJldHVybiBkc3Q7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgYnl0ZVtdIGhleGJ5dGUgPSB7ICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywKKwkJCSc3JywgJzgnLCAnOScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicgfTsKKworCXByaXZhdGUgc3RhdGljIHZvaWQgZm9ybWF0SGV4Qnl0ZShmaW5hbCBieXRlW10gZHN0LCBmaW5hbCBpbnQgcCwgbG9uZyB3KSB7CisJCWludCBvID0gcCArIDE1OworCQl3aGlsZSAobyA+PSBwICYmIHcgIT0gMCkgeworCQkJZHN0W28tLV0gPSBoZXhieXRlWyhpbnQpICh3ICYgMHhmKV07CisJCQl3ID4+Pj0gNDsKKwkJfQorCQl3aGlsZSAobyA+PSBwKQorCQkJZHN0W28tLV0gPSAnMCc7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhbiBvdXRwdXQgd3JpdGVyIGluIGhleCBmb3JtYXQuCisJICoKKwkgKiBAcGFyYW0gdworCSAqICAgICAgICAgICAgdGhlIHN0cmVhbSB0byBjb3B5IHRvLgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICB0aGUgc3RyZWFtIHdyaXRpbmcgZmFpbGVkLgorCSAqLworCXB1YmxpYyB2b2lkIGNvcHlUbyhmaW5hbCBXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdy53cml0ZSh0b0hleENoYXJBcnJheSgpKTsKKwl9CisKKwkvKioKKwkgKiBDb3B5IHRoaXMgTG9uZ09iamVjdElkIHRvIGFuIG91dHB1dCB3cml0ZXIgaW4gaGV4IGZvcm1hdC4KKwkgKgorCSAqIEBwYXJhbSB0bXAKKwkgKiAgICAgICAgICAgIHRlbXBvcmFyeSBjaGFyIGFycmF5IHRvIGJ1ZmZlciBjb25zdHJ1Y3QgaW50byBiZWZvcmUgd3JpdGluZy4KKwkgKiAgICAgICAgICAgIE11c3QgYmUgYXQgbGVhc3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgMiBkaWdpdHMgZm9yIGVhY2ggYnl0ZQorCSAqICAgICAgICAgICAgb2Ygb2JqZWN0IGlkICg2NCBjaGFyYWN0ZXJzIG9yIGxhcmdlcikuCisJICogQHBhcmFtIHcKKwkgKiAgICAgICAgICAgIHRoZSBzdHJlYW0gdG8gY29weSB0by4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgdGhlIHN0cmVhbSB3cml0aW5nIGZhaWxlZC4KKwkgKi8KKwlwdWJsaWMgdm9pZCBjb3B5VG8oZmluYWwgY2hhcltdIHRtcCwgZmluYWwgV3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRvSGV4Q2hhckFycmF5KHRtcCk7CisJCXcud3JpdGUodG1wLCAwLCBDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCk7CisJfQorCisJLyoqCisJICogQ29weSB0aGlzIExvbmdPYmplY3RJZCB0byBhIFN0cmluZ0J1aWxkZXIgaW4gaGV4IGZvcm1hdC4KKwkgKgorCSAqIEBwYXJhbSB0bXAKKwkgKiAgICAgICAgICAgIHRlbXBvcmFyeSBjaGFyIGFycmF5IHRvIGJ1ZmZlciBjb25zdHJ1Y3QgaW50byBiZWZvcmUgd3JpdGluZy4KKwkgKiAgICAgICAgICAgIE11c3QgYmUgYXQgbGVhc3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgMiBkaWdpdHMgZm9yIGVhY2ggYnl0ZQorCSAqICAgICAgICAgICAgb2Ygb2JqZWN0IGlkICg2NCBjaGFyYWN0ZXJzIG9yIGxhcmdlcikuCisJICogQHBhcmFtIHcKKwkgKiAgICAgICAgICAgIHRoZSBzdHJpbmcgdG8gYXBwZW5kIG9udG8uCisJICovCisJcHVibGljIHZvaWQgY29weVRvKGZpbmFsIGNoYXJbXSB0bXAsIGZpbmFsIFN0cmluZ0J1aWxkZXIgdykgeworCQl0b0hleENoYXJBcnJheSh0bXApOworCQl3LmFwcGVuZCh0bXAsIDAsIENvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKTsKKwl9CisKKwljaGFyW10gdG9IZXhDaGFyQXJyYXkoKSB7CisJCWZpbmFsIGNoYXJbXSBkc3QgPSBuZXcgY2hhcltDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSF07CisJCXRvSGV4Q2hhckFycmF5KGRzdCk7CisJCXJldHVybiBkc3Q7CisJfQorCisJcHJpdmF0ZSB2b2lkIHRvSGV4Q2hhckFycmF5KGZpbmFsIGNoYXJbXSBkc3QpIHsKKwkJZm9ybWF0SGV4Q2hhcihkc3QsIDAsIHcxKTsKKwkJZm9ybWF0SGV4Q2hhcihkc3QsIDE2LCB3Mik7CisJCWZvcm1hdEhleENoYXIoZHN0LCAzMiwgdzMpOworCQlmb3JtYXRIZXhDaGFyKGRzdCwgNDgsIHc0KTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4Y2hhciA9IHsgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLAorCQkJJzcnLCAnOCcsICc5JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJyB9OworCisJc3RhdGljIHZvaWQgZm9ybWF0SGV4Q2hhcihmaW5hbCBjaGFyW10gZHN0LCBmaW5hbCBpbnQgcCwgbG9uZyB3KSB7CisJCWludCBvID0gcCArIDE1OworCQl3aGlsZSAobyA+PSBwICYmIHcgIT0gMCkgeworCQkJZHN0W28tLV0gPSBoZXhjaGFyWyhpbnQpICh3ICYgMHhmKV07CisJCQl3ID4+Pj0gNDsKKwkJfQorCQl3aGlsZSAobyA+PSBwKQorCQkJZHN0W28tLV0gPSAnMCc7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoIm5scyIpCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKwkJcmV0dXJuICJBbnlMb25nT2JqZWN0SWRbIiArIG5hbWUoKSArICJdIjsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHN0cmluZyBmb3JtIG9mIHRoZSBTSEEtMjU2LCBpbiBsb3dlciBjYXNlIGhleGFkZWNpbWFsLgorCSAqLworCXB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZSgpIHsKKwkJcmV0dXJuIG5ldyBTdHJpbmcodG9IZXhDaGFyQXJyYXkoKSk7CisJfQorCisJLyoqCisJICogQHJldHVybiBzdHJpbmcgZm9ybSBvZiB0aGUgU0hBLTI1NiwgaW4gbG93ZXIgY2FzZSBoZXhhZGVjaW1hbC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgU3RyaW5nIGdldE5hbWUoKSB7CisJCXJldHVybiBuYW1lKCk7CisJfQorCisJLyoqCisJICogUmV0dXJuIGFuIGFiYnJldmlhdGlvbiAocHJlZml4KSBvZiB0aGlzIG9iamVjdCBTSEEtMjU2LgorCSAqIDxwPgorCSAqIFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgZ3VhcmFudGVlIHVuaXF1ZW5lc3MuIENhbGxlcnMgc2hvdWxkIGluc3RlYWQKKwkgKiB1c2Uge0BsaW5rIE9iamVjdFJlYWRlciNhYmJyZXZpYXRlKEFueU9iamVjdElkLCBpbnQpfSB0byBvYnRhaW4gYSB1bmlxdWUKKwkgKiBhYmJyZXZpYXRpb24gd2l0aGluIHRoZSBzY29wZSBvZiBhIHBhcnRpY3VsYXIgb2JqZWN0IGRhdGFiYXNlLgorCSAqCisJICogQHBhcmFtIGxlbgorCSAqICAgICAgICAgICAgbGVuZ3RoIG9mIHRoZSBhYmJyZXZpYXRlZCBzdHJpbmcuCisJICogQHJldHVybiBTSEEtMjU2IGFiYnJldmlhdGlvbi4KKwkgKi8KKwlwdWJsaWMgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQgYWJicmV2aWF0ZShmaW5hbCBpbnQgbGVuKSB7CisJCWZpbmFsIGxvbmcgYSA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLm1hc2sobGVuLCAxLCB3MSk7CisJCWZpbmFsIGxvbmcgYiA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLm1hc2sobGVuLCAyLCB3Mik7CisJCWZpbmFsIGxvbmcgYyA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLm1hc2sobGVuLCAzLCB3Myk7CisJCWZpbmFsIGxvbmcgZCA9IEFiYnJldmlhdGVkTG9uZ09iamVjdElkLm1hc2sobGVuLCA0LCB3NCk7CisJCXJldHVybiBuZXcgQWJicmV2aWF0ZWRMb25nT2JqZWN0SWQobGVuLCBhLCBiLCBjLCBkKTsKKwl9CisKKwkvKioKKwkgKiBPYnRhaW4gYW4gaW1tdXRhYmxlIGNvcHkgb2YgdGhpcyBjdXJyZW50IG9iamVjdC4KKwkgKiA8cD4KKwkgKiBPbmx5IHJldHVybnMgPGNvZGU+dGhpczwvY29kZT4gaWYgdGhpcyBpbnN0YW5jZSBpcyBhbiB1bnN1YmNsYXNzZWQKKwkgKiBpbnN0YW5jZSBvZiB7QGxpbmsgTG9uZ09iamVjdElkfTsgb3RoZXJ3aXNlIGEgbmV3IGluc3RhbmNlIGlzIHJldHVybmVkCisJICogaG9sZGluZyB0aGUgc2FtZSB2YWx1ZS4KKwkgKiA8cD4KKwkgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgdG8gc2hlZCBhbnkgYWRkaXRpb25hbCBtZW1vcnkgdGhhdCBtYXkgYmUgdGllZCB0bworCSAqIHRoZSBzdWJjbGFzcywgeWV0IHJldGFpbiB0aGUgdW5pcXVlIGlkZW50aXR5IG9mIHRoZSBvYmplY3QgaWQgZm9yIGZ1dHVyZQorCSAqIGxvb2t1cHMgd2l0aGluIG1hcHMgYW5kIHJlcG9zaXRvcmllcy4KKwkgKgorCSAqIEByZXR1cm4gYW4gaW1tdXRhYmxlIGNvcHksIHVzaW5nIHRoZSBzbWFsbGVzdCBtZW1vcnkgZm9vdHByaW50IHBvc3NpYmxlLgorCSAqLworCXB1YmxpYyBmaW5hbCBMb25nT2JqZWN0SWQgY29weSgpIHsKKwkJaWYgKGdldENsYXNzKCkgPT0gTG9uZ09iamVjdElkLmNsYXNzKQorCQkJcmV0dXJuIChMb25nT2JqZWN0SWQpIHRoaXM7CisJCXJldHVybiBuZXcgTG9uZ09iamVjdElkKHRoaXMpOworCX0KKworCS8qKgorCSAqIE9idGFpbiBhbiBpbW11dGFibGUgY29weSBvZiB0aGlzIGN1cnJlbnQgb2JqZWN0LgorCSAqIDxwPgorCSAqIFNlZSB7QGxpbmsgI2NvcHkoKX0gaWYgPGNvZGU+dGhpczwvY29kZT4gaXMgYSBwb3NzaWJseSBzdWJjbGFzc2VkIChidXQKKwkgKiBpbW11dGFibGUpIGlkZW50aXR5IGFuZCB0aGUgYXBwbGljYXRpb24gbmVlZHMgYSBsaWdodHdlaWdodCBpZGVudGl0eQorCSAqIDxpPm9ubHk8L2k+IHJlZmVyZW5jZS4KKwkgKgorCSAqIEByZXR1cm4gYW4gaW1tdXRhYmxlIGNvcHkuIE1heSBiZSA8Y29kZT50aGlzPC9jb2RlPiBpZiB0aGlzIGlzIGFscmVhZHkgYW4KKwkgKiAgICAgICAgIGltbXV0YWJsZSBpbnN0YW5jZS4KKwkgKi8KKwlwdWJsaWMgYWJzdHJhY3QgTG9uZ09iamVjdElkIHRvT2JqZWN0SWQoKTsKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQ29uc3RhbnRzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0NvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWRiZjcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0NvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMubGliOworCitpbXBvcnQgamF2YS5zZWN1cml0eS5NZXNzYWdlRGlnZXN0OworaW1wb3J0IGphdmEuc2VjdXJpdHkuTm9TdWNoQWxnb3JpdGhtRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWwuTGZzVGV4dDsKKworLyoqCisgKiBNaXNjLiBjb25zdGFudHMgdXNlZCB0aHJvdWdob3V0IEpHaXQgTEZTIGV4dGVuc2lvbi4KKyAqCisgKiBAc2luY2UgNC4zCisgKiovCitAU3VwcHJlc3NXYXJuaW5ncygibmxzIikKK3B1YmxpYyBmaW5hbCBjbGFzcyBDb25zdGFudHMgeworCS8qKiBIYXNoIGZ1bmN0aW9uIHVzZWQgbmF0aXZlbHkgYnkgR2l0IExGUyBleHRlbnNpb24gZm9yIGxhcmdlIG9iamVjdHMuICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPTkdfSEFTSF9GVU5DVElPTiA9ICJTSEEtMjU2IjsKKworCS8qKgorCSAqIEEgR2l0IExGUyBsYXJnZSBvYmplY3QgaGFzaCBpcyAyNTYgYml0cywgaS5lLiAzMiBieXRlcy4KKwkgKiA8cD4KKwkgKiBDaGFuZ2luZyB0aGlzIGFzc3VtcHRpb24gaXMgbm90IGdvaW5nIHRvIGJlIGFzIGVhc3kgYXMgY2hhbmdpbmcgdGhpcworCSAqIGRlY2xhcmF0aW9uLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPTkdfT0JKRUNUX0lEX0xFTkdUSCA9IDMyOworCisJLyoqCisJICogQSBHaXQgTEZTIGxhcmdlIG9iamVjdCBjYW4gYmUgZXhwcmVzc2VkIGFzIGEgNjQgY2hhcmFjdGVyIHN0cmluZyBvZgorCSAqIGhleGFkZWNpbWFsIGRpZ2l0cy4KKwkgKgorCSAqIEBzZWUgI0xPTkdfT0JKRUNUX0lEX0xFTkdUSAorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IExPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEggPSBMT05HX09CSkVDVF9JRF9MRU5HVEgKKwkJCSogMjsKKworCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBkaWdlc3QgZnVuY3Rpb24gZm9yIG9iamVjdHMuCisJICoKKwkgKiBAcmV0dXJuIGEgbmV3IGRpZ2VzdCBvYmplY3QuCisJICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uCisJICogICAgICAgICAgICAgdGhpcyBKYXZhIHZpcnR1YWwgbWFjaGluZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBoYXNoCisJICogICAgICAgICAgICAgZnVuY3Rpb24uIFZlcnkgdW5saWtlbHkgZ2l2ZW4gdGhhdCBKR2l0IHVzZXMgYSBoYXNoIGZ1bmN0aW9uCisJICogICAgICAgICAgICAgdGhhdCBpcyBpbiB0aGUgSmF2YSByZWZlcmVuY2Ugc3BlY2lmaWNhdGlvbi4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIE1lc3NhZ2VEaWdlc3QgbmV3TWVzc2FnZURpZ2VzdCgpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBNZXNzYWdlRGlnZXN0LmdldEluc3RhbmNlKExPTkdfSEFTSF9GVU5DVElPTik7CisJCX0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBuc2FlKSB7CisJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJTGZzVGV4dC5nZXQoKS5yZXF1aXJlZEhhc2hGdW5jdGlvbk5vdEF2YWlsYWJsZSwKKwkJCQkJTE9OR19IQVNIX0ZVTkNUSU9OKSwgbnNhZSk7CisJCX0KKwl9CisKKwlzdGF0aWMgeworCQlpZiAoTE9OR19PQkpFQ1RfSURfTEVOR1RIICE9IG5ld01lc3NhZ2VEaWdlc3QoKS5nZXREaWdlc3RMZW5ndGgoKSkKKwkJCXRocm93IG5ldyBMaW5rYWdlRXJyb3IoCisJCQkJCUxmc1RleHQuZ2V0KCkuaW5jb3JyZWN0TE9OR19PQkpFQ1RfSURfTEVOR1RIKTsKKwl9CisKKwkvKioKKwkgKiBDb250ZW50IHR5cGUgdXNlZCBieSBMRlMgUkVTVCBBUEkgYXMgZGVmaW5lZCBpbgorCSAqIHtAbGluayAiaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9naXQtbGZzL2Jsb2IvbWFzdGVyL2RvY3MvYXBpL2h0dHAtdjEtYmF0Y2gubWQifQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIENPTlRFTlRfVFlQRV9HSVRfTEZTX0pTT04gPSAiYXBwbGljYXRpb24vdm5kLmdpdC1sZnMranNvbiI7CisKKwkvKioKKwkgKiAiYXJiaXRyYXJ5IGJpbmFyeSBkYXRhIiBhcyBkZWZpbmVkIGluIFJGQyAyMDQ2CisJICoge0BsaW5rICJodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjA0Ni50eHQifQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIEhEUl9BUFBMSUNBVElPTl9PQ1RFVF9TVFJFQU0gPSAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0xvbmdPYmplY3RJZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9Mb25nT2JqZWN0SWQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGE0ZTQzCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9Mb25nT2JqZWN0SWQuamF2YQpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMubGliOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk9iamVjdElucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT2JqZWN0T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uU2VyaWFsaXphYmxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzLkludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLk5COworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5SYXdQYXJzZVV0aWxzOworCisvKioKKyAqIEEgU0hBLTI1NiBhYnN0cmFjdGlvbi4KKyAqCisgKiBQb3J0ZWQgdG8gU0hBLTI1NiBmcm9tIHtAbGluayBPYmplY3RJZH0KKyAqCisgKiBAc2luY2UgNC4zCisgKi8KK3B1YmxpYyBjbGFzcyBMb25nT2JqZWN0SWQgZXh0ZW5kcyBBbnlMb25nT2JqZWN0SWQgaW1wbGVtZW50cyBTZXJpYWxpemFibGUgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9uZ09iamVjdElkIFpFUk9JRDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBaRVJPSURfU1RSOworCisJc3RhdGljIHsKKwkJWkVST0lEID0gbmV3IExvbmdPYmplY3RJZCgwTCwgMEwsIDBMLCAwTCk7CisJCVpFUk9JRF9TVFIgPSBaRVJPSUQubmFtZSgpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgc3BlY2lhbCBhbGwtemVybyBMb25nT2JqZWN0SWQuCisJICoKKwkgKiBAcmV0dXJuIHRoZSBhbGwtemVybyBMb25nT2JqZWN0SWQsIG9mdGVuIHVzZWQgdG8gc3RhbmQtaW4gZm9yIG5vIG9iamVjdC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExvbmdPYmplY3RJZCB6ZXJvSWQoKSB7CisJCXJldHVybiBaRVJPSUQ7CisJfQorCisJLyoqCisJICogVGVzdCBhIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRvIHZlcmlmeSB0aGF0IGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcworCSAqIExvbmdPYmplY3RJZC4KKwkgKiA8cD4KKwkgKiBJZiB0cnVlIHRoZSBzdHJpbmcgY2FuIGJlIHBhcnNlZCB3aXRoIHtAbGluayAjZnJvbVN0cmluZyhTdHJpbmcpfS4KKwkgKgorCSAqIEBwYXJhbSBpZAorCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0byB0ZXN0LgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGNhbiBjb252ZXJ0ZWQgaW50byBhbiBMb25nT2JqZWN0SWQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzSWQoZmluYWwgU3RyaW5nIGlkKSB7CisJCWlmIChpZC5sZW5ndGgoKSAhPSBDb25zdGFudHMuTE9OR19PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCkKKwkJCXJldHVybiBmYWxzZTsKKwkJdHJ5IHsKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEg7IGkrKykgeworCQkJCVJhd1BhcnNlVXRpbHMucGFyc2VIZXhJbnQ0KChieXRlKSBpZC5jaGFyQXQoaSkpOworCQkJfQorCQkJcmV0dXJuIHRydWU7CisJCX0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGEgTG9uZ09iamVjdElkIGludG8gYSBoZXggc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorCSAqCisJICogQHBhcmFtIGkKKwkgKiAgICAgICAgICAgIHRoZSBpZCB0byBjb252ZXJ0LiBNYXkgYmUgbnVsbC4KKwkgKiBAcmV0dXJuIHRoZSBoZXggc3RyaW5nIGNvbnZlcnNpb24gb2YgdGhpcyBpZCdzIGNvbnRlbnQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgdG9TdHJpbmcoZmluYWwgTG9uZ09iamVjdElkIGkpIHsKKwkJcmV0dXJuIGkgIT0gbnVsbCA/IGkubmFtZSgpIDogWkVST0lEX1NUUjsKKwl9CisKKwkvKioKKwkgKiBDb21wYXJlIHR3byBvYmplY3QgaWRlbnRpZmllciBieXRlIHNlcXVlbmNlcyBmb3IgZXF1YWxpdHkuCisJICoKKwkgKiBAcGFyYW0gZmlyc3RCdWZmZXIKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCBidWZmZXIgdG8gY29tcGFyZSBhZ2FpbnN0LiBNdXN0IGhhdmUgYXQgbGVhc3QgMzIKKwkgKiAgICAgICAgICAgIGJ5dGVzIGZyb20gcG9zaXRpb24gZmkgdGhyb3VnaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJICogQHBhcmFtIGZpCisJICogICAgICAgICAgICBmaXJzdCBvZmZzZXQgd2l0aGluIGZpcnN0QnVmZmVyIHRvIGJlZ2luIHRlc3RpbmcuCisJICogQHBhcmFtIHNlY29uZEJ1ZmZlcgorCSAqICAgICAgICAgICAgdGhlIHNlY29uZCBidWZmZXIgdG8gY29tcGFyZSBhZ2FpbnN0LiBNdXN0IGhhdmUgYXQgbGVhc3QgMzIKKwkgKiAgICAgICAgICAgIGJ5dGVzIGZyb20gcG9zaXRpb24gc2kgdGhyb3VnaCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJICogQHBhcmFtIHNpCisJICogICAgICAgICAgICBmaXJzdCBvZmZzZXQgd2l0aGluIHNlY29uZEJ1ZmZlciB0byBiZWdpbiB0ZXN0aW5nLgorCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgdHdvIGlkZW50aWZpZXJzIGFyZSB0aGUgc2FtZS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZXF1YWxzKGZpbmFsIGJ5dGVbXSBmaXJzdEJ1ZmZlciwgZmluYWwgaW50IGZpLAorCQkJZmluYWwgYnl0ZVtdIHNlY29uZEJ1ZmZlciwgZmluYWwgaW50IHNpKSB7CisJCXJldHVybiBmaXJzdEJ1ZmZlcltmaV0gPT0gc2Vjb25kQnVmZmVyW3NpXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMV0gPT0gc2Vjb25kQnVmZmVyW3NpICsgMV0KKwkJCQkmJiBmaXJzdEJ1ZmZlcltmaSArIDJdID09IHNlY29uZEJ1ZmZlcltzaSArIDJdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyAzXSA9PSBzZWNvbmRCdWZmZXJbc2kgKyAzXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgNF0gPT0gc2Vjb25kQnVmZmVyW3NpICsgNF0KKwkJCQkmJiBmaXJzdEJ1ZmZlcltmaSArIDVdID09IHNlY29uZEJ1ZmZlcltzaSArIDVdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyA2XSA9PSBzZWNvbmRCdWZmZXJbc2kgKyA2XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgN10gPT0gc2Vjb25kQnVmZmVyW3NpICsgN10KKwkJCQkmJiBmaXJzdEJ1ZmZlcltmaSArIDhdID09IHNlY29uZEJ1ZmZlcltzaSArIDhdCisJCQkJJiYgZmlyc3RCdWZmZXJbZmkgKyA5XSA9PSBzZWNvbmRCdWZmZXJbc2kgKyA5XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTBdID09IHNlY29uZEJ1ZmZlcltzaSArIDEwXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTFdID09IHNlY29uZEJ1ZmZlcltzaSArIDExXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTJdID09IHNlY29uZEJ1ZmZlcltzaSArIDEyXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTNdID09IHNlY29uZEJ1ZmZlcltzaSArIDEzXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTRdID09IHNlY29uZEJ1ZmZlcltzaSArIDE0XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTVdID09IHNlY29uZEJ1ZmZlcltzaSArIDE1XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTZdID09IHNlY29uZEJ1ZmZlcltzaSArIDE2XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTddID09IHNlY29uZEJ1ZmZlcltzaSArIDE3XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMThdID09IHNlY29uZEJ1ZmZlcltzaSArIDE4XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMTldID09IHNlY29uZEJ1ZmZlcltzaSArIDE5XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjBdID09IHNlY29uZEJ1ZmZlcltzaSArIDIwXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjFdID09IHNlY29uZEJ1ZmZlcltzaSArIDIxXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjJdID09IHNlY29uZEJ1ZmZlcltzaSArIDIyXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjNdID09IHNlY29uZEJ1ZmZlcltzaSArIDIzXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjRdID09IHNlY29uZEJ1ZmZlcltzaSArIDI0XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjVdID09IHNlY29uZEJ1ZmZlcltzaSArIDI1XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjZdID09IHNlY29uZEJ1ZmZlcltzaSArIDI2XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjddID09IHNlY29uZEJ1ZmZlcltzaSArIDI3XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjhdID09IHNlY29uZEJ1ZmZlcltzaSArIDI4XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMjldID09IHNlY29uZEJ1ZmZlcltzaSArIDI5XQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMzBdID09IHNlY29uZEJ1ZmZlcltzaSArIDMwXQorCQkJCSYmIGZpcnN0QnVmZmVyW2ZpICsgMzFdID09IHNlY29uZEJ1ZmZlcltzaSArIDMxXTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGEgTG9uZ09iamVjdElkIGZyb20gcmF3IGJpbmFyeSByZXByZXNlbnRhdGlvbi4KKwkgKgorCSAqIEBwYXJhbSBicworCSAqICAgICAgICAgICAgdGhlIHJhdyBieXRlIGJ1ZmZlciB0byByZWFkIGZyb20uIEF0IGxlYXN0IDMyIGJ5dGVzIG11c3QgYmUKKwkgKiAgICAgICAgICAgIGF2YWlsYWJsZSB3aXRoaW4gdGhpcyBieXRlIGFycmF5LgorCSAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBvYmplY3QgaWQuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBMb25nT2JqZWN0SWQgZnJvbVJhdyhmaW5hbCBieXRlW10gYnMpIHsKKwkJcmV0dXJuIGZyb21SYXcoYnMsIDApOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBMb25nT2JqZWN0SWQgZnJvbSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorCSAqCisJICogQHBhcmFtIGJzCisJICogICAgICAgICAgICB0aGUgcmF3IGJ5dGUgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgMzIgYnl0ZXMgYWZ0ZXIgcAorCSAqICAgICAgICAgICAgbXVzdCBiZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgYnl0ZSBhcnJheS4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgcG9zaXRpb24gdG8gcmVhZCB0aGUgZmlyc3QgYnl0ZSBvZiBkYXRhIGZyb20uCisJICogQHJldHVybiB0aGUgY29udmVydGVkIG9iamVjdCBpZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExvbmdPYmplY3RJZCBmcm9tUmF3KGZpbmFsIGJ5dGVbXSBicywgZmluYWwgaW50IHApIHsKKwkJZmluYWwgbG9uZyBhID0gTkIuZGVjb2RlSW50NjQoYnMsIHApOworCQlmaW5hbCBsb25nIGIgPSBOQi5kZWNvZGVJbnQ2NChicywgcCArIDgpOworCQlmaW5hbCBsb25nIGMgPSBOQi5kZWNvZGVJbnQ2NChicywgcCArIDE2KTsKKwkJZmluYWwgbG9uZyBkID0gTkIuZGVjb2RlSW50NjQoYnMsIHAgKyAyNCk7CisJCXJldHVybiBuZXcgTG9uZ09iamVjdElkKGEsIGIsIGMsIGQpOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBMb25nT2JqZWN0SWQgZnJvbSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorCSAqCisJICogQHBhcmFtIGlzCisJICogICAgICAgICAgICB0aGUgcmF3IGxvbmcgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgNCBsb25ncyBtdXN0IGJlCisJICogICAgICAgICAgICBhdmFpbGFibGUgd2l0aGluIHRoaXMgbG9uZyBhcnJheS4KKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgb2JqZWN0IGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTG9uZ09iamVjdElkIGZyb21SYXcoZmluYWwgbG9uZ1tdIGlzKSB7CisJCXJldHVybiBmcm9tUmF3KGlzLCAwKTsKKwl9CisKKwkvKioKKwkgKiBDb252ZXJ0IGEgTG9uZ09iamVjdElkIGZyb20gcmF3IGJpbmFyeSByZXByZXNlbnRhdGlvbi4KKwkgKgorCSAqIEBwYXJhbSBpcworCSAqICAgICAgICAgICAgdGhlIHJhdyBsb25nIGJ1ZmZlciB0byByZWFkIGZyb20uIEF0IGxlYXN0IDQgbG9uZ3MgYWZ0ZXIgcAorCSAqICAgICAgICAgICAgbXVzdCBiZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgbG9uZyBhcnJheS4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgcG9zaXRpb24gdG8gcmVhZCB0aGUgZmlyc3QgbG9uZyBvZiBkYXRhIGZyb20uCisJICogQHJldHVybiB0aGUgY29udmVydGVkIG9iamVjdCBpZC4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIExvbmdPYmplY3RJZCBmcm9tUmF3KGZpbmFsIGxvbmdbXSBpcywgZmluYWwgaW50IHApIHsKKwkJcmV0dXJuIG5ldyBMb25nT2JqZWN0SWQoaXNbcF0sIGlzW3AgKyAxXSwgaXNbcCArIDJdLCBpc1twICsgM10pOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYSBMb25nT2JqZWN0SWQgZnJvbSBoZXggY2hhcmFjdGVycyAoVVMtQVNDSUkpLgorCSAqCisJICogQHBhcmFtIGJ1ZgorCSAqICAgICAgICAgICAgdGhlIFVTLUFTQ0lJIGJ1ZmZlciB0byByZWFkIGZyb20uIEF0IGxlYXN0IDY0IGJ5dGVzIGFmdGVyCisJICogICAgICAgICAgICBvZmZzZXQgbXVzdCBiZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgYnl0ZSBhcnJheS4KKwkgKiBAcGFyYW0gb2Zmc2V0CisJICogICAgICAgICAgICBwb3NpdGlvbiB0byByZWFkIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZnJvbS4KKwkgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgb2JqZWN0IGlkLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgTG9uZ09iamVjdElkIGZyb21TdHJpbmcoZmluYWwgYnl0ZVtdIGJ1ZiwgZmluYWwgaW50IG9mZnNldCkgeworCQlyZXR1cm4gZnJvbUhleFN0cmluZyhidWYsIG9mZnNldCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhIExvbmdPYmplY3RJZCBmcm9tIGhleCBjaGFyYWN0ZXJzLgorCSAqCisJICogQHBhcmFtIHN0cgorCSAqICAgICAgICAgICAgdGhlIHN0cmluZyB0byByZWFkIGZyb20uIE11c3QgYmUgNjQgY2hhcmFjdGVycyBsb25nLgorCSAqIEByZXR1cm4gdGhlIGNvbnZlcnRlZCBvYmplY3QgaWQuCisJICovCisJcHVibGljIHN0YXRpYyBMb25nT2JqZWN0SWQgZnJvbVN0cmluZyhmaW5hbCBTdHJpbmcgc3RyKSB7CisJCWlmIChzdHIubGVuZ3RoKCkgIT0gQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpCisJCQl0aHJvdyBuZXcgSW52YWxpZExvbmdPYmplY3RJZEV4Y2VwdGlvbihzdHIpOworCQlyZXR1cm4gZnJvbUhleFN0cmluZyhvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuZW5jb2RlQVNDSUkoc3RyKSwKKwkJCQkwKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBMb25nT2JqZWN0SWQgZnJvbUhleFN0cmluZyhmaW5hbCBieXRlW10gYnMsIGludCBwKSB7CisJCXRyeSB7CisJCQlmaW5hbCBsb25nIGEgPSBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NjQoYnMsIHApOworCQkJZmluYWwgbG9uZyBiID0gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDY0KGJzLCBwICsgMTYpOworCQkJZmluYWwgbG9uZyBjID0gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDY0KGJzLCBwICsgMzIpOworCQkJZmluYWwgbG9uZyBkID0gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDY0KGJzLCBwICsgNDgpOworCQkJcmV0dXJuIG5ldyBMb25nT2JqZWN0SWQoYSwgYiwgYywgZCk7CisJCX0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlMSkgeworCQkJdGhyb3cgbmV3IEludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24oYnMsIHAsCisJCQkJCUNvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKTsKKwkJfQorCX0KKworCUxvbmdPYmplY3RJZChmaW5hbCBsb25nIG5ld18xLCBmaW5hbCBsb25nIG5ld18yLCBmaW5hbCBsb25nIG5ld18zLAorCQkJZmluYWwgbG9uZyBuZXdfNCkgeworCQl3MSA9IG5ld18xOworCQl3MiA9IG5ld18yOworCQl3MyA9IG5ld18zOworCQl3NCA9IG5ld180OworCX0KKworCS8qKgorCSAqIEluaXRpYWxpemUgdGhpcyBpbnN0YW5jZSBieSBjb3B5aW5nIGFub3RoZXIgZXhpc3RpbmcgTG9uZ09iamVjdElkLgorCSAqIDxwPgorCSAqIFRoaXMgY29uc3RydWN0b3IgaXMgbW9zdGx5IHVzZWZ1bCBmb3Igc3ViY2xhc3NlcyB3aGljaCB3YW50IHRvIGV4dGVuZCBhCisJICogTG9uZ09iamVjdElkIHdpdGggbW9yZSBwcm9wZXJ0aWVzLCBidXQgaW5pdGlhbGl6ZSBmcm9tIGFuIGV4aXN0aW5nCisJICogTG9uZ09iamVjdElkIGluc3RhbmNlIGFjcXVpcmVkIGJ5IG90aGVyIG1lYW5zLgorCSAqCisJICogQHBhcmFtIHNyYworCSAqICAgICAgICAgICAgYW5vdGhlciBhbHJlYWR5IHBhcnNlZCBMb25nT2JqZWN0SWQgdG8gY29weSB0aGUgdmFsdWUgb3V0IG9mLgorCSAqLworCXByb3RlY3RlZCBMb25nT2JqZWN0SWQoZmluYWwgQW55TG9uZ09iamVjdElkIHNyYykgeworCQl3MSA9IHNyYy53MTsKKwkJdzIgPSBzcmMudzI7CisJCXczID0gc3JjLnczOworCQl3NCA9IHNyYy53NDsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgTG9uZ09iamVjdElkIHRvT2JqZWN0SWQoKSB7CisJCXJldHVybiB0aGlzOworCX0KKworCXByaXZhdGUgdm9pZCB3cml0ZU9iamVjdChPYmplY3RPdXRwdXRTdHJlYW0gb3MpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCW9zLndyaXRlTG9uZyh3MSk7CisJCW9zLndyaXRlTG9uZyh3Mik7CisJCW9zLndyaXRlTG9uZyh3Myk7CisJCW9zLndyaXRlTG9uZyh3NCk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHJlYWRPYmplY3QoT2JqZWN0SW5wdXRTdHJlYW0gb2lzKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl3MSA9IG9pcy5yZWFkTG9uZygpOworCQl3MiA9IG9pcy5yZWFkTG9uZygpOworCQl3MyA9IG9pcy5yZWFkTG9uZygpOworCQl3NCA9IG9pcy5yZWFkTG9uZygpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvTXV0YWJsZUxvbmdPYmplY3RJZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9NdXRhYmxlTG9uZ09iamVjdElkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMwZTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvTXV0YWJsZUxvbmdPYmplY3RJZC5qYXZhCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAorICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcworICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKKyAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7CisKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5JbnZhbGlkTG9uZ09iamVjdElkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsLkxmc1RleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuTXV0YWJsZU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5OQjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuUmF3UGFyc2VVdGlsczsKKworLyoqCisgKiBBIG11dGFibGUgU0hBLTI1NiBhYnN0cmFjdGlvbi4KKyAqCisgKiBQb3J0ZWQgdG8gU0hBLTI1NiBmcm9tIHtAbGluayBNdXRhYmxlT2JqZWN0SWR9CisgKgorICogQHNpbmNlIDQuMworICovCitwdWJsaWMgY2xhc3MgTXV0YWJsZUxvbmdPYmplY3RJZCBleHRlbmRzIEFueUxvbmdPYmplY3RJZCB7CisJLyoqCisJICogRW1wdHkgY29uc3RydWN0b3IuIEluaXRpYWxpemUgb2JqZWN0IHdpdGggZGVmYXVsdCAoemVyb3MpIHZhbHVlLgorCSAqLworCXB1YmxpYyBNdXRhYmxlTG9uZ09iamVjdElkKCkgeworCQlzdXBlcigpOworCX0KKworCS8qKgorCSAqIENvcHlpbmcgY29uc3RydWN0b3IuCisJICoKKwkgKiBAcGFyYW0gc3JjCisJICogICAgICAgICAgICBvcmlnaW5hbCBlbnRyeSwgdG8gY29weSBpZCBmcm9tCisJICovCisJTXV0YWJsZUxvbmdPYmplY3RJZChNdXRhYmxlTG9uZ09iamVjdElkIHNyYykgeworCQlmcm9tT2JqZWN0SWQoc3JjKTsKKwl9CisKKwkvKioKKwkgKiBTZXQgYW55IGJ5dGUgaW4gdGhlIGlkLgorCSAqCisJICogQHBhcmFtIGluZGV4CisJICogICAgICAgICAgICBpbmRleCBvZiB0aGUgYnl0ZSB0byBzZXQgaW4gdGhlIHJhdyBmb3JtIG9mIHRoZSBPYmplY3RJZC4gTXVzdAorCSAqICAgICAgICAgICAgYmUgaW4gcmFuZ2UgWzAsIHtAbGluayBDb25zdGFudHMjTE9OR19PQkpFQ1RfSURfTEVOR1RIfSkuCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBieXRlIGF0IHtAY29kZSBpbmRleH0uIFZhbHVlcyBhcmUKKwkgKiAgICAgICAgICAgIHVuc2lnbmVkIGFuZCB0aHVzIGFyZSBpbiB0aGUgcmFuZ2UgWzAsMjU1XSByYXRoZXIgdGhhbiB0aGUKKwkgKiAgICAgICAgICAgIHNpZ25lZCBieXRlIHJhbmdlIG9mIFstMTI4LCAxMjddLgorCSAqIEB0aHJvd3MgQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uCisJICogICAgICAgICAgICAge0Bjb2RlIGluZGV4fSBpcyBsZXNzIHRoYW4gMCwgZXF1YWwgdG8KKwkgKiAgICAgICAgICAgICB7QGxpbmsgQ29uc3RhbnRzI0xPTkdfT0JKRUNUX0lEX0xFTkdUSH0sIG9yIGdyZWF0ZXIgdGhhbgorCSAqICAgICAgICAgICAgIHtAbGluayBDb25zdGFudHMjTE9OR19PQkpFQ1RfSURfTEVOR1RIfS4KKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCeXRlKGludCBpbmRleCwgaW50IHZhbHVlKSB7CisJCXN3aXRjaCAoaW5kZXggPj4gMykgeworCQljYXNlIDA6CisJCQl3MSA9IHNldCh3MSwgaW5kZXggJiA3LCB2YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJdzIgPSBzZXQodzIsIGluZGV4ICYgNywgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXczID0gc2V0KHczLCBpbmRleCAmIDcsIHZhbHVlKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl3NCA9IHNldCh3NCwgaW5kZXggJiA3LCB2YWx1ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oaW5kZXgpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgbG9uZyBzZXQobG9uZyB3LCBpbnQgaW5kZXgsIGxvbmcgdmFsdWUpIHsKKwkJdmFsdWUgJj0gMHhmZjsKKworCQlzd2l0Y2ggKGluZGV4KSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiAodyAmIDB4MDBmZmZmZmZmZmZmZmZmZkwpIHwgKHZhbHVlIDw8IDU2KTsKKwkJY2FzZSAxOgorCQkJcmV0dXJuICh3ICYgMHhmZjAwZmZmZmZmZmZmZmZmTCkgfCAodmFsdWUgPDwgNDgpOworCQljYXNlIDI6CisJCQlyZXR1cm4gKHcgJiAweGZmZmYwMGZmZmZmZmZmZmZMKSB8ICh2YWx1ZSA8PCA0MCk7CisJCWNhc2UgMzoKKwkJCXJldHVybiAodyAmIDB4ZmZmZmZmMDBmZmZmZmZmZkwpIHwgKHZhbHVlIDw8IDMyKTsKKwkJY2FzZSA0OgorCQkJcmV0dXJuICh3ICYgMHhmZmZmZmZmZjAwZmZmZmZmTCkgfCAodmFsdWUgPDwgMjQpOworCQljYXNlIDU6CisJCQlyZXR1cm4gKHcgJiAweGZmZmZmZmZmZmYwMGZmZmZMKSB8ICh2YWx1ZSA8PCAxNik7CisJCWNhc2UgNjoKKwkJCXJldHVybiAodyAmIDB4ZmZmZmZmZmZmZmZmMDBmZkwpIHwgKHZhbHVlIDw8IDgpOworCQljYXNlIDc6CisJCQlyZXR1cm4gKHcgJiAweGZmZmZmZmZmZmZmZmZmMDBMKSB8IHZhbHVlOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbigpOworCQl9CisJfQorCisJLyoqIE1ha2UgdGhpcyBpZCBtYXRjaCB7QGxpbmsgTG9uZ09iamVjdElkI3plcm9JZCgpfS4gKi8KKwlwdWJsaWMgdm9pZCBjbGVhcigpIHsKKwkJdzEgPSAwOworCQl3MiA9IDA7CisJCXczID0gMDsKKwkJdzQgPSAwOworCX0KKworCS8qKgorCSAqIENvcHkgYW4gTG9uZ09iamVjdElkIGludG8gdGhpcyBtdXRhYmxlIGJ1ZmZlci4KKwkgKgorCSAqIEBwYXJhbSBzcmMKKwkgKiAgICAgICAgICAgIHRoZSBzb3VyY2UgaWQgdG8gY29weSBmcm9tLgorCSAqLworCXB1YmxpYyB2b2lkIGZyb21PYmplY3RJZChBbnlMb25nT2JqZWN0SWQgc3JjKSB7CisJCXRoaXMudzEgPSBzcmMudzE7CisJCXRoaXMudzIgPSBzcmMudzI7CisJCXRoaXMudzMgPSBzcmMudzM7CisJCXRoaXMudzQgPSBzcmMudzQ7CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBMb25nT2JqZWN0SWQgZnJvbSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorCSAqCisJICogQHBhcmFtIGJzCisJICogICAgICAgICAgICB0aGUgcmF3IGJ5dGUgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgMzIgYnl0ZXMgbXVzdCBiZQorCSAqICAgICAgICAgICAgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGJ5dGUgYXJyYXkuCisJICovCisJcHVibGljIHZvaWQgZnJvbVJhdyhmaW5hbCBieXRlW10gYnMpIHsKKwkJZnJvbVJhdyhicywgMCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBMb25nT2JqZWN0SWQgZnJvbSByYXcgYmluYXJ5IHJlcHJlc2VudGF0aW9uLgorCSAqCisJICogQHBhcmFtIGJzCisJICogICAgICAgICAgICB0aGUgcmF3IGJ5dGUgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgMzIgYnl0ZXMgYWZ0ZXIgcAorCSAqICAgICAgICAgICAgbXVzdCBiZSBhdmFpbGFibGUgd2l0aGluIHRoaXMgYnl0ZSBhcnJheS4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgcG9zaXRpb24gdG8gcmVhZCB0aGUgZmlyc3QgYnl0ZSBvZiBkYXRhIGZyb20uCisJICovCisJcHVibGljIHZvaWQgZnJvbVJhdyhmaW5hbCBieXRlW10gYnMsIGZpbmFsIGludCBwKSB7CisJCXcxID0gTkIuZGVjb2RlSW50NjQoYnMsIHApOworCQl3MiA9IE5CLmRlY29kZUludDY0KGJzLCBwICsgOCk7CisJCXczID0gTkIuZGVjb2RlSW50NjQoYnMsIHAgKyAxNik7CisJCXc0ID0gTkIuZGVjb2RlSW50NjQoYnMsIHAgKyAyNCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBMb25nT2JqZWN0SWQgZnJvbSBiaW5hcnkgcmVwcmVzZW50YXRpb24gZXhwcmVzc2VkIGluIGludGVnZXJzLgorCSAqCisJICogQHBhcmFtIGxvbmdzCisJICogICAgICAgICAgICB0aGUgcmF3IGxvbmcgYnVmZmVyIHRvIHJlYWQgZnJvbS4gQXQgbGVhc3QgNCBsb25ncyBtdXN0IGJlCisJICogICAgICAgICAgICBhdmFpbGFibGUgd2l0aGluIHRoaXMgbG9uZ3MgYXJyYXkuCisJICovCisJcHVibGljIHZvaWQgZnJvbVJhdyhmaW5hbCBsb25nW10gbG9uZ3MpIHsKKwkJZnJvbVJhdyhsb25ncywgMCk7CisJfQorCisJLyoqCisJICogQ29udmVydCBhbiBMb25nT2JqZWN0SWQgZnJvbSBiaW5hcnkgcmVwcmVzZW50YXRpb24gZXhwcmVzc2VkIGluIGxvbmdzLgorCSAqCisJICogQHBhcmFtIGxvbmdzCisJICogICAgICAgICAgICB0aGUgcmF3IGludCBidWZmZXIgdG8gcmVhZCBmcm9tLiBBdCBsZWFzdCA0IGxvbmdzIGFmdGVyIHAgbXVzdAorCSAqICAgICAgICAgICAgYmUgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGxvbmdzIGFycmF5LgorCSAqIEBwYXJhbSBwCisJICogICAgICAgICAgICBwb3NpdGlvbiB0byByZWFkIHRoZSBmaXJzdCBpbnRlZ2VyIG9mIGRhdGEgZnJvbS4KKwkgKgorCSAqLworCXB1YmxpYyB2b2lkIGZyb21SYXcoZmluYWwgbG9uZ1tdIGxvbmdzLCBmaW5hbCBpbnQgcCkgeworCQl3MSA9IGxvbmdzW3BdOworCQl3MiA9IGxvbmdzW3AgKyAxXTsKKwkJdzMgPSBsb25nc1twICsgMl07CisJCXc0ID0gbG9uZ3NbcCArIDNdOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYW4gTG9uZ09iamVjdElkIGZyb20gaGV4IGNoYXJhY3RlcnMgKFVTLUFTQ0lJKS4KKwkgKgorCSAqIEBwYXJhbSBidWYKKwkgKiAgICAgICAgICAgIHRoZSBVUy1BU0NJSSBidWZmZXIgdG8gcmVhZCBmcm9tLiBBdCBsZWFzdCAzMiBieXRlcyBhZnRlcgorCSAqICAgICAgICAgICAgb2Zmc2V0IG11c3QgYmUgYXZhaWxhYmxlIHdpdGhpbiB0aGlzIGJ5dGUgYXJyYXkuCisJICogQHBhcmFtIG9mZnNldAorCSAqICAgICAgICAgICAgcG9zaXRpb24gdG8gcmVhZCB0aGUgZmlyc3QgY2hhcmFjdGVyIGZyb20uCisJICovCisJcHVibGljIHZvaWQgZnJvbVN0cmluZyhmaW5hbCBieXRlW10gYnVmLCBmaW5hbCBpbnQgb2Zmc2V0KSB7CisJCWZyb21IZXhTdHJpbmcoYnVmLCBvZmZzZXQpOworCX0KKworCS8qKgorCSAqIENvbnZlcnQgYW4gTG9uZ09iamVjdElkIGZyb20gaGV4IGNoYXJhY3RlcnMuCisJICoKKwkgKiBAcGFyYW0gc3RyCisJICogICAgICAgICAgICB0aGUgc3RyaW5nIHRvIHJlYWQgZnJvbS4gTXVzdCBiZSA2NCBjaGFyYWN0ZXJzIGxvbmcuCisJICovCisJcHVibGljIHZvaWQgZnJvbVN0cmluZyhmaW5hbCBTdHJpbmcgc3RyKSB7CisJCWlmIChzdHIubGVuZ3RoKCkgIT0gQ29uc3RhbnRzLkxPTkdfT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpCisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChMZnNUZXh0LmdldCgpLmludmFsaWRMb25nSWQsIHN0cikpOworCQlmcm9tSGV4U3RyaW5nKG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5lbmNvZGVBU0NJSShzdHIpLCAwKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgZnJvbUhleFN0cmluZyhmaW5hbCBieXRlW10gYnMsIGludCBwKSB7CisJCXRyeSB7CisJCQl3MSA9IFJhd1BhcnNlVXRpbHMucGFyc2VIZXhJbnQ2NChicywgcCk7CisJCQl3MiA9IFJhd1BhcnNlVXRpbHMucGFyc2VIZXhJbnQ2NChicywgcCArIDE2KTsKKwkJCXczID0gUmF3UGFyc2VVdGlscy5wYXJzZUhleEludDY0KGJzLCBwICsgMzIpOworCQkJdzQgPSBSYXdQYXJzZVV0aWxzLnBhcnNlSGV4SW50NjQoYnMsIHAgKyA0OCk7CisJCX0gY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlMSkgeworCQkJdGhyb3cgbmV3IEludmFsaWRMb25nT2JqZWN0SWRFeGNlcHRpb24oYnMsIHAsCisJCQkJCUNvbnN0YW50cy5MT05HX09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIKTsKKwkJfQorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBMb25nT2JqZWN0SWQgdG9PYmplY3RJZCgpIHsKKwkJcmV0dXJuIG5ldyBMb25nT2JqZWN0SWQodGhpcyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uZ2l0aWdub3JlIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmNzg5NmQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAordGFyZ2V0LwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8ucHJvamVjdCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwNjFiOQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnByb2plY3QKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0RGVzY3JpcHRpb24+CisJPG5hbWU+b3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZTwvbmFtZT4KKwk8Y29tbWVudD48L2NvbW1lbnQ+CisJPHByb2plY3RzPgorCTwvcHJvamVjdHM+CisJPGJ1aWxkU3BlYz4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KKwkJCTxhcmd1bWVudHM+CisJCQk8L2FyZ3VtZW50cz4KKwkJPC9idWlsZENvbW1hbmQ+CisJPC9idWlsZFNwZWM+CisJPG5hdHVyZXM+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KKwk8L25hdHVyZXM+Cis8L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiZGMyYwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0wLDAgKzEsMyBAQAorI0ZyaSBKdW4gMTggMjM6MzM6NDUgQ0VTVCAyMDEwCitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQorZW5jb2RpbmcvPHByb2plY3Q+PVVURi04CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk4MjUyYgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpAQCAtMCwwICsxLDMgQEAKKyNGcmkgSnVuIDE4IDIzOjMzOjQ1IENFU1QgMjAxMAorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2xpbmUuc2VwYXJhdG9yPVxuCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRhc2tzLnVpLnByZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyM2MwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5teWx5bi50YXNrcy51aS5wcmVmcwpAQCAtMCwwICsxLDQgQEAKKyNUdWUgSnVsIDE5IDIwOjExOjI4IENFU1QgMjAxMQorZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK3Byb2plY3QucmVwb3NpdG9yeS5raW5kPWJ1Z3ppbGxhCitwcm9qZWN0LnJlcG9zaXRvcnkudXJsPWh0dHBzXDovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubXlseW4udGVhbS51aS5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiYTk0OQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvLnNldHRpbmdzL29yZy5lY2xpcHNlLm15bHluLnRlYW0udWkucHJlZnMKQEAgLTAsMCArMSwzIEBACisjVHVlIEp1bCAxOSAyMDoxMToyOCBDRVNUIDIwMTEKK2NvbW1pdC5jb21tZW50LnRlbXBsYXRlPSR7dGFzay5kZXNjcmlwdGlvbn0gXG5cbkJ1Z1w6ICR7dGFzay5rZXl9CitlY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YThkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw0IEBACitiaW4uaW5jbHVkZXMgPSBmZWF0dXJlLnhtbCxcCisgICAgICAgICAgICAgICBlZGwtdjEwLmh0bWwsXAorICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzLFwKKyAgICAgICAgICAgICAgIGxpY2Vuc2UuaHRtbApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9lZGwtdjEwLmh0bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2VkbC12MTAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODI2YjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9lZGwtdjEwLmh0bWwKQEAgLTAsMCArMSw1OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSIgPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KKworPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgorPHRpdGxlPkVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgLSBWZXJzaW9uIDEuMDwvdGl0bGU+Cis8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICBib2R5IHsKKyAgICBzaXplOiA4LjVpbiAxMS4waW47CisgICAgbWFyZ2luOiAwLjI1aW4gMC41aW4gMC4yNWluIDAuNWluOworICAgIHRhYi1pbnRlcnZhbDogMC41aW47CisgICAgfQorICBwIHsKKyAgICBtYXJnaW4tbGVmdDogYXV0bzsKKyAgICBtYXJnaW4tdG9wOiAgMC41ZW07CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07CisgICAgfQorICBwLmxpc3QgeworICAgIG1hcmdpbi1sZWZ0OiAwLjVpbjsKKyAgICBtYXJnaW4tdG9wOiAgMC4wNWVtOworICAgIG1hcmdpbi1ib3R0b206IDAuMDVlbTsKKyAgICB9CisgIDwvc3R5bGU+CisKKzwvaGVhZD4KKworPGJvZHkgbGFuZz0iRU4tVVMiPgorCis8cD48Yj5FY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIC0gdiAxLjA8L2I+PC9wPgorCis8cD5Db3B5cmlnaHQgKGMpIDIwMDcsIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGxpY2Vuc29ycy4gPC9wPgorCis8cD5BbGwgcmlnaHRzIHJlc2VydmVkLjwvcD4KKzxwPlJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCisgICAgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorPHVsPjxsaT5SZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci48L2xpPgorPGxpPlJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uPC9saT4KKzxsaT5OZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uPC9saT48L3VsPgorPC9wPgorPHA+VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLjwvcD4KKworPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YmZmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUucHJvcGVydGllcwpAQCAtMCwwICsxLDE1OSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb3B5cmlnaHQgKGMpIDIwMDE1IE1hdHRoaWFzIFNvaG4gPG1hdHRoaWFzLnNvaG5Ac2FwLmNvbT4gYW5kIG90aGVycy4KKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscworIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKKyMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZmVhdHVyZU5hbWU9SmF2YSBpbXBsZW1lbnRhdGlvbiBvZiBHaXQgLSBvcHRpb25hbCBMRlMgc3VwcG9ydAorcHJvdmlkZXJOYW1lPUVjbGlwc2UgSkdpdAorCit1cGRhdGVTaXRlTmFtZT1FY2xpcHNlIEpHaXQgVXBkYXRlIFNpdGUKKworIyBkZXNjcmlwdGlvbiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIERlc2NyaXB0aW9uIgorZGVzY3JpcHRpb249XAorT3B0aW9uYWwgTEZTIHN1cHBvcnQuXG4KKyMjIyMjIyMjIyMjIyMjIyMgZW5kIG9mIGRlc2NyaXB0aW9uIHByb3BlcnR5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAiY29weXJpZ2h0IiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBDb3B5cmlnaHQiCitjb3B5cmlnaHQ9XAorQ29weXJpZ2h0IChjKSAyMDE1LCBNYXR0aGlhcyBTb2huIGV0LmFsLlxuXAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFsc1xuXAorYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wXG5cCit3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdFxuXAoraHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAuaHRtbFxuCisjIyMjIyMjIyMjIyMjIyMjIGVuZCBvZiBjb3B5cmlnaHQgcHJvcGVydHkgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgImxpY2Vuc2VVUkwiIHByb3BlcnR5IC0gVVJMIG9mIHRoZSAiRmVhdHVyZSBMaWNlbnNlIgorIyBkbyBub3QgdHJhbnNsYXRlIHZhbHVlIC0ganVzdCBjaGFuZ2UgdG8gcG9pbnQgdG8gYSBsb2NhbGUtc3BlY2lmaWMgSFRNTCBwYWdlCitsaWNlbnNlVVJMPWxpY2Vuc2UuaHRtbAorCisjICJsaWNlbnNlIiBwcm9wZXJ0eSAtIHRleHQgb2YgdGhlICJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIgorIyBzaG91bGQgYmUgcGxhaW4gdGV4dCB2ZXJzaW9uIG9mIGxpY2Vuc2UgYWdyZWVtZW50IHBvaW50ZWQgdG8gYmUgImxpY2Vuc2VVUkwiCitsaWNlbnNlPVwKK0VjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudFxuXAorQXByaWwgOSwgMjAxNFxuXAorXG5cCitVc2FnZSBPZiBDb250ZW50XG5cCitcblwKK1RIRSBFQ0xJUFNFIEZPVU5EQVRJT04gTUFLRVMgQVZBSUxBQkxFIFNPRlRXQVJFLCBET0NVTUVOVEFUSU9OLCBJTkZPUk1BVElPTiBBTkQvT1JcblwKK09USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMgKENPTExFQ1RJVkVMWSAiQ09OVEVOVCIpLlxuXAorVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTXG5cCitBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBMSUNFTlNFIEFHUkVFTUVOVFMgT1JcblwKK05PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VXG5cCitBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UXG5cCitBTkQvT1IgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEFOWSBBUFBMSUNBQkxFIExJQ0VOU0UgQUdSRUVNRU5UU1xuXAorT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRCBCRUxPVy4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFXG5cCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TXG5cCitPRiBBTlkgQVBQTElDQUJMRSBMSUNFTlNFIEFHUkVFTUVOVFMgT1IgTk9USUNFUyBJTkRJQ0FURUQgT1IgUkVGRVJFTkNFRFxuXAorQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULlxuXAorXG5cCitBcHBsaWNhYmxlIExpY2Vuc2VzXG5cCitcblwKK1VubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkLCBhbGwgQ29udGVudCBtYWRlIGF2YWlsYWJsZSBieSB0aGVcblwKK0VjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mXG5cCit0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAoIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpc1xuXAorcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sLlxuXAorRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuXG5cCitcblwKK0NvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLFxuXAorZG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZmlsZXMgbWFpbnRhaW5lZCBpbiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHNvdXJjZSBjb2RlXG5cCityZXBvc2l0b3J5ICgiUmVwb3NpdG9yeSIpIGluIHNvZnR3YXJlIG1vZHVsZXMgKCJNb2R1bGVzIikgYW5kIG1hZGUgYXZhaWxhYmxlXG5cCithcyBkb3dubG9hZGFibGUgYXJjaGl2ZXMgKCJEb3dubG9hZHMiKS5cblwKK1xuXAorICAgICAgIC0gQ29udGVudCBtYXkgYmUgc3RydWN0dXJlZCBhbmQgcGFja2FnZWQgaW50byBtb2R1bGVzIHRvIGZhY2lsaXRhdGUgZGVsaXZlcmluZyxcblwKKyAgICAgICAgIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gVHlwaWNhbCBtb2R1bGVzIG1heSBpbmNsdWRlIHBsdWctaW5zICgiUGx1Zy1pbnMiKSxcblwKKyAgICAgICAgIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuXG5cCisgICAgICAgLSBFYWNoIFBsdWctaW4gb3IgRnJhZ21lbnQgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBvciBKQVIgKEphdmEoVE0pIEFSY2hpdmUpXG5cCisgICAgICAgICBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuXG5cCisgICAgICAgLSBBIEZlYXR1cmUgaXMgYSBidW5kbGUgb2Ygb25lIG9yIG1vcmUgUGx1Zy1pbnMgYW5kL29yIEZyYWdtZW50cyBhbmQgYXNzb2NpYXRlZCBtYXRlcmlhbC5cblwKKyAgICAgICAgIEVhY2ggRmVhdHVyZSBtYXkgYmUgcGFja2FnZWQgYXMgYSBzdWItZGlyZWN0b3J5IGluIGEgZGlyZWN0b3J5IG5hbWVkICJmZWF0dXJlcyIuXG5cCisgICAgICAgICBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlcyBuYW1lZCAiZmVhdHVyZS54bWwiIG1heSBjb250YWluIGEgbGlzdCBvZiB0aGUgbmFtZXMgYW5kIHZlcnNpb25cblwKKyAgICAgICAgIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgRmVhdHVyZS5cblwKKyAgICAgICAtIEZlYXR1cmVzIG1heSBhbHNvIGluY2x1ZGUgb3RoZXIgRmVhdHVyZXMgKCJJbmNsdWRlZCBGZWF0dXJlcyIpLiBXaXRoaW4gYSBGZWF0dXJlLCBmaWxlc1xuXAorICAgICAgICAgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgSW5jbHVkZWQgRmVhdHVyZXMuXG5cCitcblwKK1RoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBzaG91bGQgYmVcblwKK2NvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZFxuXAorY29uZGl0aW9ucyBnb3Zlcm5pbmcgRmVhdHVyZXMgYW5kIEluY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWRcblwKK2luIGZpbGVzIG5hbWVkICJsaWNlbnNlLmh0bWwiICgiRmVhdHVyZSBMaWNlbnNlcyIpLiBBYm91dHMgYW5kIEZlYXR1cmVcblwKK0xpY2Vuc2VzIG1heSBiZSBsb2NhdGVkIGluIGFueSBkaXJlY3Rvcnkgb2YgYSBEb3dubG9hZCBvciBNb2R1bGVcblwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOlxuXAorXG5cCisgICAgICAgLSBUaGUgdG9wLWxldmVsIChyb290KSBkaXJlY3RvcnlcblwKKyAgICAgICAtIFBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzXG5cCisgICAgICAgLSBJbnNpZGUgUGx1Zy1pbnMgYW5kIEZyYWdtZW50cyBwYWNrYWdlZCBhcyBKQVJzXG5cCisgICAgICAgLSBTdWItZGlyZWN0b3JpZXMgb2YgdGhlIGRpcmVjdG9yeSBuYW1lZCAic3JjIiBvZiBjZXJ0YWluIFBsdWctaW5zXG5cCisgICAgICAgLSBGZWF0dXJlIGRpcmVjdG9yaWVzXG5cCitcblwKK05vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGVcblwKK1Byb3Zpc2lvbmluZyBUZWNobm9sb2d5IChhcyBkZWZpbmVkIGJlbG93KSwgeW91IG11c3QgYWdyZWUgdG8gYSBsaWNlbnNlICgiRmVhdHVyZSBcblwKK1VwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4gSWYgdGhlIEZlYXR1cmUgY29udGFpbnNcblwKK0luY2x1ZGVkIEZlYXR1cmVzLCB0aGUgRmVhdHVyZSBVcGRhdGUgTGljZW5zZSBzaG91bGQgZWl0aGVyIHByb3ZpZGUgeW91XG5cCit3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yIGluZm9ybVxuXAoreW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2VzIG1heSBiZSBmb3VuZCBpblxuXAordGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLlxuXAorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZVxuXAordGVybXMgYW5kIGNvbmRpdGlvbnMgKG9yIHJlZmVyZW5jZXMgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucykgdGhhdFxuXAorZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBhc3NvY2lhdGVkIENvbnRlbnQgaW4gdGhhdCBkaXJlY3RvcnkuXG5cCitcblwKK1RIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVJcblwKK1RPIFRIRSBFUEwgT1IgT1RIRVIgTElDRU5TRSBBR1JFRU1FTlRTLCBOT1RJQ0VTIE9SIFRFUk1TIEFORCBDT05ESVRJT05TLlxuXAorU09NRSBPRiBUSEVTRSBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOlxuXAorXG5cCisgICAgICAgLSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEuMC5odG1sKVxuXAorICAgICAgIC0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwpXG5cCisgICAgICAgLSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSlcblwKKyAgICAgICAtIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMClcblwKKyAgICAgICAtIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWwpXG5cCitcblwKK0lUIElTIFlPVVIgT0JMSUdBVElPTiBUTyBSRUFEIEFORCBBQ0NFUFQgQUxMIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMgUFJJT1JcblwKK1RPIFVTRSBPRiBUSEUgQ09OVEVOVC4gSWYgbm8gQWJvdXQsIEZlYXR1cmUgTGljZW5zZSwgb3IgRmVhdHVyZSBVcGRhdGUgTGljZW5zZVxuXAoraXMgcHJvdmlkZWQsIHBsZWFzZSBjb250YWN0IHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gdG8gZGV0ZXJtaW5lIHdoYXQgdGVybXMgYW5kIGNvbmRpdGlvbnNcblwKK2dvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC5cblwKK1xuXAorXG5cVXNlIG9mIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitcblwKK1RoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSxcblwKK2J1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHAyIGFuZCB0aGUgRWNsaXBzZSBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yXG5cCit0aGUgcHVycG9zZSBvZiBhbGxvd2luZyB1c2VycyB0byBpbnN0YWxsIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uLCBpbmZvcm1hdGlvbiBhbmQvb3JcblwKK290aGVyIG1hdGVyaWFscyAoY29sbGVjdGl2ZWx5ICJJbnN0YWxsYWJsZSBTb2Z0d2FyZSIpLiBUaGlzIGNhcGFiaWxpdHkgaXMgcHJvdmlkZWQgd2l0aFxuXAordGhlIGludGVudCBvZiBhbGxvd2luZyBzdWNoIHVzZXJzIHRvIGluc3RhbGwsIGV4dGVuZCBhbmQgdXBkYXRlIEVjbGlwc2UtYmFzZWQgcHJvZHVjdHMuXG5cCitJbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdpbmcgSW5zdGFsbGFibGUgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGF0XG5cCitodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sICgiU3BlY2lmaWNhdGlvbiIpLlxuXAorXG5cCitZb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuXG5cCitZb3Ugc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGVcblwKK0luc3RhbGxhYmxlIFNvZnR3YXJlIHRvIGJlIHByZXNlbnRlZCB0bywgYW5kIGFjY2VwdGVkIGJ5LCB0aGUgdXNlcnMgb2YgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5XG5cCitpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIEJ5IHVzaW5nIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IGluIHN1Y2ggYSBtYW5uZXIgYW5kXG5cCittYWtpbmcgaXQgYXZhaWxhYmxlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiwgeW91IGZ1cnRoZXIgYWNrbm93bGVkZ2UgeW91clxuXAorYWdyZWVtZW50IHRvLCBhbmQgdGhlIGFjcXVpc2l0aW9uIG9mIGFsbCBuZWNlc3NhcnkgcmlnaHRzIHRvIHBlcm1pdCB0aGUgZm9sbG93aW5nOlxuXAorXG5cCisgICAgICAgMS4gQSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZVxuXAorICAgICAgICAgIHRoZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLFxuXAorICAgICAgICAgIGV4dGVuZGluZyBvciB1cGRhdGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiBhbiBFY2xpcHNlLWJhc2VkIHByb2R1Y3QuXG5cCisgICAgICAgMi4gRHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eVxuXAorICAgICAgICAgIEluc3RhbGxhYmxlIFNvZnR3YXJlIG9yIGEgcG9ydGlvbiB0aGVyZW9mIHRvIGJlIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLlxuXAorICAgICAgIDMuIFB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0XG5cCisgICAgICAgICAgZ292ZXJuIHRoZSB1c2Ugb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2hcblwKKyAgICAgICAgICBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQgc2hhbGwgYmUgYWNjZXNzZWQgZnJvbSB0aGUgVGFyZ2V0IE1hY2hpbmUgaW4gYWNjb3JkYW5jZVxuXAorICAgICAgICAgIHdpdGggdGhlIFNwZWNpZmljYXRpb24uIFN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IG11c3QgaW5mb3JtIHRoZSB1c2VyIG9mIHRoZVxuXAorICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgZ292ZXJuIHRoZSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBhbmQgbXVzdCBzb2xpY2l0IGFjY2VwdGFuY2UgYnlcblwKKyAgICAgICAgICB0aGUgZW5kIHVzZXIgaW4gdGhlIG1hbm5lciBwcmVzY3JpYmVkIGluIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50LiBVcG9uIHN1Y2hcblwKKyAgICAgICAgICBpbmRpY2F0aW9uIG9mIGFncmVlbWVudCBieSB0aGUgdXNlciwgdGhlIHByb3Zpc2lvbmluZyBUZWNobm9sb2d5IHdpbGwgY29tcGxldGUgaW5zdGFsbGF0aW9uXG5cCisgICAgICAgICAgb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLlxuXAorXG5cCitDcnlwdG9ncmFwaHlcblwKK1xuXAorQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlXG5cCitjdXJyZW50bHkgbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsXG5cCithbmQvb3IgcmUtZXhwb3J0IHRvIGFub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFXG5cCit1c2luZyBhbnkgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cyxcblwKK3JlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIG9yIHVzZSwgYW5kXG5cCityZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLlxuXAorXG5cCitKYXZhIGFuZCBhbGwgSmF2YS1iYXNlZCB0cmFkZW1hcmtzIGFyZSB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLlxuCisjIyMjIyMjIyMjIyBlbmQgb2YgbGljZW5zZSBwcm9wZXJ0eSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNTI4NTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0wLDAgKzEsNTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8ZmVhdHVyZQorICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQubGZzIgorICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKKyAgICAgIHZlcnNpb249IjQuMy4wLnF1YWxpZmllciIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgorCisgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KKyAgICAgICVkZXNjcmlwdGlvbgorICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodD4KKyAgICAgICVjb3B5cmlnaHQKKyAgIDwvY29weXJpZ2h0PgorCisgICA8bGljZW5zZSB1cmw9IiVsaWNlbnNlVVJMIj4KKyAgICAgICVsaWNlbnNlCisgICA8L2xpY2Vuc2U+CisKKyAgIDx1cmw+CisgICAgICA8dXBkYXRlIGxhYmVsPSIldXBkYXRlU2l0ZU5hbWUiIHVybD0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VnaXQvdXBkYXRlcyIvPgorICAgICAgPGRpc2NvdmVyeSBsYWJlbD0iJXVwZGF0ZVNpdGVOYW1lIiB1cmw9Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lZ2l0L3VwZGF0ZXMiLz4KKyAgIDwvdXJsPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQubGZzIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0iY29tLmdvb2dsZS5nc29uIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2xpY2Vuc2UuaHRtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvbGljZW5zZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YWQ5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2xpY2Vuc2UuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgorPCEtLSBzYXZlZCBmcm9tIHVybD0oMDA0NClodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC9ub3RpY2UuaHRtbCAtLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKworPHRpdGxlPkVjbGlwc2UgRm91bmRhdGlvbiBTb2Z0d2FyZSBVc2VyIEFncmVlbWVudDwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5IGxhbmc9IkVOLVVTIj4KKzxoMj5FY2xpcHNlIEZvdW5kYXRpb24gU29mdHdhcmUgVXNlciBBZ3JlZW1lbnQ8L2gyPgorPHA+QXByaWwgOSwgMjAxNDwvcD4KKworPGgzPlVzYWdlIE9mIENvbnRlbnQ8L2gzPgorCis8cD5USEUgRUNMSVBTRSBGT1VOREFUSU9OIE1BS0VTIEFWQUlMQUJMRSBTT0ZUV0FSRSwgRE9DVU1FTlRBVElPTiwgSU5GT1JNQVRJT04gQU5EL09SIE9USEVSIE1BVEVSSUFMUyBGT1IgT1BFTiBTT1VSQ0UgUFJPSkVDVFMKKyAgIChDT0xMRUNUSVZFTFkgIkNPTlRFTlQiKS4gIFVTRSBPRiBUSEUgQ09OVEVOVCBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EL09SIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1cuICBCWSBVU0lORyBUSEUgQ09OVEVOVCwgWU9VIEFHUkVFIFRIQVQgWU9VUiBVU0UKKyAgIE9GIFRIRSBDT05URU5UIElTIEdPVkVSTkVEIEJZIFRISVMgQUdSRUVNRU5UIEFORC9PUiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SCisgICBOT1RJQ0VTIElORElDQVRFRCBPUiBSRUZFUkVOQ0VEIEJFTE9XLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFRIRSBURVJNUyBBTkQKKyAgIENPTkRJVElPTlMgT0YgQU5ZIEFQUExJQ0FCTEUgTElDRU5TRSBBR1JFRU1FTlRTIE9SIE5PVElDRVMgSU5ESUNBVEVEIE9SIFJFRkVSRU5DRUQgQkVMT1csIFRIRU4gWU9VIE1BWSBOT1QgVVNFIFRIRSBDT05URU5ULjwvcD4KKworPGgzPkFwcGxpY2FibGUgTGljZW5zZXM8L2gzPgorCis8cD5Vbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCwgYWxsIENvbnRlbnQgbWFkZSBhdmFpbGFibGUgYnkgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCisgICAoIkVQTCIpLiAgQSBjb3B5IG9mIHRoZSBFUEwgaXMgcHJvdmlkZWQgd2l0aCB0aGlzIENvbnRlbnQgYW5kIGlzIGFsc28gYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbDwvYT4uCisgICBGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L3A+CisKKzxwPkNvbnRlbnQgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgc291cmNlIGNvZGUsIG9iamVjdCBjb2RlLCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBmaWxlcyBtYWludGFpbmVkIGluIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24gc291cmNlIGNvZGUKKyAgIHJlcG9zaXRvcnkgKCJSZXBvc2l0b3J5IikgaW4gc29mdHdhcmUgbW9kdWxlcyAoIk1vZHVsZXMiKSBhbmQgbWFkZSBhdmFpbGFibGUgYXMgZG93bmxvYWRhYmxlIGFyY2hpdmVzICgiRG93bmxvYWRzIikuPC9wPgorCis8dWw+CisgICAgICAgPGxpPkNvbnRlbnQgbWF5IGJlIHN0cnVjdHVyZWQgYW5kIHBhY2thZ2VkIGludG8gbW9kdWxlcyB0byBmYWNpbGl0YXRlIGRlbGl2ZXJpbmcsIGV4dGVuZGluZywgYW5kIHVwZ3JhZGluZyB0aGUgQ29udGVudC4gIFR5cGljYWwgbW9kdWxlcyBtYXkgaW5jbHVkZSBwbHVnLWlucyAoIlBsdWctaW5zIiksIHBsdWctaW4gZnJhZ21lbnRzICgiRnJhZ21lbnRzIiksIGFuZCBmZWF0dXJlcyAoIkZlYXR1cmVzIikuPC9saT4KKyAgICAgICA8bGk+RWFjaCBQbHVnLWluIG9yIEZyYWdtZW50IG1heSBiZSBwYWNrYWdlZCBhcyBhIHN1Yi1kaXJlY3Rvcnkgb3IgSkFSIChKYXZhmSBBUmNoaXZlKSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAicGx1Z2lucyIuPC9saT4KKyAgICAgICA8bGk+QSBGZWF0dXJlIGlzIGEgYnVuZGxlIG9mIG9uZSBvciBtb3JlIFBsdWctaW5zIGFuZC9vciBGcmFnbWVudHMgYW5kIGFzc29jaWF0ZWQgbWF0ZXJpYWwuICBFYWNoIEZlYXR1cmUgbWF5IGJlIHBhY2thZ2VkIGFzIGEgc3ViLWRpcmVjdG9yeSBpbiBhIGRpcmVjdG9yeSBuYW1lZCAiZmVhdHVyZXMiLiAgV2l0aGluIGEgRmVhdHVyZSwgZmlsZXMgbmFtZWQgImZlYXR1cmUueG1sIiBtYXkgY29udGFpbiBhIGxpc3Qgb2YgdGhlIG5hbWVzIGFuZCB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFBsdWctaW5zCisgICAgICBhbmQvb3IgRnJhZ21lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IEZlYXR1cmUuPC9saT4KKyAgICAgICA8bGk+RmVhdHVyZXMgbWF5IGFsc28gaW5jbHVkZSBvdGhlciBGZWF0dXJlcyAoIkluY2x1ZGVkIEZlYXR1cmVzIikuIFdpdGhpbiBhIEZlYXR1cmUsIGZpbGVzIG5hbWVkICJmZWF0dXJlLnhtbCIgbWF5IGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBuYW1lcyBhbmQgdmVyc2lvbiBudW1iZXJzIG9mIEluY2x1ZGVkIEZlYXR1cmVzLjwvbGk+Cis8L3VsPgorCis8cD5UaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZ292ZXJuaW5nIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgc2hvdWxkIGJlIGNvbnRhaW5lZCBpbiBmaWxlcyBuYW1lZCAiYWJvdXQuaHRtbCIgKCJBYm91dHMiKS4gVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybmluZyBGZWF0dXJlcyBhbmQKK0luY2x1ZGVkIEZlYXR1cmVzIHNob3VsZCBiZSBjb250YWluZWQgaW4gZmlsZXMgbmFtZWQgImxpY2Vuc2UuaHRtbCIgKCJGZWF0dXJlIExpY2Vuc2VzIikuICBBYm91dHMgYW5kIEZlYXR1cmUgTGljZW5zZXMgbWF5IGJlIGxvY2F0ZWQgaW4gYW55IGRpcmVjdG9yeSBvZiBhIERvd25sb2FkIG9yIE1vZHVsZQoraW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6PC9wPgorCis8dWw+CisgICAgICAgPGxpPlRoZSB0b3AtbGV2ZWwgKHJvb3QpIGRpcmVjdG9yeTwvbGk+CisgICAgICAgPGxpPlBsdWctaW4gYW5kIEZyYWdtZW50IGRpcmVjdG9yaWVzPC9saT4KKyAgICAgICA8bGk+SW5zaWRlIFBsdWctaW5zIGFuZCBGcmFnbWVudHMgcGFja2FnZWQgYXMgSkFSczwvbGk+CisgICAgICAgPGxpPlN1Yi1kaXJlY3RvcmllcyBvZiB0aGUgZGlyZWN0b3J5IG5hbWVkICJzcmMiIG9mIGNlcnRhaW4gUGx1Zy1pbnM8L2xpPgorICAgICAgIDxsaT5GZWF0dXJlIGRpcmVjdG9yaWVzPC9saT4KKzwvdWw+CisKKzxwPk5vdGU6IGlmIGEgRmVhdHVyZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIGlzIGluc3RhbGxlZCB1c2luZyB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgKGFzIGRlZmluZWQgYmVsb3cpLCB5b3UgbXVzdCBhZ3JlZSB0byBhIGxpY2Vuc2UgKCJGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlIikgZHVyaW5nIHRoZQoraW5zdGFsbGF0aW9uIHByb2Nlc3MuICBJZiB0aGUgRmVhdHVyZSBjb250YWlucyBJbmNsdWRlZCBGZWF0dXJlcywgdGhlIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2Ugc2hvdWxkIGVpdGhlciBwcm92aWRlIHlvdSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBnb3Zlcm5pbmcgdGhlIEluY2x1ZGVkIEZlYXR1cmVzIG9yCitpbmZvcm0geW91IHdoZXJlIHlvdSBjYW4gbG9jYXRlIHRoZW0uICBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBtYXkgYmUgZm91bmQgaW4gdGhlICJsaWNlbnNlIiBwcm9wZXJ0eSBvZiBmaWxlcyBuYW1lZCAiZmVhdHVyZS5wcm9wZXJ0aWVzIiBmb3VuZCB3aXRoaW4gYSBGZWF0dXJlLgorU3VjaCBBYm91dHMsIEZlYXR1cmUgTGljZW5zZXMsIGFuZCBGZWF0dXJlIFVwZGF0ZSBMaWNlbnNlcyBjb250YWluIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAob3IgcmVmZXJlbmNlcyB0byBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zKSB0aGF0IGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgYXNzb2NpYXRlZCBDb250ZW50IGluCit0aGF0IGRpcmVjdG9yeS48L3A+CisKKzxwPlRIRSBBQk9VVFMsIEZFQVRVUkUgTElDRU5TRVMsIEFORCBGRUFUVVJFIFVQREFURSBMSUNFTlNFUyBNQVkgUkVGRVIgVE8gVEhFIEVQTCBPUiBPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMsIE5PVElDRVMgT1IgVEVSTVMgQU5EIENPTkRJVElPTlMuICBTT01FIE9GIFRIRVNFCitPVEhFUiBMSUNFTlNFIEFHUkVFTUVOVFMgTUFZIElOQ0xVREUgKEJVVCBBUkUgTk9UIExJTUlURUQgVE8pOjwvcD4KKworPHVsPgorICAgICAgIDxsaT5FY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9saWNlbnNlcy9lZGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGljZW5zZXMvZWRsLXYxLjAuaHRtbDwvYT4pPC9saT4KKyAgICAgICA8bGk+Q29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sPC9hPik8L2xpPgorICAgICAgIDxsaT5BcGFjaGUgU29mdHdhcmUgTGljZW5zZSAxLjEgKGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRSI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0U8L2E+KTwvbGk+CisgICAgICAgPGxpPkFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMCAoYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wPC9hPik8L2xpPgorICAgICAgIDxsaT5Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIChhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvTVBMLTEuMS5odG1sIj5odHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC9NUEwtMS4xLmh0bWw8L2E+KTwvbGk+Cis8L3VsPgorCis8cD5JVCBJUyBZT1VSIE9CTElHQVRJT04gVE8gUkVBRCBBTkQgQUNDRVBUIEFMTCBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIFBSSU9SIFRPIFVTRSBPRiBUSEUgQ09OVEVOVC4gIElmIG5vIEFib3V0LCBGZWF0dXJlIExpY2Vuc2UsIG9yIEZlYXR1cmUgVXBkYXRlIExpY2Vuc2UgaXMgcHJvdmlkZWQsIHBsZWFzZQorY29udGFjdCB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uIHRvIGRldGVybWluZSB3aGF0IHRlcm1zIGFuZCBjb25kaXRpb25zIGdvdmVybiB0aGF0IHBhcnRpY3VsYXIgQ29udGVudC48L3A+CisKKworPGgzPlVzZSBvZiBQcm92aXNpb25pbmcgVGVjaG5vbG9neTwvaDM+CisKKzxwPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIHByb3Zpc2lvbmluZyBzb2Z0d2FyZSwgZXhhbXBsZXMgb2Ygd2hpY2ggaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcDIgYW5kIHRoZSBFY2xpcHNlCisgICBVcGRhdGUgTWFuYWdlciAoIlByb3Zpc2lvbmluZyBUZWNobm9sb2d5IikgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIHVzZXJzIHRvIGluc3RhbGwgc29mdHdhcmUsIGRvY3VtZW50YXRpb24sIGluZm9ybWF0aW9uIGFuZC9vcgorICAgb3RoZXIgbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHkgIkluc3RhbGxhYmxlIFNvZnR3YXJlIikuIFRoaXMgY2FwYWJpbGl0eSBpcyBwcm92aWRlZCB3aXRoIHRoZSBpbnRlbnQgb2YgYWxsb3dpbmcgc3VjaCB1c2VycyB0bworICAgaW5zdGFsbCwgZXh0ZW5kIGFuZCB1cGRhdGUgRWNsaXBzZS1iYXNlZCBwcm9kdWN0cy4gSW5mb3JtYXRpb24gYWJvdXQgcGFja2FnaW5nIEluc3RhbGxhYmxlIFNvZnR3YXJlIGlzIGF2YWlsYWJsZSBhdCA8YSBocmVmPSJodHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sIj5odHRwOi8vZWNsaXBzZS5vcmcvZXF1aW5veC9wMi9yZXBvc2l0b3J5X3BhY2thZ2luZy5odG1sPC9hPgorICAgKCJTcGVjaWZpY2F0aW9uIikuPC9wPgorCis8cD5Zb3UgbWF5IHVzZSBQcm92aXNpb25pbmcgVGVjaG5vbG9neSB0byBhbGxvdyBvdGhlciBwYXJ0aWVzIHRvIGluc3RhbGwgSW5zdGFsbGFibGUgU29mdHdhcmUuIFlvdSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgdGhlCisgICBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50cyByZWxhdGluZyB0byB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgdG8gYmUgcHJlc2VudGVkIHRvLCBhbmQgYWNjZXB0ZWQgYnksIHRoZSB1c2VycyBvZiB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4gQnkgdXNpbmcgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgaW4gc3VjaCBhIG1hbm5lciBhbmQgbWFraW5nIGl0IGF2YWlsYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgICBTcGVjaWZpY2F0aW9uLCB5b3UgZnVydGhlciBhY2tub3dsZWRnZSB5b3VyIGFncmVlbWVudCB0bywgYW5kIHRoZSBhY3F1aXNpdGlvbiBvZiBhbGwgbmVjZXNzYXJ5IHJpZ2h0cyB0byBwZXJtaXQgdGhlIGZvbGxvd2luZzo8L3A+CisKKzxvbD4KKyAgICAgICA8bGk+QSBzZXJpZXMgb2YgYWN0aW9ucyBtYXkgb2NjdXIgKCJQcm92aXNpb25pbmcgUHJvY2VzcyIpIGluIHdoaWNoIGEgdXNlciBtYXkgZXhlY3V0ZSB0aGUgUHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kKKyAgICAgICBvbiBhIG1hY2hpbmUgKCJUYXJnZXQgTWFjaGluZSIpIHdpdGggdGhlIGludGVudCBvZiBpbnN0YWxsaW5nLCBleHRlbmRpbmcgb3IgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW4gRWNsaXBzZS1iYXNlZAorICAgICAgIHByb2R1Y3QuPC9saT4KKyAgICAgICA8bGk+RHVyaW5nIHRoZSBQcm92aXNpb25pbmcgUHJvY2VzcywgdGhlIFByb3Zpc2lvbmluZyBUZWNobm9sb2d5IG1heSBjYXVzZSB0aGlyZCBwYXJ0eSBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBvciBhIHBvcnRpb24gdGhlcmVvZiB0byBiZQorICAgICAgIGFjY2Vzc2VkIGFuZCBjb3BpZWQgdG8gdGhlIFRhcmdldCBNYWNoaW5lLjwvbGk+CisgICAgICAgPGxpPlB1cnN1YW50IHRvIHRoZSBTcGVjaWZpY2F0aW9uLCB5b3Ugd2lsbCBwcm92aWRlIHRvIHRoZSB1c2VyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mIHRoZSBJbnN0YWxsYWJsZQorICAgICAgIFNvZnR3YXJlICgiSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IikgYW5kIHN1Y2ggSW5zdGFsbGFibGUgU29mdHdhcmUgQWdyZWVtZW50IHNoYWxsIGJlIGFjY2Vzc2VkIGZyb20gdGhlIFRhcmdldAorICAgICAgIE1hY2hpbmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiBTdWNoIEluc3RhbGxhYmxlIFNvZnR3YXJlIEFncmVlbWVudCBtdXN0IGluZm9ybSB0aGUgdXNlciBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBnb3Zlcm4KKyAgICAgICB0aGUgSW5zdGFsbGFibGUgU29mdHdhcmUgYW5kIG11c3Qgc29saWNpdCBhY2NlcHRhbmNlIGJ5IHRoZSBlbmQgdXNlciBpbiB0aGUgbWFubmVyIHByZXNjcmliZWQgaW4gc3VjaCBJbnN0YWxsYWJsZSBTb2Z0d2FyZSBBZ3JlZW1lbnQuIFVwb24gc3VjaAorICAgICAgIGluZGljYXRpb24gb2YgYWdyZWVtZW50IGJ5IHRoZSB1c2VyLCB0aGUgcHJvdmlzaW9uaW5nIFRlY2hub2xvZ3kgd2lsbCBjb21wbGV0ZSBpbnN0YWxsYXRpb24gb2YgdGhlIEluc3RhbGxhYmxlIFNvZnR3YXJlLjwvbGk+Cis8L29sPgorCis8aDM+Q3J5cHRvZ3JhcGh5PC9oMz4KKworPHA+Q29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseSBtYXkgaGF2ZSByZXN0cmljdGlvbnMgb24gdGhlIGltcG9ydCwgcG9zc2Vzc2lvbiwgYW5kIHVzZSwgYW5kL29yIHJlLWV4cG9ydCB0bworICAgYW5vdGhlciBjb3VudHJ5LCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBCRUZPUkUgdXNpbmcgYW55IGVuY3J5cHRpb24gc29mdHdhcmUsIHBsZWFzZSBjaGVjayB0aGUgY291bnRyeSdzIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyBjb25jZXJuaW5nIHRoZSBpbXBvcnQsCisgICBwb3NzZXNzaW9uLCBvciB1c2UsIGFuZCByZS1leHBvcnQgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZSwgdG8gc2VlIGlmIHRoaXMgaXMgcGVybWl0dGVkLjwvcD4KKworPHA+PHNtYWxsPkphdmEgYW5kIGFsbCBKYXZhLWJhc2VkIHRyYWRlbWFya3MgYXJlIHRyYWRlbWFya3Mgb2YgT3JhY2xlIENvcnBvcmF0aW9uIGluIHRoZSBVbml0ZWQgU3RhdGVzLCBvdGhlciBjb3VudHJpZXMsIG9yIGJvdGguPC9zbWFsbD48L3A+CisKKworPC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQzNTgxNgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvcG9tLnhtbApAQCAtMCwwICsxLDgyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgQ29weXJpZ2h0IChDKSAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CisgICBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgorCisgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAgIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAgIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgICBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQorICAgICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgICBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICAgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAgIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgICBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0+CisKKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgIDxwYXJlbnQ+CisgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KKyAgICA8dmVyc2lvbj40LjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPC9wYXJlbnQ+CisKKyAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmxmczwvYXJ0aWZhY3RJZD4KKyAgPHBhY2thZ2luZz5lY2xpcHNlLWZlYXR1cmU8L3BhY2thZ2luZz4KKworICA8bmFtZT5KR2l0IC0gT3B0aW9uYWwgTEZTIHN1cHBvcnQ8L25hbWU+CisgIDxkZXBlbmRlbmNpZXM+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0PC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CisgIDwvZGVwZW5kZW5jaWVzPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCAwM2M5ZmVkLi5hZTMwZjA4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTI2LDggKzI2LDEzIEBACiAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdCIKICAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CiAKKyAgIDxpbmNsdWRlcworICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQubGZzIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KKwogICAgPHJlcXVpcmVzPgogICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI0LjMuMCIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjQuMy4wIiBtYXRjaD0iZXF1aXZhbGVudCIvPgogICAgPC9yZXF1aXJlcz4KIAogICAgPHBsdWdpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L2NhdGVnb3J5LnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9jYXRlZ29yeS54bWwKaW5kZXggMjE4NmFkOS4uYzJiZmM5MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L2NhdGVnb3J5LnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnJlcG9zaXRvcnkvY2F0ZWdvcnkueG1sCkBAIC0yMSw2ICsyMSwxMiBAQAogICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlXzAuMC4wLnF1YWxpZmllci5qYXIiIGlkPSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlIiB2ZXJzaW9uPSIwLjAuMCIgcGF0Y2g9InRydWUiPgogICAgICAgPGNhdGVnb3J5IG5hbWU9IkpHaXQiLz4KICAgIDwvZmVhdHVyZT4KKyAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UuamdpdC5sZnNfMC4wLjAucXVhbGlmaWVyLmphciIgaWQ9Im9yZy5lY2xpcHNlLmpnaXQubGZzIiB2ZXJzaW9uPSIwLjAuMCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0iSkdpdCIvPgorICAgPC9mZWF0dXJlPgorICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5qZ2l0Lmxmc18wLjAuMC5xdWFsaWZpZXIuamFyIiBpZD0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjAuMC4wIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJKR2l0Ii8+CisgICA8L2ZlYXR1cmU+CiAgICA8Y2F0ZWdvcnktZGVmIG5hbWU9IkpHaXQiIGxhYmVsPSJKR2l0Ij4KICAgICAgIDxkZXNjcmlwdGlvbj4KICAgICAgICAgIEpHaXQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L3BvbS54bWwKaW5kZXggNmU1ZmQwOS4uOWQ4NDJlZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5L3BvbS54bWwKQEAgLTcwLDYgKzcwLDE2IEBACiAJICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CiAJPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgorCSAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKwkgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgorCSAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorCTwvZGVwZW5kZW5jeT4KKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CisgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI8L2FydGlmYWN0SWQ+CisgICAgICA8dmVyc2lvbj4ke3Byb2plY3QudmVyc2lvbn08L3ZlcnNpb24+CisgICAgPC9kZXBlbmRlbmN5PgorICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQucGdtPC9hcnRpZmFjdElkPgogICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjMudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjMudGFyZ2V0CmluZGV4IGU4NjcwZTcuLjE5ZWRmNTEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4zLnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMy50YXJnZXQKQEAgLTQ1LDYgKzQ1LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcub2JqZW5lc2lzLnNvdXJjZSIgdmVyc2lvbj0iMS4wLjAudjIwMTEwNTIxMTk0MyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5tb2NraXRvIiB2ZXJzaW9uPSIxLjguNC52MjAxMzAzMDMxNTAwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLm1vY2tpdG8uc291cmNlIiB2ZXJzaW9uPSIxLjguNC52MjAxMzAzMDMxNTAwIi8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjIuNC52MjAxMzExMjMxNzA0Ii8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoIiB2ZXJzaW9uPSIwLjEuNTEudjIwMTQxMDMwMjAwMCIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaC5zb3VyY2UiIHZlcnNpb249IjAuMS41MS52MjAxNDEwMzAyMDAwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmp1bml0IiB2ZXJzaW9uPSI0LjExLjAudjIwMTMwMzA4MDAzMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjQudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjQudGFyZ2V0CmluZGV4IDBiODVkNzUuLjM0NTFiNDIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC40LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNC50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL21iYXJiZXJvL2ZyLm9iZW8ucmVsZW5nLnRhcmdldHBsYXRmb3JtIC0tPgotPHRhcmdldCBuYW1lPSJqZ2l0LTQuNCIgc2VxdWVuY2VOdW1iZXI9IjE0NDAwMjQwNzkiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuNCIgc2VxdWVuY2VOdW1iZXI9IjE0NDQxNjc4MjAiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS4yLjEzLnYyMDE1MDczMCIvPgpAQCAtNDUsNiArNDUsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5vYmplbmVzaXMuc291cmNlIiB2ZXJzaW9uPSIxLjAuMC52MjAxMTA1MjExOTQzIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLm1vY2tpdG8iIHZlcnNpb249IjEuOC40LnYyMDEzMDMwMzE1MDAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcubW9ja2l0by5zb3VyY2UiIHZlcnNpb249IjEuOC40LnYyMDEzMDMwMzE1MDAiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuMi40LnYyMDEzMTEyMzE3MDQiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2giIHZlcnNpb249IjAuMS41MS52MjAxNDEwMzAyMDAwIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjUxLnYyMDE0MTAzMDIwMDAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuanVuaXQiIHZlcnNpb249IjQuMTEuMC52MjAxMzAzMDgwMDMwIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNS50YXJnZXQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNS50YXJnZXQKaW5kZXggMjA2NzQ4Mi4uY2U3MTIyMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjUudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC41LnRhcmdldApAQCAtNDUsNiArNDUsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5vYmplbmVzaXMuc291cmNlIiB2ZXJzaW9uPSIxLjAuMC52MjAxNTA1MTIxOTE1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLm1vY2tpdG8iIHZlcnNpb249IjEuOC40LnYyMDEzMDMwMzE1MDAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcubW9ja2l0by5zb3VyY2UiIHZlcnNpb249IjEuOC40LnYyMDEzMDMwMzE1MDAiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuMi40LnYyMDEzMTEyMzE3MDQiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2giIHZlcnNpb249IjAuMS41My52MjAxNTA4MTgwNTE1Ii8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjUzLnYyMDE1MDgxODA1MTUiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuanVuaXQiIHZlcnNpb249IjQuMTEuMC52MjAxMzAzMDgwMDMwIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAxNTAxMjQwNzM3NDctTHVuYS1TUjIudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvb3JiaXQvUjIwMTUwMTI0MDczNzQ3LUx1bmEtU1IyLnRwZAppbmRleCAzOGM5Mjk3Li5kOWUwNzJmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAxNTAxMjQwNzM3NDctTHVuYS1TUjIudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDE1MDEyNDA3Mzc0Ny1MdW5hLVNSMi50cGQKQEAgLTI0LDYgKzI0LDcgQEAKIAlvcmcub2JqZW5lc2lzLnNvdXJjZSBbMS4wLjAudjIwMTEwNTIxMTk0MywxLjAuMC52MjAxMTA1MjExOTQzXQogCW9yZy5tb2NraXRvIFsxLjguNC52MjAxMzAzMDMxNTAwLDEuOC40LnYyMDEzMDMwMzE1MDBdCiAJb3JnLm1vY2tpdG8uc291cmNlIFsxLjguNC52MjAxMzAzMDMxNTAwLDEuOC40LnYyMDEzMDMwMzE1MDBdCisJY29tLmdvb2dsZS5nc29uIFsyLjIuNC52MjAxMzExMjMxNzA0LDIuMi40LnYyMDEzMTEyMzE3MDRdCiAJY29tLmpjcmFmdC5qc2NoIFswLjEuNTEudjIwMTQxMDMwMjAwMCwwLjEuNTEudjIwMTQxMDMwMjAwMF0KIAljb20uamNyYWZ0LmpzY2guc291cmNlIFswLjEuNTEudjIwMTQxMDMwMjAwMCwwLjEuNTEudjIwMTQxMDMwMjAwMF0KIAlvcmcuanVuaXQgWzQuMTEuMC52MjAxMzAzMDgwMDMwLDQuMTEuMC52MjAxMzAzMDgwMDMwXQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvb3JiaXQvUjIwMTUwODIxMTUzMzQxLU1hcnMudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvb3JiaXQvUjIwMTUwODIxMTUzMzQxLU1hcnMudHBkCmluZGV4IGNiNjM4MDcuLjVjYWNkNzEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDE1MDgyMTE1MzM0MS1NYXJzLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAxNTA4MjExNTMzNDEtTWFycy50cGQKQEAgLTI0LDYgKzI0LDcgQEAKIAlvcmcub2JqZW5lc2lzLnNvdXJjZSBbMS4wLjAudjIwMTUwNTEyMTkxNSwxLjAuMC52MjAxNTA1MTIxOTE1XQogCW9yZy5tb2NraXRvIFsxLjguNC52MjAxMzAzMDMxNTAwLDEuOC40LnYyMDEzMDMwMzE1MDBdCiAJb3JnLm1vY2tpdG8uc291cmNlIFsxLjguNC52MjAxMzAzMDMxNTAwLDEuOC40LnYyMDEzMDMwMzE1MDBdCisJY29tLmdvb2dsZS5nc29uIFsyLjIuNC52MjAxMzExMjMxNzA0LDIuMi40LnYyMDEzMTEyMzE3MDRdCiAJY29tLmpjcmFmdC5qc2NoIFswLjEuNTMudjIwMTUwODE4MDUxNSwwLjEuNTMudjIwMTUwODE4MDUxNV0KIAljb20uamNyYWZ0LmpzY2guc291cmNlIFswLjEuNTMudjIwMTUwODE4MDUxNSwwLjEuNTMudjIwMTUwODE4MDUxNV0KIAlvcmcuanVuaXQgWzQuMTEuMC52MjAxMzAzMDgwMDMwLDQuMTEuMC52MjAxMzAzMDgwMDMwXQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwKaW5kZXggN2Y0NGRmOC4uNjhlZmM0NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9wb20ueG1sCkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDwhLS0KLSAgIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMywgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgorICAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE1LCBNYXR0aGlhcyBTb2huIDxtYXR0aGlhcy5zb2huQHNhcC5jb20+CiAgICBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgogCiAgICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQpAQCAtNzgsNiArNzgsNyBAQAogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC50YXJnZXQ8L21vZHVsZT4KICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvbW9kdWxlPgogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlPC9tb2R1bGU+CisgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0LnBnbS5zb3VyY2UuZmVhdHVyZTwvbW9kdWxlPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmVmbG9nVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmVmbG9nVGVzdC5qYXZhCmluZGV4IGNlODA4MzIuLjczMzBlZTkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL1JlZmxvZ1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9SZWZsb2dUZXN0LmphdmEKQEAgLTU3LDI0ICs1NywyNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFNpbmdsZUNvbW1pdCgpIHRocm93cyBFeGNlcHRpb24gewotCQluZXcgR2l0KGRiKS5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKIAotCQlhc3NlcnRFcXVhbHMoIjZmZDQxYmUgSEVBREB7MH06IGNvbW1pdCAoaW5pdGlhbCk6IGluaXRpYWwgY29tbWl0IiwKLQkJCQlleGVjdXRlKCJnaXQgcmVmbG9nIilbMF0pOworCQkJYXNzZXJ0RXF1YWxzKCI2ZmQ0MWJlIEhFQURAezB9OiBjb21taXQgKGluaXRpYWwpOiBpbml0aWFsIGNvbW1pdCIsCisJCQkJCWV4ZWN1dGUoImdpdCByZWZsb2ciKVswXSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RCcmFuY2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZmlyc3QgY29tbWl0IikuY2FsbCgpOwotCQlnaXQuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0TmFtZSgic2lkZSIpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUiLCAic2lkZSBjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZSIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNpZGUgY29tbWl0IikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImZpcnN0IGNvbW1pdCIpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5zZXROYW1lKCJzaWRlIikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUiLCAic2lkZSBjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2lkZSBjb21taXQiKS5jYWxsKCk7CiAKLQkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKLQkJCQkiMzg4OTBjNyBzaWRlQHswfTogY29tbWl0OiBzaWRlIGNvbW1pdCIsCi0JCQkJImQyMTY5ODYgc2lkZUB7MX06IGJyYW5jaDogQ3JlYXRlZCBmcm9tIGNvbW1pdCBmaXJzdCBjb21taXQiLAotCQkJCSIiIH0sIGV4ZWN1dGUoImdpdCByZWZsb2cgcmVmcy9oZWFkcy9zaWRlIikpOworCQkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKKwkJCQkJIjM4ODkwYzcgc2lkZUB7MH06IGNvbW1pdDogc2lkZSBjb21taXQiLAorCQkJCQkiZDIxNjk4NiBzaWRlQHsxfTogYnJhbmNoOiBDcmVhdGVkIGZyb20gY29tbWl0IGZpcnN0IGNvbW1pdCIsCisJCQkJCSIiIH0sIGV4ZWN1dGUoImdpdCByZWZsb2cgcmVmcy9oZWFkcy9zaWRlIikpOworCQl9CiAJfQogfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL1JlcG9UZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9SZXBvVGVzdC5qYXZhCmluZGV4IDBlZWU3NzEuLmJhNjIzODMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL1JlcG9UZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmVwb1Rlc3QuamF2YQpAQCAtNzQsMjggKzc0LDMyIEBAIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXN1cGVyLnNldFVwKCk7CiAKIAkJZGVmYXVsdERiID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGVmYXVsdERiKTsKLQkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKGRlZmF1bHREYiwgImhlbGxvLnR4dCIsICJ3b3JsZCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImhlbGxvLnR4dCIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRlZmF1bHREYikpIHsKKwkJCUpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZShkZWZhdWx0RGIsICJoZWxsby50eHQiLCAid29ybGQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiaGVsbG8udHh0IikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQl9CiAKIAkJbm90RGVmYXVsdERiID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKLQkJZ2l0ID0gbmV3IEdpdChub3REZWZhdWx0RGIpOwotCQlKR2l0VGVzdFV0aWwud3JpdGVUcmFzaEZpbGUobm90RGVmYXVsdERiLCAid29ybGQudHh0IiwgImhlbGxvIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigid29ybGQudHh0IikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQobm90RGVmYXVsdERiKSkgeworCQkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKG5vdERlZmF1bHREYiwgIndvcmxkLnR4dCIsICJoZWxsbyIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJ3b3JsZC50eHQiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCX0KIAogCQlncm91cEFEYiA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7Ci0JCWdpdCA9IG5ldyBHaXQoZ3JvdXBBRGIpOwotCQlKR2l0VGVzdFV0aWwud3JpdGVUcmFzaEZpbGUoZ3JvdXBBRGIsICJhLnR4dCIsICJ3b3JsZCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEudHh0IikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZ3JvdXBBRGIpKSB7CisJCQlKR2l0VGVzdFV0aWwud3JpdGVUcmFzaEZpbGUoZ3JvdXBBRGIsICJhLnR4dCIsICJ3b3JsZCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJfQogCiAJCWdyb3VwQkRiID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKLQkJZ2l0ID0gbmV3IEdpdChncm91cEJEYik7Ci0JCUpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZShncm91cEJEYiwgImIudHh0IiwgIndvcmxkIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYi50eHQiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChncm91cEJEYikpIHsKKwkJCUpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZShncm91cEJEYiwgImIudHh0IiwgIndvcmxkIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImIudHh0IikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQl9CiAKIAkJcmVzb2x2ZVJlbGF0aXZlVXJpcygpOwogCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL0JVQ0sgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9CVUNLCmluZGV4IGVkY2YyZmMuLjQ3NzExYjUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL0JVQ0sKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vQlVDSwpAQCAtOSw4ICs5LDE4IEBACiAgICAgJy8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0JywKICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU6amdpdC1hcmNoaXZlJywKICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlOmh0dHAtYXBhY2hlJywKKyAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI6amdpdC1sZnMtc2VydmVyJywKICAgICAnLy9vcmcuZWNsaXBzZS5qZ2l0LnVpOnVpJywKICAgICAnLy9saWI6YXJnczRqJywKKyAgICAnLy9saWI6aHR0cGNvbXBvbmVudHMnLAorICAgICcvL2xpYjpodHRwY29yZScsCisgICAgJy8vbGliL2pldHR5Omh0dHAnLAorICAgICcvL2xpYi9qZXR0eTppbycsCisgICAgJy8vbGliL2pldHR5OnNlcnZlcicsCisgICAgJy8vbGliL2pldHR5OnNlcnZsZXQnLAorICAgICcvL2xpYi9qZXR0eTpzZWN1cml0eScsCisgICAgJy8vbGliL2pldHR5OnV0aWwnLAorICAgICcvL2xpYjpzZXJ2bGV0LWFwaScKICAgXSwKICAgdmlzaWJpbGl0eSA9IFsnUFVCTElDJ10sCiApCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGJmMWZjNWQuLmI2NTRmYzkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC03LDkgKzcsMjUgQEAKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43Ci1JbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmFyY2hpdmVyczt2ZXJzaW9uPSJbMS4zLDIuMCkiLAorSW1wb3J0LVBhY2thZ2U6IGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iWzMuMS4wLDQuMC4wKSIsCisgamF2YXguc2VydmxldC5odHRwO3ZlcnNpb249IlszLjEuMCw0LjAuMCkiLAorIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnM7dmVyc2lvbj0iWzEuMywyLjApIiwKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuYXJjaGl2ZXJzLnRhcjt2ZXJzaW9uPSJbMS4zLDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnMuemlwO3ZlcnNpb249IlsxLjMsMi4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5odHRwO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5pbzt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHk7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LmF1dGhlbnRpY2F0aW9uO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXI7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5oYW5kbGVyO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIubmlvO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0O3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS51dGlsO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKKyBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmNvbXBvbmVudDt2ZXJzaW9uPSJbOS4wLjAsMTAuMC4wKSIsCisgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5sb2c7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzkuMC4wLDEwLjAuMCkiLAorIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwudGhyZWFkO3ZlcnNpb249Ils5LjAuMCwxMC4wLjApIiwKICBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKICBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCiAgb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLApAQCAtMjMsOCArMzksMTEgQEAKICBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKICBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKICBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdHJlZTt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKICBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNC4zLjAsNC40LjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249IjQuMy4wIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAogIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLAogIG9yZy5lY2xpcHNlLmpnaXQubm90ZXM7dmVyc2lvbj0iWzQuMy4wLDQuNC4wKSIsCiAgb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils0LjMuMCw0LjQuMCkiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvc2VydmljZXMvb3JnLmVjbGlwc2UuamdpdC5wZ20uVGV4dEJ1aWx0aW4gYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgppbmRleCA2YWEyMDA0Li5jMTU5ZjdkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgpAQCAtMzgsNiArMzgsNyBAQAogb3JnLmVjbGlwc2UuamdpdC5wZ20uVmVyc2lvbgogCiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5kZWJ1Zy5EaWZmQWxnb3JpdGhtcworb3JnLmVjbGlwc2UuamdpdC5wZ20uZGVidWcuTGZzU3RvcmUKIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnLk1ha2VDYWNoZVRyZWUKIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnLlJlYWREaXJDYWNoZQogb3JnLmVjbGlwc2UuamdpdC5wZ20uZGVidWcuUmVidWlsZENvbW1pdEdyYXBoCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcG9tLnhtbAppbmRleCAwNTMxZTQ0Li44ZDBiY2Y5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3BvbS54bWwKQEAgLTEyMiw2ICsxMjIsMzQgQEAKICAgICAgIDxhcnRpZmFjdElkPmxvZzRqPC9hcnRpZmFjdElkPgogICAgICAgPHZlcnNpb24+JHtsb2c0ai12ZXJzaW9ufTwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpldHR5PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+amV0dHktc2VydmxldDwvYXJ0aWZhY3RJZD4KKyAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8ZGVwZW5kZW5jeT4KKyAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPGRlcGVuZGVuY3k+CisgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgorICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgorICAgICAgPHZlcnNpb24+JHtwcm9qZWN0LnZlcnNpb259PC92ZXJzaW9uPgorICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDxkZXBlbmRlbmN5PgorICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KKyAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvYXJ0aWZhY3RJZD4KKyAgICAgIDx2ZXJzaW9uPiR7cHJvamVjdC52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICA8L2RlcGVuZGVuY3k+CiAgIDwvZGVwZW5kZW5jaWVzPgogCiAgIDxidWlsZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5wcm9wZXJ0aWVzCmluZGV4IGI0YjEyNjEuLjU0NGUyMzQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcwpAQCAtMTI1LDYgKzEyNSw3IEBACiBtZXRhVmFyX3JldmlzaW9uPVJFVklTSU9OCiBtZXRhVmFyX3NlY29uZHM9U0VDT05EUwogbWV0YVZhcl9zZXJ2aWNlPVNFUlZJQ0UKK21ldGFWYXJfbGZzU3RvcmFnZT1TVE9SQUdFCiBtZXRhVmFyX3RyZWVpc2g9dHJlZS1pc2gKIG1ldGFWYXJfdXJpaXNoPXVyaS1pc2gKIG1ldGFWYXJfdXJsPVVSTApAQCAtMjE4LDYgKzIxOSwxMCBAQAogdXNhZ2VfR2M9Q2xlYW51cCB1bm5lY2Vzc2FyeSBmaWxlcyBhbmQgb3B0aW1pemUgdGhlIGxvY2FsIHJlcG9zaXRvcnkKIHVzYWdlX0dsb2c9VmlldyBjb21taXQgaGlzdG9yeSBhcyBhIGdyYXBoCiB1c2FnZV9JbmRleFBhY2s9QnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZQordXNhZ2VfTEZTRGlyZWN0b3J5PURpcmVjdG9yeSB0byBzdG9yZSBsYXJnZSBvYmplY3RzCit1c2FnZV9MRlNQb3J0PVNlcnZlciBodHRwIHBvcnQKK3VzYWdlX0xGU1J1blN0b3JlPWZzOiBzdG9yZSBsZnMgb2JqZWN0cyBpbiBmaWxlIHN5c3RlbQordXNhZ2VfTEZTU3RvcmVVcmw9VVJMIG9mIHRoZSBMRlMgc3RvcmUKIHVzYWdlX0xvbmdGb3JtYXQ9QWx3YXlzIG91dHB1dCB0aGUgbG9uZyBmb3JtYXQKIHVzYWdlX0xzUmVtb3RlPUxpc3QgcmVmZXJlbmNlcyBpbiBhIHJlbW90ZSByZXBvc2l0b3J5CiB1c2FnZV9sc1JlbW90ZUhlYWRzPVNob3cgb25seSByZWZzIHN0YXJ0aW5nIHdpdGggcmVmcy9oZWFkcwpAQCAtMzQ3LDYgKzM1Miw3IEBACiB1c2FnZV9yZXNldEhhcmQ9UmVzZXRzIHRoZSBpbmRleCBhbmQgd29ya2luZyB0cmVlCiB1c2FnZV9yZXNldFNvZnQ9UmVzZXRzIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGluZGV4IGZpbGUgbm9yIHRoZSB3b3JraW5nIHRyZWUKIHVzYWdlX3Jlc2V0TWl4ZWQ9UmVzZXRzIHRoZSBpbmRleCBidXQgbm90IHRoZSB3b3JraW5nIHRyZWUKK3VzYWdlX3J1bkxmc1N0b3JlPVJ1biBMRlMgU3RvcmUgaW4gYSBnaXZlbiBkaXJlY3RvcnkKIHVzYWdlX3NldFRoZUdpdFJlcG9zaXRvcnlUb09wZXJhdGVPbj1zZXQgdGhlIGdpdCByZXBvc2l0b3J5IHRvIG9wZXJhdGUgb24KIHVzYWdlX3Nob3c9ZGlzcGxheSBvbmUgY29tbWl0CiB1c2FnZV9zaG93UmVmTmFtZXNNYXRjaGluZ0NvbW1pdHM9U2hvdyByZWYgbmFtZXMgbWF0Y2hpbmcgY29tbWl0cwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JyYW5jaC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JyYW5jaC5qYXZhCmluZGV4IDA0NWYzNTcuLmJmNmVlM2EgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9CcmFuY2guamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vQnJhbmNoLmphdmEKQEAgLTMxMCwyNCArMzEwLDI0IEBAIHByaXZhdGUgdm9pZCBkZWxldGUoTGlzdDxTdHJpbmc+IGJyYW5jaGVzLCBib29sZWFuIGZvcmNlKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJU3RyaW5nIGN1cnJlbnQgPSBkYi5nZXRCcmFuY2goKTsKIAkJT2JqZWN0SWQgaGVhZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOwotCQlmb3IgKFN0cmluZyBicmFuY2ggOiBicmFuY2hlcykgewotCQkJaWYgKGJyYW5jaC5lcXVhbHMoY3VycmVudCkpIHsKLQkJCQl0aHJvdyBkaWUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5jYW5ub3REZWxldGVUaGVCcmFuY2hXaGljaFlvdUFyZUN1cnJlbnRseU9uLCBicmFuY2gpKTsKKwkJZm9yIChTdHJpbmcgYiA6IGJyYW5jaGVzKSB7CisJCQlpZiAoYi5lcXVhbHMoY3VycmVudCkpIHsKKwkJCQl0aHJvdyBkaWUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5jYW5ub3REZWxldGVUaGVCcmFuY2hXaGljaFlvdUFyZUN1cnJlbnRseU9uLCBiKSk7CiAJCQl9CiAJCQlSZWZVcGRhdGUgdXBkYXRlID0gZGIudXBkYXRlUmVmKChyZW1vdGUgPyBDb25zdGFudHMuUl9SRU1PVEVTCiAJCQkJCTogQ29uc3RhbnRzLlJfSEVBRFMpCi0JCQkJCSsgYnJhbmNoKTsKKwkJCQkJKyBiKTsKIAkJCXVwZGF0ZS5zZXROZXdPYmplY3RJZChoZWFkKTsKIAkJCXVwZGF0ZS5zZXRGb3JjZVVwZGF0ZShmb3JjZSB8fCByZW1vdGUpOwogCQkJUmVzdWx0IHJlc3VsdCA9IHVwZGF0ZS5kZWxldGUoKTsKIAkJCWlmIChyZXN1bHQgPT0gUmVzdWx0LlJFSkVDVEVEKSB7Ci0JCQkJdGhyb3cgZGllKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KENMSVRleHQuZ2V0KCkuYnJhbmNoSXNOb3RBbkFuY2VzdG9yT2ZZb3VyQ3VycmVudEhFQUQsIGJyYW5jaCkpOworCQkJCXRocm93IGRpZShNZXNzYWdlRm9ybWF0LmZvcm1hdChDTElUZXh0LmdldCgpLmJyYW5jaElzTm90QW5BbmNlc3Rvck9mWW91ckN1cnJlbnRIRUFELCBiKSk7CiAJCQl9IGVsc2UgaWYgKHJlc3VsdCA9PSBSZXN1bHQuTkVXKQotCQkJCXRocm93IGRpZShNZXNzYWdlRm9ybWF0LmZvcm1hdChDTElUZXh0LmdldCgpLmJyYW5jaE5vdEZvdW5kLCBicmFuY2gpKTsKKwkJCQl0aHJvdyBkaWUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5icmFuY2hOb3RGb3VuZCwgYikpOwogCQkJaWYgKHJlbW90ZSkKLQkJCQlvdXR3LnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5kZWxldGVkUmVtb3RlQnJhbmNoLCBicmFuY2gpKTsKKwkJCQlvdXR3LnByaW50bG4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5kZWxldGVkUmVtb3RlQnJhbmNoLCBiKSk7CiAJCQllbHNlIGlmICh2ZXJib3NlKQotCQkJCW91dHcucHJpbnRsbihNZXNzYWdlRm9ybWF0LmZvcm1hdChDTElUZXh0LmdldCgpLmRlbGV0ZWRCcmFuY2gsIGJyYW5jaCkpOworCQkJCW91dHcucHJpbnRsbihNZXNzYWdlRm9ybWF0LmZvcm1hdChDTElUZXh0LmdldCgpLmRlbGV0ZWRCcmFuY2gsIGIpKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9MZnNTdG9yZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL2RlYnVnL0xmc1N0b3JlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgzOThmNgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9MZnNTdG9yZS5qYXZhCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LCBTYXNhIFppdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4KKyAqIGFuZCBvdGhlciBjb3B5cmlnaHQgb3duZXJzIGFzIGRvY3VtZW50ZWQgaW4gdGhlIHByb2plY3QncyBJUCBsb2cuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnOworCitpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CitpbXBvcnQgamF2YS5uZXQuVVJJOworaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5Db25uZWN0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLkh0dHBDb25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5IdHRwQ29ubmVjdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLlNlcnZlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuU2VydmVyQ29ubmVjdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5oYW5kbGVyLkNvbnRleHRIYW5kbGVyQ29sbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRIb2xkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLkxhcmdlRmlsZVJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLkxmc1Byb3RvY29sU2VydmxldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnMuRmlsZUxmc1NlcnZsZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzLkZpbGVMZnNSZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGdtLkNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wZ20uVGV4dEJ1aWx0aW47CitpbXBvcnQgb3JnLmtvaHN1a2UuYXJnczRqLkFyZ3VtZW50OworaW1wb3J0IG9yZy5rb2hzdWtlLmFyZ3M0ai5PcHRpb247CisKK0BDb21tYW5kKGNvbW1vbiA9IHRydWUsIHVzYWdlID0gInVzYWdlX3J1bkxmc1N0b3JlIikKK2NsYXNzIExmc1N0b3JlIGV4dGVuZHMgVGV4dEJ1aWx0aW4geworCisJLyoqCisJICogVGlueSB3ZWIgYXBwbGljYXRpb24gc2VydmVyIGZvciB0ZXN0aW5nCisJICovCisJY2xhc3MgQXBwU2VydmVyIHsKKworCQlwcml2YXRlIGZpbmFsIFNlcnZlciBzZXJ2ZXI7CisKKwkJcHJpdmF0ZSBmaW5hbCBTZXJ2ZXJDb25uZWN0b3IgY29ubmVjdG9yOworCisJCXByaXZhdGUgZmluYWwgQ29udGV4dEhhbmRsZXJDb2xsZWN0aW9uIGNvbnRleHRzOworCisJCXByaXZhdGUgVVJJIHVyaTsKKworCQlBcHBTZXJ2ZXIoaW50IHBvcnQpIHsKKwkJCXNlcnZlciA9IG5ldyBTZXJ2ZXIoKTsKKworCQkJSHR0cENvbmZpZ3VyYXRpb24gaHR0cF9jb25maWcgPSBuZXcgSHR0cENvbmZpZ3VyYXRpb24oKTsKKwkJCWh0dHBfY29uZmlnLnNldE91dHB1dEJ1ZmZlclNpemUoMzI3NjgpOworCisJCQljb25uZWN0b3IgPSBuZXcgU2VydmVyQ29ubmVjdG9yKHNlcnZlciwKKwkJCQkJbmV3IEh0dHBDb25uZWN0aW9uRmFjdG9yeShodHRwX2NvbmZpZykpOworCQkJY29ubmVjdG9yLnNldFBvcnQocG9ydCk7CisJCQl0cnkgeworCQkJCVN0cmluZyBob3N0ID0gSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKCJsb2NhbGhvc3QiKSAvLyROT04tTkxTLTEkCisJCQkJCQkuZ2V0SG9zdEFkZHJlc3MoKTsKKwkJCQljb25uZWN0b3Iuc2V0SG9zdChob3N0KTsKKwkJCQlpZiAoaG9zdC5jb250YWlucygiOiIpICYmICFob3N0LnN0YXJ0c1dpdGgoIlsiKSkgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCWhvc3QgPSAiWyIgKyBob3N0ICsgIl0iOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkJCXVyaSA9IG5ldyBVUkkoImh0dHA6Ly8iICsgaG9zdCArICI6IiArIHBvcnQpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCX0gY2F0Y2ggKFVua25vd25Ib3N0RXhjZXB0aW9uIGUpIHsKKwkJCQl0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fubm90IGZpbmQgbG9jYWxob3N0IiwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CisJCQkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgVVJJIGVycm9yIG9uICIgKyB1cmksIGUpOyAvLyROT04tTkxTLTEkCisJCQl9CisKKwkJCWNvbnRleHRzID0gbmV3IENvbnRleHRIYW5kbGVyQ29sbGVjdGlvbigpOworCQkJc2VydmVyLnNldEhhbmRsZXIoY29udGV4dHMpOworCQkJc2VydmVyLnNldENvbm5lY3RvcnMobmV3IENvbm5lY3RvcltdIHsgY29ubmVjdG9yIH0pOworCQl9CisKKwkJLyoqCisJCSAqIENyZWF0ZSBhIG5ldyBzZXJ2bGV0IGNvbnRleHQgd2l0aGluIHRoZSBzZXJ2ZXIuCisJCSAqIDxwPgorCQkgKiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW52b2tlZCBiZWZvcmUgdGhlIHNlcnZlciBpcyBzdGFydGVkLCBvbmNlIGZvcgorCQkgKiBlYWNoIGNvbnRleHQgdGhlIGNhbGxlciB3YW50cyB0byByZWdpc3Rlci4KKwkJICoKKwkJICogQHBhcmFtIHBhdGgKKwkJICogICAgICAgICAgICBwYXRoIG9mIHRoZSBjb250ZXh0OyB1c2UgIi8iIGZvciB0aGUgcm9vdCBjb250ZXh0IGlmCisJCSAqICAgICAgICAgICAgYmluZGluZyB0byB0aGUgcm9vdCBpcyBkZXNpcmVkLgorCQkgKiBAcmV0dXJuIHRoZSBjb250ZXh0IHRvIGFkZCBzZXJ2bGV0cyBpbnRvLgorCQkgKi8KKwkJU2VydmxldENvbnRleHRIYW5kbGVyIGFkZENvbnRleHQoU3RyaW5nIHBhdGgpIHsKKwkJCWFzc2VydE5vdFJ1bm5pbmcoKTsKKwkJCWlmICgiIi5lcXVhbHMocGF0aCkpIC8vJE5PTi1OTFMtMSQKKwkJCQlwYXRoID0gIi8iOyAvLyROT04tTkxTLTEkCisKKwkJCVNlcnZsZXRDb250ZXh0SGFuZGxlciBjdHggPSBuZXcgU2VydmxldENvbnRleHRIYW5kbGVyKCk7CisJCQljdHguc2V0Q29udGV4dFBhdGgocGF0aCk7CisJCQljb250ZXh0cy5hZGRIYW5kbGVyKGN0eCk7CisKKwkJCXJldHVybiBjdHg7CisJCX0KKworCQl2b2lkIHN0YXJ0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzZXJ2ZXIuc3RhcnQoKTsKKwkJfQorCisJCXZvaWQgc3RvcCgpIHRocm93cyBFeGNlcHRpb24geworCQkJc2VydmVyLnN0b3AoKTsKKwkJfQorCisJCVVSSSBnZXRVUkkoKSB7CisJCQlyZXR1cm4gdXJpOworCQl9CisKKwkJcHJpdmF0ZSB2b2lkIGFzc2VydE5vdFJ1bm5pbmcoKSB7CisJCQlpZiAoc2VydmVyLmlzUnVubmluZygpKSB7CisJCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic2VydmVyIGlzIHJ1bm5pbmciKTsgLy8kTk9OLU5MUy0xJAorCQkJfQorCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgZW51bSBTdG9yZVR5cGUgeworCQlGUzsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0JKRUNUUyA9ICJvYmplY3RzLyI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTVE9SRV9QQVRIID0gIi8iICsgT0JKRUNUUyArICIqIjsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9UT0NPTF9QQVRIID0gIi9sZnMvb2JqZWN0cy9iYXRjaCI7IC8vJE5PTi1OTFMtMSQKKworCUBPcHRpb24obmFtZSA9ICItLXBvcnQiLCBhbGlhc2VzID0geyItcCIgfSwgbWV0YVZhciA9ICJtZXRhVmFyX3BvcnQiLAorCQkJdXNhZ2UgPSAidXNhZ2VfTEZTUG9ydCIpCisJaW50IHBvcnQ7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1zdG9yZSIsIG1ldGFWYXIgPSAibWV0YVZhcl9sZnNTdG9yYWdlIiwgdXNhZ2UgPSAidXNhZ2VfTEZTUnVuU3RvcmUiKQorCVN0b3JlVHlwZSBzdG9yZVR5cGU7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1zdG9yZS11cmwiLCBhbGlhc2VzID0geyItdSIgfSwgbWV0YVZhciA9ICJtZXRhVmFyX3VybCIsCisJCQl1c2FnZSA9ICJ1c2FnZV9MRlNTdG9yZVVybCIpCisJU3RyaW5nIHN0b3JlVXJsOworCisJQEFyZ3VtZW50KHJlcXVpcmVkID0gZmFsc2UsIG1ldGFWYXIgPSAibWV0YVZhcl9kaXJlY3RvcnkiLCB1c2FnZSA9ICJ1c2FnZV9MRlNEaXJlY3RvcnkiKQorCVN0cmluZyBkaXJlY3Rvcnk7CisKKwlTdHJpbmcgcHJvdG9jb2xVcmw7CisKKwlTdHJpbmcgYWNjZXNzS2V5OworCisJU3RyaW5nIHNlY3JldEtleTsKKworCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHJlcXVpcmVzUmVwb3NpdG9yeSgpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXByb3RlY3RlZCB2b2lkIHJ1bigpIHRocm93cyBFeGNlcHRpb24geworCQlBcHBTZXJ2ZXIgc2VydmVyID0gbmV3IEFwcFNlcnZlcihwb3J0KTsKKwkJVVJJIGJhc2VVUkkgPSBzZXJ2ZXIuZ2V0VVJJKCk7CisJCVNlcnZsZXRDb250ZXh0SGFuZGxlciBhcHAgPSBzZXJ2ZXIuYWRkQ29udGV4dCgiLyIpOyAvLyROT04tTkxTLTEkCisKKwkJZmluYWwgTGFyZ2VGaWxlUmVwb3NpdG9yeSByZXBvc2l0b3J5OworCQlzd2l0Y2ggKHN0b3JlVHlwZSkgeworCQljYXNlIEZTOgorCQkJUGF0aCBkaXIgPSBQYXRocy5nZXQoZGlyZWN0b3J5KTsKKwkJCUZpbGVMZnNSZXBvc2l0b3J5IGZzUmVwbyA9IG5ldyBGaWxlTGZzUmVwb3NpdG9yeSgKKwkJCQkJZ2V0U3RvcmVVcmwoYmFzZVVSSSksIGRpcik7CisJCQlGaWxlTGZzU2VydmxldCBjb250ZW50ID0gbmV3IEZpbGVMZnNTZXJ2bGV0KGZzUmVwbywgMzAwMDApOworCQkJYXBwLmFkZFNlcnZsZXQobmV3IFNlcnZsZXRIb2xkZXIoY29udGVudCksIFNUT1JFX1BBVEgpOworCQkJcmVwb3NpdG9yeSA9IGZzUmVwbzsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQkiVW5rbm93biBzdG9yZSB0eXBlOiAiICsgc3RvcmVUeXBlKTsgLy8kTk9OLU5MUy0xJAorCQl9CisKKwkJTGZzUHJvdG9jb2xTZXJ2bGV0IHByb3RvY29sID0gbmV3IExmc1Byb3RvY29sU2VydmxldCgpIHsKKworCQkJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisKKwkJCUBPdmVycmlkZQorCQkJcHJvdGVjdGVkIExhcmdlRmlsZVJlcG9zaXRvcnkgZ2V0TGFyZ2VGaWxlUmVwb3NpdG9yeSgpIHsKKwkJCQlyZXR1cm4gcmVwb3NpdG9yeTsKKwkJCX0KKworCQl9OworCQlhcHAuYWRkU2VydmxldChuZXcgU2VydmxldEhvbGRlcihwcm90b2NvbCksIFBST1RPQ09MX1BBVEgpOworCisJCXNlcnZlci5zdGFydCgpOworCisJCW91dHcucHJpbnRsbigiTEZTIHByb3RvY29sIFVSTDogIiArIGdldFByb3RvY29sVXJsKGJhc2VVUkkpKTsgLy8kTk9OLU5MUy0xJAorCQlpZiAoc3RvcmVUeXBlID09IFN0b3JlVHlwZS5GUykgeworCQkJb3V0dy5wcmludGxuKCJMRlMgb2JqZWN0cyBsb2NhdGVkIGluOiAiICsgZGlyZWN0b3J5KTsgLy8kTk9OLU5MUy0xJAorCQkJb3V0dy5wcmludGxuKCJMRlMgc3RvcmUgVVJMOiAiICsgZ2V0U3RvcmVVcmwoYmFzZVVSSSkpOyAvLyROT04tTkxTLTEkCisJCX0KKwl9CisKKwlwcml2YXRlIFN0cmluZyBnZXRTdG9yZVVybChVUkkgYmFzZVVSSSkgeworCQlpZiAoc3RvcmVVcmwgPT0gbnVsbCkgeworCQkJaWYgKHN0b3JlVHlwZSA9PSBTdG9yZVR5cGUuRlMpIHsKKwkJCQlzdG9yZVVybCA9IGJhc2VVUkkgKyAiLyIgKyBPQkpFQ1RTOyAvLyROT04tTkxTLTEkCisJCQl9IGVsc2UgeworCQkJCWRpZSgiTG9jYWwgc3RvcmUgbm90IHJ1bm5pbmcgYW5kIG5vIC0tc3RvcmUtdXJsIHNwZWNpZmllZCIpOyAvLyROT04tTkxTLTEkCisJCQl9CisJCX0KKwkJcmV0dXJuIHN0b3JlVXJsOworCX0KKworCXByaXZhdGUgU3RyaW5nIGdldFByb3RvY29sVXJsKFVSSSBiYXNlVVJJKSB7CisJCWlmIChwcm90b2NvbFVybCA9PSBudWxsKSB7CisJCQlwcm90b2NvbFVybCA9IGJhc2VVUkkgKyBQUk9UT0NPTF9QQVRIOworCQl9CisJCXJldHVybiBwcm90b2NvbFVybDsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vZGVidWcvVGV4dEhhc2hGdW5jdGlvbnMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9UZXh0SGFzaEZ1bmN0aW9ucy5qYXZhCmluZGV4IDA2MmY0ZTcuLjI4ZDkyYWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9UZXh0SGFzaEZ1bmN0aW9ucy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9kZWJ1Zy9UZXh0SGFzaEZ1bmN0aW9ucy5qYXZhCkBAIC0yODYsMjUgKzI4NiwyNSBAQCBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCWVsc2UKIAkJCQlyYi5maW5kR2l0RGlyKGRpcik7CiAKLQkJCVJlcG9zaXRvcnkgZGIgPSByYi5idWlsZCgpOworCQkJUmVwb3NpdG9yeSByZXBvID0gcmIuYnVpbGQoKTsKIAkJCXRyeSB7Ci0JCQkJcnVuKGRiKTsKKwkJCQlydW4ocmVwbyk7CiAJCQl9IGZpbmFsbHkgewotCQkJCWRiLmNsb3NlKCk7CisJCQkJcmVwby5jbG9zZSgpOwogCQkJfQogCQl9CiAJfQogCi0JcHJpdmF0ZSB2b2lkIHJ1bihSZXBvc2l0b3J5IGRiKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwlwcml2YXRlIHZvaWQgcnVuKFJlcG9zaXRvcnkgcmVwbykgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUxpc3Q8RnVuY3Rpb24+IGFsbCA9IGluaXQoKTsKIAogCQlsb25nIGZpbGVDbnQgPSAwOwogCQlsb25nIGxpbmVDbnQgPSAwOwotCQl0cnkgKE9iamVjdFJlYWRlciBvciA9IGRiLm5ld09iamVjdFJlYWRlcigpOworCQl0cnkgKE9iamVjdFJlYWRlciBvciA9IHJlcG8ubmV3T2JqZWN0UmVhZGVyKCk7CiAJCQlSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsob3IpOwogCQkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsob3IpKSB7CiAJCQlmaW5hbCBNdXRhYmxlT2JqZWN0SWQgaWQgPSBuZXcgTXV0YWJsZU9iamVjdElkKCk7Ci0JCQl0dy5yZXNldChydy5wYXJzZVRyZWUoZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpKTsKKwkJCXR3LnJlc2V0KHJ3LnBhcnNlVHJlZShyZXBvLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKSk7CiAJCQl0dy5zZXRSZWN1cnNpdmUodHJ1ZSk7CiAKIAkJCXdoaWxlICh0dy5uZXh0KCkpIHsKQEAgLTM0MSw3ICszNDEsNyBAQCBwcml2YXRlIHZvaWQgcnVuKFJlcG9zaXRvcnkgZGIpIHRocm93cyBFeGNlcHRpb24gewogCQkJfQogCQl9CiAKLQkJRmlsZSBkaXJlY3RvcnkgPSBkYi5nZXREaXJlY3RvcnkoKTsKKwkJRmlsZSBkaXJlY3RvcnkgPSByZXBvLmdldERpcmVjdG9yeSgpOwogCQlpZiAoZGlyZWN0b3J5ICE9IG51bGwpIHsKIAkJCVN0cmluZyBuYW1lID0gZGlyZWN0b3J5LmdldE5hbWUoKTsKIAkJCUZpbGUgcGFyZW50ID0gZGlyZWN0b3J5LmdldFBhcmVudEZpbGUoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmRUZXN0LmphdmEKaW5kZXggYWQzZmY2MC4uZDg0MjA0NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmRUZXN0LmphdmEKQEAgLTY5LDIzICs2OSwyNCBAQCBwcml2YXRlIEFwcGx5UmVzdWx0IGluaXQoZmluYWwgU3RyaW5nIG5hbWUpIHRocm93cyBFeGNlcHRpb24gewogCiAJcHJpdmF0ZSBBcHBseVJlc3VsdCBpbml0KGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBib29sZWFuIHByZUV4aXN0cywKIAkJCWZpbmFsIGJvb2xlYW4gcG9zdEV4aXN0cykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCWlmIChwcmVFeGlzdHMpIHsKKwkJCQlhID0gbmV3IFJhd1RleHQocmVhZEZpbGUobmFtZSArICJfUHJlSW1hZ2UiKSk7CisJCQkJd3JpdGUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCkuZ2V0UGFyZW50KCksIG5hbWUpLAorCQkJCQkJYS5nZXRTdHJpbmcoMCwgYS5zaXplKCksIGZhbHNlKSk7CiAKLQkJaWYgKHByZUV4aXN0cykgewotCQkJYSA9IG5ldyBSYXdUZXh0KHJlYWRGaWxlKG5hbWUgKyAiX1ByZUltYWdlIikpOwotCQkJd3JpdGUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCkuZ2V0UGFyZW50KCksIG5hbWUpLAotCQkJCQlhLmdldFN0cmluZygwLCBhLnNpemUoKSwgZmFsc2UpKTsKKwkJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4obmFtZSkuY2FsbCgpOworCQkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJQcmVJbWFnZSIpLmNhbGwoKTsKKwkJCX0KIAotCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKG5hbWUpLmNhbGwoKTsKLQkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJQcmVJbWFnZSIpLmNhbGwoKTsKKwkJCWlmIChwb3N0RXhpc3RzKSB7CisJCQkJYiA9IG5ldyBSYXdUZXh0KHJlYWRGaWxlKG5hbWUgKyAiX1Bvc3RJbWFnZSIpKTsKKwkJCX0KKworCQkJcmV0dXJuIGdpdAorCQkJCQkuYXBwbHkoKQorCQkJCQkuc2V0UGF0Y2goZ2V0VGVzdFJlc291cmNlKG5hbWUgKyAiLnBhdGNoIikpLmNhbGwoKTsKIAkJfQotCi0JCWlmIChwb3N0RXhpc3RzKQotCQkJYiA9IG5ldyBSYXdUZXh0KHJlYWRGaWxlKG5hbWUgKyAiX1Bvc3RJbWFnZSIpKTsKLQotCQlyZXR1cm4gZ2l0Ci0JCQkJLmFwcGx5KCkKLQkJCQkuc2V0UGF0Y2goZ2V0VGVzdFJlc291cmNlKG5hbWUgKyAiLnBhdGNoIikpLmNhbGwoKTsKIAl9CiAKIAlAVGVzdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Db21taXRDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Db21taXRDb21tYW5kVGVzdC5qYXZhCmluZGV4IGIzOWE2OGEuLjlkODdmMGMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmRUZXN0LmphdmEKQEAgLTE4NiwyOTcgKzE4NiwzMDIgQEAgcHVibGljIGJvb2xlYW4gaXNDYXNlU2Vuc2l0aXZlKCkgewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBjb21taXROZXdTdWJtb2R1bGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOwotCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwogCi0JCVN1Ym1vZHVsZUFkZENvbW1hbmQgY29tbWFuZCA9IG5ldyBTdWJtb2R1bGVBZGRDb21tYW5kKGRiKTsKLQkJU3RyaW5nIHBhdGggPSAic3ViIjsKLQkJY29tbWFuZC5zZXRQYXRoKHBhdGgpOwotCQlTdHJpbmcgdXJpID0gZGIuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1N0cmluZygpOwotCQljb21tYW5kLnNldFVSSSh1cmkpOwotCQlSZXBvc2l0b3J5IHJlcG8gPSBjb21tYW5kLmNhbGwoKTsKLQkJYXNzZXJ0Tm90TnVsbChyZXBvKTsKLQkJYWRkUmVwb1RvQ2xvc2UocmVwbyk7CisJCQlTdWJtb2R1bGVBZGRDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3VibW9kdWxlQWRkQ29tbWFuZChkYik7CisJCQlTdHJpbmcgcGF0aCA9ICJzdWIiOworCQkJY29tbWFuZC5zZXRQYXRoKHBhdGgpOworCQkJU3RyaW5nIHVyaSA9IGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKKwkJCWNvbW1hbmQuc2V0VVJJKHVyaSk7CisJCQlSZXBvc2l0b3J5IHJlcG8gPSBjb21tYW5kLmNhbGwoKTsKKwkJCWFzc2VydE5vdE51bGwocmVwbyk7CisJCQlhZGRSZXBvVG9DbG9zZShyZXBvKTsKIAotCQlTdWJtb2R1bGVXYWxrIGdlbmVyYXRvciA9IFN1Ym1vZHVsZVdhbGsuZm9ySW5kZXgoZGIpOwotCQlhc3NlcnRUcnVlKGdlbmVyYXRvci5uZXh0KCkpOwotCQlhc3NlcnRFcXVhbHMocGF0aCwgZ2VuZXJhdG9yLmdldFBhdGgoKSk7Ci0JCWFzc2VydEVxdWFscyhjb21taXQsIGdlbmVyYXRvci5nZXRPYmplY3RJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHVyaSwgZ2VuZXJhdG9yLmdldE1vZHVsZXNVcmwoKSk7Ci0JCWFzc2VydEVxdWFscyhwYXRoLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1BhdGgoKSk7Ci0JCWFzc2VydEVxdWFscyh1cmksIGdlbmVyYXRvci5nZXRDb25maWdVcmwoKSk7Ci0JCVJlcG9zaXRvcnkgc3ViTW9kUmVwbyA9IGdlbmVyYXRvci5nZXRSZXBvc2l0b3J5KCk7Ci0JCWFzc2VydE5vdE51bGwoc3ViTW9kUmVwbyk7Ci0JCXN1Yk1vZFJlcG8uY2xvc2UoKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbW1pdCwgcmVwby5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSk7CisJCQlTdWJtb2R1bGVXYWxrIGdlbmVyYXRvciA9IFN1Ym1vZHVsZVdhbGsuZm9ySW5kZXgoZGIpOworCQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKKwkJCWFzc2VydEVxdWFscyhwYXRoLCBnZW5lcmF0b3IuZ2V0UGF0aCgpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQsIGdlbmVyYXRvci5nZXRPYmplY3RJZCgpKTsKKwkJCWFzc2VydEVxdWFscyh1cmksIGdlbmVyYXRvci5nZXRNb2R1bGVzVXJsKCkpOworCQkJYXNzZXJ0RXF1YWxzKHBhdGgsIGdlbmVyYXRvci5nZXRNb2R1bGVzUGF0aCgpKTsKKwkJCWFzc2VydEVxdWFscyh1cmksIGdlbmVyYXRvci5nZXRDb25maWdVcmwoKSk7CisJCQlSZXBvc2l0b3J5IHN1Yk1vZFJlcG8gPSBnZW5lcmF0b3IuZ2V0UmVwb3NpdG9yeSgpOworCQkJYXNzZXJ0Tm90TnVsbChzdWJNb2RSZXBvKTsKKwkJCXN1Yk1vZFJlcG8uY2xvc2UoKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQsIHJlcG8ucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpOwogCi0JCVJldkNvbW1pdCBzdWJtb2R1bGVDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic3VibW9kdWxlIGFkZCIpCi0JCQkJLnNldE9ubHkocGF0aCkuY2FsbCgpOwotCQlhc3NlcnROb3ROdWxsKHN1Ym1vZHVsZUNvbW1pdCk7Ci0JCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl3YWxrLmFkZFRyZWUoY29tbWl0LmdldFRyZWUoKSk7Ci0JCXdhbGsuYWRkVHJlZShzdWJtb2R1bGVDb21taXQuZ2V0VHJlZSgpKTsKLQkJd2Fsay5zZXRGaWx0ZXIoVHJlZUZpbHRlci5BTllfRElGRik7Ci0JCUxpc3Q8RGlmZkVudHJ5PiBkaWZmcyA9IERpZmZFbnRyeS5zY2FuKHdhbGspOwotCQlhc3NlcnRFcXVhbHMoMSwgZGlmZnMuc2l6ZSgpKTsKLQkJRGlmZkVudHJ5IHN1YkRpZmYgPSBkaWZmcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscyhGaWxlTW9kZS5NSVNTSU5HLCBzdWJEaWZmLmdldE9sZE1vZGUoKSk7Ci0JCWFzc2VydEVxdWFscyhGaWxlTW9kZS5HSVRMSU5LLCBzdWJEaWZmLmdldE5ld01vZGUoKSk7Ci0JCWFzc2VydEVxdWFscyhPYmplY3RJZC56ZXJvSWQoKSwgc3ViRGlmZi5nZXRPbGRJZCgpLnRvT2JqZWN0SWQoKSk7Ci0JCWFzc2VydEVxdWFscyhjb21taXQsIHN1YkRpZmYuZ2V0TmV3SWQoKS50b09iamVjdElkKCkpOwotCQlhc3NlcnRFcXVhbHMocGF0aCwgc3ViRGlmZi5nZXROZXdQYXRoKCkpOworCQkJUmV2Q29tbWl0IHN1Ym1vZHVsZUNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzdWJtb2R1bGUgYWRkIikKKwkJCQkJLnNldE9ubHkocGF0aCkuY2FsbCgpOworCQkJYXNzZXJ0Tm90TnVsbChzdWJtb2R1bGVDb21taXQpOworCQkJdHJ5IChUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJCXdhbGsuYWRkVHJlZShjb21taXQuZ2V0VHJlZSgpKTsKKwkJCQl3YWxrLmFkZFRyZWUoc3VibW9kdWxlQ29tbWl0LmdldFRyZWUoKSk7CisJCQkJd2Fsay5zZXRGaWx0ZXIoVHJlZUZpbHRlci5BTllfRElGRik7CisJCQkJTGlzdDxEaWZmRW50cnk+IGRpZmZzID0gRGlmZkVudHJ5LnNjYW4od2Fsayk7CisJCQkJYXNzZXJ0RXF1YWxzKDEsIGRpZmZzLnNpemUoKSk7CisJCQkJRGlmZkVudHJ5IHN1YkRpZmYgPSBkaWZmcy5nZXQoMCk7CisJCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLk1JU1NJTkcsIHN1YkRpZmYuZ2V0T2xkTW9kZSgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuR0lUTElOSywgc3ViRGlmZi5nZXROZXdNb2RlKCkpOworCQkJCWFzc2VydEVxdWFscyhPYmplY3RJZC56ZXJvSWQoKSwgc3ViRGlmZi5nZXRPbGRJZCgpLnRvT2JqZWN0SWQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdCwgc3ViRGlmZi5nZXROZXdJZCgpLnRvT2JqZWN0SWQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKHBhdGgsIHN1YkRpZmYuZ2V0TmV3UGF0aCgpKTsKKwkJCX0KKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgY29tbWl0U3VibW9kdWxlVXBkYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQyIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjb21taXQyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImVkaXQgZmlsZSIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50MiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImVkaXQgZmlsZSIpLmNhbGwoKTsKIAotCQlTdWJtb2R1bGVBZGRDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3VibW9kdWxlQWRkQ29tbWFuZChkYik7Ci0JCVN0cmluZyBwYXRoID0gInN1YiI7Ci0JCWNvbW1hbmQuc2V0UGF0aChwYXRoKTsKLQkJU3RyaW5nIHVyaSA9IGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKLQkJY29tbWFuZC5zZXRVUkkodXJpKTsKLQkJUmVwb3NpdG9yeSByZXBvID0gY29tbWFuZC5jYWxsKCk7Ci0JCWFzc2VydE5vdE51bGwocmVwbyk7Ci0JCWFkZFJlcG9Ub0Nsb3NlKHJlcG8pOworCQkJU3VibW9kdWxlQWRkQ29tbWFuZCBjb21tYW5kID0gbmV3IFN1Ym1vZHVsZUFkZENvbW1hbmQoZGIpOworCQkJU3RyaW5nIHBhdGggPSAic3ViIjsKKwkJCWNvbW1hbmQuc2V0UGF0aChwYXRoKTsKKwkJCVN0cmluZyB1cmkgPSBkYi5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvU3RyaW5nKCk7CisJCQljb21tYW5kLnNldFVSSSh1cmkpOworCQkJUmVwb3NpdG9yeSByZXBvID0gY29tbWFuZC5jYWxsKCk7CisJCQlhc3NlcnROb3ROdWxsKHJlcG8pOworCQkJYWRkUmVwb1RvQ2xvc2UocmVwbyk7CiAKLQkJU3VibW9kdWxlV2FsayBnZW5lcmF0b3IgPSBTdWJtb2R1bGVXYWxrLmZvckluZGV4KGRiKTsKLQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHBhdGgsIGdlbmVyYXRvci5nZXRQYXRoKCkpOwotCQlhc3NlcnRFcXVhbHMoY29tbWl0MiwgZ2VuZXJhdG9yLmdldE9iamVjdElkKCkpOwotCQlhc3NlcnRFcXVhbHModXJpLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1VybCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHBhdGgsIGdlbmVyYXRvci5nZXRNb2R1bGVzUGF0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHVyaSwgZ2VuZXJhdG9yLmdldENvbmZpZ1VybCgpKTsKLQkJUmVwb3NpdG9yeSBzdWJNb2RSZXBvID0gZ2VuZXJhdG9yLmdldFJlcG9zaXRvcnkoKTsKLQkJYXNzZXJ0Tm90TnVsbChzdWJNb2RSZXBvKTsKLQkJc3ViTW9kUmVwby5jbG9zZSgpOwotCQlhc3NlcnRFcXVhbHMoY29tbWl0MiwgcmVwby5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSk7CisJCQlTdWJtb2R1bGVXYWxrIGdlbmVyYXRvciA9IFN1Ym1vZHVsZVdhbGsuZm9ySW5kZXgoZGIpOworCQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKKwkJCWFzc2VydEVxdWFscyhwYXRoLCBnZW5lcmF0b3IuZ2V0UGF0aCgpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQyLCBnZW5lcmF0b3IuZ2V0T2JqZWN0SWQoKSk7CisJCQlhc3NlcnRFcXVhbHModXJpLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1VybCgpKTsKKwkJCWFzc2VydEVxdWFscyhwYXRoLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1BhdGgoKSk7CisJCQlhc3NlcnRFcXVhbHModXJpLCBnZW5lcmF0b3IuZ2V0Q29uZmlnVXJsKCkpOworCQkJUmVwb3NpdG9yeSBzdWJNb2RSZXBvID0gZ2VuZXJhdG9yLmdldFJlcG9zaXRvcnkoKTsKKwkJCWFzc2VydE5vdE51bGwoc3ViTW9kUmVwbyk7CisJCQlzdWJNb2RSZXBvLmNsb3NlKCk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0MiwgcmVwby5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSk7CiAKLQkJUmV2Q29tbWl0IHN1Ym1vZHVsZUFkZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzdWJtb2R1bGUgYWRkIikKLQkJCQkuc2V0T25seShwYXRoKS5jYWxsKCk7Ci0JCWFzc2VydE5vdE51bGwoc3VibW9kdWxlQWRkQ29tbWl0KTsKKwkJCVJldkNvbW1pdCBzdWJtb2R1bGVBZGRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic3VibW9kdWxlIGFkZCIpCisJCQkJCS5zZXRPbmx5KHBhdGgpLmNhbGwoKTsKKwkJCWFzc2VydE5vdE51bGwoc3VibW9kdWxlQWRkQ29tbWl0KTsKIAotCQlSZWZVcGRhdGUgdXBkYXRlID0gcmVwby51cGRhdGVSZWYoQ29uc3RhbnRzLkhFQUQpOwotCQl1cGRhdGUuc2V0TmV3T2JqZWN0SWQoY29tbWl0KTsKLQkJYXNzZXJ0RXF1YWxzKFJlc3VsdC5GT1JDRUQsIHVwZGF0ZS5mb3JjZVVwZGF0ZSgpKTsKKwkJCVJlZlVwZGF0ZSB1cGRhdGUgPSByZXBvLnVwZGF0ZVJlZihDb25zdGFudHMuSEVBRCk7CisJCQl1cGRhdGUuc2V0TmV3T2JqZWN0SWQoY29tbWl0KTsKKwkJCWFzc2VydEVxdWFscyhSZXN1bHQuRk9SQ0VELCB1cGRhdGUuZm9yY2VVcGRhdGUoKSk7CiAKLQkJUmV2Q29tbWl0IHN1Ym1vZHVsZUVkaXRDb21taXQgPSBnaXQuY29tbWl0KCkKLQkJCQkuc2V0TWVzc2FnZSgic3VibW9kdWxlIGFkZCIpLnNldE9ubHkocGF0aCkuY2FsbCgpOwotCQlhc3NlcnROb3ROdWxsKHN1Ym1vZHVsZUVkaXRDb21taXQpOwotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJd2Fsay5hZGRUcmVlKHN1Ym1vZHVsZUFkZENvbW1pdC5nZXRUcmVlKCkpOwotCQl3YWxrLmFkZFRyZWUoc3VibW9kdWxlRWRpdENvbW1pdC5nZXRUcmVlKCkpOwotCQl3YWxrLnNldEZpbHRlcihUcmVlRmlsdGVyLkFOWV9ESUZGKTsKLQkJTGlzdDxEaWZmRW50cnk+IGRpZmZzID0gRGlmZkVudHJ5LnNjYW4od2Fsayk7Ci0JCWFzc2VydEVxdWFscygxLCBkaWZmcy5zaXplKCkpOwotCQlEaWZmRW50cnkgc3ViRGlmZiA9IGRpZmZzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLkdJVExJTkssIHN1YkRpZmYuZ2V0T2xkTW9kZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLkdJVExJTkssIHN1YkRpZmYuZ2V0TmV3TW9kZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbW1pdDIsIHN1YkRpZmYuZ2V0T2xkSWQoKS50b09iamVjdElkKCkpOwotCQlhc3NlcnRFcXVhbHMoY29tbWl0LCBzdWJEaWZmLmdldE5ld0lkKCkudG9PYmplY3RJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHBhdGgsIHN1YkRpZmYuZ2V0TmV3UGF0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHBhdGgsIHN1YkRpZmYuZ2V0T2xkUGF0aCgpKTsKKwkJCVJldkNvbW1pdCBzdWJtb2R1bGVFZGl0Q29tbWl0ID0gZ2l0LmNvbW1pdCgpCisJCQkJCS5zZXRNZXNzYWdlKCJzdWJtb2R1bGUgYWRkIikuc2V0T25seShwYXRoKS5jYWxsKCk7CisJCQlhc3NlcnROb3ROdWxsKHN1Ym1vZHVsZUVkaXRDb21taXQpOworCQkJdHJ5IChUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJCXdhbGsuYWRkVHJlZShzdWJtb2R1bGVBZGRDb21taXQuZ2V0VHJlZSgpKTsKKwkJCQl3YWxrLmFkZFRyZWUoc3VibW9kdWxlRWRpdENvbW1pdC5nZXRUcmVlKCkpOworCQkJCXdhbGsuc2V0RmlsdGVyKFRyZWVGaWx0ZXIuQU5ZX0RJRkYpOworCQkJCUxpc3Q8RGlmZkVudHJ5PiBkaWZmcyA9IERpZmZFbnRyeS5zY2FuKHdhbGspOworCQkJCWFzc2VydEVxdWFscygxLCBkaWZmcy5zaXplKCkpOworCQkJCURpZmZFbnRyeSBzdWJEaWZmID0gZGlmZnMuZ2V0KDApOworCQkJCWFzc2VydEVxdWFscyhGaWxlTW9kZS5HSVRMSU5LLCBzdWJEaWZmLmdldE9sZE1vZGUoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLkdJVExJTkssIHN1YkRpZmYuZ2V0TmV3TW9kZSgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoY29tbWl0Miwgc3ViRGlmZi5nZXRPbGRJZCgpLnRvT2JqZWN0SWQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdCwgc3ViRGlmZi5nZXROZXdJZCgpLnRvT2JqZWN0SWQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKHBhdGgsIHN1YkRpZmYuZ2V0TmV3UGF0aCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMocGF0aCwgc3ViRGlmZi5nZXRPbGRQYXRoKCkpOworCQkJfQorCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBjb21taXRVcGRhdGVzU211ZGdlZEVudHJpZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJRmlsZSBmaWxlMSA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlMS50eHQiLCAiY29udGVudDEiKTsKKwkJCWFzc2VydFRydWUoZmlsZTEuc2V0TGFzdE1vZGlmaWVkKGZpbGUxLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOworCQkJRmlsZSBmaWxlMiA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlMi50eHQiLCAiY29udGVudDIiKTsKKwkJCWFzc2VydFRydWUoZmlsZTIuc2V0TGFzdE1vZGlmaWVkKGZpbGUyLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOworCQkJRmlsZSBmaWxlMyA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlMy50eHQiLCAiY29udGVudDMiKTsKKwkJCWFzc2VydFRydWUoZmlsZTMuc2V0TGFzdE1vZGlmaWVkKGZpbGUzLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOwogCi0JCUZpbGUgZmlsZTEgPSB3cml0ZVRyYXNoRmlsZSgiZmlsZTEudHh0IiwgImNvbnRlbnQxIik7Ci0JCWFzc2VydFRydWUoZmlsZTEuc2V0TGFzdE1vZGlmaWVkKGZpbGUxLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOwotCQlGaWxlIGZpbGUyID0gd3JpdGVUcmFzaEZpbGUoImZpbGUyLnR4dCIsICJjb250ZW50MiIpOwotCQlhc3NlcnRUcnVlKGZpbGUyLnNldExhc3RNb2RpZmllZChmaWxlMi5sYXN0TW9kaWZpZWQoKSAtIDUwMDApKTsKLQkJRmlsZSBmaWxlMyA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlMy50eHQiLCAiY29udGVudDMiKTsKLQkJYXNzZXJ0VHJ1ZShmaWxlMy5zZXRMYXN0TW9kaWZpZWQoZmlsZTMubGFzdE1vZGlmaWVkKCkgLSA1MDAwKSk7CisJCQlhc3NlcnROb3ROdWxsKGdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEudHh0IikKKwkJCQkJLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMi50eHQiKS5hZGRGaWxlcGF0dGVybigiZmlsZTMudHh0IikuY2FsbCgpKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGVzIikuY2FsbCgpOworCQkJYXNzZXJ0Tm90TnVsbChjb21taXQpOwogCi0JCWFzc2VydE5vdE51bGwoZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMS50eHQiKQotCQkJCS5hZGRGaWxlcGF0dGVybigiZmlsZTIudHh0IikuYWRkRmlsZXBhdHRlcm4oImZpbGUzLnR4dCIpLmNhbGwoKSk7Ci0JCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGVzIikuY2FsbCgpOwotCQlhc3NlcnROb3ROdWxsKGNvbW1pdCk7CisJCQlEaXJDYWNoZSBjYWNoZSA9IERpckNhY2hlLnJlYWQoZGIuZ2V0SW5kZXhGaWxlKCksIGRiLmdldEZTKCkpOworCQkJaW50IGZpbGUxU2l6ZSA9IGNhY2hlLmdldEVudHJ5KCJmaWxlMS50eHQiKS5nZXRMZW5ndGgoKTsKKwkJCWludCBmaWxlMlNpemUgPSBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0TGVuZ3RoKCk7CisJCQlpbnQgZmlsZTNTaXplID0gY2FjaGUuZ2V0RW50cnkoImZpbGUzLnR4dCIpLmdldExlbmd0aCgpOworCQkJT2JqZWN0SWQgZmlsZTJJZCA9IGNhY2hlLmdldEVudHJ5KCJmaWxlMi50eHQiKS5nZXRPYmplY3RJZCgpOworCQkJT2JqZWN0SWQgZmlsZTNJZCA9IGNhY2hlLmdldEVudHJ5KCJmaWxlMy50eHQiKS5nZXRPYmplY3RJZCgpOworCQkJYXNzZXJ0VHJ1ZShmaWxlMVNpemUgPiAwKTsKKwkJCWFzc2VydFRydWUoZmlsZTJTaXplID4gMCk7CisJCQlhc3NlcnRUcnVlKGZpbGUzU2l6ZSA+IDApOwogCi0JCURpckNhY2hlIGNhY2hlID0gRGlyQ2FjaGUucmVhZChkYi5nZXRJbmRleEZpbGUoKSwgZGIuZ2V0RlMoKSk7Ci0JCWludCBmaWxlMVNpemUgPSBjYWNoZS5nZXRFbnRyeSgiZmlsZTEudHh0IikuZ2V0TGVuZ3RoKCk7Ci0JCWludCBmaWxlMlNpemUgPSBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0TGVuZ3RoKCk7Ci0JCWludCBmaWxlM1NpemUgPSBjYWNoZS5nZXRFbnRyeSgiZmlsZTMudHh0IikuZ2V0TGVuZ3RoKCk7Ci0JCU9iamVjdElkIGZpbGUySWQgPSBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0T2JqZWN0SWQoKTsKLQkJT2JqZWN0SWQgZmlsZTNJZCA9IGNhY2hlLmdldEVudHJ5KCJmaWxlMy50eHQiKS5nZXRPYmplY3RJZCgpOwotCQlhc3NlcnRUcnVlKGZpbGUxU2l6ZSA+IDApOwotCQlhc3NlcnRUcnVlKGZpbGUyU2l6ZSA+IDApOwotCQlhc3NlcnRUcnVlKGZpbGUzU2l6ZSA+IDApOworCQkJLy8gU211ZGdlIGVudHJpZXMKKwkJCWNhY2hlID0gRGlyQ2FjaGUubG9jayhkYi5nZXRJbmRleEZpbGUoKSwgZGIuZ2V0RlMoKSk7CisJCQljYWNoZS5nZXRFbnRyeSgiZmlsZTEudHh0Iikuc2V0TGVuZ3RoKDApOworCQkJY2FjaGUuZ2V0RW50cnkoImZpbGUyLnR4dCIpLnNldExlbmd0aCgwKTsKKwkJCWNhY2hlLmdldEVudHJ5KCJmaWxlMy50eHQiKS5zZXRMZW5ndGgoMCk7CisJCQljYWNoZS53cml0ZSgpOworCQkJYXNzZXJ0VHJ1ZShjYWNoZS5jb21taXQoKSk7CiAKLQkJLy8gU211ZGdlIGVudHJpZXMKLQkJY2FjaGUgPSBEaXJDYWNoZS5sb2NrKGRiLmdldEluZGV4RmlsZSgpLCBkYi5nZXRGUygpKTsKLQkJY2FjaGUuZ2V0RW50cnkoImZpbGUxLnR4dCIpLnNldExlbmd0aCgwKTsKLQkJY2FjaGUuZ2V0RW50cnkoImZpbGUyLnR4dCIpLnNldExlbmd0aCgwKTsKLQkJY2FjaGUuZ2V0RW50cnkoImZpbGUzLnR4dCIpLnNldExlbmd0aCgwKTsKLQkJY2FjaGUud3JpdGUoKTsKLQkJYXNzZXJ0VHJ1ZShjYWNoZS5jb21taXQoKSk7CisJCQkvLyBWZXJpZnkgZW50cmllcyBzbXVkZ2VkCisJCQljYWNoZSA9IERpckNhY2hlLnJlYWQoZGIuZ2V0SW5kZXhGaWxlKCksIGRiLmdldEZTKCkpOworCQkJYXNzZXJ0RXF1YWxzKDAsIGNhY2hlLmdldEVudHJ5KCJmaWxlMS50eHQiKS5nZXRMZW5ndGgoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgY2FjaGUuZ2V0RW50cnkoImZpbGUyLnR4dCIpLmdldExlbmd0aCgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTMudHh0IikuZ2V0TGVuZ3RoKCkpOwogCi0JCS8vIFZlcmlmeSBlbnRyaWVzIHNtdWRnZWQKLQkJY2FjaGUgPSBEaXJDYWNoZS5yZWFkKGRiLmdldEluZGV4RmlsZSgpLCBkYi5nZXRGUygpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGNhY2hlLmdldEVudHJ5KCJmaWxlMS50eHQiKS5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgY2FjaGUuZ2V0RW50cnkoImZpbGUzLnR4dCIpLmdldExlbmd0aCgpKTsKKwkJCWxvbmcgaW5kZXhUaW1lID0gZGIuZ2V0SW5kZXhGaWxlKCkubGFzdE1vZGlmaWVkKCk7CisJCQlkYi5nZXRJbmRleEZpbGUoKS5zZXRMYXN0TW9kaWZpZWQoaW5kZXhUaW1lIC0gNTAwMCk7CiAKLQkJbG9uZyBpbmRleFRpbWUgPSBkYi5nZXRJbmRleEZpbGUoKS5sYXN0TW9kaWZpZWQoKTsKLQkJZGIuZ2V0SW5kZXhGaWxlKCkuc2V0TGFzdE1vZGlmaWVkKGluZGV4VGltZSAtIDUwMDApOworCQkJd3JpdGUoZmlsZTEsICJjb250ZW50NCIpOworCQkJYXNzZXJ0VHJ1ZShmaWxlMS5zZXRMYXN0TW9kaWZpZWQoZmlsZTEubGFzdE1vZGlmaWVkKCkgKyAyNTAwKSk7CisJCQlhc3NlcnROb3ROdWxsKGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlZGl0IGZpbGUiKS5zZXRPbmx5KCJmaWxlMS50eHQiKQorCQkJCQkuY2FsbCgpKTsKIAotCQl3cml0ZShmaWxlMSwgImNvbnRlbnQ0Iik7Ci0JCWFzc2VydFRydWUoZmlsZTEuc2V0TGFzdE1vZGlmaWVkKGZpbGUxLmxhc3RNb2RpZmllZCgpICsgMjUwMCkpOwotCQlhc3NlcnROb3ROdWxsKGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlZGl0IGZpbGUiKS5zZXRPbmx5KCJmaWxlMS50eHQiKQotCQkJCS5jYWxsKCkpOwotCi0JCWNhY2hlID0gZGIucmVhZERpckNhY2hlKCk7Ci0JCWFzc2VydEVxdWFscyhmaWxlMVNpemUsIGNhY2hlLmdldEVudHJ5KCJmaWxlMS50eHQiKS5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyhmaWxlMlNpemUsIGNhY2hlLmdldEVudHJ5KCJmaWxlMi50eHQiKS5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyhmaWxlM1NpemUsIGNhY2hlLmdldEVudHJ5KCJmaWxlMy50eHQiKS5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscyhmaWxlMklkLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0T2JqZWN0SWQoKSk7Ci0JCWFzc2VydEVxdWFscyhmaWxlM0lkLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTMudHh0IikuZ2V0T2JqZWN0SWQoKSk7CisJCQljYWNoZSA9IGRiLnJlYWREaXJDYWNoZSgpOworCQkJYXNzZXJ0RXF1YWxzKGZpbGUxU2l6ZSwgY2FjaGUuZ2V0RW50cnkoImZpbGUxLnR4dCIpLmdldExlbmd0aCgpKTsKKwkJCWFzc2VydEVxdWFscyhmaWxlMlNpemUsIGNhY2hlLmdldEVudHJ5KCJmaWxlMi50eHQiKS5nZXRMZW5ndGgoKSk7CisJCQlhc3NlcnRFcXVhbHMoZmlsZTNTaXplLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTMudHh0IikuZ2V0TGVuZ3RoKCkpOworCQkJYXNzZXJ0RXF1YWxzKGZpbGUySWQsIGNhY2hlLmdldEVudHJ5KCJmaWxlMi50eHQiKS5nZXRPYmplY3RJZCgpKTsKKwkJCWFzc2VydEVxdWFscyhmaWxlM0lkLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTMudHh0IikuZ2V0T2JqZWN0SWQoKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIGNvbW1pdElnbm9yZXNTbXVkZ2VkRW50cnlXaXRoRGlmZmVyZW50SWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJRmlsZSBmaWxlMSA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlMS50eHQiLCAiY29udGVudDEiKTsKKwkJCWFzc2VydFRydWUoZmlsZTEuc2V0TGFzdE1vZGlmaWVkKGZpbGUxLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOworCQkJRmlsZSBmaWxlMiA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlMi50eHQiLCAiY29udGVudDIiKTsKKwkJCWFzc2VydFRydWUoZmlsZTIuc2V0TGFzdE1vZGlmaWVkKGZpbGUyLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOwogCi0JCUZpbGUgZmlsZTEgPSB3cml0ZVRyYXNoRmlsZSgiZmlsZTEudHh0IiwgImNvbnRlbnQxIik7Ci0JCWFzc2VydFRydWUoZmlsZTEuc2V0TGFzdE1vZGlmaWVkKGZpbGUxLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOwotCQlGaWxlIGZpbGUyID0gd3JpdGVUcmFzaEZpbGUoImZpbGUyLnR4dCIsICJjb250ZW50MiIpOwotCQlhc3NlcnRUcnVlKGZpbGUyLnNldExhc3RNb2RpZmllZChmaWxlMi5sYXN0TW9kaWZpZWQoKSAtIDUwMDApKTsKKwkJCWFzc2VydE5vdE51bGwoZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMS50eHQiKQorCQkJCQkuYWRkRmlsZXBhdHRlcm4oImZpbGUyLnR4dCIpLmNhbGwoKSk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBmaWxlcyIpLmNhbGwoKTsKKwkJCWFzc2VydE5vdE51bGwoY29tbWl0KTsKIAotCQlhc3NlcnROb3ROdWxsKGdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEudHh0IikKLQkJCQkuYWRkRmlsZXBhdHRlcm4oImZpbGUyLnR4dCIpLmNhbGwoKSk7Ci0JCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGVzIikuY2FsbCgpOwotCQlhc3NlcnROb3ROdWxsKGNvbW1pdCk7CisJCQlEaXJDYWNoZSBjYWNoZSA9IERpckNhY2hlLnJlYWQoZGIuZ2V0SW5kZXhGaWxlKCksIGRiLmdldEZTKCkpOworCQkJaW50IGZpbGUxU2l6ZSA9IGNhY2hlLmdldEVudHJ5KCJmaWxlMS50eHQiKS5nZXRMZW5ndGgoKTsKKwkJCWludCBmaWxlMlNpemUgPSBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0TGVuZ3RoKCk7CisJCQlhc3NlcnRUcnVlKGZpbGUxU2l6ZSA+IDApOworCQkJYXNzZXJ0VHJ1ZShmaWxlMlNpemUgPiAwKTsKIAotCQlEaXJDYWNoZSBjYWNoZSA9IERpckNhY2hlLnJlYWQoZGIuZ2V0SW5kZXhGaWxlKCksIGRiLmdldEZTKCkpOwotCQlpbnQgZmlsZTFTaXplID0gY2FjaGUuZ2V0RW50cnkoImZpbGUxLnR4dCIpLmdldExlbmd0aCgpOwotCQlpbnQgZmlsZTJTaXplID0gY2FjaGUuZ2V0RW50cnkoImZpbGUyLnR4dCIpLmdldExlbmd0aCgpOwotCQlhc3NlcnRUcnVlKGZpbGUxU2l6ZSA+IDApOwotCQlhc3NlcnRUcnVlKGZpbGUyU2l6ZSA+IDApOworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUyLnR4dCIsICJjb250ZW50MyIpOworCQkJYXNzZXJ0Tm90TnVsbChnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUyLnR4dCIpLmNhbGwoKSk7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTIudHh0IiwgImNvbnRlbnQ0Iik7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUyLnR4dCIsICJjb250ZW50MyIpOwotCQlhc3NlcnROb3ROdWxsKGdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTIudHh0IikuY2FsbCgpKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUyLnR4dCIsICJjb250ZW50NCIpOworCQkJLy8gU211ZGdlIGVudHJpZXMKKwkJCWNhY2hlID0gRGlyQ2FjaGUubG9jayhkYi5nZXRJbmRleEZpbGUoKSwgZGIuZ2V0RlMoKSk7CisJCQljYWNoZS5nZXRFbnRyeSgiZmlsZTEudHh0Iikuc2V0TGVuZ3RoKDApOworCQkJY2FjaGUuZ2V0RW50cnkoImZpbGUyLnR4dCIpLnNldExlbmd0aCgwKTsKKwkJCWNhY2hlLndyaXRlKCk7CisJCQlhc3NlcnRUcnVlKGNhY2hlLmNvbW1pdCgpKTsKIAotCQkvLyBTbXVkZ2UgZW50cmllcwotCQljYWNoZSA9IERpckNhY2hlLmxvY2soZGIuZ2V0SW5kZXhGaWxlKCksIGRiLmdldEZTKCkpOwotCQljYWNoZS5nZXRFbnRyeSgiZmlsZTEudHh0Iikuc2V0TGVuZ3RoKDApOwotCQljYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0Iikuc2V0TGVuZ3RoKDApOwotCQljYWNoZS53cml0ZSgpOwotCQlhc3NlcnRUcnVlKGNhY2hlLmNvbW1pdCgpKTsKKwkJCS8vIFZlcmlmeSBlbnRyaWVzIHNtdWRnZWQKKwkJCWNhY2hlID0gZGIucmVhZERpckNhY2hlKCk7CisJCQlhc3NlcnRFcXVhbHMoMCwgY2FjaGUuZ2V0RW50cnkoImZpbGUxLnR4dCIpLmdldExlbmd0aCgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0TGVuZ3RoKCkpOwogCi0JCS8vIFZlcmlmeSBlbnRyaWVzIHNtdWRnZWQKLQkJY2FjaGUgPSBkYi5yZWFkRGlyQ2FjaGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGNhY2hlLmdldEVudHJ5KCJmaWxlMS50eHQiKS5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTIudHh0IikuZ2V0TGVuZ3RoKCkpOworCQkJbG9uZyBpbmRleFRpbWUgPSBkYi5nZXRJbmRleEZpbGUoKS5sYXN0TW9kaWZpZWQoKTsKKwkJCWRiLmdldEluZGV4RmlsZSgpLnNldExhc3RNb2RpZmllZChpbmRleFRpbWUgLSA1MDAwKTsKIAotCQlsb25nIGluZGV4VGltZSA9IGRiLmdldEluZGV4RmlsZSgpLmxhc3RNb2RpZmllZCgpOwotCQlkYi5nZXRJbmRleEZpbGUoKS5zZXRMYXN0TW9kaWZpZWQoaW5kZXhUaW1lIC0gNTAwMCk7CisJCQl3cml0ZShmaWxlMSwgImNvbnRlbnQ1Iik7CisJCQlhc3NlcnRUcnVlKGZpbGUxLnNldExhc3RNb2RpZmllZChmaWxlMS5sYXN0TW9kaWZpZWQoKSArIDEwMDApKTsKIAotCQl3cml0ZShmaWxlMSwgImNvbnRlbnQ1Iik7Ci0JCWFzc2VydFRydWUoZmlsZTEuc2V0TGFzdE1vZGlmaWVkKGZpbGUxLmxhc3RNb2RpZmllZCgpICsgMTAwMCkpOworCQkJYXNzZXJ0Tm90TnVsbChnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZWRpdCBmaWxlIikuc2V0T25seSgiZmlsZTEudHh0IikKKwkJCQkJLmNhbGwoKSk7CiAKLQkJYXNzZXJ0Tm90TnVsbChnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZWRpdCBmaWxlIikuc2V0T25seSgiZmlsZTEudHh0IikKLQkJCQkuY2FsbCgpKTsKLQotCQljYWNoZSA9IGRiLnJlYWREaXJDYWNoZSgpOwotCQlhc3NlcnRFcXVhbHMoZmlsZTFTaXplLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTEudHh0IikuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgY2FjaGUuZ2V0RW50cnkoImZpbGUyLnR4dCIpLmdldExlbmd0aCgpKTsKKwkJCWNhY2hlID0gZGIucmVhZERpckNhY2hlKCk7CisJCQlhc3NlcnRFcXVhbHMoZmlsZTFTaXplLCBjYWNoZS5nZXRFbnRyeSgiZmlsZTEudHh0IikuZ2V0TGVuZ3RoKCkpOworCQkJYXNzZXJ0RXF1YWxzKDAsIGNhY2hlLmdldEVudHJ5KCJmaWxlMi50eHQiKS5nZXRMZW5ndGgoKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIGNvbW1pdEFmdGVyU3F1YXNoTWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUxIiwgImZpbGUxIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUxIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGZpcnN0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlMSIsICJmaWxlMSIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUxIikuY2FsbCgpOwotCQlSZXZDb21taXQgZmlyc3QgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJmaWxlMSIpLmV4aXN0cygpKTsKKwkJCWNyZWF0ZUJyYW5jaChmaXJzdCwgInJlZnMvaGVhZHMvYnJhbmNoMSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvYnJhbmNoMSIpOwogCi0JCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZpbGUxIikuZXhpc3RzKCkpOwotCQljcmVhdGVCcmFuY2goZmlyc3QsICJyZWZzL2hlYWRzL2JyYW5jaDEiKTsKLQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvYnJhbmNoMSIpOworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUyIiwgImZpbGUyIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUyIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNlY29uZCBjb21taXQiKS5jYWxsKCk7CisJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJmaWxlMiIpLmV4aXN0cygpKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTIiLCAiZmlsZTIiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNlY29uZCBjb21taXQiKS5jYWxsKCk7Ci0JCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZpbGUyIikuZXhpc3RzKCkpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CiAKLQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKQorCQkJCQkuaW5jbHVkZShkYi5leGFjdFJlZigicmVmcy9oZWFkcy9icmFuY2gxIikpCisJCQkJCS5zZXRTcXVhc2godHJ1ZSkKKwkJCQkJLmNhbGwoKTsKIAotCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKQotCQkJCS5pbmNsdWRlKGRiLmV4YWN0UmVmKCJyZWZzL2hlYWRzL2JyYW5jaDEiKSkKLQkJCQkuc2V0U3F1YXNoKHRydWUpCi0JCQkJLmNhbGwoKTsKKwkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZpbGUxIikuZXhpc3RzKCkpOworCQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiZmlsZTIiKS5leGlzdHMoKSk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VSZXN1bHQuTWVyZ2VTdGF0dXMuRkFTVF9GT1JXQVJEX1NRVUFTSEVELAorCQkJCQlyZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CiAKLQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiZmlsZTEiKS5leGlzdHMoKSk7Ci0JCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZpbGUyIikuZXhpc3RzKCkpOwotCQlhc3NlcnRFcXVhbHMoTWVyZ2VSZXN1bHQuTWVyZ2VTdGF0dXMuRkFTVF9GT1JXQVJEX1NRVUFTSEVELAotCQkJCXJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKwkJCS8vIGNvbW1lbnQgbm90IHNldCwgc2hvdWxkIGJlIGluZmVycmVkIGZyb20gU1FVQVNIX01TRworCQkJUmV2Q29tbWl0IHNxdWFzaGVkQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLmNhbGwoKTsKIAotCQkvLyBjb21tZW50IG5vdCBzZXQsIHNob3VsZCBiZSBpbmZlcnJlZCBmcm9tIFNRVUFTSF9NU0cKLQkJUmV2Q29tbWl0IHNxdWFzaGVkQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLmNhbGwoKTsKLQotCQlhc3NlcnRFcXVhbHMoMSwgc3F1YXNoZWRDb21taXQuZ2V0UGFyZW50Q291bnQoKSk7Ci0JCWFzc2VydE51bGwoZGIucmVhZFNxdWFzaENvbW1pdE1zZygpKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb21taXQ6IFNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOiIsIGRiCi0JCQkJLmdldFJlZmxvZ1JlYWRlcihDb25zdGFudHMuSEVBRCkuZ2V0TGFzdEVudHJ5KCkuZ2V0Q29tbWVudCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJjb21taXQ6IFNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOiIsIGRiCi0JCQkJLmdldFJlZmxvZ1JlYWRlcihkYi5nZXRCcmFuY2goKSkuZ2V0TGFzdEVudHJ5KCkuZ2V0Q29tbWVudCgpKTsKKwkJCWFzc2VydEVxdWFscygxLCBzcXVhc2hlZENvbW1pdC5nZXRQYXJlbnRDb3VudCgpKTsKKwkJCWFzc2VydE51bGwoZGIucmVhZFNxdWFzaENvbW1pdE1zZygpKTsKKwkJCWFzc2VydEVxdWFscygiY29tbWl0OiBTcXVhc2hlZCBjb21taXQgb2YgdGhlIGZvbGxvd2luZzoiLCBkYgorCQkJCQkuZ2V0UmVmbG9nUmVhZGVyKENvbnN0YW50cy5IRUFEKS5nZXRMYXN0RW50cnkoKS5nZXRDb21tZW50KCkpOworCQkJYXNzZXJ0RXF1YWxzKCJjb21taXQ6IFNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOiIsIGRiCisJCQkJCS5nZXRSZWZsb2dSZWFkZXIoZGIuZ2V0QnJhbmNoKCkpLmdldExhc3RFbnRyeSgpLmdldENvbW1lbnQoKSk7CisJCX0KIAl9CiAKIAlAVGVzdChleHBlY3RlZCA9IFdyb25nUmVwb3NpdG9yeVN0YXRlRXhjZXB0aW9uLmNsYXNzKQogCXB1YmxpYyB2b2lkIGNvbW1pdEFtZW5kT25Jbml0aWFsU2hvdWxkRmFpbCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCWdpdC5jb21taXQoKS5zZXRBbWVuZCh0cnVlKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCWdpdC5jb21taXQoKS5zZXRBbWVuZCh0cnVlKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgY29tbWl0QW1lbmRXaXRob3V0QXV0aG9yU2hvdWxkU2V0T3JpZ2luYWxBdXRob3JBbmRBdXRob3JUaW1lKCkKIAkJCXRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTEiLCAiZmlsZTEiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUxIiwgImZpbGUxIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7CisJCQlmaW5hbCBTdHJpbmcgYXV0aG9yTmFtZSA9ICJGaXJzdCBBdXRob3IiOworCQkJZmluYWwgU3RyaW5nIGF1dGhvckVtYWlsID0gImF1dGhvckBleGFtcGxlLm9yZyI7CisJCQlmaW5hbCBEYXRlIGF1dGhvckRhdGUgPSBuZXcgRGF0ZSgxMzQ5NjIxMTE3MDAwTCk7CisJCQlQZXJzb25JZGVudCBmaXJzdEF1dGhvciA9IG5ldyBQZXJzb25JZGVudChhdXRob3JOYW1lLCBhdXRob3JFbWFpbCwKKwkJCQkJYXV0aG9yRGF0ZSwgVGltZVpvbmUuZ2V0VGltZVpvbmUoIlVUQyIpKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLnNldEF1dGhvcihmaXJzdEF1dGhvcikuY2FsbCgpOwogCi0JCWZpbmFsIFN0cmluZyBhdXRob3JOYW1lID0gIkZpcnN0IEF1dGhvciI7Ci0JCWZpbmFsIFN0cmluZyBhdXRob3JFbWFpbCA9ICJhdXRob3JAZXhhbXBsZS5vcmciOwotCQlmaW5hbCBEYXRlIGF1dGhvckRhdGUgPSBuZXcgRGF0ZSgxMzQ5NjIxMTE3MDAwTCk7Ci0JCVBlcnNvbklkZW50IGZpcnN0QXV0aG9yID0gbmV3IFBlcnNvbklkZW50KGF1dGhvck5hbWUsIGF1dGhvckVtYWlsLAotCQkJCWF1dGhvckRhdGUsIFRpbWVab25lLmdldFRpbWVab25lKCJVVEMiKSk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLnNldEF1dGhvcihmaXJzdEF1dGhvcikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGFtZW5kZWQgPSBnaXQuY29tbWl0KCkuc2V0QW1lbmQodHJ1ZSkKKwkJCQkJLnNldE1lc3NhZ2UoImFtZW5kIGNvbW1pdCIpLmNhbGwoKTsKIAotCQlSZXZDb21taXQgYW1lbmRlZCA9IGdpdC5jb21taXQoKS5zZXRBbWVuZCh0cnVlKQotCQkJCS5zZXRNZXNzYWdlKCJhbWVuZCBjb21taXQiKS5jYWxsKCk7Ci0KLQkJUGVyc29uSWRlbnQgYW1lbmRlZEF1dGhvciA9IGFtZW5kZWQuZ2V0QXV0aG9ySWRlbnQoKTsKLQkJYXNzZXJ0RXF1YWxzKGF1dGhvck5hbWUsIGFtZW5kZWRBdXRob3IuZ2V0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKGF1dGhvckVtYWlsLCBhbWVuZGVkQXV0aG9yLmdldEVtYWlsQWRkcmVzcygpKTsKLQkJYXNzZXJ0RXF1YWxzKGF1dGhvckRhdGUuZ2V0VGltZSgpLCBhbWVuZGVkQXV0aG9yLmdldFdoZW4oKS5nZXRUaW1lKCkpOworCQkJUGVyc29uSWRlbnQgYW1lbmRlZEF1dGhvciA9IGFtZW5kZWQuZ2V0QXV0aG9ySWRlbnQoKTsKKwkJCWFzc2VydEVxdWFscyhhdXRob3JOYW1lLCBhbWVuZGVkQXV0aG9yLmdldE5hbWUoKSk7CisJCQlhc3NlcnRFcXVhbHMoYXV0aG9yRW1haWwsIGFtZW5kZWRBdXRob3IuZ2V0RW1haWxBZGRyZXNzKCkpOworCQkJYXNzZXJ0RXF1YWxzKGF1dGhvckRhdGUuZ2V0VGltZSgpLCBhbWVuZGVkQXV0aG9yLmdldFdoZW4oKS5nZXRUaW1lKCkpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBjb21taXRBbWVuZFdpdGhBdXRob3JTaG91bGRVc2VJdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTEiLCAiZmlsZTEiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUxIiwgImZpbGUxIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBhbWVuZGVkID0gZ2l0LmNvbW1pdCgpLnNldEFtZW5kKHRydWUpCisJCQkJCS5zZXRBdXRob3IoIk5ldyBBdXRob3IiLCAibmV3YXV0aG9yQGV4YW1wbGUub3JnIikKKwkJCQkJLnNldE1lc3NhZ2UoImFtZW5kIGNvbW1pdCIpLmNhbGwoKTsKIAotCQlSZXZDb21taXQgYW1lbmRlZCA9IGdpdC5jb21taXQoKS5zZXRBbWVuZCh0cnVlKQotCQkJCS5zZXRBdXRob3IoIk5ldyBBdXRob3IiLCAibmV3YXV0aG9yQGV4YW1wbGUub3JnIikKLQkJCQkuc2V0TWVzc2FnZSgiYW1lbmQgY29tbWl0IikuY2FsbCgpOwotCi0JCVBlcnNvbklkZW50IGFtZW5kZWRBdXRob3IgPSBhbWVuZGVkLmdldEF1dGhvcklkZW50KCk7Ci0JCWFzc2VydEVxdWFscygiTmV3IEF1dGhvciIsIGFtZW5kZWRBdXRob3IuZ2V0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuZXdhdXRob3JAZXhhbXBsZS5vcmciLCBhbWVuZGVkQXV0aG9yLmdldEVtYWlsQWRkcmVzcygpKTsKKwkJCVBlcnNvbklkZW50IGFtZW5kZWRBdXRob3IgPSBhbWVuZGVkLmdldEF1dGhvcklkZW50KCk7CisJCQlhc3NlcnRFcXVhbHMoIk5ldyBBdXRob3IiLCBhbWVuZGVkQXV0aG9yLmdldE5hbWUoKSk7CisJCQlhc3NlcnRFcXVhbHMoIm5ld2F1dGhvckBleGFtcGxlLm9yZyIsIGFtZW5kZWRBdXRob3IuZ2V0RW1haWxBZGRyZXNzKCkpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTUzMiwxOCArNTM3LDE5IEBAIHB1YmxpYyB2b2lkIGNvbW1pdE9ubHlTaG91bGRDb21taXRVbm1lcmdlZFBhdGhBbmROb3RBZmZlY3RPdGhlcnMoKQogCQkJCSsgIlt1bm1lcmdlZDIsIG1vZGU6MTAwNjQ0LCBzdGFnZTozXSIsCiAJCQkJaW5kZXhTdGF0ZSgwKSk7CiAKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE9ubHkoInVubWVyZ2VkMSIpCi0JCQkJLnNldE1lc3NhZ2UoIk9ubHkgb25lIGZpbGUiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE9ubHkoInVubWVyZ2VkMSIpCisJCQkJCS5zZXRNZXNzYWdlKCJPbmx5IG9uZSBmaWxlIikuY2FsbCgpOwogCi0JCWFzc2VydEVxdWFscygiW290aGVyLCBtb2RlOjEwMDY0NF0iICsgIlt1bm1lcmdlZDEsIG1vZGU6MTAwNjQ0XSIKLQkJCQkrICJbdW5tZXJnZWQyLCBtb2RlOjEwMDY0NCwgc3RhZ2U6MV0iCi0JCQkJKyAiW3VubWVyZ2VkMiwgbW9kZToxMDA2NDQsIHN0YWdlOjJdIgotCQkJCSsgIlt1bm1lcmdlZDIsIG1vZGU6MTAwNjQ0LCBzdGFnZTozXSIsCi0JCQkJaW5kZXhTdGF0ZSgwKSk7CisJCQlhc3NlcnRFcXVhbHMoIltvdGhlciwgbW9kZToxMDA2NDRdIiArICJbdW5tZXJnZWQxLCBtb2RlOjEwMDY0NF0iCisJCQkJCSsgIlt1bm1lcmdlZDIsIG1vZGU6MTAwNjQ0LCBzdGFnZToxXSIKKwkJCQkJKyAiW3VubWVyZ2VkMiwgbW9kZToxMDA2NDQsIHN0YWdlOjJdIgorCQkJCQkrICJbdW5tZXJnZWQyLCBtb2RlOjEwMDY0NCwgc3RhZ2U6M10iLAorCQkJCQlpbmRleFN0YXRlKDApKTsKIAotCQl0cnkgKFRyZWVXYWxrIHdhbGsgPSBUcmVlV2Fsay5mb3JQYXRoKGRiLCAidW5tZXJnZWQxIiwgY29tbWl0LmdldFRyZWUoKSkpIHsKLQkJCWFzc2VydEVxdWFscyhGaWxlTW9kZS5SRUdVTEFSX0ZJTEUsIHdhbGsuZ2V0RmlsZU1vZGUoMCkpOworCQkJdHJ5IChUcmVlV2FsayB3YWxrID0gVHJlZVdhbGsuZm9yUGF0aChkYiwgInVubWVyZ2VkMSIsIGNvbW1pdC5nZXRUcmVlKCkpKSB7CisJCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLlJFR1VMQVJfRklMRSwgd2Fsay5nZXRGaWxlTW9kZSgwKSk7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRGlmZkNvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0RpZmZDb21tYW5kVGVzdC5qYXZhCmluZGV4IDRhZDAxY2YuLjRmNWI1MGQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRGlmZkNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EaWZmQ29tbWFuZFRlc3QuamF2YQpAQCAtNzAsMzIgKzcwLDMzIEBAIHB1YmxpYyB2b2lkIHRlc3REaWZmTW9kaWZpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJRmlsZSBmb2xkZXIgPSBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiZm9sZGVyIik7CiAJCWZvbGRlci5ta2RpcigpOwogCQl3cml0ZShuZXcgRmlsZShmb2xkZXIsICJmb2xkZXIudHh0IiksICJmb2xkZXIiKTsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQkJd3JpdGUobmV3IEZpbGUoZm9sZGVyLCAiZm9sZGVyLnR4dCIpLCAiZm9sZGVyIGNoYW5nZSIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkJd3JpdGUobmV3IEZpbGUoZm9sZGVyLCAiZm9sZGVyLnR4dCIpLCAiZm9sZGVyIGNoYW5nZSIpOwogCi0JCU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gZ2l0LmRpZmYoKS5zZXRPdXRwdXRTdHJlYW0ob3V0KS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWFzc2VydEVxdWFscyhDaGFuZ2VUeXBlLk1PRElGWSwgZW50cmllcy5nZXQoMCkKLQkJCQkuZ2V0Q2hhbmdlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb2xkZXIvZm9sZGVyLnR4dCIsIGVudHJpZXMuZ2V0KDApCi0JCQkJLmdldE9sZFBhdGgoKSk7Ci0JCWFzc2VydEVxdWFscygiZm9sZGVyL2ZvbGRlci50eHQiLCBlbnRyaWVzLmdldCgwKQotCQkJCS5nZXROZXdQYXRoKCkpOworCQkJT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gZ2l0LmRpZmYoKS5zZXRPdXRwdXRTdHJlYW0ob3V0KS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKENoYW5nZVR5cGUuTU9ESUZZLCBlbnRyaWVzLmdldCgwKQorCQkJCQkuZ2V0Q2hhbmdlVHlwZSgpKTsKKwkJCWFzc2VydEVxdWFscygiZm9sZGVyL2ZvbGRlci50eHQiLCBlbnRyaWVzLmdldCgwKQorCQkJCQkuZ2V0T2xkUGF0aCgpKTsKKwkJCWFzc2VydEVxdWFscygiZm9sZGVyL2ZvbGRlci50eHQiLCBlbnRyaWVzLmdldCgwKQorCQkJCQkuZ2V0TmV3UGF0aCgpKTsKIAotCQlTdHJpbmcgYWN0dWFsID0gb3V0LnRvU3RyaW5nKCk7Ci0JCVN0cmluZyBleHBlY3RlZCA9ICJkaWZmIC0tZ2l0IGEvZm9sZGVyL2ZvbGRlci50eHQgYi9mb2xkZXIvZm9sZGVyLnR4dFxuIgotCQkJCSsgImluZGV4IDAxMTk2MzUuLjk1YzRjNjUgMTAwNjQ0XG4iCi0JCQkJKyAiLS0tIGEvZm9sZGVyL2ZvbGRlci50eHRcbiIKLQkJCQkrICIrKysgYi9mb2xkZXIvZm9sZGVyLnR4dFxuIgotCQkJCSsgIkBAIC0xICsxIEBAXG4iCi0JCQkJKyAiLWZvbGRlclxuIgotCQkJCSsgIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIKLQkJCQkrICIrZm9sZGVyIGNoYW5nZVxuIgotCQkJCSsgIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiI7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC50b1N0cmluZygpLCBhY3R1YWwpOworCQkJU3RyaW5nIGFjdHVhbCA9IG91dC50b1N0cmluZygpOworCQkJU3RyaW5nIGV4cGVjdGVkID0gImRpZmYgLS1naXQgYS9mb2xkZXIvZm9sZGVyLnR4dCBiL2ZvbGRlci9mb2xkZXIudHh0XG4iCisJCQkJCSsgImluZGV4IDAxMTk2MzUuLjk1YzRjNjUgMTAwNjQ0XG4iCisJCQkJCSsgIi0tLSBhL2ZvbGRlci9mb2xkZXIudHh0XG4iCisJCQkJCSsgIisrKyBiL2ZvbGRlci9mb2xkZXIudHh0XG4iCisJCQkJCSsgIkBAIC0xICsxIEBAXG4iCisJCQkJCSsgIi1mb2xkZXJcbiIKKwkJCQkJKyAiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIgorCQkJCQkrICIrZm9sZGVyIGNoYW5nZVxuIgorCQkJCQkrICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iOworCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnRvU3RyaW5nKCksIGFjdHVhbCk7CisJCX0KIAl9CiAKIAlAVGVzdApAQCAtMTAzLDMzICsxMDQsMzQgQEAgcHVibGljIHZvaWQgdGVzdERpZmZDYWNoZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJd3JpdGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgInRlc3QudHh0IiksICJ0ZXN0Iik7CiAJCUZpbGUgZm9sZGVyID0gbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZvbGRlciIpOwogCQlmb2xkZXIubWtkaXIoKTsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQkJd3JpdGUobmV3IEZpbGUoZm9sZGVyLCAiZm9sZGVyLnR4dCIpLCAiZm9sZGVyIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgImZvbGRlciIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwogCi0JCU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gZ2l0LmRpZmYoKS5zZXRPdXRwdXRTdHJlYW0ob3V0KQotCQkJCS5zZXRDYWNoZWQodHJ1ZSkuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoQ2hhbmdlVHlwZS5BREQsIGVudHJpZXMuZ2V0KDApCi0JCQkJLmdldENoYW5nZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygiL2Rldi9udWxsIiwgZW50cmllcy5nZXQoMCkKLQkJCQkuZ2V0T2xkUGF0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb2xkZXIvZm9sZGVyLnR4dCIsIGVudHJpZXMuZ2V0KDApCi0JCQkJLmdldE5ld1BhdGgoKSk7CisJCQlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJTGlzdDxEaWZmRW50cnk+IGVudHJpZXMgPSBnaXQuZGlmZigpLnNldE91dHB1dFN0cmVhbShvdXQpCisJCQkJCS5zZXRDYWNoZWQodHJ1ZSkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhDaGFuZ2VUeXBlLkFERCwgZW50cmllcy5nZXQoMCkKKwkJCQkJLmdldENoYW5nZVR5cGUoKSk7CisJCQlhc3NlcnRFcXVhbHMoIi9kZXYvbnVsbCIsIGVudHJpZXMuZ2V0KDApCisJCQkJCS5nZXRPbGRQYXRoKCkpOworCQkJYXNzZXJ0RXF1YWxzKCJmb2xkZXIvZm9sZGVyLnR4dCIsIGVudHJpZXMuZ2V0KDApCisJCQkJCS5nZXROZXdQYXRoKCkpOwogCi0JCVN0cmluZyBhY3R1YWwgPSBvdXQudG9TdHJpbmcoKTsKLQkJU3RyaW5nIGV4cGVjdGVkID0gImRpZmYgLS1naXQgYS9mb2xkZXIvZm9sZGVyLnR4dCBiL2ZvbGRlci9mb2xkZXIudHh0XG4iCi0JCQkJKyAibmV3IGZpbGUgbW9kZSAxMDA2NDRcbiIKLQkJCQkrICJpbmRleCAwMDAwMDAwLi4wMTE5NjM1XG4iCi0JCQkJKyAiLS0tIC9kZXYvbnVsbFxuIgotCQkJCSsgIisrKyBiL2ZvbGRlci9mb2xkZXIudHh0XG4iCi0JCQkJKyAiQEAgLTAsMCArMSBAQFxuIgotCQkJCSsgIitmb2xkZXJcbiIKLQkJCQkrICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudG9TdHJpbmcoKSwgYWN0dWFsKTsKKwkJCVN0cmluZyBhY3R1YWwgPSBvdXQudG9TdHJpbmcoKTsKKwkJCVN0cmluZyBleHBlY3RlZCA9ICJkaWZmIC0tZ2l0IGEvZm9sZGVyL2ZvbGRlci50eHQgYi9mb2xkZXIvZm9sZGVyLnR4dFxuIgorCQkJCQkrICJuZXcgZmlsZSBtb2RlIDEwMDY0NFxuIgorCQkJCQkrICJpbmRleCAwMDAwMDAwLi4wMTE5NjM1XG4iCisJCQkJCSsgIi0tLSAvZGV2L251bGxcbiIKKwkJCQkJKyAiKysrIGIvZm9sZGVyL2ZvbGRlci50eHRcbiIKKwkJCQkJKyAiQEAgLTAsMCArMSBAQFxuIgorCQkJCQkrICIrZm9sZGVyXG4iCisJCQkJCSsgIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiI7CisJCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudG9TdHJpbmcoKSwgYWN0dWFsKTsKKwkJfQogCX0KIAogCUBUZXN0CkBAIC0xMzgsMTA3ICsxNDAsMTA5IEBAIHB1YmxpYyB2b2lkIHRlc3REaWZmVHdvQ29tbWl0cygpIHRocm93cyBFeGNlcHRpb24gewogCQlGaWxlIGZvbGRlciA9IG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJmb2xkZXIiKTsKIAkJZm9sZGVyLm1rZGlyKCk7CiAJCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgImZvbGRlciIpOwotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOwotCQl3cml0ZShuZXcgRmlsZShmb2xkZXIsICJmb2xkZXIudHh0IiksICJmb2xkZXIgY2hhbmdlIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNlY29uZCBjb21taXQiKS5jYWxsKCk7Ci0JCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgInNlY29uZCBmb2xkZXIgY2hhbmdlIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInRoaXJkIGNvbW1pdCIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgImZvbGRlciBjaGFuZ2UiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzZWNvbmQgY29tbWl0IikuY2FsbCgpOworCQkJd3JpdGUobmV3IEZpbGUoZm9sZGVyLCAiZm9sZGVyLnR4dCIpLCAic2Vjb25kIGZvbGRlciBjaGFuZ2UiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJ0aGlyZCBjb21taXQiKS5jYWxsKCk7CiAKLQkJLy8gYmFkIGZpbHRlcgotCQlEaWZmQ29tbWFuZCBkaWZmID0gZ2l0LmRpZmYoKS5zZXRTaG93TmFtZUFuZFN0YXR1c09ubHkodHJ1ZSkKLQkJCQkuc2V0UGF0aEZpbHRlcihQYXRoRmlsdGVyLmNyZWF0ZSgidGVzdC50eHQiKSkKLQkJCQkuc2V0T2xkVHJlZShnZXRUcmVlSXRlcmF0b3IoIkhFQUReXiIpKQotCQkJCS5zZXROZXdUcmVlKGdldFRyZWVJdGVyYXRvcigiSEVBRF4iKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gZGlmZi5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscygwLCBlbnRyaWVzLnNpemUoKSk7CisJCQkvLyBiYWQgZmlsdGVyCisJCQlEaWZmQ29tbWFuZCBkaWZmID0gZ2l0LmRpZmYoKS5zZXRTaG93TmFtZUFuZFN0YXR1c09ubHkodHJ1ZSkKKwkJCQkJLnNldFBhdGhGaWx0ZXIoUGF0aEZpbHRlci5jcmVhdGUoInRlc3QudHh0IikpCisJCQkJCS5zZXRPbGRUcmVlKGdldFRyZWVJdGVyYXRvcigiSEVBRF5eIikpCisJCQkJCS5zZXROZXdUcmVlKGdldFRyZWVJdGVyYXRvcigiSEVBRF4iKSk7CisJCQlMaXN0PERpZmZFbnRyeT4gZW50cmllcyA9IGRpZmYuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDAsIGVudHJpZXMuc2l6ZSgpKTsKIAotCQkvLyBubyBmaWx0ZXIsIHR3byBjb21taXRzCi0JCU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCWRpZmYgPSBnaXQuZGlmZigpLnNldE91dHB1dFN0cmVhbShvdXQpCi0JCQkJLnNldE9sZFRyZWUoZ2V0VHJlZUl0ZXJhdG9yKCJIRUFEXl4iKSkKLQkJCQkuc2V0TmV3VHJlZShnZXRUcmVlSXRlcmF0b3IoIkhFQUReIikpOwotCQllbnRyaWVzID0gZGlmZi5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWFzc2VydEVxdWFscyhDaGFuZ2VUeXBlLk1PRElGWSwgZW50cmllcy5nZXQoMCkuZ2V0Q2hhbmdlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJmb2xkZXIvZm9sZGVyLnR4dCIsIGVudHJpZXMuZ2V0KDApLmdldE9sZFBhdGgoKSk7Ci0JCWFzc2VydEVxdWFscygiZm9sZGVyL2ZvbGRlci50eHQiLCBlbnRyaWVzLmdldCgwKS5nZXROZXdQYXRoKCkpOworCQkJLy8gbm8gZmlsdGVyLCB0d28gY29tbWl0cworCQkJT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCWRpZmYgPSBnaXQuZGlmZigpLnNldE91dHB1dFN0cmVhbShvdXQpCisJCQkJCS5zZXRPbGRUcmVlKGdldFRyZWVJdGVyYXRvcigiSEVBRF5eIikpCisJCQkJCS5zZXROZXdUcmVlKGdldFRyZWVJdGVyYXRvcigiSEVBRF4iKSk7CisJCQllbnRyaWVzID0gZGlmZi5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKENoYW5nZVR5cGUuTU9ESUZZLCBlbnRyaWVzLmdldCgwKS5nZXRDaGFuZ2VUeXBlKCkpOworCQkJYXNzZXJ0RXF1YWxzKCJmb2xkZXIvZm9sZGVyLnR4dCIsIGVudHJpZXMuZ2V0KDApLmdldE9sZFBhdGgoKSk7CisJCQlhc3NlcnRFcXVhbHMoImZvbGRlci9mb2xkZXIudHh0IiwgZW50cmllcy5nZXQoMCkuZ2V0TmV3UGF0aCgpKTsKIAotCQlTdHJpbmcgYWN0dWFsID0gb3V0LnRvU3RyaW5nKCk7Ci0JCVN0cmluZyBleHBlY3RlZCA9ICJkaWZmIC0tZ2l0IGEvZm9sZGVyL2ZvbGRlci50eHQgYi9mb2xkZXIvZm9sZGVyLnR4dFxuIgotCQkJCSsgImluZGV4IDAxMTk2MzUuLjk1YzRjNjUgMTAwNjQ0XG4iCi0JCQkJKyAiLS0tIGEvZm9sZGVyL2ZvbGRlci50eHRcbiIKLQkJCQkrICIrKysgYi9mb2xkZXIvZm9sZGVyLnR4dFxuIgotCQkJCSsgIkBAIC0xICsxIEBAXG4iCi0JCQkJKyAiLWZvbGRlclxuIgotCQkJCSsgIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIKLQkJCQkrICIrZm9sZGVyIGNoYW5nZVxuIgotCQkJCSsgIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiI7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZC50b1N0cmluZygpLCBhY3R1YWwpOworCQkJU3RyaW5nIGFjdHVhbCA9IG91dC50b1N0cmluZygpOworCQkJU3RyaW5nIGV4cGVjdGVkID0gImRpZmYgLS1naXQgYS9mb2xkZXIvZm9sZGVyLnR4dCBiL2ZvbGRlci9mb2xkZXIudHh0XG4iCisJCQkJCSsgImluZGV4IDAxMTk2MzUuLjk1YzRjNjUgMTAwNjQ0XG4iCisJCQkJCSsgIi0tLSBhL2ZvbGRlci9mb2xkZXIudHh0XG4iCisJCQkJCSsgIisrKyBiL2ZvbGRlci9mb2xkZXIudHh0XG4iCisJCQkJCSsgIkBAIC0xICsxIEBAXG4iCisJCQkJCSsgIi1mb2xkZXJcbiIKKwkJCQkJKyAiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIgorCQkJCQkrICIrZm9sZGVyIGNoYW5nZVxuIgorCQkJCQkrICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iOworCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnRvU3RyaW5nKCksIGFjdHVhbCk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REaWZmV2l0aFByZWZpeGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXdyaXRlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0ZXN0LnR4dCIpLCAidGVzdCIpOwotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOwotCQl3cml0ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGVzdC50eHQiKSwgInRlc3QgY2hhbmdlIik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCQl3cml0ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGVzdC50eHQiKSwgInRlc3QgY2hhbmdlIik7CiAKLQkJT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJZ2l0LmRpZmYoKS5zZXRPdXRwdXRTdHJlYW0ob3V0KS5zZXRTb3VyY2VQcmVmaXgoIm9sZC8iKQotCQkJCS5zZXREZXN0aW5hdGlvblByZWZpeCgibmV3LyIpCi0JCQkJLmNhbGwoKTsKKwkJCU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisJCQlnaXQuZGlmZigpLnNldE91dHB1dFN0cmVhbShvdXQpLnNldFNvdXJjZVByZWZpeCgib2xkLyIpCisJCQkJCS5zZXREZXN0aW5hdGlvblByZWZpeCgibmV3LyIpLmNhbGwoKTsKIAotCQlTdHJpbmcgYWN0dWFsID0gb3V0LnRvU3RyaW5nKCk7Ci0JCVN0cmluZyBleHBlY3RlZCA9ICJkaWZmIC0tZ2l0IG9sZC90ZXN0LnR4dCBuZXcvdGVzdC50eHRcbiIKLQkJCQkrICJpbmRleCAzMGQ3NGQyLi40ZGJhNzk3IDEwMDY0NFxuIiArICItLS0gb2xkL3Rlc3QudHh0XG4iCi0JCQkJKyAiKysrIG5ldy90ZXN0LnR4dFxuIiArICJAQCAtMSArMSBAQFxuIiArICItdGVzdFxuIgotCQkJCSsgIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbiIgKyAiK3Rlc3QgY2hhbmdlXG4iCi0JCQkJKyAiXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuIjsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnRvU3RyaW5nKCksIGFjdHVhbCk7CisJCQlTdHJpbmcgYWN0dWFsID0gb3V0LnRvU3RyaW5nKCk7CisJCQlTdHJpbmcgZXhwZWN0ZWQgPSAiZGlmZiAtLWdpdCBvbGQvdGVzdC50eHQgbmV3L3Rlc3QudHh0XG4iCisJCQkJCSsgImluZGV4IDMwZDc0ZDIuLjRkYmE3OTcgMTAwNjQ0XG4iICsgIi0tLSBvbGQvdGVzdC50eHRcbiIKKwkJCQkJKyAiKysrIG5ldy90ZXN0LnR4dFxuIiArICJAQCAtMSArMSBAQFxuIiArICItdGVzdFxuIgorCQkJCQkrICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iICsgIit0ZXN0IGNoYW5nZVxuIgorCQkJCQkrICJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iOworCQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnRvU3RyaW5nKCksIGFjdHVhbCk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REaWZmV2l0aE5lZ2F0aXZlTGluZUNvdW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXdyaXRlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0ZXN0LnR4dCIpLAogCQkJCSIwXG4xXG4yXG4zXG40XG41XG42XG43XG44XG45Iik7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCXdyaXRlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0ZXN0LnR4dCIpLAotCQkJCSIwXG4xXG4yXG4zXG40YVxuNVxuNlxuN1xuOFxuOSIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkJd3JpdGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgInRlc3QudHh0IiksCisJCQkJCSIwXG4xXG4yXG4zXG40YVxuNVxuNlxuN1xuOFxuOSIpOwogCi0JCU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCWdpdC5kaWZmKCkuc2V0T3V0cHV0U3RyZWFtKG91dCkuc2V0Q29udGV4dExpbmVzKDEpCi0JCQkJLmNhbGwoKTsKKwkJCU91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisJCQlnaXQuZGlmZigpLnNldE91dHB1dFN0cmVhbShvdXQpLnNldENvbnRleHRMaW5lcygxKS5jYWxsKCk7CiAKLQkJU3RyaW5nIGFjdHVhbCA9IG91dC50b1N0cmluZygpOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSAiZGlmZiAtLWdpdCBhL3Rlc3QudHh0IGIvdGVzdC50eHRcbiIKLQkJCQkrICJpbmRleCBmNTViNWM5Li5jNWVjOGZkIDEwMDY0NFxuIiArICItLS0gYS90ZXN0LnR4dFxuIgotCQkJCSsgIisrKyBiL3Rlc3QudHh0XG4iICsgIkBAIC00LDMgKzQsMyBAQFxuIiArICIgM1xuIiArICItNFxuIgotCQkJCSsgIis0YVxuIiArICIgNVxuIjsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnRvU3RyaW5nKCksIGFjdHVhbCk7CisJCQlTdHJpbmcgYWN0dWFsID0gb3V0LnRvU3RyaW5nKCk7CisJCQlTdHJpbmcgZXhwZWN0ZWQgPSAiZGlmZiAtLWdpdCBhL3Rlc3QudHh0IGIvdGVzdC50eHRcbiIKKwkJCQkJKyAiaW5kZXggZjU1YjVjOS4uYzVlYzhmZCAxMDA2NDRcbiIgKyAiLS0tIGEvdGVzdC50eHRcbiIKKwkJCQkJKyAiKysrIGIvdGVzdC50eHRcbiIgKyAiQEAgLTQsMyArNCwzIEBAXG4iICsgIiAzXG4iICsgIi00XG4iCisJCQkJCSsgIis0YVxuIiArICIgNVxuIjsKKwkJCWFzc2VydEVxdWFscyhleHBlY3RlZC50b1N0cmluZygpLCBhY3R1YWwpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0Tm9PdXRwdXRTdHJlYW1TZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJRmlsZSBmaWxlID0gd3JpdGVUcmFzaEZpbGUoInRlc3QudHh0IiwgImEiKTsKIAkJYXNzZXJ0VHJ1ZShmaWxlLnNldExhc3RNb2RpZmllZChmaWxlLmxhc3RNb2RpZmllZCgpIC0gNTAwMCkpOwotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJd3JpdGUoZmlsZSwgImIiKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCXdyaXRlKGZpbGUsICJiIik7CiAKLQkJTGlzdDxEaWZmRW50cnk+IGRpZmZzID0gZ2l0LmRpZmYoKS5jYWxsKCk7Ci0JCWFzc2VydE5vdE51bGwoZGlmZnMpOwotCQlhc3NlcnRFcXVhbHMoMSwgZGlmZnMuc2l6ZSgpKTsKLQkJRGlmZkVudHJ5IGRpZmYgPSBkaWZmcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscyhDaGFuZ2VUeXBlLk1PRElGWSwgZGlmZi5nZXRDaGFuZ2VUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QudHh0IiwgZGlmZi5nZXRPbGRQYXRoKCkpOwotCQlhc3NlcnRFcXVhbHMoInRlc3QudHh0IiwgZGlmZi5nZXROZXdQYXRoKCkpOworCQkJTGlzdDxEaWZmRW50cnk+IGRpZmZzID0gZ2l0LmRpZmYoKS5jYWxsKCk7CisJCQlhc3NlcnROb3ROdWxsKGRpZmZzKTsKKwkJCWFzc2VydEVxdWFscygxLCBkaWZmcy5zaXplKCkpOworCQkJRGlmZkVudHJ5IGRpZmYgPSBkaWZmcy5nZXQoMCk7CisJCQlhc3NlcnRFcXVhbHMoQ2hhbmdlVHlwZS5NT0RJRlksIGRpZmYuZ2V0Q2hhbmdlVHlwZSgpKTsKKwkJCWFzc2VydEVxdWFscygidGVzdC50eHQiLCBkaWZmLmdldE9sZFBhdGgoKSk7CisJCQlhc3NlcnRFcXVhbHMoInRlc3QudHh0IiwgZGlmZi5nZXROZXdQYXRoKCkpOworCQl9CiAJfQogCiAJcHJpdmF0ZSBBYnN0cmFjdFRyZWVJdGVyYXRvciBnZXRUcmVlSXRlcmF0b3IoU3RyaW5nIG5hbWUpCkBAIC0yNDcsOCArMjUxLDkgQEAgcHJpdmF0ZSBBYnN0cmFjdFRyZWVJdGVyYXRvciBnZXRUcmVlSXRlcmF0b3IoU3RyaW5nIG5hbWUpCiAJCWlmIChpZCA9PSBudWxsKQogCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihuYW1lKTsKIAkJZmluYWwgQ2Fub25pY2FsVHJlZVBhcnNlciBwID0gbmV3IENhbm9uaWNhbFRyZWVQYXJzZXIoKTsKLQkJdHJ5IChPYmplY3RSZWFkZXIgb3IgPSBkYi5uZXdPYmplY3RSZWFkZXIoKSkgewotCQkJcC5yZXNldChvciwgbmV3IFJldldhbGsoZGIpLnBhcnNlVHJlZShpZCkpOworCQl0cnkgKE9iamVjdFJlYWRlciBvciA9IGRiLm5ld09iamVjdFJlYWRlcigpOworCQkJCVJldldhbGsgcncgPSBuZXcgUmV2V2FsayhkYikpIHsKKwkJCXAucmVzZXQob3IsIHJ3LnBhcnNlVHJlZShpZCkpOwogCQkJcmV0dXJuIHA7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFRlc3QuamF2YQppbmRleCA1Nzg4OGU3Li5mZjcwNjZlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRUZXN0LmphdmEKQEAgLTE0MCwxMSArMTQwLDEyIEBAIHB1YmxpYyB2b2lkIHRlc3RQdWxsTWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJT2JqZWN0SWRbXSBtZXJnZWRDb21taXRzID0gbWVyZ2VSZXN1bHQuZ2V0TWVyZ2VkQ29tbWl0cygpOwogCQlhc3NlcnRFcXVhbHModGFyZ2V0Q29tbWl0LmdldElkKCksIG1lcmdlZENvbW1pdHNbMF0pOwogCQlhc3NlcnRFcXVhbHMoc291cmNlQ29tbWl0LmdldElkKCksIG1lcmdlZENvbW1pdHNbMV0pOwotCQlSZXZDb21taXQgbWVyZ2VDb21taXQgPSBuZXcgUmV2V2FsayhkYlRhcmdldCkucGFyc2VDb21taXQobWVyZ2VSZXN1bHQKLQkJCQkuZ2V0TmV3SGVhZCgpKTsKLQkJU3RyaW5nIG1lc3NhZ2UgPSAiTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mICIKLQkJCQkrIGRiLmdldFdvcmtUcmVlKCkuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCWFzc2VydEVxdWFscyhtZXNzYWdlLCBtZXJnZUNvbW1pdC5nZXRTaG9ydE1lc3NhZ2UoKSk7CisJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiVGFyZ2V0KSkgeworCQkJUmV2Q29tbWl0IG1lcmdlQ29tbWl0ID0gcncucGFyc2VDb21taXQobWVyZ2VSZXN1bHQuZ2V0TmV3SGVhZCgpKTsKKwkJCVN0cmluZyBtZXNzYWdlID0gIk1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiAiCisJCQkJCSsgZGIuZ2V0V29ya1RyZWUoKS5nZXRBYnNvbHV0ZVBhdGgoKTsKKwkJCWFzc2VydEVxdWFscyhtZXNzYWdlLCBtZXJnZUNvbW1pdC5nZXRTaG9ydE1lc3NhZ2UoKSk7CisJCX0KIAl9CiAKIAlAVGVzdApAQCAtMjU5LDExICsyNjAsMTIgQEAgcHVibGljIHZvaWQgdGVzdFB1bGxNZXJnZVByb2dyYW1tYXRpY0NvbmZpZ3VyYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJT2JqZWN0SWRbXSBtZXJnZWRDb21taXRzID0gbWVyZ2VSZXN1bHQuZ2V0TWVyZ2VkQ29tbWl0cygpOwogCQlhc3NlcnRFcXVhbHModGFyZ2V0Q29tbWl0LmdldElkKCksIG1lcmdlZENvbW1pdHNbMF0pOwogCQlhc3NlcnRFcXVhbHMoc291cmNlQ29tbWl0LmdldElkKCksIG1lcmdlZENvbW1pdHNbMV0pOwotCQlSZXZDb21taXQgbWVyZ2VDb21taXQgPSBuZXcgUmV2V2FsayhkYlRhcmdldCkucGFyc2VDb21taXQobWVyZ2VSZXN1bHQKLQkJCQkuZ2V0TmV3SGVhZCgpKTsKLQkJU3RyaW5nIG1lc3NhZ2UgPSAiTWVyZ2UgYnJhbmNoICdvdGhlcicgb2YgIgotCQkJCSsgZGIuZ2V0V29ya1RyZWUoKS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJYXNzZXJ0RXF1YWxzKG1lc3NhZ2UsIG1lcmdlQ29tbWl0LmdldFNob3J0TWVzc2FnZSgpKTsKKwkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGJUYXJnZXQpKSB7CisJCQlSZXZDb21taXQgbWVyZ2VDb21taXQgPSBydy5wYXJzZUNvbW1pdChtZXJnZVJlc3VsdC5nZXROZXdIZWFkKCkpOworCQkJU3RyaW5nIG1lc3NhZ2UgPSAiTWVyZ2UgYnJhbmNoICdvdGhlcicgb2YgIgorCQkJCQkrIGRiLmdldFdvcmtUcmVlKCkuZ2V0QWJzb2x1dGVQYXRoKCk7CisJCQlhc3NlcnRFcXVhbHMobWVzc2FnZSwgbWVyZ2VDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTI5MywxMSArMjk1LDEyIEBAIHB1YmxpYyB2b2lkIHRlc3RQdWxsTWVyZ2VQcm9ncmFtbWF0aWNDb25maWd1cmF0aW9uSW1wbGllZFRhcmdldEJyYW5jaCgpCiAJCU9iamVjdElkW10gbWVyZ2VkQ29tbWl0cyA9IG1lcmdlUmVzdWx0LmdldE1lcmdlZENvbW1pdHMoKTsKIAkJYXNzZXJ0RXF1YWxzKHRhcmdldENvbW1pdC5nZXRJZCgpLCBtZXJnZWRDb21taXRzWzBdKTsKIAkJYXNzZXJ0RXF1YWxzKHNvdXJjZUNvbW1pdC5nZXRJZCgpLCBtZXJnZWRDb21taXRzWzFdKTsKLQkJUmV2Q29tbWl0IG1lcmdlQ29tbWl0ID0gbmV3IFJldldhbGsoZGJUYXJnZXQpLnBhcnNlQ29tbWl0KG1lcmdlUmVzdWx0Ci0JCQkJLmdldE5ld0hlYWQoKSk7Ci0JCVN0cmluZyBtZXNzYWdlID0gIk1lcmdlIGJyYW5jaCAnb3RoZXInIG9mICIKLQkJCQkrIGRiLmdldFdvcmtUcmVlKCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiIGludG8gb3RoZXIiOwotCQlhc3NlcnRFcXVhbHMobWVzc2FnZSwgbWVyZ2VDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkpOworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhkYlRhcmdldCkpIHsKKwkJCVJldkNvbW1pdCBtZXJnZUNvbW1pdCA9IHJ3LnBhcnNlQ29tbWl0KG1lcmdlUmVzdWx0LmdldE5ld0hlYWQoKSk7CisJCQlTdHJpbmcgbWVzc2FnZSA9ICJNZXJnZSBicmFuY2ggJ290aGVyJyBvZiAiCisJCQkJCSsgZGIuZ2V0V29ya1RyZWUoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICIgaW50byBvdGhlciI7CisJCQlhc3NlcnRFcXVhbHMobWVzc2FnZSwgbWVyZ2VDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJcHJpdmF0ZSBlbnVtIFRlc3RQdWxsTW9kZSB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kV2l0aFJlYmFzZVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRXaXRoUmViYXNlVGVzdC5qYXZhCmluZGV4IDlhZDg0NWIuLmI0MDVmNmEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRXaXRoUmViYXNlVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRXaXRoUmViYXNlVGVzdC5qYXZhCkBAIC0yNzMsMjYgKzI3MywyNyBAQCBwdWJsaWMgdm9pZCB0ZXN0UHVsbEZhc3RGb3J3YXJkV2l0aExvY2FsQ29tbWl0QW5kUmViYXNlRmxhZ1NldCgpIHRocm93cyBFeGNlcHRpbwogCiAJCS8vIEdldCB0aGUgSEVBRCBhbmQgSEVBRH4xIGNvbW1pdHMKIAkJUmVwb3NpdG9yeSB0YXJnZXRSZXBvID0gdGFyZ2V0LmdldFJlcG9zaXRvcnkoKTsKLQkJUmV2V2FsayByZXZXYWxrID0gbmV3IFJldldhbGsodGFyZ2V0UmVwbyk7Ci0JCU9iamVjdElkIGhlYWRJZCA9IHRhcmdldFJlcG8ucmVzb2x2ZShDb25zdGFudHMuSEVBRCk7Ci0JCVJldkNvbW1pdCByb290ID0gcmV2V2Fsay5wYXJzZUNvbW1pdChoZWFkSWQpOwotCQlyZXZXYWxrLm1hcmtTdGFydChyb290KTsKLQkJLy8gSEVBRAotCQlSZXZDb21taXQgaGVhZCA9IHJldldhbGsubmV4dCgpOwotCQkvLyBIRUFEfjEKLQkJUmV2Q29tbWl0IGJlZm9yZUhlYWQgPSByZXZXYWxrLm5leHQoKTsKKwkJdHJ5IChSZXZXYWxrIHJldldhbGsgPSBuZXcgUmV2V2Fsayh0YXJnZXRSZXBvKSkgeworCQkJT2JqZWN0SWQgaGVhZElkID0gdGFyZ2V0UmVwby5yZXNvbHZlKENvbnN0YW50cy5IRUFEKTsKKwkJCVJldkNvbW1pdCByb290ID0gcmV2V2Fsay5wYXJzZUNvbW1pdChoZWFkSWQpOworCQkJcmV2V2Fsay5tYXJrU3RhcnQocm9vdCk7CisJCQkvLyBIRUFECisJCQlSZXZDb21taXQgaGVhZCA9IHJldldhbGsubmV4dCgpOworCQkJLy8gSEVBRH4xCisJCQlSZXZDb21taXQgYmVmb3JlSGVhZCA9IHJldldhbGsubmV4dCgpOwogCi0JCS8vIHZlcmlmeSB0aGUgY29tbWl0IG1lc3NhZ2Ugb24gdGhlIEhFQUQgY29tbWl0Ci0JCWFzc2VydEVxdWFscyhUQVJHRVRfQ09NTUlUX01FU1NBR0UsIGhlYWQuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCS8vIHZlcmlmeSB0aGUgY29tbWl0IGp1c3QgYmVmb3JlIEhFQUQKLQkJYXNzZXJ0RXF1YWxzKFNPVVJDRV9DT01NSVRfTUVTU0FHRSwgYmVmb3JlSGVhZC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCS8vIHZlcmlmeSB0aGUgY29tbWl0IG1lc3NhZ2Ugb24gdGhlIEhFQUQgY29tbWl0CisJCQlhc3NlcnRFcXVhbHMoVEFSR0VUX0NPTU1JVF9NRVNTQUdFLCBoZWFkLmdldEZ1bGxNZXNzYWdlKCkpOworCQkJLy8gdmVyaWZ5IHRoZSBjb21taXQganVzdCBiZWZvcmUgSEVBRAorCQkJYXNzZXJ0RXF1YWxzKFNPVVJDRV9DT01NSVRfTUVTU0FHRSwgYmVmb3JlSGVhZC5nZXRGdWxsTWVzc2FnZSgpKTsKIAotCQkvLyB2ZXJpZnkgZmlsZSBzdGF0ZXMKLQkJYXNzZXJ0RmlsZUNvbnRlbnRzRXF1YWwoc291cmNlRmlsZSwgU09VUkNFX0ZJTEVfQ09OVEVOVFMpOwotCQlhc3NlcnRGaWxlQ29udGVudHNFcXVhbChuZXdGaWxlLCBORVdfRklMRV9DT05URU5UUyk7Ci0JCS8vIHZlcmlmeSByZXBvc2l0b3J5IHN0YXRlCi0JCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgdGFyZ2V0Ci0JCQkuZ2V0UmVwb3NpdG9yeSgpLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKKwkJCS8vIHZlcmlmeSBmaWxlIHN0YXRlcworCQkJYXNzZXJ0RmlsZUNvbnRlbnRzRXF1YWwoc291cmNlRmlsZSwgU09VUkNFX0ZJTEVfQ09OVEVOVFMpOworCQkJYXNzZXJ0RmlsZUNvbnRlbnRzRXF1YWwobmV3RmlsZSwgTkVXX0ZJTEVfQ09OVEVOVFMpOworCQkJLy8gdmVyaWZ5IHJlcG9zaXRvcnkgc3RhdGUKKwkJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgdGFyZ2V0CisJCQkJLmdldFJlcG9zaXRvcnkoKS5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCX0KIAl9CiAKIAlAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVzaENvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1c2hDb21tYW5kVGVzdC5qYXZhCmluZGV4IDFmY2ZlZjkuLjJhMzI1NDAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVzaENvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdXNoQ29tbWFuZFRlc3QuamF2YQpAQCAtOTAsMjYgKzkwLDI3IEBAIHB1YmxpYyB2b2lkIHRlc3RQdXNoKCkgdGhyb3dzIEpHaXRJbnRlcm5hbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCiAJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKIAkJY29uZmlnLnNhdmUoKTsKIAotCQlHaXQgZ2l0MSA9IG5ldyBHaXQoZGIpOwotCQkvLyBjcmVhdGUgc29tZSByZWZzIHZpYSBjb21taXRzIGFuZCB0YWcKLQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdDEuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCVJlZiB0YWdSZWYgPSBnaXQxLnRhZygpLnNldE5hbWUoInRhZyIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0MSA9IG5ldyBHaXQoZGIpKSB7CisJCQkvLyBjcmVhdGUgc29tZSByZWZzIHZpYSBjb21taXRzIGFuZCB0YWcKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQxLmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkJUmVmIHRhZ1JlZiA9IGdpdDEudGFnKCkuc2V0TmFtZSgidGFnIikuY2FsbCgpOwogCi0JCXRyeSB7Ci0JCQlkYjIucmVzb2x2ZShjb21taXQuZ2V0SWQoKS5nZXROYW1lKCkgKyAiXntjb21taXR9Iik7Ci0JCQlmYWlsKCJpZCBzaG91bGRuJ3QgZXhpc3QgeWV0Iik7Ci0JCX0gY2F0Y2ggKE1pc3NpbmdPYmplY3RFeGNlcHRpb24gZSkgewotCQkJLy8gd2Ugc2hvdWxkIGdldCBoZXJlCisJCQl0cnkgeworCQkJCWRiMi5yZXNvbHZlKGNvbW1pdC5nZXRJZCgpLmdldE5hbWUoKSArICJee2NvbW1pdH0iKTsKKwkJCQlmYWlsKCJpZCBzaG91bGRuJ3QgZXhpc3QgeWV0Iik7CisJCQl9IGNhdGNoIChNaXNzaW5nT2JqZWN0RXhjZXB0aW9uIGUpIHsKKwkJCQkvLyB3ZSBzaG91bGQgZ2V0IGhlcmUKKwkJCX0KKworCQkJUmVmU3BlYyBzcGVjID0gbmV3IFJlZlNwZWMoInJlZnMvaGVhZHMvbWFzdGVyOnJlZnMvaGVhZHMveCIpOworCQkJZ2l0MS5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0Iikuc2V0UmVmU3BlY3Moc3BlYykKKwkJCQkJLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLAorCQkJCQlkYjIucmVzb2x2ZShjb21taXQuZ2V0SWQoKS5nZXROYW1lKCkgKyAiXntjb21taXR9IikpOworCQkJYXNzZXJ0RXF1YWxzKHRhZ1JlZi5nZXRPYmplY3RJZCgpLAorCQkJCQlkYjIucmVzb2x2ZSh0YWdSZWYuZ2V0T2JqZWN0SWQoKS5nZXROYW1lKCkpKTsKIAkJfQotCi0JCVJlZlNwZWMgc3BlYyA9IG5ldyBSZWZTcGVjKCJyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3giKTsKLQkJZ2l0MS5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0Iikuc2V0UmVmU3BlY3Moc3BlYykKLQkJCQkuY2FsbCgpOwotCi0JCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKLQkJCQlkYjIucmVzb2x2ZShjb21taXQuZ2V0SWQoKS5nZXROYW1lKCkgKyAiXntjb21taXR9IikpOwotCQlhc3NlcnRFcXVhbHModGFnUmVmLmdldE9iamVjdElkKCksCi0JCQkJZGIyLnJlc29sdmUodGFnUmVmLmdldE9iamVjdElkKCkuZ2V0TmFtZSgpKSk7CiAJfQogCiAJQFRlc3QKQEAgLTEzMiwxNSArMTMzLDE2IEBAIHB1YmxpYyB2b2lkIHRlc3RQcmVQdXNoSG9vaygpIHRocm93cyBKR2l0SW50ZXJuYWxFeGNlcHRpb24sIElPRXhjZXB0aW9uLAogCQkJCSsgaG9va091dHB1dC50b1BhdGgoKSArICJcIlxuY2F0IC0gPj5cIiIgKyBob29rT3V0cHV0LnRvUGF0aCgpCiAJCQkJKyAiXCJcbmV4aXQgMCIpOwogCi0JCUdpdCBnaXQxID0gbmV3IEdpdChkYik7Ci0JCS8vIGNyZWF0ZSBzb21lIHJlZnMgdmlhIGNvbW1pdHMgYW5kIHRhZwotCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0MS5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0MSA9IG5ldyBHaXQoZGIpKSB7CisJCQkvLyBjcmVhdGUgc29tZSByZWZzIHZpYSBjb21taXRzIGFuZCB0YWcKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQxLmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOwogCi0JCVJlZlNwZWMgc3BlYyA9IG5ldyBSZWZTcGVjKCJyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL3giKTsKLQkJZ2l0MS5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0Iikuc2V0UmVmU3BlY3Moc3BlYykuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoIjE6dGVzdCwgMjoiICsgdXJpICsgIiwgMzpcbiIgKyAicmVmcy9oZWFkcy9tYXN0ZXIgIgotCQkJCSsgY29tbWl0LmdldE5hbWUoKSArICIgcmVmcy9oZWFkcy94ICIKLQkJCQkrIE9iamVjdElkLnplcm9JZCgpLm5hbWUoKSwgcmVhZChob29rT3V0cHV0KSk7CisJCQlSZWZTcGVjIHNwZWMgPSBuZXcgUmVmU3BlYygicmVmcy9oZWFkcy9tYXN0ZXI6cmVmcy9oZWFkcy94Iik7CisJCQlnaXQxLnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5zZXRSZWZTcGVjcyhzcGVjKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoIjE6dGVzdCwgMjoiICsgdXJpICsgIiwgMzpcbiIgKyAicmVmcy9oZWFkcy9tYXN0ZXIgIgorCQkJCQkrIGNvbW1pdC5nZXROYW1lKCkgKyAiIHJlZnMvaGVhZHMveCAiCisJCQkJCSsgT2JqZWN0SWQuemVyb0lkKCkubmFtZSgpLCByZWFkKGhvb2tPdXRwdXQpKTsKKwkJfQogCX0KIAogCXByaXZhdGUgRmlsZSB3cml0ZUhvb2tGaWxlKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgZGF0YSkKQEAgLTE2MCw0NSArMTYyLDQ1IEBAIHB1YmxpYyB2b2lkIHRlc3RUcmFja2luZ1VwZGF0ZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlTdHJpbmcgYnJhbmNoID0gInJlZnMvaGVhZHMvbWFzdGVyIjsKIAkJU3RyaW5nIHRyYWNraW5nQnJhbmNoID0gInJlZnMvcmVtb3Rlcy8iICsgcmVtb3RlICsgIi9tYXN0ZXIiOwogCi0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVJldkNvbW1pdCBjb21taXQxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikKKwkJCQkJLmNhbGwoKTsKIAotCQlSZXZDb21taXQgY29tbWl0MSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpCi0JCQkJLmNhbGwoKTsKKwkJCVJlZlVwZGF0ZSBicmFuY2hSZWZVcGRhdGUgPSBkYi51cGRhdGVSZWYoYnJhbmNoKTsKKwkJCWJyYW5jaFJlZlVwZGF0ZS5zZXROZXdPYmplY3RJZChjb21taXQxLmdldElkKCkpOworCQkJYnJhbmNoUmVmVXBkYXRlLnVwZGF0ZSgpOwogCi0JCVJlZlVwZGF0ZSBicmFuY2hSZWZVcGRhdGUgPSBkYi51cGRhdGVSZWYoYnJhbmNoKTsKLQkJYnJhbmNoUmVmVXBkYXRlLnNldE5ld09iamVjdElkKGNvbW1pdDEuZ2V0SWQoKSk7Ci0JCWJyYW5jaFJlZlVwZGF0ZS51cGRhdGUoKTsKKwkJCVJlZlVwZGF0ZSB0cmFja2luZ0JyYW5jaFJlZlVwZGF0ZSA9IGRiLnVwZGF0ZVJlZih0cmFja2luZ0JyYW5jaCk7CisJCQl0cmFja2luZ0JyYW5jaFJlZlVwZGF0ZS5zZXROZXdPYmplY3RJZChjb21taXQxLmdldElkKCkpOworCQkJdHJhY2tpbmdCcmFuY2hSZWZVcGRhdGUudXBkYXRlKCk7CiAKLQkJUmVmVXBkYXRlIHRyYWNraW5nQnJhbmNoUmVmVXBkYXRlID0gZGIudXBkYXRlUmVmKHRyYWNraW5nQnJhbmNoKTsKLQkJdHJhY2tpbmdCcmFuY2hSZWZVcGRhdGUuc2V0TmV3T2JqZWN0SWQoY29tbWl0MS5nZXRJZCgpKTsKLQkJdHJhY2tpbmdCcmFuY2hSZWZVcGRhdGUudXBkYXRlKCk7Ci0KLQkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOwotCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsIHJlbW90ZSk7Ci0JCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKGRiMi5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOwotCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7Ci0JCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMobmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzLyIKLQkJCQkrIHJlbW90ZSArICIvKiIpKTsKLQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOwotCQljb25maWcuc2F2ZSgpOworCQkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCByZW1vdGUpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goZGIyLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKG5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy8iCisJCQkJCSsgcmVtb3RlICsgIi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKIAogCi0JCVJldkNvbW1pdCBjb21taXQyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNvbW1pdCB0byBwdXNoIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdDIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQ29tbWl0IHRvIHB1c2giKS5jYWxsKCk7CiAKLQkJUmVmU3BlYyBzcGVjID0gbmV3IFJlZlNwZWMoYnJhbmNoICsgIjoiICsgYnJhbmNoKTsKLQkJSXRlcmFibGU8UHVzaFJlc3VsdD4gcmVzdWx0SXRlcmFibGUgPSBnaXQucHVzaCgpLnNldFJlbW90ZShyZW1vdGUpCi0JCQkJLnNldFJlZlNwZWNzKHNwZWMpLmNhbGwoKTsKKwkJCVJlZlNwZWMgc3BlYyA9IG5ldyBSZWZTcGVjKGJyYW5jaCArICI6IiArIGJyYW5jaCk7CisJCQlJdGVyYWJsZTxQdXNoUmVzdWx0PiByZXN1bHRJdGVyYWJsZSA9IGdpdC5wdXNoKCkuc2V0UmVtb3RlKHJlbW90ZSkKKwkJCQkJLnNldFJlZlNwZWNzKHNwZWMpLmNhbGwoKTsKIAotCQlQdXNoUmVzdWx0IHJlc3VsdCA9IHJlc3VsdEl0ZXJhYmxlLml0ZXJhdG9yKCkubmV4dCgpOwotCQlUcmFja2luZ1JlZlVwZGF0ZSB0cmFja2luZ1JlZlVwZGF0ZSA9IHJlc3VsdAotCQkJCS5nZXRUcmFja2luZ1JlZlVwZGF0ZSh0cmFja2luZ0JyYW5jaCk7CisJCQlQdXNoUmVzdWx0IHJlc3VsdCA9IHJlc3VsdEl0ZXJhYmxlLml0ZXJhdG9yKCkubmV4dCgpOworCQkJVHJhY2tpbmdSZWZVcGRhdGUgdHJhY2tpbmdSZWZVcGRhdGUgPSByZXN1bHQKKwkJCQkJLmdldFRyYWNraW5nUmVmVXBkYXRlKHRyYWNraW5nQnJhbmNoKTsKIAotCQlhc3NlcnROb3ROdWxsKHRyYWNraW5nUmVmVXBkYXRlKTsKLQkJYXNzZXJ0RXF1YWxzKHRyYWNraW5nQnJhbmNoLCB0cmFja2luZ1JlZlVwZGF0ZS5nZXRMb2NhbE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscyhicmFuY2gsIHRyYWNraW5nUmVmVXBkYXRlLmdldFJlbW90ZU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscyhjb21taXQyLmdldElkKCksIHRyYWNraW5nUmVmVXBkYXRlLmdldE5ld09iamVjdElkKCkpOwotCQlhc3NlcnRFcXVhbHMoY29tbWl0Mi5nZXRJZCgpLCBkYi5yZXNvbHZlKHRyYWNraW5nQnJhbmNoKSk7Ci0JCWFzc2VydEVxdWFscyhjb21taXQyLmdldElkKCksIGRiMi5yZXNvbHZlKGJyYW5jaCkpOworCQkJYXNzZXJ0Tm90TnVsbCh0cmFja2luZ1JlZlVwZGF0ZSk7CisJCQlhc3NlcnRFcXVhbHModHJhY2tpbmdCcmFuY2gsIHRyYWNraW5nUmVmVXBkYXRlLmdldExvY2FsTmFtZSgpKTsKKwkJCWFzc2VydEVxdWFscyhicmFuY2gsIHRyYWNraW5nUmVmVXBkYXRlLmdldFJlbW90ZU5hbWUoKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0Mi5nZXRJZCgpLCB0cmFja2luZ1JlZlVwZGF0ZS5nZXROZXdPYmplY3RJZCgpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQyLmdldElkKCksIGRiLnJlc29sdmUodHJhY2tpbmdCcmFuY2gpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQyLmdldElkKCksIGRiMi5yZXNvbHZlKGJyYW5jaCkpOworCQl9CiAJfQogCiAJLyoqCkBAIC0yMDgsNDAgKzIxMCwzOCBAQCBwdWJsaWMgdm9pZCB0ZXN0VHJhY2tpbmdVcGRhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkgKi8KIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RQdXNoUmVmVXBkYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKQorCQkJCQkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkUHVzaFJlZlNwZWMobmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9oZWFkcy8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKIAotCQlmaW5hbCBTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKLQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOwotCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaChnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpCi0JCQkJLnRvVVJMKCkpOwotCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7Ci0JCXJlbW90ZUNvbmZpZy5hZGRQdXNoUmVmU3BlYyhuZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyoiKSk7Ci0JCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKLQkJY29uZmlnLnNhdmUoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOwotCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOwotCi0JCWFzc2VydEVxdWFscyhudWxsLCBnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKLQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKLQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKLQotCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgicmVmcy9oZWFkcy90ZXN0IikuY2FsbCgpOwotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJyZWZzL2hlYWRzL3Rlc3QiKS5jYWxsKCk7Ci0KLQotCQlmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgewotCQkJd3JpdGVUcmFzaEZpbGUoImYiICsgaSwgImNvbnRlbnQgb2YgZiIgKyBpKTsKLQkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIgKyBpKS5jYWxsKCk7Ci0JCQljb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiICsgaSkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsIGdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOwogCQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5jYWxsKCk7Ci0JCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXRBbGxSZWZzKCk7Ci0JCQlhc3NlcnRFcXVhbHMoImZhaWxlZCB0byB1cGRhdGUgb24gYXR0ZW1wdCAiICsgaSwgY29tbWl0LmdldElkKCksCi0JCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvdGVzdCIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CiAKKwkJCWdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJyZWZzL2hlYWRzL3Rlc3QiKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJyZWZzL2hlYWRzL3Rlc3QiKS5jYWxsKCk7CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCQkJd3JpdGVUcmFzaEZpbGUoImYiICsgaSwgImNvbnRlbnQgb2YgZiIgKyBpKTsKKwkJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiICsgaSkuY2FsbCgpOworCQkJCWNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIgKyBpKS5jYWxsKCk7CisJCQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5jYWxsKCk7CisJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0QWxsUmVmcygpOworCQkJCWFzc2VydEVxdWFscygiZmFpbGVkIHRvIHVwZGF0ZSBvbiBhdHRlbXB0ICIgKyBpLCBjb21taXQuZ2V0SWQoKSwKKwkJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvdGVzdCIpKTsKKwkJCX0KIAkJfQogCX0KIApAQCAtMjUyLDI4ICsyNTIsMjYgQEAgcHVibGljIHZvaWQgdGVzdFB1c2hSZWZVcGRhdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkgKi8KIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RQdXNoV2l0aFJlZlNwZWNGcm9tQ29uZmlnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKQorCQkJCQkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkUHVzaFJlZlNwZWMobmV3IFJlZlNwZWMoIkhFQUQ6cmVmcy9oZWFkcy9uZXdicmFuY2giKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2F2ZSgpOwogCi0JCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOwotCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7Ci0JCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKGdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkKLQkJCQkudG9VUkwoKSk7Ci0JCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKLQkJcmVtb3RlQ29uZmlnLmFkZFB1c2hSZWZTcGVjKG5ldyBSZWZTcGVjKCJIRUFEOnJlZnMvaGVhZHMvbmV3YnJhbmNoIikpOwotCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7Ci0JCWNvbmZpZy5zYXZlKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKLQotCQlhc3NlcnRFcXVhbHMobnVsbCwgZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7Ci0JCWdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0IikuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCi0JCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9uZXdicmFuY2giKSk7Ci0KLQorCQkJYXNzZXJ0RXF1YWxzKG51bGwsIGdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbmV3YnJhbmNoIikpOworCQl9CiAJfQogCiAJLyoqCkBAIC0yODMsMzggKzI4MSwzNyBAQCBwdWJsaWMgdm9pZCB0ZXN0UHVzaFdpdGhSZWZTcGVjRnJvbUNvbmZpZygpIHRocm93cyBFeGNlcHRpb24gewogCSAqLwogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFB1c2hXaXRob3V0UHVzaFJlZlNwZWMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaChnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpCisJCQkJCS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMobmV3IFJlZlNwZWMoCisJCQkJCSIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CiAKLQkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7Ci0JCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKLQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKQotCQkJCS50b1VSTCgpKTsKLQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOwotCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKG5ldyBSZWZTcGVjKAotCQkJCSIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKLQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOwotCQljb25maWcuc2F2ZSgpOworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CiAKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7Ci0JCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKG51bGwsCi0JCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBnaXQyLmdldFJlcG9zaXRvcnkoKQotCQkJCS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKLQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKLQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGdpdDIuZ2V0UmVwb3NpdG9yeSgpCi0JCQkJLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOwotCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwgZ2l0Mi5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLCBnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0IikuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLCBnaXQyLmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsIGdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQl9CiAJfQogCiAJLyoqCkBAIC0zMzUsNTEgKzMzMiw1MSBAQCBwdWJsaWMgdm9pZCB0ZXN0UHVzaEFmdGVyR0MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOwogCQljb25maWcuc2F2ZSgpOwogCi0JCUdpdCBnaXQxID0gbmV3IEdpdChkYik7Ci0JCUdpdCBnaXQyID0gbmV3IEdpdChkYjIpOworCQl0cnkgKEdpdCBnaXQxID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGRiMikpIHsKKwkJCS8vIHB1c2ggbWFzdGVyICh3aXRoIGEgbmV3IGNvbW1pdCkgdG8gdGhlIHJlbW90ZQorCQkJZ2l0MS5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKIAotCQkvLyBwdXNoIG1hc3RlciAod2l0aCBhIG5ldyBjb21taXQpIHRvIHRoZSByZW1vdGUKLQkJZ2l0MS5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQotCQlSZWZTcGVjIHNwZWMgPSBuZXcgUmVmU3BlYygicmVmcy9oZWFkcy8qOnJlZnMvaGVhZHMvKiIpOwotCQlnaXQxLnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5zZXRSZWZTcGVjcyhzcGVjKS5jYWxsKCk7Ci0KLQkJLy8gY3JlYXRlIGFuIHVucmVsYXRlZCByZWYgYW5kIGEgY29tbWl0IG9uIG91ciByZW1vdGUKLQkJZ2l0Mi5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJyZWZzL2hlYWRzL290aGVyIikuY2FsbCgpOwotCQlnaXQyLmNoZWNrb3V0KCkuc2V0TmFtZSgicmVmcy9oZWFkcy9vdGhlciIpLmNhbGwoKTsKLQotCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJjb250ZW50IG9mIGEiKTsKLQkJZ2l0Mi5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGNvbW1pdDIgPSBnaXQyLmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBhIikuY2FsbCgpOwotCi0JCS8vIHJ1biBhIGdjIHRvIGVuc3VyZSB3ZSBoYXZlIGEgYml0bWFwIGluZGV4Ci0JCVByb3BlcnRpZXMgcmVzID0gZ2l0MS5nYygpLnNldEV4cGlyZShudWxsKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyg3LCByZXMuc2l6ZSgpKTsKLQotCQkvLyBjcmVhdGUgYW5vdGhlciBjb21taXQgc28gd2UgaGF2ZSBzb21ldGhpbmcgZWxzZSB0byBwdXNoCi0JCXdyaXRlVHJhc2hGaWxlKCJiIiwgImNvbnRlbnQgb2YgYiIpOwotCQlnaXQxLmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOwotCQlSZXZDb21taXQgY29tbWl0MyA9IGdpdDEuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGIiKS5jYWxsKCk7Ci0KLQkJdHJ5IHsKLQkJCS8vIFJlLXJ1biB0aGUgcHVzaC4gIEZhaWx1cmUgbWF5IGhhcHBlbiBoZXJlLgorCQkJUmVmU3BlYyBzcGVjID0gbmV3IFJlZlNwZWMoInJlZnMvaGVhZHMvKjpyZWZzL2hlYWRzLyoiKTsKIAkJCWdpdDEucHVzaCgpLnNldFJlbW90ZSgidGVzdCIpLnNldFJlZlNwZWNzKHNwZWMpLmNhbGwoKTsKLQkJfSBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uIGUpIHsKLQkJCWFzc2VydFRydWUoInNob3VsZCBiZSBjYXVzZWQgYnkgYSBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uIiwgZQotCQkJCQkuZ2V0Q2F1c2UoKS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgTWlzc2luZ09iamVjdEV4Y2VwdGlvbik7Ci0JCQlmYWlsKCJjYXVnaHQgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiBmb3IgYSBjaGFuZ2Ugd2UgZG9uJ3QgaGF2ZSIpOwotCQl9CiAKLQkJLy8gUmVtb3RlIHdpbGwgaGF2ZSBib3RoIGEgYW5kIGIuICBNYXN0ZXIgd2lsbCBoYXZlIG9ubHkgYgotCQl0cnkgewotCQkJZGIucmVzb2x2ZShjb21taXQyLmdldElkKCkuZ2V0TmFtZSgpICsgIl57Y29tbWl0fSIpOwotCQkJZmFpbCgiaWQgc2hvdWxkbid0IGV4aXN0IGxvY2FsbHkiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ09iamVjdEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyB3ZSBzaG91bGQgZ2V0IGhlcmUKKwkJCS8vIGNyZWF0ZSBhbiB1bnJlbGF0ZWQgcmVmIGFuZCBhIGNvbW1pdCBvbiBvdXIgcmVtb3RlCisJCQlnaXQyLmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoInJlZnMvaGVhZHMvb3RoZXIiKS5jYWxsKCk7CisJCQlnaXQyLmNoZWNrb3V0KCkuc2V0TmFtZSgicmVmcy9oZWFkcy9vdGhlciIpLmNhbGwoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiY29udGVudCBvZiBhIik7CisJCQlnaXQyLmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdDIgPSBnaXQyLmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBhIikuY2FsbCgpOworCisJCQkvLyBydW4gYSBnYyB0byBlbnN1cmUgd2UgaGF2ZSBhIGJpdG1hcCBpbmRleAorCQkJUHJvcGVydGllcyByZXMgPSBnaXQxLmdjKCkuc2V0RXhwaXJlKG51bGwpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyg3LCByZXMuc2l6ZSgpKTsKKworCQkJLy8gY3JlYXRlIGFub3RoZXIgY29tbWl0IHNvIHdlIGhhdmUgc29tZXRoaW5nIGVsc2UgdG8gcHVzaAorCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiY29udGVudCBvZiBiIik7CisJCQlnaXQxLmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdDMgPSBnaXQxLmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBiIikuY2FsbCgpOworCisJCQl0cnkgeworCQkJCS8vIFJlLXJ1biB0aGUgcHVzaC4gIEZhaWx1cmUgbWF5IGhhcHBlbiBoZXJlLgorCQkJCWdpdDEucHVzaCgpLnNldFJlbW90ZSgidGVzdCIpLnNldFJlZlNwZWNzKHNwZWMpLmNhbGwoKTsKKwkJCX0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiBlKSB7CisJCQkJYXNzZXJ0VHJ1ZSgic2hvdWxkIGJlIGNhdXNlZCBieSBhIE1pc3NpbmdPYmplY3RFeGNlcHRpb24iLCBlCisJCQkJCQkuZ2V0Q2F1c2UoKS5nZXRDYXVzZSgpIGluc3RhbmNlb2YgTWlzc2luZ09iamVjdEV4Y2VwdGlvbik7CisJCQkJZmFpbCgiY2F1Z2h0IE1pc3NpbmdPYmplY3RFeGNlcHRpb24gZm9yIGEgY2hhbmdlIHdlIGRvbid0IGhhdmUiKTsKKwkJCX0KKworCQkJLy8gUmVtb3RlIHdpbGwgaGF2ZSBib3RoIGEgYW5kIGIuICBNYXN0ZXIgd2lsbCBoYXZlIG9ubHkgYgorCQkJdHJ5IHsKKwkJCQlkYi5yZXNvbHZlKGNvbW1pdDIuZ2V0SWQoKS5nZXROYW1lKCkgKyAiXntjb21taXR9Iik7CisJCQkJZmFpbCgiaWQgc2hvdWxkbid0IGV4aXN0IGxvY2FsbHkiKTsKKwkJCX0gY2F0Y2ggKE1pc3NpbmdPYmplY3RFeGNlcHRpb24gZSkgeworCQkJCS8vIHdlIHNob3VsZCBnZXQgaGVyZQorCQkJfQorCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdDIuZ2V0SWQoKSwKKwkJCQkJZGIyLnJlc29sdmUoY29tbWl0Mi5nZXRJZCgpLmdldE5hbWUoKSArICJee2NvbW1pdH0iKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0My5nZXRJZCgpLAorCQkJCQlkYjIucmVzb2x2ZShjb21taXQzLmdldElkKCkuZ2V0TmFtZSgpICsgIl57Y29tbWl0fSIpKTsKIAkJfQotCQlhc3NlcnRFcXVhbHMoY29tbWl0Mi5nZXRJZCgpLAotCQkJCWRiMi5yZXNvbHZlKGNvbW1pdDIuZ2V0SWQoKS5nZXROYW1lKCkgKyAiXntjb21taXR9IikpOwotCQlhc3NlcnRFcXVhbHMoY29tbWl0My5nZXRJZCgpLAotCQkJCWRiMi5yZXNvbHZlKGNvbW1pdDMuZ2V0SWQoKS5nZXROYW1lKCkgKyAiXntjb21taXR9IikpOwogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZFRlc3QuamF2YQppbmRleCA4YjBlZDVmLi4yNGNiNTIyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JlYmFzZUNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kVGVzdC5qYXZhCkBAIC0yODgsMTMgKzI4OCwxNCBAQCBwdWJsaWMgdm9pZCB0ZXN0UmViYXNlU2hvdWxkSWdub3JlTWVyZ2VDb21taXRzKCkKIAkJUmViYXNlUmVzdWx0IHJlcyA9IGdpdC5yZWJhc2UoKS5zZXRVcHN0cmVhbSgicmVmcy9oZWFkcy9tYXN0ZXIiKS5jYWxsKCk7CiAJCWFzc2VydEVxdWFscyhTdGF0dXMuT0ssIHJlcy5nZXRTdGF0dXMoKSk7CiAKLQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKTsKLQkJcncubWFya1N0YXJ0KHJ3LnBhcnNlQ29tbWl0KGRiLnJlc29sdmUoInJlZnMvaGVhZHMvdG9waWMiKSkpOwotCQlhc3NlcnREZXJpdmVkRnJvbShydy5uZXh0KCksIGUpOwotCQlhc3NlcnREZXJpdmVkRnJvbShydy5uZXh0KCksIGQpOwotCQlhc3NlcnREZXJpdmVkRnJvbShydy5uZXh0KCksIGMpOwotCQlhc3NlcnRFcXVhbHMoYiwgcncubmV4dCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGEsIHJ3Lm5leHQoKSk7CisJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJcncubWFya1N0YXJ0KHJ3LnBhcnNlQ29tbWl0KGRiLnJlc29sdmUoInJlZnMvaGVhZHMvdG9waWMiKSkpOworCQkJYXNzZXJ0RGVyaXZlZEZyb20ocncubmV4dCgpLCBlKTsKKwkJCWFzc2VydERlcml2ZWRGcm9tKHJ3Lm5leHQoKSwgZCk7CisJCQlhc3NlcnREZXJpdmVkRnJvbShydy5uZXh0KCksIGMpOworCQkJYXNzZXJ0RXF1YWxzKGIsIHJ3Lm5leHQoKSk7CisJCQlhc3NlcnRFcXVhbHMoYSwgcncubmV4dCgpKTsKKwkJfQogCiAJCUxpc3Q8UmVmbG9nRW50cnk+IGhlYWRMb2cgPSBkYi5nZXRSZWZsb2dSZWFkZXIoQ29uc3RhbnRzLkhFQUQpCiAJCQkJLmdldFJldmVyc2VFbnRyaWVzKCk7CkBAIC0zNTQsOCArMzU1LDYgQEAgcHVibGljIHZvaWQgdGVzdFJlYmFzZVByZXNlcnZpbmdNZXJnZXMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJICovCiAJcHJpdmF0ZSB2b2lkIGRvVGVzdFJlYmFzZVByZXNlcnZpbmdNZXJnZXMoYm9vbGVhbiB0ZXN0Q29uZmxpY3QpCiAJCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKTsKLQogCQkvLyBjcmVhdGUgZmlsZTEgb24gbWFzdGVyCiAJCXdyaXRlVHJhc2hGaWxlKEZJTEUxLCBGSUxFMSk7CiAJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihGSUxFMSkuY2FsbCgpOwpAQCAtNDA5LDcgKzQwOCw5IEBAIHByaXZhdGUgdm9pZCBkb1Rlc3RSZWJhc2VQcmVzZXJ2aW5nTWVyZ2VzKGJvb2xlYW4gdGVzdENvbmZsaWN0KQogCQkJZiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQgZiIpLmNhbGwoKTsKIAkJfSBlbHNlIHsKIAkJCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5NRVJHRUQsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKLQkJCWYgPSBydy5wYXJzZUNvbW1pdChyZXN1bHQuZ2V0TmV3SGVhZCgpKTsKKwkJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJCWYgPSBydy5wYXJzZUNvbW1pdChyZXN1bHQuZ2V0TmV3SGVhZCgpKTsKKwkJCX0KIAkJfQogCiAJCVJlYmFzZVJlc3VsdCByZXMgPSBnaXQucmViYXNlKCkuc2V0VXBzdHJlYW0oInJlZnMvaGVhZHMvbWFzdGVyIikKQEAgLTQ1MywyMyArNDU0LDI1IEBAIHByaXZhdGUgdm9pZCBkb1Rlc3RSZWJhc2VQcmVzZXJ2aW5nTWVyZ2VzKGJvb2xlYW4gdGVzdENvbmZsaWN0KQogCQlhc3NlcnRFcXVhbHMoImZpbGUyIiwgcmVhZCgiZmlsZTIiKSk7CiAJCWFzc2VydEVxdWFscygibW9yZSBjaGFuZ2UiLCByZWFkKCJmaWxlMyIpKTsKIAotCQlydy5tYXJrU3RhcnQocncucGFyc2VDb21taXQoZGIucmVzb2x2ZSgicmVmcy9oZWFkcy90b3BpYyIpKSk7Ci0JCVJldkNvbW1pdCBuZXdGID0gcncubmV4dCgpOwotCQlhc3NlcnREZXJpdmVkRnJvbShuZXdGLCBmKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIG5ld0YuZ2V0UGFyZW50Q291bnQoKSk7Ci0JCVJldkNvbW1pdCBuZXdEID0gcncubmV4dCgpOwotCQlhc3NlcnREZXJpdmVkRnJvbShuZXdELCBkKTsKLQkJaWYgKHRlc3RDb25mbGljdCkKLQkJCWFzc2VydEVxdWFscygiZCBuZXciLCByZWFkRmlsZSgiY29uZmxpY3QiLCBuZXdEKSk7Ci0JCVJldkNvbW1pdCBuZXdFID0gcncubmV4dCgpOwotCQlhc3NlcnREZXJpdmVkRnJvbShuZXdFLCBlKTsKLQkJaWYgKHRlc3RDb25mbGljdCkKLQkJCWFzc2VydEVxdWFscygiZSBuZXciLCByZWFkRmlsZSgiY29uZmxpY3QiLCBuZXdFKSk7Ci0JCWFzc2VydEVxdWFscyhuZXdELCBuZXdGLmdldFBhcmVudCgwKSk7Ci0JCWFzc2VydEVxdWFscyhuZXdFLCBuZXdGLmdldFBhcmVudCgxKSk7Ci0JCWFzc2VydERlcml2ZWRGcm9tKHJ3Lm5leHQoKSwgYyk7Ci0JCWFzc2VydEVxdWFscyhiLCBydy5uZXh0KCkpOwotCQlhc3NlcnRFcXVhbHMoYSwgcncubmV4dCgpKTsKKwkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQlydy5tYXJrU3RhcnQocncucGFyc2VDb21taXQoZGIucmVzb2x2ZSgicmVmcy9oZWFkcy90b3BpYyIpKSk7CisJCQlSZXZDb21taXQgbmV3RiA9IHJ3Lm5leHQoKTsKKwkJCWFzc2VydERlcml2ZWRGcm9tKG5ld0YsIGYpOworCQkJYXNzZXJ0RXF1YWxzKDIsIG5ld0YuZ2V0UGFyZW50Q291bnQoKSk7CisJCQlSZXZDb21taXQgbmV3RCA9IHJ3Lm5leHQoKTsKKwkJCWFzc2VydERlcml2ZWRGcm9tKG5ld0QsIGQpOworCQkJaWYgKHRlc3RDb25mbGljdCkKKwkJCQlhc3NlcnRFcXVhbHMoImQgbmV3IiwgcmVhZEZpbGUoImNvbmZsaWN0IiwgbmV3RCkpOworCQkJUmV2Q29tbWl0IG5ld0UgPSBydy5uZXh0KCk7CisJCQlhc3NlcnREZXJpdmVkRnJvbShuZXdFLCBlKTsKKwkJCWlmICh0ZXN0Q29uZmxpY3QpCisJCQkJYXNzZXJ0RXF1YWxzKCJlIG5ldyIsIHJlYWRGaWxlKCJjb25mbGljdCIsIG5ld0UpKTsKKwkJCWFzc2VydEVxdWFscyhuZXdELCBuZXdGLmdldFBhcmVudCgwKSk7CisJCQlhc3NlcnRFcXVhbHMobmV3RSwgbmV3Ri5nZXRQYXJlbnQoMSkpOworCQkJYXNzZXJ0RGVyaXZlZEZyb20ocncubmV4dCgpLCBjKTsKKwkJCWFzc2VydEVxdWFscyhiLCBydy5uZXh0KCkpOworCQkJYXNzZXJ0RXF1YWxzKGEsIHJ3Lm5leHQoKSk7CisJCX0KIAl9CiAKIAlwcml2YXRlIFN0cmluZyByZWFkRmlsZShTdHJpbmcgcGF0aCwgUmV2Q29tbWl0IGNvbW1pdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKQEAgLTUxNyw4OCArNTIwLDg5IEBAIHB1YmxpYyB2b2lkIHRlc3RSZWJhc2VQcmVzZXJ2aW5nTWVyZ2VzV2l0aFVucmVsYXRlZFNpZGUyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJICovCiAJcHJpdmF0ZSB2b2lkIGRvVGVzdFJlYmFzZVByZXNlcnZpbmdNZXJnZXNXaXRoVW5yZWxhdGVkU2lkZSgKIAkJCWJvb2xlYW4gdGVzdENvbmZsaWN0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKTsKLQkJcncuc29ydChSZXZTb3J0LlRPUE8pOworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhkYikpIHsKKwkJCXJ3LnNvcnQoUmV2U29ydC5UT1BPKTsKIAotCQl3cml0ZVRyYXNoRmlsZShGSUxFMSwgRklMRTEpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oRklMRTEpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0IGEiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZShGSUxFMSwgRklMRTEpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKEZJTEUxKS5jYWxsKCk7CisJCQlSZXZDb21taXQgYSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQgYSIpLmNhbGwoKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTIiLCAiYmxhaCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUyIikuY2FsbCgpOwotCQlSZXZDb21taXQgYiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQgYiIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlMiIsICJibGFoIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUyIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0IGIiKS5jYWxsKCk7CiAKLQkJLy8gY3JlYXRlIGEgdG9waWMgYnJhbmNoCi0JCWNyZWF0ZUJyYW5jaChiLCAicmVmcy9oZWFkcy90b3BpYyIpOwotCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy90b3BpYyIpOworCQkJLy8gY3JlYXRlIGEgdG9waWMgYnJhbmNoCisJCQljcmVhdGVCcmFuY2goYiwgInJlZnMvaGVhZHMvdG9waWMiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3RvcGljIik7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUzIiwgIm1vcmUgY2hhbmdlc3MiKTsKLQkJd3JpdGVUcmFzaEZpbGUoRklMRTEsICJwcmVwYXJpbmcgY29uZmxpY3QiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMyIpLmFkZEZpbGVwYXR0ZXJuKEZJTEUxKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdCBjIikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUzIiwgIm1vcmUgY2hhbmdlc3MiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKEZJTEUxLCAicHJlcGFyaW5nIGNvbmZsaWN0Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUzIikuYWRkRmlsZXBhdHRlcm4oRklMRTEpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdCBjIikuY2FsbCgpOwogCi0JCWNyZWF0ZUJyYW5jaChhLCAicmVmcy9oZWFkcy9zaWRlIik7Ci0JCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImNvbmZsaWN0IiwgImUiKTsKLQkJd3JpdGVUcmFzaEZpbGUoRklMRTEsIEZJTEUxICsgIlxuIiArICJsaW5lIDIiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlSZXZDb21taXQgZSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQgZSIpLmNhbGwoKTsKLQotCQkvLyBzd2l0Y2ggYmFjayB0byB0b3BpYyBhbmQgbWVyZ2UgaW4gc2lkZSwgY3JlYXRpbmcgZAotCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy90b3BpYyIpOwotCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKGUpCi0JCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkuY2FsbCgpOwotCi0JCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5DT05GTElDVElORywgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOwotCQlhc3NlcnRFcXVhbHMocmVzdWx0LmdldENvbmZsaWN0cygpLmtleVNldCgpLAotCQkJCUNvbGxlY3Rpb25zLnNpbmdsZXRvbihGSUxFMSkpOwotCQl3cml0ZVRyYXNoRmlsZShGSUxFMSwgIm1lcmdlIHJlc29sdXRpb24iKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKEZJTEUxKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdCBkIikuY2FsbCgpOwotCi0JCVJldkNvbW1pdCBmID0gY29tbWl0RmlsZSgiZmlsZTIiLCAibmV3IGNvbnRlbnQgdHdvIiwgInRvcGljIik7Ci0KLQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlZyIsICJmaWxlZyIpOwotCQlpZiAodGVzdENvbmZsaWN0KQotCQkJd3JpdGVUcmFzaEZpbGUoImNvbmZsaWN0IiwgImciKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlSZXZDb21taXQgZyA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQgZyIpLmNhbGwoKTsKLQotCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy90b3BpYyIpOwotCQlSZWJhc2VSZXN1bHQgcmVzID0gZ2l0LnJlYmFzZSgpLnNldFVwc3RyZWFtKCJyZWZzL2hlYWRzL21hc3RlciIpCi0JCQkJLnNldFByZXNlcnZlTWVyZ2VzKHRydWUpLmNhbGwoKTsKLQkJaWYgKHRlc3RDb25mbGljdCkgewotCQkJYXNzZXJ0RXF1YWxzKFN0YXR1cy5TVE9QUEVELCByZXMuZ2V0U3RhdHVzKCkpOwotCQkJYXNzZXJ0RXF1YWxzKENvbGxlY3Rpb25zLnNpbmdsZXRvbigiY29uZmxpY3QiKSwgZ2l0LnN0YXR1cygpLmNhbGwoKQotCQkJCQkuZ2V0Q29uZmxpY3RpbmcoKSk7Ci0JCQkvLyByZXNvbHZlCisJCQljcmVhdGVCcmFuY2goYSwgInJlZnMvaGVhZHMvc2lkZSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOwogCQkJd3JpdGVUcmFzaEZpbGUoImNvbmZsaWN0IiwgImUiKTsKLQkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiY29uZmxpY3QiKS5jYWxsKCk7Ci0JCQlyZXMgPSBnaXQucmViYXNlKCkuc2V0T3BlcmF0aW9uKE9wZXJhdGlvbi5DT05USU5VRSkuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoRklMRTEsIEZJTEUxICsgIlxuIiArICJsaW5lIDIiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBlID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdCBlIikuY2FsbCgpOworCisJCQkvLyBzd2l0Y2ggYmFjayB0byB0b3BpYyBhbmQgbWVyZ2UgaW4gc2lkZSwgY3JlYXRpbmcgZAorCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvdG9waWMiKTsKKwkJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoZSkKKwkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkuY2FsbCgpOworCisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKwkJCWFzc2VydEVxdWFscyhyZXN1bHQuZ2V0Q29uZmxpY3RzKCkua2V5U2V0KCksCisJCQkJCUNvbGxlY3Rpb25zLnNpbmdsZXRvbihGSUxFMSkpOworCQkJd3JpdGVUcmFzaEZpbGUoRklMRTEsICJtZXJnZSByZXNvbHV0aW9uIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oRklMRTEpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdCBkIikuY2FsbCgpOworCisJCQlSZXZDb21taXQgZiA9IGNvbW1pdEZpbGUoImZpbGUyIiwgIm5ldyBjb250ZW50IHR3byIsICJ0b3BpYyIpOworCisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlZyIsICJmaWxlZyIpOworCQkJaWYgKHRlc3RDb25mbGljdCkKKwkJCQl3cml0ZVRyYXNoRmlsZSgiY29uZmxpY3QiLCAiZyIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGcgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0IGciKS5jYWxsKCk7CisKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3RvcGljIik7CisJCQlSZWJhc2VSZXN1bHQgcmVzID0gZ2l0LnJlYmFzZSgpLnNldFVwc3RyZWFtKCJyZWZzL2hlYWRzL21hc3RlciIpCisJCQkJCS5zZXRQcmVzZXJ2ZU1lcmdlcyh0cnVlKS5jYWxsKCk7CisJCQlpZiAodGVzdENvbmZsaWN0KSB7CisJCQkJYXNzZXJ0RXF1YWxzKFN0YXR1cy5TVE9QUEVELCByZXMuZ2V0U3RhdHVzKCkpOworCQkJCWFzc2VydEVxdWFscyhDb2xsZWN0aW9ucy5zaW5nbGV0b24oImNvbmZsaWN0IiksIGdpdC5zdGF0dXMoKS5jYWxsKCkKKwkJCQkJCS5nZXRDb25mbGljdGluZygpKTsKKwkJCQkvLyByZXNvbHZlCisJCQkJd3JpdGVUcmFzaEZpbGUoImNvbmZsaWN0IiwgImUiKTsKKwkJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImNvbmZsaWN0IikuY2FsbCgpOworCQkJCXJlcyA9IGdpdC5yZWJhc2UoKS5zZXRPcGVyYXRpb24oT3BlcmF0aW9uLkNPTlRJTlVFKS5jYWxsKCk7CisJCQl9CisJCQlhc3NlcnRFcXVhbHMoU3RhdHVzLk9LLCByZXMuZ2V0U3RhdHVzKCkpOworCisJCQlhc3NlcnRFcXVhbHMoIm1lcmdlIHJlc29sdXRpb24iLCByZWFkKEZJTEUxKSk7CisJCQlhc3NlcnRFcXVhbHMoIm5ldyBjb250ZW50IHR3byIsIHJlYWQoImZpbGUyIikpOworCQkJYXNzZXJ0RXF1YWxzKCJtb3JlIGNoYW5nZXNzIiwgcmVhZCgiZmlsZTMiKSk7CisJCQlhc3NlcnRFcXVhbHMoImZpbGVnIiwgcmVhZCgiZmlsZWciKSk7CisKKwkJCXJ3Lm1hcmtTdGFydChydy5wYXJzZUNvbW1pdChkYi5yZXNvbHZlKCJyZWZzL2hlYWRzL3RvcGljIikpKTsKKwkJCVJldkNvbW1pdCBuZXdGID0gcncubmV4dCgpOworCQkJYXNzZXJ0RGVyaXZlZEZyb20obmV3RiwgZik7CisJCQlSZXZDb21taXQgbmV3RCA9IHJ3Lm5leHQoKTsKKwkJCWFzc2VydERlcml2ZWRGcm9tKG5ld0QsIGQpOworCQkJYXNzZXJ0RXF1YWxzKDIsIG5ld0QuZ2V0UGFyZW50Q291bnQoKSk7CisJCQlSZXZDb21taXQgbmV3QyA9IHJ3Lm5leHQoKTsKKwkJCWFzc2VydERlcml2ZWRGcm9tKG5ld0MsIGMpOworCQkJUmV2Q29tbWl0IG5ld0UgPSBydy5uZXh0KCk7CisJCQlhc3NlcnRFcXVhbHMoZSwgbmV3RSk7CisJCQlhc3NlcnRFcXVhbHMobmV3QywgbmV3RC5nZXRQYXJlbnQoMCkpOworCQkJYXNzZXJ0RXF1YWxzKGUsIG5ld0QuZ2V0UGFyZW50KDEpKTsKKwkJCWFzc2VydEVxdWFscyhnLCBydy5uZXh0KCkpOworCQkJYXNzZXJ0RXF1YWxzKGIsIHJ3Lm5leHQoKSk7CisJCQlhc3NlcnRFcXVhbHMoYSwgcncubmV4dCgpKTsKIAkJfQotCQlhc3NlcnRFcXVhbHMoU3RhdHVzLk9LLCByZXMuZ2V0U3RhdHVzKCkpOwotCi0JCWFzc2VydEVxdWFscygibWVyZ2UgcmVzb2x1dGlvbiIsIHJlYWQoRklMRTEpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuZXcgY29udGVudCB0d28iLCByZWFkKCJmaWxlMiIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJtb3JlIGNoYW5nZXNzIiwgcmVhZCgiZmlsZTMiKSk7Ci0JCWFzc2VydEVxdWFscygiZmlsZWciLCByZWFkKCJmaWxlZyIpKTsKLQotCQlydy5tYXJrU3RhcnQocncucGFyc2VDb21taXQoZGIucmVzb2x2ZSgicmVmcy9oZWFkcy90b3BpYyIpKSk7Ci0JCVJldkNvbW1pdCBuZXdGID0gcncubmV4dCgpOwotCQlhc3NlcnREZXJpdmVkRnJvbShuZXdGLCBmKTsKLQkJUmV2Q29tbWl0IG5ld0QgPSBydy5uZXh0KCk7Ci0JCWFzc2VydERlcml2ZWRGcm9tKG5ld0QsIGQpOwotCQlhc3NlcnRFcXVhbHMoMiwgbmV3RC5nZXRQYXJlbnRDb3VudCgpKTsKLQkJUmV2Q29tbWl0IG5ld0MgPSBydy5uZXh0KCk7Ci0JCWFzc2VydERlcml2ZWRGcm9tKG5ld0MsIGMpOwotCQlSZXZDb21taXQgbmV3RSA9IHJ3Lm5leHQoKTsKLQkJYXNzZXJ0RXF1YWxzKGUsIG5ld0UpOwotCQlhc3NlcnRFcXVhbHMobmV3QywgbmV3RC5nZXRQYXJlbnQoMCkpOwotCQlhc3NlcnRFcXVhbHMoZSwgbmV3RC5nZXRQYXJlbnQoMSkpOwotCQlhc3NlcnRFcXVhbHMoZywgcncubmV4dCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGIsIHJ3Lm5leHQoKSk7Ci0JCWFzc2VydEVxdWFscyhhLCBydy5uZXh0KCkpOwogCX0KIAogCUBUZXN0CkBAIC02ODcsOCArNjkxLDEwIEBAIHB1YmxpYyB2b2lkIHRlc3RDb25mbGljdEZyZWVXaXRoU2luZ2xlRmlsZSgpIHRocm93cyBFeGNlcHRpb24gewogCQljaGVja0ZpbGUodGhlRmlsZSwgIjFtYXN0ZXJcbjJcbjNcbnRvcGljXG4iKTsKIAkJLy8gb3VyIG9sZCBicmFuY2ggc2hvdWxkIGJlIGNoZWNrZWQgb3V0IGFnYWluCiAJCWFzc2VydEVxdWFscygicmVmcy9oZWFkcy90b3BpYyIsIGRiLmdldEZ1bGxCcmFuY2goKSk7Ci0JCWFzc2VydEVxdWFscyhsYXN0TWFzdGVyQ2hhbmdlLCBuZXcgUmV2V2FsayhkYikucGFyc2VDb21taXQoCi0JCQkJZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpLmdldFBhcmVudCgwKSk7CisJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJYXNzZXJ0RXF1YWxzKGxhc3RNYXN0ZXJDaGFuZ2UsIHJ3LnBhcnNlQ29tbWl0KAorCQkJCQlkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSkuZ2V0UGFyZW50KDApKTsKKwkJfQogCQlhc3NlcnRFcXVhbHMob3JpZ0hlYWQsIGRiLnJlYWRPcmlnSGVhZCgpKTsKIAkJTGlzdDxSZWZsb2dFbnRyeT4gaGVhZExvZyA9IGRiLmdldFJlZmxvZ1JlYWRlcihDb25zdGFudHMuSEVBRCkKIAkJCQkuZ2V0UmV2ZXJzZUVudHJpZXMoKTsKQEAgLTczNyw4ICs3NDMsMTAgQEAgcHVibGljIHZvaWQgdGVzdERldGFjaGVkSGVhZCgpIHRocm93cyBFeGNlcHRpb24gewogCQlSZWJhc2VSZXN1bHQgcmVzID0gZ2l0LnJlYmFzZSgpLnNldFVwc3RyZWFtKCJyZWZzL2hlYWRzL21hc3RlciIpLmNhbGwoKTsKIAkJYXNzZXJ0RXF1YWxzKFN0YXR1cy5PSywgcmVzLmdldFN0YXR1cygpKTsKIAkJY2hlY2tGaWxlKHRoZUZpbGUsICIxbWFzdGVyXG4yXG4zXG50b3BpY1xuIik7Ci0JCWFzc2VydEVxdWFscyhsYXN0TWFzdGVyQ2hhbmdlLCBuZXcgUmV2V2FsayhkYikucGFyc2VDb21taXQoCi0JCQkJZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpLmdldFBhcmVudCgwKSk7CisJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJYXNzZXJ0RXF1YWxzKGxhc3RNYXN0ZXJDaGFuZ2UsIHJ3LnBhcnNlQ29tbWl0KAorCQkJCQlkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSkuZ2V0UGFyZW50KDApKTsKKwkJfQogCiAJCUxpc3Q8UmVmbG9nRW50cnk+IGhlYWRMb2cgPSBkYi5nZXRSZWZsb2dSZWFkZXIoQ29uc3RhbnRzLkhFQUQpCiAJCQkJLmdldFJldmVyc2VFbnRyaWVzKCk7CkBAIC03ODUsOCArNzkzLDEwIEBAIHB1YmxpYyB2b2lkIHRlc3RGaWxlc0FkZGVkRnJvbVR3b0JyYW5jaGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAkJLy8gb3VyIG9sZCBicmFuY2ggc2hvdWxkIGJlIGNoZWNrZWQgb3V0IGFnYWluCiAJCWFzc2VydEVxdWFscygicmVmcy9oZWFkcy9maWxlMyIsIGRiLmdldEZ1bGxCcmFuY2goKSk7Ci0JCWFzc2VydEVxdWFscyhhZGRGaWxlMiwgbmV3IFJldldhbGsoZGIpLnBhcnNlQ29tbWl0KAotCQkJCWRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKS5nZXRQYXJlbnQoMCkpOworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhkYikpIHsKKwkJCWFzc2VydEVxdWFscyhhZGRGaWxlMiwgcncucGFyc2VDb21taXQoCisJCQkJCWRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKS5nZXRQYXJlbnQoMCkpOworCQl9CiAKIAkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvZmlsZTIiKTsKIAkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBGSUxFMSkuZXhpc3RzKCkpOwpAQCAtODQ2LDkgKzg1NiwxMCBAQCBwdWJsaWMgdm9pZCB0ZXN0U3RvcE9uQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0RXF1YWxzKHJlcy5nZXRTdGF0dXMoKSwgU3RhdHVzLkFCT1JURUQpOwogCQlhc3NlcnRFcXVhbHMoInJlZnMvaGVhZHMvdG9waWMiLCBkYi5nZXRGdWxsQnJhbmNoKCkpOwogCQljaGVja0ZpbGUoRklMRTEsICIxdG9waWMiLCAiMiIsICIzIiwgInRvcGljNCIpOwotCQlSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGIpOwotCQlhc3NlcnRFcXVhbHMobGFzdFRvcGljQ29tbWl0LCBydwotCQkJCS5wYXJzZUNvbW1pdChkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSkpOworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhkYikpIHsKKwkJCWFzc2VydEVxdWFscyhsYXN0VG9waWNDb21taXQsCisJCQkJCXJ3LnBhcnNlQ29tbWl0KGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKSk7CisJCX0KIAkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CiAKIAkJLy8gcmViYXNlLSBkaXIgaW4gLmdpdCBtdXN0IGJlIGRlbGV0ZWQKQEAgLTkwOSw5ICs5MjAsMTAgQEAgcHVibGljIHZvaWQgdGVzdFN0b3BPbkNvbmZsaWN0QW5kQWJvcnRXaXRoRGV0YWNoZWRIRUFEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWFzc2VydEVxdWFscyhyZXMuZ2V0U3RhdHVzKCksIFN0YXR1cy5BQk9SVEVEKTsKIAkJYXNzZXJ0RXF1YWxzKGxhc3RUb3BpY0NvbW1pdC5nZXROYW1lKCksIGRiLmdldEZ1bGxCcmFuY2goKSk7CiAJCWNoZWNrRmlsZShGSUxFMSwgIjF0b3BpYyIsICIyIiwgIjMiLCAidG9waWM0Iik7Ci0JCVJldldhbGsgcncgPSBuZXcgUmV2V2FsayhkYik7Ci0JCWFzc2VydEVxdWFscyhsYXN0VG9waWNDb21taXQsCi0JCQkJcncucGFyc2VDb21taXQoZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpKTsKKwkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQlhc3NlcnRFcXVhbHMobGFzdFRvcGljQ29tbWl0LAorCQkJCQlydy5wYXJzZUNvbW1pdChkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSkpOworCQl9CiAJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOwogCiAJCS8vIHJlYmFzZS0gZGlyIGluIC5naXQgbXVzdCBiZSBkZWxldGVkCkBAIC05NjYsMTEgKzk3OCwxMiBAQCBwdWJsaWMgdm9pZCB0ZXN0U3RvcE9uQ29uZmxpY3RBbmRDb250aW51ZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsIGRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKIAogCQlPYmplY3RJZCBoZWFkSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKTsKLQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKTsKLQkJUmV2Q29tbWl0IHJjID0gcncucGFyc2VDb21taXQoaGVhZElkKTsKLQkJUmV2Q29tbWl0IHBhcmVudCA9IHJ3LnBhcnNlQ29tbWl0KHJjLmdldFBhcmVudCgwKSk7Ci0JCWFzc2VydEVxdWFscygiY2hhbmdlIGZpbGUxIGluIHRvcGljXG5cblRoaXMgaXMgY29uZmxpY3RpbmciLCBwYXJlbnQKLQkJCQkuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJUmV2Q29tbWl0IHJjID0gcncucGFyc2VDb21taXQoaGVhZElkKTsKKwkJCVJldkNvbW1pdCBwYXJlbnQgPSBydy5wYXJzZUNvbW1pdChyYy5nZXRQYXJlbnQoMCkpOworCQkJYXNzZXJ0RXF1YWxzKCJjaGFuZ2UgZmlsZTEgaW4gdG9waWNcblxuVGhpcyBpcyBjb25mbGljdGluZyIsIHBhcmVudAorCQkJCQkuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCX0KIAl9CiAKIAlAVGVzdApAQCAtMTAxNyw5ICsxMDMwLDEwIEBAIHB1YmxpYyB2b2lkIHRlc3RTdG9wT25Db25mbGljdEFuZENvbnRpbnVlV2l0aE5vRGVsdGFUb01hc3RlcigpCiAJCWdpdC5yZWJhc2UoKS5zZXRPcGVyYXRpb24oT3BlcmF0aW9uLlNLSVApLmNhbGwoKTsKIAogCQlPYmplY3RJZCBoZWFkSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKTsKLQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKTsKLQkJUmV2Q29tbWl0IHJjID0gcncucGFyc2VDb21taXQoaGVhZElkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjaGFuZ2UgZmlsZTEgaW4gbWFzdGVyIiwgcmMuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJUmV2Q29tbWl0IHJjID0gcncucGFyc2VDb21taXQoaGVhZElkKTsKKwkJCWFzc2VydEVxdWFscygiY2hhbmdlIGZpbGUxIGluIG1hc3RlciIsIHJjLmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTEzMDgsMTAgKzEzMjIsMTEgQEAgcHVibGljIHZvaWQgdGVzdFN0b3BPbkNvbmZsaWN0Q29tbWl0QW5kQ29udGludWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJZ2l0LnJlYmFzZSgpLnNldE9wZXJhdGlvbihPcGVyYXRpb24uU0tJUCkuY2FsbCgpOwogCiAJCU9iamVjdElkIGhlYWRJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOwotCQlSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGIpOwotCQlSZXZDb21taXQgcmMgPSBydy5wYXJzZUNvbW1pdChoZWFkSWQpOwotCQlSZXZDb21taXQgcGFyZW50ID0gcncucGFyc2VDb21taXQocmMuZ2V0UGFyZW50KDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJBIGRpZmZlcmVudCBjb21taXQgbWVzc2FnZSIsIHBhcmVudC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQlSZXZDb21taXQgcmMgPSBydy5wYXJzZUNvbW1pdChoZWFkSWQpOworCQkJUmV2Q29tbWl0IHBhcmVudCA9IHJ3LnBhcnNlQ29tbWl0KHJjLmdldFBhcmVudCgwKSk7CisJCQlhc3NlcnRFcXVhbHMoIkEgZGlmZmVyZW50IGNvbW1pdCBtZXNzYWdlIiwgcGFyZW50LmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJcHJpdmF0ZSBSZXZDb21taXQgd3JpdGVGaWxlQW5kQ29tbWl0KFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIGNvbW1pdE1lc3NhZ2UsCkBAIC0xNDIwLDkgKzE0MzUsMTAgQEAgcHVibGljIHZvaWQgdGVzdFN0b3BPbkNvbmZsaWN0RmlsZUNyZWF0aW9uQW5kRGVsZXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJcmVzID0gZ2l0LnJlYmFzZSgpLnNldE9wZXJhdGlvbihPcGVyYXRpb24uQUJPUlQpLmNhbGwoKTsKIAkJYXNzZXJ0RXF1YWxzKHJlcy5nZXRTdGF0dXMoKSwgU3RhdHVzLkFCT1JURUQpOwogCQlhc3NlcnRFcXVhbHMoInJlZnMvaGVhZHMvdG9waWMiLCBkYi5nZXRGdWxsQnJhbmNoKCkpOwotCQlSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGIpOwotCQlhc3NlcnRFcXVhbHMoY29uZmxpY3RpbmcsIHJ3LnBhcnNlQ29tbWl0KGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKSk7Ci0JCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2FsayhkYikpIHsKKwkJCWFzc2VydEVxdWFscyhjb25mbGljdGluZywgcncucGFyc2VDb21taXQoZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpKTsKKwkJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQl9CiAKIAkJLy8gcmViYXNlLSBkaXIgaW4gLmdpdCBtdXN0IGJlIGRlbGV0ZWQKIAkJYXNzZXJ0RmFsc2UobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksICJyZWJhc2UtbWVyZ2UiKS5leGlzdHMoKSk7CkBAIC0yMjg2LDE0ICsyMzAyLDE1IEBAIHB1YmxpYyBTdHJpbmcgbW9kaWZ5Q29tbWl0TWVzc2FnZShTdHJpbmcgY29tbWl0KSB7CiAJCWFzc2VydEVxdWFscyhSZWJhc2VSZXN1bHQuU3RhdHVzLk9LLCByZXMyLmdldFN0YXR1cygpKTsKIAogCQlPYmplY3RJZCBoZWFkSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKTsKLQkJUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKGRiKTsKLQkJUmV2Q29tbWl0IHJjID0gcncucGFyc2VDb21taXQoaGVhZElkKTsKKwkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQlSZXZDb21taXQgcmMgPSBydy5wYXJzZUNvbW1pdChoZWFkSWQpOwogCi0JCU9iamVjdElkIGhlYWQxSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEICsgIn4xIik7Ci0JCVJldkNvbW1pdCByYzEgPSBydy5wYXJzZUNvbW1pdChoZWFkMUlkKTsKKwkJCU9iamVjdElkIGhlYWQxSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEICsgIn4xIik7CisJCQlSZXZDb21taXQgcmMxID0gcncucGFyc2VDb21taXQoaGVhZDFJZCk7CiAKLQkJYXNzZXJ0RXF1YWxzKHJjLmdldEZ1bGxNZXNzYWdlKCksIGM0LmdldEZ1bGxNZXNzYWdlKCkpOwotCQlhc3NlcnRFcXVhbHMocmMxLmdldEZ1bGxNZXNzYWdlKCksIGMyLmdldEZ1bGxNZXNzYWdlKCkpOworCQkJYXNzZXJ0RXF1YWxzKHJjLmdldEZ1bGxNZXNzYWdlKCksIGM0LmdldEZ1bGxNZXNzYWdlKCkpOworCQkJYXNzZXJ0RXF1YWxzKHJjMS5nZXRGdWxsTWVzc2FnZSgpLCBjMi5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJfQogCX0KIAogCUBUZXN0CkBAIC0yNjQzLDE1ICsyNjYwLDE2IEBAIHB1YmxpYyBTdHJpbmcgbW9kaWZ5Q29tbWl0TWVzc2FnZShTdHJpbmcgY29tbWl0KSB7CiAJCQkJCX0KIAkJCQl9KS5jYWxsKCk7CiAKLQkJUmV2V2FsayB3YWxrID0gbmV3IFJldldhbGsoZGIpOwotCQlPYmplY3RJZCBoZWFkSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKTsKLQkJUmV2Q29tbWl0IGhlYWRDb21taXQgPSB3YWxrLnBhcnNlQ29tbWl0KGhlYWRJZCk7Ci0JCWFzc2VydEVxdWFscyhoZWFkQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCksCi0JCQkJInVwZGF0ZSBmaWxlMiBvbiBtYXN0ZXJcbm5ldyBsaW5lIik7CisJCXRyeSAoUmV2V2FsayB3YWxrID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQlPYmplY3RJZCBoZWFkSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKTsKKwkJCVJldkNvbW1pdCBoZWFkQ29tbWl0ID0gd2Fsay5wYXJzZUNvbW1pdChoZWFkSWQpOworCQkJYXNzZXJ0RXF1YWxzKGhlYWRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSwKKwkJCQkJInVwZGF0ZSBmaWxlMiBvbiBtYXN0ZXJcbm5ldyBsaW5lIik7CiAKLQkJT2JqZWN0SWQgaGVhZDJJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQgKyAiXjEiKTsKLQkJUmV2Q29tbWl0IGhlYWQxQ29tbWl0ID0gd2Fsay5wYXJzZUNvbW1pdChoZWFkMklkKTsKLQkJYXNzZXJ0RXF1YWxzKCJjaGFuZ2VkIiwgaGVhZDFDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlPYmplY3RJZCBoZWFkMklkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCArICJeMSIpOworCQkJUmV2Q29tbWl0IGhlYWQxQ29tbWl0ID0gd2Fsay5wYXJzZUNvbW1pdChoZWFkMklkKTsKKwkJCWFzc2VydEVxdWFscygiY2hhbmdlZCIsIGhlYWQxQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTI3MjIsMTcgKzI3NDAsMTggQEAgcHVibGljIFN0cmluZyBtb2RpZnlDb21taXRNZXNzYWdlKFN0cmluZyBjb21taXQpIHsKIAkJCQkJfQogCQkJCX0pLmNhbGwoKTsKIAotCQlSZXZXYWxrIHdhbGsgPSBuZXcgUmV2V2FsayhkYik7Ci0JCU9iamVjdElkIGhlYWRJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOwotCQlSZXZDb21taXQgaGVhZENvbW1pdCA9IHdhbGsucGFyc2VDb21taXQoaGVhZElkKTsKLQkJYXNzZXJ0RXF1YWxzKGhlYWRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSwKLQkJCQkidXBkYXRlIGZpbGUyIG9uIG1hc3RlclxubmV3IGxpbmUiKTsKKwkJdHJ5IChSZXZXYWxrIHdhbGsgPSBuZXcgUmV2V2FsayhkYikpIHsKKwkJCU9iamVjdElkIGhlYWRJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOworCQkJUmV2Q29tbWl0IGhlYWRDb21taXQgPSB3YWxrLnBhcnNlQ29tbWl0KGhlYWRJZCk7CisJCQlhc3NlcnRFcXVhbHMoaGVhZENvbW1pdC5nZXRGdWxsTWVzc2FnZSgpLAorCQkJCQkidXBkYXRlIGZpbGUyIG9uIG1hc3RlclxubmV3IGxpbmUiKTsKIAotCQlPYmplY3RJZCBoZWFkMklkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCArICJeMSIpOwotCQlSZXZDb21taXQgaGVhZDFDb21taXQgPSB3YWxrLnBhcnNlQ29tbWl0KGhlYWQySWQpOwotCQlhc3NlcnRFcXVhbHMoCi0JCQkJIkFkZCBmaWxlMVxubmV3IGxpbmVcbkFkZCBmaWxlMlxubmV3IGxpbmVcbnVwZGF0ZWQgZmlsZTEgb24gbWFzdGVyXG5uZXcgbGluZSIsCi0JCQkJaGVhZDFDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlPYmplY3RJZCBoZWFkMklkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCArICJeMSIpOworCQkJUmV2Q29tbWl0IGhlYWQxQ29tbWl0ID0gd2Fsay5wYXJzZUNvbW1pdChoZWFkMklkKTsKKwkJCWFzc2VydEVxdWFscygKKwkJCQkJIkFkZCBmaWxlMVxubmV3IGxpbmVcbkFkZCBmaWxlMlxubmV3IGxpbmVcbnVwZGF0ZWQgZmlsZTEgb24gbWFzdGVyXG5uZXcgbGluZSIsCisJCQkJCWhlYWQxQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTI4MDQsMTUgKzI4MjMsMTYgQEAgcHVibGljIFN0cmluZyBtb2RpZnlDb21taXRNZXNzYWdlKFN0cmluZyBjb21taXQpIHsKIAkJCQkJfQogCQkJCX0pLmNhbGwoKTsKIAotCQlSZXZXYWxrIHdhbGsgPSBuZXcgUmV2V2FsayhkYik7Ci0JCU9iamVjdElkIGhlYWRJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOwotCQlSZXZDb21taXQgaGVhZENvbW1pdCA9IHdhbGsucGFyc2VDb21taXQoaGVhZElkKTsKLQkJYXNzZXJ0RXF1YWxzKGhlYWRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSwKLQkJCQkidXBkYXRlIGZpbGUyIG9uIG1hc3RlclxubmV3IGxpbmUiKTsKKwkJdHJ5IChSZXZXYWxrIHdhbGsgPSBuZXcgUmV2V2FsayhkYikpIHsKKwkJCU9iamVjdElkIGhlYWRJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOworCQkJUmV2Q29tbWl0IGhlYWRDb21taXQgPSB3YWxrLnBhcnNlQ29tbWl0KGhlYWRJZCk7CisJCQlhc3NlcnRFcXVhbHMoaGVhZENvbW1pdC5nZXRGdWxsTWVzc2FnZSgpLAorCQkJCQkidXBkYXRlIGZpbGUyIG9uIG1hc3RlclxubmV3IGxpbmUiKTsKIAotCQlPYmplY3RJZCBoZWFkMklkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCArICJeMSIpOwotCQlSZXZDb21taXQgaGVhZDFDb21taXQgPSB3YWxrLnBhcnNlQ29tbWl0KGhlYWQySWQpOwotCQlhc3NlcnRFcXVhbHMoImNoYW5nZWQiLCBoZWFkMUNvbW1pdC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCU9iamVjdElkIGhlYWQySWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEICsgIl4xIik7CisJCQlSZXZDb21taXQgaGVhZDFDb21taXQgPSB3YWxrLnBhcnNlQ29tbWl0KGhlYWQySWQpOworCQkJYXNzZXJ0RXF1YWxzKCJjaGFuZ2VkIiwgaGVhZDFDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCX0KIAl9CiAKIAlAVGVzdApAQCAtMjg1NSwxNiArMjg3NSwxNyBAQCBwdWJsaWMgU3RyaW5nIG1vZGlmeUNvbW1pdE1lc3NhZ2UoU3RyaW5nIGNvbW1pdCkgewogCQkJCQl9CiAJCQkJfSkuY2FsbCgpOwogCi0JCVJldldhbGsgd2FsayA9IG5ldyBSZXZXYWxrKGRiKTsKLQkJT2JqZWN0SWQgaGVhZElkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCk7Ci0JCVJldkNvbW1pdCBoZWFkQ29tbWl0ID0gd2Fsay5wYXJzZUNvbW1pdChoZWFkSWQpOwotCQlhc3NlcnRFcXVhbHMoInVwZGF0ZSBmaWxlMiBvbiBtYXN0ZXJcbm5ldyBsaW5lIiwKLQkJCQloZWFkQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOworCQl0cnkgKFJldldhbGsgd2FsayA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJT2JqZWN0SWQgaGVhZElkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCk7CisJCQlSZXZDb21taXQgaGVhZENvbW1pdCA9IHdhbGsucGFyc2VDb21taXQoaGVhZElkKTsKKwkJCWFzc2VydEVxdWFscygidXBkYXRlIGZpbGUyIG9uIG1hc3RlclxubmV3IGxpbmUiLAorCQkJCQloZWFkQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOwogCi0JCU9iamVjdElkIGhlYWQxSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEICsgIl4xIik7Ci0JCVJldkNvbW1pdCBoZWFkMUNvbW1pdCA9IHdhbGsucGFyc2VDb21taXQoaGVhZDFJZCk7Ci0JCWFzc2VydEVxdWFscygiQWRkIGZpbGUyXG5uZXcgbGluZSIsCi0JCQkJaGVhZDFDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlPYmplY3RJZCBoZWFkMUlkID0gZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCArICJeMSIpOworCQkJUmV2Q29tbWl0IGhlYWQxQ29tbWl0ID0gd2Fsay5wYXJzZUNvbW1pdChoZWFkMUlkKTsKKwkJCWFzc2VydEVxdWFscygiQWRkIGZpbGUyXG5uZXcgbGluZSIsCisJCQkJCWhlYWQxQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTI5MDMsMTEgKzI5MjQsMTIgQEAgcHVibGljIFN0cmluZyBtb2RpZnlDb21taXRNZXNzYWdlKFN0cmluZyBjb21taXQpIHsKIAkJCQkJfQogCQkJCX0pLmNhbGwoKTsKIAotCQlSZXZXYWxrIHdhbGsgPSBuZXcgUmV2V2FsayhkYik7Ci0JCU9iamVjdElkIGhlYWRJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOwotCQlSZXZDb21taXQgaGVhZENvbW1pdCA9IHdhbGsucGFyc2VDb21taXQoaGVhZElkKTsKLQkJYXNzZXJ0RXF1YWxzKCJBZGQgZmlsZTIiLAotCQkJCWhlYWRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCXRyeSAoUmV2V2FsayB3YWxrID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQlPYmplY3RJZCBoZWFkSWQgPSBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKTsKKwkJCVJldkNvbW1pdCBoZWFkQ29tbWl0ID0gd2Fsay5wYXJzZUNvbW1pdChoZWFkSWQpOworCQkJYXNzZXJ0RXF1YWxzKCJBZGQgZmlsZTIiLAorCQkJCQloZWFkQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CiAJfQogCiAJQFRlc3QoZXhwZWN0ZWQgPSBJbnZhbGlkUmViYXNlU3RlcEV4Y2VwdGlvbi5jbGFzcykKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmVzZXRDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXNldENvbW1hbmRUZXN0LmphdmEKaW5kZXggNjZmMjVlOC4uNDBkODQ1OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXNldENvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXNldENvbW1hbmRUZXN0LmphdmEKQEAgLTQ2MywyNCArNDYzLDI0IEBAIHB1YmxpYyB2b2lkIHRlc3RIYXJkUmVzZXRPblRhZygpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0SGFyZFJlc2V0QWZ0ZXJTcXVhc2hNZXJnZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZyA9IG5ldyBHaXQoZGIpOworCQlnaXQgPSBuZXcgR2l0KGRiKTsKIAogCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTEiLCAiZmlsZTEiKTsKLQkJZy5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBmaXJzdCA9IGcuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7CisJCVJldkNvbW1pdCBmaXJzdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKIAogCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJmaWxlMSIpLmV4aXN0cygpKTsKIAkJY3JlYXRlQnJhbmNoKGZpcnN0LCAicmVmcy9oZWFkcy9icmFuY2gxIik7CiAJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL2JyYW5jaDEiKTsKIAogCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTIiLCAiZmlsZTIiKTsKLQkJZy5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTIiKS5jYWxsKCk7Ci0JCWcuY29tbWl0KCkuc2V0TWVzc2FnZSgic2Vjb25kIGNvbW1pdCIpLmNhbGwoKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNlY29uZCBjb21taXQiKS5jYWxsKCk7CiAJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZpbGUyIikuZXhpc3RzKCkpOwogCiAJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOwogCi0JCU1lcmdlUmVzdWx0IHJlc3VsdCA9IGcubWVyZ2UoKQorCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKQogCQkJCS5pbmNsdWRlKGRiLmV4YWN0UmVmKCJyZWZzL2hlYWRzL2JyYW5jaDEiKSkKIAkJCQkuc2V0U3F1YXNoKHRydWUpCiAJCQkJLmNhbGwoKTsKQEAgLTQ4OSw3ICs0ODksNyBAQCBwdWJsaWMgdm9pZCB0ZXN0SGFyZFJlc2V0QWZ0ZXJTcXVhc2hNZXJnZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJCXJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKIAkJYXNzZXJ0Tm90TnVsbChkYi5yZWFkU3F1YXNoQ29tbWl0TXNnKCkpOwogCi0JCWFzc2VydFNhbWVBc0hlYWQoZy5yZXNldCgpLnNldE1vZGUoUmVzZXRUeXBlLkhBUkQpCisJCWFzc2VydFNhbWVBc0hlYWQoZ2l0LnJlc2V0KCkuc2V0TW9kZShSZXNldFR5cGUuSEFSRCkKIAkJCQkuc2V0UmVmKGZpcnN0LmdldE5hbWUoKSkuY2FsbCgpKTsKIAogCQlhc3NlcnROdWxsKGRiLnJlYWRTcXVhc2hDb21taXRNc2coKSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEKaW5kZXggMDYwMTY4Yy4uZWE2MzEwNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZFRlc3QuamF2YQpAQCAtNzQsMzAzICs3NCwzMDkgQEAgcHVibGljIGNsYXNzIFJldmVydENvbW1hbmRUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RSZXZlcnQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEpHaXRJbnRlcm5hbEV4Y2VwdGlvbiwKIAkJCUdpdEFQSUV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImZpcnN0IGxpbmVcbnNlYy4gbGluZVxudGhpcmQgbGluZVxuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGEiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiZmlyc3QgbGluZVxuc2VjLiBsaW5lXG50aGlyZCBsaW5lXG4iKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGEiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJjb250ZW50XG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgYiIpLmNhbGwoKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJjb250ZW50XG4iKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGIiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJmaXJzdCBsaW5lXG5zZWMuIGxpbmVcbnRoaXJkIGxpbmVcbmZvdXJ0aCBsaW5lXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlbmxhcmdlZCBhIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgImZpcnN0IGxpbmVcbnNlYy4gbGluZVxudGhpcmQgbGluZVxuZm91cnRoIGxpbmVcbiIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlbmxhcmdlZCBhIikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLAorCQkJCQkiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmVcbnRoaXJkIGxpbmVcbmZvdXJ0aCBsaW5lXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBmaXhpbmdBID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImZpeGVkIGEiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImEiLAotCQkJCSJmaXJzdCBsaW5lXG5zZWNvbmQgbGluZVxudGhpcmQgbGluZVxuZm91cnRoIGxpbmVcbiIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBmaXhpbmdBID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImZpeGVkIGEiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJmaXJzdCBsaW5lXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJmaXhlZCBiIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJiIiwgImZpcnN0IGxpbmVcbiIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImIiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJmaXhlZCBiIikuY2FsbCgpOworCQkJZ2l0LnJldmVydCgpLmluY2x1ZGUoZml4aW5nQSkuY2FsbCgpOwogCi0JCWdpdC5yZXZlcnQoKS5pbmNsdWRlKGZpeGluZ0EpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOwogCi0JCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpLmV4aXN0cygpKTsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLAorCQkJCQkiZmlyc3QgbGluZVxuc2VjLiBsaW5lXG50aGlyZCBsaW5lXG5mb3VydGggbGluZVxuIik7CisJCQlJdGVyYXRvcjxSZXZDb21taXQ+IGhpc3RvcnkgPSBnaXQubG9nKCkuY2FsbCgpLml0ZXJhdG9yKCk7CisJCQlSZXZDb21taXQgcmV2ZXJ0Q29tbWl0ID0gaGlzdG9yeS5uZXh0KCk7CisJCQlTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlID0gIlJldmVydCBcImZpeGVkIGFcIlxuXG4iCisJCQkJCSsgIlRoaXMgcmV2ZXJ0cyBjb21taXQgIiArIGZpeGluZ0EuZ2V0SWQoKS5nZXROYW1lKCkgKyAiLlxuIjsKKwkJCWFzc2VydEVxdWFscyhleHBlY3RlZE1lc3NhZ2UsIHJldmVydENvbW1pdC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWFzc2VydEVxdWFscygiZml4ZWQgYiIsIGhpc3RvcnkubmV4dCgpLmdldEZ1bGxNZXNzYWdlKCkpOworCQkJYXNzZXJ0RXF1YWxzKCJmaXhlZCBhIiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlhc3NlcnRFcXVhbHMoImVubGFyZ2VkIGEiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWFzc2VydEVxdWFscygiY3JlYXRlIGIiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWFzc2VydEVxdWFscygiY3JlYXRlIGEiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWFzc2VydEZhbHNlKGhpc3RvcnkuaGFzTmV4dCgpKTsKIAotCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikuZXhpc3RzKCkpOwotCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwKLQkJCQkiZmlyc3QgbGluZVxuc2VjLiBsaW5lXG50aGlyZCBsaW5lXG5mb3VydGggbGluZVxuIik7Ci0JCUl0ZXJhdG9yPFJldkNvbW1pdD4gaGlzdG9yeSA9IGdpdC5sb2coKS5jYWxsKCkuaXRlcmF0b3IoKTsKLQkJUmV2Q29tbWl0IHJldmVydENvbW1pdCA9IGhpc3RvcnkubmV4dCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlID0gIlJldmVydCBcImZpeGVkIGFcIlxuXG4iCi0JCQkJKyAiVGhpcyByZXZlcnRzIGNvbW1pdCAiICsgZml4aW5nQS5nZXRJZCgpLmdldE5hbWUoKSArICIuXG4iOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXNzYWdlLCByZXZlcnRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCWFzc2VydEVxdWFscygiZml4ZWQgYiIsIGhpc3RvcnkubmV4dCgpLmdldEZ1bGxNZXNzYWdlKCkpOwotCQlhc3NlcnRFcXVhbHMoImZpeGVkIGEiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJlbmxhcmdlZCBhIiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCWFzc2VydEVxdWFscygiY3JlYXRlIGIiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJjcmVhdGUgYSIsIGhpc3RvcnkubmV4dCgpLmdldEZ1bGxNZXNzYWdlKCkpOwotCQlhc3NlcnRGYWxzZShoaXN0b3J5Lmhhc05leHQoKSk7Ci0KLQkJUmVmbG9nUmVhZGVyIHJlYWRlciA9IGRiLmdldFJlZmxvZ1JlYWRlcihDb25zdGFudHMuSEVBRCk7Ci0JCWFzc2VydFRydWUocmVhZGVyLmdldExhc3RFbnRyeSgpLmdldENvbW1lbnQoKQotCQkJCS5zdGFydHNXaXRoKCJyZXZlcnQ6IFJldmVydCBcIiIpKTsKLQkJcmVhZGVyID0gZGIuZ2V0UmVmbG9nUmVhZGVyKGRiLmdldEJyYW5jaCgpKTsKLQkJYXNzZXJ0VHJ1ZShyZWFkZXIuZ2V0TGFzdEVudHJ5KCkuZ2V0Q29tbWVudCgpCi0JCQkJLnN0YXJ0c1dpdGgoInJldmVydDogUmV2ZXJ0IFwiIikpOworCQkJUmVmbG9nUmVhZGVyIHJlYWRlciA9IGRiLmdldFJlZmxvZ1JlYWRlcihDb25zdGFudHMuSEVBRCk7CisJCQlhc3NlcnRUcnVlKHJlYWRlci5nZXRMYXN0RW50cnkoKS5nZXRDb21tZW50KCkKKwkJCQkJLnN0YXJ0c1dpdGgoInJldmVydDogUmV2ZXJ0IFwiIikpOworCQkJcmVhZGVyID0gZGIuZ2V0UmVmbG9nUmVhZGVyKGRiLmdldEJyYW5jaCgpKTsKKwkJCWFzc2VydFRydWUocmVhZGVyLmdldExhc3RFbnRyeSgpLmdldENvbW1lbnQoKQorCQkJCQkuc3RhcnRzV2l0aCgicmV2ZXJ0OiBSZXZlcnQgXCIiKSk7CisJCX0KIAogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFJldmVydE11bHRpcGxlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKR2l0SW50ZXJuYWxFeGNlcHRpb24sCiAJCQlHaXRBUElFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJmaXJzdFxuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpcnN0IikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgImZpcnN0XG4iKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpcnN0IikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiZmlyc3RcbnNlY29uZFxuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBzZWNvbmQiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiZmlyc3RcbnNlY29uZFxuIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgc2Vjb25kIikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiZmlyc3RcbnNlY29uZFxudGhpcmRcbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHRoaXJkQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCB0aGlyZCIpLmNhbGwoKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJmaXJzdFxuc2Vjb25kXG50aGlyZFxuIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IHRoaXJkQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCB0aGlyZCIpLmNhbGwoKTsKKwkJCWdpdC5yZXZlcnQoKS5pbmNsdWRlKHRoaXJkQ29tbWl0KS5pbmNsdWRlKHNlY29uZENvbW1pdCkuY2FsbCgpOwogCi0JCWdpdC5yZXZlcnQoKS5pbmNsdWRlKHRoaXJkQ29tbWl0KS5pbmNsdWRlKHNlY29uZENvbW1pdCkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CiAKLQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImZpcnN0XG4iKTsKKwkJCUl0ZXJhdG9yPFJldkNvbW1pdD4gaGlzdG9yeSA9IGdpdC5sb2coKS5jYWxsKCkuaXRlcmF0b3IoKTsKKwkJCVJldkNvbW1pdCByZXZlcnRDb21taXQgPSBoaXN0b3J5Lm5leHQoKTsKKwkJCVN0cmluZyBleHBlY3RlZE1lc3NhZ2UgPSAiUmV2ZXJ0IFwiYWRkIHNlY29uZFwiXG5cbiIKKwkJCQkJKyAiVGhpcyByZXZlcnRzIGNvbW1pdCAiCisJCQkJCSsgc2Vjb25kQ29tbWl0LmdldElkKCkuZ2V0TmFtZSgpICsgIi5cbiI7CisJCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXNzYWdlLCByZXZlcnRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlyZXZlcnRDb21taXQgPSBoaXN0b3J5Lm5leHQoKTsKKwkJCWV4cGVjdGVkTWVzc2FnZSA9ICJSZXZlcnQgXCJhZGQgdGhpcmRcIlxuXG4iCisJCQkJCSsgIlRoaXMgcmV2ZXJ0cyBjb21taXQgIiArIHRoaXJkQ29tbWl0LmdldElkKCkuZ2V0TmFtZSgpCisJCQkJCSsgIi5cbiI7CisJCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXNzYWdlLCByZXZlcnRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlhc3NlcnRFcXVhbHMoImFkZCB0aGlyZCIsIGhpc3RvcnkubmV4dCgpLmdldEZ1bGxNZXNzYWdlKCkpOworCQkJYXNzZXJ0RXF1YWxzKCJhZGQgc2Vjb25kIiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlhc3NlcnRFcXVhbHMoImFkZCBmaXJzdCIsIGhpc3RvcnkubmV4dCgpLmdldEZ1bGxNZXNzYWdlKCkpOworCQkJYXNzZXJ0RmFsc2UoaGlzdG9yeS5oYXNOZXh0KCkpOwogCi0JCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCAiZmlyc3RcbiIpOwotCQlJdGVyYXRvcjxSZXZDb21taXQ+IGhpc3RvcnkgPSBnaXQubG9nKCkuY2FsbCgpLml0ZXJhdG9yKCk7Ci0JCVJldkNvbW1pdCByZXZlcnRDb21taXQgPSBoaXN0b3J5Lm5leHQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSA9ICJSZXZlcnQgXCJhZGQgc2Vjb25kXCJcblxuIgotCQkJCSsgIlRoaXMgcmV2ZXJ0cyBjb21taXQgIgotCQkJCSsgc2Vjb25kQ29tbWl0LmdldElkKCkuZ2V0TmFtZSgpICsgIi5cbiI7Ci0JCWFzc2VydEVxdWFscyhleHBlY3RlZE1lc3NhZ2UsIHJldmVydENvbW1pdC5nZXRGdWxsTWVzc2FnZSgpKTsKLQkJcmV2ZXJ0Q29tbWl0ID0gaGlzdG9yeS5uZXh0KCk7Ci0JCWV4cGVjdGVkTWVzc2FnZSA9ICJSZXZlcnQgXCJhZGQgdGhpcmRcIlxuXG4iCi0JCQkJKyAiVGhpcyByZXZlcnRzIGNvbW1pdCAiICsgdGhpcmRDb21taXQuZ2V0SWQoKS5nZXROYW1lKCkKLQkJCQkrICIuXG4iOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXNzYWdlLCByZXZlcnRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCWFzc2VydEVxdWFscygiYWRkIHRoaXJkIiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCWFzc2VydEVxdWFscygiYWRkIHNlY29uZCIsIGhpc3RvcnkubmV4dCgpLmdldEZ1bGxNZXNzYWdlKCkpOwotCQlhc3NlcnRFcXVhbHMoImFkZCBmaXJzdCIsIGhpc3RvcnkubmV4dCgpLmdldEZ1bGxNZXNzYWdlKCkpOwotCQlhc3NlcnRGYWxzZShoaXN0b3J5Lmhhc05leHQoKSk7Ci0KLQkJUmVmbG9nUmVhZGVyIHJlYWRlciA9IGRiLmdldFJlZmxvZ1JlYWRlcihDb25zdGFudHMuSEVBRCk7Ci0JCWFzc2VydFRydWUocmVhZGVyLmdldExhc3RFbnRyeSgpLmdldENvbW1lbnQoKQotCQkJCS5zdGFydHNXaXRoKCJyZXZlcnQ6IFJldmVydCBcIiIpKTsKLQkJcmVhZGVyID0gZGIuZ2V0UmVmbG9nUmVhZGVyKGRiLmdldEJyYW5jaCgpKTsKLQkJYXNzZXJ0VHJ1ZShyZWFkZXIuZ2V0TGFzdEVudHJ5KCkuZ2V0Q29tbWVudCgpCi0JCQkJLnN0YXJ0c1dpdGgoInJldmVydDogUmV2ZXJ0IFwiIikpOworCQkJUmVmbG9nUmVhZGVyIHJlYWRlciA9IGRiLmdldFJlZmxvZ1JlYWRlcihDb25zdGFudHMuSEVBRCk7CisJCQlhc3NlcnRUcnVlKHJlYWRlci5nZXRMYXN0RW50cnkoKS5nZXRDb21tZW50KCkKKwkJCQkJLnN0YXJ0c1dpdGgoInJldmVydDogUmV2ZXJ0IFwiIikpOworCQkJcmVhZGVyID0gZGIuZ2V0UmVmbG9nUmVhZGVyKGRiLmdldEJyYW5jaCgpKTsKKwkJCWFzc2VydFRydWUocmVhZGVyLmdldExhc3RFbnRyeSgpLmdldENvbW1lbnQoKQorCQkJCQkuc3RhcnRzV2l0aCgicmV2ZXJ0OiBSZXZlcnQgXCIiKSk7CisJCX0KIAogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFJldmVydE11bHRpcGxlV2l0aEZhaWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sCiAJCQlKR2l0SW50ZXJuYWxFeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImZpcnN0XG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZmlyc3QiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiZmlyc3RcbiIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZmlyc3QiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJmaXJzdFxuc2Vjb25kXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBzZWNvbmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIHNlY29uZCIpLmNhbGwoKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJmaXJzdFxuc2Vjb25kXG4iKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOwotCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBzZWNvbmQiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJmaXJzdFxuc2Vjb25kXG50aGlyZFxuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIHRoaXJkIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgImZpcnN0XG5zZWNvbmRcbnRoaXJkXG4iKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIHRoaXJkIikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiZmlyc3RcbnNlY29uZFxudGhpcmRcbmZvdXJ0aFxuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgZm91cnRoQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBmb3VydGgiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiZmlyc3RcbnNlY29uZFxudGhpcmRcbmZvdXJ0aFxuIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGZvdXJ0aENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZm91cnRoIikuY2FsbCgpOworCQkJZ2l0LnJldmVydCgpLmluY2x1ZGUoZm91cnRoQ29tbWl0KS5pbmNsdWRlKHNlY29uZENvbW1pdCkuY2FsbCgpOwogCi0JCWdpdC5yZXZlcnQoKS5pbmNsdWRlKGZvdXJ0aENvbW1pdCkuaW5jbHVkZShzZWNvbmRDb21taXQpLmNhbGwoKTsKKwkJCS8vIG5vdCBTQUZFIGJlY2F1c2UgaXQgZmFpbGVkCisJCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlJFVkVSVElORywgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOwogCi0JCS8vIG5vdCBTQUZFIGJlY2F1c2UgaXQgZmFpbGVkCi0JCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuUkVWRVJUSU5HLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImZpcnN0XG4iCisJCQkJCSsgIjw8PDw8PDwgbWFzdGVyXG4iICsgInNlY29uZFxuIiArICJ0aGlyZFxuIiArICI9PT09PT09XG4iCisJCQkJCSsgIj4+Pj4+Pj4gIiArIHNlY29uZENvbW1pdC5nZXRJZCgpLmFiYnJldmlhdGUoNykubmFtZSgpCisJCQkJCSsgIiBhZGQgc2Vjb25kXG4iKTsKKwkJCUl0ZXJhdG9yPFJldkNvbW1pdD4gaGlzdG9yeSA9IGdpdC5sb2coKS5jYWxsKCkuaXRlcmF0b3IoKTsKKwkJCVJldkNvbW1pdCByZXZlcnRDb21taXQgPSBoaXN0b3J5Lm5leHQoKTsKKwkJCVN0cmluZyBleHBlY3RlZE1lc3NhZ2UgPSAiUmV2ZXJ0IFwiYWRkIGZvdXJ0aFwiXG5cbiIKKwkJCQkJKyAiVGhpcyByZXZlcnRzIGNvbW1pdCAiICsgZm91cnRoQ29tbWl0LmdldElkKCkuZ2V0TmFtZSgpCisJCQkJCSsgIi5cbiI7CisJCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRNZXNzYWdlLCByZXZlcnRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlhc3NlcnRFcXVhbHMoImFkZCBmb3VydGgiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWFzc2VydEVxdWFscygiYWRkIHRoaXJkIiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlhc3NlcnRFcXVhbHMoImFkZCBzZWNvbmQiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJCWFzc2VydEVxdWFscygiYWRkIGZpcnN0IiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlhc3NlcnRGYWxzZShoaXN0b3J5Lmhhc05leHQoKSk7CiAKLQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksICJmaXJzdFxuIgotCQkJCSsgIjw8PDw8PDwgbWFzdGVyXG4iICsgInNlY29uZFxuIiArICJ0aGlyZFxuIiArICI9PT09PT09XG4iCi0JCQkJKyAiPj4+Pj4+PiAiICsgc2Vjb25kQ29tbWl0LmdldElkKCkuYWJicmV2aWF0ZSg3KS5uYW1lKCkKLQkJCQkrICIgYWRkIHNlY29uZFxuIik7Ci0JCUl0ZXJhdG9yPFJldkNvbW1pdD4gaGlzdG9yeSA9IGdpdC5sb2coKS5jYWxsKCkuaXRlcmF0b3IoKTsKLQkJUmV2Q29tbWl0IHJldmVydENvbW1pdCA9IGhpc3RvcnkubmV4dCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlID0gIlJldmVydCBcImFkZCBmb3VydGhcIlxuXG4iCi0JCQkJKyAiVGhpcyByZXZlcnRzIGNvbW1pdCAiICsgZm91cnRoQ29tbWl0LmdldElkKCkuZ2V0TmFtZSgpCi0JCQkJKyAiLlxuIjsKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTWVzc2FnZSwgcmV2ZXJ0Q29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOwotCQlhc3NlcnRFcXVhbHMoImFkZCBmb3VydGgiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJhZGQgdGhpcmQiLCBoaXN0b3J5Lm5leHQoKS5nZXRGdWxsTWVzc2FnZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJhZGQgc2Vjb25kIiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCWFzc2VydEVxdWFscygiYWRkIGZpcnN0IiwgaGlzdG9yeS5uZXh0KCkuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCWFzc2VydEZhbHNlKGhpc3RvcnkuaGFzTmV4dCgpKTsKLQotCQlSZWZsb2dSZWFkZXIgcmVhZGVyID0gZGIuZ2V0UmVmbG9nUmVhZGVyKENvbnN0YW50cy5IRUFEKTsKLQkJYXNzZXJ0VHJ1ZShyZWFkZXIuZ2V0TGFzdEVudHJ5KCkuZ2V0Q29tbWVudCgpCi0JCQkJLnN0YXJ0c1dpdGgoInJldmVydDogUmV2ZXJ0IFwiIikpOwotCQlyZWFkZXIgPSBkYi5nZXRSZWZsb2dSZWFkZXIoZGIuZ2V0QnJhbmNoKCkpOwotCQlhc3NlcnRUcnVlKHJlYWRlci5nZXRMYXN0RW50cnkoKS5nZXRDb21tZW50KCkKLQkJCQkuc3RhcnRzV2l0aCgicmV2ZXJ0OiBSZXZlcnQgXCIiKSk7CisJCQlSZWZsb2dSZWFkZXIgcmVhZGVyID0gZGIuZ2V0UmVmbG9nUmVhZGVyKENvbnN0YW50cy5IRUFEKTsKKwkJCWFzc2VydFRydWUocmVhZGVyLmdldExhc3RFbnRyeSgpLmdldENvbW1lbnQoKQorCQkJCQkuc3RhcnRzV2l0aCgicmV2ZXJ0OiBSZXZlcnQgXCIiKSk7CisJCQlyZWFkZXIgPSBkYi5nZXRSZWZsb2dSZWFkZXIoZGIuZ2V0QnJhbmNoKCkpOworCQkJYXNzZXJ0VHJ1ZShyZWFkZXIuZ2V0TGFzdEVudHJ5KCkuZ2V0Q29tbWVudCgpCisJCQkJCS5zdGFydHNXaXRoKCJyZXZlcnQ6IFJldmVydCBcIiIpKTsKKwkJfQogCiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0UmV2ZXJ0RGlydHlJbmRleCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZVJldmVydChnaXQpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlUmV2ZXJ0KGdpdCk7CiAKLQkJLy8gbW9kaWZ5IGFuZCBhZGQgZmlsZSBhCi0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgImEobW9kaWZpZWQpIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJLy8gZG8gbm90IGNvbW1pdAorCQkJLy8gbW9kaWZ5IGFuZCBhZGQgZmlsZSBhCisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJhKG1vZGlmaWVkKSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJLy8gZG8gbm90IGNvbW1pdAogCi0JCWRvUmV2ZXJ0QW5kQ2hlY2tSZXN1bHQoZ2l0LCBzaWRlQ29tbWl0LAotCQkJCU1lcmdlRmFpbHVyZVJlYXNvbi5ESVJUWV9JTkRFWCk7CisJCQlkb1JldmVydEFuZENoZWNrUmVzdWx0KGdpdCwgc2lkZUNvbW1pdCwKKwkJCQkJTWVyZ2VGYWlsdXJlUmVhc29uLkRJUlRZX0lOREVYKTsKKwkJfQogfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0UmV2ZXJ0RGlydHlXb3JrdHJlZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZVJldmVydChnaXQpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlUmV2ZXJ0KGdpdCk7CiAKLQkJLy8gbW9kaWZ5IGZpbGUgYQotCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJhKG1vZGlmaWVkKSIpOwotCQkvLyBkbyBub3QgYWRkIGFuZCBjb21taXQKKwkJCS8vIG1vZGlmeSBmaWxlIGEKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImEobW9kaWZpZWQpIik7CisJCQkvLyBkbyBub3QgYWRkIGFuZCBjb21taXQKIAotCQlkb1JldmVydEFuZENoZWNrUmVzdWx0KGdpdCwgc2lkZUNvbW1pdCwKLQkJCQlNZXJnZUZhaWx1cmVSZWFzb24uRElSVFlfV09SS1RSRUUpOworCQkJZG9SZXZlcnRBbmRDaGVja1Jlc3VsdChnaXQsIHNpZGVDb21taXQsCisJCQkJCU1lcmdlRmFpbHVyZVJlYXNvbi5ESVJUWV9XT1JLVFJFRSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RSZXZlcnRDb25mbGljdFJlc29sdXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IHByZXBhcmVSZXZlcnQoZ2l0KTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZVJldmVydChnaXQpOwogCi0JCVJldmVydENvbW1hbmQgcmV2ZXJ0ID0gZ2l0LnJldmVydCgpOwotCQlSZXZDb21taXQgbmV3SGVhZCA9IHJldmVydC5pbmNsdWRlKHNpZGVDb21taXQuZ2V0SWQoKSkuY2FsbCgpOwotCQlhc3NlcnROdWxsKG5ld0hlYWQpOwotCQlNZXJnZVJlc3VsdCByZXN1bHQgPSByZXZlcnQuZ2V0RmFpbGluZ1Jlc3VsdCgpOwotCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKLQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKSwgQ29uc3RhbnRzLk1FUkdFX01TRykuZXhpc3RzKCkpOwotCQlhc3NlcnRFcXVhbHMoIlJldmVydCBcIiIgKyBzaWRlQ29tbWl0LmdldFNob3J0TWVzc2FnZSgpCi0JCQkJKyAiXCJcblxuVGhpcyByZXZlcnRzIGNvbW1pdCAiICsgc2lkZUNvbW1pdC5nZXRJZCgpLmdldE5hbWUoKQotCQkJCSsgIi5cblxuQ29uZmxpY3RzOlxuXHRhXG4iLAotCQkJCWRiLnJlYWRNZXJnZUNvbW1pdE1zZygpKTsKLQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKSwgQ29uc3RhbnRzLlJFVkVSVF9IRUFEKQotCQkJCS5leGlzdHMoKSk7Ci0JCWFzc2VydEVxdWFscyhzaWRlQ29tbWl0LmdldElkKCksIGRiLnJlYWRSZXZlcnRIZWFkKCkpOwotCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlJFVkVSVElORywgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQkJUmV2ZXJ0Q29tbWFuZCByZXZlcnQgPSBnaXQucmV2ZXJ0KCk7CisJCQlSZXZDb21taXQgbmV3SGVhZCA9IHJldmVydC5pbmNsdWRlKHNpZGVDb21taXQuZ2V0SWQoKSkuY2FsbCgpOworCQkJYXNzZXJ0TnVsbChuZXdIZWFkKTsKKwkJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IHJldmVydC5nZXRGYWlsaW5nUmVzdWx0KCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKwkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5NRVJHRV9NU0cpLmV4aXN0cygpKTsKKwkJCWFzc2VydEVxdWFscygiUmV2ZXJ0IFwiIiArIHNpZGVDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkKKwkJCQkJKyAiXCJcblxuVGhpcyByZXZlcnRzIGNvbW1pdCAiICsgc2lkZUNvbW1pdC5nZXRJZCgpLmdldE5hbWUoKQorCQkJCQkrICIuXG5cbkNvbmZsaWN0czpcblx0YVxuIiwKKwkJCQkJZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOworCQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKSwgQ29uc3RhbnRzLlJFVkVSVF9IRUFEKQorCQkJCQkuZXhpc3RzKCkpOworCQkJYXNzZXJ0RXF1YWxzKHNpZGVDb21taXQuZ2V0SWQoKSwgZGIucmVhZFJldmVydEhlYWQoKSk7CisJCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlJFVkVSVElORywgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOwogCi0JCS8vIFJlc29sdmUKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiYSIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQkvLyBSZXNvbHZlCisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJhIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CiAKLQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5SRVZFUlRJTkdfUkVTT0xWRUQsCi0JCQkJZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5SRVZFUlRJTkdfUkVTT0xWRUQsCisJCQkJCWRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKIAotCQlnaXQuY29tbWl0KCkuc2V0T25seSgiYSIpLnNldE1lc3NhZ2UoInJlc29sdmUiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0T25seSgiYSIpLnNldE1lc3NhZ2UoInJlc29sdmUiKS5jYWxsKCk7CiAKLQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsIGRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFJldmVydGtDb25mbGljdFJlc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZVJldmVydChnaXQpOwogCi0JCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZVJldmVydChnaXQpOworCQkJUmV2ZXJ0Q29tbWFuZCByZXZlcnQgPSBnaXQucmV2ZXJ0KCk7CisJCQlSZXZDb21taXQgbmV3SGVhZCA9IHJldmVydC5pbmNsdWRlKHNpZGVDb21taXQuZ2V0SWQoKSkuY2FsbCgpOworCQkJYXNzZXJ0TnVsbChuZXdIZWFkKTsKKwkJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IHJldmVydC5nZXRGYWlsaW5nUmVzdWx0KCk7CiAKLQkJUmV2ZXJ0Q29tbWFuZCByZXZlcnQgPSBnaXQucmV2ZXJ0KCk7Ci0JCVJldkNvbW1pdCBuZXdIZWFkID0gcmV2ZXJ0LmluY2x1ZGUoc2lkZUNvbW1pdC5nZXRJZCgpKS5jYWxsKCk7Ci0JCWFzc2VydE51bGwobmV3SGVhZCk7Ci0JCU1lcmdlUmVzdWx0IHJlc3VsdCA9IHJldmVydC5nZXRGYWlsaW5nUmVzdWx0KCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKwkJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuUkVWRVJUSU5HLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCBDb25zdGFudHMuUkVWRVJUX0hFQUQpCisJCQkJCS5leGlzdHMoKSk7CiAKLQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7Ci0JCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuUkVWRVJUSU5HLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7Ci0JCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5SRVZFUlRfSEVBRCkKLQkJCQkuZXhpc3RzKCkpOworCQkJZ2l0LnJlc2V0KCkuc2V0TW9kZShSZXNldFR5cGUuTUlYRUQpLnNldFJlZigiSEVBRCIpLmNhbGwoKTsKIAotCQlnaXQucmVzZXQoKS5zZXRNb2RlKFJlc2V0VHlwZS5NSVhFRCkuc2V0UmVmKCJIRUFEIikuY2FsbCgpOwotCi0JCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOwotCQlhc3NlcnRGYWxzZShuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKSwgQ29uc3RhbnRzLlJFVkVSVF9IRUFEKQotCQkJCS5leGlzdHMoKSk7CisJCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsIGRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKKwkJCWFzc2VydEZhbHNlKG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCBDb25zdGFudHMuUkVWRVJUX0hFQUQpCisJCQkJCS5leGlzdHMoKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RSZXZlcnRPdmVyRXhlY3V0YWJsZUNoYW5nZU9uTm9uRXhlY3R1YWJsZUZpbGVTeXN0ZW0oKQogCQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJRmlsZSBmaWxlID0gd3JpdGVUcmFzaEZpbGUoInRlc3QudHh0IiwgImEiKTsKLQkJYXNzZXJ0Tm90TnVsbChnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInRlc3QudHh0IikuY2FsbCgpKTsKLQkJYXNzZXJ0Tm90TnVsbChnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0MSIpLmNhbGwoKSk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlGaWxlIGZpbGUgPSB3cml0ZVRyYXNoRmlsZSgidGVzdC50eHQiLCAiYSIpOworCQkJYXNzZXJ0Tm90TnVsbChnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInRlc3QudHh0IikuY2FsbCgpKTsKKwkJCWFzc2VydE5vdE51bGwoZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdDEiKS5jYWxsKCkpOwogCi0JCWFzc2VydE5vdE51bGwoZ2l0LmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldE5hbWUoImEiKS5jYWxsKCkpOworCQkJYXNzZXJ0Tm90TnVsbChnaXQuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0TmFtZSgiYSIpLmNhbGwoKSk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoInRlc3QudHh0IiwgImIiKTsKLQkJYXNzZXJ0Tm90TnVsbChnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInRlc3QudHh0IikuY2FsbCgpKTsKLQkJUmV2Q29tbWl0IGNvbW1pdDIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0MiIpLmNhbGwoKTsKLQkJYXNzZXJ0Tm90TnVsbChjb21taXQyKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJ0ZXN0LnR4dCIsICJiIik7CisJCQlhc3NlcnROb3ROdWxsKGdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigidGVzdC50eHQiKS5jYWxsKCkpOworCQkJUmV2Q29tbWl0IGNvbW1pdDIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0MiIpLmNhbGwoKTsKKwkJCWFzc2VydE5vdE51bGwoY29tbWl0Mik7CiAKLQkJYXNzZXJ0Tm90TnVsbChnaXQuY2hlY2tvdXQoKS5zZXROYW1lKENvbnN0YW50cy5NQVNURVIpLmNhbGwoKSk7CisJCQlhc3NlcnROb3ROdWxsKGdpdC5jaGVja291dCgpLnNldE5hbWUoQ29uc3RhbnRzLk1BU1RFUikuY2FsbCgpKTsKIAotCQlEaXJDYWNoZSBjYWNoZSA9IGRiLmxvY2tEaXJDYWNoZSgpOwotCQljYWNoZS5nZXRFbnRyeSgidGVzdC50eHQiKS5zZXRGaWxlTW9kZShGaWxlTW9kZS5FWEVDVVRBQkxFX0ZJTEUpOwotCQljYWNoZS53cml0ZSgpOwotCQlhc3NlcnRUcnVlKGNhY2hlLmNvbW1pdCgpKTsKLQkJY2FjaGUudW5sb2NrKCk7CisJCQlEaXJDYWNoZSBjYWNoZSA9IGRiLmxvY2tEaXJDYWNoZSgpOworCQkJY2FjaGUuZ2V0RW50cnkoInRlc3QudHh0Iikuc2V0RmlsZU1vZGUoRmlsZU1vZGUuRVhFQ1VUQUJMRV9GSUxFKTsKKwkJCWNhY2hlLndyaXRlKCk7CisJCQlhc3NlcnRUcnVlKGNhY2hlLmNvbW1pdCgpKTsKKwkJCWNhY2hlLnVubG9jaygpOwogCi0JCWFzc2VydE5vdE51bGwoZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdDMiKS5jYWxsKCkpOworCQkJYXNzZXJ0Tm90TnVsbChnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0MyIpLmNhbGwoKSk7CiAKLQkJZGIuZ2V0RlMoKS5zZXRFeGVjdXRlKGZpbGUsIGZhbHNlKTsKLQkJZ2l0LmdldFJlcG9zaXRvcnkoKQotCQkJCS5nZXRDb25maWcoKQotCQkJCS5zZXRCb29sZWFuKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAotCQkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfRklMRU1PREUsIGZhbHNlKTsKKwkJCWRiLmdldEZTKCkuc2V0RXhlY3V0ZShmaWxlLCBmYWxzZSk7CisJCQlnaXQuZ2V0UmVwb3NpdG9yeSgpCisJCQkJCS5nZXRDb25maWcoKQorCQkJCQkuc2V0Qm9vbGVhbihDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9GSUxFTU9ERSwgZmFsc2UpOwogCi0JCVJldmVydENvbW1hbmQgcmV2ZXJ0ID0gZ2l0LnJldmVydCgpOwotCQlSZXZDb21taXQgbmV3SGVhZCA9IHJldmVydC5pbmNsdWRlKGNvbW1pdDIpLmNhbGwoKTsKLQkJYXNzZXJ0Tm90TnVsbChuZXdIZWFkKTsKKwkJCVJldmVydENvbW1hbmQgcmV2ZXJ0ID0gZ2l0LnJldmVydCgpOworCQkJUmV2Q29tbWl0IG5ld0hlYWQgPSByZXZlcnQuaW5jbHVkZShjb21taXQyKS5jYWxsKCk7CisJCQlhc3NlcnROb3ROdWxsKG5ld0hlYWQpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0UmV2ZXJ0Q29uZmxpY3RNYXJrZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlUmV2ZXJ0KGdpdCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IHByZXBhcmVSZXZlcnQoZ2l0KTsKIAotCQlSZXZlcnRDb21tYW5kIHJldmVydCA9IGdpdC5yZXZlcnQoKTsKLQkJUmV2Q29tbWl0IG5ld0hlYWQgPSByZXZlcnQuaW5jbHVkZShzaWRlQ29tbWl0LmdldElkKCkpCi0JCQkJLmNhbGwoKTsKLQkJYXNzZXJ0TnVsbChuZXdIZWFkKTsKLQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gcmV2ZXJ0LmdldEZhaWxpbmdSZXN1bHQoKTsKLQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisJCQlSZXZlcnRDb21tYW5kIHJldmVydCA9IGdpdC5yZXZlcnQoKTsKKwkJCVJldkNvbW1pdCBuZXdIZWFkID0gcmV2ZXJ0LmluY2x1ZGUoc2lkZUNvbW1pdC5nZXRJZCgpKQorCQkJCQkuY2FsbCgpOworCQkJYXNzZXJ0TnVsbChuZXdIZWFkKTsKKwkJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IHJldmVydC5nZXRGYWlsaW5nUmVzdWx0KCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKIAotCQlTdHJpbmcgZXhwZWN0ZWQgPSAiPDw8PDw8PCBtYXN0ZXJcbmEobGF0ZXN0KVxuPT09PT09PVxuYVxuPj4+Pj4+PiBjYTk2YzMxIHNlY29uZCBtYXN0ZXJcbiI7Ci0JCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCBleHBlY3RlZCk7CisJCQlTdHJpbmcgZXhwZWN0ZWQgPSAiPDw8PDw8PCBtYXN0ZXJcbmEobGF0ZXN0KVxuPT09PT09PVxuYVxuPj4+Pj4+PiBjYTk2YzMxIHNlY29uZCBtYXN0ZXJcbiI7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZXhwZWN0ZWQpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0UmV2ZXJ0T3VyQ29tbWl0TmFtZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZVJldmVydChnaXQpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlUmV2ZXJ0KGdpdCk7CiAKLQkJUmV2ZXJ0Q29tbWFuZCByZXZlcnQgPSBnaXQucmV2ZXJ0KCk7Ci0JCVJldkNvbW1pdCBuZXdIZWFkID0gcmV2ZXJ0LmluY2x1ZGUoc2lkZUNvbW1pdC5nZXRJZCgpKQotCQkJCS5zZXRPdXJDb21taXROYW1lKCJjdXN0b20gbmFtZSIpLmNhbGwoKTsKLQkJYXNzZXJ0TnVsbChuZXdIZWFkKTsKLQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gcmV2ZXJ0LmdldEZhaWxpbmdSZXN1bHQoKTsKLQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisJCQlSZXZlcnRDb21tYW5kIHJldmVydCA9IGdpdC5yZXZlcnQoKTsKKwkJCVJldkNvbW1pdCBuZXdIZWFkID0gcmV2ZXJ0LmluY2x1ZGUoc2lkZUNvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0T3VyQ29tbWl0TmFtZSgiY3VzdG9tIG5hbWUiKS5jYWxsKCk7CisJCQlhc3NlcnROdWxsKG5ld0hlYWQpOworCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gcmV2ZXJ0LmdldEZhaWxpbmdSZXN1bHQoKTsKKwkJCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5DT05GTElDVElORywgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOwogCi0JCVN0cmluZyBleHBlY3RlZCA9ICI8PDw8PDw8IGN1c3RvbSBuYW1lXG5hKGxhdGVzdClcbj09PT09PT1cbmFcbj4+Pj4+Pj4gY2E5NmMzMSBzZWNvbmQgbWFzdGVyXG4iOwotCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZXhwZWN0ZWQpOworCQkJU3RyaW5nIGV4cGVjdGVkID0gIjw8PDw8PDwgY3VzdG9tIG5hbWVcbmEobGF0ZXN0KVxuPT09PT09PVxuYVxuPj4+Pj4+PiBjYTk2YzMxIHNlY29uZCBtYXN0ZXJcbiI7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZXhwZWN0ZWQpOworCQl9CiAJfQogCiAJcHJpdmF0ZSBSZXZDb21taXQgcHJlcGFyZVJldmVydChmaW5hbCBHaXQgZ2l0KSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3RhdHVzQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3RhdHVzQ29tbWFuZFRlc3QuamF2YQppbmRleCBjNzA2MDRlLi5mM2FjNjVjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXR1c0NvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGF0dXNDb21tYW5kVGVzdC5qYXZhCkBAIC02MSwxMDkgKzYxLDExMSBAQCBwdWJsaWMgY2xhc3MgU3RhdHVzQ29tbWFuZFRlc3QgZXh0ZW5kcyBSZXBvc2l0b3J5VGVzdENhc2UgewogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdEVtcHR5U3RhdHVzKCkgdGhyb3dzIE5vV29ya1RyZWVFeGNlcHRpb24sCiAJCQlHaXRBUElFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0KLQkJU3RhdHVzIHN0YXQgPSBnaXQuc3RhdHVzKCkuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRBZGRlZCgpLnNpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBzdGF0LmdldENoYW5nZWQoKS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNaXNzaW5nKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0TW9kaWZpZWQoKS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRSZW1vdmVkKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0VW50cmFja2VkKCkuc2l6ZSgpKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVN0YXR1cyBzdGF0ID0gZ2l0LnN0YXR1cygpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldEFkZGVkKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldENoYW5nZWQoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0TWlzc2luZygpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNb2RpZmllZCgpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRSZW1vdmVkKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldFVudHJhY2tlZCgpLnNpemUoKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REaWZmZXJlbnRTdGF0ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24sCiAJCQlOb0ZpbGVwYXR0ZXJuRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgImNvbnRlbnQgb2YgYSIpOwotCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJjb250ZW50IG9mIGIiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImMiLCAiY29udGVudCBvZiBjIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOwotCQlTdGF0dXMgc3RhdCA9IGdpdC5zdGF0dXMoKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyhTZXRzLm9mKCJhIiwgImIiKSwgc3RhdC5nZXRBZGRlZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0Q2hhbmdlZCgpLnNpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBzdGF0LmdldE1pc3NpbmcoKS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNb2RpZmllZCgpLnNpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBzdGF0LmdldFJlbW92ZWQoKS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoU2V0cy5vZigiYyIpLCBzdGF0LmdldFVudHJhY2tlZCgpKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJjb250ZW50IG9mIGEiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJiIiwgImNvbnRlbnQgb2YgYiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImMiLCAiY29udGVudCBvZiBjIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCVN0YXR1cyBzdGF0ID0gZ2l0LnN0YXR1cygpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhTZXRzLm9mKCJhIiwgImIiKSwgc3RhdC5nZXRBZGRlZCgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldENoYW5nZWQoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0TWlzc2luZygpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNb2RpZmllZCgpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRSZW1vdmVkKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhTZXRzLm9mKCJjIiksIHN0YXQuZ2V0VW50cmFja2VkKCkpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAibW9kaWZpZWQgY29udGVudCBvZiBhIik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJiIiwgIm1vZGlmaWVkIGNvbnRlbnQgb2YgYiIpOwotCQl3cml0ZVRyYXNoRmlsZSgiZCIsICJjb250ZW50IG9mIGQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuYWRkRmlsZXBhdHRlcm4oImQiKS5jYWxsKCk7Ci0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgImFnYWluIG1vZGlmaWVkIGNvbnRlbnQgb2YgYSIpOwotCQlzdGF0ID0gZ2l0LnN0YXR1cygpLmNhbGwoKTsKLQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImQiKSwgc3RhdC5nZXRBZGRlZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImEiKSwgc3RhdC5nZXRDaGFuZ2VkKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNaXNzaW5nKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImIiLCAiYSIpLCBzdGF0LmdldE1vZGlmaWVkKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRSZW1vdmVkKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImMiKSwgc3RhdC5nZXRVbnRyYWNrZWQoKSk7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNlY29uZCIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIm1vZGlmaWVkIGNvbnRlbnQgb2YgYSIpOworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAibW9kaWZpZWQgY29udGVudCBvZiBiIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiZCIsICJjb250ZW50IG9mIGQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJkIikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiYWdhaW4gbW9kaWZpZWQgY29udGVudCBvZiBhIik7CisJCQlzdGF0ID0gZ2l0LnN0YXR1cygpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhTZXRzLm9mKCJkIiksIHN0YXQuZ2V0QWRkZWQoKSk7CisJCQlhc3NlcnRFcXVhbHMoU2V0cy5vZigiYSIpLCBzdGF0LmdldENoYW5nZWQoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNaXNzaW5nKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhTZXRzLm9mKCJiIiwgImEiKSwgc3RhdC5nZXRNb2RpZmllZCgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldFJlbW92ZWQoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImMiKSwgc3RhdC5nZXRVbnRyYWNrZWQoKSk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2Vjb25kIikuY2FsbCgpOwogCi0JCXN0YXQgPSBnaXQuc3RhdHVzKCkuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRBZGRlZCgpLnNpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBzdGF0LmdldENoYW5nZWQoKS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNaXNzaW5nKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0TW9kaWZpZWQoKS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRSZW1vdmVkKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0VW50cmFja2VkKCkuc2l6ZSgpKTsKKwkJCXN0YXQgPSBnaXQuc3RhdHVzKCkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0QWRkZWQoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0Q2hhbmdlZCgpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNaXNzaW5nKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldE1vZGlmaWVkKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldFJlbW92ZWQoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0VW50cmFja2VkKCkuc2l6ZSgpKTsKIAotCQlkZWxldGVUcmFzaEZpbGUoImEiKTsKLQkJYXNzZXJ0RmFsc2UobmV3IEZpbGUoZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRXb3JrVHJlZSgpLCAiYSIpLmV4aXN0cygpKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuc2V0VXBkYXRlKHRydWUpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAicmVjcmVhdGVkIGNvbnRlbnQgb2YgYSIpOwotCQlzdGF0ID0gZ2l0LnN0YXR1cygpLmNhbGwoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0QWRkZWQoKS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRDaGFuZ2VkKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0TWlzc2luZygpLnNpemUoKSk7Ci0JCWFzc2VydEVxdWFscygwLCBzdGF0LmdldE1vZGlmaWVkKCkuc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImEiKSwgc3RhdC5nZXRSZW1vdmVkKCkpOwotCQlhc3NlcnRFcXVhbHMoU2V0cy5vZigiYSIpLCBzdGF0LmdldFVudHJhY2tlZCgpKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInQiKS5jYWxsKCk7CisJCQlkZWxldGVUcmFzaEZpbGUoImEiKTsKKwkJCWFzc2VydEZhbHNlKG5ldyBGaWxlKGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0V29ya1RyZWUoKSwgImEiKS5leGlzdHMoKSk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5zZXRVcGRhdGUodHJ1ZSkuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAicmVjcmVhdGVkIGNvbnRlbnQgb2YgYSIpOworCQkJc3RhdCA9IGdpdC5zdGF0dXMoKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRBZGRlZCgpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRDaGFuZ2VkKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscygwLCBzdGF0LmdldE1pc3NpbmcoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKDAsIHN0YXQuZ2V0TW9kaWZpZWQoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImEiKSwgc3RhdC5nZXRSZW1vdmVkKCkpOworCQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImEiKSwgc3RhdC5nZXRVbnRyYWNrZWQoKSk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgidCIpLmNhbGwoKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgic3ViL2EiLCAic3ViLWZpbGUiKTsKLQkJc3RhdCA9IGdpdC5zdGF0dXMoKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscygxLCBzdGF0LmdldFVudHJhY2tlZEZvbGRlcnMoKS5zaXplKCkpOwotCQlhc3NlcnRUcnVlKHN0YXQuZ2V0VW50cmFja2VkRm9sZGVycygpLmNvbnRhaW5zKCJzdWIiKSk7CisJCQl3cml0ZVRyYXNoRmlsZSgic3ViL2EiLCAic3ViLWZpbGUiKTsKKwkJCXN0YXQgPSBnaXQuc3RhdHVzKCkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDEsIHN0YXQuZ2V0VW50cmFja2VkRm9sZGVycygpLnNpemUoKSk7CisJCQlhc3NlcnRUcnVlKHN0YXQuZ2V0VW50cmFja2VkRm9sZGVycygpLmNvbnRhaW5zKCJzdWIiKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REaWZmZXJlbnRTdGF0ZXNXaXRoUGF0aHMoKSB0aHJvd3MgSU9FeGNlcHRpb24sCiAJCQlOb0ZpbGVwYXR0ZXJuRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgImNvbnRlbnQgb2YgYSIpOwotCQl3cml0ZVRyYXNoRmlsZSgiRC9iIiwgImNvbnRlbnQgb2YgYiIpOwotCQl3cml0ZVRyYXNoRmlsZSgiRC9jIiwgImNvbnRlbnQgb2YgYyIpOwotCQl3cml0ZVRyYXNoRmlsZSgiRC9EL2QiLCAiY29udGVudCBvZiBkIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImNvbnRlbnQgb2YgYSIpOworCQkJd3JpdGVUcmFzaEZpbGUoIkQvYiIsICJjb250ZW50IG9mIGIiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJEL2MiLCAiY29udGVudCBvZiBjIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiRC9EL2QiLCAiY29udGVudCBvZiBkIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAibmV3IGNvbnRlbnQgb2YgYSIpOwotCQl3cml0ZVRyYXNoRmlsZSgiRC9iIiwgIm5ldyBjb250ZW50IG9mIGIiKTsKLQkJd3JpdGVUcmFzaEZpbGUoIkQvRC9kIiwgIm5ldyBjb250ZW50IG9mIGQiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIm5ldyBjb250ZW50IG9mIGEiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJEL2IiLCAibmV3IGNvbnRlbnQgb2YgYiIpOworCQkJd3JpdGVUcmFzaEZpbGUoIkQvRC9kIiwgIm5ldyBjb250ZW50IG9mIGQiKTsKIAogCi0JCS8vIGZpbHRlciBvbiBhbiBub3QgZXhpc3RpbmcgcGF0aAotCQlTdGF0dXMgc3RhdCA9IGdpdC5zdGF0dXMoKS5hZGRQYXRoKCJ4IikuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNb2RpZmllZCgpLnNpemUoKSk7CisJCQkvLyBmaWx0ZXIgb24gYW4gbm90IGV4aXN0aW5nIHBhdGgKKwkJCVN0YXR1cyBzdGF0ID0gZ2l0LnN0YXR1cygpLmFkZFBhdGgoIngiKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoMCwgc3RhdC5nZXRNb2RpZmllZCgpLnNpemUoKSk7CiAKLQkJLy8gZmlsdGVyIG9uIGFuIGV4aXN0aW5nIGZpbGUKLQkJc3RhdCA9IGdpdC5zdGF0dXMoKS5hZGRQYXRoKCJhIikuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoU2V0cy5vZigiYSIpLCBzdGF0LmdldE1vZGlmaWVkKCkpOworCQkJLy8gZmlsdGVyIG9uIGFuIGV4aXN0aW5nIGZpbGUKKwkJCXN0YXQgPSBnaXQuc3RhdHVzKCkuYWRkUGF0aCgiYSIpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhTZXRzLm9mKCJhIiksIHN0YXQuZ2V0TW9kaWZpZWQoKSk7CiAKLQkJLy8gZmlsdGVyIG9uIGFuIGV4aXN0aW5nIGZvbGRlcgotCQlzdGF0ID0gZ2l0LnN0YXR1cygpLmFkZFBhdGgoIkQiKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyhTZXRzLm9mKCJEL2IiLCAiRC9EL2QiKSwgc3RhdC5nZXRNb2RpZmllZCgpKTsKKwkJCS8vIGZpbHRlciBvbiBhbiBleGlzdGluZyBmb2xkZXIKKwkJCXN0YXQgPSBnaXQuc3RhdHVzKCkuYWRkUGF0aCgiRCIpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhTZXRzLm9mKCJEL2IiLCAiRC9EL2QiKSwgc3RhdC5nZXRNb2RpZmllZCgpKTsKIAotCQkvLyBmaWx0ZXIgb24gYW4gZXhpc3RpbmcgZm9sZGVyIGFuZCBmaWxlCi0JCXN0YXQgPSBnaXQuc3RhdHVzKCkuYWRkUGF0aCgiRC9EIikuYWRkUGF0aCgiYSIpLmNhbGwoKTsKLQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImEiLCAiRC9EL2QiKSwgc3RhdC5nZXRNb2RpZmllZCgpKTsKKwkJCS8vIGZpbHRlciBvbiBhbiBleGlzdGluZyBmb2xkZXIgYW5kIGZpbGUKKwkJCXN0YXQgPSBnaXQuc3RhdHVzKCkuYWRkUGF0aCgiRC9EIikuYWRkUGF0aCgiYSIpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhTZXRzLm9mKCJhIiwgIkQvRC9kIiksIHN0YXQuZ2V0TW9kaWZpZWQoKSk7CiAKLQkJLy8gZG8gbm90IGZpbHRlciBhdCBhbGwKLQkJc3RhdCA9IGdpdC5zdGF0dXMoKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyhTZXRzLm9mKCJhIiwgIkQvYiIsICJEL0QvZCIpLCBzdGF0LmdldE1vZGlmaWVkKCkpOworCQkJLy8gZG8gbm90IGZpbHRlciBhdCBhbGwKKwkJCXN0YXQgPSBnaXQuc3RhdHVzKCkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImEiLCAiRC9iIiwgIkQvRC9kIiksIHN0YXQuZ2V0TW9kaWZpZWQoKSk7CisJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL2JsYW1lL0JsYW1lR2VuZXJhdG9yVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9ibGFtZS9CbGFtZUdlbmVyYXRvclRlc3QuamF2YQppbmRleCA0MjkwOWYwLi5mYTk4NDhiIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL2JsYW1lL0JsYW1lR2VuZXJhdG9yVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvYmxhbWUvQmxhbWVHZW5lcmF0b3JUZXN0LmphdmEKQEAgLTU4LDE0MSArNTgsMTQyIEBACiBwdWJsaWMgY2xhc3MgQmxhbWVHZW5lcmF0b3JUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RCb3VuZExpbmVEZWxldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJU3RyaW5nW10gY29udGVudDEgPSBuZXcgU3RyaW5nW10geyAiZmlyc3QiLCAic2Vjb25kIiB9OworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0Iiwgam9pbihjb250ZW50MSkpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKIAotCQlTdHJpbmdbXSBjb250ZW50MSA9IG5ldyBTdHJpbmdbXSB7ICJmaXJzdCIsICJzZWNvbmQiIH07Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsIGpvaW4oY29udGVudDEpKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJU3RyaW5nW10gY29udGVudDIgPSBuZXcgU3RyaW5nW10geyAidGhpcmQiLCAiZmlyc3QiLCAic2Vjb25kIiB9OworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0Iiwgam9pbihjb250ZW50MikpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKIAotCQlTdHJpbmdbXSBjb250ZW50MiA9IG5ldyBTdHJpbmdbXSB7ICJ0aGlyZCIsICJmaXJzdCIsICJzZWNvbmQiIH07Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsIGpvaW4oY29udGVudDIpKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJdHJ5IChCbGFtZUdlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgQmxhbWVHZW5lcmF0b3IoZGIsICJmaWxlLnR4dCIpKSB7CisJCQkJZ2VuZXJhdG9yLnB1c2gobnVsbCwgZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpOworCQkJCWFzc2VydEVxdWFscygzLCBnZW5lcmF0b3IuZ2V0UmVzdWx0Q29udGVudHMoKS5zaXplKCkpOwogCi0JCXRyeSAoQmxhbWVHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IEJsYW1lR2VuZXJhdG9yKGRiLCAiZmlsZS50eHQiKSkgewotCQkJZ2VuZXJhdG9yLnB1c2gobnVsbCwgZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpOwotCQkJYXNzZXJ0RXF1YWxzKDMsIGdlbmVyYXRvci5nZXRSZXN1bHRDb250ZW50cygpLnNpemUoKSk7CisJCQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoYzIsIGdlbmVyYXRvci5nZXRTb3VyY2VDb21taXQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDEsIGdlbmVyYXRvci5nZXRSZWdpb25MZW5ndGgoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRSZXN1bHRTdGFydCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMSwgZ2VuZXJhdG9yLmdldFJlc3VsdEVuZCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMCwgZ2VuZXJhdG9yLmdldFNvdXJjZVN0YXJ0KCkpOworCQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0U291cmNlRW5kKCkpOworCQkJCWFzc2VydEVxdWFscygiZmlsZS50eHQiLCBnZW5lcmF0b3IuZ2V0U291cmNlUGF0aCgpKTsKIAotCQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKLQkJCWFzc2VydEVxdWFscyhjMiwgZ2VuZXJhdG9yLmdldFNvdXJjZUNvbW1pdCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVnaW9uTGVuZ3RoKCkpOwotCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRSZXN1bHRTdGFydCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVzdWx0RW5kKCkpOwotCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRTb3VyY2VTdGFydCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0U291cmNlRW5kKCkpOwotCQkJYXNzZXJ0RXF1YWxzKCJmaWxlLnR4dCIsIGdlbmVyYXRvci5nZXRTb3VyY2VQYXRoKCkpOworCQkJCWFzc2VydFRydWUoZ2VuZXJhdG9yLm5leHQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKGMxLCBnZW5lcmF0b3IuZ2V0U291cmNlQ29tbWl0KCkpOworCQkJCWFzc2VydEVxdWFscygyLCBnZW5lcmF0b3IuZ2V0UmVnaW9uTGVuZ3RoKCkpOworCQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVzdWx0U3RhcnQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDMsIGdlbmVyYXRvci5nZXRSZXN1bHRFbmQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRTb3VyY2VTdGFydCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMiwgZ2VuZXJhdG9yLmdldFNvdXJjZUVuZCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoImZpbGUudHh0IiwgZ2VuZXJhdG9yLmdldFNvdXJjZVBhdGgoKSk7CiAKLQkJCWFzc2VydFRydWUoZ2VuZXJhdG9yLm5leHQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoYzEsIGdlbmVyYXRvci5nZXRTb3VyY2VDb21taXQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMiwgZ2VuZXJhdG9yLmdldFJlZ2lvbkxlbmd0aCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVzdWx0U3RhcnQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMywgZ2VuZXJhdG9yLmdldFJlc3VsdEVuZCgpKTsKLQkJCWFzc2VydEVxdWFscygwLCBnZW5lcmF0b3IuZ2V0U291cmNlU3RhcnQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMiwgZ2VuZXJhdG9yLmdldFNvdXJjZUVuZCgpKTsKLQkJCWFzc2VydEVxdWFscygiZmlsZS50eHQiLCBnZW5lcmF0b3IuZ2V0U291cmNlUGF0aCgpKTsKLQotCQkJYXNzZXJ0RmFsc2UoZ2VuZXJhdG9yLm5leHQoKSk7CisJCQkJYXNzZXJ0RmFsc2UoZ2VuZXJhdG9yLm5leHQoKSk7CisJCQl9CiAJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RSZW5hbWVkQm91bmRMaW5lRGVsZXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJZmluYWwgU3RyaW5nIEZJTEVOQU1FXzEgPSAic3ViZGlyL2ZpbGUxLnR4dCI7Ci0JCWZpbmFsIFN0cmluZyBGSUxFTkFNRV8yID0gInN1YmRpci9maWxlMi50eHQiOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJZmluYWwgU3RyaW5nIEZJTEVOQU1FXzEgPSAic3ViZGlyL2ZpbGUxLnR4dCI7CisJCQlmaW5hbCBTdHJpbmcgRklMRU5BTUVfMiA9ICJzdWJkaXIvZmlsZTIudHh0IjsKIAotCQlTdHJpbmdbXSBjb250ZW50MSA9IG5ldyBTdHJpbmdbXSB7ICJmaXJzdCIsICJzZWNvbmQiIH07Ci0JCXdyaXRlVHJhc2hGaWxlKEZJTEVOQU1FXzEsIGpvaW4oY29udGVudDEpKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKEZJTEVOQU1FXzEpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlMSIpLmNhbGwoKTsKKwkJCVN0cmluZ1tdIGNvbnRlbnQxID0gbmV3IFN0cmluZ1tdIHsgImZpcnN0IiwgInNlY29uZCIgfTsKKwkJCXdyaXRlVHJhc2hGaWxlKEZJTEVOQU1FXzEsIGpvaW4oY29udGVudDEpKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihGSUxFTkFNRV8xKS5jYWxsKCk7CisJCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUxIikuY2FsbCgpOwogCi0JCS8vIHJlbmFtZSBpdAotCQl3cml0ZVRyYXNoRmlsZShGSUxFTkFNRV8yLCBqb2luKGNvbnRlbnQxKSk7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihGSUxFTkFNRV8yKS5jYWxsKCk7Ci0JCWRlbGV0ZVRyYXNoRmlsZShGSUxFTkFNRV8xKTsKLQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oRklMRU5BTUVfMSkuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgicmVuYW1lIGZpbGUxLnR4dCB0byBmaWxlMi50eHQiKS5jYWxsKCk7CisJCQkvLyByZW5hbWUgaXQKKwkJCXdyaXRlVHJhc2hGaWxlKEZJTEVOQU1FXzIsIGpvaW4oY29udGVudDEpKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihGSUxFTkFNRV8yKS5jYWxsKCk7CisJCQlkZWxldGVUcmFzaEZpbGUoRklMRU5BTUVfMSk7CisJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybihGSUxFTkFNRV8xKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgicmVuYW1lIGZpbGUxLnR4dCB0byBmaWxlMi50eHQiKS5jYWxsKCk7CiAKLQkJLy8gYW5kIGNoYW5nZSB0aGUgbmV3IGZpbGUKLQkJU3RyaW5nW10gY29udGVudDIgPSBuZXcgU3RyaW5nW10geyAidGhpcmQiLCAiZmlyc3QiLCAic2Vjb25kIiB9OwotCQl3cml0ZVRyYXNoRmlsZShGSUxFTkFNRV8yLCBqb2luKGNvbnRlbnQyKSk7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihGSUxFTkFNRV8yKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjaGFuZ2UgZmlsZTIiKS5jYWxsKCk7CisJCQkvLyBhbmQgY2hhbmdlIHRoZSBuZXcgZmlsZQorCQkJU3RyaW5nW10gY29udGVudDIgPSBuZXcgU3RyaW5nW10geyAidGhpcmQiLCAiZmlyc3QiLCAic2Vjb25kIiB9OworCQkJd3JpdGVUcmFzaEZpbGUoRklMRU5BTUVfMiwgam9pbihjb250ZW50MikpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKEZJTEVOQU1FXzIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjaGFuZ2UgZmlsZTIiKS5jYWxsKCk7CiAKLQkJdHJ5IChCbGFtZUdlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgQmxhbWVHZW5lcmF0b3IoZGIsIEZJTEVOQU1FXzIpKSB7Ci0JCQlnZW5lcmF0b3IucHVzaChudWxsLCBkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMywgZ2VuZXJhdG9yLmdldFJlc3VsdENvbnRlbnRzKCkuc2l6ZSgpKTsKKwkJCXRyeSAoQmxhbWVHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IEJsYW1lR2VuZXJhdG9yKGRiLCBGSUxFTkFNRV8yKSkgeworCQkJCWdlbmVyYXRvci5wdXNoKG51bGwsIGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMywgZ2VuZXJhdG9yLmdldFJlc3VsdENvbnRlbnRzKCkuc2l6ZSgpKTsKIAotCQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKLQkJCWFzc2VydEVxdWFscyhjMiwgZ2VuZXJhdG9yLmdldFNvdXJjZUNvbW1pdCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVnaW9uTGVuZ3RoKCkpOwotCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRSZXN1bHRTdGFydCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVzdWx0RW5kKCkpOwotCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRTb3VyY2VTdGFydCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0U291cmNlRW5kKCkpOwotCQkJYXNzZXJ0RXF1YWxzKEZJTEVOQU1FXzIsIGdlbmVyYXRvci5nZXRTb3VyY2VQYXRoKCkpOworCQkJCWFzc2VydFRydWUoZ2VuZXJhdG9yLm5leHQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKGMyLCBnZW5lcmF0b3IuZ2V0U291cmNlQ29tbWl0KCkpOworCQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVnaW9uTGVuZ3RoKCkpOworCQkJCWFzc2VydEVxdWFscygwLCBnZW5lcmF0b3IuZ2V0UmVzdWx0U3RhcnQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDEsIGdlbmVyYXRvci5nZXRSZXN1bHRFbmQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRTb3VyY2VTdGFydCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMSwgZ2VuZXJhdG9yLmdldFNvdXJjZUVuZCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoRklMRU5BTUVfMiwgZ2VuZXJhdG9yLmdldFNvdXJjZVBhdGgoKSk7CiAKLQkJCWFzc2VydFRydWUoZ2VuZXJhdG9yLm5leHQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoYzEsIGdlbmVyYXRvci5nZXRTb3VyY2VDb21taXQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMiwgZ2VuZXJhdG9yLmdldFJlZ2lvbkxlbmd0aCgpKTsKLQkJCWFzc2VydEVxdWFscygxLCBnZW5lcmF0b3IuZ2V0UmVzdWx0U3RhcnQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMywgZ2VuZXJhdG9yLmdldFJlc3VsdEVuZCgpKTsKLQkJCWFzc2VydEVxdWFscygwLCBnZW5lcmF0b3IuZ2V0U291cmNlU3RhcnQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMiwgZ2VuZXJhdG9yLmdldFNvdXJjZUVuZCgpKTsKLQkJCWFzc2VydEVxdWFscyhGSUxFTkFNRV8xLCBnZW5lcmF0b3IuZ2V0U291cmNlUGF0aCgpKTsKKwkJCQlhc3NlcnRUcnVlKGdlbmVyYXRvci5uZXh0KCkpOworCQkJCWFzc2VydEVxdWFscyhjMSwgZ2VuZXJhdG9yLmdldFNvdXJjZUNvbW1pdCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMiwgZ2VuZXJhdG9yLmdldFJlZ2lvbkxlbmd0aCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMSwgZ2VuZXJhdG9yLmdldFJlc3VsdFN0YXJ0KCkpOworCQkJCWFzc2VydEVxdWFscygzLCBnZW5lcmF0b3IuZ2V0UmVzdWx0RW5kKCkpOworCQkJCWFzc2VydEVxdWFscygwLCBnZW5lcmF0b3IuZ2V0U291cmNlU3RhcnQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDIsIGdlbmVyYXRvci5nZXRTb3VyY2VFbmQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKEZJTEVOQU1FXzEsIGdlbmVyYXRvci5nZXRTb3VyY2VQYXRoKCkpOwogCi0JCQlhc3NlcnRGYWxzZShnZW5lcmF0b3IubmV4dCgpKTsKLQkJfQorCQkJCWFzc2VydEZhbHNlKGdlbmVyYXRvci5uZXh0KCkpOworCQkJfQogCi0JCS8vIGFuZCB0ZXN0IGFnYWluIHdpdGggb3RoZXIgQmxhbWVHZW5lcmF0b3IgQVBJOgotCQl0cnkgKEJsYW1lR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBCbGFtZUdlbmVyYXRvcihkYiwgRklMRU5BTUVfMikpIHsKLQkJCWdlbmVyYXRvci5wdXNoKG51bGwsIGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKTsKLQkJCUJsYW1lUmVzdWx0IHJlc3VsdCA9IGdlbmVyYXRvci5jb21wdXRlQmxhbWVSZXN1bHQoKTsKKwkJCS8vIGFuZCB0ZXN0IGFnYWluIHdpdGggb3RoZXIgQmxhbWVHZW5lcmF0b3IgQVBJOgorCQkJdHJ5IChCbGFtZUdlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgQmxhbWVHZW5lcmF0b3IoZGIsIEZJTEVOQU1FXzIpKSB7CisJCQkJZ2VuZXJhdG9yLnB1c2gobnVsbCwgZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpOworCQkJCUJsYW1lUmVzdWx0IHJlc3VsdCA9IGdlbmVyYXRvci5jb21wdXRlQmxhbWVSZXN1bHQoKTsKIAotCQkJYXNzZXJ0RXF1YWxzKDMsIHJlc3VsdC5nZXRSZXN1bHRDb250ZW50cygpLnNpemUoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDMsIHJlc3VsdC5nZXRSZXN1bHRDb250ZW50cygpLnNpemUoKSk7CiAKLQkJCWFzc2VydEVxdWFscyhjMiwgcmVzdWx0LmdldFNvdXJjZUNvbW1pdCgwKSk7Ci0JCQlhc3NlcnRFcXVhbHMoRklMRU5BTUVfMiwgcmVzdWx0LmdldFNvdXJjZVBhdGgoMCkpOworCQkJCWFzc2VydEVxdWFscyhjMiwgcmVzdWx0LmdldFNvdXJjZUNvbW1pdCgwKSk7CisJCQkJYXNzZXJ0RXF1YWxzKEZJTEVOQU1FXzIsIHJlc3VsdC5nZXRTb3VyY2VQYXRoKDApKTsKIAotCQkJYXNzZXJ0RXF1YWxzKGMxLCByZXN1bHQuZ2V0U291cmNlQ29tbWl0KDEpKTsKLQkJCWFzc2VydEVxdWFscyhGSUxFTkFNRV8xLCByZXN1bHQuZ2V0U291cmNlUGF0aCgxKSk7CisJCQkJYXNzZXJ0RXF1YWxzKGMxLCByZXN1bHQuZ2V0U291cmNlQ29tbWl0KDEpKTsKKwkJCQlhc3NlcnRFcXVhbHMoRklMRU5BTUVfMSwgcmVzdWx0LmdldFNvdXJjZVBhdGgoMSkpOwogCi0JCQlhc3NlcnRFcXVhbHMoYzEsIHJlc3VsdC5nZXRTb3VyY2VDb21taXQoMikpOwotCQkJYXNzZXJ0RXF1YWxzKEZJTEVOQU1FXzEsIHJlc3VsdC5nZXRTb3VyY2VQYXRoKDIpKTsKKwkJCQlhc3NlcnRFcXVhbHMoYzEsIHJlc3VsdC5nZXRTb3VyY2VDb21taXQoMikpOworCQkJCWFzc2VydEVxdWFscyhGSUxFTkFNRV8xLCByZXN1bHQuZ2V0U291cmNlUGF0aCgyKSk7CisJCQl9CiAJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RMaW5lc0FsbERlbGV0ZWRTaG9ydGVuZWRXYWxrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVN0cmluZ1tdIGNvbnRlbnQxID0gbmV3IFN0cmluZ1tdIHsgImZpcnN0IiwgInNlY29uZCIsICJ0aGlyZCIgfTsKIAotCQlTdHJpbmdbXSBjb250ZW50MSA9IG5ldyBTdHJpbmdbXSB7ICJmaXJzdCIsICJzZWNvbmQiLCAidGhpcmQiIH07CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCBqb2luKGNvbnRlbnQxKSk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsIGpvaW4oY29udGVudDEpKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJU3RyaW5nW10gY29udGVudDIgPSBuZXcgU3RyaW5nW10geyAiIiB9OwogCi0JCVN0cmluZ1tdIGNvbnRlbnQyID0gbmV3IFN0cmluZ1tdIHsgIiIgfTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsIGpvaW4oY29udGVudDIpKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CiAKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0Iiwgam9pbihjb250ZW50MikpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCBqb2luKGNvbnRlbnQxKSk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGMzID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsIGpvaW4oY29udGVudDEpKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMzID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJdHJ5IChCbGFtZUdlbmVyYXRvciBnZW5lcmF0b3IgPSBuZXcgQmxhbWVHZW5lcmF0b3IoZGIsICJmaWxlLnR4dCIpKSB7CisJCQkJZ2VuZXJhdG9yLnB1c2gobnVsbCwgZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpOworCQkJCWFzc2VydEVxdWFscygzLCBnZW5lcmF0b3IuZ2V0UmVzdWx0Q29udGVudHMoKS5zaXplKCkpOwogCi0JCXRyeSAoQmxhbWVHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IEJsYW1lR2VuZXJhdG9yKGRiLCAiZmlsZS50eHQiKSkgewotCQkJZ2VuZXJhdG9yLnB1c2gobnVsbCwgZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpOwotCQkJYXNzZXJ0RXF1YWxzKDMsIGdlbmVyYXRvci5nZXRSZXN1bHRDb250ZW50cygpLnNpemUoKSk7CisJCQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoYzMsIGdlbmVyYXRvci5nZXRTb3VyY2VDb21taXQoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKDAsIGdlbmVyYXRvci5nZXRSZXN1bHRTdGFydCgpKTsKKwkJCQlhc3NlcnRFcXVhbHMoMywgZ2VuZXJhdG9yLmdldFJlc3VsdEVuZCgpKTsKIAotCQkJYXNzZXJ0VHJ1ZShnZW5lcmF0b3IubmV4dCgpKTsKLQkJCWFzc2VydEVxdWFscyhjMywgZ2VuZXJhdG9yLmdldFNvdXJjZUNvbW1pdCgpKTsKLQkJCWFzc2VydEVxdWFscygwLCBnZW5lcmF0b3IuZ2V0UmVzdWx0U3RhcnQoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoMywgZ2VuZXJhdG9yLmdldFJlc3VsdEVuZCgpKTsKLQotCQkJYXNzZXJ0RmFsc2UoZ2VuZXJhdG9yLm5leHQoKSk7CisJCQkJYXNzZXJ0RmFsc2UoZ2VuZXJhdG9yLm5leHQoKSk7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E0NTZiMwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCisgKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCisgKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCisgKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAorICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZS5GaWxlQmFzZWRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5GaWxlVHJlZUl0ZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGs7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGVzdHMge0BsaW5rIEF0dHJpYnV0ZXNIYW5kbGVyfQorICovCitwdWJsaWMgY2xhc3MgQXR0cmlidXRlc0hhbmRsZXJUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBGaWxlTW9kZSBEID0gRmlsZU1vZGUuVFJFRTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIEZpbGVNb2RlIEYgPSBGaWxlTW9kZS5SRUdVTEFSX0ZJTEU7CisKKwlwcml2YXRlIFRyZWVXYWxrIHdhbGs7CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFeHBhbmROb25NYWNybzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKG51bGwsIG51bGwsIG51bGwsICIqLnR4dCB0ZXh0Iik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJ0ZXh0IikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kTm9uTWFjcm8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbyhudWxsLCBudWxsLCBudWxsLCAiKi50eHQgLXRleHQiKTsKKworCQl3YWxrID0gYmVnaW5XYWxrKCk7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoIi10ZXh0IikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kTm9uTWFjcm8zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbyhudWxsLCBudWxsLCBudWxsLCAiKi50eHQgIXRleHQiKTsKKworCQl3YWxrID0gYmVnaW5XYWxrKCk7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoIiIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4cGFuZE5vbk1hY3JvNCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8obnVsbCwgbnVsbCwgbnVsbCwgIioudHh0IHRleHQ9YXV0byIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygidGV4dD1hdXRvIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RXhwYW5kQnVpbHRJbk1hY3JvMSgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8obnVsbCwgbnVsbCwgbnVsbCwgIioudHh0IGJpbmFyeSIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiYmluYXJ5IC1kaWZmIC1tZXJnZSAtdGV4dCIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4cGFuZEJ1aWx0SW5NYWNybzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKG51bGwsIG51bGwsIG51bGwsICIqLnR4dCAtYmluYXJ5Iik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCItYmluYXJ5IGRpZmYgbWVyZ2UgdGV4dCIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4cGFuZEJ1aWx0SW5NYWNybzMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKG51bGwsIG51bGwsIG51bGwsICIqLnR4dCAhYmluYXJ5Iik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCIiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDdXN0b21HbG9iYWxNYWNybzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKAorCQkJCSJbYXR0cl1mb28gYSAtYiAhYyBkPWUiLCBudWxsLCBudWxsLCAiKi50eHQgZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJmb28gYSAtYiBkPWUiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDdXN0b21HbG9iYWxNYWNybzIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKCJbYXR0cl1mb28gYSAtYiAhYyBkPWUiLCBudWxsLCBudWxsLCAiKi50eHQgLWZvbyIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiLWZvbyAtYSBiIGQ9ZSIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEN1c3RvbUdsb2JhbE1hY3JvMygpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8oIlthdHRyXWZvbyBhIC1iICFjIGQ9ZSIsIG51bGwsIG51bGwsICIqLnR4dCAhZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCIiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDdXN0b21HbG9iYWxNYWNybzQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKCJbYXR0cl1mb28gYSAtYiAhYyBkPWUiLCBudWxsLCBudWxsLCAiKi50eHQgZm9vPWJhciIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiZm9vPWJhciBhIC1iIGQ9YmFyIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW5mb092ZXJyaWRlc0dsb2JhbCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8oIlthdHRyXWZvbyBiYXIxIiwKKwkJCQkiW2F0dHJdZm9vIGJhcjIiLCBudWxsLCAiKi50eHQgZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJmb28gYmFyMiIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFdvcmtEaXJSb290T3ZlcnJpZGVzR2xvYmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbygiW2F0dHJdZm9vIGJhcjEiLAorCQkJCW51bGwsCisJCQkJIlthdHRyXWZvbyBiYXIzIiwgIioudHh0IGZvbyIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICIuZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRCwgInN1YiIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi8uZ2l0YXR0cmlidXRlcyIpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgInN1Yi9hLnR4dCIsIGF0dHJzKCJmb28gYmFyMyIpKTsKKwkJZW5kV2FsaygpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEluZm9PdmVycmlkZXNXb3JrRGlyUm9vdCgpIHRocm93cyBFeGNlcHRpb24geworCQlzZXR1cFJlcG8oIlthdHRyXWZvbyBiYXIxIiwKKwkJCQkiW2F0dHJdZm9vIGJhcjIiLCAiW2F0dHJdZm9vIGJhcjMiLCAiKi50eHQgZm9vIik7CisKKwkJd2FsayA9IGJlZ2luV2FsaygpOworCQlhc3NlcnRJdGVyYXRpb24oRiwgIi5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoImZvbyBiYXIyIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmVjdXJzaXZlTWFjcm8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2V0dXBSZXBvKAorCQkJCSJbYXR0cl1mb28geCBiYXIgLWZvbyIsCisJCQkJbnVsbCwgbnVsbCwgIioudHh0IGZvbyIpOworCisJCXdhbGsgPSBiZWdpbldhbGsoKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEQsICJzdWIiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvLmdpdGF0dHJpYnV0ZXMiKTsKKwkJYXNzZXJ0SXRlcmF0aW9uKEYsICJzdWIvYS50eHQiLCBhdHRycygiZm9vIHggYmFyIikpOworCQllbmRXYWxrKCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q3ljbGljTWFjcm9zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNldHVwUmVwbygKKwkJCQkiW2F0dHJdZm9vIHggLWJhclxuW2F0dHJdYmFyIHkgLWZvbyIsIG51bGwsIG51bGwsICIqLnR4dCBmb28iKTsKKworCQl3YWxrID0gYmVnaW5XYWxrKCk7CisJCWFzc2VydEl0ZXJhdGlvbihELCAic3ViIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViLy5naXRhdHRyaWJ1dGVzIik7CisJCWFzc2VydEl0ZXJhdGlvbihGLCAic3ViL2EudHh0IiwgYXR0cnMoImZvbyB4IC1iYXIgLXkiKSk7CisJCWVuZFdhbGsoKTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uPEF0dHJpYnV0ZT4gYXR0cnMoU3RyaW5nIHMpIHsKKwkJcmV0dXJuIG5ldyBBdHRyaWJ1dGVzUnVsZSgiKiIsIHMpLmdldEF0dHJpYnV0ZXMoKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgYXNzZXJ0SXRlcmF0aW9uKEZpbGVNb2RlIHR5cGUsIFN0cmluZyBwYXRoTmFtZSkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydEl0ZXJhdGlvbih0eXBlLCBwYXRoTmFtZSwgQ29sbGVjdGlvbnMuPEF0dHJpYnV0ZT4gZW1wdHlMaXN0KCkpOworCX0KKworCXByaXZhdGUgdm9pZCBhc3NlcnRJdGVyYXRpb24oRmlsZU1vZGUgdHlwZSwgU3RyaW5nIHBhdGhOYW1lLAorCQkJQ29sbGVjdGlvbjxBdHRyaWJ1dGU+IGV4cGVjdGVkQXR0cnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydFRydWUoIndhbGsgaGFzIGVudHJ5Iiwgd2Fsay5uZXh0KCkpOworCQlhc3NlcnRFcXVhbHMocGF0aE5hbWUsIHdhbGsuZ2V0UGF0aFN0cmluZygpKTsKKwkJYXNzZXJ0RXF1YWxzKHR5cGUsIHdhbGsuZ2V0RmlsZU1vZGUoMCkpOworCisJCWlmIChleHBlY3RlZEF0dHJzICE9IG51bGwpIHsKKwkJCWFzc2VydEVxdWFscyhuZXcgQXJyYXlMaXN0PD4oZXhwZWN0ZWRBdHRycyksCisJCQkJCW5ldyBBcnJheUxpc3Q8Pih3YWxrLmdldEF0dHJpYnV0ZXMoKS5nZXRBbGwoKSkpOworCQl9CisKKwkJaWYgKEQuZXF1YWxzKHR5cGUpKQorCQkJd2Fsay5lbnRlclN1YnRyZWUoKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZ2xvYmFsQXR0cmlidXRlc0NvbnRlbnQKKwkgKiBAcGFyYW0gaW5mb0F0dHJpYnV0ZXNDb250ZW50CisJICogQHBhcmFtIHJvb3RBdHRyaWJ1dGVzQ29udGVudAorCSAqIEBwYXJhbSBzdWJEaXJBdHRyaWJ1dGVzQ29udGVudAorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICogICAgICAgICAgICAgU2V0dXAgYSByZXBvIHdpdGggLmdpdGF0dHJpYnV0ZXMgZmlsZXMgYW5kIGEgdGVzdCBmaWxlCisJICogICAgICAgICAgICAgc3ViL2EudHh0CisJICovCisJcHJpdmF0ZSB2b2lkIHNldHVwUmVwbygKKwkJCVN0cmluZyBnbG9iYWxBdHRyaWJ1dGVzQ29udGVudCwKKwkJCVN0cmluZyBpbmZvQXR0cmlidXRlc0NvbnRlbnQsIFN0cmluZyByb290QXR0cmlidXRlc0NvbnRlbnQsIFN0cmluZyBzdWJEaXJBdHRyaWJ1dGVzQ29udGVudCkKKwkJCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUZpbGVCYXNlZENvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKKwkJaWYgKGdsb2JhbEF0dHJpYnV0ZXNDb250ZW50ICE9IG51bGwpIHsKKwkJCUZpbGUgZiA9IG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCAiZ2xvYmFsL2F0dHJpYnV0ZXMiKTsKKwkJCXdyaXRlKGYsIGdsb2JhbEF0dHJpYnV0ZXNDb250ZW50KTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FUVFJJQlVURVNGSUxFLAorCQkJCQlmLmdldEFic29sdXRlUGF0aCgpKTsKKworCQl9CisJCWlmIChpbmZvQXR0cmlidXRlc0NvbnRlbnQgIT0gbnVsbCkgeworCQkJRmlsZSBmID0gbmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5JTkZPX0FUVFJJQlVURVMpOworCQkJd3JpdGUoZiwgaW5mb0F0dHJpYnV0ZXNDb250ZW50KTsKKwkJfQorCQljb25maWcuc2F2ZSgpOworCisJCWlmIChyb290QXR0cmlidXRlc0NvbnRlbnQgIT0gbnVsbCkgeworCQkJd3JpdGVBdHRyaWJ1dGVzRmlsZShDb25zdGFudHMuRE9UX0dJVF9BVFRSSUJVVEVTLAorCQkJCQlyb290QXR0cmlidXRlc0NvbnRlbnQpOworCQl9CisKKwkJaWYgKHN1YkRpckF0dHJpYnV0ZXNDb250ZW50ICE9IG51bGwpIHsKKwkJCXdyaXRlQXR0cmlidXRlc0ZpbGUoInN1Yi8iICsgQ29uc3RhbnRzLkRPVF9HSVRfQVRUUklCVVRFUywKKwkJCQkJc3ViRGlyQXR0cmlidXRlc0NvbnRlbnQpOworCQl9CisKKwkJd3JpdGVUcmFzaEZpbGUoInN1Yi9hLnR4dCIsICJhIik7CisJfQorCisJcHJpdmF0ZSB2b2lkIHdyaXRlQXR0cmlidXRlc0ZpbGUoU3RyaW5nIG5hbWUsIFN0cmluZy4uLiBydWxlcykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZ0J1aWxkZXIgZGF0YSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWZvciAoU3RyaW5nIGxpbmUgOiBydWxlcykKKwkJCWRhdGEuYXBwZW5kKGxpbmUgKyAiXG4iKTsKKwkJd3JpdGVUcmFzaEZpbGUobmFtZSwgZGF0YS50b1N0cmluZygpKTsKKwl9CisKKwlwcml2YXRlIFRyZWVXYWxrIGJlZ2luV2FsaygpIHsKKwkJVHJlZVdhbGsgbmV3V2FsayA9IG5ldyBUcmVlV2FsayhkYik7CisJCW5ld1dhbGsuYWRkVHJlZShuZXcgRmlsZVRyZWVJdGVyYXRvcihkYikpOworCQlyZXR1cm4gbmV3V2FsazsKKwl9CisKKwlwcml2YXRlIHZvaWQgZW5kV2FsaygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydEZhbHNlKCJOb3QgYWxsIGZpbGVzIHRlc3RlZCIsIHdhbGsubmV4dCgpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTWF0Y2hlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNNYXRjaGVyVGVzdC5qYXZhCmluZGV4IDlmODJiOGEuLmU4ZGQ5NTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNNYXRjaGVyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNNYXRjaGVyVGVzdC5qYXZhCkBAIC0yOTMsMjggKzI5MywyOCBAQCBwdWJsaWMgdm9pZCB0ZXN0TmFtZU9ubHlNYXRjaGVzKCkgewogCXB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJzKCkgewogCQlBdHRyaWJ1dGVzUnVsZSByID0gbmV3IEF0dHJpYnV0ZXNSdWxlKCIvcGF0dGVybi8iLCAiIik7CiAJCWFzc2VydEZhbHNlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0VHJ1ZShyLmRpck9ubHkoKSk7CisJCWFzc2VydFRydWUoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRUcnVlKHIuZ2V0QXR0cmlidXRlcygpLmlzRW1wdHkoKSk7CiAJCWFzc2VydEVxdWFscyhyLmdldFBhdHRlcm4oKSwgIi9wYXR0ZXJuIik7CiAKIAkJciA9IG5ldyBBdHRyaWJ1dGVzUnVsZSgiL3BhdHRlcj8vIiwgIiIpOwogCQlhc3NlcnRGYWxzZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydFRydWUoci5kaXJPbmx5KCkpOworCQlhc3NlcnRUcnVlKHIuaXNEaXJPbmx5KCkpOwogCQlhc3NlcnROb3ROdWxsKHIuZ2V0QXR0cmlidXRlcygpKTsKIAkJYXNzZXJ0VHJ1ZShyLmdldEF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRQYXR0ZXJuKCksICIvcGF0dGVyPyIpOwogCiAJCXIgPSBuZXcgQXR0cmlidXRlc1J1bGUoInBhdHQqIiwgIiIpOwogCQlhc3NlcnRUcnVlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0RmFsc2Uoci5kaXJPbmx5KCkpOworCQlhc3NlcnRGYWxzZShyLmlzRGlyT25seSgpKTsKIAkJYXNzZXJ0Tm90TnVsbChyLmdldEF0dHJpYnV0ZXMoKSk7CiAJCWFzc2VydFRydWUoci5nZXRBdHRyaWJ1dGVzKCkuaXNFbXB0eSgpKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dCoiKTsKIAogCQlyID0gbmV3IEF0dHJpYnV0ZXNSdWxlKCJwYXR0ZXJuIiwgImF0dHJpYnV0ZTEiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRGYWxzZShyLmdldEF0dHJpYnV0ZXMoKS5pc0VtcHR5KCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAxKTsKQEAgLTMyMiwyOCArMzIyLDI4IEBAIHB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJzKCkgewogCiAJCXIgPSBuZXcgQXR0cmlidXRlc1J1bGUoInBhdHRlcm4iLCAiYXR0cmlidXRlMSAtYXR0cmlidXRlMiIpOwogCQlhc3NlcnRUcnVlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0RmFsc2Uoci5kaXJPbmx5KCkpOworCQlhc3NlcnRGYWxzZShyLmlzRGlyT25seSgpKTsKIAkJYXNzZXJ0Tm90TnVsbChyLmdldEF0dHJpYnV0ZXMoKSk7CiAJCWFzc2VydEVxdWFscyhyLmdldEF0dHJpYnV0ZXMoKS5zaXplKCksIDIpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRQYXR0ZXJuKCksICJwYXR0ZXJuIik7CiAKIAkJciA9IG5ldyBBdHRyaWJ1dGVzUnVsZSgicGF0dGVybiIsICJhdHRyaWJ1dGUxIFx0LWF0dHJpYnV0ZTIgXHQiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAyKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dGVybiIpOwogCiAJCXIgPSBuZXcgQXR0cmlidXRlc1J1bGUoInBhdHRlcm4iLCAiYXR0cmlidXRlMVx0LWF0dHJpYnV0ZTJcdCIpOwogCQlhc3NlcnRUcnVlKHIuaXNOYW1lT25seSgpKTsKLQkJYXNzZXJ0RmFsc2Uoci5kaXJPbmx5KCkpOworCQlhc3NlcnRGYWxzZShyLmlzRGlyT25seSgpKTsKIAkJYXNzZXJ0Tm90TnVsbChyLmdldEF0dHJpYnV0ZXMoKSk7CiAJCWFzc2VydEVxdWFscyhyLmdldEF0dHJpYnV0ZXMoKS5zaXplKCksIDIpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRQYXR0ZXJuKCksICJwYXR0ZXJuIik7CiAKIAkJciA9IG5ldyBBdHRyaWJ1dGVzUnVsZSgicGF0dGVybiIsICJhdHRyaWJ1dGUxXHQgLWF0dHJpYnV0ZTJcdCAiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAyKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dGVybiIpOwpAQCAtMzUxLDcgKzM1MSw3IEBAIHB1YmxpYyB2b2lkIHRlc3RHZXR0ZXJzKCkgewogCQlyID0gbmV3IEF0dHJpYnV0ZXNSdWxlKCJwYXR0ZXJuIiwKIAkJCQkiYXR0cmlidXRlMSAtYXR0cmlidXRlMiAgYXR0cmlidXRlMz12YWx1ZSAiKTsKIAkJYXNzZXJ0VHJ1ZShyLmlzTmFtZU9ubHkoKSk7Ci0JCWFzc2VydEZhbHNlKHIuZGlyT25seSgpKTsKKwkJYXNzZXJ0RmFsc2Uoci5pc0Rpck9ubHkoKSk7CiAJCWFzc2VydE5vdE51bGwoci5nZXRBdHRyaWJ1dGVzKCkpOwogCQlhc3NlcnRFcXVhbHMoci5nZXRBdHRyaWJ1dGVzKCkuc2l6ZSgpLCAzKTsKIAkJYXNzZXJ0RXF1YWxzKHIuZ2V0UGF0dGVybigpLCAicGF0dGVybiIpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVEaXJDYWNoZUl0ZXJhdG9yVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVEaXJDYWNoZUl0ZXJhdG9yVGVzdC5qYXZhCmluZGV4IDBlNTk1ZTYuLjc0MjFlOTAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNOb2RlRGlyQ2FjaGVJdGVyYXRvclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZURpckNhY2hlSXRlcmF0b3JUZXN0LmphdmEKQEAgLTI1MSwxNCArMjUxLDE3IEBAIHByaXZhdGUgdm9pZCBhc3NlcnRJdGVyYXRpb24oRmlsZU1vZGUgdHlwZSwgU3RyaW5nIHBhdGhOYW1lLAogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRBdHRyaWJ1dGVzTm9kZShTdHJpbmcgcGF0aE5hbWUsCi0JCQlBdHRyaWJ1dGVzTm9kZSBhdHRyaWJ1dGVzTm9kZSwgTGlzdDxBdHRyaWJ1dGU+IG5vZGVBdHRycykgeworCQkJQXR0cmlidXRlc05vZGUgYXR0cmlidXRlc05vZGUsIExpc3Q8QXR0cmlidXRlPiBub2RlQXR0cnMpCisJCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsKQogCQkJYXNzZXJ0VHJ1ZShub2RlQXR0cnMgPT0gbnVsbCB8fCBub2RlQXR0cnMuaXNFbXB0eSgpKTsKIAkJZWxzZSB7CiAKIAkJCUF0dHJpYnV0ZXMgZW50cnlBdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJCWF0dHJpYnV0ZXNOb2RlLmdldEF0dHJpYnV0ZXMocGF0aE5hbWUsCi0JCQkJCWZhbHNlLCBlbnRyeUF0dHJpYnV0ZXMpOworCQkJbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHdhbGspLm1lcmdlQXR0cmlidXRlcyhhdHRyaWJ1dGVzTm9kZSwKKwkJCQkJcGF0aE5hbWUsCisJCQkJCWZhbHNlLAorCQkJCQllbnRyeUF0dHJpYnV0ZXMpOwogCiAJCQlpZiAobm9kZUF0dHJzICE9IG51bGwgJiYgIW5vZGVBdHRycy5pc0VtcHR5KCkpIHsKIAkJCQlmb3IgKEF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBub2RlQXR0cnMpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNOb2RlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVUZXN0LmphdmEKaW5kZXggZDQ3OGE3Yy4uZWMyMzcwZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVUZXN0LmphdmEKQEAgLTUwLDYgKzUwLDkgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzLkRmc1JlcG9zaXRvcnlEZXNjcmlwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzLkluTWVtb3J5UmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIApAQCAtNTcsNiArNjAsOCBAQAogICogVGVzdCB7QGxpbmsgQXR0cmlidXRlc05vZGV9CiAgKi8KIHB1YmxpYyBjbGFzcyBBdHRyaWJ1dGVzTm9kZVRlc3QgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIFRyZWVXYWxrIERVTU1ZX1dBTEsgPSBuZXcgVHJlZVdhbGsoCisJCQluZXcgSW5NZW1vcnlSZXBvc2l0b3J5KG5ldyBEZnNSZXBvc2l0b3J5RGVzY3JpcHRpb24oIkZvb0JhciIpKSk7CiAKIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGUgQV9TRVRfQVRUUiA9IG5ldyBBdHRyaWJ1dGUoIkEiLCBTRVQpOwogCkBAIC0xNjIsOSArMTY3LDEwIEBAIHB1YmxpYyB2b2lkIHRlc3RUYWJTZXBhcmF0b3IoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRBdHRyaWJ1dGUoU3RyaW5nIHBhdGgsIEF0dHJpYnV0ZXNOb2RlIG5vZGUsCi0JCQlBdHRyaWJ1dGVzIGF0dHJzKSB7CisJCQlBdHRyaWJ1dGVzIGF0dHJzKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBuZXcgQXR0cmlidXRlcygpOwotCQlub2RlLmdldEF0dHJpYnV0ZXMocGF0aCwgZmFsc2UsIGF0dHJpYnV0ZXMpOworCQluZXcgQXR0cmlidXRlc0hhbmRsZXIoRFVNTVlfV0FMSykubWVyZ2VBdHRyaWJ1dGVzKG5vZGUsIHBhdGgsIGZhbHNlLAorCQkJCWF0dHJpYnV0ZXMpOwogCQlhc3NlcnRFcXVhbHMoYXR0cnMsIGF0dHJpYnV0ZXMpOwogCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVXb3JraW5nVHJlZUl0ZXJhdG9yVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGVXb3JraW5nVHJlZUl0ZXJhdG9yVGVzdC5qYXZhCmluZGV4IDQyMTViYTIuLmIxNTljY2EgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNOb2RlV29ya2luZ1RyZWVJdGVyYXRvclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZVdvcmtpbmdUcmVlSXRlcmF0b3JUZXN0LmphdmEKQEAgLTIxOSwxNCArMjE5LDE2IEBAIHByaXZhdGUgdm9pZCBhc3NlcnRJdGVyYXRpb24oRmlsZU1vZGUgdHlwZSwgU3RyaW5nIHBhdGhOYW1lLAogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRBdHRyaWJ1dGVzTm9kZShTdHJpbmcgcGF0aE5hbWUsCi0JCQlBdHRyaWJ1dGVzTm9kZSBhdHRyaWJ1dGVzTm9kZSwgTGlzdDxBdHRyaWJ1dGU+IG5vZGVBdHRycykgeworCQkJQXR0cmlidXRlc05vZGUgYXR0cmlidXRlc05vZGUsIExpc3Q8QXR0cmlidXRlPiBub2RlQXR0cnMpCisJCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsKQogCQkJYXNzZXJ0VHJ1ZShub2RlQXR0cnMgPT0gbnVsbCB8fCBub2RlQXR0cnMuaXNFbXB0eSgpKTsKIAkJZWxzZSB7CiAKIAkJCUF0dHJpYnV0ZXMgZW50cnlBdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJCWF0dHJpYnV0ZXNOb2RlLmdldEF0dHJpYnV0ZXMocGF0aE5hbWUsCi0JCQkJCWZhbHNlLCBlbnRyeUF0dHJpYnV0ZXMpOworCQkJbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHdhbGspLm1lcmdlQXR0cmlidXRlcyhhdHRyaWJ1dGVzTm9kZSwKKwkJCQkJcGF0aE5hbWUsIGZhbHNlLAorCQkJCQllbnRyeUF0dHJpYnV0ZXMpOwogCiAJCQlpZiAobm9kZUF0dHJzICE9IG51bGwgJiYgIW5vZGVBdHRycy5pc0VtcHR5KCkpIHsKIAkJCQlmb3IgKEF0dHJpYnV0ZSBhdHRyaWJ1dGUgOiBub2RlQXR0cnMpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZFbnRyeVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZFbnRyeVRlc3QuamF2YQppbmRleCA1Njk0ZTgzLi40NDNjOTU2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9EaWZmRW50cnlUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvRGlmZkVudHJ5VGVzdC5qYXZhCkBAIC03NywyNjAgKzc3LDI2OCBAQCBwdWJsaWMgY2xhc3MgRGlmZkVudHJ5VGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CiAJcHVibGljIHZvaWQgc2hvdWxkTGlzdEFkZGVkRmlsZUluSW5pdGlhbENvbW1pdCgpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBnaXZlbgogCQl3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiY29udGVudCIpOwotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYS50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOwogCi0JCS8vIHdoZW4KLQkJVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCXdhbGsuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7Ci0JCXdhbGsuYWRkVHJlZShjLmdldFRyZWUoKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrKTsKKwkJCS8vIHdoZW4KKwkJCXdhbGsuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7CisJCQl3YWxrLmFkZFRyZWUoYy5nZXRUcmVlKCkpOworCQkJTGlzdDxEaWZmRW50cnk+IHJlc3VsdCA9IERpZmZFbnRyeS5zY2FuKHdhbGspOwogCi0JCS8vIHRoZW4KLQkJYXNzZXJ0VGhhdChyZXN1bHQsIG5vdE51bGxWYWx1ZSgpKTsKLQkJYXNzZXJ0VGhhdChJbnRlZ2VyLnZhbHVlT2YocmVzdWx0LnNpemUoKSksIGlzKEludGVnZXIudmFsdWVPZigxKSkpOworCQkJLy8gdGhlbgorCQkJYXNzZXJ0VGhhdChyZXN1bHQsIG5vdE51bGxWYWx1ZSgpKTsKKwkJCWFzc2VydFRoYXQoSW50ZWdlci52YWx1ZU9mKHJlc3VsdC5zaXplKCkpLCBpcyhJbnRlZ2VyLnZhbHVlT2YoMSkpKTsKIAotCQlEaWZmRW50cnkgZW50cnkgPSByZXN1bHQuZ2V0KDApOwotCQlhc3NlcnRUaGF0KGVudHJ5LmdldENoYW5nZVR5cGUoKSwgaXMoQ2hhbmdlVHlwZS5BREQpKTsKLQkJYXNzZXJ0VGhhdChlbnRyeS5nZXROZXdQYXRoKCksIGlzKCJhLnR4dCIpKTsKLQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRPbGRQYXRoKCksIGlzKERFVl9OVUxMKSk7CisJCQlEaWZmRW50cnkgZW50cnkgPSByZXN1bHQuZ2V0KDApOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRDaGFuZ2VUeXBlKCksIGlzKENoYW5nZVR5cGUuQUREKSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldE5ld1BhdGgoKSwgaXMoImEudHh0IikpOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRPbGRQYXRoKCksIGlzKERFVl9OVUxMKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHNob3VsZExpc3RBZGRlZEZpbGVCZXR3ZWVuVHdvQ29tbWl0cygpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBnaXZlbgotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoImEudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNlY29uZCBjb21taXQiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzZWNvbmQgY29tbWl0IikuY2FsbCgpOwogCi0JCS8vIHdoZW4KLQkJVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCXdhbGsuYWRkVHJlZShjMS5nZXRUcmVlKCkpOwotCQl3YWxrLmFkZFRyZWUoYzIuZ2V0VHJlZSgpKTsKLQkJTGlzdDxEaWZmRW50cnk+IHJlc3VsdCA9IERpZmZFbnRyeS5zY2FuKHdhbGspOworCQkJLy8gd2hlbgorCQkJd2Fsay5hZGRUcmVlKGMxLmdldFRyZWUoKSk7CisJCQl3YWxrLmFkZFRyZWUoYzIuZ2V0VHJlZSgpKTsKKwkJCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrKTsKIAotCQkvLyB0aGVuCi0JCWFzc2VydFRoYXQocmVzdWx0LCBub3ROdWxsVmFsdWUoKSk7Ci0JCWFzc2VydFRoYXQoSW50ZWdlci52YWx1ZU9mKHJlc3VsdC5zaXplKCkpLCBpcyhJbnRlZ2VyLnZhbHVlT2YoMSkpKTsKKwkJCS8vIHRoZW4KKwkJCWFzc2VydFRoYXQocmVzdWx0LCBub3ROdWxsVmFsdWUoKSk7CisJCQlhc3NlcnRUaGF0KEludGVnZXIudmFsdWVPZihyZXN1bHQuc2l6ZSgpKSwgaXMoSW50ZWdlci52YWx1ZU9mKDEpKSk7CiAKLQkJRGlmZkVudHJ5IGVudHJ5ID0gcmVzdWx0LmdldCgwKTsKLQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRDaGFuZ2VUeXBlKCksIGlzKENoYW5nZVR5cGUuQUREKSk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0TmV3UGF0aCgpLCBpcygiYS50eHQiKSk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0T2xkUGF0aCgpLCBpcyhERVZfTlVMTCkpOworCQkJRGlmZkVudHJ5IGVudHJ5ID0gcmVzdWx0LmdldCgwKTsKKwkJCWFzc2VydFRoYXQoZW50cnkuZ2V0Q2hhbmdlVHlwZSgpLCBpcyhDaGFuZ2VUeXBlLkFERCkpOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXROZXdQYXRoKCksIGlzKCJhLnR4dCIpKTsKKwkJCWFzc2VydFRoYXQoZW50cnkuZ2V0T2xkUGF0aCgpLCBpcyhERVZfTlVMTCkpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBzaG91bGRMaXN0TW9kaWZpY2F0aW9uQmV0d2VlblR3b0NvbW1pdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gZ2l2ZW4KLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlGaWxlIGZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiY29udGVudCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEudHh0IikuY2FsbCgpOwotCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCXdyaXRlKGZpbGUsICJuZXcgY29udGVudCIpOwotCQlSZXZDb21taXQgYzIgPSBnaXQuY29tbWl0KCkuc2V0QWxsKHRydWUpLnNldE1lc3NhZ2UoInNlY29uZCBjb21taXQiKQotCQkJCS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQlGaWxlIGZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCXdyaXRlKGZpbGUsICJuZXcgY29udGVudCIpOworCQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldEFsbCh0cnVlKS5zZXRNZXNzYWdlKCJzZWNvbmQgY29tbWl0IikKKwkJCQkJLmNhbGwoKTsKIAotCQkvLyB3aGVuCi0JCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl3YWxrLmFkZFRyZWUoYzEuZ2V0VHJlZSgpKTsKLQkJd2Fsay5hZGRUcmVlKGMyLmdldFRyZWUoKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrKTsKKwkJCS8vIHdoZW4KKwkJCXdhbGsuYWRkVHJlZShjMS5nZXRUcmVlKCkpOworCQkJd2Fsay5hZGRUcmVlKGMyLmdldFRyZWUoKSk7CisJCQlMaXN0PERpZmZFbnRyeT4gcmVzdWx0ID0gRGlmZkVudHJ5LnNjYW4od2Fsayk7CiAKLQkJLy8gdGhlbgotCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOwotCQlhc3NlcnRUaGF0KEludGVnZXIudmFsdWVPZihyZXN1bHQuc2l6ZSgpKSwgaXMoSW50ZWdlci52YWx1ZU9mKDEpKSk7CisJCQkvLyB0aGVuCisJCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOworCQkJYXNzZXJ0VGhhdChJbnRlZ2VyLnZhbHVlT2YocmVzdWx0LnNpemUoKSksIGlzKEludGVnZXIudmFsdWVPZigxKSkpOwogCi0JCURpZmZFbnRyeSBlbnRyeSA9IHJlc3VsdC5nZXQoMCk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0Q2hhbmdlVHlwZSgpLCBpcyhDaGFuZ2VUeXBlLk1PRElGWSkpOwotCQlhc3NlcnRUaGF0KGVudHJ5LmdldE5ld1BhdGgoKSwgaXMoImEudHh0IikpOworCQkJRGlmZkVudHJ5IGVudHJ5ID0gcmVzdWx0LmdldCgwKTsKKwkJCWFzc2VydFRoYXQoZW50cnkuZ2V0Q2hhbmdlVHlwZSgpLCBpcyhDaGFuZ2VUeXBlLk1PRElGWSkpOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXROZXdQYXRoKCksIGlzKCJhLnR4dCIpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgc2hvdWxkTGlzdERlbGV0aW9uQmV0d2VlblR3b0NvbW1pdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gZ2l2ZW4KLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlGaWxlIGZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiY29udGVudCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEudHh0IikuY2FsbCgpOwotCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCWRlbGV0ZShmaWxlKTsKLQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldEFsbCh0cnVlKS5zZXRNZXNzYWdlKCJkZWxldGUgYS50eHQiKQotCQkJCS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQlGaWxlIGZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCWRlbGV0ZShmaWxlKTsKKwkJCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRBbGwodHJ1ZSkuc2V0TWVzc2FnZSgiZGVsZXRlIGEudHh0IikKKwkJCQkJLmNhbGwoKTsKIAotCQkvLyB3aGVuCi0JCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl3YWxrLmFkZFRyZWUoYzEuZ2V0VHJlZSgpKTsKLQkJd2Fsay5hZGRUcmVlKGMyLmdldFRyZWUoKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrKTsKKwkJCS8vIHdoZW4KKwkJCXdhbGsuYWRkVHJlZShjMS5nZXRUcmVlKCkpOworCQkJd2Fsay5hZGRUcmVlKGMyLmdldFRyZWUoKSk7CisJCQlMaXN0PERpZmZFbnRyeT4gcmVzdWx0ID0gRGlmZkVudHJ5LnNjYW4od2Fsayk7CiAKLQkJLy8gdGhlbgotCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOwotCQlhc3NlcnRUaGF0KEludGVnZXIudmFsdWVPZihyZXN1bHQuc2l6ZSgpKSwgaXMoSW50ZWdlci52YWx1ZU9mKDEpKSk7CisJCQkvLyB0aGVuCisJCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOworCQkJYXNzZXJ0VGhhdChJbnRlZ2VyLnZhbHVlT2YocmVzdWx0LnNpemUoKSksIGlzKEludGVnZXIudmFsdWVPZigxKSkpOwogCi0JCURpZmZFbnRyeSBlbnRyeSA9IHJlc3VsdC5nZXQoMCk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0T2xkUGF0aCgpLCBpcygiYS50eHQiKSk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0TmV3UGF0aCgpLCBpcyhERVZfTlVMTCkpOwotCQlhc3NlcnRUaGF0KGVudHJ5LmdldENoYW5nZVR5cGUoKSwgaXMoQ2hhbmdlVHlwZS5ERUxFVEUpKTsKKwkJCURpZmZFbnRyeSBlbnRyeSA9IHJlc3VsdC5nZXQoMCk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldE9sZFBhdGgoKSwgaXMoImEudHh0IikpOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXROZXdQYXRoKCksIGlzKERFVl9OVUxMKSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldENoYW5nZVR5cGUoKSwgaXMoQ2hhbmdlVHlwZS5ERUxFVEUpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgc2hvdWxkTGlzdE1vZGlmaWNhdGlvbkluRGlyV2l0aG91dE1vZGlmaWVkVHJlZXMoKQogCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIGdpdmVuCi0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJRmlsZSB0cmVlID0gbmV3IEZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImIiKTsKLQkJRmlsZVV0aWxzLm1rZGlycyh0cmVlKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUodHJlZSwgImMudHh0Iik7Ci0JCUZpbGVVdGlscy5jcmVhdGVOZXdGaWxlKGZpbGUpOwotCQl3cml0ZShmaWxlLCAiY29udGVudCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQkJd3JpdGUoZmlsZSwgIm5ldyBsaW5lIik7Ci0JCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRBbGwodHJ1ZSkuc2V0TWVzc2FnZSgic2Vjb25kIGNvbW1pdCIpCi0JCQkJLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYikpIHsKKwkJCUZpbGUgdHJlZSA9IG5ldyBGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksICJiIik7CisJCQlGaWxlVXRpbHMubWtkaXJzKHRyZWUpOworCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUodHJlZSwgImMudHh0Iik7CisJCQlGaWxlVXRpbHMuY3JlYXRlTmV3RmlsZShmaWxlKTsKKwkJCXdyaXRlKGZpbGUsICJjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCQl3cml0ZShmaWxlLCAibmV3IGxpbmUiKTsKKwkJCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRBbGwodHJ1ZSkuc2V0TWVzc2FnZSgic2Vjb25kIGNvbW1pdCIpCisJCQkJCS5jYWxsKCk7CiAKLQkJLy8gd2hlbgotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJd2Fsay5hZGRUcmVlKGMxLmdldFRyZWUoKSk7Ci0JCXdhbGsuYWRkVHJlZShjMi5nZXRUcmVlKCkpOwotCQl3YWxrLnNldFJlY3Vyc2l2ZSh0cnVlKTsKLQkJTGlzdDxEaWZmRW50cnk+IHJlc3VsdCA9IERpZmZFbnRyeS5zY2FuKHdhbGspOworCQkJLy8gd2hlbgorCQkJd2Fsay5hZGRUcmVlKGMxLmdldFRyZWUoKSk7CisJCQl3YWxrLmFkZFRyZWUoYzIuZ2V0VHJlZSgpKTsKKwkJCXdhbGsuc2V0UmVjdXJzaXZlKHRydWUpOworCQkJTGlzdDxEaWZmRW50cnk+IHJlc3VsdCA9IERpZmZFbnRyeS5zY2FuKHdhbGspOwogCi0JCS8vIHRoZW4KLQkJYXNzZXJ0VGhhdChyZXN1bHQsIG5vdE51bGxWYWx1ZSgpKTsKLQkJYXNzZXJ0VGhhdChJbnRlZ2VyLnZhbHVlT2YocmVzdWx0LnNpemUoKSksIGlzKEludGVnZXIudmFsdWVPZigxKSkpOworCQkJLy8gdGhlbgorCQkJYXNzZXJ0VGhhdChyZXN1bHQsIG5vdE51bGxWYWx1ZSgpKTsKKwkJCWFzc2VydFRoYXQoSW50ZWdlci52YWx1ZU9mKHJlc3VsdC5zaXplKCkpLCBpcyhJbnRlZ2VyLnZhbHVlT2YoMSkpKTsKIAotCQlEaWZmRW50cnkgZW50cnkgPSByZXN1bHQuZ2V0KDApOwotCQlhc3NlcnRUaGF0KGVudHJ5LmdldENoYW5nZVR5cGUoKSwgaXMoQ2hhbmdlVHlwZS5NT0RJRlkpKTsKLQkJYXNzZXJ0VGhhdChlbnRyeS5nZXROZXdQYXRoKCksIGlzKCJhL2IvYy50eHQiKSk7CisJCQlEaWZmRW50cnkgZW50cnkgPSByZXN1bHQuZ2V0KDApOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRDaGFuZ2VUeXBlKCksIGlzKENoYW5nZVR5cGUuTU9ESUZZKSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldE5ld1BhdGgoKSwgaXMoImEvYi9jLnR4dCIpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgc2hvdWxkTGlzdE1vZGlmaWNhdGlvbkluRGlyV2l0aE1vZGlmaWVkVHJlZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gZ2l2ZW4KLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlGaWxlIHRyZWUgPSBuZXcgRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCAiYiIpOwotCQlGaWxlVXRpbHMubWtkaXJzKHRyZWUpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh0cmVlLCAiYy50eHQiKTsKLQkJRmlsZVV0aWxzLmNyZWF0ZU5ld0ZpbGUoZmlsZSk7Ci0JCXdyaXRlKGZpbGUsICJjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOwotCQl3cml0ZShmaWxlLCAibmV3IGxpbmUiKTsKLQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldEFsbCh0cnVlKS5zZXRNZXNzYWdlKCJzZWNvbmQgY29tbWl0IikKLQkJCQkuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJRmlsZSB0cmVlID0gbmV3IEZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImIiKTsKKwkJCUZpbGVVdGlscy5ta2RpcnModHJlZSk7CisJCQlGaWxlIGZpbGUgPSBuZXcgRmlsZSh0cmVlLCAiYy50eHQiKTsKKwkJCUZpbGVVdGlscy5jcmVhdGVOZXdGaWxlKGZpbGUpOworCQkJd3JpdGUoZmlsZSwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCXdyaXRlKGZpbGUsICJuZXcgbGluZSIpOworCQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldEFsbCh0cnVlKS5zZXRNZXNzYWdlKCJzZWNvbmQgY29tbWl0IikKKwkJCQkJLmNhbGwoKTsKIAotCQkvLyB3aGVuCi0JCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl3YWxrLmFkZFRyZWUoYzEuZ2V0VHJlZSgpKTsKLQkJd2Fsay5hZGRUcmVlKGMyLmdldFRyZWUoKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrLCB0cnVlKTsKKwkJCS8vIHdoZW4KKwkJCXdhbGsuYWRkVHJlZShjMS5nZXRUcmVlKCkpOworCQkJd2Fsay5hZGRUcmVlKGMyLmdldFRyZWUoKSk7CisJCQlMaXN0PERpZmZFbnRyeT4gcmVzdWx0ID0gRGlmZkVudHJ5LnNjYW4od2FsaywgdHJ1ZSk7CiAKLQkJLy8gdGhlbgotCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOwotCQlhc3NlcnRUaGF0KEludGVnZXIudmFsdWVPZihyZXN1bHQuc2l6ZSgpKSwgaXMoSW50ZWdlci52YWx1ZU9mKDMpKSk7CisJCQkvLyB0aGVuCisJCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOworCQkJYXNzZXJ0VGhhdChJbnRlZ2VyLnZhbHVlT2YocmVzdWx0LnNpemUoKSksIGlzKEludGVnZXIudmFsdWVPZigzKSkpOwogCi0JCURpZmZFbnRyeSBlbnRyeSA9IHJlc3VsdC5nZXQoMCk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0Q2hhbmdlVHlwZSgpLCBpcyhDaGFuZ2VUeXBlLk1PRElGWSkpOwotCQlhc3NlcnRUaGF0KGVudHJ5LmdldE5ld1BhdGgoKSwgaXMoImEiKSk7CisJCQlEaWZmRW50cnkgZW50cnkgPSByZXN1bHQuZ2V0KDApOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRDaGFuZ2VUeXBlKCksIGlzKENoYW5nZVR5cGUuTU9ESUZZKSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldE5ld1BhdGgoKSwgaXMoImEiKSk7CiAKLQkJZW50cnkgPSByZXN1bHQuZ2V0KDEpOwotCQlhc3NlcnRUaGF0KGVudHJ5LmdldENoYW5nZVR5cGUoKSwgaXMoQ2hhbmdlVHlwZS5NT0RJRlkpKTsKLQkJYXNzZXJ0VGhhdChlbnRyeS5nZXROZXdQYXRoKCksIGlzKCJhL2IiKSk7CisJCQllbnRyeSA9IHJlc3VsdC5nZXQoMSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldENoYW5nZVR5cGUoKSwgaXMoQ2hhbmdlVHlwZS5NT0RJRlkpKTsKKwkJCWFzc2VydFRoYXQoZW50cnkuZ2V0TmV3UGF0aCgpLCBpcygiYS9iIikpOwogCi0JCWVudHJ5ID0gcmVzdWx0LmdldCgyKTsKLQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRDaGFuZ2VUeXBlKCksIGlzKENoYW5nZVR5cGUuTU9ESUZZKSk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0TmV3UGF0aCgpLCBpcygiYS9iL2MudHh0IikpOworCQkJZW50cnkgPSByZXN1bHQuZ2V0KDIpOworCQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRDaGFuZ2VUeXBlKCksIGlzKENoYW5nZVR5cGUuTU9ESUZZKSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldE5ld1BhdGgoKSwgaXMoImEvYi9jLnR4dCIpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgc2hvdWxkTGlzdENoYW5nZXNJbldvcmtpbmdUcmVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIGdpdmVuCiAJCXdyaXRlVHJhc2hGaWxlKCJhLnR4dCIsICJjb250ZW50Iik7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCXdyaXRlVHJhc2hGaWxlKCJiLnR4dCIsICJuZXcgbGluZSIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImIudHh0IiwgIm5ldyBsaW5lIik7CiAKLQkJLy8gd2hlbgotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJd2Fsay5hZGRUcmVlKGMuZ2V0VHJlZSgpKTsKLQkJd2Fsay5hZGRUcmVlKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrLCB0cnVlKTsKKwkJCS8vIHdoZW4KKwkJCXdhbGsuYWRkVHJlZShjLmdldFRyZWUoKSk7CisJCQl3YWxrLmFkZFRyZWUobmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpKTsKKwkJCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrLCB0cnVlKTsKIAotCQkvLyB0aGVuCi0JCWFzc2VydFRoYXQoSW50ZWdlci52YWx1ZU9mKHJlc3VsdC5zaXplKCkpLCBpcyhJbnRlZ2VyLnZhbHVlT2YoMSkpKTsKLQkJRGlmZkVudHJ5IGVudHJ5ID0gcmVzdWx0LmdldCgwKTsKKwkJCS8vIHRoZW4KKwkJCWFzc2VydFRoYXQoSW50ZWdlci52YWx1ZU9mKHJlc3VsdC5zaXplKCkpLCBpcyhJbnRlZ2VyLnZhbHVlT2YoMSkpKTsKKwkJCURpZmZFbnRyeSBlbnRyeSA9IHJlc3VsdC5nZXQoMCk7CiAKLQkJYXNzZXJ0VGhhdChlbnRyeS5nZXRDaGFuZ2VUeXBlKCksIGlzKENoYW5nZVR5cGUuQUREKSk7Ci0JCWFzc2VydFRoYXQoZW50cnkuZ2V0TmV3UGF0aCgpLCBpcygiYi50eHQiKSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5LmdldENoYW5nZVR5cGUoKSwgaXMoQ2hhbmdlVHlwZS5BREQpKTsKKwkJCWFzc2VydFRoYXQoZW50cnkuZ2V0TmV3UGF0aCgpLCBpcygiYi50eHQiKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHNob3VsZE1hcmtFbnRyaWVzV2hlbkdpdmVuTWFya1RyZWVGaWx0ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gZ2l2ZW4KLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCUZpbGVVdGlscy5ta2RpcihuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKTsKLQkJd3JpdGVUcmFzaEZpbGUoImEudHh0IiwgImEiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImIvMS50eHQiLCAiYjEiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImIvMi50eHQiLCAiYjIiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImMudHh0IiwgImMiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmFkZEZpbGVwYXR0ZXJuKCJiIikKLQkJCQkuYWRkRmlsZXBhdHRlcm4oImMudHh0IikuY2FsbCgpOwotCQlSZXZDb21taXQgYzIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2Vjb25kIGNvbW1pdCIpLmNhbGwoKTsKLQkJVHJlZUZpbHRlciBmaWx0ZXJBID0gUGF0aEZpbHRlckdyb3VwLmNyZWF0ZUZyb21TdHJpbmdzKCJhLnR4dCIpOwotCQlUcmVlRmlsdGVyIGZpbHRlckIgPSBQYXRoRmlsdGVyR3JvdXAuY3JlYXRlRnJvbVN0cmluZ3MoImIiKTsKLQkJVHJlZUZpbHRlciBmaWx0ZXJCMiA9IFBhdGhGaWx0ZXJHcm91cC5jcmVhdGVGcm9tU3RyaW5ncygiYi8yLnR4dCIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJUmV2Q29tbWl0IGMxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkJRmlsZVV0aWxzLm1rZGlyKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpOworCQkJd3JpdGVUcmFzaEZpbGUoImEudHh0IiwgImEiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJiLzEudHh0IiwgImIxIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYi8yLnR4dCIsICJiMiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImMudHh0IiwgImMiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYS50eHQiKS5hZGRGaWxlcGF0dGVybigiYiIpCisJCQkJCS5hZGRGaWxlcGF0dGVybigiYy50eHQiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgYzIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2Vjb25kIGNvbW1pdCIpLmNhbGwoKTsKKwkJCVRyZWVGaWx0ZXIgZmlsdGVyQSA9IFBhdGhGaWx0ZXJHcm91cC5jcmVhdGVGcm9tU3RyaW5ncygiYS50eHQiKTsKKwkJCVRyZWVGaWx0ZXIgZmlsdGVyQiA9IFBhdGhGaWx0ZXJHcm91cC5jcmVhdGVGcm9tU3RyaW5ncygiYiIpOworCQkJVHJlZUZpbHRlciBmaWx0ZXJCMiA9IFBhdGhGaWx0ZXJHcm91cC5jcmVhdGVGcm9tU3RyaW5ncygiYi8yLnR4dCIpOwogCi0JCS8vIHdoZW4KLQkJVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCXdhbGsuYWRkVHJlZShjMS5nZXRUcmVlKCkpOwotCQl3YWxrLmFkZFRyZWUoYzIuZ2V0VHJlZSgpKTsKLQkJTGlzdDxEaWZmRW50cnk+IHJlc3VsdCA9IERpZmZFbnRyeS5zY2FuKHdhbGssIHRydWUsIG5ldyBUcmVlRmlsdGVyW10gewotCQkJCWZpbHRlckEsIGZpbHRlckIsIGZpbHRlckIyIH0pOworCQkJLy8gd2hlbgorCQkJd2Fsay5hZGRUcmVlKGMxLmdldFRyZWUoKSk7CisJCQl3YWxrLmFkZFRyZWUoYzIuZ2V0VHJlZSgpKTsKKwkJCUxpc3Q8RGlmZkVudHJ5PiByZXN1bHQgPSBEaWZmRW50cnkuc2Nhbih3YWxrLCB0cnVlLCBuZXcgVHJlZUZpbHRlcltdIHsKKwkJCQkJZmlsdGVyQSwgZmlsdGVyQiwgZmlsdGVyQjIgfSk7CiAKLQkJLy8gdGhlbgotCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOwotCQlhc3NlcnRFcXVhbHMoNSwgcmVzdWx0LnNpemUoKSk7CisJCQkvLyB0aGVuCisJCQlhc3NlcnRUaGF0KHJlc3VsdCwgbm90TnVsbFZhbHVlKCkpOworCQkJYXNzZXJ0RXF1YWxzKDUsIHJlc3VsdC5zaXplKCkpOwogCi0JCURpZmZFbnRyeSBlbnRyeUEgPSByZXN1bHQuZ2V0KDApOwotCQlEaWZmRW50cnkgZW50cnlCID0gcmVzdWx0LmdldCgxKTsKLQkJRGlmZkVudHJ5IGVudHJ5QjEgPSByZXN1bHQuZ2V0KDIpOwotCQlEaWZmRW50cnkgZW50cnlCMiA9IHJlc3VsdC5nZXQoMyk7Ci0JCURpZmZFbnRyeSBlbnRyeUMgPSByZXN1bHQuZ2V0KDQpOworCQkJRGlmZkVudHJ5IGVudHJ5QSA9IHJlc3VsdC5nZXQoMCk7CisJCQlEaWZmRW50cnkgZW50cnlCID0gcmVzdWx0LmdldCgxKTsKKwkJCURpZmZFbnRyeSBlbnRyeUIxID0gcmVzdWx0LmdldCgyKTsKKwkJCURpZmZFbnRyeSBlbnRyeUIyID0gcmVzdWx0LmdldCgzKTsKKwkJCURpZmZFbnRyeSBlbnRyeUMgPSByZXN1bHQuZ2V0KDQpOwogCi0JCWFzc2VydFRoYXQoZW50cnlBLmdldE5ld1BhdGgoKSwgaXMoImEudHh0IikpOwotCQlhc3NlcnRUcnVlKGVudHJ5QS5pc01hcmtlZCgwKSk7Ci0JCWFzc2VydEZhbHNlKGVudHJ5QS5pc01hcmtlZCgxKSk7Ci0JCWFzc2VydEZhbHNlKGVudHJ5QS5pc01hcmtlZCgyKSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyeUEuZ2V0VHJlZUZpbHRlck1hcmtzKCkpOworCQkJYXNzZXJ0VGhhdChlbnRyeUEuZ2V0TmV3UGF0aCgpLCBpcygiYS50eHQiKSk7CisJCQlhc3NlcnRUcnVlKGVudHJ5QS5pc01hcmtlZCgwKSk7CisJCQlhc3NlcnRGYWxzZShlbnRyeUEuaXNNYXJrZWQoMSkpOworCQkJYXNzZXJ0RmFsc2UoZW50cnlBLmlzTWFya2VkKDIpKTsKKwkJCWFzc2VydEVxdWFscygxLCBlbnRyeUEuZ2V0VHJlZUZpbHRlck1hcmtzKCkpOwogCi0JCWFzc2VydFRoYXQoZW50cnlCLmdldE5ld1BhdGgoKSwgaXMoImIiKSk7Ci0JCWFzc2VydEZhbHNlKGVudHJ5Qi5pc01hcmtlZCgwKSk7Ci0JCWFzc2VydFRydWUoZW50cnlCLmlzTWFya2VkKDEpKTsKLQkJYXNzZXJ0VHJ1ZShlbnRyeUIuaXNNYXJrZWQoMikpOwotCQlhc3NlcnRFcXVhbHMoNiwgZW50cnlCLmdldFRyZWVGaWx0ZXJNYXJrcygpKTsKKwkJCWFzc2VydFRoYXQoZW50cnlCLmdldE5ld1BhdGgoKSwgaXMoImIiKSk7CisJCQlhc3NlcnRGYWxzZShlbnRyeUIuaXNNYXJrZWQoMCkpOworCQkJYXNzZXJ0VHJ1ZShlbnRyeUIuaXNNYXJrZWQoMSkpOworCQkJYXNzZXJ0VHJ1ZShlbnRyeUIuaXNNYXJrZWQoMikpOworCQkJYXNzZXJ0RXF1YWxzKDYsIGVudHJ5Qi5nZXRUcmVlRmlsdGVyTWFya3MoKSk7CiAKLQkJYXNzZXJ0VGhhdChlbnRyeUIxLmdldE5ld1BhdGgoKSwgaXMoImIvMS50eHQiKSk7Ci0JCWFzc2VydEZhbHNlKGVudHJ5QjEuaXNNYXJrZWQoMCkpOwotCQlhc3NlcnRUcnVlKGVudHJ5QjEuaXNNYXJrZWQoMSkpOwotCQlhc3NlcnRGYWxzZShlbnRyeUIxLmlzTWFya2VkKDIpKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGVudHJ5QjEuZ2V0VHJlZUZpbHRlck1hcmtzKCkpOworCQkJYXNzZXJ0VGhhdChlbnRyeUIxLmdldE5ld1BhdGgoKSwgaXMoImIvMS50eHQiKSk7CisJCQlhc3NlcnRGYWxzZShlbnRyeUIxLmlzTWFya2VkKDApKTsKKwkJCWFzc2VydFRydWUoZW50cnlCMS5pc01hcmtlZCgxKSk7CisJCQlhc3NlcnRGYWxzZShlbnRyeUIxLmlzTWFya2VkKDIpKTsKKwkJCWFzc2VydEVxdWFscygyLCBlbnRyeUIxLmdldFRyZWVGaWx0ZXJNYXJrcygpKTsKIAotCQlhc3NlcnRUaGF0KGVudHJ5QjIuZ2V0TmV3UGF0aCgpLCBpcygiYi8yLnR4dCIpKTsKLQkJYXNzZXJ0RmFsc2UoZW50cnlCMi5pc01hcmtlZCgwKSk7Ci0JCWFzc2VydFRydWUoZW50cnlCMi5pc01hcmtlZCgxKSk7Ci0JCWFzc2VydFRydWUoZW50cnlCMi5pc01hcmtlZCgyKSk7Ci0JCWFzc2VydEVxdWFscyg2LCBlbnRyeUIyLmdldFRyZWVGaWx0ZXJNYXJrcygpKTsKKwkJCWFzc2VydFRoYXQoZW50cnlCMi5nZXROZXdQYXRoKCksIGlzKCJiLzIudHh0IikpOworCQkJYXNzZXJ0RmFsc2UoZW50cnlCMi5pc01hcmtlZCgwKSk7CisJCQlhc3NlcnRUcnVlKGVudHJ5QjIuaXNNYXJrZWQoMSkpOworCQkJYXNzZXJ0VHJ1ZShlbnRyeUIyLmlzTWFya2VkKDIpKTsKKwkJCWFzc2VydEVxdWFscyg2LCBlbnRyeUIyLmdldFRyZWVGaWx0ZXJNYXJrcygpKTsKIAotCQlhc3NlcnRUaGF0KGVudHJ5Qy5nZXROZXdQYXRoKCksIGlzKCJjLnR4dCIpKTsKLQkJYXNzZXJ0RmFsc2UoZW50cnlDLmlzTWFya2VkKDApKTsKLQkJYXNzZXJ0RmFsc2UoZW50cnlDLmlzTWFya2VkKDEpKTsKLQkJYXNzZXJ0RmFsc2UoZW50cnlDLmlzTWFya2VkKDIpKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIGVudHJ5Qy5nZXRUcmVlRmlsdGVyTWFya3MoKSk7CisJCQlhc3NlcnRUaGF0KGVudHJ5Qy5nZXROZXdQYXRoKCksIGlzKCJjLnR4dCIpKTsKKwkJCWFzc2VydEZhbHNlKGVudHJ5Qy5pc01hcmtlZCgwKSk7CisJCQlhc3NlcnRGYWxzZShlbnRyeUMuaXNNYXJrZWQoMSkpOworCQkJYXNzZXJ0RmFsc2UoZW50cnlDLmlzTWFya2VkKDIpKTsKKwkJCWFzc2VydEVxdWFscygwLCBlbnRyeUMuZ2V0VHJlZUZpbHRlck1hcmtzKCkpOworCQl9CiAJfQogCiAJQFRlc3QoZXhwZWN0ZWQgPSBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MpCkBAIC0zMzksOSArMzQ3LDEwIEBAIHB1YmxpYyB2b2lkIHNob3VsZFRocm93SUFFV2hlblRyZWVXYWxrSGFzTGVzc1RoYW5Ud29UcmVlcygpCiAJCS8vIGdpdmVuIC0gd2UgZG9uJ3QgbmVlZCBhbnl0aGluZyBoZXJlCiAKIAkJLy8gd2hlbgotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJd2Fsay5hZGRUcmVlKG5ldyBFbXB0eVRyZWVJdGVyYXRvcigpKTsKLQkJRGlmZkVudHJ5LnNjYW4od2Fsayk7CisJCXRyeSAoVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYikpIHsKKwkJCXdhbGsuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7CisJCQlEaWZmRW50cnkuc2Nhbih3YWxrKTsKKwkJfQogCX0KIAogCUBUZXN0KGV4cGVjdGVkID0gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uLmNsYXNzKQpAQCAtMzUwLDExICszNTksMTIgQEAgcHVibGljIHZvaWQgc2hvdWxkVGhyb3dJQUVXaGVuVHJlZVdhbGtIYXNNb3JlVGhhblR3b1RyZWVzKCkKIAkJLy8gZ2l2ZW4gLSB3ZSBkb24ndCBuZWVkIGFueXRoaW5nIGhlcmUKIAogCQkvLyB3aGVuCi0JCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl3YWxrLmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOwotCQl3YWxrLmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOwotCQl3YWxrLmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOwotCQlEaWZmRW50cnkuc2Nhbih3YWxrKTsKKwkJdHJ5IChUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJd2Fsay5hZGRUcmVlKG5ldyBFbXB0eVRyZWVJdGVyYXRvcigpKTsKKwkJCXdhbGsuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7CisJCQl3YWxrLmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOworCQkJRGlmZkVudHJ5LnNjYW4od2Fsayk7CisJCX0KIAl9CiAKIAlAVGVzdChleHBlY3RlZCA9IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKQEAgLTM2Myw0NiArMzczLDQ3IEBAIHB1YmxpYyB2b2lkIHNob3VsZFRocm93SUFFV2hlblNjYW5TaG91bGRJbmNsdWRlVHJlZXNBbmRXYWxrSXNSZWN1cnNpdmUoKQogCQkvLyBnaXZlbiAtIHdlIGRvbid0IG5lZWQgYW55dGhpbmcgaGVyZQogCiAJCS8vIHdoZW4KLQkJVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCXdhbGsuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7Ci0JCXdhbGsuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7Ci0JCXdhbGsuc2V0UmVjdXJzaXZlKHRydWUpOwotCQlEaWZmRW50cnkuc2Nhbih3YWxrLCB0cnVlKTsKKwkJdHJ5IChUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJd2Fsay5hZGRUcmVlKG5ldyBFbXB0eVRyZWVJdGVyYXRvcigpKTsKKwkJCXdhbGsuYWRkVHJlZShuZXcgRW1wdHlUcmVlSXRlcmF0b3IoKSk7CisJCQl3YWxrLnNldFJlY3Vyc2l2ZSh0cnVlKTsKKwkJCURpZmZFbnRyeS5zY2FuKHdhbGssIHRydWUpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBzaG91bGRSZXBvcnRGaWxlTW9kZUNoYW5nZSgpIHRocm93cyBFeGNlcHRpb24gewogCQl3cml0ZVRyYXNoRmlsZSgiYS50eHQiLCAiY29udGVudCIpOwotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYS50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQkJRGlyQ2FjaGUgY2FjaGUgPSBkYi5sb2NrRGlyQ2FjaGUoKTsKLQkJRGlyQ2FjaGVFZGl0b3IgZWRpdG9yID0gY2FjaGUuZWRpdG9yKCk7Ci0JCWZpbmFsIFRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl3YWxrLmFkZFRyZWUoYzEuZ2V0VHJlZSgpKTsKLQkJd2Fsay5zZXRSZWN1cnNpdmUodHJ1ZSk7Ci0JCWFzc2VydFRydWUod2Fsay5uZXh0KCkpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCURpckNhY2hlIGNhY2hlID0gZGIubG9ja0RpckNhY2hlKCk7CisJCQlEaXJDYWNoZUVkaXRvciBlZGl0b3IgPSBjYWNoZS5lZGl0b3IoKTsKKwkJCXdhbGsuYWRkVHJlZShjMS5nZXRUcmVlKCkpOworCQkJd2Fsay5zZXRSZWN1cnNpdmUodHJ1ZSk7CisJCQlhc3NlcnRUcnVlKHdhbGsubmV4dCgpKTsKIAotCQllZGl0b3IuYWRkKG5ldyBQYXRoRWRpdCgiYS50eHQiKSB7Ci0KLQkJCXB1YmxpYyB2b2lkIGFwcGx5KERpckNhY2hlRW50cnkgZW50KSB7Ci0JCQkJZW50LnNldEZpbGVNb2RlKEZpbGVNb2RlLkVYRUNVVEFCTEVfRklMRSk7Ci0JCQkJZW50LnNldE9iamVjdElkKHdhbGsuZ2V0T2JqZWN0SWQoMCkpOwotCQkJfQotCQl9KTsKLQkJYXNzZXJ0VHJ1ZShlZGl0b3IuY29tbWl0KCkpOwotCQlSZXZDb21taXQgYzIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2Vjb25kIGNvbW1pdCIpLmNhbGwoKTsKLQkJd2Fsay5yZXNldCgpOwotCQl3YWxrLmFkZFRyZWUoYzEuZ2V0VHJlZSgpKTsKLQkJd2Fsay5hZGRUcmVlKGMyLmdldFRyZWUoKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiBkaWZmcyA9IERpZmZFbnRyeS5zY2FuKHdhbGssIGZhbHNlKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGRpZmZzLnNpemUoKSk7Ci0JCURpZmZFbnRyeSBkaWZmID0gZGlmZnMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoQ2hhbmdlVHlwZS5NT0RJRlksZGlmZi5nZXRDaGFuZ2VUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoZGlmZi5nZXRPbGRJZCgpLCBkaWZmLmdldE5ld0lkKCkpOwotCQlhc3NlcnRFcXVhbHMoImEudHh0IiwgZGlmZi5nZXRPbGRQYXRoKCkpOwotCQlhc3NlcnRFcXVhbHMoZGlmZi5nZXRPbGRQYXRoKCksIGRpZmYuZ2V0TmV3UGF0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLkVYRUNVVEFCTEVfRklMRSwgZGlmZi5nZXROZXdNb2RlKCkpOwotCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuUkVHVUxBUl9GSUxFLCBkaWZmLmdldE9sZE1vZGUoKSk7CisJCQllZGl0b3IuYWRkKG5ldyBQYXRoRWRpdCgiYS50eHQiKSB7CisJCQkJcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKKwkJCQkJZW50LnNldEZpbGVNb2RlKEZpbGVNb2RlLkVYRUNVVEFCTEVfRklMRSk7CisJCQkJCWVudC5zZXRPYmplY3RJZCh3YWxrLmdldE9iamVjdElkKDApKTsKKwkJCQl9CisJCQl9KTsKKwkJCWFzc2VydFRydWUoZWRpdG9yLmNvbW1pdCgpKTsKKwkJCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzZWNvbmQgY29tbWl0IikuY2FsbCgpOworCQkJd2Fsay5yZXNldCgpOworCQkJd2Fsay5hZGRUcmVlKGMxLmdldFRyZWUoKSk7CisJCQl3YWxrLmFkZFRyZWUoYzIuZ2V0VHJlZSgpKTsKKwkJCUxpc3Q8RGlmZkVudHJ5PiBkaWZmcyA9IERpZmZFbnRyeS5zY2FuKHdhbGssIGZhbHNlKTsKKwkJCWFzc2VydEVxdWFscygxLCBkaWZmcy5zaXplKCkpOworCQkJRGlmZkVudHJ5IGRpZmYgPSBkaWZmcy5nZXQoMCk7CisJCQlhc3NlcnRFcXVhbHMoQ2hhbmdlVHlwZS5NT0RJRlksZGlmZi5nZXRDaGFuZ2VUeXBlKCkpOworCQkJYXNzZXJ0RXF1YWxzKGRpZmYuZ2V0T2xkSWQoKSwgZGlmZi5nZXROZXdJZCgpKTsKKwkJCWFzc2VydEVxdWFscygiYS50eHQiLCBkaWZmLmdldE9sZFBhdGgoKSk7CisJCQlhc3NlcnRFcXVhbHMoZGlmZi5nZXRPbGRQYXRoKCksIGRpZmYuZ2V0TmV3UGF0aCgpKTsKKwkJCWFzc2VydEVxdWFscyhGaWxlTW9kZS5FWEVDVVRBQkxFX0ZJTEUsIGRpZmYuZ2V0TmV3TW9kZSgpKTsKKwkJCWFzc2VydEVxdWFscyhGaWxlTW9kZS5SRUdVTEFSX0ZJTEUsIGRpZmYuZ2V0T2xkTW9kZSgpKTsKKwkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZGb3JtYXR0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9EaWZmRm9ybWF0dGVyVGVzdC5qYXZhCmluZGV4IDgxYTRjNmEuLjYzOGExNjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZGb3JtYXR0ZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvRGlmZkZvcm1hdHRlclRlc3QuamF2YQpAQCAtMjYwLDYgKzI2MCw2OCBAQCBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRmlsZUhlYWRlcl9HaXRMaW5rKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlRmlsZUhlYWRlcl9BZGRHaXRMaW5rKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCU9iamVjdElkIGFkSWQgPSBibG9iKCJhXG5kXG4iKTsKKwkJRGlmZkVudHJ5IGVudCA9IERpZmZFbnRyeS5hZGQoIkZPTyIsIGFkSWQpOworCQllbnQubmV3TW9kZSA9IEZpbGVNb2RlLkdJVExJTks7CisJCUZpbGVIZWFkZXIgZmggPSBkZi50b0ZpbGVIZWFkZXIoZW50KTsKKworCQlTdHJpbmcgZGlmZkhlYWRlciA9ICJkaWZmIC0tZ2l0IGEvRk9PIGIvRk9PXG4iIC8vCisJCQkJKyAibmV3IGZpbGUgbW9kZSAiICsgR0lUTElOSyArICJcbiIKKwkJCQkrICJpbmRleCAiCisJCQkJKyBPYmplY3RJZC56ZXJvSWQoKS5hYmJyZXZpYXRlKDgpLm5hbWUoKQorCQkJCSsgIi4uIgorCQkJCSsgYWRJZC5hYmJyZXZpYXRlKDgpLm5hbWUoKSArICJcbiIgLy8KKwkJCQkrICItLS0gL2Rldi9udWxsXG4iLy8KKwkJCQkrICIrKysgYi9GT09cbiI7CisJCWFzc2VydEVxdWFscyhkaWZmSGVhZGVyLCBSYXdQYXJzZVV0aWxzLmRlY29kZShmaC5nZXRCdWZmZXIoKSkpOworCisJCWFzc2VydEVxdWFscygxLCBmaC5nZXRIdW5rcygpLnNpemUoKSk7CisJCUh1bmtIZWFkZXIgaGggPSBmaC5nZXRIdW5rcygpLmdldCgwKTsKKworCQlFZGl0TGlzdCBlbCA9IGhoLnRvRWRpdExpc3QoKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGVsLnNpemUoKSk7CisKKwkJRWRpdCBlID0gZWwuZ2V0KDApOworCQlhc3NlcnRFcXVhbHMoMCwgZS5nZXRCZWdpbkEoKSk7CisJCWFzc2VydEVxdWFscygwLCBlLmdldEVuZEEoKSk7CisJCWFzc2VydEVxdWFscygwLCBlLmdldEJlZ2luQigpKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGUuZ2V0RW5kQigpKTsKKwkJYXNzZXJ0RXF1YWxzKEVkaXQuVHlwZS5JTlNFUlQsIGUuZ2V0VHlwZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVGaWxlSGVhZGVyX0RlbGV0ZUdpdExpbmsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJT2JqZWN0SWQgYWRJZCA9IGJsb2IoImFcbmRcbiIpOworCQlEaWZmRW50cnkgZW50ID0gRGlmZkVudHJ5LmRlbGV0ZSgiRk9PIiwgYWRJZCk7CisJCWVudC5vbGRNb2RlID0gRmlsZU1vZGUuR0lUTElOSzsKKwkJRmlsZUhlYWRlciBmaCA9IGRmLnRvRmlsZUhlYWRlcihlbnQpOworCisJCVN0cmluZyBkaWZmSGVhZGVyID0gImRpZmYgLS1naXQgYS9GT08gYi9GT09cbiIgLy8KKwkJCQkrICJkZWxldGVkIGZpbGUgbW9kZSAiICsgR0lUTElOSyArICJcbiIKKwkJCQkrICJpbmRleCAiCisJCQkJKyBhZElkLmFiYnJldmlhdGUoOCkubmFtZSgpCisJCQkJKyAiLi4iCisJCQkJKyBPYmplY3RJZC56ZXJvSWQoKS5hYmJyZXZpYXRlKDgpLm5hbWUoKSArICJcbiIgLy8KKwkJCQkrICItLS0gYS9GT09cbiIvLworCQkJCSsgIisrKyAvZGV2L251bGxcbiI7CisJCWFzc2VydEVxdWFscyhkaWZmSGVhZGVyLCBSYXdQYXJzZVV0aWxzLmRlY29kZShmaC5nZXRCdWZmZXIoKSkpOworCisJCWFzc2VydEVxdWFscygxLCBmaC5nZXRIdW5rcygpLnNpemUoKSk7CisJCUh1bmtIZWFkZXIgaGggPSBmaC5nZXRIdW5rcygpLmdldCgwKTsKKworCQlFZGl0TGlzdCBlbCA9IGhoLnRvRWRpdExpc3QoKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGVsLnNpemUoKSk7CisKKwkJRWRpdCBlID0gZWwuZ2V0KDApOworCQlhc3NlcnRFcXVhbHMoMCwgZS5nZXRCZWdpbkEoKSk7CisJCWFzc2VydEVxdWFscygxLCBlLmdldEVuZEEoKSk7CisJCWFzc2VydEVxdWFscygwLCBlLmdldEJlZ2luQigpKTsKKwkJYXNzZXJ0RXF1YWxzKDAsIGUuZ2V0RW5kQigpKTsKKwkJYXNzZXJ0RXF1YWxzKEVkaXQuVHlwZS5ERUxFVEUsIGUuZ2V0VHlwZSgpKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVGaWxlSGVhZGVyV2l0aG91dEluZGV4TGluZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlEaWZmRW50cnkgbSA9IERpZmZFbnRyeS5tb2RpZnkoUEFUSF9BKTsKIAkJbS5vbGRNb2RlID0gRmlsZU1vZGUuUkVHVUxBUl9GSUxFOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUGF0Y2hJZERpZmZGb3JtYXR0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9QYXRjaElkRGlmZkZvcm1hdHRlclRlc3QuamF2YQppbmRleCBjZTI4M2FlLi4wMjRhYWEzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9QYXRjaElkRGlmZkZvcm1hdHRlclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9QYXRjaElkRGlmZkZvcm1hdHRlclRlc3QuamF2YQpAQCAtNjEsMjEgKzYxLDIyIEBAIHB1YmxpYyB2b2lkIHRlc3REaWZmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUZpbGUgZm9sZGVyID0gbmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCkuZ2V0UGFyZW50KCksICJmb2xkZXIiKTsKIAkJZm9sZGVyLm1rZGlyKCk7CiAJCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgImZvbGRlciIpOwotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOwotCQl3cml0ZShuZXcgRmlsZShmb2xkZXIsICJmb2xkZXIudHh0IiksICJmb2xkZXIgY2hhbmdlIik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCVBhdGNoSWREaWZmRm9ybWF0dGVyIGRmID0gbmV3IFBhdGNoSWREaWZmRm9ybWF0dGVyKCkpIHsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgImZvbGRlciBjaGFuZ2UiKTsKIAotCQlQYXRjaElkRGlmZkZvcm1hdHRlciBkZiA9IG5ldyBQYXRjaElkRGlmZkZvcm1hdHRlcigpOwotCQlkZi5zZXRSZXBvc2l0b3J5KGRiKTsKLQkJZGYuc2V0UGF0aEZpbHRlcihQYXRoRmlsdGVyLmNyZWF0ZSgiZm9sZGVyIikpOwotCQlEaXJDYWNoZUl0ZXJhdG9yIG9sZFRyZWUgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCUZpbGVUcmVlSXRlcmF0b3IgbmV3VHJlZSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKTsKLQkJZGYuZm9ybWF0KG9sZFRyZWUsIG5ld1RyZWUpOwotCQlkZi5mbHVzaCgpOworCQkJZGYuc2V0UmVwb3NpdG9yeShkYik7CisJCQlkZi5zZXRQYXRoRmlsdGVyKFBhdGhGaWx0ZXIuY3JlYXRlKCJmb2xkZXIiKSk7CisJCQlEaXJDYWNoZUl0ZXJhdG9yIG9sZFRyZWUgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7CisJCQlGaWxlVHJlZUl0ZXJhdG9yIG5ld1RyZWUgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCQlkZi5mb3JtYXQob2xkVHJlZSwgbmV3VHJlZSk7CisJCQlkZi5mbHVzaCgpOwogCi0JCWFzc2VydEVxdWFscygiMWZmNjRlMGY5MzMzZTliODE5NjdjM2U4ZDdhODEzNjJiMTRkNTQ0MSIsIGRmCi0JCQkJLmdldENhbHVsYXRlZFBhdGNoSWQoKS5uYW1lKCkpOworCQkJYXNzZXJ0RXF1YWxzKCIxZmY2NGUwZjkzMzNlOWI4MTk2N2MzZThkN2E4MTM2MmIxNGQ1NDQxIiwgZGYKKwkJCQkJLmdldENhbHVsYXRlZFBhdGNoSWQoKS5uYW1lKCkpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTg0LDM3ICs4NSw0MCBAQCBwdWJsaWMgdm9pZCB0ZXN0U2FtZURpZmYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJRmlsZSBmb2xkZXIgPSBuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKS5nZXRQYXJlbnQoKSwgImZvbGRlciIpOwogCQlmb2xkZXIubWtkaXIoKTsKIAkJd3JpdGUobmV3IEZpbGUoZm9sZGVyLCAiZm9sZGVyLnR4dCIpLCAiXG5cblxuXG5mb2xkZXIiKTsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQkJd3JpdGUobmV3IEZpbGUoZm9sZGVyLCAiZm9sZGVyLnR4dCIpLCAiXG5cblxuXG5mb2xkZXIgY2hhbmdlIik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCQl3cml0ZShuZXcgRmlsZShmb2xkZXIsICJmb2xkZXIudHh0IiksICJcblxuXG5cbmZvbGRlciBjaGFuZ2UiKTsKIAotCQlQYXRjaElkRGlmZkZvcm1hdHRlciBkZiA9IG5ldyBQYXRjaElkRGlmZkZvcm1hdHRlcigpOwotCQlkZi5zZXRSZXBvc2l0b3J5KGRiKTsKLQkJZGYuc2V0UGF0aEZpbHRlcihQYXRoRmlsdGVyLmNyZWF0ZSgiZm9sZGVyIikpOwotCQlEaXJDYWNoZUl0ZXJhdG9yIG9sZFRyZWUgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCUZpbGVUcmVlSXRlcmF0b3IgbmV3VHJlZSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKTsKLQkJZGYuZm9ybWF0KG9sZFRyZWUsIG5ld1RyZWUpOwotCQlkZi5mbHVzaCgpOworCQkJdHJ5IChQYXRjaElkRGlmZkZvcm1hdHRlciBkZiA9IG5ldyBQYXRjaElkRGlmZkZvcm1hdHRlcigpKSB7CisJCQkJZGYuc2V0UmVwb3NpdG9yeShkYik7CisJCQkJZGYuc2V0UGF0aEZpbHRlcihQYXRoRmlsdGVyLmNyZWF0ZSgiZm9sZGVyIikpOworCQkJCURpckNhY2hlSXRlcmF0b3Igb2xkVHJlZSA9IG5ldyBEaXJDYWNoZUl0ZXJhdG9yKGRiLnJlYWREaXJDYWNoZSgpKTsKKwkJCQlGaWxlVHJlZUl0ZXJhdG9yIG5ld1RyZWUgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCQkJZGYuZm9ybWF0KG9sZFRyZWUsIG5ld1RyZWUpOworCQkJCWRmLmZsdXNoKCk7CiAKLQkJYXNzZXJ0RXF1YWxzKCIwOGZjYTVhYzUzMTM4M2ViMWRhOGJmNmI2ZjdjZjQ0NDExMjgxNDA3IiwgZGYKLQkJCQkuZ2V0Q2FsdWxhdGVkUGF0Y2hJZCgpLm5hbWUoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCIwOGZjYTVhYzUzMTM4M2ViMWRhOGJmNmI2ZjdjZjQ0NDExMjgxNDA3IiwgZGYKKwkJCQkJCS5nZXRDYWx1bGF0ZWRQYXRjaElkKCkubmFtZSgpKTsKKwkJCX0KIAotCQl3cml0ZShuZXcgRmlsZShmb2xkZXIsICJmb2xkZXIudHh0IiksICJhXG5cblxuXG5mb2xkZXIiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgImFcblxuXG5cbmZvbGRlciBjaGFuZ2UiKTsKKwkJCXdyaXRlKG5ldyBGaWxlKGZvbGRlciwgImZvbGRlci50eHQiKSwgImFcblxuXG5cbmZvbGRlciIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkJd3JpdGUobmV3IEZpbGUoZm9sZGVyLCAiZm9sZGVyLnR4dCIpLCAiYVxuXG5cblxuZm9sZGVyIGNoYW5nZSIpOwogCi0JCWRmID0gbmV3IFBhdGNoSWREaWZmRm9ybWF0dGVyKCk7Ci0JCWRmLnNldFJlcG9zaXRvcnkoZGIpOwotCQlkZi5zZXRQYXRoRmlsdGVyKFBhdGhGaWx0ZXIuY3JlYXRlKCJmb2xkZXIiKSk7Ci0JCW9sZFRyZWUgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCW5ld1RyZWUgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7Ci0JCWRmLmZvcm1hdChvbGRUcmVlLCBuZXdUcmVlKTsKLQkJZGYuZmx1c2goKTsKKwkJCXRyeSAoUGF0Y2hJZERpZmZGb3JtYXR0ZXIgZGYgPSBuZXcgUGF0Y2hJZERpZmZGb3JtYXR0ZXIoKSkgeworCQkJCWRmLnNldFJlcG9zaXRvcnkoZGIpOworCQkJCWRmLnNldFBhdGhGaWx0ZXIoUGF0aEZpbHRlci5jcmVhdGUoImZvbGRlciIpKTsKKwkJCQlEaXJDYWNoZUl0ZXJhdG9yIG9sZFRyZWUgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7CisJCQkJRmlsZVRyZWVJdGVyYXRvciBuZXdUcmVlID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOworCQkJCWRmLmZvcm1hdChvbGRUcmVlLCBuZXdUcmVlKTsKKwkJCQlkZi5mbHVzaCgpOwogCi0JCWFzc2VydEVxdWFscygiMDhmY2E1YWM1MzEzODNlYjFkYThiZjZiNmY3Y2Y0NDQxMTI4MTQwNyIsIGRmCi0JCQkJLmdldENhbHVsYXRlZFBhdGNoSWQoKS5uYW1lKCkpOworCQkJCWFzc2VydEVxdWFscygiMDhmY2E1YWM1MzEzODNlYjFkYThiZjZiNmY3Y2Y0NDQxMTI4MTQwNyIsIGRmCisJCQkJCQkuZ2V0Q2FsdWxhdGVkUGF0Y2hJZCgpLm5hbWUoKSk7CisJCQl9CisJCX0KIAl9CiAKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKaW5kZXggNTI0ZDBiOC4uMmNlYzM0YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKQEAgLTgyLDM4ICs4Miw0MiBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQlzdXBlci5zZXRVcCgpOwogCiAJCWRlZmF1bHREYiA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRlZmF1bHREYik7Ci0JCUpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZShkZWZhdWx0RGIsICJoZWxsby50eHQiLCAiYnJhbmNoIHdvcmxkIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiaGVsbG8udHh0IikuY2FsbCgpOwotCQlvbGRDb21taXRJZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKS5nZXRJZCgpOwotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKEJSQU5DSCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOwotCQlnaXQudGFnKCkuc2V0TmFtZShUQUcpLmNhbGwoKTsKLQkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKGRlZmF1bHREYiwgImhlbGxvLnR4dCIsICJtYXN0ZXIgd29ybGQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJoZWxsby50eHQiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJTZWNvbmQgY29tbWl0IikuY2FsbCgpOwotCQlhZGRSZXBvVG9DbG9zZShkZWZhdWx0RGIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRlZmF1bHREYikpIHsKKwkJCUpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZShkZWZhdWx0RGIsICJoZWxsby50eHQiLCAiYnJhbmNoIHdvcmxkIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImhlbGxvLnR4dCIpLmNhbGwoKTsKKwkJCW9sZENvbW1pdElkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpLmdldElkKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKEJSQU5DSCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKKwkJCWdpdC50YWcoKS5zZXROYW1lKFRBRykuY2FsbCgpOworCQkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKGRlZmF1bHREYiwgImhlbGxvLnR4dCIsICJtYXN0ZXIgd29ybGQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiaGVsbG8udHh0IikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIlNlY29uZCBjb21taXQiKS5jYWxsKCk7CisJCQlhZGRSZXBvVG9DbG9zZShkZWZhdWx0RGIpOworCQl9CiAKIAkJbm90RGVmYXVsdERiID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKLQkJZ2l0ID0gbmV3IEdpdChub3REZWZhdWx0RGIpOwotCQlKR2l0VGVzdFV0aWwud3JpdGVUcmFzaEZpbGUobm90RGVmYXVsdERiLCAid29ybGQudHh0IiwgImhlbGxvIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigid29ybGQudHh0IikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7Ci0JCWFkZFJlcG9Ub0Nsb3NlKG5vdERlZmF1bHREYik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQobm90RGVmYXVsdERiKSkgeworCQkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKG5vdERlZmF1bHREYiwgIndvcmxkLnR4dCIsICJoZWxsbyIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJ3b3JsZC50eHQiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCQlhZGRSZXBvVG9DbG9zZShub3REZWZhdWx0RGIpOworCQl9CiAKIAkJZ3JvdXBBRGIgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOwotCQlnaXQgPSBuZXcgR2l0KGdyb3VwQURiKTsKLQkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKGdyb3VwQURiLCAiYS50eHQiLCAid29ybGQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOwotCQlhZGRSZXBvVG9DbG9zZShncm91cEFEYik7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZ3JvdXBBRGIpKSB7CisJCQlKR2l0VGVzdFV0aWwud3JpdGVUcmFzaEZpbGUoZ3JvdXBBRGIsICJhLnR4dCIsICJ3b3JsZCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhLnR4dCIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwkJCWFkZFJlcG9Ub0Nsb3NlKGdyb3VwQURiKTsKKwkJfQogCiAJCWdyb3VwQkRiID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKLQkJZ2l0ID0gbmV3IEdpdChncm91cEJEYik7Ci0JCUpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZShncm91cEJEYiwgImIudHh0IiwgIndvcmxkIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYi50eHQiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKLQkJYWRkUmVwb1RvQ2xvc2UoZ3JvdXBCRGIpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGdyb3VwQkRiKSkgeworCQkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKGdyb3VwQkRiLCAiYi50eHQiLCAid29ybGQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYi50eHQiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisJCQlhZGRSZXBvVG9DbG9zZShncm91cEJEYik7CisJCX0KIAogCQlyZXNvbHZlUmVsYXRpdmVVcmlzKCk7CiAJfQpAQCAtNzQ3LDYgKzc1MSw1OSBAQCBwdWJsaWMgdm9pZCB0ZXN0UmVjb3JkUmVtb3RlQnJhbmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCX0KIAl9CiAKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RSZW1vdGVSZXZpc2lvbigpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmdCdWlsZGVyIHhtbENvbnRlbnQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQl4bWxDb250ZW50LmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iKQorCQkJLmFwcGVuZCgiPG1hbmlmZXN0PiIpCisJCQkuYXBwZW5kKCI8cmVtb3RlIG5hbWU9XCJyZW1vdGUxXCIgZmV0Y2g9XCIuXCIgLz4iKQorCQkJLmFwcGVuZCgiPHJlbW90ZSBuYW1lPVwicmVtb3RlMlwiIGZldGNoPVwiLlwiIHJldmlzaW9uPVwiIikKKwkJCS5hcHBlbmQoQlJBTkNIKQorCQkJLmFwcGVuZCgiXCIgLz4iKQorCQkJLmFwcGVuZCgiPGRlZmF1bHQgcmVtb3RlPVwicmVtb3RlMVwiIHJldmlzaW9uPVwibWFzdGVyXCIgLz4iKQorCQkJLmFwcGVuZCgiPHByb2plY3QgcGF0aD1cImZvb1wiIHJlbW90ZT1cInJlbW90ZTJcIiBuYW1lPVwiIikKKwkJCS5hcHBlbmQoZGVmYXVsdFVyaSkKKwkJCS5hcHBlbmQoIlwiIC8+IikKKwkJCS5hcHBlbmQoIjwvbWFuaWZlc3Q+Iik7CisJCXdyaXRlVHJhc2hGaWxlKCJtYW5pZmVzdC54bWwiLCB4bWxDb250ZW50LnRvU3RyaW5nKCkpOworCQlSZXBvQ29tbWFuZCBjb21tYW5kID0gbmV3IFJlcG9Db21tYW5kKGRiKTsKKwkJY29tbWFuZC5zZXRQYXRoKGRiLmdldFdvcmtUcmVlKCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiL21hbmlmZXN0LnhtbCIpCisJCQkuc2V0VVJJKHJvb3RVcmkpCisJCQkuY2FsbCgpOworCQlGaWxlIGhlbGxvID0gbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZvby9oZWxsby50eHQiKTsKKwkJQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGhlbGxvKSk7CisJCVN0cmluZyBjb250ZW50ID0gcmVhZGVyLnJlYWRMaW5lKCk7CisJCXJlYWRlci5jbG9zZSgpOworCQlhc3NlcnRFcXVhbHMoInN1Ym1vZHVsZSBjb250ZW50IHNob3VsZCBiZSBhcyBleHBlY3RlZCIsCisJCQkJImJyYW5jaCB3b3JsZCIsIGNvbnRlbnQpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlZmF1bHRSZW1vdGVSZXZpc2lvbigpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmdCdWlsZGVyIHhtbENvbnRlbnQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQl4bWxDb250ZW50LmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iKQorCQkJLmFwcGVuZCgiPG1hbmlmZXN0PiIpCisJCQkuYXBwZW5kKCI8cmVtb3RlIG5hbWU9XCJyZW1vdGUxXCIgZmV0Y2g9XCIuXCIgcmV2aXNpb249XCIiKQorCQkJLmFwcGVuZChCUkFOQ0gpCisJCQkuYXBwZW5kKCJcIiAvPiIpCisJCQkuYXBwZW5kKCI8ZGVmYXVsdCByZW1vdGU9XCJyZW1vdGUxXCIgLz4iKQorCQkJLmFwcGVuZCgiPHByb2plY3QgcGF0aD1cImZvb1wiIG5hbWU9XCIiKQorCQkJLmFwcGVuZChkZWZhdWx0VXJpKQorCQkJLmFwcGVuZCgiXCIgLz4iKQorCQkJLmFwcGVuZCgiPC9tYW5pZmVzdD4iKTsKKwkJd3JpdGVUcmFzaEZpbGUoIm1hbmlmZXN0LnhtbCIsIHhtbENvbnRlbnQudG9TdHJpbmcoKSk7CisJCVJlcG9Db21tYW5kIGNvbW1hbmQgPSBuZXcgUmVwb0NvbW1hbmQoZGIpOworCQljb21tYW5kLnNldFBhdGgoZGIuZ2V0V29ya1RyZWUoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICIvbWFuaWZlc3QueG1sIikKKwkJCS5zZXRVUkkocm9vdFVyaSkKKwkJCS5jYWxsKCk7CisJCUZpbGUgaGVsbG8gPSBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiZm9vL2hlbGxvLnR4dCIpOworCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoaGVsbG8pKTsKKwkJU3RyaW5nIGNvbnRlbnQgPSByZWFkZXIucmVhZExpbmUoKTsKKwkJcmVhZGVyLmNsb3NlKCk7CisJCWFzc2VydEVxdWFscygic3VibW9kdWxlIGNvbnRlbnQgc2hvdWxkIGJlIGFzIGV4cGVjdGVkIiwKKwkJCQkiYnJhbmNoIHdvcmxkIiwgY29udGVudCk7CisJfQorCiAJcHJpdmF0ZSB2b2lkIHJlc29sdmVSZWxhdGl2ZVVyaXMoKSB7CiAJCS8vIEZpbmQgdGhlIGxvbmdlc3QgY29tbW9uIHByZWZpeCBlbmRzIHdpdGggIi8iIGFzIHJvb3RVcmkuCiAJCWRlZmF1bHRVcmkgPSBkZWZhdWx0RGIuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1N0cmluZygpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9PYmplY3REaXJlY3RvcnlUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL09iamVjdERpcmVjdG9yeVRlc3QuamF2YQppbmRleCAzMjI2ZjQyLi45MjNmMjgzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL09iamVjdERpcmVjdG9yeVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL09iamVjdERpcmVjdG9yeVRlc3QuamF2YQpAQCAtNjIsMTggKzYyLDE4IEBAIHB1YmxpYyB2b2lkIHRlc3RDb25jdXJyZW50SW5zZXJ0aW9uT2ZCbG9ic1RvVGhlU2FtZU5ld0Zhbk91dERpcmVjdG9yeSgpCiAJCQl0aHJvd3MgRXhjZXB0aW9uIHsKIAkJRXhlY3V0b3JTZXJ2aWNlIGUgPSBFeGVjdXRvcnMubmV3Q2FjaGVkVGhyZWFkUG9vbCgpOwogCQlmb3IgKGludCBpPTA7IGkgPCAxMDA7ICsraSkgewotCQkJT2JqZWN0RGlyZWN0b3J5IGRiID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKS5nZXRPYmplY3REYXRhYmFzZSgpOwotCQkJZm9yIChGdXR1cmUgZiA6IGUuaW52b2tlQWxsKGJsb2JJbnNlcnRlcnNGb3JUaGVTYW1lRmFuT3V0RGlyKGRiKSkpIHsKKwkJCU9iamVjdERpcmVjdG9yeSBkaXIgPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpLmdldE9iamVjdERhdGFiYXNlKCk7CisJCQlmb3IgKEZ1dHVyZSBmIDogZS5pbnZva2VBbGwoYmxvYkluc2VydGVyc0ZvclRoZVNhbWVGYW5PdXREaXIoZGlyKSkpIHsKIAkJCQlmLmdldCgpOwogCQkJfQogCQl9CiAJfQogCiAJcHJpdmF0ZSBDb2xsZWN0aW9uPENhbGxhYmxlPE9iamVjdElkPj4gYmxvYkluc2VydGVyc0ZvclRoZVNhbWVGYW5PdXREaXIoCi0JCQlmaW5hbCBPYmplY3REaXJlY3RvcnkgZGIpIHsKKwkJCWZpbmFsIE9iamVjdERpcmVjdG9yeSBkaXIpIHsKIAkJQ2FsbGFibGU8T2JqZWN0SWQ+IGNhbGxhYmxlID0gbmV3IENhbGxhYmxlPE9iamVjdElkPigpIHsKIAkJCXB1YmxpYyBPYmplY3RJZCBjYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQkJcmV0dXJuIGRiLm5ld0luc2VydGVyKCkuaW5zZXJ0KENvbnN0YW50cy5PQkpfQkxPQiwgbmV3IGJ5dGVbMF0pOworCQkJCXJldHVybiBkaXIubmV3SW5zZXJ0ZXIoKS5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLCBuZXcgYnl0ZVswXSk7CiAJCQl9CiAJCX07CiAJCXJldHVybiBDb2xsZWN0aW9ucy5uQ29waWVzKDQsIGNhbGxhYmxlKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0ZpbGVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tGaWxlVGVzdC5qYXZhCmluZGV4IGNiODA3NjguLmJhMDdkNjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0ZpbGVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrRmlsZVRlc3QuamF2YQpAQCAtMTkxLDExOSArMTkxLDEyMiBAQCBwdWJsaWMgdm9pZCB0ZXN0V2hvbGVfTGFyZ2VPYmplY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdERlbHRhX1NtYWxsT2JqZWN0Q2hhaW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyIGZtdCA9IG5ldyBPYmplY3RJbnNlcnRlci5Gb3JtYXR0ZXIoKTsKLQkJYnl0ZVtdIGRhdGEwID0gbmV3IGJ5dGVbNTEyXTsKLQkJQXJyYXlzLmZpbGwoZGF0YTAsIChieXRlKSAweGYzKTsKLQkJT2JqZWN0SWQgaWQwID0gZm10LmlkRm9yKENvbnN0YW50cy5PQkpfQkxPQiwgZGF0YTApOworCQl0cnkgKE9iamVjdEluc2VydGVyLkZvcm1hdHRlciBmbXQgPSBuZXcgT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyKCkpIHsKKwkJCWJ5dGVbXSBkYXRhMCA9IG5ldyBieXRlWzUxMl07CisJCQlBcnJheXMuZmlsbChkYXRhMCwgKGJ5dGUpIDB4ZjMpOworCQkJT2JqZWN0SWQgaWQwID0gZm10LmlkRm9yKENvbnN0YW50cy5PQkpfQkxPQiwgZGF0YTApOwogCi0JCVRlbXBvcmFyeUJ1ZmZlci5IZWFwIHBhY2sgPSBuZXcgVGVtcG9yYXJ5QnVmZmVyLkhlYXAoNjQgKiAxMDI0KTsKLQkJcGFja0hlYWRlcihwYWNrLCA0KTsKLQkJb2JqZWN0SGVhZGVyKHBhY2ssIENvbnN0YW50cy5PQkpfQkxPQiwgZGF0YTAubGVuZ3RoKTsKLQkJZGVmbGF0ZShwYWNrLCBkYXRhMCk7CisJCQlUZW1wb3JhcnlCdWZmZXIuSGVhcCBwYWNrID0gbmV3IFRlbXBvcmFyeUJ1ZmZlci5IZWFwKDY0ICogMTAyNCk7CisJCQlwYWNrSGVhZGVyKHBhY2ssIDQpOworCQkJb2JqZWN0SGVhZGVyKHBhY2ssIENvbnN0YW50cy5PQkpfQkxPQiwgZGF0YTAubGVuZ3RoKTsKKwkJCWRlZmxhdGUocGFjaywgZGF0YTApOwogCi0JCWJ5dGVbXSBkYXRhMSA9IGNsb25lKDB4MDEsIGRhdGEwKTsKLQkJYnl0ZVtdIGRlbHRhMSA9IGRlbHRhKGRhdGEwLCBkYXRhMSk7Ci0JCU9iamVjdElkIGlkMSA9IGZtdC5pZEZvcihDb25zdGFudHMuT0JKX0JMT0IsIGRhdGExKTsKLQkJb2JqZWN0SGVhZGVyKHBhY2ssIENvbnN0YW50cy5PQkpfUkVGX0RFTFRBLCBkZWx0YTEubGVuZ3RoKTsKLQkJaWQwLmNvcHlSYXdUbyhwYWNrKTsKLQkJZGVmbGF0ZShwYWNrLCBkZWx0YTEpOworCQkJYnl0ZVtdIGRhdGExID0gY2xvbmUoMHgwMSwgZGF0YTApOworCQkJYnl0ZVtdIGRlbHRhMSA9IGRlbHRhKGRhdGEwLCBkYXRhMSk7CisJCQlPYmplY3RJZCBpZDEgPSBmbXQuaWRGb3IoQ29uc3RhbnRzLk9CSl9CTE9CLCBkYXRhMSk7CisJCQlvYmplY3RIZWFkZXIocGFjaywgQ29uc3RhbnRzLk9CSl9SRUZfREVMVEEsIGRlbHRhMS5sZW5ndGgpOworCQkJaWQwLmNvcHlSYXdUbyhwYWNrKTsKKwkJCWRlZmxhdGUocGFjaywgZGVsdGExKTsKIAotCQlieXRlW10gZGF0YTIgPSBjbG9uZSgweDAyLCBkYXRhMSk7Ci0JCWJ5dGVbXSBkZWx0YTIgPSBkZWx0YShkYXRhMSwgZGF0YTIpOwotCQlPYmplY3RJZCBpZDIgPSBmbXQuaWRGb3IoQ29uc3RhbnRzLk9CSl9CTE9CLCBkYXRhMik7Ci0JCW9iamVjdEhlYWRlcihwYWNrLCBDb25zdGFudHMuT0JKX1JFRl9ERUxUQSwgZGVsdGEyLmxlbmd0aCk7Ci0JCWlkMS5jb3B5UmF3VG8ocGFjayk7Ci0JCWRlZmxhdGUocGFjaywgZGVsdGEyKTsKKwkJCWJ5dGVbXSBkYXRhMiA9IGNsb25lKDB4MDIsIGRhdGExKTsKKwkJCWJ5dGVbXSBkZWx0YTIgPSBkZWx0YShkYXRhMSwgZGF0YTIpOworCQkJT2JqZWN0SWQgaWQyID0gZm10LmlkRm9yKENvbnN0YW50cy5PQkpfQkxPQiwgZGF0YTIpOworCQkJb2JqZWN0SGVhZGVyKHBhY2ssIENvbnN0YW50cy5PQkpfUkVGX0RFTFRBLCBkZWx0YTIubGVuZ3RoKTsKKwkJCWlkMS5jb3B5UmF3VG8ocGFjayk7CisJCQlkZWZsYXRlKHBhY2ssIGRlbHRhMik7CiAKLQkJYnl0ZVtdIGRhdGEzID0gY2xvbmUoMHgwMywgZGF0YTIpOwotCQlieXRlW10gZGVsdGEzID0gZGVsdGEoZGF0YTIsIGRhdGEzKTsKLQkJT2JqZWN0SWQgaWQzID0gZm10LmlkRm9yKENvbnN0YW50cy5PQkpfQkxPQiwgZGF0YTMpOwotCQlvYmplY3RIZWFkZXIocGFjaywgQ29uc3RhbnRzLk9CSl9SRUZfREVMVEEsIGRlbHRhMy5sZW5ndGgpOwotCQlpZDIuY29weVJhd1RvKHBhY2spOwotCQlkZWZsYXRlKHBhY2ssIGRlbHRhMyk7CisJCQlieXRlW10gZGF0YTMgPSBjbG9uZSgweDAzLCBkYXRhMik7CisJCQlieXRlW10gZGVsdGEzID0gZGVsdGEoZGF0YTIsIGRhdGEzKTsKKwkJCU9iamVjdElkIGlkMyA9IGZtdC5pZEZvcihDb25zdGFudHMuT0JKX0JMT0IsIGRhdGEzKTsKKwkJCW9iamVjdEhlYWRlcihwYWNrLCBDb25zdGFudHMuT0JKX1JFRl9ERUxUQSwgZGVsdGEzLmxlbmd0aCk7CisJCQlpZDIuY29weVJhd1RvKHBhY2spOworCQkJZGVmbGF0ZShwYWNrLCBkZWx0YTMpOwogCi0JCWRpZ2VzdChwYWNrKTsKLQkJUGFja1BhcnNlciBpcCA9IGluZGV4KHBhY2sudG9CeXRlQXJyYXkoKSk7Ci0JCWlwLnNldEFsbG93VGhpbih0cnVlKTsKLQkJaXAucGFyc2UoTnVsbFByb2dyZXNzTW9uaXRvci5JTlNUQU5DRSk7CisJCQlkaWdlc3QocGFjayk7CisJCQlQYWNrUGFyc2VyIGlwID0gaW5kZXgocGFjay50b0J5dGVBcnJheSgpKTsKKwkJCWlwLnNldEFsbG93VGhpbih0cnVlKTsKKwkJCWlwLnBhcnNlKE51bGxQcm9ncmVzc01vbml0b3IuSU5TVEFOQ0UpOwogCi0JCWFzc2VydFRydWUoImhhcyBibG9iIiwgd2MuaGFzKGlkMykpOworCQkJYXNzZXJ0VHJ1ZSgiaGFzIGJsb2IiLCB3Yy5oYXMoaWQzKSk7CiAKLQkJT2JqZWN0TG9hZGVyIG9sID0gd2Mub3BlbihpZDMpOwotCQlhc3NlcnROb3ROdWxsKCJjcmVhdGVkIGxvYWRlciIsIG9sKTsKLQkJYXNzZXJ0RXF1YWxzKENvbnN0YW50cy5PQkpfQkxPQiwgb2wuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKGRhdGEzLmxlbmd0aCwgb2wuZ2V0U2l6ZSgpKTsKLQkJYXNzZXJ0RmFsc2UoImlzIGxhcmdlIiwgb2wuaXNMYXJnZSgpKTsKLQkJYXNzZXJ0Tm90TnVsbChvbC5nZXRDYWNoZWRCeXRlcygpKTsKLQkJYXNzZXJ0QXJyYXlFcXVhbHMoZGF0YTMsIG9sLmdldENhY2hlZEJ5dGVzKCkpOworCQkJT2JqZWN0TG9hZGVyIG9sID0gd2Mub3BlbihpZDMpOworCQkJYXNzZXJ0Tm90TnVsbCgiY3JlYXRlZCBsb2FkZXIiLCBvbCk7CisJCQlhc3NlcnRFcXVhbHMoQ29uc3RhbnRzLk9CSl9CTE9CLCBvbC5nZXRUeXBlKCkpOworCQkJYXNzZXJ0RXF1YWxzKGRhdGEzLmxlbmd0aCwgb2wuZ2V0U2l6ZSgpKTsKKwkJCWFzc2VydEZhbHNlKCJpcyBsYXJnZSIsIG9sLmlzTGFyZ2UoKSk7CisJCQlhc3NlcnROb3ROdWxsKG9sLmdldENhY2hlZEJ5dGVzKCkpOworCQkJYXNzZXJ0QXJyYXlFcXVhbHMoZGF0YTMsIG9sLmdldENhY2hlZEJ5dGVzKCkpOwogCi0JCU9iamVjdFN0cmVhbSBpbiA9IG9sLm9wZW5TdHJlYW0oKTsKLQkJYXNzZXJ0Tm90TnVsbCgiaGF2ZSBzdHJlYW0iLCBpbik7Ci0JCWFzc2VydEVxdWFscyhDb25zdGFudHMuT0JKX0JMT0IsIGluLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscyhkYXRhMy5sZW5ndGgsIGluLmdldFNpemUoKSk7Ci0JCWJ5dGVbXSBhY3QgPSBuZXcgYnl0ZVtkYXRhMy5sZW5ndGhdOwotCQlJTy5yZWFkRnVsbHkoaW4sIGFjdCwgMCwgZGF0YTMubGVuZ3RoKTsKLQkJYXNzZXJ0VHJ1ZSgic2FtZSBjb250ZW50IiwgQXJyYXlzLmVxdWFscyhhY3QsIGRhdGEzKSk7Ci0JCWFzc2VydEVxdWFscygic3RyZWFtIGF0IEVPRiIsIC0xLCBpbi5yZWFkKCkpOwotCQlpbi5jbG9zZSgpOworCQkJT2JqZWN0U3RyZWFtIGluID0gb2wub3BlblN0cmVhbSgpOworCQkJYXNzZXJ0Tm90TnVsbCgiaGF2ZSBzdHJlYW0iLCBpbik7CisJCQlhc3NlcnRFcXVhbHMoQ29uc3RhbnRzLk9CSl9CTE9CLCBpbi5nZXRUeXBlKCkpOworCQkJYXNzZXJ0RXF1YWxzKGRhdGEzLmxlbmd0aCwgaW4uZ2V0U2l6ZSgpKTsKKwkJCWJ5dGVbXSBhY3QgPSBuZXcgYnl0ZVtkYXRhMy5sZW5ndGhdOworCQkJSU8ucmVhZEZ1bGx5KGluLCBhY3QsIDAsIGRhdGEzLmxlbmd0aCk7CisJCQlhc3NlcnRUcnVlKCJzYW1lIGNvbnRlbnQiLCBBcnJheXMuZXF1YWxzKGFjdCwgZGF0YTMpKTsKKwkJCWFzc2VydEVxdWFscygic3RyZWFtIGF0IEVPRiIsIC0xLCBpbi5yZWFkKCkpOworCQkJaW4uY2xvc2UoKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdERlbHRhX0ZhaWxzT3ZlcjJHaUIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyIGZtdCA9IG5ldyBPYmplY3RJbnNlcnRlci5Gb3JtYXR0ZXIoKTsKLQkJYnl0ZVtdIGJhc2UgPSBuZXcgYnl0ZVtdIHsgJ2EnIH07Ci0JCU9iamVjdElkIGlkQSA9IGZtdC5pZEZvcihDb25zdGFudHMuT0JKX0JMT0IsIGJhc2UpOwotCQlPYmplY3RJZCBpZEIgPSBmbXQuaWRGb3IoQ29uc3RhbnRzLk9CSl9CTE9CLCBuZXcgYnl0ZVtdIHsgJ2InIH0pOworCQl0cnkgKE9iamVjdEluc2VydGVyLkZvcm1hdHRlciBmbXQgPSBuZXcgT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyKCkpIHsKKwkJCWJ5dGVbXSBiYXNlID0gbmV3IGJ5dGVbXSB7ICdhJyB9OworCQkJT2JqZWN0SWQgaWRBID0gZm10LmlkRm9yKENvbnN0YW50cy5PQkpfQkxPQiwgYmFzZSk7CisJCQlPYmplY3RJZCBpZEIgPSBmbXQuaWRGb3IoQ29uc3RhbnRzLk9CSl9CTE9CLCBuZXcgYnl0ZVtdIHsgJ2InIH0pOwogCi0JCVBhY2tlZE9iamVjdEluZm8gYSA9IG5ldyBQYWNrZWRPYmplY3RJbmZvKGlkQSk7Ci0JCVBhY2tlZE9iamVjdEluZm8gYiA9IG5ldyBQYWNrZWRPYmplY3RJbmZvKGlkQik7CisJCQlQYWNrZWRPYmplY3RJbmZvIGEgPSBuZXcgUGFja2VkT2JqZWN0SW5mbyhpZEEpOworCQkJUGFja2VkT2JqZWN0SW5mbyBiID0gbmV3IFBhY2tlZE9iamVjdEluZm8oaWRCKTsKIAotCQlUZW1wb3JhcnlCdWZmZXIuSGVhcCBwYWNrID0gbmV3IFRlbXBvcmFyeUJ1ZmZlci5IZWFwKDY0ICogMTAyNCk7Ci0JCXBhY2tIZWFkZXIocGFjaywgMik7Ci0JCWEuc2V0T2Zmc2V0KHBhY2subGVuZ3RoKCkpOwotCQlvYmplY3RIZWFkZXIocGFjaywgQ29uc3RhbnRzLk9CSl9CTE9CLCBiYXNlLmxlbmd0aCk7Ci0JCWRlZmxhdGUocGFjaywgYmFzZSk7CisJCQlUZW1wb3JhcnlCdWZmZXIuSGVhcCBwYWNrID0gbmV3IFRlbXBvcmFyeUJ1ZmZlci5IZWFwKDY0ICogMTAyNCk7CisJCQlwYWNrSGVhZGVyKHBhY2ssIDIpOworCQkJYS5zZXRPZmZzZXQocGFjay5sZW5ndGgoKSk7CisJCQlvYmplY3RIZWFkZXIocGFjaywgQ29uc3RhbnRzLk9CSl9CTE9CLCBiYXNlLmxlbmd0aCk7CisJCQlkZWZsYXRlKHBhY2ssIGJhc2UpOwogCi0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSB0bXAgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCURlbHRhRW5jb2RlciBkZSA9IG5ldyBEZWx0YUVuY29kZXIodG1wLCBiYXNlLmxlbmd0aCwgM0wgPDwgMzApOwotCQlkZS5jb3B5KDAsIDEpOwotCQlieXRlW10gZGVsdGEgPSB0bXAudG9CeXRlQXJyYXkoKTsKLQkJYi5zZXRPZmZzZXQocGFjay5sZW5ndGgoKSk7Ci0JCW9iamVjdEhlYWRlcihwYWNrLCBDb25zdGFudHMuT0JKX1JFRl9ERUxUQSwgZGVsdGEubGVuZ3RoKTsKLQkJaWRBLmNvcHlSYXdUbyhwYWNrKTsKLQkJZGVmbGF0ZShwYWNrLCBkZWx0YSk7Ci0JCWJ5dGVbXSBmb290ZXIgPSBkaWdlc3QocGFjayk7CisJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gdG1wID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJRGVsdGFFbmNvZGVyIGRlID0gbmV3IERlbHRhRW5jb2Rlcih0bXAsIGJhc2UubGVuZ3RoLCAzTCA8PCAzMCk7CisJCQlkZS5jb3B5KDAsIDEpOworCQkJYnl0ZVtdIGRlbHRhID0gdG1wLnRvQnl0ZUFycmF5KCk7CisJCQliLnNldE9mZnNldChwYWNrLmxlbmd0aCgpKTsKKwkJCW9iamVjdEhlYWRlcihwYWNrLCBDb25zdGFudHMuT0JKX1JFRl9ERUxUQSwgZGVsdGEubGVuZ3RoKTsKKwkJCWlkQS5jb3B5UmF3VG8ocGFjayk7CisJCQlkZWZsYXRlKHBhY2ssIGRlbHRhKTsKKwkJCWJ5dGVbXSBmb290ZXIgPSBkaWdlc3QocGFjayk7CiAKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShyZXBvLmdldE9iamVjdERhdGFiYXNlKCkuZ2V0RGlyZWN0b3J5KCksICJwYWNrIik7Ci0JCUZpbGUgcGFja05hbWUgPSBuZXcgRmlsZShkaXIsIGlkQS5uYW1lKCkgKyAiLnBhY2siKTsKLQkJRmlsZSBpZHhOYW1lID0gbmV3IEZpbGUoZGlyLCBpZEEubmFtZSgpICsgIi5pZHgiKTsKKwkJCUZpbGUgZGlyID0gbmV3IEZpbGUocmVwby5nZXRPYmplY3REYXRhYmFzZSgpLmdldERpcmVjdG9yeSgpLAorCQkJCQkicGFjayIpOworCQkJRmlsZSBwYWNrTmFtZSA9IG5ldyBGaWxlKGRpciwgaWRBLm5hbWUoKSArICIucGFjayIpOworCQkJRmlsZSBpZHhOYW1lID0gbmV3IEZpbGUoZGlyLCBpZEEubmFtZSgpICsgIi5pZHgiKTsKIAotCQlGaWxlT3V0cHV0U3RyZWFtIGYgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShwYWNrTmFtZSk7Ci0JCXRyeSB7Ci0JCQlmLndyaXRlKHBhY2sudG9CeXRlQXJyYXkoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlmLmNsb3NlKCk7Ci0JCX0KKwkJCUZpbGVPdXRwdXRTdHJlYW0gZiA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHBhY2tOYW1lKTsKKwkJCXRyeSB7CisJCQkJZi53cml0ZShwYWNrLnRvQnl0ZUFycmF5KCkpOworCQkJfSBmaW5hbGx5IHsKKwkJCQlmLmNsb3NlKCk7CisJCQl9CiAKLQkJZiA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGlkeE5hbWUpOwotCQl0cnkgewotCQkJTGlzdDxQYWNrZWRPYmplY3RJbmZvPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxQYWNrZWRPYmplY3RJbmZvPigpOwotCQkJbGlzdC5hZGQoYSk7Ci0JCQlsaXN0LmFkZChiKTsKLQkJCUNvbGxlY3Rpb25zLnNvcnQobGlzdCk7Ci0JCQluZXcgUGFja0luZGV4V3JpdGVyVjEoZikud3JpdGUobGlzdCwgZm9vdGVyKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWYuY2xvc2UoKTsKLQkJfQorCQkJZiA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGlkeE5hbWUpOworCQkJdHJ5IHsKKwkJCQlMaXN0PFBhY2tlZE9iamVjdEluZm8+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PFBhY2tlZE9iamVjdEluZm8+KCk7CisJCQkJbGlzdC5hZGQoYSk7CisJCQkJbGlzdC5hZGQoYik7CisJCQkJQ29sbGVjdGlvbnMuc29ydChsaXN0KTsKKwkJCQluZXcgUGFja0luZGV4V3JpdGVyVjEoZikud3JpdGUobGlzdCwgZm9vdGVyKTsKKwkJCX0gZmluYWxseSB7CisJCQkJZi5jbG9zZSgpOworCQkJfQogCi0JCVBhY2tGaWxlIHBhY2tGaWxlID0gbmV3IFBhY2tGaWxlKHBhY2tOYW1lLCBQYWNrRXh0LklOREVYLmdldEJpdCgpKTsKLQkJdHJ5IHsKLQkJCXBhY2tGaWxlLmdldCh3YywgYik7Ci0JCQlmYWlsKCJleHBlY3RlZCBMYXJnZU9iamVjdEV4Y2VwdGlvbi5FeGNlZWRzQnl0ZUFycmF5TGltaXQiKTsKLQkJfSBjYXRjaCAoTGFyZ2VPYmplY3RFeGNlcHRpb24uRXhjZWVkc0J5dGVBcnJheUxpbWl0IGJhZCkgewotCQkJYXNzZXJ0TnVsbChiYWQuZ2V0T2JqZWN0SWQoKSk7Ci0JCX0gZmluYWxseSB7Ci0JCQlwYWNrRmlsZS5jbG9zZSgpOworCQkJUGFja0ZpbGUgcGFja0ZpbGUgPSBuZXcgUGFja0ZpbGUocGFja05hbWUsIFBhY2tFeHQuSU5ERVguZ2V0Qml0KCkpOworCQkJdHJ5IHsKKwkJCQlwYWNrRmlsZS5nZXQod2MsIGIpOworCQkJCWZhaWwoImV4cGVjdGVkIExhcmdlT2JqZWN0RXhjZXB0aW9uLkV4Y2VlZHNCeXRlQXJyYXlMaW1pdCIpOworCQkJfSBjYXRjaCAoTGFyZ2VPYmplY3RFeGNlcHRpb24uRXhjZWVkc0J5dGVBcnJheUxpbWl0IGJhZCkgeworCQkJCWFzc2VydE51bGwoYmFkLmdldE9iamVjdElkKCkpOworCQkJfSBmaW5hbGx5IHsKKwkJCQlwYWNrRmlsZS5jbG9zZSgpOworCQkJfQogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tXcml0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tXcml0ZXJUZXN0LmphdmEKaW5kZXggMDFkNmVlNi4uNjNhMzA3MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrV3JpdGVyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja1dyaXRlclRlc3QuamF2YQpAQCAtMzQyLDEyICszNDIsMTMgQEAgcHVibGljIHZvaWQgdGVzdFdyaXRlUGFjazMoKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQkJCU9iamVjdElkLmZyb21TdHJpbmcoIjkwMmQ1NDc2ZmEyNDliN2FiYzlkODRjNjExNTc3YTgxMzgxZjAzMjciKSwKIAkJCQlPYmplY3RJZC5mcm9tU3RyaW5nKCI1YjZlN2M2NmMyNzZlNzYxMGQ0YTczYzcwZWMxYTFmN2MxMDAzMjU5IiksCiAJCQkJT2JqZWN0SWQuZnJvbVN0cmluZygiNmZmODdjNDY2NDk4MWU0Mzk3NjI1NzkxYzhlYTNiYmI1ZjIyNzlhMyIpIH07Ci0JCWZpbmFsIFJldldhbGsgcGFyc2VyID0gbmV3IFJldldhbGsoZGIpOwotCQlmaW5hbCBSZXZPYmplY3QgZm9yY2VkT3JkZXJSZXZzW10gPSBuZXcgUmV2T2JqZWN0W2ZvcmNlZE9yZGVyLmxlbmd0aF07Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZm9yY2VkT3JkZXIubGVuZ3RoOyBpKyspCi0JCQlmb3JjZWRPcmRlclJldnNbaV0gPSBwYXJzZXIucGFyc2VBbnkoZm9yY2VkT3JkZXJbaV0pOworCQl0cnkgKGZpbmFsIFJldldhbGsgcGFyc2VyID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQlmaW5hbCBSZXZPYmplY3QgZm9yY2VkT3JkZXJSZXZzW10gPSBuZXcgUmV2T2JqZWN0W2ZvcmNlZE9yZGVyLmxlbmd0aF07CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGZvcmNlZE9yZGVyLmxlbmd0aDsgaSsrKQorCQkJCWZvcmNlZE9yZGVyUmV2c1tpXSA9IHBhcnNlci5wYXJzZUFueShmb3JjZWRPcmRlcltpXSk7CiAKLQkJY3JlYXRlVmVyaWZ5T3BlblBhY2soQXJyYXlzLmFzTGlzdChmb3JjZWRPcmRlclJldnMpKTsKKwkJCWNyZWF0ZVZlcmlmeU9wZW5QYWNrKEFycmF5cy5hc0xpc3QoZm9yY2VkT3JkZXJSZXZzKSk7CisJCX0KIAogCQlhc3NlcnRFcXVhbHMoZm9yY2VkT3JkZXIubGVuZ3RoLCB3cml0ZXIuZ2V0T2JqZWN0Q291bnQoKSk7CiAJCXZlcmlmeU9iamVjdHNPcmRlcihmb3JjZWRPcmRlcik7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1JlZkRpcmVjdG9yeVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5VGVzdC5qYXZhCmluZGV4IDUyZTE4MWIuLmVmNWRmY2QgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5VGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUmVmRGlyZWN0b3J5VGVzdC5qYXZhCkBAIC0xNDQ0LDggKzE0NDQsOCBAQCBwdWJsaWMgdm9pZCBzdGFydChpbnQgdG90YWxUYXNrcykgewogCQkJLy8gZW1wdHkKIAkJfQogCi0JCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgdGl0bGUsIGludCB0b3RhbFdvcmspIHsKLQkJCXRoaXMudG90YWxXb3JrID0gdG90YWxXb3JrOworCQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIHRpdGxlLCBpbnQgdG90YWwpIHsKKwkJCXRoaXMudG90YWxXb3JrID0gdG90YWw7CiAJCQlsYXN0V29yayA9IDA7CiAJCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9UMDAwM19CYXNpY1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvVDAwMDNfQmFzaWNUZXN0LmphdmEKaW5kZXggZjRkNjU1Zi4uYjZhZDIyYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9UMDAwM19CYXNpY1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1QwMDAzX0Jhc2ljVGVzdC5qYXZhCkBAIC04NCw3ICs4NCw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlsczsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBUMDAwM19CYXNpY1Rlc3QgZXh0ZW5kcyBTYW1wbGVEYXRhUmVwb3NpdG9yeVRlc3RDYXNlIHsKIAogCUBUZXN0CkBAIC0zNTUsMTQgKzM1NCwxNCBAQCBwdWJsaWMgdm9pZCB0ZXN0MDA2X1JlYWRVZ2x5Q29uZmlnKCkgdGhyb3dzIElPRXhjZXB0aW9uLAogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0MDA3X09wZW4oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmaW5hbCBGaWxlUmVwb3NpdG9yeSBkYjIgPSBuZXcgRmlsZVJlcG9zaXRvcnkoZGIuZ2V0RGlyZWN0b3J5KCkpOwotCQlhc3NlcnRFcXVhbHMoZGIuZ2V0RGlyZWN0b3J5KCksIGRiMi5nZXREaXJlY3RvcnkoKSk7Ci0JCWFzc2VydEVxdWFscyhkYi5nZXRPYmplY3REYXRhYmFzZSgpLmdldERpcmVjdG9yeSgpLCBkYjIKLQkJCQkuZ2V0T2JqZWN0RGF0YWJhc2UoKS5nZXREaXJlY3RvcnkoKSk7Ci0JCWFzc2VydE5vdFNhbWUoZGIuZ2V0Q29uZmlnKCksIGRiMi5nZXRDb25maWcoKSk7CisJCXRyeSAoZmluYWwgRmlsZVJlcG9zaXRvcnkgZGIyID0gbmV3IEZpbGVSZXBvc2l0b3J5KGRiLmdldERpcmVjdG9yeSgpKSkgeworCQkJYXNzZXJ0RXF1YWxzKGRiLmdldERpcmVjdG9yeSgpLCBkYjIuZ2V0RGlyZWN0b3J5KCkpOworCQkJYXNzZXJ0RXF1YWxzKGRiLmdldE9iamVjdERhdGFiYXNlKCkuZ2V0RGlyZWN0b3J5KCksIGRiMgorCQkJCQkuZ2V0T2JqZWN0RGF0YWJhc2UoKS5nZXREaXJlY3RvcnkoKSk7CisJCQlhc3NlcnROb3RTYW1lKGRiLmdldENvbmZpZygpLCBkYjIuZ2V0Q29uZmlnKCkpOworCQl9CiAJfQogCi0JQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0MDA4X0ZhaWxPbldyb25nVmVyc2lvbigpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCWZpbmFsIEZpbGUgY2ZnID0gbmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5DT05GSUcpOwpAQCAtMzcxLDggKzM3MCw3IEBAIHB1YmxpYyB2b2lkIHRlc3QwMDhfRmFpbE9uV3JvbmdWZXJzaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJCQkrIGJhZHZlcnMgKyAiXG4iOwogCQl3cml0ZShjZmcsIGNvbmZpZ1N0cik7CiAKLQkJdHJ5IHsKLQkJCW5ldyBGaWxlUmVwb3NpdG9yeShkYi5nZXREaXJlY3RvcnkoKSk7CisJCXRyeSAoRmlsZVJlcG9zaXRvcnkgdW51c2VkID0gbmV3IEZpbGVSZXBvc2l0b3J5KGRiLmdldERpcmVjdG9yeSgpKSkgewogCQkJZmFpbCgiaW5jb3JyZWN0bHkgb3BlbmVkIGEgYmFkIHJlcG9zaXRvcnkiKTsKIAkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlvZSkgewogCQkJYXNzZXJ0Tm90TnVsbChpb2UuZ2V0TWVzc2FnZSgpKTsKQEAgLTUzNCw5ICs1MzIsMTAgQEAgcHVibGljIHZvaWQgdGVzdDAyNF9jcmVhdGVDb21taXROb25Bc2NpaSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdDAyNV9jb21wdXRlU2hhMU5vU3RvcmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlieXRlW10gZGF0YSA9ICJ0ZXN0MDI1IHNvbWUgZGF0YSwgbW9yZSB0aGFuIDE2IGJ5dGVzIHRvIGdldCBnb29kIGNvdmVyYWdlIgogCQkJCS5nZXRCeXRlcygiSVNPLTg4NTktMSIpOwotCQlmaW5hbCBPYmplY3RJZCBpZCA9IG5ldyBPYmplY3RJbnNlcnRlci5Gb3JtYXR0ZXIoKS5pZEZvcigKLQkJCQlDb25zdGFudHMuT0JKX0JMT0IsIGRhdGEpOwotCQlhc3NlcnRFcXVhbHMoIjRmNTYxZGY1ZWNmMGRmYmQ1M2EwZGMwZjM3MjYyZmVmMDc1ZDlkZGUiLCBpZC5uYW1lKCkpOworCQl0cnkgKE9iamVjdEluc2VydGVyLkZvcm1hdHRlciBmb3JtYXR0ZXIgPSBuZXcgT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyKCkpIHsKKwkJCWZpbmFsIE9iamVjdElkIGlkID0gZm9ybWF0dGVyLmlkRm9yKENvbnN0YW50cy5PQkpfQkxPQiwgZGF0YSk7CisJCQlhc3NlcnRFcXVhbHMoIjRmNTYxZGY1ZWNmMGRmYmQ1M2EwZGMwZjM3MjYyZmVmMDc1ZDlkZGUiLCBpZC5uYW1lKCkpOworCQl9CiAJfQogCiAJQFRlc3QKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvRGlyQ2FjaGVDaGVja291dFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvRGlyQ2FjaGVDaGVja291dFRlc3QuamF2YQppbmRleCA5MjkwMWY4Li5jMWI4ODJhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0RpckNhY2hlQ2hlY2tvdXRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EaXJDYWNoZUNoZWNrb3V0VGVzdC5qYXZhCkBAIC0xNDAsNTIgKzE0MCw1MyBAQCBwcml2YXRlIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBta21hcChTdHJpbmcuLi4gYXJncykgewogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFJlc2V0SGFyZCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgTm9GaWxlcGF0dGVybkV4Y2VwdGlvbiwKIAkJCUdpdEFQSUV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiZigpIik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJEL2ciLCAiZygpIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRhbCIpLmNhbGwoKTsKLQkJYXNzZXJ0SW5kZXgobWttYXAoImYiLCAiZigpIiwgIkQvZyIsICJnKCkiKSk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJmKCkiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJEL2ciLCAiZygpIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGFsIikuY2FsbCgpOworCQkJYXNzZXJ0SW5kZXgobWttYXAoImYiLCAiZigpIiwgIkQvZyIsICJnKCkiKSk7CiAKLQkJZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoInRvcGljIikuY2FsbCgpOworCQkJZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoInRvcGljIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJmIiwgImYoKVxubWFzdGVyIik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJEL2ciLCAiZygpXG5nMigpIik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJFL2giLCAiaCgpIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IG1hc3RlciA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYXN0ZXItMSIpLmNhbGwoKTsKLQkJYXNzZXJ0SW5kZXgobWttYXAoImYiLCAiZigpXG5tYXN0ZXIiLCAiRC9nIiwgImcoKVxuZzIoKSIsICJFL2giLCAiaCgpIikpOworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiZigpXG5tYXN0ZXIiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJEL2ciLCAiZygpXG5nMigpIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiRS9oIiwgImgoKSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IG1hc3RlciA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYXN0ZXItMSIpLmNhbGwoKTsKKwkJCWFzc2VydEluZGV4KG1rbWFwKCJmIiwgImYoKVxubWFzdGVyIiwgIkQvZyIsICJnKClcbmcyKCkiLCAiRS9oIiwgImgoKSIpKTsKIAotCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy90b3BpYyIpOwotCQlhc3NlcnRJbmRleChta21hcCgiZiIsICJmKCkiLCAiRC9nIiwgImcoKSIpKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3RvcGljIik7CisJCQlhc3NlcnRJbmRleChta21hcCgiZiIsICJmKCkiLCAiRC9nIiwgImcoKSIpKTsKIAotCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJmKClcbnNpZGUiKTsKLQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiRC9nIikuZGVsZXRlKCkpOwotCQl3cml0ZVRyYXNoRmlsZSgiRy9pIiwgImkoKSIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLnNldFVwZGF0ZSh0cnVlKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCB0b3BpYyA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJ0b3BpYy0xIikuY2FsbCgpOwotCQlhc3NlcnRJbmRleChta21hcCgiZiIsICJmKClcbnNpZGUiLCAiRy9pIiwgImkoKSIpKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImYoKVxuc2lkZSIpOworCQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiRC9nIikuZGVsZXRlKCkpOworCQkJd3JpdGVUcmFzaEZpbGUoIkcvaSIsICJpKCkiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLnNldFVwZGF0ZSh0cnVlKS5jYWxsKCk7CisJCQlSZXZDb21taXQgdG9waWMgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgidG9waWMtMSIpLmNhbGwoKTsKKwkJCWFzc2VydEluZGV4KG1rbWFwKCJmIiwgImYoKVxuc2lkZSIsICJHL2kiLCAiaSgpIikpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJ1bnRyYWNrZWQiLCAidW50cmFja2VkIik7CisJCQl3cml0ZVRyYXNoRmlsZSgidW50cmFja2VkIiwgInVudHJhY2tlZCIpOwogCi0JCXJlc2V0SGFyZChtYXN0ZXIpOwotCQlhc3NlcnRJbmRleChta21hcCgiZiIsICJmKClcbm1hc3RlciIsICJEL2ciLCAiZygpXG5nMigpIiwgIkUvaCIsICJoKCkiKSk7Ci0JCXJlc2V0SGFyZCh0b3BpYyk7Ci0JCWFzc2VydEluZGV4KG1rbWFwKCJmIiwgImYoKVxuc2lkZSIsICJHL2kiLCAiaSgpIikpOwotCQlhc3NlcnRXb3JrRGlyKG1rbWFwKCJmIiwgImYoKVxuc2lkZSIsICJHL2kiLCAiaSgpIiwgInVudHJhY2tlZCIsCi0JCQkJInVudHJhY2tlZCIpKTsKKwkJCXJlc2V0SGFyZChtYXN0ZXIpOworCQkJYXNzZXJ0SW5kZXgobWttYXAoImYiLCAiZigpXG5tYXN0ZXIiLCAiRC9nIiwgImcoKVxuZzIoKSIsICJFL2giLCAiaCgpIikpOworCQkJcmVzZXRIYXJkKHRvcGljKTsKKwkJCWFzc2VydEluZGV4KG1rbWFwKCJmIiwgImYoKVxuc2lkZSIsICJHL2kiLCAiaSgpIikpOworCQkJYXNzZXJ0V29ya0Rpcihta21hcCgiZiIsICJmKClcbnNpZGUiLCAiRy9pIiwgImkoKSIsICJ1bnRyYWNrZWQiLAorCQkJCQkidW50cmFja2VkIikpOwogCi0JCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5DT05GTElDVElORywgZ2l0Lm1lcmdlKCkuaW5jbHVkZShtYXN0ZXIpCi0JCQkJLmNhbGwoKS5nZXRNZXJnZVN0YXR1cygpKTsKLQkJYXNzZXJ0RXF1YWxzKAotCQkJCSJbRC9nLCBtb2RlOjEwMDY0NCwgc3RhZ2U6MV1bRC9nLCBtb2RlOjEwMDY0NCwgc3RhZ2U6M11bRS9oLCBtb2RlOjEwMDY0NF1bRy9pLCBtb2RlOjEwMDY0NF1bZiwgbW9kZToxMDA2NDQsIHN0YWdlOjFdW2YsIG1vZGU6MTAwNjQ0LCBzdGFnZToyXVtmLCBtb2RlOjEwMDY0NCwgc3RhZ2U6M10iLAotCQkJCWluZGV4U3RhdGUoMCkpOworCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCBnaXQubWVyZ2UoKS5pbmNsdWRlKG1hc3RlcikKKwkJCQkJLmNhbGwoKS5nZXRNZXJnZVN0YXR1cygpKTsKKwkJCWFzc2VydEVxdWFscygKKwkJCQkJIltEL2csIG1vZGU6MTAwNjQ0LCBzdGFnZToxXVtEL2csIG1vZGU6MTAwNjQ0LCBzdGFnZTozXVtFL2gsIG1vZGU6MTAwNjQ0XVtHL2ksIG1vZGU6MTAwNjQ0XVtmLCBtb2RlOjEwMDY0NCwgc3RhZ2U6MV1bZiwgbW9kZToxMDA2NDQsIHN0YWdlOjJdW2YsIG1vZGU6MTAwNjQ0LCBzdGFnZTozXSIsCisJCQkJCWluZGV4U3RhdGUoMCkpOwogCi0JCXJlc2V0SGFyZChtYXN0ZXIpOwotCQlhc3NlcnRJbmRleChta21hcCgiZiIsICJmKClcbm1hc3RlciIsICJEL2ciLCAiZygpXG5nMigpIiwgIkUvaCIsICJoKCkiKSk7Ci0JCWFzc2VydFdvcmtEaXIobWttYXAoImYiLCAiZigpXG5tYXN0ZXIiLCAiRC9nIiwgImcoKVxuZzIoKSIsICJFL2giLAotCQkJCSJoKCkiLCAidW50cmFja2VkIiwgInVudHJhY2tlZCIpKTsKKwkJCXJlc2V0SGFyZChtYXN0ZXIpOworCQkJYXNzZXJ0SW5kZXgobWttYXAoImYiLCAiZigpXG5tYXN0ZXIiLCAiRC9nIiwgImcoKVxuZzIoKSIsICJFL2giLCAiaCgpIikpOworCQkJYXNzZXJ0V29ya0Rpcihta21hcCgiZiIsICJmKClcbm1hc3RlciIsICJEL2ciLCAiZygpXG5nMigpIiwgIkUvaCIsCisJCQkJCSJoKCkiLCAidW50cmFja2VkIiwgInVudHJhY2tlZCIpKTsKKwkJfQogCX0KIAogCS8qKgpAQCAtMjAwLDIxICsyMDEsMjIgQEAgcHVibGljIHZvaWQgdGVzdFJlc2V0SGFyZCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgTm9GaWxlcGF0dGVybkV4Y2VwdGlvbiwKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RSZXNldEhhcmRGcm9tSW5kZXhFbnRyeVdpdGhvdXRGaWxlVG9UcmVlV2l0aG91dEZpbGUoKQogCQkJdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoIngiLCAieCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIngiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBpZDEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYzEiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgieCIsICJ4Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIngiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgaWQxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImMxIikuY2FsbCgpOwogCi0JCXdyaXRlVHJhc2hGaWxlKCJmL2ciLCAiZi9nIik7Ci0JCWdpdC5ybSgpLmFkZEZpbGVwYXR0ZXJuKCJ4IikuY2FsbCgpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYvZyIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImMyIikuY2FsbCgpOwotCQlkZWxldGVUcmFzaEZpbGUoImYvZyIpOwotCQlkZWxldGVUcmFzaEZpbGUoImYiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmL2ciLCAiZi9nIik7CisJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigieCIpLmNhbGwoKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZi9nIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImMyIikuY2FsbCgpOworCQkJZGVsZXRlVHJhc2hGaWxlKCJmL2ciKTsKKwkJCWRlbGV0ZVRyYXNoRmlsZSgiZiIpOwogCi0JCS8vIFRoZSBhY3R1YWwgdGVzdAotCQlnaXQucmVzZXQoKS5zZXRNb2RlKFJlc2V0VHlwZS5IQVJEKS5zZXRSZWYoaWQxLmdldE5hbWUoKSkuY2FsbCgpOwotCQlhc3NlcnRJbmRleChta21hcCgieCIsICJ4IikpOworCQkJLy8gVGhlIGFjdHVhbCB0ZXN0CisJCQlnaXQucmVzZXQoKS5zZXRNb2RlKFJlc2V0VHlwZS5IQVJEKS5zZXRSZWYoaWQxLmdldE5hbWUoKSkuY2FsbCgpOworCQkJYXNzZXJ0SW5kZXgobWttYXAoIngiLCAieCIpKTsKKwkJfQogCX0KIAogCS8qKgpAQCAtMjI0LDE0ICsyMjYsMTQgQEAgcHVibGljIHZvaWQgdGVzdFJlc2V0SGFyZEZyb21JbmRleEVudHJ5V2l0aG91dEZpbGVUb1RyZWVXaXRob3V0RmlsZSgpCiAJICovCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbENoZWNrb3V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQotCQlUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBkYl90ID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKTsKLQkJQnJhbmNoQnVpbGRlciBtYXN0ZXIgPSBkYl90LmJyYW5jaCgibWFzdGVyIik7Ci0JCW1hc3Rlci5jb21taXQoKS5hZGQoImYiLCAiMSIpLm1lc3NhZ2UoIm0wIikuY3JlYXRlKCk7Ci0JCWFzc2VydEZhbHNlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJmIikuZXhpc3RzKCkpOwotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7Ci0JCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImYiKS5leGlzdHMoKSk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBkYl90ID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKTsKKwkJCUJyYW5jaEJ1aWxkZXIgbWFzdGVyID0gZGJfdC5icmFuY2goIm1hc3RlciIpOworCQkJbWFzdGVyLmNvbW1pdCgpLmFkZCgiZiIsICIxIikubWVzc2FnZSgibTAiKS5jcmVhdGUoKTsKKwkJCWFzc2VydEZhbHNlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJmIikuZXhpc3RzKCkpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOworCQkJYXNzZXJ0VHJ1ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiZiIpLmV4aXN0cygpKTsKKwkJfQogCX0KIAogCXByaXZhdGUgRGlyQ2FjaGVDaGVja291dCByZXNldEhhcmQoUmV2Q29tbWl0IGNvbW1pdCkKQEAgLTE2MTIsNDYgKzE2MTQsNDcgQEAgcHVibGljIHZvaWQgdGVzdEZpbGVNb2RlQ2hhbmdlQW5kQ29udGVudENoYW5nZU5vQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCBhc3NlcnRXb3JrRGlyKE1hcDxTdHJpbmcsIFN0cmluZz4gaSkKIAkJCXRocm93cyBDb3JydXB0T2JqZWN0RXhjZXB0aW9uLAogCQkJSU9FeGNlcHRpb24gewotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJd2Fsay5zZXRSZWN1cnNpdmUoZmFsc2UpOwotCQl3YWxrLmFkZFRyZWUobmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWU7Ci0JCVN0cmluZyBwYXRoOwotCQlpbnQgbnJGaWxlcyA9IDA7Ci0JCUZpbGVUcmVlSXRlcmF0b3IgZnQ7Ci0JCXdoaWxlICh3YWxrLm5leHQoKSkgewotCQkJZnQgPSB3YWxrLmdldFRyZWUoMCwgRmlsZVRyZWVJdGVyYXRvci5jbGFzcyk7Ci0JCQlwYXRoID0gZnQuZ2V0RW50cnlQYXRoU3RyaW5nKCk7Ci0JCQlleHBlY3RlZFZhbHVlID0gaS5nZXQocGF0aCk7Ci0JCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBwYXRoKTsKLQkJCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWFzc2VydE5vdE51bGwoImZvdW5kIHVuZXhwZWN0ZWQgZmlsZSBmb3IgcGF0aCAiICsgcGF0aAotCQkJCQkJKyAiIGluIHdvcmtkaXIiLCBleHBlY3RlZFZhbHVlKTsKLQkJCQlGaWxlSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkJCWJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsoaW50KSBmaWxlLmxlbmd0aCgpXTsKLQkJCQlpbnQgb2Zmc2V0ID0gMDsKLQkJCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCQkJd2hpbGUgKG9mZnNldCA8IGJ1ZmZlci5sZW5ndGgKLQkJCQkJCSYmIChudW1SZWFkID0gaXMucmVhZChidWZmZXIsIG9mZnNldCwgYnVmZmVyLmxlbmd0aAotCQkJCQkJCQktIG9mZnNldCkpID49IDApIHsKLQkJCQkJb2Zmc2V0ICs9IG51bVJlYWQ7Ci0JCQkJfQotCQkJCWlzLmNsb3NlKCk7Ci0JCQkJYXNzZXJ0QXJyYXlFcXVhbHMoInVuZXhwZWN0ZWQgY29udGVudCBmb3IgcGF0aCAiICsgcGF0aAotCQkJCQkJKyAiIGluIHdvcmtEaXIuICIsIGJ1ZmZlciwgaS5nZXQocGF0aCkuZ2V0Qnl0ZXMoKSk7Ci0JCQkJbnJGaWxlcysrOwotCQkJfSBlbHNlIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkpIHsKLQkJCQlpZiAoZmlsZS5saXN0KCkubGVuZ3RoID09IDApIHsKLQkJCQkJYXNzZXJ0RXF1YWxzKCJmb3VuZCB1bmV4cGVjdGVkIGVtcHR5IGZvbGRlciBmb3IgcGF0aCAiCi0JCQkJCQkJKyBwYXRoICsgIiBpbiB3b3JrRGlyLiAiLCAiLyIsIGkuZ2V0KHBhdGgpKTsKKwkJdHJ5IChUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJd2Fsay5zZXRSZWN1cnNpdmUoZmFsc2UpOworCQkJd2Fsay5hZGRUcmVlKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKSk7CisJCQlTdHJpbmcgZXhwZWN0ZWRWYWx1ZTsKKwkJCVN0cmluZyBwYXRoOworCQkJaW50IG5yRmlsZXMgPSAwOworCQkJRmlsZVRyZWVJdGVyYXRvciBmdDsKKwkJCXdoaWxlICh3YWxrLm5leHQoKSkgeworCQkJCWZ0ID0gd2Fsay5nZXRUcmVlKDAsIEZpbGVUcmVlSXRlcmF0b3IuY2xhc3MpOworCQkJCXBhdGggPSBmdC5nZXRFbnRyeVBhdGhTdHJpbmcoKTsKKwkJCQlleHBlY3RlZFZhbHVlID0gaS5nZXQocGF0aCk7CisJCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgcGF0aCk7CisJCQkJYXNzZXJ0VHJ1ZShmaWxlLmV4aXN0cygpKTsKKwkJCQlpZiAoZmlsZS5pc0ZpbGUoKSkgeworCQkJCQlhc3NlcnROb3ROdWxsKCJmb3VuZCB1bmV4cGVjdGVkIGZpbGUgZm9yIHBhdGggIiArIHBhdGgKKwkJCQkJCQkrICIgaW4gd29ya2RpciIsIGV4cGVjdGVkVmFsdWUpOworCQkJCQlGaWxlSW5wdXRTdHJlYW0gaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOworCQkJCQlieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbKGludCkgZmlsZS5sZW5ndGgoKV07CisJCQkJCWludCBvZmZzZXQgPSAwOworCQkJCQlpbnQgbnVtUmVhZCA9IDA7CisJCQkJCXdoaWxlIChvZmZzZXQgPCBidWZmZXIubGVuZ3RoCisJCQkJCQkJJiYgKG51bVJlYWQgPSBpcy5yZWFkKGJ1ZmZlciwgb2Zmc2V0LCBidWZmZXIubGVuZ3RoCisJCQkJCQkJCQktIG9mZnNldCkpID49IDApIHsKKwkJCQkJCW9mZnNldCArPSBudW1SZWFkOworCQkJCQl9CisJCQkJCWlzLmNsb3NlKCk7CisJCQkJCWFzc2VydEFycmF5RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgZm9yIHBhdGggIiArIHBhdGgKKwkJCQkJCQkrICIgaW4gd29ya0Rpci4gIiwgYnVmZmVyLCBpLmdldChwYXRoKS5nZXRCeXRlcygpKTsKIAkJCQkJbnJGaWxlcysrOworCQkJCX0gZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7CisJCQkJCWlmIChmaWxlLmxpc3QoKS5sZW5ndGggPT0gMCkgeworCQkJCQkJYXNzZXJ0RXF1YWxzKCJmb3VuZCB1bmV4cGVjdGVkIGVtcHR5IGZvbGRlciBmb3IgcGF0aCAiCisJCQkJCQkJCSsgcGF0aCArICIgaW4gd29ya0Rpci4gIiwgIi8iLCBpLmdldChwYXRoKSk7CisJCQkJCQluckZpbGVzKys7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKHdhbGsuaXNTdWJ0cmVlKCkpIHsKKwkJCQkJd2Fsay5lbnRlclN1YnRyZWUoKTsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAod2Fsay5pc1N1YnRyZWUoKSkgewotCQkJCXdhbGsuZW50ZXJTdWJ0cmVlKCk7Ci0JCQl9CisJCQlhc3NlcnRFcXVhbHMoIldvcmtEaXIgaGFzIG5vdCB0aGUgcmlnaHQgc2l6ZS4iLCBpLnNpemUoKSwgbnJGaWxlcyk7CiAJCX0KLQkJYXNzZXJ0RXF1YWxzKCJXb3JrRGlyIGhhcyBub3QgdGhlIHJpZ2h0IHNpemUuIiwgaS5zaXplKCksIG5yRmlsZXMpOwogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvSW5kZXhEaWZmVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9JbmRleERpZmZUZXN0LmphdmEKaW5kZXggN2ZjZWUzZC4uMThjOTU5NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9JbmRleERpZmZUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9JbmRleERpZmZUZXN0LmphdmEKQEAgLTc3LDcgKzc3LDYgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSU87CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCiBwdWJsaWMgY2xhc3MgSW5kZXhEaWZmVGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CiAKIAlzdGF0aWMgUGF0aEVkaXQgYWRkKGZpbmFsIFJlcG9zaXRvcnkgZGIsIGZpbmFsIEZpbGUgd29ya2RpciwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvUmFjeUdpdFRlc3RzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1JhY3lHaXRUZXN0cy5qYXZhCmluZGV4IDk5ZDY4MDEuLmFhNDZkMWEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvUmFjeUdpdFRlc3RzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9SYWN5R2l0VGVzdHMuamF2YQpAQCAtODIsMzggKzgyLDQyIEBAIHB1YmxpYyB2b2lkIHRlc3RJdGVyYXRvcigpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sIElPRXhjZXB0aW9uLAogCQl9CiAJCUZpbGVUcmVlSXRlcmF0b3JXaXRoVGltZUNvbnRyb2wgZmlsZUl0ID0gbmV3IEZpbGVUcmVlSXRlcmF0b3JXaXRoVGltZUNvbnRyb2woCiAJCQkJZGIsIG1vZFRpbWVzKTsKLQkJTmFtZUNvbmZsaWN0VHJlZVdhbGsgdHcgPSBuZXcgTmFtZUNvbmZsaWN0VHJlZVdhbGsoZGIpOwotCQl0dy5hZGRUcmVlKGZpbGVJdCk7Ci0JCXR3LnNldFJlY3Vyc2l2ZSh0cnVlKTsKLQkJRmlsZVRyZWVJdGVyYXRvciB0OwotCQlsb25nIHQwID0gMDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQlhc3NlcnRUcnVlKHR3Lm5leHQoKSk7Ci0JCQl0ID0gdHcuZ2V0VHJlZSgwLCBGaWxlVHJlZUl0ZXJhdG9yLmNsYXNzKTsKLQkJCWlmIChpID09IDApCi0JCQkJdDAgPSB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCk7Ci0JCQllbHNlCi0JCQkJYXNzZXJ0RXF1YWxzKHQwLCB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCkpOwotCQl9Ci0JCWxvbmcgdDEgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJCWFzc2VydFRydWUodHcubmV4dCgpKTsKLQkJCXQgPSB0dy5nZXRUcmVlKDAsIEZpbGVUcmVlSXRlcmF0b3IuY2xhc3MpOwotCQkJaWYgKGkgPT0gMCkgewotCQkJCXQxID0gdC5nZXRFbnRyeUxhc3RNb2RpZmllZCgpOwotCQkJCWFzc2VydFRydWUodDEgPiB0MCk7Ci0JCQl9IGVsc2UKLQkJCQlhc3NlcnRFcXVhbHModDEsIHQuZ2V0RW50cnlMYXN0TW9kaWZpZWQoKSk7Ci0JCX0KLQkJbG9uZyB0MiA9IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQkJYXNzZXJ0VHJ1ZSh0dy5uZXh0KCkpOwotCQkJdCA9IHR3LmdldFRyZWUoMCwgRmlsZVRyZWVJdGVyYXRvci5jbGFzcyk7Ci0JCQlpZiAoaSA9PSAwKSB7Ci0JCQkJdDIgPSB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSh0MiA+IHQxKTsKLQkJCX0gZWxzZQotCQkJCWFzc2VydEVxdWFscyh0MiwgdC5nZXRFbnRyeUxhc3RNb2RpZmllZCgpKTsKKwkJdHJ5IChOYW1lQ29uZmxpY3RUcmVlV2FsayB0dyA9IG5ldyBOYW1lQ29uZmxpY3RUcmVlV2FsayhkYikpIHsKKwkJCXR3LmFkZFRyZWUoZmlsZUl0KTsKKwkJCXR3LnNldFJlY3Vyc2l2ZSh0cnVlKTsKKwkJCUZpbGVUcmVlSXRlcmF0b3IgdDsKKwkJCWxvbmcgdDAgPSAwOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJYXNzZXJ0VHJ1ZSh0dy5uZXh0KCkpOworCQkJCXQgPSB0dy5nZXRUcmVlKDAsIEZpbGVUcmVlSXRlcmF0b3IuY2xhc3MpOworCQkJCWlmIChpID09IDApIHsKKwkJCQkJdDAgPSB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXNzZXJ0RXF1YWxzKHQwLCB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCkpOworCQkJCX0KKwkJCX0KKwkJCWxvbmcgdDEgPSAwOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJYXNzZXJ0VHJ1ZSh0dy5uZXh0KCkpOworCQkJCXQgPSB0dy5nZXRUcmVlKDAsIEZpbGVUcmVlSXRlcmF0b3IuY2xhc3MpOworCQkJCWlmIChpID09IDApIHsKKwkJCQkJdDEgPSB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCk7CisJCQkJCWFzc2VydFRydWUodDEgPiB0MCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXNzZXJ0RXF1YWxzKHQxLCB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCkpOworCQkJCX0KKwkJCX0KKwkJCWxvbmcgdDIgPSAwOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJYXNzZXJ0VHJ1ZSh0dy5uZXh0KCkpOworCQkJCXQgPSB0dy5nZXRUcmVlKDAsIEZpbGVUcmVlSXRlcmF0b3IuY2xhc3MpOworCQkJCWlmIChpID09IDApIHsKKwkJCQkJdDIgPSB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCk7CisJCQkJCWFzc2VydFRydWUodDIgPiB0MSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXNzZXJ0RXF1YWxzKHQyLCB0LmdldEVudHJ5TGFzdE1vZGlmaWVkKCkpOworCQkJCX0KKwkJCX0KIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9SZWZsb2dDb25maWdUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1JlZmxvZ0NvbmZpZ1Rlc3QuamF2YQppbmRleCA3YjZkN2Q0Li5kZjFhNTJkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1JlZmxvZ0NvbmZpZ1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1JlZmxvZ0NvbmZpZ1Rlc3QuamF2YQpAQCAtNzAsOCArNzAsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0bG9nQWxsUmVmVXBkYXRlcygpIHRocm93cyBFeGNlcHRpb24gewogCiAJCS8vIGRvIG9uZSBjb21taXQgYW5kIGNoZWNrIHRoYXQgcmVmbG9nIHNpemUgaXMgMDogbm8gcmVmbG9ncyBzaG91bGQgYmUKIAkJLy8gd3JpdHRlbgotCQljb21taXQoIkEgQ29tbWl0XG4iLCBuZXcgUGVyc29uSWRlbnQoYXV0aG9yLCBjb21taXRUaW1lLCB0eiksCi0JCQkJbmV3IFBlcnNvbklkZW50KGNvbW1pdHRlciwgY29tbWl0VGltZSwgdHopKTsKKwkJY29tbWl0KCJBIENvbW1pdFxuIiwgY29tbWl0VGltZSwgdHopOwogCQljb21taXRUaW1lICs9IDYwICogMTAwMDsKIAkJYXNzZXJ0VHJ1ZSgKIAkJCQkiUmVmbG9nIGZvciBIRUFEIHN0aWxsIGNvbnRhaW4gbm8gZW50cnkiLApAQCAtODMsOCArODIsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0bG9nQWxsUmVmVXBkYXRlcygpIHRocm93cyBFeGNlcHRpb24gewogCQlhc3NlcnRUcnVlKGNmZy5nZXQoQ29yZUNvbmZpZy5LRVkpLmlzTG9nQWxsUmVmVXBkYXRlcygpKTsKIAogCQkvLyBkbyBvbmUgY29tbWl0IGFuZCBjaGVjayB0aGF0IHJlZmxvZyBzaXplIGlzIGluY3JlYXNlZCB0byAxCi0JCWNvbW1pdCgiQSBDb21taXRcbiIsIG5ldyBQZXJzb25JZGVudChhdXRob3IsIGNvbW1pdFRpbWUsIHR6KSwKLQkJCQluZXcgUGVyc29uSWRlbnQoY29tbWl0dGVyLCBjb21taXRUaW1lLCB0eikpOworCQljb21taXQoIkEgQ29tbWl0XG4iLCBjb21taXRUaW1lLCB0eik7CiAJCWNvbW1pdFRpbWUgKz0gNjAgKiAxMDAwOwogCQlhc3NlcnRUcnVlKAogCQkJCSJSZWZsb2cgZm9yIEhFQUQgc2hvdWxkIGNvbnRhaW4gb25lIGVudHJ5IiwKQEAgLTk2LDE4ICs5NCwxNyBAQCBwdWJsaWMgdm9pZCB0ZXN0bG9nQWxsUmVmVXBkYXRlcygpIHRocm93cyBFeGNlcHRpb24gewogCQlhc3NlcnRGYWxzZShjZmcuZ2V0KENvcmVDb25maWcuS0VZKS5pc0xvZ0FsbFJlZlVwZGF0ZXMoKSk7CiAKIAkJLy8gZG8gb25lIGNvbW1pdCBhbmQgY2hlY2sgdGhhdCByZWZsb2cgc2l6ZSBpcyAyCi0JCWNvbW1pdCgiQSBDb21taXRcbiIsIG5ldyBQZXJzb25JZGVudChhdXRob3IsIGNvbW1pdFRpbWUsIHR6KSwKLQkJCQluZXcgUGVyc29uSWRlbnQoY29tbWl0dGVyLCBjb21taXRUaW1lLCB0eikpOworCQljb21taXQoIkEgQ29tbWl0XG4iLCBjb21taXRUaW1lLCB0eik7CiAJCWFzc2VydFRydWUoCiAJCQkJIlJlZmxvZyBmb3IgSEVBRCBzaG91bGQgY29udGFpbiB0d28gZW50cmllcyIsCiAJCQkJZGIuZ2V0UmVmbG9nUmVhZGVyKENvbnN0YW50cy5IRUFEKS5nZXRSZXZlcnNlRW50cmllcygpLnNpemUoKSA9PSAyKTsKIAl9CiAKLQlwcml2YXRlIHZvaWQgY29tbWl0KFN0cmluZyBjb21taXRNc2csIFBlcnNvbklkZW50IGF1dGhvciwKLQkJCVBlcnNvbklkZW50IGNvbW1pdHRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwlwcml2YXRlIHZvaWQgY29tbWl0KFN0cmluZyBjb21taXRNc2csIGxvbmcgY29tbWl0VGltZSwgaW50IHR6KQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJZmluYWwgQ29tbWl0QnVpbGRlciBjb21taXQgPSBuZXcgQ29tbWl0QnVpbGRlcigpOwotCQljb21taXQuc2V0QXV0aG9yKGF1dGhvcik7Ci0JCWNvbW1pdC5zZXRDb21taXR0ZXIoY29tbWl0dGVyKTsKKwkJY29tbWl0LnNldEF1dGhvcihuZXcgUGVyc29uSWRlbnQoYXV0aG9yLCBjb21taXRUaW1lLCB0eikpOworCQljb21taXQuc2V0Q29tbWl0dGVyKG5ldyBQZXJzb25JZGVudChjb21taXR0ZXIsIGNvbW1pdFRpbWUsIHR6KSk7CiAJCWNvbW1pdC5zZXRNZXNzYWdlKGNvbW1pdE1zZyk7CiAJCU9iamVjdElkIGlkOwogCQl0cnkgKE9iamVjdEluc2VydGVyIGluc2VydGVyID0gZGIubmV3T2JqZWN0SW5zZXJ0ZXIoKSkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9SZWZsb2dSZXNvbHZlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9SZWZsb2dSZXNvbHZlVGVzdC5qYXZhCmluZGV4IDc1ZDc0ZmMuLjdkYjlmNjAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvUmVmbG9nUmVzb2x2ZVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1JlZmxvZ1Jlc29sdmVUZXN0LmphdmEKQEAgLTYwLDExNyArNjAsMTIzIEBAIHB1YmxpYyBjbGFzcyBSZWZsb2dSZXNvbHZlVGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHJlc29sdmVNYXN0ZXJDb21taXRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudDIiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImVkaXQgZmlsZSIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGMxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQyIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGMyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImVkaXQgZmlsZSIpLmNhbGwoKTsKIAotCQlhc3NlcnRFcXVhbHMoYzIsIGRiLnJlc29sdmUoIm1hc3RlckB7MH0iKSk7Ci0JCWFzc2VydEVxdWFscyhjMSwgZGIucmVzb2x2ZSgibWFzdGVyQHsxfSIpKTsKKwkJCWFzc2VydEVxdWFscyhjMiwgZGIucmVzb2x2ZSgibWFzdGVyQHswfSIpKTsKKwkJCWFzc2VydEVxdWFscyhjMSwgZGIucmVzb2x2ZSgibWFzdGVyQHsxfSIpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgcmVzb2x2ZVVubmFtZWRDdXJyZW50QnJhbmNoQ29tbWl0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQyIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlZGl0IGZpbGUiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50MiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlZGl0IGZpbGUiKS5jYWxsKCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGMyLCBkYi5yZXNvbHZlKCJtYXN0ZXJAezB9IikpOwotCQlhc3NlcnRFcXVhbHMoYzEsIGRiLnJlc29sdmUoIm1hc3RlckB7MX0iKSk7CisJCQlhc3NlcnRFcXVhbHMoYzIsIGRiLnJlc29sdmUoIm1hc3RlckB7MH0iKSk7CisJCQlhc3NlcnRFcXVhbHMoYzEsIGRiLnJlc29sdmUoIm1hc3RlckB7MX0iKSk7CiAKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldE5hbWUoIm5ld2JyYW5jaCIpCi0JCQkJLnNldFN0YXJ0UG9pbnQoYzEpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5zZXROYW1lKCJuZXdicmFuY2giKQorCQkJCQkuc2V0U3RhcnRQb2ludChjMSkuY2FsbCgpOwogCi0JCS8vIHNhbWUgYXMgY3VycmVudCBicmFuY2gsIGUuZy4gbWFzdGVyCi0JCWFzc2VydEVxdWFscyhjMSwgZGIucmVzb2x2ZSgiQHswfSIpKTsKLQkJdHJ5IHsKKwkJCS8vIHNhbWUgYXMgY3VycmVudCBicmFuY2gsIGUuZy4gbWFzdGVyCisJCQlhc3NlcnRFcXVhbHMoYzEsIGRiLnJlc29sdmUoIkB7MH0iKSk7CisJCQl0cnkgeworCQkJCWFzc2VydEVxdWFscyhjMSwgZGIucmVzb2x2ZSgiQHsxfSIpKTsKKwkJCQlmYWlsKCk7IC8vIExvb2tpbmcgYXQgd3JvbmcgcmVmLCBlLmcgSEVBRAorCQkJfSBjYXRjaCAoUmV2aXNpb25TeW50YXhFeGNlcHRpb24gZSkgeworCQkJCWFzc2VydE5vdE51bGwoZSk7CisJCQl9CisKKwkJCS8vIGRldGFjaGVkIGhlYWQsIHJlYWQgSEVBRCByZWZsb2cKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoYzIuZ2V0TmFtZSgpKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoYzIsIGRiLnJlc29sdmUoIkB7MH0iKSk7CiAJCQlhc3NlcnRFcXVhbHMoYzEsIGRiLnJlc29sdmUoIkB7MX0iKSk7Ci0JCQlmYWlsKCk7IC8vIExvb2tpbmcgYXQgd3JvbmcgcmVmLCBlLmcgSEVBRAotCQl9IGNhdGNoIChSZXZpc2lvblN5bnRheEV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnROb3ROdWxsKGUpOworCQkJYXNzZXJ0RXF1YWxzKGMyLCBkYi5yZXNvbHZlKCJAezJ9IikpOwogCQl9Ci0KLQkJLy8gZGV0YWNoZWQgaGVhZCwgcmVhZCBIRUFEIHJlZmxvZwotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGMyLmdldE5hbWUoKSkuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoYzIsIGRiLnJlc29sdmUoIkB7MH0iKSk7Ci0JCWFzc2VydEVxdWFscyhjMSwgZGIucmVzb2x2ZSgiQHsxfSIpKTsKLQkJYXNzZXJ0RXF1YWxzKGMyLCBkYi5yZXNvbHZlKCJAezJ9IikpOwogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgcmVzb2x2ZVJlZmxvZ1BhcmVudCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQyIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlZGl0IGZpbGUiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50MiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlZGl0IGZpbGUiKS5jYWxsKCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGMxLCBkYi5yZXNvbHZlKCJtYXN0ZXJAezB9fjEiKSk7CisJCQlhc3NlcnRFcXVhbHMoYzEsIGRiLnJlc29sdmUoIm1hc3RlckB7MH1+MSIpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgcmVzb2x2ZU5vbkV4aXN0aW5nQnJhbmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwotCQlhc3NlcnROdWxsKGRiLnJlc29sdmUoIm5vdGFicmFuY2hAezd9IikpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCQlhc3NlcnROdWxsKGRiLnJlc29sdmUoIm5vdGFicmFuY2hAezd9IikpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCByZXNvbHZlUHJldmlvdXNCcmFuY2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOwotCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50MiIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOwotCQlSZXZDb21taXQgYzIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZWRpdCBmaWxlIikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudDIiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgYzIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZWRpdCBmaWxlIikuY2FsbCgpOwogCi0JCWdpdC5jaGVja291dCgpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5zZXROYW1lKCJuZXdicmFuY2giKQotCQkJCS5zZXRTdGFydFBvaW50KGMxKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0TmFtZSgibmV3YnJhbmNoIikKKwkJCQkJLnNldFN0YXJ0UG9pbnQoYzEpLmNhbGwoKTsKIAotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGMxLmdldE5hbWUoKSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShjMS5nZXROYW1lKCkpLmNhbGwoKTsKIAotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CiAKLQkJYXNzZXJ0RXF1YWxzKGMxLmdldE5hbWUoKSwgZGIuc2ltcGxpZnkoIkB7LTF9IikpOwotCQlhc3NlcnRFcXVhbHMoIm5ld2JyYW5jaCIsIGRiLnNpbXBsaWZ5KCJAey0yfSIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJtYXN0ZXIiLCBkYi5zaW1wbGlmeSgiQHstM30iKSk7CisJCQlhc3NlcnRFcXVhbHMoYzEuZ2V0TmFtZSgpLCBkYi5zaW1wbGlmeSgiQHstMX0iKSk7CisJCQlhc3NlcnRFcXVhbHMoIm5ld2JyYW5jaCIsIGRiLnNpbXBsaWZ5KCJAey0yfSIpKTsKKwkJCWFzc2VydEVxdWFscygibWFzdGVyIiwgZGIuc2ltcGxpZnkoIkB7LTN9IikpOwogCi0JCS8vIGNoYWluZWQgZXhwcmVzc2lvbgotCQl0cnkgewotCQkJLy8gQ2Fubm90IHJlZmVyIHRvIHJlZmxvZyBvZiBkZXRhY2hlZCBoZWFkCi0JCQlkYi5yZXNvbHZlKCJAey0xfUB7MH0iKTsKLQkJCWZhaWwoKTsKLQkJfSBjYXRjaCAoUmV2aXNpb25TeW50YXhFeGNlcHRpb24gZSkgewotCQkJLy8gZ29vZAorCQkJLy8gY2hhaW5lZCBleHByZXNzaW9uCisJCQl0cnkgeworCQkJCS8vIENhbm5vdCByZWZlciB0byByZWZsb2cgb2YgZGV0YWNoZWQgaGVhZAorCQkJCWRiLnJlc29sdmUoIkB7LTF9QHswfSIpOworCQkJCWZhaWwoKTsKKwkJCX0gY2F0Y2ggKFJldmlzaW9uU3ludGF4RXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBnb29kCisJCQl9CisJCQlhc3NlcnRFcXVhbHMoYzEuZ2V0TmFtZSgpLCBkYi5yZXNvbHZlKCJAey0yfUB7MH0iKS5nZXROYW1lKCkpOworCisJCQlhc3NlcnRFcXVhbHMoYzIuZ2V0TmFtZSgpLCBkYi5yZXNvbHZlKCJAey0zfUB7MH0iKS5nZXROYW1lKCkpOwogCQl9Ci0JCWFzc2VydEVxdWFscyhjMS5nZXROYW1lKCksIGRiLnJlc29sdmUoIkB7LTJ9QHswfSIpLmdldE5hbWUoKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKGMyLmdldE5hbWUoKSwgZGIucmVzb2x2ZSgiQHstM31AezB9IikuZ2V0TmFtZSgpKTsKIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHJlc29sdmVEYXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwotCQl0cnkgewotCQkJZGIucmVzb2x2ZSgibWFzdGVyQHt5ZXN0ZXJkYXl9Iik7Ci0JCQlmYWlsKCJFeGNlcHRpb24gbm90IHRocm93biIpOwotCQl9IGNhdGNoIChSZXZpc2lvblN5bnRheEV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnROb3ROdWxsKGUpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCQl0cnkgeworCQkJCWRiLnJlc29sdmUoIm1hc3RlckB7eWVzdGVyZGF5fSIpOworCQkJCWZhaWwoIkV4Y2VwdGlvbiBub3QgdGhyb3duIik7CisJCQl9IGNhdGNoIChSZXZpc2lvblN5bnRheEV4Y2VwdGlvbiBlKSB7CisJCQkJYXNzZXJ0Tm90TnVsbChlKTsKKwkJCX0KIAkJfQogCX0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1JlcG9zaXRvcnlSZXNvbHZlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9SZXBvc2l0b3J5UmVzb2x2ZVRlc3QuamF2YQppbmRleCBjOWVhMjg2Li4xZDJhNGU5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1JlcG9zaXRvcnlSZXNvbHZlVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvUmVwb3NpdG9yeVJlc29sdmVUZXN0LmphdmEKQEAgLTI2NywzNSArMjY3LDM3IEBAIHB1YmxpYyB2b2lkIHRlc3RQYXJzZUxvb2t1cFBhdGgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCByZXNvbHZlRXhwclNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKLQkJYXNzZXJ0RXF1YWxzKCJtYXN0ZXIiLCBkYi5zaW1wbGlmeSgibWFzdGVyIikpOwotCQlhc3NlcnRFcXVhbHMoInJlZnMvaGVhZHMvbWFzdGVyIiwgZGIuc2ltcGxpZnkoInJlZnMvaGVhZHMvbWFzdGVyIikpOwotCQlhc3NlcnRFcXVhbHMoIkhFQUQiLCBkYi5zaW1wbGlmeSgiSEVBRCIpKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKCJtYXN0ZXIiLCBkYi5zaW1wbGlmeSgibWFzdGVyIikpOworCQkJYXNzZXJ0RXF1YWxzKCJyZWZzL2hlYWRzL21hc3RlciIsIGRiLnNpbXBsaWZ5KCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydEVxdWFscygiSEVBRCIsIGRiLnNpbXBsaWZ5KCJIRUFEIikpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCByZXNvbHZlVXBzdHJlYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOwotCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlMi50eHQiLCAiY29udGVudCIpOwotCQlSZWZVcGRhdGUgdXBkYXRlUmVtb3RlUmVmID0gZGIudXBkYXRlUmVmKCJyZWZzL3JlbW90ZXMvb3JpZ2luL21haW4iKTsKLQkJdXBkYXRlUmVtb3RlUmVmLnNldE5ld09iamVjdElkKGMxKTsKLQkJdXBkYXRlUmVtb3RlUmVmLnVwZGF0ZSgpOwotCQlkYi5nZXRDb25maWcoKS5zZXRTdHJpbmcoImJyYW5jaCIsICJtYXN0ZXIiLCAicmVtb3RlIiwgIm9yaWdpbiIpOwotCQlkYi5nZXRDb25maWcoKQotCQkJCS5zZXRTdHJpbmcoImJyYW5jaCIsICJtYXN0ZXIiLCAibWVyZ2UiLCAicmVmcy9oZWFkcy9tYWluIik7Ci0JCWRiLmdldENvbmZpZygpLnNldFN0cmluZygicmVtb3RlIiwgIm9yaWdpbiIsICJ1cmwiLAotCQkJCSJnaXQ6Ly9leGFtcGxlLmNvbS9oZXJlIik7Ci0JCWRiLmdldENvbmZpZygpLnNldFN0cmluZygicmVtb3RlIiwgIm9yaWdpbiIsICJmZXRjaCIsCi0JCQkJIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTIudHh0IikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscygicmVmcy9yZW1vdGVzL29yaWdpbi9tYWluIiwgZGIuc2ltcGxpZnkoIkB7dXBzdHJlYW19IikpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgYzEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTIudHh0IiwgImNvbnRlbnQiKTsKKwkJCVJlZlVwZGF0ZSB1cGRhdGVSZW1vdGVSZWYgPSBkYi51cGRhdGVSZWYoInJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFpbiIpOworCQkJdXBkYXRlUmVtb3RlUmVmLnNldE5ld09iamVjdElkKGMxKTsKKwkJCXVwZGF0ZVJlbW90ZVJlZi51cGRhdGUoKTsKKwkJCWRiLmdldENvbmZpZygpLnNldFN0cmluZygiYnJhbmNoIiwgIm1hc3RlciIsICJyZW1vdGUiLCAib3JpZ2luIik7CisJCQlkYi5nZXRDb25maWcoKQorCQkJCQkuc2V0U3RyaW5nKCJicmFuY2giLCAibWFzdGVyIiwgIm1lcmdlIiwgInJlZnMvaGVhZHMvbWFpbiIpOworCQkJZGIuZ2V0Q29uZmlnKCkuc2V0U3RyaW5nKCJyZW1vdGUiLCAib3JpZ2luIiwgInVybCIsCisJCQkJCSJnaXQ6Ly9leGFtcGxlLmNvbS9oZXJlIik7CisJCQlkYi5nZXRDb25maWcoKS5zZXRTdHJpbmcoInJlbW90ZSIsICJvcmlnaW4iLCAiZmV0Y2giLAorCQkJCQkiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTIudHh0IikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKCJyZWZzL3JlbW90ZXMvb3JpZ2luL21haW4iLCBkYi5zaW1wbGlmeSgiQHt1cHN0cmVhbX0iKSk7CisJCX0KIAl9CiAKIAlAVGVzdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1JlY3Vyc2l2ZU1lcmdlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9SZWN1cnNpdmVNZXJnZXJUZXN0LmphdmEKaW5kZXggN2VmNjQ0OC4uMGU3MTA5YyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1JlY3Vyc2l2ZU1lcmdlclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVjdXJzaXZlTWVyZ2VyVGVzdC5qYXZhCkBAIC04NzIsMzIgKzg3MiwzMSBAQCBwcml2YXRlIGJvb2xlYW4gdmFsaWRhdGVTdGF0ZXMoSW5kZXhTdGF0ZSBpbmRleFN0YXRlLAogCiAJcHJpdmF0ZSBTdHJpbmcgY29udGVudEFzU3RyaW5nKFJlcG9zaXRvcnkgciwgT2JqZWN0SWQgdHJlZUlkLCBTdHJpbmcgcGF0aCkKIAkJCXRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKHIpOwotCQl0dy5hZGRUcmVlKHRyZWVJZCk7Ci0JCXR3LnNldEZpbHRlcihQYXRoRmlsdGVyLmNyZWF0ZShwYXRoKSk7Ci0JCXR3LnNldFJlY3Vyc2l2ZSh0cnVlKTsKLQkJaWYgKCF0dy5uZXh0KCkpCi0JCQlyZXR1cm4gbnVsbDsKLQkJQW55T2JqZWN0SWQgYmxvYklkID0gdHcuZ2V0T2JqZWN0SWQoMCk7CisJCUFueU9iamVjdElkIGJsb2JJZDsKKwkJdHJ5IChUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhyKSkgeworCQkJdHcuYWRkVHJlZSh0cmVlSWQpOworCQkJdHcuc2V0RmlsdGVyKFBhdGhGaWx0ZXIuY3JlYXRlKHBhdGgpKTsKKwkJCXR3LnNldFJlY3Vyc2l2ZSh0cnVlKTsKKwkJCWlmICghdHcubmV4dCgpKSB7CisJCQkJcmV0dXJuIG51bGw7CisJCQl9CisJCQlibG9iSWQgPSB0dy5nZXRPYmplY3RJZCgwKTsKKwkJfQogCiAJCVN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJQnVmZmVyZWRSZWFkZXIgYnIgPSBudWxsOwogCQlPYmplY3RSZWFkZXIgb3IgPSByLm5ld09iamVjdFJlYWRlcigpOwotCQl0cnkgewotCQkJYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKG9yLm9wZW4oYmxvYklkKQotCQkJCQkub3BlblN0cmVhbSgpKSk7CisJCXRyeSAoQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoCisJCQkJbmV3IElucHV0U3RyZWFtUmVhZGVyKG9yLm9wZW4oYmxvYklkKS5vcGVuU3RyZWFtKCkpKSkgewogCQkJU3RyaW5nIGxpbmU7CiAJCQlib29sZWFuIGZpcnN0ID0gdHJ1ZTsKIAkJCXdoaWxlICgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLQkJCQlpZiAoIWZpcnN0KQorCQkJCWlmICghZmlyc3QpIHsKIAkJCQkJcmVzdWx0LmFwcGVuZCgnXG4nKTsKKwkJCQl9CiAJCQkJcmVzdWx0LmFwcGVuZChsaW5lKTsKIAkJCQlmaXJzdCA9IGZhbHNlOwogCQkJfQogCQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCQl9IGZpbmFsbHkgewotCQkJaWYgKGJyICE9IG51bGwpCi0JCQkJYnIuY2xvc2UoKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9SZXNvbHZlTWVyZ2VyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXJUZXN0LmphdmEKaW5kZXggNjc0NjE5Zi4uNTViYjkzYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXJUZXN0LmphdmEKQEAgLTg4LDM1ICs4OCwzNiBAQCBwdWJsaWMgdm9pZCBmYWlsaW5nRGVsZXRlT2ZEaXJlY3RvcnlXaXRoVW50cmFja2VkQ29udGVudCgKIAkJZmlsZSA9IG5ldyBGaWxlKGZvbGRlcjEsICJmaWxlMi50eHQiKTsKIAkJd3JpdGUoZmlsZSwgImZvbGRlcjEtLWZpbGUyLnR4dCIpOwogCi0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKGZvbGRlcjEuZ2V0TmFtZSgpKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBiYXNlID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmb2xkZXIiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oZm9sZGVyMS5nZXROYW1lKCkpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBiYXNlID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmb2xkZXIiKS5jYWxsKCk7CiAKLQkJcmVjdXJzaXZlRGVsZXRlKGZvbGRlcjEpOwotCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiZm9sZGVyMS9maWxlMS50eHQiKQotCQkJCS5hZGRGaWxlcGF0dGVybigiZm9sZGVyMS9maWxlMi50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBvdGhlciA9IGdpdC5jb21taXQoKQotCQkJCS5zZXRNZXNzYWdlKCJyZW1vdmluZyBmb2xkZXJzIG9uICdvdGhlciciKS5jYWxsKCk7CisJCQlyZWN1cnNpdmVEZWxldGUoZm9sZGVyMSk7CisJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiZm9sZGVyMS9maWxlMS50eHQiKQorCQkJCQkuYWRkRmlsZXBhdHRlcm4oImZvbGRlcjEvZmlsZTIudHh0IikuY2FsbCgpOworCQkJUmV2Q29tbWl0IG90aGVyID0gZ2l0LmNvbW1pdCgpCisJCQkJCS5zZXRNZXNzYWdlKCJyZW1vdmluZyBmb2xkZXJzIG9uICdvdGhlciciKS5jYWxsKCk7CiAKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShiYXNlLm5hbWUoKSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShiYXNlLm5hbWUoKSkuY2FsbCgpOwogCi0JCWZpbGUgPSBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidW5yZWxhdGVkLnR4dCIpOwotCQl3cml0ZShmaWxlLCAidW5yZWxhdGVkIik7CisJCQlmaWxlID0gbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgInVucmVsYXRlZC50eHQiKTsKKwkJCXdyaXRlKGZpbGUsICJ1bnJlbGF0ZWQiKTsKIAotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInVucmVsYXRlZC50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBoZWFkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkFkZGluZyBhbm90aGVyIGZpbGUiKS5jYWxsKCk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInVucmVsYXRlZC50eHQiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgaGVhZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJBZGRpbmcgYW5vdGhlciBmaWxlIikuY2FsbCgpOwogCi0JCS8vIFVudHJhY2tlZCBmaWxlIHRvIGNhdXNlIGZhaWxpbmcgcGF0aCBmb3IgZGVsZXRlKCkgb2YgZm9sZGVyMQotCQkvLyBidXQgdGhhdCdzIG9rLgotCQlmaWxlID0gbmV3IEZpbGUoZm9sZGVyMSwgImZpbGUzLnR4dCIpOwotCQl3cml0ZShmaWxlLCAiZm9sZGVyMS0tZmlsZTMudHh0Iik7CisJCQkvLyBVbnRyYWNrZWQgZmlsZSB0byBjYXVzZSBmYWlsaW5nIHBhdGggZm9yIGRlbGV0ZSgpIG9mIGZvbGRlcjEKKwkJCS8vIGJ1dCB0aGF0J3Mgb2suCisJCQlmaWxlID0gbmV3IEZpbGUoZm9sZGVyMSwgImZpbGUzLnR4dCIpOworCQkJd3JpdGUoZmlsZSwgImZvbGRlcjEtLWZpbGUzLnR4dCIpOwogCi0JCVJlc29sdmVNZXJnZXIgbWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIHN0cmF0ZWd5Lm5ld01lcmdlcihkYiwgZmFsc2UpOwotCQltZXJnZXIuc2V0Q29tbWl0TmFtZXMobmV3IFN0cmluZ1tdIHsgIkJBU0UiLCAiSEVBRCIsICJvdGhlciIgfSk7Ci0JCW1lcmdlci5zZXRXb3JraW5nVHJlZUl0ZXJhdG9yKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKSk7Ci0JCWJvb2xlYW4gb2sgPSBtZXJnZXIubWVyZ2UoaGVhZC5nZXRJZCgpLCBvdGhlci5nZXRJZCgpKTsKLQkJYXNzZXJ0VHJ1ZShvayk7Ci0JCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7CisJCQlSZXNvbHZlTWVyZ2VyIG1lcmdlciA9IChSZXNvbHZlTWVyZ2VyKSBzdHJhdGVneS5uZXdNZXJnZXIoZGIsIGZhbHNlKTsKKwkJCW1lcmdlci5zZXRDb21taXROYW1lcyhuZXcgU3RyaW5nW10geyAiQkFTRSIsICJIRUFEIiwgIm90aGVyIiB9KTsKKwkJCW1lcmdlci5zZXRXb3JraW5nVHJlZUl0ZXJhdG9yKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKSk7CisJCQlib29sZWFuIG9rID0gbWVyZ2VyLm1lcmdlKGhlYWQuZ2V0SWQoKSwgb3RoZXIuZ2V0SWQoKSk7CisJCQlhc3NlcnRUcnVlKG9rKTsKKwkJCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7CisJCX0KIAl9CiAKIAkvKioKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9TcXVhc2hNZXNzYWdlRm9ybWF0dGVyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1NxdWFzaE1lc3NhZ2VGb3JtYXR0ZXJUZXN0LmphdmEKaW5kZXggY2RkYmJkNS4uN2EyNTg2ZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1NxdWFzaE1lc3NhZ2VGb3JtYXR0ZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1NxdWFzaE1lc3NhZ2VGb3JtYXR0ZXJUZXN0LmphdmEKQEAgLTczLDE3ICs3MywxOCBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJcmV2Q29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNxdWFzaF9tZSIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXJldkNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzcXVhc2hfbWUiKS5jYWxsKCk7CiAKLQkJUmVmIG1hc3RlciA9IGRiLmV4YWN0UmVmKCJyZWZzL2hlYWRzL21hc3RlciIpOwotCQlTdHJpbmcgbWVzc2FnZSA9IG1zZ0Zvcm1hdHRlci5mb3JtYXQoQXJyYXlzLmFzTGlzdChyZXZDb21taXQpLCBtYXN0ZXIpOwotCQlhc3NlcnRFcXVhbHMoCi0JCQkJIlNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOlxuXG5jb21taXQgIgotCQkJCQkJKyByZXZDb21taXQuZ2V0TmFtZSgpICsgIlxuQXV0aG9yOiAiCi0JCQkJCQkrIHJldkNvbW1pdC5nZXRBdXRob3JJZGVudCgpLmdldE5hbWUoKSArICIgPCIKLQkJCQkJCSsgcmV2Q29tbWl0LmdldEF1dGhvcklkZW50KCkuZ2V0RW1haWxBZGRyZXNzKCkKLQkJCQkJCSsgIj5cbkRhdGU6ICAgIiArIGRhdGVGb3JtYXR0ZXIuZm9ybWF0RGF0ZShhdXRob3IpCi0JCQkJCQkrICJcblxuXHRzcXVhc2hfbWVcbiIsIG1lc3NhZ2UpOworCQkJUmVmIG1hc3RlciA9IGRiLmV4YWN0UmVmKCJyZWZzL2hlYWRzL21hc3RlciIpOworCQkJU3RyaW5nIG1lc3NhZ2UgPSBtc2dGb3JtYXR0ZXIuZm9ybWF0KEFycmF5cy5hc0xpc3QocmV2Q29tbWl0KSwgbWFzdGVyKTsKKwkJCWFzc2VydEVxdWFscygKKwkJCQkJIlNxdWFzaGVkIGNvbW1pdCBvZiB0aGUgZm9sbG93aW5nOlxuXG5jb21taXQgIgorCQkJCQkJCSsgcmV2Q29tbWl0LmdldE5hbWUoKSArICJcbkF1dGhvcjogIgorCQkJCQkJCSsgcmV2Q29tbWl0LmdldEF1dGhvcklkZW50KCkuZ2V0TmFtZSgpICsgIiA8IgorCQkJCQkJCSsgcmV2Q29tbWl0LmdldEF1dGhvcklkZW50KCkuZ2V0RW1haWxBZGRyZXNzKCkKKwkJCQkJCQkrICI+XG5EYXRlOiAgICIgKyBkYXRlRm9ybWF0dGVyLmZvcm1hdERhdGUoYXV0aG9yKQorCQkJCQkJCSsgIlxuXG5cdHNxdWFzaF9tZVxuIiwgbWVzc2FnZSk7CisJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbm90ZXMvTm90ZU1hcFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9ub3Rlcy9Ob3RlTWFwVGVzdC5qYXZhCmluZGV4IDQ1MzlhMDEuLjQ3YjA4YTcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9ub3Rlcy9Ob3RlTWFwVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9ub3Rlcy9Ob3RlTWFwVGVzdC5qYXZhCkBAIC00MDMsMTAgKzQwMywxMiBAQCBwdWJsaWMgdm9pZCB0ZXN0TGVhZlNwbGl0c1doZW5GdWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCX0KIAogCQlSZXZDb21taXQgbiA9IGNvbW1pdE5vdGVNYXAobWFwKTsKLQkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsocmVhZGVyKTsKLQkJdHcucmVzZXQobi5nZXRUcmVlKCkpOwotCQl3aGlsZSAodHcubmV4dCgpKQotCQkJYXNzZXJ0RmFsc2UoIm5vIGZhbi1vdXQgc3VidHJlZSIsIHR3LmlzU3VidHJlZSgpKTsKKwkJdHJ5IChUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhyZWFkZXIpKSB7CisJCQl0dy5yZXNldChuLmdldFRyZWUoKSk7CisJCQl3aGlsZSAodHcubmV4dCgpKSB7CisJCQkJYXNzZXJ0RmFsc2UoIm5vIGZhbi1vdXQgc3VidHJlZSIsIHR3LmlzU3VidHJlZSgpKTsKKwkJCX0KKwkJfQogCiAJCWZvciAoaW50IGkgPSAyNTQ7IGkgPCAyNTY7IGkrKykgewogCQkJaWRCdWYuc2V0Qnl0ZShDb25zdGFudHMuT0JKRUNUX0lEX0xFTkdUSCAtIDEsIGkpOwpAQCAtNDE4LDEzICs0MjAsMTUgQEAgcHVibGljIHZvaWQgdGVzdExlYWZTcGxpdHNXaGVuRnVsbCgpIHRocm93cyBFeGNlcHRpb24gewogCiAJCS8vIFRoZSAwMCBidWNrZXQgaXMgZnVsbHkgc3BsaXQuCiAJCVN0cmluZyBwYXRoID0gZmFub3V0KDM4LCBpZEJ1Zi5uYW1lKCkpOwotCQl0dyA9IFRyZWVXYWxrLmZvclBhdGgocmVhZGVyLCBwYXRoLCBuLmdldFRyZWUoKSk7Ci0JCWFzc2VydE5vdE51bGwoImhhcyAiICsgcGF0aCwgdHcpOworCQl0cnkgKFRyZWVXYWxrIHR3ID0gVHJlZVdhbGsuZm9yUGF0aChyZWFkZXIsIHBhdGgsIG4uZ2V0VHJlZSgpKSkgeworCQkJYXNzZXJ0Tm90TnVsbCgiaGFzICIgKyBwYXRoLCB0dyk7CisJCX0KIAogCQkvLyBUaGUgb3RoZXIgYnVja2V0IGlzIG5vdC4KIAkJcGF0aCA9IGZhbm91dCgyLCBkYXRhMS5uYW1lKCkpOwotCQl0dyA9IFRyZWVXYWxrLmZvclBhdGgocmVhZGVyLCBwYXRoLCBuLmdldFRyZWUoKSk7Ci0JCWFzc2VydE5vdE51bGwoImhhcyAiICsgcGF0aCwgdHcpOworCQl0cnkgKFRyZWVXYWxrIHR3ID0gVHJlZVdhbGsuZm9yUGF0aChyZWFkZXIsIHBhdGgsIG4uZ2V0VHJlZSgpKSkgeworCQkJYXNzZXJ0Tm90TnVsbCgiaGFzICIgKyBwYXRoLCB0dyk7CisJCX0KIAl9CiAKIAlAVGVzdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvT2JqZWN0V2Fsa1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL09iamVjdFdhbGtUZXN0LmphdmEKaW5kZXggOWM5ZWRjMS4uZTVhZDMxMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvT2JqZWN0V2Fsa1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9PYmplY3RXYWxrVGVzdC5qYXZhCkBAIC01Myw3ICs1Myw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuVHJlZUZvcm1hdHRlcjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKIHB1YmxpYyBjbGFzcyBPYmplY3RXYWxrVGVzdCBleHRlbmRzIFJldldhbGtUZXN0Q2FzZSB7CiAJcHJvdGVjdGVkIE9iamVjdFdhbGsgb2JqdzsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2Q29tbWl0TGlzdFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldkNvbW1pdExpc3RUZXN0LmphdmEKaW5kZXggNWVjNmViMy4uNGQ3NTMyMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2Q29tbWl0TGlzdFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZDb21taXRMaXN0VGVzdC5qYXZhCkBAIC01NywxNCArNTcsMTUgQEAgcHVibGljIGNsYXNzIFJldkNvbW1pdExpc3RUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKIAlwcml2YXRlIFJldkNvbW1pdExpc3Q8UmV2Q29tbWl0PiBsaXN0OwogCiAJcHVibGljIHZvaWQgc2V0dXAoaW50IGNvdW50KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCQlnaXQuY29tbWl0KCkuc2V0Q29tbWl0dGVyKGNvbW1pdHRlcikuc2V0QXV0aG9yKGF1dGhvcikKLQkJCQkJLnNldE1lc3NhZ2UoImNvbW1pdCAiICsgaSkuY2FsbCgpOwotCQlsaXN0ID0gbmV3IFJldkNvbW1pdExpc3Q8UmV2Q29tbWl0PigpOwotCQlSZXZXYWxrIHcgPSBuZXcgUmV2V2FsayhkYik7Ci0JCXcubWFya1N0YXJ0KHcubG9va3VwQ29tbWl0KGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKSk7Ci0JCWxpc3Quc291cmNlKHcpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlSZXZXYWxrIHcgPSBuZXcgUmV2V2FsayhkYik7KSB7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCQkJZ2l0LmNvbW1pdCgpLnNldENvbW1pdHRlcihjb21taXR0ZXIpLnNldEF1dGhvcihhdXRob3IpCisJCQkJCQkuc2V0TWVzc2FnZSgiY29tbWl0ICIgKyBpKS5jYWxsKCk7CisJCQlsaXN0ID0gbmV3IFJldkNvbW1pdExpc3Q8UmV2Q29tbWl0PigpOworCQkJdy5tYXJrU3RhcnQody5sb29rdXBDb21taXQoZGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCkpKTsKKwkJCWxpc3Quc291cmNlKHcpOworCQl9CiAJfQogCiAJQFRlc3QKQEAgLTEwNywxNyArMTA4LDE4IEBAIHB1YmxpYyB2b2lkIHRlc3RGaWxsVG9IaWdoTWFya011bGl0cGxlQmxvY2tzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdEZpbGxUb0NvbW1pdCgpIHRocm93cyBFeGNlcHRpb24gewogCQlzZXR1cCgzKTsKIAotCQlSZXZXYWxrIHcgPSBuZXcgUmV2V2FsayhkYik7Ci0JCXcubWFya1N0YXJ0KHcubG9va3VwQ29tbWl0KGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKSk7CisJCXRyeSAoUmV2V2FsayB3ID0gbmV3IFJldldhbGsoZGIpKSB7CisJCQl3Lm1hcmtTdGFydCh3Lmxvb2t1cENvbW1pdChkYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSkpOwogCi0JCXcubmV4dCgpOwotCQlSZXZDb21taXQgYyA9IHcubmV4dCgpOwotCQlhc3NlcnROb3ROdWxsKCJzaG91bGQgaGF2ZSBmb3VuZCAyLiBjb21taXQiLCBjKTsKKwkJCXcubmV4dCgpOworCQkJUmV2Q29tbWl0IGMgPSB3Lm5leHQoKTsKKwkJCWFzc2VydE5vdE51bGwoInNob3VsZCBoYXZlIGZvdW5kIDIuIGNvbW1pdCIsIGMpOwogCi0JCWxpc3QuZmlsbFRvKGMsIDUpOwotCQlhc3NlcnRFcXVhbHMoMiwgbGlzdC5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoImNvbW1pdCAxIiwgbGlzdC5nZXQoMSkuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCWFzc2VydE51bGwobGlzdC5nZXQoMykpOworCQkJbGlzdC5maWxsVG8oYywgNSk7CisJCQlhc3NlcnRFcXVhbHMoMiwgbGlzdC5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKCJjb21taXQgMSIsIGxpc3QuZ2V0KDEpLmdldEZ1bGxNZXNzYWdlKCkpOworCQkJYXNzZXJ0TnVsbChsaXN0LmdldCgzKSk7CisJCX0KIAl9CiAKIAlAVGVzdApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2Q29tbWl0UGFyc2VUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZDb21taXRQYXJzZVRlc3QuamF2YQppbmRleCA4ODVjMWI1Li4xYTE1ODQyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZDb21taXRQYXJzZVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZDb21taXRQYXJzZVRlc3QuamF2YQpAQCAtNDUyLDkgKzQ1MiwxMCBAQCBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VfR2l0U3R5bGVNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0UGFyc2VfUHVibGljUGFyc2VNZXRob2QoKQogCQkJdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24gewotCQlPYmplY3RJbnNlcnRlci5Gb3JtYXR0ZXIgZm10ID0gbmV3IE9iamVjdEluc2VydGVyLkZvcm1hdHRlcigpOwogCQlDb21taXRCdWlsZGVyIHNyYyA9IG5ldyBDb21taXRCdWlsZGVyKCk7Ci0JCXNyYy5zZXRUcmVlSWQoZm10LmlkRm9yKENvbnN0YW50cy5PQkpfVFJFRSwgbmV3IGJ5dGVbXSB7fSkpOworCQl0cnkgKE9iamVjdEluc2VydGVyLkZvcm1hdHRlciBmbXQgPSBuZXcgT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyKCkpIHsKKwkJCXNyYy5zZXRUcmVlSWQoZm10LmlkRm9yKENvbnN0YW50cy5PQkpfVFJFRSwgbmV3IGJ5dGVbXSB7fSkpOworCQl9CiAJCXNyYy5zZXRBdXRob3IoYXV0aG9yKTsKIAkJc3JjLnNldENvbW1pdHRlcihjb21taXR0ZXIpOwogCQlzcmMuc2V0TWVzc2FnZSgiVGVzdCBjb21taXRcblxuVGhpcyBpcyBhIHRlc3QuXG4iKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1Jldk9iamVjdFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1Jldk9iamVjdFRlc3QuamF2YQppbmRleCBhNzY4YmVmLi45NWU3Y2E2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZPYmplY3RUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2T2JqZWN0VGVzdC5qYXZhCkBAIC03Myw5ICs3MywxMiBAQCBwdWJsaWMgdm9pZCB0ZXN0RXF1YWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWFzc2VydFRydWUoYTEuZXF1YWxzKChPYmplY3QpIGExKSk7CiAJCWFzc2VydEZhbHNlKGExLmVxdWFscygiIikpOwogCi0JCWZpbmFsIFJldldhbGsgcncyID0gbmV3IFJldldhbGsoZGIpOwotCQlmaW5hbCBSZXZDb21taXQgYTIgPSBydzIucGFyc2VDb21taXQoYTEpOwotCQlmaW5hbCBSZXZDb21taXQgYjIgPSBydzIucGFyc2VDb21taXQoYjEpOworCQlmaW5hbCBSZXZDb21taXQgYTI7CisJCWZpbmFsIFJldkNvbW1pdCBiMjsKKwkJdHJ5IChmaW5hbCBSZXZXYWxrIHJ3MiA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJYTIgPSBydzIucGFyc2VDb21taXQoYTEpOworCQkJYjIgPSBydzIucGFyc2VDb21taXQoYjEpOworCQl9CiAJCWFzc2VydE5vdFNhbWUoYTEsIGEyKTsKIAkJYXNzZXJ0Tm90U2FtZShiMSwgYjIpOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZUYWdQYXJzZVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldlRhZ1BhcnNlVGVzdC5qYXZhCmluZGV4IDgyNTA1Y2EuLmY5NzA0M2IgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldlRhZ1BhcnNlVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldlRhZ1BhcnNlVGVzdC5qYXZhCkBAIC00NjMsMTAgKzQ2MywxMSBAQCBwdWJsaWMgdm9pZCB0ZXN0UGFyc2VfR2l0U3R5bGVNZXNzYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RQYXJzZV9QdWJsaWNQYXJzZU1ldGhvZCgpIHRocm93cyBDb3JydXB0T2JqZWN0RXhjZXB0aW9uIHsKLQkJT2JqZWN0SW5zZXJ0ZXIuRm9ybWF0dGVyIGZtdCA9IG5ldyBPYmplY3RJbnNlcnRlci5Gb3JtYXR0ZXIoKTsKIAkJVGFnQnVpbGRlciBzcmMgPSBuZXcgVGFnQnVpbGRlcigpOwotCQlzcmMuc2V0T2JqZWN0SWQoZm10LmlkRm9yKENvbnN0YW50cy5PQkpfVFJFRSwgbmV3IGJ5dGVbXSB7fSksCi0JCQkJQ29uc3RhbnRzLk9CSl9UUkVFKTsKKwkJdHJ5IChPYmplY3RJbnNlcnRlci5Gb3JtYXR0ZXIgZm10ID0gbmV3IE9iamVjdEluc2VydGVyLkZvcm1hdHRlcigpKSB7CisJCQlzcmMuc2V0T2JqZWN0SWQoZm10LmlkRm9yKENvbnN0YW50cy5PQkpfVFJFRSwgbmV3IGJ5dGVbXSB7fSksCisJCQkJCUNvbnN0YW50cy5PQkpfVFJFRSk7CisJCX0KIAkJc3JjLnNldFRhZ2dlcihjb21taXR0ZXIpOwogCQlzcmMuc2V0VGFnKCJhLnRlc3QiKTsKIAkJc3JjLnNldE1lc3NhZ2UoIlRlc3QgdGFnXG5cblRoaXMgaXMgYSB0ZXN0LlxuIik7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvc3VibW9kdWxlL1N1Ym1vZHVsZUFkZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9zdWJtb2R1bGUvU3VibW9kdWxlQWRkVGVzdC5qYXZhCmluZGV4IGIxM2M0Y2QuLmExMzFlNWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9zdWJtb2R1bGUvU3VibW9kdWxlQWRkVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9zdWJtb2R1bGUvU3VibW9kdWxlQWRkVGVzdC5qYXZhCkBAIC0xMTksMzYgKzExOSwzNyBAQCBwdWJsaWMgdm9pZCBjb21tYW5kV2l0aEVtcHR5VXJpKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIGFkZFN1Ym1vZHVsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CiAKLQkJU3VibW9kdWxlQWRkQ29tbWFuZCBjb21tYW5kID0gbmV3IFN1Ym1vZHVsZUFkZENvbW1hbmQoZGIpOwotCQlTdHJpbmcgcGF0aCA9ICJzdWIiOwotCQljb21tYW5kLnNldFBhdGgocGF0aCk7Ci0JCVN0cmluZyB1cmkgPSBkYi5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvU3RyaW5nKCk7Ci0JCWNvbW1hbmQuc2V0VVJJKHVyaSk7Ci0JCVJlcG9zaXRvcnkgcmVwbyA9IGNvbW1hbmQuY2FsbCgpOwotCQlhc3NlcnROb3ROdWxsKHJlcG8pOwotCQlPYmplY3RJZCBzdWJDb21taXQgPSByZXBvLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOwotCQlyZXBvLmNsb3NlKCk7CisJCQlTdWJtb2R1bGVBZGRDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3VibW9kdWxlQWRkQ29tbWFuZChkYik7CisJCQlTdHJpbmcgcGF0aCA9ICJzdWIiOworCQkJY29tbWFuZC5zZXRQYXRoKHBhdGgpOworCQkJU3RyaW5nIHVyaSA9IGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKKwkJCWNvbW1hbmQuc2V0VVJJKHVyaSk7CisJCQlSZXBvc2l0b3J5IHJlcG8gPSBjb21tYW5kLmNhbGwoKTsKKwkJCWFzc2VydE5vdE51bGwocmVwbyk7CisJCQlPYmplY3RJZCBzdWJDb21taXQgPSByZXBvLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOworCQkJcmVwby5jbG9zZSgpOwogCi0JCVN1Ym1vZHVsZVdhbGsgZ2VuZXJhdG9yID0gU3VibW9kdWxlV2Fsay5mb3JJbmRleChkYik7Ci0JCWFzc2VydFRydWUoZ2VuZXJhdG9yLm5leHQoKSk7Ci0JCWFzc2VydEVxdWFscyhwYXRoLCBnZW5lcmF0b3IuZ2V0UGF0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbW1pdCwgZ2VuZXJhdG9yLmdldE9iamVjdElkKCkpOwotCQlhc3NlcnRFcXVhbHModXJpLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1VybCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHBhdGgsIGdlbmVyYXRvci5nZXRNb2R1bGVzUGF0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHVyaSwgZ2VuZXJhdG9yLmdldENvbmZpZ1VybCgpKTsKLQkJUmVwb3NpdG9yeSBzdWJNb2RSZXBvID0gZ2VuZXJhdG9yLmdldFJlcG9zaXRvcnkoKTsKLQkJYXNzZXJ0Tm90TnVsbChzdWJNb2RSZXBvKTsKLQkJYXNzZXJ0RXF1YWxzKHN1YkNvbW1pdCwgY29tbWl0KTsKLQkJc3ViTW9kUmVwby5jbG9zZSgpOworCQkJU3VibW9kdWxlV2FsayBnZW5lcmF0b3IgPSBTdWJtb2R1bGVXYWxrLmZvckluZGV4KGRiKTsKKwkJCWFzc2VydFRydWUoZ2VuZXJhdG9yLm5leHQoKSk7CisJCQlhc3NlcnRFcXVhbHMocGF0aCwgZ2VuZXJhdG9yLmdldFBhdGgoKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LCBnZW5lcmF0b3IuZ2V0T2JqZWN0SWQoKSk7CisJCQlhc3NlcnRFcXVhbHModXJpLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1VybCgpKTsKKwkJCWFzc2VydEVxdWFscyhwYXRoLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1BhdGgoKSk7CisJCQlhc3NlcnRFcXVhbHModXJpLCBnZW5lcmF0b3IuZ2V0Q29uZmlnVXJsKCkpOworCQkJUmVwb3NpdG9yeSBzdWJNb2RSZXBvID0gZ2VuZXJhdG9yLmdldFJlcG9zaXRvcnkoKTsKKwkJCWFzc2VydE5vdE51bGwoc3ViTW9kUmVwbyk7CisJCQlhc3NlcnRFcXVhbHMoc3ViQ29tbWl0LCBjb21taXQpOworCQkJc3ViTW9kUmVwby5jbG9zZSgpOwogCi0JCVN0YXR1cyBzdGF0dXMgPSBHaXQud3JhcChkYikuc3RhdHVzKCkuY2FsbCgpOwotCQlhc3NlcnRUcnVlKHN0YXR1cy5nZXRBZGRlZCgpLmNvbnRhaW5zKENvbnN0YW50cy5ET1RfR0lUX01PRFVMRVMpKTsKLQkJYXNzZXJ0VHJ1ZShzdGF0dXMuZ2V0QWRkZWQoKS5jb250YWlucyhwYXRoKSk7CisJCQlTdGF0dXMgc3RhdHVzID0gR2l0LndyYXAoZGIpLnN0YXR1cygpLmNhbGwoKTsKKwkJCWFzc2VydFRydWUoc3RhdHVzLmdldEFkZGVkKCkuY29udGFpbnMoQ29uc3RhbnRzLkRPVF9HSVRfTU9EVUxFUykpOworCQkJYXNzZXJ0VHJ1ZShzdGF0dXMuZ2V0QWRkZWQoKS5jb250YWlucyhwYXRoKSk7CisJCX0KIAl9CiAKIAlAVGVzdApAQCAtMTgyLDQ1ICsxODMsNDcgQEAgcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgYWRkU3VibW9kdWxlV2l0aFJlbGF0aXZlVXJpKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKIAotCQlTdWJtb2R1bGVBZGRDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3VibW9kdWxlQWRkQ29tbWFuZChkYik7Ci0JCVN0cmluZyBwYXRoID0gInN1YiI7Ci0JCVN0cmluZyB1cmkgPSAiLi8uZ2l0IjsKLQkJY29tbWFuZC5zZXRQYXRoKHBhdGgpOwotCQljb21tYW5kLnNldFVSSSh1cmkpOwotCQlSZXBvc2l0b3J5IHJlcG8gPSBjb21tYW5kLmNhbGwoKTsKLQkJYXNzZXJ0Tm90TnVsbChyZXBvKTsKLQkJYWRkUmVwb1RvQ2xvc2UocmVwbyk7CisJCQlTdWJtb2R1bGVBZGRDb21tYW5kIGNvbW1hbmQgPSBuZXcgU3VibW9kdWxlQWRkQ29tbWFuZChkYik7CisJCQlTdHJpbmcgcGF0aCA9ICJzdWIiOworCQkJU3RyaW5nIHVyaSA9ICIuLy5naXQiOworCQkJY29tbWFuZC5zZXRQYXRoKHBhdGgpOworCQkJY29tbWFuZC5zZXRVUkkodXJpKTsKKwkJCVJlcG9zaXRvcnkgcmVwbyA9IGNvbW1hbmQuY2FsbCgpOworCQkJYXNzZXJ0Tm90TnVsbChyZXBvKTsKKwkJCWFkZFJlcG9Ub0Nsb3NlKHJlcG8pOwogCi0JCVN1Ym1vZHVsZVdhbGsgZ2VuZXJhdG9yID0gU3VibW9kdWxlV2Fsay5mb3JJbmRleChkYik7Ci0JCWFzc2VydFRydWUoZ2VuZXJhdG9yLm5leHQoKSk7Ci0JCWFzc2VydEVxdWFscyhwYXRoLCBnZW5lcmF0b3IuZ2V0UGF0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKGNvbW1pdCwgZ2VuZXJhdG9yLmdldE9iamVjdElkKCkpOwotCQlhc3NlcnRFcXVhbHModXJpLCBnZW5lcmF0b3IuZ2V0TW9kdWxlc1VybCgpKTsKLQkJYXNzZXJ0RXF1YWxzKHBhdGgsIGdlbmVyYXRvci5nZXRNb2R1bGVzUGF0aCgpKTsKLQkJU3RyaW5nIGZ1bGxVcmkgPSBkYi5nZXREaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKTsKLQkJaWYgKEZpbGUuc2VwYXJhdG9yQ2hhciA9PSAnXFwnKQotCQkJZnVsbFVyaSA9IGZ1bGxVcmkucmVwbGFjZSgnXFwnLCAnLycpOwotCQlhc3NlcnRFcXVhbHMoZnVsbFVyaSwgZ2VuZXJhdG9yLmdldENvbmZpZ1VybCgpKTsKLQkJUmVwb3NpdG9yeSBzdWJNb2RSZXBvID0gZ2VuZXJhdG9yLmdldFJlcG9zaXRvcnkoKTsKLQkJYXNzZXJ0Tm90TnVsbChzdWJNb2RSZXBvKTsKLQkJYXNzZXJ0RXF1YWxzKAotCQkJCWZ1bGxVcmksCi0JCQkJc3ViTW9kUmVwbwotCQkJCQkJLmdldENvbmZpZygpCi0JCQkJCQkuZ2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfUkVNT1RFX1NFQ1RJT04sCi0JCQkJCQkJCUNvbnN0YW50cy5ERUZBVUxUX1JFTU9URV9OQU1FLAotCQkJCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwpKTsKLQkJc3ViTW9kUmVwby5jbG9zZSgpOwotCQlhc3NlcnRFcXVhbHMoY29tbWl0LCByZXBvLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpKTsKKwkJCVN1Ym1vZHVsZVdhbGsgZ2VuZXJhdG9yID0gU3VibW9kdWxlV2Fsay5mb3JJbmRleChkYik7CisJCQlhc3NlcnRUcnVlKGdlbmVyYXRvci5uZXh0KCkpOworCQkJYXNzZXJ0RXF1YWxzKHBhdGgsIGdlbmVyYXRvci5nZXRQYXRoKCkpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdCwgZ2VuZXJhdG9yLmdldE9iamVjdElkKCkpOworCQkJYXNzZXJ0RXF1YWxzKHVyaSwgZ2VuZXJhdG9yLmdldE1vZHVsZXNVcmwoKSk7CisJCQlhc3NlcnRFcXVhbHMocGF0aCwgZ2VuZXJhdG9yLmdldE1vZHVsZXNQYXRoKCkpOworCQkJU3RyaW5nIGZ1bGxVcmkgPSBkYi5nZXREaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKTsKKwkJCWlmIChGaWxlLnNlcGFyYXRvckNoYXIgPT0gJ1xcJykgeworCQkJCWZ1bGxVcmkgPSBmdWxsVXJpLnJlcGxhY2UoJ1xcJywgJy8nKTsKKwkJCX0KKwkJCWFzc2VydEVxdWFscyhmdWxsVXJpLCBnZW5lcmF0b3IuZ2V0Q29uZmlnVXJsKCkpOworCQkJUmVwb3NpdG9yeSBzdWJNb2RSZXBvID0gZ2VuZXJhdG9yLmdldFJlcG9zaXRvcnkoKTsKKwkJCWFzc2VydE5vdE51bGwoc3ViTW9kUmVwbyk7CisJCQlhc3NlcnRFcXVhbHMoCisJCQkJCWZ1bGxVcmksCisJCQkJCXN1Yk1vZFJlcG8KKwkJCQkJCQkuZ2V0Q29uZmlnKCkKKwkJCQkJCQkuZ2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfUkVNT1RFX1NFQ1RJT04sCisJCQkJCQkJCQlDb25zdGFudHMuREVGQVVMVF9SRU1PVEVfTkFNRSwKKwkJCQkJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1VSTCkpOworCQkJc3ViTW9kUmVwby5jbG9zZSgpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdCwgcmVwby5yZXNvbHZlKENvbnN0YW50cy5IRUFEKSk7CiAKLQkJU3RhdHVzIHN0YXR1cyA9IEdpdC53cmFwKGRiKS5zdGF0dXMoKS5jYWxsKCk7Ci0JCWFzc2VydFRydWUoc3RhdHVzLmdldEFkZGVkKCkuY29udGFpbnMoQ29uc3RhbnRzLkRPVF9HSVRfTU9EVUxFUykpOwotCQlhc3NlcnRUcnVlKHN0YXR1cy5nZXRBZGRlZCgpLmNvbnRhaW5zKHBhdGgpKTsKKwkJCVN0YXR1cyBzdGF0dXMgPSBHaXQud3JhcChkYikuc3RhdHVzKCkuY2FsbCgpOworCQkJYXNzZXJ0VHJ1ZShzdGF0dXMuZ2V0QWRkZWQoKS5jb250YWlucyhDb25zdGFudHMuRE9UX0dJVF9NT0RVTEVTKSk7CisJCQlhc3NlcnRUcnVlKHN0YXR1cy5nZXRBZGRlZCgpLmNvbnRhaW5zKHBhdGgpKTsKKwkJfQogCX0KIAogCUBUZXN0CkBAIC0yMzcsMzEgKzI0MCwzMiBAQCBwdWJsaWMgdm9pZCBhZGRTdWJtb2R1bGVXaXRoRXhpc3RpbmdTdWJtb2R1bGVEZWZpbmVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJcGF0aDEsIENvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1VSTCwgdXJsMSk7CiAJCW1vZHVsZXNDb25maWcuc2F2ZSgpOwogCi0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJYXNzZXJ0Tm90TnVsbChnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCkpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlhc3NlcnROb3ROdWxsKGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKSk7CiAKLQkJU3VibW9kdWxlQWRkQ29tbWFuZCBjb21tYW5kID0gbmV3IFN1Ym1vZHVsZUFkZENvbW1hbmQoZGIpOwotCQljb21tYW5kLnNldFBhdGgocGF0aDIpOwotCQlTdHJpbmcgdXJsMiA9IGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKLQkJY29tbWFuZC5zZXRVUkkodXJsMik7Ci0JCVJlcG9zaXRvcnkgciA9IGNvbW1hbmQuY2FsbCgpOwotCQlhc3NlcnROb3ROdWxsKHIpOwotCQlhZGRSZXBvVG9DbG9zZShyKTsKKwkJCVN1Ym1vZHVsZUFkZENvbW1hbmQgY29tbWFuZCA9IG5ldyBTdWJtb2R1bGVBZGRDb21tYW5kKGRiKTsKKwkJCWNvbW1hbmQuc2V0UGF0aChwYXRoMik7CisJCQlTdHJpbmcgdXJsMiA9IGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKTsKKwkJCWNvbW1hbmQuc2V0VVJJKHVybDIpOworCQkJUmVwb3NpdG9yeSByID0gY29tbWFuZC5jYWxsKCk7CisJCQlhc3NlcnROb3ROdWxsKHIpOworCQkJYWRkUmVwb1RvQ2xvc2Uocik7CiAKLQkJbW9kdWxlc0NvbmZpZy5sb2FkKCk7Ci0JCWFzc2VydEVxdWFscyhwYXRoMSwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TVUJNT0RVTEVfU0VDVElPTiwgcGF0aDEsCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUEFUSCkpOwotCQlhc3NlcnRFcXVhbHModXJsMSwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TVUJNT0RVTEVfU0VDVElPTiwgcGF0aDEsCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVVJMKSk7Ci0JCWFzc2VydEVxdWFscyhwYXRoMiwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TVUJNT0RVTEVfU0VDVElPTiwgcGF0aDIsCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUEFUSCkpOwotCQlhc3NlcnRFcXVhbHModXJsMiwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TVUJNT0RVTEVfU0VDVElPTiwgcGF0aDIsCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVVJMKSk7CisJCQltb2R1bGVzQ29uZmlnLmxvYWQoKTsKKwkJCWFzc2VydEVxdWFscyhwYXRoMSwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfU1VCTU9EVUxFX1NFQ1RJT04sIHBhdGgxLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9QQVRIKSk7CisJCQlhc3NlcnRFcXVhbHModXJsMSwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfU1VCTU9EVUxFX1NFQ1RJT04sIHBhdGgxLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwpKTsKKwkJCWFzc2VydEVxdWFscyhwYXRoMiwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfU1VCTU9EVUxFX1NFQ1RJT04sIHBhdGgyLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9QQVRIKSk7CisJCQlhc3NlcnRFcXVhbHModXJsMiwgbW9kdWxlc0NvbmZpZy5nZXRTdHJpbmcoCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfU1VCTU9EVUxFX1NFQ1RJT04sIHBhdGgyLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwpKTsKKwkJfQogCX0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvc3ltbGlua3MvU3ltbGlua3NUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvc3ltbGlua3MvU3ltbGlua3NUZXN0LmphdmEKaW5kZXggM2RkYzNkZS4uMjc0ZmE1MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3N5bWxpbmtzL1N5bWxpbmtzVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9zeW1saW5rcy9TeW1saW5rc1Rlc3QuamF2YQpAQCAtNzUsMjYgKzc1LDI3IEBAIHB1YmxpYyB2b2lkIGJlZm9yZU1ldGhvZCgpIHsKIAkgKi8KIAlAVGVzdAogCXB1YmxpYyB2b2lkIGZpbGVNb2RlVGVzdEZpbGVUaGVuU3ltbGluaygpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgIkhlbGxvIHdvcmxkIGEiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiSGVsbG8gd29ybGQgYiIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZmlsZXMgYSAmIGIiKS5jYWxsKCk7Ci0JCVJlZiBicmFuY2hfMSA9IGdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJicmFuY2hfMSIpLmNhbGwoKTsKLQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7Ci0JCUZpbGVVdGlscy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksICJiIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBzeW1saW5rIGEiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJIZWxsbyB3b3JsZCBhIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJIZWxsbyB3b3JsZCBiIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGVzIGEgJiBiIikuY2FsbCgpOworCQkJUmVmIGJyYW5jaF8xID0gZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoImJyYW5jaF8xIikuY2FsbCgpOworCQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlGaWxlVXRpbHMuY3JlYXRlU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCAiYiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBzeW1saW5rIGEiKS5jYWxsKCk7CiAKLQkJRmlsZUVudHJ5IGVudHJ5ID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IuRmlsZUVudHJ5KG5ldyBGaWxlKAotCQkJCWRiLmdldFdvcmtUcmVlKCksICJhIiksIGRiLmdldEZTKCkpOwotCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuU1lNTElOSywgZW50cnkuZ2V0TW9kZSgpKTsKKwkJCUZpbGVFbnRyeSBlbnRyeSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yLkZpbGVFbnRyeShuZXcgRmlsZSgKKwkJCQkJZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZGIuZ2V0RlMoKSk7CisJCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuU1lNTElOSywgZW50cnkuZ2V0TW9kZSgpKTsKIAotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGJyYW5jaF8xLmdldE5hbWUoKSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShicmFuY2hfMS5nZXROYW1lKCkpLmNhbGwoKTsKIAotCQllbnRyeSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yLkZpbGVFbnRyeShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLAotCQkJCWRiLmdldEZTKCkpOwotCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuUkVHVUxBUl9GSUxFLCBlbnRyeS5nZXRNb2RlKCkpOworCQkJZW50cnkgPSBuZXcgRmlsZVRyZWVJdGVyYXRvci5GaWxlRW50cnkobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwKKwkJCQkJZGIuZ2V0RlMoKSk7CisJCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuUkVHVUxBUl9GSUxFLCBlbnRyeS5nZXRNb2RlKCkpOworCQl9CiAJfQogCiAJLyoqCkBAIC0xMDgsMjYgKzEwOSwyNyBAQCBwdWJsaWMgdm9pZCBmaWxlTW9kZVRlc3RGaWxlVGhlblN5bWxpbmsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkgKi8KIAlAVGVzdAogCXB1YmxpYyB2b2lkIGZpbGVNb2RlVGVzdFN5bWxpbmtUaGVuRmlsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJiIiwgIkhlbGxvIHdvcmxkIGIiKTsKLQkJRmlsZVV0aWxzLmNyZWF0ZVN5bUxpbmsobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImIiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGUgYiAmIHN5bWxpbmsgYSIpLmNhbGwoKTsKLQkJUmVmIGJyYW5jaF8xID0gZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoImJyYW5jaF8xIikuY2FsbCgpOwotCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiSGVsbG8gd29ybGQgYSIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZmlsZSBhIikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiSGVsbG8gd29ybGQgYiIpOworCQkJRmlsZVV0aWxzLmNyZWF0ZVN5bUxpbmsobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImIiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZmlsZSBiICYgc3ltbGluayBhIikuY2FsbCgpOworCQkJUmVmIGJyYW5jaF8xID0gZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoImJyYW5jaF8xIikuY2FsbCgpOworCQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJIZWxsbyB3b3JsZCBhIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGUgYSIpLmNhbGwoKTsKIAotCQlGaWxlRW50cnkgZW50cnkgPSBuZXcgRmlsZVRyZWVJdGVyYXRvci5GaWxlRW50cnkobmV3IEZpbGUoCi0JCQkJZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZGIuZ2V0RlMoKSk7Ci0JCWFzc2VydEVxdWFscyhGaWxlTW9kZS5SRUdVTEFSX0ZJTEUsIGVudHJ5LmdldE1vZGUoKSk7CisJCQlGaWxlRW50cnkgZW50cnkgPSBuZXcgRmlsZVRyZWVJdGVyYXRvci5GaWxlRW50cnkobmV3IEZpbGUoCisJCQkJCWRiLmdldFdvcmtUcmVlKCksICJhIiksIGRiLmdldEZTKCkpOworCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLlJFR1VMQVJfRklMRSwgZW50cnkuZ2V0TW9kZSgpKTsKIAotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGJyYW5jaF8xLmdldE5hbWUoKSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShicmFuY2hfMS5nZXROYW1lKCkpLmNhbGwoKTsKIAotCQllbnRyeSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yLkZpbGVFbnRyeShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLAotCQkJCWRiLmdldEZTKCkpOwotCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuU1lNTElOSywgZW50cnkuZ2V0TW9kZSgpKTsKKwkJCWVudHJ5ID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IuRmlsZUVudHJ5KG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksCisJCQkJCWRiLmdldEZTKCkpOworCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLlNZTUxJTkssIGVudHJ5LmdldE1vZGUoKSk7CisJCX0KIAl9CiAKIAkvKioKQEAgLTE0MSwyNyArMTQzLDI4IEBAIHB1YmxpYyB2b2lkIGZpbGVNb2RlVGVzdFN5bWxpbmtUaGVuRmlsZSgpIHRocm93cyBFeGNlcHRpb24gewogCSAqLwogCUBUZXN0CiAJcHVibGljIHZvaWQgZmlsZU1vZGVUZXN0Rm9sZGVyVGhlblN5bWxpbmsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlGaWxlVXRpbHMubWtkaXJzKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpOwotCQl3cml0ZVRyYXNoRmlsZSgiYS9iIiwgIkhlbGxvIHdvcmxkIGIiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImMiLCAiSGVsbG8gd29ybGQgYyIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZm9sZGVyIGEiKS5jYWxsKCk7Ci0JCVJlZiBicmFuY2hfMSA9IGdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJicmFuY2hfMSIpLmNhbGwoKTsKLQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7Ci0JCUZpbGVVdGlscy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksICJjIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBzeW1saW5rIGEiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlGaWxlVXRpbHMubWtkaXJzKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpOworCQkJd3JpdGVUcmFzaEZpbGUoImEvYiIsICJIZWxsbyB3b3JsZCBiIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYyIsICJIZWxsbyB3b3JsZCBjIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZvbGRlciBhIikuY2FsbCgpOworCQkJUmVmIGJyYW5jaF8xID0gZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoImJyYW5jaF8xIikuY2FsbCgpOworCQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlGaWxlVXRpbHMuY3JlYXRlU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCAiYyIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBzeW1saW5rIGEiKS5jYWxsKCk7CiAKLQkJRmlsZUVudHJ5IGVudHJ5ID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IuRmlsZUVudHJ5KG5ldyBGaWxlKAotCQkJCWRiLmdldFdvcmtUcmVlKCksICJhIiksIGRiLmdldEZTKCkpOwotCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuU1lNTElOSywgZW50cnkuZ2V0TW9kZSgpKTsKKwkJCUZpbGVFbnRyeSBlbnRyeSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yLkZpbGVFbnRyeShuZXcgRmlsZSgKKwkJCQkJZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZGIuZ2V0RlMoKSk7CisJCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuU1lNTElOSywgZW50cnkuZ2V0TW9kZSgpKTsKIAotCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGJyYW5jaF8xLmdldE5hbWUoKSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShicmFuY2hfMS5nZXROYW1lKCkpLmNhbGwoKTsKIAotCQllbnRyeSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yLkZpbGVFbnRyeShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLAotCQkJCWRiLmdldEZTKCkpOwotCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuVFJFRSwgZW50cnkuZ2V0TW9kZSgpKTsKKwkJCWVudHJ5ID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IuRmlsZUVudHJ5KG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksCisJCQkJCWRiLmdldEZTKCkpOworCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLlRSRUUsIGVudHJ5LmdldE1vZGUoKSk7CisJCX0KIAl9CiAKIAkvKioKQEAgLTE3NSwyNyArMTc4LDI4IEBAIHB1YmxpYyB2b2lkIGZpbGVNb2RlVGVzdEZvbGRlclRoZW5TeW1saW5rKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJICovCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBmaWxlTW9kZVRlc3RTeW1saW5rVGhlbkZvbGRlcigpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJjIiwgIkhlbGxvIHdvcmxkIGMiKTsKLQkJRmlsZVV0aWxzLmNyZWF0ZVN5bUxpbmsobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImMiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIHN5bWxpbmsgYSIpLmNhbGwoKTsKLQkJUmVmIGJyYW5jaF8xID0gZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoImJyYW5jaF8xIikuY2FsbCgpOwotCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJRmlsZVV0aWxzLm1rZGlycyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKTsKLQkJd3JpdGVUcmFzaEZpbGUoImEvYiIsICJIZWxsbyB3b3JsZCBiIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBmb2xkZXIgYSIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJjIiwgIkhlbGxvIHdvcmxkIGMiKTsKKwkJCUZpbGVVdGlscy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksICJjIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIHN5bWxpbmsgYSIpLmNhbGwoKTsKKwkJCVJlZiBicmFuY2hfMSA9IGdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJicmFuY2hfMSIpLmNhbGwoKTsKKwkJCWdpdC5ybSgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJRmlsZVV0aWxzLm1rZGlycyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhL2IiLCAiSGVsbG8gd29ybGQgYiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCBmb2xkZXIgYSIpLmNhbGwoKTsKIAotCQlGaWxlRW50cnkgZW50cnkgPSBuZXcgRmlsZVRyZWVJdGVyYXRvci5GaWxlRW50cnkobmV3IEZpbGUoCi0JCQkJZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZGIuZ2V0RlMoKSk7Ci0JCWFzc2VydEVxdWFscyhGaWxlTW9kZS5UUkVFLCBlbnRyeS5nZXRNb2RlKCkpOworCQkJRmlsZUVudHJ5IGVudHJ5ID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IuRmlsZUVudHJ5KG5ldyBGaWxlKAorCQkJCQlkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCBkYi5nZXRGUygpKTsKKwkJCWFzc2VydEVxdWFscyhGaWxlTW9kZS5UUkVFLCBlbnRyeS5nZXRNb2RlKCkpOwogCi0JCWdpdC5jaGVja291dCgpLnNldE5hbWUoYnJhbmNoXzEuZ2V0TmFtZSgpKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGJyYW5jaF8xLmdldE5hbWUoKSkuY2FsbCgpOwogCi0JCWVudHJ5ID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IuRmlsZUVudHJ5KG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksCi0JCQkJZGIuZ2V0RlMoKSk7Ci0JCWFzc2VydEVxdWFscyhGaWxlTW9kZS5TWU1MSU5LLCBlbnRyeS5nZXRNb2RlKCkpOworCQkJZW50cnkgPSBuZXcgRmlsZVRyZWVJdGVyYXRvci5GaWxlRW50cnkobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwKKwkJCQkJZGIuZ2V0RlMoKSk7CisJCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuU1lNTElOSywgZW50cnkuZ2V0TW9kZSgpKTsKKwkJfQogCX0KIAogCS8qKgpAQCAtMjA5LDI0ICsyMTMsMjUgQEAgcHVibGljIHZvaWQgZmlsZU1vZGVUZXN0U3ltbGlua1RoZW5Gb2xkZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkgKi8KIAlAVGVzdAogCXB1YmxpYyB2b2lkIGZpbGVNb2RlVGVzdE1pc3NpbmdUaGVuU3ltbGluaygpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJiIiwgIkhlbGxvIHdvcmxkIGIiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlSZXZDb21taXQgY29tbWl0MSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZmlsZSBiIikuY2FsbCgpOwotCQlSZWYgYnJhbmNoXzEgPSBnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgiYnJhbmNoXzEiKS5jYWxsKCk7Ci0JCUZpbGVVdGlscy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksICJiIik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGNvbW1pdDIgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIHN5bWxpbmsgYSIpLmNhbGwoKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpOykgeworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiSGVsbG8gd29ybGQgYiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdDEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGUgYiIpLmNhbGwoKTsKKwkJCVJlZiBicmFuY2hfMSA9IGdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJicmFuY2hfMSIpLmNhbGwoKTsKKwkJCUZpbGVVdGlscy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksICJiIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0MiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgc3ltbGluayBhIikuY2FsbCgpOwogCi0JCWdpdC5jaGVja291dCgpLnNldE5hbWUoYnJhbmNoXzEuZ2V0TmFtZSgpKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKGJyYW5jaF8xLmdldE5hbWUoKSkuY2FsbCgpOwogCi0JCVRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJdHcuYWRkVHJlZShjb21taXQxLmdldFRyZWUoKSk7Ci0JCXR3LmFkZFRyZWUoY29tbWl0Mi5nZXRUcmVlKCkpOwotCQlMaXN0PERpZmZFbnRyeT4gc2NhbiA9IERpZmZFbnRyeS5zY2FuKHR3KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHNjYW4uc2l6ZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLlNZTUxJTkssIHNjYW4uZ2V0KDApLmdldE5ld01vZGUoKSk7Ci0JCWFzc2VydEVxdWFscyhGaWxlTW9kZS5NSVNTSU5HLCBzY2FuLmdldCgwKS5nZXRPbGRNb2RlKCkpOworCQkJdHcuYWRkVHJlZShjb21taXQxLmdldFRyZWUoKSk7CisJCQl0dy5hZGRUcmVlKGNvbW1pdDIuZ2V0VHJlZSgpKTsKKwkJCUxpc3Q8RGlmZkVudHJ5PiBzY2FuID0gRGlmZkVudHJ5LnNjYW4odHcpOworCQkJYXNzZXJ0RXF1YWxzKDEsIHNjYW4uc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhGaWxlTW9kZS5TWU1MSU5LLCBzY2FuLmdldCgwKS5nZXROZXdNb2RlKCkpOworCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLk1JU1NJTkcsIHNjYW4uZ2V0KDApLmdldE9sZE1vZGUoKSk7CisJCX0KIAl9CiAKIAkvKioKQEAgLTI0MCw5NyArMjQ1LDEwMSBAQCBwdWJsaWMgdm9pZCBmaWxlTW9kZVRlc3RNaXNzaW5nVGhlblN5bWxpbmsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkgKi8KIAlAVGVzdAogCXB1YmxpYyB2b2lkIGZpbGVNb2RlVGVzdFN5bWxpbmtUaGVuTWlzc2luZygpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJiIiwgIkhlbGxvIHdvcmxkIGIiKTsKLQkJRmlsZVV0aWxzLmNyZWF0ZVN5bUxpbmsobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImIiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOwotCQlSZXZDb21taXQgY29tbWl0MSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgZmlsZSBiICYgc3ltbGluayBhIikKLQkJCQkuY2FsbCgpOwotCQlSZWYgYnJhbmNoXzEgPSBnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgiYnJhbmNoXzEiKS5jYWxsKCk7Ci0JCWdpdC5ybSgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOwotCQlSZXZDb21taXQgY29tbWl0MiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJkZWxldGUgc3ltbGluayBhIikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYik7KSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJIZWxsbyB3b3JsZCBiIik7CisJCQlGaWxlVXRpbHMuY3JlYXRlU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCAiYiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdDEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkIGZpbGUgYiAmIHN5bWxpbmsgYSIpCisJCQkJCS5jYWxsKCk7CisJCQlSZWYgYnJhbmNoXzEgPSBnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgiYnJhbmNoXzEiKS5jYWxsKCk7CisJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImRlbGV0ZSBzeW1saW5rIGEiKS5jYWxsKCk7CiAKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShicmFuY2hfMS5nZXROYW1lKCkpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoYnJhbmNoXzEuZ2V0TmFtZSgpKS5jYWxsKCk7CiAKLQkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl0dy5hZGRUcmVlKGNvbW1pdDEuZ2V0VHJlZSgpKTsKLQkJdHcuYWRkVHJlZShjb21taXQyLmdldFRyZWUoKSk7Ci0JCUxpc3Q8RGlmZkVudHJ5PiBzY2FuID0gRGlmZkVudHJ5LnNjYW4odHcpOwotCQlhc3NlcnRFcXVhbHMoMSwgc2Nhbi5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuTUlTU0lORywgc2Nhbi5nZXQoMCkuZ2V0TmV3TW9kZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLlNZTUxJTkssIHNjYW4uZ2V0KDApLmdldE9sZE1vZGUoKSk7CisJCQl0dy5hZGRUcmVlKGNvbW1pdDEuZ2V0VHJlZSgpKTsKKwkJCXR3LmFkZFRyZWUoY29tbWl0Mi5nZXRUcmVlKCkpOworCQkJTGlzdDxEaWZmRW50cnk+IHNjYW4gPSBEaWZmRW50cnkuc2Nhbih0dyk7CisJCQlhc3NlcnRFcXVhbHMoMSwgc2Nhbi5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLk1JU1NJTkcsIHNjYW4uZ2V0KDApLmdldE5ld01vZGUoKSk7CisJCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuU1lNTElOSywgc2Nhbi5nZXQoMCkuZ2V0T2xkTW9kZSgpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgY3JlYXRlU3ltbGlua0FmdGVyVGFyZ2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAic3RhcnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOwotCQlSZXZDb21taXQgYmFzZSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0IikuY2FsbCgpOwotCQl3cml0ZVRyYXNoRmlsZSgidGFyZ2V0IiwgInNvbWVEYXRhIik7Ci0JCUZpbGVVdGlscy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJsaW5rIiksICJ0YXJnZXQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJ0YXJnZXQiKS5hZGRGaWxlcGF0dGVybigibGluayIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCB0YXJnZXQiKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyg0LCBkYi5nZXRXb3JrVHJlZSgpLmxpc3QoKS5sZW5ndGgpOyAvLyBzZWxmLWNoZWNrCi0JCWdpdC5jaGVja291dCgpLnNldE5hbWUoYmFzZS5uYW1lKCkpLmNhbGwoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRiLmdldFdvcmtUcmVlKCkubGlzdCgpLmxlbmd0aCk7IC8vIHNlbGYtY2hlY2sKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoNCwgZGIuZ2V0V29ya1RyZWUoKS5saXN0KCkubGVuZ3RoKTsKLQkJU3RyaW5nIGRhdGEgPSByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0YXJnZXQiKSk7Ci0JCWFzc2VydEVxdWFscyg4LCBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGFyZ2V0IikubGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInNvbWVEYXRhIiwgZGF0YSk7Ci0JCWRhdGEgPSByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJsaW5rIikpOwotCQlhc3NlcnRFcXVhbHMoInRhcmdldCIsCi0JCQkJRmlsZVV0aWxzLnJlYWRTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJsaW5rIikpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzb21lRGF0YSIsIGRhdGEpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAic3RhcnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBiYXNlID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXQiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgidGFyZ2V0IiwgInNvbWVEYXRhIik7CisJCQlGaWxlVXRpbHMuY3JlYXRlU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAibGluayIpLCAidGFyZ2V0Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInRhcmdldCIpLmFkZEZpbGVwYXR0ZXJuKCJsaW5rIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCB0YXJnZXQiKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoNCwgZGIuZ2V0V29ya1RyZWUoKS5saXN0KCkubGVuZ3RoKTsgLy8gc2VsZi1jaGVjaworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShiYXNlLm5hbWUoKSkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDIsIGRiLmdldFdvcmtUcmVlKCkubGlzdCgpLmxlbmd0aCk7IC8vIHNlbGYtY2hlY2sKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyg0LCBkYi5nZXRXb3JrVHJlZSgpLmxpc3QoKS5sZW5ndGgpOworCQkJU3RyaW5nIGRhdGEgPSByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0YXJnZXQiKSk7CisJCQlhc3NlcnRFcXVhbHMoOCwgbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgInRhcmdldCIpLmxlbmd0aCgpKTsKKwkJCWFzc2VydEVxdWFscygic29tZURhdGEiLCBkYXRhKTsKKwkJCWRhdGEgPSByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJsaW5rIikpOworCQkJYXNzZXJ0RXF1YWxzKCJ0YXJnZXQiLAorCQkJCQlGaWxlVXRpbHMucmVhZFN5bUxpbmsobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImxpbmsiKSkpOworCQkJYXNzZXJ0RXF1YWxzKCJzb21lRGF0YSIsIGRhdGEpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBjcmVhdGVGaWxlU3ltbGlua0JlZm9yZVRhcmdldCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJhIiwgInN0YXJ0Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKLQkJUmV2Q29tbWl0IGJhc2UgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdCIpLmNhbGwoKTsKLQkJd3JpdGVUcmFzaEZpbGUoInRhcmdldCIsICJzb21lRGF0YSIpOwotCQlGaWxlVXRpbHMuY3JlYXRlU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGxpbmsiKSwgInRhcmdldCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInRhcmdldCIpLmFkZEZpbGVwYXR0ZXJuKCJ0bGluayIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCB0YXJnZXQiKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyg0LCBkYi5nZXRXb3JrVHJlZSgpLmxpc3QoKS5sZW5ndGgpOyAvLyBzZWxmLWNoZWNrCi0JCWdpdC5jaGVja291dCgpLnNldE5hbWUoYmFzZS5uYW1lKCkpLmNhbGwoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRiLmdldFdvcmtUcmVlKCkubGlzdCgpLmxlbmd0aCk7IC8vIHNlbGYtY2hlY2sKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoNCwgZGIuZ2V0V29ya1RyZWUoKS5saXN0KCkubGVuZ3RoKTsKLQkJU3RyaW5nIGRhdGEgPSByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0YXJnZXQiKSk7Ci0JCWFzc2VydEVxdWFscyg4LCBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGFyZ2V0IikubGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoInNvbWVEYXRhIiwgZGF0YSk7Ci0JCWRhdGEgPSByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0bGluayIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0YXJnZXQiLAotCQkJCUZpbGVVdGlscy5yZWFkU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGxpbmsiKSkpOwotCQlhc3NlcnRFcXVhbHMoInNvbWVEYXRhIiwgZGF0YSk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJzdGFydCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGJhc2UgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdCIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJ0YXJnZXQiLCAic29tZURhdGEiKTsKKwkJCUZpbGVVdGlscy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0bGluayIpLCAidGFyZ2V0Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInRhcmdldCIpLmFkZEZpbGVwYXR0ZXJuKCJ0bGluayIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgdGFyZ2V0IikuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDQsIGRiLmdldFdvcmtUcmVlKCkubGlzdCgpLmxlbmd0aCk7IC8vIHNlbGYtY2hlY2sKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoYmFzZS5uYW1lKCkpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscygyLCBkYi5nZXRXb3JrVHJlZSgpLmxpc3QoKS5sZW5ndGgpOyAvLyBzZWxmLWNoZWNrCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoNCwgZGIuZ2V0V29ya1RyZWUoKS5saXN0KCkubGVuZ3RoKTsKKwkJCVN0cmluZyBkYXRhID0gcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGFyZ2V0IikpOworCQkJYXNzZXJ0RXF1YWxzKDgsIG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0YXJnZXQiKS5sZW5ndGgoKSk7CisJCQlhc3NlcnRFcXVhbHMoInNvbWVEYXRhIiwgZGF0YSk7CisJCQlkYXRhID0gcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGxpbmsiKSk7CisJCQlhc3NlcnRFcXVhbHMoInRhcmdldCIsCisJCQkJCUZpbGVVdGlscy5yZWFkU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGxpbmsiKSkpOworCQkJYXNzZXJ0RXF1YWxzKCJzb21lRGF0YSIsIGRhdGEpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBjcmVhdGVEaXJTeW1saW5rQmVmb3JlVGFyZ2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImEiLCAic3RhcnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOwotCQlSZXZDb21taXQgYmFzZSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0IikuY2FsbCgpOwotCQlGaWxlVXRpbHMuY3JlYXRlU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAibGluayIpLCAidGFyZ2V0Iik7Ci0JCUZpbGVVdGlscy5ta2RpcihuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGFyZ2V0IikpOwotCQl3cml0ZVRyYXNoRmlsZSgidGFyZ2V0L2ZpbGUiLCAic29tZURhdGEiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJ0YXJnZXQiKS5hZGRGaWxlcGF0dGVybigibGluayIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZCB0YXJnZXQiKS5jYWxsKCk7Ci0JCWFzc2VydEVxdWFscyg0LCBkYi5nZXRXb3JrVHJlZSgpLmxpc3QoKS5sZW5ndGgpOyAvLyBzZWxmLWNoZWNrCi0JCWdpdC5jaGVja291dCgpLnNldE5hbWUoYmFzZS5uYW1lKCkpLmNhbGwoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRiLmdldFdvcmtUcmVlKCkubGlzdCgpLmxlbmd0aCk7IC8vIHNlbGYtY2hlY2sKLQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOwotCQlhc3NlcnRFcXVhbHMoNCwgZGIuZ2V0V29ya1RyZWUoKS5saXN0KCkubGVuZ3RoKTsKLQkJU3RyaW5nIGRhdGEgPSByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0YXJnZXQvZmlsZSIpKTsKLQkJYXNzZXJ0RXF1YWxzKDgsIG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJ0YXJnZXQvZmlsZSIpLmxlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzb21lRGF0YSIsIGRhdGEpOwotCQlkYXRhID0gcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAibGluay9maWxlIikpOwotCQlhc3NlcnRFcXVhbHMoInRhcmdldCIsCi0JCQkJRmlsZVV0aWxzLnJlYWRTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJsaW5rIikpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzb21lRGF0YSIsIGRhdGEpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAic3RhcnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBiYXNlID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXQiKS5jYWxsKCk7CisJCQlGaWxlVXRpbHMuY3JlYXRlU3ltTGluayhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAibGluayIpLCAidGFyZ2V0Iik7CisJCQlGaWxlVXRpbHMubWtkaXIobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgInRhcmdldCIpKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJ0YXJnZXQvZmlsZSIsICJzb21lRGF0YSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJ0YXJnZXQiKS5hZGRGaWxlcGF0dGVybigibGluayIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGQgdGFyZ2V0IikuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDQsIGRiLmdldFdvcmtUcmVlKCkubGlzdCgpLmxlbmd0aCk7IC8vIHNlbGYtY2hlY2sKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoYmFzZS5uYW1lKCkpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscygyLCBkYi5nZXRXb3JrVHJlZSgpLmxpc3QoKS5sZW5ndGgpOyAvLyBzZWxmLWNoZWNrCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoNCwgZGIuZ2V0V29ya1RyZWUoKS5saXN0KCkubGVuZ3RoKTsKKwkJCVN0cmluZyBkYXRhID0gcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAidGFyZ2V0L2ZpbGUiKSk7CisJCQlhc3NlcnRFcXVhbHMoOCwgbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgInRhcmdldC9maWxlIikubGVuZ3RoKCkpOworCQkJYXNzZXJ0RXF1YWxzKCJzb21lRGF0YSIsIGRhdGEpOworCQkJZGF0YSA9IHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImxpbmsvZmlsZSIpKTsKKwkJCWFzc2VydEVxdWFscygidGFyZ2V0IiwKKwkJCQkJRmlsZVV0aWxzLnJlYWRTeW1MaW5rKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJsaW5rIikpKTsKKwkJCWFzc2VydEVxdWFscygic29tZURhdGEiLCBkYXRhKTsKKwkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9GaWxlVHJlZUl0ZXJhdG9yVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL0ZpbGVUcmVlSXRlcmF0b3JUZXN0LmphdmEKaW5kZXggNzY3ZTEzZC4uZGYxN2EzZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL0ZpbGVUcmVlSXRlcmF0b3JUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL0ZpbGVUcmVlSXRlcmF0b3JUZXN0LmphdmEKQEAgLTI1NSwxMCArMjU1LDExIEBAIHB1YmxpYyB2b2lkIHRlc3RDb21wdXRlRmlsZU9iamVjdElkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0RGlyQ2FjaGVNYXRjaGluZ0lkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUZpbGUgZiA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlIiwgImNvbnRlbnQiKTsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZSIsICJjb250ZW50Iik7Ci0JCWZzVGljayhmKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlIikuY2FsbCgpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUiLCAiY29udGVudCIpOworCQkJZnNUaWNrKGYpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlIikuY2FsbCgpOworCQl9CiAJCURpckNhY2hlRW50cnkgZGNlID0gZGIucmVhZERpckNhY2hlKCkuZ2V0RW50cnkoImZpbGUiKTsKIAkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpOwogCQlGaWxlVHJlZUl0ZXJhdG9yIGZ0aSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yKHRyYXNoLCBkYi5nZXRGUygpLCBkYgpAQCAtMjgyLDExICsyODMsMTIgQEAgcHVibGljIHZvaWQgdGVzdERpckNhY2hlTWF0Y2hpbmdJZCgpIHRocm93cyBFeGNlcHRpb24gewogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdElzTW9kaWZpZWRTeW1saW5rQXNGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXdyaXRlVHJhc2hGaWxlKCJzeW1saW5rIiwgImNvbnRlbnQiKTsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQlkYi5nZXRDb25maWcoKS5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfU1lNTElOS1MsICJmYWxzZSIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInN5bWxpbmsiKS5jYWxsKCk7Ci0JCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQiKS5jYWxsKCk7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlkYi5nZXRDb25maWcoKS5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1NZTUxJTktTLCAiZmFsc2UiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigic3ltbGluayIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQiKS5jYWxsKCk7CisJCX0KIAogCQkvLyBNb2RpZnkgcHJldmlvdXNseSBjb21taXR0ZWQgRGlyQ2FjaGVFbnRyeSBhbmQgd3JpdGUgaXQgYmFjayB0byBkaXNrCiAJCURpckNhY2hlRW50cnkgZGNlID0gZGIucmVhZERpckNhY2hlKCkuZ2V0RW50cnkoInN5bWxpbmsiKTsKQEAgLTMwNSwyMCArMzA3LDIxIEBAIHB1YmxpYyB2b2lkIHRlc3RJc01vZGlmaWVkU3ltbGlua0FzRmlsZSgpIHRocm93cyBFeGNlcHRpb24gewogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdElzTW9kaWZpZWRGaWxlU211ZGdlZCgpIHRocm93cyBFeGNlcHRpb24gewogCQlGaWxlIGYgPSB3cml0ZVRyYXNoRmlsZSgiZmlsZSIsICJjb250ZW50Iik7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJLy8gVGhlIGlkZWEgb2YgdGhpcyB0ZXN0IGlzIHRvIGNoZWNrIHRoZSBzbXVkZ2VkIGhhbmRsaW5nCi0JCS8vIEhvcGVmdWxseSBmc1RpY2sgd2lsbCBtYWtlIHN1cmUgb3VyIGVudHJ5IGdldHMgc211ZGdlZAotCQlmc1RpY2soZik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlIiwgImNvbnRlbnQiKTsKLQkJbG9uZyBsYXN0TW9kaWZpZWQgPSBmLmxhc3RNb2RpZmllZCgpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUiKS5jYWxsKCk7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlIiwgImNvbnRlbjIiKTsKLQkJZi5zZXRMYXN0TW9kaWZpZWQobGFzdE1vZGlmaWVkKTsKLQkJLy8gV2UgY2Fubm90IHRydXN0IHRoaXMgdG8gZ28gZmFzdCBlbm91Z2ggb24KLQkJLy8gYSBzeXN0ZW0gd2l0aCBsZXNzIHRoYW4gb25lLXNlY29uZCBsYXN0TW9kaWZpZWQKLQkJLy8gcmVzb2x1dGlvbiwgc28gd2UgZm9yY2UgdGhlIGluZGV4IHRvIGhhdmUgdGhlCi0JCS8vIHNhbWUgdGltZXN0YW1wIGFzIHRoZSBmaWxlIHdlIGxvb2sgYXQuCi0JCWRiLmdldEluZGV4RmlsZSgpLnNldExhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJLy8gVGhlIGlkZWEgb2YgdGhpcyB0ZXN0IGlzIHRvIGNoZWNrIHRoZSBzbXVkZ2VkIGhhbmRsaW5nCisJCQkvLyBIb3BlZnVsbHkgZnNUaWNrIHdpbGwgbWFrZSBzdXJlIG91ciBlbnRyeSBnZXRzIHNtdWRnZWQKKwkJCWZzVGljayhmKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlIiwgImNvbnRlbnQiKTsKKwkJCWxvbmcgbGFzdE1vZGlmaWVkID0gZi5sYXN0TW9kaWZpZWQoKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZSIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlIiwgImNvbnRlbjIiKTsKKwkJCWYuc2V0TGFzdE1vZGlmaWVkKGxhc3RNb2RpZmllZCk7CisJCQkvLyBXZSBjYW5ub3QgdHJ1c3QgdGhpcyB0byBnbyBmYXN0IGVub3VnaCBvbgorCQkJLy8gYSBzeXN0ZW0gd2l0aCBsZXNzIHRoYW4gb25lLXNlY29uZCBsYXN0TW9kaWZpZWQKKwkJCS8vIHJlc29sdXRpb24sIHNvIHdlIGZvcmNlIHRoZSBpbmRleCB0byBoYXZlIHRoZQorCQkJLy8gc2FtZSB0aW1lc3RhbXAgYXMgdGhlIGZpbGUgd2UgbG9vayBhdC4KKwkJCWRiLmdldEluZGV4RmlsZSgpLnNldExhc3RNb2RpZmllZChsYXN0TW9kaWZpZWQpOworCQl9CiAJCURpckNhY2hlRW50cnkgZGNlID0gZGIucmVhZERpckNhY2hlKCkuZ2V0RW50cnkoImZpbGUiKTsKIAkJRmlsZVRyZWVJdGVyYXRvciBmdGkgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcih0cmFzaCwgZGIuZ2V0RlMoKSwgZGIKIAkJCQkuZ2V0Q29uZmlnKCkuZ2V0KFdvcmtpbmdUcmVlT3B0aW9ucy5LRVkpKTsKQEAgLTMzNCwxOTggKzMzNywyMDQgQEAgcHVibGljIHZvaWQgdGVzdElzTW9kaWZpZWRGaWxlU211ZGdlZCgpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBzdWJtb2R1bGVIZWFkTWF0Y2hlc0luZGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJZmluYWwgUmV2Q29tbWl0IGlkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwotCQlmaW5hbCBTdHJpbmcgcGF0aCA9ICJzdWIiOwotCQlEaXJDYWNoZSBjYWNoZSA9IGRiLmxvY2tEaXJDYWNoZSgpOwotCQlEaXJDYWNoZUVkaXRvciBlZGl0b3IgPSBjYWNoZS5lZGl0b3IoKTsKLQkJZWRpdG9yLmFkZChuZXcgUGF0aEVkaXQocGF0aCkgeworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlmaW5hbCBSZXZDb21taXQgaWQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCQlmaW5hbCBTdHJpbmcgcGF0aCA9ICJzdWIiOworCQkJRGlyQ2FjaGUgY2FjaGUgPSBkYi5sb2NrRGlyQ2FjaGUoKTsKKwkJCURpckNhY2hlRWRpdG9yIGVkaXRvciA9IGNhY2hlLmVkaXRvcigpOworCQkJZWRpdG9yLmFkZChuZXcgUGF0aEVkaXQocGF0aCkgeworCQorCQkJCXB1YmxpYyB2b2lkIGFwcGx5KERpckNhY2hlRW50cnkgZW50KSB7CisJCQkJCWVudC5zZXRGaWxlTW9kZShGaWxlTW9kZS5HSVRMSU5LKTsKKwkJCQkJZW50LnNldE9iamVjdElkKGlkKTsKKwkJCQl9CisJCQl9KTsKKwkJCWVkaXRvci5jb21taXQoKTsKIAotCQkJcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKLQkJCQllbnQuc2V0RmlsZU1vZGUoRmlsZU1vZGUuR0lUTElOSyk7Ci0JCQkJZW50LnNldE9iamVjdElkKGlkKTsKLQkJCX0KLQkJfSk7Ci0JCWVkaXRvci5jb21taXQoKTsKKwkJCUdpdC5jbG9uZVJlcG9zaXRvcnkoKS5zZXRVUkkoZGIuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1N0cmluZygpKQorCQkJCQkuc2V0RGlyZWN0b3J5KG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIHBhdGgpKS5jYWxsKCkKKwkJCQkJLmdldFJlcG9zaXRvcnkoKS5jbG9zZSgpOwogCi0JCUdpdC5jbG9uZVJlcG9zaXRvcnkoKS5zZXRVUkkoZGIuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1N0cmluZygpKQotCQkJCS5zZXREaXJlY3RvcnkobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgcGF0aCkpLmNhbGwoKQotCQkJCS5nZXRSZXBvc2l0b3J5KCkuY2xvc2UoKTsKLQotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJRGlyQ2FjaGVJdGVyYXRvciBpbmRleEl0ZXIgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCUZpbGVUcmVlSXRlcmF0b3Igd29ya1RyZWVJdGVyID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOwotCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKLQkJd2Fsay5hZGRUcmVlKHdvcmtUcmVlSXRlcik7Ci0JCXdhbGsuc2V0RmlsdGVyKFBhdGhGaWx0ZXIuY3JlYXRlKHBhdGgpKTsKLQotCQlhc3NlcnRUcnVlKHdhbGsubmV4dCgpKTsKLQkJYXNzZXJ0VHJ1ZShpbmRleEl0ZXIuaWRFcXVhbCh3b3JrVHJlZUl0ZXIpKTsKKwkJCURpckNhY2hlSXRlcmF0b3IgaW5kZXhJdGVyID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOworCQkJRmlsZVRyZWVJdGVyYXRvciB3b3JrVHJlZUl0ZXIgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKKwkJCXdhbGsuYWRkVHJlZSh3b3JrVHJlZUl0ZXIpOworCQkJd2Fsay5zZXRGaWx0ZXIoUGF0aEZpbHRlci5jcmVhdGUocGF0aCkpOworCQorCQkJYXNzZXJ0VHJ1ZSh3YWxrLm5leHQoKSk7CisJCQlhc3NlcnRUcnVlKGluZGV4SXRlci5pZEVxdWFsKHdvcmtUcmVlSXRlcikpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBzdWJtb2R1bGVXaXRoTm9HaXREaXJlY3RvcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOwotCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOwotCQlmaW5hbCBSZXZDb21taXQgaWQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7Ci0JCWZpbmFsIFN0cmluZyBwYXRoID0gInN1YiI7Ci0JCURpckNhY2hlIGNhY2hlID0gZGIubG9ja0RpckNhY2hlKCk7Ci0JCURpckNhY2hlRWRpdG9yIGVkaXRvciA9IGNhY2hlLmVkaXRvcigpOwotCQllZGl0b3IuYWRkKG5ldyBQYXRoRWRpdChwYXRoKSB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCWZpbmFsIFJldkNvbW1pdCBpZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKKwkJCWZpbmFsIFN0cmluZyBwYXRoID0gInN1YiI7CisJCQlEaXJDYWNoZSBjYWNoZSA9IGRiLmxvY2tEaXJDYWNoZSgpOworCQkJRGlyQ2FjaGVFZGl0b3IgZWRpdG9yID0gY2FjaGUuZWRpdG9yKCk7CisJCQllZGl0b3IuYWRkKG5ldyBQYXRoRWRpdChwYXRoKSB7CiAKLQkJCXB1YmxpYyB2b2lkIGFwcGx5KERpckNhY2hlRW50cnkgZW50KSB7Ci0JCQkJZW50LnNldEZpbGVNb2RlKEZpbGVNb2RlLkdJVExJTkspOwotCQkJCWVudC5zZXRPYmplY3RJZChpZCk7Ci0JCQl9Ci0JCX0pOwotCQllZGl0b3IuY29tbWl0KCk7CisJCQkJcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKKwkJCQkJZW50LnNldEZpbGVNb2RlKEZpbGVNb2RlLkdJVExJTkspOworCQkJCQllbnQuc2V0T2JqZWN0SWQoaWQpOworCQkJCX0KKwkJCX0pOworCQkJZWRpdG9yLmNvbW1pdCgpOwogCi0JCUZpbGUgc3VibW9kdWxlUm9vdCA9IG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIHBhdGgpOwotCQlhc3NlcnRUcnVlKHN1Ym1vZHVsZVJvb3QubWtkaXIoKSk7Ci0JCWFzc2VydFRydWUobmV3IEZpbGUoc3VibW9kdWxlUm9vdCwgQ29uc3RhbnRzLkRPVF9HSVQpLm1rZGlyKCkpOworCQkJRmlsZSBzdWJtb2R1bGVSb290ID0gbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgcGF0aCk7CisJCQlhc3NlcnRUcnVlKHN1Ym1vZHVsZVJvb3QubWtkaXIoKSk7CisJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKHN1Ym1vZHVsZVJvb3QsIENvbnN0YW50cy5ET1RfR0lUKS5ta2RpcigpKTsKIAotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJRGlyQ2FjaGVJdGVyYXRvciBpbmRleEl0ZXIgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCUZpbGVUcmVlSXRlcmF0b3Igd29ya1RyZWVJdGVyID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOwotCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKLQkJd2Fsay5hZGRUcmVlKHdvcmtUcmVlSXRlcik7Ci0JCXdhbGsuc2V0RmlsdGVyKFBhdGhGaWx0ZXIuY3JlYXRlKHBhdGgpKTsKKwkJCURpckNhY2hlSXRlcmF0b3IgaW5kZXhJdGVyID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOworCQkJRmlsZVRyZWVJdGVyYXRvciB3b3JrVHJlZUl0ZXIgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKKwkJCXdhbGsuYWRkVHJlZSh3b3JrVHJlZUl0ZXIpOworCQkJd2Fsay5zZXRGaWx0ZXIoUGF0aEZpbHRlci5jcmVhdGUocGF0aCkpOwogCi0JCWFzc2VydFRydWUod2Fsay5uZXh0KCkpOwotCQlhc3NlcnRGYWxzZShpbmRleEl0ZXIuaWRFcXVhbCh3b3JrVHJlZUl0ZXIpKTsKLQkJYXNzZXJ0RXF1YWxzKE9iamVjdElkLnplcm9JZCgpLCB3b3JrVHJlZUl0ZXIuZ2V0RW50cnlPYmplY3RJZCgpKTsKKwkJCWFzc2VydFRydWUod2Fsay5uZXh0KCkpOworCQkJYXNzZXJ0RmFsc2UoaW5kZXhJdGVyLmlkRXF1YWwod29ya1RyZWVJdGVyKSk7CisJCQlhc3NlcnRFcXVhbHMoT2JqZWN0SWQuemVyb0lkKCksIHdvcmtUcmVlSXRlci5nZXRFbnRyeU9iamVjdElkKCkpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBzdWJtb2R1bGVXaXRoTm9IZWFkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKLQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKLQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKLQkJZmluYWwgUmV2Q29tbWl0IGlkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOwotCQlmaW5hbCBTdHJpbmcgcGF0aCA9ICJzdWIiOwotCQlEaXJDYWNoZSBjYWNoZSA9IGRiLmxvY2tEaXJDYWNoZSgpOwotCQlEaXJDYWNoZUVkaXRvciBlZGl0b3IgPSBjYWNoZS5lZGl0b3IoKTsKLQkJZWRpdG9yLmFkZChuZXcgUGF0aEVkaXQocGF0aCkgeworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlmaW5hbCBSZXZDb21taXQgaWQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisJCQlmaW5hbCBTdHJpbmcgcGF0aCA9ICJzdWIiOworCQkJRGlyQ2FjaGUgY2FjaGUgPSBkYi5sb2NrRGlyQ2FjaGUoKTsKKwkJCURpckNhY2hlRWRpdG9yIGVkaXRvciA9IGNhY2hlLmVkaXRvcigpOworCQkJZWRpdG9yLmFkZChuZXcgUGF0aEVkaXQocGF0aCkgewogCi0JCQlwdWJsaWMgdm9pZCBhcHBseShEaXJDYWNoZUVudHJ5IGVudCkgewotCQkJCWVudC5zZXRGaWxlTW9kZShGaWxlTW9kZS5HSVRMSU5LKTsKLQkJCQllbnQuc2V0T2JqZWN0SWQoaWQpOwotCQkJfQotCQl9KTsKLQkJZWRpdG9yLmNvbW1pdCgpOworCQkJCXB1YmxpYyB2b2lkIGFwcGx5KERpckNhY2hlRW50cnkgZW50KSB7CisJCQkJCWVudC5zZXRGaWxlTW9kZShGaWxlTW9kZS5HSVRMSU5LKTsKKwkJCQkJZW50LnNldE9iamVjdElkKGlkKTsKKwkJCQl9CisJCQl9KTsKKwkJCWVkaXRvci5jb21taXQoKTsKIAotCQlhc3NlcnROb3ROdWxsKEdpdC5pbml0KCkuc2V0RGlyZWN0b3J5KG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIHBhdGgpKQotCQkJCS5jYWxsKCkuZ2V0UmVwb3NpdG9yeSgpKTsKKwkJCWFzc2VydE5vdE51bGwoR2l0LmluaXQoKS5zZXREaXJlY3RvcnkobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgcGF0aCkpCisJCQkJCS5jYWxsKCkuZ2V0UmVwb3NpdG9yeSgpKTsKIAotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJRGlyQ2FjaGVJdGVyYXRvciBpbmRleEl0ZXIgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCUZpbGVUcmVlSXRlcmF0b3Igd29ya1RyZWVJdGVyID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOwotCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKLQkJd2Fsay5hZGRUcmVlKHdvcmtUcmVlSXRlcik7Ci0JCXdhbGsuc2V0RmlsdGVyKFBhdGhGaWx0ZXIuY3JlYXRlKHBhdGgpKTsKKwkJCURpckNhY2hlSXRlcmF0b3IgaW5kZXhJdGVyID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOworCQkJRmlsZVRyZWVJdGVyYXRvciB3b3JrVHJlZUl0ZXIgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKKwkJCXdhbGsuYWRkVHJlZSh3b3JrVHJlZUl0ZXIpOworCQkJd2Fsay5zZXRGaWx0ZXIoUGF0aEZpbHRlci5jcmVhdGUocGF0aCkpOwogCi0JCWFzc2VydFRydWUod2Fsay5uZXh0KCkpOwotCQlhc3NlcnRGYWxzZShpbmRleEl0ZXIuaWRFcXVhbCh3b3JrVHJlZUl0ZXIpKTsKLQkJYXNzZXJ0RXF1YWxzKE9iamVjdElkLnplcm9JZCgpLCB3b3JrVHJlZUl0ZXIuZ2V0RW50cnlPYmplY3RJZCgpKTsKKwkJCWFzc2VydFRydWUod2Fsay5uZXh0KCkpOworCQkJYXNzZXJ0RmFsc2UoaW5kZXhJdGVyLmlkRXF1YWwod29ya1RyZWVJdGVyKSk7CisJCQlhc3NlcnRFcXVhbHMoT2JqZWN0SWQuemVyb0lkKCksIHdvcmtUcmVlSXRlci5nZXRFbnRyeU9iamVjdElkKCkpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBzdWJtb2R1bGVEaXJlY3RvcnlJdGVyYXRvcigpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCWZpbmFsIFJldkNvbW1pdCBpZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKLQkJZmluYWwgU3RyaW5nIHBhdGggPSAic3ViIjsKLQkJRGlyQ2FjaGUgY2FjaGUgPSBkYi5sb2NrRGlyQ2FjaGUoKTsKLQkJRGlyQ2FjaGVFZGl0b3IgZWRpdG9yID0gY2FjaGUuZWRpdG9yKCk7Ci0JCWVkaXRvci5hZGQobmV3IFBhdGhFZGl0KHBhdGgpIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJZmluYWwgUmV2Q29tbWl0IGlkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCQkJZmluYWwgU3RyaW5nIHBhdGggPSAic3ViIjsKKwkJCURpckNhY2hlIGNhY2hlID0gZGIubG9ja0RpckNhY2hlKCk7CisJCQlEaXJDYWNoZUVkaXRvciBlZGl0b3IgPSBjYWNoZS5lZGl0b3IoKTsKKwkJCWVkaXRvci5hZGQobmV3IFBhdGhFZGl0KHBhdGgpIHsKIAotCQkJcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKLQkJCQllbnQuc2V0RmlsZU1vZGUoRmlsZU1vZGUuR0lUTElOSyk7Ci0JCQkJZW50LnNldE9iamVjdElkKGlkKTsKLQkJCX0KLQkJfSk7Ci0JCWVkaXRvci5jb21taXQoKTsKKwkJCQlwdWJsaWMgdm9pZCBhcHBseShEaXJDYWNoZUVudHJ5IGVudCkgeworCQkJCQllbnQuc2V0RmlsZU1vZGUoRmlsZU1vZGUuR0lUTElOSyk7CisJCQkJCWVudC5zZXRPYmplY3RJZChpZCk7CisJCQkJfQorCQkJfSk7CisJCQllZGl0b3IuY29tbWl0KCk7CiAKLQkJR2l0LmNsb25lUmVwb3NpdG9yeSgpLnNldFVSSShkYi5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvU3RyaW5nKCkpCi0JCQkJLnNldERpcmVjdG9yeShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBwYXRoKSkuY2FsbCgpCi0JCQkJLmdldFJlcG9zaXRvcnkoKS5jbG9zZSgpOworCQkJR2l0LmNsb25lUmVwb3NpdG9yeSgpLnNldFVSSShkYi5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvU3RyaW5nKCkpCisJCQkJCS5zZXREaXJlY3RvcnkobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgcGF0aCkpLmNhbGwoKQorCQkJCQkuZ2V0UmVwb3NpdG9yeSgpLmNsb3NlKCk7CiAKLQkJVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCURpckNhY2hlSXRlcmF0b3IgaW5kZXhJdGVyID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOwotCQlGaWxlVHJlZUl0ZXJhdG9yIHdvcmtUcmVlSXRlciA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiLmdldFdvcmtUcmVlKCksCi0JCQkJZGIuZ2V0RlMoKSwgZGIuZ2V0Q29uZmlnKCkuZ2V0KFdvcmtpbmdUcmVlT3B0aW9ucy5LRVkpKTsKLQkJd2Fsay5hZGRUcmVlKGluZGV4SXRlcik7Ci0JCXdhbGsuYWRkVHJlZSh3b3JrVHJlZUl0ZXIpOwotCQl3YWxrLnNldEZpbHRlcihQYXRoRmlsdGVyLmNyZWF0ZShwYXRoKSk7CisJCQlEaXJDYWNoZUl0ZXJhdG9yIGluZGV4SXRlciA9IG5ldyBEaXJDYWNoZUl0ZXJhdG9yKGRiLnJlYWREaXJDYWNoZSgpKTsKKwkJCUZpbGVUcmVlSXRlcmF0b3Igd29ya1RyZWVJdGVyID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIuZ2V0V29ya1RyZWUoKSwKKwkJCQkJZGIuZ2V0RlMoKSwgZGIuZ2V0Q29uZmlnKCkuZ2V0KFdvcmtpbmdUcmVlT3B0aW9ucy5LRVkpKTsKKwkJCXdhbGsuYWRkVHJlZShpbmRleEl0ZXIpOworCQkJd2Fsay5hZGRUcmVlKHdvcmtUcmVlSXRlcik7CisJCQl3YWxrLnNldEZpbHRlcihQYXRoRmlsdGVyLmNyZWF0ZShwYXRoKSk7CiAKLQkJYXNzZXJ0VHJ1ZSh3YWxrLm5leHQoKSk7Ci0JCWFzc2VydFRydWUoaW5kZXhJdGVyLmlkRXF1YWwod29ya1RyZWVJdGVyKSk7CisJCQlhc3NlcnRUcnVlKHdhbGsubmV4dCgpKTsKKwkJCWFzc2VydFRydWUoaW5kZXhJdGVyLmlkRXF1YWwod29ya1RyZWVJdGVyKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHN1Ym1vZHVsZU5lc3RlZFdpdGhIZWFkTWF0Y2hpbmdJbmRleCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7Ci0JCWZpbmFsIFJldkNvbW1pdCBpZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKLQkJZmluYWwgU3RyaW5nIHBhdGggPSAic3ViL2RpcjEvZGlyMiI7Ci0JCURpckNhY2hlIGNhY2hlID0gZGIubG9ja0RpckNhY2hlKCk7Ci0JCURpckNhY2hlRWRpdG9yIGVkaXRvciA9IGNhY2hlLmVkaXRvcigpOwotCQllZGl0b3IuYWRkKG5ldyBQYXRoRWRpdChwYXRoKSB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCVRyZWVXYWxrIHdhbGsgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCWZpbmFsIFJldkNvbW1pdCBpZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjcmVhdGUgZmlsZSIpLmNhbGwoKTsKKwkJCWZpbmFsIFN0cmluZyBwYXRoID0gInN1Yi9kaXIxL2RpcjIiOworCQkJRGlyQ2FjaGUgY2FjaGUgPSBkYi5sb2NrRGlyQ2FjaGUoKTsKKwkJCURpckNhY2hlRWRpdG9yIGVkaXRvciA9IGNhY2hlLmVkaXRvcigpOworCQkJZWRpdG9yLmFkZChuZXcgUGF0aEVkaXQocGF0aCkgewogCi0JCQlwdWJsaWMgdm9pZCBhcHBseShEaXJDYWNoZUVudHJ5IGVudCkgewotCQkJCWVudC5zZXRGaWxlTW9kZShGaWxlTW9kZS5HSVRMSU5LKTsKLQkJCQllbnQuc2V0T2JqZWN0SWQoaWQpOwotCQkJfQotCQl9KTsKLQkJZWRpdG9yLmNvbW1pdCgpOworCQkJCXB1YmxpYyB2b2lkIGFwcGx5KERpckNhY2hlRW50cnkgZW50KSB7CisJCQkJCWVudC5zZXRGaWxlTW9kZShGaWxlTW9kZS5HSVRMSU5LKTsKKwkJCQkJZW50LnNldE9iamVjdElkKGlkKTsKKwkJCQl9CisJCQl9KTsKKwkJCWVkaXRvci5jb21taXQoKTsKIAotCQlHaXQuY2xvbmVSZXBvc2l0b3J5KCkuc2V0VVJJKGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKSkKLQkJCQkuc2V0RGlyZWN0b3J5KG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIHBhdGgpKS5jYWxsKCkKLQkJCQkuZ2V0UmVwb3NpdG9yeSgpLmNsb3NlKCk7CisJCQlHaXQuY2xvbmVSZXBvc2l0b3J5KCkuc2V0VVJJKGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKSkKKwkJCQkJLnNldERpcmVjdG9yeShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBwYXRoKSkuY2FsbCgpCisJCQkJCS5nZXRSZXBvc2l0b3J5KCkuY2xvc2UoKTsKIAotCQlUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJRGlyQ2FjaGVJdGVyYXRvciBpbmRleEl0ZXIgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCUZpbGVUcmVlSXRlcmF0b3Igd29ya1RyZWVJdGVyID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOwotCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKLQkJd2Fsay5hZGRUcmVlKHdvcmtUcmVlSXRlcik7Ci0JCXdhbGsuc2V0RmlsdGVyKFBhdGhGaWx0ZXIuY3JlYXRlKHBhdGgpKTsKKwkJCURpckNhY2hlSXRlcmF0b3IgaW5kZXhJdGVyID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOworCQkJRmlsZVRyZWVJdGVyYXRvciB3b3JrVHJlZUl0ZXIgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCQl3YWxrLmFkZFRyZWUoaW5kZXhJdGVyKTsKKwkJCXdhbGsuYWRkVHJlZSh3b3JrVHJlZUl0ZXIpOworCQkJd2Fsay5zZXRGaWx0ZXIoUGF0aEZpbHRlci5jcmVhdGUocGF0aCkpOwogCi0JCWFzc2VydFRydWUod2Fsay5uZXh0KCkpOwotCQlhc3NlcnRUcnVlKGluZGV4SXRlci5pZEVxdWFsKHdvcmtUcmVlSXRlcikpOworCQkJYXNzZXJ0VHJ1ZSh3YWxrLm5leHQoKSk7CisJCQlhc3NlcnRUcnVlKGluZGV4SXRlci5pZEVxdWFsKHdvcmtUcmVlSXRlcikpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBpZE9mZnNldCgpIHRocm93cyBFeGNlcHRpb24gewotCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7Ci0JCXdyaXRlVHJhc2hGaWxlKCJmaWxlQWluZnNvbmx5IiwgIkEiKTsKLQkJRmlsZSBmaWxlQmluaW5kZXggPSB3cml0ZVRyYXNoRmlsZSgiZmlsZUJpbmluZGV4IiwgIkIiKTsKLQkJZnNUaWNrKGZpbGVCaW5pbmRleCk7Ci0JCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZUJpbmluZGV4IikuY2FsbCgpOwotCQl3cml0ZVRyYXNoRmlsZSgiZmlsZUNpbmZzb25seSIsICJDIik7Ci0JCVRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJRGlyQ2FjaGVJdGVyYXRvciBpbmRleEl0ZXIgPSBuZXcgRGlyQ2FjaGVJdGVyYXRvcihkYi5yZWFkRGlyQ2FjaGUoKSk7Ci0JCUZpbGVUcmVlSXRlcmF0b3Igd29ya1RyZWVJdGVyID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOwotCQl0dy5hZGRUcmVlKGluZGV4SXRlcik7Ci0JCXR3LmFkZFRyZWUod29ya1RyZWVJdGVyKTsKLQkJd29ya1RyZWVJdGVyLnNldERpckNhY2hlSXRlcmF0b3IodHcsIDApOwotCQlhc3NlcnRFbnRyeSgiZDQ2YzMwNWU4NWI2MzA1NThlZTE5Y2M0N2U3M2QyZTVjOGM2NGNkYyIsICJhLCIsIHR3KTsKLQkJYXNzZXJ0RW50cnkoIjU4ZWU0MDNmOTg1MzhlYzAyNDA5NTM4YjNmODBhZGY2MTBhY2NkZWMiLCAiYSxiIiwgdHcpOwotCQlhc3NlcnRFbnRyeSgiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsICJhIiwgdHcpOwotCQlhc3NlcnRFbnRyeSgiYjhkMzBmZjM5NzYyNmYwZjFkMzUzOGQ2NjA2N2VkZjg2NWUyMDFkNiIsICJhMGIiLCB0dyk7Ci0JCS8vIFRoZSByZWFzb24gZm9yIGFkZGluZyB0aGlzIHRlc3QuIENoZWNrIHRoYXQgdGhlIGlkIGlzIGNvcnJlY3QgZm9yCi0JCS8vIG1peGVkCi0JCWFzc2VydEVudHJ5KCI4YzdlNWE2NjdmMWI3NzE4NDdmZTg4YzAxYzNkZTM0NDEzYTFiMjIwIiwKLQkJCQkiZmlsZUFpbmZzb25seSIsIHR3KTsKLQkJYXNzZXJ0RW50cnkoIjczNzFmNDdhNmY4YmQyM2E4ZmExYThiMmE5NDc5Y2RkNzYzODBlNTQiLCAiZmlsZUJpbmluZGV4IiwKLQkJCQl0dyk7Ci0JCWFzc2VydEVudHJ5KCI5NmQ4MGNkNmM0ZTcxNThkYmViZDA4NDlmNGZiN2NlNTEzZTU4MjhjIiwKLQkJCQkiZmlsZUNpbmZzb25seSIsIHR3KTsKLQkJYXNzZXJ0RmFsc2UodHcubmV4dCgpKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZUFpbmZzb25seSIsICJBIik7CisJCQlGaWxlIGZpbGVCaW5pbmRleCA9IHdyaXRlVHJhc2hGaWxlKCJmaWxlQmluaW5kZXgiLCAiQiIpOworCQkJZnNUaWNrKGZpbGVCaW5pbmRleCk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGVCaW5pbmRleCIpLmNhbGwoKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlQ2luZnNvbmx5IiwgIkMiKTsKKwkJCURpckNhY2hlSXRlcmF0b3IgaW5kZXhJdGVyID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOworCQkJRmlsZVRyZWVJdGVyYXRvciB3b3JrVHJlZUl0ZXIgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCQl0dy5hZGRUcmVlKGluZGV4SXRlcik7CisJCQl0dy5hZGRUcmVlKHdvcmtUcmVlSXRlcik7CisJCQl3b3JrVHJlZUl0ZXIuc2V0RGlyQ2FjaGVJdGVyYXRvcih0dywgMCk7CisJCQlhc3NlcnRFbnRyeSgiZDQ2YzMwNWU4NWI2MzA1NThlZTE5Y2M0N2U3M2QyZTVjOGM2NGNkYyIsICJhLCIsIHR3KTsKKwkJCWFzc2VydEVudHJ5KCI1OGVlNDAzZjk4NTM4ZWMwMjQwOTUzOGIzZjgwYWRmNjEwYWNjZGVjIiwgImEsYiIsIHR3KTsKKwkJCWFzc2VydEVudHJ5KCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwgImEiLCB0dyk7CisJCQlhc3NlcnRFbnRyeSgiYjhkMzBmZjM5NzYyNmYwZjFkMzUzOGQ2NjA2N2VkZjg2NWUyMDFkNiIsICJhMGIiLCB0dyk7CisJCQkvLyBUaGUgcmVhc29uIGZvciBhZGRpbmcgdGhpcyB0ZXN0LiBDaGVjayB0aGF0IHRoZSBpZCBpcyBjb3JyZWN0IGZvcgorCQkJLy8gbWl4ZWQKKwkJCWFzc2VydEVudHJ5KCI4YzdlNWE2NjdmMWI3NzE4NDdmZTg4YzAxYzNkZTM0NDEzYTFiMjIwIiwKKwkJCQkJImZpbGVBaW5mc29ubHkiLCB0dyk7CisJCQlhc3NlcnRFbnRyeSgiNzM3MWY0N2E2ZjhiZDIzYThmYTFhOGIyYTk0NzljZGQ3NjM4MGU1NCIsICJmaWxlQmluaW5kZXgiLAorCQkJCQl0dyk7CisJCQlhc3NlcnRFbnRyeSgiOTZkODBjZDZjNGU3MTU4ZGJlYmQwODQ5ZjRmYjdjZTUxM2U1ODI4YyIsCisJCQkJCSJmaWxlQ2luZnNvbmx5IiwgdHcpOworCQkJYXNzZXJ0RmFsc2UodHcubmV4dCgpKTsKKwkJfQogCX0KIAogCXByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0RW50cnkoU3RyaW5nIHNoYTFzdHJpbmcsIFN0cmluZyBwYXRoLCBUcmVlV2FsayB0dykKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Qb3N0T3JkZXJUcmVlV2Fsa1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Qb3N0T3JkZXJUcmVlV2Fsa1Rlc3QuamF2YQppbmRleCBhY2JiYjM5Li42YWQ0N2MyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvUG9zdE9yZGVyVHJlZVdhbGtUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1Bvc3RPcmRlclRyZWVXYWxrVGVzdC5qYXZhCkBAIC02MCwxMjQgKzYwLDEyNCBAQAogcHVibGljIGNsYXNzIFBvc3RPcmRlclRyZWVXYWxrVGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZV9Ob1Bvc3RPcmRlcigpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCWFzc2VydEZhbHNlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOworCQl0cnkgKGZpbmFsIFRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJYXNzZXJ0RmFsc2UodHcuaXNQb3N0T3JkZXJUcmF2ZXJzYWwoKSk7CisJCX0KIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RJbml0aWFsaXplX1RvZ2dsZVBvc3RPcmRlcigpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCWFzc2VydEZhbHNlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOwotCQl0dy5zZXRQb3N0T3JkZXJUcmF2ZXJzYWwodHJ1ZSk7Ci0JCWFzc2VydFRydWUodHcuaXNQb3N0T3JkZXJUcmF2ZXJzYWwoKSk7Ci0JCXR3LnNldFBvc3RPcmRlclRyYXZlcnNhbChmYWxzZSk7Ci0JCWFzc2VydEZhbHNlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOworCQl0cnkgKGZpbmFsIFRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJYXNzZXJ0RmFsc2UodHcuaXNQb3N0T3JkZXJUcmF2ZXJzYWwoKSk7CisJCQl0dy5zZXRQb3N0T3JkZXJUcmF2ZXJzYWwodHJ1ZSk7CisJCQlhc3NlcnRUcnVlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOworCQkJdHcuc2V0UG9zdE9yZGVyVHJhdmVyc2FsKGZhbHNlKTsKKwkJCWFzc2VydEZhbHNlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOworCQl9CiAJfQogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0UmVzZXREb2VzTm90QWZmZWN0UG9zdE9yZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJdHcuc2V0UG9zdE9yZGVyVHJhdmVyc2FsKHRydWUpOwotCQlhc3NlcnRUcnVlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOwotCQl0dy5yZXNldCgpOwotCQlhc3NlcnRUcnVlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOworCQl0cnkgKGZpbmFsIFRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJdHcuc2V0UG9zdE9yZGVyVHJhdmVyc2FsKHRydWUpOworCQkJYXNzZXJ0VHJ1ZSh0dy5pc1Bvc3RPcmRlclRyYXZlcnNhbCgpKTsKKwkJCXR3LnJlc2V0KCk7CisJCQlhc3NlcnRUcnVlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOwogCi0JCXR3LnNldFBvc3RPcmRlclRyYXZlcnNhbChmYWxzZSk7Ci0JCWFzc2VydEZhbHNlKHR3LmlzUG9zdE9yZGVyVHJhdmVyc2FsKCkpOwotCQl0dy5yZXNldCgpOwotCQlhc3NlcnRGYWxzZSh0dy5pc1Bvc3RPcmRlclRyYXZlcnNhbCgpKTsKKwkJCXR3LnNldFBvc3RPcmRlclRyYXZlcnNhbChmYWxzZSk7CisJCQlhc3NlcnRGYWxzZSh0dy5pc1Bvc3RPcmRlclRyYXZlcnNhbCgpKTsKKwkJCXR3LnJlc2V0KCk7CisJCQlhc3NlcnRGYWxzZSh0dy5pc1Bvc3RPcmRlclRyYXZlcnNhbCgpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdE5vUG9zdE9yZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWZpbmFsIERpckNhY2hlIHRyZWUgPSBkYi5yZWFkRGlyQ2FjaGUoKTsKLQkJewotCQkJZmluYWwgRGlyQ2FjaGVCdWlsZGVyIGIgPSB0cmVlLmJ1aWxkZXIoKTsKKwkJZmluYWwgRGlyQ2FjaGVCdWlsZGVyIGIgPSB0cmVlLmJ1aWxkZXIoKTsKIAotCQkJYi5hZGQobWFrZUZpbGUoImEiKSk7Ci0JCQliLmFkZChtYWtlRmlsZSgiYi9jIikpOwotCQkJYi5hZGQobWFrZUZpbGUoImIvZCIpKTsKLQkJCWIuYWRkKG1ha2VGaWxlKCJxIikpOworCQliLmFkZChtYWtlRmlsZSgiYSIpKTsKKwkJYi5hZGQobWFrZUZpbGUoImIvYyIpKTsKKwkJYi5hZGQobWFrZUZpbGUoImIvZCIpKTsKKwkJYi5hZGQobWFrZUZpbGUoInEiKSk7CiAKLQkJCWIuZmluaXNoKCk7Ci0JCQlhc3NlcnRFcXVhbHMoNCwgdHJlZS5nZXRFbnRyeUNvdW50KCkpOworCQliLmZpbmlzaCgpOworCQlhc3NlcnRFcXVhbHMoNCwgdHJlZS5nZXRFbnRyeUNvdW50KCkpOworCisJCXRyeSAoZmluYWwgVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQl0dy5zZXRQb3N0T3JkZXJUcmF2ZXJzYWwoZmFsc2UpOworCQkJdHcuYWRkVHJlZShuZXcgRGlyQ2FjaGVJdGVyYXRvcih0cmVlKSk7CisKKwkJCWFzc2VydE1vZGVzKCJhIiwgUkVHVUxBUl9GSUxFLCB0dyk7CisJCQlhc3NlcnRNb2RlcygiYiIsIFRSRUUsIHR3KTsKKwkJCWFzc2VydFRydWUodHcuaXNTdWJ0cmVlKCkpOworCQkJYXNzZXJ0RmFsc2UodHcuaXNQb3N0Q2hpbGRyZW4oKSk7CisJCQl0dy5lbnRlclN1YnRyZWUoKTsKKwkJCWFzc2VydE1vZGVzKCJiL2MiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKKwkJCWFzc2VydE1vZGVzKCJiL2QiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKKwkJCWFzc2VydE1vZGVzKCJxIiwgUkVHVUxBUl9GSUxFLCB0dyk7CiAJCX0KLQotCQlmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCXR3LnNldFBvc3RPcmRlclRyYXZlcnNhbChmYWxzZSk7Ci0JCXR3LmFkZFRyZWUobmV3IERpckNhY2hlSXRlcmF0b3IodHJlZSkpOwotCi0JCWFzc2VydE1vZGVzKCJhIiwgUkVHVUxBUl9GSUxFLCB0dyk7Ci0JCWFzc2VydE1vZGVzKCJiIiwgVFJFRSwgdHcpOwotCQlhc3NlcnRUcnVlKHR3LmlzU3VidHJlZSgpKTsKLQkJYXNzZXJ0RmFsc2UodHcuaXNQb3N0Q2hpbGRyZW4oKSk7Ci0JCXR3LmVudGVyU3VidHJlZSgpOwotCQlhc3NlcnRNb2RlcygiYi9jIiwgUkVHVUxBUl9GSUxFLCB0dyk7Ci0JCWFzc2VydE1vZGVzKCJiL2QiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKLQkJYXNzZXJ0TW9kZXMoInEiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RXaXRoUG9zdE9yZGVyX0VudGVyU3VidHJlZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlmaW5hbCBEaXJDYWNoZSB0cmVlID0gZGIucmVhZERpckNhY2hlKCk7Ci0JCXsKLQkJCWZpbmFsIERpckNhY2hlQnVpbGRlciBiID0gdHJlZS5idWlsZGVyKCk7CisJCWZpbmFsIERpckNhY2hlQnVpbGRlciBiID0gdHJlZS5idWlsZGVyKCk7CiAKLQkJCWIuYWRkKG1ha2VGaWxlKCJhIikpOwotCQkJYi5hZGQobWFrZUZpbGUoImIvYyIpKTsKLQkJCWIuYWRkKG1ha2VGaWxlKCJiL2QiKSk7Ci0JCQliLmFkZChtYWtlRmlsZSgicSIpKTsKKwkJYi5hZGQobWFrZUZpbGUoImEiKSk7CisJCWIuYWRkKG1ha2VGaWxlKCJiL2MiKSk7CisJCWIuYWRkKG1ha2VGaWxlKCJiL2QiKSk7CisJCWIuYWRkKG1ha2VGaWxlKCJxIikpOwogCi0JCQliLmZpbmlzaCgpOwotCQkJYXNzZXJ0RXF1YWxzKDQsIHRyZWUuZ2V0RW50cnlDb3VudCgpKTsKKwkJYi5maW5pc2goKTsKKwkJYXNzZXJ0RXF1YWxzKDQsIHRyZWUuZ2V0RW50cnlDb3VudCgpKTsKKworCQl0cnkgKGZpbmFsIFRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKSkgeworCQkJdHcuc2V0UG9zdE9yZGVyVHJhdmVyc2FsKHRydWUpOworCQkJdHcuYWRkVHJlZShuZXcgRGlyQ2FjaGVJdGVyYXRvcih0cmVlKSk7CisKKwkJCWFzc2VydE1vZGVzKCJhIiwgUkVHVUxBUl9GSUxFLCB0dyk7CisKKwkJCWFzc2VydE1vZGVzKCJiIiwgVFJFRSwgdHcpOworCQkJYXNzZXJ0VHJ1ZSh0dy5pc1N1YnRyZWUoKSk7CisJCQlhc3NlcnRGYWxzZSh0dy5pc1Bvc3RDaGlsZHJlbigpKTsKKwkJCXR3LmVudGVyU3VidHJlZSgpOworCQkJYXNzZXJ0TW9kZXMoImIvYyIsIFJFR1VMQVJfRklMRSwgdHcpOworCQkJYXNzZXJ0TW9kZXMoImIvZCIsIFJFR1VMQVJfRklMRSwgdHcpOworCisJCQlhc3NlcnRNb2RlcygiYiIsIFRSRUUsIHR3KTsKKwkJCWFzc2VydFRydWUodHcuaXNTdWJ0cmVlKCkpOworCQkJYXNzZXJ0VHJ1ZSh0dy5pc1Bvc3RDaGlsZHJlbigpKTsKKworCQkJYXNzZXJ0TW9kZXMoInEiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKIAkJfQotCi0JCWZpbmFsIFRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJdHcuc2V0UG9zdE9yZGVyVHJhdmVyc2FsKHRydWUpOwotCQl0dy5hZGRUcmVlKG5ldyBEaXJDYWNoZUl0ZXJhdG9yKHRyZWUpKTsKLQotCQlhc3NlcnRNb2RlcygiYSIsIFJFR1VMQVJfRklMRSwgdHcpOwotCi0JCWFzc2VydE1vZGVzKCJiIiwgVFJFRSwgdHcpOwotCQlhc3NlcnRUcnVlKHR3LmlzU3VidHJlZSgpKTsKLQkJYXNzZXJ0RmFsc2UodHcuaXNQb3N0Q2hpbGRyZW4oKSk7Ci0JCXR3LmVudGVyU3VidHJlZSgpOwotCQlhc3NlcnRNb2RlcygiYi9jIiwgUkVHVUxBUl9GSUxFLCB0dyk7Ci0JCWFzc2VydE1vZGVzKCJiL2QiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKLQotCQlhc3NlcnRNb2RlcygiYiIsIFRSRUUsIHR3KTsKLQkJYXNzZXJ0VHJ1ZSh0dy5pc1N1YnRyZWUoKSk7Ci0JCWFzc2VydFRydWUodHcuaXNQb3N0Q2hpbGRyZW4oKSk7Ci0KLQkJYXNzZXJ0TW9kZXMoInEiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RXaXRoUG9zdE9yZGVyX05vRW50ZXJTdWJ0cmVlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWZpbmFsIERpckNhY2hlIHRyZWUgPSBkYi5yZWFkRGlyQ2FjaGUoKTsKLQkJewotCQkJZmluYWwgRGlyQ2FjaGVCdWlsZGVyIGIgPSB0cmVlLmJ1aWxkZXIoKTsKKwkJZmluYWwgRGlyQ2FjaGVCdWlsZGVyIGIgPSB0cmVlLmJ1aWxkZXIoKTsKIAotCQkJYi5hZGQobWFrZUZpbGUoImEiKSk7Ci0JCQliLmFkZChtYWtlRmlsZSgiYi9jIikpOwotCQkJYi5hZGQobWFrZUZpbGUoImIvZCIpKTsKLQkJCWIuYWRkKG1ha2VGaWxlKCJxIikpOworCQliLmFkZChtYWtlRmlsZSgiYSIpKTsKKwkJYi5hZGQobWFrZUZpbGUoImIvYyIpKTsKKwkJYi5hZGQobWFrZUZpbGUoImIvZCIpKTsKKwkJYi5hZGQobWFrZUZpbGUoInEiKSk7CiAKLQkJCWIuZmluaXNoKCk7Ci0JCQlhc3NlcnRFcXVhbHMoNCwgdHJlZS5nZXRFbnRyeUNvdW50KCkpOworCQliLmZpbmlzaCgpOworCQlhc3NlcnRFcXVhbHMoNCwgdHJlZS5nZXRFbnRyeUNvdW50KCkpOworCisJCXRyeSAoZmluYWwgVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQl0dy5zZXRQb3N0T3JkZXJUcmF2ZXJzYWwodHJ1ZSk7CisJCQl0dy5hZGRUcmVlKG5ldyBEaXJDYWNoZUl0ZXJhdG9yKHRyZWUpKTsKKworCQkJYXNzZXJ0TW9kZXMoImEiLCBSRUdVTEFSX0ZJTEUsIHR3KTsKKworCQkJYXNzZXJ0TW9kZXMoImIiLCBUUkVFLCB0dyk7CisJCQlhc3NlcnRUcnVlKHR3LmlzU3VidHJlZSgpKTsKKwkJCWFzc2VydEZhbHNlKHR3LmlzUG9zdENoaWxkcmVuKCkpOworCisJCQlhc3NlcnRNb2RlcygicSIsIFJFR1VMQVJfRklMRSwgdHcpOwogCQl9Ci0KLQkJZmluYWwgVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl0dy5zZXRQb3N0T3JkZXJUcmF2ZXJzYWwodHJ1ZSk7Ci0JCXR3LmFkZFRyZWUobmV3IERpckNhY2hlSXRlcmF0b3IodHJlZSkpOwotCi0JCWFzc2VydE1vZGVzKCJhIiwgUkVHVUxBUl9GSUxFLCB0dyk7Ci0KLQkJYXNzZXJ0TW9kZXMoImIiLCBUUkVFLCB0dyk7Ci0JCWFzc2VydFRydWUodHcuaXNTdWJ0cmVlKCkpOwotCQlhc3NlcnRGYWxzZSh0dy5pc1Bvc3RDaGlsZHJlbigpKTsKLQotCQlhc3NlcnRNb2RlcygicSIsIFJFR1VMQVJfRklMRSwgdHcpOwogCX0KIAogCXByaXZhdGUgRGlyQ2FjaGVFbnRyeSBtYWtlRmlsZShmaW5hbCBTdHJpbmcgcGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGtKYXZhN1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsa0phdmE3VGVzdC5qYXZhCmluZGV4IDEzMjhiMzguLmJhOGYxOTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsa0phdmE3VGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsa0phdmE3VGVzdC5qYXZhCkBAIC02MCwxMyArNjAsMTQgQEAgcHVibGljIHZvaWQgdGVzdFN5bWxpbmtUb0Rpck5vdFJlY3Vyc2luZ1ZpYVN5bWxpbmsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0VHJ1ZShmcy5zdXBwb3J0c1N5bWxpbmtzKCkpOwogCQl3cml0ZVRyYXNoRmlsZSgidGFyZ2V0L2RhdGEiLCAidGFyZ2V0ZGF0YSIpOwogCQlmcy5jcmVhdGVTeW1MaW5rKG5ldyBGaWxlKHRyYXNoLCAibGluayIpLCAidGFyZ2V0Iik7Ci0JCVRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJdHcuc2V0UmVjdXJzaXZlKHRydWUpOwotCQl0dy5hZGRUcmVlKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKSk7Ci0JCWFzc2VydFRydWUodHcubmV4dCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJsaW5rIiwgdHcuZ2V0UGF0aFN0cmluZygpKTsKLQkJYXNzZXJ0VHJ1ZSh0dy5uZXh0KCkpOwotCQlhc3NlcnRFcXVhbHMoInRhcmdldC9kYXRhIiwgdHcuZ2V0UGF0aFN0cmluZygpKTsKLQkJYXNzZXJ0RmFsc2UodHcubmV4dCgpKTsKKwkJdHJ5IChUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYikpIHsKKwkJCXR3LnNldFJlY3Vyc2l2ZSh0cnVlKTsKKwkJCXR3LmFkZFRyZWUobmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpKTsKKwkJCWFzc2VydFRydWUodHcubmV4dCgpKTsKKwkJCWFzc2VydEVxdWFscygibGluayIsIHR3LmdldFBhdGhTdHJpbmcoKSk7CisJCQlhc3NlcnRUcnVlKHR3Lm5leHQoKSk7CisJCQlhc3NlcnRFcXVhbHMoInRhcmdldC9kYXRhIiwgdHcuZ2V0UGF0aFN0cmluZygpKTsKKwkJCWFzc2VydEZhbHNlKHR3Lm5leHQoKSk7CisJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvZmlsdGVyL1BhdGhTdWZmaXhGaWx0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvZmlsdGVyL1BhdGhTdWZmaXhGaWx0ZXJUZXN0LmphdmEKaW5kZXggZDg3MWM1ZS4uMzg4NWM0MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL2ZpbHRlci9QYXRoU3VmZml4RmlsdGVyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9maWx0ZXIvUGF0aFN1ZmZpeEZpbHRlclRlc3QuamF2YQpAQCAtMTEzLDE1ICsxMTMsMTYgQEAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZ2V0TWF0Y2hpbmdQYXRocyhTdHJpbmcgc3VmZml4RmlsdGVyLAogCiAJcHJpdmF0ZSBMaXN0PFN0cmluZz4gZ2V0TWF0Y2hpbmdQYXRocyhTdHJpbmcgc3VmZml4RmlsdGVyLAogCQkJZmluYWwgT2JqZWN0SWQgdHJlZUlkLCBib29sZWFuIHJlY3Vyc2l2ZVdhbGspIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZpbmFsIFRyZWVXYWxrIHR3ID0gbmV3IFRyZWVXYWxrKGRiKTsKLQkJdHcuc2V0RmlsdGVyKFBhdGhTdWZmaXhGaWx0ZXIuY3JlYXRlKHN1ZmZpeEZpbHRlcikpOwotCQl0dy5zZXRSZWN1cnNpdmUocmVjdXJzaXZlV2Fsayk7Ci0JCXR3LmFkZFRyZWUodHJlZUlkKTsKKwkJdHJ5IChmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYikpIHsKKwkJCXR3LnNldEZpbHRlcihQYXRoU3VmZml4RmlsdGVyLmNyZWF0ZShzdWZmaXhGaWx0ZXIpKTsKKwkJCXR3LnNldFJlY3Vyc2l2ZShyZWN1cnNpdmVXYWxrKTsKKwkJCXR3LmFkZFRyZWUodHJlZUlkKTsKIAotCQlMaXN0PFN0cmluZz4gcGF0aHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLQkJd2hpbGUgKHR3Lm5leHQoKSkKLQkJCXBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwotCQlyZXR1cm4gcGF0aHM7CisJCQlMaXN0PFN0cmluZz4gcGF0aHMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKwkJCXdoaWxlICh0dy5uZXh0KCkpCisJCQkJcGF0aHMuYWRkKHR3LmdldFBhdGhTdHJpbmcoKSk7CisJCQlyZXR1cm4gcGF0aHM7CisJCX0KIAl9CiAKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9maWx0ZXIvVHJlZUZpbHRlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9maWx0ZXIvVHJlZUZpbHRlclRlc3QuamF2YQppbmRleCAwOTAwN2U3Li5jMzQyM2I2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvZmlsdGVyL1RyZWVGaWx0ZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL2ZpbHRlci9UcmVlRmlsdGVyVGVzdC5qYXZhCkBAIC01NSw5ICs1NSwxMCBAQAogcHVibGljIGNsYXNzIFRyZWVGaWx0ZXJUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RBTExfSW5jbHVkZXNBbnl0aGluZygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCXR3LmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOwotCQlhc3NlcnRUcnVlKFRyZWVGaWx0ZXIuQUxMLmluY2x1ZGUodHcpKTsKKwkJdHJ5IChmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYikpIHsKKwkJCXR3LmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOworCQkJYXNzZXJ0VHJ1ZShUcmVlRmlsdGVyLkFMTC5pbmNsdWRlKHR3KSk7CisJCX0KIAl9CiAKIAlAVGVzdApAQCAtNzIsMTYgKzczLDE4IEBAIHB1YmxpYyB2b2lkIHRlc3RBTExfSWRlbnRpdHlDbG9uZSgpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0Tm90QUxMX0luY2x1ZGVzTm90aGluZygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYik7Ci0JCXR3LmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOwotCQlhc3NlcnRGYWxzZShUcmVlRmlsdGVyLkFMTC5uZWdhdGUoKS5pbmNsdWRlKHR3KSk7CisJCXRyeSAoZmluYWwgVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpKSB7CisJCQl0dy5hZGRUcmVlKG5ldyBFbXB0eVRyZWVJdGVyYXRvcigpKTsKKwkJCWFzc2VydEZhbHNlKFRyZWVGaWx0ZXIuQUxMLm5lZ2F0ZSgpLmluY2x1ZGUodHcpKTsKKwkJfQogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdEFOWV9ESUZGX0luY2x1ZGVzU2luZ2xlVHJlZUNhc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZmluYWwgVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpOwotCQl0dy5hZGRUcmVlKG5ldyBFbXB0eVRyZWVJdGVyYXRvcigpKTsKLQkJYXNzZXJ0VHJ1ZShUcmVlRmlsdGVyLkFOWV9ESUZGLmluY2x1ZGUodHcpKTsKKwkJdHJ5IChmaW5hbCBUcmVlV2FsayB0dyA9IG5ldyBUcmVlV2FsayhkYikpIHsKKwkJCXR3LmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOworCQkJYXNzZXJ0VHJ1ZShUcmVlRmlsdGVyLkFOWV9ESUZGLmluY2x1ZGUodHcpKTsKKwkJfQogCX0KIAogCUBUZXN0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9OQlRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CVGVzdC5qYXZhCmluZGV4IDA2Y2IxMWIuLjdlMTFhNjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CVGVzdC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgR29vZ2xlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBHb29nbGUgSW5jLgogICogYW5kIG90aGVyIGNvcHlyaWdodCBvd25lcnMgYXMgZG9jdW1lbnRlZCBpbiB0aGUgcHJvamVjdCdzIElQIGxvZy4KICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQpAQCAtNjEsNiArNjEsMTcgQEAgcHVibGljIHZvaWQgdGVzdENvbXBhcmVVSW50MzIoKSB7CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZVVJbnQ2NCgpIHsKKwkJYXNzZXJ0VHJ1ZShOQi5jb21wYXJlVUludDY0KDAsIDApID09IDApOworCQlhc3NlcnRUcnVlKE5CLmNvbXBhcmVVSW50NjQoMSwgMCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShOQi5jb21wYXJlVUludDY0KDAsIDEpIDwgMCk7CisJCWFzc2VydFRydWUoTkIuY29tcGFyZVVJbnQ2NCgtMSwgMCkgPiAwKTsKKwkJYXNzZXJ0VHJ1ZShOQi5jb21wYXJlVUludDY0KDAsIC0xKSA8IDApOworCQlhc3NlcnRUcnVlKE5CLmNvbXBhcmVVSW50NjQoLTEsIDEpID4gMCk7CisJCWFzc2VydFRydWUoTkIuY29tcGFyZVVJbnQ2NCgxLCAtMSkgPCAwKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REZWNvZGVVSW50MTYoKSB7CiAJCWFzc2VydEVxdWFscygwLCBOQi5kZWNvZGVVSW50MTYoYigwLCAwKSwgMCkpOwogCQlhc3NlcnRFcXVhbHMoMCwgTkIuZGVjb2RlVUludDE2KHBhZGIoMywgMCwgMCksIDMpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycyBiL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycwppbmRleCAzNjA0MWY4Li5hNTAwMGRkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCkBAIC0xLDExNSArMSwxOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8Y29tcG9uZW50IGlkPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSIyIj4KLSAgICA8cmVzb3VyY2UgcGF0aD0iTUVUQS1JTkYvTUFOSUZFU1QuTUYiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkZpbGVUcmVlRW50cnkiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMDUzMjQxMzQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlVHJlZUVudHJ5Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXRfNC4yLjAiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9Ik1FVEEtSU5GL01BTklGRVNULk1GIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5HaXRsaW5rVHJlZUVudHJ5Ij4KLSAgICAgICAgPGZpbHRlciBpZD0iMzA1MzI0MTM0Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuR2l0bGlua1RyZWVFbnRyeSIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0XzQuMi4wIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJNRVRBLUlORi9NQU5JRkVTVC5NRiIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuU3ltbGlua1RyZWVFbnRyeSI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMwNTMyNDEzNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQubGliLlN5bWxpbmtUcmVlRW50cnkiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdF80LjIuMCIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0iTUVUQS1JTkYvTUFOSUZFU1QuTUYiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLlRyZWUiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMDUzMjQxMzQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UcmVlIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXRfNC4yLjAiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9Ik1FVEEtSU5GL01BTklGRVNULk1GIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UcmVlRW50cnkiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMDUzMjQxMzQiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UcmVlRW50cnkiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdF80LjIuMCIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KICAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc05vZGUiPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9ImF0dHJpYnV0ZXMgd2VyZW4ndCByZWFsbHkgdXNhYmxlIGluIGVhcmxpZXIgdmVyc2lvbnMiIGlkPSIzMzg3OTI1NDYiPgorICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9Im1vdmVkIHRvIG5ldyBBdHRyaWJ1dGVzTWFuYWdlciIgaWQ9IjMzODc5MjU0NiI+CiAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CiAgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzTm9kZSIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRBdHRyaWJ1dGVzKFN0cmluZywgYm9vbGVhbiwgTWFwJmx0O1N0cmluZyxBdHRyaWJ1dGUmZ3Q7KSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRBdHRyaWJ1dGVzKFN0cmluZywgYm9vbGVhbiwgQXR0cmlidXRlcykiLz4KICAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CiAgICAgICAgIDwvZmlsdGVyPgogICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9CaXRtYXBJbmRleC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5CaXRtYXBJbmRleCRCaXRtYXBCdWlsZGVyIj4KLSAgICAgICAgPGZpbHRlciBjb21tZW50PSJpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQgYnkgZXh0ZW5kZXJzIGJ1dCBub3QgY2xpZW50cyBvZiB0aGUgQVBJIiBpZD0iNDAzODA0MjA0Ij4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzUnVsZS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc1J1bGUiPgorICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9InVzZWQgb25seSBpbiB0ZXN0czogYmVhbiBuYW1pbmciIGlkPSIzMzg3OTI1NDYiPgogICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5CaXRtYXBJbmRleC5CaXRtYXBCdWlsZGVyIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImFkZE9iamVjdChBbnlPYmplY3RJZCwgaW50KSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgY29tbWVudD0iaW50ZXJmYWNlIGlzIGltcGxlbWVudGVkIGJ5IGV4dGVuZGVycyBidXQgbm90IGNsaWVudHMgb2YgdGhlIEFQSSIgaWQ9IjQwMzgwNDIwNCI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkJpdG1hcEluZGV4LkJpdG1hcEJ1aWxkZXIiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0Qml0bWFwSW5kZXgoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1JlcG9zaXRvcnkuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeSI+Ci0gICAgICAgIDxmaWx0ZXIgY29tbWVudD0iT25seSBpbXBsZW1lbnRvcnMgb2YgUmVwb3NpdG9yeSBhcmUgYWZmZWN0ZWQuIFRoYXQgc2hvdWxkIGJlIGFsbG93ZWQiIGlkPSIzMzY2OTUzMzciPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImNyZWF0ZUF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDZXJ0aWZpY2F0ZS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGUiPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9IlB1c2hDZXJ0aWZpY2F0ZSB3YXNuJ3QgcmVhbGx5IHVzYWJsZSBpbiA0LjAiIGlkPSIzMzg3MjI5MDciPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iUHVzaENlcnRpZmljYXRlKCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9IlB1c2hDZXJ0aWZpY2F0ZSB3YXNuJ3QgcmVhbGx5IHVzYWJsZSBpbiA0LjAiIGlkPSIzMzg3OTI1NDYiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGUiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZ2V0Q29tbWFuZExpc3QoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDZXJ0aWZpY2F0ZVBhcnNlci5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ2VydGlmaWNhdGVQYXJzZXIiPgotICAgICAgICA8ZmlsdGVyIGNvbW1lbnQ9IlB1c2hDZXJ0aWZpY2F0ZXMgaGF2ZW4ndCBiZWVuIHJlYWxseSB1c2FibGUgaW4gNC4wIiBpZD0iMzM4ODQ5OTIzIj4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaENlcnRpZmljYXRlUGFyc2VyIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuV29ya2luZ1RyZWVJdGVyYXRvciI+Ci0gICAgICAgIDxmaWx0ZXIgY29tbWVudD0iYXR0cmlidXRlcyB3ZXJlbid0IHJlYWxseSB1c2FibGUgaW4gZWFybGllciB2ZXJzaW9ucyIgaWQ9IjMzODc5MjU0NiI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuV29ya2luZ1RyZWVJdGVyYXRvciIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRHbG9iYWxBdHRyaWJ1dGVzTm9kZSgpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICAgICAgPGZpbHRlciBjb21tZW50PSJhdHRyaWJ1dGVzIHdlcmVuJ3QgcmVhbGx5IHVzYWJsZSBpbiBlYXJsaWVyIHZlcnNpb25zIiBpZD0iMzM4NzkyNTQ2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5Xb3JraW5nVHJlZUl0ZXJhdG9yIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldEluZm9BdHRyaWJ1dGVzTm9kZSgpIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZpbGVVdGlscy5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzIj4KLSAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KLSAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlscyIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJjcmVhdGVTeW1MaW5rKEZpbGUsIFN0cmluZykiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZXNSdWxlIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRpck9ubHkoKSIvPgogICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KICAgICAgICAgPC9maWx0ZXI+CiAgICAgPC9yZXNvdXJjZT4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGYyNjNhNWMuLjNlMTU1YTcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNjYsOCArNjYsOSBAQAogICAgb3JnLmVjbGlwc2UuamdpdC5qdW5pdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIsCi0gICBvcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0LAotICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAorICAgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLAorICAgb3JnLmVjbGlwc2UuamdpdC5wZ20sCisgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0IiwKICBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSI0LjMuMCI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5qdW5pdCxvcmcuZWNsaXBzZS5qZ2l0LnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5wZ20iLAogIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0cmVlO3ZlcnNpb249IjQuMy4wIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LG9yZy5lY2xpcHNlLmpnaXQudGVzdCxvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCiAgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iNC4zLjAiOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZC5qYXZhCmluZGV4IGI1MDU3YWQuLjBhYmI4YmEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Db21taXRDb21tYW5kLmphdmEKQEAgLTMxMiw3ICszMTIsNyBAQCBwdWJsaWMgUmV2Q29tbWl0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBOb0hlYWRFeGNlcHRpb24sCiAJCX0KIAl9CiAKLQlwcml2YXRlIHZvaWQgaW5zZXJ0Q2hhbmdlSWQoT2JqZWN0SWQgdHJlZUlkKSB0aHJvd3MgSU9FeGNlcHRpb24geworCXByaXZhdGUgdm9pZCBpbnNlcnRDaGFuZ2VJZChPYmplY3RJZCB0cmVlSWQpIHsKIAkJT2JqZWN0SWQgZmlyc3RQYXJlbnRJZCA9IG51bGw7CiAJCWlmICghcGFyZW50cy5pc0VtcHR5KCkpCiAJCQlmaXJzdFBhcmVudElkID0gcGFyZW50cy5nZXQoMCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZTRhZmQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc0hhbmRsZXIuamF2YQpAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSwgSXZhbiBNb3RzY2ggPGl2YW4ubW90c2NoQGJzaWFnLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYxLjAgd2hpY2gKKyAqIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBpcyByZXByb2R1Y2VkIGJlbG93LCBhbmQgaXMKKyAqIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAKKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAqICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCBJbmMuIG5vciB0aGUKKyAqICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogICB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgKiBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlczsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlLlN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLkFic3RyYWN0VHJlZUl0ZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuQ2Fub25pY2FsVHJlZVBhcnNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuV29ya2luZ1RyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrLk9wZXJhdGlvblR5cGU7CisKKy8qKgorICogVGhlIGF0dHJpYnV0ZXMgaGFuZGxlciBrbm93cyBob3cgdG8gcmV0cmlldmUsIHBhcnNlIGFuZCBtZXJnZSBhdHRyaWJ1dGVzIGZyb20KKyAqIHRoZSB2YXJpb3VzIGdpdGF0dHJpYnV0ZXMgZmlsZXMuIEZ1cnRoZXJtb3JlIGl0IGNvbGxlY3RzIGFuZCBleHBhbmRzIG1hY3JvCisgKiBleHByZXNzaW9ucy4gVGhlIG1ldGhvZCB7QGxpbmsgI2dldEF0dHJpYnV0ZXMoKX0geWllbGRzIHRoZSByZWFkeSBwcm9jZXNzZWQKKyAqIGF0dHJpYnV0ZXMgZm9yIHRoZSBjdXJyZW50IHBhdGggcmVwcmVzZW50ZWQgYnkgdGhlIHtAbGluayBUcmVlV2Fsa30KKyAqIDxwPgorICogVGhlIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBzcGVjaWZpY2F0aW9ucyBpbgorICogaHR0cDovL2dpdC1zY20uY29tL2RvY3MvZ2l0YXR0cmlidXRlcworICoKKyAqIEBzaW5jZSA0LjMKKyAqLworcHVibGljIGNsYXNzIEF0dHJpYnV0ZXNIYW5kbGVyIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUFDUk9fUFJFRklYID0gIlthdHRyXSI7IC8vJE5PTi1OTFMtMSQKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCSU5BUllfUlVMRV9LRVkgPSAiYmluYXJ5IjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhpcyBpcyB0aGUgZGVmYXVsdCA8Yj5iaW5hcnk8L2I+IHJ1bGUgdGhhdCBpcyBwcmVzZW50IGluIGFueSBnaXQgZm9sZGVyCisJICogPGNvZGU+W2F0dHJdYmluYXJ5IC1kaWZmIC1tZXJnZSAtdGV4dDwvY29kZT4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PEF0dHJpYnV0ZT4gQklOQVJZX1JVTEVfQVRUUklCVVRFUyA9IG5ldyBBdHRyaWJ1dGVzUnVsZSgKKwkJCU1BQ1JPX1BSRUZJWCArIEJJTkFSWV9SVUxFX0tFWSwgIi1kaWZmIC1tZXJnZSAtdGV4dCIpIC8vJE5PTi1OTFMtMSQKKwkJCQkJLmdldEF0dHJpYnV0ZXMoKTsKKworCXByaXZhdGUgZmluYWwgVHJlZVdhbGsgdHJlZVdhbGs7CisKKwlwcml2YXRlIGZpbmFsIEF0dHJpYnV0ZXNOb2RlIGdsb2JhbE5vZGU7CisKKwlwcml2YXRlIGZpbmFsIEF0dHJpYnV0ZXNOb2RlIGluZm9Ob2RlOworCisJcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PEF0dHJpYnV0ZT4+IGV4cGFuc2lvbnMgPSBuZXcgSGFzaE1hcDw+KCk7CisKKwkvKioKKwkgKiBDcmVhdGUgYW4ge0BsaW5rIEF0dHJpYnV0ZXNIYW5kbGVyfSB3aXRoIGRlZmF1bHQgcnVsZXMgYXMgd2VsbCBhcyBtZXJnZWQKKwkgKiBydWxlcyBmcm9tIGdsb2JhbCwgaW5mbyBhbmQgd29ya3RyZWUgcm9vdCBhdHRyaWJ1dGVzCisJICoKKwkgKiBAcGFyYW0gdHJlZVdhbGsKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJcHVibGljIEF0dHJpYnV0ZXNIYW5kbGVyKFRyZWVXYWxrIHRyZWVXYWxrKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzLnRyZWVXYWxrID0gdHJlZVdhbGs7CisJCUF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgYXR0cmlidXRlc05vZGVQcm92aWRlciA9dHJlZVdhbGsuZ2V0QXR0cmlidXRlc05vZGVQcm92aWRlcigpOworCQl0aGlzLmdsb2JhbE5vZGUgPSBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyICE9IG51bGwKKwkJCQk/IGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIuZ2V0R2xvYmFsQXR0cmlidXRlc05vZGUoKSA6IG51bGw7CisJCXRoaXMuaW5mb05vZGUgPSBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyICE9IG51bGwKKwkJCQk/IGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIuZ2V0SW5mb0F0dHJpYnV0ZXNOb2RlKCkgOiBudWxsOworCisJCUF0dHJpYnV0ZXNOb2RlIHJvb3ROb2RlID0gYXR0cmlidXRlc05vZGUodHJlZVdhbGssCisJCQkJcm9vdE9mKAorCQkJCQkJdHJlZVdhbGsuZ2V0VHJlZShXb3JraW5nVHJlZUl0ZXJhdG9yLmNsYXNzKSksCisJCQkJcm9vdE9mKAorCQkJCQkJdHJlZVdhbGsuZ2V0VHJlZShEaXJDYWNoZUl0ZXJhdG9yLmNsYXNzKSksCisJCQkJcm9vdE9mKHRyZWVXYWxrCisJCQkJCQkuZ2V0VHJlZShDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKSkpOworCisJCWV4cGFuc2lvbnMucHV0KEJJTkFSWV9SVUxFX0tFWSwgQklOQVJZX1JVTEVfQVRUUklCVVRFUyk7CisJCWZvciAoQXR0cmlidXRlc05vZGUgbm9kZSA6IG5ldyBBdHRyaWJ1dGVzTm9kZVtdIHsgZ2xvYmFsTm9kZSwgcm9vdE5vZGUsCisJCQkJaW5mb05vZGUgfSkgeworCQkJaWYgKG5vZGUgPT0gbnVsbCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZm9yIChBdHRyaWJ1dGVzUnVsZSBydWxlIDogbm9kZS5nZXRSdWxlcygpKSB7CisJCQkJaWYgKHJ1bGUuZ2V0UGF0dGVybigpLnN0YXJ0c1dpdGgoTUFDUk9fUFJFRklYKSkgeworCQkJCQlleHBhbnNpb25zLnB1dChydWxlLmdldFBhdHRlcm4oKQorCQkJCQkJCS5zdWJzdHJpbmcoTUFDUk9fUFJFRklYLmxlbmd0aCgpKS50cmltKCksCisJCQkJCQkJcnVsZS5nZXRBdHRyaWJ1dGVzKCkpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIHNlZSB7QGxpbmsgVHJlZVdhbGsjZ2V0QXR0cmlidXRlcygpfQorCSAqCisJICogQHJldHVybiB0aGUge0BsaW5rIEF0dHJpYnV0ZXN9IGZvciB0aGUgY3VycmVudCBwYXRoIHJlcHJlc2VudGVkIGJ5IHRoZQorCSAqICAgICAgICAge0BsaW5rIFRyZWVXYWxrfQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgQXR0cmlidXRlcyBnZXRBdHRyaWJ1dGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGVudHJ5UGF0aCA9IHRyZWVXYWxrLmdldFBhdGhTdHJpbmcoKTsKKwkJYm9vbGVhbiBpc0RpcmVjdG9yeSA9ICh0cmVlV2Fsay5nZXRGaWxlTW9kZSgpID09IEZpbGVNb2RlLlRSRUUpOworCQlBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBuZXcgQXR0cmlidXRlcygpOworCisJCS8vIEdldHMgdGhlIGluZm8gYXR0cmlidXRlcworCQltZXJnZUluZm9BdHRyaWJ1dGVzKGVudHJ5UGF0aCwgaXNEaXJlY3RvcnksIGF0dHJpYnV0ZXMpOworCisJCS8vIEdldHMgdGhlIGF0dHJpYnV0ZXMgbG9jYXRlZCBvbiB0aGUgY3VycmVudCBlbnRyeSBwYXRoCisJCW1lcmdlUGVyRGlyZWN0b3J5RW50cnlBdHRyaWJ1dGVzKGVudHJ5UGF0aCwgaXNEaXJlY3RvcnksCisJCQkJdHJlZVdhbGsuZ2V0VHJlZShXb3JraW5nVHJlZUl0ZXJhdG9yLmNsYXNzKSwKKwkJCQl0cmVlV2Fsay5nZXRUcmVlKERpckNhY2hlSXRlcmF0b3IuY2xhc3MpLAorCQkJCXRyZWVXYWxrLmdldFRyZWUoQ2Fub25pY2FsVHJlZVBhcnNlci5jbGFzcyksCisJCQkJYXR0cmlidXRlcyk7CisKKwkJLy8gR2V0cyB0aGUgYXR0cmlidXRlcyBsb2NhdGVkIGluIHRoZSBnbG9iYWwgYXR0cmlidXRlIGZpbGUKKwkJbWVyZ2VHbG9iYWxBdHRyaWJ1dGVzKGVudHJ5UGF0aCwgaXNEaXJlY3RvcnksIGF0dHJpYnV0ZXMpOworCisJCS8vIG5vdyBhZnRlciBhbGwgYXR0cmlidXRlcyBhcmUgY29sbGVjdGVkIC0gaW4gdGhlIGNvcnJlY3QgaGllcmFyY2h5CisJCS8vIG9yZGVyIC0gcmVtb3ZlIGFsbCB1bnNwZWNpZmllZCBlbnRyaWVzICh0aGUgISBtYXJrZXIpCisJCWZvciAoQXR0cmlidXRlIGEgOiBhdHRyaWJ1dGVzLmdldEFsbCgpKSB7CisJCQlpZiAoYS5nZXRTdGF0ZSgpID09IFN0YXRlLlVOU1BFQ0lGSUVEKQorCQkJCWF0dHJpYnV0ZXMucmVtb3ZlKGEuZ2V0S2V5KCkpOworCQl9CisKKwkJcmV0dXJuIGF0dHJpYnV0ZXM7CisJfQorCisJLyoqCisJICogTWVyZ2VzIHRoZSBtYXRjaGluZyBHTE9CQUwgYXR0cmlidXRlcyBmb3IgYW4gZW50cnkgcGF0aC4KKwkgKgorCSAqIEBwYXJhbSBlbnRyeVBhdGgKKwkgKiAgICAgICAgICAgIHRoZSBwYXRoIHRvIHRlc3QuIFRoZSBwYXRoIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhpcyBhdHRyaWJ1dGUKKwkgKiAgICAgICAgICAgIG5vZGUncyBvd24gcmVwb3NpdG9yeSBwYXRoLCBhbmQgaW4gcmVwb3NpdG9yeSBwYXRoIGZvcm1hdAorCSAqICAgICAgICAgICAgKHVzZXMgJy8nIGFuZCBub3QgJ1wnKS4KKwkgKiBAcGFyYW0gaXNEaXJlY3RvcnkKKwkgKiAgICAgICAgICAgIHRydWUgaWYgdGhlIHRhcmdldCBpdGVtIGlzIGEgZGlyZWN0b3J5LgorCSAqIEBwYXJhbSByZXN1bHQKKwkgKiAgICAgICAgICAgIHRoYXQgd2lsbCBob2xkIHRoZSBhdHRyaWJ1dGVzIG1hdGNoaW5nIHRoaXMgZW50cnkgcGF0aC4gVGhpcworCSAqICAgICAgICAgICAgbWV0aG9kIHdpbGwgTk9UIG92ZXJyaWRlIGFueSBleGlzdGluZyBlbnRyeSBpbiBhdHRyaWJ1dGVzLgorCSAqLworCXByaXZhdGUgdm9pZCBtZXJnZUdsb2JhbEF0dHJpYnV0ZXMoU3RyaW5nIGVudHJ5UGF0aCwgYm9vbGVhbiBpc0RpcmVjdG9yeSwKKwkJCUF0dHJpYnV0ZXMgcmVzdWx0KSB7CisJCW1lcmdlQXR0cmlidXRlcyhnbG9iYWxOb2RlLCBlbnRyeVBhdGgsIGlzRGlyZWN0b3J5LCByZXN1bHQpOworCX0KKworCS8qKgorCSAqIE1lcmdlcyB0aGUgbWF0Y2hpbmcgSU5GTyBhdHRyaWJ1dGVzIGZvciBhbiBlbnRyeSBwYXRoLgorCSAqCisJICogQHBhcmFtIGVudHJ5UGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGVzdC4gVGhlIHBhdGggbXVzdCBiZSByZWxhdGl2ZSB0byB0aGlzIGF0dHJpYnV0ZQorCSAqICAgICAgICAgICAgbm9kZSdzIG93biByZXBvc2l0b3J5IHBhdGgsIGFuZCBpbiByZXBvc2l0b3J5IHBhdGggZm9ybWF0CisJICogICAgICAgICAgICAodXNlcyAnLycgYW5kIG5vdCAnXCcpLgorCSAqIEBwYXJhbSBpc0RpcmVjdG9yeQorCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgdGFyZ2V0IGl0ZW0gaXMgYSBkaXJlY3RvcnkuCisJICogQHBhcmFtIHJlc3VsdAorCSAqICAgICAgICAgICAgdGhhdCB3aWxsIGhvbGQgdGhlIGF0dHJpYnV0ZXMgbWF0Y2hpbmcgdGhpcyBlbnRyeSBwYXRoLiBUaGlzCisJICogICAgICAgICAgICBtZXRob2Qgd2lsbCBOT1Qgb3ZlcnJpZGUgYW55IGV4aXN0aW5nIGVudHJ5IGluIGF0dHJpYnV0ZXMuCisJICovCisJcHJpdmF0ZSB2b2lkIG1lcmdlSW5mb0F0dHJpYnV0ZXMoU3RyaW5nIGVudHJ5UGF0aCwgYm9vbGVhbiBpc0RpcmVjdG9yeSwKKwkJCUF0dHJpYnV0ZXMgcmVzdWx0KSB7CisJCW1lcmdlQXR0cmlidXRlcyhpbmZvTm9kZSwgZW50cnlQYXRoLCBpc0RpcmVjdG9yeSwgcmVzdWx0KTsKKwl9CisKKwkvKioKKwkgKiBNZXJnZXMgdGhlIG1hdGNoaW5nIHdvcmtpbmcgZGlyZWN0b3J5IGF0dHJpYnV0ZXMgZm9yIGFuIGVudHJ5IHBhdGguCisJICoKKwkgKiBAcGFyYW0gZW50cnlQYXRoCisJICogICAgICAgICAgICB0aGUgcGF0aCB0byB0ZXN0LiBUaGUgcGF0aCBtdXN0IGJlIHJlbGF0aXZlIHRvIHRoaXMgYXR0cmlidXRlCisJICogICAgICAgICAgICBub2RlJ3Mgb3duIHJlcG9zaXRvcnkgcGF0aCwgYW5kIGluIHJlcG9zaXRvcnkgcGF0aCBmb3JtYXQKKwkgKiAgICAgICAgICAgICh1c2VzICcvJyBhbmQgbm90ICdcJykuCisJICogQHBhcmFtIGlzRGlyZWN0b3J5CisJICogICAgICAgICAgICB0cnVlIGlmIHRoZSB0YXJnZXQgaXRlbSBpcyBhIGRpcmVjdG9yeS4KKwkgKiBAcGFyYW0gd29ya2luZ1RyZWVJdGVyYXRvcgorCSAqIEBwYXJhbSBkaXJDYWNoZUl0ZXJhdG9yCisJICogQHBhcmFtIG90aGVyVHJlZQorCSAqIEBwYXJhbSByZXN1bHQKKwkgKiAgICAgICAgICAgIHRoYXQgd2lsbCBob2xkIHRoZSBhdHRyaWJ1dGVzIG1hdGNoaW5nIHRoaXMgZW50cnkgcGF0aC4gVGhpcworCSAqICAgICAgICAgICAgbWV0aG9kIHdpbGwgTk9UIG92ZXJyaWRlIGFueSBleGlzdGluZyBlbnRyeSBpbiBhdHRyaWJ1dGVzLgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwcml2YXRlIHZvaWQgbWVyZ2VQZXJEaXJlY3RvcnlFbnRyeUF0dHJpYnV0ZXMoU3RyaW5nIGVudHJ5UGF0aCwKKwkJCWJvb2xlYW4gaXNEaXJlY3RvcnksCisJCQlATnVsbGFibGUgV29ya2luZ1RyZWVJdGVyYXRvciB3b3JraW5nVHJlZUl0ZXJhdG9yLAorCQkJQE51bGxhYmxlIERpckNhY2hlSXRlcmF0b3IgZGlyQ2FjaGVJdGVyYXRvciwKKwkJCUBOdWxsYWJsZSBDYW5vbmljYWxUcmVlUGFyc2VyIG90aGVyVHJlZSwgQXR0cmlidXRlcyByZXN1bHQpCisJCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIFByZXZlbnRzIGluZmluaXRlIHJlY3VycmVuY2UKKwkJaWYgKHdvcmtpbmdUcmVlSXRlcmF0b3IgIT0gbnVsbCB8fCBkaXJDYWNoZUl0ZXJhdG9yICE9IG51bGwKKwkJCQl8fCBvdGhlclRyZWUgIT0gbnVsbCkgeworCQkJQXR0cmlidXRlc05vZGUgYXR0cmlidXRlc05vZGUgPSBhdHRyaWJ1dGVzTm9kZSgKKwkJCQkJdHJlZVdhbGssIHdvcmtpbmdUcmVlSXRlcmF0b3IsIGRpckNhY2hlSXRlcmF0b3IsIG90aGVyVHJlZSk7CisJCQlpZiAoYXR0cmlidXRlc05vZGUgIT0gbnVsbCkgeworCQkJCW1lcmdlQXR0cmlidXRlcyhhdHRyaWJ1dGVzTm9kZSwgZW50cnlQYXRoLCBpc0RpcmVjdG9yeSwgcmVzdWx0KTsKKwkJCX0KKwkJCW1lcmdlUGVyRGlyZWN0b3J5RW50cnlBdHRyaWJ1dGVzKGVudHJ5UGF0aCwgaXNEaXJlY3RvcnksCisJCQkJCXBhcmVudE9mKHdvcmtpbmdUcmVlSXRlcmF0b3IpLCBwYXJlbnRPZihkaXJDYWNoZUl0ZXJhdG9yKSwKKwkJCQkJcGFyZW50T2Yob3RoZXJUcmVlKSwgcmVzdWx0KTsKKwkJfQorCX0KKworCS8qKgorCSAqIE1lcmdlcyB0aGUgbWF0Y2hpbmcgbm9kZSBhdHRyaWJ1dGVzIGZvciBhbiBlbnRyeSBwYXRoLgorCSAqCisJICogQHBhcmFtIG5vZGUKKwkgKiAgICAgICAgICAgIHRoZSBub2RlIHRvIHNjYW4gZm9yIG1hdGNoZXMgdG8gZW50cnlQYXRoCisJICogQHBhcmFtIGVudHJ5UGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGVzdC4gVGhlIHBhdGggbXVzdCBiZSByZWxhdGl2ZSB0byB0aGlzIGF0dHJpYnV0ZQorCSAqICAgICAgICAgICAgbm9kZSdzIG93biByZXBvc2l0b3J5IHBhdGgsIGFuZCBpbiByZXBvc2l0b3J5IHBhdGggZm9ybWF0CisJICogICAgICAgICAgICAodXNlcyAnLycgYW5kIG5vdCAnXCcpLgorCSAqIEBwYXJhbSBpc0RpcmVjdG9yeQorCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgdGFyZ2V0IGl0ZW0gaXMgYSBkaXJlY3RvcnkuCisJICogQHBhcmFtIHJlc3VsdAorCSAqICAgICAgICAgICAgdGhhdCB3aWxsIGhvbGQgdGhlIGF0dHJpYnV0ZXMgbWF0Y2hpbmcgdGhpcyBlbnRyeSBwYXRoLiBUaGlzCisJICogICAgICAgICAgICBtZXRob2Qgd2lsbCBOT1Qgb3ZlcnJpZGUgYW55IGV4aXN0aW5nIGVudHJ5IGluIGF0dHJpYnV0ZXMuCisJICovCisJcHJvdGVjdGVkIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzKEBOdWxsYWJsZSBBdHRyaWJ1dGVzTm9kZSBub2RlLAorCQkJU3RyaW5nIGVudHJ5UGF0aCwKKwkJCWJvb2xlYW4gaXNEaXJlY3RvcnksIEF0dHJpYnV0ZXMgcmVzdWx0KSB7CisJCWlmIChub2RlID09IG51bGwpCisJCQlyZXR1cm47CisJCUxpc3Q8QXR0cmlidXRlc1J1bGU+IHJ1bGVzID0gbm9kZS5nZXRSdWxlcygpOworCQkvLyBQYXJzZSBydWxlcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZWFkIHNpbmNlIHRoZSBsYXN0CisJCS8vIGVudHJ5IHNob3VsZCBiZSB1c2VkCisJCUxpc3RJdGVyYXRvcjxBdHRyaWJ1dGVzUnVsZT4gcnVsZUl0ZXJhdG9yID0gcnVsZXMKKwkJCQkubGlzdEl0ZXJhdG9yKHJ1bGVzLnNpemUoKSk7CisJCXdoaWxlIChydWxlSXRlcmF0b3IuaGFzUHJldmlvdXMoKSkgeworCQkJQXR0cmlidXRlc1J1bGUgcnVsZSA9IHJ1bGVJdGVyYXRvci5wcmV2aW91cygpOworCQkJaWYgKHJ1bGUuaXNNYXRjaChlbnRyeVBhdGgsIGlzRGlyZWN0b3J5KSkgeworCQkJCUxpc3RJdGVyYXRvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZUl0ZSA9IHJ1bGUuZ2V0QXR0cmlidXRlcygpCisJCQkJCQkubGlzdEl0ZXJhdG9yKHJ1bGUuZ2V0QXR0cmlidXRlcygpLnNpemUoKSk7CisJCQkJLy8gUGFyc2VzIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSByZXZlcnNlIG9yZGVyIHRoYXQgdGhleSB3ZXJlCisJCQkJLy8gcmVhZCBzaW5jZSB0aGUgbGFzdCBlbnRyeSBzaG91bGQgYmUgdXNlZAorCQkJCXdoaWxlIChhdHRyaWJ1dGVJdGUuaGFzUHJldmlvdXMoKSkgeworCQkJCQlleHBhbmRNYWNybyhhdHRyaWJ1dGVJdGUucHJldmlvdXMoKSwgcmVzdWx0KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gYXR0cgorCSAqIEBwYXJhbSByZXN1bHQKKwkgKiAgICAgICAgICAgIGNvbnRhaW5zIHRoZSAocmVjdXJzaXZlKSBleHBhbmRlZCBhbmQgbWVyZ2VkIG1hY3JvIGF0dHJpYnV0ZXMKKwkgKiAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgYXR0cmlidXRlIGlzZWxmCisJICovCisJcHJvdGVjdGVkIHZvaWQgZXhwYW5kTWFjcm8oQXR0cmlidXRlIGF0dHIsIEF0dHJpYnV0ZXMgcmVzdWx0KSB7CisJCS8vIGxvb3AgZGV0ZWN0aW9uID0gZXhpc3RzIGNoZWNrCisJCWlmIChyZXN1bHQuY29udGFpbnNLZXkoYXR0ci5nZXRLZXkoKSkpCisJCQlyZXR1cm47CisKKwkJLy8gYWxzbyBhZGQgbWFjcm8gdG8gcmVzdWx0IHNldCwgc2FtZSBkb2VzIG5hdGl2ZSBnaXQKKwkJcmVzdWx0LnB1dChhdHRyKTsKKworCQlMaXN0PEF0dHJpYnV0ZT4gZXhwYW5zaW9uID0gZXhwYW5zaW9ucy5nZXQoYXR0ci5nZXRLZXkoKSk7CisJCWlmIChleHBhbnNpb24gPT0gbnVsbCkgeworCQkJcmV0dXJuOworCQl9CisJCXN3aXRjaCAoYXR0ci5nZXRTdGF0ZSgpKSB7CisJCWNhc2UgVU5TRVQ6IHsKKwkJCWZvciAoQXR0cmlidXRlIGUgOiBleHBhbnNpb24pIHsKKwkJCQlzd2l0Y2ggKGUuZ2V0U3RhdGUoKSkgeworCQkJCWNhc2UgU0VUOgorCQkJCQlleHBhbmRNYWNybyhuZXcgQXR0cmlidXRlKGUuZ2V0S2V5KCksIFN0YXRlLlVOU0VUKSwgcmVzdWx0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBVTlNFVDoKKwkJCQkJZXhwYW5kTWFjcm8obmV3IEF0dHJpYnV0ZShlLmdldEtleSgpLCBTdGF0ZS5TRVQpLCByZXN1bHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIFVOU1BFQ0lGSUVEOgorCQkJCQlleHBhbmRNYWNybyhuZXcgQXR0cmlidXRlKGUuZ2V0S2V5KCksIFN0YXRlLlVOU1BFQ0lGSUVEKSwKKwkJCQkJCQlyZXN1bHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlIENVU1RPTToKKwkJCQlkZWZhdWx0OgorCQkJCQlleHBhbmRNYWNybyhlLCByZXN1bHQpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgQ1VTVE9NOiB7CisJCQlmb3IgKEF0dHJpYnV0ZSBlIDogZXhwYW5zaW9uKSB7CisJCQkJc3dpdGNoIChlLmdldFN0YXRlKCkpIHsKKwkJCQljYXNlIFNFVDoKKwkJCQljYXNlIFVOU0VUOgorCQkJCWNhc2UgVU5TUEVDSUZJRUQ6CisJCQkJCWV4cGFuZE1hY3JvKGUsIHJlc3VsdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgQ1VTVE9NOgorCQkJCWRlZmF1bHQ6CisJCQkJCWV4cGFuZE1hY3JvKG5ldyBBdHRyaWJ1dGUoZS5nZXRLZXkoKSwgYXR0ci5nZXRWYWx1ZSgpKSwKKwkJCQkJCQlyZXN1bHQpOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgVU5TUEVDSUZJRUQ6IHsKKwkJCWZvciAoQXR0cmlidXRlIGUgOiBleHBhbnNpb24pIHsKKwkJCQlleHBhbmRNYWNybyhuZXcgQXR0cmlidXRlKGUuZ2V0S2V5KCksIFN0YXRlLlVOU1BFQ0lGSUVEKSwKKwkJCQkJCXJlc3VsdCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljYXNlIFNFVDoKKwkJZGVmYXVsdDoKKwkJCWZvciAoQXR0cmlidXRlIGUgOiBleHBhbnNpb24pIHsKKwkJCQlleHBhbmRNYWNybyhlLCByZXN1bHQpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIHtAbGluayBBdHRyaWJ1dGVzTm9kZX0gZm9yIHRoZSBjdXJyZW50IGVudHJ5LgorCSAqIDxwPgorCSAqIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlCisJICogd29ya2luZyB0cmVlIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9uIHR5cGUKKwkgKiA8L3A+CisJICoKKwkgKiBAcGFyYW0gdHJlZVdhbGsKKwkgKiBAcGFyYW0gd29ya2luZ1RyZWVJdGVyYXRvcgorCSAqIEBwYXJhbSBkaXJDYWNoZUl0ZXJhdG9yCisJICogQHBhcmFtIG90aGVyVHJlZQorCSAqIEByZXR1cm4gYSB7QGxpbmsgQXR0cmlidXRlc05vZGV9IG9mIHRoZSBjdXJyZW50IGVudHJ5LAorCSAqICAgICAgICAge0BsaW5rIE51bGxQb2ludGVyRXhjZXB0aW9ufSBvdGhlcndpc2UuCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIEl0IHJhaXNlcyBhbiB7QGxpbmsgSU9FeGNlcHRpb259IGlmIGEgcHJvYmxlbSBhcHBlYXJzIHdoaWxlCisJICogICAgICAgICAgICAgcGFyc2luZyBvbmUgb24gdGhlIGF0dHJpYnV0ZXMgZmlsZS4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBBdHRyaWJ1dGVzTm9kZSBhdHRyaWJ1dGVzTm9kZShUcmVlV2FsayB0cmVlV2FsaywKKwkJCUBOdWxsYWJsZSBXb3JraW5nVHJlZUl0ZXJhdG9yIHdvcmtpbmdUcmVlSXRlcmF0b3IsCisJCQlATnVsbGFibGUgRGlyQ2FjaGVJdGVyYXRvciBkaXJDYWNoZUl0ZXJhdG9yLAorCQkJQE51bGxhYmxlIENhbm9uaWNhbFRyZWVQYXJzZXIgb3RoZXJUcmVlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlBdHRyaWJ1dGVzTm9kZSBhdHRyaWJ1dGVzTm9kZSA9IG51bGw7CisJCXN3aXRjaCAodHJlZVdhbGsuZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CisJCWNhc2UgQ0hFQ0tJTl9PUDoKKwkJCWlmICh3b3JraW5nVHJlZUl0ZXJhdG9yICE9IG51bGwpIHsKKwkJCQlhdHRyaWJ1dGVzTm9kZSA9IHdvcmtpbmdUcmVlSXRlcmF0b3IuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSgpOworCQkJfQorCQkJaWYgKGF0dHJpYnV0ZXNOb2RlID09IG51bGwgJiYgZGlyQ2FjaGVJdGVyYXRvciAhPSBudWxsKSB7CisJCQkJYXR0cmlidXRlc05vZGUgPSBkaXJDYWNoZUl0ZXJhdG9yCisJCQkJCQkuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSh0cmVlV2Fsay5nZXRPYmplY3RSZWFkZXIoKSk7CisJCQl9CisJCQlpZiAoYXR0cmlidXRlc05vZGUgPT0gbnVsbCAmJiBvdGhlclRyZWUgIT0gbnVsbCkgeworCQkJCWF0dHJpYnV0ZXNOb2RlID0gb3RoZXJUcmVlCisJCQkJCQkuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSh0cmVlV2Fsay5nZXRPYmplY3RSZWFkZXIoKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDSEVDS09VVF9PUDoKKwkJCWlmIChvdGhlclRyZWUgIT0gbnVsbCkgeworCQkJCWF0dHJpYnV0ZXNOb2RlID0gb3RoZXJUcmVlCisJCQkJCQkuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSh0cmVlV2Fsay5nZXRPYmplY3RSZWFkZXIoKSk7CisJCQl9CisJCQlpZiAoYXR0cmlidXRlc05vZGUgPT0gbnVsbCAmJiBkaXJDYWNoZUl0ZXJhdG9yICE9IG51bGwpIHsKKwkJCQlhdHRyaWJ1dGVzTm9kZSA9IGRpckNhY2hlSXRlcmF0b3IKKwkJCQkJCS5nZXRFbnRyeUF0dHJpYnV0ZXNOb2RlKHRyZWVXYWxrLmdldE9iamVjdFJlYWRlcigpKTsKKwkJCX0KKwkJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsICYmIHdvcmtpbmdUcmVlSXRlcmF0b3IgIT0gbnVsbCkgeworCQkJCWF0dHJpYnV0ZXNOb2RlID0gd29ya2luZ1RyZWVJdGVyYXRvci5nZXRFbnRyeUF0dHJpYnV0ZXNOb2RlKCk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisJCQkJCSJUaGUgb25seSBzdXBwb3J0ZWQgb3BlcmF0aW9uIHR5cGVzIGFyZToiIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkrIE9wZXJhdGlvblR5cGUuQ0hFQ0tJTl9PUCArICIsIiAvLyROT04tTkxTLTEkCisJCQkJCQkJKyBPcGVyYXRpb25UeXBlLkNIRUNLT1VUX09QKTsKKwkJfQorCisJCXJldHVybiBhdHRyaWJ1dGVzTm9kZTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyA8VCBleHRlbmRzIEFic3RyYWN0VHJlZUl0ZXJhdG9yPiBUIHBhcmVudE9mKEBOdWxsYWJsZSBUIG5vZGUpIHsKKwkJaWYobm9kZT09bnVsbCkgcmV0dXJuIG51bGw7CisJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlDbGFzczxUPiB0eXBlID0gKENsYXNzPFQ+KSBub2RlLmdldENsYXNzKCk7CisJCUFic3RyYWN0VHJlZUl0ZXJhdG9yIHBhcmVudCA9IG5vZGUucGFyZW50OworCQlpZiAodHlwZS5pc0luc3RhbmNlKHBhcmVudCkpIHsKKwkJCXJldHVybiB0eXBlLmNhc3QocGFyZW50KTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyA8VCBleHRlbmRzIEFic3RyYWN0VHJlZUl0ZXJhdG9yPiBUIHJvb3RPZigKKwkJCUBOdWxsYWJsZSBUIG5vZGUpIHsKKwkJaWYobm9kZT09bnVsbCkgcmV0dXJuIG51bGw7CisJCUFic3RyYWN0VHJlZUl0ZXJhdG9yIHQ9bm9kZTsKKwkJd2hpbGUgKHQhPSBudWxsICYmIHQucGFyZW50ICE9IG51bGwpIHsKKwkJCXQ9IHQucGFyZW50OworCQl9CisJCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorCQlDbGFzczxUPiB0eXBlID0gKENsYXNzPFQ+KSBub2RlLmdldENsYXNzKCk7CisJCWlmICh0eXBlLmlzSW5zdGFuY2UodCkpIHsKKwkJCXJldHVybiB0eXBlLmNhc3QodCk7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc05vZGUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZS5qYXZhCmluZGV4IDVjMGFiYTIuLjcxOTY1MDIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzTm9kZS5qYXZhCkBAIC00OSw3ICs0OSw2IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIApAQCAtMTIyLDQwICsxMjEsNCBAQCBwdWJsaWMgTGlzdDxBdHRyaWJ1dGVzUnVsZT4gZ2V0UnVsZXMoKSB7CiAJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHJ1bGVzKTsKIAl9CiAKLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBtYXRjaGluZyBhdHRyaWJ1dGVzIGZvciBhbiBlbnRyeSBwYXRoLgotCSAqCi0JICogQHBhcmFtIGVudHJ5UGF0aAotCSAqICAgICAgICAgICAgdGhlIHBhdGggdG8gdGVzdC4gVGhlIHBhdGggbXVzdCBiZSByZWxhdGl2ZSB0byB0aGlzIGF0dHJpYnV0ZQotCSAqICAgICAgICAgICAgbm9kZSdzIG93biByZXBvc2l0b3J5IHBhdGgsIGFuZCBpbiByZXBvc2l0b3J5IHBhdGggZm9ybWF0Ci0JICogICAgICAgICAgICAodXNlcyAnLycgYW5kIG5vdCAnXCcpLgotCSAqIEBwYXJhbSBpc0RpcmVjdG9yeQotCSAqICAgICAgICAgICAgdHJ1ZSBpZiB0aGUgdGFyZ2V0IGl0ZW0gaXMgYSBkaXJlY3RvcnkuCi0JICogQHBhcmFtIGF0dHJpYnV0ZXMKLQkgKiAgICAgICAgICAgIE1hcCB0aGF0IHdpbGwgaG9sZCB0aGUgYXR0cmlidXRlcyBtYXRjaGluZyB0aGlzIGVudHJ5IHBhdGguIElmCi0JICogICAgICAgICAgICBpdCBpcyBub3QgZW1wdHksIHRoaXMgbWV0aG9kIHdpbGwgTk9UIG92ZXJyaWRlIGFueSBleGlzdGluZwotCSAqICAgICAgICAgICAgZW50cnkuCi0JICogQHNpbmNlIDQuMgotCSAqLwotCXB1YmxpYyB2b2lkIGdldEF0dHJpYnV0ZXMoU3RyaW5nIGVudHJ5UGF0aCwKLQkJCWJvb2xlYW4gaXNEaXJlY3RvcnksIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgewotCQkvLyBQYXJzZSBydWxlcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZWFkIHNpbmNlIHRoZSBsYXN0Ci0JCS8vIGVudHJ5IHNob3VsZCBiZSB1c2VkCi0JCUxpc3RJdGVyYXRvcjxBdHRyaWJ1dGVzUnVsZT4gcnVsZUl0ZXJhdG9yID0gcnVsZXMubGlzdEl0ZXJhdG9yKHJ1bGVzCi0JCQkJLnNpemUoKSk7Ci0JCXdoaWxlIChydWxlSXRlcmF0b3IuaGFzUHJldmlvdXMoKSkgewotCQkJQXR0cmlidXRlc1J1bGUgcnVsZSA9IHJ1bGVJdGVyYXRvci5wcmV2aW91cygpOwotCQkJaWYgKHJ1bGUuaXNNYXRjaChlbnRyeVBhdGgsIGlzRGlyZWN0b3J5KSkgewotCQkJCUxpc3RJdGVyYXRvcjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZUl0ZSA9IHJ1bGUuZ2V0QXR0cmlidXRlcygpCi0JCQkJCQkubGlzdEl0ZXJhdG9yKHJ1bGUuZ2V0QXR0cmlidXRlcygpLnNpemUoKSk7Ci0JCQkJLy8gUGFyc2VzIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSByZXZlcnNlIG9yZGVyIHRoYXQgdGhleSB3ZXJlCi0JCQkJLy8gcmVhZCBzaW5jZSB0aGUgbGFzdCBlbnRyeSBzaG91bGQgYmUgdXNlZAotCQkJCXdoaWxlIChhdHRyaWJ1dGVJdGUuaGFzUHJldmlvdXMoKSkgewotCQkJCQlBdHRyaWJ1dGUgYXR0ciA9IGF0dHJpYnV0ZUl0ZS5wcmV2aW91cygpOwotCQkJCQlpZiAoIWF0dHJpYnV0ZXMuY29udGFpbnNLZXkoYXR0ci5nZXRLZXkoKSkpCi0JCQkJCQlhdHRyaWJ1dGVzLnB1dChhdHRyKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2F0dHJpYnV0ZXMvQXR0cmlidXRlc1J1bGUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzUnVsZS5qYXZhCmluZGV4IDM1ZDE4YzQuLjA1MzIyNTAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzUnVsZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzUnVsZS5qYXZhCkBAIC0xMDksMTAgKzEwOSwxMSBAQCBwcml2YXRlIHN0YXRpYyBMaXN0PEF0dHJpYnV0ZT4gcGFyc2VBdHRyaWJ1dGVzKFN0cmluZyBhdHRyaWJ1dGVzTGluZSkgewogCXByaXZhdGUgZmluYWwgU3RyaW5nIHBhdHRlcm47CiAJcHJpdmF0ZSBmaW5hbCBMaXN0PEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKIAotCXByaXZhdGUgYm9vbGVhbiBuYW1lT25seTsKLQlwcml2YXRlIGJvb2xlYW4gZGlyT25seTsKKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gbmFtZU9ubHk7CiAKLQlwcml2YXRlIElNYXRjaGVyIG1hdGNoZXI7CisJcHJpdmF0ZSBmaW5hbCBib29sZWFuIGRpck9ubHk7CisKKwlwcml2YXRlIGZpbmFsIElNYXRjaGVyIG1hdGNoZXI7CiAKIAkvKioKIAkgKiBDcmVhdGUgYSBuZXcgYXR0cmlidXRlIHJ1bGUgd2l0aCB0aGUgZ2l2ZW4gcGF0dGVybi4gQXNzdW1lcyB0aGF0IHRoZQpAQCAtMTI4LDM4ICsxMjksNDMgQEAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxBdHRyaWJ1dGU+IHBhcnNlQXR0cmlidXRlcyhTdHJpbmcgYXR0cmlidXRlc0xpbmUpIHsKIAkgKi8KIAlwdWJsaWMgQXR0cmlidXRlc1J1bGUoU3RyaW5nIHBhdHRlcm4sIFN0cmluZyBhdHRyaWJ1dGVzKSB7CiAJCXRoaXMuYXR0cmlidXRlcyA9IHBhcnNlQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKLQkJbmFtZU9ubHkgPSBmYWxzZTsKLQkJZGlyT25seSA9IGZhbHNlOwogCiAJCWlmIChwYXR0ZXJuLmVuZHNXaXRoKCIvIikpIHsgLy8kTk9OLU5MUy0xJAogCQkJcGF0dGVybiA9IHBhdHRlcm4uc3Vic3RyaW5nKDAsIHBhdHRlcm4ubGVuZ3RoKCkgLSAxKTsKIAkJCWRpck9ubHkgPSB0cnVlOworCQl9IGVsc2UgeworCQkJZGlyT25seSA9IGZhbHNlOwogCQl9CiAKLQkJYm9vbGVhbiBoYXNTbGFzaCA9IHBhdHRlcm4uY29udGFpbnMoIi8iKTsgLy8kTk9OLU5MUy0xJAorCQlpbnQgc2xhc2hJbmRleCA9IHBhdHRlcm4uaW5kZXhPZignLycpOwogCi0JCWlmICghaGFzU2xhc2gpCisJCWlmIChzbGFzaEluZGV4IDwgMCkgewogCQkJbmFtZU9ubHkgPSB0cnVlOwotCQllbHNlIGlmICghcGF0dGVybi5zdGFydHNXaXRoKCIvIikpIHsgLy8kTk9OLU5MUy0xJAorCQl9IGVsc2UgaWYgKHNsYXNoSW5kZXggPT0gMCkgeworCQkJbmFtZU9ubHkgPSBmYWxzZTsKKwkJfSBlbHNlIHsKKwkJCW5hbWVPbmx5ID0gZmFsc2U7CiAJCQkvLyBDb250YWlucyAiLyIgYnV0IGRvZXMgbm90IHN0YXJ0IHdpdGggb25lCiAJCQkvLyBBZGRpbmcgLyB0byB0aGUgc3RhcnQgc2hvdWxkIG5vdCBpbnRlcmZlcmUgd2l0aCBtYXRjaGluZwogCQkJcGF0dGVybiA9ICIvIiArIHBhdHRlcm47IC8vJE5PTi1OTFMtMSQKIAkJfQogCisJCUlNYXRjaGVyIGNhbmRpZGF0ZU1hdGNoZXIgPSBOT19NQVRDSDsKIAkJdHJ5IHsKLQkJCW1hdGNoZXIgPSBQYXRoTWF0Y2hlci5jcmVhdGVQYXRoTWF0Y2hlcihwYXR0ZXJuLAorCQkJY2FuZGlkYXRlTWF0Y2hlciA9IFBhdGhNYXRjaGVyLmNyZWF0ZVBhdGhNYXRjaGVyKHBhdHRlcm4sCiAJCQkJCUNoYXJhY3Rlci52YWx1ZU9mKEZhc3RJZ25vcmVSdWxlLlBBVEhfU0VQQVJBVE9SKSwgZGlyT25seSk7CiAJCX0gY2F0Y2ggKEludmFsaWRQYXR0ZXJuRXhjZXB0aW9uIGUpIHsKLQkJCW1hdGNoZXIgPSBOT19NQVRDSDsKKwkJCS8vIGlnbm9yZTogaW52YWxpZCBwYXR0ZXJucyBhcmUgc2lsZW50bHkgaWdub3JlZAogCQl9Ci0KKwkJdGhpcy5tYXRjaGVyID0gY2FuZGlkYXRlTWF0Y2hlcjsKIAkJdGhpcy5wYXR0ZXJuID0gcGF0dGVybjsKIAl9CiAKIAkvKioKIAkgKiBAcmV0dXJuIFRydWUgaWYgdGhlIHBhdHRlcm4gc2hvdWxkIG1hdGNoIGRpcmVjdG9yaWVzIG9ubHkKKwkgKiBAc2luY2UgNC4zCiAJICovCi0JcHVibGljIGJvb2xlYW4gZGlyT25seSgpIHsKKwlwdWJsaWMgYm9vbGVhbiBpc0Rpck9ubHkoKSB7CiAJCXJldHVybiBkaXJPbmx5OwogCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZGb3JtYXR0ZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9EaWZmRm9ybWF0dGVyLmphdmEKaW5kZXggNGMwZWQzOC4uZmM3MDFmMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZGb3JtYXR0ZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvRGlmZkZvcm1hdHRlci5qYXZhCkBAIC02NjYsNiArNjY2LDkgQEAgcHVibGljIHZvaWQgZm9ybWF0KERpZmZFbnRyeSBlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJfQogCiAJcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIHdyaXRlR2l0TGlua1RleHQoQWJicmV2aWF0ZWRPYmplY3RJZCBpZCkgeworCQlpZiAoaWQudG9PYmplY3RJZCgpLmVxdWFscyhPYmplY3RJZC56ZXJvSWQoKSkpIHsKKwkJCXJldHVybiBFTVBUWTsKKwkJfQogCQlyZXR1cm4gZW5jb2RlQVNDSUkoIlN1YnByb2plY3QgY29tbWl0ICIgKyBpZC5uYW1lKCkgLy8kTk9OLU5MUy0xJAogCQkJCSsgIlxuIik7IC8vJE5PTi1OTFMtMSQKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vTWFuaWZlc3RQYXJzZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9NYW5pZmVzdFBhcnNlci5qYXZhCmluZGV4IDdlYjk1NTAuLjc5NmI0MjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9NYW5pZmVzdFBhcnNlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9NYW5pZmVzdFBhcnNlci5qYXZhCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYyBjbGFzcyBNYW5pZmVzdFBhcnNlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKIAlwcml2YXRlIGZpbmFsIFN0cmluZyBiYXNlVXJsOwogCXByaXZhdGUgZmluYWwgU3RyaW5nIGRlZmF1bHRCcmFuY2g7CiAJcHJpdmF0ZSBmaW5hbCBSZXBvc2l0b3J5IHJvb3RSZXBvOwotCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiByZW1vdGVzOworCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgUmVtb3RlPiByZW1vdGVzOwogCXByaXZhdGUgZmluYWwgU2V0PFN0cmluZz4gcGx1c0dyb3VwczsKIAlwcml2YXRlIGZpbmFsIFNldDxTdHJpbmc+IG1pbnVzR3JvdXBzOwogCXByaXZhdGUgZmluYWwgTGlzdDxSZXBvUHJvamVjdD4gcHJvamVjdHM7CkBAIC0xNDYsNyArMTQ2LDcgQEAgcHVibGljIE1hbmlmZXN0UGFyc2VyKEluY2x1ZGVkRmlsZVJlYWRlciBpbmNsdWRlZFJlYWRlciwgU3RyaW5nIGZpbGVuYW1lLAogCQkJfQogCQl9CiAKLQkJcmVtb3RlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOworCQlyZW1vdGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBSZW1vdGU+KCk7CiAJCXByb2plY3RzID0gbmV3IEFycmF5TGlzdDxSZXBvUHJvamVjdD4oKTsKIAkJZmlsdGVyZWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3Q8UmVwb1Byb2plY3Q+KCk7CiAJfQpAQCAtMTk1LDE0ICsxOTUsMTQgQEAgcHVibGljIHZvaWQgc3RhcnRFbGVtZW50KAogCQl9IGVsc2UgaWYgKCJyZW1vdGUiLmVxdWFscyhxTmFtZSkpIHsgLy8kTk9OLU5MUy0xJAogCQkJU3RyaW5nIGFsaWFzID0gYXR0cmlidXRlcy5nZXRWYWx1ZSgiYWxpYXMiKTsgLy8kTk9OLU5MUy0xJAogCQkJU3RyaW5nIGZldGNoID0gYXR0cmlidXRlcy5nZXRWYWx1ZSgiZmV0Y2giKTsgLy8kTk9OLU5MUy0xJAotCQkJcmVtb3Rlcy5wdXQoYXR0cmlidXRlcy5nZXRWYWx1ZSgibmFtZSIpLCBmZXRjaCk7IC8vJE5PTi1OTFMtMSQKKwkJCVN0cmluZyByZXZpc2lvbiA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoInJldmlzaW9uIik7IC8vJE5PTi1OTFMtMSQKKwkJCVJlbW90ZSByZW1vdGUgPSBuZXcgUmVtb3RlKGZldGNoLCByZXZpc2lvbik7CisJCQlyZW1vdGVzLnB1dChhdHRyaWJ1dGVzLmdldFZhbHVlKCJuYW1lIiksIHJlbW90ZSk7IC8vJE5PTi1OTFMtMSQKIAkJCWlmIChhbGlhcyAhPSBudWxsKQotCQkJCXJlbW90ZXMucHV0KGFsaWFzLCBmZXRjaCk7CisJCQkJcmVtb3Rlcy5wdXQoYWxpYXMsIHJlbW90ZSk7CiAJCX0gZWxzZSBpZiAoImRlZmF1bHQiLmVxdWFscyhxTmFtZSkpIHsgLy8kTk9OLU5MUy0xJAogCQkJZGVmYXVsdFJlbW90ZSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoInJlbW90ZSIpOyAvLyROT04tTkxTLTEkCiAJCQlkZWZhdWx0UmV2aXNpb24gPSBhdHRyaWJ1dGVzLmdldFZhbHVlKCJyZXZpc2lvbiIpOyAvLyROT04tTkxTLTEkCi0JCQlpZiAoZGVmYXVsdFJldmlzaW9uID09IG51bGwpCi0JCQkJZGVmYXVsdFJldmlzaW9uID0gZGVmYXVsdEJyYW5jaDsKIAkJfSBlbHNlIGlmICgiY29weWZpbGUiLmVxdWFscyhxTmFtZSkpIHsgLy8kTk9OLU5MUy0xJAogCQkJaWYgKGN1cnJlbnRQcm9qZWN0ID09IG51bGwpCiAJCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihSZXBvVGV4dC5nZXQoKS5pbnZhbGlkTWFuaWZlc3QpOwpAQCAtMjY4LDggKzI2OCwxOCBAQCBwdWJsaWMgdm9pZCBlbmREb2N1bWVudCgpIHRocm93cyBTQVhFeGNlcHRpb24gewogCQl9IGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkgewogCQkJdGhyb3cgbmV3IFNBWEV4Y2VwdGlvbihlKTsKIAkJfQorCQlpZiAoZGVmYXVsdFJldmlzaW9uID09IG51bGwgJiYgZGVmYXVsdFJlbW90ZSAhPSBudWxsKSB7CisJCQlSZW1vdGUgcmVtb3RlID0gcmVtb3Rlcy5nZXQoZGVmYXVsdFJlbW90ZSk7CisJCQlpZiAocmVtb3RlICE9IG51bGwpIHsKKwkJCQlkZWZhdWx0UmV2aXNpb24gPSByZW1vdGUucmV2aXNpb247CisJCQl9CisJCQlpZiAoZGVmYXVsdFJldmlzaW9uID09IG51bGwpIHsKKwkJCQlkZWZhdWx0UmV2aXNpb24gPSBkZWZhdWx0QnJhbmNoOworCQkJfQorCQl9CiAJCWZvciAoUmVwb1Byb2plY3QgcHJvaiA6IHByb2plY3RzKSB7CiAJCQlTdHJpbmcgcmVtb3RlID0gcHJvai5nZXRSZW1vdGUoKTsKKwkJCVN0cmluZyByZXZpc2lvbiA9IGRlZmF1bHRSZXZpc2lvbjsKIAkJCWlmIChyZW1vdGUgPT0gbnVsbCkgewogCQkJCWlmIChkZWZhdWx0UmVtb3RlID09IG51bGwpIHsKIAkJCQkJaWYgKGZpbGVuYW1lICE9IG51bGwpCkBAIC0yODEsMTYgKzI5MSwyMiBAQCBwdWJsaWMgdm9pZCBlbmREb2N1bWVudCgpIHRocm93cyBTQVhFeGNlcHRpb24gewogCQkJCQkJCQlSZXBvVGV4dC5nZXQoKS5lcnJvck5vRGVmYXVsdCk7CiAJCQkJfQogCQkJCXJlbW90ZSA9IGRlZmF1bHRSZW1vdGU7CisJCQl9IGVsc2UgeworCQkJCVJlbW90ZSByID0gcmVtb3Rlcy5nZXQocmVtb3RlKTsKKwkJCQlpZiAociAhPSBudWxsICYmIHIucmV2aXNpb24gIT0gbnVsbCkgeworCQkJCQlyZXZpc2lvbiA9IHIucmV2aXNpb247CisJCQkJfQogCQkJfQogCQkJU3RyaW5nIHJlbW90ZVVybCA9IHJlbW90ZVVybHMuZ2V0KHJlbW90ZSk7CiAJCQlpZiAocmVtb3RlVXJsID09IG51bGwpIHsKLQkJCQlyZW1vdGVVcmwgPSBiYXNlVXJpLnJlc29sdmUocmVtb3Rlcy5nZXQocmVtb3RlKSkudG9TdHJpbmcoKTsKKwkJCQlyZW1vdGVVcmwgPQorCQkJCQkJYmFzZVVyaS5yZXNvbHZlKHJlbW90ZXMuZ2V0KHJlbW90ZSkuZmV0Y2gpLnRvU3RyaW5nKCk7CiAJCQkJaWYgKCFyZW1vdGVVcmwuZW5kc1dpdGgoIi8iKSkgLy8kTk9OLU5MUy0xJAogCQkJCQlyZW1vdGVVcmwgPSByZW1vdGVVcmwgKyAiLyI7IC8vJE5PTi1OTFMtMSQKIAkJCQlyZW1vdGVVcmxzLnB1dChyZW1vdGUsIHJlbW90ZVVybCk7CiAJCQl9CiAJCQlwcm9qLnNldFVybChyZW1vdGVVcmwgKyBwcm9qLmdldE5hbWUoKSkKLQkJCQkJLnNldERlZmF1bHRSZXZpc2lvbihkZWZhdWx0UmV2aXNpb24pOworCQkJCQkuc2V0RGVmYXVsdFJldmlzaW9uKHJldmlzaW9uKTsKIAkJfQogCiAJCWZpbHRlcmVkUHJvamVjdHMuYWRkQWxsKHByb2plY3RzKTsKQEAgLTM4OSw0ICs0MDUsMTQgQEAgcHJpdmF0ZSBib29sZWFuIGlzTmVzdGVkQ29weWZpbGUoQ29weUZpbGUgY29weWZpbGUpIHsKIAkJfQogCQlyZXR1cm4gZmFsc2U7CiAJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUmVtb3RlIHsKKwkJZmluYWwgU3RyaW5nIGZldGNoOworCQlmaW5hbCBTdHJpbmcgcmV2aXNpb247CisKKwkJUmVtb3RlKFN0cmluZyBmZXRjaCwgU3RyaW5nIHJldmlzaW9uKSB7CisJCQl0aGlzLmZldGNoID0gZmV0Y2g7CisJCQl0aGlzLnJldmlzaW9uID0gcmV2aXNpb247CisJCX0KKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb1Byb2plY3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvUHJvamVjdC5qYXZhCmluZGV4IDkxNTA2NmQuLmY2ZDEyMDkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvUHJvamVjdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvUHJvamVjdC5qYXZhCkBAIC0yNTIsMTAgKzI1MiwxMCBAQCBwdWJsaWMgdm9pZCBhZGRDb3B5RmlsZShDb3B5RmlsZSBjb3B5ZmlsZSkgewogCS8qKgogCSAqIEFkZCBhIGJ1bmNoIG9mIGNvcHlmaWxlIGNvbmZpZ3VyYXRpb25zLgogCSAqCi0JICogQHBhcmFtIGNvcHlmaWxlcworCSAqIEBwYXJhbSBjb3B5RmlsZXMKIAkgKi8KLQlwdWJsaWMgdm9pZCBhZGRDb3B5RmlsZXMoQ29sbGVjdGlvbjxDb3B5RmlsZT4gY29weWZpbGVzKSB7Ci0JCXRoaXMuY29weWZpbGVzLmFkZEFsbChjb3B5ZmlsZXMpOworCXB1YmxpYyB2b2lkIGFkZENvcHlGaWxlcyhDb2xsZWN0aW9uPENvcHlGaWxlPiBjb3B5RmlsZXMpIHsKKwkJdGhpcy5jb3B5ZmlsZXMuYWRkQWxsKGNvcHlGaWxlcyk7CiAJfQogCiAJLyoqCkBAIC0yODgsMTMgKzI4OCwxMyBAQCBwdWJsaWMgYm9vbGVhbiBpc0FuY2VzdG9yT2YoUmVwb1Byb2plY3QgdGhhdCkgewogCS8qKgogCSAqIENoZWNrIGlmIHRoaXMgc3ViIHJlcG8gaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHBhdGguCiAJICoKLQkgKiBAcGFyYW0gcGF0aAorCSAqIEBwYXJhbSB0aGF0UGF0aAogCSAqICAgICAgICAgICAgcGF0aCB0byBiZSBjaGVja2VkIHRvIHNlZSBpZiBpdCBpcyB3aXRoaW4gdGhpcyByZXBvc2l0b3J5CiAJICogQHJldHVybiB0cnVlIGlmIHRoaXMgc3ViIHJlcG8gaXMgYW4gYW5jZXN0b3Igb2YgdGhlIGdpdmVuIHBhdGguCiAJICogQHNpbmNlIDQuMgogCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQW5jZXN0b3JPZihTdHJpbmcgcGF0aCkgewotCQlyZXR1cm4gcGF0aC5zdGFydHNXaXRoKGdldFBhdGhXaXRoU2xhc2goKSk7CisJcHVibGljIGJvb2xlYW4gaXNBbmNlc3Rvck9mKFN0cmluZyB0aGF0UGF0aCkgeworCQlyZXR1cm4gdGhhdFBhdGguc3RhcnRzV2l0aChnZXRQYXRoV2l0aFNsYXNoKCkpOwogCX0KIAogCUBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQ2hhaW5pbmdDcmVkZW50aWFsc1Byb3ZpZGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9DaGFpbmluZ0NyZWRlbnRpYWxzUHJvdmlkZXIuamF2YQppbmRleCAzOTQxZDNjLi43MzlkZGNjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9DaGFpbmluZ0NyZWRlbnRpYWxzUHJvdmlkZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9DaGFpbmluZ0NyZWRlbnRpYWxzUHJvdmlkZXIuamF2YQpAQCAtNzAsOCArNzAsNiBAQCBwdWJsaWMgY2xhc3MgQ2hhaW5pbmdDcmVkZW50aWFsc1Byb3ZpZGVyIGV4dGVuZHMgQ3JlZGVudGlhbHNQcm92aWRlciB7CiAJcHVibGljIENoYWluaW5nQ3JlZGVudGlhbHNQcm92aWRlcihDcmVkZW50aWFsc1Byb3ZpZGVyLi4uIHByb3ZpZGVycykgewogCQl0aGlzLmNyZWRlbnRpYWxQcm92aWRlcnMgPSBuZXcgQXJyYXlMaXN0PENyZWRlbnRpYWxzUHJvdmlkZXI+KAogCQkJCUFycmF5cy5hc0xpc3QocHJvdmlkZXJzKSk7Ci0JCWZvciAoQ3JlZGVudGlhbHNQcm92aWRlciBwIDogcHJvdmlkZXJzKQotCQkJY3JlZGVudGlhbFByb3ZpZGVycy5hZGQocCk7CiAJfQogCiAJLyoqCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnRIdHRwLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnRIdHRwLmphdmEKaW5kZXggNTk0ODI3OC4uNDE0ZTg3OSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhbnNwb3J0SHR0cC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYW5zcG9ydEh0dHAuamF2YQpAQCAtNjcsOSArNjcsNiBAQAogaW1wb3J0IGphdmEubmV0LlByb3h5OwogaW1wb3J0IGphdmEubmV0LlByb3h5U2VsZWN0b3I7CiBpbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5TWFuYWdlbWVudEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKQEAgLTgzLDExICs4MCw2IEBACiBpbXBvcnQgamF2YS51dGlsLnppcC5HWklQSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS51dGlsLnppcC5HWklQT3V0cHV0U3RyZWFtOwogCi1pbXBvcnQgamF2YXgubmV0LnNzbC5Ib3N0bmFtZVZlcmlmaWVyOwotaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU2Vzc2lvbjsKLWltcG9ydCBqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlcjsKLWltcG9ydCBqYXZheC5uZXQuc3NsLlg1MDlUcnVzdE1hbmFnZXI7Ci0KIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Ob1JlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlBhY2tQcm90b2NvbEV4Y2VwdGlvbjsKQEAgLTUzOCw3ICs1MzAsNyBAQCBwcm90ZWN0ZWQgSHR0cENvbm5lY3Rpb24gaHR0cE9wZW4oU3RyaW5nIG1ldGhvZCwgVVJMIHUpCiAJCUh0dHBDb25uZWN0aW9uIGNvbm4gPSBjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGUodSwgcHJveHkpOwogCiAJCWlmICghaHR0cC5zc2xWZXJpZnkgJiYgImh0dHBzIi5lcXVhbHModS5nZXRQcm90b2NvbCgpKSkgeyAvLyROT04tTkxTLTEkCi0JCQlkaXNhYmxlU3NsVmVyaWZ5KGNvbm4pOworCQkJSHR0cFN1cHBvcnQuZGlzYWJsZVNzbFZlcmlmeShjb25uKTsKIAkJfQogCiAJCWNvbm4uc2V0UmVxdWVzdE1ldGhvZChtZXRob2QpOwpAQCAtNTYyLDE5ICs1NTQsNiBAQCBwcm90ZWN0ZWQgSHR0cENvbm5lY3Rpb24gaHR0cE9wZW4oU3RyaW5nIG1ldGhvZCwgVVJMIHUpCiAJCXJldHVybiBjb25uOwogCX0KIAotCXByaXZhdGUgdm9pZCBkaXNhYmxlU3NsVmVyaWZ5KEh0dHBDb25uZWN0aW9uIGNvbm4pCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmaW5hbCBUcnVzdE1hbmFnZXJbXSB0cnVzdEFsbENlcnRzID0gbmV3IFRydXN0TWFuYWdlcltdIHsgbmV3IER1bW15WDUwOVRydXN0TWFuYWdlcigpIH07Ci0JCXRyeSB7Ci0JCQljb25uLmNvbmZpZ3VyZShudWxsLCB0cnVzdEFsbENlcnRzLCBudWxsKTsKLQkJCWNvbm4uc2V0SG9zdG5hbWVWZXJpZmllcihuZXcgRHVtbXlIb3N0bmFtZVZlcmlmaWVyKCkpOwotCQl9IGNhdGNoIChLZXlNYW5hZ2VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCiAJZmluYWwgSW5wdXRTdHJlYW0gb3BlbklucHV0U3RyZWFtKEh0dHBDb25uZWN0aW9uIGNvbm4pCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGNvbm4uZ2V0SW5wdXRTdHJlYW0oKTsKQEAgLTEwMDIsMjUgKzk4MSw0IEBAIHZvaWQgZXhlY3V0ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCQlpbi5hZGQob3BlbklucHV0U3RyZWFtKGNvbm4pKTsKIAkJfQogCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIER1bW15WDUwOVRydXN0TWFuYWdlciBpbXBsZW1lbnRzIFg1MDlUcnVzdE1hbmFnZXIgewotCQlwdWJsaWMgWDUwOUNlcnRpZmljYXRlW10gZ2V0QWNjZXB0ZWRJc3N1ZXJzKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBjaGVja0NsaWVudFRydXN0ZWQoWDUwOUNlcnRpZmljYXRlW10gY2VydHMsIFN0cmluZyBhdXRoVHlwZSkgewotCQkJLy8gbm8gY2hlY2sKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGNoZWNrU2VydmVyVHJ1c3RlZChYNTA5Q2VydGlmaWNhdGVbXSBjZXJ0cywgU3RyaW5nIGF1dGhUeXBlKSB7Ci0JCQkvLyBubyBjaGVjawotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtbXlIb3N0bmFtZVZlcmlmaWVyIGltcGxlbWVudHMgSG9zdG5hbWVWZXJpZmllciB7Ci0JCXB1YmxpYyBib29sZWFuIHZlcmlmeShTdHJpbmcgaG9zdG5hbWUsIFNTTFNlc3Npb24gc2Vzc2lvbikgewotCQkJLy8gYWx3YXlzIGFjY2VwdAotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL0Fic3RyYWN0VHJlZUl0ZXJhdG9yLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL0Fic3RyYWN0VHJlZUl0ZXJhdG9yLmphdmEKaW5kZXggNTgxMzYzNS4uZGM4MzVlNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9BYnN0cmFjdFRyZWVJdGVyYXRvci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvQWJzdHJhY3RUcmVlSXRlcmF0b3IuamF2YQpAQCAtNTAsNiArNTAsNyBAQAogaW1wb3J0IGphdmEubmlvLkNoYXJCdWZmZXI7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc05vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZXNIYW5kbGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVDaGVja291dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Db3JydXB0T2JqZWN0RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkluY29ycmVjdE9iamVjdFR5cGVFeGNlcHRpb247CkBAIC04OCw4ICs4OSwxNCBAQCBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUcmVlSXRlcmF0b3IgewogCS8qKiBBIGR1bW15IG9iamVjdCBpZCBidWZmZXIgdGhhdCBtYXRjaGVzIHRoZSB6ZXJvIE9iamVjdElkLiAqLwogCXByb3RlY3RlZCBzdGF0aWMgZmluYWwgYnl0ZVtdIHplcm9pZCA9IG5ldyBieXRlW0NvbnN0YW50cy5PQkpFQ1RfSURfTEVOR1RIXTsKIAotCS8qKiBJdGVyYXRvciBmb3IgdGhlIHBhcmVudCB0cmVlOyBudWxsIGlmIHdlIGFyZSB0aGUgcm9vdCBpdGVyYXRvci4gKi8KLQlmaW5hbCBBYnN0cmFjdFRyZWVJdGVyYXRvciBwYXJlbnQ7CisJLyoqCisJICogSXRlcmF0b3IgZm9yIHRoZSBwYXJlbnQgdHJlZTsgbnVsbCBpZiB3ZSBhcmUgdGhlIHJvb3QgaXRlcmF0b3IuCisJICogPHA+CisJICogVXNlZCBieSB7QGxpbmsgVHJlZVdhbGt9IGFuZCB7QGxpbmsgQXR0cmlidXRlc0hhbmRsZXJ9CisJICoKKwkgKiBAc2luY2UgNC4zCisJICovCisJcHVibGljIGZpbmFsIEFic3RyYWN0VHJlZUl0ZXJhdG9yIHBhcmVudDsKIAogCS8qKiBUaGUgaXRlcmF0b3IgdGhpcyBjdXJyZW50IGVudHJ5IGlzIHBhdGggZXF1YWwgdG8uICovCiAJQWJzdHJhY3RUcmVlSXRlcmF0b3IgbWF0Y2hlczsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGsuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGsuamF2YQppbmRleCA1Y2Q3MTNkLi40Nzc1ZTk2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1RyZWVXYWxrLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsay5qYXZhCkBAIC00OSwxNSArNDksMTMgQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5KR2l0SW50ZXJuYWxFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlLlN0YXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzTm9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc05vZGVQcm92aWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlc1Byb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVCdWlsZEl0ZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzSGFuZGxlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlSXRlcmF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuQ29ycnVwdE9iamVjdEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5JbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uOwpAQCAtMjcwLDYgKzI2OCw5IEBAIHB1YmxpYyBzdGF0aWMgVHJlZVdhbGsgZm9yUGF0aChmaW5hbCBSZXBvc2l0b3J5IGRiLCBmaW5hbCBTdHJpbmcgcGF0aCwKIAkvKiogQ2FjaGVkIGF0dHJpYnV0ZSBmb3IgdGhlIGN1cnJlbnQgZW50cnkgKi8KIAlwcml2YXRlIEF0dHJpYnV0ZXMgYXR0cnMgPSBudWxsOwogCisJLyoqIENhY2hlZCBhdHRyaWJ1dGVzIGhhbmRsZXIgKi8KKwlwcml2YXRlIEF0dHJpYnV0ZXNIYW5kbGVyIGF0dHJpYnV0ZXNIYW5kbGVyOworCiAJcHJpdmF0ZSBDb25maWcgY29uZmlnOwogCiAJLyoqCkBAIC0zMTAsNiArMzExLDE0IEBAIHB1YmxpYyBPYmplY3RSZWFkZXIgZ2V0T2JqZWN0UmVhZGVyKCkgewogCX0KIAogCS8qKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBPcGVyYXRpb25UeXBlfQorCSAqIEBzaW5jZSA0LjMKKwkgKi8KKwlwdWJsaWMgT3BlcmF0aW9uVHlwZSBnZXRPcGVyYXRpb25UeXBlKCkgeworCQlyZXR1cm4gb3BlcmF0aW9uVHlwZTsKKwl9CisKKwkvKioKIAkgKiBSZWxlYXNlIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGlzIHdhbGtlcidzIHJlYWRlci4KIAkgKiA8cD4KIAkgKiBBIHdhbGtlciB0aGF0IGhhcyBiZWVuIHJlbGVhc2VkIGNhbiBiZSB1c2VkIGFnYWluLCBidXQgbWF5IG5lZWQgdG8gYmUKQEAgLTQzNSw5ICs0NDQsODMgQEAgcHVibGljIHZvaWQgc2V0QXR0cmlidXRlc05vZGVQcm92aWRlcihBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIHByb3ZpZGVyKSB7CiAJCWF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPSBwcm92aWRlcjsKIAl9CiAKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlcn0gZm9yIHRoaXMge0BsaW5rIFRyZWVXYWxrfS4KKwkgKiBAc2luY2UgNC4zCisJICovCisJcHVibGljIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgZ2V0QXR0cmlidXRlc05vZGVQcm92aWRlcigpIHsKKwkJcmV0dXJuIGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXI7CisJfQorCisJLyoqCisJICogUmV0cmlldmUgdGhlIGdpdCBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudCBlbnRyeS4KKwkgKgorCSAqIDxoND5HaXQgYXR0cmlidXRlIGNvbXB1dGF0aW9uPC9oND4KKwkgKgorCSAqIDx1bD4KKwkgKiA8bGk+R2V0IHRoZSBhdHRyaWJ1dGVzIG1hdGNoaW5nIHRoZSBjdXJyZW50IHBhdGggZW50cnkgZnJvbSB0aGUgaW5mbyBmaWxlCisJICogKHNlZSB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlciNnZXRJbmZvQXR0cmlidXRlc05vZGUoKX0pLjwvbGk+CisJICogPGxpPkNvbXBsZXRlcyB0aGUgbGlzdCBvZiBhdHRyaWJ1dGVzIHVzaW5nIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlcworCSAqIGxvY2F0ZWQgb24gdGhlIGN1cnJlbnQgcGF0aCAodGhlIGZ1cnRoZXIgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zCisJICogLmdpdGF0dHJpYnV0ZXMgaXMgZnJvbSB0aGUgcGF0aCBpbiBxdWVzdGlvbiwgdGhlIGxvd2VyIGl0cyBwcmVjZWRlbmNlKS4KKwkgKiBGb3IgYSBjaGVja2luIG9wZXJhdGlvbiwgaXQgd2lsbCBsb29rIGZpcnN0IG9uIHRoZSB3b3JraW5nIHRyZWUgKGlmIGFueSkuCisJICogSWYgdGhlcmUgaXMgbm8gYXR0cmlidXRlcyBmaWxlLCBpdCB3aWxsIGZhbGxiYWNrIG9uIHRoZSBpbmRleC4gRm9yIGEKKwkgKiBjaGVja291dCBvcGVyYXRpb24sIGl0IHdpbGwgZmlyc3QgdXNlIHRoZSBpbmRleCBlbnRyeSBhbmQgdGhlbiBmYWxsYmFjaworCSAqIG9uIHRoZSB3b3JraW5nIHRyZWUgaWYgbm9uZS48L2xpPgorCSAqIDxsaT5JbiB0aGUgZW5kLCBjb21wbGV0ZXMgdGhlIGxpc3Qgb2YgbWF0Y2hpbmcgYXR0cmlidXRlcyB1c2luZyB0aGUKKwkgKiBnbG9iYWwgYXR0cmlidXRlIGZpbGUgZGVmaW5lIGluIHRoZSBjb25maWd1cmF0aW9uIChzZWUKKwkgKiB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlciNnZXRHbG9iYWxBdHRyaWJ1dGVzTm9kZSgpfSk8L2xpPgorCSAqCisJICogPC91bD4KKwkgKgorCSAqCisJICogPGg0Pkl0ZXJhdG9yIGNvbnN0cmFpbnRzPC9oND4KKwkgKgorCSAqIDxwPgorCSAqIEluIG9yZGVyIHRvIGhhdmUgYSBjb3JyZWN0IGxpc3Qgb2YgYXR0cmlidXRlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnksIHRoaXMKKwkgKiB7QGxpbmsgVHJlZVdhbGt9IHJlcXVpcmVzIHRvIGhhdmUgYXQgbGVhc3Qgb25lCisJICoge0BsaW5rIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXJ9IGFuZCBhIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfSBzZXQgdXAuIEFuCisJICoge0BsaW5rIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXJ9IGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMgZnJvbQorCSAqIHRoZSBpbmZvIGF0dHJpYnV0ZXMgZmlsZSBhbmQgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIGZpbGUuIFRoZQorCSAqIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfSBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlcworCSAqIHN0b3JlZCBpbiB0aGUgaW5kZXguIEEge0BsaW5rIFdvcmtpbmdUcmVlSXRlcmF0b3J9IGNhbiBhbHNvIGJlIHByb3ZpZGVkCisJICogdG8gYWNjZXNzIHRoZSBsb2NhbCB2ZXJzaW9uIG9mIHRoZSAuZ2l0YXR0cmlidXRlcyBmaWxlcy4gSWYgbm9uZSBpcworCSAqIHByb3ZpZGVkIGl0IHdpbGwgZmFsbGJhY2sgb24gdGhlIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfS4KKwkgKiA8L3A+CisJICoKKwkgKiBAcmV0dXJuIGEge0BsaW5rIFNldH0gb2Yge0BsaW5rIEF0dHJpYnV0ZX1zIHRoYXQgbWF0Y2ggdGhlIGN1cnJlbnQgZW50cnkuCisJICogQHNpbmNlIDQuMgorCSAqLworCXB1YmxpYyBBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoKSB7CisJCWlmIChhdHRycyAhPSBudWxsKQorCQkJcmV0dXJuIGF0dHJzOworCisJCWlmIChhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyID09IG51bGwpIHsKKwkJCS8vIFRoZSB3b3JrIHRyZWUgc2hvdWxkIGhhdmUgYSBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIHRvIGJlIGFibGUgdG8KKwkJCS8vIHJldHJpZXZlIHRoZSBpbmZvIGFuZCBnbG9iYWwgYXR0cmlidXRlcyBub2RlCisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorCQkJCQkiVGhlIHRyZWUgd2FsayBzaG91bGQgaGF2ZSBvbmUgQXR0cmlidXRlc05vZGVQcm92aWRlciBzZXQgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUgZ2l0IGF0dHJpYnV0ZXMuIik7IC8vJE5PTi1OTFMtMSQKKwkJfQorCisJCXRyeSB7CisJCQkvLyBMYXp5IGNyZWF0ZSB0aGUgYXR0cmlidXRlc0hhbmRsZXIgb24gdGhlIGZpcnN0IGFjY2VzcyBvZgorCQkJLy8gYXR0cmlidXRlcy4gVGhpcyByZXF1aXJlcyB0aGUgaW5mbywgZ2xvYmFsIGFuZCByb290CisJCQkvLyBhdHRyaWJ1dGVzIG5vZGVzCisJCQlpZiAoYXR0cmlidXRlc0hhbmRsZXIgPT0gbnVsbCkgeworCQkJCWF0dHJpYnV0ZXNIYW5kbGVyID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHRoaXMpOworCQkJfQorCQkJYXR0cnMgPSBhdHRyaWJ1dGVzSGFuZGxlci5nZXRBdHRyaWJ1dGVzKCk7CisJCQlyZXR1cm4gYXR0cnM7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBKR2l0SW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIHdoaWxlIHBhcnNpbmcgYXR0cmlidXRlcyIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJZSk7CisJCX0KKwl9CisKIAkvKiogUmVzZXQgdGhpcyB3YWxrZXIgc28gbmV3IHRyZWUgaXRlcmF0b3JzIGNhbiBiZSBhZGRlZCB0byBpdC4gKi8KIAlwdWJsaWMgdm9pZCByZXNldCgpIHsKIAkJYXR0cnMgPSBudWxsOworCQlhdHRyaWJ1dGVzSGFuZGxlciA9IG51bGw7CiAJCXRyZWVzID0gTk9fVFJFRVM7CiAJCWFkdmFuY2UgPSBmYWxzZTsKIAkJZGVwdGggPSAwOwpAQCAtNzQwLDYgKzgyMywxNiBAQCBwdWJsaWMgRmlsZU1vZGUgZ2V0RmlsZU1vZGUoZmluYWwgaW50IG50aCkgewogCX0KIAogCS8qKgorCSAqIE9idGFpbiB0aGUge0BsaW5rIEZpbGVNb2RlfSBmb3IgdGhlIGN1cnJlbnQgZW50cnkgb24gdGhlIGN1cnJlbnRIZWFkIHRyZWUKKwkgKgorCSAqIEByZXR1cm4gbW9kZSBmb3IgdGhlIGN1cnJlbnQgZW50cnkgb2YgdGhlIGN1cnJlbnRIZWFkIHRyZWUuCisJICogQHNpbmNlIDQuMworCSAqLworCXB1YmxpYyBGaWxlTW9kZSBnZXRGaWxlTW9kZSgpIHsKKwkJcmV0dXJuIEZpbGVNb2RlLmZyb21CaXRzKGN1cnJlbnRIZWFkLm1vZGUpOworCX0KKworCS8qKgogCSAqIE9idGFpbiB0aGUgT2JqZWN0SWQgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgogCSAqIDxwPgogCSAqIFVzaW5nIHRoaXMgbWV0aG9kIHRvIGNvbXBhcmUgT2JqZWN0SWQgdmFsdWVzIGJldHdlZW4gdHJlZXMgb2YgdGhpcyB3YWxrZXIKQEAgLTExMDksMTU2ICsxMjAyLDEzIEBAIHN0YXRpYyBTdHJpbmcgcGF0aE9mKGZpbmFsIGJ5dGVbXSBidWYsIGludCBwb3MsIGludCBlbmQpIHsKIAl9CiAKIAkvKioKLQkgKiBSZXRyaWV2ZSB0aGUgZ2l0IGF0dHJpYnV0ZXMgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgotCSAqCi0JICogPGg0PkdpdCBhdHRyaWJ1dGUgY29tcHV0YXRpb248L2g0PgotCSAqCi0JICogPHVsPgotCSAqIDxsaT5HZXQgdGhlIGF0dHJpYnV0ZXMgbWF0Y2hpbmcgdGhlIGN1cnJlbnQgcGF0aCBlbnRyeSBmcm9tIHRoZSBpbmZvIGZpbGUKLQkgKiAoc2VlIHtAbGluayBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyI2dldEluZm9BdHRyaWJ1dGVzTm9kZSgpfSkuPC9saT4KLQkgKiA8bGk+Q29tcGxldGVzIHRoZSBsaXN0IG9mIGF0dHJpYnV0ZXMgdXNpbmcgdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGVzCi0JICogbG9jYXRlZCBvbiB0aGUgY3VycmVudCBwYXRoICh0aGUgZnVydGhlciB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMKLQkgKiAuZ2l0YXR0cmlidXRlcyBpcyBmcm9tIHRoZSBwYXRoIGluIHF1ZXN0aW9uLCB0aGUgbG93ZXIgaXRzIHByZWNlZGVuY2UpLgotCSAqIEZvciBhIGNoZWNraW4gb3BlcmF0aW9uLCBpdCB3aWxsIGxvb2sgZmlyc3Qgb24gdGhlIHdvcmtpbmcgdHJlZSAoaWYgYW55KS4KLQkgKiBJZiB0aGVyZSBpcyBubyBhdHRyaWJ1dGVzIGZpbGUsIGl0IHdpbGwgZmFsbGJhY2sgb24gdGhlIGluZGV4LiBGb3IgYQotCSAqIGNoZWNrb3V0IG9wZXJhdGlvbiwgaXQgd2lsbCBmaXJzdCB1c2UgdGhlIGluZGV4IGVudHJ5IGFuZCB0aGVuIGZhbGxiYWNrCi0JICogb24gdGhlIHdvcmtpbmcgdHJlZSBpZiBub25lLjwvbGk+Ci0JICogPGxpPkluIHRoZSBlbmQsIGNvbXBsZXRlcyB0aGUgbGlzdCBvZiBtYXRjaGluZyBhdHRyaWJ1dGVzIHVzaW5nIHRoZQotCSAqIGdsb2JhbCBhdHRyaWJ1dGUgZmlsZSBkZWZpbmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gKHNlZQotCSAqIHtAbGluayBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyI2dldEdsb2JhbEF0dHJpYnV0ZXNOb2RlKCl9KTwvbGk+Ci0JICoKLQkgKiA8L3VsPgotCSAqCi0JICoKLQkgKiA8aDQ+SXRlcmF0b3IgY29uc3RyYWludHM8L2g0PgotCSAqCi0JICogPHA+Ci0JICogSW4gb3JkZXIgdG8gaGF2ZSBhIGNvcnJlY3QgbGlzdCBvZiBhdHRyaWJ1dGVzIGZvciB0aGUgY3VycmVudCBlbnRyeSwgdGhpcwotCSAqIHtAbGluayBUcmVlV2Fsa30gcmVxdWlyZXMgdG8gaGF2ZSBhdCBsZWFzdCBvbmUKLQkgKiB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlcn0gYW5kIGEge0BsaW5rIERpckNhY2hlSXRlcmF0b3J9IHNldCB1cC4gQW4KLQkgKiB7QGxpbmsgQXR0cmlidXRlc05vZGVQcm92aWRlcn0gaXMgdXNlZCB0byByZXRyaWV2ZSB0aGUgYXR0cmlidXRlcyBmcm9tCi0JICogdGhlIGluZm8gYXR0cmlidXRlcyBmaWxlIGFuZCB0aGUgZ2xvYmFsIGF0dHJpYnV0ZXMgZmlsZS4gVGhlCi0JICoge0BsaW5rIERpckNhY2hlSXRlcmF0b3J9IGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGVzCi0JICogc3RvcmVkIGluIHRoZSBpbmRleC4gQSB7QGxpbmsgV29ya2luZ1RyZWVJdGVyYXRvcn0gY2FuIGFsc28gYmUgcHJvdmlkZWQKLQkgKiB0byBhY2Nlc3MgdGhlIGxvY2FsIHZlcnNpb24gb2YgdGhlIC5naXRhdHRyaWJ1dGVzIGZpbGVzLiBJZiBub25lIGlzCi0JICogcHJvdmlkZWQgaXQgd2lsbCBmYWxsYmFjayBvbiB0aGUge0BsaW5rIERpckNhY2hlSXRlcmF0b3J9LgotCSAqIDwvcD4KLQkgKgotCSAqIEByZXR1cm4gYSB7QGxpbmsgU2V0fSBvZiB7QGxpbmsgQXR0cmlidXRlfXMgdGhhdCBtYXRjaCB0aGUgY3VycmVudCBlbnRyeS4KLQkgKiBAc2luY2UgNC4yCisJICogQHBhcmFtIHR5cGUKKwkgKiAgICAgICAgICAgIG9mIHRoZSB0cmVlIHRvIGJlIHF1ZXJpZWQKKwkgKiBAcmV0dXJuIHRoZSB0cmVlIG9mIHRoYXQgdHlwZSBvciBudWxsIGlmIG5vbmUgaXMgcHJlc2VudAorCSAqIEBzaW5jZSA0LjMKIAkgKi8KLQlwdWJsaWMgQXR0cmlidXRlcyBnZXRBdHRyaWJ1dGVzKCkgewotCQlpZiAoYXR0cnMgIT0gbnVsbCkKLQkJCXJldHVybiBhdHRyczsKLQotCQlpZiAoYXR0cmlidXRlc05vZGVQcm92aWRlciA9PSBudWxsKSB7Ci0JCQkvLyBUaGUgd29yayB0cmVlIHNob3VsZCBoYXZlIGEgQXR0cmlidXRlc05vZGVQcm92aWRlciB0byBiZSBhYmxlIHRvCi0JCQkvLyByZXRyaWV2ZSB0aGUgaW5mbyBhbmQgZ2xvYmFsIGF0dHJpYnV0ZXMgbm9kZQotCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKLQkJCQkJIlRoZSB0cmVlIHdhbGsgc2hvdWxkIGhhdmUgb25lIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgc2V0IGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIGdpdCBhdHRyaWJ1dGVzLiIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQotCQlXb3JraW5nVHJlZUl0ZXJhdG9yIHdvcmtpbmdUcmVlSXRlcmF0b3IgPSBnZXRUcmVlKFdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpOwotCQlEaXJDYWNoZUl0ZXJhdG9yIGRpckNhY2hlSXRlcmF0b3IgPSBnZXRUcmVlKERpckNhY2hlSXRlcmF0b3IuY2xhc3MpOwotCQlDYW5vbmljYWxUcmVlUGFyc2VyIG90aGVyID0gZ2V0VHJlZShDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKTsKLQotCQlpZiAod29ya2luZ1RyZWVJdGVyYXRvciA9PSBudWxsICYmIGRpckNhY2hlSXRlcmF0b3IgPT0gbnVsbAotCQkJCSYmIG90aGVyID09IG51bGwpIHsKLQkJCS8vIENhbiBub3QgcmV0cmlldmUgdGhlIGF0dHJpYnV0ZXMgd2l0aG91dCBhdCBsZWFzdCBvbmUgb2YgdGhlIGFib3ZlCi0JCQkvLyBpdGVyYXRvcnMuCi0JCQlyZXR1cm4gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJfQotCi0JCVN0cmluZyBwYXRoID0gY3VycmVudEhlYWQuZ2V0RW50cnlQYXRoU3RyaW5nKCk7Ci0JCWZpbmFsIGJvb2xlYW4gaXNEaXIgPSBGaWxlTW9kZS5UUkVFLmVxdWFscyhjdXJyZW50SGVhZC5tb2RlKTsKLQkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMoKTsKLQkJdHJ5IHsKLQkJCS8vIEdldHMgdGhlIGdsb2JhbCBhdHRyaWJ1dGVzIG5vZGUKLQkJCUF0dHJpYnV0ZXNOb2RlIGdsb2JhbE5vZGVBdHRyID0gYXR0cmlidXRlc05vZGVQcm92aWRlcgotCQkJCQkuZ2V0R2xvYmFsQXR0cmlidXRlc05vZGUoKTsKLQkJCS8vIEdldHMgdGhlIGluZm8gYXR0cmlidXRlcyBub2RlCi0JCQlBdHRyaWJ1dGVzTm9kZSBpbmZvTm9kZUF0dHIgPSBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyCi0JCQkJCS5nZXRJbmZvQXR0cmlidXRlc05vZGUoKTsKLQotCQkJLy8gR2V0cyB0aGUgaW5mbyBhdHRyaWJ1dGVzCi0JCQlpZiAoaW5mb05vZGVBdHRyICE9IG51bGwpIHsKLQkJCQlpbmZvTm9kZUF0dHIuZ2V0QXR0cmlidXRlcyhwYXRoLCBpc0RpciwgYXR0cmlidXRlcyk7Ci0JCQl9Ci0KLQkJCS8vIEdldHMgdGhlIGF0dHJpYnV0ZXMgbG9jYXRlZCBvbiB0aGUgY3VycmVudCBlbnRyeSBwYXRoCi0JCQlnZXRQZXJEaXJlY3RvcnlFbnRyeUF0dHJpYnV0ZXMocGF0aCwgaXNEaXIsIG9wZXJhdGlvblR5cGUsCi0JCQkJCXdvcmtpbmdUcmVlSXRlcmF0b3IsIGRpckNhY2hlSXRlcmF0b3IsIG90aGVyLCBhdHRyaWJ1dGVzKTsKLQotCQkJLy8gR2V0cyB0aGUgYXR0cmlidXRlcyBsb2NhdGVkIGluIHRoZSBnbG9iYWwgYXR0cmlidXRlIGZpbGUKLQkJCWlmIChnbG9iYWxOb2RlQXR0ciAhPSBudWxsKSB7Ci0JCQkJZ2xvYmFsTm9kZUF0dHIuZ2V0QXR0cmlidXRlcyhwYXRoLCBpc0RpciwgYXR0cmlidXRlcyk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBKR2l0SW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIHdoaWxlIHBhcnNpbmcgYXR0cmlidXRlcyIsIGUpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJLy8gbm93IGFmdGVyIGFsbCBhdHRyaWJ1dGVzIGFyZSBjb2xsZWN0ZWQgLSBpbiB0aGUgY29ycmVjdCBoaWVyYXJjaHkKLQkJLy8gb3JkZXIgLSByZW1vdmUgYWxsIHVuc3BlY2lmaWVkIGVudHJpZXMgKHRoZSAhIG1hcmtlcikKLQkJZm9yIChBdHRyaWJ1dGUgYSA6IGF0dHJpYnV0ZXMuZ2V0QWxsKCkpIHsKLQkJCWlmIChhLmdldFN0YXRlKCkgPT0gU3RhdGUuVU5TUEVDSUZJRUQpCi0JCQkJYXR0cmlidXRlcy5yZW1vdmUoYS5nZXRLZXkoKSk7Ci0JCX0KLQkJcmV0dXJuIGF0dHJpYnV0ZXM7Ci0JfQotCi0JLyoqCi0JICogR2V0IHRoZSBhdHRyaWJ1dGVzIGxvY2F0ZWQgb24gdGhlIGN1cnJlbnQgZW50cnkgcGF0aC4KLQkgKgotCSAqIEBwYXJhbSBwYXRoCi0JICogICAgICAgICAgICBjdXJyZW50IGVudHJ5IHBhdGgKLQkgKiBAcGFyYW0gaXNEaXIKLQkgKiAgICAgICAgICAgIGhvbGRzIHRydWUgaWYgdGhlIGN1cnJlbnQgZW50cnkgaXMgYSBkaXJlY3RvcnkKLQkgKiBAcGFyYW0gb3BUeXBlCi0JICogICAgICAgICAgICB0eXBlIG9mIG9wZXJhdGlvbgotCSAqIEBwYXJhbSB3b3JraW5nVHJlZUl0ZXJhdG9yCi0JICogICAgICAgICAgICBhIHtAbGluayBXb3JraW5nVHJlZUl0ZXJhdG9yfSBtYXRjaGluZyB0aGUgY3VycmVudCBlbnRyeQotCSAqIEBwYXJhbSBkaXJDYWNoZUl0ZXJhdG9yCi0JICogICAgICAgICAgICBhIHtAbGluayBEaXJDYWNoZUl0ZXJhdG9yfSBtYXRjaGluZyB0aGUgY3VycmVudCBlbnRyeQotCSAqIEBwYXJhbSBvdGhlcgotCSAqICAgICAgICAgICAgYSB7QGxpbmsgQ2Fub25pY2FsVHJlZVBhcnNlcn0gbWF0Y2hpbmcgdGhlIGN1cnJlbnQgZW50cnkKLQkgKiBAcGFyYW0gYXR0cmlidXRlcwotCSAqICAgICAgICAgICAgTm9uIG51bGwgbWFwIGhvbGRpbmcgdGhlIGV4aXN0aW5nIGF0dHJpYnV0ZXMuIFRoaXMgbWFwIHdpbGwgYmUKLQkgKiAgICAgICAgICAgIGF1Z21lbnRlZCB3aXRoIG5ldyBlbnRyeS4gTm9uZSBlbnRyeSB3aWxsIGJlIG92ZXJyaWRlZC4KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogICAgICAgICAgICAgSXQgcmFpc2VzIGFuIHtAbGluayBJT0V4Y2VwdGlvbn0gaWYgYSBwcm9ibGVtIGFwcGVhcnMgd2hpbGUKLQkgKiAgICAgICAgICAgICBwYXJzaW5nIG9uZSBvbiB0aGUgYXR0cmlidXRlcyBmaWxlLgotCSAqLwotCXByaXZhdGUgdm9pZCBnZXRQZXJEaXJlY3RvcnlFbnRyeUF0dHJpYnV0ZXMoU3RyaW5nIHBhdGgsIGJvb2xlYW4gaXNEaXIsCi0JCQlPcGVyYXRpb25UeXBlIG9wVHlwZSwgV29ya2luZ1RyZWVJdGVyYXRvciB3b3JraW5nVHJlZUl0ZXJhdG9yLAotCQkJRGlyQ2FjaGVJdGVyYXRvciBkaXJDYWNoZUl0ZXJhdG9yLCBDYW5vbmljYWxUcmVlUGFyc2VyIG90aGVyLAotCQkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gUHJldmVudHMgaW5maW5pdGUgcmVjdXJyZW5jZQotCQlpZiAod29ya2luZ1RyZWVJdGVyYXRvciAhPSBudWxsIHx8IGRpckNhY2hlSXRlcmF0b3IgIT0gbnVsbAotCQkJCXx8IG90aGVyICE9IG51bGwpIHsKLQkJCUF0dHJpYnV0ZXNOb2RlIGN1cnJlbnRBdHRyaWJ1dGVzTm9kZSA9IGdldEN1cnJlbnRBdHRyaWJ1dGVzTm9kZSgKLQkJCQkJb3BUeXBlLCB3b3JraW5nVHJlZUl0ZXJhdG9yLCBkaXJDYWNoZUl0ZXJhdG9yLCBvdGhlcik7Ci0JCQlpZiAoY3VycmVudEF0dHJpYnV0ZXNOb2RlICE9IG51bGwpIHsKLQkJCQljdXJyZW50QXR0cmlidXRlc05vZGUuZ2V0QXR0cmlidXRlcyhwYXRoLCBpc0RpciwgYXR0cmlidXRlcyk7Ci0JCQl9Ci0JCQlnZXRQZXJEaXJlY3RvcnlFbnRyeUF0dHJpYnV0ZXMocGF0aCwgaXNEaXIsIG9wVHlwZSwKLQkJCQkJZ2V0UGFyZW50KHdvcmtpbmdUcmVlSXRlcmF0b3IsIFdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpLAotCQkJCQlnZXRQYXJlbnQoZGlyQ2FjaGVJdGVyYXRvciwgRGlyQ2FjaGVJdGVyYXRvci5jbGFzcyksCi0JCQkJCWdldFBhcmVudChvdGhlciwgQ2Fub25pY2FsVHJlZVBhcnNlci5jbGFzcyksIGF0dHJpYnV0ZXMpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCBnZXRQYXJlbnQoVCBjdXJyZW50LAorCXB1YmxpYyA8VCBleHRlbmRzIEFic3RyYWN0VHJlZUl0ZXJhdG9yPiBUIGdldFRyZWUoCiAJCQlDbGFzczxUPiB0eXBlKSB7Ci0JCWlmIChjdXJyZW50ICE9IG51bGwpIHsKLQkJCUFic3RyYWN0VHJlZUl0ZXJhdG9yIHBhcmVudCA9IGN1cnJlbnQucGFyZW50OwotCQkJaWYgKHR5cGUuaXNJbnN0YW5jZShwYXJlbnQpKSB7Ci0JCQkJcmV0dXJuIHR5cGUuY2FzdChwYXJlbnQpOwotCQkJfQotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXByaXZhdGUgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCBnZXRUcmVlKENsYXNzPFQ+IHR5cGUpIHsKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlcy5sZW5ndGg7IGkrKykgewogCQkJQWJzdHJhY3RUcmVlSXRlcmF0b3IgdHJlZSA9IHRyZWVzW2ldOwogCQkJaWYgKHR5cGUuaXNJbnN0YW5jZSh0cmVlKSkgewpAQCAtMTI2OSw3NiArMTIxOSw2IEBAIHByaXZhdGUgPFQgZXh0ZW5kcyBBYnN0cmFjdFRyZWVJdGVyYXRvcj4gVCBnZXRUcmVlKENsYXNzPFQ+IHR5cGUpIHsKIAl9CiAKIAkvKioKLQkgKiBHZXQgdGhlIHtAbGluayBBdHRyaWJ1dGVzTm9kZX0gZm9yIHRoZSBjdXJyZW50IGVudHJ5LgotCSAqIDxwPgotCSAqIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgdGhlIGZhbGxiYWNrIG1lY2hhbmlzbSBiZXR3ZWVuIHRoZSBpbmRleCBhbmQgdGhlCi0JICogd29ya2luZyB0cmVlIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9uIHR5cGUKLQkgKiA8L3A+Ci0JICoKLQkgKiBAcGFyYW0gb3BUeXBlCi0JICogQHBhcmFtIHdvcmtpbmdUcmVlSXRlcmF0b3IKLQkgKiBAcGFyYW0gZGlyQ2FjaGVJdGVyYXRvcgotCSAqIEBwYXJhbSBvdGhlcgotCSAqIEByZXR1cm4gYSB7QGxpbmsgQXR0cmlidXRlc05vZGV9IG9mIHRoZSBjdXJyZW50IGVudHJ5LAotCSAqICAgICAgICAge0BsaW5rIE51bGxQb2ludGVyRXhjZXB0aW9ufSBvdGhlcndpc2UuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqICAgICAgICAgICAgIEl0IHJhaXNlcyBhbiB7QGxpbmsgSU9FeGNlcHRpb259IGlmIGEgcHJvYmxlbSBhcHBlYXJzIHdoaWxlCi0JICogICAgICAgICAgICAgcGFyc2luZyBvbmUgb24gdGhlIGF0dHJpYnV0ZXMgZmlsZS4KLQkgKi8KLQlwcml2YXRlIEF0dHJpYnV0ZXNOb2RlIGdldEN1cnJlbnRBdHRyaWJ1dGVzTm9kZShPcGVyYXRpb25UeXBlIG9wVHlwZSwKLQkJCUBOdWxsYWJsZSBXb3JraW5nVHJlZUl0ZXJhdG9yIHdvcmtpbmdUcmVlSXRlcmF0b3IsCi0JCQlATnVsbGFibGUgRGlyQ2FjaGVJdGVyYXRvciBkaXJDYWNoZUl0ZXJhdG9yLAotCQkJQE51bGxhYmxlIENhbm9uaWNhbFRyZWVQYXJzZXIgb3RoZXIpCi0JCQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUF0dHJpYnV0ZXNOb2RlIGF0dHJpYnV0ZXNOb2RlID0gbnVsbDsKLQkJc3dpdGNoIChvcFR5cGUpIHsKLQkJY2FzZSBDSEVDS0lOX09QOgotCQkJaWYgKHdvcmtpbmdUcmVlSXRlcmF0b3IgIT0gbnVsbCkgewotCQkJCWF0dHJpYnV0ZXNOb2RlID0gd29ya2luZ1RyZWVJdGVyYXRvci5nZXRFbnRyeUF0dHJpYnV0ZXNOb2RlKCk7Ci0JCQl9Ci0JCQlpZiAoYXR0cmlidXRlc05vZGUgPT0gbnVsbCAmJiBkaXJDYWNoZUl0ZXJhdG9yICE9IG51bGwpIHsKLQkJCQlhdHRyaWJ1dGVzTm9kZSA9IGdldEF0dHJpYnV0ZXNOb2RlKGRpckNhY2hlSXRlcmF0b3IKLQkJCQkJCS5nZXRFbnRyeUF0dHJpYnV0ZXNOb2RlKGdldE9iamVjdFJlYWRlcigpKSwKLQkJCQkJCWF0dHJpYnV0ZXNOb2RlKTsKLQkJCX0KLQkJCWlmIChhdHRyaWJ1dGVzTm9kZSA9PSBudWxsICYmIG90aGVyICE9IG51bGwpIHsKLQkJCQlhdHRyaWJ1dGVzTm9kZSA9IGdldEF0dHJpYnV0ZXNOb2RlKAotCQkJCQkJb3RoZXIuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZShnZXRPYmplY3RSZWFkZXIoKSksCi0JCQkJCQlhdHRyaWJ1dGVzTm9kZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBDSEVDS09VVF9PUDoKLQkJCWlmIChvdGhlciAhPSBudWxsKSB7Ci0JCQkJYXR0cmlidXRlc05vZGUgPSBvdGhlcgotCQkJCQkJLmdldEVudHJ5QXR0cmlidXRlc05vZGUoZ2V0T2JqZWN0UmVhZGVyKCkpOwotCQkJfQotCQkJaWYgKGRpckNhY2hlSXRlcmF0b3IgIT0gbnVsbCkgewotCQkJCWF0dHJpYnV0ZXNOb2RlID0gZ2V0QXR0cmlidXRlc05vZGUoZGlyQ2FjaGVJdGVyYXRvcgotCQkJCQkJLmdldEVudHJ5QXR0cmlidXRlc05vZGUoZ2V0T2JqZWN0UmVhZGVyKCkpLAotCQkJCQkJYXR0cmlidXRlc05vZGUpOwotCQkJfQotCQkJaWYgKGF0dHJpYnV0ZXNOb2RlID09IG51bGwgJiYgd29ya2luZ1RyZWVJdGVyYXRvciAhPSBudWxsKSB7Ci0JCQkJYXR0cmlidXRlc05vZGUgPSBnZXRBdHRyaWJ1dGVzTm9kZSgKLQkJCQkJCXdvcmtpbmdUcmVlSXRlcmF0b3IuZ2V0RW50cnlBdHRyaWJ1dGVzTm9kZSgpLAotCQkJCQkJYXR0cmlidXRlc05vZGUpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotCQkJCQkiVGhlIG9ubHkgc3VwcG9ydGVkIG9wZXJhdGlvbiB0eXBlcyBhcmU6IiAvLyROT04tTkxTLTEkCi0JCQkJCQkJKyBPcGVyYXRpb25UeXBlLkNIRUNLSU5fT1AgKyAiLCIgLy8kTk9OLU5MUy0xJAotCQkJCQkJCSsgT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUCk7Ci0JCX0KLQotCQlyZXR1cm4gYXR0cmlidXRlc05vZGU7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgQXR0cmlidXRlc05vZGUgZ2V0QXR0cmlidXRlc05vZGUoQXR0cmlidXRlc05vZGUgdmFsdWUsCi0JCQlBdHRyaWJ1dGVzTm9kZSBkZWZhdWx0VmFsdWUpIHsKLQkJcmV0dXJuICh2YWx1ZSA9PSBudWxsKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOwotCX0KLQotCS8qKgogCSAqIEluc3BlY3QgY29uZmlnIGFuZCBhdHRyaWJ1dGVzIHRvIHJldHVybiBhIGZpbHRlcmNvbW1hbmQgYXBwbGljYWJsZSBmb3IKIAkgKiB0aGUgY3VycmVudCBwYXRoCiAJICoKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9IdHRwU3VwcG9ydC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0h0dHBTdXBwb3J0LmphdmEKaW5kZXggOGI0YWQwYS4uNmE0M2MwZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0h0dHBTdXBwb3J0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0h0dHBTdXBwb3J0LmphdmEKQEAgLTUyLDggKzUyLDE2IEBACiBpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSTDsKIGltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOworaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5TWFuYWdlbWVudEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuWDUwOUNlcnRpZmljYXRlOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwogCitpbXBvcnQgamF2YXgubmV0LnNzbC5Ib3N0bmFtZVZlcmlmaWVyOworaW1wb3J0IGphdmF4Lm5ldC5zc2wuU1NMU2Vzc2lvbjsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlRydXN0TWFuYWdlcjsKK2ltcG9ydCBqYXZheC5uZXQuc3NsLlg1MDlUcnVzdE1hbmFnZXI7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuSHR0cENvbm5lY3Rpb247CiAKQEAgLTYyLDYgKzcwLDE0IEBAIHB1YmxpYyBjbGFzcyBIdHRwU3VwcG9ydCB7CiAJLyoqIFRoZSB7QGNvZGUgR0VUfSBIVFRQIG1ldGhvZC4gKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfR0VUID0gIkdFVCI7IC8vJE5PTi1OTFMtMSQKIAorCS8qKiBUaGUge0Bjb2RlIEhFQUR9IEhUVFAgbWV0aG9kLgorCSAqIEBzaW5jZSA0LjMgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVRIT0RfSEVBRCA9ICJIRUFEIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqIFRoZSB7QGNvZGUgUE9TVH0gSFRUUCBtZXRob2QuCisJICogQHNpbmNlIDQuMyAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE1FVEhPRF9QVVQgPSAiUFVUIjsgLy8kTk9OLU5MUy0xJAorCiAJLyoqIFRoZSB7QGNvZGUgUE9TVH0gSFRUUCBtZXRob2QuICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTUVUSE9EX1BPU1QgPSAiUE9TVCI7IC8vJE5PTi1OTFMtMSQKIApAQCAtMjM0LDYgKzI1MCw1MCBAQCBwdWJsaWMgc3RhdGljIFByb3h5IHByb3h5Rm9yKGZpbmFsIFByb3h5U2VsZWN0b3IgcHJveHlTZWxlY3RvciwgZmluYWwgVVJMIHUpCiAJCX0KIAl9CiAKKwkvKioKKwkgKiBEaXNhYmxlIFNTTCBhbmQgaG9zdG5hbWUgdmVyaWZpY2F0aW9uIGZvciBnaXZlbiBIVFRQIGNvbm5lY3Rpb24KKwkgKgorCSAqIEBwYXJhbSBjb25uCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqIEBzaW5jZSA0LjMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVNzbFZlcmlmeShIdHRwQ29ubmVjdGlvbiBjb25uKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgVHJ1c3RNYW5hZ2VyW10gdHJ1c3RBbGxDZXJ0cyA9IG5ldyBUcnVzdE1hbmFnZXJbXSB7CisJCQkJbmV3IER1bW15WDUwOVRydXN0TWFuYWdlcigpIH07CisJCXRyeSB7CisJCQljb25uLmNvbmZpZ3VyZShudWxsLCB0cnVzdEFsbENlcnRzLCBudWxsKTsKKwkJCWNvbm4uc2V0SG9zdG5hbWVWZXJpZmllcihuZXcgRHVtbXlIb3N0bmFtZVZlcmlmaWVyKCkpOworCQl9IGNhdGNoIChLZXlNYW5hZ2VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7CisJCX0gY2F0Y2ggKE5vU3VjaEFsZ29yaXRobUV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtbXlYNTA5VHJ1c3RNYW5hZ2VyIGltcGxlbWVudHMgWDUwOVRydXN0TWFuYWdlciB7CisJCXB1YmxpYyBYNTA5Q2VydGlmaWNhdGVbXSBnZXRBY2NlcHRlZElzc3VlcnMoKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCisJCXB1YmxpYyB2b2lkIGNoZWNrQ2xpZW50VHJ1c3RlZChYNTA5Q2VydGlmaWNhdGVbXSBjZXJ0cywKKwkJCQlTdHJpbmcgYXV0aFR5cGUpIHsKKwkJCS8vIG5vIGNoZWNrCisJCX0KKworCQlwdWJsaWMgdm9pZCBjaGVja1NlcnZlclRydXN0ZWQoWDUwOUNlcnRpZmljYXRlW10gY2VydHMsCisJCQkJU3RyaW5nIGF1dGhUeXBlKSB7CisJCQkvLyBubyBjaGVjaworCQl9CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRHVtbXlIb3N0bmFtZVZlcmlmaWVyIGltcGxlbWVudHMgSG9zdG5hbWVWZXJpZmllciB7CisJCXB1YmxpYyBib29sZWFuIHZlcmlmeShTdHJpbmcgaG9zdG5hbWUsIFNTTFNlc3Npb24gc2Vzc2lvbikgeworCQkJLy8gYWx3YXlzIGFjY2VwdAorCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKIAlwcml2YXRlIEh0dHBTdXBwb3J0KCkgewogCQkvLyBVdGlsaXR5IGNsYXNzIG9ubHkuCiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL05CLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvTkIuamF2YQppbmRleCA4NWMxNjQ4Li44NTM2ZjFkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvTkIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvTkIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CiAgKiBhbmQgb3RoZXIgY29weXJpZ2h0IG93bmVycyBhcyBkb2N1bWVudGVkIGluIHRoZSBwcm9qZWN0J3MgSVAgbG9nLgogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCkBAIC02Niw2ICs2NiwzNyBAQCBwdWJsaWMgc3RhdGljIGludCBjb21wYXJlVUludDMyKGZpbmFsIGludCBhLCBmaW5hbCBpbnQgYikgewogCX0KIAogCS8qKgorCSAqIENvbXBhcmUgYSA2NCBiaXQgdW5zaWduZWQgaW50ZWdlciBzdG9yZWQgaW4gYSA2NCBiaXQgc2lnbmVkIGludGVnZXIuCisJICogPHA+CisJICogVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbiB1bnNpZ25lZCBjb21wYXJlIG9wZXJhdGlvbiwgZXZlbiB0aG91Z2ggSmF2YQorCSAqIGRvZXMgbm90IG5hdGl2ZWx5IHN1cHBvcnQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuIE5lZ2F0aXZlIG51bWJlcnMgYXJlCisJICogdHJlYXRlZCBhcyBsYXJnZXIgdGhhbiBwb3NpdGl2ZSBvbmVzLgorCSAqCisJICogQHBhcmFtIGEKKwkgKiAgICAgICAgICAgIHRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLgorCSAqIEBwYXJhbSBiCisJICogICAgICAgICAgICB0aGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUuCisJICogQHJldHVybiAmbHQ7IDAgaWYgYSAmbHQ7IGI7IDAgaWYgYSA9PSBiOyAmZ3Q7IDAgaWYgYSAmZ3Q7IGIuCisJICogQHNpbmNlIDQuMworCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IGNvbXBhcmVVSW50NjQoZmluYWwgbG9uZyBhLCBmaW5hbCBsb25nIGIpIHsKKwkJbG9uZyBjbXAgPSAoYSA+Pj4gMSkgLSAoYiA+Pj4gMSk7CisJCWlmIChjbXAgPiAwKSB7CisJCQlyZXR1cm4gMTsKKwkJfSBlbHNlIGlmIChjbXAgPCAwKSB7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJY21wID0gKChhICYgMSkgLSAoYiAmIDEpKTsKKwkJaWYgKGNtcCA+IDApIHsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGNtcCA8IDApIHsKKwkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoqCiAJICogQ29udmVydCBzZXF1ZW5jZSBvZiAyIGJ5dGVzIChuZXR3b3JrIGJ5dGUgb3JkZXIpIGludG8gdW5zaWduZWQgdmFsdWUuCiAJICoKIAkgKiBAcGFyYW0gaW50YnVmCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvUmF3UGFyc2VVdGlscy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1Jhd1BhcnNlVXRpbHMuamF2YQppbmRleCBmMjk1NWY3Li44Njc3N2I5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvUmF3UGFyc2VVdGlscy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9SYXdQYXJzZVV0aWxzLmphdmEKQEAgLTM2Niw2ICszNjYsNzIgQEAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgcGFyc2VIZXhJbnQzMihmaW5hbCBieXRlW10gYnMsIGZpbmFsIGludCBwKSB7CiAJfQogCiAJLyoqCisJICogUGFyc2UgMTYgY2hhcmFjdGVyIGJhc2UgMTYgKGhleCkgZm9ybWF0dGVkIHN0cmluZyB0byB1bnNpZ25lZCBsb25nLgorCSAqIDxwPgorCSAqIFRoZSBudW1iZXIgaXMgcmVhZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIsIHRoYXQgaXMsIG1vc3Qgc2lnbmlmaWNhbnQKKwkgKiBuaWJibGUgZmlyc3QuCisJICoKKwkgKiBAcGFyYW0gYnMKKwkgKiAgICAgICAgICAgIGJ1ZmZlciB0byBwYXJzZSBkaWdpdHMgZnJvbTsgcG9zaXRpb25zIHtAY29kZSBbcCwgcCsxNil9IHdpbGwKKwkgKiAgICAgICAgICAgIGJlIHBhcnNlZC4KKwkgKiBAcGFyYW0gcAorCSAqICAgICAgICAgICAgZmlyc3QgcG9zaXRpb24gd2l0aGluIHRoZSBidWZmZXIgdG8gcGFyc2UuCisJICogQHJldHVybiB0aGUgaW50ZWdlciB2YWx1ZS4KKwkgKiBAdGhyb3dzIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIHRoZSBzdHJpbmcgaXMgbm90IGhleCBmb3JtYXR0ZWQuCisJICogQHNpbmNlIDQuMworCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgbG9uZyBwYXJzZUhleEludDY0KGZpbmFsIGJ5dGVbXSBicywgZmluYWwgaW50IHApIHsKKwkJbG9uZyByID0gZGlnaXRzMTZbYnNbcF1dIDw8IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgMV1dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDJdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyAzXV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgNF1dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDVdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyA2XV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgN11dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDhdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyA5XV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgMTBdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyAxMV1dOworCQlyIDw8PSA0OworCisJCXIgfD0gZGlnaXRzMTZbYnNbcCArIDEyXV07CisJCXIgPDw9IDQ7CisKKwkJciB8PSBkaWdpdHMxNltic1twICsgMTNdXTsKKwkJciA8PD0gNDsKKworCQlyIHw9IGRpZ2l0czE2W2JzW3AgKyAxNF1dOworCisJCWZpbmFsIGludCBsYXN0ID0gZGlnaXRzMTZbYnNbcCArIDE1XV07CisJCWlmIChyIDwgMCB8fCBsYXN0IDwgMCkKKwkJCXRocm93IG5ldyBBcnJheUluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKKwkJcmV0dXJuIChyIDw8IDQpIHwgbGFzdDsKKwl9CisKKwkvKioKIAkgKiBQYXJzZSBhIHNpbmdsZSBoZXggZGlnaXQgdG8gaXRzIG51bWVyaWMgdmFsdWUgKDAtMTUpLgogCSAqCiAJICogQHBhcmFtIGRpZ2l0CmRpZmYgLS1naXQgYS9wb20ueG1sIGIvcG9tLnhtbAppbmRleCAwZGRhOGNmLi42YmIzMGZlIDEwMDY0NAotLS0gYS9wb20ueG1sCisrKyBiL3BvbS54bWwKQEAgLTIwOCw2ICsyMDgsNyBAQAogICAgIDxsb2c0ai12ZXJzaW9uPjEuMi4xNTwvbG9nNGotdmVyc2lvbj4KICAgICA8bWF2ZW4tamF2YWRvYy1wbHVnaW4tdmVyc2lvbj4yLjEwLjE8L21hdmVuLWphdmFkb2MtcGx1Z2luLXZlcnNpb24+CiAgICAgPHR5Y2hvLWV4dHJhcy12ZXJzaW9uPjAuMjMuMDwvdHljaG8tZXh0cmFzLXZlcnNpb24+CisgICAgPGdzb24tdmVyc2lvbj4yLjIuNDwvZ3Nvbi12ZXJzaW9uPgogCiAgICAgPCEtLSBQcm9wZXJ0aWVzIHRvIGVuYWJsZSBqYWNvY28gY29kZSBjb3ZlcmFnZSBhbmFseXNpcyAtLT4KICAgICA8c29uYXIuY29yZS5jb2RlQ292ZXJhZ2VQbHVnaW4+amFjb2NvPC9zb25hci5jb3JlLmNvZGVDb3ZlcmFnZVBsdWdpbj4KQEAgLTYzMiw2ICs2MzMsMTIgQEAKICAgICAgICAgICA8L2V4Y2x1c2lvbj4KICAgICAgICAgPC9leGNsdXNpb25zPgogICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgPGdyb3VwSWQ+Y29tLmdvb2dsZS5jb2RlLmdzb248L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmdzb248L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPiR7Z3Nvbi12ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgIDwvZGVwZW5kZW5jeT4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgPC9kZXBlbmRlbmN5TWFuYWdlbWVudD4KIApAQCAtNzY3LDYgKzc3NCw4IEBACiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyPC9tb2R1bGU+CiAgICAgPG1vZHVsZT5vcmcuZWNsaXBzZS5qZ2l0LnBnbTwvbW9kdWxlPgorICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5sZnM8L21vZHVsZT4KKyAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvbW9kdWxlPgogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5qdW5pdDwvbW9kdWxlPgogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwPC9tb2R1bGU+CiAKQEAgLTc3NCw2ICs3ODMsOCBAQAogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdDwvbW9kdWxlPgogICAgIDxtb2R1bGU+b3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3Q8L21vZHVsZT4KICAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3Q8L21vZHVsZT4KKyAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Q8L21vZHVsZT4KKyAgICA8bW9kdWxlPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0PC9tb2R1bGU+CiAgIDwvbW9kdWxlcz4KIAogPC9wcm9qZWN0Pgo=