ZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGJiMmI2YjYuLjE3MzIzOWQgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMjEsNCArMjEsMyBAQAogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBFeHBvcnQtUGFja2FnZTogY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmCi1JbXBvcnQtUGFja2FnZTogY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnNjb3BpbmcKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvYmluLy5wcm9qZWN0IGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9iaW4vLnByb2plY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4OWE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3IvYmluLy5wcm9qZWN0CkBAIC0wLDAgKzEsMzQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdERlc2NyaXB0aW9uPgorCTxuYW1lPmNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3I8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS54dGV4dC51aS5zaGFyZWQueHRleHRCdWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgorCQkJPGFyZ3VtZW50cz4KKwkJCTwvYXJndW1lbnRzPgorCQk8L2J1aWxkQ29tbWFuZD4KKwkJPGJ1aWxkQ29tbWFuZD4KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCQk8YnVpbGRDb21tYW5kPgorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+CisJCTxuYXR1cmU+b3JnLmVjbGlwc2UueHRleHQudWkuc2hhcmVkLnh0ZXh0TmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvR2VuZXJhdGVQcm90b2J1Zi5td2UyIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL0dlbmVyYXRlUHJvdG9idWYubXdlMgppbmRleCA0NzNhMDE2Li4wOTc4NTJiIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvR2VuZXJhdGVQcm90b2J1Zi5td2UyCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9HZW5lcmF0ZVByb3RvYnVmLm13ZTIKQEAgLTQyLDE0ICs0MiwxNCBAQAogICAgICAgdXJpID0gZ3JhbW1hclVSSQogICAgICAgZmlsZUV4dGVuc2lvbnMgPSBmaWxlLmV4dGVuc2lvbnMKIAotICAgICAgLy8gSmF2YSBBUEl0byBhY2Nlc3MgZ3JhbW1hciBlbGVtZW50cyAocmVxdWlyZWQgYnkgc2V2ZXJhbCBvdGhlciBmcmFnbWVudHMpCisgICAgICAvLyBKYXZhIEFQSSB0byBhY2Nlc3MgZ3JhbW1hciBlbGVtZW50cyAocmVxdWlyZWQgYnkgc2V2ZXJhbCBvdGhlciBmcmFnbWVudHMpCiAgICAgICBmcmFnbWVudCA9IGdyYW1tYXJBY2Nlc3MuR3JhbW1hckFjY2Vzc0ZyYWdtZW50IHt9CiAKLSAgICAgIC8vIGdlbmVyYXRlcyBKYXZhIEFQSWZvciB0aGUgZ2VuZXJhdGVkIEVQYWNrYWdlcworICAgICAgLy8gZ2VuZXJhdGVzIEphdmEgQVBJIGZvciB0aGUgZ2VuZXJhdGVkIEVQYWNrYWdlcyAKICAgICAgIGZyYWdtZW50ID0gZWNvcmUuRU1GR2VuZXJhdG9yRnJhZ21lbnQgewogICAgICAgLy8gcmVmZXJlbmNlZEdlbk1vZGVscyA9ICJ1cmkgdG8gZ2VubW9kZWwsIHVyaSB0byBuZXh0IGdlbm1vZGVsIgogICAgICAgfQotCisgICAgICAKICAgICAgIC8vIFNlcmlhbGl6ZXIgMi4wCiAgICAgICBmcmFnbWVudCA9IHNlcmlhbGl6ZXIuU2VyaWFsaXplckZyYWdtZW50IHsKICAgICAgICAgZ2VuZXJhdGVTdHViID0gZmFsc2UKQEAgLTU4LDcgKzU4LDcgQEAKICAgICAgIC8vIHRoZSBzZXJpYWxpemF0aW9uIGNvbXBvbmVudAogICAgICAgLy8gZnJhZ21lbnQgPSBwYXJzZVRyZWVDb25zdHJ1Y3Rvci5QYXJzZVRyZWVDb25zdHJ1Y3RvckZyYWdtZW50IHt9CiAKLSAgICAgIC8vIGEgY3VzdG9tIFJlc291cmNlRmFjdG9yeSBmb3IgdXNlIHdpdGggRU1GCisgICAgICAvLyBhIGN1c3RvbSBSZXNvdXJjZUZhY3RvcnkgZm9yIHVzZSB3aXRoIEVNRiAKICAgICAgIGZyYWdtZW50ID0gcmVzb3VyY2VGYWN0b3J5LlJlc291cmNlRmFjdG9yeUZyYWdtZW50IHsKICAgICAgICAgZmlsZUV4dGVuc2lvbnMgPSBmaWxlLmV4dGVuc2lvbnMKICAgICAgIH0KQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgLy8gfQogICAgICAgfQogCi0gICAgICAvLyBqYXZhLWJhc2VkIEFQSWZvciB2YWxpZGF0aW9uCisgICAgICAvLyBqYXZhLWJhc2VkIEFQSSBmb3IgdmFsaWRhdGlvbiAKICAgICAgIGZyYWdtZW50ID0gdmFsaWRhdGlvbi5KYXZhVmFsaWRhdG9yRnJhZ21lbnQgewogICAgICAgLy8gY29tcG9zZWRDaGVjayA9ICJvcmcuZWNsaXBzZS54dGV4dC52YWxpZGF0aW9uLkltcG9ydFVyaVZhbGlkYXRvciIKICAgICAgIC8vIGNvbXBvc2VkQ2hlY2sgPSAib3JnLmVjbGlwc2UueHRleHQudmFsaWRhdGlvbi5OYW1lc0FyZVVuaXF1ZVZhbGlkYXRvciIKQEAgLTgxLDQxICs4MSw0MSBAQAogICAgICAgLy8gZnJhZ21lbnQgPSBzY29waW5nLkltcG9ydFVSSVNjb3BpbmdGcmFnbWVudCB7fQogICAgICAgLy8gZnJhZ21lbnQgPSBleHBvcnRpbmcuU2ltcGxlTmFtZXNGcmFnbWVudCB7fQogCi0gICAgICAvLyBzY29waW5nIGFuZCBleHBvcnRpbmcgQVBJCi0gICAgICBmcmFnbWVudCA9IHNjb3BpbmcuUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50IHt9CisgICAgICAvLyBzY29waW5nIGFuZCBleHBvcnRpbmcgQVBJIAorICAgICAgZnJhZ21lbnQgPSBzY29waW5nLkltcG9ydE5hbWVzcGFjZXNTY29waW5nRnJhZ21lbnQge30KICAgICAgIGZyYWdtZW50ID0gZXhwb3J0aW5nLlF1YWxpZmllZE5hbWVzRnJhZ21lbnQge30KICAgICAgIGZyYWdtZW50ID0gYnVpbGRlci5CdWlsZGVySW50ZWdyYXRpb25GcmFnbWVudCB7fQogCi0gICAgICAvLyBmb3JtYXR0ZXIgQVBJCisgICAgICAvLyBmb3JtYXR0ZXIgQVBJIAogICAgICAgZnJhZ21lbnQgPSBmb3JtYXR0aW5nLkZvcm1hdHRlckZyYWdtZW50IHt9CiAKLSAgICAgIC8vIGxhYmVsaW5nIEFQSQorICAgICAgLy8gbGFiZWxpbmcgQVBJIAogICAgICAgZnJhZ21lbnQgPSBsYWJlbGluZy5MYWJlbFByb3ZpZGVyRnJhZ21lbnQge30KIAotICAgICAgLy8gb3V0bGluZSBBUEkKKyAgICAgIC8vIG91dGxpbmUgQVBJIAogICAgICAgZnJhZ21lbnQgPSBvdXRsaW5lLk91dGxpbmVUcmVlUHJvdmlkZXJGcmFnbWVudCB7fQogICAgICAgZnJhZ21lbnQgPSBvdXRsaW5lLlF1aWNrT3V0bGluZUZyYWdtZW50IHt9CiAKLSAgICAgIC8vIHF1aWNrZml4IEFQSQorICAgICAgLy8gcXVpY2tmaXggQVBJIAogICAgICAgZnJhZ21lbnQgPSBxdWlja2ZpeC5RdWlja2ZpeFByb3ZpZGVyRnJhZ21lbnQge30KIAogICAgICAgLy8gcmVuYW1lIHJlZmFjdG9yaW5nCiAgICAgICBmcmFnbWVudCA9IHJlZmFjdG9yaW5nLlJlZmFjdG9yRWxlbWVudE5hbWVGcmFnbWVudCB7fQogCi0gICAgICAvLyBjb250ZW50IGFzc2lzdCBBUEkKKyAgICAgIC8vIGNvbnRlbnQgYXNzaXN0IEFQSSAgCiAgICAgICBmcmFnbWVudCA9IGNvbnRlbnRBc3Npc3QuSmF2YUJhc2VkQ29udGVudEFzc2lzdEZyYWdtZW50IHt9CiAKLSAgICAgIC8vIGdlbmVyYXRlcyBhIG1vcmUgbGlnaHR3ZWlnaHQgQW50bHIgcGFyc2VyIGFuZCBsZXhlciB0YWlsb3JlZCBmb3IgY29udGVudCBhc3Npc3QKKyAgICAgIC8vIGdlbmVyYXRlcyBhIG1vcmUgbGlnaHR3ZWlnaHQgQW50bHIgcGFyc2VyIGFuZCBsZXhlciB0YWlsb3JlZCBmb3IgY29udGVudCBhc3Npc3QgIAogICAgICAgZnJhZ21lbnQgPSBwYXJzZXIuYW50bHIuWHRleHRBbnRsclVpR2VuZXJhdG9yRnJhZ21lbnQgewogICAgICAgICAvLyBvcHRpb25zID0gewogICAgICAgICAvLyAgIGJhY2t0cmFjayA9IHRydWUKICAgICAgICAgLy8gfQogICAgICAgfQogCi0gICAgICAvLyBwcm9qZWN0IHdpemFyZCAob3B0aW9uYWwpCisgICAgICAvLyBwcm9qZWN0IHdpemFyZCAob3B0aW9uYWwpIAogICAgICAgLy8gZnJhZ21lbnQgPSBwcm9qZWN0V2l6YXJkLlNpbXBsZVByb2plY3RXaXphcmRGcmFnbWVudCB7Ci0gICAgICAvLyAgIGdlbmVyYXRvclByb2plY3ROYW1lID0gIiR7cHJvamVjdE5hbWV9LmdlbmVyYXRvciIKLSAgICAgIC8vICAgbW9kZWxGaWxlRXh0ZW5zaW9uID0gZmlsZS5leHRlbnNpb25zCisgICAgICAvLyAJCWdlbmVyYXRvclByb2plY3ROYW1lID0gIiR7cHJvamVjdE5hbWV9LmdlbmVyYXRvciIgCisgICAgICAvLwkJbW9kZWxGaWxlRXh0ZW5zaW9uID0gZmlsZS5leHRlbnNpb25zCiAgICAgICAvLyB9CiAgICAgfQogICB9CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWYueHRleHQgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWYueHRleHQKaW5kZXggMmI5OWVhNy4uMmEzOWJhNiAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL1Byb3RvYnVmLnh0ZXh0CisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9Qcm90b2J1Zi54dGV4dApAQCAtMjQsNyArMjQsNyBAQAogICBQYWNrYWdlIHwgSW1wb3J0IHwgT3B0aW9uIHwgQ29tcGxleFR5cGUgfCBUeXBlRXh0ZW5zaW9uIHwgU2VydmljZTsKIAogUGFja2FnZToKLSAgJ3BhY2thZ2UnIGltcG9ydGVkTmFtZXNwYWNlPVBhY2thZ2VOYW1lICgnOycpKzsKKyAgJ3BhY2thZ2UnIG5hbWU9UGFja2FnZU5hbWUgKCc7JykrOwogCiBQYWNrYWdlTmFtZToKICAgSWRPclJlc2VydmVkV29yZCAoJy4nIElkT3JSZXNlcnZlZFdvcmQpKjsKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5N2I2Y2MuLjAwMDAwMDAKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2IEdvb2dsZSBJbmMuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlCi0gKiBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKgotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqLwotcGFja2FnZSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuc2NvcGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LmdlbmVyYXRvci5zY29waW5nLkFic3RyYWN0U2NvcGluZ0ZyYWdtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuSUdsb2JhbFNjb3BlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuc2NvcGluZy5JU2NvcGVQcm92aWRlcjsKLQotcHVibGljIGNsYXNzIFByb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudCBleHRlbmRzIEFic3RyYWN0U2NvcGluZ0ZyYWdtZW50IHsKLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgSUdsb2JhbFNjb3BlUHJvdmlkZXI+IGdldEdsb2JhbFNjb3BlUHJvdmlkZXIoKSB7Ci0gICAgcmV0dXJuIFByb3RvYnVmSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlci5jbGFzczsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIElTY29wZVByb3ZpZGVyPiBnZXRMb2NhbFNjb3BlUHJvdmlkZXIoKSB7Ci0gICAgcmV0dXJuIFByb3RvYnVmSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlci5jbGFzczsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50LnhwdCBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5nZW5lcmF0b3Ivc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0TmFtZXNwYWNlc1Njb3BpbmdGcmFnbWVudC54cHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzYzZjYzUuLjAwMDAwMDAKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLmdlbmVyYXRvci9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnROYW1lc3BhY2VzU2NvcGluZ0ZyYWdtZW50LnhwdAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLatSRU27Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA4IGl0ZW1pcyBBRyAoaHR0cDovL3d3dy5pdGVtaXMuZXUpIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotq0VORFJFTbsKLQotq0lNUE9SVCBvcmc6OmVjbGlwc2U6Onh0ZXh0uwotCi0KLatERUZJTkUgYWRkVG9QbHVnaW5YbWxSdChTdHJpbmcgc2NvcGVQcm92aWRlclN1cGVyQ2xhc3NOYW1lLCBCb29sZWFuIGdlbmVyYXRlU3R1YiwgQm9vbGVhbiBnZW5lcmF0ZVh0ZW5kU3R1YikgRk9SIEdyYW1tYXK7q0VORERFRklORbsKLQotq0RFRklORSBhZGRUb1BsdWdpblhtbFVpKFN0cmluZyBzY29wZVByb3ZpZGVyU3VwZXJDbGFzc05hbWUsIEJvb2xlYW4gZ2VuZXJhdGVTdHViLCBCb29sZWFuIGdlbmVyYXRlWHRlbmRTdHViKSBGT1IgR3JhbW1hcrurRU5EREVGSU5FuwotCi2rREVGSU5FIGFkZFRvU3RhbmRhbG9uZVNldHVwKFN0cmluZyBzY29wZVByb3ZpZGVyU3VwZXJDbGFzc05hbWUsIEJvb2xlYW4gZ2VuZXJhdGVTdHViLCBCb29sZWFuIGdlbmVyYXRlWHRlbmRTdHViKSBGT1IgR3JhbW1hcrurRU5EREVGSU5FuwotCi2rREVGSU5FIGdlbmVyYXRlKFN0cmluZyBzY29wZVByb3ZpZGVyU3VwZXJDbGFzc05hbWUsIEJvb2xlYW4gZ2VuZXJhdGVTdHViLCBCb29sZWFuIGdlbmVyYXRlWHRlbmRTdHViKSBGT1IgR3JhbW1hcrsKLQmrRVhQQU5EIGdlbmVyYXRvcjo6c2NvcGluZzo6QWJzdHJhY3RTY29waW5nRnJhZ21lbnQ6OmdlbmVyYXRlU2NvcGVQcm92aWRlcihzY29wZVByb3ZpZGVyU3VwZXJDbGFzc05hbWUsIGdlbmVyYXRlU3R1YiwgZ2VuZXJhdGVYdGVuZFN0dWIpuwotq0VORERFRklORbsKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9Nb2RlbE9iamVjdHNfcGFja2FnZU9mX1Rlc3QuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9Nb2RlbE9iamVjdHNfcGFja2FnZU9mX1Rlc3QuamF2YQppbmRleCAwNDNkNDY3Li4wMTQxMmQ1IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvTW9kZWxPYmplY3RzX3BhY2thZ2VPZl9UZXN0LmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL01vZGVsT2JqZWN0c19wYWNrYWdlT2ZfVGVzdC5qYXZhCkBAIC00NCw3ICs0NCw3IEBACiAgIEBUZXN0IHB1YmxpYyB2b2lkIHNob3VsZF9yZXR1cm5fcGFja2FnZV9pZl9wcm90b19oYXNfb25lKCkgewogICAgIE1lc3NhZ2VGaWVsZCBmaWVsZCA9IHh0ZXh0LmZpbmQoImlkIiwgTWVzc2FnZUZpZWxkLmNsYXNzKTsKICAgICBQYWNrYWdlIGFQYWNrYWdlID0gbW9kZWxPYmplY3RzLnBhY2thZ2VPZihmaWVsZCk7Ci0gICAgYXNzZXJ0VGhhdChhUGFja2FnZS5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpLCBlcXVhbFRvKCJwZXJzb24udGVzdCIpKTsKKyAgICBhc3NlcnRUaGF0KGFQYWNrYWdlLmdldE5hbWUoKSwgZXF1YWxUbygicGVyc29uLnRlc3QiKSk7CiAgIH0KIAogICAvLyBzeW50YXggPSAicHJvdG8yIjsKZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlc19hcmVSZWxhdGVkX1Rlc3QuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi50ZXN0L3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlc19hcmVSZWxhdGVkX1Rlc3QuamF2YQppbmRleCBjOWFlZWM0Li4yZWJmYTEyIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvUGFja2FnZXNfYXJlUmVsYXRlZF9UZXN0LmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzX2FyZVJlbGF0ZWRfVGVzdC5qYXZhCkBAIC00OSwzNiArNDksMzYgQEAKICAgICAgICAgIm1heSIKICAgICB9OwogICAgIHAxID0gbW9jayhQYWNrYWdlLmNsYXNzKTsKLSAgICB3aGVuKHAxLmdldEltcG9ydGVkTmFtZXNwYWNlKCkpLnRoZW5SZXR1cm4oYmFzZU5hbWUpOworICAgIHdoZW4ocDEuZ2V0TmFtZSgpKS50aGVuUmV0dXJuKGJhc2VOYW1lKTsKICAgICBwMiA9IG1vY2soUGFja2FnZS5jbGFzcyk7CiAgIH0KIAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfcmV0dXJuX3RydWVfaWZfcGFja2FnZXNfYXJlX2VxdWFsKCkgewotICAgIHdoZW4ocDIuZ2V0SW1wb3J0ZWROYW1lc3BhY2UoKSkudGhlblJldHVybihiYXNlTmFtZSk7CisgICAgd2hlbihwMi5nZXROYW1lKCkpLnRoZW5SZXR1cm4oYmFzZU5hbWUpOwogICAgIGFzc2VydFRydWUocGFja2FnZXMuYXJlUmVsYXRlZChwMSwgcDIpKTsKICAgfQogCiAgIEBUZXN0IHB1YmxpYyB2b2lkIHNob3VsZF9yZXR1cm5fdHJ1ZV9zZWNvbmRfaXNfc3ViUGFja2FnZV9vZl9maXJzdCgpIHsKICAgICBmb3IgKFN0cmluZyBuYW1lIDogc3VicGFja2FnZU5hbWVzKSB7Ci0gICAgICB3aGVuKHAyLmdldEltcG9ydGVkTmFtZXNwYWNlKCkpLnRoZW5SZXR1cm4obmFtZSk7CisgICAgICB3aGVuKHAyLmdldE5hbWUoKSkudGhlblJldHVybihuYW1lKTsKICAgICAgIGFzc2VydFRydWUocGFja2FnZXMuYXJlUmVsYXRlZChwMSwgcDIpKTsKICAgICB9CiAgIH0KIAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfcmV0dXJuX3RydWVfZmlyc3RfaXNfc3ViUGFja2FnZV9vZl9zZWNvbmQoKSB7CiAgICAgZm9yIChTdHJpbmcgbmFtZSA6IHN1YnBhY2thZ2VOYW1lcykgewotICAgICAgd2hlbihwMi5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpKS50aGVuUmV0dXJuKG5hbWUpOworICAgICAgd2hlbihwMi5nZXROYW1lKCkpLnRoZW5SZXR1cm4obmFtZSk7CiAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmFyZVJlbGF0ZWQocDIsIHAxKSk7CiAgICAgfQogICB9CiAKICAgQFRlc3QgcHVibGljIHZvaWQgc2hvdWxkX3JldHVybl9mYWxzZV9pZl9zZWNvbmRfc3RhcnRzX3dpdGhfZmV3X3NlZ21lbnRzX29mX2ZpcnN0X2J1dF9pc19ub3Rfc3VicGFja2FnZSgpIHsKLSAgICB3aGVuKHAyLmdldEltcG9ydGVkTmFtZXNwYWNlKCkpLnRoZW5SZXR1cm4oIm1heS50aGUucmluZyIpOworICAgIHdoZW4ocDIuZ2V0TmFtZSgpKS50aGVuUmV0dXJuKCJtYXkudGhlLnJpbmciKTsKICAgICBhc3NlcnRGYWxzZShwYWNrYWdlcy5hcmVSZWxhdGVkKHAxLCBwMikpOwogICB9CiAKICAgQFRlc3QgcHVibGljIHZvaWQgc2hvdWxkX3JldHVybl9mYWxzZV9pZl9uYW1lc19hcmVfY29tcGxldGVseV9kaWZmZXJlbnQoKSB7Ci0gICAgd2hlbihwMi5nZXRJbXBvcnRlZE5hbWVzcGFjZSgpKS50aGVuUmV0dXJuKCJwZWFjZS5kb2ciKTsKKyAgICB3aGVuKHAyLmdldE5hbWUoKSkudGhlblJldHVybigicGVhY2UuZG9nIik7CiAgICAgYXNzZXJ0RmFsc2UocGFja2FnZXMuYXJlUmVsYXRlZChwMSwgcDIpKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL0ltcG9ydFZhbGlkYXRvcl9jaGVja1Vua25vd25TeW50YXhJbXBvcnRzX3dpdGhOb25Qcm90bzJJbXBvcnRzX1Rlc3RzLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yX2NoZWNrVW5rbm93blN5bnRheEltcG9ydHNfd2l0aE5vblByb3RvMkltcG9ydHNfVGVzdHMuamF2YQppbmRleCA0N2U0ZTZjLi5jOGI5MWJjIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yX2NoZWNrVW5rbm93blN5bnRheEltcG9ydHNfd2l0aE5vblByb3RvMkltcG9ydHNfVGVzdHMuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vSW1wb3J0VmFsaWRhdG9yX2NoZWNrVW5rbm93blN5bnRheEltcG9ydHNfd2l0aE5vblByb3RvMkltcG9ydHNfVGVzdHMuamF2YQpAQCAtMTAsNyArMTAsNyBAQAogCiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5qdW5pdC5jb3JlLkludGVncmF0aW9uVGVzdE1vZHVsZS5pbnRlZ3JhdGlvblRlc3RNb2R1bGU7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5qdW5pdC5jb3JlLlh0ZXh0UnVsZS5vdmVycmlkZVJ1bnRpbWVNb2R1bGVXaXRoOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5JTVBPUlRfX1BBVEg7CiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi52YWxpZGF0aW9uLk1lc3NhZ2VzLmltcG9ydGluZ1Vuc3VwcG9ydGVkU3ludGF4OwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS54dGV4dC52YWxpZGF0aW9uLlZhbGlkYXRpb25NZXNzYWdlQWNjZXB0b3IuSU5TSUdOSUZJQ0FOVF9JTkRFWDsKIGltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by5tb2NrOwpAQCAtMTA0LDcgKzEwNCw3IEBACiAgIHByaXZhdGUgdm9pZCB2ZXJpZnlUaGF0SW1wb3J0aW5nVW5rbm93blN5bnRheEZpbGVDcmVhdGVkV2FybmluZyhJbXBvcnQgYW5JbXBvcnQpIHsKICAgICB2ZXJpZnkobWVzc2FnZUFjY2VwdG9yKS5hY2NlcHRXYXJuaW5nKGltcG9ydGluZ1Vuc3VwcG9ydGVkU3ludGF4LAogICAgICAgICBhbkltcG9ydCwKLSAgICAgICAgUEFDS0FHRV9fSU1QT1JURURfTkFNRVNQQUNFLAorICAgICAgICBJTVBPUlRfX1BBVEgsCiAgICAgICAgIElOU0lHTklGSUNBTlRfSU5ERVgsCiAgICAgICAgIG51bGwsCiAgICAgICAgIG5ldyBTdHJpbmdbMF0pOwpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnRlc3Qvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL1Byb3RvYnVmSmF2YVZhbGlkYXRvcl9jaGVja09ubHlPbmVQYWNrYWdlRGVmaW5pdGlvbl9UZXN0LmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yX2NoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uX1Rlc3QuamF2YQppbmRleCA1YmY1NDU3Li5kZjg4MGY0IDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yX2NoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uX1Rlc3QuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudGVzdC9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yX2NoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uX1Rlc3QuamF2YQpAQCAtMTUsNyArMTUsNyBAQAogCiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5qdW5pdC5jb3JlLlVuaXRUZXN0TW9kdWxlLnVuaXRUZXN0TW9kdWxlOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuanVuaXQuY29yZS5YdGV4dFJ1bGUub3ZlcnJpZGVSdW50aW1lTW9kdWxlV2l0aDsKLWltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5QQUNLQUdFX19JTVBPUlRFRF9OQU1FU1BBQ0U7CitpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuUEFDS0FHRV9fTkFNRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMubXVsdGlwbGVQYWNrYWdlczsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uUHJvdG9idWZKYXZhVmFsaWRhdG9yLk1PUkVfVEhBTl9PTkVfUEFDS0FHRV9FUlJPUjsKIApAQCAtNTEsNyArNTEsNyBAQAogICBAVGVzdCBwdWJsaWMgdm9pZCBzaG91bGRfY3JlYXRlX2Vycm9yX2lmX3RoZXJlX2FyZV9tb3JlX3RoYW5fb25lX3BhY2thZ2VfZGVmaW5pdGlvbnMoKSB7CiAgICAgUGFja2FnZSBwID0geHRleHQuZmluZCgiY29tLmdvb2dsZS5lY2xpcHNlIiwgUGFja2FnZS5jbGFzcyk7CiAgICAgdmFsaWRhdG9yLmNoZWNrT25seU9uZVBhY2thZ2VEZWZpbml0aW9uKHApOwotICAgIHZlcmlmeShtZXNzYWdlQWNjZXB0b3IpLmFjY2VwdEVycm9yKG11bHRpcGxlUGFja2FnZXMsIHAsIFBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRSwgSU5TSUdOSUZJQ0FOVF9JTkRFWCwgTU9SRV9USEFOX09ORV9QQUNLQUdFX0VSUk9SKTsKKyAgICB2ZXJpZnkobWVzc2FnZUFjY2VwdG9yKS5hY2NlcHRFcnJvcihtdWx0aXBsZVBhY2thZ2VzLCBwLCBQQUNLQUdFX19OQU1FLCBJTlNJR05JRklDQU5UX0lOREVYLCBNT1JFX1RIQU5fT05FX1BBQ0tBR0VfRVJST1IpOwogICB9CiAKICAgLy8gc3ludGF4ID0gInByb3RvMiI7CmRpZmYgLS1naXQgYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9Qcm90b2J1ZlVpTW9kdWxlLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9Qcm90b2J1ZlVpTW9kdWxlLmphdmEKaW5kZXggYTQwZDQzYS4uMGI5MDE3MSAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvUHJvdG9idWZVaU1vZHVsZS5qYXZhCisrKyBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL1Byb3RvYnVmVWlNb2R1bGUuamF2YQpAQCAtNDMsNyArNDMsNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luOwogaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQuZG9jdW1lbnRhdGlvbi5JRU9iamVjdERvY3VtZW50YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5pZGUuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucGFyc2VyLklQYXJzZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucmVzb3VyY2UuSVJlc291cmNlU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnVpLkxhbmd1YWdlU3BlY2lmaWM7CkBAIC01NCw2ICs1Myw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnByZWZlcmVuY2VzLklQcmVmZXJlbmNlU3RvcmVJbml0aWFsaXplcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuQWJzdHJhY3RBbnRsclRva2VuVG9BdHRyaWJ1dGVJZE1hcHBlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC51aS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSUhpZ2hsaWdodGluZ0NvbmZpZ3VyYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkucmVzb3VyY2UuSVJlc291cmNlU2V0UHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkucmVzb3VyY2UuU2ltcGxlUmVzb3VyY2VTZXRQcm92aWRlcjsKIApkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL2h5cGVybGlua2luZy9Qcm90b2J1Zkh5cGVybGlua0RldGVjdG9yLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3IvaHlwZXJsaW5raW5nL1Byb3RvYnVmSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQppbmRleCBlNmI0YWE5Li5jMjQ4MmVlIDEwMDY0NAotLS0gYS9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3IvaHlwZXJsaW5raW5nL1Byb3RvYnVmSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi91aS9lZGl0b3IvaHlwZXJsaW5raW5nL1Byb3RvYnVmSHlwZXJsaW5rRGV0ZWN0b3IuamF2YQpAQCAtOCw3ICs4LDcgQEAKICAqLwogcGFja2FnZSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYudWkuZWRpdG9yLmh5cGVybGlua2luZzsKIAotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5JTVBPUlRfX1BBVEg7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5JTm9kZXM7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuSW1wb3J0czsKQEAgLTcxLDcgKzcxLDcgQEAKICAgICAgICAgaWYgKCFpbXBvcnRzLmlzUmVzb2x2ZWQoYW5JbXBvcnQpKSB7CiAgICAgICAgICAgcmV0dXJuIE5PX0hZUEVSTElOS1M7CiAgICAgICAgIH0KLSAgICAgICAgSU5vZGUgaW1wb3J0VXJpTm9kZSA9IG5vZGVzLmZpcnN0Tm9kZUZvckZlYXR1cmUoYW5JbXBvcnQsIFBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRSk7CisgICAgICAgIElOb2RlIGltcG9ydFVyaU5vZGUgPSBub2Rlcy5maXJzdE5vZGVGb3JGZWF0dXJlKGFuSW1wb3J0LCBJTVBPUlRfX1BBVEgpOwogICAgICAgICBpZiAoaW1wb3J0VXJpTm9kZS5nZXRMZW5ndGgoKSA9PSAwKSB7CiAgICAgICAgICAgcmV0dXJuIE5PX0hZUEVSTElOS1M7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi51aS9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3VpL2VkaXRvci9zeW50YXhjb2xvcmluZy9Qcm90b2J1ZlNlbWFudGljSGlnaGxpZ2h0aW5nQ2FsY3VsYXRvci5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL3N5bnRheGNvbG9yaW5nL1Byb3RvYnVmU2VtYW50aWNIaWdobGlnaHRpbmdDYWxjdWxhdG9yLmphdmEKaW5kZXggYjAwNDZhYS4uOTVhYjFiYiAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL3N5bnRheGNvbG9yaW5nL1Byb3RvYnVmU2VtYW50aWNIaWdobGlnaHRpbmdDYWxjdWxhdG9yLmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnVpL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdWkvZWRpdG9yL3N5bnRheGNvbG9yaW5nL1Byb3RvYnVmU2VtYW50aWNIaWdobGlnaHRpbmdDYWxjdWxhdG9yLmphdmEKQEAgLTM1LDExICszNSwxMCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LmlkZS5lZGl0b3Iuc3ludGF4Y29sb3JpbmcuSUhpZ2hsaWdodGVkUG9zaXRpb25BY2NlcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5pZGUuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQubm9kZW1vZGVsLklOb2RlOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnJlc291cmNlLlh0ZXh0UmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudXRpbC5DYW5jZWxJbmRpY2F0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQudWkuZWRpdG9yLnN5bnRheGNvbG9yaW5nLklTZW1hbnRpY0hpZ2hsaWdodGluZ0NhbGN1bGF0b3I7CiAKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5JTm9kZXM7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuSW5kZXhlZEVsZW1lbnRzOwpAQCAtNzgsMTEgKzc3LDcgQEAKICAgQEluamVjdCBwcml2YXRlIElOb2RlcyBub2RlczsKICAgQEluamVjdCBwcml2YXRlIE9wdGlvbnMgb3B0aW9uczsKIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcHJvdmlkZUhpZ2hsaWdodGluZ0ZvcigKLSAgICAgIFh0ZXh0UmVzb3VyY2UgcmVzb3VyY2UsCi0gICAgICBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yLAotICAgICAgQ2FuY2VsSW5kaWNhdG9yIGNhbmNlbEluZGljYXRvcikgeworICBAT3ZlcnJpZGUgcHVibGljIHZvaWQgcHJvdmlkZUhpZ2hsaWdodGluZ0ZvcihYdGV4dFJlc291cmNlIHJlc291cmNlLCBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yKSB7CiAgICAgaWYgKHJlc291cmNlID09IG51bGwpIHsKICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjIsOCArMTU3LDcgQEAKIAogICBwcml2YXRlIHZvaWQgaGlnaGxpZ2h0KEluZGV4ZWRFbGVtZW50IGVsZW1lbnQsIElIaWdobGlnaHRlZFBvc2l0aW9uQWNjZXB0b3IgYWNjZXB0b3IpIHsKICAgICBoaWdobGlnaHROYW1lKGVsZW1lbnQsIGFjY2VwdG9yLCBERUZBVUxUX0lEKTsKLSAgICBoaWdobGlnaHRGaXJzdEZlYXR1cmUoCi0gICAgICAgIGVsZW1lbnQsIGluZGV4ZWRFbGVtZW50cy5pbmRleEZlYXR1cmVPZihlbGVtZW50KSwgYWNjZXB0b3IsIE1FU1NBR0VfRklFTERfSU5ERVhfSUQpOworICAgIGhpZ2hsaWdodEZpcnN0RmVhdHVyZShlbGVtZW50LCBpbmRleGVkRWxlbWVudHMuaW5kZXhGZWF0dXJlT2YoZWxlbWVudCksIGFjY2VwdG9yLCBNRVNTQUdFX0ZJRUxEX0lOREVYX0lEKTsKICAgICBoaWdobGlnaHRPcHRpb25zKGVsZW1lbnQsIGFjY2VwdG9yKTsKICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEdyb3VwKSB7CiAgICAgICBoaWdobGlnaHQoKEdyb3VwKSBlbGVtZW50LCBhY2NlcHRvcik7CkBAIC0yNzUsMTggKzI2OSwxMSBAQAogICB9CiAKICAgcHJpdmF0ZSB2b2lkIGhpZ2hsaWdodE5hbWUoRU9iamVjdCBvLCBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yLCBTdHJpbmcgaGlnaGxpZ2h0SWQpIHsKLSAgICBFU3RydWN0dXJhbEZlYXR1cmUgZmVhdHVyZSA9IG8uZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCJuYW1lIik7Ci0gICAgaWYgKGZlYXR1cmUgPT0gbnVsbCkgewotICAgICAgZmVhdHVyZSA9IG8uZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCJpbXBvcnRlZE5hbWVzcGFjZSIpOwotICAgIH0KLSAgICBoaWdobGlnaHRGaXJzdEZlYXR1cmUobywgZmVhdHVyZSwgYWNjZXB0b3IsIGhpZ2hsaWdodElkKTsKKyAgICBoaWdobGlnaHRGaXJzdEZlYXR1cmUobywgby5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoIm5hbWUiKSwgYWNjZXB0b3IsIGhpZ2hsaWdodElkKTsKICAgfQogCi0gIHByaXZhdGUgdm9pZCBoaWdobGlnaHRGaXJzdEZlYXR1cmUoCi0gICAgICBFT2JqZWN0IHNlbWFudGljLAotICAgICAgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsCi0gICAgICBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yLAotICAgICAgU3RyaW5nIGhpZ2hsaWdodElkKSB7CisgIHByaXZhdGUgdm9pZCBoaWdobGlnaHRGaXJzdEZlYXR1cmUoRU9iamVjdCBzZW1hbnRpYywgRVN0cnVjdHVyYWxGZWF0dXJlIGZlYXR1cmUsCisgICAgICBJSGlnaGxpZ2h0ZWRQb3NpdGlvbkFjY2VwdG9yIGFjY2VwdG9yLCBTdHJpbmcgaGlnaGxpZ2h0SWQpIHsKICAgICBJTm9kZSBub2RlID0gbm9kZXMuZmlyc3ROb2RlRm9yRmVhdHVyZShzZW1hbnRpYywgZmVhdHVyZSk7CiAgICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL01FVEEtSU5GL01BTklGRVNULk1GIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGU3NjQzMWQuLjU4OWRhYzEgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTE4LDcgKzE4LDggQEAKICBvcmcuZWNsaXBzZS54dGV4dCwNCiAgb3JnLmVjbGlwc2UueHRleHQuZ2VuZXJhdG9yO3Jlc29sdXRpb246PW9wdGlvbmFsLA0KICBvcmcuZWNsaXBzZS54dGV4dC51aSwNCi0gb3JnLmVjbGlwc2UueHRleHQudXRpbA0KKyBvcmcuZWNsaXBzZS54dGV4dC51dGlsLA0KKyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuZ2VuZXJhdG9yO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCINCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOA0KIEV4cG9ydC1QYWNrYWdlOiBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYsDQogIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5jb252ZXJzaW9uLA0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL1Byb3RvYnVmUnVudGltZU1vZHVsZS5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWZSdW50aW1lTW9kdWxlLmphdmEKaW5kZXggMzc4ZmU4Ni4uNTQxYjFhMSAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWZSdW50aW1lTW9kdWxlLmphdmEKKysrIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvUHJvdG9idWZSdW50aW1lTW9kdWxlLmphdmEKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucmVzb3VyY2UuRmFzdFh0ZXh0UmVzb3VyY2VTZXQ7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnJlc291cmNlLkdsb2JhbFJlc291cmNlU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5zY29waW5nLkV4dGVuc2lvblJlZ2lzdHJ5UHJvdmlkZXI7CitpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnNjb3BpbmcuUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyOwogaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi52YWxpZGF0aW9uLlByb3RvYnVmUmVzb3VyY2VWYWxpZGF0b3I7CiBpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uUHJvdG9idWZTeW50YXhFcnJvck1lc3NhZ2VQcm92aWRlcjsKIGltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5CaW5kZXI7CkBAIC0yNywxMSArMjgsMTEgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5yZXNvdXJjZS5JR2xvYmFsU2VydmljZVByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnJlc291cmNlLlh0ZXh0UmVzb3VyY2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UueHRleHQucmVzb3VyY2UuWHRleHRSZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5zY29waW5nLklHbG9iYWxTY29wZVByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnZhbGlkYXRpb24uSVJlc291cmNlVmFsaWRhdG9yOwogCiAvKioKLSAqIFVzZSB0aGlzIGNsYXNzIHRvIHJlZ2lzdGVyIGNvbXBvbmVudHMgdG8gYmUgdXNlZCBhdCBydW50aW1lIC8gd2l0aG91dCB0aGUgRXF1aW5veCBleHRlbnNpb24KLSAqIHJlZ2lzdHJ5LgorICogVXNlIHRoaXMgY2xhc3MgdG8gcmVnaXN0ZXIgY29tcG9uZW50cyB0byBiZSB1c2VkIGF0IHJ1bnRpbWUgLyB3aXRob3V0IHRoZSBFcXVpbm94IGV4dGVuc2lvbiByZWdpc3RyeS4KICAqLwogcHVibGljIGNsYXNzIFByb3RvYnVmUnVudGltZU1vZHVsZSBleHRlbmRzIEFic3RyYWN0UHJvdG9idWZSdW50aW1lTW9kdWxlIHsKICAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBJR2xvYmFsU2VydmljZVByb3ZpZGVyPiBiaW5kSUdsb2JhbFNlcnZpY2VQcm92aWRlcigpIHsKQEAgLTQyLDggKzQzLDcgQEAKICAgICByZXR1cm4gUHJvdG9idWZRdWFsaWZpZWROYW1lQ29udmVydGVyLmNsYXNzOwogICB9CiAKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSVF1YWxpZmllZE5hbWVQcm92aWRlcj4gYmluZElRdWFsaWZpZWROYW1lUHJvdmlkZXIoKSB7CisgIEBPdmVycmlkZSBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIElRdWFsaWZpZWROYW1lUHJvdmlkZXI+IGJpbmRJUXVhbGlmaWVkTmFtZVByb3ZpZGVyKCkgewogICAgIHJldHVybiBQcm90b2J1ZlF1YWxpZmllZE5hbWVQcm92aWRlci5jbGFzczsKICAgfQogCkBAIC01NSwyMSArNTUsMjIgQEAKICAgICByZXR1cm4gUHJvdG9idWZTeW50YXhFcnJvck1lc3NhZ2VQcm92aWRlci5jbGFzczsKICAgfQogCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQ2xhc3M8PyBleHRlbmRzIElWYWx1ZUNvbnZlcnRlclNlcnZpY2U+IGJpbmRJVmFsdWVDb252ZXJ0ZXJTZXJ2aWNlKCkgeworICBAT3ZlcnJpZGUgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBJVmFsdWVDb252ZXJ0ZXJTZXJ2aWNlPiBiaW5kSVZhbHVlQ29udmVydGVyU2VydmljZSgpIHsKICAgICByZXR1cm4gUHJvdG9idWZUZXJtaW5hbENvbnZlcnRlcnMuY2xhc3M7CiAgIH0KIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBYdGV4dFJlc291cmNlPiBiaW5kWHRleHRSZXNvdXJjZSgpIHsKKyAgQE92ZXJyaWRlIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgWHRleHRSZXNvdXJjZT4gYmluZFh0ZXh0UmVzb3VyY2UoKSB7CiAgICAgcmV0dXJuIFByb3RvYnVmUmVzb3VyY2UuY2xhc3M7CiAgIH0KIAotICBAT3ZlcnJpZGUKLSAgcHVibGljIENsYXNzPD8gZXh0ZW5kcyBYdGV4dFJlc291cmNlU2V0PiBiaW5kWHRleHRSZXNvdXJjZVNldCgpIHsKKyAgQE92ZXJyaWRlIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgWHRleHRSZXNvdXJjZVNldD4gYmluZFh0ZXh0UmVzb3VyY2VTZXQoKSB7CiAgICAgcmV0dXJuIEZhc3RYdGV4dFJlc291cmNlU2V0LmNsYXNzOwogICB9CiAKKyAgQE92ZXJyaWRlIHB1YmxpYyBDbGFzczw/IGV4dGVuZHMgSUdsb2JhbFNjb3BlUHJvdmlkZXI+IGJpbmRJR2xvYmFsU2NvcGVQcm92aWRlcigpIHsKKyAgICByZXR1cm4gUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyLmNsYXNzOworICB9CisKICAgcHVibGljIHZvaWQgY29uZmlndXJlRXh0ZW5zaW9uUmVnaXN0cnkoQmluZGVyIGJpbmRlcikgewogICAgIGJpbmRlci5iaW5kKElFeHRlbnNpb25SZWdpc3RyeS5jbGFzcykudG9Qcm92aWRlcihFeHRlbnNpb25SZWdpc3RyeVByb3ZpZGVyLmNsYXNzKTsKICAgfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlcy5qYXZhIGIvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvbW9kZWwvdXRpbC9QYWNrYWdlcy5qYXZhCmluZGV4IDMyNGI5YzMuLjY2YTU3ZjYgMTAwNjQ0Ci0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL21vZGVsL3V0aWwvUGFja2FnZXMuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9tb2RlbC91dGlsL1BhY2thZ2VzLmphdmEKQEAgLTEzMCw3ICsxMzAsNyBAQAogICB9CiAKICAgcHJpdmF0ZSBRdWFsaWZpZWROYW1lIG5hbWVPZihQYWNrYWdlIHApIHsKLSAgICBTdHJpbmcgbmFtZSA9IHAuZ2V0SW1wb3J0ZWROYW1lc3BhY2UoKTsKKyAgICBTdHJpbmcgbmFtZSA9IHAuZ2V0TmFtZSgpOwogICAgIHJldHVybiAoaXNFbXB0eShuYW1lKSkgPyBudWxsIDogcXVhbGlmaWVkTmFtZUNvbnZlcnRlci50b1F1YWxpZmllZE5hbWUobmFtZSk7CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmR2xvYmFsU2NvcGVQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMTBlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmR2xvYmFsU2NvcGVQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgR29vZ2xlIEluYy4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UKKyAqIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKKyAqCisgKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAorICovCitwYWNrYWdlIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5zY29waW5nOworCitpbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuUHJvdG9idWZzOworaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5tb2RlbC51dGlsLlJlc291cmNlczsKK2ltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuSW1wb3J0OworaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZjsKK2ltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5JbmplY3Q7CitpbXBvcnQgY29tLmdvb2dsZS5pbmplY3QuUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS54dGV4dC5FY29yZVV0aWwyOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuaW1wbC5JbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuSUFjY2VwdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuSVJlc291cmNlU2NvcGVDYWNoZTsKKworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsKKworLyoqCisgKiBBIGdsb2JhbCBzY29wZSBwcm92aWRlciB0aGF0IHJlYWRzIGVhY2gge0BsaW5rIEltcG9ydH0gaW4gdGhlIHByb3RvYnVmIGZpbGUsIHJlc29sdmVzIGl0LCBhbmQKKyAqIGNhY2hlcyB0aGUgcmVzdWx0LgorICovCitwdWJsaWMgY2xhc3MgUHJvdG9idWZHbG9iYWxTY29wZVByb3ZpZGVyIGV4dGVuZHMgSW1wb3J0VXJpR2xvYmFsU2NvcGVQcm92aWRlciB7CisgIEBJbmplY3QKKyAgcHJpdmF0ZSBJUmVzb3VyY2VTY29wZUNhY2hlIGNhY2hlOworCisgIEBJbmplY3QKKyAgcHJpdmF0ZSBSZXNvdXJjZXMgcmVzb3VyY2VzOworCisgIEBJbmplY3QKKyAgcHJpdmF0ZSBQcm90b2J1ZnMgcHJvdG9idWZzOworCisgIEBJbmplY3QKKyAgcHJpdmF0ZSBJSW1wb3J0UmVzb2x2ZXIgaW1wb3J0UmVzb2x2ZXI7CisKKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCBMaW5rZWRIYXNoU2V0PFVSST4gZ2V0SW1wb3J0ZWRVcmlzKGZpbmFsIFJlc291cmNlIHJlc291cmNlKSB7CisgICAgcmV0dXJuIGNhY2hlLmdldChQcm90b2J1Zkdsb2JhbFNjb3BlUHJvdmlkZXIuY2xhc3MuZ2V0TmFtZSgpLCByZXNvdXJjZSwKKyAgICAgICAgbmV3IFByb3ZpZGVyPExpbmtlZEhhc2hTZXQ8VVJJPj4oKSB7CisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIExpbmtlZEhhc2hTZXQ8VVJJPiBnZXQoKSB7CisgICAgICAgICAgICBmaW5hbCBMaW5rZWRIYXNoU2V0PFVSST4gdW5pcXVlSW1wb3J0VVJJcyA9IG5ldyBMaW5rZWRIYXNoU2V0PD4oNSk7CisgICAgICAgICAgICBJQWNjZXB0b3I8U3RyaW5nPiBjb2xsZWN0b3IgPSBjcmVhdGVVUklDb2xsZWN0b3IocmVzb3VyY2UsIHVuaXF1ZUltcG9ydFVSSXMpOworICAgICAgICAgICAgUHJvdG9idWYgcHJvdG9idWYgPSByZXNvdXJjZXMucm9vdE9mKHJlc291cmNlKTsKKyAgICAgICAgICAgIGlmIChwcm90b2J1ZiA9PSBudWxsKSB7CisgICAgICAgICAgICAgIHJldHVybiB1bmlxdWVJbXBvcnRVUklzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChJbXBvcnQgYW5JbXBvcnQgOiBwcm90b2J1ZnMuaW1wb3J0c0luKHByb3RvYnVmKSkgeworICAgICAgICAgICAgICBjb2xsZWN0b3IuYWNjZXB0KGltcG9ydFJlc29sdmVyLnJlc29sdmUoYW5JbXBvcnQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEl0ZXJhdG9yPFVSST4gdXJpSXRlciA9IHVuaXF1ZUltcG9ydFVSSXMuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlICh1cmlJdGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgICBpZiAoIUVjb3JlVXRpbDIuaXNWYWxpZFVyaShyZXNvdXJjZSwgdXJpSXRlci5uZXh0KCkpKSB7CisgICAgICAgICAgICAgICAgdXJpSXRlci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHVuaXF1ZUltcG9ydFVSSXM7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjODQyNTAuLjAwMDAwMDAKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvc2NvcGluZy9Qcm90b2J1ZkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgR29vZ2xlIEluYy4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UKLSAqIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqCi0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICovCi1wYWNrYWdlIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5zY29waW5nOwotCi1pbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuSW1wb3J0czsKLWltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubW9kZWwudXRpbC5Qcm90b2J1ZnM7Ci1pbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLm1vZGVsLnV0aWwuUmVzb3VyY2VzOwotaW1wb3J0IGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5JbXBvcnQ7Ci1pbXBvcnQgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmOwotaW1wb3J0IGNvbS5nb29nbGUuaW5qZWN0LkluamVjdDsKLWltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5Qcm92aWRlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuaW1wbC5JbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuSVJlc291cmNlU2NvcGVDYWNoZTsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoU2V0OwotCi0vKioKLSAqIEEgZ2xvYmFsIHNjb3BlIHByb3ZpZGVyIHRoYXQgcmVhZHMgZWFjaCB7QGxpbmsgSW1wb3J0fSBpbiB0aGUgcHJvdG9idWYgZmlsZSwgcmVzb2x2ZXMgaXQsIGFuZAotICogY2FjaGVzIHRoZSByZXN1bHQuCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm90b2J1ZkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIgZXh0ZW5kcyBJbXBvcnRVcmlHbG9iYWxTY29wZVByb3ZpZGVyIHsKLSAgQEluamVjdCBwcml2YXRlIFByb3RvYnVmcyBwcm90b2J1ZnM7Ci0gIEBJbmplY3QgcHJpdmF0ZSBSZXNvdXJjZXMgcmVzb3VyY2VzOwotICBASW5qZWN0IHByaXZhdGUgSW1wb3J0cyBpbXBvcnRzOwotICBASW5qZWN0IHByaXZhdGUgSVJlc291cmNlU2NvcGVDYWNoZSBjYWNoZTsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIExpbmtlZEhhc2hTZXQ8VVJJPiBnZXRJbXBvcnRlZFVyaXMoZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UpIHsKLSAgICByZXR1cm4gY2FjaGUuZ2V0KAotICAgICAgICBQcm90b2J1ZkltcG9ydFVyaUdsb2JhbFNjb3BlUHJvdmlkZXIuY2xhc3MuZ2V0TmFtZSgpLAotICAgICAgICByZXNvdXJjZSwKLSAgICAgICAgbmV3IFByb3ZpZGVyPExpbmtlZEhhc2hTZXQ8VVJJPj4oKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIExpbmtlZEhhc2hTZXQ8VVJJPiBnZXQoKSB7Ci0gICAgICAgICAgICBMaW5rZWRIYXNoU2V0PFVSST4gaW1wb3J0ZWRVcmlzID0gbmV3IExpbmtlZEhhc2hTZXQ8PigpOwotICAgICAgICAgICAgUHJvdG9idWYgcHJvdG9idWYgPSByZXNvdXJjZXMucm9vdE9mKHJlc291cmNlKTsKLSAgICAgICAgICAgIGlmIChwcm90b2J1ZiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBpbXBvcnRlZFVyaXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmb3IgKEltcG9ydCBzaW5nbGVJbXBvcnQgOiBwcm90b2J1ZnMuaW1wb3J0c0luKHByb3RvYnVmKSkgewotICAgICAgICAgICAgICByZXNvbHZlSW1wb3J0KGltcG9ydGVkVXJpcywgc2luZ2xlSW1wb3J0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBpbXBvcnRlZFVyaXM7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcHJpdmF0ZSB2b2lkIGFkZFB1YmxpY0ltcG9ydGVkVXJpcyhQcm90b2J1ZiBwcm90b2J1ZiwgTGlua2VkSGFzaFNldDxVUkk+IGltcG9ydGVkVXJpcykgewotICAgICAgICAgICAgZm9yIChJbXBvcnQgc2luZ2xlSW1wb3J0IDogcHJvdG9idWZzLnB1YmxpY0ltcG9ydHNJbihwcm90b2J1ZikpIHsKLSAgICAgICAgICAgICAgcmVzb2x2ZUltcG9ydChpbXBvcnRlZFVyaXMsIHNpbmdsZUltcG9ydCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcHJpdmF0ZSB2b2lkIHJlc29sdmVJbXBvcnQoTGlua2VkSGFzaFNldDxVUkk+IGltcG9ydGVkVXJpcywgSW1wb3J0IHNpbmdsZUltcG9ydCkgewotICAgICAgICAgICAgaWYgKGltcG9ydHMuaXNSZXNvbHZlZChzaW5nbGVJbXBvcnQpKSB7Ci0gICAgICAgICAgICAgIGltcG9ydGVkVXJpcy5hZGQoaW1wb3J0cy5yZXNvbHZlZFVyaU9mKHNpbmdsZUltcG9ydCkpOwotICAgICAgICAgICAgICBQcm90b2J1ZiByb290ID0gcmVzb3VyY2VzLnJvb3RPZihpbXBvcnRzLmltcG9ydGVkUmVzb3VyY2Uoc2luZ2xlSW1wb3J0KSk7Ci0gICAgICAgICAgICAgIGlmIChyb290ICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBhZGRQdWJsaWNJbXBvcnRlZFVyaXMocm9vdCwgaW1wb3J0ZWRVcmlzKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyLmphdmEgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi9zY29waW5nL1Byb3RvYnVmSW1wb3J0ZWROYW1lc3BhY2VBd2FyZUxvY2FsU2NvcGVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTNjY2IxLi4wMDAwMDAwCi0tLSBhL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3Njb3BpbmcvUHJvdG9idWZJbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE2IEdvb2dsZSBJbmMuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlCi0gKiBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKgotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqLwotcGFja2FnZSBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYuc2NvcGluZzsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0Lm5hbWluZy5RdWFsaWZpZWROYW1lOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuaW1wbC5JbXBvcnROb3JtYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnNjb3BpbmcuaW1wbC5JbXBvcnRlZE5hbWVzcGFjZUF3YXJlTG9jYWxTY29wZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnh0ZXh0LnV0aWwuU3RyaW5nczsKLWltcG9ydCBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYubmFtaW5nLlByb3RvYnVmUXVhbGlmaWVkTmFtZUNvbnZlcnRlcjsKLWltcG9ydCBjb20uZ29vZ2xlLmluamVjdC5JbmplY3Q7Ci0KLXB1YmxpYyBjbGFzcyBQcm90b2J1ZkltcG9ydGVkTmFtZXNwYWNlQXdhcmVMb2NhbFNjb3BlUHJvdmlkZXIKLSAgICBleHRlbmRzIEltcG9ydGVkTmFtZXNwYWNlQXdhcmVMb2NhbFNjb3BlUHJvdmlkZXIgewotICBASW5qZWN0IHByaXZhdGUgUHJvdG9idWZRdWFsaWZpZWROYW1lQ29udmVydGVyIHF1YWxpZmllZE5hbWVDb252ZXJ0ZXI7Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIEltcG9ydE5vcm1hbGl6ZXJ9IGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlLgotICAgKgotICAgKiBAcGFyYW0gbmFtZXNwYWNlIHRoZSBuYW1lc3BhY2UuCi0gICAqIEBwYXJhbSBpZ25vcmVDYXNlIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZSByZXNvbHZlciBzaG91bGQgYmUgY2FzZSBpbnNlbnNpdGl2ZS4KLSAgICogQHJldHVybiBhIG5ldyB7QGxpbmsgSW1wb3J0Tm9ybWFsaXplcn0gb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSBuYW1lc3BhY2UgY2Fubm90IGJlCi0gICAqIGNvbnZlcnRlZCB0byBhIHZhbGlkIHF1YWxpZmllZCBuYW1lLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCBJbXBvcnROb3JtYWxpemVyIGNyZWF0ZUltcG9ydGVkTmFtZXNwYWNlUmVzb2x2ZXIoCi0gICAgICBmaW5hbCBTdHJpbmcgbmFtZXNwYWNlLCBib29sZWFuIGlnbm9yZUNhc2UpIHsKLSAgICBpZiAoU3RyaW5ncy5pc0VtcHR5KG5hbWVzcGFjZSkpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBRdWFsaWZpZWROYW1lIGltcG9ydGVkTmFtZXNwYWNlID0gcXVhbGlmaWVkTmFtZUNvbnZlcnRlci50b1F1YWxpZmllZE5hbWUobmFtZXNwYWNlKTsKLSAgICBpZiAoaW1wb3J0ZWROYW1lc3BhY2UgPT0gbnVsbCB8fCBpbXBvcnRlZE5hbWVzcGFjZS5pc0VtcHR5KCkpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gZG9DcmVhdGVJbXBvcnROb3JtYWxpemVyKGltcG9ydGVkTmFtZXNwYWNlLCB0cnVlLCBpZ25vcmVDYXNlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3IuamF2YSBiL2NvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi9zcmMvY29tL2dvb2dsZS9lY2xpcHNlL3Byb3RvYnVmL3ZhbGlkYXRpb24vUHJvdG9idWZKYXZhVmFsaWRhdG9yLmphdmEKaW5kZXggYjE2NDk1Ny4uM2M2ZTE3MyAxMDA2NDQKLS0tIGEvY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmL3NyYy9jb20vZ29vZ2xlL2VjbGlwc2UvcHJvdG9idWYvdmFsaWRhdGlvbi9Qcm90b2J1ZkphdmFWYWxpZGF0b3IuamF2YQorKysgYi9jb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYvc3JjL2NvbS9nb29nbGUvZWNsaXBzZS9wcm90b2J1Zi92YWxpZGF0aW9uL1Byb3RvYnVmSmF2YVZhbGlkYXRvci5qYXZhCkBAIC0xMSw3ICsxMSw3IEBACiBpbXBvcnQgc3RhdGljIGNvbS5nb29nbGUuZWNsaXBzZS5wcm90b2J1Zi5wcm90b2J1Zi5Qcm90b2J1ZlBhY2thZ2UuTGl0ZXJhbHMuTUFQX1RZUEVfX0tFWV9UWVBFOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLk1BUF9UWVBFX19WQUxVRV9UWVBFOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLk1FU1NBR0VfRklFTERfX01PRElGSUVSOwotaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlBBQ0tBR0VfX0lNUE9SVEVEX05BTUVTUEFDRTsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnByb3RvYnVmLlByb3RvYnVmUGFja2FnZS5MaXRlcmFscy5QQUNLQUdFX19OQU1FOwogaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmVjbGlwc2UucHJvdG9idWYucHJvdG9idWYuUHJvdG9idWZQYWNrYWdlLkxpdGVyYWxzLlNZTlRBWF9fTkFNRTsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMuZXhwZWN0ZWRGaWVsZE51bWJlcjsKIGltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5lY2xpcHNlLnByb3RvYnVmLnZhbGlkYXRpb24uTWVzc2FnZXMuZXhwZWN0ZWRTeW50YXhJZGVudGlmaWVyOwpAQCAtMzgwLDcgKzM4MCw3IEBACiAgICAgZm9yIChQcm90b2J1ZkVsZW1lbnQgZSA6IHJvb3QuZ2V0RWxlbWVudHMoKSkgewogICAgICAgaWYgKGUgPT0gYVBhY2thZ2UpIHsKICAgICAgICAgaWYgKGZpcnN0Rm91bmQpIHsKLSAgICAgICAgICBlcnJvcihtdWx0aXBsZVBhY2thZ2VzLCBhUGFja2FnZSwgUEFDS0FHRV9fSU1QT1JURURfTkFNRVNQQUNFLCBNT1JFX1RIQU5fT05FX1BBQ0tBR0VfRVJST1IpOworICAgICAgICAgIGVycm9yKG11bHRpcGxlUGFja2FnZXMsIGFQYWNrYWdlLCBQQUNLQUdFX19OQU1FLCBNT1JFX1RIQU5fT05FX1BBQ0tBR0VfRVJST1IpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICAgIH0K