ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGI1ZTAyNTkuLjY0NWQ5MjYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNCw0ICs0LDUgQEAKIC9yZWxlbmcvb3JnLmVjbGlwc2UueHBhbmQucmVsZW5nL3RhcmdldC5wbGF0Zm9ybS8KIC9kb2Mvb3JnLmVjbGlwc2UueHBhbmQuZG9jL2Jpbi8KIC9yZWxlbmcvb3JnLmVjbGlwc2UueHBhbmQucmVsZW5nL2FwaS1iYXNlbGluZS90YXJnZXQvCisvcmVsZW5nL2J1aWxkCiAqLm9yaWcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kZXYvb3JnLmVjbGlwc2UueHBhbmQuZGV2ZW52L1hwYW5kIFRQIExvY2FsLnRhcmdldCBiL2Rldi9vcmcuZWNsaXBzZS54cGFuZC5kZXZlbnYvWHBhbmQgVFAgTG9jYWwudGFyZ2V0CmluZGV4IDNmOWE5OTUuLjJiYjk1NzMgMTAwNjQ0Ci0tLSBhL2Rldi9vcmcuZWNsaXBzZS54cGFuZC5kZXZlbnYvWHBhbmQgVFAgTG9jYWwudGFyZ2V0CisrKyBiL2Rldi9vcmcuZWNsaXBzZS54cGFuZC5kZXZlbnYvWHBhbmQgVFAgTG9jYWwudGFyZ2V0CkBAIC0xLDggKzEsOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZSB2ZXJzaW9uPSIzLjgiPz4KIAotPHRhcmdldCBuYW1lPSJYcGFuZCBUUCBMb2NhbCIgc2VxdWVuY2VOdW1iZXI9IjkiPgorPHRhcmdldCBuYW1lPSJYcGFuZCBUUCBMb2NhbCIgc2VxdWVuY2VOdW1iZXI9IjEwIj4KIDxsb2NhdGlvbnM+Ci08bG9jYXRpb24gcGF0aD0iL1VzZXJzL3Rob21zL0RldmVsb3BtZW50L2NoZWNrb3V0L2VjbGlwc2Uvb3JnLmVjbGlwc2UueHBhbmQvcmVsZW5nL29yZy5lY2xpcHNlLnhwYW5kLnJlbGVuZy90YXJnZXQvdGFyZ2V0LnBsYXRmb3JtL3BsdWdpbnMiIHR5cGU9IkRpcmVjdG9yeSIvPgorPGxvY2F0aW9uIHBhdGg9IiR7dXNlcl9ob21lZGlyfS9odWRzb25idWlsZC94cGFuZC1idWlsZC90YXJnZXQucGxhdGZvcm0vcGx1Z2lucyIgdHlwZT0iRGlyZWN0b3J5Ii8+CiA8L2xvY2F0aW9ucz4KIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvZGV2L29yZy5lY2xpcHNlLnhwYW5kLmRldmVudi9YcGFuZF9JbnN0YWxsX0lERV9GZWF0dXJlcy5sYXVuY2ggYi9kZXYvb3JnLmVjbGlwc2UueHBhbmQuZGV2ZW52L1hwYW5kX0luc3RhbGxfSURFX0ZlYXR1cmVzLmxhdW5jaAppbmRleCA1NTVhY2VlLi40MzZkMDY3IDEwMDY0NAotLS0gYS9kZXYvb3JnLmVjbGlwc2UueHBhbmQuZGV2ZW52L1hwYW5kX0luc3RhbGxfSURFX0ZlYXR1cmVzLmxhdW5jaAorKysgYi9kZXYvb3JnLmVjbGlwc2UueHBhbmQuZGV2ZW52L1hwYW5kX0luc3RhbGxfSURFX0ZlYXR1cmVzLmxhdW5jaApAQCAtMTMsNyArMTMsNyBAQAogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImNvbmZpZ0xvY2F0aW9uIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jfS8ubWV0YWRhdGEvLnBsdWdpbnMvb3JnLmVjbGlwc2UucGRlLmNvcmUvWHBhbmRfSW5zdGFsbF9JREVfRmVhdHVyZXMiLz4KIDxib29sZWFuQXR0cmlidXRlIGtleT0iZGVmYXVsdCIgdmFsdWU9InRydWUiLz4KIDxib29sZWFuQXR0cmlidXRlIGtleT0iaW5jbHVkZU9wdGlvbmFsIiB2YWx1ZT0idHJ1ZSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImxvY2F0aW9uIiB2YWx1ZT0iJHt3b3Jrc3BhY2VfbG9jOm9yZy5lY2xpcHNlLnhwYW5kLmRldmVudn0vLnJ1bnRpbWUtcDIiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJsb2NhdGlvbiIgdmFsdWU9IiR7d29ya3NwYWNlX2xvY30vLm1ldGFkYXRhL3J1bnRpbWUtcDIiLz4KIDxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5BVFRSX1VTRV9TVEFSVF9PTl9GSVJTVF9USFJFQUQiIHZhbHVlPSJ0cnVlIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KYXZhU0UtMS42Ii8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5QUk9HUkFNX0FSR1VNRU5UUyIgdmFsdWU9Ii1vcyAke3RhcmdldC5vc30gLXdzICR7dGFyZ2V0LndzfSAtYXJjaCAke3RhcmdldC5hcmNofSAtbmwgJHt0YXJnZXQubmx9IC1jb25zb2xlTG9nJiMxMDstZGVzdGluYXRpb24gJHtlY2xpcHNlX2hvbWV9JiMxMDstaW5zdGFsbElVIEFueUVkaXRUb29scy5mZWF0dXJlLmdyb3VwLGNvbS5jb2RlYWZmaW5lLmFyY2hpdmUuZmVhdHVyZS5mZWF0dXJlLmdyb3VwLG9yZy5lY2xpcHNlLmIzLmFnZ3JlZ2F0b3IuZWRpdG9yLmZlYXR1cmUuZmVhdHVyZS5ncm91cCxvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5jb3JlLmZlYXR1cmUuZmVhdHVyZS5ncm91cCxvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5tYXZlbi5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAsb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIucGRlLmZlYXR1cmUuZmVhdHVyZS5ncm91cCxvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5wc2YuZmVhdHVyZS5mZWF0dXJlLmdyb3VwLGNvbS5tb3VudGFpbm1pbmRzLmVjbGVtbWEuZmVhdHVyZS5mZWF0dXJlLmdyb3VwLG9yZy5lY2xpcHNlLnJlbGVuZy50b29scy5mZWF0dXJlLmdyb3VwLG9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuZWUuajJzZTE1LG9yZy5lY2xpcHNlLnBkZS5hcGkudG9vbHMuZWUuamF2YXNlMTYsb3JnLmVjbGlwc2UucGRlLmFwaS50b29scy5lZS5qYXZhc2UxNyxvcmcuZWNsaXBzZS5tMmUuZmVhdHVyZS5mZWF0dXJlLmdyb3VwLG9yZy5lY2xpcHNlLmVtZi5td2UyLmxhbmd1YWdlLnNkay5mZWF0dXJlLmdyb3VwLG9yZy5lY2xpcHNlLmVtZi5td2UyLnJ1bnRpbWUuc2RrLmZlYXR1cmUuZ3JvdXAsb3JnLmVjbGlwc2UuZW1mLm13ZS5zZGsuZmVhdHVyZS5ncm91cCxvcmcuZWNsaXBzZS5teWx5bi5idWlsZHMuc2RrLmZlYXR1cmUuZ3JvdXAsb3JnLmVjbGlwc2UubXlseW4uaWRlLnVpLG9yZy5lY2xpcHNlLm15bHluLmJ1Z3ppbGxhX2ZlYXR1cmUuZmVhdHVyZS5ncm91cCxvcmcuZWNsaXBzZS54dGV4dC5zZGsuZmVhdHVyZS5ncm91cCxvcmcuZWNsaXBzZS51bWwyLmZlYXR1cmUuZ3JvdXAsbmFtZS5uamJhcnRsZXR0LmVjbGlwc2UubWFjYmFkZ2UuZmVhdHVyZS5mZWF0dXJlLmdyb3VwLGNvbS5nb29nbGUuZWNsaXBzZS5tZWNoYW5pYy5mZWF0dXJlLmdyb3VwLG9yZy54cGVjdC5zZGsuZmVhdHVyZS5ncm91cCxkZS5pdGVtaXMueHRleHQuYW50bHIuc2RrLmZlYXR1cmUuZ3JvdXAmIzEwOy1yIGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9rZXBsZXIsaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvdXBkYXRlcy80LjMsaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL2J1Y2ttaW5zdGVyL3VwZGF0ZXMtNC4yLGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9lbWZ0L2IzL3VwZGF0ZXMtNC4zLGh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9teWx5bi9yZWxlYXNlcy8zLjgsaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL3RtZi94dGV4dC91cGRhdGVzL2NvbXBvc2l0ZS9yZWxlYXNlcy8saHR0cDovL2FuZHJlaS5nbXhob21lLmRlL2VjbGlwc2UvLGh0dHA6Ly9iaXRzdHJpbmdzLmdpdGh1Yi5jb20vbTJlLWNvbm5lY3RvcnMtcDIvcmVsZWFzZXMsaHR0cDovL2Rvd25sb2FkLml0ZW1pcy5jb20vdXBkYXRlcy8saHR0cDovL21hY2JhZGdlLXVwZGF0ZXMuczMuYW1hem9uYXdzLmNvbS8saHR0cDovL2phZGNsaXBzZS5zb3VyY2Vmb3JnZS5uZXQvdXBkYXRlLGh0dHA6Ly91cGRhdGUuZWNsZW1tYS5vcmcvLGh0dHA6Ly9yaGVycm1hbm4uZ2l0aHViLmlvL2NvbS5jb2RlYWZmaW5lLmFyY2hpdmUvcmVwb3NpdG9yeSxodHRwOi8vd29ya3NwYWNlbWVjaGFuaWMuZWNsaXBzZWxhYnMub3JnLmNvZGVzcG90LmNvbS9naXQudXBkYXRlL21lY2hhbmljLGh0dHA6Ly93d3cueHBlY3QtdGVzdHMub3JnL3VwZGF0ZXNpdGUvbmlnaHRseS8saHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VnaXQvdXBkYXRlcyIvPgpkaWZmIC0tZ2l0IGEvZG9jL29yZy5lY2xpcHNlLnhwYW5kLmRvYy1mZWF0dXJlLy5naXRpZ25vcmUgYi9kb2Mvb3JnLmVjbGlwc2UueHBhbmQuZG9jLWZlYXR1cmUvLmdpdGlnbm9yZQppbmRleCAwYjUzYmFmLi5mODIyOGQ2IDEwMDY0NAotLS0gYS9kb2Mvb3JnLmVjbGlwc2UueHBhbmQuZG9jLWZlYXR1cmUvLmdpdGlnbm9yZQorKysgYi9kb2Mvb3JnLmVjbGlwc2UueHBhbmQuZG9jLWZlYXR1cmUvLmdpdGlnbm9yZQpAQCAtMSwyICsxLDIgQEAKLWZlYXR1cmVzDQotcGx1Z2lucw0KK2ZlYXR1cmVzCitwbHVnaW5zCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kLnVpL3NyYy9vcmcvZWNsaXBzZS94cGFuZC91aS9lZGl0b3IvY29kZWFzc2lzdC9YcGFuZENvbnRlbnRBc3Npc3RQcm9jZXNzb3IuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQudWkvc3JjL29yZy9lY2xpcHNlL3hwYW5kL3VpL2VkaXRvci9jb2RlYXNzaXN0L1hwYW5kQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCmluZGV4IGM0MzkxMjAuLjFjYjViOGMgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQudWkvc3JjL29yZy9lY2xpcHNlL3hwYW5kL3VpL2VkaXRvci9jb2RlYXNzaXN0L1hwYW5kQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQudWkvc3JjL29yZy9lY2xpcHNlL3hwYW5kL3VpL2VkaXRvci9jb2RlYXNzaXN0L1hwYW5kQ29udGVudEFzc2lzdFByb2Nlc3Nvci5qYXZhCkBAIC01MCwyNyArNTAsMzAgQEAKICAqIENvbXB1dGVzIHRoZSBDb2RlIENvbXBsZXRpb24gUHJvcG9zYWxzIHdoZW4gQ1RSTCtTUEFDRSBpcyBwcmVzc2VkLgogICogCiAgKiBAYXV0aG9yIFN2ZW4gRWZmdGluZ2UgKGh0dHA6Ly93d3cuZWZmdGluZ2UuZGUpCi0gKiBAc2luY2UgNC4wCiAgKi8KLXB1YmxpYyBjbGFzcyBYcGFuZENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgZXh0ZW5kcyBBYnN0cmFjdEV4dFhwdENvbnRlbnRBc3Npc3RQcm9jZXNzb3IgeworcHVibGljIGNsYXNzIFhwYW5kQ29udGVudEFzc2lzdFByb2Nlc3NvciBleHRlbmRzCisJCUFic3RyYWN0RXh0WHB0Q29udGVudEFzc2lzdFByb2Nlc3NvciB7CiAKIAlwdWJsaWMgWHBhbmRDb250ZW50QXNzaXN0UHJvY2Vzc29yKGZpbmFsIElFZGl0b3JQYXJ0IGVkaXRvcikgewogCQlzdXBlcihlZGl0b3IpOwogCX0KIAogCUBPdmVycmlkZQotCXByb3RlY3RlZCBJQ29tcGxldGlvblByb3Bvc2FsW10gaW50ZXJuYWxDb21wdXRlQ29tcGxldGlvblByb3Bvc2FscyhmaW5hbCBJVGV4dFZpZXdlciB2aWV3ZXIsCi0JCQlmaW5hbCBpbnQgZG9jdW1lbnRPZmZzZXQpIHsKKwlwcm90ZWN0ZWQgSUNvbXBsZXRpb25Qcm9wb3NhbFtdIGludGVybmFsQ29tcHV0ZUNvbXBsZXRpb25Qcm9wb3NhbHMoCisJCQlmaW5hbCBJVGV4dFZpZXdlciB2aWV3ZXIsIGZpbmFsIGludCBkb2N1bWVudE9mZnNldCkgewogCQl0cnkgewotCQkJZmluYWwgU3RyaW5nIHR4dCA9IHZpZXdlci5nZXREb2N1bWVudCgpLmdldCgpLnN1YnN0cmluZygwLCBkb2N1bWVudE9mZnNldCk7CisJCQlmaW5hbCBTdHJpbmcgdHh0ID0gdmlld2VyLmdldERvY3VtZW50KCkuZ2V0KCkKKwkJCQkJLnN1YnN0cmluZygwLCBkb2N1bWVudE9mZnNldCk7CiAJCQlYcGFuZERlZmluaXRpb25bXSBkZWZzID0gbmV3IFhwYW5kRGVmaW5pdGlvblswXTsKIAkJCWZpbmFsIElGaWxlIGZpbGUgPSBnZXRGaWxlKCk7CiAKLQkJCWZpbmFsIElYcGFuZFJlc291cmNlIHRwbCA9IChJWHBhbmRSZXNvdXJjZSkgQWN0aXZhdG9yLmdldEV4dFhwdE1vZGVsTWFuYWdlcigpLmZpbmRFeHRYcHRSZXNvdXJjZShmaWxlKTsKKwkJCWZpbmFsIElYcGFuZFJlc291cmNlIHRwbCA9IChJWHBhbmRSZXNvdXJjZSkgQWN0aXZhdG9yCisJCQkJCS5nZXRFeHRYcHRNb2RlbE1hbmFnZXIoKS5maW5kRXh0WHB0UmVzb3VyY2UoZmlsZSk7CiAJCQlpZiAodHBsICE9IG51bGwpIHsKIAkJCQlkZWZzID0gdHBsLmdldERlZmluaXRpb25zKCk7CiAJCQl9Ci0JCQlYcGFuZEV4ZWN1dGlvbkNvbnRleHQgY3R4ID0gKFhwYW5kRXhlY3V0aW9uQ29udGV4dCkgQWN0aXZhdG9yLmdldEV4ZWN1dGlvbkNvbnRleHQoZ2V0SmF2YVByb2plY3QoKSk7CisJCQlYcGFuZEV4ZWN1dGlvbkNvbnRleHQgY3R4ID0gKFhwYW5kRXhlY3V0aW9uQ29udGV4dCkgQWN0aXZhdG9yCisJCQkJCS5nZXRFeGVjdXRpb25Db250ZXh0KGdldEphdmFQcm9qZWN0KCkpOwogCQkJZmluYWwgUGFydGl0aW9uIHAgPSBGYXN0QW5hbHl6ZXIuY29tcHV0ZVBhcnRpdGlvbih0eHQpOwogCiAJCQkvLyBTaG9ydGN1dDogTm8gcHJvcG9zYWxzIHdpdGhpbiBjb21tZW50cwpAQCAtODMsNTAgKzg2LDY4IEBACiAJCQl9CiAKIAkJCUxpc3Q8T2JqZWN0PiBwcm9wb3NhbHMgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKLQkJCWZpbmFsIFByb3Bvc2FsRmFjdG9yeSBmID0gbmV3IFhwYW5kUHJvcG9zYWxGYWN0b3J5RWNsaXBzZUltcGwoZG9jdW1lbnRPZmZzZXQpOworCQkJZmluYWwgUHJvcG9zYWxGYWN0b3J5IGYgPSBuZXcgWHBhbmRQcm9wb3NhbEZhY3RvcnlFY2xpcHNlSW1wbCgKKwkJCQkJZG9jdW1lbnRPZmZzZXQpOwogCiAJCQlpZiAocCA9PSBQYXJ0aXRpb24uVFlQRV9ERUNMQVJBVElPTikgewogCQkJCWN0eCA9IEZhc3RBbmFseXplci5jb21wdXRlRXhlY3V0aW9uQ29udGV4dCh0eHQsIGN0eCwgZGVmcyk7Ci0JCQkJcHJvcG9zYWxzID0gbmV3IFR5cGVQcm9wb3NhbENvbXB1dGVyKCkuY29tcHV0ZVByb3Bvc2Fscyh0eHQsIGN0eCwgZik7CisJCQkJcHJvcG9zYWxzID0gbmV3IFR5cGVQcm9wb3NhbENvbXB1dGVyKCkuY29tcHV0ZVByb3Bvc2Fscyh0eHQsCisJCQkJCQljdHgsIGYpOwogCQkJfSBlbHNlIGlmIChwID09IFBhcnRpdGlvbi5FWFBSRVNTSU9OKSB7CiAJCQkJY3R4ID0gRmFzdEFuYWx5emVyLmNvbXB1dGVFeGVjdXRpb25Db250ZXh0KHR4dCwgY3R4LCBkZWZzKTsKIAkJCQkvLyB0aGUgY3VycmVudCBleHByZXNzaW9uIGJlZ2lucyBhdCB0aGUgbGFzdCBvcGVuaW5nIFhwYW5kCiAJCQkJLy8gYnJhY2tldAotCQkJCWZpbmFsIFN0cmluZyBleHByZXNzaW9uID0gdHh0LnN1YnN0cmluZyh0eHQubGFzdEluZGV4T2YoWHBhbmRUb2tlbnMuTFRfQ0hBUikpOwotCQkJCXByb3Bvc2Fscy5hZGRBbGwobmV3IEV4cHJlc3Npb25Qcm9wb3NhbENvbXB1dGVyKCkuY29tcHV0ZVByb3Bvc2FscyhleHByZXNzaW9uLCBjdHgsIGYpKTsKLQkJCQlwcm9wb3NhbHMuYWRkQWxsKG5ldyBLZXl3b3JkUHJvcG9zYWxDb21wdXRlcigpLmNvbXB1dGVQcm9wb3NhbHModHh0LCBjdHgsIGYpKTsKKwkJCQlmaW5hbCBTdHJpbmcgZXhwcmVzc2lvbiA9IHR4dC5zdWJzdHJpbmcodHh0CisJCQkJCQkubGFzdEluZGV4T2YoWHBhbmRUb2tlbnMuTFRfQ0hBUikpOworCQkJCXByb3Bvc2Fscy5hZGRBbGwobmV3IEV4cHJlc3Npb25Qcm9wb3NhbENvbXB1dGVyKCkKKwkJCQkJCS5jb21wdXRlUHJvcG9zYWxzKGV4cHJlc3Npb24sIGN0eCwgZikpOworCQkJCXByb3Bvc2Fscy5hZGRBbGwobmV3IEtleXdvcmRQcm9wb3NhbENvbXB1dGVyKCkKKwkJCQkJCS5jb21wdXRlUHJvcG9zYWxzKHR4dCwgY3R4LCBmKSk7CiAJCQl9IGVsc2UgaWYgKHAgPT0gWHBhbmRQYXJ0aXRpb24uRVhQQU5EX1NUQVRFTUVOVCkgewogCQkJCWN0eCA9IEZhc3RBbmFseXplci5jb21wdXRlRXhlY3V0aW9uQ29udGV4dCh0eHQsIGN0eCwgZGVmcyk7Ci0JCQkJcHJvcG9zYWxzLmFkZEFsbChuZXcgRXhwYW5kUHJvcG9zYWxDb21wdXRlcigpLmNvbXB1dGVQcm9wb3NhbHModHh0LCBjdHgsIGYpKTsKLQkJCQlwcm9wb3NhbHMuYWRkKG5ldyBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuQ29tcGxldGlvblByb3Bvc2FsKFhwYW5kVG9rZW5zLkxUCi0JCQkJCQkrIFhwYW5kVG9rZW5zLlJULCBkb2N1bWVudE9mZnNldCwgMCwgMSkpOworCQkJCXByb3Bvc2Fscy5hZGRBbGwobmV3IEV4cGFuZFByb3Bvc2FsQ29tcHV0ZXIoKS5jb21wdXRlUHJvcG9zYWxzKAorCQkJCQkJdHh0LCBjdHgsIGYpKTsKKwkJCQlwcm9wb3NhbHMKKwkJCQkJCS5hZGQobmV3IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5Db21wbGV0aW9uUHJvcG9zYWwoCisJCQkJCQkJCVhwYW5kVG9rZW5zLkxUICsgWHBhbmRUb2tlbnMuUlQsCisJCQkJCQkJCWRvY3VtZW50T2Zmc2V0LCAwLCAxKSk7CiAJCQl9IGVsc2UgaWYgKHAgPT0gUGFydGl0aW9uLk5BTUVTUEFDRV9JTVBPUlQpIHsKIAkJCQljdHggPSBGYXN0QW5hbHl6ZXIuY29tcHV0ZUV4ZWN1dGlvbkNvbnRleHQodHh0LCBjdHgsIGRlZnMpOwotCQkJCXByb3Bvc2Fscy5hZGRBbGwobmV3IE5hbWVzcGFjZVByb3Bvc2FsQ29tcHV0ZXIoKS5jb21wdXRlUHJvcG9zYWxzKHR4dCwgY3R4LCBmKSk7CisJCQkJcHJvcG9zYWxzLmFkZEFsbChuZXcgTmFtZXNwYWNlUHJvcG9zYWxDb21wdXRlcigpCisJCQkJCQkuY29tcHV0ZVByb3Bvc2Fscyh0eHQsIGN0eCwgZikpOwogCQkJfSBlbHNlIGlmIChwID09IFBhcnRpdGlvbi5FWFRFTlNJT05fSU1QT1JUKSB7Ci0JCQkJSVh0ZW5kWHBhbmRQcm9qZWN0IHByb2plY3QgPSBBY3RpdmF0b3IuZ2V0RXh0WHB0TW9kZWxNYW5hZ2VyKCkuZmluZFByb2plY3QoZ2V0RmlsZSgpKTsKLQkJCQlJWHRlbmRYcGFuZFJlc291cmNlW10gcmVzb3VyY2VzID0gcHJvamVjdC5nZXRBbGxSZWdpc3RlcmVkUmVzb3VyY2VzKCk7CisJCQkJSVh0ZW5kWHBhbmRQcm9qZWN0IHByb2plY3QgPSBBY3RpdmF0b3IuZ2V0RXh0WHB0TW9kZWxNYW5hZ2VyKCkKKwkJCQkJCS5maW5kUHJvamVjdChnZXRGaWxlKCkpOworCQkJCUlYdGVuZFhwYW5kUmVzb3VyY2VbXSByZXNvdXJjZXMgPSBwcm9qZWN0CisJCQkJCQkuZ2V0QWxsUmVnaXN0ZXJlZFJlc291cmNlcygpOwogCQkJCVNldDxTdHJpbmc+IGV4dGVuc2lvbk5hbWVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwogCQkJCWZvciAoSVh0ZW5kWHBhbmRSZXNvdXJjZSByZXNvdXJjZSA6IHJlc291cmNlcykgewogCQkJCQlpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBYdGVuZEZpbGUpIHsKIAkJCQkJCWV4dGVuc2lvbk5hbWVzLmFkZChyZXNvdXJjZS5nZXRGdWxseVF1YWxpZmllZE5hbWUoKSk7CiAJCQkJCX0KIAkJCQl9Ci0JCQkJTGlzdDxPYmplY3Q+IGV4dGVuc2lvblByb3Bvc2FscyA9IG5ldyBFeHRlbnNpb25JbXBvcnRQcm9wb3NhbENvbXB1dGVyKCkuY29tcHV0ZVByb3Bvc2Fscyh0eHQsIGN0eCwgZiwgZXh0ZW5zaW9uTmFtZXMpOworCQkJCUxpc3Q8T2JqZWN0PiBleHRlbnNpb25Qcm9wb3NhbHMgPSBuZXcgRXh0ZW5zaW9uSW1wb3J0UHJvcG9zYWxDb21wdXRlcigpCisJCQkJCQkuY29tcHV0ZVByb3Bvc2Fscyh0eHQsIGN0eCwgZiwgZXh0ZW5zaW9uTmFtZXMpOwogCQkJCXByb3Bvc2Fscy5hZGRBbGwoZXh0ZW5zaW9uUHJvcG9zYWxzKTsKIAkJCX0gZWxzZSBpZiAocCA9PSBQYXJ0aXRpb24uREVGQVVMVCkgewogCQkJCWN0eCA9IEZhc3RBbmFseXplci5jb21wdXRlRXhlY3V0aW9uQ29udGV4dCh0eHQsIGN0eCwgZGVmcyk7Ci0JCQkJcHJvcG9zYWxzLmFkZEFsbChuZXcgU3RhdGVtZW50UHJvcG9zYWxDb21wdXRlcigpLmNvbXB1dGVQcm9wb3NhbHModHh0LCBjdHgsIGYpKTsKLQkJCQlwcm9wb3NhbHMuYWRkKG5ldyBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuQ29tcGxldGlvblByb3Bvc2FsKFhwYW5kVG9rZW5zLkxUCi0JCQkJCQkrIFhwYW5kVG9rZW5zLlJULCBkb2N1bWVudE9mZnNldCwgMCwgMSkpOworCQkJCXByb3Bvc2Fscy5hZGRBbGwobmV3IFN0YXRlbWVudFByb3Bvc2FsQ29tcHV0ZXIoKQorCQkJCQkJLmNvbXB1dGVQcm9wb3NhbHModHh0LCBjdHgsIGYpKTsKKwkJCQlwcm9wb3NhbHMKKwkJCQkJCS5hZGQobmV3IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5Db21wbGV0aW9uUHJvcG9zYWwoCisJCQkJCQkJCVhwYW5kVG9rZW5zLkxUICsgWHBhbmRUb2tlbnMuUlQsCisJCQkJCQkJCWRvY3VtZW50T2Zmc2V0LCAwLCAxKSk7CiAJCQl9Ci0JCQkvLyBUT0RPIHJlZmFjdG9yIGNvZGUgdGhhdCBtZXRob2RzIHJldHVybiBMaXN0PElDb21wbGV0aW9uUHJvcG9zYWxzPiBhbmQgbm90IExpc3Q8T2JqZWN0PgotCQkJTGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBfcHJvcG9zYWxzID0gbmV3IEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPihwcm9wb3NhbHMuc2l6ZSgpKTsKKwkJCS8vIFRPRE8gcmVmYWN0b3IgY29kZSB0aGF0IG1ldGhvZHMgcmV0dXJuIExpc3Q8SUNvbXBsZXRpb25Qcm9wb3NhbHM+CisJCQkvLyBhbmQgbm90IExpc3Q8T2JqZWN0PgorCQkJTGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPiBfcHJvcG9zYWxzID0gbmV3IEFycmF5TGlzdDxJQ29tcGxldGlvblByb3Bvc2FsPigKKwkJCQkJcHJvcG9zYWxzLnNpemUoKSk7CiAJCQlmb3IgKE9iamVjdCBvIDogcHJvcG9zYWxzKSB7CiAJCQkJX3Byb3Bvc2Fscy5hZGQoKElDb21wbGV0aW9uUHJvcG9zYWwpIG8pOwogCQkJfQogCQkJQ29sbGVjdGlvbnMuc29ydChfcHJvcG9zYWxzLCBuZXcgUHJvcG9zYWxDb21wYXJhdG9yKCkpOwotCQkJcmV0dXJuIF9wcm9wb3NhbHMudG9BcnJheShuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwcm9wb3NhbHMuc2l6ZSgpXSk7CisJCQlyZXR1cm4gX3Byb3Bvc2FscworCQkJCQkudG9BcnJheShuZXcgSUNvbXBsZXRpb25Qcm9wb3NhbFtwcm9wb3NhbHMuc2l6ZSgpXSk7CiAJCX0gY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7CiAJCQlYcGFuZExvZy5sb2dFcnJvcihlKTsKIAkJfQpAQCAtMTM2LDcgKzE1Nyw4IEBACiAJLyoqCiAJICoge0Bpbmhlcml0RG9jfQogCSAqLwotCXB1YmxpYyBJQ29udGV4dEluZm9ybWF0aW9uW10gY29tcHV0ZUNvbnRleHRJbmZvcm1hdGlvbihmaW5hbCBJVGV4dFZpZXdlciB2aWV3ZXIsIGZpbmFsIGludCBkb2N1bWVudE9mZnNldCkgeworCXB1YmxpYyBJQ29udGV4dEluZm9ybWF0aW9uW10gY29tcHV0ZUNvbnRleHRJbmZvcm1hdGlvbigKKwkJCWZpbmFsIElUZXh0Vmlld2VyIHZpZXdlciwgZmluYWwgaW50IGRvY3VtZW50T2Zmc2V0KSB7CiAJCXJldHVybiBudWxsOwogCX0KIApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UvaW50ZXJuYWwveHBhbmQyL1hwYW5kVG9rZW5zLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS9pbnRlcm5hbC94cGFuZDIvWHBhbmRUb2tlbnMuamF2YQppbmRleCA0OTRmZWY0Li40YTkxMzFiIDEwMDc1NQotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS9pbnRlcm5hbC94cGFuZDIvWHBhbmRUb2tlbnMuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS9pbnRlcm5hbC94cGFuZDIvWHBhbmRUb2tlbnMuamF2YQpAQCAtMTMsNyArMTMsNiBAQAogCiAvKioKICAqIENvbnN0YW50cyBpbnRlcmZhY2UgY29udGFpbmluZyBhbGwgWHBhbmQga2V5d29yZHMuCi0gKiBAc2luY2UgMS4wLjAgTTUKICAqLwogcHVibGljIGludGVyZmFjZSBYcGFuZFRva2VucyB7CiAKQEAgLTEwNiw5ICsxMDUsOSBAQAogCVN0cmluZyBBUk9VTkQgPSAiQVJPVU5EIjsKIAogCVN0cmluZ1tdIEFMTEtFWVdPUkRTID0gbmV3IFN0cmluZ1tdIHsgQVJPVU5ELCBBUywgQ0FTRSwgQ0VORCwgQ1NUQVJULAotCQkJREVGQVVMVCwgREVGSU5FLCBESVNBQkxFLCBFTFNFLCBFTFNFSUYsIAotCQkJRU5EQVJPVU5ELCBFTkRERUZJTkUsIEVOREZJTEUsIEVOREZPUkVBQ0gsIEVORElGLCBFTkRMRVQsIEVORFBST1RFQ1QsIEVORFJFTSwgRVJST1IsIEVYUEFORCwgRVhURU5TSU9OLCAKLQkJCUZBTFNFX0NPTlNULCBGSUxFLCBGT1IsIEZPUkVBQ0gsIElELCBJRiwgSU1QT1JULCBJVEVSQVRPUiwgTEVULCBMRVRfRVhQUiwgTkVXLCBOVUxMX0NPTlNULCBPTkZJTEVDTE9TRSwgCisJCQlERUZBVUxULCBERUZJTkUsIERJU0FCTEUsIEVMU0UsIEVMU0VJRiwKKwkJCUVOREFST1VORCwgRU5EREVGSU5FLCBFTkRGSUxFLCBFTkRGT1JFQUNILCBFTkRJRiwgRU5ETEVULCBFTkRQUk9URUNULCBFTkRSRU0sIEVSUk9SLCBFWFBBTkQsIEVYVEVOU0lPTiwKKwkJCUZBTFNFX0NPTlNULCBGSUxFLCBGT1IsIEZPUkVBQ0gsIElELCBJRiwgSU1QT1JULCBJVEVSQVRPUiwgTEVULCBMRVRfRVhQUiwgTkVXLCBOVUxMX0NPTlNULCBPTkZJTEVDTE9TRSwKIAkJCVBST1RFQ1QsIFJFTSwgU0VQQVJBVE9SLCBTV0lUQ0gsIFRISVMsIFRSVUVfQ09OU1QKIAkJCX07CiAKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQvc3JjL29yZy9lY2xpcHNlL2ludGVybmFsL3hwYW5kMi9hc3QvRXh0ZW5zaW9uSW1wb3J0RGVjbGFyYXRpb24uamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQvc3JjL29yZy9lY2xpcHNlL2ludGVybmFsL3hwYW5kMi9hc3QvRXh0ZW5zaW9uSW1wb3J0RGVjbGFyYXRpb24uamF2YQppbmRleCA4NDlmMzEyLi5jZmI5YjNjIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS9pbnRlcm5hbC94cGFuZDIvYXN0L0V4dGVuc2lvbkltcG9ydERlY2xhcmF0aW9uLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UvaW50ZXJuYWwveHBhbmQyL2FzdC9FeHRlbnNpb25JbXBvcnREZWNsYXJhdGlvbi5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiAKIC8qKgogICogQGF1dGhvciBLYXJzdGVuIFRob21zIC0gSW5pdGlhbCBjb250cmlidXRpb24gYW5kIEFQSQotICogQHNpbmNlIDEuMAogICovCiBwdWJsaWMgY2xhc3MgRXh0ZW5zaW9uSW1wb3J0RGVjbGFyYXRpb24gZXh0ZW5kcyBJbXBvcnREZWNsYXJhdGlvbiB7CiAJcHVibGljIEV4dGVuc2lvbkltcG9ydERlY2xhcmF0aW9uKGZpbmFsIElkZW50aWZpZXIgaW1wb3J0U3RyaW5nKSB7CmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS9pbnRlcm5hbC94cGFuZDIvY29kZWFzc2lzdC9LZXl3b3JkUHJvcG9zYWxDb21wdXRlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UvaW50ZXJuYWwveHBhbmQyL2NvZGVhc3Npc3QvS2V5d29yZFByb3Bvc2FsQ29tcHV0ZXIuamF2YQppbmRleCBjNTc4YWI4Li4yZjY2NGU0IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS9pbnRlcm5hbC94cGFuZDIvY29kZWFzc2lzdC9LZXl3b3JkUHJvcG9zYWxDb21wdXRlci5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQvc3JjL29yZy9lY2xpcHNlL2ludGVybmFsL3hwYW5kMi9jb2RlYXNzaXN0L0tleXdvcmRQcm9wb3NhbENvbXB1dGVyLmphdmEKQEAgLTIyLDggKzIyLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS54dGVuZC5leHByZXNzaW9uLkV4ZWN1dGlvbkNvbnRleHQ7CiAKIC8qKgotICogUmVzcG9uc2libGUgZm9yIHByb3Bvc2FscyBvZiBYcGFuZCBrZXl3b3Jkcy4KLSAqIEBzaW5jZSA0LjAKKyAqIFJlc3BvbnNpYmxlIGZvciBwcm9wb3NhbHMgb2YgWHBhbmQga2V5d29yZHMuIAogICovCiBwdWJsaWMgY2xhc3MgS2V5d29yZFByb3Bvc2FsQ29tcHV0ZXIgaW1wbGVtZW50cyBQcm9wb3NhbENvbXB1dGVyIHsKIApkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9JbnNlcnRpb25Qb2ludFN1cHBvcnQuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQvc3JjL29yZy9lY2xpcHNlL3hwYW5kMi9vdXRwdXQvSW5zZXJ0aW9uUG9pbnRTdXBwb3J0LmphdmEKaW5kZXggY2MwOWNkMC4uOWZjMGFjYSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9JbnNlcnRpb25Qb2ludFN1cHBvcnQuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L0luc2VydGlvblBvaW50U3VwcG9ydC5qYXZhCkBAIC0xMiw3ICsxMiw2IEBACiAKIC8qKgogICogQGF1dGhvciBLYXJzdGVuIFRob21zIC0gSW5pdGlhbCBjb250cmlidXRpb24gYW5kIEFQSQotICogQHNpbmNlIDEuMC4wIE01CiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgSW5zZXJ0aW9uUG9pbnRTdXBwb3J0IHsKIAl2b2lkIHJlZ2lzdGVySW5zZXJ0aW9uUG9pbnQgKFN0YXRlbWVudCBzdG10KTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQvc3JjL29yZy9lY2xpcHNlL3hwYW5kMi9vdXRwdXQvSmF2YUJlYXV0aWZpZXIuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQvc3JjL29yZy9lY2xpcHNlL3hwYW5kMi9vdXRwdXQvSmF2YUJlYXV0aWZpZXIuamF2YQppbmRleCBlMWRlNTk5Li43MGZlMmYxIDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L0phdmFCZWF1dGlmaWVyLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9KYXZhQmVhdXRpZmllci5qYXZhCkBAIC0zMywxNCArMzMsMTMgQEAKIAogLyoqCiAgKiBGb3JtYXRzIGdlbmVyYXRlZCBKYXZhIGNvZGUgdXNpbmcgdGhlIEVjbGlwc2UgY29kZSBmb3JtYXR0ZXIuCi0gKiAKKyAqCiAgKiBAYXV0aG9yIFN2ZW4gRWZmdGluZ2UgKGh0dHA6Ly93d3cuZWZmdGluZ2UuZGUpIChpbml0aWFsKQogICogQGF1dGhvciBCZXJuZCBLb2xiCiAgKiBAYXV0aG9yIFBldGVyIEZyaWVzZQogICogQGF1dGhvciBNYXJrdXMgVm9lbHRlcgogICogQGF1dGhvciBNaWNoYWVsIExlb3BvbGRzZWRlcgogICogQGF1dGhvciBLYXJzdGVuIFRob21zCi0gKiBAc2luY2UgNC4wCiAgKi8KIHB1YmxpYyBjbGFzcyBKYXZhQmVhdXRpZmllciBpbXBsZW1lbnRzIFBvc3RQcm9jZXNzb3IgewogCkBAIC05MSw3ICs5MCw3IEBACiAJICogUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBjb2RlIGZvcm1hdHRlci4gSWYgdGhlIHVzZXIgc3VwcGxpZWQKIAkgKiB0aGUgcGF0aCB0byBhIGNvbmZpZyBmaWxlLCB0aGlzIGZpbGUgd2lsbCBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgY29kZQogCSAqIGZvcm1hdHRlci4gT3RoZXJ3aXNlIHdlIHVzZSB0aGUgZGVmYXVsdCBvcHRpb25zIHN1cHBsaWVkIHdpdGggWHBhbmQuCi0JICogCisJICoKIAkgKiBAcmV0dXJuIGEgcHJlY29uZmlndXJlZCBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBjb2RlIGZvcm1hdHRlci4KIAkgKi8KIAlwcml2YXRlIENvZGVGb3JtYXR0ZXIgZ2V0Q29kZUZvcm1hdHRlcigpIHsKQEAgLTEwMSwxMiArMTAwLDEyIEBACiAJCQkJb3B0aW9ucyA9IG5ldyBQcm9wZXJ0aWVzKCk7CiAJCQkJb3B0aW9ucy5wdXQoIm9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2UiLCIxLjUiKTsKIAkJCQlvcHRpb25zLnB1dCgib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybSIsIjEuNSIpOwotCQkJCW9wdGlvbnMucHV0KCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2UiLCIxLjUiKTsgICAgICAgICAgICAgIAorCQkJCW9wdGlvbnMucHV0KCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2UiLCIxLjUiKTsKIAkJCQlsb2cuZGVidWcoIm5vIGNvbmZpZyBmaWxlIHNwZWNpZmllZDsgdXNpbmcgdGhlIGRlZmF1bHQgY29uZmlnIGZpbGUgc3VwcGxpZWQgd2l0aCBYcGFuZDogb3JnLmVjbGlwc2UuamR0LmNvcmUuZm9ybWF0dGVycHJlZnMiKTsKIAkJCX0gZWxzZSB7CiAJCQkJb3B0aW9ucyA9IHJlYWRDb25maWcoY29uZmlnRmlsZSk7CiAJCQl9Ci0JCQkKKwogCQkJLy8gaW5zdGFudGlhdGUgdGhlIGZvcm1hdHRlcgogCQkJY29kZUZvcm1hdHRlciA9IFRvb2xGYWN0b3J5LmNyZWF0ZUNvZGVGb3JtYXR0ZXIob3B0aW9ucyk7CiAJCX0KQEAgLTEyMSw3ICsxMjAsNyBAQAogCXByaXZhdGUgUHJvcGVydGllcyByZWFkQ29uZmlnKFN0cmluZyBmaWxlbmFtZSkgewogCQlCdWZmZXJlZElucHV0U3RyZWFtIHN0cmVhbSA9IG51bGw7CiAJCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0JCQorCiAJCXRyeSB7CiAJCSAgIElucHV0U3RyZWFtIGlzID0gb3BlblN0cmVhbShmaWxlbmFtZSk7CiAJCSAgIGZpbmFsIFByb3BlcnRpZXMgZm9ybWF0dGVyT3B0aW9ucyA9IG5ldyBQcm9wZXJ0aWVzKCk7CkBAIC0xMzgsMTkgKzEzNywxOSBAQAogCQkJZWxzZSB7CiAJCQkgICBzdHJlYW0gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShpcyk7CiAJCQkgICBmb3JtYXR0ZXJPcHRpb25zLmxvYWQoc3RyZWFtKTsKLQkJCX0gICAgICAgIAotCQkJCisJCQl9CisKIAkJICAgIC8vIGFkZCBzb21lIHNldHRpbmdzIGZvciB0aGUgY29tcGlsZXIgb3B0aW9ucwogCSAgICAgICAgLy8gd2hpY2ggYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgRWNsaXBzZSBjb2RlIHN0eWxlIHNldHRpbmdzCiAJICAgICAgICAvLyB0byBtYWtlIHRoZSBjb2RlIGZvcm1hdHRlciB3b3JraW5nCiAJICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTIyMjczNgotCQkgICAKKwogCQkgICBpZiggZm9ybWF0dGVyT3B0aW9ucy5nZXQoIm9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2UiKSA9PSBudWxsICkKIAkJCSAgIGZvcm1hdHRlck9wdGlvbnMucHV0KCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlIiwgIjEuNSIpOwogCQkgICBpZiggZm9ybWF0dGVyT3B0aW9ucy5nZXQoIm9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm0iKSA9PSBudWxsICkKIAkJCSAgIGZvcm1hdHRlck9wdGlvbnMucHV0KCJvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtIiwgIjEuNSIpOwogCQkgICBpZiggZm9ybWF0dGVyT3B0aW9ucy5nZXQoIm9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZSIpID09IG51bGwgKQotCQkJICAgZm9ybWF0dGVyT3B0aW9ucy5wdXQoIm9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZSIsICIxLjUiKTsgICAgICAgICAgICAgCisJCQkgICBmb3JtYXR0ZXJPcHRpb25zLnB1dCgib3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlIiwgIjEuNSIpOwogCQkJcmV0dXJuIGZvcm1hdHRlck9wdGlvbnM7CiAJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKIAkJCWxvZy53YXJuKCJQcm9ibGVtIHJlYWRpbmcgY29kZSBmb3JtYXR0ZXIgY29uZmlnIGZpbGUgKCIgKyBlLmdldE1lc3NhZ2UoKSArICIpLiIpOwpAQCAtMTc2LDcgKzE3NSw3IEBACiAJIC8qKgogCSAgKiBTZWFyY2hlcyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIGFzIGEgcmVzb3VyY2UgYW5kIHJldHVybnMgYSBzdHJlYW0gb24gaXQuIFRocm93cyBhbiBJT0V4Y2VwdGlvbiwgaWYgdGhlIGZpbGUKIAkgICogY2Fubm90IGJlIGZvdW5kLgotCSAgKiAKKwkgICoKIAkgICogQHBhcmFtIGZpbGVuYW1lCiAJICAqCQkJCSAgIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHNlYXJjaGVkIGluIHRoZSByZXNvdXJjZXMuCiAJICAqIEByZXR1cm4gSW5wdXRTdHJlYW0gZm9yIHN1YnNlcXVlbnQgcmVhZGluZwpAQCAtMTg5LDcgKzE4OCw3IEBACiAJCSB9CiAJCSByZXR1cm4gaXM7CiAJIH0KLQkKKwogCS8qKgogCSAqIEByZXR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIGZvcm1hdHRlcgogCSAqLwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9Qb3N0UHJvY2Vzc29yLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L1Bvc3RQcm9jZXNzb3IuamF2YQppbmRleCBlNWZmM2Q0Li5lZjVhYTc2IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L1Bvc3RQcm9jZXNzb3IuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L1Bvc3RQcm9jZXNzb3IuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogICogb24gdGhlIGdlbmVyYXRlZCBmaWxlIGNvbnRlbnQuIFRoaXMgaXMgdXN1YWxseSBoZWxwZnVsIGZvciBhdXRvLWZvcm1hdCB0aGUgZ2VuZXJhdGVkIGNvZGUuCiAgKiBAYXV0aG9yIFN2ZW4gRWZmdGluZ2UgKGh0dHA6Ly93d3cuZWZmdGluZ2UuZGUpCiAgKiBAYXV0aG9yIEthcnN0ZW4gVGhvbXMgKGRvYykKLSAqIEBzaW5jZSA0LjAKICAqLwogcHVibGljIGludGVyZmFjZSBQb3N0UHJvY2Vzc29yIHsKIAkvKioKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHBhbmQvc3JjL29yZy9lY2xpcHNlL3hwYW5kMi9vdXRwdXQvVmV0b0V4Y2VwdGlvbi5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9WZXRvRXhjZXB0aW9uLmphdmEKaW5kZXggNGM0MjA3Ni4uZjZmOGY1OCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9WZXRvRXhjZXB0aW9uLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9WZXRvRXhjZXB0aW9uLmphdmEKQEAgLTExLDkgKzExLDggQEAKIHBhY2thZ2Ugb3JnLmVjbGlwc2UueHBhbmQyLm91dHB1dDsKIAogLyoqCi0gKiBTaWduYWxzIGEgdmV0byBieSBhIHtAbGluayBWZXRvU3RyYXRlZ3kyfaBpbXBsZW1lbnRhdGlvbi4gCisgKiBTaWduYWxzIGEgdmV0byBieSBhIHtAbGluayBWZXRvU3RyYXRlZ3kyfaBpbXBsZW1lbnRhdGlvbi4KICAqIEBhdXRob3IgdGhvbXMKLSAqIEBzaW5jZSA0LjMuMQogICovCiBwdWJsaWMgY2xhc3MgVmV0b0V4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewogCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDgzNzYxNjk0MDI0ODE2NDQxNjBMOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54cGFuZC9zcmMvb3JnL2VjbGlwc2UveHBhbmQyL291dHB1dC9WZXRvU3RyYXRlZ3kyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L1ZldG9TdHJhdGVneTIuamF2YQppbmRleCBlZDA0NjA3Li4yZWVkOTc1IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L1ZldG9TdHJhdGVneTIuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnhwYW5kL3NyYy9vcmcvZWNsaXBzZS94cGFuZDIvb3V0cHV0L1ZldG9TdHJhdGVneTIuamF2YQpAQCAtMTEsOSArMTEsOCBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS54cGFuZDIub3V0cHV0OwogCiAvKioKLSAqIAorICoKICAqIEBhdXRob3IgdGhvbXMKLSAqIEBzaW5jZSA0LjMuMQogICovCiBwdWJsaWMgaW50ZXJmYWNlIFZldG9TdHJhdGVneTIgZXh0ZW5kcyBWZXRvU3RyYXRlZ3kgewogCmRpZmYgLS1naXQgYS9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnNoYXJlZC51aS9zcmMvb3JnL2VjbGlwc2UveHRlbmQvc2hhcmVkL3VpL2NvcmUvSVh0ZW5kWHBhbmRQcm9qZWN0LmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnNoYXJlZC51aS9zcmMvb3JnL2VjbGlwc2UveHRlbmQvc2hhcmVkL3VpL2NvcmUvSVh0ZW5kWHBhbmRQcm9qZWN0LmphdmEKaW5kZXggNTAxMDYxYS4uYTVlMTZkZSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC5zaGFyZWQudWkvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3NoYXJlZC91aS9jb3JlL0lYdGVuZFhwYW5kUHJvamVjdC5qYXZhCisrKyBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQuc2hhcmVkLnVpL3NyYy9vcmcvZWNsaXBzZS94dGVuZC9zaGFyZWQvdWkvY29yZS9JWHRlbmRYcGFuZFByb2plY3QuamF2YQpAQCAtMjEsNyArMjEsNiBAQAogICogUmVwcmVzZW50cyBhIHByb2plY3QgY29udGFpbmluZyBvcGVuQXJjaGl0ZWN0dXJlV2FyZSByZXNvdXJjZXMuIFRoZXNlIGFyZQogICogWHBhbmQgdGVtcGxhdGUsIFh0ZW5kIGZpbGVzLCBXb3JrZmxvdyBmaWxlcyBldGMuCiAgKiAKLSAqIEBzaW5jZSA0LjAKICAqLwogcHVibGljIGludGVyZmFjZSBJWHRlbmRYcGFuZFByb2plY3QgZXh0ZW5kcyBJQWRhcHRhYmxlIHsKIAkvKioKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQuc2hhcmVkLnVpL3NyYy9vcmcvZWNsaXBzZS94dGVuZC9zaGFyZWQvdWkvZWRpdG9yL291dGxpbmV2aWV3L091dGxpbmVFbGVtZW50Q29tcGFyYXRvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC5zaGFyZWQudWkvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3NoYXJlZC91aS9lZGl0b3Ivb3V0bGluZXZpZXcvT3V0bGluZUVsZW1lbnRDb21wYXJhdG9yLmphdmEKaW5kZXggZWM3ZDhhNC4uODBmMTc1NCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC5zaGFyZWQudWkvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3NoYXJlZC91aS9lZGl0b3Ivb3V0bGluZXZpZXcvT3V0bGluZUVsZW1lbnRDb21wYXJhdG9yLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC5zaGFyZWQudWkvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3NoYXJlZC91aS9lZGl0b3Ivb3V0bGluZXZpZXcvT3V0bGluZUVsZW1lbnRDb21wYXJhdG9yLmphdmEKQEAgLTIzLDcgKzIzLDYgQEAKICAqIFRoaXMgY2xhc3MgbWF5IGJlIGluc3RhbnRpYXRlZDsgaXQgaXMgbm90IGludGVuZGVkIHRvIGJlIHN1YmNsYXNzZWQuCiAgKiA8L3A+CiAgKiAKLSAqIEBzaW5jZSAzLjMKICAqLwogCiBwdWJsaWMgY2xhc3MgT3V0bGluZUVsZW1lbnRDb21wYXJhdG9yIGV4dGVuZHMgVmlld2VyQ29tcGFyYXRvciB7CkBAIC00MSwxMCArNDAsMTEgQEAKIAkvKgogCSAqIChub24tSmF2YWRvYykKIAkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyQ29tcGFyYXRvciNjYXRlZ29yeShqYXZhLmxhbmcuT2JqZWN0KQorCSAqIEBzZWUKKwkgKiBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckNvbXBhcmF0b3IjY2F0ZWdvcnkoamF2YS5sYW5nLk9iamVjdCkKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGNhdGVnb3J5KE9iamVjdCBlbGVtZW50KSB7CisJcHVibGljIGludCBjYXRlZ29yeShmaW5hbCBPYmplY3QgZWxlbWVudCkgewogCQkvLyBmb3IgQ2hlY2sgQ29udGVudCBPdXRsaW5lIGVsZW1lbnRzLCB0aGUgY2F0ZWdvcnkgaXMgdGhlaXIgdHlwZS4uLgogCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIE91dGxpbmVFbGVtZW50KQogCQkJcmV0dXJuICgoT3V0bGluZUVsZW1lbnQpIGVsZW1lbnQpLmdldFR5cGUoKTsKQEAgLTU0LDExICs1NCwxMiBAQAogCS8qCiAJICogKG5vbi1KYXZhZG9jKQogCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXJDb21wYXJhdG9yI2NvbXBhcmUob3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5WaWV3ZXIsCi0JICogICAgICBqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuT2JqZWN0KQorCSAqIEBzZWUKKwkgKiBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlZpZXdlckNvbXBhcmF0b3IjY29tcGFyZShvcmcuZWNsaXBzZS5qZmFjZS4KKwkgKiB2aWV3ZXJzLlZpZXdlciwgamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLk9iamVjdCkKIAkgKi8KIAlAT3ZlcnJpZGUKLQlwdWJsaWMgaW50IGNvbXBhcmUoVmlld2VyIHZpZXdlciwgT2JqZWN0IGUxLCBPYmplY3QgZTIpIHsKKwlwdWJsaWMgaW50IGNvbXBhcmUoZmluYWwgVmlld2VyIHZpZXdlciwgZmluYWwgT2JqZWN0IGUxLCBmaW5hbCBPYmplY3QgZTIpIHsKIAogCQlpZiAoIShlMSBpbnN0YW5jZW9mIE91dGxpbmVFbGVtZW50KSkKIAkJCXJldHVybiAwOwpAQCAtNzcsMTEgKzc4LDExIEBACiAKIAkJU3RyaW5nIGxhYmVsMSA9IGNjb2UxLmdldExhYmVsKCk7CiAJCVN0cmluZyBsYWJlbDIgPSBjY29lMi5nZXRMYWJlbCgpOwotCQlpZiAobGFiZWwxPT1sYWJlbDIpCisJCWlmIChsYWJlbDEgPT0gbGFiZWwyKQogCQkJcmV0dXJuIDA7Ci0JCWlmIChsYWJlbDE9PW51bGwpCisJCWlmIChsYWJlbDEgPT0gbnVsbCkKIAkJCXJldHVybiAtMTsKLQkJaWYgKGxhYmVsMj09bnVsbCkKKwkJaWYgKGxhYmVsMiA9PSBudWxsKQogCQkJcmV0dXJuIDE7CiAJCXJldHVybiBsYWJlbDEudG9Mb3dlckNhc2UoKS5jb21wYXJlVG8obGFiZWwyLnRvTG93ZXJDYXNlKCkpOwogCX0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS5lbWYvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vZW1mL0Vjb3JlVXRpbDIuamF2YSBiL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS5lbWYvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vZW1mL0Vjb3JlVXRpbDIuamF2YQppbmRleCBhOGQ3MTM2Li40ODk1ZmY2IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0uZW1mL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL2VtZi9FY29yZVV0aWwyLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZi9zcmMvb3JnL2VjbGlwc2UveHRlbmQvdHlwZXN5c3RlbS9lbWYvRWNvcmVVdGlsMi5qYXZhCkBAIC00Myw3ICs0Myw2IEBACiAvKioKICAqIFByb3ZpZGVzIHVzZWZ1bCBmdW5jdGlvbnMgZm9yIHVzYWdlIG9mIEVNRi4KICAqCi0gKiBAc2luY2UgNC4wCiAgKi8KIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogcHVibGljIGNsYXNzIEVjb3JlVXRpbDIgewpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZi9zcmMvb3JnL2VjbGlwc2UveHRlbmQvdHlwZXN5c3RlbS9lbWYvWG1pV3JpdGVyLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0uZW1mL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL2VtZi9YbWlXcml0ZXIuamF2YQppbmRleCA4MzQwM2MxLi44N2MzYjE3IDEwMDY0NAotLS0gYS9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0uZW1mL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL2VtZi9YbWlXcml0ZXIuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0uZW1mL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL2VtZi9YbWlXcml0ZXIuamF2YQpAQCAtNDEsNyArNDEsNiBAQAogICogVGhpcyBjb21wb25lbnQgbGV0cyB5b3Ugd3JpdGUgYW4gRU1GIG1vZGVsIGNvbnRhaW5lZCBpbiBzb21lIHNsb3QgdG8gZGlzYy4KICAqCiAgKiBAYXV0aG9yIE1hcmt1cyBW77+9bHRlcgotICogQHNpbmNlIDQuMAogICoKICAqIEBkZXByZWNhdGVkIHVzZSBvcmcuZWNsaXBzZS5td2UuZW1mLldyaXRlciBpbnN0ZWFkCiAgKi8KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL3VtbDIvVU1MMldyaXRlci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9VTUwyV3JpdGVyLmphdmEKaW5kZXggZDJlZTQ2Yy4uOThjOWVjMiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9VTUwyV3JpdGVyLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9VTUwyV3JpdGVyLmphdmEKQEAgLTMyLDE3ICszMiwxNiBAQAogCiAvKioKICAqIFRoaXMgd29ya2Zsb3cgY29tcG9uZW50IHdyaXRlcyBVTUwyIG1vZGVscyB3aXRoIHRoZWlyIHByb2ZpbGVzIHRvIGEgZGlyZWN0b3J5LgotICogCisgKgogICogPGgyPlByb3BlcnRpZXM8L2gyPgogICogPHVsPgogICogPGxpPmlucHV0U2xvdCAocmVxdWlyZWQpOiBTbG90IG5hbWUgY29udGFpbmluZyB0aGUgVU1MIG1vZGVsLgogICogPGxpPm91dFBhdGg6IE91dHB1dCBwYXRoICh3aXRoaW4gZGVzdGluYXRpb25Gb2xkZXIpCiAgKiA8bGk+ZGVzdGluYXRpb25Gb2xkZXI6IEJhc2UgcGF0aCAoZGVmYXVsdDogJy4vJykKICAqIDxsaT51c2VVTUwxeDogV3JpdGUgLnVtbDIgZmlsZXMgKGV4dGVuc2lvbiB1c2VkIGJ5IFVNTDIgdjEueCkuIERlZmF1bHQ6IGZhbHNlLgotICogPC91bD4gCisgKiA8L3VsPgogICogQGF1dGhvciBCZW5lZGlrdCBOaWVodWVzIChJbml0aWFsIGltcGxlbWVudGF0aW9uKQogICogQGF1dGhvciBLYXJzdGVuIFRob21zIChkb2NzLCBtYWludGFpbmFuY2UpCi0gKiBAc2luY2UgNC4yCiAgKi8KIHB1YmxpYyBjbGFzcyBVTUwyV3JpdGVyIGV4dGVuZHMgQWJzdHJhY3RXb3JrZmxvd0NvbXBvbmVudCB7CiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIExPRyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFVNTDJXcml0ZXIuY2xhc3MpOwpAQCAtNTIsNyArNTEsNyBAQAogCXByaXZhdGUgU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gIi4vIjsKIAogCXByaXZhdGUgU3RyaW5nIGlucHV0U2xvdCA9IFdvcmtmbG93Q29udGV4dC5ERUZBVUxUX1NMT1Q7Ci0JCisKIAlwcml2YXRlIGJvb2xlYW4gdXNlVU1MMXggPSBmYWxzZTsKIAogCXB1YmxpYyBTdHJpbmcgZ2V0RGVzdGluYXRpb25Gb2xkZXIoKSB7CkBAIC04Myw3ICs4Miw3IEBACiAJCQl0aGlzLm91dFBhdGggPSB0aGlzLm91dFBhdGguc3Vic3RyaW5nKDEpOwogCQl9CiAJfQotCQorCiAJcHVibGljIHZvaWQgc2V0VXNlVU1MMXgoYm9vbGVhbiB1c2VVTUwxeCkgewogCQl0aGlzLnVzZVVNTDF4ID0gdXNlVU1MMXg7CiAJfQpAQCAtMTQ0LDcgKzE0Myw3IEBACiAJcHJpdmF0ZSB2b2lkIHNhdmVNb2RlbChQYWNrYWdlIG1vZGVsLCBSZXNvdXJjZVNldCByc0ltcGwpIHsKIAkJLy8gY29tcHV0ZSBmaWxlIG5hbWUsIGUuZy4gJy4vc3JjLWdlbi9teU1vZGVsLnVtbCIKIAkJU3RyaW5nIG1vZGVsRmlsZSA9IGRlc3RpbmF0aW9uRm9sZGVyICsgb3V0UGF0aCArIG1vZGVsLmdldE5hbWUoKSArICIuIitnZXRVTUxGaWxlRXh0ZW5zaW9uKCk7Ci0JCQorCiAJCS8vIGNyZWF0ZSBhIHJlc291cmNlIHdpdGggdGhlIG1vZGVsIGFzIGNvbnRlbnRzCiAJCWZpbmFsIFVSSSBmaWxlVVJJID0gVVJJLmNyZWF0ZUZpbGVVUkkobW9kZWxGaWxlKTsKIAkJUmVzb3VyY2UgciA9IHJzSW1wbC5jcmVhdGVSZXNvdXJjZShmaWxlVVJJKTsKQEAgLTE2NSw3ICsxNjQsNyBAQAogCQkJcmVzb3VyY2UudW5sb2FkKCk7CiAJCX0KIAl9Ci0JCisKIAkvKioKIAkgKiBSZXR1cm5zIHRoZSBwcm9wZXIgVU1MIGZpbGUgZXh0ZW5zaW9uLgogCSAqIEByZXR1cm4gInVtbDIiIGZvciBVTUwyIHYxLngsICJ1bWwiIGZvciBVTUwyIHYyLngKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL3VtbDIvcHJvZmlsZS9FbnVtVHlwZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9wcm9maWxlL0VudW1UeXBlLmphdmEKaW5kZXggNWRkNDZkYi4uYzg3ZjYwNSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9wcm9maWxlL0VudW1UeXBlLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9wcm9maWxlL0VudW1UeXBlLmphdmEKQEAgLTI1LDcgKzI1LDYgQEAKIAogLyoqCiAgKiBSZXByZXNlbnRzIGFuIGVudW1lcmF0aW9uIHdpdGhpbiBhIHByb2ZpbGUuCi0gKiBAc2luY2UgNC4xCiAgKi8KIHB1YmxpYyBjbGFzcyBFbnVtVHlwZSBleHRlbmRzIEFic3RyYWN0VHlwZUltcGwgewogCS8qKiBUaGUgRW51bWVyYXRpb24gcmVwcmVzZW50ZWQgYnkgdGhpcy4gKi8KQEAgLTY2LDcgKzY1LDcgQEAKIAkJCXB1YmxpYyBTdHJpbmcgZ2V0RG9jdW1lbnRhdGlvbigpIHsKIAkJCQlyZXR1cm4gIlJldHJpZXZlcyB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRpb24gbGl0ZXJhbC4iOwogCQkJfQotCQkJCisKICAgICAgICAgfSk7CiAgICAgICAgIHJldHVybiByZXN1bHQudG9BcnJheShuZXcgRmVhdHVyZVtyZXN1bHQuc2l6ZSgpXSk7CiAgICAgfQpAQCAtODMsOSArODIsOSBAQAogICAgIHB1YmxpYyBPYmplY3QgbmV3SW5zdGFuY2UoKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBFbnVtZXJhdGlvbiBnZXRFbnVtZXJhdGlvbiAoKSB7CiAgICAgCXJldHVybiBlbnVtZXJhdGlvbjsKICAgICB9Ci0gICAgCisKIH0KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL3VtbDIvcHJvZmlsZS9NdWx0aXBsZVN0ZXJlb3R5cGVUeXBlLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0udW1sMi9zcmMvb3JnL2VjbGlwc2UveHRlbmQvdHlwZXN5c3RlbS91bWwyL3Byb2ZpbGUvTXVsdGlwbGVTdGVyZW90eXBlVHlwZS5qYXZhCmluZGV4IDRiMzI2YTUuLjA5OWVhYWIgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL3VtbDIvcHJvZmlsZS9NdWx0aXBsZVN0ZXJlb3R5cGVUeXBlLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9wcm9maWxlL011bHRpcGxlU3RlcmVvdHlwZVR5cGUuamF2YQpAQCAtMSw5OCArMSw5NyBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDcgY29tbWl0dGVycyBvZiBvcGVuQXJjaGl0ZWN0dXJlV2FyZSBhbmQgb3RoZXJzLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjANCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdA0KLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sDQotICoNCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIGNvbW1pdHRlcnMgb2Ygb3BlbkFyY2hpdGVjdHVyZVdhcmUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0udW1sMi5wcm9maWxlOw0KLQ0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7DQotaW1wb3J0IGphdmEudXRpbC5TZXQ7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZW5kLmV4cHJlc3Npb24uVHlwZVN5c3RlbTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS5GZWF0dXJlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLlR5cGU7DQotDQotLyoqDQotICogVGhpcyB0eXBlIGlzIHVzZWQgdG8gc3VwcG9ydCBhc3NpZ25tZW50IG9mIG11bHRpcGxlIHN0ZXJlb3R5cGVzIHRvIGENCi0gKiBtb2RlbCBlbGVtZW50LiBNZXRob2RzIGZyb20gdGhlIHN1cGVyY2xhc3MgYXJlIG92ZXJyaWRkZW4gdG8gZXZhbHVhdGUNCi0gKiB0aGVtIGZvciBlYWNoIHdyYXBwZWQgc3RlcmVvdHlwZS4NCi0gKiBAYXV0aG9yIGthcnN0ZW4udGhvbXNAaXRlbWlzLmRlIC0gbWFpbnRhaW5hbmNlDQotICogQGF1dGhvciBqb2NoZW4uc2NobWljaEBmaWR1Y2lhLmRlIC0gQnVnIzM4ODM3Mw0KLSAqIEBhdXRob3IgYWFybm9sZCAtIHR5cGUgaW50cm9zcGVjdGlvbg0KLSAqIEBhdXRob3IgcHNjaG9uYmFjIC0gbWFpbnRhaW5hbmNlDQotICogQGF1dGhvciBia29sYiAtIGluaXRpYWwNCi0gKiBAc2luY2Ugb0FXIDQuMg0KLSAqLw0KLXB1YmxpYyBmaW5hbCBjbGFzcyBNdWx0aXBsZVN0ZXJlb3R5cGVUeXBlIGV4dGVuZHMgU3RlcmVvdHlwZVR5cGUgew0KLQlMaXN0PFN0ZXJlb3R5cGVUeXBlPiBzdGVyZW90eXBlczsNCi0NCi0JcHVibGljIE11bHRpcGxlU3RlcmVvdHlwZVR5cGUoVHlwZVN5c3RlbSB0eXBlU3lzdGVtLCBMaXN0PFN0ZXJlb3R5cGVUeXBlPiBzdGVyZW90eXBlcykgew0KLQkJdGhpcyh0eXBlU3lzdGVtLCBzdGVyZW90eXBlcywgbnVsbCk7DQotCX0NCi0NCi0JcHVibGljIE11bHRpcGxlU3RlcmVvdHlwZVR5cGUoVHlwZVN5c3RlbSB0eXBlU3lzdGVtLCBMaXN0PFN0ZXJlb3R5cGVUeXBlPiBzdGVyZW90eXBlcywgVHlwZSB1bWxUeXBlKSB7DQotCQlzdXBlcih0eXBlU3lzdGVtLCBjb21wdXRlTmFtZShzdGVyZW90eXBlcyksIG51bGwsIHVtbFR5cGUpOw0KLQkJdGhpcy5zdGVyZW90eXBlcyA9IHN0ZXJlb3R5cGVzOw0KLQl9DQotDQotCS8qKiBOZWVkZWQgdG8gYmUgY2FsbGVkIHdpdGhpbiBjb25zdHJ1Y3RvciAqLw0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU5hbWUgKExpc3Q8U3RlcmVvdHlwZVR5cGU+IHN0ZXJlb3R5cGVzKSB7DQotCQlTdHJpbmcgcmVzdWx0ID0gc3RlcmVvdHlwZXMuZ2V0KDApLmdldE5hbWUoKTsNCi0JCWZvciAoaW50IGk9MTsgaTxzdGVyZW90eXBlcy5zaXplKCk7IGkrKykgew0KLQkJCXJlc3VsdCArPSAiLCIrc3RlcmVvdHlwZXMuZ2V0KGkpLmdldE5hbWUoKTsNCi0JCX0NCi0JCXJldHVybiByZXN1bHQ7DQotCX0NCi0NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBGZWF0dXJlW10gZ2V0Q29udHJpYnV0ZWRGZWF0dXJlcygpIHsNCi0JCUxpc3Q8RmVhdHVyZT4gZmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEZlYXR1cmU+KCk7DQotCQlmb3IgKFN0ZXJlb3R5cGVUeXBlIHN0IDogc3RlcmVvdHlwZXMpIHsNCi0JCQlmZWF0dXJlcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzdC5nZXRDb250cmlidXRlZEZlYXR1cmVzKCkpKTsNCi0JCX0NCi0JCXJldHVybiBmZWF0dXJlcy50b0FycmF5KG5ldyBGZWF0dXJlW3N0ZXJlb3R5cGVzLnNpemUoKV0pOw0KLQl9DQotDQotCUBPdmVycmlkZQ0KLQlwdWJsaWMgU2V0PFR5cGU+IGdldFN1cGVyVHlwZXMoKSB7DQotCQlTZXQ8VHlwZT4gc3VwZXJUeXBlcyA9IG5ldyBIYXNoU2V0PFR5cGU+KCk7DQotCQlmb3IgKFN0ZXJlb3R5cGVUeXBlIHN0IDogc3RlcmVvdHlwZXMpIHsNCi0JCQlzdXBlclR5cGVzLmFkZEFsbChzdC5nZXRTdXBlclR5cGVzKCkpOw0KLQkJfQ0KLQkJcmV0dXJuIHN1cGVyVHlwZXM7DQotCX0NCi0NCi0JQE92ZXJyaWRlDQotCXB1YmxpYyBib29sZWFuIGlzSW5zdGFuY2UoT2JqZWN0IG8pIHsNCi0JCWZvciAoU3RlcmVvdHlwZVR5cGUgc3QgOiBzdGVyZW90eXBlcykgew0KLQkJCWlmIChzdC5pc0luc3RhbmNlKG8pKSB7DQotCQkJCXJldHVybiB0cnVlOw0KLQkJCX0NCi0JCX0NCi0JCXJldHVybiBmYWxzZTsNCi0JfQ0KLQ0KLQlAT3ZlcnJpZGUNCi0JcHJvdGVjdGVkIGJvb2xlYW4gaXNDb21wYXRpYmxlKFR5cGUgdCkgew0KLQkJZm9yIChTdGVyZW90eXBlVHlwZSBzdCA6IHN0ZXJlb3R5cGVzKSB7DQotCQkJLy8gdW1sVHlwZSBpcyBub3QgcmVsZXZhbnQgdGh1cyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgaGVyZSAtIGZhbHNlIGlzIHBhc3NlZCBpbiB0aGlzIGNhc2UNCi0JCQlpZiAoc3QuZXF1YWxzKHQsIGZhbHNlKSkgew0KLQkJCQlyZXR1cm4gdHJ1ZTsNCi0JCQl9DQotCQl9DQotCQlyZXR1cm4gZmFsc2U7DQotCX0NCi0NCi0JcHVibGljIExpc3Q8U3RlcmVvdHlwZVR5cGU+IGdldFN0ZXJlb3R5cGVzICgpIHsNCi0JCXJldHVybiBzdGVyZW90eXBlczsNCi0JfQ0KLQ0KLX0NCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDA3IGNvbW1pdHRlcnMgb2Ygb3BlbkFyY2hpdGVjdHVyZVdhcmUgYW5kIG90aGVycy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKKyAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAorICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCisgKgorICogQ29udHJpYnV0b3JzOgorICogICAgIGNvbW1pdHRlcnMgb2Ygb3BlbkFyY2hpdGVjdHVyZVdhcmUgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIucHJvZmlsZTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UueHRlbmQuZXhwcmVzc2lvbi5UeXBlU3lzdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0uRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLlR5cGU7CisKKy8qKgorICogVGhpcyB0eXBlIGlzIHVzZWQgdG8gc3VwcG9ydCBhc3NpZ25tZW50IG9mIG11bHRpcGxlIHN0ZXJlb3R5cGVzIHRvIGEKKyAqIG1vZGVsIGVsZW1lbnQuIE1ldGhvZHMgZnJvbSB0aGUgc3VwZXJjbGFzcyBhcmUgb3ZlcnJpZGRlbiB0byBldmFsdWF0ZQorICogdGhlbSBmb3IgZWFjaCB3cmFwcGVkIHN0ZXJlb3R5cGUuCisgKiBAYXV0aG9yIGthcnN0ZW4udGhvbXNAaXRlbWlzLmRlIC0gbWFpbnRhaW5hbmNlCisgKiBAYXV0aG9yIGpvY2hlbi5zY2htaWNoQGZpZHVjaWEuZGUgLSBCdWcjMzg4MzczCisgKiBAYXV0aG9yIGFhcm5vbGQgLSB0eXBlIGludHJvc3BlY3Rpb24KKyAqIEBhdXRob3IgcHNjaG9uYmFjIC0gbWFpbnRhaW5hbmNlCisgKiBAYXV0aG9yIGJrb2xiIC0gaW5pdGlhbAorICovCitwdWJsaWMgZmluYWwgY2xhc3MgTXVsdGlwbGVTdGVyZW90eXBlVHlwZSBleHRlbmRzIFN0ZXJlb3R5cGVUeXBlIHsKKwlMaXN0PFN0ZXJlb3R5cGVUeXBlPiBzdGVyZW90eXBlczsKKworCXB1YmxpYyBNdWx0aXBsZVN0ZXJlb3R5cGVUeXBlKFR5cGVTeXN0ZW0gdHlwZVN5c3RlbSwgTGlzdDxTdGVyZW90eXBlVHlwZT4gc3RlcmVvdHlwZXMpIHsKKwkJdGhpcyh0eXBlU3lzdGVtLCBzdGVyZW90eXBlcywgbnVsbCk7CisJfQorCisJcHVibGljIE11bHRpcGxlU3RlcmVvdHlwZVR5cGUoVHlwZVN5c3RlbSB0eXBlU3lzdGVtLCBMaXN0PFN0ZXJlb3R5cGVUeXBlPiBzdGVyZW90eXBlcywgVHlwZSB1bWxUeXBlKSB7CisJCXN1cGVyKHR5cGVTeXN0ZW0sIGNvbXB1dGVOYW1lKHN0ZXJlb3R5cGVzKSwgbnVsbCwgdW1sVHlwZSk7CisJCXRoaXMuc3RlcmVvdHlwZXMgPSBzdGVyZW90eXBlczsKKwl9CisKKwkvKiogTmVlZGVkIHRvIGJlIGNhbGxlZCB3aXRoaW4gY29uc3RydWN0b3IgKi8KKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29tcHV0ZU5hbWUgKExpc3Q8U3RlcmVvdHlwZVR5cGU+IHN0ZXJlb3R5cGVzKSB7CisJCVN0cmluZyByZXN1bHQgPSBzdGVyZW90eXBlcy5nZXQoMCkuZ2V0TmFtZSgpOworCQlmb3IgKGludCBpPTE7IGk8c3RlcmVvdHlwZXMuc2l6ZSgpOyBpKyspIHsKKwkJCXJlc3VsdCArPSAiLCIrc3RlcmVvdHlwZXMuZ2V0KGkpLmdldE5hbWUoKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBGZWF0dXJlW10gZ2V0Q29udHJpYnV0ZWRGZWF0dXJlcygpIHsKKwkJTGlzdDxGZWF0dXJlPiBmZWF0dXJlcyA9IG5ldyBBcnJheUxpc3Q8RmVhdHVyZT4oKTsKKwkJZm9yIChTdGVyZW90eXBlVHlwZSBzdCA6IHN0ZXJlb3R5cGVzKSB7CisJCQlmZWF0dXJlcy5hZGRBbGwoQXJyYXlzLmFzTGlzdChzdC5nZXRDb250cmlidXRlZEZlYXR1cmVzKCkpKTsKKwkJfQorCQlyZXR1cm4gZmVhdHVyZXMudG9BcnJheShuZXcgRmVhdHVyZVtzdGVyZW90eXBlcy5zaXplKCldKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU2V0PFR5cGU+IGdldFN1cGVyVHlwZXMoKSB7CisJCVNldDxUeXBlPiBzdXBlclR5cGVzID0gbmV3IEhhc2hTZXQ8VHlwZT4oKTsKKwkJZm9yIChTdGVyZW90eXBlVHlwZSBzdCA6IHN0ZXJlb3R5cGVzKSB7CisJCQlzdXBlclR5cGVzLmFkZEFsbChzdC5nZXRTdXBlclR5cGVzKCkpOworCQl9CisJCXJldHVybiBzdXBlclR5cGVzOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzSW5zdGFuY2UoT2JqZWN0IG8pIHsKKwkJZm9yIChTdGVyZW90eXBlVHlwZSBzdCA6IHN0ZXJlb3R5cGVzKSB7CisJCQlpZiAoc3QuaXNJbnN0YW5jZShvKSkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBpc0NvbXBhdGlibGUoVHlwZSB0KSB7CisJCWZvciAoU3RlcmVvdHlwZVR5cGUgc3QgOiBzdGVyZW90eXBlcykgeworCQkJLy8gdW1sVHlwZSBpcyBub3QgcmVsZXZhbnQgdGh1cyBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgaGVyZSAtIGZhbHNlIGlzIHBhc3NlZCBpbiB0aGlzIGNhc2UKKwkJCWlmIChzdC5lcXVhbHModCwgZmFsc2UpKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXB1YmxpYyBMaXN0PFN0ZXJlb3R5cGVUeXBlPiBnZXRTdGVyZW90eXBlcyAoKSB7CisJCXJldHVybiBzdGVyZW90eXBlczsKKwl9CisKK30KZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL3VtbDIvcHJvZmlsZS9Qcm9maWxpbmdFeHRlbnNpb25zLmphdmEgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0udW1sMi9zcmMvb3JnL2VjbGlwc2UveHRlbmQvdHlwZXN5c3RlbS91bWwyL3Byb2ZpbGUvUHJvZmlsaW5nRXh0ZW5zaW9ucy5qYXZhCmluZGV4IGE1ZjkyNDIuLjViM2VlNTEgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyL3NyYy9vcmcvZWNsaXBzZS94dGVuZC90eXBlc3lzdGVtL3VtbDIvcHJvZmlsZS9Qcm9maWxpbmdFeHRlbnNpb25zLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3R5cGVzeXN0ZW0vdW1sMi9wcm9maWxlL1Byb2ZpbGluZ0V4dGVuc2lvbnMuamF2YQpAQCAtMzQsNyArMzQsNiBAQAogICogRXh0ZW5zaW9ucyBmb3Igc3VwcG9ydCBvZiBVTUwyIFByb2ZpbGVzLgogICoKICAqIEBhdXRob3IgS2Fyc3RlbiBUaG9tcwotICogQHNpbmNlIDQuMgogICovCiBwdWJsaWMgY2xhc3MgUHJvZmlsaW5nRXh0ZW5zaW9ucyB7CiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nIExPRyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFByb2ZpbGluZ0V4dGVuc2lvbnMuY2xhc3MpOwpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC51dGlsLnN0ZGxpYi9zcmMvb3JnL2VjbGlwc2UveHRlbmQvdXRpbC9zdGRsaWIvU3lzdGVtQ29tbWFuZC5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC51dGlsLnN0ZGxpYi9zcmMvb3JnL2VjbGlwc2UveHRlbmQvdXRpbC9zdGRsaWIvU3lzdGVtQ29tbWFuZC5qYXZhCmluZGV4IDkwYTY1ZWYuLjRlNzZhYjQgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQudXRpbC5zdGRsaWIvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL3V0aWwvc3RkbGliL1N5c3RlbUNvbW1hbmQuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kLnV0aWwuc3RkbGliL3NyYy9vcmcvZWNsaXBzZS94dGVuZC91dGlsL3N0ZGxpYi9TeXN0ZW1Db21tYW5kLmphdmEKQEAgLTcwLDcgKzcwLDYgQEAKICAqIDwvcHJlPgogICoKICAqIEBhdXRob3IgS2Fyc3RlbiBUaG9tcwotICogQHNpbmNlIDQuMy4xCiAgKi8KIHB1YmxpYyBjbGFzcyBTeXN0ZW1Db21tYW5kIGV4dGVuZHMgQWJzdHJhY3RXb3JrZmxvd0NvbXBvbmVudDIgewogCXByaXZhdGUgZmluYWwgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhTeXN0ZW1Db21tYW5kLmNsYXNzKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQvc3JjL29yZy9lY2xpcHNlL2ludGVybmFsL3h0ZW5kL3V0aWwvRW5jb2RpbmdEZXRlY3Rvci5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UvaW50ZXJuYWwveHRlbmQvdXRpbC9FbmNvZGluZ0RldGVjdG9yLmphdmEKaW5kZXggNDFlMDgyZC4uYTM0YzBjMCAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UvaW50ZXJuYWwveHRlbmQvdXRpbC9FbmNvZGluZ0RldGVjdG9yLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UvaW50ZXJuYWwveHRlbmQvdXRpbC9FbmNvZGluZ0RldGVjdG9yLmphdmEKQEAgLTE4LDEyICsxOCwxMiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmludGVybmFsLnh0ZW5kLnV0aWwuaW50ZXJuYWwuaWN1LkNoYXJzZXRNYXRjaDsKIAogLyoqCi0gKiBUaGlzIGNsYXNzIGhlbHBzIGRldGVjdGluZyB0aGUgZW5jb2Rpbmcgb2Ygc29tZSByZXNvdXJjZSBieSBzY2FubmluZyB0aGUgZmlyc3QgYnl0ZXMgZnJvbSBpdC4gCisgKiBUaGlzIGNsYXNzIGhlbHBzIGRldGVjdGluZyB0aGUgZW5jb2Rpbmcgb2Ygc29tZSByZXNvdXJjZSBieSBzY2FubmluZyB0aGUgZmlyc3QgYnl0ZXMgZnJvbSBpdC4KKyAqIAogICogQGF1dGhvciBLYXJzdGVuIFRob21zCi0gKiBAc2luY2UgNC4yCiAgKi8KIHB1YmxpYyBjbGFzcyBFbmNvZGluZ0RldGVjdG9yIHsKLQlwdWJsaWMgc3RhdGljIENoYXJzZXQgZGV0ZWN0RW5jb2RpbmcgKEJ1ZmZlcmVkSW5wdXRTdHJlYW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJcHVibGljIHN0YXRpYyBDaGFyc2V0IGRldGVjdEVuY29kaW5nKGZpbmFsIEJ1ZmZlcmVkSW5wdXRTdHJlYW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCS8vIFJlYWQgc29tZSBieXRlcyBmcm9tIHRoZSBzdHJlYW0KIAkJaW4ubWFyayg2NSk7CiAJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVs2NF07CkBAIC0zMywyMiArMzMsMjIgQEAKIAkJcmV0dXJuIGRldGVjdEVuY29kaW5nKGJ1Zik7CiAJfQogCi0JcHVibGljIHN0YXRpYyBDaGFyc2V0IGRldGVjdEVuY29kaW5nIChieXRlW10gc2FtcGxlKSB7CisJcHVibGljIHN0YXRpYyBDaGFyc2V0IGRldGVjdEVuY29kaW5nKGZpbmFsIGJ5dGVbXSBzYW1wbGUpIHsKIAkJQ2hhcnNldCBlbmNvZGluZyA9IG51bGw7CiAJCS8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIFhwYW5kIGZpbGVzIG9uIE1hYzogVHJ5IHRvIGRldGVjdAogCQkvLyB0aGUgb3BlbmluZyBHdWlsbGVtb3QgYnJhY2tldCBmb3IgTWFjUm9tYW4gZW5jb2RpbmcKLQkJZm9yIChpbnQgaT0wOyBpPHNhbXBsZS5sZW5ndGg7IGkrKykgewotCQkJaWYgKHNhbXBsZVtpXT09LTU3KSB7IC8vIG9wZW5pbmcgR3VpbGxlbW90IGJyYWNrZXQKKwkJZm9yIChieXRlIGVsZW1lbnQgOiBzYW1wbGUpIHsKKwkJCWlmIChlbGVtZW50ID09IC01NykgeyAvLyBvcGVuaW5nIEd1aWxsZW1vdCBicmFja2V0CiAJCQkJZW5jb2RpbmcgPSBDaGFyc2V0LmZvck5hbWUoIk1hY1JvbWFuIik7CiAJCQkJYnJlYWs7Ci0JCQl9IAorCQkJfQogCQl9CiAJCS8vIFVzZSBjb20uaWJtLmljdSBmb3IgYXV0b2RldGVjdGlvbgotCQlpZiAoZW5jb2Rpbmc9PW51bGwpIHsKKwkJaWYgKGVuY29kaW5nID09IG51bGwpIHsKIAkJCUNoYXJzZXREZXRlY3RvciBkZXQgPSBuZXcgQ2hhcnNldERldGVjdG9yKCk7CiAJCQlkZXQuc2V0VGV4dChzYW1wbGUpOwogCQkJQ2hhcnNldE1hdGNoIG1hdGNoID0gZGV0LmRldGVjdCgpOwotCQkJaWYgKG1hdGNoIT1udWxsKSB7CisJCQlpZiAobWF0Y2ggIT0gbnVsbCkgewogCQkJCWVuY29kaW5nID0gQ2hhcnNldC5mb3JOYW1lKG1hdGNoLmdldE5hbWUoKSk7CiAJCQl9IGVsc2UgewogCQkJCS8vIGZhbGxiYWNrOiBVc2UgU3lzdGVtIGVuY29kaW5nCkBAIC01Nyw1ICs1Nyw1IEBACiAJCX0KIAkJcmV0dXJuIGVuY29kaW5nOwogCX0KLQkKKwogfQpkaWZmIC0tZ2l0IGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UveHRlbmQvZXhwcmVzc2lvbi9BYnN0cmFjdEV4cHJlc3Npb25zVXNpbmdXb3JrZmxvd0FkdmljZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UveHRlbmQvZXhwcmVzc2lvbi9BYnN0cmFjdEV4cHJlc3Npb25zVXNpbmdXb3JrZmxvd0FkdmljZS5qYXZhCmluZGV4IGE0ZGJiNzYuLjA0YmMxYmIgMTAwNjQ0Ci0tLSBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL2V4cHJlc3Npb24vQWJzdHJhY3RFeHByZXNzaW9uc1VzaW5nV29ya2Zsb3dBZHZpY2UuamF2YQorKysgYi9wbHVnaW5zL29yZy5lY2xpcHNlLnh0ZW5kL3NyYy9vcmcvZWNsaXBzZS94dGVuZC9leHByZXNzaW9uL0Fic3RyYWN0RXhwcmVzc2lvbnNVc2luZ1dvcmtmbG93QWR2aWNlLmphdmEKQEAgLTIzLDcgKzIzLDYgQEAKICAqIEJhc2UgY2xhc3MgZm9yIHdvcmtmbG93IGFkdmljZXMgZm9yIGNvbXBvbmVudHMgd2hpY2ggdXNlIGV4cHJlc3Npb25zLgogICogCiAgKiBAYXV0aG9yIEthcnN0ZW4gVGhvbXMKLSAqIEBzaW5jZSA0LjMuMQogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFeHByZXNzaW9uc1VzaW5nV29ya2Zsb3dBZHZpY2UgZXh0ZW5kcyBBYnN0cmFjdFdvcmtmbG93QWR2aWNlIHsKIAlwcm90ZWN0ZWQgZmluYWwgTGlzdDxNZXRhTW9kZWw+IG1ldGFNb2RlbHMgPSBuZXcgQXJyYXlMaXN0PE1ldGFNb2RlbD4oKTsKZGlmZiAtLWdpdCBhL3BsdWdpbnMvb3JnLmVjbGlwc2UueHRlbmQvc3JjL29yZy9lY2xpcHNlL3h0ZW5kL2V4cHJlc3Npb24vSUV4ZWN1dGlvbkNvbnRleHRBd2FyZS5qYXZhIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UveHRlbmQvZXhwcmVzc2lvbi9JRXhlY3V0aW9uQ29udGV4dEF3YXJlLmphdmEKaW5kZXggZDNkNGEyYi4uYzgyNDhiZiAxMDA2NDQKLS0tIGEvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UveHRlbmQvZXhwcmVzc2lvbi9JRXhlY3V0aW9uQ29udGV4dEF3YXJlLmphdmEKKysrIGIvcGx1Z2lucy9vcmcuZWNsaXBzZS54dGVuZC9zcmMvb3JnL2VjbGlwc2UveHRlbmQvZXhwcmVzc2lvbi9JRXhlY3V0aW9uQ29udGV4dEF3YXJlLmphdmEKQEAgLTExLDkgKzExLDggQEAKICAqIEltcGxlbWVudG9ycyBvZiB0aGlzIGludGVyZmFjZSBjYW4gcmV0cmlldmUgYW4gRXhlY3V0aW9uQ29udGV4dC4KICAqIAogICogQGF1dGhvciBLYXJzdGVuIFRob21zIC0gSW5pdGlhbCBjb250cmlidXRpb24gYW5kIEFQSQotICogQHNpbmNlIDEuMC4wLU00CiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgSUV4ZWN1dGlvbkNvbnRleHRBd2FyZSB7Ci0JCi0Jdm9pZCBzZXRFeGVjdXRpb25Db250ZXh0IChFeGVjdXRpb25Db250ZXh0IGN0eCk7CisKKwl2b2lkIHNldEV4ZWN1dGlvbkNvbnRleHQoRXhlY3V0aW9uQ29udGV4dCBjdHgpOwogfQpkaWZmIC0tZ2l0IGEvcmVsZW5nL29yZy5lY2xpcHNlLnhwYW5kLnJlbGVuZy9JbnN0YWxsIEJ1Y2ttaW5zdGVyLmxhdW5jaCBiL3JlbGVuZy9vcmcuZWNsaXBzZS54cGFuZC5yZWxlbmcvSW5zdGFsbCBCdWNrbWluc3Rlci5sYXVuY2gKaW5kZXggM2E3MzViMi4uOGU2NzM5ZiAxMDA2NDQKLS0tIGEvcmVsZW5nL29yZy5lY2xpcHNlLnhwYW5kLnJlbGVuZy9JbnN0YWxsIEJ1Y2ttaW5zdGVyLmxhdW5jaAorKysgYi9yZWxlbmcvb3JnLmVjbGlwc2UueHBhbmQucmVsZW5nL0luc3RhbGwgQnVja21pbnN0ZXIubGF1bmNoCkBAIC0xMywxMyArMTMsMTQgQEAKIDxib29sZWFuQXR0cmlidXRlIGtleT0iY2xlYXJ3c2xvZyIgdmFsdWU9ImZhbHNlIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0iY29uZmlnTG9jYXRpb24iIHZhbHVlPSIke3dvcmtzcGFjZV9sb2N9Ly5tZXRhZGF0YS8ucGx1Z2lucy9vcmcuZWNsaXBzZS5wZGUuY29yZS9JbnN0YWxsIEJ1Y2ttaW5zdGVyIi8+CiA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImRlZmF1bHQiIHZhbHVlPSJ0cnVlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0iZGVzZWxlY3RlZF93b3Jrc3BhY2VfcGx1Z2lucyIgdmFsdWU9IlNhbmRib3gsYnVnNDAwMTA1LGd0cy5jb21tb24uaW50bXNnLmdlbmVyYXRvcixqYXZvbHV0aW9uLG15LmdlbmVyYXRvci5wcm9qZWN0LG9hd19vdXRwdXRfcGVyZm9ybWFuY2V0ZXN0LG9yZy5lY2xpcHNlLmVtZi5nZW5lcmljLmVkaXRvcixvcmcuZWNsaXBzZS5lbWYuZ2VuZXJpYy5lZGl0b3IudGVzdHMsb3JnLmVjbGlwc2UuZW1mLm13ZS5jb3JlLG9yZy5lY2xpcHNlLmVtZi5td2UudWksb3JnLmVjbGlwc2UuZW1mLm13ZS51aS5zaW1wbGVFZGl0b3Isb3JnLmVjbGlwc2UuZW1mLm13ZS51dGlscyxvcmcuZWNsaXBzZS5lbWYubXdlMi5saWIsb3JnLmVjbGlwc2UuZW1mLm13ZTIucnVudGltZSxvcmcuZWNsaXBzZS54cGFuZCxvcmcuZWNsaXBzZS54cGFuZC5hY3Rpdml0aWVzLG9yZy5lY2xpcHNlLnhwYW5kLmRvYyxvcmcuZWNsaXBzZS54cGFuZC5kb2MuYXBpX2dlbmVyYXRvcixvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcyxvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcy5zdXBwb3J0LmNkdCxvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcy54c2QubTJtLmVjb3JlMnhzZCxvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcy54c2QubTJtLm5ld3MyeGh0bWwsb3JnLmVjbGlwc2UueHBhbmQuZXhhbXBsZXMueHNkLm0ybS54bWwyc3ZnLG9yZy5lY2xpcHNlLnhwYW5kLmV4YW1wbGVzLnhzZC5tMnQuZ2VubW9kZWwsb3JnLmVjbGlwc2UueHBhbmQuZXhhbXBsZXMueHNkLm0ydC5taW5pbWFsLG9yZy5lY2xpcHNlLnhwYW5kLmV4YW1wbGVzLnhzZC5tMnQueG1sMmphdmF3aXphcmQsb3JnLmVjbGlwc2UueHBhbmQuaW5jcmVtZW50YWwsb3JnLmVjbGlwc2UueHBhbmQuaW5jcmVtZW50YWwudGVzdHMsb3JnLmVjbGlwc2UueHBhbmQuc3VwcG9ydC5jZHQsb3JnLmVjbGlwc2UueHBhbmQudGVzdHMsb3JnLmVjbGlwc2UueHBhbmQudWksb3JnLmVjbGlwc2UueHRlbmQsb3JnLmVjbGlwc2UueHRlbmQuYmFja2VuZCxvcmcuZWNsaXBzZS54dGVuZC5iYWNrZW5kLmNvbXBpbGVyLG9yZy5lY2xpcHNlLnh0ZW5kLmJhY2tlbmQudGVzdCxvcmcuZWNsaXBzZS54dGVuZC5iYWNrZW5kLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLmJhY2tlbmQudW1sMnR5cGVzLG9yZy5lY2xpcHNlLnh0ZW5kLmJhY2tlbmQudW1sMnR5cGVzLnRlc3Qsb3JnLmVjbGlwc2UueHRlbmQuYmFja2VuZC54c2R0eXBlcyxvcmcuZWNsaXBzZS54dGVuZC5jaGVjay51aSxvcmcuZWNsaXBzZS54dGVuZC5taWRkbGVlbmQub2xkLnRlc3Qsb3JnLmVjbGlwc2UueHRlbmQubWlkZGxlZW5kLnhwYW5kLG9yZy5lY2xpcHNlLnh0ZW5kLm1pZGRsZWVuZC54cGFuZC50ZXN0LG9yZy5lY2xpcHNlLnh0ZW5kLm1pZGRsZWVuZC54cGFuZC51aSxvcmcuZWNsaXBzZS54dGVuZC5taWRkbGVlbmQueHRlbmQsb3JnLmVjbGlwc2UueHRlbmQubWlkZGxlZW5kLnh0ZW5kLnRlc3Qsb3JnLmVjbGlwc2UueHRlbmQubWlkZGxlZW5kLnh0ZW5kLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnByb2ZpbGVyLG9yZy5lY2xpcHNlLnh0ZW5kLnByb2ZpbGVyLnRlc3RzLG9yZy5lY2xpcHNlLnh0ZW5kLnNoYXJlZC51aSxvcmcuZWNsaXBzZS54dGVuZC5zaGFyZWQudWkudGVzdCxvcmcuZWNsaXBzZS54dGVuZC50ZXN0cyxvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZixvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZi50ZXN0cyxvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZi51aSxvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIsb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0ueHNkLG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0ueHNkLnRlc3RzLG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0ueHNkLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnV0aWwuc3RkbGliLG9yZy5lY2xpcHNlLnh0ZW5kLnV0aWwuc3RkbGliLnRlc3RzLG9yZy5lY2xpcHNlLnh0ZW5kLnV0aWwudW1sMmVjb3JlLHV0ZjgudGVzdC5nZW5lcmF0b3IseHBhbmQub2NsLnRlc3QseHBhbmQub2NsLnRlc3QuZWRpdCx4cGFuZC5vY2wudGVzdC5lZGl0b3IseHBhbmQub2NsLnRlc3QuZ2VuZXJhdG9yLHhwYW5kLnVtbC5zYW1wbGUiLz4KKzxzdHJpbmdBdHRyaWJ1dGUga2V5PSJkZXNlbGVjdGVkX3dvcmtzcGFjZV9wbHVnaW5zIiB2YWx1ZT0ib3JnLmVjbGlwc2UuZW1mLmdlbmVyaWMuZWRpdG9yLG9yZy5lY2xpcHNlLmVtZi5nZW5lcmljLmVkaXRvci50ZXN0cyxvcmcuZWNsaXBzZS54cGFuZCxvcmcuZWNsaXBzZS54cGFuZC5hY3Rpdml0aWVzLG9yZy5lY2xpcHNlLnhwYW5kLmRvYyxvcmcuZWNsaXBzZS54cGFuZC5kb2MuYXBpX2dlbmVyYXRvcixvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcyxvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcy5zdXBwb3J0LmNkdCxvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcy54c2QubTJtLmVjb3JlMnhzZCxvcmcuZWNsaXBzZS54cGFuZC5leGFtcGxlcy54c2QubTJtLm5ld3MyeGh0bWwsb3JnLmVjbGlwc2UueHBhbmQuZXhhbXBsZXMueHNkLm0ybS54bWwyc3ZnLG9yZy5lY2xpcHNlLnhwYW5kLmV4YW1wbGVzLnhzZC5tMnQuZ2VubW9kZWwsb3JnLmVjbGlwc2UueHBhbmQuZXhhbXBsZXMueHNkLm0ydC5taW5pbWFsLG9yZy5lY2xpcHNlLnhwYW5kLmV4YW1wbGVzLnhzZC5tMnQueG1sMmphdmF3aXphcmQsb3JnLmVjbGlwc2UueHBhbmQuaW5jcmVtZW50YWwsb3JnLmVjbGlwc2UueHBhbmQuaW5jcmVtZW50YWwudGVzdHMsb3JnLmVjbGlwc2UueHBhbmQuc3VwcG9ydC5jZHQsb3JnLmVjbGlwc2UueHBhbmQudGVzdHMsb3JnLmVjbGlwc2UueHBhbmQudWksb3JnLmVjbGlwc2UueHRlbmQsb3JnLmVjbGlwc2UueHRlbmQuYmFja2VuZCxvcmcuZWNsaXBzZS54dGVuZC5iYWNrZW5kLmNvbXBpbGVyLG9yZy5lY2xpcHNlLnh0ZW5kLmJhY2tlbmQudGVzdCxvcmcuZWNsaXBzZS54dGVuZC5iYWNrZW5kLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLmJhY2tlbmQudW1sMnR5cGVzLG9yZy5lY2xpcHNlLnh0ZW5kLmJhY2tlbmQudW1sMnR5cGVzLnRlc3Qsb3JnLmVjbGlwc2UueHRlbmQuYmFja2VuZC54c2R0eXBlcyxvcmcuZWNsaXBzZS54dGVuZC5jaGVjay51aSxvcmcuZWNsaXBzZS54dGVuZC5taWRkbGVlbmQub2xkLnRlc3Qsb3JnLmVjbGlwc2UueHRlbmQubWlkZGxlZW5kLnhwYW5kLG9yZy5lY2xpcHNlLnh0ZW5kLm1pZGRsZWVuZC54cGFuZC50ZXN0LG9yZy5lY2xpcHNlLnh0ZW5kLm1pZGRsZWVuZC54cGFuZC51aSxvcmcuZWNsaXBzZS54dGVuZC5taWRkbGVlbmQueHRlbmQsb3JnLmVjbGlwc2UueHRlbmQubWlkZGxlZW5kLnh0ZW5kLnRlc3Qsb3JnLmVjbGlwc2UueHRlbmQubWlkZGxlZW5kLnh0ZW5kLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnByb2ZpbGVyLG9yZy5lY2xpcHNlLnh0ZW5kLnByb2ZpbGVyLnRlc3RzLG9yZy5lY2xpcHNlLnh0ZW5kLnNoYXJlZC51aSxvcmcuZWNsaXBzZS54dGVuZC5zaGFyZWQudWkudGVzdCxvcmcuZWNsaXBzZS54dGVuZC50ZXN0cyxvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZixvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZi50ZXN0cyxvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLmVtZi51aSxvcmcuZWNsaXBzZS54dGVuZC50eXBlc3lzdGVtLnVtbDIsb3JnLmVjbGlwc2UueHRlbmQudHlwZXN5c3RlbS51bWwyLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0ueHNkLG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0ueHNkLnRlc3RzLG9yZy5lY2xpcHNlLnh0ZW5kLnR5cGVzeXN0ZW0ueHNkLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnVpLG9yZy5lY2xpcHNlLnh0ZW5kLnV0aWwuc3RkbGliLG9yZy5lY2xpcHNlLnh0ZW5kLnV0aWwuc3RkbGliLnRlc3RzLG9yZy5lY2xpcHNlLnh0ZW5kLnV0aWwudW1sMmVjb3JlIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0iZmVhdHVyZURlZmF1bHRMb2NhdGlvbiIgdmFsdWU9IndvcmtzcGFjZSIvPgogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9ImZlYXR1cmVQbHVnaW5SZXNvbHV0aW9uIiB2YWx1ZT0id29ya3NwYWNlIi8+CiA8Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9ImluY2x1ZGVPcHRpb25hbCIgdmFsdWU9InRydWUiLz4KIDxzdHJpbmdBdHRyaWJ1dGUga2V5PSJsb2NhdGlvbiIgdmFsdWU9IiR7d29ya3NwYWNlX2xvY30vLm1ldGFkYXRhL3J1bnRpbWUtcDIiLz4KKzxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5BVFRSX1VTRV9TVEFSVF9PTl9GSVJTVF9USFJFQUQiIHZhbHVlPSJ0cnVlIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIiB2YWx1ZT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSL29yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZS9KMlNFLTEuNSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuUFJPR1JBTV9BUkdVTUVOVFMiIHZhbHVlPSItb3MgJHt0YXJnZXQub3N9IC13cyAke3RhcmdldC53c30gLWFyY2ggJHt0YXJnZXQuYXJjaH0gLW5sICR7dGFyZ2V0Lm5sfSAtY29uc29sZUxvZyYjMTA7LXIgaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL2J1Y2ttaW5zdGVyL2hlYWRsZXNzLTQuMy8mIzEwOy1kICR7cHJvamVjdF9sb2M6b3JnLmVjbGlwc2UueHBhbmQucmVsZW5nfS9idWNrbWluc3RlciYjMTA7LXAgQnVja21pbnN0ZXImIzEwOy1pIG9yZy5lY2xpcHNlLmJ1Y2ttaW5zdGVyLmNtZGxpbmUucHJvZHVjdCwsb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIucGRlLG9yZy5lY2xpcHNlLmJ1Y2ttaW5zdGVyLnBkZS5zb3VyY2Usb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuY29yZS5zb3VyY2Usb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuZmV0Y2hlcixvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5qdW5pdCxvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5qdW5pdC5zb3VyY2Usb3JnLmVjbGlwc2UucGRlLmxhdW5jaGluZyIvPgorPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuUFJPR1JBTV9BUkdVTUVOVFMiIHZhbHVlPSItb3MgJHt0YXJnZXQub3N9IC13cyAke3RhcmdldC53c30gLWFyY2ggJHt0YXJnZXQuYXJjaH0gLW5sICR7dGFyZ2V0Lm5sfSAtY29uc29sZUxvZyYjMTA7LXIgaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL2J1Y2ttaW5zdGVyL2hlYWRsZXNzLTQuMi8saHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvdXBkYXRlcy8zLjgmIzEwOy1kICR7dXNlcl9ob21lZGlyfS9idWNrbWluc3RlciYjMTA7LXAgQnVja21pbnN0ZXImIzEwOy1pIG9yZy5lY2xpcHNlLmJ1Y2ttaW5zdGVyLmNtZGxpbmUucHJvZHVjdCxvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5wZGUsb3JnLmVjbGlwc2UuYnVja21pbnN0ZXIuZmV0Y2hlcixvcmcuZWNsaXBzZS5idWNrbWluc3Rlci5qdW5pdCxvcmcuZWNsaXBzZS5wZGUubGF1bmNoaW5nIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5TT1VSQ0VfUEFUSF9QUk9WSURFUiIgdmFsdWU9Im9yZy5lY2xpcHNlLnBkZS51aS53b3JrYmVuY2hDbGFzc3BhdGhQcm92aWRlciIvPgogPHN0cmluZ0F0dHJpYnV0ZSBrZXk9InBkZS52ZXJzaW9uIiB2YWx1ZT0iMy4zIi8+CiA8c3RyaW5nQXR0cmlidXRlIGtleT0icHJvZHVjdCIgdmFsdWU9Im9yZy5lY2xpcHNlLnNkay5pZGUiLz4KZGlmZiAtLWdpdCBhL3JlbGVuZy9vcmcuZWNsaXBzZS54cGFuZC5yZWxlbmcvYXBpLWJhc2VsaW5lL2J1aWxkLnhtbCBiL3JlbGVuZy9vcmcuZWNsaXBzZS54cGFuZC5yZWxlbmcvYXBpLWJhc2VsaW5lL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJlMDJhOC4uMDAwMDAwMAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UueHBhbmQucmVsZW5nL2FwaS1iYXNlbGluZS9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08cHJvamVjdCBuYW1lPSJYcGFuZCBBUEkgQmFzZWxpbmUiIGRlZmF1bHQ9InNldHVwIiBiYXNlZGlyPSIuLiI+Ci0JPHByb3BlcnR5IG5hbWU9InRwLmJ1aWxkLnJvb3QiIHZhbHVlPSIuLi9idWlsZCIvPgotCi0JPHRhcmdldCBuYW1lPSJzZXR1cCIgZGVwZW5kcz0iZmV0Y2gtYmFzZWxpbmUsYnVpbGQtdGFyZ2V0cGxhdGZvcm0iPgotCQk8Y29weSB0b2Rpcj0iYXBpLWJhc2VsaW5lL3RhcmdldC94cGFuZCI+Ci0JCQk8ZmlsZXNldCBkaXI9IiR7dHAuYnVpbGQucm9vdH0vdGFyZ2V0LnBsYXRmb3JtIi8+Ci0JCTwvY29weT4KLQk8L3RhcmdldD4KLQkKLQk8dGFyZ2V0IG5hbWU9Ii1pbml0Ij4KLQkJPGF2YWlsYWJsZSBwcm9wZXJ0eT0iZXhpc3RzLnRwIiBmaWxlPSJ0YXJnZXQvdGFyZ2V0LnBsYXRmb3JtL2FydGlmYWN0cy54bWwiLz4KLQk8L3RhcmdldD4KLQkKLQotCTx0YXJnZXQgbmFtZT0iZmV0Y2gtYmFzZWxpbmUiIGRlcGVuZHM9Ii1pbml0IiA+Ci0JCTxta2RpciBkaXI9InRhcmdldC94cGFuZCIvPgotCQk8Z2V0Ci0JCQlzcmM9Imh0dHA6Ly9taXJyb3IubmV0Y29sb2duZS5kZS9lY2xpcHNlL21vZGVsaW5nL20ydC94cGFuZC9kb3dubG9hZHMvZHJvcHMvMS4zLjAvUjIwMTMwMjI2MDU0MS9tMnQteHBhbmQtVXBkYXRlLTEuMy4wLnppcCIKLQkJCWRlc3Q9ImFwaS1iYXNlbGluZS90YXJnZXQvbTJ0LXhwYW5kLVVwZGF0ZS0xLjMuMC56aXAiCi0JCQlza2lwZXhpc3Rpbmc9InRydWUiCi0JCQkvPgotCQk8dW56aXAgc3JjPSJhcGktYmFzZWxpbmUvdGFyZ2V0L20ydC14cGFuZC1VcGRhdGUtMS4zLjAuemlwIiBkZXN0PSJhcGktYmFzZWxpbmUvdGFyZ2V0L3hwYW5kIi8+Ci0JPC90YXJnZXQ+Ci0JCi0JPHRhcmdldCBuYW1lPSJidWlsZC10YXJnZXRwbGF0Zm9ybSIgZGVwZW5kcz0iLWluaXQiIHVubGVzcz0iZXhpc3RzLnRwIgotCQlkZXNjcmlwdGlvbj0iQ2FsbCBsb2NhbCBCdWNrbWluc3RlciBUYXJnZXQgUGxhdGZvcm0gYnVpbGQiPgotCQk8YW50IGFudGZpbGU9InJlbGVuZy9sb2NhbC9sb2NhbC1idWlsZC5hbnQiPgotCQkJPHByb3BlcnR5IG5hbWU9ImJ1aWxkLnJvb3QiIHZhbHVlPSIuLi9idWlsZCIvPgotCQk8L2FudD4KLQk8L3RhcmdldD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UueHBhbmQucmVsZW5nL2FwaS1iYXNlbGluZS9yZWFkbWUudHh0IGIvcmVsZW5nL29yZy5lY2xpcHNlLnhwYW5kLnJlbGVuZy9hcGktYmFzZWxpbmUvcmVhZG1lLnR4dAppbmRleCA0M2FjMTY2Li44MzBkNGM0IDEwMDY0NAotLS0gYS9yZWxlbmcvb3JnLmVjbGlwc2UueHBhbmQucmVsZW5nL2FwaS1iYXNlbGluZS9yZWFkbWUudHh0CisrKyBiL3JlbGVuZy9vcmcuZWNsaXBzZS54cGFuZC5yZWxlbmcvYXBpLWJhc2VsaW5lL3JlYWRtZS50eHQKQEAgLTEsNyArMSwxMCBAQAogSG93IHRvIHNldCBBUEkgQmFzZWxpbmUuCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotMS4gUnVuICJJbnN0YWxsIEJ1Y2ttaW5zdGVyLmxhdW5jaCIKLTIuIFJ1biBBbnQgc2NyaXB0IGJ1aWxkLnhtbAotNC4gT3BlbiBBUEktQmFzZWxpbmUgc2V0dGluZ3MKLTUuIEFkZCBuZXcgYmFzZWxpbmUgbmFtZSBYcGFuZCwgbG9jYXRpb24ge3lvdXJfbG9jYWxfZ2l0X3JlcG99L3JlbGVuZy9vcmcuZWNsaXBzZS54cGFuZC5yZWxlbmcvYXBpLWJhc2VsaW5lL3hwYW5kL3RhcmdldApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzEuIE9wZW4gYXBpLWJhc2VsaW5lLnRhcmdldAorMi4gQ2xpY2sgRXhwb3J0IGljb24gaW4gdGhlIHVwcGVyIHJpZ2h0IGNvcm5lcgorMy4gU2VsZWN0IGRlc3RpbmF0aW9uOiA8VVNFUl9IT01FPi9odWRzb25idWlsZC94cGFuZC1idWlsZC9hcGktYmFzZWxpbmUKKzQuIE9wZW4gV29ya3NwYWNlIFByZWZlcmVuY2VzOiBQbHVnLWluIERldmVsb3BtZW50IC8gQVBJIEJhc2VsaW5lcworNS4gQ3JlYXRlIEJhc2VsaW5lCisgICAtIE5hbWU6IFhwYW5kIEFQSSBCYXNlbGluZQorICAgLSBMb2NhdGlvbjogPFVTRVJfSE9NRT4vaHVkc29uYnVpbGQveHBhbmQtYnVpbGQvYXBpLWJhc2VsaW5lCmRpZmYgLS1naXQgYS9yZWxlbmcvb3JnLmVjbGlwc2UueHBhbmQucmVsZW5nL3JlbGVuZy8uZ2l0aWdub3JlIGIvcmVsZW5nL29yZy5lY2xpcHNlLnhwYW5kLnJlbGVuZy9yZWxlbmcvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmI4OGQzCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZW5nL29yZy5lY2xpcHNlLnhwYW5kLnJlbGVuZy9yZWxlbmcvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACisvLkRTX1N0b3JlCg==