ZGlmZiAtLWdpdCBhL0RFUEVOREVOQ0lFUyBiL0RFUEVOREVOQ0lFUwppbmRleCBiZmZlM2Q5Li45ZGJjYTYyIDEwMDY0NAotLS0gYS9ERVBFTkRFTkNJRVMKKysrIGIvREVQRU5ERU5DSUVTCkBAIC0xMiw4ICsxMiw4IEBACiBtYXZlbi9tYXZlbmNlbnRyYWwvbmV0LmJ5dGVidWRkeS9ieXRlLWJ1ZGR5LzEuOS4wLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgY2xlYXJseWRlZmluZWQKIG1hdmVuL21hdmVuY2VudHJhbC9uZXQuaTJwLmNyeXB0by9lZGRzYS8wLjMuMCwgQ0MwLCBhcHByb3ZlZCwgQ1ExNzgwNAogbWF2ZW4vbWF2ZW5jZW50cmFsL25ldC5zZi5qb3B0LXNpbXBsZS9qb3B0LXNpbXBsZS80LjYsIE1JVCwgYXBwcm92ZWQsIGNsZWFybHlkZWZpbmVkCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5hbnQvYW50LWxhdW5jaGVyLzEuMTAuOCwgQXBhY2hlLTIuMCBBTkQgVzNDIEFORCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTE1NTYwCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5hbnQvYW50LzEuMTAuOCwgQXBhY2hlLTIuMCBBTkQgVzNDIEFORCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTE1NTYwCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5hbnQvYW50LWxhdW5jaGVyLzEuMTAuMTAsIEFwYWNoZS0yLjAgQU5EIFczQyBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1ExNTU2MAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuYW50L2FudC8xLjEwLjEwLCBBcGFjaGUtMi4wIEFORCBXM0MgQU5EIExpY2Vuc2VSZWYtUHVibGljLURvbWFpbiwgYXBwcm92ZWQsIENRMTU1NjAKIG1hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLmNvbW1vbnMvY29tbW9ucy1jb21wcmVzcy8xLjE5LCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgY2xlYXJseWRlZmluZWQKIG1hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLmNvbW1vbnMvY29tbW9ucy1tYXRoMy8zLjIsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBjbGVhcmx5ZGVmaW5lZAogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMvaHR0cGNsaWVudC80LjUuMTMsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTIyNzYxCkBAIC0yNiwzNSArMjYsMzUgQEAKIG1hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcGctamRrMTVvbi8xLjY1LCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1EyMTk3NQogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5ib3VuY3ljYXN0bGUvYmNwa2l4LWpkazE1b24vMS42NSwgTUlUIEFORCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTIxOTc2CiBtYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmJvdW5jeWNhc3RsZS9iY3Byb3YtamRrMTVvbi8xLjY1LjAxLCBNSVQgQU5EIExpY2Vuc2VSZWYtUHVibGljLURvbWFpbiwgYXBwcm92ZWQsIENRMjE5NzcKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1odHRwLzkuNC4zNi52MjAyMTAxMTQsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1pby85LjQuMzYudjIwMjEwMTE0LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VjdXJpdHkvOS40LjM2LnYyMDIxMDExNCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZlci85LjQuMzYudjIwMjEwMTE0LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VydmxldC85LjQuMzYudjIwMjEwMTE0LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktdXRpbC1hamF4LzkuNC4zNi52MjAyMTAxMTQsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS11dGlsLzkuNC4zNi52MjAyMTAxMTQsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvNS4xMS4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFudC81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvNS4xMS4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoLzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0LzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQucGdtLzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvNS4xMS4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvNS4xMS4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC50ZXN0LzUuMTEuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC51aS81LjExLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQvNS4xMS4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktaHR0cC85LjQuNDEudjIwMjEwNTE2LCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktaW8vOS40LjQxLnYyMDIxMDUxNiwgLCBhcHByb3ZlZCwgZWNsaXBzZQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlY3VyaXR5LzkuNC40MS52MjAyMTA1MTYsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1zZXJ2ZXIvOS40LjQxLnYyMDIxMDUxNiwgLCBhcHByb3ZlZCwgZWNsaXBzZQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZsZXQvOS40LjQxLnYyMDIxMDUxNiwgLCBhcHByb3ZlZCwgZWNsaXBzZQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXV0aWwtYWpheC85LjQuNDEudjIwMjEwNTE2LCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktdXRpbC85LjQuNDEudjIwMjEwNTE2LCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0LzUuMTIuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5hbnQvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLzUuMTIuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnBnbS81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0LzUuMTIuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLzUuMTIuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQudGVzdC81LjEyLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQudWkvNS4xMi4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LzUuMTIuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5oYW1jcmVzdC9oYW1jcmVzdC1jb3JlLzEuMywgQlNELTItQ2xhdXNlLCBhcHByb3ZlZCwgQ1E3MDYzCiBtYXZlbi9tYXZlbmNlbnRyYWwvb3JnLm1vY2tpdG8vbW9ja2l0by1jb3JlLzIuMjMuMCwgTUlULCBhcHByb3ZlZCwgQ1ExNzk3NgogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5vYmplbmVzaXMvb2JqZW5lc2lzLzIuNiwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMTU0NzgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY29uZmlnLW9wdGlvbnMubWQgYi9Eb2N1bWVudGF0aW9uL2NvbmZpZy1vcHRpb25zLm1kCmluZGV4IGQ0NjM1NTEuLmE5Y2E0OGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY29uZmlnLW9wdGlvbnMubWQKKysrIGIvRG9jdW1lbnRhdGlvbi9jb25maWctb3B0aW9ucy5tZApAQCAtNyw2ICs3LDggQEAKIHwgJiN4MjcwNTsgfCBvcHRpb24gZGVmaW5lZCBieSBuYXRpdmUgZ2l0IHwKIHwgJiN4MjBERTsgfCBqZ2l0IGN1c3RvbSBvcHRpb24gbm90IHN1cHBvcnRlZCBieSBuYXRpdmUgZ2l0IHwKIAorRm9yIGRldGFpbHMgb24gbmF0aXZlIGdpdCBvcHRpb25zIHNlZSBhbHNvIHRoZSBvZmZpY2lhbCBbZ2l0IGNvbmZpZyBkb2N1bWVudGF0aW9uXShodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LWNvbmZpZykuCisKICMjIF9fY29yZV9fIG9wdGlvbnMKIAogfCAgb3B0aW9uIHwgZGVmYXVsdCB8IGdpdCBvcHRpb24gfCBkZXNjcmlwdGlvbiB8CkBAIC01OSw2ICs2MSwyNCBAQAogfCBgZ2MucHJ1bmVFeHBpcmVgIHwgYDIud2Vla3MuYWdvYCB8ICYjeDI3MDU7IHwgR3JhY2UgcGVyaW9kIGFmdGVyIHdoaWNoIHVucmVhY2hhYmxlIG9iamVjdHMgd2lsbCBiZSBwcnVuZWQuIHwKIHwgYGdjLnBydW5lUGFja0V4cGlyZWAgfCBgMS5ob3VyLmFnb2AgfCAgJiN4MjBERTsgfCBHcmFjZSBwZXJpb2QgYWZ0ZXIgd2hpY2ggcGFja2ZpbGVzIG9ubHkgY29udGFpbmluZyB1bnJlYWNoYWJsZSBvYmplY3RzIHdpbGwgYmUgcHJ1bmVkLiB8CiAKKyMjIF9faHR0cF9fIG9wdGlvbnMKKworfCAgb3B0aW9uIHwgZGVmYXVsdCB8IGdpdCBvcHRpb24gfCBkZXNjcmlwdGlvbiB8Cit8LS0tLS0tLS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwKK3wgYGh0dHAuY29va2llRmlsZWB8IHwgJiN4MjcwNTsgfCBBYnNvbHV0ZSBwYXRoICh3aXRoIHRpbGRlIGV4cGFuc2lvbikgb2YgYSBjb29raWUgZmlsZSBpbiBOZXRzY2FwZSBmb3JtYXQuIHwKK3wgYGh0dHAuY29va2llRmlsZUNhY2hlTGltaXRgfCAxMCB8ICYjeDIwREU7IHwgSkdpdCBjYWNoZXMgYXQgbW9zdCB0aGlzIG51bWJlciBvZiB0aGUgbW9zdCByZWNlbnRseSB1c2VkIGNvb2tpZSBmaWxlcy4gfAorfCBgaHR0cC5leHRyYUhlYWRlcmB8ICB8ICYjeDI3MDU7IHwgRXh0cmEgSFRUUCBoZWFkZXIocykgdG8gc2VuZCB3aXRoIEhUVFAgcmVxdWVzdHMsIGluIHRoZSBmb3JtYXQgImBLZXk6IFZhbHVlYCIuIE1heSBhcHBlYXIgbXVsdGlwbGUgdGltZXM7IGFuIGVtcHR5IG9wdGlvbiBjbGVhcnMgdGhlIGxpc3QuIHwKK3wgYGh0dHAuZm9sbG93UmVkaXJlY3RzYHwgYGluaXRpYWxgIHwgJiN4MjcwNTsgfCBgdHJ1ZWAsIGBmYWxzZWAsIG9yIGBpbml0aWFsYC4gV2hldGhlciB0byBmb2xsb3cgYSByZWRpcmVjdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IG9uIHRoZSBmaXJzdCBIVFRQIHJlcXVlc3QgaW4gYSBnaXQgcmVtb3RlIG9wZXJhdGlvbi4gfAorfCBgaHR0cC5tYXhSZWRpcmVjdHNgfCA1IHwgJiN4MjBERTsgfCBNYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHMgdG8gZm9sbG93OyBjYW4gYmUgb3ZlcnJpZGRlbiB2aWEgdGhlIEphdmEgc3lzdGVtIHByb3BlcnR5IGBodHRwLm1heFJlZGlyZWN0c2AuIHwKK3wgYGh0dHAucG9zdEJ1ZmZlcmB8IGAxIE1pQmAgfCAmI3gyNzA1OyB8IE1heGltdW0gc2l6ZSBpbiBieXRlcyBmb3Igc2luZ2xlIEhUVFAgUE9TVCByZXF1ZXN0czsgZm9yIGxhcmdlciByZXF1ZXN0cywgSFRUUCAxLjEgY2h1bmtlZCB0cmFuc2ZlciBpcyB1c2VkLiB8Cit8IGBodHRwLnNhdmVDb29raWVzYHwgYGZhbHNlYCB8ICYjeDI3MDU7IHwgQm9vbGVhbjsgaWYgYHRydWVgIGFuZCBgaHR0cC5jb29raWVGaWxlYCBpcyBzZXQsIHNhdmUgcmVjZWl2ZWQgY29va2llcy4gfAorfCBgaHR0cC5zc2xWZXJpZnlgfCBgdHJ1ZWAgfCAmI3gyNzA1OyB8IEJvb2xlYW47IHdoZXRoZXIgdG8gY2hlY2sgU1NMIGNlcnRpZmljYXRlcyBpbiBIVFRQUyBjb25uZWN0aW9ucy4gfAorfCBgaHR0cC51c2VyQWdlbnRgfCB8ICYjeDI3MDU7IHwgVXNlci1hZ2VudCBzdHJpbmcgdG8gc2VuZCB3aXRoIEhUVFAgcmVxdWVzdHMuIE11c3QgYmUgN2JpdC1BU0NJSS4gQ2FuIGJlIG92ZXJyaWRkZW4gdmlhIGVudmlyb25tZW50IHZhcmlhYmxlIGBHSVRfSFRUUF9VU0VSX0FHRU5UYC4gfAorCitBbGwgYGh0dHAuKmAgb3B0aW9ucyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW4gYSBVUkwtc3BlY2lmaWMgd2F5IHVzaW5nIHRoZSBmb3JtYXQgYGh0dHAuPHVybD4uKmAuIFNlZSB0aGUgb2ZmaWNpYWwgW2dpdCBjb25maWcgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdC1jb25maWcjRG9jdW1lbnRhdGlvbi9naXQtY29uZmlnLnR4dC1odHRwbHR1cmxndCkgZm9yIGRldGFpbHMuCisKK1Byb3h5IGNvbmZpZ3VyYXRpb24gdXNlcyB0aGUgc3RhbmRhcmQgSmF2YSBtZWNoYW5pc21zIHZpYSBjbGFzcyBgamF2YS5uZXQuUHJveHlTZWxlY3RvcmAuCisKICMjIF9fcGFja19fIG9wdGlvbnMKIAogfCAgb3B0aW9uIHwgZGVmYXVsdCB8IGdpdCBvcHRpb24gfCBkZXNjcmlwdGlvbiB8CmRpZmYgLS1naXQgYS9XT1JLU1BBQ0UgYi9XT1JLU1BBQ0UKaW5kZXggMjI0OTY4YS4uZDljNDA3YSAxMDA2NDQKLS0tIGEvV09SS1NQQUNFCisrKyBiL1dPUktTUEFDRQpAQCAtMjM3LDU1ICsyMzcsNTUgQEAKICAgICBzaGExID0gIjkxODA3MzNiN2RmODU0MjYyMWRjMTJlMjFlODc1NTdlOGM5OWI4Y2IiLAogKQogCi1KRVRUWV9WRVIgPSAiOS40LjM2LnYyMDIxMDExNCIKK0pFVFRZX1ZFUiA9ICI5LjQuNDEudjIwMjEwNTE2IgogCiBtYXZlbl9qYXIoCiAgICAgbmFtZSA9ICJqZXR0eS1zZXJ2bGV0IiwKICAgICBhcnRpZmFjdCA9ICJvcmcuZWNsaXBzZS5qZXR0eTpqZXR0eS1zZXJ2bGV0OiIgKyBKRVRUWV9WRVIsCi0gICAgc2hhMSA9ICJiMTg5ZTUyYTVlZTU1YWUxNzJlNGU5OWUyOWM1YzMxNGY1ZGFmNGI5IiwKLSAgICBzcmNfc2hhMSA9ICIzYTBmYTQ0OTc3MmFiMGQ3NjYyNWY2YWZiODFmNjBjMzJhNDkwNjEzIiwKKyAgICBzaGExID0gImVhNDUzNjhlYTdmZDA0MDI2MDM4Zjg5ZTY5MTBmMTdmNzA5Mzk2NDEiLAorICAgIHNyY19zaGExID0gIjRhY2Y2YjBkMTQ0OWNjZDM5YjE5NTc4M2UzNjM5YWIwZGE1MWY3YmYiLAogKQogCiBtYXZlbl9qYXIoCiAgICAgbmFtZSA9ICJqZXR0eS1zZWN1cml0eSIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmVjbGlwc2UuamV0dHk6amV0dHktc2VjdXJpdHk6IiArIEpFVFRZX1ZFUiwKLSAgICBzaGExID0gIjQyMDMwZDZlZDdkZmMwZjc1ODE4Y2RlMGFkY2Y3MzhlZmM0Nzc1NzQiLAotICAgIHNyY19zaGExID0gIjYxMjIyMGE5N2Q0NWZhZDM5ODNjY2M1NmIwY2I5YTI3MWYzZmQwMDMiLAorICAgIHNoYTEgPSAiNWJhNjliMTE4OWE5ZDFmNDI1ZWQwM2NiYzJjOTAxZTBlNjAyM2M0ZCIsCisgICAgc3JjX3NoYTEgPSAiZDQ2ZjhjYjRkYWQ2Njc1MWQzYTU4ODMwOWM2YmJjMTViODBmYmFkNCIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImpldHR5LXNlcnZlciIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmVjbGlwc2UuamV0dHk6amV0dHktc2VydmVyOiIgKyBKRVRUWV9WRVIsCi0gICAgc2hhMSA9ICI4OGE3ZDM0Mjk3NGFhZGNhNjU4ZTczODZlOGQwZmNjNWMwNzg4ZjQxIiwKLSAgICBzcmNfc2hhMSA9ICI0NTUyYzBjNmRiMjk0OGU4NTU3ZGI0NzdiNmI0OGQyOTEwMDZlNDgxIiwKKyAgICBzaGExID0gIjI1YjE5NjNiMGExYzU2MjAyZWMzNzA0NmFkYzU1ODYxODE1MTA3Y2UiLAorICAgIHNyY19zaGExID0gImE3ZjgyYzlkZjczNzMxNmNmMGRmYWZlNGEzM2NhNGFlODlkNzgwZGIiLAogKQogCiBtYXZlbl9qYXIoCiAgICAgbmFtZSA9ICJqZXR0eS1odHRwIiwKICAgICBhcnRpZmFjdCA9ICJvcmcuZWNsaXBzZS5qZXR0eTpqZXR0eS1odHRwOiIgKyBKRVRUWV9WRVIsCi0gICAgc2hhMSA9ICIxZWVlODlhNTVlMDRmZjk0ZGYwZjg1ZDk1MjAwZmM0OGFjYjQzZDg2IiwKLSAgICBzcmNfc2hhMSA9ICI1NTJhNzg0ZWM3ODljN2JhNTgxYzUzNDFhZTZkOGI2MzUzZWQ1YWNlIiwKKyAgICBzaGExID0gIjBkNDYwYmVjZTRkZDk2NjZiNDZjYmQxOGY4ZDdmZDMxY2YwMmVjZDkiLAorICAgIHNyY19zaGExID0gIjZmYTAwOWQ5NTBiOGZkYWI4ZTk0MDAzZTYyOTVjMDhkNDJlZTg1YjciLAogKQogCiBtYXZlbl9qYXIoCiAgICAgbmFtZSA9ICJqZXR0eS1pbyIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmVjbGlwc2UuamV0dHk6amV0dHktaW86IiArIEpFVFRZX1ZFUiwKLSAgICBzaGExID0gIjg0YThmYWY5MDMxZWI0NWE1YTJkZGI3NjgxZTIyYzQ4M2Q4MWFiM2EiLAotICAgIHNyY19zaGExID0gIjcyZDVmYzZkOTA5ZTI4Zjg3MjAzOTRiMjViYWJkYTgwODA1YTQ2YjkiLAorICAgIHNoYTEgPSAiODIwZWVhMzY4NjIzOTM5YzIxMTM5MDJiMWNhN2E5ODE4NmY2NGE3MyIsCisgICAgc3JjX3NoYTEgPSAiNDM3MzI4NWRhZmI1Zjc5MjEwODE1ZDljMTVkZTEwNmNjM2U5YWM0ZCIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImpldHR5LXV0aWwiLAogICAgIGFydGlmYWN0ID0gIm9yZy5lY2xpcHNlLmpldHR5OmpldHR5LXV0aWw6IiArIEpFVFRZX1ZFUiwKLSAgICBzaGExID0gIjkyNTI1N2ZiY2NhNmI1MDFhMjUyNTJjNzQ0N2RiZWRiMDIxZjc0MDQiLAotICAgIHNyY19zaGExID0gIjUzMmU4YjY2MDQ0ZjRlNThjYTVkYTNhZWMxOWYwMmEyZjNjMTZkZGQiLAorICAgIHNoYTEgPSAiNTQ4Yzc2ZWEwMGQ3ZWIzZTJiY2VhMjczMTc0ZTVkMDMwNjM5ZDEwOSIsCisgICAgc3JjX3NoYTEgPSAiYmExODhkZTU1MmEwYzMxMGY2OWNmMTJiZWE4ODc0MTNjZThmMGU3OCIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImpldHR5LXV0aWwtYWpheCIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmVjbGlwc2UuamV0dHk6amV0dHktdXRpbC1hamF4OiIgKyBKRVRUWV9WRVIsCi0gICAgc2hhMSA9ICIyZjQ3ODEzMGMyMTc4NzA3M2ZhY2I2NGQ3MjQyZTA2Zjk0OTgwYzYwIiwKLSAgICBzcmNfc2hhMSA9ICI3MTUzZDdjYTM4ODc4ZDk3MWZkOTA5OTJjMzAzYmI3NzE5YmE3YTIxIiwKKyAgICBzaGExID0gImQ0YzFkNjZmYzYyNzk2YTE3NTQ4ZTZjMzQ0ZmJmODliNTg4OWY4NzMiLAorICAgIHNyY19zaGExID0gImI2MGNmNzdiZTY4MTM3ZWVlNGVlMTNkODNjNDdkNjg0ZDE0YjZkOTAiLAogKQogCiBCT1VOQ1lDQVNUTEVfVkVSID0gIjEuNjUiCmRpZmYgLS1naXQgYS9saWIvQlVJTEQgYi9saWIvQlVJTEQKaW5kZXggOGFkNDlkNC4uODM3MDlhMyAxMDA2NDQKLS0tIGEvbGliL0JVSUxECisrKyBiL2xpYi9CVUlMRApAQCAtMTYxLDggKzE2MSw4IEBACiAgICAgdmlzaWJpbGl0eSA9IFsKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdDpfX3BrZ19fIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM6X19wa2dfXyIsCi0gICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQudGVzdDpfX3BrZ19fIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdDpfX3BrZ19fIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC50ZXN0Ol9fcGtnX18iLAogICAgIF0sCiAgICAgZXhwb3J0cyA9IFsiQGJjcGcvL2phciJdLAogKQpAQCAtMTcyLDggKzE3Miw4IEBACiAgICAgdmlzaWJpbGl0eSA9IFsKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdDpfX3BrZ19fIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM6X19wa2dfXyIsCi0gICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQudGVzdDpfX3BrZ19fIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdDpfX3BrZ19fIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC50ZXN0Ol9fcGtnX18iLAogICAgIF0sCiAgICAgZXhwb3J0cyA9IFsiQGJjcHJvdi8vamFyIl0sCiApCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlMGQ4MDJlLi43NTQ1MWRlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTUsMTMgKzUsMTMgQEAKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdAogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBJbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50b29scy5hbnQsCi0gb3JnLmVjbGlwc2UuamdpdC5hbnQudGFza3M7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFudC50YXNrczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5oYW1jcmVzdC5jb3JlO3ZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L3BvbS54bWwKaW5kZXggMTU1ZTc2My4uYjMxOGZhZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZjNlY2MzNC4uY2UyNTdjMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMTMgKzMsMTMgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYW50Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBJbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50b29scy5hbnQsCi0gIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIKKyAgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW50O3ZlcnNpb249IjUuMTEuMiIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbnQudGFza3M7dmVyc2lvbj0iNS4xMS4yIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFudDt2ZXJzaW9uPSI1LjEyLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW50LnRhc2tzO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuYXBhY2hlLnRvb2xzLmFudCwKICAgIG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDRlZDliYzAuLjlkOWFkMGMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudC5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LmFudDt2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5hbnQ7dmVyc2lvbj0iNS4xMi4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvcG9tLnhtbAppbmRleCAwZWYwZjI4Li40ZTRhMDQxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYW50L3BvbS54bWwKQEAgLTE1LDcgKzE1LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYW50PC9hcnRpZmFjdElkPgpAQCAtMzgsNyArMzgsNyBAQAogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hbnQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5hbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj4xLjEwLjg8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj4xLjEwLjEwPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzIGIvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlLy5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0YTkzNGEuLjAwMDAwMDAKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlLy5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KLTxjb21wb25lbnQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZSIgdmVyc2lvbj0iMiI+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2FyY2hpdmUvQmFzZUZvcm1hdC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUuQmFzZUZvcm1hdCI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMzNjY1ODQ4MSI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5CYXNlRm9ybWF0Ii8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkNPTVBSRVNTSU9OX0xFVkVMIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotPC9jb21wb25lbnQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYTc3MmRiMS4uM2M5ZTU1MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKQEAgLTEzLDE3ICsxMywxNyBAQAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy5iemlwMjt2ZXJzaW9uPSJbMS40LDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy5nemlwO3ZlcnNpb249IlsxLjQsMi4wKSIsCiAgb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmNvbXByZXNzb3JzLnh6O3ZlcnNpb249IlsxLjQsMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLm9zZ2kuZnJhbWV3b3JrO3ZlcnNpb249IlsxLjMuMCwyLjAuMCkiCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlLkZvcm1hdEFjdGl2YXRvcgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSI1LjExLjIiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnMsCiAgICBvcmcub3NnaS5mcmFtZXdvcmsiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5pbnRlcm5hbDt2ZXJzaW9uPSI1LjExLjIiO3gtaW50ZXJuYWw6PXRydWUKKyBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUuaW50ZXJuYWw7dmVyc2lvbj0iNS4xMi4xIjt4LWludGVybmFsOj10cnVlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCA3NDlhMjFlLi41NGExOGVjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbAppbmRleCA2Y2I4Njc1Li5iNjdhZjQ5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmJlbmNobWFya3MvcG9tLnhtbAppbmRleCBlMjZhYzMwLi5kZDRiNGE5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmJlbmNobWFya3MvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmJlbmNobWFya3MvcG9tLnhtbApAQCAtMTQsNyArMTQsNyBAQAogICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KLSAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYmVuY2htYXJrczwvYXJ0aWZhY3RJZD4KICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KIApAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgICAgICA8ZGVwZW5kZW5jeT48IS0tIGFkZCBzdXBwb3J0IGZvciBzc2gvc2NwIC0tPgogICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLndhZ29uPC9ncm91cElkPgogICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53YWdvbi1zc2g8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgIDx2ZXJzaW9uPjMuNC4yPC92ZXJzaW9uPgorICAgICAgICAgICAgICA8dmVyc2lvbj4zLjQuMzwvdmVyc2lvbj4KICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgPC9wbHVnaW4+CkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tcHJvamVjdC1pbmZvLXJlcG9ydHMtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgIDx2ZXJzaW9uPjMuMS4xPC92ZXJzaW9uPgorICAgICAgICAgIDx2ZXJzaW9uPjMuMS4yPC92ZXJzaW9uPgogICAgICAgICA8L3BsdWdpbj4KICAgICAgIDwvcGx1Z2lucz4KICAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmNvdmVyYWdlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmNvdmVyYWdlL3BvbS54bWwKaW5kZXggNmIwMjE1OC4uYzg0YjhmMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5jb3ZlcmFnZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuY292ZXJhZ2UvcG9tLnhtbApAQCAtMTQsNyArMTQsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIApAQCAtMjcsODggKzI3LDg4IEBACiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5hbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnM8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5wZ208L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudWk8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICA8L2RlcGVuZGVuY2llcz4KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9CVUlMRCBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvQlVJTEQKaW5kZXggOTI1NTM2ZS4uNGM4NmVmZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9CVUlMRAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L0JVSUxECkBAIC0yLDcgKzIsNiBAQAogICAgICJAY29tX2dvb2dsZXNvdXJjZV9nZXJyaXRfYmF6bGV0cy8vdG9vbHM6Z2VucnVsZTIuYnpsIiwKICAgICAiZ2VucnVsZTIiLAogKQotbG9hZCgiQHJ1bGVzX2phdmEvL2phdmE6ZGVmcy5iemwiLCAiamF2YV9pbXBvcnQiKQogbG9hZCgKICAgICAiQGNvbV9nb29nbGVzb3VyY2VfZ2Vycml0X2JhemxldHMvL3Rvb2xzOmp1bml0LmJ6bCIsCiAgICAgImp1bml0X3Rlc3RzIiwKQEAgLTExLDI1ICsxMCwyMCBAQAoganVuaXRfdGVzdHMoCiAgICAgbmFtZSA9ICJiYyIsCiAgICAgc3JjcyA9IGdsb2IoWyJ0c3QvKiovKi5qYXZhIl0pLAorICAgIHJlc291cmNlX2phcnMgPSBbIjp0c3RfcnNyYyJdLAogICAgIHRhZ3MgPSBbImJjIl0sCiAgICAgZGVwcyA9IFsKICAgICAgICAgIi8vbGliOmJjcGciLAogICAgICAgICAiLy9saWI6YmNwcm92IiwKICAgICAgICAgIi8vbGliOmp1bml0IiwKLSAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0IiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM6Z3BnLWJjIiwKLSAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdDp0c3RfcnNyYyIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQ6amdpdCIsCiAgICAgXSwKICkKIAotamF2YV9pbXBvcnQoCi0gICAgbmFtZSA9ICJ0c3RfcnNyYyIsCi0gICAgamFycyA9IFsiOnRzdF9yc3JjX2phciJdLAotKQotCiBnZW5ydWxlMigKLSAgICBuYW1lID0gInRzdF9yc3JjX2phciIsCisgICAgbmFtZSA9ICJ0c3RfcnNyYyIsCiAgICAgc3JjcyA9IGdsb2IoWyJ0c3QtcnNyYy8qKiJdKSwKICAgICBvdXRzID0gWyJ0c3RfcnNyYy5qYXIiXSwKLSAgICBjbWQgPSAibz0kJFBXRC8kQCAmJiB0YXIgY2YgLSAkKFNSQ1MpIHwgdGFyIC1DICQkVE1QIC0tc3RyaXAtY29tcG9uZW50cz0yIC14ZiAtICYmIGNkICAkJFRNUCAmJiB6aXAgLXFyICQkbyAuIiwKKyAgICBjbWQgPSAidGFyIGNmIC0gJChTUkNTKSB8IHRhciAtQyAkJFRNUCAtLXN0cmlwLWNvbXBvbmVudHM9MiAteGYgLSAmJiBjZCAkJFRNUCAmJiB6aXAgLXFyICQkUk9PVC8kQCAuIiwKICkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDBhMTIxYTcuLjBjOWNlZTMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOApAQCAtMTIsOSArMTIsOSBAQAogIG9yZy5ib3VuY3ljYXN0bGUub3BlbnBncC5vcGVyYXRvcjt2ZXJzaW9uPSJbMS42NS4wLDIuMC4wKSIsCiAgb3JnLmJvdW5jeWNhc3RsZS5vcGVucGdwLm9wZXJhdG9yLmpjYWpjZTt2ZXJzaW9uPSJbMS42NS4wLDIuMC4wKSIsCiAgb3JnLmJvdW5jeWNhc3RsZS51dGlsLmVuY29kZXJzO3ZlcnNpb249IlsxLjY1LjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmludGVybmFsLmtleXM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmludGVybmFsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWwua2V5czt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcjt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydW5uZXJzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvcG9tLnhtbAppbmRleCAwODk2NmY4Li42ZWNiYzAwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAzZmJkYjJhLi5mMTg1NGIwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywxMCArMywxMCBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM7c2luZ2xldG9uOj10cnVlCi1GcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBJbXBvcnQtUGFja2FnZTogb3JnLmJvdW5jeWNhc3RsZS5hc24xO3ZlcnNpb249IlsxLjY1LjAsMi4wLjApIiwKICBvcmcuYm91bmN5Y2FzdGxlLmFzbjEuY3J5cHRsaWI7dmVyc2lvbj0iWzEuNjUuMCwyLjAuMCkiLApAQCAtMjksOSArMjksOSBAQAogIG9yZy5ib3VuY3ljYXN0bGUudXRpbDt2ZXJzaW9uPSJbMS42NS4wLDIuMC4wKSIsCiAgb3JnLmJvdW5jeWNhc3RsZS51dGlsLmVuY29kZXJzO3ZlcnNpb249IlsxLjY1LjAsMi4wLjApIiwKICBvcmcuYm91bmN5Y2FzdGxlLnV0aWwuaW87dmVyc2lvbj0iWzEuNjUuMCwyLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM7dmVyc2lvbj0iNS4xMS4yIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbDt2ZXJzaW9uPSI1LjExLjIiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmludGVybmFsLmtleXM7dmVyc2lvbj0iNS4xMS4yIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0IgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjO3ZlcnNpb249IjUuMTIuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWw7dmVyc2lvbj0iNS4xMi4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0IiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbC5rZXlzO3ZlcnNpb249IjUuMTIuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdCIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCBkZGU0MjlkLi5jZDAwMGJhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM7dmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL3BvbS54bWwKaW5kZXggYzhkNGFjNS4uOGM3OGY2ZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYzwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGYyYmVkOGQuLjY5Nzk5YTkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZQotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgpAQCAtMjUsMTEgKzI1LDExIEBACiAgb3JnLmFwYWNoZS5odHRwLmltcGwuY29ubjt2ZXJzaW9uPSJbNC40LjAsNS4wLjApIiwKICBvcmcuYXBhY2hlLmh0dHAucGFyYW1zO3ZlcnNpb249Ils0LjMuMCw1LjAuMCkiLAogIG9yZy5hcGFjaGUuaHR0cC5zc2w7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmFwYWNoZS5odHRwLmNsaWVudCwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAsCiAgICBvcmcuYXBhY2hlLmh0dHAuZW50aXR5LApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCA5Y2ExZTliLi4wMjEwY2Y2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlO3ZlcnNpb249IjUuMTEuMi5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9wb20ueG1sCmluZGV4IDYzMTg1OWUuLmIzZmI4NWQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL3BvbS54bWwKQEAgLTE1LDcgKzE1LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA4YjQxOGQ0Li5jMjBhOWUwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMTMgKzMsMTMgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcgogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcgotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSI1LjExLjIiLAotIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSI1LjExLjIiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iNS4xMi4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLmdsdWU7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9ImphdmF4LnNlcnZsZXQsamF2YXguc2VydmxldC5odHRwIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLnJlc29sdmVyO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5yZXNvbHZlcjt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LApAQCAtMTgsMTQgKzE4LDE0IEBACiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogSW1wb3J0LVBhY2thZ2U6IGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iWzIuNS4wLDMuMi4wKSIsCiAgamF2YXguc2VydmxldC5odHRwO3ZlcnNpb249IlsyLjUuMCwzLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5wYXJzZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGZiYmRlNzQuLjg1NmY5MWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iNS4xMi4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3BvbS54bWwKaW5kZXggMjA5NGYwNC4uZjE0MjE3MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjwvYXJ0aWZhY3RJZD4KQEAgLTEyNiw2ICsxMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPiR7cHJvamVjdC5ncm91cElkfTwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD4ke3Byb2plY3QuYXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtqZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICA8dHlwZT5qYXI8L3R5cGU+CiAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICAgICAgIDwvb2xkVmVyc2lvbj4KICAgICAgICAgICAgICAgPG5ld1ZlcnNpb24+CkBAIC0xNDMsNyArMTQ0LDcgQEAKICAgICAgICAgICAgICAgICAgIDxicmVha0J1aWxkT25CaW5hcnlJbmNvbXBhdGlibGVNb2RpZmljYXRpb25zPmZhbHNlPC9icmVha0J1aWxkT25CaW5hcnlJbmNvbXBhdGlibGVNb2RpZmljYXRpb25zPgogICAgICAgICAgICAgICAgICAgPG9ubHlCaW5hcnlJbmNvbXBhdGlibGU+ZmFsc2U8L29ubHlCaW5hcnlJbmNvbXBhdGlibGU+CiAgICAgICAgICAgICAgICAgICA8aW5jbHVkZVN5bnRoZXRpYz5mYWxzZTwvaW5jbHVkZVN5bnRoZXRpYz4KLSAgICAgICAgICAgICAgICAgIDxpZ25vcmVNaXNzaW5nQ2xhc3Nlcz5mYWxzZTwvaWdub3JlTWlzc2luZ0NsYXNzZXM+CisgICAgICAgICAgICAgICAgICA8aWdub3JlTWlzc2luZ0NsYXNzZXM+dHJ1ZTwvaWdub3JlTWlzc2luZ0NsYXNzZXM+CiAgICAgICAgICAgICAgICAgICA8c2tpcFBvbU1vZHVsZXM+dHJ1ZTwvc2tpcFBvbU1vZHVsZXM+CiAgICAgICAgICAgICAgIDwvcGFyYW1ldGVyPgogICAgICAgICAgICAgICA8c2tpcD5mYWxzZTwvc2tpcD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzcwMDI3MS4uYjhhNjUzZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOApAQCAtMjgsMjYgKzI4LDI2IEBACiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5sb2c7dmVyc2lvbj0iWzkuNC41LDEwLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzkuNC41LDEwLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwudGhyZWFkO3ZlcnNpb249Ils5LjQuNSwxMC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIucmVzb2x2ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuYXBhY2hlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIucmVzb2x2ZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuYXBhY2hlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKICBvcmcuaGFtY3Jlc3Q7dmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCiAgb3JnLmhhbWNyZXN0LmNvcmU7dmVyc2lvbj0iWzEuMS4wLDIuMC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvcG9tLnhtbAppbmRleCAyOTg1MDUxLi42N2I0MDEyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3BvbS54bWwKQEAgLTE4LDcgKzE4LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGI2YzJjYjUuLmI1ZTZmZjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwCi1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CkBAIC0yMiwxNiArMjIsMTYgQEAKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmxvZzt2ZXJzaW9uPSJbOS40LjUsMTAuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5zZWN1cml0eTt2ZXJzaW9uPSJbOS40LjUsMTAuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5zc2w7dmVyc2lvbj0iWzkuNC41LDEwLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249IjUuMTEuMiI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQsCiAgICBqYXZheC5zZXJ2bGV0Lmh0dHAsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCAxOTllOTgyLi5kOTIwNGQzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvcG9tLnhtbAppbmRleCBlYjAwOGIwLi5iMTU1ZmYzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAxM2FhMDkzLi5iNzc3MTc0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoCi1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CkBAIC0zMywxNiArMzMsMTYgQEAKICBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLnN1YnN5c3RlbTt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zZXJ2ZXI7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnRoZW9yaWVzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNS4xMS4yIgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoO3ZlcnNpb249IjUuMTIuMSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCBiMmQyZDg5Li5lYjU2MmEwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2guc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoL3BvbS54bWwKaW5kZXggYTFmZDU0Mi4uZWZlYzU3MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGYyZjJlMTYuLmZhNjFjZTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywzNSArMywzNSBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2U7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249IjUuMTEuMiIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI1LjEyLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bGVzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcjt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydW5uZXJzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcnMubW9kZWw7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuc2xmNGo7dmVyc2lvbj0iWzEuNy4wLDIuMC4wKSIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249IjUuMTEuMiI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLApAQCAtNDQsNCArNDQsNCBAQAogICAgb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwsCiAgICBvcmcuanVuaXQucnVubmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWUiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQudGltZTt2ZXJzaW9uPSI1LjExLjIiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwudGltZSIKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnRpbWU7dmVyc2lvbj0iNS4xMi4xIjt1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWUiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGIzNThjMzguLmE0YjQ2ZTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNS4xMi4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3BvbS54bWwKaW5kZXggZWI2NTU5Ni4uODg0YWJmMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L1JlcG9zaXRvcnlUZXN0Q2FzZS5qYXZhCmluZGV4IDMyYWYwOGMuLjA0OTg4ZjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9SZXBvc2l0b3J5VGVzdENhc2UuamF2YQpAQCAtMjUsNiArMjUsNyBAQAogaW1wb3J0IGphdmEuaW8uUmVhZGVyOwogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKIGltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogCkBAIC0zOSw2ICs0MCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SW5zZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CkBAIC0zODcsNiArMzg5LDE2IEBAIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUJyYW5jaChPYmplY3RJZCBvYmplY3RJZCwgU3RyaW5nIGJyYW5jaE5hbWUpCiAJfQogCiAJLyoqCisJICogR2V0IGFsbCBSZWZzCisJICoKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgcmVmcworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgTGlzdDxSZWY+IGdldFJlZnMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZGIuZ2V0UmVmRGF0YWJhc2UoKS5nZXRSZWZzKCk7CisJfQorCisJLyoqCiAJICogQ2hlY2tvdXQgYSBicmFuY2gKIAkgKgogCSAqIEBwYXJhbSBicmFuY2hOYW1lCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGQ3NTdlNDUuLjI5NmZmOWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDcgKzMsNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKQEAgLTI4LDI0ICsyOCwyNCBAQAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwubG9nO3ZlcnNpb249Ils5LjQuNSwxMC4wLjApIiwKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNlY3VyaXR5O3ZlcnNpb249Ils5LjQuNSwxMC4wLjApIiwKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnRocmVhZDt2ZXJzaW9uPSJbOS40LjUsMTAuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Q7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5oYW1jcmVzdC5jb3JlO3ZlcnNpb249IlsxLjEuMCwyLjAuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydWxlczt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BvbS54bWwKaW5kZXggNGQ2YTc2YS4uMzE4Zjc0ZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwNTQ1ZjJkLi4xNTk2ZmViIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDE5ICszLDE5IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcgogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyCi1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7dmVyc2lvbj0iNS4xMS4yIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9ImphdmF4LnNlcnZsZXQuaHR0cCwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYiIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJqYXZheC5zZXJ2bGV0LAogICAgamF2YXguc2VydmxldC5odHRwLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWw7dmVyc2lvbj0iNS4xMS4yIjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5zMzt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5pbnRlcm5hbDt2ZXJzaW9uPSI1LjEyLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnMzO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIiCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOApAQCAtMjQsMTUgKzI0LDE1IEBACiAgamF2YXguc2VydmxldC5hbm5vdGF0aW9uO3ZlcnNpb249IlszLjEuMCw0LjAuMCkiLAogIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSJbMy4xLjAsNC4wLjApIiwKICBvcmcuYXBhY2hlLmh0dHA7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKICBvcmcuc2xmNGo7dmVyc2lvbj0iWzEuNy4wLDIuMC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDc2NDFmNGEuLjVlNGFlNTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249IjUuMTEuMi5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7dmVyc2lvbj0iNS4xMi4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9wb20ueG1sCmluZGV4IGY5MDhiZjUuLjAyZDcwZmIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBkZjkwODQ2Li43Mzk5YmExIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMjQgKzMsMjQgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCitJbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKICBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcnM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Q7dmVyc2lvbj0iNS4xMS4yIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdCIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249IjUuMTIuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BvbS54bWwKaW5kZXggZWVmM2FjOC4uNWU1OGFhNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggODc2Mzg0Zi4uZGI4MjQ3YSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMzEgKzMsMzEgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzCi1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSI1LjExLjIiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSI1LjExLjIiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsO3ZlcnNpb249IjUuMTEuMiI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdCxvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnMsb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iNS4xMS4yIgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249IjUuMTIuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuZXJyb3JzO3ZlcnNpb249IjUuMTIuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iNS4xMi4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mcyxvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSI1LjEyLjEiCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogSW1wb3J0LVBhY2thZ2U6IGNvbS5nb29nbGUuZ3Nvbjt2ZXJzaW9uPSJbMi44LjAsMy4wLjApIiwKICBjb20uZ29vZ2xlLmdzb24uc3RyZWFtO3ZlcnNpb249IlsyLjguMCwzLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIjtyZXNvbHV0aW9uOj1vcHRpb25hbCwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSI7cmVzb2x1dGlvbjo9b3B0aW9uYWwsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggZGI5YmNjNi4uOWFjYTIwYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmxmcyAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249IjUuMTEuMi5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSI1LjEyLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9wb20ueG1sCmluZGV4IGQxZjJjZTQuLjUwNWQwZTkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnM8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggY2M4NzU2ZS4uZWQxNjA0NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdCIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNS4xMi4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKaW5kZXggZWY2YThhNi4uNmUwZDFkZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDg1ZGVjNGMuLmQxNDg2NDYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5ncGcuYmMiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjUuMTEuMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI1LjEyLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL3BvbS54bWwKaW5kZXggZWViZTJjNC4uNTk4NjNlZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IGJlZmYwMGUuLmQzOTJmMTMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjUuMTEuMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI1LjEyLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCmluZGV4IDI1ODRkYWIuLmRjNGYzZWMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggY2U2ZTI0MS4uYTM3MzBiNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5qdW5pdCIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNS4xMi4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KQEAgLTI0LDcgKzI0LDcgQEAKIAogICAgPHJlcXVpcmVzPgogICAgICAgPGltcG9ydCBwbHVnaW49ImNvbS5qY3JhZnQuanNjaCIvPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjUuMTEuMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI1LjEyLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCmluZGV4IDcwZWQxMzcuLjU3MTczNzYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBhN2YwZGQ5Li5iZmFhMGZhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQubGZzIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjUuMTEuMi5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI1LjEyLjEucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpAQCAtMjMsNyArMjMsNyBAQAogICAgPC91cmw+CiAKICAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNS4xMS4yIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI1LjEyLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwKaW5kZXggNzRkOTk5Mi4uM2UzNDk5MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggZDAwOWMwYS4uNDY1NTZmNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0LnBnbSIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNS4xMi4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KQEAgLTM1LDkgKzM1LDkgQEAKICAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+CiAKICAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNS4xMS4yIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LmxmcyIgdmVyc2lvbj0iNS4xMS4yIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiIHZlcnNpb249IjUuMTEuMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNS4xMi4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LmxmcyIgdmVyc2lvbj0iNS4xMi4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiIHZlcnNpb249IjUuMTIuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KICAgIDwvcmVxdWlyZXM+CiAKICAgIDxwbHVnaW4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvcG9tLnhtbAppbmRleCAyYzFhMjgzLi4yYmE0MTE5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnJlcG9zaXRvcnkvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCmluZGV4IDQ4NDk3ZTUuLjY4NzgxYzEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnJlcG9zaXRvcnk8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCA0YjBmZjk1Li4zNjA3MDc2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuc291cmNlIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjUuMTEuMi5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI1LjEyLjEucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpAQCAtMjMsNyArMjMsNyBAQAogICAgPC91cmw+CiAKICAgIDxyZXF1aXJlcz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNS4xMS4yIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI1LjEyLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL3BvbS54bWwKaW5kZXggMGNhMDAxYy4uZmIzZmNhZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpAQCAtMzAsNyArMzAsNyBAQAogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgIDwvZGVwZW5kZW5jaWVzPgogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDNjOTAwNGIuLmQ3NDg1MDggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI1LjExLjIiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjUuMTIuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KICAgIDwvcmVxdWlyZXM+CiAKICAgIDxwbHVnaW4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCmluZGV4IGY1NjNjZmYuLmE5Y2Q3NzAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDFiYzkyMzQuLjgxNDcxMDIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2guZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2giCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjUuMTEuMiIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI1LjEyLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2guZmVhdHVyZS9wb20ueG1sCmluZGV4IDUyNmUxOGMuLmRjZjk5OGYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2guZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2guZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDQzYzBhODMuLjkyZDFhZGUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDQgKzIsNCBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6IEpHaXQgVGFyZ2V0IFBsYXRmb3JtIEJ1bmRsZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC50YXJnZXQKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEwLnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMC50YXJnZXQKaW5kZXggZDM3ZjVjYy4uNWVhNWUxZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEwLnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTAudGFyZ2V0CkBAIC0xLDI4ICsxLDI4IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjEwIiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0NjA0NSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4xMCIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDY5NTgiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjM2IiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjM2LnYyMDIxMDExNC8iLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC40MCIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC40MS52MjAyMTA1MTYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC42LnYyMDIwMTIzMS0xNjI2Ii8+CkBAIC00MSw4ICs0MSw4IEBACiAgICAgICA8dW5pdCBpZD0ibmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMTgxMTA3LTE0MTAiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYS5zb3VyY2UiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5zb3VyY2UiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcyIgdmVyc2lvbj0iMS4xOS4wLnYyMDIwMDEwNi0yMzQzIi8+CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcubG9nNGoxMi5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDExMDgtMjA0MiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTAyMjMyMzI2MzAvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDYwMjAzMTYyNy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEwLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMC50cGQKaW5kZXggMjE2ZmY1Ni4uM2ZiMzNkOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEwLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTAudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMTAiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTkuNC54LnRwZCIKLWluY2x1ZGUgIm9yYml0L1IyMDIxMDIyMzIzMjYzMC0yMDIxLTAzLnRwZCIKK2luY2x1ZGUgIm9yYml0L1IyMDIxMDYwMjAzMTYyNy0yMDIxLTA2LnRwZCIKIAogbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOC0xMi8iIHsKIAlvcmcuZWNsaXBzZS5vc2dpIGxhenkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMS50YXJnZXQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTEudGFyZ2V0CmluZGV4IDAzMjNiYzcuLmJlNWMwMzYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMS50YXJnZXQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjExLnRhcmdldApAQCAtMSwyOCArMSwyOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xMSIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDYwNDUiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTEiIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2OTU4Ij4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC4zNiIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC4zNi52MjAyMTAxMTQvIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuNDAiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuNDEudjIwMjEwNTE2LyIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguNi52MjAyMDEyMzEtMTYyNiIvPgpAQCAtNDEsOCArNDEsOCBAQAogICAgICAgPHVuaXQgaWQ9Im5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDE4MTEwNy0xNDEwIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2EiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2Euc291cmNlIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuc291cmNlIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MiIHZlcnNpb249IjEuMTkuMC52MjAyMDAxMDYtMjM0MyIvPgpAQCAtODYsNyArODYsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLmxvZzRqMTIuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAxMTA4LTIwNDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwMjIzMjMyNjMwL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTA2MDIwMzE2MjcvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMS50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTEudHBkCmluZGV4IDAxM2Q2MjEuLmYyOWE5ZmUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMS50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjExLnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjExIiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS05LjQueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTAyMjMyMzI2MzAtMjAyMS0wMy50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMTktMDMvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTIudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEyLnRhcmdldAppbmRleCBkMGUzZDRiLi5iODdlMDg2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTIudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMi50YXJnZXQKQEAgLTEsMjggKzEsMjggQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgogPD9wZGU/PgogPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgotPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTIiIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2MDQ1Ij4KKzx0YXJnZXQgbmFtZT0iamdpdC00LjEyIiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0Njk1OCI+CiAgIDxsb2NhdGlvbnM+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuMzYiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuMzYudjIwMjEwMTE0LyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjQwIiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjQxLnYyMDIxMDUxNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjYudjIwMjAxMjMxLTE2MjYiLz4KQEAgLTQxLDggKzQxLDggQEAKICAgICAgIDx1bml0IGlkPSJuZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHkuc291cmNlIiB2ZXJzaW9uPSIxLjkuMC52MjAxODExMDctMTQxMCIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhLnNvdXJjZSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYyIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLnNvdXJjZSIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzIiB2ZXJzaW9uPSIxLjE5LjAudjIwMjAwMTA2LTIzNDMiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5sb2c0ajEyLnNvdXJjZSIgdmVyc2lvbj0iMS43LjMwLnYyMDIwMTEwOC0yMDQyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHoiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHouc291cmNlIiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDIyMzIzMjYzMC9yZXBvc2l0b3J5Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwNjAyMDMxNjI3L3JlcG9zaXRvcnkiLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIHZlcnNpb249IjAuMC4wIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTIudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEyLnRwZAppbmRleCA5OTAwOGFiLi4zNWJmM2IwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTIudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMi50cGQKQEAgLTEsNyArMSw3IEBACiB0YXJnZXQgImpnaXQtNC4xMiIgd2l0aCBzb3VyY2UgY29uZmlndXJlUGhhc2UKIAogaW5jbHVkZSAicHJvamVjdHMvamV0dHktOS40LngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjEwMjIzMjMyNjMwLTIwMjEtMDMudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjEwNjAyMDMxNjI3LTIwMjEtMDYudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE5LTA2LyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEzLnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMy50YXJnZXQKaW5kZXggZWYyN2U4MC4uMDFmYzNiZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEzLnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTMudGFyZ2V0CkBAIC0xLDI4ICsxLDI4IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjEzIiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0NjA0NSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4xMyIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDY5NTgiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjM2IiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjM2LnYyMDIxMDExNC8iLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC40MCIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC40MS52MjAyMTA1MTYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC42LnYyMDIwMTIzMS0xNjI2Ii8+CkBAIC00MSw4ICs0MSw4IEBACiAgICAgICA8dW5pdCBpZD0ibmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMTgxMTA3LTE0MTAiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYS5zb3VyY2UiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5zb3VyY2UiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcyIgdmVyc2lvbj0iMS4xOS4wLnYyMDIwMDEwNi0yMzQzIi8+CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcubG9nNGoxMi5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDExMDgtMjA0MiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTAyMjMyMzI2MzAvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDYwMjAzMTYyNy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEzLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xMy50cGQKaW5kZXggZDBkYjkyYy4uNmRhOWIwMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjEzLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTMudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMTMiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTkuNC54LnRwZCIKLWluY2x1ZGUgIm9yYml0L1IyMDIxMDIyMzIzMjYzMC0yMDIxLTAzLnRwZCIKK2luY2x1ZGUgIm9yYml0L1IyMDIxMDYwMjAzMTYyNy0yMDIxLTA2LnRwZCIKIAogbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAxOS0wOS8iIHsKIAlvcmcuZWNsaXBzZS5vc2dpIGxhenkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNC50YXJnZXQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTQudGFyZ2V0CmluZGV4IGU0YzRlMGQuLmRkNjc1NzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNC50YXJnZXQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE0LnRhcmdldApAQCAtMSwyOCArMSwyOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xNCIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDYwNDUiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTQiIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2OTU4Ij4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC4zNiIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC4zNi52MjAyMTAxMTQvIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuNDAiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuNDEudjIwMjEwNTE2LyIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguNi52MjAyMDEyMzEtMTYyNiIvPgpAQCAtNDEsOCArNDEsOCBAQAogICAgICAgPHVuaXQgaWQ9Im5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDE4MTEwNy0xNDEwIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2EiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2Euc291cmNlIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuc291cmNlIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MiIHZlcnNpb249IjEuMTkuMC52MjAyMDAxMDYtMjM0MyIvPgpAQCAtODYsNyArODYsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLmxvZzRqMTIuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAxMTA4LTIwNDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwMjIzMjMyNjMwL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTA2MDIwMzE2MjcvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNC50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTQudHBkCmluZGV4IDZiMWUwZjQuLjk1MTRkNjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNC50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE0LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjE0IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS05LjQueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTAyMjMyMzI2MzAtMjAyMS0wMy50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMTktMTIvMjAxOTEyMTgxMDAwLyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE1LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNS50YXJnZXQKaW5kZXggZDc5OTg3My4uYTY3ZWM4ZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE1LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTUudGFyZ2V0CkBAIC0xLDI4ICsxLDI4IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjE1IiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0NjA0NSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4xNSIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDY5NTgiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjM2IiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjM2LnYyMDIxMDExNC8iLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC40MCIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC40MS52MjAyMTA1MTYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC42LnYyMDIwMTIzMS0xNjI2Ii8+CkBAIC00MSw4ICs0MSw4IEBACiAgICAgICA8dW5pdCBpZD0ibmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMTgxMTA3LTE0MTAiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYS5zb3VyY2UiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5zb3VyY2UiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcyIgdmVyc2lvbj0iMS4xOS4wLnYyMDIwMDEwNi0yMzQzIi8+CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcubG9nNGoxMi5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDExMDgtMjA0MiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTAyMjMyMzI2MzAvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDYwMjAzMTYyNy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE1LnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNS50cGQKaW5kZXggNzczYTlhOS4uZWRmNWNlYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE1LnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTUudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMTUiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTkuNC54LnRwZCIKLWluY2x1ZGUgIm9yYml0L1IyMDIxMDIyMzIzMjYzMC0yMDIxLTAzLnRwZCIKK2luY2x1ZGUgIm9yYml0L1IyMDIxMDYwMjAzMTYyNy0yMDIxLTA2LnRwZCIKIAogbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAyMC0wMy8yMDIwMDMxODEwMDAvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTYudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE2LnRhcmdldAppbmRleCA1ZmYxZWZjLi4xMmY3MDM4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTYudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNi50YXJnZXQKQEAgLTEsMjggKzEsMjggQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgogPD9wZGU/PgogPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgotPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTYiIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2MDQ1Ij4KKzx0YXJnZXQgbmFtZT0iamdpdC00LjE2IiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0Njk1OCI+CiAgIDxsb2NhdGlvbnM+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuMzYiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuMzYudjIwMjEwMTE0LyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjQwIiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjQxLnYyMDIxMDUxNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjYudjIwMjAxMjMxLTE2MjYiLz4KQEAgLTQxLDggKzQxLDggQEAKICAgICAgIDx1bml0IGlkPSJuZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHkuc291cmNlIiB2ZXJzaW9uPSIxLjkuMC52MjAxODExMDctMTQxMCIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhLnNvdXJjZSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYyIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLnNvdXJjZSIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzIiB2ZXJzaW9uPSIxLjE5LjAudjIwMjAwMTA2LTIzNDMiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5sb2c0ajEyLnNvdXJjZSIgdmVyc2lvbj0iMS43LjMwLnYyMDIwMTEwOC0yMDQyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHoiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHouc291cmNlIiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDIyMzIzMjYzMC9yZXBvc2l0b3J5Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwNjAyMDMxNjI3L3JlcG9zaXRvcnkiLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIHZlcnNpb249IjAuMC4wIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTYudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE2LnRwZAppbmRleCA4YjRkZThiLi41NGU4YTk2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTYudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNi50cGQKQEAgLTEsNyArMSw3IEBACiB0YXJnZXQgImpnaXQtNC4xNiIgd2l0aCBzb3VyY2UgY29uZmlndXJlUGhhc2UKIAogaW5jbHVkZSAicHJvamVjdHMvamV0dHktOS40LngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjEwMjIzMjMyNjMwLTIwMjEtMDMudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjEwNjAyMDMxNjI3LTIwMjEtMDYudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDIwLTA2LyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50YXJnZXQKaW5kZXggMWMzYWY3MC4uYjVhMWViYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTcudGFyZ2V0CkBAIC0xLDI4ICsxLDI4IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjE3IiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0NjA0NSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4xNyIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDY5NTgiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjM2IiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjM2LnYyMDIxMDExNC8iLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC40MCIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC40MS52MjAyMTA1MTYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC42LnYyMDIwMTIzMS0xNjI2Ii8+CkBAIC00MSw4ICs0MSw4IEBACiAgICAgICA8dW5pdCBpZD0ibmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMTgxMTA3LTE0MTAiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYS5zb3VyY2UiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5zb3VyY2UiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcyIgdmVyc2lvbj0iMS4xOS4wLnYyMDIwMDEwNi0yMzQzIi8+CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcubG9nNGoxMi5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDExMDgtMjA0MiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTAyMjMyMzI2MzAvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDYwMjAzMTYyNy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50cGQKaW5kZXggYjI1ODViZS4uMmIyYWYxYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTcudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMTciIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTkuNC54LnRwZCIKLWluY2x1ZGUgIm9yYml0L1IyMDIxMDIyMzIzMjYzMC0yMDIxLTAzLnRwZCIKK2luY2x1ZGUgIm9yYml0L1IyMDIxMDYwMjAzMTYyNy0yMDIxLTA2LnRwZCIKIAogbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAyMC0wOS8iIHsKIAlvcmcuZWNsaXBzZS5vc2dpIGxhenkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50YXJnZXQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTgudGFyZ2V0CmluZGV4IDI5NDRlYjQuLjc4N2JmZGUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50YXJnZXQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRhcmdldApAQCAtMSwyOCArMSwyOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xOCIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDYwNDUiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTgiIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2OTU4Ij4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC4zNiIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC4zNi52MjAyMTAxMTQvIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuNDAiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuNDEudjIwMjEwNTE2LyIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguNi52MjAyMDEyMzEtMTYyNiIvPgpAQCAtNDEsOCArNDEsOCBAQAogICAgICAgPHVuaXQgaWQ9Im5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDE4MTEwNy0xNDEwIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2EiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2Euc291cmNlIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuc291cmNlIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MiIHZlcnNpb249IjEuMTkuMC52MjAyMDAxMDYtMjM0MyIvPgpAQCAtODYsNyArODYsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLmxvZzRqMTIuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAxMTA4LTIwNDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwMjIzMjMyNjMwL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTA2MDIwMzE2MjcvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTgudHBkCmluZGV4IDZkMTYyNTYuLjBmNDJiYjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjE4IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS05LjQueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTAyMjMyMzI2MzAtMjAyMS0wMy50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjAtMTIvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRhcmdldAppbmRleCBiY2UwMTY5Li41NGY1ODgwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOS50YXJnZXQKQEAgLTEsMjggKzEsMjggQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgogPD9wZGU/PgogPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgotPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTkiIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2MDQ3Ij4KKzx0YXJnZXQgbmFtZT0iamdpdC00LjE5LXN0YWdpbmciIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2OTU4Ij4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC4zNiIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC4zNi52MjAyMTAxMTQvIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuNDAiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuNDEudjIwMjEwNTE2LyIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguNi52MjAyMDEyMzEtMTYyNiIvPgpAQCAtNDEsOCArNDEsOCBAQAogICAgICAgPHVuaXQgaWQ9Im5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDE4MTEwNy0xNDEwIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2EiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2Euc291cmNlIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuc291cmNlIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MiIHZlcnNpb249IjEuMTkuMC52MjAyMDAxMDYtMjM0MyIvPgpAQCAtODYsMTEgKzg2LDExIEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcubG9nNGoxMi5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDExMDgtMjA0MiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTAyMjMyMzI2MzAvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDYwMjAzMTYyNy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvMjAyMS0wMy8iLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3N0YWdpbmcvMjAyMS0wMy8iLz4KICAgICA8L2xvY2F0aW9uPgogICA8L2xvY2F0aW9ucz4KIDwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOS50cGQKaW5kZXggMTBjZTA1ZC4uNWU0MzA1YyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudHBkCkBAIC0xLDggKzEsOCBAQAotdGFyZ2V0ICJqZ2l0LTQuMTkiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCit0YXJnZXQgImpnaXQtNC4xOS1zdGFnaW5nIiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS05LjQueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTAyMjMyMzI2MzAtMjAyMS0wMy50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQiCiAKLWxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMDMvIiB7Citsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGFnaW5nLzIwMjEtMDMvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRhcmdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjcwZGQzCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRhcmdldApAQCAtMCwwICsxLDk2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iamdpdC00LjIwIiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0Njk1OSI+CisgIDxsb2NhdGlvbnM+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuNDAiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuNDEudjIwMjEwNTE2LyIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguNi52MjAyMDEyMzEtMTYyNiIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3Nvbi5zb3VyY2UiIHZlcnNpb249IjIuOC42LnYyMDIwMTIzMS0xNjI2Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoIiB2ZXJzaW9uPSIwLjEuNTUudjIwMTkwNDA0LTE5MDIiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2guc291cmNlIiB2ZXJzaW9uPSIwLjEuNTUudjIwMTkwNDA0LTE5MDIiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0Lmp6bGliIiB2ZXJzaW9uPSIxLjEuMS52MjAxMjA1MTAyMzA1Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qemxpYi5zb3VyY2UiIHZlcnNpb249IjEuMS4xLnYyMDEyMDUxMDIzMDUiLz4KKyAgICAgIDx1bml0IGlkPSJqYXZhZXdhaCIgdmVyc2lvbj0iMS4xLjcudjIwMjAwMTA3LTA4MzEiLz4KKyAgICAgIDx1bml0IGlkPSJqYXZhZXdhaC5zb3VyY2UiIHZlcnNpb249IjEuMS43LnYyMDIwMDEwNy0wODMxIi8+CisgICAgICA8dW5pdCBpZD0iamF2YXguc2VydmxldCIgdmVyc2lvbj0iMy4xLjAudjIwMTQxMDE2MTgwMCIvPgorICAgICAgPHVuaXQgaWQ9ImphdmF4LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSIzLjEuMC52MjAxNDEwMTYxODAwIi8+CisgICAgICA8dW5pdCBpZD0ibmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5IiB2ZXJzaW9uPSIxLjkuMC52MjAxODExMDctMTQxMCIvPgorICAgICAgPHVuaXQgaWQ9Im5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS1hZ2VudCIgdmVyc2lvbj0iMS45LjAudjIwMTgxMTA2LTE1MzQiLz4KKyAgICAgIDx1bml0IGlkPSJuZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHktYWdlbnQuc291cmNlIiB2ZXJzaW9uPSIxLjkuMC52MjAxODExMDYtMTUzNCIvPgorICAgICAgPHVuaXQgaWQ9Im5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDE4MTEwNy0xNDEwIi8+CisgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2EiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+CisgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2Euc291cmNlIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuc291cmNlIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MiIHZlcnNpb249IjEuMTkuMC52MjAyMDAxMDYtMjM0MyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5zb3VyY2UiIHZlcnNpb249IjEuMTkuMC52MjAyMDAxMDYtMjM0MyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIiB2ZXJzaW9uPSIxLjIuMC52MjAxODA0MDktMTUwMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNvdXJjZSIgdmVyc2lvbj0iMS4yLjAudjIwMTgwNDA5LTE1MDIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudC5zb3VyY2UiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTQudjIwMjEwMTI4LTIyMjUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmxvZzRqIiB2ZXJzaW9uPSIxLjIuMTUudjIwMTAxMjA3MDgxNSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUubG9nNGouc291cmNlIiB2ZXJzaW9uPSIxLjIuMTUudjIwMTAxMjA3MDgxNSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjYuMC52MjAyMTAyMDEtMjAwMyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi42LjAudjIwMjEwMjAxLTIwMDMiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi42LjAudjIwMjEwMjAxLTIwMDMiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuNi4wLnYyMDIxMDIwMS0yMDAzIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGoiIHZlcnNpb249IjMuMTQuMC52MjAyMDAxMjAtMTkyNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqLnNvdXJjZSIgdmVyc2lvbj0iMy4xNC4wLnYyMDIwMDEyMC0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjY1LjAudjIwMjAwNTI3LTE5NTUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjY1LjAudjIwMjAwNTI3LTE5NTUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS42NS4wLnYyMDIwMDUyNy0xOTU1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjY1LjAudjIwMjAwNTI3LTE5NTUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS42NS4xLnYyMDIwMDUyOS0xNTE0Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjY1LjEudjIwMjAwNTI5LTE1MTQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QiIHZlcnNpb249IjEuMS4wLnYyMDA5MDUwMTA3MTAwMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlIiB2ZXJzaW9uPSIxLjMuMC52MjAxODA0MjAtMTUxOSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlLnNvdXJjZSIgdmVyc2lvbj0iMS4zLjAudjIwMTgwNDIwLTE1MTkiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QubGlicmFyeSIgdmVyc2lvbj0iMS4zLjAudjIwMTgwNTI0LTIyNDYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QubGlicmFyeS5zb3VyY2UiIHZlcnNpb249IjEuMy4wLnYyMDE4MDUyNC0yMjQ2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmp1bml0IiB2ZXJzaW9uPSI0LjEzLjAudjIwMjAwMjA0LTE1MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuanVuaXQuc291cmNlIiB2ZXJzaW9uPSI0LjEzLjAudjIwMjAwMjA0LTE1MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcua29oc3VrZS5hcmdzNGoiIHZlcnNpb249IjIuMzMuMC52MjAxNjAzMjMtMjIxOCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5rb2hzdWtlLmFyZ3M0ai5zb3VyY2UiIHZlcnNpb249IjIuMzMuMC52MjAxNjAzMjMtMjIxOCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5tb2NraXRvIiB2ZXJzaW9uPSIyLjIzLjAudjIwMjAwMzEwLTE2NDIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcubW9ja2l0by5zb3VyY2UiIHZlcnNpb249IjIuMjMuMC52MjAyMDAzMTAtMTY0MiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5vYmplbmVzaXMiIHZlcnNpb249IjIuNi4wLnYyMDE4MDQyMC0xNTE5Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLm9iamVuZXNpcy5zb3VyY2UiIHZlcnNpb249IjIuNi4wLnYyMDE4MDQyMC0xNTE5Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmFwaSIgdmVyc2lvbj0iMS43LjMwLnYyMDIwMDIwNC0yMTUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmFwaS5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDAyMDQtMjE1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLmxvZzRqMTIiIHZlcnNpb249IjEuNy4zMC52MjAyMDExMDgtMjA0MiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLmxvZzRqMTIuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAxMTA4LTIwNDIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwNjAyMDMxNjI3L3JlcG9zaXRvcnkiLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIHZlcnNpb249IjAuMC4wIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDIxLTA2LyIvPgorICAgIDwvbG9jYXRpb24+CisgIDwvbG9jYXRpb25zPgorPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzUwY2JlCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRwZApAQCAtMCwwICsxLDggQEAKK3RhcmdldCAiamdpdC00LjIwIiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQorCitpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS05LjQueC50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQiCisKK2xvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMDYvIiB7CisJb3JnLmVjbGlwc2Uub3NnaSBsYXp5Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNi50YXJnZXQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNi50YXJnZXQKaW5kZXggMjc4YzNkMi4uNDRiM2Q4ZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjYudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC42LnRhcmdldApAQCAtMSwyOCArMSwyOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC42IiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0NjA0NSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC42IiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0Njk1OCI+CiAgIDxsb2NhdGlvbnM+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuMzYiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuMzYudjIwMjEwMTE0LyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjQwIiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjQxLnYyMDIxMDUxNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjYudjIwMjAxMjMxLTE2MjYiLz4KQEAgLTQxLDggKzQxLDggQEAKICAgICAgIDx1bml0IGlkPSJuZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHkuc291cmNlIiB2ZXJzaW9uPSIxLjkuMC52MjAxODExMDctMTQxMCIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhLnNvdXJjZSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYyIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLnNvdXJjZSIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzIiB2ZXJzaW9uPSIxLjE5LjAudjIwMjAwMTA2LTIzNDMiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5sb2c0ajEyLnNvdXJjZSIgdmVyc2lvbj0iMS43LjMwLnYyMDIwMTEwOC0yMDQyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHoiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHouc291cmNlIiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDIyMzIzMjYzMC9yZXBvc2l0b3J5Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwNjAyMDMxNjI3L3JlcG9zaXRvcnkiLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIHZlcnNpb249IjAuMC4wIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNi50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNi50cGQKaW5kZXggNmU3Y2Q4Yi4uOTZhNjA3MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjYudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC42LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjYiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTkuNC54LnRwZCIKLWluY2x1ZGUgIm9yYml0L1IyMDIxMDIyMzIzMjYzMC0yMDIxLTAzLnRwZCIKK2luY2x1ZGUgIm9yYml0L1IyMDIxMDYwMjAzMTYyNy0yMDIxLTA2LnRwZCIKIAogbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvbmVvbi8iIHsKIAlvcmcuZWNsaXBzZS5vc2dpIGxhenkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC43LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC43LnRhcmdldAppbmRleCA0NjFlMWZlLi5mZjAxZmExIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNy50YXJnZXQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjcudGFyZ2V0CkBAIC0xLDI4ICsxLDI4IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjciIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2MDQ1Ij4KKzx0YXJnZXQgbmFtZT0iamdpdC00LjciIHNlcXVlbmNlTnVtYmVyPSIxNjM4NjQ2OTU4Ij4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC4zNiIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC4zNi52MjAyMTAxMTQvIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuNDAiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuNDEudjIwMjEwNTE2LyIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguNi52MjAyMDEyMzEtMTYyNiIvPgpAQCAtNDEsOCArNDEsOCBAQAogICAgICAgPHVuaXQgaWQ9Im5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDE4MTEwNy0xNDEwIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2EiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+CiAgICAgICA8dW5pdCBpZD0ibmV0LmkycC5jcnlwdG8uZWRkc2Euc291cmNlIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50IiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjEwLnYyMDIxMDQyNi0xOTI2Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuc291cmNlIiB2ZXJzaW9uPSIxLjE0LjAudjIwMjAwODE4LTE0MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MiIHZlcnNpb249IjEuMTkuMC52MjAyMDAxMDYtMjM0MyIvPgpAQCAtODYsNyArODYsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLmxvZzRqMTIuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAxMTA4LTIwNDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwMjIzMjMyNjMwL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTA2MDIwMzE2MjcvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC43LnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC43LnRwZAppbmRleCA1YTU4YjAwLi5iZmI2OGIyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuNy50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjcudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuNyIgd2l0aCBzb3VyY2UgY29uZmlndXJlUGhhc2UKIAogaW5jbHVkZSAicHJvamVjdHMvamV0dHktOS40LngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjEwMjIzMjMyNjMwLTIwMjEtMDMudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjEwNjAyMDMxNjI3LTIwMjEtMDYudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9veHlnZW4vIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuOC50YXJnZXQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuOC50YXJnZXQKaW5kZXggYzg4ZjQ3Mi4uNzEwNGUzMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjgudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC44LnRhcmdldApAQCAtMSwyOCArMSwyOCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC44IiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0NjA0NSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC44IiBzZXF1ZW5jZU51bWJlcj0iMTYzODY0Njk1OCI+CiAgIDxsb2NhdGlvbnM+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pbyIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS05LjQuMzYiIGxvY2F0aW9uPSJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuMzYudjIwMjEwMTE0LyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjQwIiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjQxLnYyMDIxMDUxNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjYudjIwMjAxMjMxLTE2MjYiLz4KQEAgLTQxLDggKzQxLDggQEAKICAgICAgIDx1bml0IGlkPSJuZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHkuc291cmNlIiB2ZXJzaW9uPSIxLjkuMC52MjAxODExMDctMTQxMCIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhIiB2ZXJzaW9uPSIwLjMuMC52MjAxODExMDItMTMyMyIvPgogICAgICAgPHVuaXQgaWQ9Im5ldC5pMnAuY3J5cHRvLmVkZHNhLnNvdXJjZSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQuc291cmNlIiB2ZXJzaW9uPSIxLjEwLjkudjIwMjAxMTA2LTE5NDYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudCIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC4xMC52MjAyMTA0MjYtMTkyNiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYyIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvZGVjLnNvdXJjZSIgdmVyc2lvbj0iMS4xNC4wLnYyMDIwMDgxOC0xNDIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzIiB2ZXJzaW9uPSIxLjE5LjAudjIwMjAwMTA2LTIzNDMiLz4KQEAgLTg2LDcgKzg2LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5sb2c0ajEyLnNvdXJjZSIgdmVyc2lvbj0iMS43LjMwLnYyMDIwMTEwOC0yMDQyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHoiIHZlcnNpb249IjEuOC4wLnYyMDE4MDIwNy0xNjEzIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHouc291cmNlIiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDIyMzIzMjYzMC9yZXBvc2l0b3J5Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwNjAyMDMxNjI3L3JlcG9zaXRvcnkiLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIHZlcnNpb249IjAuMC4wIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuOC50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuOC50cGQKaW5kZXggMzExNDg3Ny4uZTNlNmIyMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjgudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC44LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjgiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTkuNC54LnRwZCIKLWluY2x1ZGUgIm9yYml0L1IyMDIxMDIyMzIzMjYzMC0yMDIxLTAzLnRwZCIKK2luY2x1ZGUgIm9yYml0L1IyMDIxMDYwMjAzMTYyNy0yMDIxLTA2LnRwZCIKIAogbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvcGhvdG9uLyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjkudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjkudGFyZ2V0CmluZGV4IDM2NzBmYTguLjVhYTZjOTAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC45LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuOS50YXJnZXQKQEAgLTEsMjggKzEsMjggQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgogPD9wZGU/PgogPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgotPHRhcmdldCBuYW1lPSJqZ2l0LTQuOSIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDYwNDUiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuOSIgc2VxdWVuY2VOdW1iZXI9IjE2Mzg2NDY5NTgiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaHR0cCIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8iIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciIgdmVyc2lvbj0iOS40LjM2LnYyMDIxMDExNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXgiIHZlcnNpb249IjkuNC4zNi52MjAyMTAxMTQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIiB2ZXJzaW9uPSI5LjQuMzYudjIwMjEwMTE0Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktOS40LjM2IiBsb2NhdGlvbj0iaHR0cHM6Ly9hcmNoaXZlLmVjbGlwc2Uub3JnL2pldHR5L3VwZGF0ZXMvamV0dHktYnVuZGxlcy05LngvamV0dHktYnVuZGxlcy05LngvOS40LjM2LnYyMDIxMDExNC8iLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5jbGllbnQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuY29udGludWF0aW9uLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5Lmh0dHAiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5odHRwLnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LmlvIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuaW8uc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eS5zb3VyY2UiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIiIHZlcnNpb249IjkuNC40MS52MjAyMTA1MTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2ZXIuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbCIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc291cmNlIiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4IiB2ZXJzaW9uPSI5LjQuNDEudjIwMjEwNTE2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuamV0dHkudXRpbC5hamF4LnNvdXJjZSIgdmVyc2lvbj0iOS40LjQxLnYyMDIxMDUxNiIvPgorICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTkuNC40MCIgbG9jYXRpb249Imh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC40MS52MjAyMTA1MTYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC42LnYyMDIwMTIzMS0xNjI2Ii8+CkBAIC00MSw4ICs0MSw4IEBACiAgICAgICA8dW5pdCBpZD0ibmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMTgxMTA3LTE0MTAiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYSIgdmVyc2lvbj0iMC4zLjAudjIwMTgxMTAyLTEzMjMiLz4KICAgICAgIDx1bml0IGlkPSJuZXQuaTJwLmNyeXB0by5lZGRzYS5zb3VyY2UiIHZlcnNpb249IjAuMy4wLnYyMDE4MTEwMi0xMzIzIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuOS52MjAyMDExMDYtMTk0NiIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYW50LnNvdXJjZSIgdmVyc2lvbj0iMS4xMC45LnYyMDIwMTEwNi0xOTQ2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5hbnQiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmFudC5zb3VyY2UiIHZlcnNpb249IjEuMTAuMTAudjIwMjEwNDI2LTE5MjYiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5zb3VyY2UiIHZlcnNpb249IjEuMTQuMC52MjAyMDA4MTgtMTQyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcyIgdmVyc2lvbj0iMS4xOS4wLnYyMDIwMDEwNi0yMzQzIi8+CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcubG9nNGoxMi5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDExMDgtMjA0MiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjguMC52MjAxODAyMDctMTYxMyIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS44LjAudjIwMTgwMjA3LTE2MTMiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTAyMjMyMzI2MzAvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMDYwMjAzMTYyNy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjkudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjkudHBkCmluZGV4IDEzMmEwYjAuLjkzOGQ4MGIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC45LnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuOS50cGQKQEAgLTEsNyArMSw3IEBACiB0YXJnZXQgImpnaXQtNC45IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS05LjQueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTAyMjMyMzI2MzAtMjAyMS0wMy50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMTgtMDkvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAyMTA2MDIwMzE2MjctMjAyMS0wNi50cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiNWJiMwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDIxMDYwMjAzMTYyNy0yMDIxLTA2LnRwZApAQCAtMCwwICsxLDY2IEBACit0YXJnZXQgIlIyMDIxMDYwMjAzMTYyNy0yMDIxLTA2IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQorLy8gc2VlIGh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzLworCitsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjEwNjAyMDMxNjI3L3JlcG9zaXRvcnkiIHsKKwljb20uZ29vZ2xlLmdzb24gWzIuOC42LnYyMDIwMTIzMS0xNjI2LDIuOC42LnYyMDIwMTIzMS0xNjI2XQorCWNvbS5nb29nbGUuZ3Nvbi5zb3VyY2UgWzIuOC42LnYyMDIwMTIzMS0xNjI2LDIuOC42LnYyMDIwMTIzMS0xNjI2XQorCWNvbS5qY3JhZnQuanNjaCBbMC4xLjU1LnYyMDE5MDQwNC0xOTAyLDAuMS41NS52MjAxOTA0MDQtMTkwMl0KKwljb20uamNyYWZ0LmpzY2guc291cmNlIFswLjEuNTUudjIwMTkwNDA0LTE5MDIsMC4xLjU1LnYyMDE5MDQwNC0xOTAyXQorCWNvbS5qY3JhZnQuanpsaWIgWzEuMS4xLnYyMDEyMDUxMDIzMDUsMS4xLjEudjIwMTIwNTEwMjMwNV0KKwljb20uamNyYWZ0Lmp6bGliLnNvdXJjZSBbMS4xLjEudjIwMTIwNTEwMjMwNSwxLjEuMS52MjAxMjA1MTAyMzA1XQorCWphdmFld2FoIFsxLjEuNy52MjAyMDAxMDctMDgzMSwxLjEuNy52MjAyMDAxMDctMDgzMV0KKwlqYXZhZXdhaC5zb3VyY2UgWzEuMS43LnYyMDIwMDEwNy0wODMxLDEuMS43LnYyMDIwMDEwNy0wODMxXQorCWphdmF4LnNlcnZsZXQgWzMuMS4wLnYyMDE0MTAxNjE4MDAsMy4xLjAudjIwMTQxMDE2MTgwMF0KKwlqYXZheC5zZXJ2bGV0LnNvdXJjZSBbMy4xLjAudjIwMTQxMDE2MTgwMCwzLjEuMC52MjAxNDEwMTYxODAwXQorCW5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeSBbMS45LjAudjIwMTgxMTA3LTE0MTAsMS45LjAudjIwMTgxMTA3LTE0MTBdCisJbmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5LWFnZW50IFsxLjkuMC52MjAxODExMDYtMTUzNCwxLjkuMC52MjAxODExMDYtMTUzNF0KKwluZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHktYWdlbnQuc291cmNlIFsxLjkuMC52MjAxODExMDYtMTUzNCwxLjkuMC52MjAxODExMDYtMTUzNF0KKwluZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHkuc291cmNlIFsxLjkuMC52MjAxODExMDctMTQxMCwxLjkuMC52MjAxODExMDctMTQxMF0KKwluZXQuaTJwLmNyeXB0by5lZGRzYSBbMC4zLjAudjIwMTgxMTAyLTEzMjMsMC4zLjAudjIwMTgxMTAyLTEzMjNdCisJbmV0LmkycC5jcnlwdG8uZWRkc2Euc291cmNlIFswLjMuMC52MjAxODExMDItMTMyMywwLjMuMC52MjAxODExMDItMTMyM10KKwlvcmcuYXBhY2hlLmFudCBbMS4xMC4xMC52MjAyMTA0MjYtMTkyNiwxLjEwLjEwLnYyMDIxMDQyNi0xOTI2XQorCW9yZy5hcGFjaGUuYW50LnNvdXJjZSBbMS4xMC4xMC52MjAyMTA0MjYtMTkyNiwxLjEwLjEwLnYyMDIxMDQyNi0xOTI2XQorCW9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYyBbMS4xNC4wLnYyMDIwMDgxOC0xNDIyLDEuMTQuMC52MjAyMDA4MTgtMTQyMl0KKwlvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuc291cmNlIFsxLjE0LjAudjIwMjAwODE4LTE0MjIsMS4xNC4wLnYyMDIwMDgxOC0xNDIyXQorCW9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcyBbMS4xOS4wLnYyMDIwMDEwNi0yMzQzLDEuMTkuMC52MjAyMDAxMDYtMjM0M10KKwlvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3Muc291cmNlIFsxLjE5LjAudjIwMjAwMTA2LTIzNDMsMS4xOS4wLnYyMDIwMDEwNi0yMzQzXQorCW9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIFsxLjIuMC52MjAxODA0MDktMTUwMiwxLjIuMC52MjAxODA0MDktMTUwMl0KKwlvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5zb3VyY2UgWzEuMi4wLnYyMDE4MDQwOS0xNTAyLDEuMi4wLnYyMDE4MDQwOS0xNTAyXQorCW9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudCBbNC41LjEzLnYyMDIxMDEyOC0yMjI1LDQuNS4xMy52MjAyMTAxMjgtMjIyNV0KKwlvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQuc291cmNlIFs0LjUuMTMudjIwMjEwMTI4LTIyMjUsNC41LjEzLnYyMDIxMDEyOC0yMjI1XQorCW9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUgWzQuNC4xNC52MjAyMTAxMjgtMjIyNSw0LjQuMTQudjIwMjEwMTI4LTIyMjVdCisJb3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UgWzQuNC4xNC52MjAyMTAxMjgtMjIyNSw0LjQuMTQudjIwMjEwMTI4LTIyMjVdCisJb3JnLmFwYWNoZS5sb2c0aiBbMS4yLjE1LnYyMDEwMTIwNzA4MTUsMS4yLjE1LnYyMDEwMTIwNzA4MTVdCisJb3JnLmFwYWNoZS5sb2c0ai5zb3VyY2UgWzEuMi4xNS52MjAxMDEyMDcwODE1LDEuMi4xNS52MjAxMDEyMDcwODE1XQorCW9yZy5hcGFjaGUuc3NoZC5vc2dpIFsyLjYuMC52MjAyMTAyMDEtMjAwMywyLjYuMC52MjAyMTAyMDEtMjAwM10KKwlvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UgWzIuNi4wLnYyMDIxMDIwMS0yMDAzLDIuNi4wLnYyMDIxMDIwMS0yMDAzXQorCW9yZy5hcGFjaGUuc3NoZC5zZnRwIFsyLjYuMC52MjAyMTAyMDEtMjAwMywyLjYuMC52MjAyMTAyMDEtMjAwM10KKwlvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UgWzIuNi4wLnYyMDIxMDIwMS0yMDAzLDIuNi4wLnYyMDIxMDIwMS0yMDAzXQorCW9yZy5hc3NlcnRqIFszLjE0LjAudjIwMjAwMTIwLTE5MjYsMy4xNC4wLnYyMDIwMDEyMC0xOTI2XQorCW9yZy5hc3NlcnRqLnNvdXJjZSBbMy4xNC4wLnYyMDIwMDEyMC0xOTI2LDMuMTQuMC52MjAyMDAxMjAtMTkyNl0KKwlvcmcuYm91bmN5Y2FzdGxlLmJjcGcgWzEuNjUuMC52MjAyMDA1MjctMTk1NSwxLjY1LjAudjIwMjAwNTI3LTE5NTVdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3BnLnNvdXJjZSBbMS42NS4wLnYyMDIwMDUyNy0xOTU1LDEuNjUuMC52MjAyMDA1MjctMTk1NV0KKwlvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCBbMS42NS4wLnYyMDIwMDUyNy0xOTU1LDEuNjUuMC52MjAyMDA1MjctMTk1NV0KKwlvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UgWzEuNjUuMC52MjAyMDA1MjctMTk1NSwxLjY1LjAudjIwMjAwNTI3LTE5NTVdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3Byb3YgWzEuNjUuMS52MjAyMDA1MjktMTUxNCwxLjY1LjEudjIwMjAwNTI5LTE1MTRdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIFsxLjY1LjEudjIwMjAwNTI5LTE1MTQsMS42NS4xLnYyMDIwMDUyOS0xNTE0XQorCW9yZy5oYW1jcmVzdCBbMS4xLjAudjIwMDkwNTAxMDcxMDAwLDEuMS4wLnYyMDA5MDUwMTA3MTAwMF0KKwlvcmcuaGFtY3Jlc3QuY29yZSBbMS4zLjAudjIwMTgwNDIwLTE1MTksMS4zLjAudjIwMTgwNDIwLTE1MTldCisJb3JnLmhhbWNyZXN0LmNvcmUuc291cmNlIFsxLjMuMC52MjAxODA0MjAtMTUxOSwxLjMuMC52MjAxODA0MjAtMTUxOV0KKwlvcmcuaGFtY3Jlc3QubGlicmFyeSBbMS4zLjAudjIwMTgwNTI0LTIyNDYsMS4zLjAudjIwMTgwNTI0LTIyNDZdCisJb3JnLmhhbWNyZXN0LmxpYnJhcnkuc291cmNlIFsxLjMuMC52MjAxODA1MjQtMjI0NiwxLjMuMC52MjAxODA1MjQtMjI0Nl0KKwlvcmcuanVuaXQgWzQuMTMuMC52MjAyMDAyMDQtMTUwMCw0LjEzLjAudjIwMjAwMjA0LTE1MDBdCisJb3JnLmp1bml0LnNvdXJjZSBbNC4xMy4wLnYyMDIwMDIwNC0xNTAwLDQuMTMuMC52MjAyMDAyMDQtMTUwMF0KKwlvcmcua29oc3VrZS5hcmdzNGogWzIuMzMuMC52MjAxNjAzMjMtMjIxOCwyLjMzLjAudjIwMTYwMzIzLTIyMThdCisJb3JnLmtvaHN1a2UuYXJnczRqLnNvdXJjZSBbMi4zMy4wLnYyMDE2MDMyMy0yMjE4LDIuMzMuMC52MjAxNjAzMjMtMjIxOF0KKwlvcmcubW9ja2l0byBbMi4yMy4wLnYyMDIwMDMxMC0xNjQyLDIuMjMuMC52MjAyMDAzMTAtMTY0Ml0KKwlvcmcubW9ja2l0by5zb3VyY2UgWzIuMjMuMC52MjAyMDAzMTAtMTY0MiwyLjIzLjAudjIwMjAwMzEwLTE2NDJdCisJb3JnLm9iamVuZXNpcyBbMi42LjAudjIwMTgwNDIwLTE1MTksMi42LjAudjIwMTgwNDIwLTE1MTldCisJb3JnLm9iamVuZXNpcy5zb3VyY2UgWzIuNi4wLnYyMDE4MDQyMC0xNTE5LDIuNi4wLnYyMDE4MDQyMC0xNTE5XQorCW9yZy5zbGY0ai5hcGkgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnNsZjRqLmFwaS5zb3VyY2UgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnNsZjRqLmJpbmRpbmcubG9nNGoxMiBbMS43LjMwLnYyMDIwMTEwOC0yMDQyLDEuNy4zMC52MjAyMDExMDgtMjA0Ml0KKwlvcmcuc2xmNGouYmluZGluZy5sb2c0ajEyLnNvdXJjZSBbMS43LjMwLnYyMDIwMTEwOC0yMDQyLDEuNy4zMC52MjAyMDExMDgtMjA0Ml0KKwlvcmcudHVrYWFuaS54eiBbMS44LjAudjIwMTgwMjA3LTE2MTMsMS44LjAudjIwMTgwMjA3LTE2MTNdCisJb3JnLnR1a2FhbmkueHouc291cmNlIFsxLjguMC52MjAxODAyMDctMTYxMywxLjguMC52MjAxODAyMDctMTYxM10KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wb20ueG1sCmluZGV4IDcwZjdjZWEuLjU4NDdiNzkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvcG9tLnhtbApAQCAtMTYsNyArMTYsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC50YXJnZXQ8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wcm9qZWN0cy9qZXR0eS05LjQueC50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wcm9qZWN0cy9qZXR0eS05LjQueC50cGQKaW5kZXggM2RmZDJhOS4uY2UxMDgyOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvcHJvamVjdHMvamV0dHktOS40LngudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L3Byb2plY3RzL2pldHR5LTkuNC54LnRwZApAQCAtMSwyMiArMSwyMiBAQAogdGFyZ2V0ICJqZXR0eS05LjQueCIgd2l0aCBzb3VyY2UgY29uZmlndXJlUGhhc2UKIAotbG9jYXRpb24gamV0dHktOS40LjM2ICJodHRwczovL2FyY2hpdmUuZWNsaXBzZS5vcmcvamV0dHkvdXBkYXRlcy9qZXR0eS1idW5kbGVzLTkueC9qZXR0eS1idW5kbGVzLTkueC85LjQuMzYudjIwMjEwMTE0LyIgewotCW9yZy5lY2xpcHNlLmpldHR5LmNsaWVudCBbOS40LjM2LnYyMDIxMDExNCw5LjQuMzYudjIwMjEwMTE0XQotCW9yZy5lY2xpcHNlLmpldHR5LmNsaWVudC5zb3VyY2UgWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24gWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS5jb250aW51YXRpb24uc291cmNlIFs5LjQuMzYudjIwMjEwMTE0LDkuNC4zNi52MjAyMTAxMTRdCi0Jb3JnLmVjbGlwc2UuamV0dHkuaHR0cCBbOS40LjM2LnYyMDIxMDExNCw5LjQuMzYudjIwMjEwMTE0XQotCW9yZy5lY2xpcHNlLmpldHR5Lmh0dHAuc291cmNlIFs5LjQuMzYudjIwMjEwMTE0LDkuNC4zNi52MjAyMTAxMTRdCi0Jb3JnLmVjbGlwc2UuamV0dHkuaW8gWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS5pby5zb3VyY2UgWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS5zZWN1cml0eSBbOS40LjM2LnYyMDIxMDExNCw5LjQuMzYudjIwMjEwMTE0XQotCW9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5LnNvdXJjZSBbOS40LjM2LnYyMDIxMDExNCw5LjQuMzYudjIwMjEwMTE0XQotCW9yZy5lY2xpcHNlLmpldHR5LnNlcnZlciBbOS40LjM2LnYyMDIxMDExNCw5LjQuMzYudjIwMjEwMTE0XQotCW9yZy5lY2xpcHNlLmpldHR5LnNlcnZlci5zb3VyY2UgWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0IFs5LjQuMzYudjIwMjEwMTE0LDkuNC4zNi52MjAyMTAxMTRdCi0Jb3JnLmVjbGlwc2UuamV0dHkuc2VydmxldC5zb3VyY2UgWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS51dGlsIFs5LjQuMzYudjIwMjEwMTE0LDkuNC4zNi52MjAyMTAxMTRdCi0Jb3JnLmVjbGlwc2UuamV0dHkudXRpbC5zb3VyY2UgWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXggWzkuNC4zNi52MjAyMTAxMTQsOS40LjM2LnYyMDIxMDExNF0KLQlvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmFqYXguc291cmNlIFs5LjQuMzYudjIwMjEwMTE0LDkuNC4zNi52MjAyMTAxMTRdCitsb2NhdGlvbiBqZXR0eS05LjQuNDAgImh0dHBzOi8vYXJjaGl2ZS5lY2xpcHNlLm9yZy9qZXR0eS91cGRhdGVzL2pldHR5LWJ1bmRsZXMtOS54L2pldHR5LWJ1bmRsZXMtOS54LzkuNC40MS52MjAyMTA1MTYvIiB7CisJb3JnLmVjbGlwc2UuamV0dHkuY2xpZW50IFs5LjQuNDEudjIwMjEwNTE2LDkuNC40MS52MjAyMTA1MTZdCisJb3JnLmVjbGlwc2UuamV0dHkuY2xpZW50LnNvdXJjZSBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbiBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LmNvbnRpbnVhdGlvbi5zb3VyY2UgWzkuNC40MS52MjAyMTA1MTYsOS40LjQxLnYyMDIxMDUxNl0KKwlvcmcuZWNsaXBzZS5qZXR0eS5odHRwIFs5LjQuNDEudjIwMjEwNTE2LDkuNC40MS52MjAyMTA1MTZdCisJb3JnLmVjbGlwc2UuamV0dHkuaHR0cC5zb3VyY2UgWzkuNC40MS52MjAyMTA1MTYsOS40LjQxLnYyMDIxMDUxNl0KKwlvcmcuZWNsaXBzZS5qZXR0eS5pbyBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LmlvLnNvdXJjZSBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LnNlY3VyaXR5IFs5LjQuNDEudjIwMjEwNTE2LDkuNC40MS52MjAyMTA1MTZdCisJb3JnLmVjbGlwc2UuamV0dHkuc2VjdXJpdHkuc291cmNlIFs5LjQuNDEudjIwMjEwNTE2LDkuNC40MS52MjAyMTA1MTZdCisJb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyIFs5LjQuNDEudjIwMjEwNTE2LDkuNC40MS52MjAyMTA1MTZdCisJb3JnLmVjbGlwc2UuamV0dHkuc2VydmVyLnNvdXJjZSBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQgWzkuNC40MS52MjAyMTA1MTYsOS40LjQxLnYyMDIxMDUxNl0KKwlvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LnNvdXJjZSBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LnV0aWwgWzkuNC40MS52MjAyMTA1MTYsOS40LjQxLnYyMDIxMDUxNl0KKwlvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNvdXJjZSBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheCBbOS40LjQxLnYyMDIxMDUxNiw5LjQuNDEudjIwMjEwNTE2XQorCW9yZy5lY2xpcHNlLmpldHR5LnV0aWwuYWpheC5zb3VyY2UgWzkuNC40MS52MjAyMTA1MTYsOS40LjQxLnYyMDIxMDUxNl0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9wb20ueG1sCmluZGV4IGY1MWE2NDIuLjM4YmU5M2IgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvcG9tLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KIAogICA8bmFtZT5KR2l0IFR5Y2hvIFBhcmVudDwvbmFtZT4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGFlNjcxMjUuLjcwNGFkN2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywyOCArMywyOCBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAotSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249IjUuMTEuMiIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249IjUuMTIuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5oYW1jcmVzdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMS4xLjAsMi4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVsZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvcG9tLnhtbAppbmRleCBjYTkwOGE0Li43N2RkODVmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmV2TGlzdFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL1Jldkxpc3RUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZmZGRjMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL1Jldkxpc3RUZXN0LmphdmEKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSwga3lsZXpoYW8gPGt5bGV6aGFvQHRlbmNlbnQuY29tPiBhbmQgb3RoZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5HaXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ0xJUmVwb3NpdG9yeVRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIFJldkxpc3RUZXN0IGV4dGVuZHMgQ0xJUmVwb3NpdG9yeVRlc3RDYXNlIHsKKworCXByaXZhdGUgR2l0IGdpdDsKKworCUBPdmVycmlkZQorCUBCZWZvcmUKKwlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlnaXQgPSBuZXcgR2l0KGRiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RXaXRoUGFyZW50c0ZsYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJTGlzdDxSZXZDb21taXQ+IGNvbW1pdHMgPSBjcmVhdGVDb21taXRzRm9yUGFyZW50c0ZsYWcoZ2l0KTsKKwkJU3RyaW5nIHJlc3VsdCA9IHRvU3RyaW5nKAorCQkJCWV4ZWN1dGUoImdpdCByZXYtbGlzdCBIRUFEIC0tcGFyZW50cyAtLSBUZXN0LnR4dCIpKTsKKworCQlTdHJpbmcgZXhwZWN0ID0gdG9TdHJpbmcoCisJCQkJY29tbWl0cy5nZXQoMykubmFtZSgpICsgJyAnICsgY29tbWl0cy5nZXQoMSkubmFtZSgpLAorCQkJCWNvbW1pdHMuZ2V0KDEpLm5hbWUoKSk7CisKKwkJYXNzZXJ0RXF1YWxzKGV4cGVjdCwgcmVzdWx0KTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RXaXRob3V0UGFyZW50c0ZsYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJTGlzdDxSZXZDb21taXQ+IGNvbW1pdHMgPSBjcmVhdGVDb21taXRzRm9yUGFyZW50c0ZsYWcoZ2l0KTsKKwkJU3RyaW5nIHJlc3VsdCA9IHRvU3RyaW5nKGV4ZWN1dGUoImdpdCByZXYtbGlzdCBIRUFEIC0tIFRlc3QudHh0IikpOworCisJCVN0cmluZyBleHBlY3QgPSB0b1N0cmluZyhjb21taXRzLmdldCgzKS5uYW1lKCksIGNvbW1pdHMuZ2V0KDEpLm5hbWUoKSk7CisKKwkJYXNzZXJ0RXF1YWxzKGV4cGVjdCwgcmVzdWx0KTsKKwl9CisKKwlwcml2YXRlIExpc3Q8UmV2Q29tbWl0PiBjcmVhdGVDb21taXRzRm9yUGFyZW50c0ZsYWcoR2l0IGdpdCkKKwkJCXRocm93cyBFeGNlcHRpb24geworCQlMaXN0PFJldkNvbW1pdD4gY29tbWl0cyA9IG5ldyBBcnJheUxpc3Q8PigpOworCQl3cml0ZVRyYXNoRmlsZSgiVGVzdDEudHh0IiwgIkhlbGxvIHdvcmxkIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiVGVzdDEudHh0IikuY2FsbCgpOworCQljb21taXRzLmFkZChnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0IzAiKS5jYWxsKCkpOworCQl3cml0ZVRyYXNoRmlsZSgiVGVzdC50eHQiLCAiSGVsbG8gd29ybGQhIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiVGVzdC50eHQiKS5jYWxsKCk7CisJCWNvbW1pdHMuYWRkKGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQjMSIpLmNhbGwoKSk7CisJCXdyaXRlVHJhc2hGaWxlKCJUZXN0MS50eHQiLCAiSGVsbG8gd29ybGQhISIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIlRlc3QxLnR4dCIpLmNhbGwoKTsKKwkJY29tbWl0cy5hZGQoZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdCMyIikuY2FsbCgpKTsKKwkJd3JpdGVUcmFzaEZpbGUoIlRlc3QudHh0IiwgIkhlbGxvIHdvcmxkISEhIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiVGVzdC50eHQiKS5jYWxsKCk7CisJCWNvbW1pdHMuYWRkKGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXQjMyIpLmNhbGwoKSk7CisJCXJldHVybiBjb21taXRzOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOTIwMGQzYi4uYjRhMTg1OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbQotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOApAQCAtMTQsNDYgKzE0LDQ2IEBACiAgb3JnLmVjbGlwc2UuamV0dHkuc2VydmxldDt2ZXJzaW9uPSJbOS40LjUsMTAuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbDt2ZXJzaW9uPSJbOS40LjUsMTAuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5jb21wb25lbnQ7dmVyc2lvbj0iWzkuNC41LDEwLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuczM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2U7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubm90ZXM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuaW87dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnMzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuYXBhY2hlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLmtvaHN1a2UuYXJnczRqO3ZlcnNpb249IlsyLjMzLjAsMy4wLjApIiwKICBvcmcua29oc3VrZS5hcmdzNGouc3BpO3ZlcnNpb249IlsyLjMzLjAsMy4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuY29uc29sZTt2ZXJzaW9uPSI1LjExLjIiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuY29uc29sZTt2ZXJzaW9uPSI1LjEyLjEiOwogIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbywKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWksCkBAIC02NSwxNCArNjUsMTQgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIGphdmF4LnN3aW5nIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5kZWJ1Zzt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW8sCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSwKICAgIG9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQiLAotIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iNS4xMi4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20ub3B0O3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5wZ20ub3B0O3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcua29oc3VrZS5hcmdzNGosCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCBkZjAxMzM5Li44ZjQzM2Q1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5wZ20uc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3BvbS54bWwKaW5kZXggYzA3ZTE0Ni4uMzZkYTRhYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5wcm9wZXJ0aWVzCmluZGV4IDgzODQ2ZWUuLjM4ZGVhYjkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcwpAQCAtMTE1LDYgKzExNSw3IEBACiBtZXRhVmFyX2Nvbm5Qcm9wPWNvbm4ucHJvcAogbWV0YVZhcl9kaWZmQWxnPUFMR09SSVRITQogbWV0YVZhcl9kaXJlY3Rvcnk9RElSRUNUT1JZCittZXRhVmFyX2V4dHJhQXJndW1lbnQ9b3Vyc3x0aGVpcnMKIG1ldGFWYXJfZmlsZT1GSUxFCiBtZXRhVmFyX2ZpbGVwYXR0ZXJuPWZpbGVwYXR0ZXJuCiBtZXRhVmFyX2dpdERpcj1HSVRfRElSCkBAIC0yMTcsNiArMjE4LDcgQEAKIHRyZWVJc1JlcXVpcmVkPWFyZ3VtZW50IHRyZWUgaXMgcmVxdWlyZWQKIHRvb01hbnlSZWZzR2l2ZW49VG9vIG1hbnkgcmVmcyBnaXZlbgogdW5rbm93bklvRXJyb3JTdGRvdXQ9QW4gdW5rbm93biBJL08gZXJyb3Igb2NjdXJyZWQgb24gc3RhbmRhcmQgb3V0cHV0Cit1bmtub3duRXh0cmFBcmd1bWVudD11bmtub3duIGV4dHJhIGFyZ3VtZW50IC1YIHswfSBzcGVjaWZpZWQKIHVua25vd25NZXJnZVN0cmF0ZWd5PXVua25vd24gbWVyZ2Ugc3RyYXRlZ3kgezB9IHNwZWNpZmllZAogdW5rbm93blN1YmNvbW1hbmQ9VW5rbm93biBzdWJjb21tYW5kOiB7MH0KIHVubWVyZ2VkUGF0aHM9VW5tZXJnZWQgcGF0aHM6CkBAIC0yMjYsNiArMjI4LDcgQEAKIHVzYWdlX0FnZ3Jlc3NpdmU9VGhpcyBvcHRpb24gd2lsbCBjYXVzZSBnYyB0byBtb3JlIGFnZ3Jlc3NpdmVseSBvcHRpbWl6ZSB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgZXhwZW5zZSBvZiB0YWtpbmcgbXVjaCBtb3JlIHRpbWUKIHVzYWdlX0Fsd2F5c0ZhbGxiYWNrPVNob3cgdW5pcXVlbHkgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjawogdXNhZ2VfYmFyZUNsb25lPU1ha2UgYSBiYXJlIEdpdCByZXBvc2l0b3J5LiBUaGF0IGlzLCBpbnN0ZWFkIG9mIGNyZWF0aW5nIFtESVJFQ1RPUlldIGFuZCBwbGFjaW5nIHRoZSBhZG1pbmlzdHJhdGl2ZSBmaWxlcyBpbiBbRElSRUNUT1JZXS8uZ2l0LCBtYWtlIHRoZSBbRElSRUNUT1JZXSBpdHNlbGYgdGhlICRHSVRfRElSLgordXNhZ2VfZXh0cmFBcmd1bWVudD1QYXNzIGFuIGV4dHJhIGFyZ3VtZW50IHRvIGEgbWVyZ2UgZHJpdmVyLiBDdXJyZW50bHkgc3VwcG9ydGVkIGFyZSAiLVggb3VycyIgYW5kICItWCB0aGVpcnMiLgogdXNhZ2VfbWlycm9yQ2xvbmU9U2V0IHVwIGEgbWlycm9yIG9mIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4gVGhpcyBpbXBsaWVzIC0tYmFyZS4gQ29tcGFyZWQgdG8gLS1iYXJlLCAtLW1pcnJvciBub3Qgb25seSBtYXBzIFwKIGxvY2FsIGJyYW5jaGVzIG9mIHRoZSBzb3VyY2UgdG8gbG9jYWwgYnJhbmNoZXMgb2YgdGhlIHRhcmdldCwgaXQgbWFwcyBhbGwgcmVmcyAoaW5jbHVkaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgbm90ZXMgZXRjLikgXAogYW5kIHNldHMgdXAgYSByZWZzcGVjIGNvbmZpZ3VyYXRpb24gc3VjaCB0aGF0IGFsbCB0aGVzZSByZWZzIGFyZSBvdmVyd3JpdHRlbiBieSBhIGdpdCByZW1vdGUgdXBkYXRlIGluIHRoZSB0YXJnZXQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9NZXJnZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKaW5kZXggZmRjNDQ5ZS4uY2E0ODc3ZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuQ29udGVudE1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlci5NZXJnZUZhaWx1cmVSZWFzb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWwuQ0xJVGV4dDsKQEAgLTY5LDYgKzcwLDIwIEBAIHZvaWQgZmZvbmx5KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBmaW5hbCBib29sZWFuIGlnbm9yZWQpIHsKIAlAT3B0aW9uKG5hbWUgPSAiLW0iLCB1c2FnZSA9ICJ1c2FnZV9tZXNzYWdlIikKIAlwcml2YXRlIFN0cmluZyBtZXNzYWdlOwogCisJcHJpdmF0ZSBDb250ZW50TWVyZ2VTdHJhdGVneSBjb250ZW50U3RyYXRlZ3kgPSBudWxsOworCisJQE9wdGlvbihuYW1lID0gIi0tc3RyYXRlZ3ktb3B0aW9uIiwgYWxpYXNlcyA9IHsgIi1YIiB9LAorCQkJbWV0YVZhciA9ICJtZXRhVmFyX2V4dHJhQXJndW1lbnQiLCB1c2FnZSA9ICJ1c2FnZV9leHRyYUFyZ3VtZW50IikKKwl2b2lkIGV4dHJhQXJnKFN0cmluZyBuYW1lKSB7CisJCWlmIChDb250ZW50TWVyZ2VTdHJhdGVneS5PVVJTLm5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKG5hbWUpKSB7CisJCQljb250ZW50U3RyYXRlZ3kgPSBDb250ZW50TWVyZ2VTdHJhdGVneS5PVVJTOworCQl9IGVsc2UgaWYgKENvbnRlbnRNZXJnZVN0cmF0ZWd5LlRIRUlSUy5uYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShuYW1lKSkgeworCQkJY29udGVudFN0cmF0ZWd5ID0gQ29udGVudE1lcmdlU3RyYXRlZ3kuVEhFSVJTOworCQl9IGVsc2UgeworCQkJdGhyb3cgZGllKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KENMSVRleHQuZ2V0KCkudW5rbm93bkV4dHJhQXJndW1lbnQsIG5hbWUpKTsKKwkJfQorCX0KKwogCS8qKiB7QGluaGVyaXREb2N9ICovCiAJQE92ZXJyaWRlCiAJcHJvdGVjdGVkIHZvaWQgcnVuKCkgewpAQCAtOTYsOCArMTExLDExIEBAIHByb3RlY3RlZCB2b2lkIHJ1bigpIHsKIAkJCVJlZiBvbGRIZWFkID0gZ2V0T2xkSGVhZCgpOwogCQkJTWVyZ2VSZXN1bHQgcmVzdWx0OwogCQkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKLQkJCQlNZXJnZUNvbW1hbmQgbWVyZ2VDbWQgPSBnaXQubWVyZ2UoKS5zZXRTdHJhdGVneShtZXJnZVN0cmF0ZWd5KQotCQkJCQkJLnNldFNxdWFzaChzcXVhc2gpLnNldEZhc3RGb3J3YXJkKGZmKQorCQkJCU1lcmdlQ29tbWFuZCBtZXJnZUNtZCA9IGdpdC5tZXJnZSgpCisJCQkJCQkuc2V0U3RyYXRlZ3kobWVyZ2VTdHJhdGVneSkKKwkJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpCisJCQkJCQkuc2V0U3F1YXNoKHNxdWFzaCkKKwkJCQkJCS5zZXRGYXN0Rm9yd2FyZChmZikKIAkJCQkJCS5zZXRDb21taXQoIW5vQ29tbWl0KTsKIAkJCQlpZiAoc3JjUmVmICE9IG51bGwpIHsKIAkJCQkJbWVyZ2VDbWQuaW5jbHVkZShzcmNSZWYpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL1JldldhbGtUZXh0QnVpbHRpbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL1JldldhbGtUZXh0QnVpbHRpbi5qYXZhCmluZGV4IDgyMmY4OTkuLjY5NmE5MjQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9SZXZXYWxrVGV4dEJ1aWx0aW4uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmV2V2Fsa1RleHRCdWlsdGluLmphdmEKQEAgLTEyOSw2ICsxMjksOSBAQCBwcm90ZWN0ZWQgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCXdhbGsuc2V0VHJlZUZpbHRlcihBbmRUcmVlRmlsdGVyLmNyZWF0ZShwYXRoRmlsdGVyLAogCQkJCQlUcmVlRmlsdGVyLkFOWV9ESUZGKSk7CiAJCX0KKwkJaWYgKHBhcmVudHMpIHsKKwkJCXdhbGsuc2V0UmV3cml0ZVBhcmVudHModHJ1ZSk7CisJCX0KIAogCQlpZiAocmV2TGltaXRlci5zaXplKCkgPT0gMSkKIAkJCXdhbGsuc2V0UmV2RmlsdGVyKHJldkxpbWl0ZXIuZ2V0KDApKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5qYXZhCmluZGV4IDk5MWIzYmEuLjhlNDlhNzYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQuamF2YQpAQCAtMjg0LDYgKzI4NCw3IEBAIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZhdGFsRXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHRvb01hbnlSZWZzR2l2ZW47CiAJLyoqKi8gcHVibGljIFN0cmluZyB0cmVlSXNSZXF1aXJlZDsKIAkvKioqLyBwdWJsaWMgY2hhcltdIHVua25vd25Jb0Vycm9yU3Rkb3V0OworCS8qKiovIHB1YmxpYyBTdHJpbmcgdW5rbm93bkV4dHJhQXJndW1lbnQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyB1bmtub3duTWVyZ2VTdHJhdGVneTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHVua25vd25TdWJjb21tYW5kOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgdW5tZXJnZWRQYXRoczsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggMGQ4M2ViMy4uMmE5MDVhMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOApAQCAtMjAsMTUgKzIwLDE1IEBACiAgb3JnLmFwYWNoZS5zc2hkLmNvcmU7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCiAgb3JnLmFwYWNoZS5zc2hkLnNlcnZlcjt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmZvcndhcmQ7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLnByb3h5O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQucHJveHk7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5leHBlcmltZW50YWwudGhlb3JpZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC9wb20ueG1sCmluZGV4IDY3YWM3YzEuLjVhZjE2YzcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3Q8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOGZjZTNjNS4uMDY0NTk2NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNiw5ICs2LDkgQEAKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSI1LjExLjIiO3gtaW50ZXJuYWw6PXRydWU7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSI1LjEyLjEiO3gtaW50ZXJuYWw6PXRydWU7CiAgIHVzZXM6PSJvcmcuYXBhY2hlLnNzaGQuY2xpZW50LAogICAgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLAogICAgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLmtleWJvYXJkLApAQCAtMjMsOSArMjMsOSBAQAogICAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zaWduYXR1cmUsCiAgICBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuYnVmZmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYXV0aDt2ZXJzaW9uPSI1LjExLjIiO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5wcm94eTt2ZXJzaW9uPSI1LjExLjIiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hdXRoO3ZlcnNpb249IjUuMTIuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLnByb3h5O3ZlcnNpb249IjUuMTIuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcuaG9zdHMsCiAgICBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleXByb3ZpZGVyLApAQCAtNTksNiArNTksOCBAQAogIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uaGVscGVyczt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmlvO3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAogIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4O3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LmV4dGVuc2lvbjt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb24ucGFyc2VyO3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAogIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXI7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCiAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5tYWM7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCiAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5yYW5kb207dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCkBAIC03OCwxMiArODAsMTIgQEAKICBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5jbGllbnQ7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCiAgb3JnLmFwYWNoZS5zc2hkLnNmdHAuY29tbW9uO3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNGExOTZmZS4uODBhMjdkNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZSAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGU7dmVyc2lvbj0iNS4xMS4yLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTt2ZXJzaW9uPSI1LjEyLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3BvbS54bWwKaW5kZXggYWNhMGRkNC4uZjc1NGEzYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9Tc2hkVGV4dC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKaW5kZXggMTZiNTczOC4uNWJjMDg2NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKQEAgLTI0LDcgKzI0LDYgQEAKIGtleUVuY3J5cHRlZFJldHJ5PUVuY3J5cHRlZCBrZXkgJyd7MH0nJyBjb3VsZCBub3QgYmUgZGVjcnlwdGVkLiBFbnRlciB0aGUgcGFzc3BocmFzZSBhZ2Fpbi4KIGtleUxvYWRGYWlsZWQ9Q291bGQgbm90IGxvYWQga2V5ICcnezB9JycKIGtub3duSG9zdHNDb3VsZE5vdFVwZGF0ZT1Db3VsZCBub3QgdXBkYXRlIGtub3duIGhvc3RzIGZpbGUgezB9Ci1rbm93bkhvc3RzRmlsZUxvY2tlZFJlYWQ9Q291bGQgbm90IHJlYWQga25vd24gaG9zdHMgZmlsZSAobG9ja2VkKSB7MH0KIGtub3duSG9zdHNGaWxlTG9ja2VkVXBkYXRlPUNvdWxkIG5vdCB1cGRhdGUga25vd24gaG9zdHMgZmlsZSAobG9ja2VkKSB7MH0KIGtub3duSG9zdHNGaWxlUmVhZEZhaWxlZD1GYWlsZWQgdG8gcmVhZCBrbm93biBob3N0cyBmaWxlIHswfQoga25vd25Ib3N0c0ludmFsaWRMaW5lPUtub3duIGhvc3RzIGZpbGUgezB9IGNvbnRhaW5zIGludmFsaWQgbGluZSB7MX0KQEAgLTc2LDYgKzc1LDkgQEAKIHByb3h5U29ja3NVbmV4cGVjdGVkTWVzc2FnZT1VbmV4cGVjdGVkIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBTT0NLUzUgcHJveHkgezB9OyBjbGllbnQgc3RhdGUgezF9OiB7Mn0KIHByb3h5U29ja3NVbmV4cGVjdGVkVmVyc2lvbj1FeHBlY3RlZCBTT0NLUyB2ZXJzaW9uIDUsIGdvdCB7MH0KIHByb3h5U29ja3NVc2VybmFtZVRvb0xvbmc9VXNlciBuYW1lIGZvciBwcm94eSB7MH0gbXVzdCBiZSBhdCBtb3N0IDI1NSBieXRlcyBsb25nLCBpcyB7MX0gYnl0ZXM6IHsyfQorcHVia2V5QXV0aFdyb25nQ29tbWFuZD1QdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uIHJlY2VpdmVkIHVua25vd24gU1NIIGNvbW1hbmQgezB9IGZyb20gezF9ICh7Mn0pCitwdWJrZXlBdXRoV3JvbmdLZXk9UHVibGljIGtleSBhdXRoZW50aWNhdGlvbiByZWNlaXZlZCB3cm9uZyBrZXk7IHNlbnQgezB9LCBnb3QgYmFjayB7MX0gZnJvbSB7Mn0gKHszfSkKK3B1YmtleUF1dGhXcm9uZ1NpZ25hdHVyZUFsZ29yaXRobT1QdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uIHJlcXVlc3RlZCBzaWduYXR1cmUgdHlwZSB7MH0gYnV0IGdvdCBiYWNrIHsxfSBmcm9tIHsyfSAoezN9KQogc2VydmVySWROb3RSZWNlaXZlZD1ObyBzZXJ2ZXIgaWRlbnRpZmljYXRpb24gcmVjZWl2ZWQgd2l0aGluIHswfSBieXRlcwogc2VydmVySWRUb29Mb25nPVNlcnZlciBpZGVudGlmaWNhdGlvbiBpcyBsb25nZXIgdGhhbiAyNTUgY2hhcmFjdGVycyAoaW5jbHVkaW5nIGxpbmUgZW5kaW5nKTogezB9CiBzZXJ2ZXJJZFdpdGhOdWw9U2VydmVyIGlkZW50aWZpY2F0aW9uIGNvbnRhaW5zIGEgTlVMIGNoYXJhY3RlcjogezB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvSkdpdEtleEV4dGVuc2lvbkhhbmRsZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0S2V4RXh0ZW5zaW9uSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NDZhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvSkdpdEtleEV4dGVuc2lvbkhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZDsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OworCitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5BdHRyaWJ1dGVSZXBvc2l0b3J5LkF0dHJpYnV0ZUtleTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLk5hbWVkRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5LZXhQcm9wb3NhbE9wdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb24uS2V4RXh0ZW5zaW9uSGFuZGxlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb24uS2V4RXh0ZW5zaW9uczsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb24ucGFyc2VyLlNlcnZlclNpZ25hdHVyZUFsZ29yaXRobXM7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uLlNlc3Npb247CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zaWduYXR1cmUuU2lnbmF0dXJlOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5sb2dnaW5nLkFic3RyYWN0TG9nZ2luZ0JlYW47CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN0cmluZ1V0aWxzOworCisvKioKKyAqIERvIG5vdCB1c2UgdGhlIERlZmF1bHRDbGllbnRLZXhFeHRlbnNpb25IYW5kbGVyIGZyb20gc3NoZDsgaXQgZG9lc24ndCB3b3JrCisgKiBwcm9wZXJseSBiZWNhdXNlIG9mIG1pc2NvbmNlcHRpb25zLiBTZWUgU1NIRC0xMTQxLgorICoKKyAqIEBzZWUgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9TU0hELTExNDEiPlNTSEQtMTE0MTwvYT4KKyAqLworcHVibGljIGNsYXNzIEpHaXRLZXhFeHRlbnNpb25IYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RMb2dnaW5nQmVhbgorCQlpbXBsZW1lbnRzIEtleEV4dGVuc2lvbkhhbmRsZXIgeworCisJLyoqIFNpbmdsZXRvbiBpbnN0YW5jZS4gKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEpHaXRLZXhFeHRlbnNpb25IYW5kbGVyIElOU1RBTkNFID0gbmV3IEpHaXRLZXhFeHRlbnNpb25IYW5kbGVyKCk7CisKKwkvKioKKwkgKiBTZXNzaW9uIHtAbGluayBBdHRyaWJ1dGVLZXl9IHVzZWQgdG8gc3RvcmUgd2hldGhlciB0aGUgZXh0ZW5zaW9uCisJICogaW5kaWNhdG9yIHdhcyBhbHJlYWR5IHNlbnQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PEJvb2xlYW4+IENMSUVOVF9QUk9QT1NBTF9NQURFID0gbmV3IEF0dHJpYnV0ZUtleTw+KCk7CisKKwkvKioKKwkgKiBTZXNzaW9uIHtAbGluayBBdHRyaWJ1dGVLZXl9IHN0b3JpbmcgdGhlIGFsZ29yaXRobXMgYW5ub3VuY2VkIGJ5IHRoZQorCSAqIHNlcnZlciBhcyBrbm93bi4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIEF0dHJpYnV0ZUtleTxTZXQ8U3RyaW5nPj4gU0VSVkVSX0FMR09SSVRITVMgPSBuZXcgQXR0cmlidXRlS2V5PD4oKTsKKworCXByaXZhdGUgSkdpdEtleEV4dGVuc2lvbkhhbmRsZXIoKSB7CisJCS8vIE5vIHB1YmxpYyBpbnN0YW50aWF0aW9uIGZvciBzaW5nbGV0b24KKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYm9vbGVhbiBpc0tleEV4dGVuc2lvbnNBdmFpbGFibGUoU2Vzc2lvbiBzZXNzaW9uLAorCQkJQXZhaWxhYmlsaXR5UGhhc2UgcGhhc2UpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJldHVybiAhQXZhaWxhYmlsaXR5UGhhc2UuUFJFS0VYLmVxdWFscyhwaGFzZSk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaGFuZGxlS2V4SW5pdFByb3Bvc2FsKFNlc3Npb24gc2Vzc2lvbiwgYm9vbGVhbiBpbml0aWF0b3IsCisJCQlNYXA8S2V4UHJvcG9zYWxPcHRpb24sIFN0cmluZz4gcHJvcG9zYWwpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCS8vIElmIGl0J3MgdGhlIHZlcnkgZmlyc3QgdGltZSwgd2UgbWF5IGFkZCB0aGUgbWFya2VyIHRlbGxpbmcgdGhlIHNlcnZlcgorCQkvLyB0aGF0IHdlIGFyZSByZWFkeSB0byBoYW5kbGUgU1NIX01TR19FWFRfSU5GTworCQlpZiAoc2Vzc2lvbiA9PSBudWxsIHx8IHNlc3Npb24uaXNTZXJ2ZXJTZXNzaW9uKCkgfHwgIWluaXRpYXRvcikgeworCQkJcmV0dXJuOworCQl9CisJCWlmIChzZXNzaW9uLmdldEF0dHJpYnV0ZShDTElFTlRfUFJPUE9TQUxfTUFERSkgIT0gbnVsbCkgeworCQkJcmV0dXJuOworCQl9CisJCVN0cmluZyBrZXhBbGdvcml0aG1zID0gcHJvcG9zYWwuZ2V0KEtleFByb3Bvc2FsT3B0aW9uLlNFUlZFUktFWVMpOworCQlpZiAoU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbChrZXhBbGdvcml0aG1zKSkgeworCQkJcmV0dXJuOworCQl9CisJCUxpc3Q8U3RyaW5nPiBhbGdvcml0aG1zID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCS8vIFdlJ3JlIGEgY2xpZW50LiBXZSBtdXN0bid0IHNlbmQgdGhlIHNlcnZlciBleHRlbnNpb24sIGFuZCB3ZSBzaG91bGQKKwkJLy8gc2VuZCB0aGUgY2xpZW50IGV4dGVuc2lvbiBvbmx5IG9uY2UuCisJCWZvciAoU3RyaW5nIGFsZ28gOiBrZXhBbGdvcml0aG1zLnNwbGl0KCIsIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKEtleEV4dGVuc2lvbnMuQ0xJRU5UX0tFWF9FWFRFTlNJT04uZXF1YWxzSWdub3JlQ2FzZShhbGdvKQorCQkJCQl8fCBLZXhFeHRlbnNpb25zLlNFUlZFUl9LRVhfRVhURU5TSU9OCisJCQkJCQkJLmVxdWFsc0lnbm9yZUNhc2UoYWxnbykpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWFsZ29yaXRobXMuYWRkKGFsZ28pOworCQl9CisJCS8vIFRlbGwgdGhlIHNlcnZlciB0aGF0IHdlIHdhbnQgdG8gcmVjZWl2ZSBTU0gyX01TR19FWFRfSU5GTworCQlhbGdvcml0aG1zLmFkZChLZXhFeHRlbnNpb25zLkNMSUVOVF9LRVhfRVhURU5TSU9OKTsKKwkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisJCQlsb2cuZGVidWcoCisJCQkJCSJoYW5kbGVLZXhJbml0UHJvcG9zYWwoe30pOiBwcm9wb3NpbmcgSG9zdEtleUFsZ29yaXRobXMge30iLCAvLyROT04tTkxTLTEkCisJCQkJCXNlc3Npb24sIGFsZ29yaXRobXMpOworCQl9CisJCXByb3Bvc2FsLnB1dChLZXhQcm9wb3NhbE9wdGlvbi5TRVJWRVJLRVlTLAorCQkJCVN0cmluZy5qb2luKCIsIiwgYWxnb3JpdGhtcykpOyAvLyROT04tTkxTLTEkCisJCXNlc3Npb24uc2V0QXR0cmlidXRlKENMSUVOVF9QUk9QT1NBTF9NQURFLCBCb29sZWFuLlRSVUUpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGhhbmRsZUtleEV4dGVuc2lvblJlcXVlc3QoU2Vzc2lvbiBzZXNzaW9uLCBpbnQgaW5kZXgsCisJCQlpbnQgY291bnQsIFN0cmluZyBuYW1lLCBieXRlW10gZGF0YSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKFNlcnZlclNpZ25hdHVyZUFsZ29yaXRobXMuTkFNRS5lcXVhbHMobmFtZSkpIHsKKwkJCWhhbmRsZVNlcnZlclNpZ25hdHVyZUFsZ29yaXRobXMoc2Vzc2lvbiwKKwkJCQkJU2VydmVyU2lnbmF0dXJlQWxnb3JpdGhtcy5JTlNUQU5DRS5wYXJzZUV4dGVuc2lvbihkYXRhKSk7CisJCX0KKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyoqCisJICogUGVyZm9ybSB1cGRhdGVzIGFmdGVyIGEgc2VydmVyLXNpZy1hbGdzIGV4dGVuc2lvbiBoYXMgYmVlbiByZWNlaXZlZC4KKwkgKgorCSAqIEBwYXJhbSBzZXNzaW9uCisJICogICAgICAgICAgICB0aGUgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgZm9yCisJICogQHBhcmFtIHNlcnZlckFsZ29yaXRobXMKKwkgKiAgICAgICAgICAgIHNpZ25hdHVyZSBhbGdvcml0aG0gbmFtZXMgYW5ub3VuY2VkIGJ5IHRoZSBzZXJ2ZXIKKwkgKi8KKwlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVTZXJ2ZXJTaWduYXR1cmVBbGdvcml0aG1zKFNlc3Npb24gc2Vzc2lvbiwKKwkJCUNvbGxlY3Rpb248U3RyaW5nPiBzZXJ2ZXJBbGdvcml0aG1zKSB7CisJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJbG9nLmRlYnVnKCJoYW5kbGVTZXJ2ZXJTaWduYXR1cmVBbGdvcml0aG1zKHt9KToge30iLCBzZXNzaW9uLCAvLyROT04tTkxTLTEkCisJCQkJCXNlcnZlckFsZ29yaXRobXMpOworCQl9CisJCS8vIENsaWVudCBkZXRlcm1pbmVzIG9yZGVyOyBzZXJ2ZXIgc2F5cyB3aGF0IGl0IHN1cHBvcnRzLiBSZS1vcmRlcgorCQkvLyBzdWNoIHRoYXQgc3VwcG9ydGVkIG9uZXMgYXJlIGF0IHRoZSBmcm9udCwgaW4gY2xpZW50IG9yZGVyLAorCQkvLyBmb2xsb3dlZCBieSB1bnN1cHBvcnRlZCBvbmVzLCBhbHNvIGluIGNsaWVudCBvcmRlci4KKwkJaWYgKHNlcnZlckFsZ29yaXRobXMgIT0gbnVsbCAmJiAhc2VydmVyQWxnb3JpdGhtcy5pc0VtcHR5KCkpIHsKKwkJCUxpc3Q8TmFtZWRGYWN0b3J5PFNpZ25hdHVyZT4+IGNsaWVudEFsZ29yaXRobXMgPSBuZXcgQXJyYXlMaXN0PD4oCisJCQkJCXNlc3Npb24uZ2V0U2lnbmF0dXJlRmFjdG9yaWVzKCkpOworCQkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisJCQkJbG9nLmRlYnVnKAorCQkJCQkJImhhbmRsZVNlcnZlclNpZ25hdHVyZUFsZ29yaXRobXMoe30pOiBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMgYmVmb3JlOiB7fSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJCXNlc3Npb24sIGNsaWVudEFsZ29yaXRobXMpOworCQkJfQorCQkJTGlzdDxOYW1lZEZhY3Rvcnk8U2lnbmF0dXJlPj4gdW5rbm93biA9IG5ldyBBcnJheUxpc3Q8PigpOworCQkJU2V0PFN0cmluZz4ga25vd24gPSBuZXcgVHJlZVNldDw+KFN0cmluZy5DQVNFX0lOU0VOU0lUSVZFX09SREVSKTsKKwkJCWtub3duLmFkZEFsbChzZXJ2ZXJBbGdvcml0aG1zKTsKKwkJCWZvciAoSXRlcmF0b3I8TmFtZWRGYWN0b3J5PFNpZ25hdHVyZT4+IGl0ZXIgPSBjbGllbnRBbGdvcml0aG1zCisJCQkJCS5pdGVyYXRvcigpOyBpdGVyLmhhc05leHQoKTspIHsKKwkJCQlOYW1lZEZhY3Rvcnk8U2lnbmF0dXJlPiBhbGdvID0gaXRlci5uZXh0KCk7CisJCQkJaWYgKCFrbm93bi5jb250YWlucyhhbGdvLmdldE5hbWUoKSkpIHsKKwkJCQkJdW5rbm93bi5hZGQoYWxnbyk7CisJCQkJCWl0ZXIucmVtb3ZlKCk7CisJCQkJfQorCQkJfQorCQkJLy8gUmUtYWRkIHRoZSB1bmtub3duIG9uZXMgYXQgdGhlIGVuZC4gUGVyIFJGQyA4MzA4LCBzb21lCisJCQkvLyBzZXJ2ZXJzIG1heSBub3QgYW5ub3VuY2UgX2FsbF8gdGhlaXIgc3VwcG9ydGVkIGFsZ29yaXRobXMsCisJCQkvLyBhbmQgYSBjbGllbnQgbWF5IHVzZSB1bmtub3duIGFsZ29yaXRobXMuCisJCQljbGllbnRBbGdvcml0aG1zLmFkZEFsbCh1bmtub3duKTsKKwkJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJCWxvZy5kZWJ1ZygKKwkJCQkJCSJoYW5kbGVTZXJ2ZXJTaWduYXR1cmVBbGdvcml0aG1zKHt9KTogUHVia2V5QWNjZXB0ZWRBbGdvcml0aG1zIGFmdGVyOiB7fSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJCXNlc3Npb24sIGNsaWVudEFsZ29yaXRobXMpOworCQkJfQorCQkJc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoU0VSVkVSX0FMR09SSVRITVMsIGtub3duKTsKKwkJCXNlc3Npb24uc2V0U2lnbmF0dXJlRmFjdG9yaWVzKGNsaWVudEFsZ29yaXRobXMpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbi5qYXZhCmluZGV4IDI5N2I0NTYuLjY3NTUwOTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0UHVibGljS2V5QXV0aGVudGljYXRpb24uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uLmphdmEKQEAgLTExLDYgKzExLDkgQEAKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNLZXk7CitpbXBvcnQgamF2YS5zZWN1cml0eS5zcGVjLkludmFsaWRLZXlTcGVjRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5EZXF1ZTsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKQEAgLTE5LDYgKzIyLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgucHVia2V5LlVzZXJBdXRoUHVibGljS2V5OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuc2Vzc2lvbi5DbGllbnRTZXNzaW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uTmFtZWRGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uTmFtZWRSZXNvdXJjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLlJ1bnRpbWVTc2hFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5Tc2hDb25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb25maWcua2V5cy5LZXlVdGlsczsKQEAgLTM3LDcgKzQxLDkgQEAKICAqLwogcHVibGljIGNsYXNzIEpHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbiBleHRlbmRzIFVzZXJBdXRoUHVibGljS2V5IHsKIAotCXByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IGFsZ29yaXRobXMgPSBuZXcgTGlua2VkTGlzdDw+KCk7CisJcHJpdmF0ZSBmaW5hbCBEZXF1ZTxTdHJpbmc+IGN1cnJlbnRBbGdvcml0aG1zID0gbmV3IExpbmtlZExpc3Q8PigpOworCisJcHJpdmF0ZSBTdHJpbmcgY2hvc2VuQWxnb3JpdGhtOwogCiAJSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uKExpc3Q8TmFtZWRGYWN0b3J5PFNpZ25hdHVyZT4+IGZhY3RvcmllcykgewogCQlzdXBlcihmYWN0b3JpZXMpOwpAQCAtNDcsMTEgKzUzLDI1IEBAIHB1YmxpYyBjbGFzcyBKR2l0UHVibGljS2V5QXV0aGVudGljYXRpb24gZXh0ZW5kcyBVc2VyQXV0aFB1YmxpY0tleSB7CiAJcHJvdGVjdGVkIGJvb2xlYW4gc2VuZEF1dGhEYXRhUmVxdWVzdChDbGllbnRTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQogCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWlmIChjdXJyZW50ID09IG51bGwpIHsKLQkJCWFsZ29yaXRobXMuY2xlYXIoKTsKKwkJCWN1cnJlbnRBbGdvcml0aG1zLmNsZWFyKCk7CisJCQljaG9zZW5BbGdvcml0aG0gPSBudWxsOwogCQl9CiAJCVN0cmluZyBjdXJyZW50QWxnb3JpdGhtID0gbnVsbDsKLQkJaWYgKGN1cnJlbnQgIT0gbnVsbCAmJiAhYWxnb3JpdGhtcy5pc0VtcHR5KCkpIHsKLQkJCWN1cnJlbnRBbGdvcml0aG0gPSBhbGdvcml0aG1zLnJlbW92ZSgwKTsKKwkJaWYgKGN1cnJlbnQgIT0gbnVsbCAmJiAhY3VycmVudEFsZ29yaXRobXMuaXNFbXB0eSgpKSB7CisJCQljdXJyZW50QWxnb3JpdGhtID0gY3VycmVudEFsZ29yaXRobXMucG9sbCgpOworCQkJaWYgKGNob3NlbkFsZ29yaXRobSAhPSBudWxsKSB7CisJCQkJU2V0PFN0cmluZz4ga25vd25TZXJ2ZXJBbGdvcml0aG1zID0gc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoCisJCQkJCQlKR2l0S2V4RXh0ZW5zaW9uSGFuZGxlci5TRVJWRVJfQUxHT1JJVEhNUyk7CisJCQkJaWYgKGtub3duU2VydmVyQWxnb3JpdGhtcyAhPSBudWxsCisJCQkJCQkmJiBrbm93blNlcnZlckFsZ29yaXRobXMuY29udGFpbnMoY2hvc2VuQWxnb3JpdGhtKSkgeworCQkJCQkvLyBXZSd2ZSB0cmllZCBrZXkgJ2N1cnJlbnQnIHdpdGggJ2Nob3NlbkFsZ29yaXRobScsIGJ1dCBpdAorCQkJCQkvLyBmYWlsZWQuIEhvd2V2ZXIsIHRoZSBzZXJ2ZXIgaGFkIHRvbGQgdXMgaXQgc3VwcG9ydGVkCisJCQkJCS8vICdjaG9zZW5BbGdvcml0aG0nLiBUaHVzIGl0IG1ha2VzIG5vIHNlbnNlIHRvIGNvbnRpbnVlCisJCQkJCS8vIHdpdGggdGhpcyBrZXkgYW5kIG90aGVyIHNpZ25hdHVyZSBhbGdvcml0aG1zLiBTa2lwIHRvIHRoZQorCQkJCQkvLyBuZXh0IGtleSwgaWYgYW55LgorCQkJCQljdXJyZW50QWxnb3JpdGhtID0gbnVsbDsKKwkJCQl9CisJCQl9CiAJCX0KIAkJaWYgKGN1cnJlbnRBbGdvcml0aG0gPT0gbnVsbCkgewogCQkJdHJ5IHsKQEAgLTYxLDE0ICs4MSwxMyBAQCBwcm90ZWN0ZWQgYm9vbGVhbiBzZW5kQXV0aERhdGFSZXF1ZXN0KENsaWVudFNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIHNlcnZpY2UpCiAJCQkJCQkJCSJzZW5kQXV0aERhdGFSZXF1ZXN0KHt9KVt7fV0gbm8gbW9yZSBrZXlzIHRvIHNlbmQiLCAvLyROT04tTkxTLTEkCiAJCQkJCQkJCXNlc3Npb24sIHNlcnZpY2UpOwogCQkJCQl9CisJCQkJCWN1cnJlbnQgPSBudWxsOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJCWN1cnJlbnQgPSBrZXlzLm5leHQoKTsKLQkJCQlhbGdvcml0aG1zLmNsZWFyKCk7CisJCQkJY3VycmVudEFsZ29yaXRobXMuY2xlYXIoKTsKKwkJCQljaG9zZW5BbGdvcml0aG0gPSBudWxsOwogCQkJfSBjYXRjaCAoRXJyb3IgZSkgeyAvLyBDb3BpZWQgZnJvbSBzdXBlcmNsYXNzCi0JCQkJd2Fybigic2VuZEF1dGhEYXRhUmVxdWVzdCh7fSlbe31dIGZhaWxlZCAoe30pIHRvIGdldCBuZXh0IGtleToge30iLCAvLyROT04tTkxTLTEkCi0JCQkJCQlzZXNzaW9uLCBzZXJ2aWNlLCBlLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpLAotCQkJCQkJZS5nZXRNZXNzYWdlKCksIGUpOwogCQkJCXRocm93IG5ldyBSdW50aW1lU3NoRXhjZXB0aW9uKGUpOwogCQkJfQogCQl9CkBAIC03Niw5ICs5NSw2IEBAIHByb3RlY3RlZCBib29sZWFuIHNlbmRBdXRoRGF0YVJlcXVlc3QoQ2xpZW50U2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcgc2VydmljZSkKIAkJdHJ5IHsKIAkJCWtleSA9IGN1cnJlbnQuZ2V0UHVibGljS2V5KCk7CiAJCX0gY2F0Y2ggKEVycm9yIGUpIHsgLy8gQ29waWVkIGZyb20gc3VwZXJjbGFzcwotCQkJd2Fybigic2VuZEF1dGhEYXRhUmVxdWVzdCh7fSlbe31dIGZhaWxlZCAoe30pIHRvIHJldHJpZXZlIHB1YmxpYyBrZXk6IHt9IiwgLy8kTk9OLU5MUy0xJAotCQkJCQlzZXNzaW9uLCBzZXJ2aWNlLCBlLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpLAotCQkJCQllLmdldE1lc3NhZ2UoKSwgZSk7CiAJCQl0aHJvdyBuZXcgUnVudGltZVNzaEV4Y2VwdGlvbihlKTsKIAkJfQogCQlpZiAoY3VycmVudEFsZ29yaXRobSA9PSBudWxsKSB7CkBAIC05NCwxNSArMTEwLDIxIEBAIHByb3RlY3RlZCBib29sZWFuIHNlbmRBdXRoRGF0YVJlcXVlc3QoQ2xpZW50U2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcgc2VydmljZSkKIAkJCQlleGlzdGluZ0ZhY3RvcmllcyA9IGdldFNpZ25hdHVyZUZhY3RvcmllcygpOwogCQkJfQogCQkJaWYgKGV4aXN0aW5nRmFjdG9yaWVzICE9IG51bGwpIHsKKwkJCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCQkJbG9nLmRlYnVnKAorCQkJCQkJCSJzZW5kQXV0aERhdGFSZXF1ZXN0KHt9KVt7fV0gc2VsZWN0aW5nIGZyb20gUHViS2V5QWNjZXB0ZWRBbGdvcml0aG1zIHt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCXNlc3Npb24sIHNlcnZpY2UsCisJCQkJCQkJTmFtZWRSZXNvdXJjZS5nZXROYW1lcyhleGlzdGluZ0ZhY3RvcmllcykpOworCQkJCX0KIAkJCQkvLyBTZWxlY3QgdGhlIGZhY3RvcmllcyBieSBuYW1lIGFuZCBpbiBvcmRlcgogCQkJCWV4aXN0aW5nRmFjdG9yaWVzLmZvckVhY2goZiAtPiB7CiAJCQkJCWlmIChhbGlhc2VzLmNvbnRhaW5zKGYuZ2V0TmFtZSgpKSkgewotCQkJCQkJYWxnb3JpdGhtcy5hZGQoZi5nZXROYW1lKCkpOworCQkJCQkJY3VycmVudEFsZ29yaXRobXMuYWRkKGYuZ2V0TmFtZSgpKTsKIAkJCQkJfQogCQkJCX0pOwogCQkJfQotCQkJY3VycmVudEFsZ29yaXRobSA9IGFsZ29yaXRobXMuaXNFbXB0eSgpID8ga2V5VHlwZQotCQkJCQk6IGFsZ29yaXRobXMucmVtb3ZlKDApOworCQkJY3VycmVudEFsZ29yaXRobSA9IGN1cnJlbnRBbGdvcml0aG1zLmlzRW1wdHkoKSA/IGtleVR5cGUKKwkJCQkJOiBjdXJyZW50QWxnb3JpdGhtcy5wb2xsKCk7CiAJCX0KIAkJU3RyaW5nIG5hbWUgPSBnZXROYW1lKCk7CiAJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgewpAQCAtMTEyLDYgKzEzNCw3IEBAIHByb3RlY3RlZCBib29sZWFuIHNlbmRBdXRoRGF0YVJlcXVlc3QoQ2xpZW50U2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcgc2VydmljZSkKIAkJCQkJS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQoa2V5KSk7CiAJCX0KIAorCQljaG9zZW5BbGdvcml0aG0gPSBjdXJyZW50QWxnb3JpdGhtOwogCQlCdWZmZXIgYnVmZmVyID0gc2Vzc2lvbgogCQkJCS5jcmVhdGVCdWZmZXIoU3NoQ29uc3RhbnRzLlNTSF9NU0dfVVNFUkFVVEhfUkVRVUVTVCk7CiAJCWJ1ZmZlci5wdXRTdHJpbmcoc2Vzc2lvbi5nZXRVc2VybmFtZSgpKTsKQEAgLTEyNSw5ICsxNDgsNzcgQEAgcHJvdGVjdGVkIGJvb2xlYW4gc2VuZEF1dGhEYXRhUmVxdWVzdChDbGllbnRTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQogCX0KIAogCUBPdmVycmlkZQorCXByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NBdXRoRGF0YVJlcXVlc3QoQ2xpZW50U2Vzc2lvbiBzZXNzaW9uLAorCQkJU3RyaW5nIHNlcnZpY2UsIEJ1ZmZlciBidWZmZXIpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbmFtZSA9IGdldE5hbWUoKTsKKwkJaW50IGNtZCA9IGJ1ZmZlci5nZXRVQnl0ZSgpOworCQlpZiAoY21kICE9IFNzaENvbnN0YW50cy5TU0hfTVNHX1VTRVJBVVRIX1BLX09LKSB7CisJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlTc2hkVGV4dC5nZXQoKS5wdWJrZXlBdXRoV3JvbmdDb21tYW5kLAorCQkJCQlTc2hDb25zdGFudHMuZ2V0Q29tbWFuZE1lc3NhZ2VOYW1lKGNtZCksCisJCQkJCXNlc3Npb24uZ2V0Q29ubmVjdEFkZHJlc3MoKSwgc2Vzc2lvbi5nZXRTZXJ2ZXJWZXJzaW9uKCkpKTsKKwkJfQorCQlQdWJsaWNLZXkga2V5OworCQl0cnkgeworCQkJa2V5ID0gY3VycmVudC5nZXRQdWJsaWNLZXkoKTsKKwkJfSBjYXRjaCAoRXJyb3IgZSkgeyAvLyBDb3BpZWQgZnJvbSBzdXBlcmNsYXNzCisJCQl0aHJvdyBuZXcgUnVudGltZVNzaEV4Y2VwdGlvbihlKTsKKwkJfQorCQlTdHJpbmcgcnNwS2V5QWxnb3JpdGhtID0gYnVmZmVyLmdldFN0cmluZygpOworCQlQdWJsaWNLZXkgcnNwS2V5ID0gYnVmZmVyLmdldFB1YmxpY0tleSgpOworCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCWxvZy5kZWJ1ZygKKwkJCQkJInByb2Nlc3NBdXRoRGF0YVJlcXVlc3Qoe30pW3t9XVt7fV0gU1NIX01TR19VU0VSQVVUSF9QS19PSyB0eXBlPXt9LCBmaW5nZXJwcmludD17fSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJc2Vzc2lvbiwgc2VydmljZSwgbmFtZSwgcnNwS2V5QWxnb3JpdGhtLAorCQkJCQlLZXlVdGlscy5nZXRGaW5nZXJQcmludChyc3BLZXkpKTsKKwkJfQorCQlpZiAoIUtleVV0aWxzLmNvbXBhcmVLZXlzKHJzcEtleSwga2V5KSkgeworCQkJdGhyb3cgbmV3IEludmFsaWRLZXlTcGVjRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlTc2hkVGV4dC5nZXQoKS5wdWJrZXlBdXRoV3JvbmdLZXksCisJCQkJCUtleVV0aWxzLmdldEZpbmdlclByaW50KGtleSksCisJCQkJCUtleVV0aWxzLmdldEZpbmdlclByaW50KHJzcEtleSksCisJCQkJCXNlc3Npb24uZ2V0Q29ubmVjdEFkZHJlc3MoKSwgc2Vzc2lvbi5nZXRTZXJ2ZXJWZXJzaW9uKCkpKTsKKwkJfQorCQlpZiAoIWNob3NlbkFsZ29yaXRobS5lcXVhbHNJZ25vcmVDYXNlKHJzcEtleUFsZ29yaXRobSkpIHsKKwkJCS8vICdhbGdvJyBTSE9VTEQgYmUgdGhlIHNhbWUgYXMgJ2Nob3NlbkFsZ29yaXRobScsIHdoaWNoIGlzIHRoZSBvbmUKKwkJCS8vIHdlIHNlbnQgYWJvdmUuIFNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDI1MiNwYWdlLTkgLgorCQkJLy8KKwkJCS8vIEhvd2V2ZXIsIGF0IGxlYXN0IEdpdGh1YiAoU1NILTIuMC1iYWJlbGQtMzgzNzQzYWQpIHNlcnZlcnMgc2VlbQorCQkJLy8gdG8gcmV0dXJuIHRoZSBrZXkgdHlwZSwgbm90IHRoZSBhbGdvcml0aG0gbmFtZS4KKwkJCS8vCisJCQkvLyBTbyB3ZSBkb24ndCBjaGVjayBidXQganVzdCBsb2cgdGhlIGluY29uc2lzdGVuY3kuIFdlIHNpZ24gdXNpbmcKKwkJCS8vICdjaG9zZW5BbGdvcml0aG0nIGluIGFueSBjYXNlLCBzbyB3ZSBkb24ndCByZWFsbHkgY2FyZSB3aGF0IHRoZQorCQkJLy8gc2VydmVyIHNheXMgaGVyZS4KKwkJCWxvZy53YXJuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlTc2hkVGV4dC5nZXQoKS5wdWJrZXlBdXRoV3JvbmdTaWduYXR1cmVBbGdvcml0aG0sCisJCQkJCWNob3NlbkFsZ29yaXRobSwgcnNwS2V5QWxnb3JpdGhtLCBzZXNzaW9uLmdldENvbm5lY3RBZGRyZXNzKCksCisJCQkJCXNlc3Npb24uZ2V0U2VydmVyVmVyc2lvbigpKSk7CisJCX0KKwkJU3RyaW5nIHVzZXJuYW1lID0gc2Vzc2lvbi5nZXRVc2VybmFtZSgpOworCQlCdWZmZXIgb3V0ID0gc2Vzc2lvbgorCQkJCS5jcmVhdGVCdWZmZXIoU3NoQ29uc3RhbnRzLlNTSF9NU0dfVVNFUkFVVEhfUkVRVUVTVCk7CisJCW91dC5wdXRTdHJpbmcodXNlcm5hbWUpOworCQlvdXQucHV0U3RyaW5nKHNlcnZpY2UpOworCQlvdXQucHV0U3RyaW5nKG5hbWUpOworCQlvdXQucHV0Qm9vbGVhbih0cnVlKTsKKwkJb3V0LnB1dFN0cmluZyhjaG9zZW5BbGdvcml0aG0pOworCQlvdXQucHV0UHVibGljS2V5KGtleSk7CisJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJbG9nLmRlYnVnKAorCQkJCQkicHJvY2Vzc0F1dGhEYXRhUmVxdWVzdCh7fSlbe31dW3t9XTogc2lnbmluZyB3aXRoIGFsZ29yaXRobSB7fSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJc2Vzc2lvbiwgc2VydmljZSwgbmFtZSwgY2hvc2VuQWxnb3JpdGhtKTsKKwkJfQorCQlhcHBlbmRTaWduYXR1cmUoc2Vzc2lvbiwgc2VydmljZSwgbmFtZSwgdXNlcm5hbWUsIGNob3NlbkFsZ29yaXRobSwga2V5LAorCQkJCW91dCk7CisJCXNlc3Npb24ud3JpdGVQYWNrZXQob3V0KTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJQE92ZXJyaWRlCiAJcHJvdGVjdGVkIHZvaWQgcmVsZWFzZUtleXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlhbGdvcml0aG1zLmNsZWFyKCk7CisJCWN1cnJlbnRBbGdvcml0aG1zLmNsZWFyKCk7CiAJCWN1cnJlbnQgPSBudWxsOworCQljaG9zZW5BbGdvcml0aG0gPSBudWxsOwogCQlzdXBlci5yZWxlYXNlS2V5cygpOwogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9PcGVuU3NoU2VydmVyS2V5RGF0YWJhc2UuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9PcGVuU3NoU2VydmVyS2V5RGF0YWJhc2UuamF2YQppbmRleCA0N2UwOWI3Li4xYTUzMGI3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvT3BlblNzaFNlcnZlcktleURhdGFiYXNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL09wZW5Tc2hTZXJ2ZXJLZXlEYXRhYmFzZS5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgamF2YS5uZXQuU29ja2V0QWRkcmVzczsKIGltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOwogaW1wb3J0IGphdmEubmlvLmZpbGUuSW52YWxpZFBhdGhFeGNlcHRpb247CitpbXBvcnQgamF2YS5uaW8uZmlsZS5Ob1N1Y2hGaWxlRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKIGltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uOwpAQCAtNTYxLDI5ICs1NjIsMTcgQEAgcHVibGljIEhvc3RLZXlGaWxlKFBhdGggcGF0aCkgewogCQlAT3ZlcnJpZGUKIAkJcHVibGljIExpc3Q8SG9zdEVudHJ5UGFpcj4gZ2V0KCkgewogCQkJUGF0aCBwYXRoID0gZ2V0UGF0aCgpOwotCQkJdHJ5IHsKLQkJCQlpZiAoY2hlY2tSZWxvYWRSZXF1aXJlZCgpKSB7Ci0JCQkJCWlmICghRmlsZXMuZXhpc3RzKHBhdGgpKSB7Ci0JCQkJCQkvLyBIYXMgZGlzYXBwZWFyZWQuCi0JCQkJCQlyZXNldFJlbG9hZEF0dHJpYnV0ZXMoKTsKLQkJCQkJCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKwkJCXN5bmNocm9uaXplZCAodGhpcykgeworCQkJCXRyeSB7CisJCQkJCWlmIChjaGVja1JlbG9hZFJlcXVpcmVkKCkpIHsKKwkJCQkJCWVudHJpZXMgPSByZWxvYWQoZ2V0UGF0aCgpKTsKIAkJCQkJfQotCQkJCQlMb2NrRmlsZSBsb2NrID0gbmV3IExvY2tGaWxlKHBhdGgudG9GaWxlKCkpOwotCQkJCQlpZiAobG9jay5sb2NrKCkpIHsKLQkJCQkJCXRyeSB7Ci0JCQkJCQkJZW50cmllcyA9IHJlbG9hZChnZXRQYXRoKCkpOwotCQkJCQkJfSBmaW5hbGx5IHsKLQkJCQkJCQlsb2NrLnVubG9jaygpOwotCQkJCQkJfQotCQkJCQl9IGVsc2UgewotCQkJCQkJTE9HLndhcm4oZm9ybWF0KFNzaGRUZXh0LmdldCgpLmtub3duSG9zdHNGaWxlTG9ja2VkUmVhZCwKLQkJCQkJCQkJcGF0aCkpOwotCQkJCQl9CisJCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJCQlMT0cud2Fybihmb3JtYXQoU3NoZFRleHQuZ2V0KCkua25vd25Ib3N0c0ZpbGVSZWFkRmFpbGVkLAorCQkJCQkJCXBhdGgpKTsKIAkJCQl9Ci0JCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJTE9HLndhcm4oZm9ybWF0KFNzaGRUZXh0LmdldCgpLmtub3duSG9zdHNGaWxlUmVhZEZhaWxlZCwgcGF0aCkpOworCQkJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KGVudHJpZXMpOwogCQkJfQotCQkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoZW50cmllcyk7CiAJCX0KIAogCQlwcml2YXRlIExpc3Q8SG9zdEVudHJ5UGFpcj4gcmVsb2FkKFBhdGggcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKQEAgLTYxNiw3ICs2MDUsNyBAQCBwcml2YXRlIExpc3Q8SG9zdEVudHJ5UGFpcj4gcmVsb2FkKFBhdGggcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJCQkJfQogCQkJCX0KIAkJCQlyZXR1cm4gbmV3RW50cmllczsKLQkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gfCBOb1N1Y2hGaWxlRXhjZXB0aW9uIGUpIHsKIAkJCQlyZXNldFJlbG9hZEF0dHJpYnV0ZXMoKTsKIAkJCQlyZXR1cm4gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CiAJCQl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9Tc2hkVGV4dC5qYXZhCmluZGV4IDRjNGZmNTkuLjczYzIyODggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9Tc2hkVGV4dC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9Tc2hkVGV4dC5qYXZhCkBAIC00NCw3ICs0NCw2IEBAIHB1YmxpYyBzdGF0aWMgU3NoZFRleHQgZ2V0KCkgewogCS8qKiovIHB1YmxpYyBTdHJpbmcga2V5RW5jcnlwdGVkUmV0cnk7CiAJLyoqKi8gcHVibGljIFN0cmluZyBrZXlMb2FkRmFpbGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcga25vd25Ib3N0c0NvdWxkTm90VXBkYXRlOwotCS8qKiovIHB1YmxpYyBTdHJpbmcga25vd25Ib3N0c0ZpbGVMb2NrZWRSZWFkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcga25vd25Ib3N0c0ZpbGVMb2NrZWRVcGRhdGU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBrbm93bkhvc3RzRmlsZVJlYWRGYWlsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBrbm93bkhvc3RzSW52YWxpZExpbmU7CkBAIC04OCw2ICs4Nyw5IEBAIHB1YmxpYyBzdGF0aWMgU3NoZFRleHQgZ2V0KCkgewogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHJveHlTb2Nrc1VuZXhwZWN0ZWRNZXNzYWdlOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHJveHlTb2Nrc1VuZXhwZWN0ZWRWZXJzaW9uOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHJveHlTb2Nrc1VzZXJuYW1lVG9vTG9uZzsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHB1YmtleUF1dGhXcm9uZ0NvbW1hbmQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBwdWJrZXlBdXRoV3JvbmdLZXk7CisJLyoqKi8gcHVibGljIFN0cmluZyBwdWJrZXlBdXRoV3JvbmdTaWduYXR1cmVBbGdvcml0aG07CiAJLyoqKi8gcHVibGljIFN0cmluZyBzZXJ2ZXJJZE5vdFJlY2VpdmVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc2VydmVySWRUb29Mb25nOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc2VydmVySWRXaXRoTnVsOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9zc2hkL1NzaGRTZXNzaW9uRmFjdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9zc2hkL1NzaGRTZXNzaW9uRmFjdG9yeS5qYXZhCmluZGV4IGNhZDk1OWMuLjJkN2UwYzcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbkZhY3RvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3NzaGQvU3NoZFNlc3Npb25GYWN0b3J5LmphdmEKQEAgLTQ3LDYgKzQ3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLkF1dGhlbnRpY2F0aW9uQ2FuY2VsZWRFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5DYWNoaW5nS2V5UGFpclByb3ZpZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuR3NzQXBpV2l0aE1pY0F1dGhGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuSkdpdEtleEV4dGVuc2lvbkhhbmRsZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5KR2l0UGFzc3dvcmRBdXRoRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLkpHaXRQdWJsaWNLZXlBdXRoRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLkpHaXRTZXJ2ZXJLZXlWZXJpZmllcjsKQEAgLTIxNiw2ICsyMTcsNyBAQCBwdWJsaWMgU3NoZFNlc3Npb24gZ2V0U2Vzc2lvbihVUklpc2ggdXJpLAogCQkJCQkJbmV3IEpHaXRVc2VySW50ZXJhY3Rpb24oY3JlZGVudGlhbHNQcm92aWRlcikpOwogCQkJCWNsaWVudC5zZXRVc2VyQXV0aEZhY3RvcmllcyhnZXRVc2VyQXV0aEZhY3RvcmllcygpKTsKIAkJCQljbGllbnQuc2V0S2V5SWRlbnRpdHlQcm92aWRlcihkZWZhdWx0S2V5c1Byb3ZpZGVyKTsKKwkJCQljbGllbnQuc2V0S2V4RXh0ZW5zaW9uSGFuZGxlcihKR2l0S2V4RXh0ZW5zaW9uSGFuZGxlci5JTlNUQU5DRSk7CiAJCQkJLy8gSkdpdC1zcGVjaWZpYyB0aGluZ3M6CiAJCQkJSkdpdFNzaENsaWVudCBqZ2l0Q2xpZW50ID0gKEpHaXRTc2hDbGllbnQpIGNsaWVudDsKIAkJCQlqZ2l0Q2xpZW50LnNldEtleUNhY2hlKGdldEtleUNhY2hlKCkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGE1ZTRmMzkuLmJlMTZhYjAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMTcgKzMsMTcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIEltcG9ydC1QYWNrYWdlOiBjb20uamNyYWZ0LmpzY2g7dmVyc2lvbj0iWzAuMS41NCwwLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5leHBlcmltZW50YWwudGhlb3JpZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L3BvbS54bWwKaW5kZXggMThjY2U0Mi4uOGM2NTMzYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvT3BlblNzaENvbmZpZ1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvT3BlblNzaENvbmZpZ1Rlc3QuamF2YQppbmRleCA0YzdlOTllLi45M2Q4NWUyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L09wZW5Tc2hDb25maWdUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9PcGVuU3NoQ29uZmlnVGVzdC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNyBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMjEgR29vZ2xlIEluYy4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQlGaWxlVXRpbHMubWtkaXIoY29uZmlnRmlsZS5nZXRQYXJlbnRGaWxlKCkpOwogCiAJCW1vY2tTeXN0ZW1SZWFkZXIuc2V0UHJvcGVydHkoQ29uc3RhbnRzLk9TX1VTRVJfTkFNRV9LRVksICJqZXhfanVuaXQiKTsKKwkJbW9ja1N5c3RlbVJlYWRlci5zZXRQcm9wZXJ0eSgiVFNUX1ZBUiIsICJURVNUIik7CiAJCW9zYyA9IG5ldyBPcGVuU3NoQ29uZmlnKGhvbWUsIGNvbmZpZ0ZpbGUpOwogCX0KIApAQCAtNDk3LDQgKzQ5OCw5NSBAQCBwdWJsaWMgdm9pZCB0ZXN0RW9sQ29tbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0RXF1YWxzKCJec3NoLXJzYSIsCiAJCQkJYy5nZXRWYWx1ZShTc2hDb25zdGFudHMuUFVCS0VZX0FDQ0VQVEVEX0FMR09SSVRITVMpKTsKIAl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFblZhclN1YnN0aXR1dGlvbigpIHRocm93cyBFeGNlcHRpb24geworCQljb25maWcoIkhvc3Qgb3JjelxuSWRlbnRpdHlGaWxlIC90bXAvJHtUU1RfVkFSfVxuIgorCQkJCSsgIkNlcnRpZmljYXRlRmlsZSAvdG1wLyR7fS9mb29cblVzZXIgJHtUU1RfVkFSfVxuSWRlbnRpdHlBZ2VudCAvdG1wLyR7VFNUX1ZBUi9iYXIiKTsKKwkJSG9zdCBoID0gb3NjLmxvb2t1cCgib3JjeiIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlDb25maWcgYyA9IGguZ2V0Q29uZmlnKCk7CisJCWFzc2VydEVxdWFscygiL3RtcC9URVNUIiwKKwkJCQljLmdldFZhbHVlKFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFKSk7CisJCS8vIE5vIHZhcmlhYmxlIG5hbWUKKwkJYXNzZXJ0RXF1YWxzKCIvdG1wLyR7fS9mb28iLCBjLmdldFZhbHVlKFNzaENvbnN0YW50cy5DRVJUSUZJQ0FURV9GSUxFKSk7CisJCS8vIFVzZXIgZG9lc24ndCBnZXQgZW52IHZhciBzdWJzdGl0dXRpb246CisJCWFzc2VydEVxdWFscygiJHtUU1RfVkFSfSIsIGMuZ2V0VmFsdWUoU3NoQ29uc3RhbnRzLlVTRVIpKTsKKwkJYXNzZXJ0RXF1YWxzKCIke1RTVF9WQVJ9IiwgaC5nZXRVc2VyKCkpOworCQkvLyBVbnRlcm1pbmF0ZWQ6CisJCWFzc2VydEVxdWFscygiL3RtcC8ke1RTVF9WQVIvYmFyIiwKKwkJCQljLmdldFZhbHVlKFNzaENvbnN0YW50cy5JREVOVElUWV9BR0VOVCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5lZ2F0aXZlTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJY29uZmlnKCJIb3N0IGZvby5iYXIgIWZvb2Jhci5iYXogKi5iYXpcbiIgKyAiUG9ydCAyOTQxOFxuIik7CisJCUhvc3QgaCA9IG9zYy5sb29rdXAoImZvby5iYXIiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDI5NDE4LCBoLmdldFBvcnQoKSk7CisJCWggPSBvc2MubG9va3VwKCJmb29iYXIuYmF6Iik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyMiwgaC5nZXRQb3J0KCkpOworCQloID0gb3NjLmxvb2t1cCgiZm9vLmJheiIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjk0MTgsIGguZ2V0UG9ydCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3ROZWdhdGl2ZU1hdGNoMigpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBOZWdhdGl2ZSBtYXRjaCBhZnRlciB0aGUgcG9zaXRpdmUgbWF0Y2guCisJCWNvbmZpZygiSG9zdCBmb28uYmFyICouYmF6ICFmb29iYXIuYmF6XG4iICsgIlBvcnQgMjk0MThcbiIpOworCQlIb3N0IGggPSBvc2MubG9va3VwKCJmb28uYmFyIik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyOTQxOCwgaC5nZXRQb3J0KCkpOworCQloID0gb3NjLmxvb2t1cCgiZm9vYmFyLmJheiIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjIsIGguZ2V0UG9ydCgpKTsKKwkJaCA9IG9zYy5sb29rdXAoImZvby5iYXoiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDI5NDE4LCBoLmdldFBvcnQoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Tm9NYXRjaCgpIHRocm93cyBFeGNlcHRpb24geworCQljb25maWcoIkhvc3QgIWhvc3QxICFob3N0MlxuIiArICJQb3J0IDI5NDE4XG4iKTsKKwkJSG9zdCBoID0gb3NjLmxvb2t1cCgiaG9zdDEiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDIyLCBoLmdldFBvcnQoKSk7CisJCWggPSBvc2MubG9va3VwKCJob3N0MiIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjIsIGguZ2V0UG9ydCgpKTsKKwkJaCA9IG9zYy5sb29rdXAoImhvc3QzIik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyMiwgaC5nZXRQb3J0KCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE11bHRpcGxlTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJY29uZmlnKCJIb3N0IGZvby5iYXJcblBvcnQgMjk0MThcbklkZW50aXR5RmlsZSAvZm9vXG5cbiIKKwkJCQkrICJIb3N0ICouYmFyXG5Qb3J0IDIyXG5JZGVudGl0eUZpbGUgL2JhclxuIgorCQkJCSsgIkhvc3QgZm9vLmJhclxuUG9ydCA0N1xuSWRlbnRpdHlGaWxlIC9iYXpcbiIpOworCQlIb3N0IGggPSBvc2MubG9va3VwKCJmb28uYmFyIik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyOTQxOCwgaC5nZXRQb3J0KCkpOworCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgT2JqZWN0W10geyAiL2ZvbyIsICIvYmFyIiwgIi9iYXoiIH0sCisJCQkJaC5nZXRDb25maWcoKS5nZXRWYWx1ZXMoIklkZW50aXR5RmlsZSIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RXaGl0ZXNwYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNvbmZpZygiSG9zdCBmb28gXHRiYXIgICBiYXpcblBvcnQgMjk0MThcbiIpOworCQlIb3N0IGggPSBvc2MubG9va3VwKCJmb28iKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDI5NDE4LCBoLmdldFBvcnQoKSk7CisJCWggPSBvc2MubG9va3VwKCJiYXIiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDI5NDE4LCBoLmdldFBvcnQoKSk7CisJCWggPSBvc2MubG9va3VwKCJiYXoiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDI5NDE4LCBoLmdldFBvcnQoKSk7CisJCWggPSBvc2MubG9va3VwKCJcdGJhciIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjIsIGguZ2V0UG9ydCgpKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBkN2U4NjhmLi4wYWUyODY3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMjQgKzMsMjQgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaDtzaW5nbGV0b246PXRydWUKLUZyYWdtZW50LUhvc3Q6IG9yZy5lY2xpcHNlLmpnaXQ7YnVuZGxlLXZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIKK0ZyYWdtZW50LUhvc3Q6IG9yZy5lY2xpcHNlLmpnaXQ7YnVuZGxlLXZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuanNjaDt2ZXJzaW9uPSI1LjExLjIiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmVnaXQuY29yZSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iNS4xMS4yIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5qc2NoO3ZlcnNpb249IjUuMTIuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuZWdpdC5jb3JlIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2gsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwsCiAgICBjb20uamNyYWZ0LmpzY2giCiBJbXBvcnQtUGFja2FnZTogY29tLmpjcmFmdC5qc2NoO3ZlcnNpb249IlswLjEuMzcsMC4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2g7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCA2NGEzN2I3Li44YTQzNDJiIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoO3ZlcnNpb249IjUuMTEuMi5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9wb20ueG1sCmluZGV4IGQ2YzJiZTQuLjJiYmJlNjQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2g8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwppbmRleCA2YTk2MjFkLi5jZGRiOTlkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKQEAgLTEsNSArMSw2IEBACi0jU2F0IERlYyAyMCAyMToyMToyNCBDRVQgMjAwOAogZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKK2VuY29kaW5nLy90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0LnBhdGNoPUlTTy04ODU5LTEKK2VuY29kaW5nLy90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1Bvc3RJbWFnZT1JU08tODg1OS0xCiBlbmNvZGluZy8vdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9wYXRjaC90ZXN0R2V0VGV4dF9Cb3RoSVNPODg1OTEucGF0Y2g9SVNPLTg4NTktMQogZW5jb2RpbmcvL3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvcGF0Y2gvdGVzdEdldFRleHRfQ29udmVydC5wYXRjaD1JU08tODg1OS0xCiBlbmNvZGluZy8vdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9wYXRjaC90ZXN0R2V0VGV4dF9EaWZmQ2MucGF0Y2g9SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGM2OGMwYmMuLjJmYmEyZDMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CkBAIC0xNiw1OSArMTYsNTkgQEAKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMuZ3ppcDt2ZXJzaW9uPSJbMS4xNS4wLDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy54ejt2ZXJzaW9uPSJbMS4xNS4wLDIuMCkiLAogIG9yZy5hc3NlcnRqLmNvcmUuYXBpO3ZlcnNpb249IlszLjE0LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXZlbnRzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmUuaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5mc2NrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5yZXZ3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5jb25uZWN0aXZpdHk7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQucGFyc2VyO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQudGltZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubG9nZ2luZzt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2U7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubm90ZXM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50czt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlLmludGVybmFsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZnNjazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwucmV2d2Fsazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuY29ubmVjdGl2aXR5O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnRpbWU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxvZ2dpbmc7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5wYXRjaDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAogIG9yZy5qdW5pdDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5leHBlcmltZW50YWwudGhlb3JpZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQuZnVuY3Rpb247dmVyc2lvbj0iWzQuMTMuMCw1LjAuMCkiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L2V4dHRzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9DR2l0TG9ja0ZpbGVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvZXh0dHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0NHaXRMb2NrRmlsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzE5NDc1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L2V4dHRzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9DR2l0TG9ja0ZpbGVUZXN0LmphdmEKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBTQVAgU0UgYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3RFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuUmVwb3NpdG9yeVRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUy5FeGVjdXRpb25SZXN1bHQ7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVW5pdCB0ZXN0cyBvZiB7QGxpbmsgTG9ja0ZpbGV9IHRlc3RpbmcgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIEMgZ2l0CisgKi8KK3B1YmxpYyBjbGFzcyBDR2l0TG9ja0ZpbGVUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdExvY2tlZFR3aWNlRmFpbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlLnR4dCIsICJjb250ZW50Iik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdDEgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY3JlYXRlIGZpbGUiKS5jYWxsKCk7CisKKwkJCWFzc2VydE5vdE51bGwoY29tbWl0MSk7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudDIiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZS50eHQiKS5jYWxsKCk7CisJCQlhc3NlcnROb3ROdWxsKGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJlZGl0IGZpbGUiKS5jYWxsKCkpOworCisJCQlMb2NrRmlsZSBsZiA9IG5ldyBMb2NrRmlsZShkYi5nZXRJbmRleEZpbGUoKSk7CisJCQlhc3NlcnRUcnVlKGxmLmxvY2soKSk7CisJCQl0cnkgeworCQkJCVN0cmluZ1tdIGNvbW1hbmQgPSBuZXcgU3RyaW5nW10geyAiZ2l0IiwgImNoZWNrb3V0IiwKKwkJCQkJCWNvbW1pdDEubmFtZSgpIH07CisJCQkJUHJvY2Vzc0J1aWxkZXIgcGIgPSBuZXcgUHJvY2Vzc0J1aWxkZXIoY29tbWFuZCk7CisJCQkJcGIuZGlyZWN0b3J5KGRiLmdldFdvcmtUcmVlKCkpOworCQkJCUV4ZWN1dGlvblJlc3VsdCByZXN1bHQgPSBGUy5ERVRFQ1RFRC5leGVjdXRlKHBiLCBudWxsKTsKKwkJCQlhc3NlcnROb3RFcXVhbHMoMCwgcmVzdWx0LmdldFJjKCkpOworCQkJCVN0cmluZyBlcnIgPSByZXN1bHQuZ2V0U3RkZXJyKCkudG9TdHJpbmcoKS5zcGxpdCgiXFxSIilbMF07CisJCQkJYXNzZXJ0VHJ1ZShlcnIubWF0Y2hlcygKKwkJCQkJCSJmYXRhbDogVW5hYmxlIHRvIGNyZWF0ZSAuKi9cXC5naXQvaW5kZXhcXC5sb2NrJzogRmlsZSBleGlzdHNcXC4iKSk7CisJCQl9IGZpbmFsbHkgeworCQkJCWxmLnVubG9jaygpOworCQkJfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbAppbmRleCA4YTU5MDcwLi4zMjI0ZTk5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi8uZ2l0YXR0cmlidXRlcyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvLmdpdGF0dHJpYnV0ZXMKaW5kZXggYzU4MzFkOS4uMjhjYWEyZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi8uZ2l0YXR0cmlidXRlcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmLy5naXRhdHRyaWJ1dGVzCkBAIC0xLDMgKzEsNSBAQAogKi5wYXRjaCAtY3JsZgogKkltYWdlIC1jcmxmCiAqLm91dCAtY3JsZgorZGVsdGEqIC10ZXh0CitsaXRlcmFsKiAtdGV4dApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmLnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZWIwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYucGF0Y2gKQEAgLTAsMCArMSw5IEBACitkaWZmIC0tZ2l0IGEvY3JsZiBiL2NybGYKK2luZGV4IDkyMDZlZTYuLjk1ZGQxOTMgMTAwNjQ0CistLS0gYS9jcmxmCisrKysgYi9jcmxmCitAQCAtMSwzICsxLDMgQEAKKyBmb28KKy1maWUKKytiYXIKKyBmdW0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjIucGF0Y2ggYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYyLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNjIxMDQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYyLnBhdGNoCkBAIC0wLDAgKzEsOSBAQAorZGlmZiAtLWdpdCBhL2NybGYyIGIvY3JsZjIKK2luZGV4IDA1YzFjNzguLjkxZTI0NmQgMTAwNjQ0CistLS0gYS9jcmxmMgorKysrIGIvY3JsZjIKK0BAIC0xLDMgKzEsMyBAQAorIGZvbw0KKy1maWUNCisrYmFyDQorIGZ1bQ0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjJfUG9zdEltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmMl9Qb3N0SW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlMjQ2ZAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjJfUG9zdEltYWdlCkBAIC0wLDAgKzEsMyBAQAorZm9vDQorYmFyDQorZnVtDQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmMl9QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjJfUHJlSW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjMWM3OAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjJfUHJlSW1hZ2UKQEAgLTAsMCArMSwzIEBACitmb28NCitmaWUNCitmdW0NCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYzLnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmMy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTU1MTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmMy5wYXRjaApAQCAtMCwwICsxLDggQEAKK2RpZmYgLS1naXQgYS9jcmxmMyBiL2NybGYzCitpbmRleCBlNjlkZTI5Li45MjA2ZWU2IDEwMDY0NAorLS0tIGEvY3JsZjMKKysrKyBiL2NybGYzCitAQCAtMCwwICsxLDMgQEAKKytmb28KKytmaWUKKytmdW0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjNfUG9zdEltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmM19Qb3N0SW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVjMWM3OAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjNfUG9zdEltYWdlCkBAIC0wLDAgKzEsMyBAQAorZm9vDQorZmllDQorZnVtDQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmM19QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjNfUHJlSW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjNfUHJlSW1hZ2UKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjQucGF0Y2ggYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGY0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjYwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGY0LnBhdGNoCkBAIC0wLDAgKzEsOSBAQAorZGlmZiAtLWdpdCBhL2NybGY0IGIvY3JsZjQKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAwMDAwMDAwLi45MjA2ZWU2CistLS0gL2Rldi9udWxsCisrKysgYi9jcmxmNAorQEAgLTAsMCArMSwzIEBACisrZm9vCisrZmllCisrZnVtCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGY0X1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjRfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzFjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGY0X1Bvc3RJbWFnZQpAQCAtMCwwICsxLDMgQEAKK2Zvbw0KK2ZpZQ0KK2Z1bQ0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZl9Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGZfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTI0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGZfUG9zdEltYWdlCkBAIC0wLDAgKzEsMyBAQAorZm9vDQorYmFyDQorZnVtDQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmX1ByZUltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmX1ByZUltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzFjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGZfUHJlSW1hZ2UKQEAgLTAsMCArMSwzIEBACitmb28NCitmaWUNCitmdW0NCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2RlbHRhLnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9kZWx0YS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDg1NTMwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9kZWx0YS5wYXRjaApAQCAtMCwwICsxLDggQEAKK2RpZmYgLS1naXQgYS9kZWx0YSBiL2RlbHRhCitpbmRleCBiNDUyNzAwNWJmOWU0ZGEyZGQxZDcxODViNTFiZGFjNjIzYTQyMThmLi44YjM3MGJiNWYyYmMzMjYxYjZiNjJlODBkNmVkZDc4NGE2MWVjMjI1IDEwMDY0NAorR0lUIGJpbmFyeSBwYXRjaAorZGVsdGEgMTQKK1NjbVpwMFhtd2ExeiorJFUzal9jc04oRG16CisKK2RlbHRhIDEyCitUY21acDVYbUQ1e3UheGE9NWhFaTI4P0ZQNApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9kZWx0YV9Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2RlbHRhX1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjM3MGJiCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9kZWx0YV9Qb3N0SW1hZ2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9kZWx0YV9QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZGVsdGFfUHJlSW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1MjcwMAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZGVsdGFfUHJlSW1hZ2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9lbXB0eUxpbmUucGF0Y2ggYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2VtcHR5TGluZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGM4MGM0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9lbXB0eUxpbmUucGF0Y2gKQEAgLTAsMCArMSwxMCBAQAorZGlmZiAtLWdpdCBhL2VtcHR5TGluZSBiL2VtcHR5TGluZQoraW5kZXggMWZkM2ZhMi4uNDVjMmM5YiAxMDA2NDQKKy0tLSBhL2VtcHR5TGluZQorKysrIGIvZW1wdHlMaW5lCitAQCAtMSw0ICsxLDQgQEAKKyBmb28KKworLWZpZQorK2JhcgorIGZ1bQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9lbXB0eUxpbmVfUG9zdEltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9lbXB0eUxpbmVfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzJjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2VtcHR5TGluZV9Qb3N0SW1hZ2UKQEAgLTAsMCArMSw0IEBACitmb28KKworYmFyCitmdW0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZW1wdHlMaW5lX1ByZUltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9lbXB0eUxpbmVfUHJlSW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkM2ZhMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZW1wdHlMaW5lX1ByZUltYWdlCkBAIC0wLDAgKzEsNCBAQAorZm9vCisKK2ZpZQorZnVtCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2hlbGxvLnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsby5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDE1YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsby5wYXRjaApAQCAtMCwwICsxLDE2IEBACitkaWZmIC0tZ2l0IGEvaGVsbG8gYi9oZWxsbworaW5kZXggYjZmYzRjNi4uMGFiYWVhYSAxMDA2NDQKKy0tLSBhL2hlbGxvCisrKysgYi9oZWxsbworQEAgLTEgKzEgQEAKKy1oZWxsbworXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisrYnllCitcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2RpZmYgLS1naXQgYS95ZWxsbyBiL3llbGxvCitpbmRleCAzOTFhOGNiLi5kMWVkMDgxIDEwMDY0NAorLS0tIGEveWVsbG8KKysrKyBiL3llbGxvCitAQCAtMSArMSBAQAorLXllbGxvCisreWVsbG93CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2hlbGxvX1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvaGVsbG9fUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYmFlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2hlbGxvX1Bvc3RJbWFnZQpAQCAtMCwwICsxIEBACitieWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2hlbGxvX1ByZUltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsb19QcmVJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmZjNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsb19QcmVJbWFnZQpAQCAtMCwwICsxIEBACitoZWxsbwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbC5wYXRjaCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODgxMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsLnBhdGNoCkBAIC0wLDAgKzEsMTI2IEBACitkaWZmIC0tZ2l0IGEvbGl0ZXJhbCBiL2xpdGVyYWwKK2luZGV4IDc5OWRmODU3OGUzY2FlOGE1ZTk3OTE4MjM5MWI4ZTlhNmEzZGVkZWQuLjc0ZTQyMDFhZjYzNzhhYzg3YmY5ZTExOGZiYWI2NTUzYzdmZDM1NWMgMTAwNjQ0CitHSVQgYmluYXJ5IHBhdGNoCitsaXRlcmFsIDUzODkKK3pjbWMmJlg7ZjI1eDI9MGdGYShnOyRmTzhDNWZsfHIyJE1ocGYtO1hYaCtxT0Bxd1JvKjNhRjNeUGVxKFpvWHtZNAorekl7LT0/UChkKzRSR2VDWkFUdVEzMDFBUSlWS0N0KXVQKmptPiNiaHpgfUwtXllOZ0lPUmtoRkZ5RElzU29TPVlaCit6biQmNGowRHp7cW1xIVF5Qz01fFJRR3J2ezcxSX1SQXw8JV95OCY/UGkyOFVlOFJrZkckVER8dV5SM3wqeFUoekIKK3paQEs1UCYzK3hlakNNY1VjMFkhSSQ/V2o2PityUXhhKUJ9fE96Z3ZXVmBCcD10PUBMK3VudmNoZVktRkdXVkhGaQoremwraFVBRzt0UUxHR09yWUVJYlpfd3g4KWxQIz95R3N9UThhJDQmYEF0RGp2dmpRd217eT1feyZPYktNKXp3dWtWCit6P0FwQUVvdj0lKnBBQnIoNCE2TzsrZks1fjI3KXlDKn16X0s4fDJwTlhGRVpPKEZ0aXhmUWJEVl48ZnQ2dShnan0KK3pTQ3w4Mip6UF5TM0k8VDF1VSlzTkNFV0FMJiEpfUt3JCt5YUFeODhLPlRVQmU9eC1JVSNaTjtaJHVgS0EwRWhuQQorekxvITYmLT01Jl9aNn1fdjMoOUhydjR2RXt6Uig7N1Q8ITNOUkJaXyN5elNjanEwOS0jaCpjWG4rSSghR0BVfnpfCit6IVpnQVBjPGByelAlQCpfKlNYRWw5eF45ZkJKUERENHohMEgydXI8ZitDNk48a09SQHFqd2xraFU/JmNNc2NxTCUKK3poeVM8JmBfe21UP2hfWTVrb1JZX2BWKSNFIXd3KEV3IWdKTk1URjFvSzZZWSVBfE48SiF6VkNkUVF+aDBzWT83Tgorelk9bGdfQy04bWpwZ0BRS3VTcFZNKjh5OFk1UHdNMGlVXj1AS0cwYGFCd1RJckF9JEw7YnIzZzI2eCpQajNCeX53Cit6dGY0PCR6N0IqNlV3ZzMrbG5oX20mdSNHVzVEcE5gZjFWfCpufEtjZE5yKzZhP1N2ZEF4YF9SdWpTUDZDam5FNjwKK3o0N15zdDk1SGxeSUJ1NmJYRkxjI3tvJD00MGlvY15yS19haHwzRm98JFR4PWJ6dVdVSngpKjV7LSVMJX13KkJlbAoremZgaVd2WGRLMjVBJlRlbkBrI0NIbFZwPVdITSkhcmVmOypycG5VMzRMK2skTClAZnM+OTk3UmVRcnI3eVZKWUxECit6YGRWczNsWVYrfk9wb0BtKzwxUk1pfVplbHYoYU97ekZ0YU93Xkoyc28jKV99UmheM21UeTVVbG01dTBiZDEkc2QKK3olMVNhTmNHRzhVQztlUHFodHswdmBrS0o2M3V9S192b3Y1dl9VX2xtIXtfQmg4cVd7P1pUPDRvNGpifHx1Rm1pXgorejMwWlVeYXs7QHt2Zjk/ZGU1KVVnZCR6Pm0hcGQxa3R9Jm5OeGZRJSRDdjV0SSNKTH50TSFmWGRtMzh+Z3VnNjRwCit6UFFIenN4ckVQb0h+YWN1dWlQcXdnZUxrWDlzdGxAY3pkYGxQaV5VSVB1cUkobFRQKHRkS3phSm5nLTF+N0UtaXQKK3pefUY0KVV5ayRsQFU3SjNYN2IxVFpvaXpvTWxhfDwpTGlQITFOayM0SCNmR0lSeyF6dlVnXzZjcjdrZjZqZGQ2NgorekQhUWMjRj1kMkxpU0hPSzgreDtJMEMoWWo9QjQhRzhJOzZkN29EWl4oXlBCYmFTST1kVXlheEl5fVl3eV43emBJCit6Um9Mb289XldrKXxMJSs5dlhZSUA8TldmVD1FJGJUXnFmPnxTVVJRUUdYOE5xTHBOcjtuOUlufngkWWA5VVV1NGIKK3o9alR9TzlXXklBPiFzXmZXcVF0YTJAflhSNFFUYyVfVzZgbmJuQE5lMyNWZ08kTzN8YGUzWFdqa0wlbTw/dk9LZQoremIyQ3FVYE8yTldYWXJwViFtVjVpenJ6P1U5P2JeNXhRVEdifDVCUUJHWldQUF93ZWI5NlFtKG9wemRuYmRtMkZnCit6KW82Qk5WfUsmZTFjbm5JTjNMcDtTbTIrZCRIQUxvb3hYKXlrX30xYSgxcUxvcDwybURUYjV3QTYqTnUtbE4zM2kKK3pnKjM+UVY4ajFSSj95PTdMQDRTWWAhQ2t1TnAyKjwtVk42TDMoPnJ1RDJqRmFlPlBxWlgtYGJzSVEmK0pNdHtnUAorek1Ha0NmZzxxYHdiP2xjI0UwZXAyMlIzRGE+diRGUW5xY3N+Zn5PZGlZfERQZyFybXhNJGtGNHt7YFpxbSh+JCZpCit6K1FBdjJzdDc2e1FsbzZTNjUpPVdSeEMpPGR1Y30zY2UhZ3IrU2drJW0hNyZ0cDluMUkxNXAlT0JRSzJnSj55VXkKK3o7dz9STDBoPHdIIWl3UyteeShYYjhlYyk5LShaJHRNKElScDZ8JH05PWJVJnEzI2BNXyRiU0JBKmo+ZFYpUW0+KgorekJFU31FcWZkdHViVCRXU1BKbloheUl+SSRkRmImYGNrQl9JRXpLIU04K29DXjVES2t7N21SZiRCMk1KN2Z0b29TCit6N21gPEI7SX1kKFQkPT0wKktOSS10XjlgMj16USlyYXdgemVBe1p8SD9yKXQjWEdMP0pVZlIyRlRuTzw0MmRwUkcKK3olQkhpVGwmQTdTbyF4MmxWa1Z4T2RAemlKSmR4R0MmUCRlPlFEX1ozdiF1IUlmOzVRSUZBYyVFK04yaj4xRktnZworejclWmpIaTxxVWNHcC1+d2UxNzN5eiYlLWFIc3pkcTc2YGBZQD4yNG1pUXN5YTdSVyh3Y2tzJUtlcHM7enUpYjBBCit6czI1SlBoRk8/MmFGdkVFYlZqZTIpJiFuQkdOSTZ2YWBaalZePCY8OypvQUlidjB8JXpjVG1ZdzQmNE9wZGRFQUwKK3o2aXxBQiZXaHg9SmFZYFUkXngtPyZaaFhoLVZfcUBQRkE8QGFhc1NJKl81TFZ5ZGc3NTxjN1diT1I/MTl0RUcrYAorelBCMTJQX3QwOWAtZE8xZHtnYlcmTlVsODg4QHx5dC1sJiE7O3B5X15OdTxkQkt3RGMzeXZERH45M35RSEJGUHpYCit6JEcjfFIpMkt2QXhAeVlBaVYza1ljYml1VV9OJXV2UU1SRWxpYFdfVT9jYSMweWthdU0qUy0tc0ZgZGZXNFU1d1EKK3pFN3ViM3R8aEp+cmFBQTZQKmhgN0lrcVFycChCbStmY3MoWVYkbD4+TnAja2Q/aj1BaHRDaT4jeHhFQCk0Sm18XgorejxZUiZmRF9Mb1YrPGwjbWBBUC0qPnM5QyFRNSNiZShES1c7UEpxcnpRci1uRHRWOGh5ITlYY3FNKj5LY3tIaSlZCit6UG1UbW0yYyhgcG8tM2RQSDhWK29CNUdvNHpfXkp5Nn4+S0JMbGAkUU8raDdVPjA3ezUwbGpHYnUkSEZxOSFTVGwKK3pSUVU1KnV9VFcpcXJ5V31QPXFjWUlZSlUlMFQ9TWcyITlUMW9wSy1PUXhtbD9FeD54VGUmbVJURmMoemRtc1IrdAorenRSKEl2dSR7RUZlKm1ReVZxZkxVb2FMM2Y/YDw1QSNVNDBZYmxgJihZYTc9Yk9kKU1PSjJHLVU9Wj5IJF9UfDBZCit6XntXQEtRbj5jT2d1SjA/YUdXZi03KEpUKEB8STVpQmYlYH1DfkJGcFdufE4jdEtiX1JnWWVaVFNzaTx4e2lVNyUKK3pTWVFLfEI5Ki1aJjsyb2xxOH5Wck5oZFpQSl9TX3BeUTctLWdCRn0yVVl4MVdvalZ5NnFnaks7QTVnNG9kMU8kNgorenR4UDxlNFd7RjE7NStyZiN0MWBfeytBak83OWs5KlBHRG9GNnd4NCtFVlgpbDR8fmN+MU1ZfUtYTEMqMGVEJX5FCit6S3NOPWVrWGJgNntkRF56I1Y2KTZLJGB9Xj94JE9KVUxXR3B5YiVAJkpWTik1d0xOKjdZI0ZvQzhfPncwMiltVzsKK3p2Z3drUG5aUGNlamooSlg1IUR+Tmt+VmpydzkjfCoweUdeXjFXSkBAPDJgUnx6ejJseDFPa3hLOEBGJW9UU3grdgorenBgNSRKVyYxMzd5TEx5I08jdSFGWFI0Xk9IKnUxb0x3Yz4yOGZYTDcpVW1AZ3soVm1QWml6cFRQX2FSS1liNFRJCit6Kmxsc3FkM2NjcjczM2tKO0cybV5Scjx9aXtfMlB9Y09jUF8jTktOYXZnT2c5ZX5tdyVyX2NqIWgrbitRKGU3ZFkKK3pDNzt8eHgyRDFUUVBwVT9ofmIpJjZpUW5UbzJvPVU5WGw+Y2NUSzZTc08odDRHNlAlVk5UUkNWTVRPKDhjKElPOQorenRkRWZIJVBaOGJPIyYlRXtFLXlZbFdiNjxpVVhrbT5rQjZVU2pqOFlxdChEJEBYQTNCISM9JV9Ed3F2K3dpckI4Cit6TF5xZ3dBdXhGemlIdWtFKT9gKzAwR21+PGtMbjBCYygzUDdIWTReYE08VFhrXyspRSFzNj1COGBLV1pLbVBpfU0KK3poUUU/VXdGN35PM0lmfCRnIyg9by1sUT1LJFA+PlZIMyRkUXhVMlM8RW84MT1OdE83em8oP3dwX0BecH0wOXY9dgorelJCYHZCJiphSyp1JGRmR01kY0ohJDdybWpXRi1MTWp8K29DaiExT3B1I3Eqej9saSNXVk4zR0ItbjB0eFRJWGFTCit6KURaXmklYTA2P1gke3NWa3wpXl5nXjtELXdhZCt9ZE80YV5BVi04I1NsdmB0VjRORUw/OEheOEdBZjh4TSEmbmYKK3ozcGhXSDVjSGozPmdHMTdmV3UoI29uaHdKQjwoc1N4MFY0VWx6ZHJIRyV5O3Z6YmAzNDV5ZTVrMTA+KTRMNUlQOworeklgUGFhN2wrYTEyQyQrWkBsPUtMUH5lZ2BiWVIxKiNWVkxLa21jU0AkZ34qY0MzaHxhNT48KEtLOTBNWGhzcigtCit6UypEWGY5dVRRKDtNJn5MZHdUezBWOypWNEhgQ0t0SjQzaU4oZjVKU1lMV1JsNi0qdC1fOWlRJTYxbFVBSiFrVWcKK3ooTCtKR3BwIX4oWX1FcEtpWmBAYj1wcih2PW8+U3RVQT58fChVYktZaDxwUl5NMHZ6TGBTZEFBOWxfbUttJD5KNQorei1WdXhVVmo4R0UtJT0qZVQ+OSppS24qYjx2RFQrfV5zJCVJandwMFZAeEs2PEAyUGhjYnpTZW83PExmTi0heUJNCit6dn1XJFVLclc2aFFwV35JX2oydGUmbUQjJXRtc3U+NCNWVzVaYEglPFhHTWJUJFhRakVaR3pod01iVTN2NGVUPVAKK3pqWXxIP2pJJCQhaVN2SVM4KldANlF+P0ZTaUMwb2FOQnhRLU08TnlvKXEleT9ASjh1ejxLZlpaVjx6KFR4e15zQworemNyQFUyTWdYVCVJeV9hWippUmxxTVg0PnVQMjVgdjg1ZlAzNCNsO3pPUnlffHBSdHxvbyZIY1NgS3tvfFhZRDJCCit6Sjd6ZUJhNylvZ3NLYW8qPSlKZ29PV2RGUip9NzcwaElwe1Z4YV5nREsoZWZfQm4oUmQmOTJBZl5LPnx4KmI/cHEKK3peZFBlTlllQCpVMDM1fntSQk4pWk95R3s+MCY4aWJ4c1YyTzY8PGtCaF9JZjA5QHV+OyoqdDl5OExaflVwYSVpeAorelRacz4qM0V0b2dIRVJUYDVYP2skTDQzWnoydkcmYHpZQ0B6Rzk+PCpLb3xMbiMxeypHTDBYVl96RjshKTNXPmlmCit6cGQjZitgfiFoMVFpI01xNX0/UkFCKD13aWptM2RndklCYmdkZX5MUEpNdU5NPGM0NH41ezBEcFMqXnJFeiQqQ3gKK3otRiQ3VlRYQ0Z4alU9Zk1hRkEoOHszU3MmNTt9fiRAWm54VWNOb25Obk1DKStYSChDI21WZGR2THUwTlIpVGFCIworemtJc3lUXzYxUFZfMTxha0YwUzhjRktzbEZsb25iaTVCS0NLKT1fRExtMzFxeD8jfURJODdHWX08d1Q4blJgQk80Cit6UnhANV9hMUdFNT9LT1AyYlArb1R5SS1LJEBLOCV1TTVGeSE1QFRQPzsqIXhUcDJtRn5IT1FEPnlDKFJ4aCtVNGcKK3pVVWtxNiN9djI4Q29QbEN1a1RCaD5NaGAwPnk0aH1UZyZFU2s3ciF5RT1PPihkU3QoQUx5d1BDWnl0d0s5bSNkJAorelVQdCQqQGNrR0BfI1chbXlxZXtzbWpwcGJuRGRmUFRScGtRUHtqKkllUzQycGkxMmpUdVo2eXMxVDVyXyhoVzkkCit6ZFU3Ky0meDQyVllUI3NRKHt1YWE4OFk+JG5APVZjU29UOzJ1PFlNdktGKDVma3EmbXticTdmRyVxNzt7NHBzI00KK3oyanFtcSlwY3swYUBVfl57RDM/OV8jYkwjWU1rRGJofWg/XytUdUcwUz0/Q0VDdzE5TlBkRT56blV8c1g5PHw4SQoreiNhYHg4SnU/bSVGI05OWWVGbHJgYyZ9Myt1dGlGWEwqSUJuQiVfMkcxP248aT9lQilZOGI1bGh7OF42T0ImfCFaCit6N2dKKSR2NSswbXshWmB5ens0UCRsbE5rR2phP1M4RkpjQ312fExNNkBsUl57RkdpYVoyYFN+ZXdfSyNsTUM8fUEKK3pFbjNUWSNTZyhxZTtjRTQ0IUc9fi0tUypveSVuNWc/T35ScmY2JlJxRSY0M1FWeExiQz9KM0RePHxjYTkyUT16SQorenshJW9uaUREN0g+MW9JRU8/Jm94aWs+X1Y1UVYyekgwQTckJnBtRDV2R1htaT8lRj52Xl5XT35STz1SMi0kOGo+Cit6JDkjZFJ2YWlfNjQ9R31HYFF7Z0QjbVRibDZ+YjNIbSlqbGJHNSFzP0tKRzMmUkdfJHxZd2RqUWk5e0UjU3xFd30KK3prZ1IzZCRaU0tNPTRvPU55T3RgQ3N5fUclPUBzNlBXeWM2eHA2NmJDYF43akZJV29RM2FrR2Nnej05SlNqdWZ3bQorelBgO31BQWpAWDZ6SERscmVtfXVCJCp6WF44bDl8Qj98M1ZwWWU/UmpTaCF4aTkkITZ8Xlh5cW08RjwtTT0wJFhlCit6WWttMn54RSNlb291ZWd4Nj9JO29qZW9HOTgrXlR5KGE7dT1oRl9rUy08Pyo8b2dMTWoraFpKeXlpNkBDM3srQWIKK3pAbVVNI0tlbFd5Y2ckfE5CVldlQj9ed3x0TT52SDhsbDB6Kl5MbVVea2U5TSE+RytCTSlUOU08eWlBY2AxPTtrYQorejxadigzT3RGZXp2P1hyY15GWWRiIUNDVVNXN1ZqeFVUKnJoP0VBe3NITk1TRTlVdFhxSjwqJVglIWRHUENpbTE+Cit6dmJmdDMqJlRIZUY5IWE9cVM2R3R7UXRgKHJKbytaTT0rQjMtdVZCZXtyYG0yPlR1UjJHdnh8ZF4+KE0wXzFee0oKK3omT09na3coQXlzdFlIdHxFXnopNzh1c0lLY3Z7JThpP3pRUXh3UCtTS0NwayhQKys1fXltNWIzTlpXd3ckZmgkeworeit6JmN6eXFZSWVUemN6MG9TWktCb2EoWiNQVG4qMGdEWl8tPiZyaHIhdmQ2YjM0dzNGeGkqSnljLVk+NGVAJF40CitjeGd1TjRrbmkoTlUzPDYlezszMUpKcCgqJHhedUdyOWZHYVp2O1k3QQorCitsaXRlcmFsIDE2MjkKK3pjbVYtajJCUF9pUCk8aDszS3xMazAwMGUxTkpMVHEwMDFCVzAwMUJlMV5AczZiOSNGODAwMDA0YjMjY30ybll4VworemQ8Yk5TMDAwSVFOa2w8WlNjUyF4ZVFjSDA4TmgkZmRHR0I5UDtRfVJDRDBGN3V9fmxfM1g+WE9wLW91RUc3dHcwCit6cnoxLT1GJUYwT0FaKkJ0JTRBV2UlY2Q2RyVtYHNZNnUkeWZoQjlET3Jma2V2a1BqUXw3Ynp7WV50O2dlZVYrWiUKK3otYi0oOWQrOUtYUHg5dHsmcEZSfHA1T0RGXkZIVCY7WSR7fGt4M29EJVMje2F3dipsN0spdE1ReldSUiRATkxiXworenc7SH12KUdRSWY2JTNqOEh+JWZhO2pkPmgkNjk1UVJXY2tXK15TKCQ2RTRuWFc7WStMc0hnfmlWRjImKmBNS2hSCit6SG1tQ1ExYnl5VWBsRF5GJlhtPHBLSzYyK3dkeHNtcUd8X0x8NiZ+MWJEITRrS0FwJmlHdSVMTGRDcEhuPnxUTlYKK3olOFIzYV98VHptbSMqM1BAUS1IU1VZTTFlSCE8YiMhSC1lWlZaeEdCakxmb1hBRHJOc2FkVT1lPmMzak1zOyYmRgorejhWQ1JRXmQjU2V1OXZ7TTVBMnp6NH1FcD5uPHVoZjZwX3ArMXZ6Wm5gNTVDZkpuWStobCNUMVJWOGI/MWZQRlRWCit6TXF7fTFSTHZYek50Z2p1I0Q2QXY3ZFlRWD9FWW5jeTAhZUQ9aEp0SE5FJCRVVFF+bldhKU5JeEV9ezY9MCY7VisKK3pOU0tMZUxLdiZjPmExfXlqPDxCNHRzTkYlTHVTcXNoPFFrJFc1WVdJNTEodXJeT31nSDQlQklIQDg7Oz1EX09MLQoremd5UCFAbV52K3c/M15xRGZnbWwtOWY9Xl5EbEUrIVRlenBDPiRCRXFmOD9RZVloSDwxSnFGUDA9Zj99bVp+dihnCit6eG9KM3FgQk5zZGViKkM9Jit6blRQZyhvR1o+VHNObSpwNi1zXjxkRSl1UVVee2VBIXc4OEZzOSlBeXdSRV8+LX4KK3pvPHo8OFlPNVFtdWUmJVBMU2d4O3ZWX2g3ajdVTHBJQmlYfDRkNSUhUyl8QzxRTUh2Iz41cWlNdmlgYzNmWGpuWQorej9uekk+bjMwcWd5Syh5VG0xQ2oraW9Ge14zQDBDV3JTTyk+cm57Y317QEdvZXVmTFhzK3ZaR1QoXkMmIzdlWWliCit6QHYjKVo9PDdJT21JQTFpNlZ9K0pCWEpJSnBgbkBHSX1aVHgtb0I0JFl3Y3AkaXFhODU3fFVHJUNmR1c4MjFxNz0KK3pxOStBUE0remBkPlNgTGZ8SzNmc3dfU3NubHMkb1E8SHJ1RXVaQmVjTXNhYz9vbUlfZ2Jzfn4tQkxEejMpZmMkYAorei1lMXd0LXAjVFZyTXpGVWcjI2FLO2FmfVEjcHchb3JjUGEmWDRFcGRwR2x1VGxHaz5sJkxkTCZjPntsVkB2VWUoCit6QntpOX4+K1QrTU5zfDFAbFUlNHhNaHF6N3JYRntrbDREI1hJPHJKZnxKfWhjZWU7Y3BKen48Kk13NlZCZzRnR2IKK3pvb3EtbFI9Q2hfIUxfY2VLNXFBbUkyaHZ8XzdaV1RBZCRYel9aKnxLO1dFJXlwa0NRPWZJdSsqJTwjS2g3aE1QIQorej1yODM5WnRCY2RSViRJT2BiPFk3OCVqKCtmRWtiaFV2RyUtRVBqLUUzdWFQWmNacjdjRXBhKGkpUExeV3RGNWs3Cit6S2N7XzMrNnl3dTclZjZMNHdPVXspZ31mbypEP15Kcnx7N1NwOD88KUheRVNFJXNmJX51bit1YTdyWXtKMDYrfTAKK3pCeThScHMySHxeSnxqKzIrfnJDNEZuP2hZMEpDUF9MaDdpfEwrVTk/KmFsKyZ0a0ZGWHNmMEhDUiRzS3R7JS1OKgorejNSUjYrRm1JcH01bSgmJHVlQGc9YkxKS1JGbFRONy0mYF94JFVXbG9jZ0NoKTNBbH5DOVIpfmZaRn4qMThmNFZaCit6N29BJlVrdzNASys3U0xnN21qaHFUcVd9aFYrYExoemM1YjY9a0xVN0k1djlXPCYmU2soSEk0Z09AeDQ3MDtvOW0KK3pZK3JUeUp5bmZhRysmXkxwNTlBPE01QylYY3FZYmgjbGZAREZAVDx7N3g0I3MyMVR6dVpiREIrK1IrendeUzx1MAorejtnM0RWel9me0pmdGtCMUM7Y0tBSGdecjI5SlRAY2ZpN0g1M1UxZFpZUjxLQXNpX2xkbTdVdjthYGFGWURFST4xCit6Ylh7cDZaMmcwc3QxK3hQUnJ+ZlFrLW5JPkwkXiNBPEpIczsxJlQhTVE/c0FGMTJIX3BrUnJIVWVJUEM7bk5aa0EKK3pBbE9TTj48NVBhTD0hNjtQU3dCdU9zdGhiO0B2dGFOM0g4IWZnLVJ3N1FRZ0k+UGs/NDlhfGd6TV5PelR0VVg9KAorejx7dCtTI1RpWHEpNnxlRS1nelNJMHJQXytZbVlCNHl9NUk+RHM/eUx5dm1BezRkb21YNm5SeXxUYntjQGd3M0dvCit6U0F5PlElQzswMipzeUR6TmFPJDtVYVZAcDV1VlAteHg2aldVKCQ4SXBZKEJEek9RN2o2cVYlKSgqQGM4WVVSVzsKK3p6cGNwMlM0I25eUyV7MVMrUUJ3a0hDMWs3X0lfSGtgOytWMDl1WXRjJT1XdyM/LWVAfUd9fCF9UFU7T0R7LVFzcAorYlUlTERrTURCV1gmUnVgPDAwMDAwTmt2WFh1MG1qZkpBQGJ+CisKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbF9Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZTQyMDEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfUG9zdEltYWdlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbF9QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbF9QcmVJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTlkZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsX1ByZUltYWdlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbF9hZGQucGF0Y2ggYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfYWRkLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNmE5ZTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfYWRkLnBhdGNoCkBAIC0wLDAgKzEsNDAgQEAKK2RpZmYgLS1naXQgYS9saXRlcmFsX2FkZCBiL2xpdGVyYWxfYWRkCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzk5ZGY4NTc4ZTNjYWU4YTVlOTc5MTgyMzkxYjhlOWE2YTNkZWRlZAorR0lUIGJpbmFyeSBwYXRjaAorbGl0ZXJhbCAxNjI5Cit6Y21WLWoyQlBfaVApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFeQHM2YjkjRjgwMDAwNGIzI2N9Mm5ZeFcKK3pkPGJOUzAwMElRTmtsPFpTY1MheGVRY0gwOE5oJGZkR0dCOVA7UX1SQ0QwRjd1fX5sXzNYPlhPcC1vdUVHN3R3MAorenJ6MS09RiVGME9BWipCdCU0QVdlJWNkNkclbWBzWTZ1JHlmaEI5RE9yZmtldmtQalF8N2J6e1ledDtnZWVWK1olCit6LWItKDlkKzlLWFB4OXR7JnBGUnxwNU9ERl5GSFQmO1kke3xreDNvRCVTI3thd3YqbDdLKXRNUXpXUlIkQE5MYl8KK3p3O0h9dilHUUlmNiUzajhIfiVmYTtqZD5oJDY5NVFSV2NrVyteUygkNkU0blhXO1krTHNIZ35pVkYyJipgTUtoUgorekhtbUNRMWJ5eVVgbEReRiZYbTxwS0s2Mit3ZHhzbXFHfF9MfDYmfjFiRCE0a0tBcCZpR3UlTExkQ3BIbj58VE5WCit6JThSM2FffFR6bW0jKjNQQFEtSFNVWU0xZUghPGIjIUgtZVpWWnhHQmpMZm9YQURyTnNhZFU9ZT5jM2pNczsmJkYKK3o4VkNSUV5kI1NldTl2e001QTJ6ejR9RXA+bjx1aGY2cF9wKzF2elpuYDU1Q2ZKblkraGwjVDFSVjhiPzFmUEZUVgorek1xe30xUkx2WHpOdGdqdSNENkF2N2RZUVg/RVluY3kwIWVEPWhKdEhORSQkVVRRfm5XYSlOSXhFfXs2PTAmO1YrCit6TlNLTGVMS3YmYz5hMX15ajw8QjR0c05GJUx1U3FzaDxRayRXNVlXSTUxKHVyXk99Z0g0JUJJSEA4Ozs9RF9PTC0KK3pneVAhQG1edit3PzNecURmZ21sLTlmPV5eRGxFKyFUZXpwQz4kQkVxZjg/UWVZaEg8MUpxRlAwPWY/fW1afnYoZworenhvSjNxYEJOc2RlYipDPSYrem5UUGcob0daPlRzTm0qcDYtc148ZEUpdVFVXntlQSF3ODhGczkpQXl3UkVfPi1+Cit6bzx6PDhZTzVRbXVlJiVQTFNneDt2Vl9oN2o3VUxwSUJpWHw0ZDUlIVMpfEM8UU1IdiM+NXFpTXZpYGMzZlhqblkKK3o/bnpJPm4zMHFneUsoeVRtMUNqK2lvRnteM0AwQ1dyU08pPnJue2N9e0BHb2V1ZkxYcyt2WkdUKF5DJiM3ZVlpYgorekB2IylaPTw3SU9tSUExaTZWfStKQlhKSUpwYG5AR0l9WlR4LW9CNCRZd2NwJGlxYTg1N3xVRyVDZkdXODIxcTc9Cit6cTkrQVBNK3pgZD5TYExmfEszZnN3X1NzbmxzJG9RPEhydUV1WkJlY01zYWM/b21JX2dic35+LUJMRHozKWZjJGAKK3otZTF3dC1wI1RWck16RlVnIyNhSzthZn1RI3B3IW9yY1BhJlg0RXBkcEdsdVRsR2s+bCZMZEwmYz57bFZAdlVlKAorekJ7aTl+PitUK01Oc3wxQGxVJTR4TWhxejdyWEZ7a2w0RCNYSTxySmZ8Sn1oY2VlO2NwSnp+PCpNdzZWQmc0Z0diCit6b29xLWxSPUNoXyFMX2NlSzVxQW1JMmh2fF83WldUQWQkWHpfWip8SztXRSV5cGtDUT1mSXUrKiU8I0toN2hNUCEKK3o9cjgzOVp0QmNkUlYkSU9gYjxZNzglaigrZkVrYmhVdkclLUVQai1FM3VhUFpjWnI3Y0VwYShpKVBMXld0RjVrNworektje18zKzZ5d3U3JWY2TDR3T1V7KWd9Zm8qRD9eSnJ8ezdTcDg/PClIXkVTRSVzZiV+dW4rdWE3cll7SjA2K30wCit6Qnk4UnBzMkh8Xkp8aisyK35yQzRGbj9oWTBKQ1BfTGg3aXxMK1U5PyphbCsmdGtGRlhzZjBIQ1Ikc0t0eyUtTioKK3ozUlI2K0ZtSXB9NW0oJiR1ZUBnPWJMSktSRmxUTjctJmBfeCRVV2xvY2dDaCkzQWx+QzlSKX5mWkZ+KjE4ZjRWWgorejdvQSZVa3czQEsrN1NMZzdtamhxVHFXfWhWK2BMaHpjNWI2PWtMVTdJNXY5VzwmJlNrKEhJNGdPQHg0NzA7bzltCit6WStyVHlKeW5mYUcrJl5McDU5QTxNNUMpWGNxWWJoI2xmQERGQFQ8ezd4NCNzMjFUenVaYkRCKytSK3p3XlM8dTAKK3o7ZzNEVnpfZntKZnRrQjFDO2NLQUhnXnIyOUpUQGNmaTdINTNVMWRaWVI8S0FzaV9sZG03VXY7YWBhRllERUk+MQoremJYe3A2WjJnMHN0MSt4UFJyfmZRay1uST5MJF4jQTxKSHM7MSZUIU1RP3NBRjEySF9wa1JySFVlSVBDO25OWmtBCit6QWxPU04+PDVQYUw9ITY7UFN3QnVPc3RoYjtAdnRhTjNIOCFmZy1SdzdRUWdJPlBrPzQ5YXxnek1eT3pUdFVYPSgKK3o8e3QrUyNUaVhxKTZ8ZUUtZ3pTSTByUF8rWW1ZQjR5fTVJPkRzP3lMeXZtQXs0ZG9tWDZuUnl8VGJ7Y0BndzNHbworelNBeT5RJUM7MDIqc3lEek5hTyQ7VWFWQHA1dVZQLXh4NmpXVSgkOElwWShCRHpPUTdqNnFWJSkoKkBjOFlVUlc7Cit6enBjcDJTNCNuXlMlezFTK1FCd2tIQzFrN19JX0hrYDsrVjA5dVl0YyU9V3cjPy1lQH1HfXwhfVBVO09Eey1Rc3AKK2JVJUxEa01EQldYJlJ1YDwwMDAwME5rdlhYdTBtamZKQUBifgorCitsaXRlcmFsIDAKK0hjbVY/ZDAwMDAxCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfYWRkX1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbF9hZGRfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OWRmODUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfYWRkX1Bvc3RJbWFnZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3NtdWRnZXRlc3QucGF0Y2ggYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3NtdWRnZXRlc3QucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0ZDQyNgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvc211ZGdldGVzdC5wYXRjaApAQCAtMCwwICsxLDkgQEAKK2RpZmYgLS1naXQgYS9zbXVkZ2V0ZXN0IGIvc211ZGdldGVzdAoraW5kZXggYTI0ZDQxZS4uNzYyYzRkMCAxMDA2NDQKKy0tLSBhL3NtdWRnZXRlc3QKKysrKyBiL3NtdWRnZXRlc3QKK0BAIC0xLDMgKzEsMyBAQAorIFBFUkxFCistSEVCTEUKKytzcHJpY2gKKyBzcGVhawpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9zbXVkZ2V0ZXN0X1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvc211ZGdldGVzdF9Qb3N0SW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ2MzA4OQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvc211ZGdldGVzdF9Qb3N0SW1hZ2UKQEAgLTAsMCArMSwzIEBACitQQVJMQQorc3ByaWNoCitzcGVhawpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9zbXVkZ2V0ZXN0X1ByZUltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9zbXVkZ2V0ZXN0X1ByZUltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliYmQ4YzcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3NtdWRnZXRlc3RfUHJlSW1hZ2UKQEAgLTAsMCArMSwzIEBACitQQVJMQQorSEFCTEEKK3NwZWFrCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dC5wYXRjaCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczODBkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dC5wYXRjaApAQCAtMCwwICsxLDcgQEAKK2RpZmYgLS1naXQgYS91bWxhdXQgYi91bWxhdXQKK2luZGV4IDAwM2EwNTQuLjU1N2Y3MmYgMTAwNjQ0CistLS0gYS91bWxhdXQKKysrKyBiL3VtbGF1dAorQEAgLTEgKzEgQEAKKy3DhMOWw5wKKyvE1twKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdmNzJmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUG9zdEltYWdlCkBAIC0wLDAgKzEgQEAKK8TW3ApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUHJlSW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dF9QcmVJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDNhMDU0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUHJlSW1hZ2UKQEAgLTAsMCArMSBAQAorw4TDlsOcCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL2RlbHRhMS5mb3J3YXJkIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9kZWx0YTEuZm9yd2FyZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzhiMTY3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9kZWx0YTEuZm9yd2FyZApAQCAtMCwwICsxIEBACitTY21acDBYbXdhMXoqKyRVM2pfY3NOKERtegpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9kZWx0YTEucmV2ZXJzZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vZGVsdGExLnJldmVyc2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZmN2EwOAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vZGVsdGExLnJldmVyc2UKQEAgLTAsMCArMSBAQAorVGNtWnA1WG1ENXt1IXhhPTVoRWkyOD9GUDQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmRUZXN0LmphdmEKaW5kZXggMDU1ZWJhNy4uODY3MzEwYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmRUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDIwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMjEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTksNiArOSw3IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5hcGk7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKQEAgLTE4LDExICsxOSwyMCBAQAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuUGF0Y2hBcHBseUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuUGF0Y2hGb3JtYXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkZpbHRlckNvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkZpbHRlckNvbW1hbmRGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLlJhd1RleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSU87CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIHB1YmxpYyBjbGFzcyBBcHBseUNvbW1hbmRUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKQEAgLTU4LDYgKzY4LDI2MCBAQCBwcml2YXRlIEFwcGx5UmVzdWx0IGluaXQoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIGJvb2xlYW4gcHJlRXhpc3RzLAogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENyTGYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCWRiLmdldENvbmZpZygpLnNldEJvb2xlYW4oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGLCB0cnVlKTsKKwkJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGluaXQoImNybGYiLCB0cnVlLCB0cnVlKTsKKwkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZiIpLAorCQkJCQlyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKTsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZiIpLAorCQkJCQliLmdldFN0cmluZygwLCBiLnNpemUoKSwgZmFsc2UpKTsKKwkJfSBmaW5hbGx5IHsKKwkJCWRiLmdldENvbmZpZygpLnVuc2V0KENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRik7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDckxmT2ZmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlkYi5nZXRDb25maWcoKS5zZXRCb29sZWFuKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRiwgZmFsc2UpOworCQkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgiY3JsZiIsIHRydWUsIHRydWUpOworCQkJYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJjcmxmIiksCisJCQkJCXJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpOworCQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJjcmxmIiksCisJCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOworCQl9IGZpbmFsbHkgeworCQkJZGIuZ2V0Q29uZmlnKCkudW5zZXQoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENyTGZFbXB0eUNvbW1pdHRlZCgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgeworCQkJZGIuZ2V0Q29uZmlnKCkuc2V0Qm9vbGVhbihDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYsIHRydWUpOworCQkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgiY3JsZjMiLCB0cnVlLCB0cnVlKTsKKwkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZjMiKSwKKwkJCQkJcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKSk7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImNybGYzIiksCisJCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOworCQl9IGZpbmFsbHkgeworCQkJZGIuZ2V0Q29uZmlnKCkudW5zZXQoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENyTGZOZXdGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlkYi5nZXRDb25maWcoKS5zZXRCb29sZWFuKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRiwgdHJ1ZSk7CisJCQlBcHBseVJlc3VsdCByZXN1bHQgPSBpbml0KCJjcmxmNCIsIGZhbHNlLCB0cnVlKTsKKwkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZjQiKSwKKwkJCQkJcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKSk7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImNybGY0IiksCisJCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOworCQl9IGZpbmFsbHkgeworCQkJZGIuZ2V0Q29uZmlnKCkudW5zZXQoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFBhdGNoV2l0aENyTGYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCWRiLmdldENvbmZpZygpLnNldEJvb2xlYW4oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGLCBmYWxzZSk7CisJCQlBcHBseVJlc3VsdCByZXN1bHQgPSBpbml0KCJjcmxmMiIsIHRydWUsIHRydWUpOworCQkJYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJjcmxmMiIpLAorCQkJCQlyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKTsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZjIiKSwKKwkJCQkJYi5nZXRTdHJpbmcoMCwgYi5zaXplKCksIGZhbHNlKSk7CisJCX0gZmluYWxseSB7CisJCQlkYi5nZXRDb25maWcoKS51bnNldChDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UGF0Y2hXaXRoQ3JMZjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG5hbWUgPSAiY3JsZjIiOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJZGIuZ2V0Q29uZmlnKCkuc2V0Qm9vbGVhbihDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYsIGZhbHNlKTsKKwkJCWEgPSBuZXcgUmF3VGV4dChyZWFkRmlsZShuYW1lICsgIl9QcmVJbWFnZSIpKTsKKwkJCXdyaXRlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIG5hbWUpLAorCQkJCQlhLmdldFN0cmluZygwLCBhLnNpemUoKSwgZmFsc2UpKTsKKworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKG5hbWUpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJQcmVJbWFnZSIpLmNhbGwoKTsKKworCQkJYiA9IG5ldyBSYXdUZXh0KHJlYWRGaWxlKG5hbWUgKyAiX1Bvc3RJbWFnZSIpKTsKKworCQkJZGIuZ2V0Q29uZmlnKCkuc2V0Qm9vbGVhbihDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYsIHRydWUpOworCQkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gZ2l0LmFwcGx5KCkKKwkJCQkJLnNldFBhdGNoKGdldFRlc3RSZXNvdXJjZShuYW1lICsgIi5wYXRjaCIpKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgbmFtZSksCisJCQkJCXJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpOworCQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIG5hbWUpLAorCQkJCQliLmdldFN0cmluZygwLCBiLnNpemUoKSwgZmFsc2UpKTsKKwkJfSBmaW5hbGx5IHsKKwkJCWRiLmdldENvbmZpZygpLnVuc2V0KENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRik7CisJCX0KKwl9CisKKwkvLyBDbGVhbi9zbXVkZ2UgZmlsdGVyIGZvciB0ZXN0RmlsdGVyaW5nLiBUaGUgc211ZGdldGVzdCB0ZXN0IHJlc291cmNlcyB3ZXJlCisJLy8gY3JlYXRlZCB3aXRoIEMgZ2l0IHVzaW5nIGEgY2xlYW4gZmlsdGVyIHNlZCAtZSAicy9BL0UvZyIgYW5kIHRoZSBzbXVkZ2UKKwkvLyBmaWx0ZXIgc2VkIC1lICJzL0UvQS9nIi4gVG8ga2VlcCB0aGUgdGVzdCBpbmRlcGVuZGVudCBvZiB0aGUgcHJlc2VuY2Ugb2YKKwkvLyBzZWQsIGltcGxlbWVudCB0aGlzIHdpdGggYSBidWlsdC1pbiBmaWx0ZXIuCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUmVwbGFjZUZpbHRlciBleHRlbmRzIEZpbHRlckNvbW1hbmQgeworCisJCXByaXZhdGUgZmluYWwgY2hhciB0b1JlcGxhY2U7CisKKwkJcHJpdmF0ZSBmaW5hbCBjaGFyIHJlcGxhY2VtZW50OworCisJCVJlcGxhY2VGaWx0ZXIoSW5wdXRTdHJlYW0gaW4sIE91dHB1dFN0cmVhbSBvdXQsIGNoYXIgdG9SZXBsYWNlLAorCQkJCWNoYXIgcmVwbGFjZW1lbnQpIHsKKwkJCXN1cGVyKGluLCBvdXQpOworCQkJdGhpcy50b1JlcGxhY2UgPSB0b1JlcGxhY2U7CisJCQl0aGlzLnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCBydW4oKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJaW50IGIgPSBpbi5yZWFkKCk7CisJCQlpZiAoYiA8IDApIHsKKwkJCQlpbi5jbG9zZSgpOworCQkJCW91dC5jbG9zZSgpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWlmICgoYiAmIDB4RkYpID09IHRvUmVwbGFjZSkgeworCQkJCWIgPSByZXBsYWNlbWVudDsKKwkJCX0KKwkJCW91dC53cml0ZShiKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RmlsdGVyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8vIFNldCB1cCBmaWx0ZXIKKwkJRmlsdGVyQ29tbWFuZEZhY3RvcnkgY2xlYW4gPSAocmVwbywgaW4sIG91dCkgLT4geworCQkJcmV0dXJuIG5ldyBSZXBsYWNlRmlsdGVyKGluLCBvdXQsICdBJywgJ0UnKTsKKwkJfTsKKwkJRmlsdGVyQ29tbWFuZEZhY3Rvcnkgc211ZGdlID0gKHJlcG8sIGluLCBvdXQpIC0+IHsKKwkJCXJldHVybiBuZXcgUmVwbGFjZUZpbHRlcihpbiwgb3V0LCAnRScsICdBJyk7CisJCX07CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcigiamdpdDovL2J1aWx0aW4vYTJlL2NsZWFuIiwgY2xlYW4pOworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoImpnaXQ6Ly9idWlsdGluL2EyZS9zbXVkZ2UiLCBzbXVkZ2UpOworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOworCQkJY29uZmlnLnNldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX0ZJTFRFUl9TRUNUSU9OLCAiYTJlIiwKKwkJCQkJImNsZWFuIiwgImpnaXQ6Ly9idWlsdGluL2EyZS9jbGVhbiIpOworCQkJY29uZmlnLnNldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX0ZJTFRFUl9TRUNUSU9OLCAiYTJlIiwKKwkJCQkJInNtdWRnZSIsICJqZ2l0Oi8vYnVpbHRpbi9hMmUvc211ZGdlIik7CisJCQl3cml0ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiLmdpdGF0dHJpYnV0ZXMiKSwKKwkJCQkJInNtdWRnZXRlc3QgZmlsdGVyPWEyZSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuZ2l0YXR0cmlidXRlcyIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJBdHRyaWJ1dGVzIikuY2FsbCgpOworCQkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgic211ZGdldGVzdCIsIHRydWUsIHRydWUpOworCQkJYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJzbXVkZ2V0ZXN0IiksCisJCQkJCXJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpOworCQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJzbXVkZ2V0ZXN0IiksCisJCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOworCisJCX0gZmluYWxseSB7CisJCQkvLyBUZWFyIGRvd24gZmlsdGVyCisJCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkudW5yZWdpc3RlcigiamdpdDovL2J1aWx0aW4vYTJlL2NsZWFuIik7CisJCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkudW5yZWdpc3RlcigiamdpdDovL2J1aWx0aW4vYTJlL3NtdWRnZSIpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGNoZWNrQmluYXJ5KFN0cmluZyBuYW1lLCBib29sZWFuIGhhc1ByZUltYWdlKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNoZWNrQmluYXJ5KG5hbWUsIGhhc1ByZUltYWdlLCAxKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgY2hlY2tCaW5hcnkoU3RyaW5nIG5hbWUsIGJvb2xlYW4gaGFzUHJlSW1hZ2UsCisJCQlpbnQgbnVtYmVyT2ZGaWxlcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlieXRlW10gcG9zdCA9IElPCisJCQkJCS5yZWFkV2hvbGVTdHJlYW0oZ2V0VGVzdFJlc291cmNlKG5hbWUgKyAiX1Bvc3RJbWFnZSIpLCAwKQorCQkJCQkuYXJyYXkoKTsKKwkJCUZpbGUgZiA9IG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIG5hbWUpOworCQkJaWYgKGhhc1ByZUltYWdlKSB7CisJCQkJYnl0ZVtdIHByZSA9IElPCisJCQkJCQkucmVhZFdob2xlU3RyZWFtKGdldFRlc3RSZXNvdXJjZShuYW1lICsgIl9QcmVJbWFnZSIpLCAwKQorCQkJCQkJLmFycmF5KCk7CisJCQkJRmlsZXMud3JpdGUoZi50b1BhdGgoKSwgcHJlKTsKKwkJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4obmFtZSkuY2FsbCgpOworCQkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJQcmVJbWFnZSIpLmNhbGwoKTsKKwkJCX0KKwkJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGdpdC5hcHBseSgpCisJCQkJCS5zZXRQYXRjaChnZXRUZXN0UmVzb3VyY2UobmFtZSArICIucGF0Y2giKSkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKG51bWJlck9mRmlsZXMsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKGYsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpOworCQkJYXNzZXJ0QXJyYXlFcXVhbHMocG9zdCwgRmlsZXMucmVhZEFsbEJ5dGVzKGYudG9QYXRoKCkpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJpbmFyeURlbHRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNoZWNrQmluYXJ5KCJkZWx0YSIsIHRydWUpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJpbmFyeUxpdGVyYWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJY2hlY2tCaW5hcnkoImxpdGVyYWwiLCB0cnVlKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RCaW5hcnlMaXRlcmFsQWRkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNoZWNrQmluYXJ5KCJsaXRlcmFsX2FkZCIsIGZhbHNlKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFbmNvZGluZ0NoYW5nZSgpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBUaGlzIGlzIGEgdGV4dCBwYXRjaCB0aGF0IGNoYW5nZXMgYSBmaWxlIGNvbnRhaW5pbmcgw4TDlsOcIGluIFVURi04IHRvCisJCS8vIHRoZSBzYW1lIGNoYXJhY3RlcnMgaW4gSVNPLTg4NTktMS4gVGhlIHBhdGNoIGZpbGUgaXRzZWxmIHVzZXMgbWl4ZWQKKwkJLy8gZW5jb2RpbmcuIFNpbmNlIGNoZWNrRmlsZSgpIHdvcmtzIHdpdGggc3RyaW5ncyB1c2UgdGhlIGJpbmFyeSBjaGVjay4KKwkJY2hlY2tCaW5hcnkoInVtbGF1dCIsIHRydWUpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEVtcHR5TGluZSgpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBDIGdpdCBhY2NlcHRzIGNvbXBsZXRlbHkgZW1wdHkgbGluZXMgYXMgZW1wdHkgY29udGV4dCBsaW5lcy4KKwkJLy8gQWNjb3JkaW5nIHRvIGNvbW1lbnRzIGluIHRoZSBDIGdpdCBzb3VyY2VzIChhcHBseS5jKSwgbmV3ZXIgR05VIGRpZmYKKwkJLy8gbWF5IHByb2R1Y2Ugc3VjaCBkaWZmcy4KKwkJY2hlY2tCaW5hcnkoImVtcHR5TGluZSIsIHRydWUpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE11bHRpRmlsZU5vTmV3bGluZSgpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBUaGlzIHRlc3QgbmVlZHMgdHdvIGZpbGVzLiBPbmUgaXMgaW4gdGhlIHRlc3QgcmVzb3VyY2VzLgorCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJRmlsZXMud3JpdGUoZGIuZ2V0V29ya1RyZWUoKS50b1BhdGgoKS5yZXNvbHZlKCJ5ZWxsbyIpLAorCQkJCQkieWVsbG8iLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVNfQVNDSUkpKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigieWVsbG8iKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgieWVsbG8iKS5jYWxsKCk7CisJCX0KKwkJY2hlY2tCaW5hcnkoImhlbGxvIiwgdHJ1ZSwgMik7CisJfQorCisJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0QWRkQTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgiQTEiLCBmYWxzZSwgdHJ1ZSk7CiAJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kVGVzdC5qYXZhCmluZGV4IDlkZDEyOWMuLmY0ZjBlY2QgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZFRlc3QuamF2YQpAQCAtMzQsNiArMzQsOCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZmxvZ1JlYWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5U3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5Db250ZW50TWVyZ2VTdHJhdGVneTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyLk1lcmdlRmFpbHVyZVJlYXNvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwpAQCAtMTkzLDcgKzE5NSw3IEBAIHB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrQ29uZmxpY3RSZXNvbHV0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJfQogCiAJQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q2hlcnJ5UGlja0NvbmZsaWN0UmVzb2x1dGlvbk5vQ09tbWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJcHVibGljIHZvaWQgdGVzdENoZXJyeVBpY2tDb25mbGljdFJlc29sdXRpb25Ob0NvbW1pdCgpIHRocm93cyBFeGNlcHRpb24gewogCQlHaXQgZ2l0ID0gbmV3IEdpdChkYik7CiAJCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZUNoZXJyeVBpY2soZ2l0KTsKIApAQCAtMjgwLDYgKzI4Miw3MCBAQCBwdWJsaWMgdm9pZCB0ZXN0Q2hlcnJ5UGlja092ZXJFeGVjdXRhYmxlQ2hhbmdlT25Ob25FeGVjdHVhYmxlRmlsZVN5c3RlbSgpCiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2hlcnJ5UGlja091cnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZUNoZXJyeVBpY2soZ2l0KTsKKworCQkJQ2hlcnJ5UGlja1Jlc3VsdCByZXN1bHQgPSBnaXQuY2hlcnJ5UGljaygpCisJCQkJCS5pbmNsdWRlKHNpZGVDb21taXQuZ2V0SWQoKSkKKwkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuT1VSUykKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhDaGVycnlQaWNrU3RhdHVzLk9LLCByZXN1bHQuZ2V0U3RhdHVzKCkpOworCisJCQlTdHJpbmcgZXhwZWN0ZWQgPSAiYShtYXN0ZXIpIjsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCBleHBlY3RlZCk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrVGhlaXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IHByZXBhcmVDaGVycnlQaWNrKGdpdCk7CisKKwkJCUNoZXJyeVBpY2tSZXN1bHQgcmVzdWx0ID0gZ2l0LmNoZXJyeVBpY2soKQorCQkJCQkuaW5jbHVkZShzaWRlQ29tbWl0LmdldElkKCkpCisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlRIRUlSUykKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhDaGVycnlQaWNrU3RhdHVzLk9LLCByZXN1bHQuZ2V0U3RhdHVzKCkpOworCisJCQlTdHJpbmcgZXhwZWN0ZWQgPSAiYShzaWRlKSI7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZXhwZWN0ZWQpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2hlcnJ5UGlja1hvdXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IHByZXBhcmVDaGVycnlQaWNrU3RyYXRlZ3lPcHRpb24oZ2l0KTsKKworCQkJQ2hlcnJ5UGlja1Jlc3VsdCByZXN1bHQgPSBnaXQuY2hlcnJ5UGljaygpCisJCQkJCS5pbmNsdWRlKHNpZGVDb21taXQuZ2V0SWQoKSkKKwkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5Lk9VUlMpCisJCQkJCS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoQ2hlcnJ5UGlja1N0YXR1cy5PSywgcmVzdWx0LmdldFN0YXR1cygpKTsKKworCQkJU3RyaW5nIGV4cGVjdGVkID0gImFcbm1hc3RlclxuY1xuZFxuIjsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCBleHBlY3RlZCk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrWHRoZWlycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlQ2hlcnJ5UGlja1N0cmF0ZWd5T3B0aW9uKGdpdCk7CisKKwkJCUNoZXJyeVBpY2tSZXN1bHQgcmVzdWx0ID0gZ2l0LmNoZXJyeVBpY2soKQorCQkJCQkuaW5jbHVkZShzaWRlQ29tbWl0LmdldElkKCkpCisJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneS5USEVJUlMpCisJCQkJCS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoQ2hlcnJ5UGlja1N0YXR1cy5PSywgcmVzdWx0LmdldFN0YXR1cygpKTsKKworCQkJU3RyaW5nIGV4cGVjdGVkID0gImFcbnNpZGVcbmNcbmRcbiI7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgZXhwZWN0ZWQpOworCQl9CisJfQorCisJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0Q2hlcnJ5UGlja0NvbmZsaWN0TWFya2VycygpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgewogCQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlQ2hlcnJ5UGljayhnaXQpOwpAQCAtMzg0LDYgKzQ1MCwzMSBAQCBwcml2YXRlIFJldkNvbW1pdCBwcmVwYXJlQ2hlcnJ5UGljayhHaXQgZ2l0KSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJcmV0dXJuIHNpZGVDb21taXQ7CiAJfQogCisJcHJpdmF0ZSBSZXZDb21taXQgcHJlcGFyZUNoZXJyeVBpY2tTdHJhdGVneU9wdGlvbihHaXQgZ2l0KQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8vIGNyZWF0ZSwgYWRkIGFuZCBjb21taXQgZmlsZSBhCisJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImFcbmJcbmNcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCVJldkNvbW1pdCBmaXJzdE1hc3RlckNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJmaXJzdCBtYXN0ZXIiKQorCQkJCS5jYWxsKCk7CisKKwkJLy8gY3JlYXRlIGFuZCBjaGVja291dCBzaWRlIGJyYW5jaAorCQljcmVhdGVCcmFuY2goZmlyc3RNYXN0ZXJDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOworCQkvLyBtb2RpZnksIGFkZCBhbmQgY29tbWl0IGZpbGUgYQorCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJhXG5zaWRlXG5jXG5kXG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCS8vIGNoZWNrb3V0IG1hc3RlciBicmFuY2gKKwkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCS8vIG1vZGlmeSwgYWRkIGFuZCBjb21taXQgZmlsZSBhCisJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImFcbm1hc3RlclxuY1xuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNlY29uZCBtYXN0ZXIiKS5jYWxsKCk7CisJCXJldHVybiBzaWRlQ29tbWl0OworCX0KKwogCXByaXZhdGUgdm9pZCBkb0NoZXJyeVBpY2tBbmRDaGVja1Jlc3VsdChmaW5hbCBHaXQgZ2l0LAogCQkJZmluYWwgUmV2Q29tbWl0IHNpZGVDb21taXQsIGZpbmFsIE1lcmdlRmFpbHVyZVJlYXNvbiByZWFzb24pCiAJCQl0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmRUZXN0LmphdmEKaW5kZXggODc0N2M4NS4uYmM0ZTk0MCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmRUZXN0LmphdmEKQEAgLTE0LDYgKzE0LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLlJfSEVBRFM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7CkBAIC0yNSw2ICsyNiw3IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5NZXJnZUNvbW1hbmQuRmFzdEZvcndhcmRNb2RlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLk1lcmdlUmVzdWx0Lk1lcmdlU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLlJlc2V0Q29tbWFuZC5SZXNldFR5cGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkludmFsaWRNZXJnZUhlYWRzRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuUmVwb3NpdG9yeVRlc3RDYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuVGVzdFJlcG9zaXRvcnk7CkBAIC0zNCw2ICszNiw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5U3RhdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU2V0czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLlJlc29sdmVNZXJnZXIuTWVyZ2VGYWlsdXJlUmVhc29uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CkBAIC0zMDYsNiArMzA5LDIwMCBAQCBwdWJsaWMgdm9pZCB0ZXN0Q29udGVudE1lcmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudE1lcmdlWHRoZWlycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYVxuM1xuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICIxXG5iXG4zXG4iKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJjL2MvYyIsICIxXG5jXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikKKwkJCQkJLmFkZEZpbGVwYXR0ZXJuKCJjL2MvYyIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCWNyZWF0ZUJyYW5jaChpbml0aWFsQ29tbWl0LCAicmVmcy9oZWFkcy9zaWRlIik7CisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9zaWRlIik7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmEoc2lkZSlcbjNcbjRcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiMVxuYihzaWRlKVxuM1xuNFxuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBzZWNvbmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2lkZSIpLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKCIxXG5iKHNpZGUpXG4zXG40XG4iLAorCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5iXG4zXG4iLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShtYWluKVxuM1xuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYy9jL2MiLCAiMVxuYyhtYWluKVxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYy9jL2MiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKKworCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKKwkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkKKwkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5LlRIRUlSUykKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5NRVJHRUQsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKworCQkJYXNzZXJ0RXF1YWxzKCIxXG5hKHNpZGUpXG4zXG40XG4iLAorCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYihzaWRlKVxuM1xuNFxuIiwKKwkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKSk7CisJCQlhc3NlcnRFcXVhbHMoIjFcbmMobWFpbilcbjNcbiIsCisJCQkJCXJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImMvYy9jIikpKTsKKworCQkJYXNzZXJ0TnVsbChyZXN1bHQuZ2V0Q29uZmxpY3RzKCkpOworCisJCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsIGRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvbnRlbnRNZXJnZVhvdXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICIxXG5hXG4zXG4iKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJiIiwgIjFcbmJcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImMvYy9jIiwgIjFcbmNcbjNcbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuYWRkRmlsZXBhdHRlcm4oImIiKQorCQkJCQkuYWRkRmlsZXBhdHRlcm4oImMvYy9jIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShzaWRlKVxuM1xuNFxuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICIxXG5iKHNpZGUpXG4zXG40XG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQlhc3NlcnRFcXVhbHMoIjFcbmIoc2lkZSlcbjNcbjRcbiIsCisJCQkJCXJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImIiKSkpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCQlhc3NlcnRFcXVhbHMoIjFcbmJcbjNcbiIsIHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImIiKSkpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICIxXG5hKG1haW4pXG4zXG4iKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJjL2MvYyIsICIxXG5jKG1haW4pXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJjL2MvYyIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5SRVNPTFZFKQorCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kuT1VSUykuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLk1FUkdFRCwgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQlhc3NlcnRFcXVhbHMoIjFcbmEobWFpbilcbjNcbjRcbiIsCisJCQkJCXJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSkpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5iKHNpZGUpXG4zXG40XG4iLAorCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYyhtYWluKVxuM1xuIiwKKwkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYy9jL2MiKSkpOworCisJCQlhc3NlcnROdWxsKHJlc3VsdC5nZXRDb25mbGljdHMoKSk7CisKKwkJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0QmluYXJ5Q29udGVudE1lcmdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiLmdpdGF0dHJpYnV0ZXMiLCAiYSBiaW5hcnkiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImluaXRpYWwiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCWNyZWF0ZUJyYW5jaChpbml0aWFsQ29tbWl0LCAicmVmcy9oZWFkcy9zaWRlIik7CisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9zaWRlIik7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgInNpZGUiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBzZWNvbmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2lkZSIpLmNhbGwoKTsKKworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIm1haW4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5SRVNPTFZFKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKworCQkJYXNzZXJ0RXF1YWxzKCJtYWluIiwgcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CisKKwkJCS8vIEhtbW0uLi4gdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgd2F5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggZmlsZXMKKwkJCS8vIGhhZCBhIGJpbmFyeSBjb25mbGljdCBmcm9tIGEgTWVyZ2VSZXN1bHQuLi4KKworCQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5NRVJHSU5HLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RCaW5hcnlDb250ZW50TWVyZ2VYdGhlaXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiLmdpdGF0dHJpYnV0ZXMiLCAiYSBiaW5hcnkiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImluaXRpYWwiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCWNyZWF0ZUJyYW5jaChpbml0aWFsQ29tbWl0LCAicmVmcy9oZWFkcy9zaWRlIik7CisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9zaWRlIik7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgInNpZGUiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBzZWNvbmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2lkZSIpLmNhbGwoKTsKKworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIm1haW4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5SRVNPTFZFKQorCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kuVEhFSVJTKQorCQkJCQkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLk1FUkdFRCwgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQlhc3NlcnRFcXVhbHMoInNpZGUiLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKKworCQkJYXNzZXJ0TnVsbChyZXN1bHQuZ2V0Q29uZmxpY3RzKCkpOworCQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RCaW5hcnlDb250ZW50TWVyZ2VYb3VycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImEgYmluYXJ5Iik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJpbml0aWFsIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi4iKS5jYWxsKCk7CisJCQlSZXZDb21taXQgaW5pdGlhbENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIikuY2FsbCgpOworCisJCQljcmVhdGVCcmFuY2goaW5pdGlhbENvbW1pdCwgInJlZnMvaGVhZHMvc2lkZSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJzaWRlIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNpZGUiKS5jYWxsKCk7CisKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJtYWluIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKKworCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKKwkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkKKwkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5Lk9VUlMpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5NRVJHRUQsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKworCQkJYXNzZXJ0RXF1YWxzKCJtYWluIiwgcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CisKKwkJCWFzc2VydE51bGwocmVzdWx0LmdldENvbmZsaWN0cygpKTsKKwkJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQl9CisJfQorCisJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKIAkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImEiKTsKQEAgLTc5MCwxNyArOTg3LDk2IEBAIHB1YmxpYyB2b2lkIHRlc3REZWxldGlvbk9uTWFzdGVyQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCS8vIGRlbGV0ZSBhIG9uIG1hc3RlciB0byBnZW5lcmF0ZSBjb25mbGljdAogCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CiAJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCB0aGlyZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQlmb3IgKENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneSA6IENvbnRlbnRNZXJnZVN0cmF0ZWd5CisJCQkJCS52YWx1ZXMoKSkgeworCQkJCS8vIG1lcmdlIHNpZGUgd2l0aCBtYXN0ZXIKKwkJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkKKwkJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpCisJCQkJCQkuY2FsbCgpOworCQkJCWFzc2VydEVxdWFscygibWVyZ2UgLVggIiArIGNvbnRlbnRTdHJhdGVneS5uYW1lKCksCisJCQkJCQlNZXJnZVN0YXR1cy5DT05GTElDVElORywgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQkJLy8gcmVzdWx0IHNob3VsZCBiZSAnYScgY29uZmxpY3Rpbmcgd2l0aCB3b3Jrc3BhY2UgY29udGVudCBmcm9tCisJCQkJLy8gc2lkZQorCQkJCWFzc2VydFRydWUoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKS5leGlzdHMoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwKKwkJCQkJCSIxXG5hKHNpZGUpXG4zXG4iLAorCQkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwgIjFcbmJcbjNcbiIsCisJCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKwkJCQlnaXQucmVzZXQoKS5zZXRNb2RlKFJlc2V0VHlwZS5IQVJEKS5zZXRSZWYodGhpcmRDb21taXQubmFtZSgpKQorCQkJCQkJLmNhbGwoKTsKKwkJCX0KKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0aW9uT25NYXN0ZXJUaGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmFcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiMVxuYlxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCS8vIGNyZWF0ZSBzaWRlIGJyYW5jaCBhbmQgbW9kaWZ5ICJhIgorCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmEoc2lkZSlcbjNcbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQkvLyBkZWxldGUgYSBvbiBtYXN0ZXIgdG8gZ2VuZXJhdGUgY29uZmxpY3QKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOworCQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CiAJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKIAogCQkJLy8gbWVyZ2Ugc2lkZSB3aXRoIG1hc3RlcgogCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKLQkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkuY2FsbCgpOwotCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlRIRUlSUykKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5NRVJHRUQsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKIAotCQkJLy8gcmVzdWx0IHNob3VsZCBiZSAnYScgY29uZmxpY3Rpbmcgd2l0aCB3b3Jrc3BhY2UgY29udGVudCBmcm9tIHNpZGUKKwkJCS8vIHJlc3VsdCBzaG91bGQgYmUgJ2EnCiAJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikuZXhpc3RzKCkpOwotCQkJYXNzZXJ0RXF1YWxzKCIxXG5hKHNpZGUpXG4zXG4iLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYShzaWRlKVxuM1xuIiwKKwkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CiAJCQlhc3NlcnRFcXVhbHMoIjFcbmJcbjNcbiIsIHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImIiKSkpOworCQkJYXNzZXJ0VHJ1ZShnaXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REZWxldGlvbk9uTWFzdGVyT3VycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYVxuM1xuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICIxXG5iXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJLy8gY3JlYXRlIHNpZGUgYnJhbmNoIGFuZCBtb2RpZnkgImEiCisJCQljcmVhdGVCcmFuY2goaW5pdGlhbENvbW1pdCwgInJlZnMvaGVhZHMvc2lkZSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShzaWRlKVxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNpZGUiKS5jYWxsKCk7CisKKwkJCS8vIGRlbGV0ZSBhIG9uIG1hc3RlciB0byBnZW5lcmF0ZSBjb25mbGljdAorCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQkvLyBtZXJnZSBzaWRlIHdpdGggbWFzdGVyCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5PVVJTKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuTUVSR0VELCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisKKwkJCWFzc2VydEZhbHNlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikuZXhpc3RzKCkpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5iXG4zXG4iLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKwkJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOwogCQl9CiAJfQogCkBAIC04MjIsMTkgKzEwOTgsOTkgQEAgcHVibGljIHZvaWQgdGVzdERlbGV0aW9uT25TaWRlQ29uZmxpY3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOwogCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShtYWluKVxuM1xuIik7CiAJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgdGhpcmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKKworCQkJZm9yIChDb250ZW50TWVyZ2VTdHJhdGVneSBjb250ZW50U3RyYXRlZ3kgOiBDb250ZW50TWVyZ2VTdHJhdGVneQorCQkJCQkudmFsdWVzKCkpIHsKKwkJCQkvLyBtZXJnZSBzaWRlIHdpdGggbWFzdGVyCisJCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKKwkJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlJFU09MVkUpCisJCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koY29udGVudFN0cmF0ZWd5KQorCQkJCQkJLmNhbGwoKTsKKwkJCQlhc3NlcnRFcXVhbHMoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKworCQkJCWFzc2VydFRydWUoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKS5leGlzdHMoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwKKwkJCQkJCSIxXG5hKG1haW4pXG4zXG4iLAorCQkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwgIjFcbmJcbjNcbiIsCisJCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKworCQkJCWFzc2VydE5vdE51bGwoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJcmVzdWx0LmdldENvbmZsaWN0cygpKTsKKwkJCQlhc3NlcnRFcXVhbHMoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLCAxLAorCQkJCQkJcmVzdWx0LmdldENvbmZsaWN0cygpLnNpemUoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwgMywKKwkJCQkJCXJlc3VsdC5nZXRDb25mbGljdHMoKS5nZXQoImEiKVswXS5sZW5ndGgpOworCQkJCWdpdC5yZXNldCgpLnNldE1vZGUoUmVzZXRUeXBlLkhBUkQpLnNldFJlZih0aGlyZENvbW1pdC5uYW1lKCkpCisJCQkJCQkuY2FsbCgpOworCQkJfQorCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRpb25PblNpZGVUaGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmFcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiMVxuYlxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCS8vIGNyZWF0ZSBzaWRlIGJyYW5jaCBhbmQgZGVsZXRlICJhIgorCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWdpdC5ybSgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQkvLyB1cGRhdGUgYSBvbiBtYXN0ZXIgdG8gZ2VuZXJhdGUgY29uZmxpY3QKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShtYWluKVxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CiAJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKIAogCQkJLy8gbWVyZ2Ugc2lkZSB3aXRoIG1hc3RlcgogCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKLQkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkuY2FsbCgpOwotCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlRIRUlSUykuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLk1FUkdFRCwgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQlhc3NlcnRGYWxzZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLmV4aXN0cygpKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYlxuM1xuIiwgcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKSk7CisJCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0aW9uT25TaWRlT3VycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYVxuM1xuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICIxXG5iXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJLy8gY3JlYXRlIHNpZGUgYnJhbmNoIGFuZCBkZWxldGUgImEiCisJCQljcmVhdGVCcmFuY2goaW5pdGlhbENvbW1pdCwgInJlZnMvaGVhZHMvc2lkZSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOworCQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNpZGUiKS5jYWxsKCk7CisKKwkJCS8vIHVwZGF0ZSBhIG9uIG1hc3RlciB0byBnZW5lcmF0ZSBjb25mbGljdAorCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICIxXG5hKG1haW4pXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQkvLyBtZXJnZSBzaWRlIHdpdGggbWFzdGVyCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5PVVJTKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuTUVSR0VELCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CiAKIAkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKS5leGlzdHMoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIjFcbmEobWFpbilcbjNcbiIsIHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSkpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5hKG1haW4pXG4zXG4iLAorCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKIAkJCWFzc2VydEVxdWFscygiMVxuYlxuM1xuIiwgcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKSk7Ci0KLQkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0Q29uZmxpY3RzKCkuc2l6ZSgpKTsKLQkJCWFzc2VydEVxdWFscygzLCByZXN1bHQuZ2V0Q29uZmxpY3RzKCkuZ2V0KCJhIilbMF0ubGVuZ3RoKTsKKwkJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFRlc3QuamF2YQppbmRleCBlNGFmNDRlLi45YWY3N2FhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRUZXN0LmphdmEKQEAgLTM0LDYgKzM0LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnlTdGF0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5TdG9yZWRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5Db250ZW50TWVyZ2VTdHJhdGVneTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2U29ydDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKQEAgLTE1NCw2ICsxNTYsNzUgQEAgcHVibGljIHZvaWQgdGVzdFB1bGxDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24gewogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1bGxDb25mbGljdFRoZWlycygpIHRocm93cyBFeGNlcHRpb24geworCQlQdWxsUmVzdWx0IHJlcyA9IHRhcmdldC5wdWxsKCkuY2FsbCgpOworCQkvLyBub3RoaW5nIHRvIHVwZGF0ZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGRpZmZlcmVudCBkYXRhIHlldAorCQlhc3NlcnRUcnVlKHJlcy5nZXRGZXRjaFJlc3VsdCgpLmdldFRyYWNraW5nUmVmVXBkYXRlcygpLmlzRW1wdHkoKSk7CisJCWFzc2VydFRydWUocmVzLmdldE1lcmdlUmVzdWx0KCkuZ2V0TWVyZ2VTdGF0dXMoKQorCQkJCS5lcXVhbHMoTWVyZ2VTdGF0dXMuQUxSRUFEWV9VUF9UT19EQVRFKSk7CisKKwkJYXNzZXJ0RmlsZUNvbnRlbnRzRXF1YWwodGFyZ2V0RmlsZSwgIkhlbGxvIHdvcmxkIik7CisKKwkJLy8gY2hhbmdlIHRoZSBzb3VyY2UgZmlsZQorCQl3cml0ZVRvRmlsZShzb3VyY2VGaWxlLCAiU291cmNlIGNoYW5nZSIpOworCQlzb3VyY2UuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIlNvbWVGaWxlLnR4dCIpLmNhbGwoKTsKKwkJc291cmNlLmNvbW1pdCgpLnNldE1lc3NhZ2UoIlNvdXJjZSBjaGFuZ2UgaW4gcmVtb3RlIikuY2FsbCgpOworCisJCS8vIGNoYW5nZSB0aGUgdGFyZ2V0IGZpbGUKKwkJd3JpdGVUb0ZpbGUodGFyZ2V0RmlsZSwgIlRhcmdldCBjaGFuZ2UiKTsKKwkJdGFyZ2V0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJTb21lRmlsZS50eHQiKS5jYWxsKCk7CisJCXRhcmdldC5jb21taXQoKS5zZXRNZXNzYWdlKCJUYXJnZXQgY2hhbmdlIGluIGxvY2FsIikuY2FsbCgpOworCisJCXJlcyA9IHRhcmdldC5wdWxsKCkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5USEVJUlMpLmNhbGwoKTsKKworCQlhc3NlcnRUcnVlKHJlcy5pc1N1Y2Nlc3NmdWwoKSk7CisJCWFzc2VydEZpbGVDb250ZW50c0VxdWFsKHRhcmdldEZpbGUsICJTb3VyY2UgY2hhbmdlIik7CisJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwKKwkJCQl0YXJnZXQuZ2V0UmVwb3NpdG9yeSgpLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKKwkJYXNzZXJ0VHJ1ZSh0YXJnZXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVsbENvbmZsaWN0WHRoZWlycygpIHRocm93cyBFeGNlcHRpb24geworCQlQdWxsUmVzdWx0IHJlcyA9IHRhcmdldC5wdWxsKCkuY2FsbCgpOworCQkvLyBub3RoaW5nIHRvIHVwZGF0ZSBzaW5jZSB3ZSBkb24ndCBoYXZlIGRpZmZlcmVudCBkYXRhIHlldAorCQlhc3NlcnRUcnVlKHJlcy5nZXRGZXRjaFJlc3VsdCgpLmdldFRyYWNraW5nUmVmVXBkYXRlcygpLmlzRW1wdHkoKSk7CisJCWFzc2VydFRydWUocmVzLmdldE1lcmdlUmVzdWx0KCkuZ2V0TWVyZ2VTdGF0dXMoKQorCQkJCS5lcXVhbHMoTWVyZ2VTdGF0dXMuQUxSRUFEWV9VUF9UT19EQVRFKSk7CisKKwkJYXNzZXJ0RmlsZUNvbnRlbnRzRXF1YWwodGFyZ2V0RmlsZSwgIkhlbGxvIHdvcmxkIik7CisKKwkJLy8gY2hhbmdlIHRoZSBzb3VyY2UgZmlsZQorCQl3cml0ZVRvRmlsZShzb3VyY2VGaWxlLCAiYVxuSGVsbG9cbmJcbiIpOworCQlzb3VyY2UuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIlNvbWVGaWxlLnR4dCIpLmNhbGwoKTsKKwkJc291cmNlLmNvbW1pdCgpLnNldE1lc3NhZ2UoIk11bHRpLWxpbmUgY2hhbmdlIGluIHJlbW90ZSIpLmNhbGwoKTsKKworCQkvLyBQdWxsIGFnYWluCisJCXJlcyA9IHRhcmdldC5wdWxsKCkuY2FsbCgpOworCQlhc3NlcnRUcnVlKHJlcy5pc1N1Y2Nlc3NmdWwoKSk7CisJCWFzc2VydEZpbGVDb250ZW50c0VxdWFsKHRhcmdldEZpbGUsICJhXG5IZWxsb1xuYlxuIik7CisKKwkJLy8gY2hhbmdlIHRoZSBzb3VyY2UgZmlsZQorCQl3cml0ZVRvRmlsZShzb3VyY2VGaWxlLCAiYVxuU291cmNlIGNoYW5nZVxuYlxuIik7CisJCXNvdXJjZS5hZGQoKS5hZGRGaWxlcGF0dGVybigiU29tZUZpbGUudHh0IikuY2FsbCgpOworCQlzb3VyY2UuY29tbWl0KCkuc2V0TWVzc2FnZSgiU291cmNlIGNoYW5nZSBpbiByZW1vdGUiKS5jYWxsKCk7CisKKwkJLy8gY2hhbmdlIHRoZSB0YXJnZXQgZmlsZQorCQl3cml0ZVRvRmlsZSh0YXJnZXRGaWxlLCAiYVxuVGFyZ2V0IGNoYW5nZVxuYlxuY1xuIik7CisJCXRhcmdldC5hZGQoKS5hZGRGaWxlcGF0dGVybigiU29tZUZpbGUudHh0IikuY2FsbCgpOworCQl0YXJnZXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiVGFyZ2V0IGNoYW5nZSBpbiBsb2NhbCIpLmNhbGwoKTsKKworCQlyZXMgPSB0YXJnZXQucHVsbCgpLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5LlRIRUlSUykKKwkJCQkuY2FsbCgpOworCisJCWFzc2VydFRydWUocmVzLmlzU3VjY2Vzc2Z1bCgpKTsKKwkJYXNzZXJ0RmlsZUNvbnRlbnRzRXF1YWwodGFyZ2V0RmlsZSwgImFcblNvdXJjZSBjaGFuZ2VcbmJcbmNcbiIpOworCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsCisJCQkJdGFyZ2V0LmdldFJlcG9zaXRvcnkoKS5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCWFzc2VydFRydWUodGFyZ2V0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFB1bGxXaXRoVW50cmFja2VkU3Rhc2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJdGFyZ2V0LnB1bGwoKS5jYWxsKCk7CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZFRlc3QuamF2YQppbmRleCA1N2M4OTkxLi5jZmE4NDg2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kVGVzdC5qYXZhCkBAIC0yNTMsNyArMjUzLDcgQEAgcHVibGljIHZvaWQgdGVzdFJldmVydENvbmZsaWN0UmVzb2x1dGlvbigpIHRocm93cyBFeGNlcHRpb24gewogCX0KIAogCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdFJldmVydGtDb25mbGljdFJlc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJcHVibGljIHZvaWQgdGVzdFJldmVydENvbmZsaWN0UmVzZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKIAkJCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZVJldmVydChnaXQpOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQXBwbHlDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaEFwcGx5Q29tbWFuZFRlc3QuamF2YQppbmRleCBmMTA5Y2JmLi40OWIzMWIxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQXBwbHlDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3Rhc2hBcHBseUNvbW1hbmRUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCBHaXRIdWIgSW5jLiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMjEgR2l0SHViIEluYy4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjgsNiArMjgsOCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuUmVwb3NpdG9yeVRlc3RDYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5Db250ZW50TWVyZ2VTdHJhdGVneTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKQEAgLTQyNyw2ICs0MjksMTM1IEBAIHB1YmxpYyB2b2lkIHN0YXNoZWRDb250ZW50TWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAl9CiAKIAlAVGVzdAorCXB1YmxpYyB2b2lkIHN0YXNoZWRDb250ZW50TWVyZ2VYdGhlaXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5tb3JlIGNvbnRlbnRcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibW9yZSBjb250ZW50IikuY2FsbCgpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5oZWFkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKFBBVEgpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImV2ZW4gY29udGVudCIpLmNhbGwoKTsKKworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxuc3Rhc2hlZCBjaGFuZ2Vcbm1vcmUgY29udGVudFxuIik7CisKKwkJUmV2Q29tbWl0IHN0YXNoZWQgPSBnaXQuc3Rhc2hDcmVhdGUoKS5jYWxsKCk7CisJCWFzc2VydE5vdE51bGwoc3Rhc2hlZCk7CisJCWFzc2VydEVxdWFscygiY29udGVudFxuaGVhZCBjaGFuZ2Vcbm1vcmUgY29udGVudFxuIiwKKwkJCQlyZWFkKGNvbW1pdHRlZEZpbGUpKTsKKwkJYXNzZXJ0VHJ1ZShnaXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5tb3JlIGNvbnRlbnRcbmNvbW1pdHRlZCBjaGFuZ2VcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0dGVkIGNoYW5nZSIpLmNhbGwoKTsKKwkJcmVjb3JkZXIuYXNzZXJ0Tm9FdmVudCgpOworCisJCWdpdC5zdGFzaEFwcGx5KCkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kuVEhFSVJTKQorCQkJCS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCQlTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1c0NvbW1hbmQoZGIpLmNhbGwoKTsKKwkJYXNzZXJ0RXF1YWxzKCdbJyArIFBBVEggKyAnXScsIHN0YXR1cy5nZXRNb2RpZmllZCgpLnRvU3RyaW5nKCkpOworCQlhc3NlcnRFcXVhbHMoCisJCQkJImNvbnRlbnRcbnN0YXNoZWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbmNvbW1pdHRlZCBjaGFuZ2VcbiIsCisJCQkJcmVhZChQQVRIKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBzdGFzaGVkQ29udGVudE1lcmdlWG91cnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbm1vcmUgY29udGVudFxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtb3JlIGNvbnRlbnQiKS5jYWxsKCk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbmhlYWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZXZlbiBjb250ZW50IikuY2FsbCgpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5zdGFzaGVkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iKTsKKworCQlSZXZDb21taXQgc3Rhc2hlZCA9IGdpdC5zdGFzaENyZWF0ZSgpLmNhbGwoKTsKKwkJYXNzZXJ0Tm90TnVsbChzdGFzaGVkKTsKKwkJYXNzZXJ0RXF1YWxzKCJjb250ZW50XG5oZWFkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iLAorCQkJCXJlYWQoY29tbWl0dGVkRmlsZSkpOworCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJcmVjb3JkZXIuYXNzZXJ0RXZlbnQobmV3IFN0cmluZ1tdIHsgUEFUSCB9LCBDaGFuZ2VSZWNvcmRlci5FTVBUWSk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwKKwkJCQkiY29udGVudFxubmV3IGhlYWRcbm1vcmUgY29udGVudFxuY29tbWl0dGVkIGNoYW5nZVxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXR0ZWQgY2hhbmdlIikuY2FsbCgpOworCQlyZWNvcmRlci5hc3NlcnROb0V2ZW50KCk7CisKKwkJZ2l0LnN0YXNoQXBwbHkoKS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneS5PVVJTKQorCQkJCS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJYXNzZXJ0RXF1YWxzKCJjb250ZW50XG5uZXcgaGVhZFxubW9yZSBjb250ZW50XG5jb21taXR0ZWQgY2hhbmdlXG4iLAorCQkJCXJlYWQoUEFUSCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgc3Rhc2hlZENvbnRlbnRNZXJnZVRoZWlycygpIHRocm93cyBFeGNlcHRpb24geworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxubW9yZSBjb250ZW50XG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKFBBVEgpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIm1vcmUgY29udGVudCIpLmNhbGwoKTsKKworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxuaGVhZCBjaGFuZ2Vcbm1vcmUgY29udGVudFxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJldmVuIGNvbnRlbnQiKS5jYWxsKCk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbnN0YXNoZWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIpOworCisJCVJldkNvbW1pdCBzdGFzaGVkID0gZ2l0LnN0YXNoQ3JlYXRlKCkuY2FsbCgpOworCQlhc3NlcnROb3ROdWxsKHN0YXNoZWQpOworCQlhc3NlcnRFcXVhbHMoImNvbnRlbnRcbmhlYWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIsCisJCQkJcmVhZChjb21taXR0ZWRGaWxlKSk7CisJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCQlyZWNvcmRlci5hc3NlcnRFdmVudChuZXcgU3RyaW5nW10geyBQQVRIIH0sIENoYW5nZVJlY29yZGVyLkVNUFRZKTsKKworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxubW9yZSBjb250ZW50XG5jb21taXR0ZWQgY2hhbmdlXG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKFBBVEgpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdHRlZCBjaGFuZ2UiKS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydE5vRXZlbnQoKTsKKworCQlnaXQuc3Rhc2hBcHBseSgpLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuVEhFSVJTKS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCQlTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1c0NvbW1hbmQoZGIpLmNhbGwoKTsKKwkJYXNzZXJ0RXF1YWxzKCdbJyArIFBBVEggKyAnXScsIHN0YXR1cy5nZXRNb2RpZmllZCgpLnRvU3RyaW5nKCkpOworCQlhc3NlcnRFcXVhbHMoImNvbnRlbnRcbnN0YXNoZWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIsIHJlYWQoUEFUSCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgc3Rhc2hlZENvbnRlbnRNZXJnZU91cnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbm1vcmUgY29udGVudFxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtb3JlIGNvbnRlbnQiKS5jYWxsKCk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbmhlYWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZXZlbiBjb250ZW50IikuY2FsbCgpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5zdGFzaGVkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iKTsKKworCQlSZXZDb21taXQgc3Rhc2hlZCA9IGdpdC5zdGFzaENyZWF0ZSgpLmNhbGwoKTsKKwkJYXNzZXJ0Tm90TnVsbChzdGFzaGVkKTsKKwkJYXNzZXJ0RXF1YWxzKCJjb250ZW50XG5oZWFkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iLAorCQkJCXJlYWQoY29tbWl0dGVkRmlsZSkpOworCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJcmVjb3JkZXIuYXNzZXJ0RXZlbnQobmV3IFN0cmluZ1tdIHsgUEFUSCB9LCBDaGFuZ2VSZWNvcmRlci5FTVBUWSk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbm1vcmUgY29udGVudFxuY29tbWl0dGVkIGNoYW5nZVxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXR0ZWQgY2hhbmdlIikuY2FsbCgpOworCQlyZWNvcmRlci5hc3NlcnROb0V2ZW50KCk7CisKKwkJLy8gRG9lc24ndCBtYWtlIGFueSBzZW5zZS4uLiBzaG91bGQgYmUgYSBuby1vcAorCQlnaXQuc3Rhc2hBcHBseSgpLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuT1VSUykuY2FsbCgpOworCQlyZWNvcmRlci5hc3NlcnROb0V2ZW50KCk7CisJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCQlhc3NlcnRFcXVhbHMoImNvbnRlbnRcbm1vcmUgY29udGVudFxuY29tbWl0dGVkIGNoYW5nZVxuIiwgcmVhZChQQVRIKSk7CisJfQorCisJQFRlc3QKIAlwdWJsaWMgdm9pZCBzdGFzaGVkQXBwbHlPbk90aGVyQnJhbmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5tb3JlIGNvbnRlbnRcbiIpOwogCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmVuYW1lRGV0ZWN0b3JUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SZW5hbWVEZXRlY3RvclRlc3QuamF2YQppbmRleCA2MjAzZmVkLi41ZWRiNjBjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SZW5hbWVEZXRlY3RvclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SZW5hbWVEZXRlY3RvclRlc3QuamF2YQpAQCAtNTQzLDYgKzU0Myw5NCBAQCBwdWJsaWMgdm9pZCB0ZXN0QnJlYWtNb2RpZnlfUmVqb2luSWZVbnBhaXJlZCgpIHRocm93cyBFeGNlcHRpb24gewogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4YWN0UmVuYW1lX0xhcmdlRmlsZSgpIHRocm93cyBFeGNlcHRpb24geworCQlPYmplY3RJZCBhSWQgPSBibG9iKCJibGFoXG5ibGFoXG5mb28iKTsgLy8gc2l6ZSA9IDE0CisKKwkJRGlmZkVudHJ5IGEgPSBEaWZmRW50cnkuYWRkKFBBVEhfQSwgYUlkKTsKKwkJRGlmZkVudHJ5IGIgPSBEaWZmRW50cnkuZGVsZXRlKFBBVEhfUSwgYUlkKTsKKworCQlyZC5hZGQoYSk7CisJCXJkLmFkZChiKTsKKworCQkvLyBFeGFjdCByZW5hbWVzIGFyZSBpZGVudGlmaWVkIGZvciBsYXJnZSBmaWxlcworCQlyZC5zZXRCaWdGaWxlVGhyZXNob2xkKDEwKTsKKwkJTGlzdDxEaWZmRW50cnk+IGVudHJpZXMgPSByZC5jb21wdXRlKCk7CisJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7CisJCWFzc2VydFJlbmFtZShiLCBhLCAxMDAsIGVudHJpZXMuZ2V0KDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJbmV4YWN0UmVuYW1lX0xhcmdlRmlsZSgpIHRocm93cyBFeGNlcHRpb24geworCQlPYmplY3RJZCBhSWQgPSBibG9iKCJibGFoXG5ibGFoXG5mb28iKTsgLy8gc2l6ZSA9IDE0CisJCU9iamVjdElkIGJJZCA9IGJsb2IoImJsYVxuYmxhaFxuZm9vIik7IC8vIHNpemUgPSAxMworCisJCURpZmZFbnRyeSBhID0gRGlmZkVudHJ5LmFkZChQQVRIX0EsIGFJZCk7CisJCURpZmZFbnRyeSBiID0gRGlmZkVudHJ5LmRlbGV0ZShQQVRIX1EsIGJJZCk7CisKKwkJcmQuYWRkKGEpOworCQlyZC5hZGQoYik7CisKKwkJcmQuc2V0QmlnRmlsZVRocmVzaG9sZCgxMCk7CisKKwkJLy8gSW5leGFjdCByZW5hbWVzIGFyZSBub3QgZGV0ZWN0ZWQgZm9yIGxhcmdlIGZpbGVzCisJCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gcmQuY29tcHV0ZSgpOworCQlhc3NlcnRFcXVhbHMoMiwgZW50cmllcy5zaXplKCkpOworCQlhc3NlcnRBZGQoUEFUSF9BLCBhSWQsIEZpbGVNb2RlLlJFR1VMQVJfRklMRSwgZW50cmllcy5nZXQoMCkpOworCQlhc3NlcnREZWxldGUoUEFUSF9RLCBiSWQsIEZpbGVNb2RlLlJFR1VMQVJfRklMRSwgZW50cmllcy5nZXQoMSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4YWN0UmVuYW1lRm9yQmluYXJ5RmlsZV9pc0lkZW50aWZpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJT2JqZWN0SWQgYUlkID0gYmxvYigiYVxuYlxuY1xuXDBcMFwwXDBkXG4iKTsKKworCQlEaWZmRW50cnkgYSA9IERpZmZFbnRyeS5hZGQoUEFUSF9BLCBhSWQpOworCQlEaWZmRW50cnkgYiA9IERpZmZFbnRyeS5kZWxldGUoUEFUSF9RLCBhSWQpOworCisJCXJkLmFkZChhKTsKKwkJcmQuYWRkKGIpOworCisJCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gcmQuY29tcHV0ZSgpOworCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOworCQlhc3NlcnRSZW5hbWUoYiwgYSwgMTAwLCBlbnRyaWVzLmdldCgwKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW5leGFjdFJlbmFtZUZvckJpbmFyeUZpbGVfaWRlbnRpZmllZEJ5RGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworCQlPYmplY3RJZCBhSWQgPSBibG9iKCJhXG5iXG5jXG5cMFwwXDBcMGRcbiIpOworCQlPYmplY3RJZCBiSWQgPSBibG9iKCJhXG5iXG5jXG5cMFwwXDBkXG4iKTsKKworCQlEaWZmRW50cnkgYSA9IERpZmZFbnRyeS5hZGQoUEFUSF9BLCBhSWQpOworCQlEaWZmRW50cnkgYiA9IERpZmZFbnRyeS5kZWxldGUoUEFUSF9RLCBiSWQpOworCisJCXJkLmFkZChhKTsKKwkJcmQuYWRkKGIpOworCQlyZC5zZXRSZW5hbWVTY29yZSg0MCk7CisKKwkJTGlzdDxEaWZmRW50cnk+IGVudHJpZXMgPSByZC5jb21wdXRlKCk7CisJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7CisJCWFzc2VydFJlbmFtZShiLCBhLCA1MCwgZW50cmllcy5nZXQoMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEluZXhhY3RSZW5hbWVGb3JCaW5hcnlGaWxlX25vdElkZW50aWZpZWRJZlNraXBQYXJhbWV0ZXJTZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJT2JqZWN0SWQgYUlkID0gYmxvYigiYVxuYlxuY1xuXDBcMFwwXDBkXG4iKTsKKwkJT2JqZWN0SWQgYklkID0gYmxvYigiYVxuYlxuY1xuXDBcMFwwZFxuIik7CisKKwkJRGlmZkVudHJ5IGEgPSBEaWZmRW50cnkuYWRkKFBBVEhfQSwgYUlkKTsKKwkJRGlmZkVudHJ5IGIgPSBEaWZmRW50cnkuZGVsZXRlKFBBVEhfUSwgYklkKTsKKworCQlyZC5hZGQoYSk7CisJCXJkLmFkZChiKTsKKwkJcmQuc2V0UmVuYW1lU2NvcmUoNDApOworCQlyZC5zZXRTa2lwQ29udGVudFJlbmFtZXNGb3JCaW5hcnlGaWxlcyh0cnVlKTsKKworCQlMaXN0PERpZmZFbnRyeT4gZW50cmllcyA9IHJkLmNvbXB1dGUoKTsKKwkJYXNzZXJ0RXF1YWxzKDIsIGVudHJpZXMuc2l6ZSgpKTsKKwkJYXNzZXJ0QWRkKFBBVEhfQSwgYUlkLCBGaWxlTW9kZS5SRUdVTEFSX0ZJTEUsIGVudHJpZXMuZ2V0KDApKTsKKwkJYXNzZXJ0RGVsZXRlKFBBVEhfUSwgYklkLCBGaWxlTW9kZS5SRUdVTEFSX0ZJTEUsIGVudHJpZXMuZ2V0KDEpKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RTZXRSZW5hbWVTY29yZV9JbGxlZ2FsQXJncygpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgewogCQkJcmQuc2V0UmVuYW1lU2NvcmUoLTEpOwpAQCAtNjM0LDQgKzcyMiwxNSBAQCBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEFkZChTdHJpbmcgbmV3TmFtZSwgT2JqZWN0SWQgbmV3SWQsCiAJCWFzc2VydEVxdWFscyhBYmJyZXZpYXRlZE9iamVjdElkLmZyb21PYmplY3RJZChuZXdJZCksIGFkZC5uZXdJZCk7CiAJCWFzc2VydEVxdWFscyhuZXdNb2RlLCBhZGQubmV3TW9kZSk7CiAJfQorCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnREZWxldGUoU3RyaW5nIG9sZE5hbWUsIE9iamVjdElkIG9sZElkLAorCQkJRmlsZU1vZGUgb2xkTW9kZSwgRGlmZkVudHJ5IGRlbGV0ZSkgeworCQlhc3NlcnRFcXVhbHMoRGlmZkVudHJ5LkRFVl9OVUxMLCBkZWxldGUubmV3UGF0aCk7CisJCWFzc2VydEVxdWFscyhEaWZmRW50cnkuQV9aRVJPLCBkZWxldGUubmV3SWQpOworCQlhc3NlcnRFcXVhbHMoRmlsZU1vZGUuTUlTU0lORywgZGVsZXRlLm5ld01vZGUpOworCQlhc3NlcnRFcXVhbHMoQ2hhbmdlVHlwZS5ERUxFVEUsIGRlbGV0ZS5jaGFuZ2VUeXBlKTsKKwkJYXNzZXJ0RXF1YWxzKG9sZE5hbWUsIGRlbGV0ZS5vbGRQYXRoKTsKKwkJYXNzZXJ0RXF1YWxzKEFiYnJldmlhdGVkT2JqZWN0SWQuZnJvbU9iamVjdElkKG9sZElkKSwgZGVsZXRlLm9sZElkKTsKKwkJYXNzZXJ0RXF1YWxzKG9sZE1vZGUsIGRlbGV0ZS5vbGRNb2RlKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kVGVzdC5qYXZhCmluZGV4IGFlNGRiMGIuLjUwOWFkYzIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kVGVzdC5qYXZhCkBAIC00Niw2ICs0Niw4IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGUuRmlsZUJhc2VkQ29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGs7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5JTzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuUmF3UGFyc2VVdGlsczsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAogcHVibGljIGNsYXNzIFJlcG9Db21tYW5kVGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CkBAIC03NDksMTAgKzc1MSw1NiBAQCBwdWJsaWMgdm9pZCB0ZXN0UmV2aXNpb25CYXJlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQlTdHJpbmcgZ2l0bGluayA9IGxvY2FsRGIucmVzb2x2ZShDb25zdGFudHMuSEVBRCArICI6Zm9vIikubmFtZSgpOwogCQkJYXNzZXJ0RXF1YWxzKCJUaGUgZ2l0bGluayBpcyBzYW1lIGFzIHJlbW90ZSBoZWFkIiwKIAkJCQkJb2xkQ29tbWl0SWQubmFtZSgpLCBnaXRsaW5rKTsKKworCQkJRmlsZSBkb3Rtb2R1bGVzID0gbmV3IEZpbGUobG9jYWxEYi5nZXRXb3JrVHJlZSgpLAorCQkJCQlDb25zdGFudHMuRE9UX0dJVF9NT0RVTEVTKTsKKwkJCWFzc2VydFRydWUoZG90bW9kdWxlcy5leGlzdHMoKSk7CisJCQkvLyBUaGUgLmdpdG1vZHVsZXMgZmlsZSBzaG91bGQgaGF2ZSAiYnJhbmNoIiBsaW5lcworCQkJU3RyaW5nIGdpdE1vZHVsZXNDb250ZW50cyA9IFJhd1BhcnNlVXRpbHMKKwkJCQkJLmRlY29kZShJTy5yZWFkRnVsbHkoZG90bW9kdWxlcykpOworCQkJYXNzZXJ0VHJ1ZShnaXRNb2R1bGVzQ29udGVudHMuY29udGFpbnMoImJyYW5jaCA9IGJyYW5jaCIpKTsKIAkJfQogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJldmlzaW9uQmFyZV9pZ25vcmVUYWdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJlcG9zaXRvcnkgcmVtb3RlRGIgPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpOworCQlSZXBvc2l0b3J5IHRlbXBEYiA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CisKKwkJU3RyaW5nQnVpbGRlciB4bWxDb250ZW50ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJeG1sQ29udGVudC5hcHBlbmQoIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuIikKKwkJCQkuYXBwZW5kKCI8bWFuaWZlc3Q+IikKKwkJCQkuYXBwZW5kKCI8cmVtb3RlIG5hbWU9XCJyZW1vdGUxXCIgZmV0Y2g9XCIuXCIgLz4iKQorCQkJCS5hcHBlbmQoIjxkZWZhdWx0IHJldmlzaW9uPVwiIikuYXBwZW5kKCJyZWZzL3RhZ3MvIiArIFRBRykKKwkJCQkuYXBwZW5kKCJcIiByZW1vdGU9XCJyZW1vdGUxXCIgLz4iKQorCQkJCS5hcHBlbmQoIjxwcm9qZWN0IHBhdGg9XCJmb29cIiBuYW1lPVwiIikKKwkJCQkuYXBwZW5kKGRlZmF1bHRVcmkpCisJCQkJLmFwcGVuZCgiXCIgLz4iKS5hcHBlbmQoIjwvbWFuaWZlc3Q+Iik7CisJCUpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZSh0ZW1wRGIsICJtYW5pZmVzdC54bWwiLAorCQkJCXhtbENvbnRlbnQudG9TdHJpbmcoKSk7CisJCVJlcG9Db21tYW5kIGNvbW1hbmQgPSBuZXcgUmVwb0NvbW1hbmQocmVtb3RlRGIpOworCQljb21tYW5kLnNldFBhdGgoCisJCQkJdGVtcERiLmdldFdvcmtUcmVlKCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyAiL21hbmlmZXN0LnhtbCIpCisJCQkJLnNldFVSSShyb290VXJpKS5jYWxsKCk7CisJCS8vIENsb25lIGl0CisJCUZpbGUgZGlyZWN0b3J5ID0gY3JlYXRlVGVtcERpcmVjdG9yeSgidGVzdFJlcGxhY2VNYW5pZmVzdEJhcmUiKTsKKwkJRmlsZSBkb3Rtb2R1bGVzOworCQl0cnkgKFJlcG9zaXRvcnkgbG9jYWxEYiA9IEdpdC5jbG9uZVJlcG9zaXRvcnkoKS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KQorCQkJCS5zZXRVUkkocmVtb3RlRGIuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1N0cmluZygpKS5jYWxsKCkKKwkJCQkuZ2V0UmVwb3NpdG9yeSgpKSB7CisJCQlkb3Rtb2R1bGVzID0gbmV3IEZpbGUobG9jYWxEYi5nZXRXb3JrVHJlZSgpLAorCQkJCQlDb25zdGFudHMuRE9UX0dJVF9NT0RVTEVTKTsKKwkJCWFzc2VydFRydWUoZG90bW9kdWxlcy5leGlzdHMoKSk7CisJCX0KKworCQkvLyBUaGUgLmdpdG1vZHVsZXMgZmlsZSBzaG91bGQgbm90IGhhdmUgImJyYW5jaCIgbGluZXMKKwkJU3RyaW5nIGdpdE1vZHVsZXNDb250ZW50cyA9IFJhd1BhcnNlVXRpbHMKKwkJCQkuZGVjb2RlKElPLnJlYWRGdWxseShkb3Rtb2R1bGVzKSk7CisJCWFzc2VydEZhbHNlKGdpdE1vZHVsZXNDb250ZW50cy5jb250YWlucygiYnJhbmNoIikpOworCQlhc3NlcnRUcnVlKGdpdE1vZHVsZXNDb250ZW50cy5jb250YWlucygicmVmID0gcmVmcy90YWdzLyIgKyBUQUcpKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RDb3B5RmlsZUJhcmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmVwb3NpdG9yeSByZW1vdGVEYiA9IGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCk7CiAJCVJlcG9zaXRvcnkgdGVtcERiID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VyVGVzdC5qYXZhCmluZGV4IGVlY2YyNWIuLjZjYmI0YTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlclRlc3QuamF2YQpAQCAtMTY0OCw2ICsxNjQ4LDgyIEBAIHB1YmxpYyB2b2lkIGNoZWNrRmlsZURpck1lcmdlQ29uZmxpY3RJblZpcnR1YWxBbmNlc3Rvcl9Db25mbGljdEluQ2hpbGRyZW5fRGlyRmlsCiAJCQkJaW5kZXhTdGF0ZShDT05URU5UKSk7CiAJfQogCisJLyoqCisJICogTWVyZ2luZyB0d28gY29tbWl0cyB3aGVuIGZpbGVzIGhhdmUgZXF1YWwgY29udGVudCwgYnV0IGNvbmZsaWN0aW5nIGZpbGUgbW9kZQorCSAqIGluIHRoZSB2aXJ0dWFsIGFuY2VzdG9yLgorCSAqCisJICogPHA+CisJICogVGhpcyB0ZXN0IGhhcyB0aGUgc2FtZSBzZXQgdXAgYXMKKwkgKiB7QGNvZGUgY2hlY2tGaWxlRGlyTWVyZ2VDb25mbGljdEluVmlydHVhbEFuY2VzdG9yX05vQ29uZmxpY3RJbkNoaWxkcmVufSwgb25seQorCSAqIHdpdGggdGhlIG1vZGUgY29uZmxpY3QgaW4gQTEgYW5kIEEyLgorCSAqLworCUBUaGVvcnkKKwlwdWJsaWMgdm9pZCBjaGVja01vZGVNZXJnZUNvbmZsaWN0SW5WaXJ0dWFsQW5jZXN0b3IoTWVyZ2VTdHJhdGVneSBzdHJhdGVneSkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWlmICghc3RyYXRlZ3kuZXF1YWxzKE1lcmdlU3RyYXRlZ3kuUkVDVVJTSVZFKSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJR2l0IGdpdCA9IEdpdC53cmFwKGRiKTsKKworCQkvLyBtYXN0ZXIKKwkJd3JpdGVUcmFzaEZpbGUoImMiLCAiaW5pdGlhbCBmaWxlIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYyIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IGNvbW1pdEkgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiSW5pdGlhbCBjb21taXQiKS5jYWxsKCk7CisKKwkJRmlsZSBhID0gd3JpdGVUcmFzaEZpbGUoImEiLCAiY29udGVudCBpbiBBbmNlc3RvciIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCVJldkNvbW1pdCBjb21taXRBMSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJBbmNlc3RvciAxIikuY2FsbCgpOworCisJCWEgPSB3cml0ZVRyYXNoRmlsZSgiYSIsICJjb250ZW50IGluIENoaWxkIDEgKGNvbW1pdGVkIG9uIG1hc3RlcikiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkvLyBjb21taXQgQzFNCisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJDaGlsZCAxIG9uIG1hc3RlciIpLmNhbGwoKTsKKworCQlnaXQuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0U3RhcnRQb2ludChjb21taXRJKS5zZXROYW1lKCJicmFuY2gtdG8tbWVyZ2UiKS5jYWxsKCk7CisJCS8vICJhIiBiZWNvbWVzIGV4ZWN1dGFibGUgaW4gQTIKKwkJYSA9IHdyaXRlVHJhc2hGaWxlKCJhIiwgImNvbnRlbnQgaW4gQW5jZXN0b3IiKTsKKwkJYS5zZXRFeGVjdXRhYmxlKHRydWUpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCVJldkNvbW1pdCBjb21taXRBMiA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJBbmNlc3RvciAyIikuY2FsbCgpOworCisJCS8vIHNlY29uZCBicmFuY2gKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldFN0YXJ0UG9pbnQoY29tbWl0QTEpLnNldE5hbWUoInNlY29uZC1icmFuY2giKS5jYWxsKCk7CisJCWEgPSB3cml0ZVRyYXNoRmlsZSgiYSIsICJjb250ZW50IGluIENoaWxkIDIgKGNvbW1pdGVkIG9uIHNlY29uZC1icmFuY2gpIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJLy8gY29tbWl0IEMyUworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQ2hpbGQgMiBvbiBzZWNvbmQtYnJhbmNoIikuY2FsbCgpOworCisJCS8vIE1lcmdlIGJyYW5jaC10by1tZXJnZSBpbnRvIHNlY29uZC1icmFuY2gKKwkJTWVyZ2VSZXN1bHQgbWVyZ2VSZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKGNvbW1pdEEyKS5zZXRTdHJhdGVneShzdHJhdGVneSkuY2FsbCgpOworCQlhc3NlcnRFcXVhbHMobWVyZ2VSZXN1bHQuZ2V0TmV3SGVhZCgpLCBudWxsKTsKKwkJYXNzZXJ0RXF1YWxzKG1lcmdlUmVzdWx0LmdldE1lcmdlU3RhdHVzKCksIE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HKTsKKwkJLy8gUmVzb2x2ZSB0aGUgY29uZmxpY3QgbWFudWFsbHksIG1lcmdlICJhIiBhcyBub24tZXhlY3V0YWJsZQorCQlhID0gd3JpdGVUcmFzaEZpbGUoImEiLCAibWVyZ2UgY29uZmxpY3QgcmVzb2x1dGlvbiIpOworCQlhLnNldEV4ZWN1dGFibGUoZmFsc2UpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCVJldkNvbW1pdCBjb21taXRDM1MgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQ2hpbGQgMyBvbiBzZWNvbmQgYnVnIC0gcmVzb2x2ZSBtZXJnZSBjb25mbGljdCIpLmNhbGwoKTsKKworCQkvLyBNZXJnZSBicmFuY2gtdG8tbWVyZ2UgaW50byBtYXN0ZXIKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOworCQltZXJnZVJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoY29tbWl0QTIpLnNldFN0cmF0ZWd5KHN0cmF0ZWd5KS5jYWxsKCk7CisJCWFzc2VydEVxdWFscyhtZXJnZVJlc3VsdC5nZXROZXdIZWFkKCksIG51bGwpOworCQlhc3NlcnRFcXVhbHMobWVyZ2VSZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSwgTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcpOworCisJCS8vIFJlc29sdmUgdGhlIGNvbmZsaWN0IG1hbnVhbGx5IC0gbWVyZ2UgImEiIGFzIG5vbi1leGVjdXRhYmxlCisJCWEgPSB3cml0ZVRyYXNoRmlsZSgiYSIsICJtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIik7CisJCWEuc2V0RXhlY3V0YWJsZShmYWxzZSk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJLy8gY29tbWl0IEM0TQorCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQ2hpbGQgNCBvbiBtYXN0ZXIgLSByZXNvbHZlIG1lcmdlIGNvbmZsaWN0IikuY2FsbCgpOworCisJCS8vIE1lcmdlIEM0TSAoc2Vjb25kLWJyYW5jaCkgaW50byBtYXN0ZXIgKEMzUykKKwkJLy8gQ29uZmxpY3QgaW4gdmlydHVhbCBiYXNlIHNob3VsZCBiZSBoZXJlLCBidXQgdGhlcmUgYXJlIG5vIGNvbmZsaWN0cyBpbgorCQkvLyBjaGlsZHJlbgorCQltZXJnZVJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoY29tbWl0QzNTKS5jYWxsKCk7CisJCWFzc2VydEVxdWFscyhtZXJnZVJlc3VsdC5nZXRNZXJnZVN0YXR1cygpLCBNZXJnZVN0YXR1cy5NRVJHRUQpOworCisJfQorCiAJcHJpdmF0ZSB2b2lkIHdyaXRlU3VibW9kdWxlKFN0cmluZyBwYXRoLCBPYmplY3RJZCBjb21taXQpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24sIENvbmZpZ0ludmFsaWRFeGNlcHRpb24gewogCQlhZGRTdWJtb2R1bGVUb0luZGV4KHBhdGgsIGNvbW1pdCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrTWVyZ2VkSW50b1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtNZXJnZWRJbnRvVGVzdC5qYXZhCmluZGV4IDJjMjFlYjYuLjI3NTRiZDMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtNZXJnZWRJbnRvVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtNZXJnZWRJbnRvVGVzdC5qYXZhCkBAIC0xMSw2ICsxMSw5IEBACiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAogcHVibGljIGNsYXNzIFJldldhbGtNZXJnZWRJbnRvVGVzdCBleHRlbmRzIFJldldhbGtUZXN0Q2FzZSB7CkBAIC00NCw0ICs0NywxMDEgQEAgcHVibGljIHZvaWQgdGVzdE9sZENvbW1pdFdhbGsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJZmluYWwgUmV2Q29tbWl0IHQgPSBjb21taXQobiwgbyk7CiAJCWFzc2VydFRydWUocncuaXNNZXJnZWRJbnRvKGIsIHQpKTsKIAl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RHZXRNZXJnZWRJbnRvKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8qCisJCSAqICAgICAgICAgIGkKKwkJICogICAgICAgICAvIFwKKwkJICogICAgICAgIEEgICBvCisJCSAqICAgICAgIC8gXCAgIFwKKwkJICogICAgICBvMSAgbzIgIEUKKwkJICogICAgIC8gXCAvIFwKKwkJICogICAgQiAgIEMgICBECisJCSAqLworCQlTdHJpbmcgYiA9ICJyZWZzL2hlYWRzL2IiOworCQlTdHJpbmcgYyA9ICJyZWZzL2hlYWRzL2MiOworCQlTdHJpbmcgZCA9ICJyZWZzL2hlYWRzL2QiOworCQlTdHJpbmcgZSA9ICJyZWZzL2hlYWRzL2UiOworCQlmaW5hbCBSZXZDb21taXQgaSA9IGNvbW1pdCgpOworCQlmaW5hbCBSZXZDb21taXQgYSA9IGNvbW1pdChpKTsKKwkJZmluYWwgUmV2Q29tbWl0IG8xID0gY29tbWl0KGEpOworCQlmaW5hbCBSZXZDb21taXQgbzIgPSBjb21taXQoYSk7CisJCWNyZWF0ZUJyYW5jaChjb21taXQobzEpLCBiKTsKKwkJY3JlYXRlQnJhbmNoKGNvbW1pdChvMSwgbzIpLCBjKTsKKwkJY3JlYXRlQnJhbmNoKGNvbW1pdChvMiksIGQpOworCQljcmVhdGVCcmFuY2goY29tbWl0KGNvbW1pdChpKSksIGUpOworCisJCUxpc3Q8U3RyaW5nPiAgbW9kaWZpZWRSZXN1bHQgPSBydy5nZXRNZXJnZWRJbnRvKGEsIGdldFJlZnMoKSkKKwkJCQkuc3RyZWFtKCkubWFwKFJlZjo6Z2V0TmFtZSkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsKKworCQlhc3NlcnRUcnVlKG1vZGlmaWVkUmVzdWx0LnNpemUoKSA9PSAzKTsKKwkJYXNzZXJ0VHJ1ZShtb2RpZmllZFJlc3VsdC5jb250YWlucyhiKSk7CisJCWFzc2VydFRydWUobW9kaWZpZWRSZXN1bHQuY29udGFpbnMoYykpOworCQlhc3NlcnRUcnVlKG1vZGlmaWVkUmVzdWx0LmNvbnRhaW5zKGQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJc01lcmdlZEludG9BbnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLyoKKwkJICogICAgICAgICAgaQorCQkgKiAgICAgICAgIC8gXAorCQkgKiAgICAgICAgQSAgIG8KKwkJICogICAgICAgLyAgICAgXAorCQkgKiAgICAgIG8gICAgICAgQworCQkgKiAgICAgLworCQkgKiAgICBCCisJCSAqLworCQlTdHJpbmcgYiA9ICJyZWZzL2hlYWRzL2IiOworCQlTdHJpbmcgYyA9ICJyZWZzL2hlYWRzL2MiOworCQlmaW5hbCBSZXZDb21taXQgaSA9IGNvbW1pdCgpOworCQlmaW5hbCBSZXZDb21taXQgYSA9IGNvbW1pdChpKTsKKwkJY3JlYXRlQnJhbmNoKGNvbW1pdChjb21taXQoYSkpLCBiKTsKKwkJY3JlYXRlQnJhbmNoKGNvbW1pdChjb21taXQoaSkpLCBjKTsKKworCQlhc3NlcnRUcnVlKHJ3LmlzTWVyZ2VkSW50b0FueShhLCBnZXRSZWZzKCkpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJc01lcmdlZEludG9BbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLyoKKwkJICoKKwkJICogICAgICAgIEEKKwkJICogICAgICAgLyBcCisJCSAqICAgICAgbzEgIG8yCisJCSAqICAgICAvIFwgLyBcCisJCSAqICAgIEIgICBDICAgRAorCQkgKi8KKworCQlTdHJpbmcgYiA9ICJyZWZzL2hlYWRzL2IiOworCQlTdHJpbmcgYyA9ICJyZWZzL2hlYWRzL2MiOworCQlTdHJpbmcgZCA9ICJyZWZzL2hlYWRzL2MiOworCQlmaW5hbCBSZXZDb21taXQgYSA9IGNvbW1pdCgpOworCQlmaW5hbCBSZXZDb21taXQgbzEgPSBjb21taXQoYSk7CisJCWZpbmFsIFJldkNvbW1pdCBvMiA9IGNvbW1pdChhKTsKKwkJY3JlYXRlQnJhbmNoKGNvbW1pdChvMSksIGIpOworCQljcmVhdGVCcmFuY2goY29tbWl0KG8xLCBvMiksIGMpOworCQljcmVhdGVCcmFuY2goY29tbWl0KG8yKSwgZCk7CisKKwkJYXNzZXJ0VHJ1ZShydy5pc01lcmdlZEludG9BbGwoYSwgZ2V0UmVmcygpKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2VJbnRvQW5ub3RhdGVkVGFnKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8qCisJCSAqICAgICAgICBhCisJCSAqICAgICAgICB8CisJCSAqICAgICAgICBiCisJCSAqICAgICAgIC8gXAorCQkgKiAgICAgIGMgIHYxIChhbm5vdGF0ZWQgdGFnKQorCQkgKi8KKwkJU3RyaW5nIGMgPSAicmVmcy9oZWFkcy9jIjsKKwkJU3RyaW5nIHYxID0gInJlZnMvdGFncy92MSI7CisJCWZpbmFsIFJldkNvbW1pdCBhID0gY29tbWl0KCk7CisJCWZpbmFsIFJldkNvbW1pdCBiID0gY29tbWl0KGEpOworCQljcmVhdGVCcmFuY2goY29tbWl0KGIpLCBjKTsKKwkJY3JlYXRlQnJhbmNoKHRhZygidjEiLCBiKSwgdjEpOworCisJCWFzc2VydFRydWUocncuaXNNZXJnZWRJbnRvQWxsKGEsIGdldFJlZnMoKSkpOworCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtVdGlsc1JlYWNoYWJsZVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtVdGlsc1JlYWNoYWJsZVRlc3QuamF2YQppbmRleCBkOWVkMGMxLi4wYTA0NWM5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrVXRpbHNSZWFjaGFibGVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa1V0aWxzUmVhY2hhYmxlVGVzdC5qYXZhCkBAIC03Niw2ICs3Niw0MSBAQCBwdWJsaWMgdm9pZCB3aXRoQ29tbWl0TG9hZGVkQnlEaWZmZXJlbnRSZXZXYWxrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCX0KIAl9CiAKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGZpbmRCcmFuY2hlc1JlYWNoYWJsZU1hbnlUaW1lcygpIHRocm93cyBFeGNlcHRpb24geworCQkvKgorCQkgKiAgYSAgIGIKKwkJICogIHwgICB8CisJCSAqICBjICAgZAorCQkgKiAgICAgIHwgXAorCQkgKiAgICAgIGYgIGUKKwkJICogICAgICB8IC8KKwkJICogICAgICBnCisJCSAqLworCQlSZXZDb21taXQgYSA9IGNvbW1pdCgpOworCQlSZXZDb21taXQgYiA9IGNvbW1pdCgpOworCQlSZXZDb21taXQgYyA9IGNvbW1pdChhKTsKKwkJUmV2Q29tbWl0IGQgPSBjb21taXQoYik7CisJCVJldkNvbW1pdCBmID0gY29tbWl0KGQpOworCQlSZXZDb21taXQgZSA9IGNvbW1pdChkKTsKKwkJUmV2Q29tbWl0IGcgPSBjb21taXQoZiwgZSk7CisJCVJlZiBicmFuY2hBID0gYnJhbmNoKCJhIiwgYSk7CisJCVJlZiBicmFuY2hCID0gYnJhbmNoKCJiIiwgYik7CisJCVJlZiBicmFuY2hDID0gYnJhbmNoKCJjIiwgYyk7CisJCVJlZiBicmFuY2hEID0gYnJhbmNoKCJkIiwgZCk7CisJCVJlZiBicmFuY2hFID0gYnJhbmNoKCJlIiwgZSk7CisJCVJlZiBicmFuY2hGID0gYnJhbmNoKCJmIiwgZik7CisJCVJlZiBicmFuY2hHID0gYnJhbmNoKCJnIiwgZyk7CisKKwkJYXNzZXJ0Q29udGFpbnMoYSwgYXNMaXN0KGJyYW5jaEEsIGJyYW5jaEMpKTsKKwkJYXNzZXJ0Q29udGFpbnMoYiwgYXNMaXN0KGJyYW5jaEIsIGJyYW5jaEQsIGJyYW5jaEUsIGJyYW5jaEYsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoYywgYXNMaXN0KGJyYW5jaEMpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZCwgYXNMaXN0KGJyYW5jaEQsIGJyYW5jaEUsIGJyYW5jaEYsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZSwgYXNMaXN0KGJyYW5jaEUsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZiwgYXNMaXN0KGJyYW5jaEYsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZywgYXNMaXN0KGJyYW5jaEcpKTsKKwl9CisKIAlwcml2YXRlIFJlZiBicmFuY2goU3RyaW5nIG5hbWUsIFJldkNvbW1pdCBkc3QpIHRocm93cyBFeGNlcHRpb24gewogCQlyZXR1cm4gR2l0LndyYXAoZGIpLmJyYW5jaENyZWF0ZSgpLnNldE5hbWUobmFtZSkKIAkJCQkuc2V0U3RhcnRQb2ludChkc3QubmFtZSgpKS5jYWxsKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9CYXNlODVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9CYXNlODVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODc4YwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL0Jhc2U4NVRlc3QuamF2YQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCisvKioKKyAqIFRlc3RzIGZvciB7QGxpbmsgQmFzZTg1fS4KKyAqLworcHVibGljIGNsYXNzIEJhc2U4NVRlc3QgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEX0NIQVJTID0gIjAxMjM0NTY3ODkiCisJCQkrICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkJKyAiISMkJSYoKSorLTs8PT4/QF5fYHt8fX4iOworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2hhcnMoKSB7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJCWJ5dGVbXSB0ZXN0RGF0YSA9IHsgJzEnLCAnMicsICczJywgJzQnLCAoYnl0ZSkgaSB9OworCQkJaWYgKFZBTElEX0NIQVJTLmluZGV4T2YoaSkgPj0gMCkgeworCQkJCWJ5dGVbXSBkZWNvZGVkID0gQmFzZTg1LmRlY29kZSh0ZXN0RGF0YSwgNCk7CisJCQkJYXNzZXJ0Tm90TnVsbChkZWNvZGVkKTsKKwkJCX0gZWxzZSB7CisJCQkJYXNzZXJ0VGhyb3dzKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJCSgpIC0+IEJhc2U4NS5kZWNvZGUodGVzdERhdGEsIDQpKTsKKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCByb3VuZHRyaXAoYnl0ZVtdIGRhdGEsIGludCBleHBlY3RlZExlbmd0aCkgeworCQlieXRlW10gZW5jb2RlZCA9IEJhc2U4NS5lbmNvZGUoZGF0YSk7CisJCWFzc2VydEVxdWFscyhleHBlY3RlZExlbmd0aCwgZW5jb2RlZC5sZW5ndGgpOworCQlhc3NlcnRBcnJheUVxdWFscyhkYXRhLCBCYXNlODUuZGVjb2RlKGVuY29kZWQsIGRhdGEubGVuZ3RoKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHJvdW5kdHJpcChTdHJpbmcgZGF0YSwgaW50IGV4cGVjdGVkTGVuZ3RoKSB7CisJCXJvdW5kdHJpcChkYXRhLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVNfQVNDSUkpLCBleHBlY3RlZExlbmd0aCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UGFkZGluZygpIHsKKwkJcm91bmR0cmlwKCIiLCAwKTsKKwkJcm91bmR0cmlwKCJhIiwgNSk7CisJCXJvdW5kdHJpcCgiYWIiLCA1KTsKKwkJcm91bmR0cmlwKCJhYmMiLCA1KTsKKwkJcm91bmR0cmlwKCJhYmNkIiwgNSk7CisJCXJvdW5kdHJpcCgiYWJjZGUiLCAxMCk7CisJCXJvdW5kdHJpcCgiYWJjZGVmIiwgMTApOworCQlyb3VuZHRyaXAoImFiY2RlZmciLCAxMCk7CisJCXJvdW5kdHJpcCgiYWJjZGVmZ2giLCAxMCk7CisJCXJvdW5kdHJpcCgiYWJjZGVmZ2hpIiwgMTUpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJpbmFyeSgpIHsKKwkJcm91bmR0cmlwKG5ldyBieXRlW10geyAxIH0sIDUpOworCQlyb3VuZHRyaXAobmV3IGJ5dGVbXSB7IDEsIDIgfSwgNSk7CisJCXJvdW5kdHJpcChuZXcgYnl0ZVtdIHsgMSwgMiwgMyB9LCA1KTsKKwkJcm91bmR0cmlwKG5ldyBieXRlW10geyAxLCAyLCAzLCA0IH0sIDUpOworCQlyb3VuZHRyaXAobmV3IGJ5dGVbXSB7IDEsIDIsIDMsIDQsIDUgfSwgMTApOworCQlyb3VuZHRyaXAobmV3IGJ5dGVbXSB7IDEsIDIsIDMsIDQsIDUsIDAsIDAsIDAgfSwgMTApOworCQlyb3VuZHRyaXAobmV3IGJ5dGVbXSB7IDEsIDIsIDMsIDQsIDAsIDAsIDAsIDUgfSwgMTApOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE92ZXJmbG93KCkgeworCQlJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSA9IGFzc2VydFRocm93cygKKwkJCQlJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MsCisJCQkJKCkgLT4gQmFzZTg1LmRlY29kZShuZXcgYnl0ZVtdIHsgJ34nLCAnficsICd+JywgJ34nLCAnficgfSwgNCkpOworCQlhc3NlcnRUcnVlKGUuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJvdmVyZmxvdyIpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlEZWx0YUlucHV0U3RyZWFtVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5RGVsdGFJbnB1dFN0cmVhbVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTI5N2ZjCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5RGVsdGFJbnB1dFN0cmVhbVRlc3QuamF2YQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0QXJyYXlFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC56aXAuSW5mbGF0ZXJJbnB1dFN0cmVhbTsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCisvKioKKyAqIENydWRlIHRlc3RzIGZvciB0aGUge0BsaW5rIEJpbmFyeURlbHRhSW5wdXRTdHJlYW19IHVzaW5nIGRlbHRhIGRpZmZzCisgKiBnZW5lcmF0ZWQgYnkgQyBnaXQuCisgKi8KK3B1YmxpYyBjbGFzcyBCaW5hcnlEZWx0YUlucHV0U3RyZWFtVGVzdCB7CisKKwlwcml2YXRlIElucHV0U3RyZWFtIGdldEJpbmFyeUh1bmsoU3RyaW5nIG5hbWUpIHsKKwkJcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKG5hbWUpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJpbmFyeURlbHRhKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8vIFByZXBhcmUgb3VyIHRlc3QgZGF0YQorCQlieXRlW10gZGF0YSA9IG5ldyBieXRlWzgxOTJdOworCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKKwkJCWRhdGFbaV0gPSAoYnl0ZSkgKDI1NSAtIChpICUgMjU2KSk7CisJCX0KKwkJLy8gU2FtZSwgYnV0IHdpdGggZml2ZSAneCcgaW5zZXJ0ZWQgaW4gdGhlIG1pZGRsZS4KKwkJaW50IG1pZGRsZSA9IGRhdGEubGVuZ3RoIC8gMjsKKwkJYnl0ZVtdIG5ld0RhdGEgPSBuZXcgYnl0ZVtkYXRhLmxlbmd0aCArIDVdOworCQlTeXN0ZW0uYXJyYXljb3B5KGRhdGEsIDAsIG5ld0RhdGEsIDAsIG1pZGRsZSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQluZXdEYXRhW21pZGRsZSArIGldID0gJ3gnOworCQl9CisJCVN5c3RlbS5hcnJheWNvcHkoZGF0YSwgbWlkZGxlLCBuZXdEYXRhLCBtaWRkbGUgKyA1LCBtaWRkbGUpOworCQkvLyBkZWx0YTEuZm9yd2FyZCBoYXMgdGhlIGluc3RydWN0aW9ucworCQkvLyBAZm9ybWF0dGVyOm9mZgorCQkvLyBDT1BZIDAgNDA5NgorCQkvLyBJTlNFUlQgNSB4eHh4eAorCQkvLyBDT1BZIDAgNDA5NgorCQkvLyBAZm9ybWF0dGVyOm9uCisJCS8vIE5vdGUgdGhhdCB0aGUgd2F5IHdlIGJ1aWx0IG5ld0RhdGEgY291bGQgYmUgZXhwcmVzc2VkIGFzCisJCS8vIEBmb3JtYXR0ZXI6b2ZmCisJCS8vIENPUFkgMCA0MDk2CisJCS8vIElOU0VSVCA1IHh4eHh4CisJCS8vIENPUFkgNDA5NiA0MDk2CisJCS8vIEBmb3JtYXR0ZXI6b24KKwkJdHJ5IChCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJCUJpbmFyeURlbHRhSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgQmluYXJ5RGVsdGFJbnB1dFN0cmVhbShkYXRhLAorCQkJCQkJbmV3IEluZmxhdGVySW5wdXRTdHJlYW0obmV3IEJpbmFyeUh1bmtJbnB1dFN0cmVhbSgKKwkJCQkJCQkJZ2V0QmluYXJ5SHVuaygiZGVsdGExLmZvcndhcmQiKSkpKSkgeworCQkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzEwMjRdOworCQkJaW50IG47CisJCQl3aGlsZSAoKG4gPSBpbnB1dC5yZWFkKGJ1ZikpID49IDApIHsKKwkJCQlvdXQud3JpdGUoYnVmLCAwLCBuKTsKKwkJCX0KKwkJCWFzc2VydEFycmF5RXF1YWxzKG5ld0RhdGEsIG91dC50b0J5dGVBcnJheSgpKTsKKwkJCWFzc2VydFRydWUoaW5wdXQuaXNGdWxseUNvbnN1bWVkKCkpOworCQl9CisJCS8vIGRlbHRhMS5yZXZlcnNlIGhhcyB0aGUgaW5zdHJ1Y3Rpb25zCisJCS8vIEBmb3JtYXR0ZXI6b2ZmCisJCS8vIENPUFkgMCA0MDk2CisJCS8vIENPUFkgMjU2IDM4NDAKKwkJLy8gQ09QWSAyNTYgMjU2CisJCS8vIEBmb3JtYXR0ZXI6b24KKwkJLy8gTm90ZSB0aGF0IHRoZXJlIGFyZSBhbHRlcm5hdGl2ZXMsIGZvciBpbnN0YW5jZQorCQkvLyBAZm9ybWF0dGVyOm9mZgorCQkvLyBDT1BZIDAgNDA5NgorCQkvLyBDT1BZIDQxMDEgNDA5NgorCQkvLyBAZm9ybWF0dGVyOm9uCisJCS8vIG9yCisJCS8vIEBmb3JtYXR0ZXI6b2ZmCisJCS8vIENPUFkgMCA0MDk2CisJCS8vIENPUFkgMCA0MDk2CisJCS8vIEBmb3JtYXR0ZXI6b24KKwkJdHJ5IChCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJCUJpbmFyeURlbHRhSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgQmluYXJ5RGVsdGFJbnB1dFN0cmVhbSgKKwkJCQkJCW5ld0RhdGEsCisJCQkJCQluZXcgSW5mbGF0ZXJJbnB1dFN0cmVhbShuZXcgQmluYXJ5SHVua0lucHV0U3RyZWFtKAorCQkJCQkJCQlnZXRCaW5hcnlIdW5rKCJkZWx0YTEucmV2ZXJzZSIpKSkpKSB7CisJCQlsb25nIGV4cGVjdGVkU2l6ZSA9IGlucHV0LmdldEV4cGVjdGVkUmVzdWx0U2l6ZSgpOworCQkJYXNzZXJ0RXF1YWxzKGRhdGEubGVuZ3RoLCBleHBlY3RlZFNpemUpOworCQkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzEwMjRdOworCQkJaW50IG47CisJCQl3aGlsZSAoKG4gPSBpbnB1dC5yZWFkKGJ1ZikpID49IDApIHsKKwkJCQlvdXQud3JpdGUoYnVmLCAwLCBuKTsKKwkJCX0KKwkJCWFzc2VydEFycmF5RXF1YWxzKGRhdGEsIG91dC50b0J5dGVBcnJheSgpKTsKKwkJCWFzc2VydFRydWUoaW5wdXQuaXNGdWxseUNvbnN1bWVkKCkpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5SHVua1N0cmVhbVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtTdHJlYW1UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5OGMzMgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtTdHJlYW1UZXN0LmphdmEKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEFycmF5RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUZXN0cyBmb3Ige0BsaW5rIEJpbmFyeUh1bmtJbnB1dFN0cmVhbX0gYW5kIHtAbGluayBCaW5hcnlIdW5rT3V0cHV0U3RyZWFtfS4KKyAqLworcHVibGljIGNsYXNzIEJpbmFyeUh1bmtTdHJlYW1UZXN0IHsKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJvdW5kdHJpcFdob2xlQnVmZmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZm9yIChpbnQgbGVuZ3RoID0gMTsgbGVuZ3RoIDwgNTIwICsgNTI7IGxlbmd0aCsrKSB7CisJCQlieXRlW10gZGF0YSA9IG5ldyBieXRlW2xlbmd0aF07CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKKwkJCQlkYXRhW2ldID0gKGJ5dGUpICgyNTUgLSAoaSAlIDI1NikpOworCQkJfQorCQkJdHJ5IChCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJCQlCaW5hcnlIdW5rT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBCaW5hcnlIdW5rT3V0cHV0U3RyZWFtKAorCQkJCQkJCWJvcykpIHsKKwkJCQlvdXQud3JpdGUoZGF0YSk7CisJCQkJb3V0LmZsdXNoKCk7CisJCQkJYnl0ZVtdIGVuY29kZWQgPSBib3MudG9CeXRlQXJyYXkoKTsKKwkJCQlhc3NlcnRGYWxzZShBcnJheXMuZXF1YWxzKGRhdGEsIGVuY29kZWQpKTsKKwkJCQl0cnkgKEJpbmFyeUh1bmtJbnB1dFN0cmVhbSBpbiA9IG5ldyBCaW5hcnlIdW5rSW5wdXRTdHJlYW0oCisJCQkJCQluZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZW5jb2RlZCkpKSB7CisJCQkJCWJ5dGVbXSBkZWNvZGVkID0gbmV3IGJ5dGVbZGF0YS5sZW5ndGhdOworCQkJCQlpbnQgbmV3TGVuZ3RoID0gaW4ucmVhZChkZWNvZGVkKTsKKwkJCQkJYXNzZXJ0RXF1YWxzKG5ld0xlbmd0aCwgZGVjb2RlZC5sZW5ndGgpOworCQkJCQlhc3NlcnRFcXVhbHMoLTEsIGluLnJlYWQoKSk7CisJCQkJCWFzc2VydEFycmF5RXF1YWxzKGRhdGEsIGRlY29kZWQpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJvdW5kdHJpcENodW5rcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoaW50IGxlbmd0aCA9IDE7IGxlbmd0aCA8IDUyMCArIDUyOyBsZW5ndGgrKykgeworCQkJYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtsZW5ndGhdOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisJCQkJZGF0YVtpXSA9IChieXRlKSAoMjU1IC0gKGkgJSAyNTYpKTsKKwkJCX0KKwkJCXRyeSAoQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKwkJCQkJQmluYXJ5SHVua091dHB1dFN0cmVhbSBvdXQgPSBuZXcgQmluYXJ5SHVua091dHB1dFN0cmVhbSgKKwkJCQkJCQlib3MpKSB7CisJCQkJb3V0LndyaXRlKGRhdGEsIDAsIGRhdGEubGVuZ3RoIC8gMik7CisJCQkJb3V0LndyaXRlKGRhdGEsIGRhdGEubGVuZ3RoIC8gMiwgZGF0YS5sZW5ndGggLSBkYXRhLmxlbmd0aCAvIDIpOworCQkJCW91dC5mbHVzaCgpOworCQkJCWJ5dGVbXSBlbmNvZGVkID0gYm9zLnRvQnl0ZUFycmF5KCk7CisJCQkJYXNzZXJ0RmFsc2UoQXJyYXlzLmVxdWFscyhkYXRhLCBlbmNvZGVkKSk7CisJCQkJdHJ5IChCaW5hcnlIdW5rSW5wdXRTdHJlYW0gaW4gPSBuZXcgQmluYXJ5SHVua0lucHV0U3RyZWFtKAorCQkJCQkJbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGVuY29kZWQpKSkgeworCQkJCQlieXRlW10gZGVjb2RlZCA9IG5ldyBieXRlW2RhdGEubGVuZ3RoXTsKKwkJCQkJaW50IHAgPSAwOworCQkJCQlpbnQgbjsKKwkJCQkJd2hpbGUgKChuID0gaW4ucmVhZChkZWNvZGVkLCBwLAorCQkJCQkJCU1hdGgubWluKGRlY29kZWQubGVuZ3RoIC0gcCwgNTcpKSkgPj0gMCkgeworCQkJCQkJcCArPSBuOworCQkJCQkJaWYgKHAgPT0gZGVjb2RlZC5sZW5ndGgpIHsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlhc3NlcnRFcXVhbHMocCwgZGVjb2RlZC5sZW5ndGgpOworCQkJCQlhc3NlcnRFcXVhbHMoLTEsIGluLnJlYWQoKSk7CisJCQkJCWFzc2VydEFycmF5RXF1YWxzKGRhdGEsIGRlY29kZWQpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJvdW5kdHJpcEJ5dGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZm9yIChpbnQgbGVuZ3RoID0gMTsgbGVuZ3RoIDwgNTIwICsgNTI7IGxlbmd0aCsrKSB7CisJCQlieXRlW10gZGF0YSA9IG5ldyBieXRlW2xlbmd0aF07CisJCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKKwkJCQlkYXRhW2ldID0gKGJ5dGUpICgyNTUgLSAoaSAlIDI1NikpOworCQkJfQorCQkJdHJ5IChCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYm9zID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJCQlCaW5hcnlIdW5rT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBCaW5hcnlIdW5rT3V0cHV0U3RyZWFtKAorCQkJCQkJCWJvcykpIHsKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsKKwkJCQkJb3V0LndyaXRlKGRhdGFbaV0pOworCQkJCX0KKwkJCQlvdXQuZmx1c2goKTsKKwkJCQlieXRlW10gZW5jb2RlZCA9IGJvcy50b0J5dGVBcnJheSgpOworCQkJCWFzc2VydEZhbHNlKEFycmF5cy5lcXVhbHMoZGF0YSwgZW5jb2RlZCkpOworCQkJCXRyeSAoQmluYXJ5SHVua0lucHV0U3RyZWFtIGluID0gbmV3IEJpbmFyeUh1bmtJbnB1dFN0cmVhbSgKKwkJCQkJCW5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShlbmNvZGVkKSkpIHsKKwkJCQkJYnl0ZVtdIGRlY29kZWQgPSBuZXcgYnl0ZVtkYXRhLmxlbmd0aF07CisJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZGVjb2RlZC5sZW5ndGg7IGkrKykgeworCQkJCQkJaW50IHZhbCA9IGluLnJlYWQoKTsKKwkJCQkJCWFzc2VydFRydWUoMCA8PSB2YWwgJiYgdmFsIDw9IDI1NSk7CisJCQkJCQlkZWNvZGVkW2ldID0gKGJ5dGUpIHZhbDsKKwkJCQkJfQorCQkJCQlhc3NlcnRFcXVhbHMoLTEsIGluLnJlYWQoKSk7CisJCQkJCWFzc2VydEFycmF5RXF1YWxzKGRhdGEsIGRlY29kZWQpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFJvdW5kdHJpcFdpdGhDbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoaW50IGxlbmd0aCA9IDE7IGxlbmd0aCA8IDUyMCArIDUyOyBsZW5ndGgrKykgeworCQkJYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtsZW5ndGhdOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisJCQkJZGF0YVtpXSA9IChieXRlKSAoMjU1IC0gKGkgJSAyNTYpKTsKKwkJCX0KKwkJCXRyeSAoQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKSkgeworCQkJCXRyeSAoQmluYXJ5SHVua091dHB1dFN0cmVhbSBvdXQgPSBuZXcgQmluYXJ5SHVua091dHB1dFN0cmVhbSgKKwkJCQkJCWJvcykpIHsKKwkJCQkJb3V0LndyaXRlKGRhdGEpOworCQkJCX0KKwkJCQlieXRlW10gZW5jb2RlZCA9IGJvcy50b0J5dGVBcnJheSgpOworCQkJCWFzc2VydEZhbHNlKEFycmF5cy5lcXVhbHMoZGF0YSwgZW5jb2RlZCkpOworCQkJCXRyeSAoQmluYXJ5SHVua0lucHV0U3RyZWFtIGluID0gbmV3IEJpbmFyeUh1bmtJbnB1dFN0cmVhbSgKKwkJCQkJCW5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShlbmNvZGVkKSkpIHsKKwkJCQkJYnl0ZVtdIGRlY29kZWQgPSBuZXcgYnl0ZVtkYXRhLmxlbmd0aF07CisJCQkJCWludCBuZXdMZW5ndGggPSBpbi5yZWFkKGRlY29kZWQpOworCQkJCQlhc3NlcnRFcXVhbHMobmV3TGVuZ3RoLCBkZWNvZGVkLmxlbmd0aCk7CisJCQkJCWFzc2VydEVxdWFscygtMSwgaW4ucmVhZCgpKTsKKwkJCQkJYXNzZXJ0QXJyYXlFcXVhbHMoZGF0YSwgZGVjb2RlZCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggODljMTEwMi4uODU4ODk5NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC00LDE0ICs0LDE0IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQudWkKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQudWkKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSI1LjExLjIiCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iNS4xMi4xIgorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggOTVlYTYzMC4uMDA5ZWNkYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC51aSAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQudWkuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC51aTt2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC51aTt2ZXJzaW9uPSI1LjEyLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbAppbmRleCAyYmJjY2YxLi43ZmYyOWY5MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC51aS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC51aTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycyBiL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycwppbmRleCBkMzg5YWM1Li4zMzMzMWZiIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCkBAIC0xLDU2ICsxLDEwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDxjb21wb25lbnQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjIiPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cyI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc1NTY3OCI+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9Tc2hDb25zdGFudHMuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuU3NoQ29uc3RhbnRzIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMTE0Mjk0Nzg0MyI+CiAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cyIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJDT05GSUdfUkVGU1RPUkFHRV9SRUZUUkVFIi8+Ci0gICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICA8L2ZpbHRlcj4KLSAgICA8L3Jlc291cmNlPgotICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL09iamVjdFdhbGsuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLk9iamVjdFdhbGsiPgotICAgICAgICA8ZmlsdGVyIGlkPSI0MjE2NTQ2NDciPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuT2JqZWN0V2FsayIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJjcmVhdGVPYmplY3RSZWFjaGFiaWxpdHlDaGVja2VyKCkiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsay5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsayI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1NDY0NyI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImNyZWF0ZVJlYWNoYWJpbGl0eUNoZWNrZXIoKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9GUy5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlMiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMzg3OTI1NDYiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlMiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iaW50ZXJuYWxSdW5Ib29rSWZQcmVzZW50KFJlcG9zaXRvcnksIFN0cmluZywgU3RyaW5nW10sIFByaW50U3RyZWFtLCBQcmludFN0cmVhbSwgU3RyaW5nKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc5MjU0NiI+Ci0gICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUyIvPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJydW5Ib29rSWZQcmVzZW50KFJlcG9zaXRvcnksIFN0cmluZywgU3RyaW5nW10sIFByaW50U3RyZWFtLCBQcmludFN0cmVhbSwgU3RyaW5nKSIvPgotICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KLSAgICAgICAgPC9maWx0ZXI+Ci0gICAgPC9yZXNvdXJjZT4KLSAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9GU19QT1NJWC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlNfUE9TSVgiPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMzg3OTI1NDYiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlNfUE9TSVgiLz4KLSAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0icnVuSG9va0lmUHJlc2VudChSZXBvc2l0b3J5LCBTdHJpbmcsIFN0cmluZ1tdLCBQcmludFN0cmVhbSwgUHJpbnRTdHJlYW0sIFN0cmluZykiLz4KLSAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+Ci0gICAgICAgIDwvZmlsdGVyPgotICAgIDwvcmVzb3VyY2U+Ci0gICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvRlNfV2luMzJfQ3lnd2luLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5GU19XaW4zMl9DeWd3aW4iPgotICAgICAgICA8ZmlsdGVyIGlkPSIzMzg3OTI1NDYiPgotICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgotICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlNfV2luMzJfQ3lnd2luIi8+Ci0gICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InJ1bkhvb2tJZlByZXNlbnQoUmVwb3NpdG9yeSwgU3RyaW5nLCBTdHJpbmdbXSwgUHJpbnRTdHJlYW0sIFByaW50U3RyZWFtLCBTdHJpbmcpIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IjUuMTEuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJQVUJLRVlfQUNDRVBURURfQUxHT1JJVEhNUyIvPgogICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KICAgICAgICAgPC9maWx0ZXI+CiAgICAgPC9yZXNvdXJjZT4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDliY2NhMzguLjlhNTc5M2EgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywxMiArMywxMiBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEVjbGlwc2UtRXh0ZW5zaWJsZUFQSTogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iNS4xMS4yIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSI1LjExLjIiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iNS4xMi4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzLAogICAgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZSwKQEAgLTIzLDE4ICsyMywxOCBAQAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlczt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlczt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlmZiIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcywKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKQEAgLTQyLDQ0ICs0Miw0NCBAQAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5ldmVudHMsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcywKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2siLAotIG9yZy5lY2xpcHNlLmpnaXQuZXZlbnRzO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5ldmVudHM7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iNS4xMS4yIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iNS4xMi4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy54bWwuc2F4LmhlbHBlcnMsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLnhtbC5zYXgiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5pbnRlcm5hbDt2ZXJzaW9uPSI1LjExLjIiO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSI1LjExLjIiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmU7dmVyc2lvbj0iNS4xMS4yIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZS5pbnRlcm5hbDt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5pbnRlcm5hbDt2ZXJzaW9uPSI1LjEyLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSI1LjEyLjEiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiIsCisgb3JnLmVjbGlwc2UuamdpdC5pZ25vcmU7dmVyc2lvbj0iNS4xMi4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZS5pbnRlcm5hbDt2ZXJzaW9uPSI1LjEyLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249IjUuMTIuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmZzY2s7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmZzY2s7dmVyc2lvbj0iNS4xMi4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnJldndhbGs7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnJldndhbGs7dmVyc2lvbj0iNS4xMi4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSI1LjEyLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249IjUuMTIuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAsCkBAIC04OCwzMSArODgsMzEgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLAogICAgb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvO3ZlcnNpb249IjUuMTIuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSI1LjEyLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LAogICAgb3JnLmVjbGlwc2UuamdpdC50ZXN0LAogICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZTt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZTt2ZXJzaW9uPSI1LjEyLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdWJtb2R1bGU7dmVyc2lvbj0iNS4xMS4yIjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LmNvbm5lY3Rpdml0eTt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3VibW9kdWxlO3ZlcnNpb249IjUuMTIuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5jb25uZWN0aXZpdHk7dmVyc2lvbj0iNS4xMi4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5odHRwO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSI1LjEyLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSI1LjEyLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2g7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2g7dmVyc2lvbj0iNS4xMi4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLAogICAgb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaCIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMSwKICAgIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUsCkBAIC0xMjYsMTAgKzEyNiwxMCBAQAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLAogICAgb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwudGltZSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWw7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbDt2ZXJzaW9uPSI1LjEyLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQubG9nZ2luZzt2ZXJzaW9uPSI1LjExLjIiLAotIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2U7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmxvZ2dpbmc7dmVyc2lvbj0iNS4xMi4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCkBAIC0xMzgsNDAgKzEzOCw0MCBAQAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLAogICAgb3JnLmVjbGlwc2UuamdpdC5hcGksCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249IjUuMTEuMiIsCi0gb3JnLmVjbGlwc2UuamdpdC5ub3Rlczt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249IjUuMTIuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5ub3Rlczt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC5tZXJnZSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wYXRjaDt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQucGF0Y2g7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5kaWZmIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5kaWZmLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2FsayIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQudXRpbCIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5kaWZmLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJqYXZheC5jcnlwdG8sCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW8sCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKQEAgLTE4NCwyMSArMTg0LDIxIEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrLAogICAgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJqYXZheC5uZXQuc3NsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249IjUuMTIuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249IjUuMTEuMiI7Cisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLApAQCAtMjExLDEyICsyMTEsMTIgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBqYXZheC5uZXQuc3NsLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWUiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSI1LjExLjIiOworIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSI1LjExLjIiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lO3ZlcnNpb249IjUuMTEuMiIKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSI1LjEyLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lO3ZlcnNpb249IjUuMTIuMSIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBJbXBvcnQtUGFja2FnZTogY29tLmdvb2dsZWNvZGUuamF2YWV3YWg7dmVyc2lvbj0iWzEuMS42LDIuMC4wKSIsCiAgamF2YXguY3J5cHRvLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCA3NzY0ZmUxLi4wM2RkYmI3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0IC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0O3ZlcnNpb249IjUuMTEuMi5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0O3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC9wb20ueG1sCmluZGV4IDZhNTJjMjcuLmM5ZmMxMjcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3BvbS54bWwKQEAgLTIwLDcgKzIwLDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LnByb3BlcnRpZXMKaW5kZXggYjZiMTBlYS4uNjE4MDczNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5wcm9wZXJ0aWVzCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQucHJvcGVydGllcwpAQCAtMTMsNiArMTMsOSBAQAogYU5ld09iamVjdElkSXNSZXF1aXJlZD1BIE5ld09iamVjdElkIGlzIHJlcXVpcmVkLgogYW5FeGNlcHRpb25PY2N1cnJlZFdoaWxlVHJ5aW5nVG9BZGRUaGVJZE9mSEVBRD1BbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGFkZCB0aGUgSWQgb2YgSEVBRAogYW5TU0hTZXNzaW9uSGFzQmVlbkFscmVhZHlDcmVhdGVkPUFuIFNTSCBzZXNzaW9uIGhhcyBiZWVuIGFscmVhZHkgY3JlYXRlZAorYXBwbHlCaW5hcnlCYXNlT2lkV3Jvbmc9Q2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaDsgT0lEIGZvciBmaWxlIHswfSBkb2VzIG5vdCBtYXRjaAorYXBwbHlCaW5hcnlPaWRUb29TaG9ydD1CaW5hcnkgcGF0Y2ggZm9yIGZpbGUgezB9IGRvZXMgbm90IGhhdmUgZnVsbCBJRHMKK2FwcGx5QmluYXJ5UmVzdWx0T2lkV3Jvbmc9UmVzdWx0IG9mIGJpbmFyeSBwYXRjaCBmb3IgZmlsZSB7MH0gaGFzIHdyb25nIE9JRC4KIGFwcGx5aW5nQ29tbWl0PUFwcGx5aW5nIHswfQogYXJjaGl2ZUZvcm1hdEFscmVhZHlBYnNlbnQ9QXJjaGl2ZSBmb3JtYXQgYWxyZWFkeSBhYnNlbnQ6IHswfQogYXJjaGl2ZUZvcm1hdEFscmVhZHlSZWdpc3RlcmVkPUFyY2hpdmUgZm9ybWF0IGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbjogezB9CkBAIC0zNyw3ICs0MCwxOSBAQAogYmFkU2VjdGlvbkVudHJ5PUJhZCBzZWN0aW9uIGVudHJ5OiB7MH0KIGJhZFNoYWxsb3dMaW5lPUJhZCBzaGFsbG93IGxpbmU6IHswfQogYmFyZVJlcG9zaXRvcnlOb1dvcmtkaXJBbmRJbmRleD1CYXJlIFJlcG9zaXRvcnkgaGFzIG5laXRoZXIgYSB3b3JraW5nIHRyZWUsIG5vciBhbiBpbmRleAorYmFzZTg1aW52YWxpZENoYXI9SW52YWxpZCBiYXNlLTg1IGNoYXJhY3RlcjogMHh7MH0KK2Jhc2U4NWxlbmd0aD1CYXNlLTg1IGVuY29kZWQgZGF0YSBtdXN0IGhhdmUgYSBsZW5ndGggdGhhdCBpcyBhIG11bHRpcGxlIG9mIDUKK2Jhc2U4NW92ZXJmbG93PUJhc2UtODUgdmFsdWUgb3ZlcmZsb3csIGRvZXMgbm90IGZpdCBpbnRvIDMyIGJpdHM6IDB4ezB9CitiYXNlODV0b29Mb25nPUV4dHJhIGJhc2UtODUgZW5jb2RlZCBkYXRhIGZvciBvdXRwdXQgc2l6ZSBvZiB7MH0gYnl0ZXMKK2Jhc2U4NXRvb1Nob3J0PUJhc2UtODUgZGF0YSBkZWNvZGVkIGludG8gbGVzcyB0aGFuIHswfSBieXRlcwogYmFzZUxlbmd0aEluY29ycmVjdD1iYXNlIGxlbmd0aCBpbmNvcnJlY3QKK2JpbmFyeURlbHRhQmFzZUxlbmd0aE1pc21hdGNoPUJpbmFyeSBkZWx0YSBiYXNlIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCwgZXhwZWN0ZWQgezB9LCBnb3QgezF9CitiaW5hcnlEZWx0YUludmFsaWRPZmZzZXQ9QmluYXJ5IGRlbHRhIG9mZnNldCArIGxlbmd0aCB0b28gbGFyZ2U6IHswfSArIHsxfQorYmluYXJ5RGVsdGFJbnZhbGlkUmVzdWx0TGVuZ3RoPUJpbmFyeSBkZWx0YSBleHBlY3RlZCByZXN1bHQgbGVuZ3RoIGlzIG5lZ2F0aXZlCitiaW5hcnlIdW5rRGVjb2RlRXJyb3I9QmluYXJ5IGh1bmssIGxpbmUgezB9OiBpbnZhbGlkIGlucHV0CitiaW5hcnlIdW5rSW52YWxpZExlbmd0aD1CaW5hcnkgaHVuaywgbGluZSB7MH06IGlucHV0IGNvcnJ1cHQ7IGV4cGVjdGVkIGxlbmd0aCBieXRlLCBnb3QgMHh7MX0KK2JpbmFyeUh1bmtMaW5lVG9vU2hvcnQ9QmluYXJ5IGh1bmssIGxpbmUgezB9OiBpbnB1dCBlbmRlZCBwcmVtYXR1cmVseQorYmluYXJ5SHVua01pc3NpbmdOZXdsaW5lPUJpbmFyeSBodW5rLCBsaW5lIHswfTogaW5wdXQgbGluZSBub3QgdGVybWluYXRlZCBieSBuZXdsaW5lCiBiaXRtYXBNaXNzaW5nT2JqZWN0PUJpdG1hcCBhdCB7MH0gaXMgbWlzc2luZyB7MX0uCiBiaXRtYXBzTXVzdEJlUHJlcGFyZWQ9Qml0bWFwcyBtdXN0IGJlIHByZXBhcmVkIGJlZm9yZSB0aGV5IG1heSBiZSB3cml0dGVuLgogYmxhbWVOb3RDb21taXR0ZWRZZXQ9Tm90IENvbW1pdHRlZCBZZXQKQEAgLTEzOSw2ICsxNTQsNyBAQAogY29ubmVjdGlvbkZhaWxlZD1jb25uZWN0aW9uIGZhaWxlZAogY29ubmVjdGlvblRpbWVPdXQ9Q29ubmVjdGlvbiB0aW1lIG91dDogezB9CiBjb250ZXh0TXVzdEJlTm9uTmVnYXRpdmU9Y29udGV4dCBtdXN0IGJlID49IDAKK2Nvb2tpZUZpbGVQYXRoUmVsYXRpdmU9Z2l0IGNvbmZpZyBodHRwLmNvb2tpZUZpbGUgY29udGFpbnMgYSByZWxhdGl2ZSBwYXRoLCBzaG91bGQgYmUgYWJzb2x1dGU6IHswfQogY29ycnVwdGlvbkRldGVjdGVkUmVSZWFkaW5nQXQ9Q29ycnVwdGlvbiBkZXRlY3RlZCByZS1yZWFkaW5nIGF0IHswfQogY29ycnVwdE9iamVjdEJhZERhdGU9YmFkIGRhdGUKIGNvcnJ1cHRPYmplY3RCYWRFbWFpbD1iYWQgZW1haWwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kLmphdmEKaW5kZXggZTIyOGU4Mi4uNTgzNzY3YSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDIwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMjEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTksMjkgKzksNjggQEAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTsKIAoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKIGltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkQ29weU9wdGlvbjsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuemlwLkluZmxhdGVySW5wdXRTdHJlYW07CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuRmlsdGVyRmFpbGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlBhdGNoQXBwbHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlBhdGNoRm9ybWF0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZFbnRyeS5DaGFuZ2VUeXBlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5SYXdUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZUNoZWNrb3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVDaGVja291dC5DaGVja291dE1ldGFkYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5MYXJnZU9iamVjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5NaXNzaW5nT2JqZWN0RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvcmVDb25maWcuRW9sU3RyZWFtVHlwZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RMb2FkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0U3RyZWFtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wYXRjaC5CaW5hcnlIdW5rOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGF0Y2guRmlsZUhlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoLkZpbGVIZWFkZXIuUGF0Y2hUeXBlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGF0Y2guSHVua0hlYWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoLlBhdGNoOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuRmlsZVRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGsuT3BlcmF0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlci5BbmRUcmVlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyLk5vdElnbm9yZWRGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIuUGF0aEZpbHRlckdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlMuRXhlY3V0aW9uUmVzdWx0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GaWxlVXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLklPOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5SYXdQYXJzZVV0aWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuVGVtcG9yYXJ5QnVmZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5UZW1wb3JhcnlCdWZmZXIuTG9jYWxGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pby5CaW5hcnlEZWx0YUlucHV0U3RyZWFtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pby5CaW5hcnlIdW5rSW5wdXRTdHJlYW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvLkVvbFN0cmVhbVR5cGVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTE7CiAKIC8qKgogICogQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4LgpAQCAtNDUsNyArODQsNyBAQCBwdWJsaWMgY2xhc3MgQXBwbHlDb21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxBcHBseVJlc3VsdD4gewogCXByaXZhdGUgSW5wdXRTdHJlYW0gaW47CiAKIAkvKioKLQkgKiBDb25zdHJ1Y3RzIHRoZSBjb21tYW5kIGlmIHRoZSBwYXRjaCBpcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBpbmRleC4KKwkgKiBDb25zdHJ1Y3RzIHRoZSBjb21tYW5kLgogCSAqCiAJICogQHBhcmFtIHJlcG8KIAkgKi8KQEAgLTc5LDYgKzExOCw3IEBAIHB1YmxpYyBBcHBseUNvbW1hbmQgc2V0UGF0Y2goSW5wdXRTdHJlYW0gaW4pIHsKIAlwdWJsaWMgQXBwbHlSZXN1bHQgY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIFBhdGNoRm9ybWF0RXhjZXB0aW9uLAogCQkJUGF0Y2hBcHBseUV4Y2VwdGlvbiB7CiAJCWNoZWNrQ2FsbGFibGUoKTsKKwkJc2V0Q2FsbGFibGUoZmFsc2UpOwogCQlBcHBseVJlc3VsdCByID0gbmV3IEFwcGx5UmVzdWx0KCk7CiAJCXRyeSB7CiAJCQlmaW5hbCBQYXRjaCBwID0gbmV3IFBhdGNoKCk7CkBAIC04NywxOSArMTI3LDIyIEBAIHB1YmxpYyBBcHBseVJlc3VsdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgUGF0Y2hGb3JtYXRFeGNlcHRpb24sCiAJCQl9IGZpbmFsbHkgewogCQkJCWluLmNsb3NlKCk7CiAJCQl9Ci0JCQlpZiAoIXAuZ2V0RXJyb3JzKCkuaXNFbXB0eSgpKQorCQkJaWYgKCFwLmdldEVycm9ycygpLmlzRW1wdHkoKSkgewogCQkJCXRocm93IG5ldyBQYXRjaEZvcm1hdEV4Y2VwdGlvbihwLmdldEVycm9ycygpKTsKKwkJCX0KKwkJCVJlcG9zaXRvcnkgcmVwb3NpdG9yeSA9IGdldFJlcG9zaXRvcnkoKTsKKwkJCURpckNhY2hlIGNhY2hlID0gcmVwb3NpdG9yeS5yZWFkRGlyQ2FjaGUoKTsKIAkJCWZvciAoRmlsZUhlYWRlciBmaCA6IHAuZ2V0RmlsZXMoKSkgewogCQkJCUNoYW5nZVR5cGUgdHlwZSA9IGZoLmdldENoYW5nZVR5cGUoKTsKIAkJCQlGaWxlIGYgPSBudWxsOwogCQkJCXN3aXRjaCAodHlwZSkgewogCQkJCWNhc2UgQUREOgogCQkJCQlmID0gZ2V0RmlsZShmaC5nZXROZXdQYXRoKCksIHRydWUpOwotCQkJCQlhcHBseShmLCBmaCk7CisJCQkJCWFwcGx5KHJlcG9zaXRvcnksIGZoLmdldE5ld1BhdGgoKSwgY2FjaGUsIGYsIGZoKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBNT0RJRlk6CiAJCQkJCWYgPSBnZXRGaWxlKGZoLmdldE9sZFBhdGgoKSwgZmFsc2UpOwotCQkJCQlhcHBseShmLCBmaCk7CisJCQkJCWFwcGx5KHJlcG9zaXRvcnksIGZoLmdldE9sZFBhdGgoKSwgY2FjaGUsIGYsIGZoKTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSBERUxFVEU6CiAJCQkJCWYgPSBnZXRGaWxlKGZoLmdldE9sZFBhdGgoKSwgZmFsc2UpOwpAQCAtMTE4LDE0ICsxNjEsMTQgQEAgcHVibGljIEFwcGx5UmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBQYXRjaEZvcm1hdEV4Y2VwdGlvbiwKIAkJCQkJCXRocm93IG5ldyBQYXRjaEFwcGx5RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAogCQkJCQkJCQlKR2l0VGV4dC5nZXQoKS5yZW5hbWVGaWxlRmFpbGVkLCBmLCBkZXN0KSwgZSk7CiAJCQkJCX0KLQkJCQkJYXBwbHkoZGVzdCwgZmgpOworCQkJCQlhcHBseShyZXBvc2l0b3J5LCBmaC5nZXRPbGRQYXRoKCksIGNhY2hlLCBkZXN0LCBmaCk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgQ09QWToKIAkJCQkJZiA9IGdldEZpbGUoZmguZ2V0T2xkUGF0aCgpLCBmYWxzZSk7CiAJCQkJCUZpbGUgdGFyZ2V0ID0gZ2V0RmlsZShmaC5nZXROZXdQYXRoKCksIGZhbHNlKTsKIAkJCQkJRmlsZVV0aWxzLm1rZGlycyh0YXJnZXQuZ2V0UGFyZW50RmlsZSgpLCB0cnVlKTsKIAkJCQkJRmlsZXMuY29weShmLnRvUGF0aCgpLCB0YXJnZXQudG9QYXRoKCkpOwotCQkJCQlhcHBseSh0YXJnZXQsIGZoKTsKKwkJCQkJYXBwbHkocmVwb3NpdG9yeSwgZmguZ2V0T2xkUGF0aCgpLCBjYWNoZSwgdGFyZ2V0LCBmaCk7CiAJCQkJfQogCQkJCXIuYWRkVXBkYXRlZEZpbGUoZik7CiAJCQl9CkBAIC0xMzMsMTQgKzE3NiwxMyBAQCBwdWJsaWMgQXBwbHlSZXN1bHQgY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIFBhdGNoRm9ybWF0RXhjZXB0aW9uLAogCQkJdGhyb3cgbmV3IFBhdGNoQXBwbHlFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCiAJCQkJCUpHaXRUZXh0LmdldCgpLnBhdGNoQXBwbHlFeGNlcHRpb24sIGUuZ2V0TWVzc2FnZSgpKSwgZSk7CiAJCX0KLQkJc2V0Q2FsbGFibGUoZmFsc2UpOwogCQlyZXR1cm4gcjsKIAl9CiAKIAlwcml2YXRlIEZpbGUgZ2V0RmlsZShTdHJpbmcgcGF0aCwgYm9vbGVhbiBjcmVhdGUpCiAJCQl0aHJvd3MgUGF0Y2hBcHBseUV4Y2VwdGlvbiB7CiAJCUZpbGUgZiA9IG5ldyBGaWxlKGdldFJlcG9zaXRvcnkoKS5nZXRXb3JrVHJlZSgpLCBwYXRoKTsKLQkJaWYgKGNyZWF0ZSkKKwkJaWYgKGNyZWF0ZSkgewogCQkJdHJ5IHsKIAkJCQlGaWxlIHBhcmVudCA9IGYuZ2V0UGFyZW50RmlsZSgpOwogCQkJCUZpbGVVdGlscy5ta2RpcnMocGFyZW50LCB0cnVlKTsKQEAgLTE0OSwyMiArMTkxLDM2NiBAQCBwcml2YXRlIEZpbGUgZ2V0RmlsZShTdHJpbmcgcGF0aCwgYm9vbGVhbiBjcmVhdGUpCiAJCQkJdGhyb3cgbmV3IFBhdGNoQXBwbHlFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCiAJCQkJCQlKR2l0VGV4dC5nZXQoKS5jcmVhdGVOZXdGaWxlRmFpbGVkLCBmKSwgZSk7CiAJCQl9CisJCX0KIAkJcmV0dXJuIGY7CiAJfQogCisJcHJpdmF0ZSB2b2lkIGFwcGx5KFJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU3RyaW5nIHBhdGgsIERpckNhY2hlIGNhY2hlLAorCQkJRmlsZSBmLCBGaWxlSGVhZGVyIGZoKSB0aHJvd3MgSU9FeGNlcHRpb24sIFBhdGNoQXBwbHlFeGNlcHRpb24geworCQlpZiAoUGF0Y2hUeXBlLkJJTkFSWS5lcXVhbHMoZmguZ2V0UGF0Y2hUeXBlKCkpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJYm9vbGVhbiBjb252ZXJ0Q3JMZiA9IG5lZWRzQ3JMZkNvbnZlcnNpb24oZiwgZmgpOworCQkvLyBVc2UgYSBUcmVlV2FsayB3aXRoIGEgRGlyQ2FjaGVJdGVyYXRvciB0byBwaWNrIHVwIHRoZSBjb3JyZWN0CisJCS8vIGNsZWFuL3NtdWRnZSBmaWx0ZXJzLiBDUi1MRiBoYW5kbGluZyBpcyBjb21wbGV0ZWx5IGRldGVybWluZWQgYnkKKwkJLy8gd2hldGhlciB0aGUgZmlsZSBvciB0aGUgcGF0Y2ggaGF2ZSBDUi1MRiBsaW5lIGVuZGluZ3MuCisJCXRyeSAoVHJlZVdhbGsgd2FsayA9IG5ldyBUcmVlV2FsayhyZXBvc2l0b3J5KSkgeworCQkJd2Fsay5zZXRPcGVyYXRpb25UeXBlKE9wZXJhdGlvblR5cGUuQ0hFQ0tJTl9PUCk7CisJCQlGaWxlVHJlZUl0ZXJhdG9yIGZpbGVzID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IocmVwb3NpdG9yeSk7CisJCQlpbnQgZmlsZUlkeCA9IHdhbGsuYWRkVHJlZShmaWxlcyk7CisJCQlpbnQgY2FjaGVJZHggPSB3YWxrLmFkZFRyZWUobmV3IERpckNhY2hlSXRlcmF0b3IoY2FjaGUpKTsKKwkJCWZpbGVzLnNldERpckNhY2hlSXRlcmF0b3Iod2FsaywgY2FjaGVJZHgpOworCQkJd2Fsay5zZXRGaWx0ZXIoQW5kVHJlZUZpbHRlci5jcmVhdGUoCisJCQkJCVBhdGhGaWx0ZXJHcm91cC5jcmVhdGVGcm9tU3RyaW5ncyhwYXRoKSwKKwkJCQkJbmV3IE5vdElnbm9yZWRGaWx0ZXIoZmlsZUlkeCkpKTsKKwkJCXdhbGsuc2V0UmVjdXJzaXZlKHRydWUpOworCQkJaWYgKHdhbGsubmV4dCgpKSB7CisJCQkJLy8gSWYgdGhlIGZpbGUgb24gZGlzayBoYXMgbm8gbmV3bGluZSBjaGFyYWN0ZXJzLCBjb252ZXJ0Q3JMZgorCQkJCS8vIHdpbGwgYmUgZmFsc2UuIEluIHRoYXQgY2FzZSB3ZSB3YW50IHRvIGhvbm9yIHRoZSBub3JtYWwgZ2l0CisJCQkJLy8gc2V0dGluZ3MuCisJCQkJRW9sU3RyZWFtVHlwZSBzdHJlYW1UeXBlID0gY29udmVydENyTGYgPyBFb2xTdHJlYW1UeXBlLlRFWFRfQ1JMRgorCQkJCQkJOiB3YWxrLmdldEVvbFN0cmVhbVR5cGUoT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUCk7CisJCQkJU3RyaW5nIGNvbW1hbmQgPSB3YWxrLmdldEZpbHRlckNvbW1hbmQoCisJCQkJCQlDb25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9TTVVER0UpOworCQkJCUNoZWNrb3V0TWV0YWRhdGEgY2hlY2tPdXQgPSBuZXcgQ2hlY2tvdXRNZXRhZGF0YShzdHJlYW1UeXBlLCBjb21tYW5kKTsKKwkJCQlGaWxlVHJlZUl0ZXJhdG9yIGZpbGUgPSB3YWxrLmdldFRyZWUoZmlsZUlkeCwKKwkJCQkJCUZpbGVUcmVlSXRlcmF0b3IuY2xhc3MpOworCQkJCWlmIChmaWxlICE9IG51bGwpIHsKKwkJCQkJaWYgKFBhdGNoVHlwZS5HSVRfQklOQVJZLmVxdWFscyhmaC5nZXRQYXRjaFR5cGUoKSkpIHsKKwkJCQkJCWFwcGx5QmluYXJ5KHJlcG9zaXRvcnksIHBhdGgsIGYsIGZoLAorCQkJCQkJCQlmaWxlOjpvcGVuRW50cnlTdHJlYW0sIGZpbGUuZ2V0RW50cnlPYmplY3RJZCgpLAorCQkJCQkJCQljaGVja091dCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb21tYW5kID0gd2Fsay5nZXRGaWx0ZXJDb21tYW5kKAorCQkJCQkJCQlDb25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9DTEVBTik7CisJCQkJCQlSYXdUZXh0IHJhdzsKKwkJCQkJCS8vIENhbid0IHVzZSBmaWxlLm9wZW5FbnRyeVN0cmVhbSgpIGFzIGl0IHdvdWxkIGRvIENSLUxGCisJCQkJCQkvLyBjb252ZXJzaW9uIGFzIHVzdWFsLCBub3QgYXMgd2FudGVkIGJ5IHVzLgorCQkJCQkJdHJ5IChJbnB1dFN0cmVhbSBpbnB1dCA9IGZpbHRlckNsZWFuKHJlcG9zaXRvcnksIHBhdGgsCisJCQkJCQkJCW5ldyBGaWxlSW5wdXRTdHJlYW0oZiksIGNvbnZlcnRDckxmLCBjb21tYW5kKSkgeworCQkJCQkJCXJhdyA9IG5ldyBSYXdUZXh0KAorCQkJCQkJCQkJSU8ucmVhZFdob2xlU3RyZWFtKGlucHV0LCAwKS5hcnJheSgpKTsKKwkJCQkJCX0KKwkJCQkJCWFwcGx5VGV4dChyZXBvc2l0b3J5LCBwYXRoLCByYXcsIGYsIGZoLCBjaGVja091dCk7CisJCQkJCX0KKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfQorCQkvLyBGaWxlIGlnbm9yZWQ/CisJCVJhd1RleHQgcmF3OworCQlDaGVja291dE1ldGFkYXRhIGNoZWNrT3V0OworCQlpZiAoUGF0Y2hUeXBlLkdJVF9CSU5BUlkuZXF1YWxzKGZoLmdldFBhdGNoVHlwZSgpKSkgeworCQkJY2hlY2tPdXQgPSBuZXcgQ2hlY2tvdXRNZXRhZGF0YShFb2xTdHJlYW1UeXBlLkRJUkVDVCwgbnVsbCk7CisJCQlhcHBseUJpbmFyeShyZXBvc2l0b3J5LCBwYXRoLCBmLCBmaCwgKCkgLT4gbmV3IEZpbGVJbnB1dFN0cmVhbShmKSwKKwkJCQkJbnVsbCwgY2hlY2tPdXQpOworCQl9IGVsc2UgeworCQkJaWYgKGNvbnZlcnRDckxmKSB7CisJCQkJdHJ5IChJbnB1dFN0cmVhbSBpbnB1dCA9IEVvbFN0cmVhbVR5cGVVdGlsLndyYXBJbnB1dFN0cmVhbSgKKwkJCQkJCW5ldyBGaWxlSW5wdXRTdHJlYW0oZiksIEVvbFN0cmVhbVR5cGUuVEVYVF9MRikpIHsKKwkJCQkJcmF3ID0gbmV3IFJhd1RleHQoSU8ucmVhZFdob2xlU3RyZWFtKGlucHV0LCAwKS5hcnJheSgpKTsKKwkJCQl9CisJCQkJY2hlY2tPdXQgPSBuZXcgQ2hlY2tvdXRNZXRhZGF0YShFb2xTdHJlYW1UeXBlLlRFWFRfQ1JMRiwgbnVsbCk7CisJCQl9IGVsc2UgeworCQkJCXJhdyA9IG5ldyBSYXdUZXh0KGYpOworCQkJCWNoZWNrT3V0ID0gbmV3IENoZWNrb3V0TWV0YWRhdGEoRW9sU3RyZWFtVHlwZS5ESVJFQ1QsIG51bGwpOworCQkJfQorCQkJYXBwbHlUZXh0KHJlcG9zaXRvcnksIHBhdGgsIHJhdywgZiwgZmgsIGNoZWNrT3V0KTsKKwkJfQorCX0KKworCXByaXZhdGUgYm9vbGVhbiBuZWVkc0NyTGZDb252ZXJzaW9uKEZpbGUgZiwgRmlsZUhlYWRlciBmaWxlSGVhZGVyKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKFBhdGNoVHlwZS5HSVRfQklOQVJZLmVxdWFscyhmaWxlSGVhZGVyLmdldFBhdGNoVHlwZSgpKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCWlmICghaGFzQ3JMZihmaWxlSGVhZGVyKSkgeworCQkJdHJ5IChJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZikpIHsKKwkJCQlyZXR1cm4gUmF3VGV4dC5pc0NyTGZUZXh0KGlucHV0KTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBoYXNDckxmKEZpbGVIZWFkZXIgZmlsZUhlYWRlcikgeworCQlpZiAoUGF0Y2hUeXBlLkdJVF9CSU5BUlkuZXF1YWxzKGZpbGVIZWFkZXIuZ2V0UGF0Y2hUeXBlKCkpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJZm9yIChIdW5rSGVhZGVyIGhlYWRlciA6IGZpbGVIZWFkZXIuZ2V0SHVua3MoKSkgeworCQkJYnl0ZVtdIGJ1ZiA9IGhlYWRlci5nZXRCdWZmZXIoKTsKKwkJCWludCBodW5rRW5kID0gaGVhZGVyLmdldEVuZE9mZnNldCgpOworCQkJaW50IGxpbmVTdGFydCA9IGhlYWRlci5nZXRTdGFydE9mZnNldCgpOworCQkJd2hpbGUgKGxpbmVTdGFydCA8IGh1bmtFbmQpIHsKKwkJCQlpbnQgbmV4dExpbmVTdGFydCA9IFJhd1BhcnNlVXRpbHMubmV4dExGKGJ1ZiwgbGluZVN0YXJ0KTsKKwkJCQlpZiAobmV4dExpbmVTdGFydCA+IGh1bmtFbmQpIHsKKwkJCQkJbmV4dExpbmVTdGFydCA9IGh1bmtFbmQ7CisJCQkJfQorCQkJCWlmIChuZXh0TGluZVN0YXJ0IDw9IGxpbmVTdGFydCkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKG5leHRMaW5lU3RhcnQgLSBsaW5lU3RhcnQgPiAxKSB7CisJCQkJCWNoYXIgZmlyc3QgPSAoY2hhcikgKGJ1ZltsaW5lU3RhcnRdICYgMHhGRik7CisJCQkJCWlmIChmaXJzdCA9PSAnICcgfHwgZmlyc3QgPT0gJy0nKSB7CisJCQkJCQkvLyBJdCdzIGFuIG9sZCBsaW5lLiBEb2VzIGl0IGVuZCBpbiBDUi1MRj8KKwkJCQkJCWlmIChidWZbbmV4dExpbmVTdGFydCAtIDJdID09ICdccicpIHsKKwkJCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlsaW5lU3RhcnQgPSBuZXh0TGluZVN0YXJ0OworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcml2YXRlIElucHV0U3RyZWFtIGZpbHRlckNsZWFuKFJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU3RyaW5nIHBhdGgsCisJCQlJbnB1dFN0cmVhbSBmcm9tRmlsZSwgYm9vbGVhbiBjb252ZXJ0Q3JMZiwgU3RyaW5nIGZpbHRlckNvbW1hbmQpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlJbnB1dFN0cmVhbSBpbnB1dCA9IGZyb21GaWxlOworCQlpZiAoY29udmVydENyTGYpIHsKKwkJCWlucHV0ID0gRW9sU3RyZWFtVHlwZVV0aWwud3JhcElucHV0U3RyZWFtKGlucHV0LAorCQkJCQlFb2xTdHJlYW1UeXBlLlRFWFRfTEYpOworCQl9CisJCWlmIChTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKGZpbHRlckNvbW1hbmQpKSB7CisJCQlyZXR1cm4gaW5wdXQ7CisJCX0KKwkJaWYgKEZpbHRlckNvbW1hbmRSZWdpc3RyeS5pc1JlZ2lzdGVyZWQoZmlsdGVyQ29tbWFuZCkpIHsKKwkJCUxvY2FsRmlsZSBidWZmZXIgPSBuZXcgVGVtcG9yYXJ5QnVmZmVyLkxvY2FsRmlsZShudWxsKTsKKwkJCUZpbHRlckNvbW1hbmQgY29tbWFuZCA9IEZpbHRlckNvbW1hbmRSZWdpc3RyeS5jcmVhdGVGaWx0ZXJDb21tYW5kKAorCQkJCQlmaWx0ZXJDb21tYW5kLCByZXBvc2l0b3J5LCBpbnB1dCwgYnVmZmVyKTsKKwkJCXdoaWxlIChjb21tYW5kLnJ1bigpICE9IC0xKSB7CisJCQkJLy8gbG9vcCBhcyBsb25nIGFzIGNvbW1hbmQucnVuKCkgdGVsbHMgdGhlcmUgaXMgd29yayB0byBkbworCQkJfQorCQkJcmV0dXJuIGJ1ZmZlci5vcGVuSW5wdXRTdHJlYW1XaXRoQXV0b0Rlc3Ryb3koKTsKKwkJfQorCQlGUyBmcyA9IHJlcG9zaXRvcnkuZ2V0RlMoKTsKKwkJUHJvY2Vzc0J1aWxkZXIgZmlsdGVyUHJvY2Vzc0J1aWxkZXIgPSBmcy5ydW5JblNoZWxsKGZpbHRlckNvbW1hbmQsCisJCQkJbmV3IFN0cmluZ1swXSk7CisJCWZpbHRlclByb2Nlc3NCdWlsZGVyLmRpcmVjdG9yeShyZXBvc2l0b3J5LmdldFdvcmtUcmVlKCkpOworCQlmaWx0ZXJQcm9jZXNzQnVpbGRlci5lbnZpcm9ubWVudCgpLnB1dChDb25zdGFudHMuR0lUX0RJUl9LRVksCisJCQkJcmVwb3NpdG9yeS5nZXREaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgoKSk7CisJCUV4ZWN1dGlvblJlc3VsdCByZXN1bHQ7CisJCXRyeSB7CisJCQlyZXN1bHQgPSBmcy5leGVjdXRlKGZpbHRlclByb2Nlc3NCdWlsZGVyLCBpbik7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKAorCQkJCQluZXcgRmlsdGVyRmFpbGVkRXhjZXB0aW9uKGUsIGZpbHRlckNvbW1hbmQsIHBhdGgpKTsKKwkJfQorCQlpbnQgcmMgPSByZXN1bHQuZ2V0UmMoKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihuZXcgRmlsdGVyRmFpbGVkRXhjZXB0aW9uKHJjLCBmaWx0ZXJDb21tYW5kLAorCQkJCQlwYXRoLCByZXN1bHQuZ2V0U3Rkb3V0KCkudG9CeXRlQXJyYXkoNDA5NiksIFJhd1BhcnNlVXRpbHMKKwkJCQkJCQkuZGVjb2RlKHJlc3VsdC5nZXRTdGRlcnIoKS50b0J5dGVBcnJheSg0MDk2KSkpKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0LmdldFN0ZG91dCgpLm9wZW5JbnB1dFN0cmVhbVdpdGhBdXRvRGVzdHJveSgpOworCX0KKwogCS8qKgotCSAqIEBwYXJhbSBmCi0JICogQHBhcmFtIGZoCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUGF0Y2hBcHBseUV4Y2VwdGlvbgorCSAqIFNvbWV0aGluZyB0aGF0IGNhbiBzdXBwbHkgYW4ge0BsaW5rIElucHV0U3RyZWFtfS4KIAkgKi8KLQlwcml2YXRlIHZvaWQgYXBwbHkoRmlsZSBmLCBGaWxlSGVhZGVyIGZoKQorCXByaXZhdGUgaW50ZXJmYWNlIFN0cmVhbVN1cHBsaWVyIHsKKwkJSW5wdXRTdHJlYW0gbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbjsKKwl9CisKKwkvKioKKwkgKiBXZSB3cml0ZSB0aGUgcGF0Y2ggcmVzdWx0IHRvIGEge0BsaW5rIFRlbXBvcmFyeUJ1ZmZlcn0gYW5kIHRoZW4gdXNlCisJICoge0BsaW5rIERpckNhY2hlQ2hlY2tvdXR9LmdldENvbnRlbnQoKSB0byBydW4gdGhlIHJlc3VsdCB0aHJvdWdoIHRoZSBDUi1MRgorCSAqIGFuZCBzbXVkZ2UgZmlsdGVycy4gRGlyQ2FjaGVDaGVja291dCBuZWVkcyBhbiBPYmplY3RMb2FkZXIsIG5vdCBhCisJICogVGVtcG9yYXJ5QnVmZmVyLCBzbyB0aGlzIGNsYXNzIGJyaWRnZXMgYmV0d2VlbiB0aGUgdHdvLCBtYWtpbmcgYW55IFN0cmVhbQorCSAqIHByb3ZpZGVkIGJ5IGEge0BsaW5rIFN0cmVhbVN1cHBsaWVyfSBsb29rIGxpa2UgYW4gb3JkaW5hcnkgZ2l0IGJsb2IgdG8KKwkgKiBEaXJDYWNoZUNoZWNrb3V0LgorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFN0cmVhbUxvYWRlciBleHRlbmRzIE9iamVjdExvYWRlciB7CisKKwkJcHJpdmF0ZSBTdHJlYW1TdXBwbGllciBkYXRhOworCisJCXByaXZhdGUgbG9uZyBzaXplOworCisJCVN0cmVhbUxvYWRlcihTdHJlYW1TdXBwbGllciBkYXRhLCBsb25nIGxlbmd0aCkgeworCQkJdGhpcy5kYXRhID0gZGF0YTsKKwkJCXRoaXMuc2l6ZSA9IGxlbmd0aDsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgaW50IGdldFR5cGUoKSB7CisJCQlyZXR1cm4gQ29uc3RhbnRzLk9CSl9CTE9COworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBsb25nIGdldFNpemUoKSB7CisJCQlyZXR1cm4gc2l6ZTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBpc0xhcmdlKCkgeworCQkJcmV0dXJuIHRydWU7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJ5dGVbXSBnZXRDYWNoZWRCeXRlcygpIHRocm93cyBMYXJnZU9iamVjdEV4Y2VwdGlvbiB7CisJCQl0aHJvdyBuZXcgTGFyZ2VPYmplY3RFeGNlcHRpb24oKTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgT2JqZWN0U3RyZWFtIG9wZW5TdHJlYW0oKQorCQkJCXRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCQlyZXR1cm4gbmV3IE9iamVjdFN0cmVhbS5GaWx0ZXIoZ2V0VHlwZSgpLCBnZXRTaXplKCksCisJCQkJCW5ldyBCdWZmZXJlZElucHV0U3RyZWFtKGRhdGEubG9hZCgpKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgaW5pdEhhc2goU0hBMSBoYXNoLCBsb25nIHNpemUpIHsKKwkJaGFzaC51cGRhdGUoQ29uc3RhbnRzLmVuY29kZWRUeXBlU3RyaW5nKENvbnN0YW50cy5PQkpfQkxPQikpOworCQloYXNoLnVwZGF0ZSgoYnl0ZSkgJyAnKTsKKwkJaGFzaC51cGRhdGUoQ29uc3RhbnRzLmVuY29kZUFTQ0lJKHNpemUpKTsKKwkJaGFzaC51cGRhdGUoKGJ5dGUpIDApOworCX0KKworCXByaXZhdGUgT2JqZWN0SWQgaGFzaChGaWxlIGYpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVNIQTEgaGFzaCA9IFNIQTEubmV3SW5zdGFuY2UoKTsKKwkJaW5pdEhhc2goaGFzaCwgZi5sZW5ndGgoKSk7CisJCXRyeSAoSW5wdXRTdHJlYW0gaW5wdXQgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGYpKSB7CisJCQlieXRlW10gYnVmID0gbmV3IGJ5dGVbODE5Ml07CisJCQlpbnQgbjsKKwkJCXdoaWxlICgobiA9IGlucHV0LnJlYWQoYnVmKSkgPj0gMCkgeworCQkJCWhhc2gudXBkYXRlKGJ1ZiwgMCwgbik7CisJCQl9CisJCX0KKwkJcmV0dXJuIGhhc2gudG9PYmplY3RJZCgpOworCX0KKworCXByaXZhdGUgdm9pZCBjaGVja09pZChPYmplY3RJZCBiYXNlSWQsIE9iamVjdElkIGlkLCBDaGFuZ2VUeXBlIHR5cGUsIEZpbGUgZiwKKwkJCVN0cmluZyBwYXRoKQorCQkJdGhyb3dzIFBhdGNoQXBwbHlFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJYm9vbGVhbiBoYXNoT2sgPSBmYWxzZTsKKwkJaWYgKGlkICE9IG51bGwpIHsKKwkJCWhhc2hPayA9IGJhc2VJZC5lcXVhbHMoaWQpOworCQkJaWYgKCFoYXNoT2sgJiYgQ2hhbmdlVHlwZS5BREQuZXF1YWxzKHR5cGUpCisJCQkJCSYmIE9iamVjdElkLnplcm9JZCgpLmVxdWFscyhiYXNlSWQpKSB7CisJCQkJLy8gV2UgY3JlYXRlIHRoZSBmaWxlIGZpcnN0LiBUaGUgT0lEIG9mIGFuIGVtcHR5IGZpbGUgaXMgbm90IHRoZQorCQkJCS8vIHplcm8gaWQhCisJCQkJaGFzaE9rID0gQ29uc3RhbnRzLkVNUFRZX0JMT0JfSUQuZXF1YWxzKGlkKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChPYmplY3RJZC56ZXJvSWQoKS5lcXVhbHMoYmFzZUlkKSkgeworCQkJCS8vIEZpbGUgZW1wdHkgaXMgT0suCisJCQkJaGFzaE9rID0gIWYuZXhpc3RzKCkgfHwgZi5sZW5ndGgoKSA9PSAwOworCQkJfSBlbHNlIHsKKwkJCQloYXNoT2sgPSBiYXNlSWQuZXF1YWxzKGhhc2goZikpOworCQkJfQorCQl9CisJCWlmICghaGFzaE9rKSB7CisJCQl0aHJvdyBuZXcgUGF0Y2hBcHBseUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0CisJCQkJCS5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuYXBwbHlCaW5hcnlCYXNlT2lkV3JvbmcsIHBhdGgpKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBhcHBseUJpbmFyeShSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFN0cmluZyBwYXRoLCBGaWxlIGYsCisJCQlGaWxlSGVhZGVyIGZoLCBTdHJlYW1TdXBwbGllciBsb2FkZXIsIE9iamVjdElkIGlkLAorCQkJQ2hlY2tvdXRNZXRhZGF0YSBjaGVja091dCkKKwkJCXRocm93cyBQYXRjaEFwcGx5RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWlmICghZmguZ2V0T2xkSWQoKS5pc0NvbXBsZXRlKCkgfHwgIWZoLmdldE5ld0lkKCkuaXNDb21wbGV0ZSgpKSB7CisJCQl0aHJvdyBuZXcgUGF0Y2hBcHBseUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0CisJCQkJCS5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuYXBwbHlCaW5hcnlPaWRUb29TaG9ydCwgcGF0aCkpOworCQl9CisJCUJpbmFyeUh1bmsgaHVuayA9IGZoLmdldEZvcndhcmRCaW5hcnlIdW5rKCk7CisJCS8vIEEgQmluYXJ5SHVuayBoYXMgdGhlIHN0YXJ0IGF0IHRoZSAibGl0ZXJhbCIgb3IgImRlbHRhIiB0b2tlbi4gRGF0YQorCQkvLyBzdGFydHMgb24gdGhlIG5leHQgbGluZS4KKwkJaW50IHN0YXJ0ID0gUmF3UGFyc2VVdGlscy5uZXh0TEYoaHVuay5nZXRCdWZmZXIoKSwKKwkJCQlodW5rLmdldFN0YXJ0T2Zmc2V0KCkpOworCQlpbnQgbGVuZ3RoID0gaHVuay5nZXRFbmRPZmZzZXQoKSAtIHN0YXJ0OworCQlTSEExIGhhc2ggPSBTSEExLm5ld0luc3RhbmNlKCk7CisJCS8vIFdyaXRlIHRvIGEgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBmaWxlIG9ubHkgaWYgZXZlcnl0aGluZyB3YXMgZmluZQorCQlUZW1wb3JhcnlCdWZmZXIgYnVmZmVyID0gbmV3IFRlbXBvcmFyeUJ1ZmZlci5Mb2NhbEZpbGUobnVsbCk7CisJCXRyeSB7CisJCQlzd2l0Y2ggKGh1bmsuZ2V0VHlwZSgpKSB7CisJCQljYXNlIExJVEVSQUxfREVGTEFURUQ6CisJCQkJLy8gVGhpcyBqdXN0IG92ZXJ3cml0ZXMgdGhlIGZpbGUuIFdlIG5lZWQgdG8gY2hlY2sgdGhlIGhhc2ggb2YKKwkJCQkvLyB0aGUgYmFzZS4KKwkJCQljaGVja09pZChmaC5nZXRPbGRJZCgpLnRvT2JqZWN0SWQoKSwgaWQsIGZoLmdldENoYW5nZVR5cGUoKSwgZiwKKwkJCQkJCXBhdGgpOworCQkJCWluaXRIYXNoKGhhc2gsIGh1bmsuZ2V0U2l6ZSgpKTsKKwkJCQl0cnkgKE91dHB1dFN0cmVhbSBvdXQgPSBidWZmZXI7CisJCQkJCQlJbnB1dFN0cmVhbSBpbmZsYXRlZCA9IG5ldyBTSEExSW5wdXRTdHJlYW0oaGFzaCwKKwkJCQkJCQkJbmV3IEluZmxhdGVySW5wdXRTdHJlYW0oCisJCQkJCQkJCQkJbmV3IEJpbmFyeUh1bmtJbnB1dFN0cmVhbSgKKwkJCQkJCQkJCQkJCW5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKKwkJCQkJCQkJCQkJCQkJaHVuay5nZXRCdWZmZXIoKSwgc3RhcnQsCisJCQkJCQkJCQkJCQkJCWxlbmd0aCkpKSkpIHsKKwkJCQkJRGlyQ2FjaGVDaGVja291dC5nZXRDb250ZW50KHJlcG9zaXRvcnksIHBhdGgsIGNoZWNrT3V0LAorCQkJCQkJCW5ldyBTdHJlYW1Mb2FkZXIoKCkgLT4gaW5mbGF0ZWQsIGh1bmsuZ2V0U2l6ZSgpKSwKKwkJCQkJCQludWxsLCBvdXQpOworCQkJCQlpZiAoIWZoLmdldE5ld0lkKCkudG9PYmplY3RJZCgpLmVxdWFscyhoYXNoLnRvT2JqZWN0SWQoKSkpIHsKKwkJCQkJCXRocm93IG5ldyBQYXRjaEFwcGx5RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCQlKR2l0VGV4dC5nZXQoKS5hcHBseUJpbmFyeVJlc3VsdE9pZFdyb25nLAorCQkJCQkJCQlwYXRoKSk7CisJCQkJCX0KKwkJCQl9CisJCQkJdHJ5IChJbnB1dFN0cmVhbSBidWZJbiA9IGJ1ZmZlci5vcGVuSW5wdXRTdHJlYW0oKSkgeworCQkJCQlGaWxlcy5jb3B5KGJ1ZkluLCBmLnRvUGF0aCgpLAorCQkJCQkJCVN0YW5kYXJkQ29weU9wdGlvbi5SRVBMQUNFX0VYSVNUSU5HKTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIERFTFRBX0RFRkxBVEVEOgorCQkJCS8vIFVuZm9ydHVuYXRlbHkgZGVsdGEgYXBwbGljYXRpb24gbmVlZHMgcmFuZG9tIGFjY2VzcyB0byB0aGUKKwkJCQkvLyBiYXNlIHRvIGNvbnN0cnVjdCB0aGUgcmVzdWx0LgorCQkJCWJ5dGVbXSBiYXNlOworCQkJCXRyeSAoSW5wdXRTdHJlYW0gaW5wdXQgPSBsb2FkZXIubG9hZCgpKSB7CisJCQkJCWJhc2UgPSBJTy5yZWFkV2hvbGVTdHJlYW0oaW5wdXQsIDApLmFycmF5KCk7CisJCQkJfQorCQkJCS8vIEF0IGxlYXN0IHN0cmVhbSB0aGUgcmVzdWx0IQorCQkJCXRyeSAoQmluYXJ5RGVsdGFJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBCaW5hcnlEZWx0YUlucHV0U3RyZWFtKAorCQkJCQkJYmFzZSwKKwkJCQkJCW5ldyBJbmZsYXRlcklucHV0U3RyZWFtKG5ldyBCaW5hcnlIdW5rSW5wdXRTdHJlYW0oCisJCQkJCQkJCW5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShodW5rLmdldEJ1ZmZlcigpLAorCQkJCQkJCQkJCXN0YXJ0LCBsZW5ndGgpKSkpKSB7CisJCQkJCWxvbmcgZmluYWxTaXplID0gaW5wdXQuZ2V0RXhwZWN0ZWRSZXN1bHRTaXplKCk7CisJCQkJCWluaXRIYXNoKGhhc2gsIGZpbmFsU2l6ZSk7CisJCQkJCXRyeSAoT3V0cHV0U3RyZWFtIG91dCA9IGJ1ZmZlcjsKKwkJCQkJCQlTSEExSW5wdXRTdHJlYW0gaGFzaGVkID0gbmV3IFNIQTFJbnB1dFN0cmVhbShoYXNoLAorCQkJCQkJCQkJaW5wdXQpKSB7CisJCQkJCQlEaXJDYWNoZUNoZWNrb3V0LmdldENvbnRlbnQocmVwb3NpdG9yeSwgcGF0aCwgY2hlY2tPdXQsCisJCQkJCQkJCW5ldyBTdHJlYW1Mb2FkZXIoKCkgLT4gaGFzaGVkLCBmaW5hbFNpemUpLCBudWxsLAorCQkJCQkJCQlvdXQpOworCQkJCQkJaWYgKCFmaC5nZXROZXdJZCgpLnRvT2JqZWN0SWQoKQorCQkJCQkJCQkuZXF1YWxzKGhhc2gudG9PYmplY3RJZCgpKSkgeworCQkJCQkJCXRocm93IG5ldyBQYXRjaEFwcGx5RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCQkJSkdpdFRleHQuZ2V0KCkuYXBwbHlCaW5hcnlSZXN1bHRPaWRXcm9uZywKKwkJCQkJCQkJCXBhdGgpKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQl0cnkgKElucHV0U3RyZWFtIGJ1ZkluID0gYnVmZmVyLm9wZW5JbnB1dFN0cmVhbSgpKSB7CisJCQkJCUZpbGVzLmNvcHkoYnVmSW4sIGYudG9QYXRoKCksCisJCQkJCQkJU3RhbmRhcmRDb3B5T3B0aW9uLlJFUExBQ0VfRVhJU1RJTkcpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZmluYWxseSB7CisJCQlidWZmZXIuZGVzdHJveSgpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGFwcGx5VGV4dChSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFN0cmluZyBwYXRoLCBSYXdUZXh0IHJ0LAorCQkJRmlsZSBmLCBGaWxlSGVhZGVyIGZoLCBDaGVja291dE1ldGFkYXRhIGNoZWNrT3V0KQogCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBQYXRjaEFwcGx5RXhjZXB0aW9uIHsKLQkJUmF3VGV4dCBydCA9IG5ldyBSYXdUZXh0KGYpOwotCQlMaXN0PFN0cmluZz4gb2xkTGluZXMgPSBuZXcgQXJyYXlMaXN0PD4ocnQuc2l6ZSgpKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBydC5zaXplKCk7IGkrKykKLQkJCW9sZExpbmVzLmFkZChydC5nZXRTdHJpbmcoaSkpOwotCQlMaXN0PFN0cmluZz4gbmV3TGluZXMgPSBuZXcgQXJyYXlMaXN0PD4ob2xkTGluZXMpOworCQlMaXN0PEJ5dGVCdWZmZXI+IG9sZExpbmVzID0gbmV3IEFycmF5TGlzdDw+KHJ0LnNpemUoKSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgcnQuc2l6ZSgpOyBpKyspIHsKKwkJCW9sZExpbmVzLmFkZChydC5nZXRSYXdTdHJpbmcoaSkpOworCQl9CisJCUxpc3Q8Qnl0ZUJ1ZmZlcj4gbmV3TGluZXMgPSBuZXcgQXJyYXlMaXN0PD4ob2xkTGluZXMpOwogCQlpbnQgYWZ0ZXJMYXN0SHVuayA9IDA7CiAJCWludCBsaW5lTnVtYmVyU2hpZnQgPSAwOwogCQlpbnQgbGFzdEh1bmtOZXdMaW5lID0gLTE7CkBAIC0xODIsOSArNTY4LDkgQEAgcHJpdmF0ZSB2b2lkIGFwcGx5KEZpbGUgZiwgRmlsZUhlYWRlciBmaCkKIAkJCQkJYi5sZW5ndGgpOwogCQkJUmF3VGV4dCBocnQgPSBuZXcgUmF3VGV4dChiKTsKIAotCQkJTGlzdDxTdHJpbmc+IGh1bmtMaW5lcyA9IG5ldyBBcnJheUxpc3Q8PihocnQuc2l6ZSgpKTsKKwkJCUxpc3Q8Qnl0ZUJ1ZmZlcj4gaHVua0xpbmVzID0gbmV3IEFycmF5TGlzdDw+KGhydC5zaXplKCkpOwogCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBocnQuc2l6ZSgpOyBpKyspIHsKLQkJCQlodW5rTGluZXMuYWRkKGhydC5nZXRTdHJpbmcoaSkpOworCQkJCWh1bmtMaW5lcy5hZGQoaHJ0LmdldFJhd1N0cmluZyhpKSk7CiAJCQl9CiAKIAkJCWlmIChoaC5nZXROZXdTdGFydExpbmUoKSA9PSAwKSB7CkBAIC0yNTMsOCArNjM5LDEzIEBAICYmIGNhbkFwcGx5QXQoaHVua0xpbmVzLCBuZXdMaW5lcywgMCkpIHsKIAkJCWxpbmVOdW1iZXJTaGlmdCA9IGFwcGx5QXQgLSBoaC5nZXROZXdTdGFydExpbmUoKSArIDE7CiAJCQlpbnQgc3ogPSBodW5rTGluZXMuc2l6ZSgpOwogCQkJZm9yIChpbnQgaiA9IDE7IGogPCBzejsgaisrKSB7Ci0JCQkJU3RyaW5nIGh1bmtMaW5lID0gaHVua0xpbmVzLmdldChqKTsKLQkJCQlzd2l0Y2ggKGh1bmtMaW5lLmNoYXJBdCgwKSkgeworCQkJCUJ5dGVCdWZmZXIgaHVua0xpbmUgPSBodW5rTGluZXMuZ2V0KGopOworCQkJCWlmICghaHVua0xpbmUuaGFzUmVtYWluaW5nKCkpIHsKKwkJCQkJLy8gQ29tcGxldGVseSBlbXB0eSBsaW5lOyBhY2NlcHQgYXMgZW1wdHkgY29udGV4dCBsaW5lCisJCQkJCWFwcGx5QXQrKzsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN3aXRjaCAoaHVua0xpbmUuYXJyYXkoKVtodW5rTGluZS5wb3NpdGlvbigpXSkgewogCQkJCWNhc2UgJyAnOgogCQkJCQlhcHBseUF0Kys7CiAJCQkJCWJyZWFrOwpAQCAtMjYyLDcgKzY1Myw3IEBAICYmIGNhbkFwcGx5QXQoaHVua0xpbmVzLCBuZXdMaW5lcywgMCkpIHsKIAkJCQkJbmV3TGluZXMucmVtb3ZlKGFwcGx5QXQpOwogCQkJCQlicmVhazsKIAkJCQljYXNlICcrJzoKLQkJCQkJbmV3TGluZXMuYWRkKGFwcGx5QXQrKywgaHVua0xpbmUuc3Vic3RyaW5nKDEpKTsKKwkJCQkJbmV3TGluZXMuYWRkKGFwcGx5QXQrKywgc2xpY2UoaHVua0xpbmUsIDEpKTsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJYnJlYWs7CkBAIC0yNzEsMzkgKzY2Miw2NCBAQCAmJiBjYW5BcHBseUF0KGh1bmtMaW5lcywgbmV3TGluZXMsIDApKSB7CiAJCQlhZnRlckxhc3RIdW5rID0gYXBwbHlBdDsKIAkJfQogCQlpZiAoIWlzTm9OZXdsaW5lQXRFbmRPZkZpbGUoZmgpKSB7Ci0JCQluZXdMaW5lcy5hZGQoIiIpOyAvLyROT04tTkxTLTEkCisJCQluZXdMaW5lcy5hZGQobnVsbCk7CiAJCX0KIAkJaWYgKCFydC5pc01pc3NpbmdOZXdsaW5lQXRFbmQoKSkgewotCQkJb2xkTGluZXMuYWRkKCIiKTsgLy8kTk9OLU5MUy0xJAorCQkJb2xkTGluZXMuYWRkKG51bGwpOwogCQl9Ci0JCWlmICghaXNDaGFuZ2VkKG9sZExpbmVzLCBuZXdMaW5lcykpIHsKLQkJCXJldHVybjsgLy8gRG9uJ3QgdG91Y2ggdGhlIGZpbGUKKwkJaWYgKG9sZExpbmVzLmVxdWFscyhuZXdMaW5lcykpIHsKKwkJCXJldHVybjsgLy8gVW5jaGFuZ2VkOyBkb24ndCB0b3VjaCB0aGUgZmlsZQogCQl9Ci0JCXRyeSAoV3JpdGVyIGZ3ID0gRmlsZXMubmV3QnVmZmVyZWRXcml0ZXIoZi50b1BhdGgoKSkpIHsKLQkJCWZvciAoSXRlcmF0b3I8U3RyaW5nPiBsID0gbmV3TGluZXMuaXRlcmF0b3IoKTsgbC5oYXNOZXh0KCk7KSB7Ci0JCQkJZncud3JpdGUobC5uZXh0KCkpOwotCQkJCWlmIChsLmhhc05leHQoKSkgewotCQkJCQkvLyBEb24ndCBib3RoZXIgaGFuZGxpbmcgbGluZSBlbmRpbmdzIC0gaWYgaXQgd2FzIFdpbmRvd3MsCi0JCQkJCS8vIHRoZSBcciBpcyBzdGlsbCB0aGVyZSEKLQkJCQkJZncud3JpdGUoJ1xuJyk7CisKKwkJVGVtcG9yYXJ5QnVmZmVyIGJ1ZmZlciA9IG5ldyBUZW1wb3JhcnlCdWZmZXIuTG9jYWxGaWxlKG51bGwpOworCQl0cnkgeworCQkJdHJ5IChPdXRwdXRTdHJlYW0gb3V0ID0gYnVmZmVyKSB7CisJCQkJZm9yIChJdGVyYXRvcjxCeXRlQnVmZmVyPiBsID0gbmV3TGluZXMuaXRlcmF0b3IoKTsgbAorCQkJCQkJLmhhc05leHQoKTspIHsKKwkJCQkJQnl0ZUJ1ZmZlciBsaW5lID0gbC5uZXh0KCk7CisJCQkJCWlmIChsaW5lID09IG51bGwpIHsKKwkJCQkJCS8vIE11c3QgYmUgdGhlIG1hcmtlciBmb3IgdGhlIGZpbmFsIG5ld2xpbmUKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCW91dC53cml0ZShsaW5lLmFycmF5KCksIGxpbmUucG9zaXRpb24oKSwgbGluZS5yZW1haW5pbmcoKSk7CisJCQkJCWlmIChsLmhhc05leHQoKSkgeworCQkJCQkJb3V0LndyaXRlKCdcbicpOworCQkJCQl9CiAJCQkJfQogCQkJfQorCQkJdHJ5IChPdXRwdXRTdHJlYW0gb3V0cHV0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZikpIHsKKwkJCQlEaXJDYWNoZUNoZWNrb3V0LmdldENvbnRlbnQocmVwb3NpdG9yeSwgcGF0aCwgY2hlY2tPdXQsCisJCQkJCQluZXcgU3RyZWFtTG9hZGVyKGJ1ZmZlcjo6b3BlbklucHV0U3RyZWFtLAorCQkJCQkJCQlidWZmZXIubGVuZ3RoKCkpLAorCQkJCQkJbnVsbCwgb3V0cHV0KTsKKwkJCX0KKwkJfSBmaW5hbGx5IHsKKwkJCWJ1ZmZlci5kZXN0cm95KCk7CiAJCX0KLQkJZ2V0UmVwb3NpdG9yeSgpLmdldEZTKCkuc2V0RXhlY3V0ZShmLCBmaC5nZXROZXdNb2RlKCkgPT0gRmlsZU1vZGUuRVhFQ1VUQUJMRV9GSUxFKTsKKwkJcmVwb3NpdG9yeS5nZXRGUygpLnNldEV4ZWN1dGUoZiwKKwkJCQlmaC5nZXROZXdNb2RlKCkgPT0gRmlsZU1vZGUuRVhFQ1VUQUJMRV9GSUxFKTsKIAl9CiAKLQlwcml2YXRlIGJvb2xlYW4gY2FuQXBwbHlBdChMaXN0PFN0cmluZz4gaHVua0xpbmVzLCBMaXN0PFN0cmluZz4gbmV3TGluZXMsCi0JCQlpbnQgbGluZSkgeworCXByaXZhdGUgYm9vbGVhbiBjYW5BcHBseUF0KExpc3Q8Qnl0ZUJ1ZmZlcj4gaHVua0xpbmVzLAorCQkJTGlzdDxCeXRlQnVmZmVyPiBuZXdMaW5lcywgaW50IGxpbmUpIHsKIAkJaW50IHN6ID0gaHVua0xpbmVzLnNpemUoKTsKIAkJaW50IGxpbWl0ID0gbmV3TGluZXMuc2l6ZSgpOwogCQlpbnQgcG9zID0gbGluZTsKIAkJZm9yIChpbnQgaiA9IDE7IGogPCBzejsgaisrKSB7Ci0JCQlTdHJpbmcgaHVua0xpbmUgPSBodW5rTGluZXMuZ2V0KGopOwotCQkJc3dpdGNoIChodW5rTGluZS5jaGFyQXQoMCkpIHsKKwkJCUJ5dGVCdWZmZXIgaHVua0xpbmUgPSBodW5rTGluZXMuZ2V0KGopOworCQkJaWYgKCFodW5rTGluZS5oYXNSZW1haW5pbmcoKSkgeworCQkJCS8vIEVtcHR5IGxpbmUuIEFjY2VwdCBhcyBlbXB0eSBjb250ZXh0IGxpbmUuCisJCQkJaWYgKHBvcyA+PSBsaW1pdCB8fCBuZXdMaW5lcy5nZXQocG9zKS5oYXNSZW1haW5pbmcoKSkgeworCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJfQorCQkJCXBvcysrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoIChodW5rTGluZS5hcnJheSgpW2h1bmtMaW5lLnBvc2l0aW9uKCldKSB7CiAJCQljYXNlICcgJzoKIAkJCWNhc2UgJy0nOgogCQkJCWlmIChwb3MgPj0gbGltaXQKLQkJCQkJCXx8ICFuZXdMaW5lcy5nZXQocG9zKS5lcXVhbHMoaHVua0xpbmUuc3Vic3RyaW5nKDEpKSkgeworCQkJCQkJfHwgIW5ld0xpbmVzLmdldChwb3MpLmVxdWFscyhzbGljZShodW5rTGluZSwgMSkpKSB7CiAJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQkJcG9zKys7CkBAIC0zMTUsMTMgKzczMSw5IEBAIHByaXZhdGUgYm9vbGVhbiBjYW5BcHBseUF0KExpc3Q8U3RyaW5nPiBodW5rTGluZXMsIExpc3Q8U3RyaW5nPiBuZXdMaW5lcywKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NoYW5nZWQoTGlzdDxTdHJpbmc+IG9sLCBMaXN0PFN0cmluZz4gbmwpIHsKLQkJaWYgKG9sLnNpemUoKSAhPSBubC5zaXplKCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbC5zaXplKCk7IGkrKykKLQkJCWlmICghb2wuZ2V0KGkpLmVxdWFscyhubC5nZXQoaSkpKQotCQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7CisJcHJpdmF0ZSBCeXRlQnVmZmVyIHNsaWNlKEJ5dGVCdWZmZXIgYiwgaW50IG9mZikgeworCQlpbnQgbmV3T2Zmc2V0ID0gYi5wb3NpdGlvbigpICsgb2ZmOworCQlyZXR1cm4gQnl0ZUJ1ZmZlci53cmFwKGIuYXJyYXkoKSwgbmV3T2Zmc2V0LCBiLmxpbWl0KCkgLSBuZXdPZmZzZXQpOwogCX0KIAogCXByaXZhdGUgYm9vbGVhbiBpc05vTmV3bGluZUF0RW5kT2ZGaWxlKEZpbGVIZWFkZXIgZmgpIHsKQEAgLTMzMCw4ICs3NDIsNTEgQEAgcHJpdmF0ZSBib29sZWFuIGlzTm9OZXdsaW5lQXRFbmRPZkZpbGUoRmlsZUhlYWRlciBmaCkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCUh1bmtIZWFkZXIgbGFzdEh1bmsgPSBodW5rcy5nZXQoaHVua3Muc2l6ZSgpIC0gMSk7Ci0JCVJhd1RleHQgbGhydCA9IG5ldyBSYXdUZXh0KGxhc3RIdW5rLmdldEJ1ZmZlcigpKTsKKwkJYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlW2xhc3RIdW5rLmdldEVuZE9mZnNldCgpCisJCQkJLSBsYXN0SHVuay5nZXRTdGFydE9mZnNldCgpXTsKKwkJU3lzdGVtLmFycmF5Y29weShsYXN0SHVuay5nZXRCdWZmZXIoKSwgbGFzdEh1bmsuZ2V0U3RhcnRPZmZzZXQoKSwgYnVmLAorCQkJCTAsIGJ1Zi5sZW5ndGgpOworCQlSYXdUZXh0IGxocnQgPSBuZXcgUmF3VGV4dChidWYpOwogCQlyZXR1cm4gbGhydC5nZXRTdHJpbmcobGhydC5zaXplKCkgLSAxKQogCQkJCS5lcXVhbHMoIlxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUiKTsgLy8kTk9OLU5MUy0xJAogCX0KKworCS8qKgorCSAqIEFuIHtAbGluayBJbnB1dFN0cmVhbX0gdGhhdCB1cGRhdGVzIGEge0BsaW5rIFNIQTF9IG9uIGV2ZXJ5IGJ5dGUgcmVhZC4KKwkgKiBUaGUgaGFzaCBpcyBzdXBwb3NlZCB0byBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgYmVmb3JlIHJlYWRpbmcgc3RhcnRzLgorCSAqLworCXByaXZhdGUgc3RhdGljIGNsYXNzIFNIQTFJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKKworCQlwcml2YXRlIGZpbmFsIFNIQTEgaGFzaDsKKworCQlwcml2YXRlIGZpbmFsIElucHV0U3RyZWFtIGluOworCisJCVNIQTFJbnB1dFN0cmVhbShTSEExIGhhc2gsIElucHV0U3RyZWFtIGluKSB7CisJCQl0aGlzLmhhc2ggPSBoYXNoOworCQkJdGhpcy5pbiA9IGluOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlpbnQgYiA9IGluLnJlYWQoKTsKKwkJCWlmIChiID49IDApIHsKKwkJCQloYXNoLnVwZGF0ZSgoYnl0ZSkgYik7CisJCQl9CisJCQlyZXR1cm4gYjsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlpbnQgbiA9IGluLnJlYWQoYiwgb2ZmLCBsZW4pOworCQkJaWYgKG4gPiAwKSB7CisJCQkJaGFzaC51cGRhdGUoYiwgb2ZmLCBuKTsKKwkJCX0KKwkJCXJldHVybiBuOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCWluLmNsb3NlKCk7CisJCX0KKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmQuamF2YQppbmRleCA1ZDAxNTRjLi43OTIyZjllIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLCBDaHJpc3RpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAyMSBDaHJpc3RpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTEzLDYgKzEzLDcgQEAKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkNvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkdpdEFQSUV4Y2VwdGlvbjsKQEAgLTM1LDkgKzM2LDEyIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZi5TdG9yYWdlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5Db250ZW50TWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlTWVzc2FnZUZvcm1hdHRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlU3RyYXRlZ3k7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlci5NZXJnZUZhaWx1cmVSZWFzb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLkZpbGVUcmVlSXRlcmF0b3I7CkBAIC02MSw2ICs2NSw4IEBAIHB1YmxpYyBjbGFzcyBDaGVycnlQaWNrQ29tbWFuZCBleHRlbmRzIEdpdENvbW1hbmQ8Q2hlcnJ5UGlja1Jlc3VsdD4gewogCiAJcHJpdmF0ZSBNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5ID0gTWVyZ2VTdHJhdGVneS5SRUNVUlNJVkU7CiAKKwlwcml2YXRlIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneTsKKwogCXByaXZhdGUgSW50ZWdlciBtYWlubGluZVBhcmVudE51bWJlcjsKIAogCXByaXZhdGUgYm9vbGVhbiBub0NvbW1pdCA9IGZhbHNlOwpAQCAtMTIxLDE2ICsxMjcsMzAgQEAgcHVibGljIENoZXJyeVBpY2tSZXN1bHQgY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIE5vTWVzc2FnZUV4Y2VwdGlvbiwKIAkJCQlTdHJpbmcgY2hlcnJ5UGlja05hbWUgPSBzcmNDb21taXQuZ2V0SWQoKS5hYmJyZXZpYXRlKDcpLm5hbWUoKQogCQkJCQkJKyAiICIgKyBzcmNDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCk7IC8vJE5PTi1OTFMtMSQKIAotCQkJCVJlc29sdmVNZXJnZXIgbWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIHN0cmF0ZWd5Lm5ld01lcmdlcihyZXBvKTsKLQkJCQltZXJnZXIuc2V0V29ya2luZ1RyZWVJdGVyYXRvcihuZXcgRmlsZVRyZWVJdGVyYXRvcihyZXBvKSk7Ci0JCQkJbWVyZ2VyLnNldEJhc2Uoc3JjUGFyZW50LmdldFRyZWUoKSk7Ci0JCQkJbWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7ICJCQVNFIiwgb3VyTmFtZSwgLy8kTk9OLU5MUy0xJAotCQkJCQkJY2hlcnJ5UGlja05hbWUgfSk7Ci0JCQkJaWYgKG1lcmdlci5tZXJnZShuZXdIZWFkLCBzcmNDb21taXQpKSB7Ci0JCQkJCWlmICghbWVyZ2VyLmdldE1vZGlmaWVkRmlsZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQlNZXJnZXIgbWVyZ2VyID0gc3RyYXRlZ3kubmV3TWVyZ2VyKHJlcG8pOworCQkJCW1lcmdlci5zZXRQcm9ncmVzc01vbml0b3IobW9uaXRvcik7CisJCQkJYm9vbGVhbiBub1Byb2JsZW1zOworCQkJCU1hcDxTdHJpbmcsIE1lcmdlRmFpbHVyZVJlYXNvbj4gZmFpbGluZ1BhdGhzID0gbnVsbDsKKwkJCQlMaXN0PFN0cmluZz4gdW5tZXJnZWRQYXRocyA9IG51bGw7CisJCQkJaWYgKG1lcmdlciBpbnN0YW5jZW9mIFJlc29sdmVNZXJnZXIpIHsKKwkJCQkJUmVzb2x2ZU1lcmdlciByZXNvbHZlTWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIG1lcmdlcjsKKwkJCQkJcmVzb2x2ZU1lcmdlci5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpOworCQkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbW1pdE5hbWVzKAorCQkJCQkJCW5ldyBTdHJpbmdbXSB7ICJCQVNFIiwgb3VyTmFtZSwgY2hlcnJ5UGlja05hbWUgfSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmVzb2x2ZU1lcmdlcgorCQkJCQkJCS5zZXRXb3JraW5nVHJlZUl0ZXJhdG9yKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKHJlcG8pKTsKKwkJCQkJcmVzb2x2ZU1lcmdlci5zZXRCYXNlKHNyY1BhcmVudC5nZXRUcmVlKCkpOworCQkJCQlub1Byb2JsZW1zID0gbWVyZ2VyLm1lcmdlKG5ld0hlYWQsIHNyY0NvbW1pdCk7CisJCQkJCWZhaWxpbmdQYXRocyA9IHJlc29sdmVNZXJnZXIuZ2V0RmFpbGluZ1BhdGhzKCk7CisJCQkJCXVubWVyZ2VkUGF0aHMgPSByZXNvbHZlTWVyZ2VyLmdldFVubWVyZ2VkUGF0aHMoKTsKKwkJCQkJaWYgKCFyZXNvbHZlTWVyZ2VyLmdldE1vZGlmaWVkRmlsZXMoKS5pc0VtcHR5KCkpIHsKIAkJCQkJCXJlcG8uZmlyZUV2ZW50KG5ldyBXb3JraW5nVHJlZU1vZGlmaWVkRXZlbnQoCi0JCQkJCQkJCW1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCksIG51bGwpKTsKKwkJCQkJCQkJcmVzb2x2ZU1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCksIG51bGwpKTsKIAkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCW5vUHJvYmxlbXMgPSBtZXJnZXIubWVyZ2UobmV3SGVhZCwgc3JjQ29tbWl0KTsKKwkJCQl9CisJCQkJaWYgKG5vUHJvYmxlbXMpIHsKIAkJCQkJaWYgKEFueU9iamVjdElkLmlzRXF1YWwobmV3SGVhZC5nZXRUcmVlKCkuZ2V0SWQoKSwKIAkJCQkJCQltZXJnZXIuZ2V0UmVzdWx0VHJlZUlkKCkpKSB7CiAJCQkJCQljb250aW51ZTsKQEAgLTE1MywyNCArMTczLDI2IEBAIHB1YmxpYyBDaGVycnlQaWNrUmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBOb01lc3NhZ2VFeGNlcHRpb24sCiAJCQkJCX0KIAkJCQkJY2hlcnJ5UGlja2VkUmVmcy5hZGQoc3JjKTsKIAkJCQl9IGVsc2UgewotCQkJCQlpZiAobWVyZ2VyLmZhaWxlZCgpKSB7Ci0JCQkJCQlyZXR1cm4gbmV3IENoZXJyeVBpY2tSZXN1bHQobWVyZ2VyLmdldEZhaWxpbmdQYXRocygpKTsKKwkJCQkJaWYgKGZhaWxpbmdQYXRocyAhPSBudWxsICYmICFmYWlsaW5nUGF0aHMuaXNFbXB0eSgpKSB7CisJCQkJCQlyZXR1cm4gbmV3IENoZXJyeVBpY2tSZXN1bHQoZmFpbGluZ1BhdGhzKTsKIAkJCQkJfQogCiAJCQkJCS8vIHRoZXJlIGFyZSBtZXJnZSBjb25mbGljdHMKIAotCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG5ldyBNZXJnZU1lc3NhZ2VGb3JtYXR0ZXIoKQorCQkJCQlTdHJpbmcgbWVzc2FnZTsKKwkJCQkJaWYgKHVubWVyZ2VkUGF0aHMgIT0gbnVsbCkgeworCQkJCQkJbWVzc2FnZSA9IG5ldyBNZXJnZU1lc3NhZ2VGb3JtYXR0ZXIoKQogCQkJCQkJCS5mb3JtYXRXaXRoQ29uZmxpY3RzKHNyY0NvbW1pdC5nZXRGdWxsTWVzc2FnZSgpLAotCQkJCQkJCQkJbWVyZ2VyLmdldFVubWVyZ2VkUGF0aHMoKSk7CisJCQkJCQkJCQkJdW5tZXJnZWRQYXRocyk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQltZXNzYWdlID0gc3JjQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCk7CisJCQkJCX0KIAogCQkJCQlpZiAoIW5vQ29tbWl0KSB7CiAJCQkJCQlyZXBvLndyaXRlQ2hlcnJ5UGlja0hlYWQoc3JjQ29tbWl0LmdldElkKCkpOwogCQkJCQl9CiAJCQkJCXJlcG8ud3JpdGVNZXJnZUNvbW1pdE1zZyhtZXNzYWdlKTsKIAotCQkJCQlyZXBvLmZpcmVFdmVudChuZXcgV29ya2luZ1RyZWVNb2RpZmllZEV2ZW50KAotCQkJCQkJCW1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCksIG51bGwpKTsKLQogCQkJCQlyZXR1cm4gQ2hlcnJ5UGlja1Jlc3VsdC5DT05GTElDVDsKIAkJCQl9CiAJCQl9CkBAIC0yOTEsNiArMzEzLDIyIEBAIHB1YmxpYyBDaGVycnlQaWNrQ29tbWFuZCBzZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KSB7CiAJfQogCiAJLyoqCisJICogU2V0cyB0aGUgY29udGVudCBtZXJnZSBzdHJhdGVneSB0byB1c2UgaWYgdGhlCisJICoge0BsaW5rICNzZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5KSBtZXJnZSBzdHJhdGVneX0gaXMgInJlc29sdmUiIG9yCisJICogInJlY3Vyc2l2ZSIuCisJICoKKwkgKiBAcGFyYW0gc3RyYXRlZ3kKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9IHRvIGJlIHVzZWQKKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIENoZXJyeVBpY2tDb21tYW5kIHNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KAorCQkJQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJdGhpcy5jb250ZW50U3RyYXRlZ3kgPSBzdHJhdGVneTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogU2V0IHRoZSAoMS1iYXNlZCkgcGFyZW50IG51bWJlciB0byBkaWZmIGFnYWluc3QKIAkgKgogCSAqIEBwYXJhbSBtYWlubGluZVBhcmVudE51bWJlcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQppbmRleCBkODhmNGVjLi5lZjU2ZDgwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIENocmlzdGlhbiBIYWxzdHJpY2sgPGNocmlzdGlhbi5oYWxzdHJpY2tAc2FwLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE0LCBTdGVmYW4gTGF5IDxzdGVmYW4ubGF5QHNhcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYsIExhdXJlbnQgRGVsYWlndWUgPGxhdXJlbnQuZGVsYWlndWVAb2Jlby5mcj4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCBTdGVmYW4gTGF5IDxzdGVmYW4ubGF5QHNhcC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIDIwMjEgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00NSw2ICs0NSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZS5SZXN1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VDb25maWc7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZU1lc3NhZ2VGb3JtYXR0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZVN0cmF0ZWd5OwpAQCAtNzEsNiArNzIsOCBAQCBwdWJsaWMgY2xhc3MgTWVyZ2VDb21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxNZXJnZVJlc3VsdD4gewogCiAJcHJpdmF0ZSBNZXJnZVN0cmF0ZWd5IG1lcmdlU3RyYXRlZ3kgPSBNZXJnZVN0cmF0ZWd5LlJFQ1VSU0lWRTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5OworCiAJcHJpdmF0ZSBMaXN0PFJlZj4gY29tbWl0cyA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKIAogCXByaXZhdGUgQm9vbGVhbiBzcXVhc2g7CkBAIC04NCw2ICs4NywyMCBAQCBwdWJsaWMgY2xhc3MgTWVyZ2VDb21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxNZXJnZVJlc3VsdD4gewogCXByaXZhdGUgUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFOwogCiAJLyoqCisJICogVmFsdWVzIGZvciB0aGUgIm1lcmdlLmNvbmZsaWN0U3R5bGUiIGdpdCBjb25maWcuCisJICoKKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBlbnVtIENvbmZsaWN0U3R5bGUgeworCisJCS8qKiAibWVyZ2UiIHN0eWxlOiBvbmx5IG91cnMvdGhlaXJzLiBUaGlzIGlzIHRoZSBkZWZhdWx0LiAqLworCQlNRVJHRSwKKworCQkvKiogImRpZmYzIiBzdHlsZTogb3Vycy9iYXNlL3RoZWlycy4gKi8KKwkJRElGRjMKKwl9CisKKwkvKioKIAkgKiBUaGUgbW9kZXMgYXZhaWxhYmxlIGZvciBmYXN0IGZvcndhcmQgbWVyZ2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAJICogPGNvZGU+LS1mZjwvY29kZT4sIDxjb2RlPi0tbm8tZmY8L2NvZGU+IGFuZCA8Y29kZT4tLWZmLW9ubHk8L2NvZGU+CiAJICogb3B0aW9ucyB1bmRlciA8Y29kZT5icmFuY2guJmx0O25hbWUmZ3Q7Lm1lcmdlb3B0aW9uczwvY29kZT4uCkBAIC0zMjAsNiArMzM3LDcgQEAgcHVibGljIE1lcmdlUmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBOb0hlYWRFeGNlcHRpb24sCiAJCQkJTGlzdDxTdHJpbmc+IHVubWVyZ2VkUGF0aHMgPSBudWxsOwogCQkJCWlmIChtZXJnZXIgaW5zdGFuY2VvZiBSZXNvbHZlTWVyZ2VyKSB7CiAJCQkJCVJlc29sdmVNZXJnZXIgcmVzb2x2ZU1lcmdlciA9IChSZXNvbHZlTWVyZ2VyKSBtZXJnZXI7CisJCQkJCXJlc29sdmVNZXJnZXIuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koY29udGVudFN0cmF0ZWd5KTsKIAkJCQkJcmVzb2x2ZU1lcmdlci5zZXRDb21taXROYW1lcyhuZXcgU3RyaW5nW10gewogCQkJCQkJCSJCQVNFIiwgIkhFQUQiLCByZWYuZ2V0TmFtZSgpIH0pOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKIAkJCQkJcmVzb2x2ZU1lcmdlci5zZXRXb3JraW5nVHJlZUl0ZXJhdG9yKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKHJlcG8pKTsKQEAgLTQ3Myw2ICs0OTEsMjIgQEAgcHVibGljIE1lcmdlQ29tbWFuZCBzZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5IG1lcmdlU3RyYXRlZ3kpIHsKIAl9CiAKIAkvKioKKwkgKiBTZXRzIHRoZSBjb250ZW50IG1lcmdlIHN0cmF0ZWd5IHRvIHVzZSBpZiB0aGUKKwkgKiB7QGxpbmsgI3NldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kpIG1lcmdlIHN0cmF0ZWd5fSBpcyAicmVzb2x2ZSIgb3IKKwkgKiAicmVjdXJzaXZlIi4KKwkgKgorCSAqIEBwYXJhbSBzdHJhdGVneQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBDb250ZW50TWVyZ2VTdHJhdGVneX0gdG8gYmUgdXNlZAorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgTWVyZ2VDb21tYW5kIHNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KSB7CisJCWNoZWNrQ2FsbGFibGUoKTsKKwkJdGhpcy5jb250ZW50U3RyYXRlZ3kgPSBzdHJhdGVneTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogUmVmZXJlbmNlIHRvIGEgY29tbWl0IHRvIGJlIG1lcmdlZCB3aXRoIHRoZSBjdXJyZW50IGhlYWQKIAkgKgogCSAqIEBwYXJhbSBhQ29tbWl0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmQuamF2YQppbmRleCA0NDkyNTA4Li4yODFlY2ZkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kLmphdmEKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBDaHJpc3RpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIE1hdGhpYXMgS2luemxlciA8bWF0aGlhcy5raW56bGVyQHNhcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYsIExhdXJlbnQgRGVsYWlndWUgPGxhdXJlbnQuZGVsYWlndWVAb2Jlby5mcj4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDE2LCAyMDIxIExhdXJlbnQgRGVsYWlndWUgPGxhdXJlbnQuZGVsYWlndWVAb2Jlby5mcj4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNDMsNiArNDMsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeVN0YXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlN1Ym1vZHVsZUNvbmZpZy5GZXRjaFJlY3Vyc2VTdWJtb2R1bGVzTW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrOwpAQCAtNjksNiArNzAsOCBAQCBwdWJsaWMgY2xhc3MgUHVsbENvbW1hbmQgZXh0ZW5kcyBUcmFuc3BvcnRDb21tYW5kPFB1bGxDb21tYW5kLCBQdWxsUmVzdWx0PiB7CiAKIAlwcml2YXRlIE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kgPSBNZXJnZVN0cmF0ZWd5LlJFQ1VSU0lWRTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5OworCiAJcHJpdmF0ZSBUYWdPcHQgdGFnT3B0aW9uOwogCiAJcHJpdmF0ZSBGYXN0Rm9yd2FyZE1vZGUgZmFzdEZvcndhcmRNb2RlOwpAQCAtMjc1LDggKzI3OCw3IEBAIHB1YmxpYyBQdWxsUmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLAogCQkJCQlKR2l0VGV4dC5nZXQoKS5wdWxsVGFza05hbWUpKTsKIAogCQkvLyB3ZSBjaGVjayB0aGUgdXBkYXRlcyB0byBzZWUgd2hpY2ggb2YgdGhlIHVwZGF0ZWQgYnJhbmNoZXMKLQkJLy8gY29ycmVzcG9uZHMKLQkJLy8gdG8gdGhlIHJlbW90ZSBicmFuY2ggbmFtZQorCQkvLyBjb3JyZXNwb25kcyB0byB0aGUgcmVtb3RlIGJyYW5jaCBuYW1lCiAJCUFueU9iamVjdElkIGNvbW1pdFRvTWVyZ2U7CiAJCWlmIChpc1JlbW90ZSkgewogCQkJUmVmIHIgPSBudWxsOwpAQCAtMzU0LDggKzM1NiwxMSBAQCBwdWJsaWMgUHVsbFJlc3VsdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwKIAkJCX0KIAkJCVJlYmFzZUNvbW1hbmQgcmViYXNlID0gbmV3IFJlYmFzZUNvbW1hbmQocmVwbyk7CiAJCQlSZWJhc2VSZXN1bHQgcmViYXNlUmVzID0gcmViYXNlLnNldFVwc3RyZWFtKGNvbW1pdFRvTWVyZ2UpCi0JCQkJCS5zZXRVcHN0cmVhbU5hbWUodXBzdHJlYW1OYW1lKS5zZXRQcm9ncmVzc01vbml0b3IobW9uaXRvcikKLQkJCQkJLnNldE9wZXJhdGlvbihPcGVyYXRpb24uQkVHSU4pLnNldFN0cmF0ZWd5KHN0cmF0ZWd5KQorCQkJCQkuc2V0UHJvZ3Jlc3NNb25pdG9yKG1vbml0b3IpCisJCQkJCS5zZXRVcHN0cmVhbU5hbWUodXBzdHJlYW1OYW1lKQorCQkJCQkuc2V0T3BlcmF0aW9uKE9wZXJhdGlvbi5CRUdJTikKKwkJCQkJLnNldFN0cmF0ZWd5KHN0cmF0ZWd5KQorCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koY29udGVudFN0cmF0ZWd5KQogCQkJCQkuc2V0UHJlc2VydmVNZXJnZXMoCiAJCQkJCQkJcHVsbFJlYmFzZU1vZGUgPT0gQnJhbmNoUmViYXNlTW9kZS5QUkVTRVJWRSkKIAkJCQkJLmNhbGwoKTsKQEAgLTM2Myw3ICszNjgsOSBAQCBwdWJsaWMgUHVsbFJlc3VsdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwKIAkJfSBlbHNlIHsKIAkJCU1lcmdlQ29tbWFuZCBtZXJnZSA9IG5ldyBNZXJnZUNvbW1hbmQocmVwbyk7CiAJCQlNZXJnZVJlc3VsdCBtZXJnZVJlcyA9IG1lcmdlLmluY2x1ZGUodXBzdHJlYW1OYW1lLCBjb21taXRUb01lcmdlKQotCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpLnNldFByb2dyZXNzTW9uaXRvcihtb25pdG9yKQorCQkJCQkuc2V0UHJvZ3Jlc3NNb25pdG9yKG1vbml0b3IpCisJCQkJCS5zZXRTdHJhdGVneShzdHJhdGVneSkKKwkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSkKIAkJCQkJLnNldEZhc3RGb3J3YXJkKGdldEZhc3RGb3J3YXJkTW9kZSgpKS5jYWxsKCk7CiAJCQltb25pdG9yLnVwZGF0ZSgxKTsKIAkJCXJlc3VsdCA9IG5ldyBQdWxsUmVzdWx0KGZldGNoUmVzLCByZW1vdGUsIG1lcmdlUmVzKTsKQEAgLTQ0Miw2ICs0NDksMjEgQEAgcHVibGljIFB1bGxDb21tYW5kIHNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKIAl9CiAKIAkvKioKKwkgKiBTZXRzIHRoZSBjb250ZW50IG1lcmdlIHN0cmF0ZWd5IHRvIHVzZSBpZiB0aGUKKwkgKiB7QGxpbmsgI3NldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kpIG1lcmdlIHN0cmF0ZWd5fSBpcyAicmVzb2x2ZSIgb3IKKwkgKiAicmVjdXJzaXZlIi4KKwkgKgorCSAqIEBwYXJhbSBzdHJhdGVneQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBDb250ZW50TWVyZ2VTdHJhdGVneX0gdG8gYmUgdXNlZAorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgUHVsbENvbW1hbmQgc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJdGhpcy5jb250ZW50U3RyYXRlZ3kgPSBzdHJhdGVneTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogU2V0IHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFubm90YXRlZCB0YWcgYmVoYXZpb3IgZHVyaW5nIGZldGNoCiAJICoKIAkgKiBAcGFyYW0gdGFnT3B0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kLmphdmEKaW5kZXggODM2MTc1ZC4uYTI2ZmZjMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1JlYmFzZUNvbW1hbmQuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgTWF0aGlhcyBLaW56bGVyIDxtYXRoaWFzLmtpbnpsZXJAc2FwLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNiwgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIDIwMjEgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC02NSw2ICs2NSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZS5SZXN1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZTb3J0OwpAQCAtMjEyLDYgKzIxMyw4IEBAIHB1YmxpYyBlbnVtIE9wZXJhdGlvbiB7CiAKIAlwcml2YXRlIE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kgPSBNZXJnZVN0cmF0ZWd5LlJFQ1VSU0lWRTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5OworCiAJcHJpdmF0ZSBib29sZWFuIHByZXNlcnZlTWVyZ2VzID0gZmFsc2U7CiAKIAkvKioKQEAgLTUwMSw4ICs1MDQsMTEgQEAgcHJpdmF0ZSBSZWJhc2VSZXN1bHQgY2hlcnJ5UGlja0NvbW1pdEZsYXR0ZW5pbmcoUmV2Q29tbWl0IGNvbW1pdFRvUGljaykKIAkJCVN0cmluZyBvdXJDb21taXROYW1lID0gZ2V0T3VyQ29tbWl0TmFtZSgpOwogCQkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChyZXBvKSkgewogCQkJCUNoZXJyeVBpY2tSZXN1bHQgY2hlcnJ5UGlja1Jlc3VsdCA9IGdpdC5jaGVycnlQaWNrKCkKLQkJCQkJLmluY2x1ZGUoY29tbWl0VG9QaWNrKS5zZXRPdXJDb21taXROYW1lKG91ckNvbW1pdE5hbWUpCi0JCQkJCS5zZXRSZWZsb2dQcmVmaXgoUkVGTE9HX1BSRUZJWCkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCS5pbmNsdWRlKGNvbW1pdFRvUGljaykKKwkJCQkJLnNldE91ckNvbW1pdE5hbWUob3VyQ29tbWl0TmFtZSkKKwkJCQkJLnNldFJlZmxvZ1ByZWZpeChSRUZMT0dfUFJFRklYKQorCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpCiAJCQkJCS5jYWxsKCk7CiAJCQkJc3dpdGNoIChjaGVycnlQaWNrUmVzdWx0LmdldFN0YXR1cygpKSB7CiAJCQkJY2FzZSBGQUlMRUQ6CkBAIC01NTYsNyArNTYyLDggQEAgcHJpdmF0ZSBSZWJhc2VSZXN1bHQgY2hlcnJ5UGlja0NvbW1pdFByZXNlcnZpbmdNZXJnZXMoUmV2Q29tbWl0IGNvbW1pdFRvUGljaykKIAkJCQkJCQkuaW5jbHVkZShjb21taXRUb1BpY2spCiAJCQkJCQkJLnNldE91ckNvbW1pdE5hbWUob3VyQ29tbWl0TmFtZSkKIAkJCQkJCQkuc2V0UmVmbG9nUHJlZml4KFJFRkxPR19QUkVGSVgpCi0JCQkJCQkJLnNldFN0cmF0ZWd5KHN0cmF0ZWd5KTsKKwkJCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSk7CiAJCQkJCWlmIChpc01lcmdlKSB7CiAJCQkJCQlwaWNrQ29tbWFuZC5zZXRNYWlubGluZVBhcmVudE51bWJlcigxKTsKIAkJCQkJCS8vIFdlIHdyaXRlIGEgTUVSR0VfSEVBRCBhbmQgbGF0ZXIgY29tbWl0IGV4cGxpY2l0bHkKQEAgLTU5Miw2ICs1OTksOCBAQCBwcml2YXRlIFJlYmFzZVJlc3VsdCBjaGVycnlQaWNrQ29tbWl0UHJlc2VydmluZ01lcmdlcyhSZXZDb21taXQgY29tbWl0VG9QaWNrKQogCQkJCQlNZXJnZUNvbW1hbmQgbWVyZ2UgPSBnaXQubWVyZ2UoKQogCQkJCQkJCS5zZXRGYXN0Rm9yd2FyZChNZXJnZUNvbW1hbmQuRmFzdEZvcndhcmRNb2RlLk5PX0ZGKQogCQkJCQkJCS5zZXRQcm9ncmVzc01vbml0b3IobW9uaXRvcikKKwkJCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSkKIAkJCQkJCQkuc2V0Q29tbWl0KGZhbHNlKTsKIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBjb21taXRUb1BpY2suZ2V0UGFyZW50Q291bnQoKTsgaSsrKQogCQkJCQkJbWVyZ2UuaW5jbHVkZShuZXdQYXJlbnRzLmdldChpKSk7CkBAIC0xMTM3LDcgKzExNDYsNyBAQCBlbHNlIGlmICghaXNJbnRlcmFjdGl2ZSgpICYmIHdhbGsuaXNNZXJnZWRJbnRvKGhlYWRDb21taXQsIHVwc3RyZWFtKSkgewogCX0KIAogCXByaXZhdGUgTGlzdDxSZXZDb21taXQ+IGNhbGN1bGF0ZVBpY2tMaXN0KFJldkNvbW1pdCBoZWFkQ29tbWl0KQotCQkJdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgTm9IZWFkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlMaXN0PFJldkNvbW1pdD4gY2hlcnJ5UGlja0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJdHJ5IChSZXZXYWxrIHIgPSBuZXcgUmV2V2FsayhyZXBvKSkgewogCQkJci5zb3J0KFJldlNvcnQuVE9QT19LRUVQX0JSQU5DSF9UT0dFVEhFUiwgdHJ1ZSk7CkBAIC0xNTg3LDYgKzE1OTYsMjEgQEAgcHVibGljIFJlYmFzZUNvbW1hbmQgc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneSBzdHJhdGVneSkgewogCX0KIAogCS8qKgorCSAqIFNldHMgdGhlIGNvbnRlbnQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIGlmIHRoZQorCSAqIHtAbGluayAjc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneSkgbWVyZ2Ugc3RyYXRlZ3l9IGlzICJyZXNvbHZlIiBvcgorCSAqICJyZWN1cnNpdmUiLgorCSAqCisJICogQHBhcmFtIHN0cmF0ZWd5CisJICogICAgICAgICAgICB0aGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSB0byBiZSB1c2VkCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBSZWJhc2VDb21tYW5kIHNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KSB7CisJCXRoaXMuY29udGVudFN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgogCSAqIFdoZXRoZXIgdG8gcHJlc2VydmUgbWVyZ2VzIGR1cmluZyByZWJhc2UKIAkgKgogCSAqIEBwYXJhbSBwcmVzZXJ2ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3Rhc2hBcHBseUNvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQXBwbHlDb21tYW5kLmphdmEKaW5kZXggNTZiMzk5Mi4uMTAwNGQzZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3Rhc2hBcHBseUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaEFwcGx5Q29tbWFuZC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNyBHaXRIdWIgSW5jLiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMjEgR2l0SHViIEluYy4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMzgsNyArMzgsOSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdFJlYWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnlTdGF0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VTdHJhdGVneTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLlJlc29sdmVNZXJnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2VHJlZTsKQEAgLTcxLDYgKzczLDggQEAgcHVibGljIGNsYXNzIFN0YXNoQXBwbHlDb21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxPYmplY3RJZD4gewogCiAJcHJpdmF0ZSBNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5ID0gTWVyZ2VTdHJhdGVneS5SRUNVUlNJVkU7CiAKKwlwcml2YXRlIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneTsKKwogCS8qKgogCSAqIENyZWF0ZSBjb21tYW5kIHRvIGFwcGx5IHRoZSBjaGFuZ2VzIG9mIGEgc3Rhc2hlZCBjb21taXQKIAkgKgpAQCAtMTY2LDE2ICsxNzAsMjUgQEAgcHVibGljIE9iamVjdElkIGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLAogCQkJaWYgKHJlc3RvcmVVbnRyYWNrZWQgJiYgc3Rhc2hDb21taXQuZ2V0UGFyZW50Q291bnQoKSA9PSAzKQogCQkJCXVudHJhY2tlZENvbW1pdCA9IHJldldhbGsucGFyc2VDb21taXQoc3Rhc2hDb21taXQuZ2V0UGFyZW50KDIpKTsKIAotCQkJUmVzb2x2ZU1lcmdlciBtZXJnZXIgPSAoUmVzb2x2ZU1lcmdlcikgc3RyYXRlZ3kubmV3TWVyZ2VyKHJlcG8pOwotCQkJbWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7ICJzdGFzaGVkIEhFQUQiLCAiSEVBRCIsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCQkic3Rhc2giIH0pOyAvLyROT04tTkxTLTEkCi0JCQltZXJnZXIuc2V0QmFzZShzdGFzaEhlYWRDb21taXQpOwotCQkJbWVyZ2VyLnNldFdvcmtpbmdUcmVlSXRlcmF0b3IobmV3IEZpbGVUcmVlSXRlcmF0b3IocmVwbykpOwotCQkJYm9vbGVhbiBtZXJnZVN1Y2NlZWRlZCA9IG1lcmdlci5tZXJnZShoZWFkQ29tbWl0LCBzdGFzaENvbW1pdCk7Ci0JCQlMaXN0PFN0cmluZz4gbW9kaWZpZWRCeU1lcmdlID0gbWVyZ2VyLmdldE1vZGlmaWVkRmlsZXMoKTsKLQkJCWlmICghbW9kaWZpZWRCeU1lcmdlLmlzRW1wdHkoKSkgewotCQkJCXJlcG8uZmlyZUV2ZW50KAotCQkJCQkJbmV3IFdvcmtpbmdUcmVlTW9kaWZpZWRFdmVudChtb2RpZmllZEJ5TWVyZ2UsIG51bGwpKTsKKwkJCU1lcmdlciBtZXJnZXIgPSBzdHJhdGVneS5uZXdNZXJnZXIocmVwbyk7CisJCQlib29sZWFuIG1lcmdlU3VjY2VlZGVkOworCQkJaWYgKG1lcmdlciBpbnN0YW5jZW9mIFJlc29sdmVNZXJnZXIpIHsKKwkJCQlSZXNvbHZlTWVyZ2VyIHJlc29sdmVNZXJnZXIgPSAoUmVzb2x2ZU1lcmdlcikgbWVyZ2VyOworCQkJCXJlc29sdmVNZXJnZXIKKwkJCQkJCS5zZXRDb21taXROYW1lcyhuZXcgU3RyaW5nW10geyAic3Rhc2hlZCBIRUFEIiwgIkhFQUQiLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkJInN0YXNoIiB9KTsgLy8kTk9OLU5MUy0xJAorCQkJCXJlc29sdmVNZXJnZXIuc2V0QmFzZShzdGFzaEhlYWRDb21taXQpOworCQkJCXJlc29sdmVNZXJnZXIKKwkJCQkJCS5zZXRXb3JraW5nVHJlZUl0ZXJhdG9yKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKHJlcG8pKTsKKwkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSk7CisJCQkJbWVyZ2VTdWNjZWVkZWQgPSByZXNvbHZlTWVyZ2VyLm1lcmdlKGhlYWRDb21taXQsIHN0YXNoQ29tbWl0KTsKKwkJCQlMaXN0PFN0cmluZz4gbW9kaWZpZWRCeU1lcmdlID0gcmVzb2x2ZU1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCk7CisJCQkJaWYgKCFtb2RpZmllZEJ5TWVyZ2UuaXNFbXB0eSgpKSB7CisJCQkJCXJlcG8uZmlyZUV2ZW50KG5ldyBXb3JraW5nVHJlZU1vZGlmaWVkRXZlbnQobW9kaWZpZWRCeU1lcmdlLAorCQkJCQkJCW51bGwpKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW1lcmdlU3VjY2VlZGVkID0gbWVyZ2VyLm1lcmdlKGhlYWRDb21taXQsIHN0YXNoQ29tbWl0KTsKIAkJCX0KIAkJCWlmIChtZXJnZVN1Y2NlZWRlZCkgewogCQkJCURpckNhY2hlIGRjID0gcmVwby5sb2NrRGlyQ2FjaGUoKTsKQEAgLTE4NCwxMSArMTk3LDE0IEBAIHB1YmxpYyBPYmplY3RJZCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwKIAkJCQlkY28uc2V0RmFpbE9uQ29uZmxpY3QodHJ1ZSk7CiAJCQkJZGNvLmNoZWNrb3V0KCk7IC8vIElnbm9yaW5nIGZhaWxlZCBkZWxldGVzLi4uLgogCQkJCWlmIChyZXN0b3JlSW5kZXgpIHsKLQkJCQkJUmVzb2x2ZU1lcmdlciBpeE1lcmdlciA9IChSZXNvbHZlTWVyZ2VyKSBzdHJhdGVneQotCQkJCQkJCS5uZXdNZXJnZXIocmVwbywgdHJ1ZSk7Ci0JCQkJCWl4TWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7ICJzdGFzaGVkIEhFQUQiLCAvLyROT04tTkxTLTEkCi0JCQkJCQkJIkhFQUQiLCAic3Rhc2hlZCBpbmRleCIgfSk7IC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCi0JCQkJCWl4TWVyZ2VyLnNldEJhc2Uoc3Rhc2hIZWFkQ29tbWl0KTsKKwkJCQkJTWVyZ2VyIGl4TWVyZ2VyID0gc3RyYXRlZ3kubmV3TWVyZ2VyKHJlcG8sIHRydWUpOworCQkJCQlpZiAoaXhNZXJnZXIgaW5zdGFuY2VvZiBSZXNvbHZlTWVyZ2VyKSB7CisJCQkJCQlSZXNvbHZlTWVyZ2VyIHJlc29sdmVNZXJnZXIgPSAoUmVzb2x2ZU1lcmdlcikgaXhNZXJnZXI7CisJCQkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7ICJzdGFzaGVkIEhFQUQiLCAvLyROT04tTkxTLTEkCisJCQkJCQkJCSJIRUFEIiwgInN0YXNoZWQgaW5kZXgiIH0pOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkJCQkJcmVzb2x2ZU1lcmdlci5zZXRCYXNlKHN0YXNoSGVhZENvbW1pdCk7CisJCQkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSk7CisJCQkJCX0KIAkJCQkJYm9vbGVhbiBvayA9IGl4TWVyZ2VyLm1lcmdlKGhlYWRDb21taXQsIHN0YXNoSW5kZXhDb21taXQpOwogCQkJCQlpZiAob2spIHsKIAkJCQkJCXJlc2V0SW5kZXgocmV2V2FsawpAQCAtMjAwLDE2ICsyMTYsMjAgQEAgcHVibGljIE9iamVjdElkIGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLAogCQkJCX0KIAogCQkJCWlmICh1bnRyYWNrZWRDb21taXQgIT0gbnVsbCkgewotCQkJCQlSZXNvbHZlTWVyZ2VyIHVudHJhY2tlZE1lcmdlciA9IChSZXNvbHZlTWVyZ2VyKSBzdHJhdGVneQotCQkJCQkJCS5uZXdNZXJnZXIocmVwbywgdHJ1ZSk7Ci0JCQkJCXVudHJhY2tlZE1lcmdlci5zZXRDb21taXROYW1lcyhuZXcgU3RyaW5nW10gewotCQkJCQkJCSJudWxsIiwgIkhFQUQiLCAidW50cmFja2VkIGZpbGVzIiB9KTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQvLyROT04tTkxTLTMkCi0JCQkJCS8vIFRoZXJlIGlzIG5vIGNvbW1vbiBiYXNlIGZvciBIRUFEICYgdW50cmFja2VkIGZpbGVzCi0JCQkJCS8vIGJlY2F1c2UgdGhlIGNvbW1pdCBmb3IgdW50cmFja2VkIGZpbGVzIGhhcyBubyBwYXJlbnQuIElmCi0JCQkJCS8vIHdlIHVzZSBzdGFzaEhlYWRDb21taXQgYXMgY29tbW9uIGJhc2UgKGFzIGluIHRoZSBvdGhlcgotCQkJCQkvLyBtZXJnZXMpIHdlIHBvdGVudGlhbGx5IHJlcG9ydCBjb25mbGljdHMgZm9yIGZpbGVzCi0JCQkJCS8vIHdoaWNoIGFyZSBub3QgZXZlbiBtZW1iZXIgb2YgdW50cmFja2VkIGZpbGVzIGNvbW1pdAotCQkJCQl1bnRyYWNrZWRNZXJnZXIuc2V0QmFzZShudWxsKTsKKwkJCQkJTWVyZ2VyIHVudHJhY2tlZE1lcmdlciA9IHN0cmF0ZWd5Lm5ld01lcmdlcihyZXBvLCB0cnVlKTsKKwkJCQkJaWYgKHVudHJhY2tlZE1lcmdlciBpbnN0YW5jZW9mIFJlc29sdmVNZXJnZXIpIHsKKwkJCQkJCVJlc29sdmVNZXJnZXIgcmVzb2x2ZU1lcmdlciA9IChSZXNvbHZlTWVyZ2VyKSB1bnRyYWNrZWRNZXJnZXI7CisJCQkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7ICJudWxsIiwgIkhFQUQiLCAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAorCQkJCQkJCQkidW50cmFja2VkIGZpbGVzIiB9KTsgLy8kTk9OLU5MUy0xJAorCQkJCQkJLy8gVGhlcmUgaXMgbm8gY29tbW9uIGJhc2UgZm9yIEhFQUQgJiB1bnRyYWNrZWQgZmlsZXMKKwkJCQkJCS8vIGJlY2F1c2UgdGhlIGNvbW1pdCBmb3IgdW50cmFja2VkIGZpbGVzIGhhcyBubyBwYXJlbnQuCisJCQkJCQkvLyBJZiB3ZSB1c2Ugc3Rhc2hIZWFkQ29tbWl0IGFzIGNvbW1vbiBiYXNlIChhcyBpbiB0aGUKKwkJCQkJCS8vIG90aGVyIG1lcmdlcykgd2UgcG90ZW50aWFsbHkgcmVwb3J0IGNvbmZsaWN0cyBmb3IKKwkJCQkJCS8vIGZpbGVzIHdoaWNoIGFyZSBub3QgZXZlbiBtZW1iZXIgb2YgdW50cmFja2VkIGZpbGVzCisJCQkJCQkvLyBjb21taXQuCisJCQkJCQlyZXNvbHZlTWVyZ2VyLnNldEJhc2UobnVsbCk7CisJCQkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSk7CisJCQkJCX0KIAkJCQkJYm9vbGVhbiBvayA9IHVudHJhY2tlZE1lcmdlci5tZXJnZShoZWFkQ29tbWl0LAogCQkJCQkJCXVudHJhY2tlZENvbW1pdCk7CiAJCQkJCWlmIChvaykgewpAQCAtMjc5LDYgKzI5OSwyMyBAQCBwdWJsaWMgU3Rhc2hBcHBseUNvbW1hbmQgc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneSBzdHJhdGVneSkgewogCX0KIAogCS8qKgorCSAqIFNldHMgdGhlIGNvbnRlbnQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIGlmIHRoZQorCSAqIHtAbGluayAjc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneSkgbWVyZ2Ugc3RyYXRlZ3l9IGlzICJyZXNvbHZlIiBvcgorCSAqICJyZWN1cnNpdmUiLgorCSAqCisJICogQHBhcmFtIHN0cmF0ZWd5CisJICogICAgICAgICAgICB0aGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSB0byBiZSB1c2VkCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBTdGFzaEFwcGx5Q29tbWFuZCBzZXRDb250ZW50TWVyZ2VTdHJhdGVneSgKKwkJCUNvbnRlbnRNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KSB7CisJCWNoZWNrQ2FsbGFibGUoKTsKKwkJdGhpcy5jb250ZW50U3RyYXRlZ3kgPSBzdHJhdGVneTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogV2hldGhlciB0aGUgY29tbWFuZCBzaG91bGQgcmVzdG9yZSB1bnRyYWNrZWQgZmlsZXMKIAkgKgogCSAqIEBwYXJhbSBhcHBseVVudHJhY2tlZApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1Jhd1RleHQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SYXdUZXh0LmphdmEKaW5kZXggOWY0YjFmYS4uZDA5ZGEwMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1Jhd1RleHQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmF3VGV4dC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSwgR29vZ2xlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBKb2hhbm5lcyBFLiBTY2hpbmRlbGluIDxqb2hhbm5lcy5zY2hpbmRlbGluQGdteC5kZT4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEsIEpvaGFubmVzIEUuIFNjaGluZGVsaW4gPGpvaGFubmVzLnNjaGluZGVsaW5AZ214LmRlPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xNiw2ICsxNiw3IEBACiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5CaW5hcnlCbG9iRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkxhcmdlT2JqZWN0RXhjZXB0aW9uOwpAQCAtMTY1LDYgKzE2NiwyNyBAQCBwdWJsaWMgU3RyaW5nIGdldFN0cmluZyhpbnQgaSkgewogCX0KIAogCS8qKgorCSAqIEdldCB0aGUgcmF3IHRleHQgZm9yIGEgc2luZ2xlIGxpbmUuCisJICoKKwkgKiBAcGFyYW0gaQorCSAqICAgICAgICAgICAgaW5kZXggb2YgdGhlIGxpbmUgdG8gZXh0cmFjdC4gTm90ZSB0aGlzIGlzIDAtYmFzZWQsIHNvIGxpbmUKKwkgKiAgICAgICAgICAgIG51bWJlciAxIGlzIGFjdHVhbGx5IGluZGV4IDAuCisJICogQHJldHVybiB0aGUgdGV4dCBmb3IgdGhlIGxpbmUsIHdpdGhvdXQgYSB0cmFpbGluZyBMRiwgYXMgYQorCSAqICAgICAgICAge0BsaW5rIEJ5dGVCdWZmZXJ9IHRoYXQgaXMgYmFja2VkIGJ5IGEgc2xpY2Ugb2YgdGhlCisJICogICAgICAgICB7QGxpbmsgI2dldFJhd0NvbnRlbnQoKSByYXcgY29udGVudH0sIHdpdGggdGhlIGJ1ZmZlcidzIHBvc2l0aW9uCisJICogICAgICAgICBvbiB0aGUgc3RhcnQgb2YgdGhlIGxpbmUgYW5kIHRoZSBsaW1pdCBhdCB0aGUgZW5kLgorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIEJ5dGVCdWZmZXIgZ2V0UmF3U3RyaW5nKGludCBpKSB7CisJCWludCBzID0gZ2V0U3RhcnQoaSk7CisJCWludCBlID0gZ2V0RW5kKGkpOworCQlpZiAoZSA+IDAgJiYgY29udGVudFtlIC0gMV0gPT0gJ1xuJykgeworCQkJZS0tOworCQl9CisJCXJldHVybiBCeXRlQnVmZmVyLndyYXAoY29udGVudCwgcywgZSAtIHMpOworCX0KKworCS8qKgogCSAqIEdldCB0aGUgdGV4dCBmb3IgYSByZWdpb24gb2YgbGluZXMuCiAJICoKIAkgKiBAcGFyYW0gYmVnaW4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SZW5hbWVEZXRlY3Rvci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1JlbmFtZURldGVjdG9yLmphdmEKaW5kZXggODBlMWIxOC4uYmExZjYzYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1JlbmFtZURldGVjdG9yLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1JlbmFtZURldGVjdG9yLmphdmEKQEAgLTEyLDYgKzEyLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuRGlmZkVudHJ5LlNpZGUuTkVXOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuRGlmZkVudHJ5LlNpZGUuT0xEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjay5QYWNrQ29uZmlnLkRFRkFVTFRfQklHX0ZJTEVfVEhSRVNIT0xEOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwpAQCAtOTcsNiArOTgsMTkgQEAgcHJpdmF0ZSBpbnQgc29ydE9mKENoYW5nZVR5cGUgY2hhbmdlVHlwZSkgewogCS8qKiBMaW1pdCBpbiB0aGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIGZvciByZW5hbWVzLiAqLwogCXByaXZhdGUgaW50IHJlbmFtZUxpbWl0OwogCisJLyoqCisJICogRmlsZSBzaXplIHRocmVzaG9sZCAoaW4gYnl0ZXMpIGZvciBkZXRlY3RpbmcgcmVuYW1lcy4gRmlsZXMgbGFyZ2VyCisJICogdGhhbiB0aGlzIHNpemUgd2lsbCBub3QgYmUgcHJvY2Vzc2VkIGZvciByZW5hbWVzLgorCSAqLworCXByaXZhdGUgaW50IGJpZ0ZpbGVUaHJlc2hvbGQgPSBERUZBVUxUX0JJR19GSUxFX1RIUkVTSE9MRDsKKworCS8qKgorCSAqIFNraXAgZGV0ZWN0aW5nIGNvbnRlbnQgcmVuYW1lcyBmb3IgYmluYXJ5IGZpbGVzLiBDb250ZW50IHJlbmFtZXMgYXJlCisJICogdGhvc2UgdGhhdCBhcmUgbm90IGV4YWN0LCB0aGF0IGlzIHdpdGggYSBzbGlnaHQgY29udGVudCBtb2RpZmljYXRpb24KKwkgKiBiZXR3ZWVuIHRoZSB0d28gZmlsZXMuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzID0gZmFsc2U7CisKIAkvKiogU2V0IGlmIHRoZSBudW1iZXIgb2YgYWRkcyBvciBkZWxldGVzIHdhcyBvdmVyIHRoZSBsaW1pdC4gKi8KIAlwcml2YXRlIGJvb2xlYW4gb3ZlclJlbmFtZUxpbWl0OwogCkBAIC0yMDksNiArMjIzLDQ2IEBAIHB1YmxpYyB2b2lkIHNldFJlbmFtZUxpbWl0KGludCBsaW1pdCkgewogCX0KIAogCS8qKgorCSAqIEdldCBmaWxlIHNpemUgdGhyZXNob2xkIGZvciBkZXRlY3RpbmcgcmVuYW1lcy4gRmlsZXMgbGFyZ2VyCisJICogdGhhbiB0aGlzIHNpemUgd2lsbCBub3QgYmUgcHJvY2Vzc2VkIGZvciByZW5hbWUgZGV0ZWN0aW9uLgorCSAqCisJICogQHJldHVybiB0aHJlc2hvbGQgaW4gYnl0ZXMgb2YgdGhlIGZpbGUgc2l6ZS4KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBpbnQgZ2V0QmlnRmlsZVRocmVzaG9sZCgpIHsgcmV0dXJuIGJpZ0ZpbGVUaHJlc2hvbGQ7IH0KKworCS8qKgorCSAqIFNldCB0aGUgZmlsZSBzaXplIHRocmVzaG9sZCBmb3IgZGV0ZWN0aW5nIHJlbmFtZXMuIEZpbGVzIGxhcmdlciB0aGFuIHRoaXMKKwkgKiB0aHJlc2hvbGQgd2lsbCBiZSBza2lwcGVkIGR1cmluZyByZW5hbWUgZGV0ZWN0aW9uIGNvbXB1dGF0aW9uLgorCSAqCisJICogQHBhcmFtIHRocmVzaG9sZCBmaWxlIHNpemUgdGhyZXNob2xkIGluIGJ5dGVzLgorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIHZvaWQgc2V0QmlnRmlsZVRocmVzaG9sZChpbnQgdGhyZXNob2xkKSB7CisJCXRoaXMuYmlnRmlsZVRocmVzaG9sZCA9IHRocmVzaG9sZDsKKwl9CisKKwkvKioKKwkgKiBHZXQgc2tpcHBpbmcgZGV0ZWN0aW5nIGNvbnRlbnQgcmVuYW1lcyBmb3IgYmluYXJ5IGZpbGVzLgorCSAqCisJICogQHJldHVybiB0cnVlIGlmIGNvbnRlbnQgcmVuYW1lcyBzaG91bGQgYmUgc2tpcHBlZCBmb3IgYmluYXJ5IGZpbGVzLCBmYWxzZSBvdGhlcndpc2UuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBnZXRTa2lwQ29udGVudFJlbmFtZXNGb3JCaW5hcnlGaWxlcygpIHsKKwkJcmV0dXJuIHNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzOworCX0KKworCS8qKgorCSAqIFNldHMgc2tpcHBpbmcgZGV0ZWN0aW5nIGNvbnRlbnQgcmVuYW1lcyBmb3IgYmluYXJ5IGZpbGVzLgorCSAqCisJICogQHBhcmFtIHZhbHVlIHRydWUgaWYgY29udGVudCByZW5hbWVzIHNob3VsZCBiZSBza2lwcGVkIGZvciBiaW5hcnkgZmlsZXMsIGZhbHNlIG90aGVyd2lzZS4KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyB2b2lkIHNldFNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzKGJvb2xlYW4gdmFsdWUpIHsKKwkJdGhpcy5za2lwQ29udGVudFJlbmFtZXNGb3JCaW5hcnlGaWxlcyA9IHZhbHVlOworCX0KKworCS8qKgogCSAqIENoZWNrIGlmIHRoZSBkZXRlY3RvciBpcyBvdmVyIHRoZSByZW5hbWUgbGltaXQuCiAJICogPHA+CiAJICogVGhpcyBtZXRob2QgY2FuIGJlIGludm9rZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB7QGNvZGUgZ2V0RW50cmllc30gaGFzCkBAIC00OTMsNiArNTQ3LDggQEAgcHJpdmF0ZSB2b2lkIGZpbmRDb250ZW50UmVuYW1lcyhDb250ZW50U291cmNlLlBhaXIgcmVhZGVyLAogCiAJCQlkID0gbmV3IFNpbWlsYXJpdHlSZW5hbWVEZXRlY3RvcihyZWFkZXIsIGRlbGV0ZWQsIGFkZGVkKTsKIAkJCWQuc2V0UmVuYW1lU2NvcmUoZ2V0UmVuYW1lU2NvcmUoKSk7CisJCQlkLnNldEJpZ0ZpbGVUaHJlc2hvbGQoZ2V0QmlnRmlsZVRocmVzaG9sZCgpKTsKKwkJCWQuc2V0U2tpcEJpbmFyeUZpbGVzKGdldFNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzKCkpOwogCQkJZC5jb21wdXRlKHBtKTsKIAkJCW92ZXJSZW5hbWVMaW1pdCB8PSBkLmlzVGFibGVPdmVyZmxvdygpOwogCQkJZGVsZXRlZCA9IGQuZ2V0TGVmdE92ZXJTb3VyY2VzKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eUluZGV4LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eUluZGV4LmphdmEKaW5kZXggZmI2ZTVkZi4uNjYxMzY5YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1NpbWlsYXJpdHlJbmRleC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9TaW1pbGFyaXR5SW5kZXguamF2YQpAQCAtMTAyLDYgKzEwMiwxNSBAQCBwdWJsaWMgc3RhdGljIFNpbWlsYXJpdHlJbmRleCBjcmVhdGUoT2JqZWN0TG9hZGVyIG9iaikgdGhyb3dzIElPRXhjZXB0aW9uLAogCQlpZEdyb3dBdCA9IGdyb3dBdChpZEhhc2hCaXRzKTsKIAl9CiAKKwlzdGF0aWMgYm9vbGVhbiBpc0JpbmFyeShPYmplY3RMb2FkZXIgb2JqKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAob2JqLmlzTGFyZ2UoKSkgeworCQkJdHJ5IChPYmplY3RTdHJlYW0gaW4xID0gb2JqLm9wZW5TdHJlYW0oKSkgeworCQkJCXJldHVybiBSYXdUZXh0LmlzQmluYXJ5KGluMSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIFJhd1RleHQuaXNCaW5hcnkob2JqLmdldENhY2hlZEJ5dGVzKCkpOworCX0KKwogCXZvaWQgaGFzaChPYmplY3RMb2FkZXIgb2JqKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCiAJCQlUYWJsZUZ1bGxFeGNlcHRpb24gewogCQlpZiAob2JqLmlzTGFyZ2UoKSkgewpAQCAtMTE1LDkgKzEyNCw3IEBAIHZvaWQgaGFzaChPYmplY3RMb2FkZXIgb2JqKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCiAJcHJpdmF0ZSB2b2lkIGhhc2hMYXJnZU9iamVjdChPYmplY3RMb2FkZXIgb2JqKSB0aHJvd3MgSU9FeGNlcHRpb24sCiAJCQlUYWJsZUZ1bGxFeGNlcHRpb24gewogCQlib29sZWFuIHRleHQ7Ci0JCXRyeSAoT2JqZWN0U3RyZWFtIGluMSA9IG9iai5vcGVuU3RyZWFtKCkpIHsKLQkJCXRleHQgPSAhUmF3VGV4dC5pc0JpbmFyeShpbjEpOwotCQl9CisJCXRleHQgPSAhaXNCaW5hcnkob2JqKTsKIAogCQl0cnkgKE9iamVjdFN0cmVhbSBpbjIgPSBvYmoub3BlblN0cmVhbSgpKSB7CiAJCQloYXNoKGluMiwgaW4yLmdldFNpemUoKSwgdGV4dCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eVJlbmFtZURldGVjdG9yLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eVJlbmFtZURldGVjdG9yLmphdmEKaW5kZXggNzRhMTFhMC4uNTg3MWI0YSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1NpbWlsYXJpdHlSZW5hbWVEZXRlY3Rvci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9TaW1pbGFyaXR5UmVuYW1lRGV0ZWN0b3IuamF2YQpAQCAtMTIsNiArMTIsNyBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5ORVc7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5PTEQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrLlBhY2tDb25maWcuREVGQVVMVF9CSUdfRklMRV9USFJFU0hPTEQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC0yNSw2ICsyNiw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdExvYWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Qcm9ncmVzc01vbml0b3I7CiAKIGNsYXNzIFNpbWlsYXJpdHlSZW5hbWVEZXRlY3RvciB7CkBAIC04MCw2ICs4MiwxNSBAQCBjbGFzcyBTaW1pbGFyaXR5UmVuYW1lRGV0ZWN0b3IgewogCS8qKiBTY29yZSBhIHBhaXIgbXVzdCBleGNlZWQgdG8gYmUgY29uc2lkZXJlZCBhIHJlbmFtZS4gKi8KIAlwcml2YXRlIGludCByZW5hbWVTY29yZSA9IDYwOwogCisJLyoqCisJICogRmlsZSBzaXplIHRocmVzaG9sZCAoaW4gYnl0ZXMpIGZvciBkZXRlY3RpbmcgcmVuYW1lcy4gRmlsZXMgbGFyZ2VyCisJICogdGhhbiB0aGlzIHNpemUgd2lsbCBub3QgYmUgcHJvY2Vzc2VkIGZvciByZW5hbWVzLgorCSAqLworCXByaXZhdGUgaW50IGJpZ0ZpbGVUaHJlc2hvbGQgPSBERUZBVUxUX0JJR19GSUxFX1RIUkVTSE9MRDsKKworCS8qKiBTa2lwIGNvbnRlbnQgcmVuYW1lcyBmb3IgYmluYXJ5IGZpbGVzLiAqLworCXByaXZhdGUgYm9vbGVhbiBza2lwQmluYXJ5RmlsZXMgPSBmYWxzZTsKKwogCS8qKiBTZXQgaWYgYW55IHtAbGluayBTaW1pbGFyaXR5SW5kZXguVGFibGVGdWxsRXhjZXB0aW9ufSBvY2N1cnMuICovCiAJcHJpdmF0ZSBib29sZWFuIHRhYmxlT3ZlcmZsb3c7CiAKQEAgLTk2LDYgKzEwNywxNCBAQCB2b2lkIHNldFJlbmFtZVNjb3JlKGludCBzY29yZSkgewogCQlyZW5hbWVTY29yZSA9IHNjb3JlOwogCX0KIAorCXZvaWQgc2V0QmlnRmlsZVRocmVzaG9sZChpbnQgdGhyZXNob2xkKSB7CisJCWJpZ0ZpbGVUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7CisJfQorCisJdm9pZCBzZXRTa2lwQmluYXJ5RmlsZXMoYm9vbGVhbiB2YWx1ZSkgeworCQlza2lwQmluYXJ5RmlsZXMgPSB2YWx1ZTsKKwl9CisKIAl2b2lkIGNvbXB1dGUoUHJvZ3Jlc3NNb25pdG9yIHBtKSB0aHJvd3MgSU9FeGNlcHRpb24sIENhbmNlbGxlZEV4Y2VwdGlvbiB7CiAJCWlmIChwbSA9PSBudWxsKQogCQkJcG0gPSBOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFOwpAQCAtMjUzLDkgKzI3MiwxOSBAQCBwcml2YXRlIGludCBidWlsZE1hdHJpeChQcm9ncmVzc01vbml0b3IgcG0pCiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAorCQkJCWlmIChtYXggPiBiaWdGaWxlVGhyZXNob2xkKSB7CisJCQkJCXBtLnVwZGF0ZSgxKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCiAJCQkJaWYgKHMgPT0gbnVsbCkgewogCQkJCQl0cnkgewotCQkJCQkJcyA9IGhhc2goT0xELCBzcmNFbnQpOworCQkJCQkJT2JqZWN0TG9hZGVyIGxvYWRlciA9IHJlYWRlci5vcGVuKE9MRCwgc3JjRW50KTsKKwkJCQkJCWlmIChza2lwQmluYXJ5RmlsZXMgJiYgU2ltaWxhcml0eUluZGV4LmlzQmluYXJ5KGxvYWRlcikpIHsKKwkJCQkJCQlwbS51cGRhdGUoMSk7CisJCQkJCQkJY29udGludWUgU1JDOworCQkJCQkJfQorCQkJCQkJcyA9IGhhc2gobG9hZGVyKTsKIAkJCQkJfSBjYXRjaCAoVGFibGVGdWxsRXhjZXB0aW9uIHRhYmxlRnVsbCkgewogCQkJCQkJdGFibGVPdmVyZmxvdyA9IHRydWU7CiAJCQkJCQljb250aW51ZSBTUkM7CkBAIC0yNjQsNyArMjkzLDEyIEBAIHByaXZhdGUgaW50IGJ1aWxkTWF0cml4KFByb2dyZXNzTW9uaXRvciBwbSkKIAogCQkJCVNpbWlsYXJpdHlJbmRleCBkOwogCQkJCXRyeSB7Ci0JCQkJCWQgPSBoYXNoKE5FVywgZHN0RW50KTsKKwkJCQkJT2JqZWN0TG9hZGVyIGxvYWRlciA9IHJlYWRlci5vcGVuKE5FVywgZHN0RW50KTsKKwkJCQkJaWYgKHNraXBCaW5hcnlGaWxlcyAmJiBTaW1pbGFyaXR5SW5kZXguaXNCaW5hcnkobG9hZGVyKSkgeworCQkJCQkJcG0udXBkYXRlKDEpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJZCA9IGhhc2gobG9hZGVyKTsKIAkJCQl9IGNhdGNoIChUYWJsZUZ1bGxFeGNlcHRpb24gdGFibGVGdWxsKSB7CiAJCQkJCWlmIChkc3RUb29MYXJnZSA9PSBudWxsKQogCQkJCQkJZHN0VG9vTGFyZ2UgPSBuZXcgQml0U2V0KGRzdHMuc2l6ZSgpKTsKQEAgLTM0OCwxMCArMzgyLDEwIEBAIHN0YXRpYyBpbnQgbmFtZVNjb3JlKFN0cmluZyBhLCBTdHJpbmcgYikgewogCQlyZXR1cm4gKCgoZGlyU2NvcmVMdHIgKyBkaXJTY29yZVJ0bCkgKiAyNSkgKyAoZmlsZVNjb3JlICogNTApKSAvIDEwMDsKIAl9CiAKLQlwcml2YXRlIFNpbWlsYXJpdHlJbmRleCBoYXNoKERpZmZFbnRyeS5TaWRlIHNpZGUsIERpZmZFbnRyeSBlbnQpCisJcHJpdmF0ZSBTaW1pbGFyaXR5SW5kZXggaGFzaChPYmplY3RMb2FkZXIgb2JqZWN0TG9hZGVyKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBUYWJsZUZ1bGxFeGNlcHRpb24gewogCQlTaW1pbGFyaXR5SW5kZXggciA9IG5ldyBTaW1pbGFyaXR5SW5kZXgoKTsKLQkJci5oYXNoKHJlYWRlci5vcGVuKHNpZGUsIGVudCkpOworCQlyLmhhc2gob2JqZWN0TG9hZGVyKTsKIAkJci5zb3J0KCk7CiAJCXJldHVybiByOwogCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlyY2FjaGUvRGlyQ2FjaGVDaGVja291dC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaXJjYWNoZS9EaXJDYWNoZUNoZWNrb3V0LmphdmEKaW5kZXggNjcxNDc1ZS4uYzkwNGE3OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaXJjYWNoZS9EaXJDYWNoZUNoZWNrb3V0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaXJjYWNoZS9EaXJDYWNoZUNoZWNrb3V0LmphdmEKQEAgLTE2MTAsMTEgKzE2MTAsOSBAQCBwcml2YXRlIHN0YXRpYyB2b2lkIHJ1bkV4dGVybmFsRmlsdGVyQ29tbWFuZChSZXBvc2l0b3J5IHJlcG8sIFN0cmluZyBwYXRoLAogCQl9CiAJCWlmIChyYyAhPSAwKSB7CiAJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24obmV3IEZpbHRlckZhaWxlZEV4Y2VwdGlvbihyYywKLQkJCQkJY2hlY2tvdXRNZXRhZGF0YS5zbXVkZ2VGaWx0ZXJDb21tYW5kLAotCQkJCQlwYXRoLAorCQkJCQljaGVja291dE1ldGFkYXRhLnNtdWRnZUZpbHRlckNvbW1hbmQsIHBhdGgsCiAJCQkJCXJlc3VsdC5nZXRTdGRvdXQoKS50b0J5dGVBcnJheShNQVhfRVhDRVBUSU9OX1RFWFRfU0laRSksCi0JCQkJCVJhd1BhcnNlVXRpbHMuZGVjb2RlKHJlc3VsdC5nZXRTdGRlcnIoKQotCQkJCQkJCS50b0J5dGVBcnJheShNQVhfRVhDRVBUSU9OX1RFWFRfU0laRSkpKSk7CisJCQkJCXJlc3VsdC5nZXRTdGRlcnIoKS50b1N0cmluZyhNQVhfRVhDRVBUSU9OX1RFWFRfU0laRSkpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmQuamF2YQppbmRleCBjMDM5YWFmLi41NTIzMTVkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmQuamF2YQpAQCAtMTIsNiArMTIsNyBAQAogaW1wb3J0IHN0YXRpYyBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5ERUZBVUxUX1JFTU9URV9OQU1FOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuUl9SRU1PVEVTOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuUl9UQUdTOwogCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwpAQCAtNzksNiArODAsMTMgQEAKICAqIEBzaW5jZSAzLjQKICAqLwogcHVibGljIGNsYXNzIFJlcG9Db21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxSZXZDb21taXQ+IHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DS19GQUlMVVJFX01BWF9SRVRSSUVTID0gNTsKKworCS8vIFJldHJ5IGV4cG9uZW50aWFsbHkgd2l0aCBkZWxheXMgaW4gdGhpcyByYW5nZQorCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NLX0ZBSUxVUkVfTUlOX1JFVFJZX0RFTEFZX01JTExJUyA9IDUwOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0tfRkFJTFVSRV9NQVhfUkVUUllfREVMQVlfTUlMTElTID0gNTAwMDsKKwogCXByaXZhdGUgU3RyaW5nIG1hbmlmZXN0UGF0aDsKIAlwcml2YXRlIFN0cmluZyBiYXNlVXJpOwogCXByaXZhdGUgVVJJIHRhcmdldFVyaTsKQEAgLTU4Nyw4ICs1OTUsMTEgQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCQkJCQkJdGhyb3cgbmV3IFJlbW90ZVVuYXZhaWxhYmxlRXhjZXB0aW9uKHVybCk7CiAJCQkJCQl9CiAJCQkJCQlpZiAocmVjb3JkUmVtb3RlQnJhbmNoKSB7Ci0JCQkJCQkJLy8gY2FuIGJlIGJyYW5jaCBvciB0YWcKLQkJCQkJCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCAiYnJhbmNoIiwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gImJyYW5jaCIgZmllbGQgaXMgb25seSBmb3Igbm9uLXRhZyByZWZlcmVuY2VzLgorCQkJCQkJCS8vIEtlZXAgdGFncyBpbiAicmVmIiBmaWVsZCBhcyBoaW50IGZvciBvdGhlciB0b29scy4KKwkJCQkJCQlTdHJpbmcgZmllbGQgPSBwcm9qLmdldFJldmlzaW9uKCkuc3RhcnRzV2l0aCgKKwkJCQkJCQkJCVJfVEFHUykgPyAicmVmIiA6ICJicmFuY2giOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCBmaWVsZCwgLy8kTk9OLU5MUy0xJAogCQkJCQkJCQkJcHJvai5nZXRSZXZpc2lvbigpKTsKIAkJCQkJCX0KIApAQCAtNjgyLDUwICs2OTMsMjIgQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCQkJYnVpbGRlci5maW5pc2goKTsKIAkJCQlPYmplY3RJZCB0cmVlSWQgPSBpbmRleC53cml0ZVRyZWUoaW5zZXJ0ZXIpOwogCi0JCQkJLy8gQ3JlYXRlIGEgQ29tbWl0IG9iamVjdCwgcG9wdWxhdGUgaXQgYW5kIHdyaXRlIGl0Ci0JCQkJT2JqZWN0SWQgaGVhZElkID0gcmVwby5yZXNvbHZlKHRhcmdldEJyYW5jaCArICJee2NvbW1pdH0iKTsgLy8kTk9OLU5MUy0xJAotCQkJCWlmIChoZWFkSWQgIT0gbnVsbCAmJiBydy5wYXJzZUNvbW1pdChoZWFkSWQpLmdldFRyZWUoKS5nZXRJZCgpLmVxdWFscyh0cmVlSWQpKSB7Ci0JCQkJCS8vIE5vIGNoYW5nZS4gRG8gbm90aGluZy4KLQkJCQkJcmV0dXJuIHJ3LnBhcnNlQ29tbWl0KGhlYWRJZCk7CisJCQkJbG9uZyBwcmV2RGVsYXkgPSAwOworCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgTE9DS19GQUlMVVJFX01BWF9SRVRSSUVTIC0gMTsgaSsrKSB7CisJCQkJCXRyeSB7CisJCQkJCQlyZXR1cm4gY29tbWl0VHJlZU9uQ3VycmVudFRpcCgKKwkJCQkJCQlpbnNlcnRlciwgcncsIHRyZWVJZCk7CisJCQkJCX0gY2F0Y2ggKENvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb24gZSkgeworCQkJCQkJcHJldkRlbGF5ID0gRmlsZVV0aWxzLmRlbGF5KHByZXZEZWxheSwKKwkJCQkJCQkJTE9DS19GQUlMVVJFX01JTl9SRVRSWV9ERUxBWV9NSUxMSVMsCisJCQkJCQkJCUxPQ0tfRkFJTFVSRV9NQVhfUkVUUllfREVMQVlfTUlMTElTKTsKKwkJCQkJCVRocmVhZC5zbGVlcChwcmV2RGVsYXkpOworCQkJCQkJcmVwby5nZXRSZWZEYXRhYmFzZSgpLnJlZnJlc2goKTsKKwkJCQkJfQogCQkJCX0KLQotCQkJCUNvbW1pdEJ1aWxkZXIgY29tbWl0ID0gbmV3IENvbW1pdEJ1aWxkZXIoKTsKLQkJCQljb21taXQuc2V0VHJlZUlkKHRyZWVJZCk7Ci0JCQkJaWYgKGhlYWRJZCAhPSBudWxsKQotCQkJCQljb21taXQuc2V0UGFyZW50SWRzKGhlYWRJZCk7Ci0JCQkJY29tbWl0LnNldEF1dGhvcihhdXRob3IpOwotCQkJCWNvbW1pdC5zZXRDb21taXR0ZXIoYXV0aG9yKTsKLQkJCQljb21taXQuc2V0TWVzc2FnZShSZXBvVGV4dC5nZXQoKS5yZXBvQ29tbWl0TWVzc2FnZSk7Ci0KLQkJCQlPYmplY3RJZCBjb21taXRJZCA9IGluc2VydGVyLmluc2VydChjb21taXQpOwotCQkJCWluc2VydGVyLmZsdXNoKCk7Ci0KLQkJCQlSZWZVcGRhdGUgcnUgPSByZXBvLnVwZGF0ZVJlZih0YXJnZXRCcmFuY2gpOwotCQkJCXJ1LnNldE5ld09iamVjdElkKGNvbW1pdElkKTsKLQkJCQlydS5zZXRFeHBlY3RlZE9sZE9iamVjdElkKGhlYWRJZCAhPSBudWxsID8gaGVhZElkIDogT2JqZWN0SWQuemVyb0lkKCkpOwotCQkJCVJlc3VsdCByYyA9IHJ1LnVwZGF0ZShydyk7Ci0KLQkJCQlzd2l0Y2ggKHJjKSB7Ci0JCQkJCWNhc2UgTkVXOgotCQkJCQljYXNlIEZPUkNFRDoKLQkJCQkJY2FzZSBGQVNUX0ZPUldBUkQ6Ci0JCQkJCQkvLyBTdWNjZXNzZnVsLiBEbyBub3RoaW5nLgotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgUkVKRUNURUQ6Ci0JCQkJCWNhc2UgTE9DS19GQUlMVVJFOgotCQkJCQkJdGhyb3cgbmV3IENvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb24oCi0JCQkJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQkJCQkJCUpHaXRUZXh0LmdldCgpLmNhbm5vdExvY2ssIHRhcmdldEJyYW5jaCksCi0JCQkJCQkJCXJ1LmdldFJlZigpLAotCQkJCQkJCQlyYyk7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQl0aHJvdyBuZXcgSkdpdEludGVybmFsRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQkJCQlKR2l0VGV4dC5nZXQoKS51cGRhdGluZ1JlZkZhaWxlZCwKLQkJCQkJCQkJdGFyZ2V0QnJhbmNoLCBjb21taXRJZC5uYW1lKCksIHJjKSk7Ci0JCQkJfQotCi0JCQkJcmV0dXJuIHJ3LnBhcnNlQ29tbWl0KGNvbW1pdElkKTsKLQkJCX0gY2F0Y2ggKEdpdEFQSUV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uIGUpIHsKKwkJCQkvLyBJbiB0aGUgbGFzdCB0cnksIGp1c3QgcHJvcGFnYXRlIHRoZSBleGNlcHRpb25zCisJCQkJcmV0dXJuIGNvbW1pdFRyZWVPbkN1cnJlbnRUaXAoaW5zZXJ0ZXIsIHJ3LCB0cmVlSWQpOworCQkJfSBjYXRjaCAoR2l0QVBJRXhjZXB0aW9uIHwgSU9FeGNlcHRpb24gfCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CiAJCQkJdGhyb3cgbmV3IE1hbmlmZXN0RXJyb3JFeGNlcHRpb24oZSk7CiAJCQl9CiAJCX0KQEAgLTc0Miw2ICs3MjUsNTEgQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCX0KIAl9CiAKKworCXByaXZhdGUgUmV2Q29tbWl0IGNvbW1pdFRyZWVPbkN1cnJlbnRUaXAoT2JqZWN0SW5zZXJ0ZXIgaW5zZXJ0ZXIsCisJCQlSZXZXYWxrIHJ3LCBPYmplY3RJZCB0cmVlSWQpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24sIENvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb24geworCQlPYmplY3RJZCBoZWFkSWQgPSByZXBvLnJlc29sdmUodGFyZ2V0QnJhbmNoICsgIl57Y29tbWl0fSIpOyAvLyROT04tTkxTLTEkCisJCWlmIChoZWFkSWQgIT0gbnVsbCAmJiBydy5wYXJzZUNvbW1pdChoZWFkSWQpLmdldFRyZWUoKS5nZXRJZCgpLmVxdWFscyh0cmVlSWQpKSB7CisJCQkvLyBObyBjaGFuZ2UuIERvIG5vdGhpbmcuCisJCQlyZXR1cm4gcncucGFyc2VDb21taXQoaGVhZElkKTsKKwkJfQorCisJCUNvbW1pdEJ1aWxkZXIgY29tbWl0ID0gbmV3IENvbW1pdEJ1aWxkZXIoKTsKKwkJY29tbWl0LnNldFRyZWVJZCh0cmVlSWQpOworCQlpZiAoaGVhZElkICE9IG51bGwpCisJCQljb21taXQuc2V0UGFyZW50SWRzKGhlYWRJZCk7CisJCWNvbW1pdC5zZXRBdXRob3IoYXV0aG9yKTsKKwkJY29tbWl0LnNldENvbW1pdHRlcihhdXRob3IpOworCQljb21taXQuc2V0TWVzc2FnZShSZXBvVGV4dC5nZXQoKS5yZXBvQ29tbWl0TWVzc2FnZSk7CisKKwkJT2JqZWN0SWQgY29tbWl0SWQgPSBpbnNlcnRlci5pbnNlcnQoY29tbWl0KTsKKwkJaW5zZXJ0ZXIuZmx1c2goKTsKKworCQlSZWZVcGRhdGUgcnUgPSByZXBvLnVwZGF0ZVJlZih0YXJnZXRCcmFuY2gpOworCQlydS5zZXROZXdPYmplY3RJZChjb21taXRJZCk7CisJCXJ1LnNldEV4cGVjdGVkT2xkT2JqZWN0SWQoaGVhZElkICE9IG51bGwgPyBoZWFkSWQgOiBPYmplY3RJZC56ZXJvSWQoKSk7CisJCVJlc3VsdCByYyA9IHJ1LnVwZGF0ZShydyk7CisJCXN3aXRjaCAocmMpIHsKKwkJCWNhc2UgTkVXOgorCQkJY2FzZSBGT1JDRUQ6CisJCQljYXNlIEZBU1RfRk9SV0FSRDoKKwkJCQkvLyBTdWNjZXNzZnVsLiBEbyBub3RoaW5nLgorCQkJCWJyZWFrOworCQkJY2FzZSBSRUpFQ1RFRDoKKwkJCWNhc2UgTE9DS19GQUlMVVJFOgorCQkJCXRocm93IG5ldyBDb25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKKwkJCQkJCS5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuY2Fubm90TG9jaywgdGFyZ2V0QnJhbmNoKSwKKwkJCQkJCXJ1LmdldFJlZigpLCByYyk7CisJCQlkZWZhdWx0OgorCQkJCXRocm93IG5ldyBKR2l0SW50ZXJuYWxFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQlKR2l0VGV4dC5nZXQoKS51cGRhdGluZ1JlZkZhaWxlZCwKKwkJCQkJCXRhcmdldEJyYW5jaCwgY29tbWl0SWQubmFtZSgpLCByYykpOworCQl9CisKKwkJcmV0dXJuIHJ3LnBhcnNlQ29tbWl0KGNvbW1pdElkKTsKKwl9CisKIAlwcml2YXRlIHZvaWQgYWRkU3VibW9kdWxlKFN0cmluZyBuYW1lLCBTdHJpbmcgdXJsLCBTdHJpbmcgcGF0aCwKIAkJCVN0cmluZyByZXZpc2lvbiwgTGlzdDxDb3B5RmlsZT4gY29weWZpbGVzLCBMaXN0PExpbmtGaWxlPiBsaW5rZmlsZXMsCiAJCQlHaXQgZ2l0KSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LmphdmEKaW5kZXggYjk0MmMwOS4uZTFmYTE0NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQuamF2YQpAQCAtNDEsNiArNDEsOSBAQCBwdWJsaWMgc3RhdGljIEpHaXRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGFOZXdPYmplY3RJZElzUmVxdWlyZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBhbkV4Y2VwdGlvbk9jY3VycmVkV2hpbGVUcnlpbmdUb0FkZFRoZUlkT2ZIRUFEOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYW5TU0hTZXNzaW9uSGFzQmVlbkFscmVhZHlDcmVhdGVkOworCS8qKiovIHB1YmxpYyBTdHJpbmcgYXBwbHlCaW5hcnlCYXNlT2lkV3Jvbmc7CisJLyoqKi8gcHVibGljIFN0cmluZyBhcHBseUJpbmFyeU9pZFRvb1Nob3J0OworCS8qKiovIHB1YmxpYyBTdHJpbmcgYXBwbHlCaW5hcnlSZXN1bHRPaWRXcm9uZzsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGFwcGx5aW5nQ29tbWl0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYXJjaGl2ZUZvcm1hdEFscmVhZHlBYnNlbnQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBhcmNoaXZlRm9ybWF0QWxyZWFkeVJlZ2lzdGVyZWQ7CkBAIC02NSw3ICs2OCwxOSBAQCBwdWJsaWMgc3RhdGljIEpHaXRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGJhZFNlY3Rpb25FbnRyeTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGJhZFNoYWxsb3dMaW5lOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYmFyZVJlcG9zaXRvcnlOb1dvcmtkaXJBbmRJbmRleDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJhc2U4NWludmFsaWRDaGFyOworCS8qKiovIHB1YmxpYyBTdHJpbmcgYmFzZTg1bGVuZ3RoOworCS8qKiovIHB1YmxpYyBTdHJpbmcgYmFzZTg1b3ZlcmZsb3c7CisJLyoqKi8gcHVibGljIFN0cmluZyBiYXNlODV0b29Mb25nOworCS8qKiovIHB1YmxpYyBTdHJpbmcgYmFzZTg1dG9vU2hvcnQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBiYXNlTGVuZ3RoSW5jb3JyZWN0OworCS8qKiovIHB1YmxpYyBTdHJpbmcgYmluYXJ5RGVsdGFCYXNlTGVuZ3RoTWlzbWF0Y2g7CisJLyoqKi8gcHVibGljIFN0cmluZyBiaW5hcnlEZWx0YUludmFsaWRPZmZzZXQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBiaW5hcnlEZWx0YUludmFsaWRSZXN1bHRMZW5ndGg7CisJLyoqKi8gcHVibGljIFN0cmluZyBiaW5hcnlIdW5rRGVjb2RlRXJyb3I7CisJLyoqKi8gcHVibGljIFN0cmluZyBiaW5hcnlIdW5rSW52YWxpZExlbmd0aDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJpbmFyeUh1bmtMaW5lVG9vU2hvcnQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBiaW5hcnlIdW5rTWlzc2luZ05ld2xpbmU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBiaXRtYXBNaXNzaW5nT2JqZWN0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYml0bWFwc011c3RCZVByZXBhcmVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYmxhbWVOb3RDb21taXR0ZWRZZXQ7CkBAIC0xNjcsNiArMTgyLDcgQEAgcHVibGljIHN0YXRpYyBKR2l0VGV4dCBnZXQoKSB7CiAJLyoqKi8gcHVibGljIFN0cmluZyBjb25uZWN0aW9uRmFpbGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29ubmVjdGlvblRpbWVPdXQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBjb250ZXh0TXVzdEJlTm9uTmVnYXRpdmU7CisJLyoqKi8gcHVibGljIFN0cmluZyBjb29raWVGaWxlUGF0aFJlbGF0aXZlOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29ycnVwdGlvbkRldGVjdGVkUmVSZWFkaW5nQXQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBjb3JydXB0T2JqZWN0QmFkRGF0ZTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGNvcnJ1cHRPYmplY3RCYWRFbWFpbDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0dDLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9HQy5qYXZhCmluZGV4IDlmZmZmOWYuLjQwYzA3NWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0dDLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvR0MuamF2YQpAQCAtMzQ0LDEwICszNDQsMTAgQEAgcHJpdmF0ZSB2b2lkIGRlbGV0ZU9sZFBhY2tzKENvbGxlY3Rpb248UGFjaz4gb2xkUGFja3MsCiAJCQkJCSYmIHJlcG8uZ2V0RlMoKQogCQkJCQkJCS5sYXN0TW9kaWZpZWRJbnN0YW50KG9sZFBhY2suZ2V0UGFja0ZpbGUoKSkKIAkJCQkJCQkudG9FcG9jaE1pbGxpKCkgPCBwYWNrRXhwaXJlRGF0ZSkgewotCQkJCW9sZFBhY2suY2xvc2UoKTsKIAkJCQlpZiAoc2hvdWxkTG9vc2VuKSB7CiAJCQkJCWxvb3NlbihpbnNlcnRlciwgcmVhZGVyLCBvbGRQYWNrLCBpZHMpOwogCQkJCX0KKwkJCQlvbGRQYWNrLmNsb3NlKCk7CiAJCQkJcHJ1bmVQYWNrKG9sZFBhY2suZ2V0UGFja0ZpbGUoKSk7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKaW5kZXggYzUxNDI3MC4uNmZiYjRjNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE3LCBHb29nbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDE4LCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIxLCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjEsNyArMjEsOCBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CkBAIC04MiwxMiArODMsNiBAQAogICovCiBwdWJsaWMgY2xhc3MgT3BlblNzaENvbmZpZ0ZpbGUgaW1wbGVtZW50cyBTc2hDb25maWdTdG9yZSB7CiAKLQkvKioKLQkgKiAiSG9zdCIgbmFtZSBvZiB0aGUgSG9zdEVudHJ5IGZvciB0aGUgZGVmYXVsdCBvcHRpb25zIGJlZm9yZSB0aGUgZmlyc3QKLQkgKiBob3N0IGJsb2NrIGluIGEgY29uZmlnIGZpbGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTkFNRSA9ICIiOyAvLyROT04tTkxTLTEkCi0KIAkvKiogVGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgYXMga2V5IGZpbGVzIG1heSBiZSByZWxhdGl2ZSB0byBoZXJlLiAqLwogCXByaXZhdGUgZmluYWwgRmlsZSBob21lOwogCkBAIC0xMDUsMTEgKzEwMCw5IEBAIHB1YmxpYyBjbGFzcyBPcGVuU3NoQ29uZmlnRmlsZSBpbXBsZW1lbnRzIFNzaENvbmZpZ1N0b3JlIHsKIAkgKiBmdWxseSByZXNvbHZlZCBlbnRyaWVzIGNyZWF0ZWQgZnJvbSB0aGF0LgogCSAqLwogCXByaXZhdGUgc3RhdGljIGNsYXNzIFN0YXRlIHsKLQkJLy8gS2V5ZWQgYnkgcGF0dGVybjsgaWYgYSAiSG9zdCIgbGluZSBoYXMgbXVsdGlwbGUgcGF0dGVybnMsIHdlIGdlbmVyYXRlCi0JCS8vIGR1cGxpY2F0ZSBIb3N0RW50cnkgb2JqZWN0cwotCQlNYXA8U3RyaW5nLCBIb3N0RW50cnk+IGVudHJpZXMgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisJCUxpc3Q8SG9zdEVudHJ5PiBlbnRyaWVzID0gbmV3IExpbmtlZExpc3Q8PigpOwogCi0JCS8vIEtleWVkIGJ5IHVzZXJAaG9zdG5hbWU6cG9ydAorCQkvLyBQcmV2aW91cyBsb29rdXBzLCBrZXllZCBieSB1c2VyQGhvc3RuYW1lOnBvcnQKIAkJTWFwPFN0cmluZywgSG9zdEVudHJ5PiBob3N0cyA9IG5ldyBIYXNoTWFwPD4oKTsKIAogCQlAT3ZlcnJpZGUKQEAgLTE2NSwxNCArMTU4LDE2IEBAIHB1YmxpYyBIb3N0RW50cnkgbG9va3VwKEBOb25OdWxsIFN0cmluZyBob3N0TmFtZSwgaW50IHBvcnQsCiAJCQlyZXR1cm4gaDsKIAkJfQogCQlIb3N0RW50cnkgZnVsbENvbmZpZyA9IG5ldyBIb3N0RW50cnkoKTsKLQkJLy8gSW5pdGlhbGl6ZSB3aXRoIGRlZmF1bHQgZW50cmllcyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLCBiZWZvcmUgdGhlCi0JCS8vIGZpcnN0IEhvc3QgYmxvY2suCi0JCWZ1bGxDb25maWcubWVyZ2UoY2FjaGUuZW50cmllcy5nZXQoREVGQVVMVF9OQU1FKSk7Ci0JCWZvciAoTWFwLkVudHJ5PFN0cmluZywgSG9zdEVudHJ5PiBlIDogY2FjaGUuZW50cmllcy5lbnRyeVNldCgpKSB7Ci0JCQlTdHJpbmcgcGF0dGVybiA9IGUuZ2V0S2V5KCk7Ci0JCQlpZiAoaXNIb3N0TWF0Y2gocGF0dGVybiwgaG9zdE5hbWUpKSB7Ci0JCQkJZnVsbENvbmZpZy5tZXJnZShlLmdldFZhbHVlKCkpOwotCQkJfQorCQlJdGVyYXRvcjxIb3N0RW50cnk+IGVudHJpZXMgPSBjYWNoZS5lbnRyaWVzLml0ZXJhdG9yKCk7CisJCWlmIChlbnRyaWVzLmhhc05leHQoKSkgeworCQkJLy8gU2hvdWxkIGFsd2F5cyBoYXZlIGF0IGxlYXN0IHRoZSBmaXJzdCB0b3AgZW50cnkgY29udGFpbmluZworCQkJLy8ga2V5LXZhbHVlIHBhaXJzIGJlZm9yZSB0aGUgZmlyc3QgSG9zdCBibG9jaworCQkJZnVsbENvbmZpZy5tZXJnZShlbnRyaWVzLm5leHQoKSk7CisJCQllbnRyaWVzLmZvckVhY2hSZW1haW5pbmcoZW50cnkgLT4geworCQkJCWlmIChlbnRyeS5tYXRjaGVzKGhvc3ROYW1lKSkgeworCQkJCQlmdWxsQ29uZmlnLm1lcmdlKGVudHJ5KTsKKwkJCQl9CisJCQl9KTsKIAkJfQogCQlmdWxsQ29uZmlnLnN1YnN0aXR1dGUoaG9zdE5hbWUsIHBvcnQsIHVzZXJOYW1lLCBsb2NhbFVzZXJOYW1lLCBob21lKTsKIAkJY2FjaGUuaG9zdHMucHV0KGNhY2hlS2V5LCBmdWxsQ29uZmlnKTsKQEAgLTIwOCwyMCArMjAzLDE5IEBAIHByaXZhdGUgc3luY2hyb25pemVkIFN0YXRlIHJlZnJlc2goKSB7CiAJCXJldHVybiBzdGF0ZTsKIAl9CiAKLQlwcml2YXRlIE1hcDxTdHJpbmcsIEhvc3RFbnRyeT4gcGFyc2UoQnVmZmVyZWRSZWFkZXIgcmVhZGVyKQorCXByaXZhdGUgTGlzdDxIb3N0RW50cnk+IHBhcnNlKEJ1ZmZlcmVkUmVhZGVyIHJlYWRlcikKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZpbmFsIE1hcDxTdHJpbmcsIEhvc3RFbnRyeT4gZW50cmllcyA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKLQkJZmluYWwgTGlzdDxIb3N0RW50cnk+IGN1cnJlbnQgPSBuZXcgQXJyYXlMaXN0PD4oNCk7Ci0JCVN0cmluZyBsaW5lOworCQlmaW5hbCBMaXN0PEhvc3RFbnRyeT4gZW50cmllcyA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKIAogCQkvLyBUaGUgbWFuIHBhZ2UgZG9lc24ndCBzYXkgc28sIGJ1dCB0aGUgb3BlbnNzaCBwYXJzZXIgKHJlYWRjb25mLmMpCiAJCS8vIHN0YXJ0cyBvdXQgaW4gYWN0aXZlIG1vZGUgYW5kIHRodXMgYWx3YXlzIGFwcGxpZXMgYW55IGxpbmVzIHRoYXQKIAkJLy8gb2NjdXIgYmVmb3JlIHRoZSBmaXJzdCBob3N0IGJsb2NrLiBXZSBnYXRoZXIgdGhvc2Ugb3B0aW9ucyBpbiBhCiAJCS8vIEhvc3RFbnRyeSBmb3IgREVGQVVMVF9OQU1FLgogCQlIb3N0RW50cnkgZGVmYXVsdHMgPSBuZXcgSG9zdEVudHJ5KCk7Ci0JCWN1cnJlbnQuYWRkKGRlZmF1bHRzKTsKLQkJZW50cmllcy5wdXQoREVGQVVMVF9OQU1FLCBkZWZhdWx0cyk7CisJCUhvc3RFbnRyeSBjdXJyZW50ID0gZGVmYXVsdHM7CisJCWVudHJpZXMuYWRkKGRlZmF1bHRzKTsKIAorCQlTdHJpbmcgbGluZTsKIAkJd2hpbGUgKChsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKIAkJCS8vIE9wZW5Tc2ggaWdub3JlcyB0cmFpbGluZyBjb21tZW50cyBvbiBhIGxpbmUuIEFueXRoaW5nIGFmdGVyIHRoZQogCQkJLy8gZmlyc3QgIyBvbiBhIGxpbmUgaXMgdHJpbW1lZCBhd2F5ICh5ZXMsIGV2ZW4gaWYgdGhlIGhhc2ggaXMKQEAgLTI0NiwzOCArMjQwLDE3IEBAIHByaXZhdGUgTWFwPFN0cmluZywgSG9zdEVudHJ5PiBwYXJzZShCdWZmZXJlZFJlYWRlciByZWFkZXIpCiAJCQlTdHJpbmcgYXJnVmFsdWUgPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFydHNbMV0udHJpbSgpIDogIiI7IC8vJE5PTi1OTFMtMSQKIAogCQkJaWYgKFN0cmluZ1V0aWxzLmVxdWFsc0lnbm9yZUNhc2UoU3NoQ29uc3RhbnRzLkhPU1QsIGtleXdvcmQpKSB7Ci0JCQkJY3VycmVudC5jbGVhcigpOwotCQkJCWZvciAoU3RyaW5nIG5hbWUgOiBwYXJzZUxpc3QoYXJnVmFsdWUpKSB7Ci0JCQkJCWlmIChuYW1lID09IG51bGwgfHwgbmFtZS5pc0VtcHR5KCkpIHsKLQkJCQkJCS8vIG51bGwgc2hvdWxkIG5vdCBvY2N1ciwgYnV0IGJldHRlciBiZSBzYWZlIHRoYW4gc29ycnkuCi0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQlIb3N0RW50cnkgYyA9IGVudHJpZXMuZ2V0KG5hbWUpOwotCQkJCQlpZiAoYyA9PSBudWxsKSB7Ci0JCQkJCQljID0gbmV3IEhvc3RFbnRyeSgpOwotCQkJCQkJZW50cmllcy5wdXQobmFtZSwgYyk7Ci0JCQkJCX0KLQkJCQkJY3VycmVudC5hZGQoYyk7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJfQotCi0JCQlpZiAoY3VycmVudC5pc0VtcHR5KCkpIHsKLQkJCQkvLyBXZSByZWNlaXZlZCBhbiBvcHRpb24gb3V0c2lkZSBvZiBhIEhvc3QgYmxvY2suIFdlCi0JCQkJLy8gZG9uJ3Qga25vdyB3aG8gdGhpcyBzaG91bGQgbWF0Y2ggYWdhaW5zdCwgc28gc2tpcC4KKwkJCQljdXJyZW50ID0gbmV3IEhvc3RFbnRyeShwYXJzZUxpc3QoYXJnVmFsdWUpKTsKKwkJCQllbnRyaWVzLmFkZChjdXJyZW50KTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAogCQkJaWYgKEhvc3RFbnRyeS5pc0xpc3RLZXkoa2V5d29yZCkpIHsKIAkJCQlMaXN0PFN0cmluZz4gYXJncyA9IHZhbGlkYXRlKGtleXdvcmQsIHBhcnNlTGlzdChhcmdWYWx1ZSkpOwotCQkJCWZvciAoSG9zdEVudHJ5IGVudHJ5IDogY3VycmVudCkgewotCQkJCQllbnRyeS5zZXRWYWx1ZShrZXl3b3JkLCBhcmdzKTsKLQkJCQl9CisJCQkJY3VycmVudC5zZXRWYWx1ZShrZXl3b3JkLCBhcmdzKTsKIAkJCX0gZWxzZSBpZiAoIWFyZ1ZhbHVlLmlzRW1wdHkoKSkgewogCQkJCWFyZ1ZhbHVlID0gdmFsaWRhdGUoa2V5d29yZCwgZGVxdW90ZShhcmdWYWx1ZSkpOwotCQkJCWZvciAoSG9zdEVudHJ5IGVudHJ5IDogY3VycmVudCkgewotCQkJCQllbnRyeS5zZXRWYWx1ZShrZXl3b3JkLCBhcmdWYWx1ZSk7Ci0JCQkJfQorCQkJCWN1cnJlbnQuc2V0VmFsdWUoa2V5d29yZCwgYXJnVmFsdWUpOwogCQkJfQogCQl9CiAKQEAgLTMwMCw3ICsyNzMsNyBAQCBwcml2YXRlIExpc3Q8U3RyaW5nPiBwYXJzZUxpc3QoU3RyaW5nIGFyZ3VtZW50KSB7CiAJCWludCBsZW5ndGggPSBhcmd1bWVudC5sZW5ndGgoKTsKIAkJd2hpbGUgKHN0YXJ0IDwgbGVuZ3RoKSB7CiAJCQkvLyBTa2lwIHdoaXRlc3BhY2UKLQkJCWlmIChDaGFyYWN0ZXIuaXNTcGFjZUNoYXIoYXJndW1lbnQuY2hhckF0KHN0YXJ0KSkpIHsKKwkJCWlmIChDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGFyZ3VtZW50LmNoYXJBdChzdGFydCkpKSB7CiAJCQkJc3RhcnQrKzsKIAkJCQljb250aW51ZTsKIAkJCX0KQEAgLTMxNSw3ICsyODgsNyBAQCBwcml2YXRlIExpc3Q8U3RyaW5nPiBwYXJzZUxpc3QoU3RyaW5nIGFyZ3VtZW50KSB7CiAJCQl9IGVsc2UgewogCQkJCWludCBzdG9wID0gc3RhcnQgKyAxOwogCQkJCXdoaWxlIChzdG9wIDwgbGVuZ3RoCi0JCQkJCQkmJiAhQ2hhcmFjdGVyLmlzU3BhY2VDaGFyKGFyZ3VtZW50LmNoYXJBdChzdG9wKSkpIHsKKwkJCQkJCSYmICFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGFyZ3VtZW50LmNoYXJBdChzdG9wKSkpIHsKIAkJCQkJc3RvcCsrOwogCQkJCX0KIAkJCQlyZXN1bHQuYWRkKGFyZ3VtZW50LnN1YnN0cmluZyhzdGFydCwgc3RvcCkpOwpAQCAtMzU4LDEzICszMzEsNiBAQCBwcm90ZWN0ZWQgTGlzdDxTdHJpbmc+IHZhbGlkYXRlKFN0cmluZyBrZXksIExpc3Q8U3RyaW5nPiB2YWx1ZSkgewogCQlyZXR1cm4gdmFsdWU7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0hvc3RNYXRjaChTdHJpbmcgcGF0dGVybiwgU3RyaW5nIG5hbWUpIHsKLQkJaWYgKHBhdHRlcm4uc3RhcnRzV2l0aCgiISIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCXJldHVybiAhcGF0dGVybk1hdGNoZXNIb3N0KHBhdHRlcm4uc3Vic3RyaW5nKDEpLCBuYW1lKTsKLQkJfQotCQlyZXR1cm4gcGF0dGVybk1hdGNoZXNIb3N0KHBhdHRlcm4sIG5hbWUpOwotCX0KLQogCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGF0dGVybk1hdGNoZXNIb3N0KFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgbmFtZSkgewogCQlpZiAocGF0dGVybi5pbmRleE9mKCcqJykgPj0gMCB8fCBwYXR0ZXJuLmluZGV4T2YoJz8nKSA+PSAwKSB7CiAJCQlmaW5hbCBGaWxlTmFtZU1hdGNoZXIgZm47CkBAIC0zODksOSArMzU1LDEyIEBAIHByaXZhdGUgc3RhdGljIFN0cmluZyBkZXF1b3RlKFN0cmluZyB2YWx1ZSkgewogCiAJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0cmlwV2hpdGVzcGFjZShTdHJpbmcgdmFsdWUpIHsKIAkJZmluYWwgU3RyaW5nQnVpbGRlciBiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlpZiAoIUNoYXJhY3Rlci5pc1NwYWNlQ2hhcih2YWx1ZS5jaGFyQXQoaSkpKQotCQkJCWIuYXBwZW5kKHZhbHVlLmNoYXJBdChpKSk7CisJCWludCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQkJY2hhciBjaCA9IHZhbHVlLmNoYXJBdChpKTsKKwkJCWlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaCkpIHsKKwkJCQliLmFwcGVuZChjaCk7CisJCQl9CiAJCX0KIAkJcmV0dXJuIGIudG9TdHJpbmcoKTsKIAl9CkBAIC01MTEsNiArNDgwLDMyIEBAIHB1YmxpYyBzdGF0aWMgY2xhc3MgSG9zdEVudHJ5IGltcGxlbWVudHMgU3NoQ29uZmlnU3RvcmUuSG9zdENvbmZpZyB7CiAKIAkJcHJpdmF0ZSBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGxpc3RPcHRpb25zOwogCisJCXByaXZhdGUgZmluYWwgTGlzdDxTdHJpbmc+IHBhdHRlcm5zOworCisJCS8vIENvbnN0cnVjdG9yIHVzZWQgdG8gYnVpbGQgdGhlIG1lcmdlZCBlbnRyeTsgbmV2ZXIgbWF0Y2hlcyBhbnl0aGluZworCQlIb3N0RW50cnkoKSB7CisJCQl0aGlzLnBhdHRlcm5zID0gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CisJCX0KKworCQlIb3N0RW50cnkoTGlzdDxTdHJpbmc+IHBhdHRlcm5zKSB7CisJCQl0aGlzLnBhdHRlcm5zID0gcGF0dGVybnM7CisJCX0KKworCQlib29sZWFuIG1hdGNoZXMoU3RyaW5nIGhvc3ROYW1lKSB7CisJCQlib29sZWFuIGRvZXNNYXRjaCA9IGZhbHNlOworCQkJZm9yIChTdHJpbmcgcGF0dGVybiA6IHBhdHRlcm5zKSB7CisJCQkJaWYgKHBhdHRlcm4uc3RhcnRzV2l0aCgiISIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJaWYgKHBhdHRlcm5NYXRjaGVzSG9zdChwYXR0ZXJuLnN1YnN0cmluZygxKSwgaG9zdE5hbWUpKSB7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKCFkb2VzTWF0Y2gKKwkJCQkJCSYmIHBhdHRlcm5NYXRjaGVzSG9zdChwYXR0ZXJuLCBob3N0TmFtZSkpIHsKKwkJCQkJZG9lc01hdGNoID0gdHJ1ZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZG9lc01hdGNoOworCQl9CisKIAkJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRvS2V5KFN0cmluZyBrZXkpIHsKIAkJCVN0cmluZyBrID0gQUxJQVNFUy5nZXQoa2V5KTsKIAkJCXJldHVybiBrICE9IG51bGwgPyBrIDoga2V5OwpAQCAtNzA4LDEwICs3MDMsMTAgQEAgdm9pZCBtZXJnZShIb3N0RW50cnkgZW50cnkpIHsKIAkJfQogCiAJCXByaXZhdGUgTGlzdDxTdHJpbmc+IHN1YnN0aXR1dGUoTGlzdDxTdHJpbmc+IHZhbHVlcywgU3RyaW5nIGFsbG93ZWQsCi0JCQkJUmVwbGFjZXIgcikgeworCQkJCVJlcGxhY2VyIHIsIGJvb2xlYW4gd2l0aEVudikgewogCQkJTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8Pih2YWx1ZXMuc2l6ZSgpKTsKIAkJCWZvciAoU3RyaW5nIHZhbHVlIDogdmFsdWVzKSB7Ci0JCQkJcmVzdWx0LmFkZChyLnN1YnN0aXR1dGUodmFsdWUsIGFsbG93ZWQpKTsKKwkJCQlyZXN1bHQuYWRkKHIuc3Vic3RpdHV0ZSh2YWx1ZSwgYWxsb3dlZCwgd2l0aEVudikpOwogCQkJfQogCQkJcmV0dXJuIHJlc3VsdDsKIAkJfQpAQCAtNzQzLDcgKzczOCw3IEBAIHZvaWQgc3Vic3RpdHV0ZShTdHJpbmcgb3JpZ2luYWxIb3N0TmFtZSwgaW50IHBvcnQsIFN0cmluZyB1c2VyTmFtZSwKIAkJCQlpZiAoaG9zdE5hbWUgPT0gbnVsbCB8fCBob3N0TmFtZS5pc0VtcHR5KCkpIHsKIAkJCQkJb3B0aW9ucy5wdXQoU3NoQ29uc3RhbnRzLkhPU1RfTkFNRSwgb3JpZ2luYWxIb3N0TmFtZSk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJaG9zdE5hbWUgPSByLnN1YnN0aXR1dGUoaG9zdE5hbWUsICJoIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJaG9zdE5hbWUgPSByLnN1YnN0aXR1dGUoaG9zdE5hbWUsICJoIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCiAJCQkJCW9wdGlvbnMucHV0KFNzaENvbnN0YW50cy5IT1NUX05BTUUsIGhvc3ROYW1lKTsKIAkJCQkJci51cGRhdGUoJ2gnLCBob3N0TmFtZSk7CiAJCQkJfQpAQCAtNzUyLDEzICs3NDcsMTMgQEAgdm9pZCBzdWJzdGl0dXRlKFN0cmluZyBvcmlnaW5hbEhvc3ROYW1lLCBpbnQgcG9ydCwgU3RyaW5nIHVzZXJOYW1lLAogCQkJCUxpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBtdWx0aU9wdGlvbnMKIAkJCQkJCS5nZXQoU3NoQ29uc3RhbnRzLklERU5USVRZX0ZJTEUpOwogCQkJCWlmICh2YWx1ZXMgIT0gbnVsbCkgewotCQkJCQl2YWx1ZXMgPSBzdWJzdGl0dXRlKHZhbHVlcywgImRobHJ1Iiwgcik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJdmFsdWVzID0gc3Vic3RpdHV0ZSh2YWx1ZXMsICJkaGxydSIsIHIsIHRydWUpOyAvLyROT04tTkxTLTEkCiAJCQkJCXZhbHVlcyA9IHJlcGxhY2VUaWxkZSh2YWx1ZXMsIGhvbWUpOwogCQkJCQltdWx0aU9wdGlvbnMucHV0KFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFLCB2YWx1ZXMpOwogCQkJCX0KIAkJCQl2YWx1ZXMgPSBtdWx0aU9wdGlvbnMuZ2V0KFNzaENvbnN0YW50cy5DRVJUSUZJQ0FURV9GSUxFKTsKIAkJCQlpZiAodmFsdWVzICE9IG51bGwpIHsKLQkJCQkJdmFsdWVzID0gc3Vic3RpdHV0ZSh2YWx1ZXMsICJkaGxydSIsIHIpOyAvLyROT04tTkxTLTEkCisJCQkJCXZhbHVlcyA9IHN1YnN0aXR1dGUodmFsdWVzLCAiZGhscnUiLCByLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAogCQkJCQl2YWx1ZXMgPSByZXBsYWNlVGlsZGUodmFsdWVzLCBob21lKTsKIAkJCQkJbXVsdGlPcHRpb25zLnB1dChTc2hDb25zdGFudHMuQ0VSVElGSUNBVEVfRklMRSwgdmFsdWVzKTsKIAkJCQl9CkBAIC03NzUsMjkgKzc3MCwyOSBAQCB2b2lkIHN1YnN0aXR1dGUoU3RyaW5nIG9yaWdpbmFsSG9zdE5hbWUsIGludCBwb3J0LCBTdHJpbmcgdXNlck5hbWUsCiAJCQkJLy8gSE9TVE5BTUUgYWxyZWFkeSBkb25lIGFib3ZlCiAJCQkJU3RyaW5nIHZhbHVlID0gb3B0aW9ucy5nZXQoU3NoQ29uc3RhbnRzLklERU5USVRZX0FHRU5UKTsKIAkJCQlpZiAodmFsdWUgIT0gbnVsbCkgewotCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgImRobHJ1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJdmFsdWUgPSByLnN1YnN0aXR1dGUodmFsdWUsICJkaGxydSIsIHRydWUpOyAvLyROT04tTkxTLTEkCiAJCQkJCXZhbHVlID0gdG9GaWxlKHZhbHVlLCBob21lKS5nZXRQYXRoKCk7CiAJCQkJCW9wdGlvbnMucHV0KFNzaENvbnN0YW50cy5JREVOVElUWV9BR0VOVCwgdmFsdWUpOwogCQkJCX0KIAkJCQl2YWx1ZSA9IG9wdGlvbnMuZ2V0KFNzaENvbnN0YW50cy5DT05UUk9MX1BBVEgpOwogCQkJCWlmICh2YWx1ZSAhPSBudWxsKSB7Ci0JCQkJCXZhbHVlID0gci5zdWJzdGl0dXRlKHZhbHVlLCAiQ2hMbG5wcnUiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgIkNoTGxucHJ1IiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKIAkJCQkJdmFsdWUgPSB0b0ZpbGUodmFsdWUsIGhvbWUpLmdldFBhdGgoKTsKIAkJCQkJb3B0aW9ucy5wdXQoU3NoQ29uc3RhbnRzLkNPTlRST0xfUEFUSCwgdmFsdWUpOwogCQkJCX0KIAkJCQl2YWx1ZSA9IG9wdGlvbnMuZ2V0KFNzaENvbnN0YW50cy5MT0NBTF9DT01NQU5EKTsKIAkJCQlpZiAodmFsdWUgIT0gbnVsbCkgewotCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgIkNkaGxucHJUdSIpOyAvLyROT04tTkxTLTEkCisJCQkJCXZhbHVlID0gci5zdWJzdGl0dXRlKHZhbHVlLCAiQ2RobG5wclR1IiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCiAJCQkJCW9wdGlvbnMucHV0KFNzaENvbnN0YW50cy5MT0NBTF9DT01NQU5ELCB2YWx1ZSk7CiAJCQkJfQogCQkJCXZhbHVlID0gb3B0aW9ucy5nZXQoU3NoQ29uc3RhbnRzLlJFTU9URV9DT01NQU5EKTsKIAkJCQlpZiAodmFsdWUgIT0gbnVsbCkgewotCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgIkNkaGxucHJ1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJdmFsdWUgPSByLnN1YnN0aXR1dGUodmFsdWUsICJDZGhsbnBydSIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAogCQkJCQlvcHRpb25zLnB1dChTc2hDb25zdGFudHMuUkVNT1RFX0NPTU1BTkQsIHZhbHVlKTsKIAkJCQl9CiAJCQkJdmFsdWUgPSBvcHRpb25zLmdldChTc2hDb25zdGFudHMuUFJPWFlfQ09NTUFORCk7CiAJCQkJaWYgKHZhbHVlICE9IG51bGwpIHsKLQkJCQkJdmFsdWUgPSByLnN1YnN0aXR1dGUodmFsdWUsICJocHIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgImhwciIsIGZhbHNlKTsgLy8kTk9OLU5MUy0xJAogCQkJCQlvcHRpb25zLnB1dChTc2hDb25zdGFudHMuUFJPWFlfQ09NTUFORCwgdmFsdWUpOwogCQkJCX0KIAkJCX0KQEAgLTg3MSw3ICs4NjYsNyBAQCBwdWJsaWMgUmVwbGFjZXIoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgdXNlciwKIAkJCXJlcGxhY2VtZW50cy5wdXQoQ2hhcmFjdGVyLnZhbHVlT2YoJ3InKSwgdXNlciA9PSBudWxsID8gIiIgOiB1c2VyKTsgLy8kTk9OLU5MUy0xJAogCQkJcmVwbGFjZW1lbnRzLnB1dChDaGFyYWN0ZXIudmFsdWVPZigndScpLCBsb2NhbFVzZXJOYW1lKTsKIAkJCXJlcGxhY2VtZW50cy5wdXQoQ2hhcmFjdGVyLnZhbHVlT2YoJ0MnKSwKLQkJCQkJc3Vic3RpdHV0ZSgiJWwlaCVwJXIiLCAiaGxwciIpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXN1YnN0aXR1dGUoIiVsJWglcCVyIiwgImhscHIiLCBmYWxzZSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKIAkJCXJlcGxhY2VtZW50cy5wdXQoQ2hhcmFjdGVyLnZhbHVlT2YoJ1QnKSwgIk5PTkUiKTsgLy8kTk9OLU5MUy0xJAogCQl9CiAKQEAgLTg3OSwzNiArODc0LDYzIEBAIHB1YmxpYyB2b2lkIHVwZGF0ZShjaGFyIGtleSwgU3RyaW5nIHZhbHVlKSB7CiAJCQlyZXBsYWNlbWVudHMucHV0KENoYXJhY3Rlci52YWx1ZU9mKGtleSksIHZhbHVlKTsKIAkJCWlmICgibGhwciIuaW5kZXhPZihrZXkpID49IDApIHsgLy8kTk9OLU5MUy0xJAogCQkJCXJlcGxhY2VtZW50cy5wdXQoQ2hhcmFjdGVyLnZhbHVlT2YoJ0MnKSwKLQkJCQkJCXN1YnN0aXR1dGUoIiVsJWglcCVyIiwgImhscHIiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJc3Vic3RpdHV0ZSgiJWwlaCVwJXIiLCAiaGxwciIsIGZhbHNlKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAogCQkJfQogCQl9CiAKLQkJcHVibGljIFN0cmluZyBzdWJzdGl0dXRlKFN0cmluZyBpbnB1dCwgU3RyaW5nIGFsbG93ZWQpIHsKKwkJcHVibGljIFN0cmluZyBzdWJzdGl0dXRlKFN0cmluZyBpbnB1dCwgU3RyaW5nIGFsbG93ZWQsCisJCQkJYm9vbGVhbiB3aXRoRW52KSB7CiAJCQlpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dC5sZW5ndGgoKSA8PSAxCi0JCQkJCXx8IGlucHV0LmluZGV4T2YoJyUnKSA8IDApIHsKKwkJCQkJfHwgKGlucHV0LmluZGV4T2YoJyUnKSA8IDAKKwkJCQkJCQkmJiAoIXdpdGhFbnYgfHwgaW5wdXQuaW5kZXhPZigiJHsiKSA8IDApKSkgeyAvLyROT04tTkxTLTEkCiAJCQkJcmV0dXJuIGlucHV0OwogCQkJfQogCQkJU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKIAkJCWludCBzdGFydCA9IDA7CiAJCQlpbnQgbGVuZ3RoID0gaW5wdXQubGVuZ3RoKCk7CiAJCQl3aGlsZSAoc3RhcnQgPCBsZW5ndGgpIHsKLQkJCQlpbnQgcGVyY2VudCA9IGlucHV0LmluZGV4T2YoJyUnLCBzdGFydCk7Ci0JCQkJaWYgKHBlcmNlbnQgPCAwIHx8IHBlcmNlbnQgKyAxID49IGxlbmd0aCkgewotCQkJCQlidWlsZGVyLmFwcGVuZChpbnB1dC5zdWJzdHJpbmcoc3RhcnQpKTsKKwkJCQljaGFyIGNoID0gaW5wdXQuY2hhckF0KHN0YXJ0KTsKKwkJCQlzd2l0Y2ggKGNoKSB7CisJCQkJY2FzZSAnJSc6CisJCQkJCWlmIChzdGFydCArIDEgPj0gbGVuZ3RoKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlTdHJpbmcgcmVwbGFjZW1lbnQgPSBudWxsOworCQkJCQljaCA9IGlucHV0LmNoYXJBdChzdGFydCArIDEpOworCQkJCQlpZiAoY2ggPT0gJyUnIHx8IGFsbG93ZWQuaW5kZXhPZihjaCkgPj0gMCkgeworCQkJCQkJcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudHMuZ2V0KENoYXJhY3Rlci52YWx1ZU9mKGNoKSk7CisJCQkJCX0KKwkJCQkJaWYgKHJlcGxhY2VtZW50ID09IG51bGwpIHsKKwkJCQkJCWJ1aWxkZXIuYXBwZW5kKCclJykuYXBwZW5kKGNoKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWJ1aWxkZXIuYXBwZW5kKHJlcGxhY2VtZW50KTsKKwkJCQkJfQorCQkJCQlzdGFydCArPSAyOworCQkJCQljb250aW51ZTsKKwkJCQljYXNlICckJzoKKwkJCQkJaWYgKCF3aXRoRW52IHx8IHN0YXJ0ICsgMiA+PSBsZW5ndGgpIHsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWNoID0gaW5wdXQuY2hhckF0KHN0YXJ0ICsgMSk7CisJCQkJCWlmIChjaCA9PSAneycpIHsKKwkJCQkJCWludCBjbG9zZSA9IGlucHV0LmluZGV4T2YoJ30nLCBzdGFydCArIDIpOworCQkJCQkJaWYgKGNsb3NlID4gc3RhcnQgKyAyKSB7CisJCQkJCQkJU3RyaW5nIHZhcmlhYmxlID0gU3lzdGVtUmVhZGVyLmdldEluc3RhbmNlKCkKKwkJCQkJCQkJCS5nZXRlbnYoaW5wdXQuc3Vic3RyaW5nKHN0YXJ0ICsgMiwgY2xvc2UpKTsKKwkJCQkJCQlpZiAoIVN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwodmFyaWFibGUpKSB7CisJCQkJCQkJCWJ1aWxkZXIuYXBwZW5kKHZhcmlhYmxlKTsKKwkJCQkJCQl9CisJCQkJCQkJc3RhcnQgPSBjbG9zZSArIDE7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJY2ggPSAnJCc7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CiAJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlTdHJpbmcgcmVwbGFjZW1lbnQgPSBudWxsOwotCQkJCWNoYXIgY2ggPSBpbnB1dC5jaGFyQXQocGVyY2VudCArIDEpOwotCQkJCWlmIChjaCA9PSAnJScgfHwgYWxsb3dlZC5pbmRleE9mKGNoKSA+PSAwKSB7Ci0JCQkJCXJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnRzLmdldChDaGFyYWN0ZXIudmFsdWVPZihjaCkpOwotCQkJCX0KLQkJCQlpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCkgewotCQkJCQlidWlsZGVyLmFwcGVuZChpbnB1dC5zdWJzdHJpbmcoc3RhcnQsIHBlcmNlbnQgKyAyKSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYnVpbGRlci5hcHBlbmQoaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCBwZXJjZW50KSkKLQkJCQkJCQkuYXBwZW5kKHJlcGxhY2VtZW50KTsKLQkJCQl9Ci0JCQkJc3RhcnQgPSBwZXJjZW50ICsgMjsKKwkJCQlidWlsZGVyLmFwcGVuZChjaCk7CisJCQkJc3RhcnQrKzsKIAkJCX0KIAkJCXJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CiAJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEKaW5kZXggMDNjMWVmOS4uM2UzZDliNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEKQEAgLTM5OCw3ICszOTgsMTUgQEAgcHVibGljIGZpbmFsIGNsYXNzIENvbmZpZ0NvbnN0YW50cyB7CiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9GRiA9ICJmZiI7CiAKIAkvKioKKwkgKiBUaGUgImNvbmZsaWN0U3R5bGUiIGtleS4KKwkgKgorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9DT05GTElDVFNUWUxFID0gImNvbmZsaWN0U3R5bGUiOworCisJLyoqCiAJICogVGhlICJjaGVja3N0YXQiIGtleQorCSAqCiAJICogQHNpbmNlIDMuMAogCSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfQ0hFQ0tTVEFUID0gImNoZWNrc3RhdCI7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL0NvbnRlbnRNZXJnZVN0cmF0ZWd5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL0NvbnRlbnRNZXJnZVN0cmF0ZWd5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1Njg2NAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvQ29udGVudE1lcmdlU3RyYXRlZ3kuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxLCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5tZXJnZTsKKworLyoqCisgKiBIb3cgdG8gaGFuZGxlIGNvbnRlbnQgY29uZmxpY3RzLgorICoKKyAqIEBzaW5jZSA1LjEyCisgKi8KK3B1YmxpYyBlbnVtIENvbnRlbnRNZXJnZVN0cmF0ZWd5IHsKKworCS8qKiBQcm9kdWNlIGEgY29uZmxpY3QuICovCisJQ09ORkxJQ1QsCisKKwkvKiogUmVzb2x2ZSB0aGUgY29uZmxpY3QgaHVuayB1c2luZyB0aGUgb3VycyB2ZXJzaW9uLiAqLworCU9VUlMsCisKKwkvKiogUmVzb2x2ZSB0aGUgY29uZmxpY3QgaHVuayB1c2luZyB0aGUgdGhlaXJzIHZlcnNpb24uICovCisJVEhFSVJTCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZUFsZ29yaXRobS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZUFsZ29yaXRobS5qYXZhCmluZGV4IDI3MTQxYzEuLjgwNjA3MzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VBbGdvcml0aG0uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlQWxnb3JpdGhtLmphdmEKQEAgLTE0LDYgKzE0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk5vbk51bGw7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZBbGdvcml0aG07CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkVkaXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkVkaXRMaXN0OwpAQCAtMjgsOCArMjksMTIgQEAKICAqIGRpZmYgYWxnb3JpdGhtLgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgTWVyZ2VBbGdvcml0aG0geworCiAJcHJpdmF0ZSBmaW5hbCBEaWZmQWxnb3JpdGhtIGRpZmZBbGc7CiAKKwlATm9uTnVsbAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kgPSBDb250ZW50TWVyZ2VTdHJhdGVneS5DT05GTElDVDsKKwogCS8qKgogCSAqIENyZWF0ZXMgYSBuZXcgTWVyZ2VBbGdvcml0aG0gd2hpY2ggdXNlcwogCSAqIHtAbGluayBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuSGlzdG9ncmFtRGlmZn0gYXMgZGlmZiBhbGdvcml0aG0KQEAgLTQ4LDYgKzUzLDMwIEBAIHB1YmxpYyBNZXJnZUFsZ29yaXRobShEaWZmQWxnb3JpdGhtIGRpZmYpIHsKIAkJdGhpcy5kaWZmQWxnID0gZGlmZjsKIAl9CiAKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIHtAbGluayBDb250ZW50TWVyZ2VTdHJhdGVneX0uCisJICoKKwkgKiBAcmV0dXJuIHRoZSB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9IGluIGVmZmVjdAorCSAqIEBzaW5jZSA1LjEyCisJICovCisJQE5vbk51bGwKKwlwdWJsaWMgQ29udGVudE1lcmdlU3RyYXRlZ3kgZ2V0Q29udGVudE1lcmdlU3RyYXRlZ3koKSB7CisJCXJldHVybiBzdHJhdGVneTsKKwl9CisKKwkvKioKKwkgKiBTZXRzIHRoZSB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9LgorCSAqCisJICogQHBhcmFtIHN0cmF0ZWd5CisJICogICAgICAgICAgICB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9IHRvIHNldDsgaWYge0Bjb2RlIG51bGx9LCBzZXQKKwkgKiAgICAgICAgICAgIHtAbGluayBDb250ZW50TWVyZ2VTdHJhdGVneSNDT05GTElDVH0KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyB2b2lkIHNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KSB7CisJCXRoaXMuc3RyYXRlZ3kgPSBzdHJhdGVneSA9PSBudWxsID8gQ29udGVudE1lcmdlU3RyYXRlZ3kuQ09ORkxJQ1QKKwkJCQk6IHN0cmF0ZWd5OworCX0KKwogCS8vIEFuIHNwZWNpYWwgZWRpdCB3aGljaCBhY3RzIGFzIGEgc2VudGluZWwgdmFsdWUgYnkgbWFya2luZyB0aGUgZW5kIHRoZQogCS8vIGxpc3Qgb2YgZWRpdHMKIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBFZGl0IEVORF9FRElUID0gbmV3IEVkaXQoSW50ZWdlci5NQVhfVkFMVUUsCkBAIC03OSwyOSArMTA4LDU0IEBAIHB1YmxpYyA8UyBleHRlbmRzIFNlcXVlbmNlPiBNZXJnZVJlc3VsdDxTPiBtZXJnZSgKIAkJCWlmICh0aGVpcnMuc2l6ZSgpICE9IDApIHsKIAkJCQlFZGl0TGlzdCB0aGVpcnNFZGl0cyA9IGRpZmZBbGcuZGlmZihjbXAsIGJhc2UsIHRoZWlycyk7CiAJCQkJaWYgKCF0aGVpcnNFZGl0cy5pc0VtcHR5KCkpIHsKLQkJCQkJLy8gd2UgZGVsZXRlZCwgdGhleSBtb2RpZmllZCAtPiBMZXQgdGhlaXIgY29tcGxldGUgY29udGVudAotCQkJCQkvLyBjb25mbGljdCB3aXRoIGVtcHR5IHRleHQKLQkJCQkJcmVzdWx0LmFkZCgxLCAwLCAwLCBDb25mbGljdFN0YXRlLkZJUlNUX0NPTkZMSUNUSU5HX1JBTkdFKTsKLQkJCQkJcmVzdWx0LmFkZCgyLCAwLCB0aGVpcnMuc2l6ZSgpLAotCQkJCQkJCUNvbmZsaWN0U3RhdGUuTkVYVF9DT05GTElDVElOR19SQU5HRSk7Ci0JCQkJfSBlbHNlCisJCQkJCS8vIHdlIGRlbGV0ZWQsIHRoZXkgbW9kaWZpZWQKKwkJCQkJc3dpdGNoIChzdHJhdGVneSkgeworCQkJCQljYXNlIE9VUlM6CisJCQkJCQlyZXN1bHQuYWRkKDEsIDAsIDAsIENvbmZsaWN0U3RhdGUuTk9fQ09ORkxJQ1QpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgVEhFSVJTOgorCQkJCQkJcmVzdWx0LmFkZCgyLCAwLCB0aGVpcnMuc2l6ZSgpLAorCQkJCQkJCQlDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJLy8gTGV0IHRoZWlyIGNvbXBsZXRlIGNvbnRlbnQgY29uZmxpY3Qgd2l0aCBlbXB0eSB0ZXh0CisJCQkJCQlyZXN1bHQuYWRkKDEsIDAsIDAsCisJCQkJCQkJCUNvbmZsaWN0U3RhdGUuRklSU1RfQ09ORkxJQ1RJTkdfUkFOR0UpOworCQkJCQkJcmVzdWx0LmFkZCgyLCAwLCB0aGVpcnMuc2l6ZSgpLAorCQkJCQkJCQlDb25mbGljdFN0YXRlLk5FWFRfQ09ORkxJQ1RJTkdfUkFOR0UpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9IGVsc2UgewogCQkJCQkvLyB3ZSBkZWxldGVkLCB0aGV5IGRpZG4ndCBtb2RpZnkgLT4gTGV0IG91ciBkZWxldGlvbiB3aW4KIAkJCQkJcmVzdWx0LmFkZCgxLCAwLCAwLCBDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKLQkJCX0gZWxzZQorCQkJCX0KKwkJCX0gZWxzZSB7CiAJCQkJLy8gd2UgYW5kIHRoZXkgZGVsZXRlZCAtPiByZXR1cm4gYSBzaW5nbGUgY2h1bmsgb2Ygbm90aGluZwogCQkJCXJlc3VsdC5hZGQoMSwgMCwgMCwgQ29uZmxpY3RTdGF0ZS5OT19DT05GTElDVCk7CisJCQl9CiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9IGVsc2UgaWYgKHRoZWlycy5zaXplKCkgPT0gMCkgewogCQkJRWRpdExpc3Qgb3Vyc0VkaXRzID0gZGlmZkFsZy5kaWZmKGNtcCwgYmFzZSwgb3Vycyk7CiAJCQlpZiAoIW91cnNFZGl0cy5pc0VtcHR5KCkpIHsKLQkJCQkvLyB3ZSBtb2RpZmllZCwgdGhleSBkZWxldGVkIC0+IExldCBvdXIgY29tcGxldGUgY29udGVudAotCQkJCS8vIGNvbmZsaWN0IHdpdGggZW1wdHkgdGV4dAotCQkJCXJlc3VsdC5hZGQoMSwgMCwgb3Vycy5zaXplKCksCi0JCQkJCQlDb25mbGljdFN0YXRlLkZJUlNUX0NPTkZMSUNUSU5HX1JBTkdFKTsKLQkJCQlyZXN1bHQuYWRkKDIsIDAsIDAsIENvbmZsaWN0U3RhdGUuTkVYVF9DT05GTElDVElOR19SQU5HRSk7Ci0JCQl9IGVsc2UKKwkJCQkvLyB3ZSBtb2RpZmllZCwgdGhleSBkZWxldGVkCisJCQkJc3dpdGNoIChzdHJhdGVneSkgeworCQkJCWNhc2UgT1VSUzoKKwkJCQkJcmVzdWx0LmFkZCgxLCAwLCBvdXJzLnNpemUoKSwgQ29uZmxpY3RTdGF0ZS5OT19DT05GTElDVCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVEhFSVJTOgorCQkJCQlyZXN1bHQuYWRkKDIsIDAsIDAsIENvbmZsaWN0U3RhdGUuTk9fQ09ORkxJQ1QpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkvLyBMZXQgb3VyIGNvbXBsZXRlIGNvbnRlbnQgY29uZmxpY3Qgd2l0aCBlbXB0eSB0ZXh0CisJCQkJCXJlc3VsdC5hZGQoMSwgMCwgb3Vycy5zaXplKCksCisJCQkJCQkJQ29uZmxpY3RTdGF0ZS5GSVJTVF9DT05GTElDVElOR19SQU5HRSk7CisJCQkJCXJlc3VsdC5hZGQoMiwgMCwgMCwgQ29uZmxpY3RTdGF0ZS5ORVhUX0NPTkZMSUNUSU5HX1JBTkdFKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKIAkJCQkvLyB0aGV5IGRlbGV0ZWQsIHdlIGRpZG4ndCBtb2RpZnkgLT4gTGV0IHRoZWlyIGRlbGV0aW9uIHdpbgogCQkJCXJlc3VsdC5hZGQoMiwgMCwgMCwgQ29uZmxpY3RTdGF0ZS5OT19DT05GTElDVCk7CisJCQl9CiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9CiAKQEAgLTI0OSwxMiArMzAzLDI2IEBAIHB1YmxpYyA8UyBleHRlbmRzIFNlcXVlbmNlPiBNZXJnZVJlc3VsdDxTPiBtZXJnZSgKIAogCQkJCS8vIEFkZCB0aGUgY29uZmxpY3QgKE9ubHkgaWYgdGhlcmUgaXMgYSBjb25mbGljdCBsZWZ0IHRvIHJlcG9ydCkKIAkJCQlpZiAobWluQlNpemUgPiAwIHx8IEJTaXplRGVsdGEgIT0gMCkgewotCQkJCQlyZXN1bHQuYWRkKDEsIG91cnNCZWdpbkIgKyBjb21tb25QcmVmaXgsIG91cnNFbmRCCi0JCQkJCQkJLSBjb21tb25TdWZmaXgsCi0JCQkJCQkJQ29uZmxpY3RTdGF0ZS5GSVJTVF9DT05GTElDVElOR19SQU5HRSk7Ci0JCQkJCXJlc3VsdC5hZGQoMiwgdGhlaXJzQmVnaW5CICsgY29tbW9uUHJlZml4LCB0aGVpcnNFbmRCCi0JCQkJCQkJLSBjb21tb25TdWZmaXgsCi0JCQkJCQkJQ29uZmxpY3RTdGF0ZS5ORVhUX0NPTkZMSUNUSU5HX1JBTkdFKTsKKwkJCQkJc3dpdGNoIChzdHJhdGVneSkgeworCQkJCQljYXNlIE9VUlM6CisJCQkJCQlyZXN1bHQuYWRkKDEsIG91cnNCZWdpbkIgKyBjb21tb25QcmVmaXgsCisJCQkJCQkJCW91cnNFbmRCIC0gY29tbW9uU3VmZml4LAorCQkJCQkJCQlDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFRIRUlSUzoKKwkJCQkJCXJlc3VsdC5hZGQoMiwgdGhlaXJzQmVnaW5CICsgY29tbW9uUHJlZml4LAorCQkJCQkJCQl0aGVpcnNFbmRCIC0gY29tbW9uU3VmZml4LAorCQkJCQkJCQlDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcmVzdWx0LmFkZCgxLCBvdXJzQmVnaW5CICsgY29tbW9uUHJlZml4LAorCQkJCQkJCQlvdXJzRW5kQiAtIGNvbW1vblN1ZmZpeCwKKwkJCQkJCQkJQ29uZmxpY3RTdGF0ZS5GSVJTVF9DT05GTElDVElOR19SQU5HRSk7CisJCQkJCQlyZXN1bHQuYWRkKDIsIHRoZWlyc0JlZ2luQiArIGNvbW1vblByZWZpeCwKKwkJCQkJCQkJdGhlaXJzRW5kQiAtIGNvbW1vblN1ZmZpeCwKKwkJCQkJCQkJQ29uZmxpY3RTdGF0ZS5ORVhUX0NPTkZMSUNUSU5HX1JBTkdFKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CiAJCQkJfQogCiAJCQkJLy8gQWRkIHRoZSBjb21tb24gbGluZXMgYXQgZW5kIG9mIGNvbmZsaWN0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVzb2x2ZU1lcmdlci5qYXZhCmluZGV4IDRiZmIzOGQuLjc3Njc2NjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVzb2x2ZU1lcmdlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVzb2x2ZU1lcmdlci5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlczsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuRGlmZkFsZ29yaXRobTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuRGlmZkFsZ29yaXRobS5TdXBwb3J0ZWRBbGdvcml0aG07CkBAIC0yNjgsNiArMjY5LDEzIEBAIHB1YmxpYyBlbnVtIE1lcmdlRmFpbHVyZVJlYXNvbiB7CiAJcHJpdmF0ZSBpbnQgaW5Db3JlTGltaXQ7CiAKIAkvKioKKwkgKiBUaGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSB0byB1c2UgZm9yICJyZXNvbHZlIiBhbmQgInJlY3Vyc2l2ZSIKKwkgKiBtZXJnZXMuCisJICovCisJQE5vbk51bGwKKwlwcml2YXRlIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneSA9IENvbnRlbnRNZXJnZVN0cmF0ZWd5LkNPTkZMSUNUOworCisJLyoqCiAJICogS2VlcHMge0BsaW5rIENoZWNrb3V0TWV0YWRhdGF9IGZvciB7QGxpbmsgI2NoZWNrb3V0KCl9IGFuZAogCSAqIHtAbGluayAjY2xlYW5VcCgpfS4KIAkgKi8KQEAgLTM0NCw2ICszNTIsMjkgQEAgcHJvdGVjdGVkIFJlc29sdmVNZXJnZXIoT2JqZWN0SW5zZXJ0ZXIgaW5zZXJ0ZXIsIENvbmZpZyBjb25maWcpIHsKIAkJZGlyY2FjaGUgPSBEaXJDYWNoZS5uZXdJbkNvcmUoKTsKIAl9CiAKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGNvbnRlbnQgbWVyZ2Ugc3RyYXRlZ3kgZm9yIGNvbnRlbnQgY29uZmxpY3RzLgorCSAqCisJICogQHJldHVybiB0aGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSBpbiBlZmZlY3QKKwkgKiBAc2luY2UgNS4xMgorCSAqLworCUBOb25OdWxsCisJcHVibGljIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGdldENvbnRlbnRNZXJnZVN0cmF0ZWd5KCkgeworCQlyZXR1cm4gY29udGVudFN0cmF0ZWd5OworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGNvbnRlbnQgbWVyZ2Ugc3RyYXRlZ3kgZm9yIGNvbnRlbnQgY29uZmxpY3RzLgorCSAqCisJICogQHBhcmFtIHN0cmF0ZWd5CisJICogICAgICAgICAgICB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9IHRvIHVzZQorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIHZvaWQgc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJY29udGVudFN0cmF0ZWd5ID0gc3RyYXRlZ3kgPT0gbnVsbCA/IENvbnRlbnRNZXJnZVN0cmF0ZWd5LkNPTkZMSUNUCisJCQkJOiBzdHJhdGVneTsKKwl9CisKIAkvKioge0Bpbmhlcml0RG9jfSAqLwogCUBPdmVycmlkZQogCXByb3RlY3RlZCBib29sZWFuIG1lcmdlSW1wbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CkBAIC02NDQsMTUgKzY3NSwxOSBAQCBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBiYXNlLAogCQkJCX0KIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KLQkJCS8vIEZpbGVNb2RlcyBhcmUgbm90IG1lcmdlYWJsZS4gV2UgZm91bmQgYSBjb25mbGljdCBvbiBtb2Rlcy4KLQkJCS8vIEZvciBjb25mbGljdGluZyBlbnRyaWVzIHdlIGRvbid0IGtub3cgbGFzdE1vZGlmaWVkIGFuZAotCQkJLy8gbGVuZ3RoLgotCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgYmFzZSwgRGlyQ2FjaGVFbnRyeS5TVEFHRV8xLCBFUE9DSCwgMCk7Ci0JCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCBvdXJzLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzIsIEVQT0NILCAwKTsKLQkJCWFkZCh0dy5nZXRSYXdQYXRoKCksIHRoZWlycywgRGlyQ2FjaGVFbnRyeS5TVEFHRV8zLCBFUE9DSCwgMCk7Ci0JCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwotCQkJbWVyZ2VSZXN1bHRzLnB1dCh0dy5nZXRQYXRoU3RyaW5nKCksCi0JCQkJCW5ldyBNZXJnZVJlc3VsdDw+KENvbGxlY3Rpb25zLjxSYXdUZXh0PiBlbXB0eUxpc3QoKSkpOworCQkJaWYgKCFpZ25vcmVDb25mbGljdHMpIHsKKwkJCQkvLyBGaWxlTW9kZXMgYXJlIG5vdCBtZXJnZWFibGUuIFdlIGZvdW5kIGEgY29uZmxpY3Qgb24gbW9kZXMuCisJCQkJLy8gRm9yIGNvbmZsaWN0aW5nIGVudHJpZXMgd2UgZG9uJ3Qga25vdyBsYXN0TW9kaWZpZWQgYW5kCisJCQkJLy8gbGVuZ3RoLgorCQkJCS8vIFRoaXMgcGF0aCBjYW4gYmUgc2tpcHBlZCBvbiBpZ25vcmVDb25mbGljdHMsIHNvIHRoZSBjYWxsZXIKKwkJCQkvLyBjb3VsZCB1c2UgdmlydHVhbCBjb21taXQuCisJCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgYmFzZSwgRGlyQ2FjaGVFbnRyeS5TVEFHRV8xLCBFUE9DSCwgMCk7CisJCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgb3VycywgRGlyQ2FjaGVFbnRyeS5TVEFHRV8yLCBFUE9DSCwgMCk7CisJCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgdGhlaXJzLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzMsIEVQT0NILCAwKTsKKwkJCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOworCQkJCW1lcmdlUmVzdWx0cy5wdXQodHcuZ2V0UGF0aFN0cmluZygpLAorCQkJCQkJbmV3IE1lcmdlUmVzdWx0PD4oQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpKTsKKwkJCX0KIAkJCXJldHVybiB0cnVlOwogCQl9CiAKQEAgLTc1Nyw2ICs3OTIsMTkgQEAgcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgYmFzZSwKIAkJCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwogCQkJCXJldHVybiB0cnVlOwogCQkJfSBlbHNlIGlmICghYXR0cmlidXRlcy5jYW5CZUNvbnRlbnRNZXJnZWQoKSkgeworCQkJCS8vIEZpbGUgbWFya2VkIGFzIGJpbmFyeQorCQkJCXN3aXRjaCAoZ2V0Q29udGVudE1lcmdlU3RyYXRlZ3koKSkgeworCQkJCWNhc2UgT1VSUzoKKwkJCQkJa2VlcChvdXJEY2UpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQljYXNlIFRIRUlSUzoKKwkJCQkJRGlyQ2FjaGVFbnRyeSB0aGVpckVudHJ5ID0gYWRkKHR3LmdldFJhd1BhdGgoKSwgdGhlaXJzLAorCQkJCQkJCURpckNhY2hlRW50cnkuU1RBR0VfMCwgRVBPQ0gsIDApOworCQkJCQlhZGRUb0NoZWNrb3V0KHR3LmdldFBhdGhTdHJpbmcoKSwgdGhlaXJFbnRyeSwgYXR0cmlidXRlcyk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCBiYXNlLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzEsIEVQT0NILCAwKTsKIAkJCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCBvdXJzLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzIsIEVQT0NILCAwKTsKIAkJCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCB0aGVpcnMsIERpckNhY2hlRW50cnkuU1RBR0VfMywgRVBPQ0gsIDApOwpAQCAtNzcxLDggKzgxOSwyNiBAQCBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBiYXNlLAogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KIAotCQkJTWVyZ2VSZXN1bHQ8UmF3VGV4dD4gcmVzdWx0ID0gY29udGVudE1lcmdlKGJhc2UsIG91cnMsIHRoZWlycywKLQkJCQkJYXR0cmlidXRlcyk7CisJCQlNZXJnZVJlc3VsdDxSYXdUZXh0PiByZXN1bHQgPSBudWxsOworCQkJdHJ5IHsKKwkJCQlyZXN1bHQgPSBjb250ZW50TWVyZ2UoYmFzZSwgb3VycywgdGhlaXJzLCBhdHRyaWJ1dGVzLAorCQkJCQkJZ2V0Q29udGVudE1lcmdlU3RyYXRlZ3koKSk7CisJCQl9IGNhdGNoIChCaW5hcnlCbG9iRXhjZXB0aW9uIGUpIHsKKwkJCQlzd2l0Y2ggKGdldENvbnRlbnRNZXJnZVN0cmF0ZWd5KCkpIHsKKwkJCQljYXNlIE9VUlM6CisJCQkJCWtlZXAob3VyRGNlKTsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJY2FzZSBUSEVJUlM6CisJCQkJCURpckNhY2hlRW50cnkgdGhlaXJFbnRyeSA9IGFkZCh0dy5nZXRSYXdQYXRoKCksIHRoZWlycywKKwkJCQkJCQlEaXJDYWNoZUVudHJ5LlNUQUdFXzAsIEVQT0NILCAwKTsKKwkJCQkJYWRkVG9DaGVja291dCh0dy5nZXRQYXRoU3RyaW5nKCksIHRoZWlyRW50cnksIGF0dHJpYnV0ZXMpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlkZWZhdWx0OgorCQkJCQlyZXN1bHQgPSBuZXcgTWVyZ2VSZXN1bHQ8PihDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7CisJCQkJCXJlc3VsdC5zZXRDb250YWluc0NvbmZsaWN0cyh0cnVlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCQkJaWYgKGlnbm9yZUNvbmZsaWN0cykgewogCQkJCXJlc3VsdC5zZXRDb250YWluc0NvbmZsaWN0cyhmYWxzZSk7CiAJCQl9CkBAIC03OTksOSArODY1LDE2IEBAIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCQkJCW1lcmdlUmVzdWx0cy5wdXQodHcuZ2V0UGF0aFN0cmluZygpLCByZXN1bHQpOwogCQkJCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCU1lcmdlUmVzdWx0PFJhd1RleHQ+IHJlc3VsdCA9IGNvbnRlbnRNZXJnZShiYXNlLCBvdXJzLAotCQkJCQkJCXRoZWlycywgYXR0cmlidXRlcyk7Ci0KKwkJCQkJLy8gQ29udGVudCBtZXJnZSBzdHJhdGVneSBkb2VzIG5vdCBhcHBseSB0byBkZWxldGUtbW9kaWZ5CisJCQkJCS8vIGNvbmZsaWN0cyEKKwkJCQkJTWVyZ2VSZXN1bHQ8UmF3VGV4dD4gcmVzdWx0OworCQkJCQl0cnkgeworCQkJCQkJcmVzdWx0ID0gY29udGVudE1lcmdlKGJhc2UsIG91cnMsIHRoZWlycywgYXR0cmlidXRlcywKKwkJCQkJCQkJQ29udGVudE1lcmdlU3RyYXRlZ3kuQ09ORkxJQ1QpOworCQkJCQl9IGNhdGNoIChCaW5hcnlCbG9iRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJlc3VsdCA9IG5ldyBNZXJnZVJlc3VsdDw+KENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKKwkJCQkJCXJlc3VsdC5zZXRDb250YWluc0NvbmZsaWN0cyh0cnVlKTsKKwkJCQkJfQogCQkJCQlpZiAoaWdub3JlQ29uZmxpY3RzKSB7CiAJCQkJCQkvLyBJbiBjYXNlIGEgY29uZmxpY3QgaXMgZGV0ZWN0ZWQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlCiAJCQkJCQkvLyBpcyBhZ2FpbiBmaWxsZWQgd2l0aCBuZXcgY29udGVudCAoY29udGFpbmluZyBjb25mbGljdApAQCAtODYzLDMyICs5MzYsMjYgQEAgcHJpdmF0ZSBzdGF0aWMgTWVyZ2VSZXN1bHQ8U3VibW9kdWxlQ29uZmxpY3Q+IGNyZWF0ZUdpdExpbmtzTWVyZ2VSZXN1bHQoCiAJICogQHBhcmFtIG91cnMKIAkgKiBAcGFyYW0gdGhlaXJzCiAJICogQHBhcmFtIGF0dHJpYnV0ZXMKKwkgKiBAcGFyYW0gc3RyYXRlZ3kKIAkgKgogCSAqIEByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY29udGVudCBtZXJnZQorCSAqIEB0aHJvd3MgQmluYXJ5QmxvYkV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIGFueSBvZiB0aGUgYmxvYnMgbG9va3MgbGlrZSBhIGJpbmFyeSBibG9iCiAJICogQHRocm93cyBJT0V4Y2VwdGlvbgogCSAqLwogCXByaXZhdGUgTWVyZ2VSZXN1bHQ8UmF3VGV4dD4gY29udGVudE1lcmdlKENhbm9uaWNhbFRyZWVQYXJzZXIgYmFzZSwKIAkJCUNhbm9uaWNhbFRyZWVQYXJzZXIgb3VycywgQ2Fub25pY2FsVHJlZVBhcnNlciB0aGVpcnMsCi0JCQlBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0JCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlSYXdUZXh0IGJhc2VUZXh0OwotCQlSYXdUZXh0IG91clRleHQ7Ci0JCVJhd1RleHQgdGhlaXJzVGV4dDsKLQotCQl0cnkgewotCQkJYmFzZVRleHQgPSBiYXNlID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQgOiBnZXRSYXdUZXh0KAotCQkJCQkJCWJhc2UuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzKTsKLQkJCW91clRleHQgPSBvdXJzID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQgOiBnZXRSYXdUZXh0KAotCQkJCQkJCW91cnMuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzKTsKLQkJCXRoZWlyc1RleHQgPSB0aGVpcnMgPT0gbnVsbCA/IFJhd1RleHQuRU1QVFlfVEVYVCA6IGdldFJhd1RleHQoCi0JCQkJCQkJdGhlaXJzLmdldEVudHJ5T2JqZWN0SWQoKSwgYXR0cmlidXRlcyk7Ci0JCX0gY2F0Y2ggKEJpbmFyeUJsb2JFeGNlcHRpb24gZSkgewotCQkJTWVyZ2VSZXN1bHQ8UmF3VGV4dD4gciA9IG5ldyBNZXJnZVJlc3VsdDw+KENvbGxlY3Rpb25zLjxSYXdUZXh0PmVtcHR5TGlzdCgpKTsKLQkJCXIuc2V0Q29udGFpbnNDb25mbGljdHModHJ1ZSk7Ci0JCQlyZXR1cm4gcjsKLQkJfQotCQlyZXR1cm4gKG1lcmdlQWxnb3JpdGhtLm1lcmdlKFJhd1RleHRDb21wYXJhdG9yLkRFRkFVTFQsIGJhc2VUZXh0LAotCQkJCW91clRleHQsIHRoZWlyc1RleHQpKTsKKwkJCUF0dHJpYnV0ZXMgYXR0cmlidXRlcywgQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpCisJCQl0aHJvd3MgQmluYXJ5QmxvYkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlSYXdUZXh0IGJhc2VUZXh0ID0gYmFzZSA9PSBudWxsID8gUmF3VGV4dC5FTVBUWV9URVhUCisJCQkJOiBnZXRSYXdUZXh0KGJhc2UuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzKTsKKwkJUmF3VGV4dCBvdXJUZXh0ID0gb3VycyA9PSBudWxsID8gUmF3VGV4dC5FTVBUWV9URVhUCisJCQkJOiBnZXRSYXdUZXh0KG91cnMuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzKTsKKwkJUmF3VGV4dCB0aGVpcnNUZXh0ID0gdGhlaXJzID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQKKwkJCQk6IGdldFJhd1RleHQodGhlaXJzLmdldEVudHJ5T2JqZWN0SWQoKSwgYXR0cmlidXRlcyk7CisJCW1lcmdlQWxnb3JpdGhtLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KHN0cmF0ZWd5KTsKKwkJcmV0dXJuIG1lcmdlQWxnb3JpdGhtLm1lcmdlKFJhd1RleHRDb21wYXJhdG9yLkRFRkFVTFQsIGJhc2VUZXh0LAorCQkJCW91clRleHQsIHRoZWlyc1RleHQpOwogCX0KIAogCXByaXZhdGUgYm9vbGVhbiBpc0luZGV4RGlydHkoKSB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsay5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGsuamF2YQppbmRleCA2MzFkODYxLi42ZTI5NDM4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsay5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrLmphdmEKQEAgLTMyLDEwICszMiwxMyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFzeW5jT2JqZWN0TG9hZGVyUXVldWU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk11dGFibGVPYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5OdWxsUHJvZ3Jlc3NNb25pdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkT3duZXJNYXA7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0TG9hZGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdFJlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Qcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlci5SZXZGaWx0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIuVHJlZUZpbHRlcjsKQEAgLTE4MSw2ICsxODQsMTIgQEAgcHVibGljIGNsYXNzIFJldldhbGsgaW1wbGVtZW50cyBJdGVyYWJsZTxSZXZDb21taXQ+LCBBdXRvQ2xvc2VhYmxlIHsKIAogCWJvb2xlYW4gc2hhbGxvd0NvbW1pdHNJbml0aWFsaXplZDsKIAorCXByaXZhdGUgZW51bSBHZXRNZXJnZWRJbnRvU3RyYXRlZ3kgeworCQlSRVRVUk5fT05fRklSU1RfRk9VTkQsCisJCVJFVFVSTl9PTl9GSVJTVF9OT1RfRk9VTkQsCisJCUVWQUxVQVRFX0FMTAorCX0KKwogCS8qKgogCSAqIENyZWF0ZSBhIG5ldyByZXZpc2lvbiB3YWxrZXIgZm9yIGEgZ2l2ZW4gcmVwb3NpdG9yeS4KIAkgKgpAQCAtNDI1LDYgKzQzNCwxNTUgQEAgcHVibGljIGJvb2xlYW4gaXNNZXJnZWRJbnRvKFJldkNvbW1pdCBiYXNlLCBSZXZDb21taXQgdGlwKQogCX0KIAogCS8qKgorCSAqIERldGVybWluZSB0aGUgUmVmcyBpbnRvIHdoaWNoIGEgY29tbWl0IGlzIG1lcmdlZC4KKwkgKiA8cD4KKwkgKiBBIGNvbW1pdCBpcyBtZXJnZWQgaW50byBhIHJlZiBpZiB3ZSBjYW4gZmluZCBhIHBhdGggb2YgY29tbWl0cyB0aGF0IGxlYWRzCisJICogZnJvbSB0aGF0IHNwZWNpZmljIHJlZiBhbmQgZW5kcyBhdCA8Y29kZT5jb21taXQ8L2NvZGU+LgorCSAqIDxwPgorCSAqCisJICogQHBhcmFtIGNvbW1pdAorCSAqICAgICAgICAgICAgY29tbWl0IHRoZSBjYWxsZXIgdGhpbmtzIGlzIHJlYWNoYWJsZSBmcm9tIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICByZWZzIHRvIHN0YXJ0IGl0ZXJhdGlvbiBmcm9tLCBhbmQgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYQorCSAqICAgICAgICAgICAgZGVzY2VuZGFudCAoY2hpbGQpIG9mIDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogQHJldHVybiBsaXN0IG9mIHJlZnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gPGNvZGU+Y29tbWl0PC9jb2RlPi4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgTGlzdDxSZWY+IGdldE1lcmdlZEludG8oUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb257CisJCXJldHVybiBnZXRNZXJnZWRJbnRvKGNvbW1pdCwgcmVmcywgTnVsbFByb2dyZXNzTW9uaXRvci5JTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogRGV0ZXJtaW5lIHRoZSBSZWZzIGludG8gd2hpY2ggYSBjb21taXQgaXMgbWVyZ2VkLgorCSAqIDxwPgorCSAqIEEgY29tbWl0IGlzIG1lcmdlZCBpbnRvIGEgcmVmIGlmIHdlIGNhbiBmaW5kIGEgcGF0aCBvZiBjb21taXRzIHRoYXQgbGVhZHMKKwkgKiBmcm9tIHRoYXQgc3BlY2lmaWMgcmVmIGFuZCBlbmRzIGF0IDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogPHA+CisJICoKKwkgKiBAcGFyYW0gY29tbWl0CisJICogICAgICAgICAgICBjb21taXQgdGhlIGNhbGxlciB0aGlua3MgaXMgcmVhY2hhYmxlIGZyb20gPGNvZGU+cmVmczwvY29kZT4uCisJICogQHBhcmFtIHJlZnMKKwkgKiAgICAgICAgICAgIHJlZnMgdG8gc3RhcnQgaXRlcmF0aW9uIGZyb20sIGFuZCB3aGljaCBpcyBtb3N0IGxpa2VseSBhCisJICogICAgICAgICAgICBkZXNjZW5kYW50IChjaGlsZCkgb2YgPGNvZGU+Y29tbWl0PC9jb2RlPi4KKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZvciBwcm9ncmVzcyBhbmQgY2FuY2VsbGF0aW9uCisJICogQHJldHVybiBsaXN0IG9mIHJlZnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gPGNvZGU+Y29tbWl0PC9jb2RlPi4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgTGlzdDxSZWY+IGdldE1lcmdlZEludG8oUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMsCisJCQkJCVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb257CisJCXJldHVybiBnZXRNZXJnZWRJbnRvKGNvbW1pdCwgcmVmcywKKwkJCQlHZXRNZXJnZWRJbnRvU3RyYXRlZ3kuRVZBTFVBVEVfQUxMLAorCQkJCW1vbml0b3IpOworCX0KKworCS8qKgorCSAqIERldGVybWluZSBpZiBhIDxjb2RlPmNvbW1pdDwvY29kZT4gaXMgbWVyZ2VkIGludG8gYW55IG9mIHRoZSBnaXZlbgorCSAqIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqCisJICogQHBhcmFtIGNvbW1pdAorCSAqICAgICAgICAgICAgY29tbWl0IHRoZSBjYWxsZXIgdGhpbmtzIGlzIHJlYWNoYWJsZSBmcm9tIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICByZWZzIHRvIHN0YXJ0IGl0ZXJhdGlvbiBmcm9tLCBhbmQgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYQorCSAqICAgICAgICAgICAgZGVzY2VuZGFudCAoY2hpbGQpIG9mIDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogQHJldHVybiB0cnVlIGlmIGNvbW1pdCBpcyBtZXJnZWQgaW50byBhbnkgb2YgdGhlIHJlZnM7IGZhbHNlIG90aGVyd2lzZS4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc01lcmdlZEludG9BbnkoUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZ2V0TWVyZ2VkSW50byhjb21taXQsIHJlZnMsCisJCQkJR2V0TWVyZ2VkSW50b1N0cmF0ZWd5LlJFVFVSTl9PTl9GSVJTVF9GT1VORCwKKwkJCQlOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFKS5zaXplKCkgPiAwOworCX0KKworCS8qKgorCSAqIERldGVybWluZSBpZiBhIDxjb2RlPmNvbW1pdDwvY29kZT4gaXMgbWVyZ2VkIGludG8gYWxsIG9mIHRoZSBnaXZlbgorCSAqIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqCisJICogQHBhcmFtIGNvbW1pdAorCSAqICAgICAgICAgICAgY29tbWl0IHRoZSBjYWxsZXIgdGhpbmtzIGlzIHJlYWNoYWJsZSBmcm9tIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICByZWZzIHRvIHN0YXJ0IGl0ZXJhdGlvbiBmcm9tLCBhbmQgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYQorCSAqICAgICAgICAgICAgZGVzY2VuZGFudCAoY2hpbGQpIG9mIDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogQHJldHVybiB0cnVlIGlmIGNvbW1pdCBpcyBtZXJnZWQgaW50byBhbGwgb2YgdGhlIHJlZnM7IGZhbHNlIG90aGVyd2lzZS4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc01lcmdlZEludG9BbGwoUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZ2V0TWVyZ2VkSW50byhjb21taXQsIHJlZnMsCisJCQkJR2V0TWVyZ2VkSW50b1N0cmF0ZWd5LlJFVFVSTl9PTl9GSVJTVF9OT1RfRk9VTkQsCisJCQkJTnVsbFByb2dyZXNzTW9uaXRvci5JTlNUQU5DRSkuc2l6ZSgpCisJCQkJPT0gcmVmcy5zaXplKCk7CisJfQorCisJcHJpdmF0ZSBMaXN0PFJlZj4gZ2V0TWVyZ2VkSW50byhSZXZDb21taXQgbmVlZGxlLCBDb2xsZWN0aW9uPFJlZj4gaGF5c3RhY2tzLAorCQkJCUVudW0gcmV0dXJuU3RyYXRlZ3ksIFByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlMaXN0PFJlZj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCUxpc3Q8UmV2Q29tbWl0PiB1bmludGVyZXN0aW5nID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCUxpc3Q8UmV2Q29tbWl0PiBtYXJrZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJUmV2RmlsdGVyIG9sZFJGID0gZmlsdGVyOworCQlUcmVlRmlsdGVyIG9sZFRGID0gdHJlZUZpbHRlcjsKKwkJdHJ5IHsKKwkJCWZpbmlzaERlbGF5ZWRGcmVlRmxhZ3MoKTsKKwkJCXJlc2V0KH5mcmVlRmxhZ3MgJiBBUFBfRkxBR1MpOworCQkJZmlsdGVyID0gUmV2RmlsdGVyLkFMTDsKKwkJCXRyZWVGaWx0ZXIgPSBUcmVlRmlsdGVyLkFMTDsKKwkJCWZvciAoUmVmIHI6IGhheXN0YWNrcykgeworCQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsbGVkKCkpIHsKKwkJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCQl9CisJCQkJbW9uaXRvci51cGRhdGUoMSk7CisJCQkJUmV2T2JqZWN0IG8gPSBwZWVsKHBhcnNlQW55KHIuZ2V0T2JqZWN0SWQoKSkpOworCQkJCWlmICghKG8gaW5zdGFuY2VvZiBSZXZDb21taXQpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlSZXZDb21taXQgYyA9IChSZXZDb21taXQpIG87CisJCQkJcmVzZXQoVU5JTlRFUkVTVElORyB8IFRFTVBfTUFSSyk7CisJCQkJbWFya1N0YXJ0KGMpOworCQkJCWJvb2xlYW4gY29tbWl0Rm91bmQgPSBmYWxzZTsKKwkJCQlSZXZDb21taXQgbmV4dDsKKwkJCQl3aGlsZSAoKG5leHQgPSBuZXh0KCkpICE9IG51bGwpIHsKKwkJCQkJaWYgKFJlZmVyZW5jZXMuaXNTYW1lT2JqZWN0KG5leHQsIG5lZWRsZSkKKwkJCQkJCQl8fCAobmV4dC5mbGFncyAmIFRFTVBfTUFSSykgIT0gMCkgeworCQkJCQkJcmVzdWx0LmFkZChyKTsKKwkJCQkJCWlmIChyZXR1cm5TdHJhdGVneSA9PSBHZXRNZXJnZWRJbnRvU3RyYXRlZ3kuUkVUVVJOX09OX0ZJUlNUX0ZPVU5EKSB7CisJCQkJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCQkJCX0KKwkJCQkJCWNvbW1pdEZvdW5kID0gdHJ1ZTsKKwkJCQkJCWMuZmxhZ3MgfD0gVEVNUF9NQVJLOworCQkJCQkJbWFya2VkLmFkZChjKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmKCFjb21taXRGb3VuZCl7CisJCQkJCW1hcmtVbmludGVyZXN0aW5nKGMpOworCQkJCQl1bmludGVyZXN0aW5nLmFkZChjKTsKKwkJCQkJaWYgKHJldHVyblN0cmF0ZWd5ID09IEdldE1lcmdlZEludG9TdHJhdGVneS5SRVRVUk5fT05fRklSU1RfTk9UX0ZPVU5EKSB7CisJCQkJCQlyZXR1cm4gcmVzdWx0OworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGZpbmFsbHkgeworCQkJcm9vdHMuYWRkQWxsKHVuaW50ZXJlc3RpbmcpOworCQkJZmlsdGVyID0gb2xkUkY7CisJCQl0cmVlRmlsdGVyID0gb2xkVEY7CisJCQlmb3IgKFJldkNvbW1pdCBjIDogbWFya2VkKSB7CisJCQkJYy5mbGFncyAmPSB+VEVNUF9NQVJLOworCQkJfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCiAJICogUG9wIHRoZSBuZXh0IG1vc3QgcmVjZW50IGNvbW1pdC4KIAkgKgogCSAqIEByZXR1cm4gbmV4dCBtb3N0IHJlY2VudCBjb21taXQ7IG51bGwgaWYgdHJhdmVyc2FsIGlzIG92ZXIuCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa1V0aWxzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa1V0aWxzLmphdmEKaW5kZXggM2ZlYjljNS4uZTUyZTkxNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtVdGlscy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrVXRpbHMuamF2YQpAQCAtMTU5LDE1ICsxNTksMTIgQEAgcHVibGljIHN0YXRpYyBMaXN0PFJlZj4gZmluZEJyYW5jaGVzUmVhY2hhYmxlRnJvbShSZXZDb21taXQgY29tbWl0LAogCQkvLyBNYWtlIHN1cmUgY29tbWl0IGlzIGZyb20gdGhlIHNhbWUgUmV2V2FsawogCQljb21taXQgPSByZXZXYWxrLnBhcnNlQ29tbWl0KGNvbW1pdC5nZXRJZCgpKTsKIAkJcmV2V2Fsay5yZXNldCgpOwotCQlMaXN0PFJlZj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCUxpc3Q8UmVmPiBmaWx0ZXJlZFJlZnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJbW9uaXRvci5iZWdpblRhc2soSkdpdFRleHQuZ2V0KCkuc2VhcmNoRm9yUmVhY2hhYmxlQnJhbmNoZXMsCiAJCQkJcmVmcy5zaXplKCkpOwogCQlmaW5hbCBpbnQgU0tFVyA9IDI0KjM2MDA7IC8vIG9uZSBkYXkgY2xvY2sgc2tldwogCiAJCWZvciAoUmVmIHJlZiA6IHJlZnMpIHsKLQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsbGVkKCkpCi0JCQkJcmV0dXJuIHJlc3VsdDsKLQkJCW1vbml0b3IudXBkYXRlKDEpOwogCQkJUmV2T2JqZWN0IG1heWJlaGVhZCA9IHJldldhbGsucGFyc2VBbnkocmVmLmdldE9iamVjdElkKCkpOwogCQkJaWYgKCEobWF5YmVoZWFkIGluc3RhbmNlb2YgUmV2Q29tbWl0KSkKIAkJCQljb250aW51ZTsKQEAgLTE3OSw5ICsxNzYsOSBAQCBwdWJsaWMgc3RhdGljIExpc3Q8UmVmPiBmaW5kQnJhbmNoZXNSZWFjaGFibGVGcm9tKFJldkNvbW1pdCBjb21taXQsCiAJCQlpZiAoaGVhZENvbW1pdC5nZXRDb21taXRUaW1lKCkgKyBTS0VXIDwgY29tbWl0LmdldENvbW1pdFRpbWUoKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKHJldldhbGsuaXNNZXJnZWRJbnRvKGNvbW1pdCwgaGVhZENvbW1pdCkpCi0JCQkJcmVzdWx0LmFkZChyZWYpOworCQkJZmlsdGVyZWRSZWZzLmFkZChyZWYpOwogCQl9CisJCUxpc3Q8UmVmPiByZXN1bHQgPSByZXZXYWxrLmdldE1lcmdlZEludG8oY29tbWl0LCBmaWx0ZXJlZFJlZnMsIG1vbml0b3IpOwogCQltb25pdG9yLmVuZFRhc2soKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9Tc2hDb25zdGFudHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhCmluZGV4IGJlNTVjZDEuLjVjZDViMzMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhCkBAIC0xMTgsNyArMTE4LDcgQEAgcHJpdmF0ZSBTc2hDb25zdGFudHMoKSB7CiAJICogS2V5IGluIGFuIHNzaCBjb25maWcgZmlsZTsgZGVmaW5lcyBzaWduYXR1cmUgYWxnb3JpdGhtcyBmb3IgcHVibGljIGtleQogCSAqIGF1dGhlbnRpY2F0aW9uIGFzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QuCiAJICoKLQkgKiBAc2luY2UgNS4xMQorCSAqIEBzaW5jZSA1LjExLjEKIAkgKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQVUJLRVlfQUNDRVBURURfQUxHT1JJVEhNUyA9ICJQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMiOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnRIdHRwLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnRIdHRwLmphdmEKaW5kZXggMmU1ZDE4ZC4uMDcxMGQzZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhbnNwb3J0SHR0cC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYW5zcG9ydEh0dHAuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKQEAgLTUzLDggKzU0LDYgQEAKIGltcG9ydCBqYXZhLm5ldC5VUkxEZWNvZGVyOwogaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKIGltcG9ydCBqYXZhLm5pby5maWxlLkludmFsaWRQYXRoRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuR2VuZXJhbFNlY3VyaXR5RXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aEJ1aWxkZXJFeGNlcHRpb247CiBpbXBvcnQgamF2YS5zZWN1cml0eS5jZXJ0LkNlcnRQYXRoVmFsaWRhdG9yRXhjZXB0aW9uOwpAQCAtMTAxLDYgKzEwMCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5IdHRwQ29ubmVjdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLkh0dHBDb25uZWN0aW9uRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLkh0dHBDb25uZWN0aW9uRmFjdG9yeTI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSU87CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlJhd1BhcnNlVXRpbHM7CkBAIC0xMTU3LDE3ICsxMTU3LDI4IEBAIElPRXhjZXB0aW9uIHdyb25nQ29udGVudFR5cGUoU3RyaW5nIGV4cFR5cGUsIFN0cmluZyBhY3RUeXBlKSB7CiAJCXJldHVybiBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKHVyaSwgd2h5KTsKIAl9CiAKLQlwcml2YXRlIHN0YXRpYyBOZXRzY2FwZUNvb2tpZUZpbGUgZ2V0Q29va2llRmlsZUZyb21Db25maWcoCisJcHJpdmF0ZSBOZXRzY2FwZUNvb2tpZUZpbGUgZ2V0Q29va2llRmlsZUZyb21Db25maWcoCiAJCQlIdHRwQ29uZmlnIGNvbmZpZykgewotCQlpZiAoIVN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwoY29uZmlnLmdldENvb2tpZUZpbGUoKSkpIHsKKwkJU3RyaW5nIHBhdGggPSBjb25maWcuZ2V0Q29va2llRmlsZSgpOworCQlpZiAoIVN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwocGF0aCkpIHsKIAkJCXRyeSB7Ci0JCQkJUGF0aCBjb29raWVGaWxlUGF0aCA9IFBhdGhzLmdldChjb25maWcuZ2V0Q29va2llRmlsZSgpKTsKKwkJCQlGUyBmcyA9IGxvY2FsICE9IG51bGwgPyBsb2NhbC5nZXRGUygpIDogRlMuREVURUNURUQ7CisJCQkJRmlsZSBmOworCQkJCWlmIChwYXRoLnN0YXJ0c1dpdGgoIn4vIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlmID0gZnMucmVzb2x2ZShmcy51c2VySG9tZSgpLCBwYXRoLnN1YnN0cmluZygyKSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZiA9IG5ldyBGaWxlKHBhdGgpOworCQkJCQlpZiAoIWYuaXNBYnNvbHV0ZSgpKSB7CisJCQkJCQlmID0gZnMucmVzb2x2ZShudWxsLCBwYXRoKTsKKwkJCQkJCUxPRy53YXJuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCQlKR2l0VGV4dC5nZXQoKS5jb29raWVGaWxlUGF0aFJlbGF0aXZlLCBmKSk7CisJCQkJCX0KKwkJCQl9CiAJCQkJcmV0dXJuIE5ldHNjYXBlQ29va2llRmlsZUNhY2hlLmdldEluc3RhbmNlKGNvbmZpZykKLQkJCQkJCS5nZXRFbnRyeShjb29raWVGaWxlUGF0aCk7CisJCQkJCQkuZ2V0RW50cnkoZi50b1BhdGgoKSk7CiAJCQl9IGNhdGNoIChJbnZhbGlkUGF0aEV4Y2VwdGlvbiBlKSB7CiAJCQkJTE9HLndhcm4oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQlKR2l0VGV4dC5nZXQoKS5jb3VsZE5vdFJlYWRDb29raWVGaWxlLAotCQkJCQkJY29uZmlnLmdldENvb2tpZUZpbGUoKSksIGUpOworCQkJCQkJSkdpdFRleHQuZ2V0KCkuY291bGROb3RSZWFkQ29va2llRmlsZSwgcGF0aCksIGUpOwogCQkJfQogCQl9CiAJCXJldHVybiBudWxsOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVXNlcm5hbWVQYXNzd29yZENyZWRlbnRpYWxzUHJvdmlkZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1VzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsc1Byb3ZpZGVyLmphdmEKaW5kZXggOTc5OTYxZi4uYzBkZTQyYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVXNlcm5hbWVQYXNzd29yZENyZWRlbnRpYWxzUHJvdmlkZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9Vc2VybmFtZVBhc3N3b3JkQ3JlZGVudGlhbHNQcm92aWRlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDIxIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTU4LDE0ICs1OCwyMSBAQCBwdWJsaWMgYm9vbGVhbiBpc0ludGVyYWN0aXZlKCkgewogCUBPdmVycmlkZQogCXB1YmxpYyBib29sZWFuIHN1cHBvcnRzKENyZWRlbnRpYWxJdGVtLi4uIGl0ZW1zKSB7CiAJCWZvciAoQ3JlZGVudGlhbEl0ZW0gaSA6IGl0ZW1zKSB7Ci0JCQlpZiAoaSBpbnN0YW5jZW9mIENyZWRlbnRpYWxJdGVtLlVzZXJuYW1lKQorCQkJaWYgKGkgaW5zdGFuY2VvZiBDcmVkZW50aWFsSXRlbS5JbmZvcm1hdGlvbmFsTWVzc2FnZSkgewogCQkJCWNvbnRpbnVlOwotCi0JCQllbHNlIGlmIChpIGluc3RhbmNlb2YgQ3JlZGVudGlhbEl0ZW0uUGFzc3dvcmQpCisJCQl9CisJCQlpZiAoaSBpbnN0YW5jZW9mIENyZWRlbnRpYWxJdGVtLlVzZXJuYW1lKSB7CiAJCQkJY29udGludWU7Ci0KLQkJCWVsc2UKLQkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlpZiAoaSBpbnN0YW5jZW9mIENyZWRlbnRpYWxJdGVtLlBhc3N3b3JkKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoaSBpbnN0YW5jZW9mIENyZWRlbnRpYWxJdGVtLlN0cmluZ1R5cGUpIHsKKwkJCQlpZiAoaS5nZXRQcm9tcHRUZXh0KCkuZXF1YWxzKCJQYXNzd29yZDogIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJcmV0dXJuIHRydWU7CiAJfQpAQCAtNzUsNiArODIsOSBAQCBlbHNlIGlmIChpIGluc3RhbmNlb2YgQ3JlZGVudGlhbEl0ZW0uUGFzc3dvcmQpCiAJcHVibGljIGJvb2xlYW4gZ2V0KFVSSWlzaCB1cmksIENyZWRlbnRpYWxJdGVtLi4uIGl0ZW1zKQogCQkJdGhyb3dzIFVuc3VwcG9ydGVkQ3JlZGVudGlhbEl0ZW0gewogCQlmb3IgKENyZWRlbnRpYWxJdGVtIGkgOiBpdGVtcykgeworCQkJaWYgKGkgaW5zdGFuY2VvZiBDcmVkZW50aWFsSXRlbS5JbmZvcm1hdGlvbmFsTWVzc2FnZSkgeworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJaWYgKGkgaW5zdGFuY2VvZiBDcmVkZW50aWFsSXRlbS5Vc2VybmFtZSkgewogCQkJCSgoQ3JlZGVudGlhbEl0ZW0uVXNlcm5hbWUpIGkpLnNldFZhbHVlKHVzZXJuYW1lKTsKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvV29ya2luZ1RyZWVJdGVyYXRvci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEKaW5kZXggNTViN2Q2Mi4uMGI3YzBhOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEKQEAgLTUwMiw4ICs1MDIsNyBAQCBwcml2YXRlIElucHV0U3RyZWFtIGZpbHRlckNsZWFuKElucHV0U3RyZWFtIGluLCBPcGVyYXRpb25UeXBlIG9wVHlwZSkKIAkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24obmV3IEZpbHRlckZhaWxlZEV4Y2VwdGlvbihyYywKIAkJCQkJCWZpbHRlckNvbW1hbmQsIGdldEVudHJ5UGF0aFN0cmluZygpLAogCQkJCQkJcmVzdWx0LmdldFN0ZG91dCgpLnRvQnl0ZUFycmF5KE1BWF9FWENFUFRJT05fVEVYVF9TSVpFKSwKLQkJCQkJCVJhd1BhcnNlVXRpbHMuZGVjb2RlKHJlc3VsdC5nZXRTdGRlcnIoKQotCQkJCQkJCQkudG9CeXRlQXJyYXkoTUFYX0VYQ0VQVElPTl9URVhUX1NJWkUpKSkpOworCQkJCQkJcmVzdWx0LmdldFN0ZGVycigpLnRvU3RyaW5nKE1BWF9FWENFUFRJT05fVEVYVF9TSVpFKSkpOwogCQkJfQogCQkJcmV0dXJuIHJlc3VsdC5nZXRTdGRvdXQoKS5vcGVuSW5wdXRTdHJlYW1XaXRoQXV0b0Rlc3Ryb3koKTsKIAkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0Jhc2U4NS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0Jhc2U4NS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0YjdjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvQmFzZTg1LmphdmEKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQudXRpbDsKKworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKKworLyoqCisgKiBCYXNlLTg1IGVuY29kZXIvZGVjb2Rlci4KKyAqCisgKiBAc2luY2UgNS4xMgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQmFzZTg1IHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGJ5dGVbXSBFTkNPREUgPSAoIjAxMjM0NTY3ODkiIC8vJE5PTi1OTFMtMSQKKwkJCSsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiAvLyROT04tTkxTLTEkCisJCQkrICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIgLy8kTk9OLU5MUy0xJAorCQkJKyAiISMkJSYoKSorLTs8PT4/QF5fYHt8fX4iKSAvLyROT04tTkxTLTEkCisJCQkJCS5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVTX0FTQ0lJKTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIERFQ09ERSA9IG5ldyBpbnRbMjU2XTsKKworCXN0YXRpYyB7CisJCUFycmF5cy5maWxsKERFQ09ERSwgLTEpOworCQlmb3IgKGludCBpID0gMDsgaSA8IEVOQ09ERS5sZW5ndGg7IGkrKykgeworCQkJREVDT0RFW0VOQ09ERVtpXV0gPSBpOworCQl9CisJfQorCisJcHJpdmF0ZSBCYXNlODUoKSB7CisJCS8vIE5vIGluc3RhbnRpYXRpb24KKwl9CisKKwkvKioKKwkgKiBEZXRlcm1pbmVzIHRoZSBsZW5ndGggb2YgdGhlIGJhc2UtODUgZW5jb2RpbmcgZm9yIHtAY29kZSByYXdMZW5ndGh9CisJICogYnl0ZXMuCisJICoKKwkgKiBAcGFyYW0gcmF3TGVuZ3RoCisJICogICAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gZW5jb2RlCisJICogQHJldHVybiBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIGZvciB0aGUgYmFzZS04NSBlbmNvZGluZyBvZgorCSAqICAgICAgICAge0Bjb2RlIHJhd0xlbmd0aH0gYnl0ZXMKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBlbmNvZGVkTGVuZ3RoKGludCByYXdMZW5ndGgpIHsKKwkJcmV0dXJuIChyYXdMZW5ndGggKyAzKSAvIDQgKiA1OworCX0KKworCS8qKgorCSAqIEVuY29kZXMgdGhlIGdpdmVuIHtAY29kZSBkYXRhfSBpbiBCYXNlLTg1LgorCSAqCisJICogQHBhcmFtIGRhdGEKKwkgKiAgICAgICAgICAgIHRvIGVuY29kZQorCSAqIEByZXR1cm4gZW5jb2RlZCBkYXRhCisJICovCisJcHVibGljIHN0YXRpYyBieXRlW10gZW5jb2RlKGJ5dGVbXSBkYXRhKSB7CisJCXJldHVybiBlbmNvZGUoZGF0YSwgMCwgZGF0YS5sZW5ndGgpOworCX0KKworCS8qKgorCSAqIEVuY29kZXMge0Bjb2RlIGxlbmd0aH0gYnl0ZXMgb2Yge0Bjb2RlIGRhdGF9IGluIEJhc2UtODUsIGJlZ2lubmluZyBhdCB0aGUKKwkgKiB7QGNvZGUgc3RhcnR9IGluZGV4LgorCSAqCisJICogQHBhcmFtIGRhdGEKKwkgKiAgICAgICAgICAgIHRvIGVuY29kZQorCSAqIEBwYXJhbSBzdGFydAorCSAqICAgICAgICAgICAgaW5kZXggb2YgdGhlIGZpcnN0IGJ5dGUgdG8gZW5jb2RlCisJICogQHBhcmFtIGxlbmd0aAorCSAqICAgICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZQorCSAqIEByZXR1cm4gZW5jb2RlZCBkYXRhCisJICovCisJcHVibGljIHN0YXRpYyBieXRlW10gZW5jb2RlKGJ5dGVbXSBkYXRhLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsKKwkJYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2VuY29kZWRMZW5ndGgobGVuZ3RoKV07CisJCWludCBlbmQgPSBzdGFydCArIGxlbmd0aDsKKwkJaW50IGluID0gc3RhcnQ7CisJCWludCBvdXQgPSAwOworCQl3aGlsZSAoaW4gPCBlbmQpIHsKKwkJCS8vIEFjY3VtdWxhdGUgcmVtYWluaW5nIGJ5dGVzIE1TQiBmaXJzdCBhcyBhIDMyYml0IHZhbHVlCisJCQlsb25nIGFjY3VtdWxhdG9yID0gKChsb25nKSAoZGF0YVtpbisrXSAmIDB4RkYpKSA8PCAyNDsKKwkJCWlmIChpbiA8IGVuZCkgeworCQkJCWFjY3VtdWxhdG9yIHw9IChkYXRhW2luKytdICYgMHhGRikgPDwgMTY7CisJCQkJaWYgKGluIDwgZW5kKSB7CisJCQkJCWFjY3VtdWxhdG9yIHw9IChkYXRhW2luKytdICYgMHhGRikgPDwgODsKKwkJCQkJaWYgKGluIDwgZW5kKSB7CisJCQkJCQlhY2N1bXVsYXRvciB8PSAoZGF0YVtpbisrXSAmIDB4RkYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJLy8gV3JpdGUgdGhlIDMyYml0IHZhbHVlIGluIGJhc2UtODUgZW5jb2RpbmcsIGFsc28gTVNCIGZpcnN0CisJCQlmb3IgKGludCBpID0gNDsgaSA+PSAwOyBpLS0pIHsKKwkJCQlyZXN1bHRbb3V0ICsgaV0gPSBFTkNPREVbKGludCkgKGFjY3VtdWxhdG9yICUgODUpXTsKKwkJCQlhY2N1bXVsYXRvciAvPSA4NTsKKwkJCX0KKwkJCW91dCArPSA1OworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCisJICogRGVjb2RlcyB0aGUgQmFzZS04NSB7QGNvZGUgZW5jb2RlZH0gZGF0YSBpbnRvIGEgYnl0ZSBhcnJheSBvZgorCSAqIHtAY29kZSBleHBlY3RlZFNpemV9IGJ5dGVzLgorCSAqCisJICogQHBhcmFtIGVuY29kZWQKKwkgKiAgICAgICAgICAgIEJhc2UtODUgZW5jb2RlZCBkYXRhCisJICogQHBhcmFtIGV4cGVjdGVkU2l6ZQorCSAqICAgICAgICAgICAgb2YgdGhlIHJlc3VsdAorCSAqIEByZXR1cm4gdGhlIGRlY29kZWQgYnl0ZXMKKwkgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIGV4cGVjdGVkU2l6ZSBkb2Vzbid0IG1hdGNoLCB0aGUgZW5jb2RlZCBkYXRhIGhhcyBhIGxlbmd0aAorCSAqICAgICAgICAgICAgIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YgNSwgb3IgdGhlcmUgYXJlIGludmFsaWQgY2hhcmFjdGVycworCSAqICAgICAgICAgICAgIGluIHRoZSBlbmNvZGVkIGRhdGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJ5dGVbXSBkZWNvZGUoYnl0ZVtdIGVuY29kZWQsIGludCBleHBlY3RlZFNpemUpIHsKKwkJcmV0dXJuIGRlY29kZShlbmNvZGVkLCAwLCBlbmNvZGVkLmxlbmd0aCwgZXhwZWN0ZWRTaXplKTsKKwl9CisKKwkvKioKKwkgKiBEZWNvZGVzIHtAY29kZSBsZW5ndGh9IGJ5dGVzIG9mIEJhc2UtODUge0Bjb2RlIGVuY29kZWR9IGRhdGEsIGJlZ2lubmluZworCSAqIGF0IHRoZSB7QGNvZGUgc3RhcnR9IGluZGV4LCBpbnRvIGEgYnl0ZSBhcnJheSBvZiB7QGNvZGUgZXhwZWN0ZWRTaXplfQorCSAqIGJ5dGVzLgorCSAqCisJICogQHBhcmFtIGVuY29kZWQKKwkgKiAgICAgICAgICAgIEJhc2UtODUgZW5jb2RlZCBkYXRhCisJICogQHBhcmFtIHN0YXJ0CisJICogICAgICAgICAgICBpbmRleCBhdCB3aGljaCB0aGUgZGF0YSB0byBkZWNvZGUgc3RhcnRzIGluIHtAY29kZSBlbmNvZGVkfQorCSAqIEBwYXJhbSBsZW5ndGgKKwkgKiAgICAgICAgICAgIG9mIHRoZSBCYXNlLTg1IGVuY29kZWQgZGF0YQorCSAqIEBwYXJhbSBleHBlY3RlZFNpemUKKwkgKiAgICAgICAgICAgIG9mIHRoZSByZXN1bHQKKwkgKiBAcmV0dXJuIHRoZSBkZWNvZGVkIGJ5dGVzCisJICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiBleHBlY3RlZFNpemUgZG9lc24ndCBtYXRjaCwge0Bjb2RlIGxlbmd0aH0gaXMgbm90IGEKKwkgKiAgICAgICAgICAgICBtdWx0aXBsZSBvZiA1LCBvciB0aGVyZSBhcmUgaW52YWxpZCBjaGFyYWN0ZXJzIGluIHRoZSBlbmNvZGVkCisJICogICAgICAgICAgICAgZGF0YQorCSAqLworCXB1YmxpYyBzdGF0aWMgYnl0ZVtdIGRlY29kZShieXRlW10gZW5jb2RlZCwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoLAorCQkJaW50IGV4cGVjdGVkU2l6ZSkgeworCQlpZiAobGVuZ3RoICUgNSAhPSAwKSB7CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKEpHaXRUZXh0LmdldCgpLmJhc2U4NWxlbmd0aCk7CisJCX0KKwkJYnl0ZVtdIHJlc3VsdCA9IG5ldyBieXRlW2V4cGVjdGVkU2l6ZV07CisJCWludCBlbmQgPSBzdGFydCArIGxlbmd0aDsKKwkJaW50IGluID0gc3RhcnQ7CisJCWludCBvdXQgPSAwOworCQl3aGlsZSAoaW4gPCBlbmQgJiYgb3V0IDwgZXhwZWN0ZWRTaXplKSB7CisJCQkvLyBBY2N1bXVsYXRlIDUgYnl0ZXMsICJNU0IiIGZpcnN0CisJCQlsb25nIGFjY3VtdWxhdG9yID0gMDsKKwkJCWZvciAoaW50IGkgPSA0OyBpID49IDA7IGktLSkgeworCQkJCWludCB2YWwgPSBERUNPREVbZW5jb2RlZFtpbisrXSAmIDB4RkZdOworCQkJCWlmICh2YWwgPCAwKSB7CisJCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJSkdpdFRleHQuZ2V0KCkuYmFzZTg1aW52YWxpZENoYXIsCisJCQkJCQkJSW50ZWdlci50b0hleFN0cmluZyhlbmNvZGVkW2luIC0gMV0gJiAweEZGKSkpOworCQkJCX0KKwkJCQlhY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yICogODUgKyB2YWw7CisJCQl9CisJCQlpZiAoYWNjdW11bGF0b3IgPiAweEZGRkZfRkZGRkwpIHsKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuYmFzZTg1b3ZlcmZsb3csCisJCQkJCQkJCUxvbmcudG9IZXhTdHJpbmcoYWNjdW11bGF0b3IpKSk7CisJCQl9CisJCQkvLyBXcml0ZSByZW1haW5pbmcgYnl0ZXMsIE1TQiBmaXJzdAorCQkJcmVzdWx0W291dCsrXSA9IChieXRlKSAoYWNjdW11bGF0b3IgPj4+IDI0KTsKKwkJCWlmIChvdXQgPCBleHBlY3RlZFNpemUpIHsKKwkJCQlyZXN1bHRbb3V0KytdID0gKGJ5dGUpIChhY2N1bXVsYXRvciA+Pj4gMTYpOworCQkJCWlmIChvdXQgPCBleHBlY3RlZFNpemUpIHsKKwkJCQkJcmVzdWx0W291dCsrXSA9IChieXRlKSAoYWNjdW11bGF0b3IgPj4+IDgpOworCQkJCQlpZiAob3V0IDwgZXhwZWN0ZWRTaXplKSB7CisJCQkJCQlyZXN1bHRbb3V0KytdID0gKGJ5dGUpIGFjY3VtdWxhdG9yOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJCS8vIFNob3VsZCBoYXZlIGV4aGF1c3RlZCAnaW4nIGFuZCBmaWxsZWQgJ291dCcgY29tcGxldGVseQorCQlpZiAoaW4gPCBlbmQpIHsKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmJhc2U4NXRvb0xvbmcsCisJCQkJCQkJSW50ZWdlci52YWx1ZU9mKGV4cGVjdGVkU2l6ZSkpKTsKKwkJfQorCQlpZiAob3V0IDwgZXhwZWN0ZWRTaXplKSB7CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChKR2l0VGV4dC5nZXQoKS5iYXNlODV0b29TaG9ydCwKKwkJCQkJCQlJbnRlZ2VyLnZhbHVlT2YoZXhwZWN0ZWRTaXplKSkpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1RlbXBvcmFyeUJ1ZmZlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1RlbXBvcmFyeUJ1ZmZlci5qYXZhCmluZGV4IDU2MmViMDUuLmZiODkzYTYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9UZW1wb3JhcnlCdWZmZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvVGVtcG9yYXJ5QnVmZmVyLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5VbmNoZWNrZWRJT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKQEAgLTIxMyw2ICsyMTQsMjQgQEAgcHJpdmF0ZSBsb25nIGluQ29yZUxlbmd0aCgpIHsKIAl9CiAKIAkvKioKKwkgKiBDb252ZXJ0IGZpcnN0IHtAY29kZSBsaW1pdH0gbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBidWZmZXIgY29udGVudCB0bworCSAqIFN0cmluZy4KKwkgKgorCSAqIEBwYXJhbSBsaW1pdAorCSAqICAgICAgICAgICAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIGNvbnZlcnRlZCB0byBTdHJpbmcKKwkgKiBAcmV0dXJuIGZpcnN0IHtAY29kZSBsaW1pdH0gbnVtYmVyIG9mIGJ5dGVzIG9mIHRoZSBidWZmZXIgY29udGVudAorCSAqICAgICAgICAgY29udmVydGVkIHRvIFN0cmluZy4KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoaW50IGxpbWl0KSB7CisJCXRyeSB7CisJCQlyZXR1cm4gUmF3UGFyc2VVdGlscy5kZWNvZGUodG9CeXRlQXJyYXkobGltaXQpKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IFVuY2hlY2tlZElPRXhjZXB0aW9uKGUpOworCQl9CisJfQorCisJLyoqCiAJICogQ29udmVydCB0aGlzIGJ1ZmZlcidzIGNvbnRlbnRzIGludG8gYSBjb250aWd1b3VzIGJ5dGUgYXJyYXkuIElmIHRoaXMgc2l6ZQogCSAqIG9mIHRoZSBidWZmZXIgZXhjZWVkcyB0aGUgbGltaXQgb25seSByZXR1cm4gdGhlIGZpcnN0IHtAY29kZSBsaW1pdH0gYnl0ZXMKIAkgKiA8cD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlEZWx0YUlucHV0U3RyZWFtLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5RGVsdGFJbnB1dFN0cmVhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2VlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5RGVsdGFJbnB1dFN0cmVhbS5qYXZhCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87CisKK2ltcG9ydCBqYXZhLmlvLkVPRkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5TdHJlYW1Db3JydXB0ZWRFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworCisvKioKKyAqIEFuIHtAbGluayBJbnB1dFN0cmVhbX0gdGhhdCBhcHBsaWVzIGEgYmluYXJ5IGRlbHRhIHRvIGEgYmFzZSBvbiB0aGUgZmx5LgorICogPHA+CisgKiBEZWx0YSBhcHBsaWNhdGlvbiB0byBhIGJhc2UgbmVlZHMgcmFuZG9tIGFjY2VzcyB0byB0aGUgYmFzZSBkYXRhLiBUaGUgZGVsdGEKKyAqIGlzIGV4cHJlc3NlZCBhcyBhIHNlcXVlbmNlIG9mIGNvcHkgYW5kIGluc2VydCBpbnN0cnVjdGlvbnMuIEEgY29weQorICogaW5zdHJ1Y3Rpb24gaGFzIHRoZSBmb3JtICJDT1BZIGZyb21PZmZzZXQgbGVuZ3RoIiBhbmQgc2F5cyAiY29weSBsZW5ndGggYnl0ZXMKKyAqIGZyb20gdGhlIGJhc2UsIHN0YXJ0aW5nIGF0IG9mZnNldCBmcm9tT2Zmc2V0LCB0byB0aGUgcmVzdWx0Ii4gQW4gaW5zZXJ0CisgKiBpbnN0cnVjdGlvbiBoYXMgdGhlIGZvcm0gIklOU0VSVCBsZW5ndGgiIGZvbGxvd2VkIGJ5IGxlbmd0aCBieXRlcyBhbmQgc2F5cworICogImNvcHkgdGhlIG5leHQgbGVuZ3RoIGJ5dGVzIGZyb20gdGhlIGRlbHRhIHRvIHRoZSByZXN1bHQiLgorICogPC9wPgorICogPHA+CisgKiBUaGVzZSBpbnN0cnVjdGlvbnMgYXJlIGdlbmVyYXRlZCB1c2luZyBhIGNvbnRlbnQtZGVmaW5lZCBjaHVua2luZyBhbGdvcml0aG0KKyAqIChjdXJyZW50bHkgQyBnaXQgdXNlcyB0aGUgc3RhbmRhcmQgUmFiaW4gdmFyaWFudDsgYnV0IHRoZXJlIGFyZSBvdGhlcnMgdGhhdAorICogY291bGQgYmUgdXNlZCkgdGhhdCBpZGVudGlmaWVzIGVxdWFsIGNodW5rcy4gSXQgaXMgZW50aXJlbHkgcG9zc2libGUgdGhhdCBhCisgKiBsYXRlciBjb3B5IGluc3RydWN0aW9uIGhhcyBhIGZyb21PZmZzZXQgdGhhdCBpcyBiZWZvcmUgdGhlIGZyb21PZmZzZXQgb2YgYW4KKyAqIGVhcmxpZXIgY29weSBpbnN0cnVjdGlvbi4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHN0cmVhbSB0aGUgYmFzZS4KKyAqIDwvcD4KKyAqIDxwPgorICogSkdpdCBpcyBsaW1pdGVkIHRvIDJHQiBtYXhpbXVtIHNpemUgZm9yIHRoZSBiYXNlIHNpbmNlIGFycmF5IGluZGljZXMgYXJlCisgKiBzaWduZWQgMzJiaXQgdmFsdWVzLgorICoKKyAqIEBzaW5jZSA1LjEyCisgKi8KK3B1YmxpYyBjbGFzcyBCaW5hcnlEZWx0YUlucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0geworCisJcHJpdmF0ZSBmaW5hbCBieXRlW10gYmFzZTsKKworCXByaXZhdGUgZmluYWwgSW5wdXRTdHJlYW0gZGVsdGE7CisKKwlwcml2YXRlIGxvbmcgcmVzdWx0TGVuZ3RoOworCisJcHJpdmF0ZSBsb25nIHRvRGVsaXZlciA9IC0xOworCisJcHJpdmF0ZSBpbnQgZnJvbUJhc2U7CisKKwlwcml2YXRlIGludCBmcm9tRGVsdGE7CisKKwlwcml2YXRlIGludCBiYXNlT2Zmc2V0ID0gLTE7CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBCaW5hcnlEZWx0YUlucHV0U3RyZWFtfSB0aGF0IGFwcGxpZXMge0Bjb2RlIGRlbHRhfQorCSAqIHRvIHtAY29kZSBiYXNlfS4KKwkgKgorCSAqIEBwYXJhbSBiYXNlCisJICogICAgICAgICAgICBkYXRhIHRvIGFwcGx5IHRoZSBkZWx0YSB0bworCSAqIEBwYXJhbSBkZWx0YQorCSAqICAgICAgICAgICAge0BsaW5rIElucHV0U3RyZWFtfSBkZWxpdmVyaW5nIHRoZSBkZWx0YSB0byBhcHBseQorCSAqLworCXB1YmxpYyBCaW5hcnlEZWx0YUlucHV0U3RyZWFtKGJ5dGVbXSBiYXNlLCBJbnB1dFN0cmVhbSBkZWx0YSkgeworCQl0aGlzLmJhc2UgPSBiYXNlOworCQl0aGlzLmRlbHRhID0gZGVsdGE7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaW50IGIgPSByZWFkTmV4dCgpOworCQlpZiAoYiA+PSAwKSB7CisJCQl0b0RlbGl2ZXItLTsKKwkJfQorCQlyZXR1cm4gYjsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJldHVybiBzdXBlci5yZWFkKGIsIG9mZiwgbGVuKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgaW5pdGlhbGl6ZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWxvbmcgYmFzZVNpemUgPSByZWFkVmFySW50KGRlbHRhKTsKKwkJaWYgKGJhc2VTaXplID4gSW50ZWdlci5NQVhfVkFMVUUgfHwgYmFzZVNpemUgPCAwCisJCQkJfHwgKGludCkgYmFzZVNpemUgIT0gYmFzZS5sZW5ndGgpIHsKKwkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJSkdpdFRleHQuZ2V0KCkuYmluYXJ5RGVsdGFCYXNlTGVuZ3RoTWlzbWF0Y2gsCisJCQkJCUludGVnZXIudmFsdWVPZihiYXNlLmxlbmd0aCksIExvbmcudmFsdWVPZihiYXNlU2l6ZSkpKTsKKwkJfQorCQlyZXN1bHRMZW5ndGggPSByZWFkVmFySW50KGRlbHRhKTsKKwkJaWYgKHJlc3VsdExlbmd0aCA8IDApIHsKKwkJCXRocm93IG5ldyBTdHJlYW1Db3JydXB0ZWRFeGNlcHRpb24oCisJCQkJCUpHaXRUZXh0LmdldCgpLmJpbmFyeURlbHRhSW52YWxpZFJlc3VsdExlbmd0aCk7CisJCX0KKwkJdG9EZWxpdmVyID0gcmVzdWx0TGVuZ3RoOworCQliYXNlT2Zmc2V0ID0gMDsKKwl9CisKKwlwcml2YXRlIGludCByZWFkTmV4dCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChiYXNlT2Zmc2V0IDwgMCkgeworCQkJaW5pdGlhbGl6ZSgpOworCQl9CisJCWlmIChmcm9tQmFzZSA+IDApIHsKKwkJCWZyb21CYXNlLS07CisJCQlyZXR1cm4gYmFzZVtiYXNlT2Zmc2V0KytdICYgMHhGRjsKKwkJfSBlbHNlIGlmIChmcm9tRGVsdGEgPiAwKSB7CisJCQlmcm9tRGVsdGEtLTsKKwkJCXJldHVybiBkZWx0YS5yZWFkKCk7CisJCX0KKwkJaW50IGNvbW1hbmQgPSBkZWx0YS5yZWFkKCk7CisJCWlmIChjb21tYW5kIDwgMCkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmICgoY29tbWFuZCAmIDB4ODApICE9IDApIHsKKwkJCS8vIERlY29kZSBvZmZzZXQgYW5kIGxlbmd0aCB0byByZWFkIGZyb20gYmFzZQorCQkJbG9uZyBjb3B5T2Zmc2V0ID0gMDsKKwkJCWZvciAoaW50IGkgPSAxLCBzaGlmdCA9IDA7IGkgPCAweDEwOyBpICo9IDIsIHNoaWZ0ICs9IDgpIHsKKwkJCQlpZiAoKGNvbW1hbmQgJiBpKSAhPSAwKSB7CisJCQkJCWNvcHlPZmZzZXQgfD0gKChsb25nKSBuZXh0KGRlbHRhKSkgPDwgc2hpZnQ7CisJCQkJfQorCQkJfQorCQkJaW50IGNvcHlTaXplID0gMDsKKwkJCWZvciAoaW50IGkgPSAweDEwLCBzaGlmdCA9IDA7IGkgPCAweDgwOyBpICo9IDIsIHNoaWZ0ICs9IDgpIHsKKwkJCQlpZiAoKGNvbW1hbmQgJiBpKSAhPSAwKSB7CisJCQkJCWNvcHlTaXplIHw9IG5leHQoZGVsdGEpIDw8IHNoaWZ0OworCQkJCX0KKwkJCX0KKwkJCWlmIChjb3B5U2l6ZSA9PSAwKSB7CisJCQkJY29weVNpemUgPSAweDEwMDAwOworCQkJfQorCQkJaWYgKGNvcHlPZmZzZXQgPiBiYXNlLmxlbmd0aCAtIGNvcHlTaXplKSB7CisJCQkJdGhyb3cgbmV3IFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCUpHaXRUZXh0LmdldCgpLmJpbmFyeURlbHRhSW52YWxpZE9mZnNldCwKKwkJCQkJCUxvbmcudmFsdWVPZihjb3B5T2Zmc2V0KSwgSW50ZWdlci52YWx1ZU9mKGNvcHlTaXplKSkpOworCQkJfQorCQkJYmFzZU9mZnNldCA9IChpbnQpIGNvcHlPZmZzZXQ7CisJCQlmcm9tQmFzZSA9IGNvcHlTaXplOworCQkJcmV0dXJuIHJlYWROZXh0KCk7CisJCX0gZWxzZSBpZiAoY29tbWFuZCAhPSAwKSB7CisJCQkvLyBUaGUgbmV4dCAnY29tbWFuZCcgYnl0ZXMgY29tZSBmcm9tIHRoZSBkZWx0YQorCQkJZnJvbURlbHRhID0gY29tbWFuZCAtIDE7CisJCQlyZXR1cm4gZGVsdGEucmVhZCgpOworCQl9IGVsc2UgeworCQkJLy8gWmVybyBpcyByZXNlcnZlZAorCQkJdGhyb3cgbmV3IFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbigKKwkJCQkJSkdpdFRleHQuZ2V0KCkudW5zdXBwb3J0ZWRDb21tYW5kMCk7CisJCX0KKwl9CisKKwlwcml2YXRlIGludCBuZXh0KElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpbnQgYiA9IGluLnJlYWQoKTsKKwkJaWYgKGIgPCAwKSB7CisJCQl0aHJvdyBuZXcgRU9GRXhjZXB0aW9uKCk7CisJCX0KKwkJcmV0dXJuIGI7CisJfQorCisJcHJpdmF0ZSBsb25nIHJlYWRWYXJJbnQoSW5wdXRTdHJlYW0gaW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWxvbmcgdmFsID0gMDsKKwkJaW50IHNoaWZ0ID0gMDsKKwkJaW50IGI7CisJCWRvIHsKKwkJCWIgPSBuZXh0KGluKTsKKwkJCXZhbCB8PSAoKGxvbmcpIChiICYgMHg3ZikpIDw8IHNoaWZ0OworCQkJc2hpZnQgKz0gNzsKKwkJfSB3aGlsZSAoKGIgJiAweDgwKSAhPSAwKTsKKwkJcmV0dXJuIHZhbDsKKwl9CisKKwkvKioKKwkgKiBUZWxscyB0aGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGUgZmluYWwgcmVzdWx0LgorCSAqCisJICogQHJldHVybiB0aGUgc2l6ZQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgc2l6ZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBmcm9tIHtAY29kZSBkZWx0YX0KKwkgKi8KKwlwdWJsaWMgbG9uZyBnZXRFeHBlY3RlZFJlc3VsdFNpemUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAoYmFzZU9mZnNldCA8IDApIHsKKwkJCWluaXRpYWxpemUoKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0TGVuZ3RoOworCX0KKworCS8qKgorCSAqIFRlbGxzIHdoZXRoZXIgdGhlIGRlbHRhIGhhcyBiZWVuIGZ1bGx5IGNvbnN1bWVkLCBhbmQgdGhlIGV4cGVjdGVkIG51bWJlcgorCSAqIG9mIGJ5dGVzIGZvciB0aGUgY29tYmluZWQgcmVzdWx0IGhhdmUgYmVlbiByZWFkIGZyb20gdGhpcworCSAqIHtAbGluayBCaW5hcnlEZWx0YUlucHV0U3RyZWFtfS4KKwkgKgorCSAqIEByZXR1cm4gd2hldGhlciBkZWx0YSBhcHBsaWNhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorCSAqLworCXB1YmxpYyBib29sZWFuIGlzRnVsbHlDb25zdW1lZCgpIHsKKwkJdHJ5IHsKKwkJCXJldHVybiB0b0RlbGl2ZXIgPT0gMCAmJiBkZWx0YS5yZWFkKCkgPCAwOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlyZXR1cm4gdG9EZWxpdmVyID09IDA7CisJCX0KKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWRlbHRhLmNsb3NlKCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtJbnB1dFN0cmVhbS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtJbnB1dFN0cmVhbS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOTQwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5SHVua0lucHV0U3RyZWFtLmphdmEKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzsKKworaW1wb3J0IGphdmEuaW8uRU9GRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkJhc2U4NTsKKworLyoqCisgKiBBIHN0cmVhbSB0aGF0IGRlY29kZXMgZ2l0IGJpbmFyeSBwYXRjaCBkYXRhIG9uIHRoZSBmbHkuCisgKgorICogQHNpbmNlIDUuMTIKKyAqLworcHVibGljIGNsYXNzIEJpbmFyeUh1bmtJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKKworCXByaXZhdGUgZmluYWwgSW5wdXRTdHJlYW0gaW47CisKKwlwcml2YXRlIGludCBsaW5lTnVtYmVyOworCisJcHJpdmF0ZSBieXRlW10gYnVmZmVyOworCisJcHJpdmF0ZSBpbnQgcG9zID0gMDsKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIEJpbmFyeUh1bmtJbnB1dFN0cmVhbX0uCisJICoKKwkgKiBAcGFyYW0gaW4KKwkgKiAgICAgICAgICAgIHtAbGluayBJbnB1dFN0cmVhbX0gdG8gcmVhZCB0aGUgYmFzZS04NSBlbmNvZGVkIHBhdGNoIGRhdGEKKwkgKiAgICAgICAgICAgIGZyb20KKwkgKi8KKwlwdWJsaWMgQmluYXJ5SHVua0lucHV0U3RyZWFtKElucHV0U3RyZWFtIGluKSB7CisJCXRoaXMuaW4gPSBpbjsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAocG9zIDwgMCkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCWlmIChidWZmZXIgPT0gbnVsbCB8fCBwb3MgPT0gYnVmZmVyLmxlbmd0aCkgeworCQkJZmlsbEJ1ZmZlcigpOworCQl9CisJCWlmIChwb3MgPj0gMCkgeworCQkJcmV0dXJuIGJ1ZmZlcltwb3MrK10gJiAweEZGOworCQl9CisJCXJldHVybiAtMTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgaW50IHJlYWQoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXJldHVybiBzdXBlci5yZWFkKGIsIG9mZiwgbGVuKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWluLmNsb3NlKCk7CisJCWJ1ZmZlciA9IG51bGw7CisJfQorCisJcHJpdmF0ZSB2b2lkIGZpbGxCdWZmZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpbnQgbGVuZ3RoID0gaW4ucmVhZCgpOworCQlpZiAobGVuZ3RoIDwgMCkgeworCQkJcG9zID0gbGVuZ3RoOworCQkJYnVmZmVyID0gbnVsbDsKKwkJCXJldHVybjsKKwkJfQorCQlsaW5lTnVtYmVyKys7CisJCS8vIExlbmd0aCBpcyBlbmNvZGVkIHdpdGggY2hhcmFjdGVycywgQS4uWiBmb3IgMS4uMjYgYW5kIGEuLnogZm9yIDI3Li41MgorCQlpZiAoJ0EnIDw9IGxlbmd0aCAmJiBsZW5ndGggPD0gJ1onKSB7CisJCQlsZW5ndGggPSBsZW5ndGggLSAnQScgKyAxOworCQl9IGVsc2UgaWYgKCdhJyA8PSBsZW5ndGggJiYgbGVuZ3RoIDw9ICd6JykgeworCQkJbGVuZ3RoID0gbGVuZ3RoIC0gJ2EnICsgMjc7CisJCX0gZWxzZSB7CisJCQl0aHJvdyBuZXcgU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlKR2l0VGV4dC5nZXQoKS5iaW5hcnlIdW5rSW52YWxpZExlbmd0aCwKKwkJCQkJSW50ZWdlci52YWx1ZU9mKGxpbmVOdW1iZXIpLCBJbnRlZ2VyLnRvSGV4U3RyaW5nKGxlbmd0aCkpKTsKKwkJfQorCQlieXRlW10gZW5jb2RlZCA9IG5ldyBieXRlW0Jhc2U4NS5lbmNvZGVkTGVuZ3RoKGxlbmd0aCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IGVuY29kZWQubGVuZ3RoOyBpKyspIHsKKwkJCWludCBiID0gaW4ucmVhZCgpOworCQkJaWYgKGIgPCAwIHx8IGIgPT0gJ1xuJykgeworCQkJCXRocm93IG5ldyBFT0ZFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQlKR2l0VGV4dC5nZXQoKS5iaW5hcnlIdW5rSW52YWxpZExlbmd0aCwKKwkJCQkJCUludGVnZXIudmFsdWVPZihsaW5lTnVtYmVyKSkpOworCQkJfQorCQkJZW5jb2RlZFtpXSA9IChieXRlKSBiOworCQl9CisJCS8vIE11c3QgYmUgZm9sbG93ZWQgYnkgYSBuZXdsaW5lOyB0b2xlcmF0ZSBFT0YuCisJCWludCBiID0gaW4ucmVhZCgpOworCQlpZiAoYiA+PSAwICYmIGIgIT0gJ1xuJykgeworCQkJdGhyb3cgbmV3IFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJSkdpdFRleHQuZ2V0KCkuYmluYXJ5SHVua01pc3NpbmdOZXdsaW5lLAorCQkJCQlJbnRlZ2VyLnZhbHVlT2YobGluZU51bWJlcikpKTsKKwkJfQorCQl0cnkgeworCQkJYnVmZmVyID0gQmFzZTg1LmRlY29kZShlbmNvZGVkLCBsZW5ndGgpOworCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworCQkJU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uIGV4ID0gbmV3IFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbigKKwkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuYmluYXJ5SHVua0RlY29kZUVycm9yLAorCQkJCQkJCUludGVnZXIudmFsdWVPZihsaW5lTnVtYmVyKSkpOworCQkJZXguaW5pdENhdXNlKGUpOworCQkJdGhyb3cgZXg7CisJCX0KKwkJcG9zID0gMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5SHVua091dHB1dFN0cmVhbS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtPdXRwdXRTdHJlYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDU1MWMwCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtPdXRwdXRTdHJlYW0uamF2YQpAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5CYXNlODU7CisKKy8qKgorICogQW4ge0BsaW5rIE91dHB1dFN0cmVhbX0gdGhhdCBlbmNvZGVzIGRhdGEgZm9yIGEgZ2l0IGJpbmFyeSBwYXRjaC4KKyAqCisgKiBAc2luY2UgNS4xMgorICovCitwdWJsaWMgY2xhc3MgQmluYXJ5SHVua091dHB1dFN0cmVhbSBleHRlbmRzIE91dHB1dFN0cmVhbSB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0JZVEVTID0gNTI7CisKKwlwcml2YXRlIGZpbmFsIE91dHB1dFN0cmVhbSBvdXQ7CisKKwlwcml2YXRlIGZpbmFsIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVtNQVhfQllURVNdOworCisJcHJpdmF0ZSBpbnQgcG9zOworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgQmluYXJ5SHVua091dHB1dFN0cmVhbX0uCisJICoKKwkgKiBAcGFyYW0gb3V0CisJICogICAgICAgICAgICB7QGxpbmsgT3V0cHV0U3RyZWFtfSB0byB3cml0ZSB0aGUgZW5jb2RlZCBkYXRhIHRvCisJICovCisJcHVibGljIEJpbmFyeUh1bmtPdXRwdXRTdHJlYW0oT3V0cHV0U3RyZWFtIG91dCkgeworCQl0aGlzLm91dCA9IG91dDsKKwl9CisKKwkvKioKKwkgKiBGbHVzaGVzIGFuZCBjbG9zZXMgdGhpcyBzdHJlYW0sIGFuZCBjbG9zZXMgdGhlIHVuZGVybHlpbmcKKwkgKiB7QGxpbmsgT3V0cHV0U3RyZWFtfS4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZsdXNoKCk7CisJCW91dC5jbG9zZSgpOworCX0KKworCS8qKgorCSAqIFdyaXRlcyBhbnkgYnVmZmVyZWQgb3V0cHV0IGFzIGEgYmluYXJ5IHBhdGNoIGxpbmUgdG8gdGhlIHVuZGVybHlpbmcKKwkgKiB7QGxpbmsgT3V0cHV0U3RyZWFtfSBhbmQgZmx1c2hlcyB0aGF0IHN0cmVhbSwgdG9vLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGZsdXNoKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKHBvcyA+IDApIHsKKwkJCWVuY29kZShidWZmZXIsIDAsIHBvcyk7CisJCQlwb3MgPSAwOworCQl9CisJCW91dC5mbHVzaCgpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHdyaXRlKGludCBiKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlidWZmZXJbcG9zKytdID0gKGJ5dGUpIGI7CisJCWlmIChwb3MgPT0gYnVmZmVyLmxlbmd0aCkgeworCQkJZW5jb2RlKGJ1ZmZlciwgMCwgcG9zKTsKKwkJCXBvcyA9IDA7CisJCX0KKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB3cml0ZShieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKGxlbiA9PSAwKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaW50IHRvQ29weSA9IGxlbjsKKwkJaW50IGluID0gb2ZmOworCQlpZiAocG9zID4gMCkgeworCQkJLy8gRmlsbCB0aGUgYnVmZmVyCisJCQlpbnQgY2h1bmsgPSBNYXRoLm1pbih0b0NvcHksIGJ1ZmZlci5sZW5ndGggLSBwb3MpOworCQkJU3lzdGVtLmFycmF5Y29weShiLCBpbiwgYnVmZmVyLCBwb3MsIGNodW5rKTsKKwkJCWluICs9IGNodW5rOworCQkJcG9zICs9IGNodW5rOworCQkJdG9Db3B5IC09IGNodW5rOworCQkJaWYgKHBvcyA9PSBidWZmZXIubGVuZ3RoKSB7CisJCQkJZW5jb2RlKGJ1ZmZlciwgMCwgcG9zKTsKKwkJCQlwb3MgPSAwOworCQkJfQorCQkJaWYgKHRvQ29weSA9PSAwKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisJCXdoaWxlICh0b0NvcHkgPj0gTUFYX0JZVEVTKSB7CisJCQllbmNvZGUoYiwgaW4sIE1BWF9CWVRFUyk7CisJCQl0b0NvcHkgLT0gTUFYX0JZVEVTOworCQkJaW4gKz0gTUFYX0JZVEVTOworCQl9CisJCWlmICh0b0NvcHkgPiAwKSB7CisJCQlTeXN0ZW0uYXJyYXljb3B5KGIsIGluLCBidWZmZXIsIDAsIHRvQ29weSk7CisJCQlwb3MgPSB0b0NvcHk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgZW5jb2RlKGJ5dGVbXSBkYXRhLCBpbnQgb2ZmLCBpbnQgbGVuZ3RoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAobGVuZ3RoIDw9IDI2KSB7CisJCQlvdXQud3JpdGUoJ0EnICsgbGVuZ3RoIC0gMSk7CisJCX0gZWxzZSB7CisJCQlvdXQud3JpdGUoJ2EnICsgbGVuZ3RoIC0gMjcpOworCQl9CisJCW91dC53cml0ZShCYXNlODUuZW5jb2RlKGRhdGEsIG9mZiwgbGVuZ3RoKSk7CisJCW91dC53cml0ZSgnXG4nKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9wb20ueG1sIGIvcG9tLnhtbAppbmRleCBmNjY4YzE3Li4xZDFlZjMzIDEwMDY0NAotLS0gYS9wb20ueG1sCisrKyBiL3BvbS54bWwKQEAgLTE4LDcgKzE4LDcgQEAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+CiAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogCiAgIDxuYW1lPkpHaXQgLSBQYXJlbnQ8L25hbWU+CiAgIDx1cmw+JHtqZ2l0LXVybH08L3VybD4KQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgIDxtYXZlbi5jb21waWxlci50YXJnZXQ+MS44PC9tYXZlbi5jb21waWxlci50YXJnZXQ+CiAgICAgPGJ1bmRsZS1tYW5pZmVzdD4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9NRVRBLUlORi9NQU5JRkVTVC5NRjwvYnVuZGxlLW1hbmlmZXN0PgogCi0gICAgPGpnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+NS4xMC4wLjIwMjAxMjA4MDk1NS1yPC9qZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9uPgorICAgIDxqZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9uPjUuMTEuMC4yMDIxMDMwOTE2MTAtcjwvamdpdC1sYXN0LXJlbGVhc2UtdmVyc2lvbj4KICAgICA8YXBhY2hlLXNzaGQtdmVyc2lvbj4yLjYuMDwvYXBhY2hlLXNzaGQtdmVyc2lvbj4KICAgICA8anNjaC12ZXJzaW9uPjAuMS41NTwvanNjaC12ZXJzaW9uPgogICAgIDxqemxpYi12ZXJzaW9uPjEuMS4xPC9qemxpYi12ZXJzaW9uPgpAQCAtMTYyLDggKzE2Miw4IEBACiAgICAgPGNvbW1vbnMtY29tcHJlc3MtdmVyc2lvbj4xLjE5PC9jb21tb25zLWNvbXByZXNzLXZlcnNpb24+CiAgICAgPG9zZ2ktY29yZS12ZXJzaW9uPjQuMy4xPC9vc2dpLWNvcmUtdmVyc2lvbj4KICAgICA8c2VydmxldC1hcGktdmVyc2lvbj4zLjEuMDwvc2VydmxldC1hcGktdmVyc2lvbj4KLSAgICA8amV0dHktdmVyc2lvbj45LjQuMzYudjIwMjEwMTE0PC9qZXR0eS12ZXJzaW9uPgotICAgIDxqYXBpY21wLXZlcnNpb24+MC4xNC40PC9qYXBpY21wLXZlcnNpb24+CisgICAgPGpldHR5LXZlcnNpb24+OS40LjQxLnYyMDIxMDUxNjwvamV0dHktdmVyc2lvbj4KKyAgICA8amFwaWNtcC12ZXJzaW9uPjAuMTUuMzwvamFwaWNtcC12ZXJzaW9uPgogICAgIDxodHRwY2xpZW50LXZlcnNpb24+NC41LjEzPC9odHRwY2xpZW50LXZlcnNpb24+CiAgICAgPGh0dHBjb3JlLXZlcnNpb24+NC40LjE0PC9odHRwY29yZS12ZXJzaW9uPgogICAgIDxzbGY0ai12ZXJzaW9uPjEuNy4zMDwvc2xmNGotdmVyc2lvbj4KQEAgLTM1NSw3ICszNTUsNyBAQAogICAgICAgICAgICAgPGRlcGVuZGVuY3k+PCEtLSBhZGQgc3VwcG9ydCBmb3Igc3NoL3NjcCAtLT4KICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi53YWdvbjwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+d2Fnb24tc3NoPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICA8dmVyc2lvbj4zLjQuMjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgPHZlcnNpb24+My40LjM8L3ZlcnNpb24+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgICAgIDwvcGx1Z2luPgpAQCAtMzk3LDcgKzM5Nyw3IEBACiAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yay5ib290PC9ncm91cElkPgogICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1ib290LW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICA8dmVyc2lvbj4yLjQuMTwvdmVyc2lvbj4KKyAgICAgICAgICA8dmVyc2lvbj4yLjQuNDwvdmVyc2lvbj4KICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZGFzaDwvZ3JvdXBJZD4KQEAgLTg2MCwxMiArODYwLDEyIEBACiAgICAgICAgICAgPHBsdWdpbj4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICA8Zm9yaz50cnVlPC9mb3JrPgogICAgICAgICAgICAgICA8Y29tcGlsZXJBcmdzIGNvbWJpbmUuY2hpbGRyZW49ImFwcGVuZCI+CiAgICAgICAgICAgICAgICAgPGFyZz4tSi1YYm9vdGNsYXNzcGF0aC9wOiR7c2V0dGluZ3MubG9jYWxSZXBvc2l0b3J5fS9jb20vZ29vZ2xlL2Vycm9ycHJvbmUvamF2YWMvJHtqYXZhYy52ZXJzaW9ufS9qYXZhYy0ke2phdmFjLnZlcnNpb259LmphcjwvYXJnPgogICAgICAgICAgICAgICA8L2NvbXBpbGVyQXJncz4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgIDwvcGx1Z2lucz4KICAgICAgIDwvYnVpbGQ+CkBAIC05MDAsNyArOTAwLDcgQEAKICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamR0PC9ncm91cElkPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmVjajwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjI0LjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+My4yNS4wPC92ZXJzaW9uPgogICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgICA8L3BsdWdpbj4K