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+b3JnLmVjbGlwc2UuamdpdC5qdW5pdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L1JlcG9zaXRvcnlUZXN0Q2FzZS5qYXZhCmluZGV4IDMyYWYwOGMuLjA0OTg4ZjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9SZXBvc2l0b3J5VGVzdENhc2UuamF2YQpAQCAtMjUsNiArMjUsNyBAQAogaW1wb3J0IGphdmEuaW8uUmVhZGVyOwogaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKIGltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogCkBAIC0zOSw2ICs0MCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SW5zZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CkBAIC0zODcsNiArMzg5LDE2IEBACiAJfQogCiAJLyoqCisJICogR2V0IGFsbCBSZWZzCisJICoKKwkgKiBAcmV0dXJuIGxpc3Qgb2YgcmVmcworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgTGlzdDxSZWY+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+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5wcm9wZXJ0aWVzCmluZGV4IDgzODQ2ZWUuLjM4ZGVhYjkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcwpAQCAtMTE1LDYgKzExNSw3IEBACiBtZXRhVmFyX2Nvbm5Qcm9wPWNvbm4ucHJvcAogbWV0YVZhcl9kaWZmQWxnPUFMR09SSVRITQogbWV0YVZhcl9kaXJlY3Rvcnk9RElSRUNUT1JZCittZXRhVmFyX2V4dHJhQXJndW1lbnQ9b3Vyc3x0aGVpcnMKIG1ldGFWYXJfZmlsZT1GSUxFCiBtZXRhVmFyX2ZpbGVwYXR0ZXJuPWZpbGVwYXR0ZXJuCiBtZXRhVmFyX2dpdERpcj1HSVRfRElSCkBAIC0yMTcsNiArMjE4LDcgQEAKIHRyZWVJc1JlcXVpcmVkPWFyZ3VtZW50IHRyZWUgaXMgcmVxdWlyZWQKIHRvb01hbnlSZWZzR2l2ZW49VG9vIG1hbnkgcmVmcyBnaXZlbgogdW5rbm93bklvRXJyb3JTdGRvdXQ9QW4gdW5rbm93biBJL08gZXJyb3Igb2NjdXJyZWQgb24gc3RhbmRhcmQgb3V0cHV0Cit1bmtub3duRXh0cmFBcmd1bWVudD11bmtub3duIGV4dHJhIGFyZ3VtZW50IC1YIHswfSBzcGVjaWZpZWQKIHVua25vd25NZXJnZVN0cmF0ZWd5PXVua25vd24gbWVyZ2Ugc3RyYXRlZ3kgezB9IHNwZWNpZmllZAogdW5rbm93blN1YmNvbW1hbmQ9VW5rbm93biBzdWJjb21tYW5kOiB7MH0KIHVubWVyZ2VkUGF0aHM9VW5tZXJnZWQgcGF0aHM6CkBAIC0yMjYsNiArMjI4LDcgQEAKIHVzYWdlX0FnZ3Jlc3NpdmU9VGhpcyBvcHRpb24gd2lsbCBjYXVzZSBnYyB0byBtb3JlIGFnZ3Jlc3NpdmVseSBvcHRpbWl6ZSB0aGUgcmVwb3NpdG9yeSBhdCB0aGUgZXhwZW5zZSBvZiB0YWtpbmcgbXVjaCBtb3JlIHRpbWUKIHVzYWdlX0Fsd2F5c0ZhbGxiYWNrPVNob3cgdW5pcXVlbHkgYWJicmV2aWF0ZWQgY29tbWl0IG9iamVjdCBhcyBmYWxsYmFjawogdXNhZ2VfYmFyZUNsb25lPU1ha2UgYSBiYXJlIEdpdCByZXBvc2l0b3J5LiBUaGF0IGlzLCBpbnN0ZWFkIG9mIGNyZWF0aW5nIFtESVJFQ1RPUlldIGFuZCBwbGFjaW5nIHRoZSBhZG1pbmlzdHJhdGl2ZSBmaWxlcyBpbiBbRElSRUNUT1JZXS8uZ2l0LCBtYWtlIHRoZSBbRElSRUNUT1JZXSBpdHNlbGYgdGhlICRHSVRfRElSLgordXNhZ2VfZXh0cmFBcmd1bWVudD1QYXNzIGFuIGV4dHJhIGFyZ3VtZW50IHRvIGEgbWVyZ2UgZHJpdmVyLiBDdXJyZW50bHkgc3VwcG9ydGVkIGFyZSAiLVggb3VycyIgYW5kICItWCB0aGVpcnMiLgogdXNhZ2VfbWlycm9yQ2xvbmU9U2V0IHVwIGEgbWlycm9yIG9mIHRoZSBzb3VyY2UgcmVwb3NpdG9yeS4gVGhpcyBpbXBsaWVzIC0tYmFyZS4gQ29tcGFyZWQgdG8gLS1iYXJlLCAtLW1pcnJvciBub3Qgb25seSBtYXBzIFwKIGxvY2FsIGJyYW5jaGVzIG9mIHRoZSBzb3VyY2UgdG8gbG9jYWwgYnJhbmNoZXMgb2YgdGhlIHRhcmdldCwgaXQgbWFwcyBhbGwgcmVmcyAoaW5jbHVkaW5nIHJlbW90ZS10cmFja2luZyBicmFuY2hlcywgbm90ZXMgZXRjLikgXAogYW5kIHNldHMgdXAgYSByZWZzcGVjIGNvbmZpZ3VyYXRpb24gc3VjaCB0aGF0IGFsbCB0aGVzZSByZWZzIGFyZSBvdmVyd3JpdHRlbiBieSBhIGdpdCByZW1vdGUgdXBkYXRlIGluIHRoZSB0YXJnZXQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9NZXJnZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKaW5kZXggZmRjNDQ5ZS4uY2E0ODc3ZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuQ29udGVudE1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlci5NZXJnZUZhaWx1cmVSZWFzb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWwuQ0xJVGV4dDsKQEAgLTY5LDYgKzcwLDIwIEBACiAJQE9wdGlvbihuYW1lID0gIi1tIiwgdXNhZ2UgPSAidXNhZ2VfbWVzc2FnZSIpCiAJcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5ID0gbnVsbDsKKworCUBPcHRpb24obmFtZSA9ICItLXN0cmF0ZWd5LW9wdGlvbiIsIGFsaWFzZXMgPSB7ICItWCIgfSwKKwkJCW1ldGFWYXIgPSAibWV0YVZhcl9leHRyYUFyZ3VtZW50IiwgdXNhZ2UgPSAidXNhZ2VfZXh0cmFBcmd1bWVudCIpCisJdm9pZCBleHRyYUFyZyhTdHJpbmcgbmFtZSkgeworCQlpZiAoQ29udGVudE1lcmdlU3RyYXRlZ3kuT1VSUy5uYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShuYW1lKSkgeworCQkJY29udGVudFN0cmF0ZWd5ID0gQ29udGVudE1lcmdlU3RyYXRlZ3kuT1VSUzsKKwkJfSBlbHNlIGlmIChDb250ZW50TWVyZ2VTdHJhdGVneS5USEVJUlMubmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UobmFtZSkpIHsKKwkJCWNvbnRlbnRTdHJhdGVneSA9IENvbnRlbnRNZXJnZVN0cmF0ZWd5LlRIRUlSUzsKKwkJfSBlbHNlIHsKKwkJCXRocm93IGRpZShNZXNzYWdlRm9ybWF0LmZvcm1hdChDTElUZXh0LmdldCgpLnVua25vd25FeHRyYUFyZ3VtZW50LCBuYW1lKSk7CisJCX0KKwl9CisKIAkvKioge0Bpbmhlcml0RG9jfSAqLwogCUBPdmVycmlkZQogCXByb3RlY3RlZCB2b2lkIHJ1bigpIHsKQEAgLTk2LDggKzExMSwxMSBAQAogCQkJUmVmIG9sZEhlYWQgPSBnZXRPbGRIZWFkKCk7CiAJCQlNZXJnZVJlc3VsdCByZXN1bHQ7CiAJCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgewotCQkJCU1lcmdlQ29tbWFuZCBtZXJnZUNtZCA9IGdpdC5tZXJnZSgpLnNldFN0cmF0ZWd5KG1lcmdlU3RyYXRlZ3kpCi0JCQkJCQkuc2V0U3F1YXNoKHNxdWFzaCkuc2V0RmFzdEZvcndhcmQoZmYpCisJCQkJTWVyZ2VDb21tYW5kIG1lcmdlQ21kID0gZ2l0Lm1lcmdlKCkKKwkJCQkJCS5zZXRTdHJhdGVneShtZXJnZVN0cmF0ZWd5KQorCQkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSkKKwkJCQkJCS5zZXRTcXVhc2goc3F1YXNoKQorCQkJCQkJLnNldEZhc3RGb3J3YXJkKGZmKQogCQkJCQkJLnNldENvbW1pdCghbm9Db21taXQpOwogCQkJCWlmIChzcmNSZWYgIT0gbnVsbCkgewogCQkJCQltZXJnZUNtZC5pbmNsdWRlKHNyY1JlZik7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmV2V2Fsa1RleHRCdWlsdGluLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmV2V2Fsa1RleHRCdWlsdGluLmphdmEKaW5kZXggODIyZjg5OS4uNjk2YTkyNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL1JldldhbGtUZXh0QnVpbHRpbi5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9SZXZXYWxrVGV4dEJ1aWx0aW4uamF2YQpAQCAtMTI5LDYgKzEyOSw5IEBACiAJCQl3YWxrLnNldFRyZWVGaWx0ZXIoQW5kVHJlZUZpbHRlci5jcmVhdGUocGF0aEZpbHRlciwKIAkJCQkJVHJlZUZpbHRlci5BTllfRElGRikpOwogCQl9CisJCWlmIChwYXJlbnRzKSB7CisJCQl3YWxrLnNldFJld3JpdGVQYXJlbnRzKHRydWUpOworCQl9CiAKIAkJaWYgKHJldkxpbWl0ZXIuc2l6ZSgpID09IDEpCiAJCQl3YWxrLnNldFJldkZpbHRlcihyZXZMaW1pdGVyLmdldCgwKSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQuamF2YQppbmRleCA5OTFiM2JhLi44ZTQ5YTc2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LmphdmEKQEAgLTI4NCw2ICsyODQsNyBAQAogCS8qKiovIHB1YmxpYyBTdHJpbmcgdG9vTWFueVJlZnNHaXZlbjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHRyZWVJc1JlcXVpcmVkOwogCS8qKiovIHB1YmxpYyBjaGFyW10gdW5rbm93bklvRXJyb3JTdGRvdXQ7CisJLyoqKi8gcHVibGljIFN0cmluZyB1bmtub3duRXh0cmFBcmd1bWVudDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHVua25vd25NZXJnZVN0cmF0ZWd5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgdW5rbm93blN1YmNvbW1hbmQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyB1bm1lcmdlZFBhdGhzOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwZDgzZWIzLi4yYTkwNWExIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDUuMTIuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CkBAIC0yMCwxNSArMjAsMTUgQEAKICBvcmcuYXBhY2hlLnNzaGQuY29yZTt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuc2VydmVyO3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAogIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuZm9yd2FyZDt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQucHJveHk7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5wcm94eTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LmV4cGVyaW1lbnRhbC50aGVvcmllczt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydW5uZXI7dmVyc2lvbj0iWzQuMTMsNS4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L3BvbS54bWwKaW5kZXggNjdhYzdjMS4uNWFmMTZjNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA4ZmNlM2M1Li4wNjQ1OTY0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC02LDkgKzYsOSBAQAogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNS4xMi4xLnF1YWxpZmllcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249IjUuMTEuMiI7eC1pbnRlcm5hbDo9dHJ1ZTsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249IjUuMTIuMSI7eC1pbnRlcm5hbDo9dHJ1ZTsKICAgdXNlczo9Im9yZy5hcGFjaGUuc3NoZC5jbGllbnQsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgua2V5Ym9hcmQsCkBAIC0yMyw5ICsyMyw5IEBACiAgICBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZSwKICAgIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hdXRoO3ZlcnNpb249IjUuMTEuMiI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLnByb3h5O3ZlcnNpb249IjUuMTEuMiI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iNS4xMS4yIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmF1dGg7dmVyc2lvbj0iNS4xMi4xIjt4LWludGVybmFsOj10cnVlLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQucHJveHk7dmVyc2lvbj0iNS4xMi4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdCIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSI1LjEyLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNvbmZpZy5ob3N0cywKICAgIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXIsCkBAIC01OSw2ICs1OSw4IEBACiAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5oZWxwZXJzO3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAogIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uaW87dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCiAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXg7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uO3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LmV4dGVuc2lvbi5wYXJzZXI7dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCiAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXlwcm92aWRlcjt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLm1hYzt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnJhbmRvbTt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKQEAgLTc4LDEyICs4MCwxMiBAQAogIG9yZy5hcGFjaGUuc3NoZC5zZnRwO3ZlcnNpb249IlsyLjYuMCwyLjcuMCkiLAogIG9yZy5hcGFjaGUuc3NoZC5zZnRwLmNsaWVudDt2ZXJzaW9uPSJbMi42LjAsMi43LjApIiwKICBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5jb21tb247dmVyc2lvbj0iWzIuNi4wLDIuNy4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2g7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2g7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCA0YTE5NmZlLi44MGEyN2Q0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNS4xMS4yLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTt2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlO3ZlcnNpb249IjUuMTIuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbAppbmRleCBhY2EwZGQ0Li5mNzU0YTNhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQucHJvcGVydGllcwppbmRleCAxNmI1NzM4Li41YmMwODY3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQucHJvcGVydGllcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQucHJvcGVydGllcwpAQCAtMjQsNyArMjQsNiBAQAoga2V5RW5jcnlwdGVkUmV0cnk9RW5jcnlwdGVkIGtleSAnJ3swfScnIGNvdWxkIG5vdCBiZSBkZWNyeXB0ZWQuIEVudGVyIHRoZSBwYXNzcGhyYXNlIGFnYWluLgoga2V5TG9hZEZhaWxlZD1Db3VsZCBub3QgbG9hZCBrZXkgJyd7MH0nJwoga25vd25Ib3N0c0NvdWxkTm90VXBkYXRlPUNvdWxkIG5vdCB1cGRhdGUga25vd24gaG9zdHMgZmlsZSB7MH0KLWtub3duSG9zdHNGaWxlTG9ja2VkUmVhZD1Db3VsZCBub3QgcmVhZCBrbm93biBob3N0cyBmaWxlIChsb2NrZWQpIHswfQoga25vd25Ib3N0c0ZpbGVMb2NrZWRVcGRhdGU9Q291bGQgbm90IHVwZGF0ZSBrbm93biBob3N0cyBmaWxlIChsb2NrZWQpIHswfQoga25vd25Ib3N0c0ZpbGVSZWFkRmFpbGVkPUZhaWxlZCB0byByZWFkIGtub3duIGhvc3RzIGZpbGUgezB9CiBrbm93bkhvc3RzSW52YWxpZExpbmU9S25vd24gaG9zdHMgZmlsZSB7MH0gY29udGFpbnMgaW52YWxpZCBsaW5lIHsxfQpAQCAtNzYsNiArNzUsOSBAQAogcHJveHlTb2Nrc1VuZXhwZWN0ZWRNZXNzYWdlPVVuZXhwZWN0ZWQgbWVzc2FnZSByZWNlaXZlZCBmcm9tIFNPQ0tTNSBwcm94eSB7MH07IGNsaWVudCBzdGF0ZSB7MX06IHsyfQogcHJveHlTb2Nrc1VuZXhwZWN0ZWRWZXJzaW9uPUV4cGVjdGVkIFNPQ0tTIHZlcnNpb24gNSwgZ290IHswfQogcHJveHlTb2Nrc1VzZXJuYW1lVG9vTG9uZz1Vc2VyIG5hbWUgZm9yIHByb3h5IHswfSBtdXN0IGJlIGF0IG1vc3QgMjU1IGJ5dGVzIGxvbmcsIGlzIHsxfSBieXRlczogezJ9CitwdWJrZXlBdXRoV3JvbmdDb21tYW5kPVB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gcmVjZWl2ZWQgdW5rbm93biBTU0ggY29tbWFuZCB7MH0gZnJvbSB7MX0gKHsyfSkKK3B1YmtleUF1dGhXcm9uZ0tleT1QdWJsaWMga2V5IGF1dGhlbnRpY2F0aW9uIHJlY2VpdmVkIHdyb25nIGtleTsgc2VudCB7MH0sIGdvdCBiYWNrIHsxfSBmcm9tIHsyfSAoezN9KQorcHVia2V5QXV0aFdyb25nU2lnbmF0dXJlQWxnb3JpdGhtPVB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gcmVxdWVzdGVkIHNpZ25hdHVyZSB0eXBlIHswfSBidXQgZ290IGJhY2sgezF9IGZyb20gezJ9ICh7M30pCiBzZXJ2ZXJJZE5vdFJlY2VpdmVkPU5vIHNlcnZlciBpZGVudGlmaWNhdGlvbiByZWNlaXZlZCB3aXRoaW4gezB9IGJ5dGVzCiBzZXJ2ZXJJZFRvb0xvbmc9U2VydmVyIGlkZW50aWZpY2F0aW9uIGlzIGxvbmdlciB0aGFuIDI1NSBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgbGluZSBlbmRpbmcpOiB7MH0KIHNlcnZlcklkV2l0aE51bD1TZXJ2ZXIgaWRlbnRpZmljYXRpb24gY29udGFpbnMgYSBOVUwgY2hhcmFjdGVyOiB7MH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0S2V4RXh0ZW5zaW9uSGFuZGxlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRLZXhFeHRlbnNpb25IYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ0NmFhYQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0S2V4RXh0ZW5zaW9uSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLkF0dHJpYnV0ZVJlcG9zaXRvcnkuQXR0cmlidXRlS2V5OworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uTmFtZWRGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LktleFByb3Bvc2FsT3B0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LmV4dGVuc2lvbi5LZXhFeHRlbnNpb25IYW5kbGVyOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LmV4dGVuc2lvbi5LZXhFeHRlbnNpb25zOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LmV4dGVuc2lvbi5wYXJzZXIuU2VydmVyU2lnbmF0dXJlQWxnb3JpdGhtczsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb24uU2Vzc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZS5TaWduYXR1cmU7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmxvZ2dpbmcuQWJzdHJhY3RMb2dnaW5nQmVhbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3RyaW5nVXRpbHM7CisKKy8qKgorICogRG8gbm90IHVzZSB0aGUgRGVmYXVsdENsaWVudEtleEV4dGVuc2lvbkhhbmRsZXIgZnJvbSBzc2hkOyBpdCBkb2Vzbid0IHdvcmsKKyAqIHByb3Blcmx5IGJlY2F1c2Ugb2YgbWlzY29uY2VwdGlvbnMuIFNlZSBTU0hELTExNDEuCisgKgorICogQHNlZSA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1NTSEQtMTE0MSI+U1NIRC0xMTQxPC9hPgorICovCitwdWJsaWMgY2xhc3MgSkdpdEtleEV4dGVuc2lvbkhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdExvZ2dpbmdCZWFuCisJCWltcGxlbWVudHMgS2V4RXh0ZW5zaW9uSGFuZGxlciB7CisKKwkvKiogU2luZ2xldG9uIGluc3RhbmNlLiAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgSkdpdEtleEV4dGVuc2lvbkhhbmRsZXIgSU5TVEFOQ0UgPSBuZXcgSkdpdEtleEV4dGVuc2lvbkhhbmRsZXIoKTsKKworCS8qKgorCSAqIFNlc3Npb24ge0BsaW5rIEF0dHJpYnV0ZUtleX0gdXNlZCB0byBzdG9yZSB3aGV0aGVyIHRoZSBleHRlbnNpb24KKwkgKiBpbmRpY2F0b3Igd2FzIGFscmVhZHkgc2VudC4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBBdHRyaWJ1dGVLZXk8Qm9vbGVhbj4gQ0xJRU5UX1BST1BPU0FMX01BREUgPSBuZXcgQXR0cmlidXRlS2V5PD4oKTsKKworCS8qKgorCSAqIFNlc3Npb24ge0BsaW5rIEF0dHJpYnV0ZUtleX0gc3RvcmluZyB0aGUgYWxnb3JpdGhtcyBhbm5vdW5jZWQgYnkgdGhlCisJICogc2VydmVyIGFzIGtub3duLgorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgQXR0cmlidXRlS2V5PFNldDxTdHJpbmc+PiBTRVJWRVJfQUxHT1JJVEhNUyA9IG5ldyBBdHRyaWJ1dGVLZXk8PigpOworCisJcHJpdmF0ZSBKR2l0S2V4RXh0ZW5zaW9uSGFuZGxlcigpIHsKKwkJLy8gTm8gcHVibGljIGluc3RhbnRpYXRpb24gZm9yIHNpbmdsZXRvbgorCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBib29sZWFuIGlzS2V4RXh0ZW5zaW9uc0F2YWlsYWJsZShTZXNzaW9uIHNlc3Npb24sCisJCQlBdmFpbGFiaWxpdHlQaGFzZSBwaGFzZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmV0dXJuICFBdmFpbGFiaWxpdHlQaGFzZS5QUkVLRVguZXF1YWxzKHBoYXNlKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBoYW5kbGVLZXhJbml0UHJvcG9zYWwoU2Vzc2lvbiBzZXNzaW9uLCBib29sZWFuIGluaXRpYXRvciwKKwkJCU1hcDxLZXhQcm9wb3NhbE9wdGlvbiwgU3RyaW5nPiBwcm9wb3NhbCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJLy8gSWYgaXQncyB0aGUgdmVyeSBmaXJzdCB0aW1lLCB3ZSBtYXkgYWRkIHRoZSBtYXJrZXIgdGVsbGluZyB0aGUgc2VydmVyCisJCS8vIHRoYXQgd2UgYXJlIHJlYWR5IHRvIGhhbmRsZSBTU0hfTVNHX0VYVF9JTkZPCisJCWlmIChzZXNzaW9uID09IG51bGwgfHwgc2Vzc2lvbi5pc1NlcnZlclNlc3Npb24oKSB8fCAhaW5pdGlhdG9yKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHNlc3Npb24uZ2V0QXR0cmlidXRlKENMSUVOVF9QUk9QT1NBTF9NQURFKSAhPSBudWxsKSB7CisJCQlyZXR1cm47CisJCX0KKwkJU3RyaW5nIGtleEFsZ29yaXRobXMgPSBwcm9wb3NhbC5nZXQoS2V4UHJvcG9zYWxPcHRpb24uU0VSVkVSS0VZUyk7CisJCWlmIChTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKGtleEFsZ29yaXRobXMpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJTGlzdDxTdHJpbmc+IGFsZ29yaXRobXMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJLy8gV2UncmUgYSBjbGllbnQuIFdlIG11c3RuJ3Qgc2VuZCB0aGUgc2VydmVyIGV4dGVuc2lvbiwgYW5kIHdlIHNob3VsZAorCQkvLyBzZW5kIHRoZSBjbGllbnQgZXh0ZW5zaW9uIG9ubHkgb25jZS4KKwkJZm9yIChTdHJpbmcgYWxnbyA6IGtleEFsZ29yaXRobXMuc3BsaXQoIiwiKSkgeyAvLyROT04tTkxTLTEkCisJCQlpZiAoS2V4RXh0ZW5zaW9ucy5DTElFTlRfS0VYX0VYVEVOU0lPTi5lcXVhbHNJZ25vcmVDYXNlKGFsZ28pCisJCQkJCXx8IEtleEV4dGVuc2lvbnMuU0VSVkVSX0tFWF9FWFRFTlNJT04KKwkJCQkJCQkuZXF1YWxzSWdub3JlQ2FzZShhbGdvKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYWxnb3JpdGhtcy5hZGQoYWxnbyk7CisJCX0KKwkJLy8gVGVsbCB0aGUgc2VydmVyIHRoYXQgd2Ugd2FudCB0byByZWNlaXZlIFNTSDJfTVNHX0VYVF9JTkZPCisJCWFsZ29yaXRobXMuYWRkKEtleEV4dGVuc2lvbnMuQ0xJRU5UX0tFWF9FWFRFTlNJT04pOworCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCWxvZy5kZWJ1ZygKKwkJCQkJImhhbmRsZUtleEluaXRQcm9wb3NhbCh7fSk6IHByb3Bvc2luZyBIb3N0S2V5QWxnb3JpdGhtcyB7fSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJc2Vzc2lvbiwgYWxnb3JpdGhtcyk7CisJCX0KKwkJcHJvcG9zYWwucHV0KEtleFByb3Bvc2FsT3B0aW9uLlNFUlZFUktFWVMsCisJCQkJU3RyaW5nLmpvaW4oIiwiLCBhbGdvcml0aG1zKSk7IC8vJE5PTi1OTFMtMSQKKwkJc2Vzc2lvbi5zZXRBdHRyaWJ1dGUoQ0xJRU5UX1BST1BPU0FMX01BREUsIEJvb2xlYW4uVFJVRSk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gaGFuZGxlS2V4RXh0ZW5zaW9uUmVxdWVzdChTZXNzaW9uIHNlc3Npb24sIGludCBpbmRleCwKKwkJCWludCBjb3VudCwgU3RyaW5nIG5hbWUsIGJ5dGVbXSBkYXRhKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAoU2VydmVyU2lnbmF0dXJlQWxnb3JpdGhtcy5OQU1FLmVxdWFscyhuYW1lKSkgeworCQkJaGFuZGxlU2VydmVyU2lnbmF0dXJlQWxnb3JpdGhtcyhzZXNzaW9uLAorCQkJCQlTZXJ2ZXJTaWduYXR1cmVBbGdvcml0aG1zLklOU1RBTkNFLnBhcnNlRXh0ZW5zaW9uKGRhdGEpKTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwkvKioKKwkgKiBQZXJmb3JtIHVwZGF0ZXMgYWZ0ZXIgYSBzZXJ2ZXItc2lnLWFsZ3MgZXh0ZW5zaW9uIGhhcyBiZWVuIHJlY2VpdmVkLgorCSAqCisJICogQHBhcmFtIHNlc3Npb24KKwkgKiAgICAgICAgICAgIHRoZSBtZXNzYWdlIHdhcyByZWNlaXZlZCBmb3IKKwkgKiBAcGFyYW0gc2VydmVyQWxnb3JpdGhtcworCSAqICAgICAgICAgICAgc2lnbmF0dXJlIGFsZ29yaXRobSBuYW1lcyBhbm5vdW5jZWQgYnkgdGhlIHNlcnZlcgorCSAqLworCXByb3RlY3RlZCB2b2lkIGhhbmRsZVNlcnZlclNpZ25hdHVyZUFsZ29yaXRobXMoU2Vzc2lvbiBzZXNzaW9uLAorCQkJQ29sbGVjdGlvbjxTdHJpbmc+IHNlcnZlckFsZ29yaXRobXMpIHsKKwkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisJCQlsb2cuZGVidWcoImhhbmRsZVNlcnZlclNpZ25hdHVyZUFsZ29yaXRobXMoe30pOiB7fSIsIHNlc3Npb24sIC8vJE5PTi1OTFMtMSQKKwkJCQkJc2VydmVyQWxnb3JpdGhtcyk7CisJCX0KKwkJLy8gQ2xpZW50IGRldGVybWluZXMgb3JkZXI7IHNlcnZlciBzYXlzIHdoYXQgaXQgc3VwcG9ydHMuIFJlLW9yZGVyCisJCS8vIHN1Y2ggdGhhdCBzdXBwb3J0ZWQgb25lcyBhcmUgYXQgdGhlIGZyb250LCBpbiBjbGllbnQgb3JkZXIsCisJCS8vIGZvbGxvd2VkIGJ5IHVuc3VwcG9ydGVkIG9uZXMsIGFsc28gaW4gY2xpZW50IG9yZGVyLgorCQlpZiAoc2VydmVyQWxnb3JpdGhtcyAhPSBudWxsICYmICFzZXJ2ZXJBbGdvcml0aG1zLmlzRW1wdHkoKSkgeworCQkJTGlzdDxOYW1lZEZhY3Rvcnk8U2lnbmF0dXJlPj4gY2xpZW50QWxnb3JpdGhtcyA9IG5ldyBBcnJheUxpc3Q8PigKKwkJCQkJc2Vzc2lvbi5nZXRTaWduYXR1cmVGYWN0b3JpZXMoKSk7CisJCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCQlsb2cuZGVidWcoCisJCQkJCQkiaGFuZGxlU2VydmVyU2lnbmF0dXJlQWxnb3JpdGhtcyh7fSk6IFB1YmtleUFjY2VwdGVkQWxnb3JpdGhtcyBiZWZvcmU6IHt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJc2Vzc2lvbiwgY2xpZW50QWxnb3JpdGhtcyk7CisJCQl9CisJCQlMaXN0PE5hbWVkRmFjdG9yeTxTaWduYXR1cmU+PiB1bmtub3duID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCQlTZXQ8U3RyaW5nPiBrbm93biA9IG5ldyBUcmVlU2V0PD4oU3RyaW5nLkNBU0VfSU5TRU5TSVRJVkVfT1JERVIpOworCQkJa25vd24uYWRkQWxsKHNlcnZlckFsZ29yaXRobXMpOworCQkJZm9yIChJdGVyYXRvcjxOYW1lZEZhY3Rvcnk8U2lnbmF0dXJlPj4gaXRlciA9IGNsaWVudEFsZ29yaXRobXMKKwkJCQkJLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgeworCQkJCU5hbWVkRmFjdG9yeTxTaWduYXR1cmU+IGFsZ28gPSBpdGVyLm5leHQoKTsKKwkJCQlpZiAoIWtub3duLmNvbnRhaW5zKGFsZ28uZ2V0TmFtZSgpKSkgeworCQkJCQl1bmtub3duLmFkZChhbGdvKTsKKwkJCQkJaXRlci5yZW1vdmUoKTsKKwkJCQl9CisJCQl9CisJCQkvLyBSZS1hZGQgdGhlIHVua25vd24gb25lcyBhdCB0aGUgZW5kLiBQZXIgUkZDIDgzMDgsIHNvbWUKKwkJCS8vIHNlcnZlcnMgbWF5IG5vdCBhbm5vdW5jZSBfYWxsXyB0aGVpciBzdXBwb3J0ZWQgYWxnb3JpdGhtcywKKwkJCS8vIGFuZCBhIGNsaWVudCBtYXkgdXNlIHVua25vd24gYWxnb3JpdGhtcy4KKwkJCWNsaWVudEFsZ29yaXRobXMuYWRkQWxsKHVua25vd24pOworCQkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisJCQkJbG9nLmRlYnVnKAorCQkJCQkJImhhbmRsZVNlcnZlclNpZ25hdHVyZUFsZ29yaXRobXMoe30pOiBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMgYWZ0ZXI6IHt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJc2Vzc2lvbiwgY2xpZW50QWxnb3JpdGhtcyk7CisJCQl9CisJCQlzZXNzaW9uLnNldEF0dHJpYnV0ZShTRVJWRVJfQUxHT1JJVEhNUywga25vd24pOworCQkJc2Vzc2lvbi5zZXRTaWduYXR1cmVGYWN0b3JpZXMoY2xpZW50QWxnb3JpdGhtcyk7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uLmphdmEKaW5kZXggMjk3YjQ1Ni4uNjc1NTA5NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbi5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0UHVibGljS2V5QXV0aGVudGljYXRpb24uamF2YQpAQCAtMTEsNiArMTEsOSBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LlB1YmxpY0tleTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LnNwZWMuSW52YWxpZEtleVNwZWNFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkRlcXVlOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwpAQCAtMTksNiArMjIsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5wdWJrZXkuVXNlckF1dGhQdWJsaWNLZXk7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5zZXNzaW9uLkNsaWVudFNlc3Npb247CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5OYW1lZEZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5OYW1lZFJlc291cmNlOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uUnVudGltZVNzaEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLlNzaENvbnN0YW50czsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNvbmZpZy5rZXlzLktleVV0aWxzOwpAQCAtMzcsNyArNDEsOSBAQAogICovCiBwdWJsaWMgY2xhc3MgSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uIGV4dGVuZHMgVXNlckF1dGhQdWJsaWNLZXkgewogCi0JcHJpdmF0ZSBmaW5hbCBMaXN0PFN0cmluZz4gYWxnb3JpdGhtcyA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKKwlwcml2YXRlIGZpbmFsIERlcXVlPFN0cmluZz4gY3VycmVudEFsZ29yaXRobXMgPSBuZXcgTGlua2VkTGlzdDw+KCk7CisKKwlwcml2YXRlIFN0cmluZyBjaG9zZW5BbGdvcml0aG07CiAKIAlKR2l0UHVibGljS2V5QXV0aGVudGljYXRpb24oTGlzdDxOYW1lZEZhY3Rvcnk8U2lnbmF0dXJlPj4gZmFjdG9yaWVzKSB7CiAJCXN1cGVyKGZhY3Rvcmllcyk7CkBAIC00NywxMSArNTMsMjUgQEAKIAlwcm90ZWN0ZWQgYm9vbGVhbiBzZW5kQXV0aERhdGFSZXF1ZXN0KENsaWVudFNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIHNlcnZpY2UpCiAJCQl0aHJvd3MgRXhjZXB0aW9uIHsKIAkJaWYgKGN1cnJlbnQgPT0gbnVsbCkgewotCQkJYWxnb3JpdGhtcy5jbGVhcigpOworCQkJY3VycmVudEFsZ29yaXRobXMuY2xlYXIoKTsKKwkJCWNob3NlbkFsZ29yaXRobSA9IG51bGw7CiAJCX0KIAkJU3RyaW5nIGN1cnJlbnRBbGdvcml0aG0gPSBudWxsOwotCQlpZiAoY3VycmVudCAhPSBudWxsICYmICFhbGdvcml0aG1zLmlzRW1wdHkoKSkgewotCQkJY3VycmVudEFsZ29yaXRobSA9IGFsZ29yaXRobXMucmVtb3ZlKDApOworCQlpZiAoY3VycmVudCAhPSBudWxsICYmICFjdXJyZW50QWxnb3JpdGhtcy5pc0VtcHR5KCkpIHsKKwkJCWN1cnJlbnRBbGdvcml0aG0gPSBjdXJyZW50QWxnb3JpdGhtcy5wb2xsKCk7CisJCQlpZiAoY2hvc2VuQWxnb3JpdGhtICE9IG51bGwpIHsKKwkJCQlTZXQ8U3RyaW5nPiBrbm93blNlcnZlckFsZ29yaXRobXMgPSBzZXNzaW9uLmdldEF0dHJpYnV0ZSgKKwkJCQkJCUpHaXRLZXhFeHRlbnNpb25IYW5kbGVyLlNFUlZFUl9BTEdPUklUSE1TKTsKKwkJCQlpZiAoa25vd25TZXJ2ZXJBbGdvcml0aG1zICE9IG51bGwKKwkJCQkJCSYmIGtub3duU2VydmVyQWxnb3JpdGhtcy5jb250YWlucyhjaG9zZW5BbGdvcml0aG0pKSB7CisJCQkJCS8vIFdlJ3ZlIHRyaWVkIGtleSAnY3VycmVudCcgd2l0aCAnY2hvc2VuQWxnb3JpdGhtJywgYnV0IGl0CisJCQkJCS8vIGZhaWxlZC4gSG93ZXZlciwgdGhlIHNlcnZlciBoYWQgdG9sZCB1cyBpdCBzdXBwb3J0ZWQKKwkJCQkJLy8gJ2Nob3NlbkFsZ29yaXRobScuIFRodXMgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gY29udGludWUKKwkJCQkJLy8gd2l0aCB0aGlzIGtleSBhbmQgb3RoZXIgc2lnbmF0dXJlIGFsZ29yaXRobXMuIFNraXAgdG8gdGhlCisJCQkJCS8vIG5leHQga2V5LCBpZiBhbnkuCisJCQkJCWN1cnJlbnRBbGdvcml0aG0gPSBudWxsOworCQkJCX0KKwkJCX0KIAkJfQogCQlpZiAoY3VycmVudEFsZ29yaXRobSA9PSBudWxsKSB7CiAJCQl0cnkgewpAQCAtNjEsMTQgKzgxLDEzIEBACiAJCQkJCQkJCSJzZW5kQXV0aERhdGFSZXF1ZXN0KHt9KVt7fV0gbm8gbW9yZSBrZXlzIHRvIHNlbmQiLCAvLyROT04tTkxTLTEkCiAJCQkJCQkJCXNlc3Npb24sIHNlcnZpY2UpOwogCQkJCQl9CisJCQkJCWN1cnJlbnQgPSBudWxsOwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJCWN1cnJlbnQgPSBrZXlzLm5leHQoKTsKLQkJCQlhbGdvcml0aG1zLmNsZWFyKCk7CisJCQkJY3VycmVudEFsZ29yaXRobXMuY2xlYXIoKTsKKwkJCQljaG9zZW5BbGdvcml0aG0gPSBudWxsOwogCQkJfSBjYXRjaCAoRXJyb3IgZSkgeyAvLyBDb3BpZWQgZnJvbSBzdXBlcmNsYXNzCi0JCQkJd2Fybigic2VuZEF1dGhEYXRhUmVxdWVzdCh7fSlbe31dIGZhaWxlZCAoe30pIHRvIGdldCBuZXh0IGtleToge30iLCAvLyROT04tTkxTLTEkCi0JCQkJCQlzZXNzaW9uLCBzZXJ2aWNlLCBlLmdldENsYXNzKCkuZ2V0U2ltcGxlTmFtZSgpLAotCQkJCQkJZS5nZXRNZXNzYWdlKCksIGUpOwogCQkJCXRocm93IG5ldyBSdW50aW1lU3NoRXhjZXB0aW9uKGUpOwogCQkJfQogCQl9CkBAIC03Niw5ICs5NSw2IEBACiAJCXRyeSB7CiAJCQlrZXkgPSBjdXJyZW50LmdldFB1YmxpY0tleSgpOwogCQl9IGNhdGNoIChFcnJvciBlKSB7IC8vIENvcGllZCBmcm9tIHN1cGVyY2xhc3MKLQkJCXdhcm4oInNlbmRBdXRoRGF0YVJlcXVlc3Qoe30pW3t9XSBmYWlsZWQgKHt9KSB0byByZXRyaWV2ZSBwdWJsaWMga2V5OiB7fSIsIC8vJE5PTi1OTFMtMSQKLQkJCQkJc2Vzc2lvbiwgc2VydmljZSwgZS5nZXRDbGFzcygpLmdldFNpbXBsZU5hbWUoKSwKLQkJCQkJZS5nZXRNZXNzYWdlKCksIGUpOwogCQkJdGhyb3cgbmV3IFJ1bnRpbWVTc2hFeGNlcHRpb24oZSk7CiAJCX0KIAkJaWYgKGN1cnJlbnRBbGdvcml0aG0gPT0gbnVsbCkgewpAQCAtOTQsMTUgKzExMCwyMSBAQAogCQkJCWV4aXN0aW5nRmFjdG9yaWVzID0gZ2V0U2lnbmF0dXJlRmFjdG9yaWVzKCk7CiAJCQl9CiAJCQlpZiAoZXhpc3RpbmdGYWN0b3JpZXMgIT0gbnVsbCkgeworCQkJCWlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgeworCQkJCQlsb2cuZGVidWcoCisJCQkJCQkJInNlbmRBdXRoRGF0YVJlcXVlc3Qoe30pW3t9XSBzZWxlY3RpbmcgZnJvbSBQdWJLZXlBY2NlcHRlZEFsZ29yaXRobXMge30iLCAvLyROT04tTkxTLTEkCisJCQkJCQkJc2Vzc2lvbiwgc2VydmljZSwKKwkJCQkJCQlOYW1lZFJlc291cmNlLmdldE5hbWVzKGV4aXN0aW5nRmFjdG9yaWVzKSk7CisJCQkJfQogCQkJCS8vIFNlbGVjdCB0aGUgZmFjdG9yaWVzIGJ5IG5hbWUgYW5kIGluIG9yZGVyCiAJCQkJZXhpc3RpbmdGYWN0b3JpZXMuZm9yRWFjaChmIC0+IHsKIAkJCQkJaWYgKGFsaWFzZXMuY29udGFpbnMoZi5nZXROYW1lKCkpKSB7Ci0JCQkJCQlhbGdvcml0aG1zLmFkZChmLmdldE5hbWUoKSk7CisJCQkJCQljdXJyZW50QWxnb3JpdGhtcy5hZGQoZi5nZXROYW1lKCkpOwogCQkJCQl9CiAJCQkJfSk7CiAJCQl9Ci0JCQljdXJyZW50QWxnb3JpdGhtID0gYWxnb3JpdGhtcy5pc0VtcHR5KCkgPyBrZXlUeXBlCi0JCQkJCTogYWxnb3JpdGhtcy5yZW1vdmUoMCk7CisJCQljdXJyZW50QWxnb3JpdGhtID0gY3VycmVudEFsZ29yaXRobXMuaXNFbXB0eSgpID8ga2V5VHlwZQorCQkJCQk6IGN1cnJlbnRBbGdvcml0aG1zLnBvbGwoKTsKIAkJfQogCQlTdHJpbmcgbmFtZSA9IGdldE5hbWUoKTsKIAkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CkBAIC0xMTIsNiArMTM0LDcgQEAKIAkJCQkJS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQoa2V5KSk7CiAJCX0KIAorCQljaG9zZW5BbGdvcml0aG0gPSBjdXJyZW50QWxnb3JpdGhtOwogCQlCdWZmZXIgYnVmZmVyID0gc2Vzc2lvbgogCQkJCS5jcmVhdGVCdWZmZXIoU3NoQ29uc3RhbnRzLlNTSF9NU0dfVVNFUkFVVEhfUkVRVUVTVCk7CiAJCWJ1ZmZlci5wdXRTdHJpbmcoc2Vzc2lvbi5nZXRVc2VybmFtZSgpKTsKQEAgLTEyNSw5ICsxNDgsNzcgQEAKIAl9CiAKIAlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzQXV0aERhdGFSZXF1ZXN0KENsaWVudFNlc3Npb24gc2Vzc2lvbiwKKwkJCVN0cmluZyBzZXJ2aWNlLCBCdWZmZXIgYnVmZmVyKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG5hbWUgPSBnZXROYW1lKCk7CisJCWludCBjbWQgPSBidWZmZXIuZ2V0VUJ5dGUoKTsKKwkJaWYgKGNtZCAhPSBTc2hDb25zdGFudHMuU1NIX01TR19VU0VSQVVUSF9QS19PSykgeworCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJU3NoZFRleHQuZ2V0KCkucHVia2V5QXV0aFdyb25nQ29tbWFuZCwKKwkJCQkJU3NoQ29uc3RhbnRzLmdldENvbW1hbmRNZXNzYWdlTmFtZShjbWQpLAorCQkJCQlzZXNzaW9uLmdldENvbm5lY3RBZGRyZXNzKCksIHNlc3Npb24uZ2V0U2VydmVyVmVyc2lvbigpKSk7CisJCX0KKwkJUHVibGljS2V5IGtleTsKKwkJdHJ5IHsKKwkJCWtleSA9IGN1cnJlbnQuZ2V0UHVibGljS2V5KCk7CisJCX0gY2F0Y2ggKEVycm9yIGUpIHsgLy8gQ29waWVkIGZyb20gc3VwZXJjbGFzcworCQkJdGhyb3cgbmV3IFJ1bnRpbWVTc2hFeGNlcHRpb24oZSk7CisJCX0KKwkJU3RyaW5nIHJzcEtleUFsZ29yaXRobSA9IGJ1ZmZlci5nZXRTdHJpbmcoKTsKKwkJUHVibGljS2V5IHJzcEtleSA9IGJ1ZmZlci5nZXRQdWJsaWNLZXkoKTsKKwkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7CisJCQlsb2cuZGVidWcoCisJCQkJCSJwcm9jZXNzQXV0aERhdGFSZXF1ZXN0KHt9KVt7fV1be31dIFNTSF9NU0dfVVNFUkFVVEhfUEtfT0sgdHlwZT17fSwgZmluZ2VycHJpbnQ9e30iLCAvLyROT04tTkxTLTEkCisJCQkJCXNlc3Npb24sIHNlcnZpY2UsIG5hbWUsIHJzcEtleUFsZ29yaXRobSwKKwkJCQkJS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQocnNwS2V5KSk7CisJCX0KKwkJaWYgKCFLZXlVdGlscy5jb21wYXJlS2V5cyhyc3BLZXksIGtleSkpIHsKKwkJCXRocm93IG5ldyBJbnZhbGlkS2V5U3BlY0V4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJU3NoZFRleHQuZ2V0KCkucHVia2V5QXV0aFdyb25nS2V5LAorCQkJCQlLZXlVdGlscy5nZXRGaW5nZXJQcmludChrZXkpLAorCQkJCQlLZXlVdGlscy5nZXRGaW5nZXJQcmludChyc3BLZXkpLAorCQkJCQlzZXNzaW9uLmdldENvbm5lY3RBZGRyZXNzKCksIHNlc3Npb24uZ2V0U2VydmVyVmVyc2lvbigpKSk7CisJCX0KKwkJaWYgKCFjaG9zZW5BbGdvcml0aG0uZXF1YWxzSWdub3JlQ2FzZShyc3BLZXlBbGdvcml0aG0pKSB7CisJCQkvLyAnYWxnbycgU0hPVUxEIGJlIHRoZSBzYW1lIGFzICdjaG9zZW5BbGdvcml0aG0nLCB3aGljaCBpcyB0aGUgb25lCisJCQkvLyB3ZSBzZW50IGFib3ZlLiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQyNTIjcGFnZS05IC4KKwkJCS8vCisJCQkvLyBIb3dldmVyLCBhdCBsZWFzdCBHaXRodWIgKFNTSC0yLjAtYmFiZWxkLTM4Mzc0M2FkKSBzZXJ2ZXJzIHNlZW0KKwkJCS8vIHRvIHJldHVybiB0aGUga2V5IHR5cGUsIG5vdCB0aGUgYWxnb3JpdGhtIG5hbWUuCisJCQkvLworCQkJLy8gU28gd2UgZG9uJ3QgY2hlY2sgYnV0IGp1c3QgbG9nIHRoZSBpbmNvbnNpc3RlbmN5LiBXZSBzaWduIHVzaW5nCisJCQkvLyAnY2hvc2VuQWxnb3JpdGhtJyBpbiBhbnkgY2FzZSwgc28gd2UgZG9uJ3QgcmVhbGx5IGNhcmUgd2hhdCB0aGUKKwkJCS8vIHNlcnZlciBzYXlzIGhlcmUuCisJCQlsb2cud2FybihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJU3NoZFRleHQuZ2V0KCkucHVia2V5QXV0aFdyb25nU2lnbmF0dXJlQWxnb3JpdGhtLAorCQkJCQljaG9zZW5BbGdvcml0aG0sIHJzcEtleUFsZ29yaXRobSwgc2Vzc2lvbi5nZXRDb25uZWN0QWRkcmVzcygpLAorCQkJCQlzZXNzaW9uLmdldFNlcnZlclZlcnNpb24oKSkpOworCQl9CisJCVN0cmluZyB1c2VybmFtZSA9IHNlc3Npb24uZ2V0VXNlcm5hbWUoKTsKKwkJQnVmZmVyIG91dCA9IHNlc3Npb24KKwkJCQkuY3JlYXRlQnVmZmVyKFNzaENvbnN0YW50cy5TU0hfTVNHX1VTRVJBVVRIX1JFUVVFU1QpOworCQlvdXQucHV0U3RyaW5nKHVzZXJuYW1lKTsKKwkJb3V0LnB1dFN0cmluZyhzZXJ2aWNlKTsKKwkJb3V0LnB1dFN0cmluZyhuYW1lKTsKKwkJb3V0LnB1dEJvb2xlYW4odHJ1ZSk7CisJCW91dC5wdXRTdHJpbmcoY2hvc2VuQWxnb3JpdGhtKTsKKwkJb3V0LnB1dFB1YmxpY0tleShrZXkpOworCQlpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKKwkJCWxvZy5kZWJ1ZygKKwkJCQkJInByb2Nlc3NBdXRoRGF0YVJlcXVlc3Qoe30pW3t9XVt7fV06IHNpZ25pbmcgd2l0aCBhbGdvcml0aG0ge30iLCAvLyROT04tTkxTLTEkCisJCQkJCXNlc3Npb24sIHNlcnZpY2UsIG5hbWUsIGNob3NlbkFsZ29yaXRobSk7CisJCX0KKwkJYXBwZW5kU2lnbmF0dXJlKHNlc3Npb24sIHNlcnZpY2UsIG5hbWUsIHVzZXJuYW1lLCBjaG9zZW5BbGdvcml0aG0sIGtleSwKKwkJCQlvdXQpOworCQlzZXNzaW9uLndyaXRlUGFja2V0KG91dCk7CisJCXJldHVybiB0cnVlOworCX0KKworCUBPdmVycmlkZQogCXByb3RlY3RlZCB2b2lkIHJlbGVhc2VLZXlzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJYWxnb3JpdGhtcy5jbGVhcigpOworCQljdXJyZW50QWxnb3JpdGhtcy5jbGVhcigpOwogCQljdXJyZW50ID0gbnVsbDsKKwkJY2hvc2VuQWxnb3JpdGhtID0gbnVsbDsKIAkJc3VwZXIucmVsZWFzZUtleXMoKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvT3BlblNzaFNlcnZlcktleURhdGFiYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvT3BlblNzaFNlcnZlcktleURhdGFiYXNlLmphdmEKaW5kZXggNDdlMDliNy4uMWE1MzBiNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL09wZW5Tc2hTZXJ2ZXJLZXlEYXRhYmFzZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9PcGVuU3NoU2VydmVyS2V5RGF0YWJhc2UuamF2YQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGphdmEubmV0LlNvY2tldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKIGltcG9ydCBqYXZhLm5pby5maWxlLkludmFsaWRQYXRoRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuTm9TdWNoRmlsZUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LkdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbjsKQEAgLTU2MSwyOSArNTYyLDE3IEBACiAJCUBPdmVycmlkZQogCQlwdWJsaWMgTGlzdDxIb3N0RW50cnlQYWlyPiBnZXQoKSB7CiAJCQlQYXRoIHBhdGggPSBnZXRQYXRoKCk7Ci0JCQl0cnkgewotCQkJCWlmIChjaGVja1JlbG9hZFJlcXVpcmVkKCkpIHsKLQkJCQkJaWYgKCFGaWxlcy5leGlzdHMocGF0aCkpIHsKLQkJCQkJCS8vIEhhcyBkaXNhcHBlYXJlZC4KLQkJCQkJCXJlc2V0UmVsb2FkQXR0cmlidXRlcygpOwotCQkJCQkJcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOworCQkJc3luY2hyb25pemVkICh0aGlzKSB7CisJCQkJdHJ5IHsKKwkJCQkJaWYgKGNoZWNrUmVsb2FkUmVxdWlyZWQoKSkgeworCQkJCQkJZW50cmllcyA9IHJlbG9hZChnZXRQYXRoKCkpOwogCQkJCQl9Ci0JCQkJCUxvY2tGaWxlIGxvY2sgPSBuZXcgTG9ja0ZpbGUocGF0aC50b0ZpbGUoKSk7Ci0JCQkJCWlmIChsb2NrLmxvY2soKSkgewotCQkJCQkJdHJ5IHsKLQkJCQkJCQllbnRyaWVzID0gcmVsb2FkKGdldFBhdGgoKSk7Ci0JCQkJCQl9IGZpbmFsbHkgewotCQkJCQkJCWxvY2sudW5sb2NrKCk7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlMT0cud2Fybihmb3JtYXQoU3NoZFRleHQuZ2V0KCkua25vd25Ib3N0c0ZpbGVMb2NrZWRSZWFkLAotCQkJCQkJCQlwYXRoKSk7Ci0JCQkJCX0KKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCUxPRy53YXJuKGZvcm1hdChTc2hkVGV4dC5nZXQoKS5rbm93bkhvc3RzRmlsZVJlYWRGYWlsZWQsCisJCQkJCQkJcGF0aCkpOwogCQkJCX0KLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQlMT0cud2Fybihmb3JtYXQoU3NoZFRleHQuZ2V0KCkua25vd25Ib3N0c0ZpbGVSZWFkRmFpbGVkLCBwYXRoKSk7CisJCQkJcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QoZW50cmllcyk7CiAJCQl9Ci0JCQlyZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlTGlzdChlbnRyaWVzKTsKIAkJfQogCiAJCXByaXZhdGUgTGlzdDxIb3N0RW50cnlQYWlyPiByZWxvYWQoUGF0aCBwYXRoKSB0aHJvd3MgSU9FeGNlcHRpb24gewpAQCAtNjE2LDcgKzYwNSw3IEBACiAJCQkJCX0KIAkJCQl9CiAJCQkJcmV0dXJuIG5ld0VudHJpZXM7Ci0JCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHwgTm9TdWNoRmlsZUV4Y2VwdGlvbiBlKSB7CiAJCQkJcmVzZXRSZWxvYWRBdHRyaWJ1dGVzKCk7CiAJCQkJcmV0dXJuIENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwogCQkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQppbmRleCA0YzRmZjU5Li43M2MyMjg4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQpAQCAtNDQsNyArNDQsNiBAQAogCS8qKiovIHB1YmxpYyBTdHJpbmcga2V5RW5jcnlwdGVkUmV0cnk7CiAJLyoqKi8gcHVibGljIFN0cmluZyBrZXlMb2FkRmFpbGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcga25vd25Ib3N0c0NvdWxkTm90VXBkYXRlOwotCS8qKiovIHB1YmxpYyBTdHJpbmcga25vd25Ib3N0c0ZpbGVMb2NrZWRSZWFkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcga25vd25Ib3N0c0ZpbGVMb2NrZWRVcGRhdGU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBrbm93bkhvc3RzRmlsZVJlYWRGYWlsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBrbm93bkhvc3RzSW52YWxpZExpbmU7CkBAIC04OCw2ICs4Nyw5IEBACiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVW5leHBlY3RlZE1lc3NhZ2U7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVW5leHBlY3RlZFZlcnNpb247CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVXNlcm5hbWVUb29Mb25nOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVia2V5QXV0aFdyb25nQ29tbWFuZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHB1YmtleUF1dGhXcm9uZ0tleTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHB1YmtleUF1dGhXcm9uZ1NpZ25hdHVyZUFsZ29yaXRobTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNlcnZlcklkTm90UmVjZWl2ZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBzZXJ2ZXJJZFRvb0xvbmc7CiAJLyoqKi8gcHVibGljIFN0cmluZyBzZXJ2ZXJJZFdpdGhOdWw7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3NzaGQvU3NoZFNlc3Npb25GYWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3NzaGQvU3NoZFNlc3Npb25GYWN0b3J5LmphdmEKaW5kZXggY2FkOTU5Yy4uMmQ3ZTBjNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9zc2hkL1NzaGRTZXNzaW9uRmFjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbkZhY3RvcnkuamF2YQpAQCAtNDcsNiArNDcsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuQXV0aGVudGljYXRpb25DYW5jZWxlZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLkNhY2hpbmdLZXlQYWlyUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5Hc3NBcGlXaXRoTWljQXV0aEZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5KR2l0S2V4RXh0ZW5zaW9uSGFuZGxlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLkpHaXRQYXNzd29yZEF1dGhGYWN0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuSkdpdFB1YmxpY0tleUF1dGhGYWN0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuSkdpdFNlcnZlcktleVZlcmlmaWVyOwpAQCAtMjE2LDYgKzIxNyw3IEBACiAJCQkJCQluZXcgSkdpdFVzZXJJbnRlcmFjdGlvbihjcmVkZW50aWFsc1Byb3ZpZGVyKSk7CiAJCQkJY2xpZW50LnNldFVzZXJBdXRoRmFjdG9yaWVzKGdldFVzZXJBdXRoRmFjdG9yaWVzKCkpOwogCQkJCWNsaWVudC5zZXRLZXlJZGVudGl0eVByb3ZpZGVyKGRlZmF1bHRLZXlzUHJvdmlkZXIpOworCQkJCWNsaWVudC5zZXRLZXhFeHRlbnNpb25IYW5kbGVyKEpHaXRLZXhFeHRlbnNpb25IYW5kbGVyLklOU1RBTkNFKTsKIAkJCQkvLyBKR2l0LXNwZWNpZmljIHRoaW5nczoKIAkJCQlKR2l0U3NoQ2xpZW50IGpnaXRDbGllbnQgPSAoSkdpdFNzaENsaWVudCkgY2xpZW50OwogCQkJCWpnaXRDbGllbnQuc2V0S2V5Q2FjaGUoZ2V0S2V5Q2FjaGUoKSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYTVlNGYzOS4uYmUxNmFiMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywxNyArMywxNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogSW1wb3J0LVBhY2thZ2U6IGNvbS5qY3JhZnQuanNjaDt2ZXJzaW9uPSJbMC4xLjU0LDAuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LmV4cGVyaW1lbnRhbC50aGVvcmllczt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydW5uZXI7dmVyc2lvbj0iWzQuMTMsNS4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvcG9tLnhtbAppbmRleCAxOGNjZTQyLi44YzY1MzNjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+NS4xMS4yLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9PcGVuU3NoQ29uZmlnVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9PcGVuU3NoQ29uZmlnVGVzdC5qYXZhCmluZGV4IDRjN2U5OWUuLjkzZDg1ZTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvT3BlblNzaENvbmZpZ1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L09wZW5Tc2hDb25maWdUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE3IEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAyMSBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC01OCw2ICs1OCw3IEBACiAJCUZpbGVVdGlscy5ta2Rpcihjb25maWdGaWxlLmdldFBhcmVudEZpbGUoKSk7CiAKIAkJbW9ja1N5c3RlbVJlYWRlci5zZXRQcm9wZXJ0eShDb25zdGFudHMuT1NfVVNFUl9OQU1FX0tFWSwgImpleF9qdW5pdCIpOworCQltb2NrU3lzdGVtUmVhZGVyLnNldFByb3BlcnR5KCJUU1RfVkFSIiwgIlRFU1QiKTsKIAkJb3NjID0gbmV3IE9wZW5Tc2hDb25maWcoaG9tZSwgY29uZmlnRmlsZSk7CiAJfQogCkBAIC00OTcsNCArNDk4LDk1IEBACiAJCWFzc2VydEVxdWFscygiXnNzaC1yc2EiLAogCQkJCWMuZ2V0VmFsdWUoU3NoQ29uc3RhbnRzLlBVQktFWV9BQ0NFUFRFRF9BTEdPUklUSE1TKSk7CiAJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RW5WYXJTdWJzdGl0dXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJY29uZmlnKCJIb3N0IG9yY3pcbklkZW50aXR5RmlsZSAvdG1wLyR7VFNUX1ZBUn1cbiIKKwkJCQkrICJDZXJ0aWZpY2F0ZUZpbGUgL3RtcC8ke30vZm9vXG5Vc2VyICR7VFNUX1ZBUn1cbklkZW50aXR5QWdlbnQgL3RtcC8ke1RTVF9WQVIvYmFyIik7CisJCUhvc3QgaCA9IG9zYy5sb29rdXAoIm9yY3oiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJQ29uZmlnIGMgPSBoLmdldENvbmZpZygpOworCQlhc3NlcnRFcXVhbHMoIi90bXAvVEVTVCIsCisJCQkJYy5nZXRWYWx1ZShTc2hDb25zdGFudHMuSURFTlRJVFlfRklMRSkpOworCQkvLyBObyB2YXJpYWJsZSBuYW1lCisJCWFzc2VydEVxdWFscygiL3RtcC8ke30vZm9vIiwgYy5nZXRWYWx1ZShTc2hDb25zdGFudHMuQ0VSVElGSUNBVEVfRklMRSkpOworCQkvLyBVc2VyIGRvZXNuJ3QgZ2V0IGVudiB2YXIgc3Vic3RpdHV0aW9uOgorCQlhc3NlcnRFcXVhbHMoIiR7VFNUX1ZBUn0iLCBjLmdldFZhbHVlKFNzaENvbnN0YW50cy5VU0VSKSk7CisJCWFzc2VydEVxdWFscygiJHtUU1RfVkFSfSIsIGguZ2V0VXNlcigpKTsKKwkJLy8gVW50ZXJtaW5hdGVkOgorCQlhc3NlcnRFcXVhbHMoIi90bXAvJHtUU1RfVkFSL2JhciIsCisJCQkJYy5nZXRWYWx1ZShTc2hDb25zdGFudHMuSURFTlRJVFlfQUdFTlQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3ROZWdhdGl2ZU1hdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNvbmZpZygiSG9zdCBmb28uYmFyICFmb29iYXIuYmF6ICouYmF6XG4iICsgIlBvcnQgMjk0MThcbiIpOworCQlIb3N0IGggPSBvc2MubG9va3VwKCJmb28uYmFyIik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyOTQxOCwgaC5nZXRQb3J0KCkpOworCQloID0gb3NjLmxvb2t1cCgiZm9vYmFyLmJheiIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjIsIGguZ2V0UG9ydCgpKTsKKwkJaCA9IG9zYy5sb29rdXAoImZvby5iYXoiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDI5NDE4LCBoLmdldFBvcnQoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0TmVnYXRpdmVNYXRjaDIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8gTmVnYXRpdmUgbWF0Y2ggYWZ0ZXIgdGhlIHBvc2l0aXZlIG1hdGNoLgorCQljb25maWcoIkhvc3QgZm9vLmJhciAqLmJheiAhZm9vYmFyLmJhelxuIiArICJQb3J0IDI5NDE4XG4iKTsKKwkJSG9zdCBoID0gb3NjLmxvb2t1cCgiZm9vLmJhciIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjk0MTgsIGguZ2V0UG9ydCgpKTsKKwkJaCA9IG9zYy5sb29rdXAoImZvb2Jhci5iYXoiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDIyLCBoLmdldFBvcnQoKSk7CisJCWggPSBvc2MubG9va3VwKCJmb28uYmF6Iik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyOTQxOCwgaC5nZXRQb3J0KCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5vTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJY29uZmlnKCJIb3N0ICFob3N0MSAhaG9zdDJcbiIgKyAiUG9ydCAyOTQxOFxuIik7CisJCUhvc3QgaCA9IG9zYy5sb29rdXAoImhvc3QxIik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyMiwgaC5nZXRQb3J0KCkpOworCQloID0gb3NjLmxvb2t1cCgiaG9zdDIiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDIyLCBoLmdldFBvcnQoKSk7CisJCWggPSBvc2MubG9va3VwKCJob3N0MyIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjIsIGguZ2V0UG9ydCgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZU1hdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNvbmZpZygiSG9zdCBmb28uYmFyXG5Qb3J0IDI5NDE4XG5JZGVudGl0eUZpbGUgL2Zvb1xuXG4iCisJCQkJKyAiSG9zdCAqLmJhclxuUG9ydCAyMlxuSWRlbnRpdHlGaWxlIC9iYXJcbiIKKwkJCQkrICJIb3N0IGZvby5iYXJcblBvcnQgNDdcbklkZW50aXR5RmlsZSAvYmF6XG4iKTsKKwkJSG9zdCBoID0gb3NjLmxvb2t1cCgiZm9vLmJhciIpOworCQlhc3NlcnROb3ROdWxsKGgpOworCQlhc3NlcnRFcXVhbHMoMjk0MTgsIGguZ2V0UG9ydCgpKTsKKwkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IE9iamVjdFtdIHsgIi9mb28iLCAiL2JhciIsICIvYmF6IiB9LAorCQkJCWguZ2V0Q29uZmlnKCkuZ2V0VmFsdWVzKCJJZGVudGl0eUZpbGUiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0V2hpdGVzcGFjZSgpIHRocm93cyBFeGNlcHRpb24geworCQljb25maWcoIkhvc3QgZm9vIFx0YmFyICAgYmF6XG5Qb3J0IDI5NDE4XG4iKTsKKwkJSG9zdCBoID0gb3NjLmxvb2t1cCgiZm9vIik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyOTQxOCwgaC5nZXRQb3J0KCkpOworCQloID0gb3NjLmxvb2t1cCgiYmFyIik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyOTQxOCwgaC5nZXRQb3J0KCkpOworCQloID0gb3NjLmxvb2t1cCgiYmF6Iik7CisJCWFzc2VydE5vdE51bGwoaCk7CisJCWFzc2VydEVxdWFscygyOTQxOCwgaC5nZXRQb3J0KCkpOworCQloID0gb3NjLmxvb2t1cCgiXHRiYXIiKTsKKwkJYXNzZXJ0Tm90TnVsbChoKTsKKwkJYXNzZXJ0RXF1YWxzKDIyLCBoLmdldFBvcnQoKSk7CisJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZDdlODY4Zi4uMGFlMjg2NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDI0ICszLDI0IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2g7c2luZ2xldG9uOj10cnVlCi1GcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LmpzY2g7dmVyc2lvbj0iNS4xMS4yIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5lZ2l0LmNvcmUiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249IjUuMTEuMiI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuanNjaDt2ZXJzaW9uPSI1LjEyLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmVnaXQuY29yZSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iNS4xMi4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLAogICAgY29tLmpjcmFmdC5qc2NoIgogSW1wb3J0LVBhY2thZ2U6IGNvbS5qY3JhZnQuanNjaDt2ZXJzaW9uPSJbMC4xLjM3LDAuMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKICBvcmcuc2xmNGo7dmVyc2lvbj0iWzEuNy4wLDIuMC4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNjRhMzdiNy4uOGE0MzQyYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaCAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2guc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA1LjExLjIucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaDt2ZXJzaW9uPSI1LjExLjIucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaDt2ZXJzaW9uPSI1LjEyLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvcG9tLnhtbAppbmRleCBkNmMyYmU0Li4yYmJiZTY0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+NS4xMi4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKaW5kZXggNmE5NjIxZC4uY2RkYjk5ZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCkBAIC0xLDUgKzEsNiBAQAotI1NhdCBEZWMgMjAgMjE6MjE6MjQgQ0VUIDIwMDgKIGVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCitlbmNvZGluZy8vdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dC5wYXRjaD1JU08tODg1OS0xCitlbmNvZGluZy8vdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dF9Qb3N0SW1hZ2U9SVNPLTg4NTktMQogZW5jb2RpbmcvL3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvcGF0Y2gvdGVzdEdldFRleHRfQm90aElTTzg4NTkxLnBhdGNoPUlTTy04ODU5LTEKIGVuY29kaW5nLy90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3BhdGNoL3Rlc3RHZXRUZXh0X0NvbnZlcnQucGF0Y2g9SVNPLTg4NTktMQogZW5jb2RpbmcvL3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvcGF0Y2gvdGVzdEdldFRleHRfRGlmZkNjLnBhdGNoPUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBjNjhjMGJjLi4yZmJhMmQzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDcgKzMsNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQudGVzdAotQnVuZGxlLVZlcnNpb246IDUuMTEuMi5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA1LjEyLjEucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOApAQCAtMTYsNTkgKzE2LDU5IEBACiAgb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzLmNvbXByZXNzb3JzLmd6aXA7dmVyc2lvbj0iWzEuMTUuMCwyLjApIiwKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMueHo7dmVyc2lvbj0iWzEuMTUuMCwyLjApIiwKICBvcmcuYXNzZXJ0ai5jb3JlLmFwaTt2ZXJzaW9uPSJbMy4xNC4wLDQuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hd3R1aTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50czt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZm5tYXRjaDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlLmludGVybmFsO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZnNjazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwucmV2d2Fsazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuY29ubmVjdGl2aXR5O3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnRpbWU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxvZ2dpbmc7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wYXRjaDt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils1LjExLjIsNS4xMi4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzUuMTEuMiw1LjEyLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSJbNS4xMS4yLDUuMTIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmJsYW1lO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ldmVudHM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pZ25vcmU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZS5pbnRlcm5hbDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmZzY2s7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnJldndhbGs7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZGZzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuaW87dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LmNvbm5lY3Rpdml0eTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5wYXJzZXI7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC50aW1lO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliLmludGVybmFsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sb2dnaW5nO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ub3Rlczt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGF0Y2g7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN1Ym1vZHVsZTt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNS4xMi4xLDUuMTMuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils1LjEyLjEsNS4xMy4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTE7dmVyc2lvbj0iWzUuMTIuMSw1LjEzLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnRoZW9yaWVzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LmZ1bmN0aW9uO3ZlcnNpb249Ils0LjEzLjAsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9leHR0c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvQ0dpdExvY2tGaWxlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L2V4dHRzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9DR2l0TG9ja0ZpbGVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMxOTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9leHR0c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvQ0dpdExvY2tGaWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgU0FQIFNFIGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLkdpdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlJlcG9zaXRvcnlUZXN0Q2FzZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlMuRXhlY3V0aW9uUmVzdWx0OworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCisvKioKKyAqIFVuaXQgdGVzdHMgb2Yge0BsaW5rIExvY2tGaWxlfSB0ZXN0aW5nIGludGVyb3BlcmFiaWxpdHkgd2l0aCBDIGdpdAorICovCitwdWJsaWMgY2xhc3MgQ0dpdExvY2tGaWxlVGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RMb2NrZWRUd2ljZUZhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZS50eHQiLCAiY29udGVudCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlLnR4dCIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQxID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNyZWF0ZSBmaWxlIikuY2FsbCgpOworCisJCQlhc3NlcnROb3ROdWxsKGNvbW1pdDEpOworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUudHh0IiwgImNvbnRlbnQyIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUudHh0IikuY2FsbCgpOworCQkJYXNzZXJ0Tm90TnVsbChnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZWRpdCBmaWxlIikuY2FsbCgpKTsKKworCQkJTG9ja0ZpbGUgbGYgPSBuZXcgTG9ja0ZpbGUoZGIuZ2V0SW5kZXhGaWxlKCkpOworCQkJYXNzZXJ0VHJ1ZShsZi5sb2NrKCkpOworCQkJdHJ5IHsKKwkJCQlTdHJpbmdbXSBjb21tYW5kID0gbmV3IFN0cmluZ1tdIHsgImdpdCIsICJjaGVja291dCIsCisJCQkJCQljb21taXQxLm5hbWUoKSB9OworCQkJCVByb2Nlc3NCdWlsZGVyIHBiID0gbmV3IFByb2Nlc3NCdWlsZGVyKGNvbW1hbmQpOworCQkJCXBiLmRpcmVjdG9yeShkYi5nZXRXb3JrVHJlZSgpKTsKKwkJCQlFeGVjdXRpb25SZXN1bHQgcmVzdWx0ID0gRlMuREVURUNURUQuZXhlY3V0ZShwYiwgbnVsbCk7CisJCQkJYXNzZXJ0Tm90RXF1YWxzKDAsIHJlc3VsdC5nZXRSYygpKTsKKwkJCQlTdHJpbmcgZXJyID0gcmVzdWx0LmdldFN0ZGVycigpLnRvU3RyaW5nKCkuc3BsaXQoIlxcUiIpWzBdOworCQkJCWFzc2VydFRydWUoZXJyLm1hdGNoZXMoCisJCQkJCQkiZmF0YWw6IFVuYWJsZSB0byBjcmVhdGUgLiovXFwuZ2l0L2luZGV4XFwubG9jayc6IEZpbGUgZXhpc3RzXFwuIikpOworCQkJfSBmaW5hbGx5IHsKKwkJCQlsZi51bmxvY2soKTsKKwkJCX0KKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3BvbS54bWwKaW5kZXggOGE1OTA3MC4uMzIyNGU5OSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3BvbS54bWwKQEAgLTE5LDcgKzE5LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMTEuMi1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj41LjEyLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvLmdpdGF0dHJpYnV0ZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmLy5naXRhdHRyaWJ1dGVzCmluZGV4IGM1ODMxZDkuLjI4Y2FhMmYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvLmdpdGF0dHJpYnV0ZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi8uZ2l0YXR0cmlidXRlcwpAQCAtMSwzICsxLDUgQEAKICoucGF0Y2ggLWNybGYKICpJbWFnZSAtY3JsZgogKi5vdXQgLWNybGYKK2RlbHRhKiAtdGV4dAorbGl0ZXJhbCogLXRleHQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZi5wYXRjaCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWViMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmLnBhdGNoCkBAIC0wLDAgKzEsOSBAQAorZGlmZiAtLWdpdCBhL2NybGYgYi9jcmxmCitpbmRleCA5MjA2ZWU2Li45NWRkMTkzIDEwMDY0NAorLS0tIGEvY3JsZgorKysrIGIvY3JsZgorQEAgLTEsMyArMSwzIEBACisgZm9vCistZmllCisrYmFyCisgZnVtCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYyLnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmMi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTYyMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmMi5wYXRjaApAQCAtMCwwICsxLDkgQEAKK2RpZmYgLS1naXQgYS9jcmxmMiBiL2NybGYyCitpbmRleCAwNWMxYzc4Li45MWUyNDZkIDEwMDY0NAorLS0tIGEvY3JsZjIKKysrKyBiL2NybGYyCitAQCAtMSwzICsxLDMgQEAKKyBmb28NCistZmllDQorK2Jhcg0KKyBmdW0NCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYyX1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjJfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTI0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYyX1Bvc3RJbWFnZQpAQCAtMCwwICsxLDMgQEAKK2Zvbw0KK2Jhcg0KK2Z1bQ0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjJfUHJlSW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYyX1ByZUltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzFjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYyX1ByZUltYWdlCkBAIC0wLDAgKzEsMyBAQAorZm9vDQorZmllDQorZnVtDQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmMy5wYXRjaCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE1NTE0OAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjMucGF0Y2gKQEAgLTAsMCArMSw4IEBACitkaWZmIC0tZ2l0IGEvY3JsZjMgYi9jcmxmMworaW5kZXggZTY5ZGUyOS4uOTIwNmVlNiAxMDA2NDQKKy0tLSBhL2NybGYzCisrKysgYi9jcmxmMworQEAgLTAsMCArMSwzIEBACisrZm9vCisrZmllCisrZnVtCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYzX1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjNfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YzFjNzgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYzX1Bvc3RJbWFnZQpAQCAtMCwwICsxLDMgQEAKK2Zvbw0KK2ZpZQ0KK2Z1bQ0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZjNfUHJlSW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYzX1ByZUltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGYzX1ByZUltYWdlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGY0LnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmNC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Y2MDYzCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmNC5wYXRjaApAQCAtMCwwICsxLDkgQEAKK2RpZmYgLS1naXQgYS9jcmxmNCBiL2NybGY0CituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uOTIwNmVlNgorLS0tIC9kZXYvbnVsbAorKysrIGIvY3JsZjQKK0BAIC0wLDAgKzEsMyBAQAorK2ZvbworK2ZpZQorK2Z1bQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmNF9Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGY0X1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWMxYzc4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmNF9Qb3N0SW1hZ2UKQEAgLTAsMCArMSwzIEBACitmb28NCitmaWUNCitmdW0NCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2NybGZfUG9zdEltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmX1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWUyNDZkCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmX1Bvc3RJbWFnZQpAQCAtMCwwICsxLDMgQEAKK2Zvbw0KK2Jhcg0KK2Z1bQ0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZl9QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvY3JsZl9QcmVJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWMxYzc4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9jcmxmX1ByZUltYWdlCkBAIC0wLDAgKzEsMyBAQAorZm9vDQorZmllDQorZnVtDQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9kZWx0YS5wYXRjaCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZGVsdGEucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ4NTUzMAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZGVsdGEucGF0Y2gKQEAgLTAsMCArMSw4IEBACitkaWZmIC0tZ2l0IGEvZGVsdGEgYi9kZWx0YQoraW5kZXggYjQ1MjcwMDViZjllNGRhMmRkMWQ3MTg1YjUxYmRhYzYyM2E0MjE4Zi4uOGIzNzBiYjVmMmJjMzI2MWI2YjYyZTgwZDZlZGQ3ODRhNjFlYzIyNSAxMDA2NDQKK0dJVCBiaW5hcnkgcGF0Y2gKK2RlbHRhIDE0CitTY21acDBYbXdhMXoqKyRVM2pfY3NOKERtegorCitkZWx0YSAxMgorVGNtWnA1WG1ENXt1IXhhPTVoRWkyOD9GUDQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZGVsdGFfUG9zdEltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9kZWx0YV9Qb3N0SW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzNzBiYgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZGVsdGFfUG9zdEltYWdlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZGVsdGFfUHJlSW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2RlbHRhX1ByZUltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0NTI3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2RlbHRhX1ByZUltYWdlCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZW1wdHlMaW5lLnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9lbXB0eUxpbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjODBjNAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZW1wdHlMaW5lLnBhdGNoCkBAIC0wLDAgKzEsMTAgQEAKK2RpZmYgLS1naXQgYS9lbXB0eUxpbmUgYi9lbXB0eUxpbmUKK2luZGV4IDFmZDNmYTIuLjQ1YzJjOWIgMTAwNjQ0CistLS0gYS9lbXB0eUxpbmUKKysrKyBiL2VtcHR5TGluZQorQEAgLTEsNCArMSw0IEBACisgZm9vCisKKy1maWUKKytiYXIKKyBmdW0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZW1wdHlMaW5lX1Bvc3RJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZW1wdHlMaW5lX1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWMyYzliCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9lbXB0eUxpbmVfUG9zdEltYWdlCkBAIC0wLDAgKzEsNCBAQAorZm9vCisKK2JhcgorZnVtCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2VtcHR5TGluZV9QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvZW1wdHlMaW5lX1ByZUltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmZDNmYTIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2VtcHR5TGluZV9QcmVJbWFnZQpAQCAtMCwwICsxLDQgQEAKK2ZvbworCitmaWUKK2Z1bQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsby5wYXRjaCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvaGVsbG8ucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAxNWEzOAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvaGVsbG8ucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorZGlmZiAtLWdpdCBhL2hlbGxvIGIvaGVsbG8KK2luZGV4IGI2ZmM0YzYuLjBhYmFlYWEgMTAwNjQ0CistLS0gYS9oZWxsbworKysrIGIvaGVsbG8KK0BAIC0xICsxIEBACistaGVsbG8KK1wgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorK2J5ZQorXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkaWZmIC0tZ2l0IGEveWVsbG8gYi95ZWxsbworaW5kZXggMzkxYThjYi4uZDFlZDA4MSAxMDA2NDQKKy0tLSBhL3llbGxvCisrKysgYi95ZWxsbworQEAgLTEgKzEgQEAKKy15ZWxsbworK3llbGxvdwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsb19Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2hlbGxvX1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWJhZWFhCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsb19Qb3N0SW1hZ2UKQEAgLTAsMCArMSBAQAorYnllClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9oZWxsb19QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvaGVsbG9fUHJlSW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZmYzRjNgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvaGVsbG9fUHJlSW1hZ2UKQEAgLTAsMCArMSBAQAoraGVsbG8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWwucGF0Y2ggYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWwucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4MTFkNQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbC5wYXRjaApAQCAtMCwwICsxLDEyNiBAQAorZGlmZiAtLWdpdCBhL2xpdGVyYWwgYi9saXRlcmFsCitpbmRleCA3OTlkZjg1NzhlM2NhZThhNWU5NzkxODIzOTFiOGU5YTZhM2RlZGVkLi43NGU0MjAxYWY2Mzc4YWM4N2JmOWUxMThmYmFiNjU1M2M3ZmQzNTVjIDEwMDY0NAorR0lUIGJpbmFyeSBwYXRjaAorbGl0ZXJhbCA1Mzg5Cit6Y21jJiZYO2YyNXgyPTBnRmEoZzskZk84QzVmbHxyMiRNaHBmLTtYWGgrcU9AcXdSbyozYUYzXlBlcShab1h7WTQKK3pJey09P1AoZCs0UkdlQ1pBVHVRMzAxQVEpVktDdCl1UCpqbT4jYmh6YH1MLV5ZTmdJT1JraEZGeURJc1NvUz1ZWgorem4kJjRqMER6e3FtcSFReUM9NXxSUUdydns3MUl9UkF8PCVfeTgmP1BpMjhVZThSa2ZHJFREfHVeUjN8KnhVKHpCCit6WkBLNVAmMyt4ZWpDTWNVYzBZIUkkP1dqNj4rclF4YSlCfXxPemd2V1ZgQnA9dD1ATCt1bnZjaGVZLUZHV1ZIRmkKK3psK2hVQUc7dFFMR0dPcllFSWJaX3d4OClsUCM/eUdzfVE4YSQ0JmBBdERqdnZqUXdte3k9X3smT2JLTSl6d3VrVgorej9BcEFFb3Y9JSpwQUJyKDQhNk87K2ZLNX4yNyl5Qyp9el9LOHwycE5YRkVaTyhGdGl4ZlFiRFZePGZ0NnUoZ2p9Cit6U0N8ODIqelBeUzNJPFQxdVUpc05DRVdBTCYhKX1LdyQreWFBXjg4Sz5UVUJlPXgtSVUjWk47WiR1YEtBMEVobkEKK3pMbyE2Ji09NSZfWjZ9X3YzKDlIcnY0dkV7elIoOzdUPCEzTlJCWl8jeXpTY2pxMDktI2gqY1huK0koIUdAVX56XworeiFaZ0FQYzxgcnpQJUAqXypTWEVsOXheOWZCSlBERDR6ITBIMnVyPGYrQzZOPGtPUkBxandsa2hVPyZjTXNjcUwlCit6aHlTPCZgX3ttVD9oX1k1a29SWV9gVikjRSF3dyhFdyFnSk5NVEYxb0s2WVklQXxOPEohelZDZFFRfmgwc1k/N04KK3pZPWxnX0MtOG1qcGdAUUt1U3BWTSo4eThZNVB3TTBpVV49QEtHMGBhQndUSXJBfSRMO2JyM2cyNngqUGozQnl+dworenRmNDwkejdCKjZVd2czK2xuaF9tJnUjR1c1RHBOYGYxVnwqbnxLY2ROcis2YT9TdmRBeGBfUnVqU1A2Q2puRTY8Cit6NDdec3Q5NUhsXklCdTZiWEZMYyN7byQ9NDBpb2NecktfYWh8M0ZvfCRUeD1ienVXVUp4KSo1ey0lTCV9dypCZWwKK3pmYGlXdlhkSzI1QSZUZW5AayNDSGxWcD1XSE0pIXJlZjsqcnBuVTM0TCtrJEwpQGZzPjk5N1JlUXJyN3lWSllMRAoremBkVnMzbFlWK35PcG9AbSs8MVJNaX1aZWx2KGFPe3pGdGFPd15KMnNvIylffVJoXjNtVHk1VWxtNXUwYmQxJHNkCit6JTFTYU5jR0c4VUM7ZVBxaHR7MHZga0tKNjN1fUtfdm92NXZfVV9sbSF7X0JoOHFXez9aVDw0bzRqYnx8dUZtaV4KK3ozMFpVXmF7O0B7dmY5P2RlNSlVZ2Qkej5tIXBkMWt0fSZuTnhmUSUkQ3Y1dEkjSkx+dE0hZlhkbTM4fmd1ZzY0cAorelBRSHpzeHJFUG9IfmFjdXVpUHF3Z2VMa1g5c3RsQGN6ZGBsUGleVUlQdXFJKGxUUCh0ZEt6YUpuZy0xfjdFLWl0Cit6Xn1GNClVeWskbEBVN0ozWDdiMVRab2l6b01sYXw8KUxpUCExTmsjNEgjZkdJUnshenZVZ182Y3I3a2Y2amRkNjYKK3pEIVFjI0Y9ZDJMaVNIT0s4K3g7STBDKFlqPUI0IUc4STs2ZDdvRFpeKF5QQmJhU0k9ZFV5YXhJeX1Zd3leN3pgSQorelJvTG9vPV5Xayl8TCUrOXZYWUlAPE5XZlQ9RSRiVF5xZj58U1VSUVFHWDhOcUxwTnI7bjlJbn54JFlgOVVVdTRiCit6PWpUfU85V15JQT4hc15mV3FRdGEyQH5YUjRRVGMlX1c2YG5ibkBOZTMjVmdPJE8zfGBlM1hXamtMJW08P3ZPS2UKK3piMkNxVWBPMk5XWFlycFYhbVY1aXpyej9VOT9iXjV4UVRHYnw1QlFCR1pXUFBfd2ViOTZRbShvcHpkbmJkbTJGZworeilvNkJOVn1LJmUxY25uSU4zTHA7U20yK2QkSEFMb294WCl5a199MWEoMXFMb3A8Mm1EVGI1d0E2Kk51LWxOMzNpCit6ZyozPlFWOGoxUko/eT03TEA0U1lgIUNrdU5wMio8LVZONkwzKD5ydUQyakZhZT5QcVpYLWBic0lRJitKTXR7Z1AKK3pNR2tDZmc8cWB3Yj9sYyNFMGVwMjJSM0RhPnYkRlFucWNzfmZ+T2RpWXxEUGchcm14TSRrRjR7e2BacW0ofiQmaQoreitRQXYyc3Q3NntRbG82UzY1KT1XUnhDKTxkdWN9M2NlIWdyK1NnayVtITcmdHA5bjFJMTVwJU9CUUsyZ0o+eVV5Cit6O3c/UkwwaDx3SCFpd1MrXnkoWGI4ZWMpOS0oWiR0TShJUnA2fCR9OT1iVSZxMyNgTV8kYlNCQSpqPmRWKVFtPioKK3pCRVN9RXFmZHR1YlQkV1NQSm5aIXlJfkkkZEZiJmBja0JfSUV6SyFNOCtvQ141REtrezdtUmYkQjJNSjdmdG9vUworejdtYDxCO0l9ZChUJD09MCpLTkktdF45YDI9elEpcmF3YHplQXtafEg/cil0I1hHTD9KVWZSMkZUbk88NDJkcFJHCit6JUJIaVRsJkE3U28heDJsVmtWeE9kQHppSkpkeEdDJlAkZT5RRF9aM3YhdSFJZjs1UUlGQWMlRStOMmo+MUZLZ2cKK3o3JVpqSGk8cVVjR3AtfndlMTczeXomJS1hSHN6ZHE3NmBgWUA+MjRtaVFzeWE3Ulcod2NrcyVLZXBzO3p1KWIwQQorenMyNUpQaEZPPzJhRnZFRWJWamUyKSYhbkJHTkk2dmFgWmpWXjwmPDsqb0FJYnYwfCV6Y1RtWXc0JjRPcGRkRUFMCit6Nml8QUImV2h4PUphWWBVJF54LT8mWmhYaC1WX3FAUEZBPEBhYXNTSSpfNUxWeWRnNzU8YzdXYk9SPzE5dEVHK2AKK3pQQjEyUF90MDlgLWRPMWR7Z2JXJk5VbDg4OEB8eXQtbCYhOztweV9eTnU8ZEJLd0RjM3l2RER+OTN+UUhCRlB6WAoreiRHI3xSKTJLdkF4QHlZQWlWM2tZY2JpdVVfTiV1dlFNUkVsaWBXX1U/Y2EjMHlrYXVNKlMtLXNGYGRmVzRVNXdRCit6RTd1YjN0fGhKfnJhQUE2UCpoYDdJa3FRcnAoQm0rZmNzKFlWJGw+Pk5wI2tkP2o9QWh0Q2k+I3h4RUApNEptfF4KK3o8WVImZkRfTG9WKzxsI21gQVAtKj5zOUMhUTUjYmUoREtXO1BKcXJ6UXItbkR0VjhoeSE5WGNxTSo+S2N7SGkpWQorelBtVG1tMmMoYHBvLTNkUEg4VitvQjVHbzR6X15KeTZ+PktCTGxgJFFPK2g3VT4wN3s1MGxqR2J1JEhGcTkhU1RsCit6UlFVNSp1fVRXKXFyeVd9UD1xY1lJWUpVJTBUPU1nMiE5VDFvcEstT1F4bWw/RXg+eFRlJm1SVEZjKHpkbXNSK3QKK3p0UihJdnUke0VGZSptUXlWcWZMVW9hTDNmP2A8NUEjVTQwWWJsYCYoWWE3PWJPZClNT0oyRy1VPVo+SCRfVHwwWQorel57V0BLUW4+Y09ndUowP2FHV2YtNyhKVChAfEk1aUJmJWB9Q35CRnBXbnxOI3RLYl9SZ1llWlRTc2k8eHtpVTclCit6U1lRS3xCOSotWiY7Mm9scTh+VnJOaGRaUEpfU19wXlE3LS1nQkZ9MlVZeDFXb2pWeTZxZ2pLO0E1ZzRvZDFPJDYKK3p0eFA8ZTRXe0YxOzUrcmYjdDFgX3srQWpPNzlrOSpQR0RvRjZ3eDQrRVZYKWw0fH5jfjFNWX1LWExDKjBlRCV+RQorektzTj1la1hiYDZ7ZEReeiNWNik2SyRgfV4/eCRPSlVMV0dweWIlQCZKVk4pNXdMTio3WSNGb0M4Xz53MDIpbVc7Cit6dmd3a1BuWlBjZWpqKEpYNSFEfk5rflZqcnc5I3wqMHlHXl4xV0pAQDwyYFJ8enoybHgxT2t4SzhARiVvVFN4K3YKK3pwYDUkSlcmMTM3eUxMeSNPI3UhRlhSNF5PSCp1MW9Md2M+MjhmWEw3KVVtQGd7KFZtUFppenBUUF9hUktZYjRUSQoreipsbHNxZDNjY3I3MzNrSjtHMm1eUnI8fWl7XzJQfWNPY1BfI05LTmF2Z09nOWV+bXclcl9jaiFoK24rUShlN2RZCit6Qzc7fHh4MkQxVFFQcFU/aH5iKSY2aVFuVG8ybz1VOVhsPmNjVEs2U3NPKHQ0RzZQJVZOVFJDVk1UTyg4YyhJTzkKK3p0ZEVmSCVQWjhiTyMmJUV7RS15WWxXYjY8aVVYa20+a0I2VVNqajhZcXQoRCRAWEEzQiEjPSVfRHdxdit3aXJCOAorekxecWd3QXV4RnppSHVrRSk/YCswMEdtfjxrTG4wQmMoM1A3SFk0XmBNPFRYa18rKUUhczY9QjhgS1daS21QaX1NCit6aFFFP1V3Rjd+TzNJZnwkZyMoPW8tbFE9SyRQPj5WSDMkZFF4VTJTPEVvODE9TnRPN3pvKD93cF9AXnB9MDl2PXYKK3pSQmB2QiYqYUsqdSRkZkdNZGNKISQ3cm1qV0YtTE1qfCtvQ2ohMU9wdSNxKno/bGkjV1ZOM0dCLW4wdHhUSVhhUworeilEWl5pJWEwNj9YJHtzVmt8KV5eZ147RC13YWQrfWRPNGFeQVYtOCNTbHZgdFY0TkVMPzhIXjhHQWY4eE0hJm5mCit6M3BoV0g1Y0hqMz5nRzE3Zld1KCNvbmh3SkI8KHNTeDBWNFVsemRySEcleTt2emJgMzQ1eWU1azEwPik0TDVJUDsKK3pJYFBhYTdsK2ExMkMkK1pAbD1LTFB+ZWdgYllSMSojVlZMS2ttY1NAJGd+KmNDM2h8YTU+PChLSzkwTVhoc3IoLQorelMqRFhmOXVUUSg7TSZ+TGR3VHswVjsqVjRIYENLdEo0M2lOKGY1SlNZTFdSbDYtKnQtXzlpUSU2MWxVQUoha1VnCit6KEwrSkdwcCF+KFl9RXBLaVpgQGI9cHIodj1vPlN0VUE+fHwoVWJLWWg8cFJeTTB2ekxgU2RBQTlsX21LbSQ+SjUKK3otVnV4VVZqOEdFLSU9KmVUPjkqaUtuKmI8dkRUK31ecyQlSWp3cDBWQHhLNjxAMlBoY2J6U2VvNzxMZk4tIXlCTQorenZ9VyRVS3JXNmhRcFd+SV9qMnRlJm1EIyV0bXN1PjQjVlc1WmBIJTxYR01iVCRYUWpFWkd6aHdNYlUzdjRlVD1QCit6all8SD9qSSQkIWlTdklTOCpXQDZRfj9GU2lDMG9hTkJ4US1NPE55bylxJXk/QEo4dXo8S2ZaWlY8eihUeHtec0MKK3pjckBVMk1nWFQlSXlfYVoqaVJscU1YND51UDI1YHY4NWZQMzQjbDt6T1J5X3xwUnR8b28mSGNTYEt7b3xYWUQyQgoreko3emVCYTcpb2dzS2FvKj0pSmdvT1dkRlIqfTc3MGhJcHtWeGFeZ0RLKGVmX0JuKFJkJjkyQWZeSz58eCpiP3BxCit6XmRQZU5ZZUAqVTAzNX57UkJOKVpPeUd7PjAmOGlieHNWMk82PDxrQmhfSWYwOUB1fjsqKnQ5eThMWn5VcGElaXgKK3pUWnM+KjNFdG9nSEVSVGA1WD9rJEw0M1p6MnZHJmB6WUNAekc5PjwqS298TG4jMXsqR0wwWFZfekY7ISkzVz5pZgorenBkI2YrYH4haDFRaSNNcTV9P1JBQig9d2lqbTNkZ3ZJQmJnZGV+TFBKTXVOTTxjNDR+NXswRHBTKl5yRXokKkN4Cit6LUYkN1ZUWENGeGpVPWZNYUZBKDh7M1NzJjU7fX4kQFpueFVjTm9uTm5NQykrWEgoQyNtVmRkdkx1ME5SKVRhQiMKK3prSXN5VF82MVBWXzE8YWtGMFM4Y0ZLc2xGbG9uYmk1QktDSyk9X0RMbTMxcXg/I31ESTg3R1l9PHdUOG5SYEJPNAorelJ4QDVfYTFHRTU/S09QMmJQK29UeUktSyRASzgldU01RnkhNUBUUD87KiF4VHAybUZ+SE9RRD55QyhSeGgrVTRnCit6VVVrcTYjfXYyOENvUGxDdWtUQmg+TWhgMD55NGh9VGcmRVNrN3IheUU9Tz4oZFN0KEFMeXdQQ1p5dHdLOW0jZCQKK3pVUHQkKkBja0dAXyNXIW15cWV7c21qcHBibkRkZlBUUnBrUVB7aipJZVM0MnBpMTJqVHVaNnlzMVQ1cl8oaFc5JAoremRVNystJng0MlZZVCNzUSh7dWFhODhZPiRuQD1WY1NvVDsydTxZTXZLRig1ZmtxJm17YnE3ZkclcTc7ezRwcyNNCit6MmpxbXEpcGN7MGFAVX5ee0QzPzlfI2JMI1lNa0RiaH1oP18rVHVHMFM9P0NFQ3cxOU5QZEU+em5VfHNYOTx8OEkKK3ojYWB4OEp1P20lRiNOTlllRmxyYGMmfTMrdXRpRlhMKklCbkIlXzJHMT9uPGk/ZUIpWThiNWxoezheNk9CJnwhWgorejdnSikkdjUrMG17IVpgeXp7NFAkbGxOa0dqYT9TOEZKY0N9dnxMTTZAbFJee0ZHaWFaMmBTfmV3X0sjbE1DPH1BCit6RW4zVFkjU2cocWU7Y0U0NCFHPX4tLVMqb3klbjVnP09+UnJmNiZScUUmNDNRVnhMYkM/SjNEXjx8Y2E5MlE9ekkKK3p7ISVvbmlERDdIPjFvSUVPPyZveGlrPl9WNVFWMnpIMEE3JCZwbUQ1dkdYbWk/JUY+dl5eV09+Uk89UjItJDhqPgoreiQ5I2RSdmFpXzY0PUd9R2BRe2dEI21UYmw2fmIzSG0pamxiRzUhcz9LSkczJlJHXyR8WXdkalFpOXtFI1N8RXd9Cit6a2dSM2QkWlNLTT00bz1OeU90YENzeX1HJT1AczZQV3ljNnhwNjZiQ2BeN2pGSVdvUTNha0djZ3o9OUpTanVmd20KK3pQYDt9QUFqQFg2ekhEbHJlbX11QiQqelheOGw5fEI/fDNWcFllP1JqU2gheGk5JCE2fF5YeXFtPEY8LU09MCRYZQorellrbTJ+eEUjZW9vdWVneDY/STtvamVvRzk4K15UeShhO3U9aEZfa1MtPD8qPG9nTE1qK2haSnl5aTZAQzN7K0FiCit6QG1VTSNLZWxXeWNnJHxOQlZXZUI/Xnd8dE0+dkg4bGwweipeTG1VXmtlOU0hPkcrQk0pVDlNPHlpQWNgMT07a2EKK3o8WnYoM090RmV6dj9YcmNeRllkYiFDQ1VTVzdWanhVVCpyaD9FQXtzSE5NU0U5VXRYcUo8KiVYJSFkR1BDaW0xPgorenZiZnQzKiZUSGVGOSFhPXFTNkd0e1F0YChySm8rWk09K0IzLXVWQmV7cmBtMj5UdVIyR3Z4fGRePihNMF8xXntKCit6Jk9PZ2t3KEF5c3RZSHR8RV56KTc4dXNJS2N2eyU4aT96UVF4d1ArU0tDcGsoUCsrNX15bTViM05aV3d3JGZoJHsKK3oreiZjenlxWUllVHpjejBvU1pLQm9hKFojUFRuKjBnRFpfLT4mcmhyIXZkNmIzNHczRnhpKkp5Yy1ZPjRlQCReNAorY3hndU40a25pKE5VMzw2JXs7MzFKSnAoKiR4XnVHcjlmR2FadjtZN0EKKworbGl0ZXJhbCAxNjI5Cit6Y21WLWoyQlBfaVApPGg7M0t8TGswMDBlMU5KTFRxMDAxQlcwMDFCZTFeQHM2YjkjRjgwMDAwNGIzI2N9Mm5ZeFcKK3pkPGJOUzAwMElRTmtsPFpTY1MheGVRY0gwOE5oJGZkR0dCOVA7UX1SQ0QwRjd1fX5sXzNYPlhPcC1vdUVHN3R3MAorenJ6MS09RiVGME9BWipCdCU0QVdlJWNkNkclbWBzWTZ1JHlmaEI5RE9yZmtldmtQalF8N2J6e1ledDtnZWVWK1olCit6LWItKDlkKzlLWFB4OXR7JnBGUnxwNU9ERl5GSFQmO1kke3xreDNvRCVTI3thd3YqbDdLKXRNUXpXUlIkQE5MYl8KK3p3O0h9dilHUUlmNiUzajhIfiVmYTtqZD5oJDY5NVFSV2NrVyteUygkNkU0blhXO1krTHNIZ35pVkYyJipgTUtoUgorekhtbUNRMWJ5eVVgbEReRiZYbTxwS0s2Mit3ZHhzbXFHfF9MfDYmfjFiRCE0a0tBcCZpR3UlTExkQ3BIbj58VE5WCit6JThSM2FffFR6bW0jKjNQQFEtSFNVWU0xZUghPGIjIUgtZVpWWnhHQmpMZm9YQURyTnNhZFU9ZT5jM2pNczsmJkYKK3o4VkNSUV5kI1NldTl2e001QTJ6ejR9RXA+bjx1aGY2cF9wKzF2elpuYDU1Q2ZKblkraGwjVDFSVjhiPzFmUEZUVgorek1xe30xUkx2WHpOdGdqdSNENkF2N2RZUVg/RVluY3kwIWVEPWhKdEhORSQkVVRRfm5XYSlOSXhFfXs2PTAmO1YrCit6TlNLTGVMS3YmYz5hMX15ajw8QjR0c05GJUx1U3FzaDxRayRXNVlXSTUxKHVyXk99Z0g0JUJJSEA4Ozs9RF9PTC0KK3pneVAhQG1edit3PzNecURmZ21sLTlmPV5eRGxFKyFUZXpwQz4kQkVxZjg/UWVZaEg8MUpxRlAwPWY/fW1afnYoZworenhvSjNxYEJOc2RlYipDPSYrem5UUGcob0daPlRzTm0qcDYtc148ZEUpdVFVXntlQSF3ODhGczkpQXl3UkVfPi1+Cit6bzx6PDhZTzVRbXVlJiVQTFNneDt2Vl9oN2o3VUxwSUJpWHw0ZDUlIVMpfEM8UU1IdiM+NXFpTXZpYGMzZlhqblkKK3o/bnpJPm4zMHFneUsoeVRtMUNqK2lvRnteM0AwQ1dyU08pPnJue2N9e0BHb2V1ZkxYcyt2WkdUKF5DJiM3ZVlpYgorekB2IylaPTw3SU9tSUExaTZWfStKQlhKSUpwYG5AR0l9WlR4LW9CNCRZd2NwJGlxYTg1N3xVRyVDZkdXODIxcTc9Cit6cTkrQVBNK3pgZD5TYExmfEszZnN3X1NzbmxzJG9RPEhydUV1WkJlY01zYWM/b21JX2dic35+LUJMRHozKWZjJGAKK3otZTF3dC1wI1RWck16RlVnIyNhSzthZn1RI3B3IW9yY1BhJlg0RXBkcEdsdVRsR2s+bCZMZEwmYz57bFZAdlVlKAorekJ7aTl+PitUK01Oc3wxQGxVJTR4TWhxejdyWEZ7a2w0RCNYSTxySmZ8Sn1oY2VlO2NwSnp+PCpNdzZWQmc0Z0diCit6b29xLWxSPUNoXyFMX2NlSzVxQW1JMmh2fF83WldUQWQkWHpfWip8SztXRSV5cGtDUT1mSXUrKiU8I0toN2hNUCEKK3o9cjgzOVp0QmNkUlYkSU9gYjxZNzglaigrZkVrYmhVdkclLUVQai1FM3VhUFpjWnI3Y0VwYShpKVBMXld0RjVrNworektje18zKzZ5d3U3JWY2TDR3T1V7KWd9Zm8qRD9eSnJ8ezdTcDg/PClIXkVTRSVzZiV+dW4rdWE3cll7SjA2K30wCit6Qnk4UnBzMkh8Xkp8aisyK35yQzRGbj9oWTBKQ1BfTGg3aXxMK1U5PyphbCsmdGtGRlhzZjBIQ1Ikc0t0eyUtTioKK3ozUlI2K0ZtSXB9NW0oJiR1ZUBnPWJMSktSRmxUTjctJmBfeCRVV2xvY2dDaCkzQWx+QzlSKX5mWkZ+KjE4ZjRWWgorejdvQSZVa3czQEsrN1NMZzdtamhxVHFXfWhWK2BMaHpjNWI2PWtMVTdJNXY5VzwmJlNrKEhJNGdPQHg0NzA7bzltCit6WStyVHlKeW5mYUcrJl5McDU5QTxNNUMpWGNxWWJoI2xmQERGQFQ8ezd4NCNzMjFUenVaYkRCKytSK3p3XlM8dTAKK3o7ZzNEVnpfZntKZnRrQjFDO2NLQUhnXnIyOUpUQGNmaTdINTNVMWRaWVI8S0FzaV9sZG03VXY7YWBhRllERUk+MQoremJYe3A2WjJnMHN0MSt4UFJyfmZRay1uST5MJF4jQTxKSHM7MSZUIU1RP3NBRjEySF9wa1JySFVlSVBDO25OWmtBCit6QWxPU04+PDVQYUw9ITY7UFN3QnVPc3RoYjtAdnRhTjNIOCFmZy1SdzdRUWdJPlBrPzQ5YXxnek1eT3pUdFVYPSgKK3o8e3QrUyNUaVhxKTZ8ZUUtZ3pTSTByUF8rWW1ZQjR5fTVJPkRzP3lMeXZtQXs0ZG9tWDZuUnl8VGJ7Y0BndzNHbworelNBeT5RJUM7MDIqc3lEek5hTyQ7VWFWQHA1dVZQLXh4NmpXVSgkOElwWShCRHpPUTdqNnFWJSkoKkBjOFlVUlc7Cit6enBjcDJTNCNuXlMlezFTK1FCd2tIQzFrN19JX0hrYDsrVjA5dVl0YyU9V3cjPy1lQH1HfXwhfVBVO09Eey1Rc3AKK2JVJUxEa01EQldYJlJ1YDwwMDAwME5rdlhYdTBtamZKQUBifgorCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfUG9zdEltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsX1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGU0MjAxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsX1Bvc3RJbWFnZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfUHJlSW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfUHJlSW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk5ZGY4NQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvbGl0ZXJhbF9QcmVJbWFnZQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfYWRkLnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsX2FkZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjZhOWU0Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsX2FkZC5wYXRjaApAQCAtMCwwICsxLDQwIEBACitkaWZmIC0tZ2l0IGEvbGl0ZXJhbF9hZGQgYi9saXRlcmFsX2FkZAorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5OWRmODU3OGUzY2FlOGE1ZTk3OTE4MjM5MWI4ZTlhNmEzZGVkZWQKK0dJVCBiaW5hcnkgcGF0Y2gKK2xpdGVyYWwgMTYyOQoremNtVi1qMkJQX2lQKTxoOzNLfExrMDAwZTFOSkxUcTAwMUJXMDAxQmUxXkBzNmI5I0Y4MDAwMDRiMyNjfTJuWXhXCit6ZDxiTlMwMDBJUU5rbDxaU2NTIXhlUWNIMDhOaCRmZEdHQjlQO1F9UkNEMEY3dX1+bF8zWD5YT3Atb3VFRzd0dzAKK3pyejEtPUYlRjBPQVoqQnQlNEFXZSVjZDZHJW1gc1k2dSR5ZmhCOURPcmZrZXZrUGpRfDdientZXnQ7Z2VlVitaJQorei1iLSg5ZCs5S1hQeDl0eyZwRlJ8cDVPREZeRkhUJjtZJHt8a3gzb0QlUyN7YXd2Kmw3Syl0TVF6V1JSJEBOTGJfCit6dztIfXYpR1FJZjYlM2o4SH4lZmE7amQ+aCQ2OTVRUldja1crXlMoJDZFNG5YVztZK0xzSGd+aVZGMiYqYE1LaFIKK3pIbW1DUTFieXlVYGxEXkYmWG08cEtLNjIrd2R4c21xR3xfTHw2Jn4xYkQhNGtLQXAmaUd1JUxMZENwSG4+fFROVgoreiU4UjNhX3xUem1tIyozUEBRLUhTVVlNMWVIITxiIyFILWVaVlp4R0JqTGZvWEFEck5zYWRVPWU+YzNqTXM7JiZGCit6OFZDUlFeZCNTZXU5dntNNUEyeno0fUVwPm48dWhmNnBfcCsxdnpabmA1NUNmSm5ZK2hsI1QxUlY4Yj8xZlBGVFYKK3pNcXt9MVJMdlh6TnRnanUjRDZBdjdkWVFYP0VZbmN5MCFlRD1oSnRITkUkJFVUUX5uV2EpTkl4RX17Nj0wJjtWKworek5TS0xlTEt2JmM+YTF9eWo8PEI0dHNORiVMdVNxc2g8UWskVzVZV0k1MSh1cl5PfWdINCVCSUhAODs7PURfT0wtCit6Z3lQIUBtXnYrdz8zXnFEZmdtbC05Zj1eXkRsRSshVGV6cEM+JEJFcWY4P1FlWWhIPDFKcUZQMD1mP31tWn52KGcKK3p4b0ozcWBCTnNkZWIqQz0mK3puVFBnKG9HWj5Uc05tKnA2LXNePGRFKXVRVV57ZUEhdzg4RnM5KUF5d1JFXz4tfgorem88ejw4WU81UW11ZSYlUExTZ3g7dlZfaDdqN1VMcElCaVh8NGQ1JSFTKXxDPFFNSHYjPjVxaU12aWBjM2ZYam5ZCit6P256ST5uMzBxZ3lLKHlUbTFDaitpb0Z7XjNAMENXclNPKT5ybntjfXtAR29ldWZMWHMrdlpHVCheQyYjN2VZaWIKK3pAdiMpWj08N0lPbUlBMWk2Vn0rSkJYSklKcGBuQEdJfVpUeC1vQjQkWXdjcCRpcWE4NTd8VUclQ2ZHVzgyMXE3PQorenE5K0FQTSt6YGQ+U2BMZnxLM2Zzd19Tc25scyRvUTxIcnVFdVpCZWNNc2FjP29tSV9nYnN+fi1CTER6MylmYyRgCit6LWUxd3QtcCNUVnJNekZVZyMjYUs7YWZ9USNwdyFvcmNQYSZYNEVwZHBHbHVUbEdrPmwmTGRMJmM+e2xWQHZVZSgKK3pCe2k5fj4rVCtNTnN8MUBsVSU0eE1ocXo3clhGe2tsNEQjWEk8ckpmfEp9aGNlZTtjcEp6fjwqTXc2VkJnNGdHYgorem9vcS1sUj1DaF8hTF9jZUs1cUFtSTJodnxfN1pXVEFkJFh6X1oqfEs7V0UleXBrQ1E9Zkl1KyolPCNLaDdoTVAhCit6PXI4MzladEJjZFJWJElPYGI8WTc4JWooK2ZFa2JoVXZHJS1FUGotRTN1YVBaY1pyN2NFcGEoaSlQTF5XdEY1azcKK3pLY3tfMys2eXd1NyVmNkw0d09VeylnfWZvKkQ/XkpyfHs3U3A4PzwpSF5FU0Ulc2YlfnVuK3VhN3JZe0owNit9MAorekJ5OFJwczJIfF5KfGorMit+ckM0Rm4/aFkwSkNQX0xoN2l8TCtVOT8qYWwrJnRrRkZYc2YwSENSJHNLdHslLU4qCit6M1JSNitGbUlwfTVtKCYkdWVAZz1iTEpLUkZsVE43LSZgX3gkVVdsb2NnQ2gpM0FsfkM5Uil+ZlpGfioxOGY0VloKK3o3b0EmVWt3M0BLKzdTTGc3bWpocVRxV31oVitgTGh6YzViNj1rTFU3STV2OVc8JiZTayhISTRnT0B4NDcwO285bQorelkrclR5SnluZmFHKyZeTHA1OUE8TTVDKVhjcVliaCNsZkBERkBUPHs3eDQjczIxVHp1WmJEQisrUit6d15TPHUwCit6O2czRFZ6X2Z7SmZ0a0IxQztjS0FIZ15yMjlKVEBjZmk3SDUzVTFkWllSPEtBc2lfbGRtN1V2O2FgYUZZREVJPjEKK3piWHtwNloyZzBzdDEreFBScn5mUWstbkk+TCReI0E8SkhzOzEmVCFNUT9zQUYxMkhfcGtSckhVZUlQQztuTlprQQorekFsT1NOPjw1UGFMPSE2O1BTd0J1T3N0aGI7QHZ0YU4zSDghZmctUnc3UVFnST5Qaz80OWF8Z3pNXk96VHRVWD0oCit6PHt0K1MjVGlYcSk2fGVFLWd6U0kwclBfK1ltWUI0eX01ST5Ecz95THl2bUF7NGRvbVg2blJ5fFRie2NAZ3czR28KK3pTQXk+USVDOzAyKnN5RHpOYU8kO1VhVkBwNXVWUC14eDZqV1UoJDhJcFkoQkR6T1E3ajZxViUpKCpAYzhZVVJXOworenpwY3AyUzQjbl5TJXsxUytRQndrSEMxazdfSV9Ia2A7K1YwOXVZdGMlPVd3Iz8tZUB9R318IX1QVTtPRHstUXNwCitiVSVMRGtNREJXWCZSdWA8MDAwMDBOa3ZYWHUwbWpmSkFAYn4KKworbGl0ZXJhbCAwCitIY21WP2QwMDAwMQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsX2FkZF9Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL2xpdGVyYWxfYWRkX1Bvc3RJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTlkZjg1Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9saXRlcmFsX2FkZF9Qb3N0SW1hZ2UKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9zbXVkZ2V0ZXN0LnBhdGNoIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9zbXVkZ2V0ZXN0LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNGQ0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3NtdWRnZXRlc3QucGF0Y2gKQEAgLTAsMCArMSw5IEBACitkaWZmIC0tZ2l0IGEvc211ZGdldGVzdCBiL3NtdWRnZXRlc3QKK2luZGV4IGEyNGQ0MWUuLjc2MmM0ZDAgMTAwNjQ0CistLS0gYS9zbXVkZ2V0ZXN0CisrKysgYi9zbXVkZ2V0ZXN0CitAQCAtMSwzICsxLDMgQEAKKyBQRVJMRQorLUhFQkxFCisrc3ByaWNoCisgc3BlYWsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvc211ZGdldGVzdF9Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3NtdWRnZXRlc3RfUG9zdEltYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkNjMwODkKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3NtdWRnZXRlc3RfUG9zdEltYWdlCkBAIC0wLDAgKzEsMyBAQAorUEFSTEEKK3NwcmljaAorc3BlYWsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvc211ZGdldGVzdF9QcmVJbWFnZSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvc211ZGdldGVzdF9QcmVJbWFnZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmJkOGM3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9zbXVkZ2V0ZXN0X1ByZUltYWdlCkBAIC0wLDAgKzEsMyBAQAorUEFSTEEKK0hBQkxBCitzcGVhawpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXQucGF0Y2ggYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzgwZGJlCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXQucGF0Y2gKQEAgLTAsMCArMSw3IEBACitkaWZmIC0tZ2l0IGEvdW1sYXV0IGIvdW1sYXV0CitpbmRleCAwMDNhMDU0Li41NTdmNzJmIDEwMDY0NAorLS0tIGEvdW1sYXV0CisrKysgYi91bWxhdXQKK0BAIC0xICsxIEBACistw4TDlsOcCisrxNbcCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dF9Qb3N0SW1hZ2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL3VtbGF1dF9Qb3N0SW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3ZjcyZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1Bvc3RJbWFnZQpAQCAtMCwwICsxIEBACivE1twKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1ByZUltYWdlIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi91bWxhdXRfUHJlSW1hZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzYTA1NAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvdW1sYXV0X1ByZUltYWdlCkBAIC0wLDAgKzEgQEAKK8OEw5bDnApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC1yc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9kZWx0YTEuZm9yd2FyZCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vZGVsdGExLmZvcndhcmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc4YjE2NwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vZGVsdGExLmZvcndhcmQKQEAgLTAsMCArMSBAQAorU2NtWnAwWG13YTF6KiskVTNqX2NzTihEbXoKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3QtcnNyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vZGVsdGExLnJldmVyc2UgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL2RlbHRhMS5yZXZlcnNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjdhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0LXJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL2RlbHRhMS5yZXZlcnNlCkBAIC0wLDAgKzEgQEAKK1RjbVpwNVhtRDV7dSF4YT01aEVpMjg/RlA0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCmluZGV4IDA1NWViYTcuLjg2NzMxMGIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kVGVzdC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAyMCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDIxIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC05LDYgKzksNyBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXBpOwogCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0QXJyYXlFcXVhbHM7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CkBAIC0xOCwxMSArMTksMjAgQEAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlBhdGNoQXBwbHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlBhdGNoRm9ybWF0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5SYXdUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuUmVwb3NpdG9yeVRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLklPOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCiBwdWJsaWMgY2xhc3MgQXBwbHlDb21tYW5kVGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CkBAIC01OCw2ICs2OCwyNjAgQEAKIAl9CiAKIAlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDckxmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlkYi5nZXRDb25maWcoKS5zZXRCb29sZWFuKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRiwgdHJ1ZSk7CisJCQlBcHBseVJlc3VsdCByZXN1bHQgPSBpbml0KCJjcmxmIiwgdHJ1ZSwgdHJ1ZSk7CisJCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImNybGYiKSwKKwkJCQkJcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKSk7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImNybGYiKSwKKwkJCQkJYi5nZXRTdHJpbmcoMCwgYi5zaXplKCksIGZhbHNlKSk7CisJCX0gZmluYWxseSB7CisJCQlkYi5nZXRDb25maWcoKS51bnNldChDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q3JMZk9mZigpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgeworCQkJZGIuZ2V0Q29uZmlnKCkuc2V0Qm9vbGVhbihDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYsIGZhbHNlKTsKKwkJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGluaXQoImNybGYiLCB0cnVlLCB0cnVlKTsKKwkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZiIpLAorCQkJCQlyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKTsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZiIpLAorCQkJCQliLmdldFN0cmluZygwLCBiLnNpemUoKSwgZmFsc2UpKTsKKwkJfSBmaW5hbGx5IHsKKwkJCWRiLmdldENvbmZpZygpLnVuc2V0KENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRik7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDckxmRW1wdHlDb21taXR0ZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCWRiLmdldENvbmZpZygpLnNldEJvb2xlYW4oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGLCB0cnVlKTsKKwkJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGluaXQoImNybGYzIiwgdHJ1ZSwgdHJ1ZSk7CisJCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImNybGYzIiksCisJCQkJCXJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpOworCQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJjcmxmMyIpLAorCQkJCQliLmdldFN0cmluZygwLCBiLnNpemUoKSwgZmFsc2UpKTsKKwkJfSBmaW5hbGx5IHsKKwkJCWRiLmdldENvbmZpZygpLnVuc2V0KENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRik7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDckxmTmV3RmlsZSgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgeworCQkJZGIuZ2V0Q29uZmlnKCkuc2V0Qm9vbGVhbihDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYsIHRydWUpOworCQkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgiY3JsZjQiLCBmYWxzZSwgdHJ1ZSk7CisJCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7CisJCQlhc3NlcnRFcXVhbHMobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImNybGY0IiksCisJCQkJCXJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkpOworCQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJjcmxmNCIpLAorCQkJCQliLmdldFN0cmluZygwLCBiLnNpemUoKSwgZmFsc2UpKTsKKwkJfSBmaW5hbGx5IHsKKwkJCWRiLmdldENvbmZpZygpLnVuc2V0KENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRik7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQYXRjaFdpdGhDckxmKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlkYi5nZXRDb25maWcoKS5zZXRCb29sZWFuKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BVVRPQ1JMRiwgZmFsc2UpOworCQkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgiY3JsZjIiLCB0cnVlLCB0cnVlKTsKKwkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiY3JsZjIiKSwKKwkJCQkJcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKSk7CisJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImNybGYyIiksCisJCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOworCQl9IGZpbmFsbHkgeworCQkJZGIuZ2V0Q29uZmlnKCkudW5zZXQoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFBhdGNoV2l0aENyTGYyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBuYW1lID0gImNybGYyIjsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCWRiLmdldENvbmZpZygpLnNldEJvb2xlYW4oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGLCBmYWxzZSk7CisJCQlhID0gbmV3IFJhd1RleHQocmVhZEZpbGUobmFtZSArICJfUHJlSW1hZ2UiKSk7CisJCQl3cml0ZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBuYW1lKSwKKwkJCQkJYS5nZXRTdHJpbmcoMCwgYS5zaXplKCksIGZhbHNlKSk7CisKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihuYW1lKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiUHJlSW1hZ2UiKS5jYWxsKCk7CisKKwkJCWIgPSBuZXcgUmF3VGV4dChyZWFkRmlsZShuYW1lICsgIl9Qb3N0SW1hZ2UiKSk7CisKKwkJCWRiLmdldENvbmZpZygpLnNldEJvb2xlYW4oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FVVE9DUkxGLCB0cnVlKTsKKwkJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGdpdC5hcHBseSgpCisJCQkJCS5zZXRQYXRjaChnZXRUZXN0UmVzb3VyY2UobmFtZSArICIucGF0Y2giKSkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5zaXplKCkpOworCQkJYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksIG5hbWUpLAorCQkJCQlyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKTsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBuYW1lKSwKKwkJCQkJYi5nZXRTdHJpbmcoMCwgYi5zaXplKCksIGZhbHNlKSk7CisJCX0gZmluYWxseSB7CisJCQlkYi5nZXRDb25maWcoKS51bnNldChDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwgbnVsbCwKKwkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYpOworCQl9CisJfQorCisJLy8gQ2xlYW4vc211ZGdlIGZpbHRlciBmb3IgdGVzdEZpbHRlcmluZy4gVGhlIHNtdWRnZXRlc3QgdGVzdCByZXNvdXJjZXMgd2VyZQorCS8vIGNyZWF0ZWQgd2l0aCBDIGdpdCB1c2luZyBhIGNsZWFuIGZpbHRlciBzZWQgLWUgInMvQS9FL2ciIGFuZCB0aGUgc211ZGdlCisJLy8gZmlsdGVyIHNlZCAtZSAicy9FL0EvZyIuIFRvIGtlZXAgdGhlIHRlc3QgaW5kZXBlbmRlbnQgb2YgdGhlIHByZXNlbmNlIG9mCisJLy8gc2VkLCBpbXBsZW1lbnQgdGhpcyB3aXRoIGEgYnVpbHQtaW4gZmlsdGVyLgorCXByaXZhdGUgc3RhdGljIGNsYXNzIFJlcGxhY2VGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXJDb21tYW5kIHsKKworCQlwcml2YXRlIGZpbmFsIGNoYXIgdG9SZXBsYWNlOworCisJCXByaXZhdGUgZmluYWwgY2hhciByZXBsYWNlbWVudDsKKworCQlSZXBsYWNlRmlsdGVyKElucHV0U3RyZWFtIGluLCBPdXRwdXRTdHJlYW0gb3V0LCBjaGFyIHRvUmVwbGFjZSwKKwkJCQljaGFyIHJlcGxhY2VtZW50KSB7CisJCQlzdXBlcihpbiwgb3V0KTsKKwkJCXRoaXMudG9SZXBsYWNlID0gdG9SZXBsYWNlOworCQkJdGhpcy5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgcnVuKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCWludCBiID0gaW4ucmVhZCgpOworCQkJaWYgKGIgPCAwKSB7CisJCQkJaW4uY2xvc2UoKTsKKwkJCQlvdXQuY2xvc2UoKTsKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlpZiAoKGIgJiAweEZGKSA9PSB0b1JlcGxhY2UpIHsKKwkJCQliID0gcmVwbGFjZW1lbnQ7CisJCQl9CisJCQlvdXQud3JpdGUoYik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEZpbHRlcmluZygpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBTZXQgdXAgZmlsdGVyCisJCUZpbHRlckNvbW1hbmRGYWN0b3J5IGNsZWFuID0gKHJlcG8sIGluLCBvdXQpIC0+IHsKKwkJCXJldHVybiBuZXcgUmVwbGFjZUZpbHRlcihpbiwgb3V0LCAnQScsICdFJyk7CisJCX07CisJCUZpbHRlckNvbW1hbmRGYWN0b3J5IHNtdWRnZSA9IChyZXBvLCBpbiwgb3V0KSAtPiB7CisJCQlyZXR1cm4gbmV3IFJlcGxhY2VGaWx0ZXIoaW4sIG91dCwgJ0UnLCAnQScpOworCQl9OworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoImpnaXQ6Ly9idWlsdGluL2EyZS9jbGVhbiIsIGNsZWFuKTsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKCJqZ2l0Oi8vYnVpbHRpbi9hMmUvc211ZGdlIiwgc211ZGdlKTsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCUNvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19GSUxURVJfU0VDVElPTiwgImEyZSIsCisJCQkJCSJjbGVhbiIsICJqZ2l0Oi8vYnVpbHRpbi9hMmUvY2xlYW4iKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19GSUxURVJfU0VDVElPTiwgImEyZSIsCisJCQkJCSJzbXVkZ2UiLCAiamdpdDovL2J1aWx0aW4vYTJlL3NtdWRnZSIpOworCQkJd3JpdGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgIi5naXRhdHRyaWJ1dGVzIiksCisJCQkJCSJzbXVkZ2V0ZXN0IGZpbHRlcj1hMmUiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLmdpdGF0dHJpYnV0ZXMiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQXR0cmlidXRlcyIpLmNhbGwoKTsKKwkJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGluaXQoInNtdWRnZXRlc3QiLCB0cnVlLCB0cnVlKTsKKwkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAic211ZGdldGVzdCIpLAorCQkJCQlyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKTsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAic211ZGdldGVzdCIpLAorCQkJCQliLmdldFN0cmluZygwLCBiLnNpemUoKSwgZmFsc2UpKTsKKworCQl9IGZpbmFsbHkgeworCQkJLy8gVGVhciBkb3duIGZpbHRlcgorCQkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnVucmVnaXN0ZXIoImpnaXQ6Ly9idWlsdGluL2EyZS9jbGVhbiIpOworCQkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnVucmVnaXN0ZXIoImpnaXQ6Ly9idWlsdGluL2EyZS9zbXVkZ2UiKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBjaGVja0JpbmFyeShTdHJpbmcgbmFtZSwgYm9vbGVhbiBoYXNQcmVJbWFnZSkKKwkJCXRocm93cyBFeGNlcHRpb24geworCQljaGVja0JpbmFyeShuYW1lLCBoYXNQcmVJbWFnZSwgMSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNoZWNrQmluYXJ5KFN0cmluZyBuYW1lLCBib29sZWFuIGhhc1ByZUltYWdlLAorCQkJaW50IG51bWJlck9mRmlsZXMpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJYnl0ZVtdIHBvc3QgPSBJTworCQkJCQkucmVhZFdob2xlU3RyZWFtKGdldFRlc3RSZXNvdXJjZShuYW1lICsgIl9Qb3N0SW1hZ2UiKSwgMCkKKwkJCQkJLmFycmF5KCk7CisJCQlGaWxlIGYgPSBuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBuYW1lKTsKKwkJCWlmIChoYXNQcmVJbWFnZSkgeworCQkJCWJ5dGVbXSBwcmUgPSBJTworCQkJCQkJLnJlYWRXaG9sZVN0cmVhbShnZXRUZXN0UmVzb3VyY2UobmFtZSArICJfUHJlSW1hZ2UiKSwgMCkKKwkJCQkJCS5hcnJheSgpOworCQkJCUZpbGVzLndyaXRlKGYudG9QYXRoKCksIHByZSk7CisJCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKG5hbWUpLmNhbGwoKTsKKwkJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiUHJlSW1hZ2UiKS5jYWxsKCk7CisJCQl9CisJCQlBcHBseVJlc3VsdCByZXN1bHQgPSBnaXQuYXBwbHkoKQorCQkJCQkuc2V0UGF0Y2goZ2V0VGVzdFJlc291cmNlKG5hbWUgKyAiLnBhdGNoIikpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhudW1iZXJPZkZpbGVzLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuc2l6ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhmLCByZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKTsKKwkJCWFzc2VydEFycmF5RXF1YWxzKHBvc3QsIEZpbGVzLnJlYWRBbGxCeXRlcyhmLnRvUGF0aCgpKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RCaW5hcnlEZWx0YSgpIHRocm93cyBFeGNlcHRpb24geworCQljaGVja0JpbmFyeSgiZGVsdGEiLCB0cnVlKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RCaW5hcnlMaXRlcmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNoZWNrQmluYXJ5KCJsaXRlcmFsIiwgdHJ1ZSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0QmluYXJ5TGl0ZXJhbEFkZCgpIHRocm93cyBFeGNlcHRpb24geworCQljaGVja0JpbmFyeSgibGl0ZXJhbF9hZGQiLCBmYWxzZSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RW5jb2RpbmdDaGFuZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8gVGhpcyBpcyBhIHRleHQgcGF0Y2ggdGhhdCBjaGFuZ2VzIGEgZmlsZSBjb250YWluaW5nIMOEw5bDnCBpbiBVVEYtOCB0bworCQkvLyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGluIElTTy04ODU5LTEuIFRoZSBwYXRjaCBmaWxlIGl0c2VsZiB1c2VzIG1peGVkCisJCS8vIGVuY29kaW5nLiBTaW5jZSBjaGVja0ZpbGUoKSB3b3JrcyB3aXRoIHN0cmluZ3MgdXNlIHRoZSBiaW5hcnkgY2hlY2suCisJCWNoZWNrQmluYXJ5KCJ1bWxhdXQiLCB0cnVlKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUxpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8gQyBnaXQgYWNjZXB0cyBjb21wbGV0ZWx5IGVtcHR5IGxpbmVzIGFzIGVtcHR5IGNvbnRleHQgbGluZXMuCisJCS8vIEFjY29yZGluZyB0byBjb21tZW50cyBpbiB0aGUgQyBnaXQgc291cmNlcyAoYXBwbHkuYyksIG5ld2VyIEdOVSBkaWZmCisJCS8vIG1heSBwcm9kdWNlIHN1Y2ggZGlmZnMuCisJCWNoZWNrQmluYXJ5KCJlbXB0eUxpbmUiLCB0cnVlKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RNdWx0aUZpbGVOb05ld2xpbmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8gVGhpcyB0ZXN0IG5lZWRzIHR3byBmaWxlcy4gT25lIGlzIGluIHRoZSB0ZXN0IHJlc291cmNlcy4KKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCUZpbGVzLndyaXRlKGRiLmdldFdvcmtUcmVlKCkudG9QYXRoKCkucmVzb2x2ZSgieWVsbG8iKSwKKwkJCQkJInllbGxvIi5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVTX0FTQ0lJKSk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInllbGxvIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInllbGxvIikuY2FsbCgpOworCQl9CisJCWNoZWNrQmluYXJ5KCJoZWxsbyIsIHRydWUsIDIpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdEFkZEExKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGluaXQoIkExIiwgZmFsc2UsIHRydWUpOwogCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZFRlc3QuamF2YQppbmRleCA5ZGQxMjljLi5mNGYwZWNkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmRUZXN0LmphdmEKQEAgLTM0LDYgKzM0LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWZsb2dSZWFkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeVN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuQ29udGVudE1lcmdlU3RyYXRlZ3k7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlci5NZXJnZUZhaWx1cmVSZWFzb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKQEAgLTE5Myw3ICsxOTUsNyBAQAogCX0KIAogCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENoZXJyeVBpY2tDb25mbGljdFJlc29sdXRpb25Ob0NPbW1pdCgpIHRocm93cyBFeGNlcHRpb24geworCXB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrQ29uZmxpY3RSZXNvbHV0aW9uTm9Db21taXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwogCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IHByZXBhcmVDaGVycnlQaWNrKGdpdCk7CiAKQEAgLTI4MCw2ICsyODIsNzAgQEAKIAl9CiAKIAlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrT3VycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlQ2hlcnJ5UGljayhnaXQpOworCisJCQlDaGVycnlQaWNrUmVzdWx0IHJlc3VsdCA9IGdpdC5jaGVycnlQaWNrKCkKKwkJCQkJLmluY2x1ZGUoc2lkZUNvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5PVVJTKQorCQkJCQkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKENoZXJyeVBpY2tTdGF0dXMuT0ssIHJlc3VsdC5nZXRTdGF0dXMoKSk7CisKKwkJCVN0cmluZyBleHBlY3RlZCA9ICJhKG1hc3RlcikiOworCQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksIGV4cGVjdGVkKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENoZXJyeVBpY2tUaGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZUNoZXJyeVBpY2soZ2l0KTsKKworCQkJQ2hlcnJ5UGlja1Jlc3VsdCByZXN1bHQgPSBnaXQuY2hlcnJ5UGljaygpCisJCQkJCS5pbmNsdWRlKHNpZGVDb21taXQuZ2V0SWQoKSkKKwkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuVEhFSVJTKQorCQkJCQkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKENoZXJyeVBpY2tTdGF0dXMuT0ssIHJlc3VsdC5nZXRTdGF0dXMoKSk7CisKKwkJCVN0cmluZyBleHBlY3RlZCA9ICJhKHNpZGUpIjsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCBleHBlY3RlZCk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrWG91cnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCVJldkNvbW1pdCBzaWRlQ29tbWl0ID0gcHJlcGFyZUNoZXJyeVBpY2tTdHJhdGVneU9wdGlvbihnaXQpOworCisJCQlDaGVycnlQaWNrUmVzdWx0IHJlc3VsdCA9IGdpdC5jaGVycnlQaWNrKCkKKwkJCQkJLmluY2x1ZGUoc2lkZUNvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kuT1VSUykKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhDaGVycnlQaWNrU3RhdHVzLk9LLCByZXN1bHQuZ2V0U3RhdHVzKCkpOworCisJCQlTdHJpbmcgZXhwZWN0ZWQgPSAiYVxubWFzdGVyXG5jXG5kXG4iOworCQkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIiksIGV4cGVjdGVkKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENoZXJyeVBpY2tYdGhlaXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IHByZXBhcmVDaGVycnlQaWNrU3RyYXRlZ3lPcHRpb24oZ2l0KTsKKworCQkJQ2hlcnJ5UGlja1Jlc3VsdCByZXN1bHQgPSBnaXQuY2hlcnJ5UGljaygpCisJCQkJCS5pbmNsdWRlKHNpZGVDb21taXQuZ2V0SWQoKSkKKwkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KENvbnRlbnRNZXJnZVN0cmF0ZWd5LlRIRUlSUykKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhDaGVycnlQaWNrU3RhdHVzLk9LLCByZXN1bHQuZ2V0U3RhdHVzKCkpOworCisJCQlTdHJpbmcgZXhwZWN0ZWQgPSAiYVxuc2lkZVxuY1xuZFxuIjsKKwkJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLCBleHBlY3RlZCk7CisJCX0KKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RDaGVycnlQaWNrQ29uZmxpY3RNYXJrZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CiAJCQlSZXZDb21taXQgc2lkZUNvbW1pdCA9IHByZXBhcmVDaGVycnlQaWNrKGdpdCk7CkBAIC0zODQsNiArNDUwLDMxIEBACiAJCXJldHVybiBzaWRlQ29tbWl0OwogCX0KIAorCXByaXZhdGUgUmV2Q29tbWl0IHByZXBhcmVDaGVycnlQaWNrU3RyYXRlZ3lPcHRpb24oR2l0IGdpdCkKKwkJCXRocm93cyBFeGNlcHRpb24geworCQkvLyBjcmVhdGUsIGFkZCBhbmQgY29tbWl0IGZpbGUgYQorCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJhXG5iXG5jXG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQlSZXZDb21taXQgZmlyc3RNYXN0ZXJDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZmlyc3QgbWFzdGVyIikKKwkJCQkuY2FsbCgpOworCisJCS8vIGNyZWF0ZSBhbmQgY2hlY2tvdXQgc2lkZSBicmFuY2gKKwkJY3JlYXRlQnJhbmNoKGZpcnN0TWFzdGVyQ29tbWl0LCAicmVmcy9oZWFkcy9zaWRlIik7CisJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJLy8gbW9kaWZ5LCBhZGQgYW5kIGNvbW1pdCBmaWxlIGEKKwkJd3JpdGVUcmFzaEZpbGUoImEiLCAiYVxuc2lkZVxuY1xuZFxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2lkZSIpLmNhbGwoKTsKKworCQkvLyBjaGVja291dCBtYXN0ZXIgYnJhbmNoCisJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOworCQkvLyBtb2RpZnksIGFkZCBhbmQgY29tbWl0IGZpbGUgYQorCQl3cml0ZVRyYXNoRmlsZSgiYSIsICJhXG5tYXN0ZXJcbmNcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzZWNvbmQgbWFzdGVyIikuY2FsbCgpOworCQlyZXR1cm4gc2lkZUNvbW1pdDsKKwl9CisKIAlwcml2YXRlIHZvaWQgZG9DaGVycnlQaWNrQW5kQ2hlY2tSZXN1bHQoZmluYWwgR2l0IGdpdCwKIAkJCWZpbmFsIFJldkNvbW1pdCBzaWRlQ29tbWl0LCBmaW5hbCBNZXJnZUZhaWx1cmVSZWFzb24gcmVhc29uKQogCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kVGVzdC5qYXZhCmluZGV4IDg3NDdjODUuLmJjNGU5NDAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kVGVzdC5qYXZhCkBAIC0xNCw2ICsxNCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX0hFQURTOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwpAQCAtMjUsNiArMjYsNyBAQAogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuTWVyZ2VDb21tYW5kLkZhc3RGb3J3YXJkTW9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5NZXJnZVJlc3VsdC5NZXJnZVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5SZXNldENvbW1hbmQuUmVzZXRUeXBlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5JbnZhbGlkTWVyZ2VIZWFkc0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlJlcG9zaXRvcnlUZXN0Q2FzZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlRlc3RSZXBvc2l0b3J5OwpAQCAtMzQsNiArMzYsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeVN0YXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlNldHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5Db250ZW50TWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyLk1lcmdlRmFpbHVyZVJlYXNvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwpAQCAtMzA2LDYgKzMwOSwyMDAgQEAKIAl9CiAKIAlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50TWVyZ2VYdGhlaXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICIxXG5hXG4zXG4iKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJiIiwgIjFcbmJcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImMvYy9jIiwgIjFcbmNcbjNcbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuYWRkRmlsZXBhdHRlcm4oImIiKQorCQkJCQkuYWRkRmlsZXBhdHRlcm4oImMvYy9jIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShzaWRlKVxuM1xuNFxuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICIxXG5iKHNpZGUpXG4zXG40XG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQlhc3NlcnRFcXVhbHMoIjFcbmIoc2lkZSlcbjNcbjRcbiIsCisJCQkJCXJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImIiKSkpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCQlhc3NlcnRFcXVhbHMoIjFcbmJcbjNcbiIsIHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImIiKSkpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICIxXG5hKG1haW4pXG4zXG4iKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJjL2MvYyIsICIxXG5jKG1haW4pXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJjL2MvYyIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5SRVNPTFZFKQorCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kuVEhFSVJTKQorCQkJCQkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLk1FUkdFRCwgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQlhc3NlcnRFcXVhbHMoIjFcbmEoc2lkZSlcbjNcbjRcbiIsCisJCQkJCXJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSkpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5iKHNpZGUpXG4zXG40XG4iLAorCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYyhtYWluKVxuM1xuIiwKKwkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYy9jL2MiKSkpOworCisJCQlhc3NlcnROdWxsKHJlc3VsdC5nZXRDb25mbGljdHMoKSk7CisKKwkJCWFzc2VydEVxdWFscyhSZXBvc2l0b3J5U3RhdGUuU0FGRSwgZGIuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudE1lcmdlWG91cnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmFcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiMVxuYlxuM1xuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYy9jL2MiLCAiMVxuY1xuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYiIpCisJCQkJCS5hZGRGaWxlcGF0dGVybigiYy9jL2MiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgaW5pdGlhbENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIikuY2FsbCgpOworCisJCQljcmVhdGVCcmFuY2goaW5pdGlhbENvbW1pdCwgInJlZnMvaGVhZHMvc2lkZSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICIxXG5hKHNpZGUpXG4zXG40XG4iKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJiIiwgIjFcbmIoc2lkZSlcbjNcbjRcbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuYWRkRmlsZXBhdHRlcm4oImIiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNpZGUiKS5jYWxsKCk7CisKKwkJCWFzc2VydEVxdWFscygiMVxuYihzaWRlKVxuM1xuNFxuIiwKKwkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKSk7CisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYlxuM1xuIiwgcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKSk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmEobWFpbilcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImMvYy9jIiwgIjFcbmMobWFpbilcbjNcbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuYWRkRmlsZXBhdHRlcm4oImMvYy9jIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIm1haW4iKS5jYWxsKCk7CisKKwkJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoc2Vjb25kQ29tbWl0LmdldElkKCkpCisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlJFU09MVkUpCisJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneS5PVVJTKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuTUVSR0VELCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisKKwkJCWFzc2VydEVxdWFscygiMVxuYShtYWluKVxuM1xuNFxuIiwKKwkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CisJCQlhc3NlcnRFcXVhbHMoIjFcbmIoc2lkZSlcbjNcbjRcbiIsCisJCQkJCXJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImIiKSkpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5jKG1haW4pXG4zXG4iLAorCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJjL2MvYyIpKSk7CisKKwkJCWFzc2VydE51bGwocmVzdWx0LmdldENvbmZsaWN0cygpKTsKKworCQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RCaW5hcnlDb250ZW50TWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJhIGJpbmFyeSIpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiaW5pdGlhbCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAic2lkZSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAibWFpbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIm1haW4iKS5jYWxsKCk7CisKKwkJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoc2Vjb25kQ29tbWl0LmdldElkKCkpCisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlJFU09MVkUpLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5DT05GTElDVElORywgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQlhc3NlcnRFcXVhbHMoIm1haW4iLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKKworCQkJLy8gSG1tbS4uLiB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSB3YXkgdG8gZmlndXJlIG91dCB3aGljaCBmaWxlcworCQkJLy8gaGFkIGEgYmluYXJ5IGNvbmZsaWN0IGZyb20gYSBNZXJnZVJlc3VsdC4uLgorCisJCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLk1FUkdJTkcsIGRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJpbmFyeUNvbnRlbnRNZXJnZVh0aGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJhIGJpbmFyeSIpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiaW5pdGlhbCIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAic2lkZSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9tYXN0ZXIiKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAibWFpbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIm1haW4iKS5jYWxsKCk7CisKKwkJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoc2Vjb25kQ29tbWl0LmdldElkKCkpCisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlJFU09MVkUpCisJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneS5USEVJUlMpCisJCQkJCS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuTUVSR0VELCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisKKwkJCWFzc2VydEVxdWFscygic2lkZSIsIHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSkpOworCisJCQlhc3NlcnROdWxsKHJlc3VsdC5nZXRDb25mbGljdHMoKSk7CisJCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsIGRiLmdldFJlcG9zaXRvcnlTdGF0ZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJpbmFyeUNvbnRlbnRNZXJnZVhvdXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiLmdpdGF0dHJpYnV0ZXMiLCAiYSBiaW5hcnkiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgImluaXRpYWwiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCWNyZWF0ZUJyYW5jaChpbml0aWFsQ29tbWl0LCAicmVmcy9oZWFkcy9zaWRlIik7CisJCQljaGVja291dEJyYW5jaCgicmVmcy9oZWFkcy9zaWRlIik7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgInNpZGUiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBzZWNvbmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgic2lkZSIpLmNhbGwoKTsKKworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIm1haW4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5SRVNPTFZFKQorCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kuT1VSUykuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLk1FUkdFRCwgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQlhc3NlcnRFcXVhbHMoIm1haW4iLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKKworCQkJYXNzZXJ0TnVsbChyZXN1bHQuZ2V0Q29uZmxpY3RzKCkpOworCQkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCX0KKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RNZXJnZVRhZygpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgewogCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiYSIpOwpAQCAtNzkwLDE3ICs5ODcsOTYgQEAKIAkJCS8vIGRlbGV0ZSBhIG9uIG1hc3RlciB0byBnZW5lcmF0ZSBjb25mbGljdAogCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CiAJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCB0aGlyZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQlmb3IgKENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneSA6IENvbnRlbnRNZXJnZVN0cmF0ZWd5CisJCQkJCS52YWx1ZXMoKSkgeworCQkJCS8vIG1lcmdlIHNpZGUgd2l0aCBtYXN0ZXIKKwkJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkKKwkJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpCisJCQkJCQkuY2FsbCgpOworCQkJCWFzc2VydEVxdWFscygibWVyZ2UgLVggIiArIGNvbnRlbnRTdHJhdGVneS5uYW1lKCksCisJCQkJCQlNZXJnZVN0YXR1cy5DT05GTElDVElORywgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQkJLy8gcmVzdWx0IHNob3VsZCBiZSAnYScgY29uZmxpY3Rpbmcgd2l0aCB3b3Jrc3BhY2UgY29udGVudCBmcm9tCisJCQkJLy8gc2lkZQorCQkJCWFzc2VydFRydWUoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKS5leGlzdHMoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwKKwkJCQkJCSIxXG5hKHNpZGUpXG4zXG4iLAorCQkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwgIjFcbmJcbjNcbiIsCisJCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKwkJCQlnaXQucmVzZXQoKS5zZXRNb2RlKFJlc2V0VHlwZS5IQVJEKS5zZXRSZWYodGhpcmRDb21taXQubmFtZSgpKQorCQkJCQkJLmNhbGwoKTsKKwkJCX0KKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0aW9uT25NYXN0ZXJUaGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmFcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiMVxuYlxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCS8vIGNyZWF0ZSBzaWRlIGJyYW5jaCBhbmQgbW9kaWZ5ICJhIgorCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmEoc2lkZSlcbjNcbiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQkvLyBkZWxldGUgYSBvbiBtYXN0ZXIgdG8gZ2VuZXJhdGUgY29uZmxpY3QKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOworCQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CiAJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKIAogCQkJLy8gbWVyZ2Ugc2lkZSB3aXRoIG1hc3RlcgogCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKLQkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkuY2FsbCgpOwotCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlRIRUlSUykKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhNZXJnZVN0YXR1cy5NRVJHRUQsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKIAotCQkJLy8gcmVzdWx0IHNob3VsZCBiZSAnYScgY29uZmxpY3Rpbmcgd2l0aCB3b3Jrc3BhY2UgY29udGVudCBmcm9tIHNpZGUKKwkJCS8vIHJlc3VsdCBzaG91bGQgYmUgJ2EnCiAJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikuZXhpc3RzKCkpOwotCQkJYXNzZXJ0RXF1YWxzKCIxXG5hKHNpZGUpXG4zXG4iLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYShzaWRlKVxuM1xuIiwKKwkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CiAJCQlhc3NlcnRFcXVhbHMoIjFcbmJcbjNcbiIsIHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImIiKSkpOworCQkJYXNzZXJ0VHJ1ZShnaXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REZWxldGlvbk9uTWFzdGVyT3VycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYVxuM1xuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICIxXG5iXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJLy8gY3JlYXRlIHNpZGUgYnJhbmNoIGFuZCBtb2RpZnkgImEiCisJCQljcmVhdGVCcmFuY2goaW5pdGlhbENvbW1pdCwgInJlZnMvaGVhZHMvc2lkZSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShzaWRlKVxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNpZGUiKS5jYWxsKCk7CisKKwkJCS8vIGRlbGV0ZSBhIG9uIG1hc3RlciB0byBnZW5lcmF0ZSBjb25mbGljdAorCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCQlnaXQucm0oKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQkvLyBtZXJnZSBzaWRlIHdpdGggbWFzdGVyCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5PVVJTKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuTUVSR0VELCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisKKwkJCWFzc2VydEZhbHNlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikuZXhpc3RzKCkpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5iXG4zXG4iLCByZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKwkJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOwogCQl9CiAJfQogCkBAIC04MjIsMTkgKzEwOTgsOTkgQEAKIAkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOwogCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShtYWluKVxuM1xuIik7CiAJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgdGhpcmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKKworCQkJZm9yIChDb250ZW50TWVyZ2VTdHJhdGVneSBjb250ZW50U3RyYXRlZ3kgOiBDb250ZW50TWVyZ2VTdHJhdGVneQorCQkJCQkudmFsdWVzKCkpIHsKKwkJCQkvLyBtZXJnZSBzaWRlIHdpdGggbWFzdGVyCisJCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKKwkJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlJFU09MVkUpCisJCQkJCQkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koY29udGVudFN0cmF0ZWd5KQorCQkJCQkJLmNhbGwoKTsKKwkJCQlhc3NlcnRFcXVhbHMoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRNZXJnZVN0YXR1cygpKTsKKworCQkJCWFzc2VydFRydWUoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKS5leGlzdHMoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwKKwkJCQkJCSIxXG5hKG1haW4pXG4zXG4iLAorCQkJCQkJcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwgIjFcbmJcbjNcbiIsCisJCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJiIikpKTsKKworCQkJCWFzc2VydE5vdE51bGwoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLAorCQkJCQkJcmVzdWx0LmdldENvbmZsaWN0cygpKTsKKwkJCQlhc3NlcnRFcXVhbHMoIm1lcmdlIC1YICIgKyBjb250ZW50U3RyYXRlZ3kubmFtZSgpLCAxLAorCQkJCQkJcmVzdWx0LmdldENvbmZsaWN0cygpLnNpemUoKSk7CisJCQkJYXNzZXJ0RXF1YWxzKCJtZXJnZSAtWCAiICsgY29udGVudFN0cmF0ZWd5Lm5hbWUoKSwgMywKKwkJCQkJCXJlc3VsdC5nZXRDb25mbGljdHMoKS5nZXQoImEiKVswXS5sZW5ndGgpOworCQkJCWdpdC5yZXNldCgpLnNldE1vZGUoUmVzZXRUeXBlLkhBUkQpLnNldFJlZih0aGlyZENvbW1pdC5uYW1lKCkpCisJCQkJCQkuY2FsbCgpOworCQkJfQorCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRpb25PblNpZGVUaGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJhIiwgIjFcbmFcbjNcbiIpOworCQkJd3JpdGVUcmFzaEZpbGUoImIiLCAiMVxuYlxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBpbml0aWFsQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImluaXRpYWwiKS5jYWxsKCk7CisKKwkJCS8vIGNyZWF0ZSBzaWRlIGJyYW5jaCBhbmQgZGVsZXRlICJhIgorCQkJY3JlYXRlQnJhbmNoKGluaXRpYWxDb21taXQsICJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL3NpZGUiKTsKKwkJCWdpdC5ybSgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IHNlY29uZENvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJzaWRlIikuY2FsbCgpOworCisJCQkvLyB1cGRhdGUgYSBvbiBtYXN0ZXIgdG8gZ2VuZXJhdGUgY29uZmxpY3QKKwkJCWNoZWNrb3V0QnJhbmNoKCJyZWZzL2hlYWRzL21hc3RlciIpOworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYShtYWluKVxuM1xuIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CiAJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibWFpbiIpLmNhbGwoKTsKIAogCQkJLy8gbWVyZ2Ugc2lkZSB3aXRoIG1hc3RlcgogCQkJTWVyZ2VSZXN1bHQgcmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShzZWNvbmRDb21taXQuZ2V0SWQoKSkKLQkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkuY2FsbCgpOwotCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLkNPTkZMSUNUSU5HLCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisJCQkJCS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlRIRUlSUykuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKE1lcmdlU3RhdHVzLk1FUkdFRCwgcmVzdWx0LmdldE1lcmdlU3RhdHVzKCkpOworCisJCQlhc3NlcnRGYWxzZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYSIpLmV4aXN0cygpKTsKKwkJCWFzc2VydEVxdWFscygiMVxuYlxuM1xuIiwgcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKSk7CisJCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0aW9uT25TaWRlT3VycygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImEiLCAiMVxuYVxuM1xuIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICIxXG5iXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmFkZEZpbGVwYXR0ZXJuKCJiIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGluaXRpYWxDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiaW5pdGlhbCIpLmNhbGwoKTsKKworCQkJLy8gY3JlYXRlIHNpZGUgYnJhbmNoIGFuZCBkZWxldGUgImEiCisJCQljcmVhdGVCcmFuY2goaW5pdGlhbENvbW1pdCwgInJlZnMvaGVhZHMvc2lkZSIpOworCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvc2lkZSIpOworCQkJZ2l0LnJtKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgc2Vjb25kQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoInNpZGUiKS5jYWxsKCk7CisKKwkJCS8vIHVwZGF0ZSBhIG9uIG1hc3RlciB0byBnZW5lcmF0ZSBjb25mbGljdAorCQkJY2hlY2tvdXRCcmFuY2goInJlZnMvaGVhZHMvbWFzdGVyIik7CisJCQl3cml0ZVRyYXNoRmlsZSgiYSIsICIxXG5hKG1haW4pXG4zXG4iKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtYWluIikuY2FsbCgpOworCisJCQkvLyBtZXJnZSBzaWRlIHdpdGggbWFzdGVyCisJCQlNZXJnZVJlc3VsdCByZXN1bHQgPSBnaXQubWVyZ2UoKS5pbmNsdWRlKHNlY29uZENvbW1pdC5nZXRJZCgpKQorCQkJCQkuc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneS5PVVJTKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoTWVyZ2VTdGF0dXMuTUVSR0VELCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CiAKIAkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKS5leGlzdHMoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIjFcbmEobWFpbilcbjNcbiIsIHJlYWQobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSkpOworCQkJYXNzZXJ0RXF1YWxzKCIxXG5hKG1haW4pXG4zXG4iLAorCQkJCQlyZWFkKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJhIikpKTsKIAkJCWFzc2VydEVxdWFscygiMVxuYlxuM1xuIiwgcmVhZChuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiYiIpKSk7Ci0KLQkJCWFzc2VydEVxdWFscygxLCByZXN1bHQuZ2V0Q29uZmxpY3RzKCkuc2l6ZSgpKTsKLQkJCWFzc2VydEVxdWFscygzLCByZXN1bHQuZ2V0Q29uZmxpY3RzKCkuZ2V0KCJhIilbMF0ubGVuZ3RoKTsKKwkJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFRlc3QuamF2YQppbmRleCBlNGFmNDRlLi45YWY3N2FhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRUZXN0LmphdmEKQEAgLTM0LDYgKzM0LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnlTdGF0ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5TdG9yZWRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5Db250ZW50TWVyZ2VTdHJhdGVneTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2U29ydDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKQEAgLTE1NCw2ICsxNTYsNzUgQEAKIAl9CiAKIAlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQdWxsQ29uZmxpY3RUaGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUHVsbFJlc3VsdCByZXMgPSB0YXJnZXQucHVsbCgpLmNhbGwoKTsKKwkJLy8gbm90aGluZyB0byB1cGRhdGUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBkaWZmZXJlbnQgZGF0YSB5ZXQKKwkJYXNzZXJ0VHJ1ZShyZXMuZ2V0RmV0Y2hSZXN1bHQoKS5nZXRUcmFja2luZ1JlZlVwZGF0ZXMoKS5pc0VtcHR5KCkpOworCQlhc3NlcnRUcnVlKHJlcy5nZXRNZXJnZVJlc3VsdCgpLmdldE1lcmdlU3RhdHVzKCkKKwkJCQkuZXF1YWxzKE1lcmdlU3RhdHVzLkFMUkVBRFlfVVBfVE9fREFURSkpOworCisJCWFzc2VydEZpbGVDb250ZW50c0VxdWFsKHRhcmdldEZpbGUsICJIZWxsbyB3b3JsZCIpOworCisJCS8vIGNoYW5nZSB0aGUgc291cmNlIGZpbGUKKwkJd3JpdGVUb0ZpbGUoc291cmNlRmlsZSwgIlNvdXJjZSBjaGFuZ2UiKTsKKwkJc291cmNlLmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJTb21lRmlsZS50eHQiKS5jYWxsKCk7CisJCXNvdXJjZS5jb21taXQoKS5zZXRNZXNzYWdlKCJTb3VyY2UgY2hhbmdlIGluIHJlbW90ZSIpLmNhbGwoKTsKKworCQkvLyBjaGFuZ2UgdGhlIHRhcmdldCBmaWxlCisJCXdyaXRlVG9GaWxlKHRhcmdldEZpbGUsICJUYXJnZXQgY2hhbmdlIik7CisJCXRhcmdldC5hZGQoKS5hZGRGaWxlcGF0dGVybigiU29tZUZpbGUudHh0IikuY2FsbCgpOworCQl0YXJnZXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiVGFyZ2V0IGNoYW5nZSBpbiBsb2NhbCIpLmNhbGwoKTsKKworCQlyZXMgPSB0YXJnZXQucHVsbCgpLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuVEhFSVJTKS5jYWxsKCk7CisKKwkJYXNzZXJ0VHJ1ZShyZXMuaXNTdWNjZXNzZnVsKCkpOworCQlhc3NlcnRGaWxlQ29udGVudHNFcXVhbCh0YXJnZXRGaWxlLCAiU291cmNlIGNoYW5nZSIpOworCQlhc3NlcnRFcXVhbHMoUmVwb3NpdG9yeVN0YXRlLlNBRkUsCisJCQkJdGFyZ2V0LmdldFJlcG9zaXRvcnkoKS5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CisJCWFzc2VydFRydWUodGFyZ2V0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1bGxDb25mbGljdFh0aGVpcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUHVsbFJlc3VsdCByZXMgPSB0YXJnZXQucHVsbCgpLmNhbGwoKTsKKwkJLy8gbm90aGluZyB0byB1cGRhdGUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBkaWZmZXJlbnQgZGF0YSB5ZXQKKwkJYXNzZXJ0VHJ1ZShyZXMuZ2V0RmV0Y2hSZXN1bHQoKS5nZXRUcmFja2luZ1JlZlVwZGF0ZXMoKS5pc0VtcHR5KCkpOworCQlhc3NlcnRUcnVlKHJlcy5nZXRNZXJnZVJlc3VsdCgpLmdldE1lcmdlU3RhdHVzKCkKKwkJCQkuZXF1YWxzKE1lcmdlU3RhdHVzLkFMUkVBRFlfVVBfVE9fREFURSkpOworCisJCWFzc2VydEZpbGVDb250ZW50c0VxdWFsKHRhcmdldEZpbGUsICJIZWxsbyB3b3JsZCIpOworCisJCS8vIGNoYW5nZSB0aGUgc291cmNlIGZpbGUKKwkJd3JpdGVUb0ZpbGUoc291cmNlRmlsZSwgImFcbkhlbGxvXG5iXG4iKTsKKwkJc291cmNlLmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJTb21lRmlsZS50eHQiKS5jYWxsKCk7CisJCXNvdXJjZS5jb21taXQoKS5zZXRNZXNzYWdlKCJNdWx0aS1saW5lIGNoYW5nZSBpbiByZW1vdGUiKS5jYWxsKCk7CisKKwkJLy8gUHVsbCBhZ2FpbgorCQlyZXMgPSB0YXJnZXQucHVsbCgpLmNhbGwoKTsKKwkJYXNzZXJ0VHJ1ZShyZXMuaXNTdWNjZXNzZnVsKCkpOworCQlhc3NlcnRGaWxlQ29udGVudHNFcXVhbCh0YXJnZXRGaWxlLCAiYVxuSGVsbG9cbmJcbiIpOworCisJCS8vIGNoYW5nZSB0aGUgc291cmNlIGZpbGUKKwkJd3JpdGVUb0ZpbGUoc291cmNlRmlsZSwgImFcblNvdXJjZSBjaGFuZ2VcbmJcbiIpOworCQlzb3VyY2UuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIlNvbWVGaWxlLnR4dCIpLmNhbGwoKTsKKwkJc291cmNlLmNvbW1pdCgpLnNldE1lc3NhZ2UoIlNvdXJjZSBjaGFuZ2UgaW4gcmVtb3RlIikuY2FsbCgpOworCisJCS8vIGNoYW5nZSB0aGUgdGFyZ2V0IGZpbGUKKwkJd3JpdGVUb0ZpbGUodGFyZ2V0RmlsZSwgImFcblRhcmdldCBjaGFuZ2VcbmJcbmNcbiIpOworCQl0YXJnZXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIlNvbWVGaWxlLnR4dCIpLmNhbGwoKTsKKwkJdGFyZ2V0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIlRhcmdldCBjaGFuZ2UgaW4gbG9jYWwiKS5jYWxsKCk7CisKKwkJcmVzID0gdGFyZ2V0LnB1bGwoKS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneS5USEVJUlMpCisJCQkJLmNhbGwoKTsKKworCQlhc3NlcnRUcnVlKHJlcy5pc1N1Y2Nlc3NmdWwoKSk7CisJCWFzc2VydEZpbGVDb250ZW50c0VxdWFsKHRhcmdldEZpbGUsICJhXG5Tb3VyY2UgY2hhbmdlXG5iXG5jXG4iKTsKKwkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLAorCQkJCXRhcmdldC5nZXRSZXBvc2l0b3J5KCkuZ2V0UmVwb3NpdG9yeVN0YXRlKCkpOworCQlhc3NlcnRUcnVlKHRhcmdldC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RQdWxsV2l0aFVudHJhY2tlZFN0YXNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXRhcmdldC5wdWxsKCkuY2FsbCgpOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEKaW5kZXggNTdjODk5MS4uY2ZhODQ4NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZFRlc3QuamF2YQpAQCAtMjUzLDcgKzI1Myw3IEBACiAJfQogCiAJQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0UmV2ZXJ0a0NvbmZsaWN0UmVzZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwlwdWJsaWMgdm9pZCB0ZXN0UmV2ZXJ0Q29uZmxpY3RSZXNldCgpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgewogCQkJUmV2Q29tbWl0IHNpZGVDb21taXQgPSBwcmVwYXJlUmV2ZXJ0KGdpdCk7CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3Rhc2hBcHBseUNvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQXBwbHlDb21tYW5kVGVzdC5qYXZhCmluZGV4IGYxMDljYmYuLjQ5YjMxYjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3Rhc2hBcHBseUNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaEFwcGx5Q29tbWFuZFRlc3QuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdpdEh1YiBJbmMuIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAyMSBHaXRIdWIgSW5jLiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yOCw2ICsyOCw4IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GaWxlVXRpbHM7CiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyOwpAQCAtNDI3LDYgKzQyOSwxMzUgQEAKIAl9CiAKIAlAVGVzdAorCXB1YmxpYyB2b2lkIHN0YXNoZWRDb250ZW50TWVyZ2VYdGhlaXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5tb3JlIGNvbnRlbnRcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgibW9yZSBjb250ZW50IikuY2FsbCgpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5oZWFkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKFBBVEgpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImV2ZW4gY29udGVudCIpLmNhbGwoKTsKKworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxuc3Rhc2hlZCBjaGFuZ2Vcbm1vcmUgY29udGVudFxuIik7CisKKwkJUmV2Q29tbWl0IHN0YXNoZWQgPSBnaXQuc3Rhc2hDcmVhdGUoKS5jYWxsKCk7CisJCWFzc2VydE5vdE51bGwoc3Rhc2hlZCk7CisJCWFzc2VydEVxdWFscygiY29udGVudFxuaGVhZCBjaGFuZ2Vcbm1vcmUgY29udGVudFxuIiwKKwkJCQlyZWFkKGNvbW1pdHRlZEZpbGUpKTsKKwkJYXNzZXJ0VHJ1ZShnaXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5tb3JlIGNvbnRlbnRcbmNvbW1pdHRlZCBjaGFuZ2VcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiY29tbWl0dGVkIGNoYW5nZSIpLmNhbGwoKTsKKwkJcmVjb3JkZXIuYXNzZXJ0Tm9FdmVudCgpOworCisJCWdpdC5zdGFzaEFwcGx5KCkuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kuVEhFSVJTKQorCQkJCS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCQlTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1c0NvbW1hbmQoZGIpLmNhbGwoKTsKKwkJYXNzZXJ0RXF1YWxzKCdbJyArIFBBVEggKyAnXScsIHN0YXR1cy5nZXRNb2RpZmllZCgpLnRvU3RyaW5nKCkpOworCQlhc3NlcnRFcXVhbHMoCisJCQkJImNvbnRlbnRcbnN0YXNoZWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbmNvbW1pdHRlZCBjaGFuZ2VcbiIsCisJCQkJcmVhZChQQVRIKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBzdGFzaGVkQ29udGVudE1lcmdlWG91cnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbm1vcmUgY29udGVudFxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtb3JlIGNvbnRlbnQiKS5jYWxsKCk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbmhlYWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZXZlbiBjb250ZW50IikuY2FsbCgpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5zdGFzaGVkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iKTsKKworCQlSZXZDb21taXQgc3Rhc2hlZCA9IGdpdC5zdGFzaENyZWF0ZSgpLmNhbGwoKTsKKwkJYXNzZXJ0Tm90TnVsbChzdGFzaGVkKTsKKwkJYXNzZXJ0RXF1YWxzKCJjb250ZW50XG5oZWFkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iLAorCQkJCXJlYWQoY29tbWl0dGVkRmlsZSkpOworCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJcmVjb3JkZXIuYXNzZXJ0RXZlbnQobmV3IFN0cmluZ1tdIHsgUEFUSCB9LCBDaGFuZ2VSZWNvcmRlci5FTVBUWSk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwKKwkJCQkiY29udGVudFxubmV3IGhlYWRcbm1vcmUgY29udGVudFxuY29tbWl0dGVkIGNoYW5nZVxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXR0ZWQgY2hhbmdlIikuY2FsbCgpOworCQlyZWNvcmRlci5hc3NlcnROb0V2ZW50KCk7CisKKwkJZ2l0LnN0YXNoQXBwbHkoKS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneS5PVVJTKQorCQkJCS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJYXNzZXJ0RXF1YWxzKCJjb250ZW50XG5uZXcgaGVhZFxubW9yZSBjb250ZW50XG5jb21taXR0ZWQgY2hhbmdlXG4iLAorCQkJCXJlYWQoUEFUSCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgc3Rhc2hlZENvbnRlbnRNZXJnZVRoZWlycygpIHRocm93cyBFeGNlcHRpb24geworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxubW9yZSBjb250ZW50XG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKFBBVEgpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIm1vcmUgY29udGVudCIpLmNhbGwoKTsKKworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxuaGVhZCBjaGFuZ2Vcbm1vcmUgY29udGVudFxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJldmVuIGNvbnRlbnQiKS5jYWxsKCk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbnN0YXNoZWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIpOworCisJCVJldkNvbW1pdCBzdGFzaGVkID0gZ2l0LnN0YXNoQ3JlYXRlKCkuY2FsbCgpOworCQlhc3NlcnROb3ROdWxsKHN0YXNoZWQpOworCQlhc3NlcnRFcXVhbHMoImNvbnRlbnRcbmhlYWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIsCisJCQkJcmVhZChjb21taXR0ZWRGaWxlKSk7CisJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCQlyZWNvcmRlci5hc3NlcnRFdmVudChuZXcgU3RyaW5nW10geyBQQVRIIH0sIENoYW5nZVJlY29yZGVyLkVNUFRZKTsKKworCQl3cml0ZVRyYXNoRmlsZShQQVRILCAiY29udGVudFxubW9yZSBjb250ZW50XG5jb21taXR0ZWQgY2hhbmdlXG4iKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKFBBVEgpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImNvbW1pdHRlZCBjaGFuZ2UiKS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydE5vRXZlbnQoKTsKKworCQlnaXQuc3Rhc2hBcHBseSgpLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuVEhFSVJTKS5jYWxsKCk7CisJCXJlY29yZGVyLmFzc2VydEV2ZW50KG5ldyBTdHJpbmdbXSB7IFBBVEggfSwgQ2hhbmdlUmVjb3JkZXIuRU1QVFkpOworCQlTdGF0dXMgc3RhdHVzID0gbmV3IFN0YXR1c0NvbW1hbmQoZGIpLmNhbGwoKTsKKwkJYXNzZXJ0RXF1YWxzKCdbJyArIFBBVEggKyAnXScsIHN0YXR1cy5nZXRNb2RpZmllZCgpLnRvU3RyaW5nKCkpOworCQlhc3NlcnRFcXVhbHMoImNvbnRlbnRcbnN0YXNoZWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIsIHJlYWQoUEFUSCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgc3Rhc2hlZENvbnRlbnRNZXJnZU91cnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbm1vcmUgY29udGVudFxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJtb3JlIGNvbnRlbnQiKS5jYWxsKCk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbmhlYWQgY2hhbmdlXG5tb3JlIGNvbnRlbnRcbiIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiZXZlbiBjb250ZW50IikuY2FsbCgpOworCisJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5zdGFzaGVkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iKTsKKworCQlSZXZDb21taXQgc3Rhc2hlZCA9IGdpdC5zdGFzaENyZWF0ZSgpLmNhbGwoKTsKKwkJYXNzZXJ0Tm90TnVsbChzdGFzaGVkKTsKKwkJYXNzZXJ0RXF1YWxzKCJjb250ZW50XG5oZWFkIGNoYW5nZVxubW9yZSBjb250ZW50XG4iLAorCQkJCXJlYWQoY29tbWl0dGVkRmlsZSkpOworCQlhc3NlcnRUcnVlKGdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJcmVjb3JkZXIuYXNzZXJ0RXZlbnQobmV3IFN0cmluZ1tdIHsgUEFUSCB9LCBDaGFuZ2VSZWNvcmRlci5FTVBUWSk7CisKKwkJd3JpdGVUcmFzaEZpbGUoUEFUSCwgImNvbnRlbnRcbm1vcmUgY29udGVudFxuY29tbWl0dGVkIGNoYW5nZVxuIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihQQVRIKS5jYWxsKCk7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJjb21taXR0ZWQgY2hhbmdlIikuY2FsbCgpOworCQlyZWNvcmRlci5hc3NlcnROb0V2ZW50KCk7CisKKwkJLy8gRG9lc24ndCBtYWtlIGFueSBzZW5zZS4uLiBzaG91bGQgYmUgYSBuby1vcAorCQlnaXQuc3Rhc2hBcHBseSgpLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuT1VSUykuY2FsbCgpOworCQlyZWNvcmRlci5hc3NlcnROb0V2ZW50KCk7CisJCWFzc2VydFRydWUoZ2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCQlhc3NlcnRFcXVhbHMoImNvbnRlbnRcbm1vcmUgY29udGVudFxuY29tbWl0dGVkIGNoYW5nZVxuIiwgcmVhZChQQVRIKSk7CisJfQorCisJQFRlc3QKIAlwdWJsaWMgdm9pZCBzdGFzaGVkQXBwbHlPbk90aGVyQnJhbmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXdyaXRlVHJhc2hGaWxlKFBBVEgsICJjb250ZW50XG5tb3JlIGNvbnRlbnRcbiIpOwogCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oUEFUSCkuY2FsbCgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmVuYW1lRGV0ZWN0b3JUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SZW5hbWVEZXRlY3RvclRlc3QuamF2YQppbmRleCA2MjAzZmVkLi41ZWRiNjBjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SZW5hbWVEZXRlY3RvclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SZW5hbWVEZXRlY3RvclRlc3QuamF2YQpAQCAtNTQzLDYgKzU0Myw5NCBAQAogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4YWN0UmVuYW1lX0xhcmdlRmlsZSgpIHRocm93cyBFeGNlcHRpb24geworCQlPYmplY3RJZCBhSWQgPSBibG9iKCJibGFoXG5ibGFoXG5mb28iKTsgLy8gc2l6ZSA9IDE0CisKKwkJRGlmZkVudHJ5IGEgPSBEaWZmRW50cnkuYWRkKFBBVEhfQSwgYUlkKTsKKwkJRGlmZkVudHJ5IGIgPSBEaWZmRW50cnkuZGVsZXRlKFBBVEhfUSwgYUlkKTsKKworCQlyZC5hZGQoYSk7CisJCXJkLmFkZChiKTsKKworCQkvLyBFeGFjdCByZW5hbWVzIGFyZSBpZGVudGlmaWVkIGZvciBsYXJnZSBmaWxlcworCQlyZC5zZXRCaWdGaWxlVGhyZXNob2xkKDEwKTsKKwkJTGlzdDxEaWZmRW50cnk+IGVudHJpZXMgPSByZC5jb21wdXRlKCk7CisJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7CisJCWFzc2VydFJlbmFtZShiLCBhLCAxMDAsIGVudHJpZXMuZ2V0KDApKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJbmV4YWN0UmVuYW1lX0xhcmdlRmlsZSgpIHRocm93cyBFeGNlcHRpb24geworCQlPYmplY3RJZCBhSWQgPSBibG9iKCJibGFoXG5ibGFoXG5mb28iKTsgLy8gc2l6ZSA9IDE0CisJCU9iamVjdElkIGJJZCA9IGJsb2IoImJsYVxuYmxhaFxuZm9vIik7IC8vIHNpemUgPSAxMworCisJCURpZmZFbnRyeSBhID0gRGlmZkVudHJ5LmFkZChQQVRIX0EsIGFJZCk7CisJCURpZmZFbnRyeSBiID0gRGlmZkVudHJ5LmRlbGV0ZShQQVRIX1EsIGJJZCk7CisKKwkJcmQuYWRkKGEpOworCQlyZC5hZGQoYik7CisKKwkJcmQuc2V0QmlnRmlsZVRocmVzaG9sZCgxMCk7CisKKwkJLy8gSW5leGFjdCByZW5hbWVzIGFyZSBub3QgZGV0ZWN0ZWQgZm9yIGxhcmdlIGZpbGVzCisJCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gcmQuY29tcHV0ZSgpOworCQlhc3NlcnRFcXVhbHMoMiwgZW50cmllcy5zaXplKCkpOworCQlhc3NlcnRBZGQoUEFUSF9BLCBhSWQsIEZpbGVNb2RlLlJFR1VMQVJfRklMRSwgZW50cmllcy5nZXQoMCkpOworCQlhc3NlcnREZWxldGUoUEFUSF9RLCBiSWQsIEZpbGVNb2RlLlJFR1VMQVJfRklMRSwgZW50cmllcy5nZXQoMSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEV4YWN0UmVuYW1lRm9yQmluYXJ5RmlsZV9pc0lkZW50aWZpZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJT2JqZWN0SWQgYUlkID0gYmxvYigiYVxuYlxuY1xuXDBcMFwwXDBkXG4iKTsKKworCQlEaWZmRW50cnkgYSA9IERpZmZFbnRyeS5hZGQoUEFUSF9BLCBhSWQpOworCQlEaWZmRW50cnkgYiA9IERpZmZFbnRyeS5kZWxldGUoUEFUSF9RLCBhSWQpOworCisJCXJkLmFkZChhKTsKKwkJcmQuYWRkKGIpOworCisJCUxpc3Q8RGlmZkVudHJ5PiBlbnRyaWVzID0gcmQuY29tcHV0ZSgpOworCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOworCQlhc3NlcnRSZW5hbWUoYiwgYSwgMTAwLCBlbnRyaWVzLmdldCgwKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW5leGFjdFJlbmFtZUZvckJpbmFyeUZpbGVfaWRlbnRpZmllZEJ5RGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworCQlPYmplY3RJZCBhSWQgPSBibG9iKCJhXG5iXG5jXG5cMFwwXDBcMGRcbiIpOworCQlPYmplY3RJZCBiSWQgPSBibG9iKCJhXG5iXG5jXG5cMFwwXDBkXG4iKTsKKworCQlEaWZmRW50cnkgYSA9IERpZmZFbnRyeS5hZGQoUEFUSF9BLCBhSWQpOworCQlEaWZmRW50cnkgYiA9IERpZmZFbnRyeS5kZWxldGUoUEFUSF9RLCBiSWQpOworCisJCXJkLmFkZChhKTsKKwkJcmQuYWRkKGIpOworCQlyZC5zZXRSZW5hbWVTY29yZSg0MCk7CisKKwkJTGlzdDxEaWZmRW50cnk+IGVudHJpZXMgPSByZC5jb21wdXRlKCk7CisJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7CisJCWFzc2VydFJlbmFtZShiLCBhLCA1MCwgZW50cmllcy5nZXQoMCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEluZXhhY3RSZW5hbWVGb3JCaW5hcnlGaWxlX25vdElkZW50aWZpZWRJZlNraXBQYXJhbWV0ZXJTZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJT2JqZWN0SWQgYUlkID0gYmxvYigiYVxuYlxuY1xuXDBcMFwwXDBkXG4iKTsKKwkJT2JqZWN0SWQgYklkID0gYmxvYigiYVxuYlxuY1xuXDBcMFwwZFxuIik7CisKKwkJRGlmZkVudHJ5IGEgPSBEaWZmRW50cnkuYWRkKFBBVEhfQSwgYUlkKTsKKwkJRGlmZkVudHJ5IGIgPSBEaWZmRW50cnkuZGVsZXRlKFBBVEhfUSwgYklkKTsKKworCQlyZC5hZGQoYSk7CisJCXJkLmFkZChiKTsKKwkJcmQuc2V0UmVuYW1lU2NvcmUoNDApOworCQlyZC5zZXRTa2lwQ29udGVudFJlbmFtZXNGb3JCaW5hcnlGaWxlcyh0cnVlKTsKKworCQlMaXN0PERpZmZFbnRyeT4gZW50cmllcyA9IHJkLmNvbXB1dGUoKTsKKwkJYXNzZXJ0RXF1YWxzKDIsIGVudHJpZXMuc2l6ZSgpKTsKKwkJYXNzZXJ0QWRkKFBBVEhfQSwgYUlkLCBGaWxlTW9kZS5SRUdVTEFSX0ZJTEUsIGVudHJpZXMuZ2V0KDApKTsKKwkJYXNzZXJ0RGVsZXRlKFBBVEhfUSwgYklkLCBGaWxlTW9kZS5SRUdVTEFSX0ZJTEUsIGVudHJpZXMuZ2V0KDEpKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RTZXRSZW5hbWVTY29yZV9JbGxlZ2FsQXJncygpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgewogCQkJcmQuc2V0UmVuYW1lU2NvcmUoLTEpOwpAQCAtNjM0LDQgKzcyMiwxNSBAQAogCQlhc3NlcnRFcXVhbHMoQWJicmV2aWF0ZWRPYmplY3RJZC5mcm9tT2JqZWN0SWQobmV3SWQpLCBhZGQubmV3SWQpOwogCQlhc3NlcnRFcXVhbHMobmV3TW9kZSwgYWRkLm5ld01vZGUpOwogCX0KKworCXByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0RGVsZXRlKFN0cmluZyBvbGROYW1lLCBPYmplY3RJZCBvbGRJZCwKKwkJCUZpbGVNb2RlIG9sZE1vZGUsIERpZmZFbnRyeSBkZWxldGUpIHsKKwkJYXNzZXJ0RXF1YWxzKERpZmZFbnRyeS5ERVZfTlVMTCwgZGVsZXRlLm5ld1BhdGgpOworCQlhc3NlcnRFcXVhbHMoRGlmZkVudHJ5LkFfWkVSTywgZGVsZXRlLm5ld0lkKTsKKwkJYXNzZXJ0RXF1YWxzKEZpbGVNb2RlLk1JU1NJTkcsIGRlbGV0ZS5uZXdNb2RlKTsKKwkJYXNzZXJ0RXF1YWxzKENoYW5nZVR5cGUuREVMRVRFLCBkZWxldGUuY2hhbmdlVHlwZSk7CisJCWFzc2VydEVxdWFscyhvbGROYW1lLCBkZWxldGUub2xkUGF0aCk7CisJCWFzc2VydEVxdWFscyhBYmJyZXZpYXRlZE9iamVjdElkLmZyb21PYmplY3RJZChvbGRJZCksIGRlbGV0ZS5vbGRJZCk7CisJCWFzc2VydEVxdWFscyhvbGRNb2RlLCBkZWxldGUub2xkTW9kZSk7CisJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZFRlc3QuamF2YQppbmRleCBhZTRkYjBiLi41MDlhZGMyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZFRlc3QuamF2YQpAQCAtNDYsNiArNDYsOCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSU87CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlJhd1BhcnNlVXRpbHM7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIHB1YmxpYyBjbGFzcyBSZXBvQ29tbWFuZFRlc3QgZXh0ZW5kcyBSZXBvc2l0b3J5VGVzdENhc2UgewpAQCAtNzQ5LDEwICs3NTEsNTYgQEAKIAkJCVN0cmluZyBnaXRsaW5rID0gbG9jYWxEYi5yZXNvbHZlKENvbnN0YW50cy5IRUFEICsgIjpmb28iKS5uYW1lKCk7CiAJCQlhc3NlcnRFcXVhbHMoIlRoZSBnaXRsaW5rIGlzIHNhbWUgYXMgcmVtb3RlIGhlYWQiLAogCQkJCQlvbGRDb21taXRJZC5uYW1lKCksIGdpdGxpbmspOworCisJCQlGaWxlIGRvdG1vZHVsZXMgPSBuZXcgRmlsZShsb2NhbERiLmdldFdvcmtUcmVlKCksCisJCQkJCUNvbnN0YW50cy5ET1RfR0lUX01PRFVMRVMpOworCQkJYXNzZXJ0VHJ1ZShkb3Rtb2R1bGVzLmV4aXN0cygpKTsKKwkJCS8vIFRoZSAuZ2l0bW9kdWxlcyBmaWxlIHNob3VsZCBoYXZlICJicmFuY2giIGxpbmVzCisJCQlTdHJpbmcgZ2l0TW9kdWxlc0NvbnRlbnRzID0gUmF3UGFyc2VVdGlscworCQkJCQkuZGVjb2RlKElPLnJlYWRGdWxseShkb3Rtb2R1bGVzKSk7CisJCQlhc3NlcnRUcnVlKGdpdE1vZHVsZXNDb250ZW50cy5jb250YWlucygiYnJhbmNoID0gYnJhbmNoIikpOwogCQl9CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmV2aXNpb25CYXJlX2lnbm9yZVRhZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUmVwb3NpdG9yeSByZW1vdGVEYiA9IGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCk7CisJCVJlcG9zaXRvcnkgdGVtcERiID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKKworCQlTdHJpbmdCdWlsZGVyIHhtbENvbnRlbnQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQl4bWxDb250ZW50LmFwcGVuZCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4iKQorCQkJCS5hcHBlbmQoIjxtYW5pZmVzdD4iKQorCQkJCS5hcHBlbmQoIjxyZW1vdGUgbmFtZT1cInJlbW90ZTFcIiBmZXRjaD1cIi5cIiAvPiIpCisJCQkJLmFwcGVuZCgiPGRlZmF1bHQgcmV2aXNpb249XCIiKS5hcHBlbmQoInJlZnMvdGFncy8iICsgVEFHKQorCQkJCS5hcHBlbmQoIlwiIHJlbW90ZT1cInJlbW90ZTFcIiAvPiIpCisJCQkJLmFwcGVuZCgiPHByb2plY3QgcGF0aD1cImZvb1wiIG5hbWU9XCIiKQorCQkJCS5hcHBlbmQoZGVmYXVsdFVyaSkKKwkJCQkuYXBwZW5kKCJcIiAvPiIpLmFwcGVuZCgiPC9tYW5pZmVzdD4iKTsKKwkJSkdpdFRlc3RVdGlsLndyaXRlVHJhc2hGaWxlKHRlbXBEYiwgIm1hbmlmZXN0LnhtbCIsCisJCQkJeG1sQ29udGVudC50b1N0cmluZygpKTsKKwkJUmVwb0NvbW1hbmQgY29tbWFuZCA9IG5ldyBSZXBvQ29tbWFuZChyZW1vdGVEYik7CisJCWNvbW1hbmQuc2V0UGF0aCgKKwkJCQl0ZW1wRGIuZ2V0V29ya1RyZWUoKS5nZXRBYnNvbHV0ZVBhdGgoKSArICIvbWFuaWZlc3QueG1sIikKKwkJCQkuc2V0VVJJKHJvb3RVcmkpLmNhbGwoKTsKKwkJLy8gQ2xvbmUgaXQKKwkJRmlsZSBkaXJlY3RvcnkgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KCJ0ZXN0UmVwbGFjZU1hbmlmZXN0QmFyZSIpOworCQlGaWxlIGRvdG1vZHVsZXM7CisJCXRyeSAoUmVwb3NpdG9yeSBsb2NhbERiID0gR2l0LmNsb25lUmVwb3NpdG9yeSgpLnNldERpcmVjdG9yeShkaXJlY3RvcnkpCisJCQkJLnNldFVSSShyZW1vdGVEYi5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvU3RyaW5nKCkpLmNhbGwoKQorCQkJCS5nZXRSZXBvc2l0b3J5KCkpIHsKKwkJCWRvdG1vZHVsZXMgPSBuZXcgRmlsZShsb2NhbERiLmdldFdvcmtUcmVlKCksCisJCQkJCUNvbnN0YW50cy5ET1RfR0lUX01PRFVMRVMpOworCQkJYXNzZXJ0VHJ1ZShkb3Rtb2R1bGVzLmV4aXN0cygpKTsKKwkJfQorCisJCS8vIFRoZSAuZ2l0bW9kdWxlcyBmaWxlIHNob3VsZCBub3QgaGF2ZSAiYnJhbmNoIiBsaW5lcworCQlTdHJpbmcgZ2l0TW9kdWxlc0NvbnRlbnRzID0gUmF3UGFyc2VVdGlscworCQkJCS5kZWNvZGUoSU8ucmVhZEZ1bGx5KGRvdG1vZHVsZXMpKTsKKwkJYXNzZXJ0RmFsc2UoZ2l0TW9kdWxlc0NvbnRlbnRzLmNvbnRhaW5zKCJicmFuY2giKSk7CisJCWFzc2VydFRydWUoZ2l0TW9kdWxlc0NvbnRlbnRzLmNvbnRhaW5zKCJyZWYgPSByZWZzL3RhZ3MvIiArIFRBRykpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdENvcHlGaWxlQmFyZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlSZXBvc2l0b3J5IHJlbW90ZURiID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKTsKIAkJUmVwb3NpdG9yeSB0ZW1wRGIgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZXJUZXN0LmphdmEKaW5kZXggZWVjZjI1Yi4uNmNiYjRhOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VyVGVzdC5qYXZhCkBAIC0xNjQ4LDYgKzE2NDgsODIgQEAKIAkJCQlpbmRleFN0YXRlKENPTlRFTlQpKTsKIAl9CiAKKwkvKioKKwkgKiBNZXJnaW5nIHR3byBjb21taXRzIHdoZW4gZmlsZXMgaGF2ZSBlcXVhbCBjb250ZW50LCBidXQgY29uZmxpY3RpbmcgZmlsZSBtb2RlCisJICogaW4gdGhlIHZpcnR1YWwgYW5jZXN0b3IuCisJICoKKwkgKiA8cD4KKwkgKiBUaGlzIHRlc3QgaGFzIHRoZSBzYW1lIHNldCB1cCBhcworCSAqIHtAY29kZSBjaGVja0ZpbGVEaXJNZXJnZUNvbmZsaWN0SW5WaXJ0dWFsQW5jZXN0b3JfTm9Db25mbGljdEluQ2hpbGRyZW59LCBvbmx5CisJICogd2l0aCB0aGUgbW9kZSBjb25mbGljdCBpbiBBMSBhbmQgQTIuCisJICovCisJQFRoZW9yeQorCXB1YmxpYyB2b2lkIGNoZWNrTW9kZU1lcmdlQ29uZmxpY3RJblZpcnR1YWxBbmNlc3RvcihNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5KSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJaWYgKCFzdHJhdGVneS5lcXVhbHMoTWVyZ2VTdHJhdGVneS5SRUNVUlNJVkUpKSB7CisJCQlyZXR1cm47CisJCX0KKworCQlHaXQgZ2l0ID0gR2l0LndyYXAoZGIpOworCisJCS8vIG1hc3RlcgorCQl3cml0ZVRyYXNoRmlsZSgiYyIsICJpbml0aWFsIGZpbGUiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJjIikuY2FsbCgpOworCQlSZXZDb21taXQgY29tbWl0SSA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKworCQlGaWxlIGEgPSB3cml0ZVRyYXNoRmlsZSgiYSIsICJjb250ZW50IGluIEFuY2VzdG9yIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IGNvbW1pdEExID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkFuY2VzdG9yIDEiKS5jYWxsKCk7CisKKwkJYSA9IHdyaXRlVHJhc2hGaWxlKCJhIiwgImNvbnRlbnQgaW4gQ2hpbGQgMSAoY29tbWl0ZWQgb24gbWFzdGVyKSIpOworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImEiKS5jYWxsKCk7CisJCS8vIGNvbW1pdCBDMU0KKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNoaWxkIDEgb24gbWFzdGVyIikuY2FsbCgpOworCisJCWdpdC5jaGVja291dCgpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5zZXRTdGFydFBvaW50KGNvbW1pdEkpLnNldE5hbWUoImJyYW5jaC10by1tZXJnZSIpLmNhbGwoKTsKKwkJLy8gImEiIGJlY29tZXMgZXhlY3V0YWJsZSBpbiBBMgorCQlhID0gd3JpdGVUcmFzaEZpbGUoImEiLCAiY29udGVudCBpbiBBbmNlc3RvciIpOworCQlhLnNldEV4ZWN1dGFibGUodHJ1ZSk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IGNvbW1pdEEyID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkFuY2VzdG9yIDIiKS5jYWxsKCk7CisKKwkJLy8gc2Vjb25kIGJyYW5jaAorCQlnaXQuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0U3RhcnRQb2ludChjb21taXRBMSkuc2V0TmFtZSgic2Vjb25kLWJyYW5jaCIpLmNhbGwoKTsKKwkJYSA9IHdyaXRlVHJhc2hGaWxlKCJhIiwgImNvbnRlbnQgaW4gQ2hpbGQgMiAoY29tbWl0ZWQgb24gc2Vjb25kLWJyYW5jaCkiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkvLyBjb21taXQgQzJTCisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJDaGlsZCAyIG9uIHNlY29uZC1icmFuY2giKS5jYWxsKCk7CisKKwkJLy8gTWVyZ2UgYnJhbmNoLXRvLW1lcmdlIGludG8gc2Vjb25kLWJyYW5jaAorCQlNZXJnZVJlc3VsdCBtZXJnZVJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoY29tbWl0QTIpLnNldFN0cmF0ZWd5KHN0cmF0ZWd5KS5jYWxsKCk7CisJCWFzc2VydEVxdWFscyhtZXJnZVJlc3VsdC5nZXROZXdIZWFkKCksIG51bGwpOworCQlhc3NlcnRFcXVhbHMobWVyZ2VSZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSwgTWVyZ2VTdGF0dXMuQ09ORkxJQ1RJTkcpOworCQkvLyBSZXNvbHZlIHRoZSBjb25mbGljdCBtYW51YWxseSwgbWVyZ2UgImEiIGFzIG5vbi1leGVjdXRhYmxlCisJCWEgPSB3cml0ZVRyYXNoRmlsZSgiYSIsICJtZXJnZSBjb25mbGljdCByZXNvbHV0aW9uIik7CisJCWEuc2V0RXhlY3V0YWJsZShmYWxzZSk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYSIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IGNvbW1pdEMzUyA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJDaGlsZCAzIG9uIHNlY29uZCBidWcgLSByZXNvbHZlIG1lcmdlIGNvbmZsaWN0IikuY2FsbCgpOworCisJCS8vIE1lcmdlIGJyYW5jaC10by1tZXJnZSBpbnRvIG1hc3RlcgorCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCW1lcmdlUmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShjb21taXRBMikuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpLmNhbGwoKTsKKwkJYXNzZXJ0RXF1YWxzKG1lcmdlUmVzdWx0LmdldE5ld0hlYWQoKSwgbnVsbCk7CisJCWFzc2VydEVxdWFscyhtZXJnZVJlc3VsdC5nZXRNZXJnZVN0YXR1cygpLCBNZXJnZVN0YXR1cy5DT05GTElDVElORyk7CisKKwkJLy8gUmVzb2x2ZSB0aGUgY29uZmxpY3QgbWFudWFsbHkgLSBtZXJnZSAiYSIgYXMgbm9uLWV4ZWN1dGFibGUKKwkJYSA9IHdyaXRlVHJhc2hGaWxlKCJhIiwgIm1lcmdlIGNvbmZsaWN0IHJlc29sdXRpb24iKTsKKwkJYS5zZXRFeGVjdXRhYmxlKGZhbHNlKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJhIikuY2FsbCgpOworCQkvLyBjb21taXQgQzRNCisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJDaGlsZCA0IG9uIG1hc3RlciAtIHJlc29sdmUgbWVyZ2UgY29uZmxpY3QiKS5jYWxsKCk7CisKKwkJLy8gTWVyZ2UgQzRNIChzZWNvbmQtYnJhbmNoKSBpbnRvIG1hc3RlciAoQzNTKQorCQkvLyBDb25mbGljdCBpbiB2aXJ0dWFsIGJhc2Ugc2hvdWxkIGJlIGhlcmUsIGJ1dCB0aGVyZSBhcmUgbm8gY29uZmxpY3RzIGluCisJCS8vIGNoaWxkcmVuCisJCW1lcmdlUmVzdWx0ID0gZ2l0Lm1lcmdlKCkuaW5jbHVkZShjb21taXRDM1MpLmNhbGwoKTsKKwkJYXNzZXJ0RXF1YWxzKG1lcmdlUmVzdWx0LmdldE1lcmdlU3RhdHVzKCksIE1lcmdlU3RhdHVzLk1FUkdFRCk7CisKKwl9CisKIAlwcml2YXRlIHZvaWQgd3JpdGVTdWJtb2R1bGUoU3RyaW5nIHBhdGgsIE9iamVjdElkIGNvbW1pdCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiwgQ29uZmlnSW52YWxpZEV4Y2VwdGlvbiB7CiAJCWFkZFN1Ym1vZHVsZVRvSW5kZXgocGF0aCwgY29tbWl0KTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtNZXJnZWRJbnRvVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa01lcmdlZEludG9UZXN0LmphdmEKaW5kZXggMmMyMWViNi4uMjc1NGJkMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa01lcmdlZEludG9UZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa01lcmdlZEludG9UZXN0LmphdmEKQEAgLTExLDYgKzExLDkgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCiBwdWJsaWMgY2xhc3MgUmV2V2Fsa01lcmdlZEludG9UZXN0IGV4dGVuZHMgUmV2V2Fsa1Rlc3RDYXNlIHsKQEAgLTQ0LDQgKzQ3LDEwMSBAQAogCQlmaW5hbCBSZXZDb21taXQgdCA9IGNvbW1pdChuLCBvKTsKIAkJYXNzZXJ0VHJ1ZShydy5pc01lcmdlZEludG8oYiwgdCkpOwogCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEdldE1lcmdlZEludG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLyoKKwkJICogICAgICAgICAgaQorCQkgKiAgICAgICAgIC8gXAorCQkgKiAgICAgICAgQSAgIG8KKwkJICogICAgICAgLyBcICAgXAorCQkgKiAgICAgIG8xICBvMiAgRQorCQkgKiAgICAgLyBcIC8gXAorCQkgKiAgICBCICAgQyAgIEQKKwkJICovCisJCVN0cmluZyBiID0gInJlZnMvaGVhZHMvYiI7CisJCVN0cmluZyBjID0gInJlZnMvaGVhZHMvYyI7CisJCVN0cmluZyBkID0gInJlZnMvaGVhZHMvZCI7CisJCVN0cmluZyBlID0gInJlZnMvaGVhZHMvZSI7CisJCWZpbmFsIFJldkNvbW1pdCBpID0gY29tbWl0KCk7CisJCWZpbmFsIFJldkNvbW1pdCBhID0gY29tbWl0KGkpOworCQlmaW5hbCBSZXZDb21taXQgbzEgPSBjb21taXQoYSk7CisJCWZpbmFsIFJldkNvbW1pdCBvMiA9IGNvbW1pdChhKTsKKwkJY3JlYXRlQnJhbmNoKGNvbW1pdChvMSksIGIpOworCQljcmVhdGVCcmFuY2goY29tbWl0KG8xLCBvMiksIGMpOworCQljcmVhdGVCcmFuY2goY29tbWl0KG8yKSwgZCk7CisJCWNyZWF0ZUJyYW5jaChjb21taXQoY29tbWl0KGkpKSwgZSk7CisKKwkJTGlzdDxTdHJpbmc+ICBtb2RpZmllZFJlc3VsdCA9IHJ3LmdldE1lcmdlZEludG8oYSwgZ2V0UmVmcygpKQorCQkJCS5zdHJlYW0oKS5tYXAoUmVmOjpnZXROYW1lKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCisJCWFzc2VydFRydWUobW9kaWZpZWRSZXN1bHQuc2l6ZSgpID09IDMpOworCQlhc3NlcnRUcnVlKG1vZGlmaWVkUmVzdWx0LmNvbnRhaW5zKGIpKTsKKwkJYXNzZXJ0VHJ1ZShtb2RpZmllZFJlc3VsdC5jb250YWlucyhjKSk7CisJCWFzc2VydFRydWUobW9kaWZpZWRSZXN1bHQuY29udGFpbnMoZCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdElzTWVyZ2VkSW50b0FueSgpIHRocm93cyBFeGNlcHRpb24geworCQkvKgorCQkgKiAgICAgICAgICBpCisJCSAqICAgICAgICAgLyBcCisJCSAqICAgICAgICBBICAgbworCQkgKiAgICAgICAvICAgICBcCisJCSAqICAgICAgbyAgICAgICBDCisJCSAqICAgICAvCisJCSAqICAgIEIKKwkJICovCisJCVN0cmluZyBiID0gInJlZnMvaGVhZHMvYiI7CisJCVN0cmluZyBjID0gInJlZnMvaGVhZHMvYyI7CisJCWZpbmFsIFJldkNvbW1pdCBpID0gY29tbWl0KCk7CisJCWZpbmFsIFJldkNvbW1pdCBhID0gY29tbWl0KGkpOworCQljcmVhdGVCcmFuY2goY29tbWl0KGNvbW1pdChhKSksIGIpOworCQljcmVhdGVCcmFuY2goY29tbWl0KGNvbW1pdChpKSksIGMpOworCisJCWFzc2VydFRydWUocncuaXNNZXJnZWRJbnRvQW55KGEsIGdldFJlZnMoKSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdElzTWVyZ2VkSW50b0FsbCgpIHRocm93cyBFeGNlcHRpb24geworCQkvKgorCQkgKgorCQkgKiAgICAgICAgQQorCQkgKiAgICAgICAvIFwKKwkJICogICAgICBvMSAgbzIKKwkJICogICAgIC8gXCAvIFwKKwkJICogICAgQiAgIEMgICBECisJCSAqLworCisJCVN0cmluZyBiID0gInJlZnMvaGVhZHMvYiI7CisJCVN0cmluZyBjID0gInJlZnMvaGVhZHMvYyI7CisJCVN0cmluZyBkID0gInJlZnMvaGVhZHMvYyI7CisJCWZpbmFsIFJldkNvbW1pdCBhID0gY29tbWl0KCk7CisJCWZpbmFsIFJldkNvbW1pdCBvMSA9IGNvbW1pdChhKTsKKwkJZmluYWwgUmV2Q29tbWl0IG8yID0gY29tbWl0KGEpOworCQljcmVhdGVCcmFuY2goY29tbWl0KG8xKSwgYik7CisJCWNyZWF0ZUJyYW5jaChjb21taXQobzEsIG8yKSwgYyk7CisJCWNyZWF0ZUJyYW5jaChjb21taXQobzIpLCBkKTsKKworCQlhc3NlcnRUcnVlKHJ3LmlzTWVyZ2VkSW50b0FsbChhLCBnZXRSZWZzKCkpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RNZXJnZUludG9Bbm5vdGF0ZWRUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLyoKKwkJICogICAgICAgIGEKKwkJICogICAgICAgIHwKKwkJICogICAgICAgIGIKKwkJICogICAgICAgLyBcCisJCSAqICAgICAgYyAgdjEgKGFubm90YXRlZCB0YWcpCisJCSAqLworCQlTdHJpbmcgYyA9ICJyZWZzL2hlYWRzL2MiOworCQlTdHJpbmcgdjEgPSAicmVmcy90YWdzL3YxIjsKKwkJZmluYWwgUmV2Q29tbWl0IGEgPSBjb21taXQoKTsKKwkJZmluYWwgUmV2Q29tbWl0IGIgPSBjb21taXQoYSk7CisJCWNyZWF0ZUJyYW5jaChjb21taXQoYiksIGMpOworCQljcmVhdGVCcmFuY2godGFnKCJ2MSIsIGIpLCB2MSk7CisKKwkJYXNzZXJ0VHJ1ZShydy5pc01lcmdlZEludG9BbGwoYSwgZ2V0UmVmcygpKSk7CisJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa1V0aWxzUmVhY2hhYmxlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa1V0aWxzUmVhY2hhYmxlVGVzdC5qYXZhCmluZGV4IGQ5ZWQwYzEuLjBhMDQ1YzkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtVdGlsc1JlYWNoYWJsZVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrVXRpbHNSZWFjaGFibGVUZXN0LmphdmEKQEAgLTc2LDYgKzc2LDQxIEBACiAJCX0KIAl9CiAKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGZpbmRCcmFuY2hlc1JlYWNoYWJsZU1hbnlUaW1lcygpIHRocm93cyBFeGNlcHRpb24geworCQkvKgorCQkgKiAgYSAgIGIKKwkJICogIHwgICB8CisJCSAqICBjICAgZAorCQkgKiAgICAgIHwgXAorCQkgKiAgICAgIGYgIGUKKwkJICogICAgICB8IC8KKwkJICogICAgICBnCisJCSAqLworCQlSZXZDb21taXQgYSA9IGNvbW1pdCgpOworCQlSZXZDb21taXQgYiA9IGNvbW1pdCgpOworCQlSZXZDb21taXQgYyA9IGNvbW1pdChhKTsKKwkJUmV2Q29tbWl0IGQgPSBjb21taXQoYik7CisJCVJldkNvbW1pdCBmID0gY29tbWl0KGQpOworCQlSZXZDb21taXQgZSA9IGNvbW1pdChkKTsKKwkJUmV2Q29tbWl0IGcgPSBjb21taXQoZiwgZSk7CisJCVJlZiBicmFuY2hBID0gYnJhbmNoKCJhIiwgYSk7CisJCVJlZiBicmFuY2hCID0gYnJhbmNoKCJiIiwgYik7CisJCVJlZiBicmFuY2hDID0gYnJhbmNoKCJjIiwgYyk7CisJCVJlZiBicmFuY2hEID0gYnJhbmNoKCJkIiwgZCk7CisJCVJlZiBicmFuY2hFID0gYnJhbmNoKCJlIiwgZSk7CisJCVJlZiBicmFuY2hGID0gYnJhbmNoKCJmIiwgZik7CisJCVJlZiBicmFuY2hHID0gYnJhbmNoKCJnIiwgZyk7CisKKwkJYXNzZXJ0Q29udGFpbnMoYSwgYXNMaXN0KGJyYW5jaEEsIGJyYW5jaEMpKTsKKwkJYXNzZXJ0Q29udGFpbnMoYiwgYXNMaXN0KGJyYW5jaEIsIGJyYW5jaEQsIGJyYW5jaEUsIGJyYW5jaEYsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoYywgYXNMaXN0KGJyYW5jaEMpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZCwgYXNMaXN0KGJyYW5jaEQsIGJyYW5jaEUsIGJyYW5jaEYsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZSwgYXNMaXN0KGJyYW5jaEUsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZiwgYXNMaXN0KGJyYW5jaEYsIGJyYW5jaEcpKTsKKwkJYXNzZXJ0Q29udGFpbnMoZywgYXNMaXN0KGJyYW5jaEcpKTsKKwl9CisKIAlwcml2YXRlIFJlZiBicmFuY2goU3RyaW5nIG5hbWUsIFJldkNvbW1pdCBkc3QpIHRocm93cyBFeGNlcHRpb24gewogCQlyZXR1cm4gR2l0LndyYXAoZGIpLmJyYW5jaENyZWF0ZSgpLnNldE5hbWUobmFtZSkKIAkJCQkuc2V0U3RhcnRQb2ludChkc3QubmFtZSgpKS5jYWxsKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9CYXNlODVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdXRpbC9CYXNlODVUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ5ODc4YwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL0Jhc2U4NVRlc3QuamF2YQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRBcnJheUVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCisvKioKKyAqIFRlc3RzIGZvciB7QGxpbmsgQmFzZTg1fS4KKyAqLworcHVibGljIGNsYXNzIEJhc2U4NVRlc3QgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZBTElEX0NIQVJTID0gIjAxMjM0NTY3ODkiCisJCQkrICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IgorCQkJKyAiISMkJSYoKSorLTs8PT4/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+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LnByb3BlcnRpZXMKaW5kZXggYjZiMTBlYS4uNjE4MDczNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5wcm9wZXJ0aWVzCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQucHJvcGVydGllcwpAQCAtMTMsNiArMTMsOSBAQAogYU5ld09iamVjdElkSXNSZXF1aXJlZD1BIE5ld09iamVjdElkIGlzIHJlcXVpcmVkLgogYW5FeGNlcHRpb25PY2N1cnJlZFdoaWxlVHJ5aW5nVG9BZGRUaGVJZE9mSEVBRD1BbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGFkZCB0aGUgSWQgb2YgSEVBRAogYW5TU0hTZXNzaW9uSGFzQmVlbkFscmVhZHlDcmVhdGVkPUFuIFNTSCBzZXNzaW9uIGhhcyBiZWVuIGFscmVhZHkgY3JlYXRlZAorYXBwbHlCaW5hcnlCYXNlT2lkV3Jvbmc9Q2Fubm90IGFwcGx5IGJpbmFyeSBwYXRjaDsgT0lEIGZvciBmaWxlIHswfSBkb2VzIG5vdCBtYXRjaAorYXBwbHlCaW5hcnlPaWRUb29TaG9ydD1CaW5hcnkgcGF0Y2ggZm9yIGZpbGUgezB9IGRvZXMgbm90IGhhdmUgZnVsbCBJRHMKK2FwcGx5QmluYXJ5UmVzdWx0T2lkV3Jvbmc9UmVzdWx0IG9mIGJpbmFyeSBwYXRjaCBmb3IgZmlsZSB7MH0gaGFzIHdyb25nIE9JRC4KIGFwcGx5aW5nQ29tbWl0PUFwcGx5aW5nIHswfQogYXJjaGl2ZUZvcm1hdEFscmVhZHlBYnNlbnQ9QXJjaGl2ZSBmb3JtYXQgYWxyZWFkeSBhYnNlbnQ6IHswfQogYXJjaGl2ZUZvcm1hdEFscmVhZHlSZWdpc3RlcmVkPUFyY2hpdmUgZm9ybWF0IGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbjogezB9CkBAIC0zNyw3ICs0MCwxOSBAQAogYmFkU2VjdGlvbkVudHJ5PUJhZCBzZWN0aW9uIGVudHJ5OiB7MH0KIGJhZFNoYWxsb3dMaW5lPUJhZCBzaGFsbG93IGxpbmU6IHswfQogYmFyZVJlcG9zaXRvcnlOb1dvcmtkaXJBbmRJbmRleD1CYXJlIFJlcG9zaXRvcnkgaGFzIG5laXRoZXIgYSB3b3JraW5nIHRyZWUsIG5vciBhbiBpbmRleAorYmFzZTg1aW52YWxpZENoYXI9SW52YWxpZCBiYXNlLTg1IGNoYXJhY3RlcjogMHh7MH0KK2Jhc2U4NWxlbmd0aD1CYXNlLTg1IGVuY29kZWQgZGF0YSBtdXN0IGhhdmUgYSBsZW5ndGggdGhhdCBpcyBhIG11bHRpcGxlIG9mIDUKK2Jhc2U4NW92ZXJmbG93PUJhc2UtODUgdmFsdWUgb3ZlcmZsb3csIGRvZXMgbm90IGZpdCBpbnRvIDMyIGJpdHM6IDB4ezB9CitiYXNlODV0b29Mb25nPUV4dHJhIGJhc2UtODUgZW5jb2RlZCBkYXRhIGZvciBvdXRwdXQgc2l6ZSBvZiB7MH0gYnl0ZXMKK2Jhc2U4NXRvb1Nob3J0PUJhc2UtODUgZGF0YSBkZWNvZGVkIGludG8gbGVzcyB0aGFuIHswfSBieXRlcwogYmFzZUxlbmd0aEluY29ycmVjdD1iYXNlIGxlbmd0aCBpbmNvcnJlY3QKK2JpbmFyeURlbHRhQmFzZUxlbmd0aE1pc21hdGNoPUJpbmFyeSBkZWx0YSBiYXNlIGxlbmd0aCBkb2VzIG5vdCBtYXRjaCwgZXhwZWN0ZWQgezB9LCBnb3QgezF9CitiaW5hcnlEZWx0YUludmFsaWRPZmZzZXQ9QmluYXJ5IGRlbHRhIG9mZnNldCArIGxlbmd0aCB0b28gbGFyZ2U6IHswfSArIHsxfQorYmluYXJ5RGVsdGFJbnZhbGlkUmVzdWx0TGVuZ3RoPUJpbmFyeSBkZWx0YSBleHBlY3RlZCByZXN1bHQgbGVuZ3RoIGlzIG5lZ2F0aXZlCitiaW5hcnlIdW5rRGVjb2RlRXJyb3I9QmluYXJ5IGh1bmssIGxpbmUgezB9OiBpbnZhbGlkIGlucHV0CitiaW5hcnlIdW5rSW52YWxpZExlbmd0aD1CaW5hcnkgaHVuaywgbGluZSB7MH06IGlucHV0IGNvcnJ1cHQ7IGV4cGVjdGVkIGxlbmd0aCBieXRlLCBnb3QgMHh7MX0KK2JpbmFyeUh1bmtMaW5lVG9vU2hvcnQ9QmluYXJ5IGh1bmssIGxpbmUgezB9OiBpbnB1dCBlbmRlZCBwcmVtYXR1cmVseQorYmluYXJ5SHVua01pc3NpbmdOZXdsaW5lPUJpbmFyeSBodW5rLCBsaW5lIHswfTogaW5wdXQgbGluZSBub3QgdGVybWluYXRlZCBieSBuZXdsaW5lCiBiaXRtYXBNaXNzaW5nT2JqZWN0PUJpdG1hcCBhdCB7MH0gaXMgbWlzc2luZyB7MX0uCiBiaXRtYXBzTXVzdEJlUHJlcGFyZWQ9Qml0bWFwcyBtdXN0IGJlIHByZXBhcmVkIGJlZm9yZSB0aGV5IG1heSBiZSB3cml0dGVuLgogYmxhbWVOb3RDb21taXR0ZWRZZXQ9Tm90IENvbW1pdHRlZCBZZXQKQEAgLTEzOSw2ICsxNTQsNyBAQAogY29ubmVjdGlvbkZhaWxlZD1jb25uZWN0aW9uIGZhaWxlZAogY29ubmVjdGlvblRpbWVPdXQ9Q29ubmVjdGlvbiB0aW1lIG91dDogezB9CiBjb250ZXh0TXVzdEJlTm9uTmVnYXRpdmU9Y29udGV4dCBtdXN0IGJlID49IDAKK2Nvb2tpZUZpbGVQYXRoUmVsYXRpdmU9Z2l0IGNvbmZpZyBodHRwLmNvb2tpZUZpbGUgY29udGFpbnMgYSByZWxhdGl2ZSBwYXRoLCBzaG91bGQgYmUgYWJzb2x1dGU6IHswfQogY29ycnVwdGlvbkRldGVjdGVkUmVSZWFkaW5nQXQ9Q29ycnVwdGlvbiBkZXRlY3RlZCByZS1yZWFkaW5nIGF0IHswfQogY29ycnVwdE9iamVjdEJhZERhdGU9YmFkIGRhdGUKIGNvcnJ1cHRPYmplY3RCYWRFbWFpbD1iYWQgZW1haWwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kLmphdmEKaW5kZXggZTIyOGU4Mi4uNTgzNzY3YSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQXBwbHlDb21tYW5kLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDIwIElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMjEgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTksMjkgKzksNjggQEAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTsKIAoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uV3JpdGVyOworaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5GaWxlczsKIGltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkQ29weU9wdGlvbjsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuemlwLkluZmxhdGVySW5wdXRTdHJlYW07CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuRmlsdGVyRmFpbGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlBhdGNoQXBwbHlFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlBhdGNoRm9ybWF0RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZFbnRyeS5DaGFuZ2VUeXBlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5SYXdUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZUNoZWNrb3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVDaGVja291dC5DaGVja291dE1ldGFkYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5MYXJnZU9iamVjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5NaXNzaW5nT2JqZWN0RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvcmVDb25maWcuRW9sU3RyZWFtVHlwZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RMb2FkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0U3RyZWFtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wYXRjaC5CaW5hcnlIdW5rOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGF0Y2guRmlsZUhlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoLkZpbGVIZWFkZXIuUGF0Y2hUeXBlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGF0Y2guSHVua0hlYWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoLlBhdGNoOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuRmlsZVRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGsuT3BlcmF0aW9uVHlwZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlci5BbmRUcmVlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyLk5vdElnbm9yZWRGaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIuUGF0aEZpbHRlckdyb3VwOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlMuRXhlY3V0aW9uUmVzdWx0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GaWxlVXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLklPOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5SYXdQYXJzZVV0aWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuVGVtcG9yYXJ5QnVmZmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5UZW1wb3JhcnlCdWZmZXIuTG9jYWxGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pby5CaW5hcnlEZWx0YUlucHV0U3RyZWFtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pby5CaW5hcnlIdW5rSW5wdXRTdHJlYW07CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvLkVvbFN0cmVhbVR5cGVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTE7CiAKIC8qKgogICogQXBwbHkgYSBwYXRjaCB0byBmaWxlcyBhbmQvb3IgdG8gdGhlIGluZGV4LgpAQCAtNDUsNyArODQsNyBAQAogCXByaXZhdGUgSW5wdXRTdHJlYW0gaW47CiAKIAkvKioKLQkgKiBDb25zdHJ1Y3RzIHRoZSBjb21tYW5kIGlmIHRoZSBwYXRjaCBpcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBpbmRleC4KKwkgKiBDb25zdHJ1Y3RzIHRoZSBjb21tYW5kLgogCSAqCiAJICogQHBhcmFtIHJlcG8KIAkgKi8KQEAgLTc5LDYgKzExOCw3IEBACiAJcHVibGljIEFwcGx5UmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBQYXRjaEZvcm1hdEV4Y2VwdGlvbiwKIAkJCVBhdGNoQXBwbHlFeGNlcHRpb24gewogCQljaGVja0NhbGxhYmxlKCk7CisJCXNldENhbGxhYmxlKGZhbHNlKTsKIAkJQXBwbHlSZXN1bHQgciA9IG5ldyBBcHBseVJlc3VsdCgpOwogCQl0cnkgewogCQkJZmluYWwgUGF0Y2ggcCA9IG5ldyBQYXRjaCgpOwpAQCAtODcsMTkgKzEyNywyMiBAQAogCQkJfSBmaW5hbGx5IHsKIAkJCQlpbi5jbG9zZSgpOwogCQkJfQotCQkJaWYgKCFwLmdldEVycm9ycygpLmlzRW1wdHkoKSkKKwkJCWlmICghcC5nZXRFcnJvcnMoKS5pc0VtcHR5KCkpIHsKIAkJCQl0aHJvdyBuZXcgUGF0Y2hGb3JtYXRFeGNlcHRpb24ocC5nZXRFcnJvcnMoKSk7CisJCQl9CisJCQlSZXBvc2l0b3J5IHJlcG9zaXRvcnkgPSBnZXRSZXBvc2l0b3J5KCk7CisJCQlEaXJDYWNoZSBjYWNoZSA9IHJlcG9zaXRvcnkucmVhZERpckNhY2hlKCk7CiAJCQlmb3IgKEZpbGVIZWFkZXIgZmggOiBwLmdldEZpbGVzKCkpIHsKIAkJCQlDaGFuZ2VUeXBlIHR5cGUgPSBmaC5nZXRDaGFuZ2VUeXBlKCk7CiAJCQkJRmlsZSBmID0gbnVsbDsKIAkJCQlzd2l0Y2ggKHR5cGUpIHsKIAkJCQljYXNlIEFERDoKIAkJCQkJZiA9IGdldEZpbGUoZmguZ2V0TmV3UGF0aCgpLCB0cnVlKTsKLQkJCQkJYXBwbHkoZiwgZmgpOworCQkJCQlhcHBseShyZXBvc2l0b3J5LCBmaC5nZXROZXdQYXRoKCksIGNhY2hlLCBmLCBmaCk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgTU9ESUZZOgogCQkJCQlmID0gZ2V0RmlsZShmaC5nZXRPbGRQYXRoKCksIGZhbHNlKTsKLQkJCQkJYXBwbHkoZiwgZmgpOworCQkJCQlhcHBseShyZXBvc2l0b3J5LCBmaC5nZXRPbGRQYXRoKCksIGNhY2hlLCBmLCBmaCk7CiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgREVMRVRFOgogCQkJCQlmID0gZ2V0RmlsZShmaC5nZXRPbGRQYXRoKCksIGZhbHNlKTsKQEAgLTExOCwxNCArMTYxLDE0IEBACiAJCQkJCQl0aHJvdyBuZXcgUGF0Y2hBcHBseUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKIAkJCQkJCQkJSkdpdFRleHQuZ2V0KCkucmVuYW1lRmlsZUZhaWxlZCwgZiwgZGVzdCksIGUpOwogCQkJCQl9Ci0JCQkJCWFwcGx5KGRlc3QsIGZoKTsKKwkJCQkJYXBwbHkocmVwb3NpdG9yeSwgZmguZ2V0T2xkUGF0aCgpLCBjYWNoZSwgZGVzdCwgZmgpOwogCQkJCQlicmVhazsKIAkJCQljYXNlIENPUFk6CiAJCQkJCWYgPSBnZXRGaWxlKGZoLmdldE9sZFBhdGgoKSwgZmFsc2UpOwogCQkJCQlGaWxlIHRhcmdldCA9IGdldEZpbGUoZmguZ2V0TmV3UGF0aCgpLCBmYWxzZSk7CiAJCQkJCUZpbGVVdGlscy5ta2RpcnModGFyZ2V0LmdldFBhcmVudEZpbGUoKSwgdHJ1ZSk7CiAJCQkJCUZpbGVzLmNvcHkoZi50b1BhdGgoKSwgdGFyZ2V0LnRvUGF0aCgpKTsKLQkJCQkJYXBwbHkodGFyZ2V0LCBmaCk7CisJCQkJCWFwcGx5KHJlcG9zaXRvcnksIGZoLmdldE9sZFBhdGgoKSwgY2FjaGUsIHRhcmdldCwgZmgpOwogCQkJCX0KIAkJCQlyLmFkZFVwZGF0ZWRGaWxlKGYpOwogCQkJfQpAQCAtMTMzLDE0ICsxNzYsMTMgQEAKIAkJCXRocm93IG5ldyBQYXRjaEFwcGx5RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAogCQkJCQlKR2l0VGV4dC5nZXQoKS5wYXRjaEFwcGx5RXhjZXB0aW9uLCBlLmdldE1lc3NhZ2UoKSksIGUpOwogCQl9Ci0JCXNldENhbGxhYmxlKGZhbHNlKTsKIAkJcmV0dXJuIHI7CiAJfQogCiAJcHJpdmF0ZSBGaWxlIGdldEZpbGUoU3RyaW5nIHBhdGgsIGJvb2xlYW4gY3JlYXRlKQogCQkJdGhyb3dzIFBhdGNoQXBwbHlFeGNlcHRpb24gewogCQlGaWxlIGYgPSBuZXcgRmlsZShnZXRSZXBvc2l0b3J5KCkuZ2V0V29ya1RyZWUoKSwgcGF0aCk7Ci0JCWlmIChjcmVhdGUpCisJCWlmIChjcmVhdGUpIHsKIAkJCXRyeSB7CiAJCQkJRmlsZSBwYXJlbnQgPSBmLmdldFBhcmVudEZpbGUoKTsKIAkJCQlGaWxlVXRpbHMubWtkaXJzKHBhcmVudCwgdHJ1ZSk7CkBAIC0xNDksMjIgKzE5MSwzNjYgQEAKIAkJCQl0aHJvdyBuZXcgUGF0Y2hBcHBseUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKIAkJCQkJCUpHaXRUZXh0LmdldCgpLmNyZWF0ZU5ld0ZpbGVGYWlsZWQsIGYpLCBlKTsKIAkJCX0KKwkJfQogCQlyZXR1cm4gZjsKIAl9CiAKKwlwcml2YXRlIHZvaWQgYXBwbHkoUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTdHJpbmcgcGF0aCwgRGlyQ2FjaGUgY2FjaGUsCisJCQlGaWxlIGYsIEZpbGVIZWFkZXIgZmgpIHRocm93cyBJT0V4Y2VwdGlvbiwgUGF0Y2hBcHBseUV4Y2VwdGlvbiB7CisJCWlmIChQYXRjaFR5cGUuQklOQVJZLmVxdWFscyhmaC5nZXRQYXRjaFR5cGUoKSkpIHsKKwkJCXJldHVybjsKKwkJfQorCQlib29sZWFuIGNvbnZlcnRDckxmID0gbmVlZHNDckxmQ29udmVyc2lvbihmLCBmaCk7CisJCS8vIFVzZSBhIFRyZWVXYWxrIHdpdGggYSBEaXJDYWNoZUl0ZXJhdG9yIHRvIHBpY2sgdXAgdGhlIGNvcnJlY3QKKwkJLy8gY2xlYW4vc211ZGdlIGZpbHRlcnMuIENSLUxGIGhhbmRsaW5nIGlzIGNvbXBsZXRlbHkgZGV0ZXJtaW5lZCBieQorCQkvLyB3aGV0aGVyIHRoZSBmaWxlIG9yIHRoZSBwYXRjaCBoYXZlIENSLUxGIGxpbmUgZW5kaW5ncy4KKwkJdHJ5IChUcmVlV2FsayB3YWxrID0gbmV3IFRyZWVXYWxrKHJlcG9zaXRvcnkpKSB7CisJCQl3YWxrLnNldE9wZXJhdGlvblR5cGUoT3BlcmF0aW9uVHlwZS5DSEVDS0lOX09QKTsKKwkJCUZpbGVUcmVlSXRlcmF0b3IgZmlsZXMgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihyZXBvc2l0b3J5KTsKKwkJCWludCBmaWxlSWR4ID0gd2Fsay5hZGRUcmVlKGZpbGVzKTsKKwkJCWludCBjYWNoZUlkeCA9IHdhbGsuYWRkVHJlZShuZXcgRGlyQ2FjaGVJdGVyYXRvcihjYWNoZSkpOworCQkJZmlsZXMuc2V0RGlyQ2FjaGVJdGVyYXRvcih3YWxrLCBjYWNoZUlkeCk7CisJCQl3YWxrLnNldEZpbHRlcihBbmRUcmVlRmlsdGVyLmNyZWF0ZSgKKwkJCQkJUGF0aEZpbHRlckdyb3VwLmNyZWF0ZUZyb21TdHJpbmdzKHBhdGgpLAorCQkJCQluZXcgTm90SWdub3JlZEZpbHRlcihmaWxlSWR4KSkpOworCQkJd2Fsay5zZXRSZWN1cnNpdmUodHJ1ZSk7CisJCQlpZiAod2Fsay5uZXh0KCkpIHsKKwkJCQkvLyBJZiB0aGUgZmlsZSBvbiBkaXNrIGhhcyBubyBuZXdsaW5lIGNoYXJhY3RlcnMsIGNvbnZlcnRDckxmCisJCQkJLy8gd2lsbCBiZSBmYWxzZS4gSW4gdGhhdCBjYXNlIHdlIHdhbnQgdG8gaG9ub3IgdGhlIG5vcm1hbCBnaXQKKwkJCQkvLyBzZXR0aW5ncy4KKwkJCQlFb2xTdHJlYW1UeXBlIHN0cmVhbVR5cGUgPSBjb252ZXJ0Q3JMZiA/IEVvbFN0cmVhbVR5cGUuVEVYVF9DUkxGCisJCQkJCQk6IHdhbGsuZ2V0RW9sU3RyZWFtVHlwZShPcGVyYXRpb25UeXBlLkNIRUNLT1VUX09QKTsKKwkJCQlTdHJpbmcgY29tbWFuZCA9IHdhbGsuZ2V0RmlsdGVyQ29tbWFuZCgKKwkJCQkJCUNvbnN0YW50cy5BVFRSX0ZJTFRFUl9UWVBFX1NNVURHRSk7CisJCQkJQ2hlY2tvdXRNZXRhZGF0YSBjaGVja091dCA9IG5ldyBDaGVja291dE1ldGFkYXRhKHN0cmVhbVR5cGUsIGNvbW1hbmQpOworCQkJCUZpbGVUcmVlSXRlcmF0b3IgZmlsZSA9IHdhbGsuZ2V0VHJlZShmaWxlSWR4LAorCQkJCQkJRmlsZVRyZWVJdGVyYXRvci5jbGFzcyk7CisJCQkJaWYgKGZpbGUgIT0gbnVsbCkgeworCQkJCQlpZiAoUGF0Y2hUeXBlLkdJVF9CSU5BUlkuZXF1YWxzKGZoLmdldFBhdGNoVHlwZSgpKSkgeworCQkJCQkJYXBwbHlCaW5hcnkocmVwb3NpdG9yeSwgcGF0aCwgZiwgZmgsCisJCQkJCQkJCWZpbGU6Om9wZW5FbnRyeVN0cmVhbSwgZmlsZS5nZXRFbnRyeU9iamVjdElkKCksCisJCQkJCQkJCWNoZWNrT3V0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbW1hbmQgPSB3YWxrLmdldEZpbHRlckNvbW1hbmQoCisJCQkJCQkJCUNvbnN0YW50cy5BVFRSX0ZJTFRFUl9UWVBFX0NMRUFOKTsKKwkJCQkJCVJhd1RleHQgcmF3OworCQkJCQkJLy8gQ2FuJ3QgdXNlIGZpbGUub3BlbkVudHJ5U3RyZWFtKCkgYXMgaXQgd291bGQgZG8gQ1ItTEYKKwkJCQkJCS8vIGNvbnZlcnNpb24gYXMgdXN1YWwsIG5vdCBhcyB3YW50ZWQgYnkgdXMuCisJCQkJCQl0cnkgKElucHV0U3RyZWFtIGlucHV0ID0gZmlsdGVyQ2xlYW4ocmVwb3NpdG9yeSwgcGF0aCwKKwkJCQkJCQkJbmV3IEZpbGVJbnB1dFN0cmVhbShmKSwgY29udmVydENyTGYsIGNvbW1hbmQpKSB7CisJCQkJCQkJcmF3ID0gbmV3IFJhd1RleHQoCisJCQkJCQkJCQlJTy5yZWFkV2hvbGVTdHJlYW0oaW5wdXQsIDApLmFycmF5KCkpOworCQkJCQkJfQorCQkJCQkJYXBwbHlUZXh0KHJlcG9zaXRvcnksIHBhdGgsIHJhdywgZiwgZmgsIGNoZWNrT3V0KTsKKwkJCQkJfQorCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQl9CisJCS8vIEZpbGUgaWdub3JlZD8KKwkJUmF3VGV4dCByYXc7CisJCUNoZWNrb3V0TWV0YWRhdGEgY2hlY2tPdXQ7CisJCWlmIChQYXRjaFR5cGUuR0lUX0JJTkFSWS5lcXVhbHMoZmguZ2V0UGF0Y2hUeXBlKCkpKSB7CisJCQljaGVja091dCA9IG5ldyBDaGVja291dE1ldGFkYXRhKEVvbFN0cmVhbVR5cGUuRElSRUNULCBudWxsKTsKKwkJCWFwcGx5QmluYXJ5KHJlcG9zaXRvcnksIHBhdGgsIGYsIGZoLCAoKSAtPiBuZXcgRmlsZUlucHV0U3RyZWFtKGYpLAorCQkJCQludWxsLCBjaGVja091dCk7CisJCX0gZWxzZSB7CisJCQlpZiAoY29udmVydENyTGYpIHsKKwkJCQl0cnkgKElucHV0U3RyZWFtIGlucHV0ID0gRW9sU3RyZWFtVHlwZVV0aWwud3JhcElucHV0U3RyZWFtKAorCQkJCQkJbmV3IEZpbGVJbnB1dFN0cmVhbShmKSwgRW9sU3RyZWFtVHlwZS5URVhUX0xGKSkgeworCQkJCQlyYXcgPSBuZXcgUmF3VGV4dChJTy5yZWFkV2hvbGVTdHJlYW0oaW5wdXQsIDApLmFycmF5KCkpOworCQkJCX0KKwkJCQljaGVja091dCA9IG5ldyBDaGVja291dE1ldGFkYXRhKEVvbFN0cmVhbVR5cGUuVEVYVF9DUkxGLCBudWxsKTsKKwkJCX0gZWxzZSB7CisJCQkJcmF3ID0gbmV3IFJhd1RleHQoZik7CisJCQkJY2hlY2tPdXQgPSBuZXcgQ2hlY2tvdXRNZXRhZGF0YShFb2xTdHJlYW1UeXBlLkRJUkVDVCwgbnVsbCk7CisJCQl9CisJCQlhcHBseVRleHQocmVwb3NpdG9yeSwgcGF0aCwgcmF3LCBmLCBmaCwgY2hlY2tPdXQpOworCQl9CisJfQorCisJcHJpdmF0ZSBib29sZWFuIG5lZWRzQ3JMZkNvbnZlcnNpb24oRmlsZSBmLCBGaWxlSGVhZGVyIGZpbGVIZWFkZXIpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAoUGF0Y2hUeXBlLkdJVF9CSU5BUlkuZXF1YWxzKGZpbGVIZWFkZXIuZ2V0UGF0Y2hUeXBlKCkpKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKCFoYXNDckxmKGZpbGVIZWFkZXIpKSB7CisJCQl0cnkgKElucHV0U3RyZWFtIGlucHV0ID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmKSkgeworCQkJCXJldHVybiBSYXdUZXh0LmlzQ3JMZlRleHQoaW5wdXQpOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyBib29sZWFuIGhhc0NyTGYoRmlsZUhlYWRlciBmaWxlSGVhZGVyKSB7CisJCWlmIChQYXRjaFR5cGUuR0lUX0JJTkFSWS5lcXVhbHMoZmlsZUhlYWRlci5nZXRQYXRjaFR5cGUoKSkpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlmb3IgKEh1bmtIZWFkZXIgaGVhZGVyIDogZmlsZUhlYWRlci5nZXRIdW5rcygpKSB7CisJCQlieXRlW10gYnVmID0gaGVhZGVyLmdldEJ1ZmZlcigpOworCQkJaW50IGh1bmtFbmQgPSBoZWFkZXIuZ2V0RW5kT2Zmc2V0KCk7CisJCQlpbnQgbGluZVN0YXJ0ID0gaGVhZGVyLmdldFN0YXJ0T2Zmc2V0KCk7CisJCQl3aGlsZSAobGluZVN0YXJ0IDwgaHVua0VuZCkgeworCQkJCWludCBuZXh0TGluZVN0YXJ0ID0gUmF3UGFyc2VVdGlscy5uZXh0TEYoYnVmLCBsaW5lU3RhcnQpOworCQkJCWlmIChuZXh0TGluZVN0YXJ0ID4gaHVua0VuZCkgeworCQkJCQluZXh0TGluZVN0YXJ0ID0gaHVua0VuZDsKKwkJCQl9CisJCQkJaWYgKG5leHRMaW5lU3RhcnQgPD0gbGluZVN0YXJ0KSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAobmV4dExpbmVTdGFydCAtIGxpbmVTdGFydCA+IDEpIHsKKwkJCQkJY2hhciBmaXJzdCA9IChjaGFyKSAoYnVmW2xpbmVTdGFydF0gJiAweEZGKTsKKwkJCQkJaWYgKGZpcnN0ID09ICcgJyB8fCBmaXJzdCA9PSAnLScpIHsKKwkJCQkJCS8vIEl0J3MgYW4gb2xkIGxpbmUuIERvZXMgaXQgZW5kIGluIENSLUxGPworCQkJCQkJaWYgKGJ1ZltuZXh0TGluZVN0YXJ0IC0gMl0gPT0gJ1xyJykgeworCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWxpbmVTdGFydCA9IG5leHRMaW5lU3RhcnQ7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXByaXZhdGUgSW5wdXRTdHJlYW0gZmlsdGVyQ2xlYW4oUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBTdHJpbmcgcGF0aCwKKwkJCUlucHV0U3RyZWFtIGZyb21GaWxlLCBib29sZWFuIGNvbnZlcnRDckxmLCBTdHJpbmcgZmlsdGVyQ29tbWFuZCkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCUlucHV0U3RyZWFtIGlucHV0ID0gZnJvbUZpbGU7CisJCWlmIChjb252ZXJ0Q3JMZikgeworCQkJaW5wdXQgPSBFb2xTdHJlYW1UeXBlVXRpbC53cmFwSW5wdXRTdHJlYW0oaW5wdXQsCisJCQkJCUVvbFN0cmVhbVR5cGUuVEVYVF9MRik7CisJCX0KKwkJaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwoZmlsdGVyQ29tbWFuZCkpIHsKKwkJCXJldHVybiBpbnB1dDsKKwkJfQorCQlpZiAoRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LmlzUmVnaXN0ZXJlZChmaWx0ZXJDb21tYW5kKSkgeworCQkJTG9jYWxGaWxlIGJ1ZmZlciA9IG5ldyBUZW1wb3JhcnlCdWZmZXIuTG9jYWxGaWxlKG51bGwpOworCQkJRmlsdGVyQ29tbWFuZCBjb21tYW5kID0gRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LmNyZWF0ZUZpbHRlckNvbW1hbmQoCisJCQkJCWZpbHRlckNvbW1hbmQsIHJlcG9zaXRvcnksIGlucHV0LCBidWZmZXIpOworCQkJd2hpbGUgKGNvbW1hbmQucnVuKCkgIT0gLTEpIHsKKwkJCQkvLyBsb29wIGFzIGxvbmcgYXMgY29tbWFuZC5ydW4oKSB0ZWxscyB0aGVyZSBpcyB3b3JrIHRvIGRvCisJCQl9CisJCQlyZXR1cm4gYnVmZmVyLm9wZW5JbnB1dFN0cmVhbVdpdGhBdXRvRGVzdHJveSgpOworCQl9CisJCUZTIGZzID0gcmVwb3NpdG9yeS5nZXRGUygpOworCQlQcm9jZXNzQnVpbGRlciBmaWx0ZXJQcm9jZXNzQnVpbGRlciA9IGZzLnJ1bkluU2hlbGwoZmlsdGVyQ29tbWFuZCwKKwkJCQluZXcgU3RyaW5nWzBdKTsKKwkJZmlsdGVyUHJvY2Vzc0J1aWxkZXIuZGlyZWN0b3J5KHJlcG9zaXRvcnkuZ2V0V29ya1RyZWUoKSk7CisJCWZpbHRlclByb2Nlc3NCdWlsZGVyLmVudmlyb25tZW50KCkucHV0KENvbnN0YW50cy5HSVRfRElSX0tFWSwKKwkJCQlyZXBvc2l0b3J5LmdldERpcmVjdG9yeSgpLmdldEFic29sdXRlUGF0aCgpKTsKKwkJRXhlY3V0aW9uUmVzdWx0IHJlc3VsdDsKKwkJdHJ5IHsKKwkJCXJlc3VsdCA9IGZzLmV4ZWN1dGUoZmlsdGVyUHJvY2Vzc0J1aWxkZXIsIGluKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gfCBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oCisJCQkJCW5ldyBGaWx0ZXJGYWlsZWRFeGNlcHRpb24oZSwgZmlsdGVyQ29tbWFuZCwgcGF0aCkpOworCQl9CisJCWludCByYyA9IHJlc3VsdC5nZXRSYygpOworCQlpZiAocmMgIT0gMCkgeworCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKG5ldyBGaWx0ZXJGYWlsZWRFeGNlcHRpb24ocmMsIGZpbHRlckNvbW1hbmQsCisJCQkJCXBhdGgsIHJlc3VsdC5nZXRTdGRvdXQoKS50b0J5dGVBcnJheSg0MDk2KSwgUmF3UGFyc2VVdGlscworCQkJCQkJCS5kZWNvZGUocmVzdWx0LmdldFN0ZGVycigpLnRvQnl0ZUFycmF5KDQwOTYpKSkpOworCQl9CisJCXJldHVybiByZXN1bHQuZ2V0U3Rkb3V0KCkub3BlbklucHV0U3RyZWFtV2l0aEF1dG9EZXN0cm95KCk7CisJfQorCiAJLyoqCi0JICogQHBhcmFtIGYKLQkgKiBAcGFyYW0gZmgKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBQYXRjaEFwcGx5RXhjZXB0aW9uCisJICogU29tZXRoaW5nIHRoYXQgY2FuIHN1cHBseSBhbiB7QGxpbmsgSW5wdXRTdHJlYW19LgogCSAqLwotCXByaXZhdGUgdm9pZCBhcHBseShGaWxlIGYsIEZpbGVIZWFkZXIgZmgpCisJcHJpdmF0ZSBpbnRlcmZhY2UgU3RyZWFtU3VwcGxpZXIgeworCQlJbnB1dFN0cmVhbSBsb2FkKCkgdGhyb3dzIElPRXhjZXB0aW9uOworCX0KKworCS8qKgorCSAqIFdlIHdyaXRlIHRoZSBwYXRjaCByZXN1bHQgdG8gYSB7QGxpbmsgVGVtcG9yYXJ5QnVmZmVyfSBhbmQgdGhlbiB1c2UKKwkgKiB7QGxpbmsgRGlyQ2FjaGVDaGVja291dH0uZ2V0Q29udGVudCgpIHRvIHJ1biB0aGUgcmVzdWx0IHRocm91Z2ggdGhlIENSLUxGCisJICogYW5kIHNtdWRnZSBmaWx0ZXJzLiBEaXJDYWNoZUNoZWNrb3V0IG5lZWRzIGFuIE9iamVjdExvYWRlciwgbm90IGEKKwkgKiBUZW1wb3JhcnlCdWZmZXIsIHNvIHRoaXMgY2xhc3MgYnJpZGdlcyBiZXR3ZWVuIHRoZSB0d28sIG1ha2luZyBhbnkgU3RyZWFtCisJICogcHJvdmlkZWQgYnkgYSB7QGxpbmsgU3RyZWFtU3VwcGxpZXJ9IGxvb2sgbGlrZSBhbiBvcmRpbmFyeSBnaXQgYmxvYiB0bworCSAqIERpckNhY2hlQ2hlY2tvdXQuCisJICovCisJcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU3RyZWFtTG9hZGVyIGV4dGVuZHMgT2JqZWN0TG9hZGVyIHsKKworCQlwcml2YXRlIFN0cmVhbVN1cHBsaWVyIGRhdGE7CisKKwkJcHJpdmF0ZSBsb25nIHNpemU7CisKKwkJU3RyZWFtTG9hZGVyKFN0cmVhbVN1cHBsaWVyIGRhdGEsIGxvbmcgbGVuZ3RoKSB7CisJCQl0aGlzLmRhdGEgPSBkYXRhOworCQkJdGhpcy5zaXplID0gbGVuZ3RoOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgZ2V0VHlwZSgpIHsKKwkJCXJldHVybiBDb25zdGFudHMuT0JKX0JMT0I7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGxvbmcgZ2V0U2l6ZSgpIHsKKwkJCXJldHVybiBzaXplOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIGlzTGFyZ2UoKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYnl0ZVtdIGdldENhY2hlZEJ5dGVzKCkgdGhyb3dzIExhcmdlT2JqZWN0RXhjZXB0aW9uIHsKKwkJCXRocm93IG5ldyBMYXJnZU9iamVjdEV4Y2VwdGlvbigpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBPYmplY3RTdHJlYW0gb3BlblN0cmVhbSgpCisJCQkJdGhyb3dzIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJCXJldHVybiBuZXcgT2JqZWN0U3RyZWFtLkZpbHRlcihnZXRUeXBlKCksIGdldFNpemUoKSwKKwkJCQkJbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oZGF0YS5sb2FkKCkpKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBpbml0SGFzaChTSEExIGhhc2gsIGxvbmcgc2l6ZSkgeworCQloYXNoLnVwZGF0ZShDb25zdGFudHMuZW5jb2RlZFR5cGVTdHJpbmcoQ29uc3RhbnRzLk9CSl9CTE9CKSk7CisJCWhhc2gudXBkYXRlKChieXRlKSAnICcpOworCQloYXNoLnVwZGF0ZShDb25zdGFudHMuZW5jb2RlQVNDSUkoc2l6ZSkpOworCQloYXNoLnVwZGF0ZSgoYnl0ZSkgMCk7CisJfQorCisJcHJpdmF0ZSBPYmplY3RJZCBoYXNoKEZpbGUgZikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJU0hBMSBoYXNoID0gU0hBMS5uZXdJbnN0YW5jZSgpOworCQlpbml0SGFzaChoYXNoLCBmLmxlbmd0aCgpKTsKKwkJdHJ5IChJbnB1dFN0cmVhbSBpbnB1dCA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZikpIHsKKwkJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVs4MTkyXTsKKwkJCWludCBuOworCQkJd2hpbGUgKChuID0gaW5wdXQucmVhZChidWYpKSA+PSAwKSB7CisJCQkJaGFzaC51cGRhdGUoYnVmLCAwLCBuKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gaGFzaC50b09iamVjdElkKCk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNoZWNrT2lkKE9iamVjdElkIGJhc2VJZCwgT2JqZWN0SWQgaWQsIENoYW5nZVR5cGUgdHlwZSwgRmlsZSBmLAorCQkJU3RyaW5nIHBhdGgpCisJCQl0aHJvd3MgUGF0Y2hBcHBseUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlib29sZWFuIGhhc2hPayA9IGZhbHNlOworCQlpZiAoaWQgIT0gbnVsbCkgeworCQkJaGFzaE9rID0gYmFzZUlkLmVxdWFscyhpZCk7CisJCQlpZiAoIWhhc2hPayAmJiBDaGFuZ2VUeXBlLkFERC5lcXVhbHModHlwZSkKKwkJCQkJJiYgT2JqZWN0SWQuemVyb0lkKCkuZXF1YWxzKGJhc2VJZCkpIHsKKwkJCQkvLyBXZSBjcmVhdGUgdGhlIGZpbGUgZmlyc3QuIFRoZSBPSUQgb2YgYW4gZW1wdHkgZmlsZSBpcyBub3QgdGhlCisJCQkJLy8gemVybyBpZCEKKwkJCQloYXNoT2sgPSBDb25zdGFudHMuRU1QVFlfQkxPQl9JRC5lcXVhbHMoaWQpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKE9iamVjdElkLnplcm9JZCgpLmVxdWFscyhiYXNlSWQpKSB7CisJCQkJLy8gRmlsZSBlbXB0eSBpcyBPSy4KKwkJCQloYXNoT2sgPSAhZi5leGlzdHMoKSB8fCBmLmxlbmd0aCgpID09IDA7CisJCQl9IGVsc2UgeworCQkJCWhhc2hPayA9IGJhc2VJZC5lcXVhbHMoaGFzaChmKSk7CisJCQl9CisJCX0KKwkJaWYgKCFoYXNoT2spIHsKKwkJCXRocm93IG5ldyBQYXRjaEFwcGx5RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKKwkJCQkJLmZvcm1hdChKR2l0VGV4dC5nZXQoKS5hcHBseUJpbmFyeUJhc2VPaWRXcm9uZywgcGF0aCkpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGFwcGx5QmluYXJ5KFJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU3RyaW5nIHBhdGgsIEZpbGUgZiwKKwkJCUZpbGVIZWFkZXIgZmgsIFN0cmVhbVN1cHBsaWVyIGxvYWRlciwgT2JqZWN0SWQgaWQsCisJCQlDaGVja291dE1ldGFkYXRhIGNoZWNrT3V0KQorCQkJdGhyb3dzIFBhdGNoQXBwbHlFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJaWYgKCFmaC5nZXRPbGRJZCgpLmlzQ29tcGxldGUoKSB8fCAhZmguZ2V0TmV3SWQoKS5pc0NvbXBsZXRlKCkpIHsKKwkJCXRocm93IG5ldyBQYXRjaEFwcGx5RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKKwkJCQkJLmZvcm1hdChKR2l0VGV4dC5nZXQoKS5hcHBseUJpbmFyeU9pZFRvb1Nob3J0LCBwYXRoKSk7CisJCX0KKwkJQmluYXJ5SHVuayBodW5rID0gZmguZ2V0Rm9yd2FyZEJpbmFyeUh1bmsoKTsKKwkJLy8gQSBCaW5hcnlIdW5rIGhhcyB0aGUgc3RhcnQgYXQgdGhlICJsaXRlcmFsIiBvciAiZGVsdGEiIHRva2VuLiBEYXRhCisJCS8vIHN0YXJ0cyBvbiB0aGUgbmV4dCBsaW5lLgorCQlpbnQgc3RhcnQgPSBSYXdQYXJzZVV0aWxzLm5leHRMRihodW5rLmdldEJ1ZmZlcigpLAorCQkJCWh1bmsuZ2V0U3RhcnRPZmZzZXQoKSk7CisJCWludCBsZW5ndGggPSBodW5rLmdldEVuZE9mZnNldCgpIC0gc3RhcnQ7CisJCVNIQTEgaGFzaCA9IFNIQTEubmV3SW5zdGFuY2UoKTsKKwkJLy8gV3JpdGUgdG8gYSBidWZmZXIgYW5kIGNvcHkgdG8gdGhlIGZpbGUgb25seSBpZiBldmVyeXRoaW5nIHdhcyBmaW5lCisJCVRlbXBvcmFyeUJ1ZmZlciBidWZmZXIgPSBuZXcgVGVtcG9yYXJ5QnVmZmVyLkxvY2FsRmlsZShudWxsKTsKKwkJdHJ5IHsKKwkJCXN3aXRjaCAoaHVuay5nZXRUeXBlKCkpIHsKKwkJCWNhc2UgTElURVJBTF9ERUZMQVRFRDoKKwkJCQkvLyBUaGlzIGp1c3Qgb3ZlcndyaXRlcyB0aGUgZmlsZS4gV2UgbmVlZCB0byBjaGVjayB0aGUgaGFzaCBvZgorCQkJCS8vIHRoZSBiYXNlLgorCQkJCWNoZWNrT2lkKGZoLmdldE9sZElkKCkudG9PYmplY3RJZCgpLCBpZCwgZmguZ2V0Q2hhbmdlVHlwZSgpLCBmLAorCQkJCQkJcGF0aCk7CisJCQkJaW5pdEhhc2goaGFzaCwgaHVuay5nZXRTaXplKCkpOworCQkJCXRyeSAoT3V0cHV0U3RyZWFtIG91dCA9IGJ1ZmZlcjsKKwkJCQkJCUlucHV0U3RyZWFtIGluZmxhdGVkID0gbmV3IFNIQTFJbnB1dFN0cmVhbShoYXNoLAorCQkJCQkJCQluZXcgSW5mbGF0ZXJJbnB1dFN0cmVhbSgKKwkJCQkJCQkJCQluZXcgQmluYXJ5SHVua0lucHV0U3RyZWFtKAorCQkJCQkJCQkJCQkJbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKAorCQkJCQkJCQkJCQkJCQlodW5rLmdldEJ1ZmZlcigpLCBzdGFydCwKKwkJCQkJCQkJCQkJCQkJbGVuZ3RoKSkpKSkgeworCQkJCQlEaXJDYWNoZUNoZWNrb3V0LmdldENvbnRlbnQocmVwb3NpdG9yeSwgcGF0aCwgY2hlY2tPdXQsCisJCQkJCQkJbmV3IFN0cmVhbUxvYWRlcigoKSAtPiBpbmZsYXRlZCwgaHVuay5nZXRTaXplKCkpLAorCQkJCQkJCW51bGwsIG91dCk7CisJCQkJCWlmICghZmguZ2V0TmV3SWQoKS50b09iamVjdElkKCkuZXF1YWxzKGhhc2gudG9PYmplY3RJZCgpKSkgeworCQkJCQkJdGhyb3cgbmV3IFBhdGNoQXBwbHlFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJCUpHaXRUZXh0LmdldCgpLmFwcGx5QmluYXJ5UmVzdWx0T2lkV3JvbmcsCisJCQkJCQkJCXBhdGgpKTsKKwkJCQkJfQorCQkJCX0KKwkJCQl0cnkgKElucHV0U3RyZWFtIGJ1ZkluID0gYnVmZmVyLm9wZW5JbnB1dFN0cmVhbSgpKSB7CisJCQkJCUZpbGVzLmNvcHkoYnVmSW4sIGYudG9QYXRoKCksCisJCQkJCQkJU3RhbmRhcmRDb3B5T3B0aW9uLlJFUExBQ0VfRVhJU1RJTkcpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgREVMVEFfREVGTEFURUQ6CisJCQkJLy8gVW5mb3J0dW5hdGVseSBkZWx0YSBhcHBsaWNhdGlvbiBuZWVkcyByYW5kb20gYWNjZXNzIHRvIHRoZQorCQkJCS8vIGJhc2UgdG8gY29uc3RydWN0IHRoZSByZXN1bHQuCisJCQkJYnl0ZVtdIGJhc2U7CisJCQkJdHJ5IChJbnB1dFN0cmVhbSBpbnB1dCA9IGxvYWRlci5sb2FkKCkpIHsKKwkJCQkJYmFzZSA9IElPLnJlYWRXaG9sZVN0cmVhbShpbnB1dCwgMCkuYXJyYXkoKTsKKwkJCQl9CisJCQkJLy8gQXQgbGVhc3Qgc3RyZWFtIHRoZSByZXN1bHQhCisJCQkJdHJ5IChCaW5hcnlEZWx0YUlucHV0U3RyZWFtIGlucHV0ID0gbmV3IEJpbmFyeURlbHRhSW5wdXRTdHJlYW0oCisJCQkJCQliYXNlLAorCQkJCQkJbmV3IEluZmxhdGVySW5wdXRTdHJlYW0obmV3IEJpbmFyeUh1bmtJbnB1dFN0cmVhbSgKKwkJCQkJCQkJbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGh1bmsuZ2V0QnVmZmVyKCksCisJCQkJCQkJCQkJc3RhcnQsIGxlbmd0aCkpKSkpIHsKKwkJCQkJbG9uZyBmaW5hbFNpemUgPSBpbnB1dC5nZXRFeHBlY3RlZFJlc3VsdFNpemUoKTsKKwkJCQkJaW5pdEhhc2goaGFzaCwgZmluYWxTaXplKTsKKwkJCQkJdHJ5IChPdXRwdXRTdHJlYW0gb3V0ID0gYnVmZmVyOworCQkJCQkJCVNIQTFJbnB1dFN0cmVhbSBoYXNoZWQgPSBuZXcgU0hBMUlucHV0U3RyZWFtKGhhc2gsCisJCQkJCQkJCQlpbnB1dCkpIHsKKwkJCQkJCURpckNhY2hlQ2hlY2tvdXQuZ2V0Q29udGVudChyZXBvc2l0b3J5LCBwYXRoLCBjaGVja091dCwKKwkJCQkJCQkJbmV3IFN0cmVhbUxvYWRlcigoKSAtPiBoYXNoZWQsIGZpbmFsU2l6ZSksIG51bGwsCisJCQkJCQkJCW91dCk7CisJCQkJCQlpZiAoIWZoLmdldE5ld0lkKCkudG9PYmplY3RJZCgpCisJCQkJCQkJCS5lcXVhbHMoaGFzaC50b09iamVjdElkKCkpKSB7CisJCQkJCQkJdGhyb3cgbmV3IFBhdGNoQXBwbHlFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJCQlKR2l0VGV4dC5nZXQoKS5hcHBseUJpbmFyeVJlc3VsdE9pZFdyb25nLAorCQkJCQkJCQkJcGF0aCkpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCXRyeSAoSW5wdXRTdHJlYW0gYnVmSW4gPSBidWZmZXIub3BlbklucHV0U3RyZWFtKCkpIHsKKwkJCQkJRmlsZXMuY29weShidWZJbiwgZi50b1BhdGgoKSwKKwkJCQkJCQlTdGFuZGFyZENvcHlPcHRpb24uUkVQTEFDRV9FWElTVElORyk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBmaW5hbGx5IHsKKwkJCWJ1ZmZlci5kZXN0cm95KCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgYXBwbHlUZXh0KFJlcG9zaXRvcnkgcmVwb3NpdG9yeSwgU3RyaW5nIHBhdGgsIFJhd1RleHQgcnQsCisJCQlGaWxlIGYsIEZpbGVIZWFkZXIgZmgsIENoZWNrb3V0TWV0YWRhdGEgY2hlY2tPdXQpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24sIFBhdGNoQXBwbHlFeGNlcHRpb24gewotCQlSYXdUZXh0IHJ0ID0gbmV3IFJhd1RleHQoZik7Ci0JCUxpc3Q8U3RyaW5nPiBvbGRMaW5lcyA9IG5ldyBBcnJheUxpc3Q8PihydC5zaXplKCkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHJ0LnNpemUoKTsgaSsrKQotCQkJb2xkTGluZXMuYWRkKHJ0LmdldFN0cmluZyhpKSk7Ci0JCUxpc3Q8U3RyaW5nPiBuZXdMaW5lcyA9IG5ldyBBcnJheUxpc3Q8PihvbGRMaW5lcyk7CisJCUxpc3Q8Qnl0ZUJ1ZmZlcj4gb2xkTGluZXMgPSBuZXcgQXJyYXlMaXN0PD4ocnQuc2l6ZSgpKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBydC5zaXplKCk7IGkrKykgeworCQkJb2xkTGluZXMuYWRkKHJ0LmdldFJhd1N0cmluZyhpKSk7CisJCX0KKwkJTGlzdDxCeXRlQnVmZmVyPiBuZXdMaW5lcyA9IG5ldyBBcnJheUxpc3Q8PihvbGRMaW5lcyk7CiAJCWludCBhZnRlckxhc3RIdW5rID0gMDsKIAkJaW50IGxpbmVOdW1iZXJTaGlmdCA9IDA7CiAJCWludCBsYXN0SHVua05ld0xpbmUgPSAtMTsKQEAgLTE4Miw5ICs1NjgsOSBAQAogCQkJCQliLmxlbmd0aCk7CiAJCQlSYXdUZXh0IGhydCA9IG5ldyBSYXdUZXh0KGIpOwogCi0JCQlMaXN0PFN0cmluZz4gaHVua0xpbmVzID0gbmV3IEFycmF5TGlzdDw+KGhydC5zaXplKCkpOworCQkJTGlzdDxCeXRlQnVmZmVyPiBodW5rTGluZXMgPSBuZXcgQXJyYXlMaXN0PD4oaHJ0LnNpemUoKSk7CiAJCQlmb3IgKGludCBpID0gMDsgaSA8IGhydC5zaXplKCk7IGkrKykgewotCQkJCWh1bmtMaW5lcy5hZGQoaHJ0LmdldFN0cmluZyhpKSk7CisJCQkJaHVua0xpbmVzLmFkZChocnQuZ2V0UmF3U3RyaW5nKGkpKTsKIAkJCX0KIAogCQkJaWYgKGhoLmdldE5ld1N0YXJ0TGluZSgpID09IDApIHsKQEAgLTI1Myw4ICs2MzksMTMgQEAKIAkJCWxpbmVOdW1iZXJTaGlmdCA9IGFwcGx5QXQgLSBoaC5nZXROZXdTdGFydExpbmUoKSArIDE7CiAJCQlpbnQgc3ogPSBodW5rTGluZXMuc2l6ZSgpOwogCQkJZm9yIChpbnQgaiA9IDE7IGogPCBzejsgaisrKSB7Ci0JCQkJU3RyaW5nIGh1bmtMaW5lID0gaHVua0xpbmVzLmdldChqKTsKLQkJCQlzd2l0Y2ggKGh1bmtMaW5lLmNoYXJBdCgwKSkgeworCQkJCUJ5dGVCdWZmZXIgaHVua0xpbmUgPSBodW5rTGluZXMuZ2V0KGopOworCQkJCWlmICghaHVua0xpbmUuaGFzUmVtYWluaW5nKCkpIHsKKwkJCQkJLy8gQ29tcGxldGVseSBlbXB0eSBsaW5lOyBhY2NlcHQgYXMgZW1wdHkgY29udGV4dCBsaW5lCisJCQkJCWFwcGx5QXQrKzsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN3aXRjaCAoaHVua0xpbmUuYXJyYXkoKVtodW5rTGluZS5wb3NpdGlvbigpXSkgewogCQkJCWNhc2UgJyAnOgogCQkJCQlhcHBseUF0Kys7CiAJCQkJCWJyZWFrOwpAQCAtMjYyLDcgKzY1Myw3IEBACiAJCQkJCW5ld0xpbmVzLnJlbW92ZShhcHBseUF0KTsKIAkJCQkJYnJlYWs7CiAJCQkJY2FzZSAnKyc6Ci0JCQkJCW5ld0xpbmVzLmFkZChhcHBseUF0KyssIGh1bmtMaW5lLnN1YnN0cmluZygxKSk7CisJCQkJCW5ld0xpbmVzLmFkZChhcHBseUF0KyssIHNsaWNlKGh1bmtMaW5lLCAxKSk7CiAJCQkJCWJyZWFrOwogCQkJCWRlZmF1bHQ6CiAJCQkJCWJyZWFrOwpAQCAtMjcxLDM5ICs2NjIsNjQgQEAKIAkJCWFmdGVyTGFzdEh1bmsgPSBhcHBseUF0OwogCQl9CiAJCWlmICghaXNOb05ld2xpbmVBdEVuZE9mRmlsZShmaCkpIHsKLQkJCW5ld0xpbmVzLmFkZCgiIik7IC8vJE5PTi1OTFMtMSQKKwkJCW5ld0xpbmVzLmFkZChudWxsKTsKIAkJfQogCQlpZiAoIXJ0LmlzTWlzc2luZ05ld2xpbmVBdEVuZCgpKSB7Ci0JCQlvbGRMaW5lcy5hZGQoIiIpOyAvLyROT04tTkxTLTEkCisJCQlvbGRMaW5lcy5hZGQobnVsbCk7CiAJCX0KLQkJaWYgKCFpc0NoYW5nZWQob2xkTGluZXMsIG5ld0xpbmVzKSkgewotCQkJcmV0dXJuOyAvLyBEb24ndCB0b3VjaCB0aGUgZmlsZQorCQlpZiAob2xkTGluZXMuZXF1YWxzKG5ld0xpbmVzKSkgeworCQkJcmV0dXJuOyAvLyBVbmNoYW5nZWQ7IGRvbid0IHRvdWNoIHRoZSBmaWxlCiAJCX0KLQkJdHJ5IChXcml0ZXIgZncgPSBGaWxlcy5uZXdCdWZmZXJlZFdyaXRlcihmLnRvUGF0aCgpKSkgewotCQkJZm9yIChJdGVyYXRvcjxTdHJpbmc+IGwgPSBuZXdMaW5lcy5pdGVyYXRvcigpOyBsLmhhc05leHQoKTspIHsKLQkJCQlmdy53cml0ZShsLm5leHQoKSk7Ci0JCQkJaWYgKGwuaGFzTmV4dCgpKSB7Ci0JCQkJCS8vIERvbid0IGJvdGhlciBoYW5kbGluZyBsaW5lIGVuZGluZ3MgLSBpZiBpdCB3YXMgV2luZG93cywKLQkJCQkJLy8gdGhlIFxyIGlzIHN0aWxsIHRoZXJlIQotCQkJCQlmdy53cml0ZSgnXG4nKTsKKworCQlUZW1wb3JhcnlCdWZmZXIgYnVmZmVyID0gbmV3IFRlbXBvcmFyeUJ1ZmZlci5Mb2NhbEZpbGUobnVsbCk7CisJCXRyeSB7CisJCQl0cnkgKE91dHB1dFN0cmVhbSBvdXQgPSBidWZmZXIpIHsKKwkJCQlmb3IgKEl0ZXJhdG9yPEJ5dGVCdWZmZXI+IGwgPSBuZXdMaW5lcy5pdGVyYXRvcigpOyBsCisJCQkJCQkuaGFzTmV4dCgpOykgeworCQkJCQlCeXRlQnVmZmVyIGxpbmUgPSBsLm5leHQoKTsKKwkJCQkJaWYgKGxpbmUgPT0gbnVsbCkgeworCQkJCQkJLy8gTXVzdCBiZSB0aGUgbWFya2VyIGZvciB0aGUgZmluYWwgbmV3bGluZQorCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJb3V0LndyaXRlKGxpbmUuYXJyYXkoKSwgbGluZS5wb3NpdGlvbigpLCBsaW5lLnJlbWFpbmluZygpKTsKKwkJCQkJaWYgKGwuaGFzTmV4dCgpKSB7CisJCQkJCQlvdXQud3JpdGUoJ1xuJyk7CisJCQkJCX0KIAkJCQl9CiAJCQl9CisJCQl0cnkgKE91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShmKSkgeworCQkJCURpckNhY2hlQ2hlY2tvdXQuZ2V0Q29udGVudChyZXBvc2l0b3J5LCBwYXRoLCBjaGVja091dCwKKwkJCQkJCW5ldyBTdHJlYW1Mb2FkZXIoYnVmZmVyOjpvcGVuSW5wdXRTdHJlYW0sCisJCQkJCQkJCWJ1ZmZlci5sZW5ndGgoKSksCisJCQkJCQludWxsLCBvdXRwdXQpOworCQkJfQorCQl9IGZpbmFsbHkgeworCQkJYnVmZmVyLmRlc3Ryb3koKTsKIAkJfQotCQlnZXRSZXBvc2l0b3J5KCkuZ2V0RlMoKS5zZXRFeGVjdXRlKGYsIGZoLmdldE5ld01vZGUoKSA9PSBGaWxlTW9kZS5FWEVDVVRBQkxFX0ZJTEUpOworCQlyZXBvc2l0b3J5LmdldEZTKCkuc2V0RXhlY3V0ZShmLAorCQkJCWZoLmdldE5ld01vZGUoKSA9PSBGaWxlTW9kZS5FWEVDVVRBQkxFX0ZJTEUpOwogCX0KIAotCXByaXZhdGUgYm9vbGVhbiBjYW5BcHBseUF0KExpc3Q8U3RyaW5nPiBodW5rTGluZXMsIExpc3Q8U3RyaW5nPiBuZXdMaW5lcywKLQkJCWludCBsaW5lKSB7CisJcHJpdmF0ZSBib29sZWFuIGNhbkFwcGx5QXQoTGlzdDxCeXRlQnVmZmVyPiBodW5rTGluZXMsCisJCQlMaXN0PEJ5dGVCdWZmZXI+IG5ld0xpbmVzLCBpbnQgbGluZSkgewogCQlpbnQgc3ogPSBodW5rTGluZXMuc2l6ZSgpOwogCQlpbnQgbGltaXQgPSBuZXdMaW5lcy5zaXplKCk7CiAJCWludCBwb3MgPSBsaW5lOwogCQlmb3IgKGludCBqID0gMTsgaiA8IHN6OyBqKyspIHsKLQkJCVN0cmluZyBodW5rTGluZSA9IGh1bmtMaW5lcy5nZXQoaik7Ci0JCQlzd2l0Y2ggKGh1bmtMaW5lLmNoYXJBdCgwKSkgeworCQkJQnl0ZUJ1ZmZlciBodW5rTGluZSA9IGh1bmtMaW5lcy5nZXQoaik7CisJCQlpZiAoIWh1bmtMaW5lLmhhc1JlbWFpbmluZygpKSB7CisJCQkJLy8gRW1wdHkgbGluZS4gQWNjZXB0IGFzIGVtcHR5IGNvbnRleHQgbGluZS4KKwkJCQlpZiAocG9zID49IGxpbWl0IHx8IG5ld0xpbmVzLmdldChwb3MpLmhhc1JlbWFpbmluZygpKSB7CisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJcG9zKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzd2l0Y2ggKGh1bmtMaW5lLmFycmF5KClbaHVua0xpbmUucG9zaXRpb24oKV0pIHsKIAkJCWNhc2UgJyAnOgogCQkJY2FzZSAnLSc6CiAJCQkJaWYgKHBvcyA+PSBsaW1pdAotCQkJCQkJfHwgIW5ld0xpbmVzLmdldChwb3MpLmVxdWFscyhodW5rTGluZS5zdWJzdHJpbmcoMSkpKSB7CisJCQkJCQl8fCAhbmV3TGluZXMuZ2V0KHBvcykuZXF1YWxzKHNsaWNlKGh1bmtMaW5lLCAxKSkpIHsKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCQlwb3MrKzsKQEAgLTMxNSwxMyArNzMxLDkgQEAKIAkJcmV0dXJuIHRydWU7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NoYW5nZWQoTGlzdDxTdHJpbmc+IG9sLCBMaXN0PFN0cmluZz4gbmwpIHsKLQkJaWYgKG9sLnNpemUoKSAhPSBubC5zaXplKCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvbC5zaXplKCk7IGkrKykKLQkJCWlmICghb2wuZ2V0KGkpLmVxdWFscyhubC5nZXQoaSkpKQotCQkJCXJldHVybiB0cnVlOwotCQlyZXR1cm4gZmFsc2U7CisJcHJpdmF0ZSBCeXRlQnVmZmVyIHNsaWNlKEJ5dGVCdWZmZXIgYiwgaW50IG9mZikgeworCQlpbnQgbmV3T2Zmc2V0ID0gYi5wb3NpdGlvbigpICsgb2ZmOworCQlyZXR1cm4gQnl0ZUJ1ZmZlci53cmFwKGIuYXJyYXkoKSwgbmV3T2Zmc2V0LCBiLmxpbWl0KCkgLSBuZXdPZmZzZXQpOwogCX0KIAogCXByaXZhdGUgYm9vbGVhbiBpc05vTmV3bGluZUF0RW5kT2ZGaWxlKEZpbGVIZWFkZXIgZmgpIHsKQEAgLTMzMCw4ICs3NDIsNTEgQEAKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQlIdW5rSGVhZGVyIGxhc3RIdW5rID0gaHVua3MuZ2V0KGh1bmtzLnNpemUoKSAtIDEpOwotCQlSYXdUZXh0IGxocnQgPSBuZXcgUmF3VGV4dChsYXN0SHVuay5nZXRCdWZmZXIoKSk7CisJCWJ5dGVbXSBidWYgPSBuZXcgYnl0ZVtsYXN0SHVuay5nZXRFbmRPZmZzZXQoKQorCQkJCS0gbGFzdEh1bmsuZ2V0U3RhcnRPZmZzZXQoKV07CisJCVN5c3RlbS5hcnJheWNvcHkobGFzdEh1bmsuZ2V0QnVmZmVyKCksIGxhc3RIdW5rLmdldFN0YXJ0T2Zmc2V0KCksIGJ1ZiwKKwkJCQkwLCBidWYubGVuZ3RoKTsKKwkJUmF3VGV4dCBsaHJ0ID0gbmV3IFJhd1RleHQoYnVmKTsKIAkJcmV0dXJuIGxocnQuZ2V0U3RyaW5nKGxocnQuc2l6ZSgpIC0gMSkKIAkJCQkuZXF1YWxzKCJcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlIik7IC8vJE5PTi1OTFMtMSQKIAl9CisKKwkvKioKKwkgKiBBbiB7QGxpbmsgSW5wdXRTdHJlYW19IHRoYXQgdXBkYXRlcyBhIHtAbGluayBTSEExfSBvbiBldmVyeSBieXRlIHJlYWQuCisJICogVGhlIGhhc2ggaXMgc3VwcG9zZWQgdG8gaGF2ZSBiZWVuIGluaXRpYWxpemVkIGJlZm9yZSByZWFkaW5nIHN0YXJ0cy4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBTSEExSW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7CisKKwkJcHJpdmF0ZSBmaW5hbCBTSEExIGhhc2g7CisKKwkJcHJpdmF0ZSBmaW5hbCBJbnB1dFN0cmVhbSBpbjsKKworCQlTSEExSW5wdXRTdHJlYW0oU0hBMSBoYXNoLCBJbnB1dFN0cmVhbSBpbikgeworCQkJdGhpcy5oYXNoID0gaGFzaDsKKwkJCXRoaXMuaW4gPSBpbjsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJaW50IGIgPSBpbi5yZWFkKCk7CisJCQlpZiAoYiA+PSAwKSB7CisJCQkJaGFzaC51cGRhdGUoKGJ5dGUpIGIpOworCQkJfQorCQkJcmV0dXJuIGI7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJaW50IG4gPSBpbi5yZWFkKGIsIG9mZiwgbGVuKTsKKwkJCWlmIChuID4gMCkgeworCQkJCWhhc2gudXBkYXRlKGIsIG9mZiwgbik7CisJCQl9CisJCQlyZXR1cm4gbjsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBjbG9zZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlpbi5jbG9zZSgpOworCQl9CisJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kLmphdmEKaW5kZXggNWQwMTU0Yy4uNzkyMmY5ZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgQ2hyaXN0aWFuIEhhbHN0cmljayA8Y2hyaXN0aWFuLmhhbHN0cmlja0BzYXAuY29tPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMjEgQ2hyaXN0aWFuIEhhbHN0cmljayA8Y2hyaXN0aWFuLmhhbHN0cmlja0BzYXAuY29tPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xMyw2ICsxMyw3IEBACiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5Db25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5HaXRBUElFeGNlcHRpb247CkBAIC0zNSw5ICszNiwxMiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWYuU3RvcmFnZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuQ29udGVudE1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZU1lc3NhZ2VGb3JtYXR0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZVN0cmF0ZWd5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLlJlc29sdmVNZXJnZXIuTWVyZ2VGYWlsdXJlUmVhc29uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5GaWxlVHJlZUl0ZXJhdG9yOwpAQCAtNjEsNiArNjUsOCBAQAogCiAJcHJpdmF0ZSBNZXJnZVN0cmF0ZWd5IHN0cmF0ZWd5ID0gTWVyZ2VTdHJhdGVneS5SRUNVUlNJVkU7CiAKKwlwcml2YXRlIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneTsKKwogCXByaXZhdGUgSW50ZWdlciBtYWlubGluZVBhcmVudE51bWJlcjsKIAogCXByaXZhdGUgYm9vbGVhbiBub0NvbW1pdCA9IGZhbHNlOwpAQCAtMTIxLDE2ICsxMjcsMzAgQEAKIAkJCQlTdHJpbmcgY2hlcnJ5UGlja05hbWUgPSBzcmNDb21taXQuZ2V0SWQoKS5hYmJyZXZpYXRlKDcpLm5hbWUoKQogCQkJCQkJKyAiICIgKyBzcmNDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCk7IC8vJE5PTi1OTFMtMSQKIAotCQkJCVJlc29sdmVNZXJnZXIgbWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIHN0cmF0ZWd5Lm5ld01lcmdlcihyZXBvKTsKLQkJCQltZXJnZXIuc2V0V29ya2luZ1RyZWVJdGVyYXRvcihuZXcgRmlsZVRyZWVJdGVyYXRvcihyZXBvKSk7Ci0JCQkJbWVyZ2VyLnNldEJhc2Uoc3JjUGFyZW50LmdldFRyZWUoKSk7Ci0JCQkJbWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7ICJCQVNFIiwgb3VyTmFtZSwgLy8kTk9OLU5MUy0xJAotCQkJCQkJY2hlcnJ5UGlja05hbWUgfSk7Ci0JCQkJaWYgKG1lcmdlci5tZXJnZShuZXdIZWFkLCBzcmNDb21taXQpKSB7Ci0JCQkJCWlmICghbWVyZ2VyLmdldE1vZGlmaWVkRmlsZXMoKS5pc0VtcHR5KCkpIHsKKwkJCQlNZXJnZXIgbWVyZ2VyID0gc3RyYXRlZ3kubmV3TWVyZ2VyKHJlcG8pOworCQkJCW1lcmdlci5zZXRQcm9ncmVzc01vbml0b3IobW9uaXRvcik7CisJCQkJYm9vbGVhbiBub1Byb2JsZW1zOworCQkJCU1hcDxTdHJpbmcsIE1lcmdlRmFpbHVyZVJlYXNvbj4gZmFpbGluZ1BhdGhzID0gbnVsbDsKKwkJCQlMaXN0PFN0cmluZz4gdW5tZXJnZWRQYXRocyA9IG51bGw7CisJCQkJaWYgKG1lcmdlciBpbnN0YW5jZW9mIFJlc29sdmVNZXJnZXIpIHsKKwkJCQkJUmVzb2x2ZU1lcmdlciByZXNvbHZlTWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIG1lcmdlcjsKKwkJCQkJcmVzb2x2ZU1lcmdlci5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpOworCQkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbW1pdE5hbWVzKAorCQkJCQkJCW5ldyBTdHJpbmdbXSB7ICJCQVNFIiwgb3VyTmFtZSwgY2hlcnJ5UGlja05hbWUgfSk7IC8vJE5PTi1OTFMtMSQKKwkJCQkJcmVzb2x2ZU1lcmdlcgorCQkJCQkJCS5zZXRXb3JraW5nVHJlZUl0ZXJhdG9yKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKHJlcG8pKTsKKwkJCQkJcmVzb2x2ZU1lcmdlci5zZXRCYXNlKHNyY1BhcmVudC5nZXRUcmVlKCkpOworCQkJCQlub1Byb2JsZW1zID0gbWVyZ2VyLm1lcmdlKG5ld0hlYWQsIHNyY0NvbW1pdCk7CisJCQkJCWZhaWxpbmdQYXRocyA9IHJlc29sdmVNZXJnZXIuZ2V0RmFpbGluZ1BhdGhzKCk7CisJCQkJCXVubWVyZ2VkUGF0aHMgPSByZXNvbHZlTWVyZ2VyLmdldFVubWVyZ2VkUGF0aHMoKTsKKwkJCQkJaWYgKCFyZXNvbHZlTWVyZ2VyLmdldE1vZGlmaWVkRmlsZXMoKS5pc0VtcHR5KCkpIHsKIAkJCQkJCXJlcG8uZmlyZUV2ZW50KG5ldyBXb3JraW5nVHJlZU1vZGlmaWVkRXZlbnQoCi0JCQkJCQkJCW1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCksIG51bGwpKTsKKwkJCQkJCQkJcmVzb2x2ZU1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCksIG51bGwpKTsKIAkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCW5vUHJvYmxlbXMgPSBtZXJnZXIubWVyZ2UobmV3SGVhZCwgc3JjQ29tbWl0KTsKKwkJCQl9CisJCQkJaWYgKG5vUHJvYmxlbXMpIHsKIAkJCQkJaWYgKEFueU9iamVjdElkLmlzRXF1YWwobmV3SGVhZC5nZXRUcmVlKCkuZ2V0SWQoKSwKIAkJCQkJCQltZXJnZXIuZ2V0UmVzdWx0VHJlZUlkKCkpKSB7CiAJCQkJCQljb250aW51ZTsKQEAgLTE1MywyNCArMTczLDI2IEBACiAJCQkJCX0KIAkJCQkJY2hlcnJ5UGlja2VkUmVmcy5hZGQoc3JjKTsKIAkJCQl9IGVsc2UgewotCQkJCQlpZiAobWVyZ2VyLmZhaWxlZCgpKSB7Ci0JCQkJCQlyZXR1cm4gbmV3IENoZXJyeVBpY2tSZXN1bHQobWVyZ2VyLmdldEZhaWxpbmdQYXRocygpKTsKKwkJCQkJaWYgKGZhaWxpbmdQYXRocyAhPSBudWxsICYmICFmYWlsaW5nUGF0aHMuaXNFbXB0eSgpKSB7CisJCQkJCQlyZXR1cm4gbmV3IENoZXJyeVBpY2tSZXN1bHQoZmFpbGluZ1BhdGhzKTsKIAkJCQkJfQogCiAJCQkJCS8vIHRoZXJlIGFyZSBtZXJnZSBjb25mbGljdHMKIAotCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG5ldyBNZXJnZU1lc3NhZ2VGb3JtYXR0ZXIoKQorCQkJCQlTdHJpbmcgbWVzc2FnZTsKKwkJCQkJaWYgKHVubWVyZ2VkUGF0aHMgIT0gbnVsbCkgeworCQkJCQkJbWVzc2FnZSA9IG5ldyBNZXJnZU1lc3NhZ2VGb3JtYXR0ZXIoKQogCQkJCQkJCS5mb3JtYXRXaXRoQ29uZmxpY3RzKHNyY0NvbW1pdC5nZXRGdWxsTWVzc2FnZSgpLAotCQkJCQkJCQkJbWVyZ2VyLmdldFVubWVyZ2VkUGF0aHMoKSk7CisJCQkJCQkJCQkJdW5tZXJnZWRQYXRocyk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQltZXNzYWdlID0gc3JjQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCk7CisJCQkJCX0KIAogCQkJCQlpZiAoIW5vQ29tbWl0KSB7CiAJCQkJCQlyZXBvLndyaXRlQ2hlcnJ5UGlja0hlYWQoc3JjQ29tbWl0LmdldElkKCkpOwogCQkJCQl9CiAJCQkJCXJlcG8ud3JpdGVNZXJnZUNvbW1pdE1zZyhtZXNzYWdlKTsKIAotCQkJCQlyZXBvLmZpcmVFdmVudChuZXcgV29ya2luZ1RyZWVNb2RpZmllZEV2ZW50KAotCQkJCQkJCW1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCksIG51bGwpKTsKLQogCQkJCQlyZXR1cm4gQ2hlcnJ5UGlja1Jlc3VsdC5DT05GTElDVDsKIAkJCQl9CiAJCQl9CkBAIC0yOTEsNiArMzEzLDIyIEBACiAJfQogCiAJLyoqCisJICogU2V0cyB0aGUgY29udGVudCBtZXJnZSBzdHJhdGVneSB0byB1c2UgaWYgdGhlCisJICoge0BsaW5rICNzZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5KSBtZXJnZSBzdHJhdGVneX0gaXMgInJlc29sdmUiIG9yCisJICogInJlY3Vyc2l2ZSIuCisJICoKKwkgKiBAcGFyYW0gc3RyYXRlZ3kKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9IHRvIGJlIHVzZWQKKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIENoZXJyeVBpY2tDb21tYW5kIHNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KAorCQkJQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJdGhpcy5jb250ZW50U3RyYXRlZ3kgPSBzdHJhdGVneTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogU2V0IHRoZSAoMS1iYXNlZCkgcGFyZW50IG51bWJlciB0byBkaWZmIGFnYWluc3QKIAkgKgogCSAqIEBwYXJhbSBtYWlubGluZVBhcmVudE51bWJlcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQppbmRleCBkODhmNGVjLi5lZjU2ZDgwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIENocmlzdGlhbiBIYWxzdHJpY2sgPGNocmlzdGlhbi5oYWxzdHJpY2tAc2FwLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDE0LCBTdGVmYW4gTGF5IDxzdGVmYW4ubGF5QHNhcC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYsIExhdXJlbnQgRGVsYWlndWUgPGxhdXJlbnQuZGVsYWlndWVAb2Jlby5mcj4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0LCBTdGVmYW4gTGF5IDxzdGVmYW4ubGF5QHNhcC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIDIwMjEgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00NSw2ICs0NSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZS5SZXN1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VDb25maWc7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZU1lc3NhZ2VGb3JtYXR0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZVN0cmF0ZWd5OwpAQCAtNzEsNiArNzIsOCBAQAogCiAJcHJpdmF0ZSBNZXJnZVN0cmF0ZWd5IG1lcmdlU3RyYXRlZ3kgPSBNZXJnZVN0cmF0ZWd5LlJFQ1VSU0lWRTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5OworCiAJcHJpdmF0ZSBMaXN0PFJlZj4gY29tbWl0cyA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKIAogCXByaXZhdGUgQm9vbGVhbiBzcXVhc2g7CkBAIC04NCw2ICs4NywyMCBAQAogCXByaXZhdGUgUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IgPSBOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFOwogCiAJLyoqCisJICogVmFsdWVzIGZvciB0aGUgIm1lcmdlLmNvbmZsaWN0U3R5bGUiIGdpdCBjb25maWcuCisJICoKKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBlbnVtIENvbmZsaWN0U3R5bGUgeworCisJCS8qKiAibWVyZ2UiIHN0eWxlOiBvbmx5IG91cnMvdGhlaXJzLiBUaGlzIGlzIHRoZSBkZWZhdWx0LiAqLworCQlNRVJHRSwKKworCQkvKiogImRpZmYzIiBzdHlsZTogb3Vycy9iYXNlL3RoZWlycy4gKi8KKwkJRElGRjMKKwl9CisKKwkvKioKIAkgKiBUaGUgbW9kZXMgYXZhaWxhYmxlIGZvciBmYXN0IGZvcndhcmQgbWVyZ2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAJICogPGNvZGU+LS1mZjwvY29kZT4sIDxjb2RlPi0tbm8tZmY8L2NvZGU+IGFuZCA8Y29kZT4tLWZmLW9ubHk8L2NvZGU+CiAJICogb3B0aW9ucyB1bmRlciA8Y29kZT5icmFuY2guJmx0O25hbWUmZ3Q7Lm1lcmdlb3B0aW9uczwvY29kZT4uCkBAIC0zMjAsNiArMzM3LDcgQEAKIAkJCQlMaXN0PFN0cmluZz4gdW5tZXJnZWRQYXRocyA9IG51bGw7CiAJCQkJaWYgKG1lcmdlciBpbnN0YW5jZW9mIFJlc29sdmVNZXJnZXIpIHsKIAkJCQkJUmVzb2x2ZU1lcmdlciByZXNvbHZlTWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIG1lcmdlcjsKKwkJCQkJcmVzb2x2ZU1lcmdlci5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpOwogCQkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7CiAJCQkJCQkJIkJBU0UiLCAiSEVBRCIsIHJlZi5nZXROYW1lKCkgfSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAogCQkJCQlyZXNvbHZlTWVyZ2VyLnNldFdvcmtpbmdUcmVlSXRlcmF0b3IobmV3IEZpbGVUcmVlSXRlcmF0b3IocmVwbykpOwpAQCAtNDczLDYgKzQ5MSwyMiBAQAogCX0KIAogCS8qKgorCSAqIFNldHMgdGhlIGNvbnRlbnQgbWVyZ2Ugc3RyYXRlZ3kgdG8gdXNlIGlmIHRoZQorCSAqIHtAbGluayAjc2V0U3RyYXRlZ3koTWVyZ2VTdHJhdGVneSkgbWVyZ2Ugc3RyYXRlZ3l9IGlzICJyZXNvbHZlIiBvcgorCSAqICJyZWN1cnNpdmUiLgorCSAqCisJICogQHBhcmFtIHN0cmF0ZWd5CisJICogICAgICAgICAgICB0aGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSB0byBiZSB1c2VkCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBNZXJnZUNvbW1hbmQgc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJY2hlY2tDYWxsYWJsZSgpOworCQl0aGlzLmNvbnRlbnRTdHJhdGVneSA9IHN0cmF0ZWd5OworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKIAkgKiBSZWZlcmVuY2UgdG8gYSBjb21taXQgdG8gYmUgbWVyZ2VkIHdpdGggdGhlIGN1cnJlbnQgaGVhZAogCSAqCiAJICogQHBhcmFtIGFDb21taXQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZC5qYXZhCmluZGV4IDQ0OTI1MDguLjI4MWVjZmQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmQuamF2YQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIENocmlzdGlhbiBIYWxzdHJpY2sgPGNocmlzdGlhbi5oYWxzdHJpY2tAc2FwLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgTWF0aGlhcyBLaW56bGVyIDxtYXRoaWFzLmtpbnpsZXJAc2FwLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNiwgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIDIwMjEgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00Myw2ICs0Myw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5U3RhdGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU3VibW9kdWxlQ29uZmlnLkZldGNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuQ29udGVudE1lcmdlU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldldhbGs7CkBAIC02OSw2ICs3MCw4IEBACiAKIAlwcml2YXRlIE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kgPSBNZXJnZVN0cmF0ZWd5LlJFQ1VSU0lWRTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5OworCiAJcHJpdmF0ZSBUYWdPcHQgdGFnT3B0aW9uOwogCiAJcHJpdmF0ZSBGYXN0Rm9yd2FyZE1vZGUgZmFzdEZvcndhcmRNb2RlOwpAQCAtMjc1LDggKzI3OCw3IEBACiAJCQkJCUpHaXRUZXh0LmdldCgpLnB1bGxUYXNrTmFtZSkpOwogCiAJCS8vIHdlIGNoZWNrIHRoZSB1cGRhdGVzIHRvIHNlZSB3aGljaCBvZiB0aGUgdXBkYXRlZCBicmFuY2hlcwotCQkvLyBjb3JyZXNwb25kcwotCQkvLyB0byB0aGUgcmVtb3RlIGJyYW5jaCBuYW1lCisJCS8vIGNvcnJlc3BvbmRzIHRvIHRoZSByZW1vdGUgYnJhbmNoIG5hbWUKIAkJQW55T2JqZWN0SWQgY29tbWl0VG9NZXJnZTsKIAkJaWYgKGlzUmVtb3RlKSB7CiAJCQlSZWYgciA9IG51bGw7CkBAIC0zNTQsOCArMzU2LDExIEBACiAJCQl9CiAJCQlSZWJhc2VDb21tYW5kIHJlYmFzZSA9IG5ldyBSZWJhc2VDb21tYW5kKHJlcG8pOwogCQkJUmViYXNlUmVzdWx0IHJlYmFzZVJlcyA9IHJlYmFzZS5zZXRVcHN0cmVhbShjb21taXRUb01lcmdlKQotCQkJCQkuc2V0VXBzdHJlYW1OYW1lKHVwc3RyZWFtTmFtZSkuc2V0UHJvZ3Jlc3NNb25pdG9yKG1vbml0b3IpCi0JCQkJCS5zZXRPcGVyYXRpb24oT3BlcmF0aW9uLkJFR0lOKS5zZXRTdHJhdGVneShzdHJhdGVneSkKKwkJCQkJLnNldFByb2dyZXNzTW9uaXRvcihtb25pdG9yKQorCQkJCQkuc2V0VXBzdHJlYW1OYW1lKHVwc3RyZWFtTmFtZSkKKwkJCQkJLnNldE9wZXJhdGlvbihPcGVyYXRpb24uQkVHSU4pCisJCQkJCS5zZXRTdHJhdGVneShzdHJhdGVneSkKKwkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSkKIAkJCQkJLnNldFByZXNlcnZlTWVyZ2VzKAogCQkJCQkJCXB1bGxSZWJhc2VNb2RlID09IEJyYW5jaFJlYmFzZU1vZGUuUFJFU0VSVkUpCiAJCQkJCS5jYWxsKCk7CkBAIC0zNjMsNyArMzY4LDkgQEAKIAkJfSBlbHNlIHsKIAkJCU1lcmdlQ29tbWFuZCBtZXJnZSA9IG5ldyBNZXJnZUNvbW1hbmQocmVwbyk7CiAJCQlNZXJnZVJlc3VsdCBtZXJnZVJlcyA9IG1lcmdlLmluY2x1ZGUodXBzdHJlYW1OYW1lLCBjb21taXRUb01lcmdlKQotCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpLnNldFByb2dyZXNzTW9uaXRvcihtb25pdG9yKQorCQkJCQkuc2V0UHJvZ3Jlc3NNb25pdG9yKG1vbml0b3IpCisJCQkJCS5zZXRTdHJhdGVneShzdHJhdGVneSkKKwkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSkKIAkJCQkJLnNldEZhc3RGb3J3YXJkKGdldEZhc3RGb3J3YXJkTW9kZSgpKS5jYWxsKCk7CiAJCQltb25pdG9yLnVwZGF0ZSgxKTsKIAkJCXJlc3VsdCA9IG5ldyBQdWxsUmVzdWx0KGZldGNoUmVzLCByZW1vdGUsIG1lcmdlUmVzKTsKQEAgLTQ0Miw2ICs0NDksMjEgQEAKIAl9CiAKIAkvKioKKwkgKiBTZXRzIHRoZSBjb250ZW50IG1lcmdlIHN0cmF0ZWd5IHRvIHVzZSBpZiB0aGUKKwkgKiB7QGxpbmsgI3NldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kpIG1lcmdlIHN0cmF0ZWd5fSBpcyAicmVzb2x2ZSIgb3IKKwkgKiAicmVjdXJzaXZlIi4KKwkgKgorCSAqIEBwYXJhbSBzdHJhdGVneQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBDb250ZW50TWVyZ2VTdHJhdGVneX0gdG8gYmUgdXNlZAorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgUHVsbENvbW1hbmQgc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJdGhpcy5jb250ZW50U3RyYXRlZ3kgPSBzdHJhdGVneTsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogU2V0IHRoZSBzcGVjaWZpY2F0aW9uIG9mIGFubm90YXRlZCB0YWcgYmVoYXZpb3IgZHVyaW5nIGZldGNoCiAJICoKIAkgKiBAcGFyYW0gdGFnT3B0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kLmphdmEKaW5kZXggODM2MTc1ZC4uYTI2ZmZjMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1JlYmFzZUNvbW1hbmQuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTMgTWF0aGlhcyBLaW56bGVyIDxtYXRoaWFzLmtpbnpsZXJAc2FwLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxNiwgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYsIDIwMjEgTGF1cmVudCBEZWxhaWd1ZSA8bGF1cmVudC5kZWxhaWd1ZUBvYmVvLmZyPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC02NSw2ICs2NSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZS5SZXN1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLkNvbnRlbnRNZXJnZVN0cmF0ZWd5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuTWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZTb3J0OwpAQCAtMjEyLDYgKzIxMyw4IEBACiAKIAlwcml2YXRlIE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kgPSBNZXJnZVN0cmF0ZWd5LlJFQ1VSU0lWRTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5OworCiAJcHJpdmF0ZSBib29sZWFuIHByZXNlcnZlTWVyZ2VzID0gZmFsc2U7CiAKIAkvKioKQEAgLTUwMSw4ICs1MDQsMTEgQEAKIAkJCVN0cmluZyBvdXJDb21taXROYW1lID0gZ2V0T3VyQ29tbWl0TmFtZSgpOwogCQkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChyZXBvKSkgewogCQkJCUNoZXJyeVBpY2tSZXN1bHQgY2hlcnJ5UGlja1Jlc3VsdCA9IGdpdC5jaGVycnlQaWNrKCkKLQkJCQkJLmluY2x1ZGUoY29tbWl0VG9QaWNrKS5zZXRPdXJDb21taXROYW1lKG91ckNvbW1pdE5hbWUpCi0JCQkJCS5zZXRSZWZsb2dQcmVmaXgoUkVGTE9HX1BSRUZJWCkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCS5pbmNsdWRlKGNvbW1pdFRvUGljaykKKwkJCQkJLnNldE91ckNvbW1pdE5hbWUob3VyQ29tbWl0TmFtZSkKKwkJCQkJLnNldFJlZmxvZ1ByZWZpeChSRUZMT0dfUFJFRklYKQorCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCS5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpCiAJCQkJCS5jYWxsKCk7CiAJCQkJc3dpdGNoIChjaGVycnlQaWNrUmVzdWx0LmdldFN0YXR1cygpKSB7CiAJCQkJY2FzZSBGQUlMRUQ6CkBAIC01NTYsNyArNTYyLDggQEAKIAkJCQkJCQkuaW5jbHVkZShjb21taXRUb1BpY2spCiAJCQkJCQkJLnNldE91ckNvbW1pdE5hbWUob3VyQ29tbWl0TmFtZSkKIAkJCQkJCQkuc2V0UmVmbG9nUHJlZml4KFJFRkxPR19QUkVGSVgpCi0JCQkJCQkJLnNldFN0cmF0ZWd5KHN0cmF0ZWd5KTsKKwkJCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSk7CiAJCQkJCWlmIChpc01lcmdlKSB7CiAJCQkJCQlwaWNrQ29tbWFuZC5zZXRNYWlubGluZVBhcmVudE51bWJlcigxKTsKIAkJCQkJCS8vIFdlIHdyaXRlIGEgTUVSR0VfSEVBRCBhbmQgbGF0ZXIgY29tbWl0IGV4cGxpY2l0bHkKQEAgLTU5Miw2ICs1OTksOCBAQAogCQkJCQlNZXJnZUNvbW1hbmQgbWVyZ2UgPSBnaXQubWVyZ2UoKQogCQkJCQkJCS5zZXRGYXN0Rm9yd2FyZChNZXJnZUNvbW1hbmQuRmFzdEZvcndhcmRNb2RlLk5PX0ZGKQogCQkJCQkJCS5zZXRQcm9ncmVzc01vbml0b3IobW9uaXRvcikKKwkJCQkJCQkuc2V0U3RyYXRlZ3koc3RyYXRlZ3kpCisJCQkJCQkJLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSkKIAkJCQkJCQkuc2V0Q29tbWl0KGZhbHNlKTsKIAkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBjb21taXRUb1BpY2suZ2V0UGFyZW50Q291bnQoKTsgaSsrKQogCQkJCQkJbWVyZ2UuaW5jbHVkZShuZXdQYXJlbnRzLmdldChpKSk7CkBAIC0xMTM3LDcgKzExNDYsNyBAQAogCX0KIAogCXByaXZhdGUgTGlzdDxSZXZDb21taXQ+IGNhbGN1bGF0ZVBpY2tMaXN0KFJldkNvbW1pdCBoZWFkQ29tbWl0KQotCQkJdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgTm9IZWFkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlMaXN0PFJldkNvbW1pdD4gY2hlcnJ5UGlja0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKIAkJdHJ5IChSZXZXYWxrIHIgPSBuZXcgUmV2V2FsayhyZXBvKSkgewogCQkJci5zb3J0KFJldlNvcnQuVE9QT19LRUVQX0JSQU5DSF9UT0dFVEhFUiwgdHJ1ZSk7CkBAIC0xNTg3LDYgKzE1OTYsMjEgQEAKIAl9CiAKIAkvKioKKwkgKiBTZXRzIHRoZSBjb250ZW50IG1lcmdlIHN0cmF0ZWd5IHRvIHVzZSBpZiB0aGUKKwkgKiB7QGxpbmsgI3NldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kpIG1lcmdlIHN0cmF0ZWd5fSBpcyAicmVzb2x2ZSIgb3IKKwkgKiAicmVjdXJzaXZlIi4KKwkgKgorCSAqIEBwYXJhbSBzdHJhdGVneQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBDb250ZW50TWVyZ2VTdHJhdGVneX0gdG8gYmUgdXNlZAorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgUmViYXNlQ29tbWFuZCBzZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneSBzdHJhdGVneSkgeworCQl0aGlzLmNvbnRlbnRTdHJhdGVneSA9IHN0cmF0ZWd5OworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKIAkgKiBXaGV0aGVyIHRvIHByZXNlcnZlIG1lcmdlcyBkdXJpbmcgcmViYXNlCiAJICoKIAkgKiBAcGFyYW0gcHJlc2VydmUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQXBwbHlDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaEFwcGx5Q29tbWFuZC5qYXZhCmluZGV4IDU2YjM5OTIuLjEwMDRkM2UgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXNoQXBwbHlDb21tYW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3Rhc2hBcHBseUNvbW1hbmQuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTcgR2l0SHViIEluYy4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDIxIEdpdEh1YiBJbmMuIGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTM4LDcgKzM4LDkgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RSZWFkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5U3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5Db250ZW50TWVyZ2VTdHJhdGVneTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLk1lcmdlU3RyYXRlZ3k7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5NZXJnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZDb21taXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldlRyZWU7CkBAIC03MSw2ICs3Myw4IEBACiAKIAlwcml2YXRlIE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kgPSBNZXJnZVN0cmF0ZWd5LlJFQ1VSU0lWRTsKIAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgY29udGVudFN0cmF0ZWd5OworCiAJLyoqCiAJICogQ3JlYXRlIGNvbW1hbmQgdG8gYXBwbHkgdGhlIGNoYW5nZXMgb2YgYSBzdGFzaGVkIGNvbW1pdAogCSAqCkBAIC0xNjYsMTYgKzE3MCwyNSBAQAogCQkJaWYgKHJlc3RvcmVVbnRyYWNrZWQgJiYgc3Rhc2hDb21taXQuZ2V0UGFyZW50Q291bnQoKSA9PSAzKQogCQkJCXVudHJhY2tlZENvbW1pdCA9IHJldldhbGsucGFyc2VDb21taXQoc3Rhc2hDb21taXQuZ2V0UGFyZW50KDIpKTsKIAotCQkJUmVzb2x2ZU1lcmdlciBtZXJnZXIgPSAoUmVzb2x2ZU1lcmdlcikgc3RyYXRlZ3kubmV3TWVyZ2VyKHJlcG8pOwotCQkJbWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7ICJzdGFzaGVkIEhFQUQiLCAiSEVBRCIsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCQkic3Rhc2giIH0pOyAvLyROT04tTkxTLTEkCi0JCQltZXJnZXIuc2V0QmFzZShzdGFzaEhlYWRDb21taXQpOwotCQkJbWVyZ2VyLnNldFdvcmtpbmdUcmVlSXRlcmF0b3IobmV3IEZpbGVUcmVlSXRlcmF0b3IocmVwbykpOwotCQkJYm9vbGVhbiBtZXJnZVN1Y2NlZWRlZCA9IG1lcmdlci5tZXJnZShoZWFkQ29tbWl0LCBzdGFzaENvbW1pdCk7Ci0JCQlMaXN0PFN0cmluZz4gbW9kaWZpZWRCeU1lcmdlID0gbWVyZ2VyLmdldE1vZGlmaWVkRmlsZXMoKTsKLQkJCWlmICghbW9kaWZpZWRCeU1lcmdlLmlzRW1wdHkoKSkgewotCQkJCXJlcG8uZmlyZUV2ZW50KAotCQkJCQkJbmV3IFdvcmtpbmdUcmVlTW9kaWZpZWRFdmVudChtb2RpZmllZEJ5TWVyZ2UsIG51bGwpKTsKKwkJCU1lcmdlciBtZXJnZXIgPSBzdHJhdGVneS5uZXdNZXJnZXIocmVwbyk7CisJCQlib29sZWFuIG1lcmdlU3VjY2VlZGVkOworCQkJaWYgKG1lcmdlciBpbnN0YW5jZW9mIFJlc29sdmVNZXJnZXIpIHsKKwkJCQlSZXNvbHZlTWVyZ2VyIHJlc29sdmVNZXJnZXIgPSAoUmVzb2x2ZU1lcmdlcikgbWVyZ2VyOworCQkJCXJlc29sdmVNZXJnZXIKKwkJCQkJCS5zZXRDb21taXROYW1lcyhuZXcgU3RyaW5nW10geyAic3Rhc2hlZCBIRUFEIiwgIkhFQUQiLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQkJInN0YXNoIiB9KTsgLy8kTk9OLU5MUy0xJAorCQkJCXJlc29sdmVNZXJnZXIuc2V0QmFzZShzdGFzaEhlYWRDb21taXQpOworCQkJCXJlc29sdmVNZXJnZXIKKwkJCQkJCS5zZXRXb3JraW5nVHJlZUl0ZXJhdG9yKG5ldyBGaWxlVHJlZUl0ZXJhdG9yKHJlcG8pKTsKKwkJCQlyZXNvbHZlTWVyZ2VyLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KGNvbnRlbnRTdHJhdGVneSk7CisJCQkJbWVyZ2VTdWNjZWVkZWQgPSByZXNvbHZlTWVyZ2VyLm1lcmdlKGhlYWRDb21taXQsIHN0YXNoQ29tbWl0KTsKKwkJCQlMaXN0PFN0cmluZz4gbW9kaWZpZWRCeU1lcmdlID0gcmVzb2x2ZU1lcmdlci5nZXRNb2RpZmllZEZpbGVzKCk7CisJCQkJaWYgKCFtb2RpZmllZEJ5TWVyZ2UuaXNFbXB0eSgpKSB7CisJCQkJCXJlcG8uZmlyZUV2ZW50KG5ldyBXb3JraW5nVHJlZU1vZGlmaWVkRXZlbnQobW9kaWZpZWRCeU1lcmdlLAorCQkJCQkJCW51bGwpKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCW1lcmdlU3VjY2VlZGVkID0gbWVyZ2VyLm1lcmdlKGhlYWRDb21taXQsIHN0YXNoQ29tbWl0KTsKIAkJCX0KIAkJCWlmIChtZXJnZVN1Y2NlZWRlZCkgewogCQkJCURpckNhY2hlIGRjID0gcmVwby5sb2NrRGlyQ2FjaGUoKTsKQEAgLTE4NCwxMSArMTk3LDE0IEBACiAJCQkJZGNvLnNldEZhaWxPbkNvbmZsaWN0KHRydWUpOwogCQkJCWRjby5jaGVja291dCgpOyAvLyBJZ25vcmluZyBmYWlsZWQgZGVsZXRlcy4uLi4KIAkJCQlpZiAocmVzdG9yZUluZGV4KSB7Ci0JCQkJCVJlc29sdmVNZXJnZXIgaXhNZXJnZXIgPSAoUmVzb2x2ZU1lcmdlcikgc3RyYXRlZ3kKLQkJCQkJCQkubmV3TWVyZ2VyKHJlcG8sIHRydWUpOwotCQkJCQlpeE1lcmdlci5zZXRDb21taXROYW1lcyhuZXcgU3RyaW5nW10geyAic3Rhc2hlZCBIRUFEIiwgLy8kTk9OLU5MUy0xJAotCQkJCQkJCSJIRUFEIiwgInN0YXNoZWQgaW5kZXgiIH0pOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJAotCQkJCQlpeE1lcmdlci5zZXRCYXNlKHN0YXNoSGVhZENvbW1pdCk7CisJCQkJCU1lcmdlciBpeE1lcmdlciA9IHN0cmF0ZWd5Lm5ld01lcmdlcihyZXBvLCB0cnVlKTsKKwkJCQkJaWYgKGl4TWVyZ2VyIGluc3RhbmNlb2YgUmVzb2x2ZU1lcmdlcikgeworCQkJCQkJUmVzb2x2ZU1lcmdlciByZXNvbHZlTWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIGl4TWVyZ2VyOworCQkJCQkJcmVzb2x2ZU1lcmdlci5zZXRDb21taXROYW1lcyhuZXcgU3RyaW5nW10geyAic3Rhc2hlZCBIRUFEIiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkiSEVBRCIsICJzdGFzaGVkIGluZGV4IiB9KTsgLy8kTk9OLU5MUy0xJC8vJE5PTi1OTFMtMiQKKwkJCQkJCXJlc29sdmVNZXJnZXIuc2V0QmFzZShzdGFzaEhlYWRDb21taXQpOworCQkJCQkJcmVzb2x2ZU1lcmdlci5zZXRDb250ZW50TWVyZ2VTdHJhdGVneShjb250ZW50U3RyYXRlZ3kpOworCQkJCQl9CiAJCQkJCWJvb2xlYW4gb2sgPSBpeE1lcmdlci5tZXJnZShoZWFkQ29tbWl0LCBzdGFzaEluZGV4Q29tbWl0KTsKIAkJCQkJaWYgKG9rKSB7CiAJCQkJCQlyZXNldEluZGV4KHJldldhbGsKQEAgLTIwMCwxNiArMjE2LDIwIEBACiAJCQkJfQogCiAJCQkJaWYgKHVudHJhY2tlZENvbW1pdCAhPSBudWxsKSB7Ci0JCQkJCVJlc29sdmVNZXJnZXIgdW50cmFja2VkTWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIHN0cmF0ZWd5Ci0JCQkJCQkJLm5ld01lcmdlcihyZXBvLCB0cnVlKTsKLQkJCQkJdW50cmFja2VkTWVyZ2VyLnNldENvbW1pdE5hbWVzKG5ldyBTdHJpbmdbXSB7Ci0JCQkJCQkJIm51bGwiLCAiSEVBRCIsICJ1bnRyYWNrZWQgZmlsZXMiIH0pOyAvLyROT04tTkxTLTEkLy8kTk9OLU5MUy0yJC8vJE5PTi1OTFMtMyQKLQkJCQkJLy8gVGhlcmUgaXMgbm8gY29tbW9uIGJhc2UgZm9yIEhFQUQgJiB1bnRyYWNrZWQgZmlsZXMKLQkJCQkJLy8gYmVjYXVzZSB0aGUgY29tbWl0IGZvciB1bnRyYWNrZWQgZmlsZXMgaGFzIG5vIHBhcmVudC4gSWYKLQkJCQkJLy8gd2UgdXNlIHN0YXNoSGVhZENvbW1pdCBhcyBjb21tb24gYmFzZSAoYXMgaW4gdGhlIG90aGVyCi0JCQkJCS8vIG1lcmdlcykgd2UgcG90ZW50aWFsbHkgcmVwb3J0IGNvbmZsaWN0cyBmb3IgZmlsZXMKLQkJCQkJLy8gd2hpY2ggYXJlIG5vdCBldmVuIG1lbWJlciBvZiB1bnRyYWNrZWQgZmlsZXMgY29tbWl0Ci0JCQkJCXVudHJhY2tlZE1lcmdlci5zZXRCYXNlKG51bGwpOworCQkJCQlNZXJnZXIgdW50cmFja2VkTWVyZ2VyID0gc3RyYXRlZ3kubmV3TWVyZ2VyKHJlcG8sIHRydWUpOworCQkJCQlpZiAodW50cmFja2VkTWVyZ2VyIGluc3RhbmNlb2YgUmVzb2x2ZU1lcmdlcikgeworCQkJCQkJUmVzb2x2ZU1lcmdlciByZXNvbHZlTWVyZ2VyID0gKFJlc29sdmVNZXJnZXIpIHVudHJhY2tlZE1lcmdlcjsKKwkJCQkJCXJlc29sdmVNZXJnZXIuc2V0Q29tbWl0TmFtZXMobmV3IFN0cmluZ1tdIHsgIm51bGwiLCAiSEVBRCIsIC8vJE5PTi1OTFMtMSQvLyROT04tTkxTLTIkCisJCQkJCQkJCSJ1bnRyYWNrZWQgZmlsZXMiIH0pOyAvLyROT04tTkxTLTEkCisJCQkJCQkvLyBUaGVyZSBpcyBubyBjb21tb24gYmFzZSBmb3IgSEVBRCAmIHVudHJhY2tlZCBmaWxlcworCQkJCQkJLy8gYmVjYXVzZSB0aGUgY29tbWl0IGZvciB1bnRyYWNrZWQgZmlsZXMgaGFzIG5vIHBhcmVudC4KKwkJCQkJCS8vIElmIHdlIHVzZSBzdGFzaEhlYWRDb21taXQgYXMgY29tbW9uIGJhc2UgKGFzIGluIHRoZQorCQkJCQkJLy8gb3RoZXIgbWVyZ2VzKSB3ZSBwb3RlbnRpYWxseSByZXBvcnQgY29uZmxpY3RzIGZvcgorCQkJCQkJLy8gZmlsZXMgd2hpY2ggYXJlIG5vdCBldmVuIG1lbWJlciBvZiB1bnRyYWNrZWQgZmlsZXMKKwkJCQkJCS8vIGNvbW1pdC4KKwkJCQkJCXJlc29sdmVNZXJnZXIuc2V0QmFzZShudWxsKTsKKwkJCQkJCXJlc29sdmVNZXJnZXIuc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koY29udGVudFN0cmF0ZWd5KTsKKwkJCQkJfQogCQkJCQlib29sZWFuIG9rID0gdW50cmFja2VkTWVyZ2VyLm1lcmdlKGhlYWRDb21taXQsCiAJCQkJCQkJdW50cmFja2VkQ29tbWl0KTsKIAkJCQkJaWYgKG9rKSB7CkBAIC0yNzksNiArMjk5LDIzIEBACiAJfQogCiAJLyoqCisJICogU2V0cyB0aGUgY29udGVudCBtZXJnZSBzdHJhdGVneSB0byB1c2UgaWYgdGhlCisJICoge0BsaW5rICNzZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5KSBtZXJnZSBzdHJhdGVneX0gaXMgInJlc29sdmUiIG9yCisJICogInJlY3Vyc2l2ZSIuCisJICoKKwkgKiBAcGFyYW0gc3RyYXRlZ3kKKwkgKiAgICAgICAgICAgIHRoZSB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9IHRvIGJlIHVzZWQKKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIFN0YXNoQXBwbHlDb21tYW5kIHNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KAorCQkJQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJY2hlY2tDYWxsYWJsZSgpOworCQl0aGlzLmNvbnRlbnRTdHJhdGVneSA9IHN0cmF0ZWd5OworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKIAkgKiBXaGV0aGVyIHRoZSBjb21tYW5kIHNob3VsZCByZXN0b3JlIHVudHJhY2tlZCBmaWxlcwogCSAqCiAJICogQHBhcmFtIGFwcGx5VW50cmFja2VkCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmF3VGV4dC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1Jhd1RleHQuamF2YQppbmRleCA5ZjRiMWZhLi5kMDlkYTAxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmF3VGV4dC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9SYXdUZXh0LmphdmEKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5LCBHb29nbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDksIEpvaGFubmVzIEUuIFNjaGluZGVsaW4gPGpvaGFubmVzLnNjaGluZGVsaW5AZ214LmRlPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSwgSm9oYW5uZXMgRS4gU2NoaW5kZWxpbiA8am9oYW5uZXMuc2NoaW5kZWxpbkBnbXguZGU+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTE2LDYgKzE2LDcgQEAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkJpbmFyeUJsb2JFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTGFyZ2VPYmplY3RFeGNlcHRpb247CkBAIC0xNjUsNiArMTY2LDI3IEBACiAJfQogCiAJLyoqCisJICogR2V0IHRoZSByYXcgdGV4dCBmb3IgYSBzaW5nbGUgbGluZS4KKwkgKgorCSAqIEBwYXJhbSBpCisJICogICAgICAgICAgICBpbmRleCBvZiB0aGUgbGluZSB0byBleHRyYWN0LiBOb3RlIHRoaXMgaXMgMC1iYXNlZCwgc28gbGluZQorCSAqICAgICAgICAgICAgbnVtYmVyIDEgaXMgYWN0dWFsbHkgaW5kZXggMC4KKwkgKiBAcmV0dXJuIHRoZSB0ZXh0IGZvciB0aGUgbGluZSwgd2l0aG91dCBhIHRyYWlsaW5nIExGLCBhcyBhCisJICogICAgICAgICB7QGxpbmsgQnl0ZUJ1ZmZlcn0gdGhhdCBpcyBiYWNrZWQgYnkgYSBzbGljZSBvZiB0aGUKKwkgKiAgICAgICAgIHtAbGluayAjZ2V0UmF3Q29udGVudCgpIHJhdyBjb250ZW50fSwgd2l0aCB0aGUgYnVmZmVyJ3MgcG9zaXRpb24KKwkgKiAgICAgICAgIG9uIHRoZSBzdGFydCBvZiB0aGUgbGluZSBhbmQgdGhlIGxpbWl0IGF0IHRoZSBlbmQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgQnl0ZUJ1ZmZlciBnZXRSYXdTdHJpbmcoaW50IGkpIHsKKwkJaW50IHMgPSBnZXRTdGFydChpKTsKKwkJaW50IGUgPSBnZXRFbmQoaSk7CisJCWlmIChlID4gMCAmJiBjb250ZW50W2UgLSAxXSA9PSAnXG4nKSB7CisJCQllLS07CisJCX0KKwkJcmV0dXJuIEJ5dGVCdWZmZXIud3JhcChjb250ZW50LCBzLCBlIC0gcyk7CisJfQorCisJLyoqCiAJICogR2V0IHRoZSB0ZXh0IGZvciBhIHJlZ2lvbiBvZiBsaW5lcy4KIAkgKgogCSAqIEBwYXJhbSBiZWdpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1JlbmFtZURldGVjdG9yLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmVuYW1lRGV0ZWN0b3IuamF2YQppbmRleCA4MGUxYjE4Li5iYTFmNjNiIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmVuYW1lRGV0ZWN0b3IuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvUmVuYW1lRGV0ZWN0b3IuamF2YQpAQCAtMTIsNiArMTIsNyBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5ORVc7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5PTEQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrLlBhY2tDb25maWcuREVGQVVMVF9CSUdfRklMRV9USFJFU0hPTEQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC05Nyw2ICs5OCwxOSBAQAogCS8qKiBMaW1pdCBpbiB0aGUgbnVtYmVyIG9mIGZpbGVzIHRvIGNvbnNpZGVyIGZvciByZW5hbWVzLiAqLwogCXByaXZhdGUgaW50IHJlbmFtZUxpbWl0OwogCisJLyoqCisJICogRmlsZSBzaXplIHRocmVzaG9sZCAoaW4gYnl0ZXMpIGZvciBkZXRlY3RpbmcgcmVuYW1lcy4gRmlsZXMgbGFyZ2VyCisJICogdGhhbiB0aGlzIHNpemUgd2lsbCBub3QgYmUgcHJvY2Vzc2VkIGZvciByZW5hbWVzLgorCSAqLworCXByaXZhdGUgaW50IGJpZ0ZpbGVUaHJlc2hvbGQgPSBERUZBVUxUX0JJR19GSUxFX1RIUkVTSE9MRDsKKworCS8qKgorCSAqIFNraXAgZGV0ZWN0aW5nIGNvbnRlbnQgcmVuYW1lcyBmb3IgYmluYXJ5IGZpbGVzLiBDb250ZW50IHJlbmFtZXMgYXJlCisJICogdGhvc2UgdGhhdCBhcmUgbm90IGV4YWN0LCB0aGF0IGlzIHdpdGggYSBzbGlnaHQgY29udGVudCBtb2RpZmljYXRpb24KKwkgKiBiZXR3ZWVuIHRoZSB0d28gZmlsZXMuCisJICovCisJcHJpdmF0ZSBib29sZWFuIHNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzID0gZmFsc2U7CisKIAkvKiogU2V0IGlmIHRoZSBudW1iZXIgb2YgYWRkcyBvciBkZWxldGVzIHdhcyBvdmVyIHRoZSBsaW1pdC4gKi8KIAlwcml2YXRlIGJvb2xlYW4gb3ZlclJlbmFtZUxpbWl0OwogCkBAIC0yMDksNiArMjIzLDQ2IEBACiAJfQogCiAJLyoqCisJICogR2V0IGZpbGUgc2l6ZSB0aHJlc2hvbGQgZm9yIGRldGVjdGluZyByZW5hbWVzLiBGaWxlcyBsYXJnZXIKKwkgKiB0aGFuIHRoaXMgc2l6ZSB3aWxsIG5vdCBiZSBwcm9jZXNzZWQgZm9yIHJlbmFtZSBkZXRlY3Rpb24uCisJICoKKwkgKiBAcmV0dXJuIHRocmVzaG9sZCBpbiBieXRlcyBvZiB0aGUgZmlsZSBzaXplLgorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIGludCBnZXRCaWdGaWxlVGhyZXNob2xkKCkgeyByZXR1cm4gYmlnRmlsZVRocmVzaG9sZDsgfQorCisJLyoqCisJICogU2V0IHRoZSBmaWxlIHNpemUgdGhyZXNob2xkIGZvciBkZXRlY3RpbmcgcmVuYW1lcy4gRmlsZXMgbGFyZ2VyIHRoYW4gdGhpcworCSAqIHRocmVzaG9sZCB3aWxsIGJlIHNraXBwZWQgZHVyaW5nIHJlbmFtZSBkZXRlY3Rpb24gY29tcHV0YXRpb24uCisJICoKKwkgKiBAcGFyYW0gdGhyZXNob2xkIGZpbGUgc2l6ZSB0aHJlc2hvbGQgaW4gYnl0ZXMuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRCaWdGaWxlVGhyZXNob2xkKGludCB0aHJlc2hvbGQpIHsKKwkJdGhpcy5iaWdGaWxlVGhyZXNob2xkID0gdGhyZXNob2xkOworCX0KKworCS8qKgorCSAqIEdldCBza2lwcGluZyBkZXRlY3RpbmcgY29udGVudCByZW5hbWVzIGZvciBiaW5hcnkgZmlsZXMuCisJICoKKwkgKiBAcmV0dXJuIHRydWUgaWYgY29udGVudCByZW5hbWVzIHNob3VsZCBiZSBza2lwcGVkIGZvciBiaW5hcnkgZmlsZXMsIGZhbHNlIG90aGVyd2lzZS4KKwkgKiBAc2luY2UgNS4xMgorCSAqLworCXB1YmxpYyBib29sZWFuIGdldFNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzKCkgeworCQlyZXR1cm4gc2tpcENvbnRlbnRSZW5hbWVzRm9yQmluYXJ5RmlsZXM7CisJfQorCisJLyoqCisJICogU2V0cyBza2lwcGluZyBkZXRlY3RpbmcgY29udGVudCByZW5hbWVzIGZvciBiaW5hcnkgZmlsZXMuCisJICoKKwkgKiBAcGFyYW0gdmFsdWUgdHJ1ZSBpZiBjb250ZW50IHJlbmFtZXMgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGJpbmFyeSBmaWxlcywgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIHZvaWQgc2V0U2tpcENvbnRlbnRSZW5hbWVzRm9yQmluYXJ5RmlsZXMoYm9vbGVhbiB2YWx1ZSkgeworCQl0aGlzLnNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzID0gdmFsdWU7CisJfQorCisJLyoqCiAJICogQ2hlY2sgaWYgdGhlIGRldGVjdG9yIGlzIG92ZXIgdGhlIHJlbmFtZSBsaW1pdC4KIAkgKiA8cD4KIAkgKiBUaGlzIG1ldGhvZCBjYW4gYmUgaW52b2tlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHtAY29kZSBnZXRFbnRyaWVzfSBoYXMKQEAgLTQ5Myw2ICs1NDcsOCBAQAogCiAJCQlkID0gbmV3IFNpbWlsYXJpdHlSZW5hbWVEZXRlY3RvcihyZWFkZXIsIGRlbGV0ZWQsIGFkZGVkKTsKIAkJCWQuc2V0UmVuYW1lU2NvcmUoZ2V0UmVuYW1lU2NvcmUoKSk7CisJCQlkLnNldEJpZ0ZpbGVUaHJlc2hvbGQoZ2V0QmlnRmlsZVRocmVzaG9sZCgpKTsKKwkJCWQuc2V0U2tpcEJpbmFyeUZpbGVzKGdldFNraXBDb250ZW50UmVuYW1lc0ZvckJpbmFyeUZpbGVzKCkpOwogCQkJZC5jb21wdXRlKHBtKTsKIAkJCW92ZXJSZW5hbWVMaW1pdCB8PSBkLmlzVGFibGVPdmVyZmxvdygpOwogCQkJZGVsZXRlZCA9IGQuZ2V0TGVmdE92ZXJTb3VyY2VzKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eUluZGV4LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eUluZGV4LmphdmEKaW5kZXggZmI2ZTVkZi4uNjYxMzY5YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1NpbWlsYXJpdHlJbmRleC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9TaW1pbGFyaXR5SW5kZXguamF2YQpAQCAtMTAyLDYgKzEwMiwxNSBAQAogCQlpZEdyb3dBdCA9IGdyb3dBdChpZEhhc2hCaXRzKTsKIAl9CiAKKwlzdGF0aWMgYm9vbGVhbiBpc0JpbmFyeShPYmplY3RMb2FkZXIgb2JqKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAob2JqLmlzTGFyZ2UoKSkgeworCQkJdHJ5IChPYmplY3RTdHJlYW0gaW4xID0gb2JqLm9wZW5TdHJlYW0oKSkgeworCQkJCXJldHVybiBSYXdUZXh0LmlzQmluYXJ5KGluMSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIFJhd1RleHQuaXNCaW5hcnkob2JqLmdldENhY2hlZEJ5dGVzKCkpOworCX0KKwogCXZvaWQgaGFzaChPYmplY3RMb2FkZXIgb2JqKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCiAJCQlUYWJsZUZ1bGxFeGNlcHRpb24gewogCQlpZiAob2JqLmlzTGFyZ2UoKSkgewpAQCAtMTE1LDkgKzEyNCw3IEBACiAJcHJpdmF0ZSB2b2lkIGhhc2hMYXJnZU9iamVjdChPYmplY3RMb2FkZXIgb2JqKSB0aHJvd3MgSU9FeGNlcHRpb24sCiAJCQlUYWJsZUZ1bGxFeGNlcHRpb24gewogCQlib29sZWFuIHRleHQ7Ci0JCXRyeSAoT2JqZWN0U3RyZWFtIGluMSA9IG9iai5vcGVuU3RyZWFtKCkpIHsKLQkJCXRleHQgPSAhUmF3VGV4dC5pc0JpbmFyeShpbjEpOwotCQl9CisJCXRleHQgPSAhaXNCaW5hcnkob2JqKTsKIAogCQl0cnkgKE9iamVjdFN0cmVhbSBpbjIgPSBvYmoub3BlblN0cmVhbSgpKSB7CiAJCQloYXNoKGluMiwgaW4yLmdldFNpemUoKSwgdGV4dCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eVJlbmFtZURldGVjdG9yLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvU2ltaWxhcml0eVJlbmFtZURldGVjdG9yLmphdmEKaW5kZXggNzRhMTFhMC4uNTg3MWI0YSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL1NpbWlsYXJpdHlSZW5hbWVEZXRlY3Rvci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9TaW1pbGFyaXR5UmVuYW1lRGV0ZWN0b3IuamF2YQpAQCAtMTIsNiArMTIsNyBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5ORVc7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5PTEQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrLlBhY2tDb25maWcuREVGQVVMVF9CSUdfRklMRV9USFJFU0hPTEQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CkBAIC0yNSw2ICsyNiw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5GaWxlTW9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdExvYWRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Qcm9ncmVzc01vbml0b3I7CiAKIGNsYXNzIFNpbWlsYXJpdHlSZW5hbWVEZXRlY3RvciB7CkBAIC04MCw2ICs4MiwxNSBAQAogCS8qKiBTY29yZSBhIHBhaXIgbXVzdCBleGNlZWQgdG8gYmUgY29uc2lkZXJlZCBhIHJlbmFtZS4gKi8KIAlwcml2YXRlIGludCByZW5hbWVTY29yZSA9IDYwOwogCisJLyoqCisJICogRmlsZSBzaXplIHRocmVzaG9sZCAoaW4gYnl0ZXMpIGZvciBkZXRlY3RpbmcgcmVuYW1lcy4gRmlsZXMgbGFyZ2VyCisJICogdGhhbiB0aGlzIHNpemUgd2lsbCBub3QgYmUgcHJvY2Vzc2VkIGZvciByZW5hbWVzLgorCSAqLworCXByaXZhdGUgaW50IGJpZ0ZpbGVUaHJlc2hvbGQgPSBERUZBVUxUX0JJR19GSUxFX1RIUkVTSE9MRDsKKworCS8qKiBTa2lwIGNvbnRlbnQgcmVuYW1lcyBmb3IgYmluYXJ5IGZpbGVzLiAqLworCXByaXZhdGUgYm9vbGVhbiBza2lwQmluYXJ5RmlsZXMgPSBmYWxzZTsKKwogCS8qKiBTZXQgaWYgYW55IHtAbGluayBTaW1pbGFyaXR5SW5kZXguVGFibGVGdWxsRXhjZXB0aW9ufSBvY2N1cnMuICovCiAJcHJpdmF0ZSBib29sZWFuIHRhYmxlT3ZlcmZsb3c7CiAKQEAgLTk2LDYgKzEwNywxNCBAQAogCQlyZW5hbWVTY29yZSA9IHNjb3JlOwogCX0KIAorCXZvaWQgc2V0QmlnRmlsZVRocmVzaG9sZChpbnQgdGhyZXNob2xkKSB7CisJCWJpZ0ZpbGVUaHJlc2hvbGQgPSB0aHJlc2hvbGQ7CisJfQorCisJdm9pZCBzZXRTa2lwQmluYXJ5RmlsZXMoYm9vbGVhbiB2YWx1ZSkgeworCQlza2lwQmluYXJ5RmlsZXMgPSB2YWx1ZTsKKwl9CisKIAl2b2lkIGNvbXB1dGUoUHJvZ3Jlc3NNb25pdG9yIHBtKSB0aHJvd3MgSU9FeGNlcHRpb24sIENhbmNlbGxlZEV4Y2VwdGlvbiB7CiAJCWlmIChwbSA9PSBudWxsKQogCQkJcG0gPSBOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFOwpAQCAtMjUzLDkgKzI3MiwxOSBAQAogCQkJCQljb250aW51ZTsKIAkJCQl9CiAKKwkJCQlpZiAobWF4ID4gYmlnRmlsZVRocmVzaG9sZCkgeworCQkJCQlwbS51cGRhdGUoMSk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwogCQkJCWlmIChzID09IG51bGwpIHsKIAkJCQkJdHJ5IHsKLQkJCQkJCXMgPSBoYXNoKE9MRCwgc3JjRW50KTsKKwkJCQkJCU9iamVjdExvYWRlciBsb2FkZXIgPSByZWFkZXIub3BlbihPTEQsIHNyY0VudCk7CisJCQkJCQlpZiAoc2tpcEJpbmFyeUZpbGVzICYmIFNpbWlsYXJpdHlJbmRleC5pc0JpbmFyeShsb2FkZXIpKSB7CisJCQkJCQkJcG0udXBkYXRlKDEpOworCQkJCQkJCWNvbnRpbnVlIFNSQzsKKwkJCQkJCX0KKwkJCQkJCXMgPSBoYXNoKGxvYWRlcik7CiAJCQkJCX0gY2F0Y2ggKFRhYmxlRnVsbEV4Y2VwdGlvbiB0YWJsZUZ1bGwpIHsKIAkJCQkJCXRhYmxlT3ZlcmZsb3cgPSB0cnVlOwogCQkJCQkJY29udGludWUgU1JDOwpAQCAtMjY0LDcgKzI5MywxMiBAQAogCiAJCQkJU2ltaWxhcml0eUluZGV4IGQ7CiAJCQkJdHJ5IHsKLQkJCQkJZCA9IGhhc2goTkVXLCBkc3RFbnQpOworCQkJCQlPYmplY3RMb2FkZXIgbG9hZGVyID0gcmVhZGVyLm9wZW4oTkVXLCBkc3RFbnQpOworCQkJCQlpZiAoc2tpcEJpbmFyeUZpbGVzICYmIFNpbWlsYXJpdHlJbmRleC5pc0JpbmFyeShsb2FkZXIpKSB7CisJCQkJCQlwbS51cGRhdGUoMSk7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlkID0gaGFzaChsb2FkZXIpOwogCQkJCX0gY2F0Y2ggKFRhYmxlRnVsbEV4Y2VwdGlvbiB0YWJsZUZ1bGwpIHsKIAkJCQkJaWYgKGRzdFRvb0xhcmdlID09IG51bGwpCiAJCQkJCQlkc3RUb29MYXJnZSA9IG5ldyBCaXRTZXQoZHN0cy5zaXplKCkpOwpAQCAtMzQ4LDEwICszODIsMTAgQEAKIAkJcmV0dXJuICgoKGRpclNjb3JlTHRyICsgZGlyU2NvcmVSdGwpICogMjUpICsgKGZpbGVTY29yZSAqIDUwKSkgLyAxMDA7CiAJfQogCi0JcHJpdmF0ZSBTaW1pbGFyaXR5SW5kZXggaGFzaChEaWZmRW50cnkuU2lkZSBzaWRlLCBEaWZmRW50cnkgZW50KQorCXByaXZhdGUgU2ltaWxhcml0eUluZGV4IGhhc2goT2JqZWN0TG9hZGVyIG9iamVjdExvYWRlcikKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiwgVGFibGVGdWxsRXhjZXB0aW9uIHsKIAkJU2ltaWxhcml0eUluZGV4IHIgPSBuZXcgU2ltaWxhcml0eUluZGV4KCk7Ci0JCXIuaGFzaChyZWFkZXIub3BlbihzaWRlLCBlbnQpKTsKKwkJci5oYXNoKG9iamVjdExvYWRlcik7CiAJCXIuc29ydCgpOwogCQlyZXR1cm4gcjsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpcmNhY2hlL0RpckNhY2hlQ2hlY2tvdXQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlyY2FjaGUvRGlyQ2FjaGVDaGVja291dC5qYXZhCmluZGV4IDY3MTQ3NWUuLmM5MDRhNzggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlyY2FjaGUvRGlyQ2FjaGVDaGVja291dC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlyY2FjaGUvRGlyQ2FjaGVDaGVja291dC5qYXZhCkBAIC0xNjEwLDExICsxNjEwLDkgQEAKIAkJfQogCQlpZiAocmMgIT0gMCkgewogCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKG5ldyBGaWx0ZXJGYWlsZWRFeGNlcHRpb24ocmMsCi0JCQkJCWNoZWNrb3V0TWV0YWRhdGEuc211ZGdlRmlsdGVyQ29tbWFuZCwKLQkJCQkJcGF0aCwKKwkJCQkJY2hlY2tvdXRNZXRhZGF0YS5zbXVkZ2VGaWx0ZXJDb21tYW5kLCBwYXRoLAogCQkJCQlyZXN1bHQuZ2V0U3Rkb3V0KCkudG9CeXRlQXJyYXkoTUFYX0VYQ0VQVElPTl9URVhUX1NJWkUpLAotCQkJCQlSYXdQYXJzZVV0aWxzLmRlY29kZShyZXN1bHQuZ2V0U3RkZXJyKCkKLQkJCQkJCQkudG9CeXRlQXJyYXkoTUFYX0VYQ0VQVElPTl9URVhUX1NJWkUpKSkpOworCQkJCQlyZXN1bHQuZ2V0U3RkZXJyKCkudG9TdHJpbmcoTUFYX0VYQ0VQVElPTl9URVhUX1NJWkUpKSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZXBvQ29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kLmphdmEKaW5kZXggYzAzOWFhZi4uNTUyMzE1ZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kLmphdmEKQEAgLTEyLDYgKzEyLDcgQEAKIGltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuREVGQVVMVF9SRU1PVEVfTkFNRTsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLlJfUkVNT1RFUzsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLlJfVEFHUzsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKQEAgLTc5LDYgKzgwLDEzIEBACiAgKiBAc2luY2UgMy40CiAgKi8KIHB1YmxpYyBjbGFzcyBSZXBvQ29tbWFuZCBleHRlbmRzIEdpdENvbW1hbmQ8UmV2Q29tbWl0PiB7CisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0tfRkFJTFVSRV9NQVhfUkVUUklFUyA9IDU7CisKKwkvLyBSZXRyeSBleHBvbmVudGlhbGx5IHdpdGggZGVsYXlzIGluIHRoaXMgcmFuZ2UKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DS19GQUlMVVJFX01JTl9SRVRSWV9ERUxBWV9NSUxMSVMgPSA1MDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NLX0ZBSUxVUkVfTUFYX1JFVFJZX0RFTEFZX01JTExJUyA9IDUwMDA7CisKIAlwcml2YXRlIFN0cmluZyBtYW5pZmVzdFBhdGg7CiAJcHJpdmF0ZSBTdHJpbmcgYmFzZVVyaTsKIAlwcml2YXRlIFVSSSB0YXJnZXRVcmk7CkBAIC01ODcsOCArNTk1LDExIEBACiAJCQkJCQkJdGhyb3cgbmV3IFJlbW90ZVVuYXZhaWxhYmxlRXhjZXB0aW9uKHVybCk7CiAJCQkJCQl9CiAJCQkJCQlpZiAocmVjb3JkUmVtb3RlQnJhbmNoKSB7Ci0JCQkJCQkJLy8gY2FuIGJlIGJyYW5jaCBvciB0YWcKLQkJCQkJCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCAiYnJhbmNoIiwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJLy8gImJyYW5jaCIgZmllbGQgaXMgb25seSBmb3Igbm9uLXRhZyByZWZlcmVuY2VzLgorCQkJCQkJCS8vIEtlZXAgdGFncyBpbiAicmVmIiBmaWVsZCBhcyBoaW50IGZvciBvdGhlciB0b29scy4KKwkJCQkJCQlTdHJpbmcgZmllbGQgPSBwcm9qLmdldFJldmlzaW9uKCkuc3RhcnRzV2l0aCgKKwkJCQkJCQkJCVJfVEFHUykgPyAicmVmIiA6ICJicmFuY2giOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCBmaWVsZCwgLy8kTk9OLU5MUy0xJAogCQkJCQkJCQkJcHJvai5nZXRSZXZpc2lvbigpKTsKIAkJCQkJCX0KIApAQCAtNjgyLDUwICs2OTMsMjIgQEAKIAkJCQlidWlsZGVyLmZpbmlzaCgpOwogCQkJCU9iamVjdElkIHRyZWVJZCA9IGluZGV4LndyaXRlVHJlZShpbnNlcnRlcik7CiAKLQkJCQkvLyBDcmVhdGUgYSBDb21taXQgb2JqZWN0LCBwb3B1bGF0ZSBpdCBhbmQgd3JpdGUgaXQKLQkJCQlPYmplY3RJZCBoZWFkSWQgPSByZXBvLnJlc29sdmUodGFyZ2V0QnJhbmNoICsgIl57Y29tbWl0fSIpOyAvLyROT04tTkxTLTEkCi0JCQkJaWYgKGhlYWRJZCAhPSBudWxsICYmIHJ3LnBhcnNlQ29tbWl0KGhlYWRJZCkuZ2V0VHJlZSgpLmdldElkKCkuZXF1YWxzKHRyZWVJZCkpIHsKLQkJCQkJLy8gTm8gY2hhbmdlLiBEbyBub3RoaW5nLgotCQkJCQlyZXR1cm4gcncucGFyc2VDb21taXQoaGVhZElkKTsKKwkJCQlsb25nIHByZXZEZWxheSA9IDA7CisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBMT0NLX0ZBSUxVUkVfTUFYX1JFVFJJRVMgLSAxOyBpKyspIHsKKwkJCQkJdHJ5IHsKKwkJCQkJCXJldHVybiBjb21taXRUcmVlT25DdXJyZW50VGlwKAorCQkJCQkJCWluc2VydGVyLCBydywgdHJlZUlkKTsKKwkJCQkJfSBjYXRjaCAoQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbiBlKSB7CisJCQkJCQlwcmV2RGVsYXkgPSBGaWxlVXRpbHMuZGVsYXkocHJldkRlbGF5LAorCQkJCQkJCQlMT0NLX0ZBSUxVUkVfTUlOX1JFVFJZX0RFTEFZX01JTExJUywKKwkJCQkJCQkJTE9DS19GQUlMVVJFX01BWF9SRVRSWV9ERUxBWV9NSUxMSVMpOworCQkJCQkJVGhyZWFkLnNsZWVwKHByZXZEZWxheSk7CisJCQkJCQlyZXBvLmdldFJlZkRhdGFiYXNlKCkucmVmcmVzaCgpOworCQkJCQl9CiAJCQkJfQotCi0JCQkJQ29tbWl0QnVpbGRlciBjb21taXQgPSBuZXcgQ29tbWl0QnVpbGRlcigpOwotCQkJCWNvbW1pdC5zZXRUcmVlSWQodHJlZUlkKTsKLQkJCQlpZiAoaGVhZElkICE9IG51bGwpCi0JCQkJCWNvbW1pdC5zZXRQYXJlbnRJZHMoaGVhZElkKTsKLQkJCQljb21taXQuc2V0QXV0aG9yKGF1dGhvcik7Ci0JCQkJY29tbWl0LnNldENvbW1pdHRlcihhdXRob3IpOwotCQkJCWNvbW1pdC5zZXRNZXNzYWdlKFJlcG9UZXh0LmdldCgpLnJlcG9Db21taXRNZXNzYWdlKTsKLQotCQkJCU9iamVjdElkIGNvbW1pdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KGNvbW1pdCk7Ci0JCQkJaW5zZXJ0ZXIuZmx1c2goKTsKLQotCQkJCVJlZlVwZGF0ZSBydSA9IHJlcG8udXBkYXRlUmVmKHRhcmdldEJyYW5jaCk7Ci0JCQkJcnUuc2V0TmV3T2JqZWN0SWQoY29tbWl0SWQpOwotCQkJCXJ1LnNldEV4cGVjdGVkT2xkT2JqZWN0SWQoaGVhZElkICE9IG51bGwgPyBoZWFkSWQgOiBPYmplY3RJZC56ZXJvSWQoKSk7Ci0JCQkJUmVzdWx0IHJjID0gcnUudXBkYXRlKHJ3KTsKLQotCQkJCXN3aXRjaCAocmMpIHsKLQkJCQkJY2FzZSBORVc6Ci0JCQkJCWNhc2UgRk9SQ0VEOgotCQkJCQljYXNlIEZBU1RfRk9SV0FSRDoKLQkJCQkJCS8vIFN1Y2Nlc3NmdWwuIERvIG5vdGhpbmcuCi0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBSRUpFQ1RFRDoKLQkJCQkJY2FzZSBMT0NLX0ZBSUxVUkU6Ci0JCQkJCQl0aHJvdyBuZXcgQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbigKLQkJCQkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQkJCQkJSkdpdFRleHQuZ2V0KCkuY2Fubm90TG9jaywgdGFyZ2V0QnJhbmNoKSwKLQkJCQkJCQkJcnUuZ2V0UmVmKCksCi0JCQkJCQkJCXJjKTsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCXRocm93IG5ldyBKR2l0SW50ZXJuYWxFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQkJCUpHaXRUZXh0LmdldCgpLnVwZGF0aW5nUmVmRmFpbGVkLAotCQkJCQkJCQl0YXJnZXRCcmFuY2gsIGNvbW1pdElkLm5hbWUoKSwgcmMpKTsKLQkJCQl9Ci0KLQkJCQlyZXR1cm4gcncucGFyc2VDb21taXQoY29tbWl0SWQpOwotCQkJfSBjYXRjaCAoR2l0QVBJRXhjZXB0aW9uIHwgSU9FeGNlcHRpb24gZSkgeworCQkJCS8vIEluIHRoZSBsYXN0IHRyeSwganVzdCBwcm9wYWdhdGUgdGhlIGV4Y2VwdGlvbnMKKwkJCQlyZXR1cm4gY29tbWl0VHJlZU9uQ3VycmVudFRpcChpbnNlcnRlciwgcncsIHRyZWVJZCk7CisJCQl9IGNhdGNoIChHaXRBUElFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiB8IEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKIAkJCQl0aHJvdyBuZXcgTWFuaWZlc3RFcnJvckV4Y2VwdGlvbihlKTsKIAkJCX0KIAkJfQpAQCAtNzQyLDYgKzcyNSw1MSBAQAogCQl9CiAJfQogCisKKwlwcml2YXRlIFJldkNvbW1pdCBjb21taXRUcmVlT25DdXJyZW50VGlwKE9iamVjdEluc2VydGVyIGluc2VydGVyLAorCQkJUmV2V2FsayBydywgT2JqZWN0SWQgdHJlZUlkKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBDb25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uIHsKKwkJT2JqZWN0SWQgaGVhZElkID0gcmVwby5yZXNvbHZlKHRhcmdldEJyYW5jaCArICJee2NvbW1pdH0iKTsgLy8kTk9OLU5MUy0xJAorCQlpZiAoaGVhZElkICE9IG51bGwgJiYgcncucGFyc2VDb21taXQoaGVhZElkKS5nZXRUcmVlKCkuZ2V0SWQoKS5lcXVhbHModHJlZUlkKSkgeworCQkJLy8gTm8gY2hhbmdlLiBEbyBub3RoaW5nLgorCQkJcmV0dXJuIHJ3LnBhcnNlQ29tbWl0KGhlYWRJZCk7CisJCX0KKworCQlDb21taXRCdWlsZGVyIGNvbW1pdCA9IG5ldyBDb21taXRCdWlsZGVyKCk7CisJCWNvbW1pdC5zZXRUcmVlSWQodHJlZUlkKTsKKwkJaWYgKGhlYWRJZCAhPSBudWxsKQorCQkJY29tbWl0LnNldFBhcmVudElkcyhoZWFkSWQpOworCQljb21taXQuc2V0QXV0aG9yKGF1dGhvcik7CisJCWNvbW1pdC5zZXRDb21taXR0ZXIoYXV0aG9yKTsKKwkJY29tbWl0LnNldE1lc3NhZ2UoUmVwb1RleHQuZ2V0KCkucmVwb0NvbW1pdE1lc3NhZ2UpOworCisJCU9iamVjdElkIGNvbW1pdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KGNvbW1pdCk7CisJCWluc2VydGVyLmZsdXNoKCk7CisKKwkJUmVmVXBkYXRlIHJ1ID0gcmVwby51cGRhdGVSZWYodGFyZ2V0QnJhbmNoKTsKKwkJcnUuc2V0TmV3T2JqZWN0SWQoY29tbWl0SWQpOworCQlydS5zZXRFeHBlY3RlZE9sZE9iamVjdElkKGhlYWRJZCAhPSBudWxsID8gaGVhZElkIDogT2JqZWN0SWQuemVyb0lkKCkpOworCQlSZXN1bHQgcmMgPSBydS51cGRhdGUocncpOworCQlzd2l0Y2ggKHJjKSB7CisJCQljYXNlIE5FVzoKKwkJCWNhc2UgRk9SQ0VEOgorCQkJY2FzZSBGQVNUX0ZPUldBUkQ6CisJCQkJLy8gU3VjY2Vzc2Z1bC4gRG8gbm90aGluZy4KKwkJCQlicmVhazsKKwkJCWNhc2UgUkVKRUNURUQ6CisJCQljYXNlIExPQ0tfRkFJTFVSRToKKwkJCQl0aHJvdyBuZXcgQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0CisJCQkJCQkuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmNhbm5vdExvY2ssIHRhcmdldEJyYW5jaCksCisJCQkJCQlydS5nZXRSZWYoKSwgcmMpOworCQkJZGVmYXVsdDoKKwkJCQl0aHJvdyBuZXcgSkdpdEludGVybmFsRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJSkdpdFRleHQuZ2V0KCkudXBkYXRpbmdSZWZGYWlsZWQsCisJCQkJCQl0YXJnZXRCcmFuY2gsIGNvbW1pdElkLm5hbWUoKSwgcmMpKTsKKwkJfQorCisJCXJldHVybiBydy5wYXJzZUNvbW1pdChjb21taXRJZCk7CisJfQorCiAJcHJpdmF0ZSB2b2lkIGFkZFN1Ym1vZHVsZShTdHJpbmcgbmFtZSwgU3RyaW5nIHVybCwgU3RyaW5nIHBhdGgsCiAJCQlTdHJpbmcgcmV2aXNpb24sIExpc3Q8Q29weUZpbGU+IGNvcHlmaWxlcywgTGlzdDxMaW5rRmlsZT4gbGlua2ZpbGVzLAogCQkJR2l0IGdpdCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5qYXZhCmluZGV4IGI5NDJjMDkuLmUxZmExNDQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LmphdmEKQEAgLTQxLDYgKzQxLDkgQEAKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGFOZXdPYmplY3RJZElzUmVxdWlyZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBhbkV4Y2VwdGlvbk9jY3VycmVkV2hpbGVUcnlpbmdUb0FkZFRoZUlkT2ZIRUFEOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYW5TU0hTZXNzaW9uSGFzQmVlbkFscmVhZHlDcmVhdGVkOworCS8qKiovIHB1YmxpYyBTdHJpbmcgYXBwbHlCaW5hcnlCYXNlT2lkV3Jvbmc7CisJLyoqKi8gcHVibGljIFN0cmluZyBhcHBseUJpbmFyeU9pZFRvb1Nob3J0OworCS8qKiovIHB1YmxpYyBTdHJpbmcgYXBwbHlCaW5hcnlSZXN1bHRPaWRXcm9uZzsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGFwcGx5aW5nQ29tbWl0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYXJjaGl2ZUZvcm1hdEFscmVhZHlBYnNlbnQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBhcmNoaXZlRm9ybWF0QWxyZWFkeVJlZ2lzdGVyZWQ7CkBAIC02NSw3ICs2OCwxOSBAQAogCS8qKiovIHB1YmxpYyBTdHJpbmcgYmFkU2VjdGlvbkVudHJ5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgYmFkU2hhbGxvd0xpbmU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBiYXJlUmVwb3NpdG9yeU5vV29ya2RpckFuZEluZGV4OworCS8qKiovIHB1YmxpYyBTdHJpbmcgYmFzZTg1aW52YWxpZENoYXI7CisJLyoqKi8gcHVibGljIFN0cmluZyBiYXNlODVsZW5ndGg7CisJLyoqKi8gcHVibGljIFN0cmluZyBiYXNlODVvdmVyZmxvdzsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJhc2U4NXRvb0xvbmc7CisJLyoqKi8gcHVibGljIFN0cmluZyBiYXNlODV0b29TaG9ydDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGJhc2VMZW5ndGhJbmNvcnJlY3Q7CisJLyoqKi8gcHVibGljIFN0cmluZyBiaW5hcnlEZWx0YUJhc2VMZW5ndGhNaXNtYXRjaDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJpbmFyeURlbHRhSW52YWxpZE9mZnNldDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJpbmFyeURlbHRhSW52YWxpZFJlc3VsdExlbmd0aDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJpbmFyeUh1bmtEZWNvZGVFcnJvcjsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJpbmFyeUh1bmtJbnZhbGlkTGVuZ3RoOworCS8qKiovIHB1YmxpYyBTdHJpbmcgYmluYXJ5SHVua0xpbmVUb29TaG9ydDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGJpbmFyeUh1bmtNaXNzaW5nTmV3bGluZTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGJpdG1hcE1pc3NpbmdPYmplY3Q7CiAJLyoqKi8gcHVibGljIFN0cmluZyBiaXRtYXBzTXVzdEJlUHJlcGFyZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBibGFtZU5vdENvbW1pdHRlZFlldDsKQEAgLTE2Nyw2ICsxODIsNyBAQAogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29ubmVjdGlvbkZhaWxlZDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGNvbm5lY3Rpb25UaW1lT3V0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29udGV4dE11c3RCZU5vbk5lZ2F0aXZlOworCS8qKiovIHB1YmxpYyBTdHJpbmcgY29va2llRmlsZVBhdGhSZWxhdGl2ZTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGNvcnJ1cHRpb25EZXRlY3RlZFJlUmVhZGluZ0F0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29ycnVwdE9iamVjdEJhZERhdGU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBjb3JydXB0T2JqZWN0QmFkRW1haWw7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9HQy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvR0MuamF2YQppbmRleCA5ZmZmZjlmLi40MGMwNzVlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9HQy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0dDLmphdmEKQEAgLTM0NCwxMCArMzQ0LDEwIEBACiAJCQkJCSYmIHJlcG8uZ2V0RlMoKQogCQkJCQkJCS5sYXN0TW9kaWZpZWRJbnN0YW50KG9sZFBhY2suZ2V0UGFja0ZpbGUoKSkKIAkJCQkJCQkudG9FcG9jaE1pbGxpKCkgPCBwYWNrRXhwaXJlRGF0ZSkgewotCQkJCW9sZFBhY2suY2xvc2UoKTsKIAkJCQlpZiAoc2hvdWxkTG9vc2VuKSB7CiAJCQkJCWxvb3NlbihpbnNlcnRlciwgcmVhZGVyLCBvbGRQYWNrLCBpZHMpOwogCQkJCX0KKwkJCQlvbGRQYWNrLmNsb3NlKCk7CiAJCQkJcHJ1bmVQYWNrKG9sZFBhY2suZ2V0UGFja0ZpbGUoKSk7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKaW5kZXggYzUxNDI3MC4uNmZiYjRjNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDE3LCBHb29nbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDE4LCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDE3LCAyMDIxLCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjEsNyArMjEsOCBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CkBAIC04MiwxMiArODMsNiBAQAogICovCiBwdWJsaWMgY2xhc3MgT3BlblNzaENvbmZpZ0ZpbGUgaW1wbGVtZW50cyBTc2hDb25maWdTdG9yZSB7CiAKLQkvKioKLQkgKiAiSG9zdCIgbmFtZSBvZiB0aGUgSG9zdEVudHJ5IGZvciB0aGUgZGVmYXVsdCBvcHRpb25zIGJlZm9yZSB0aGUgZmlyc3QKLQkgKiBob3N0IGJsb2NrIGluIGEgY29uZmlnIGZpbGUuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfTkFNRSA9ICIiOyAvLyROT04tTkxTLTEkCi0KIAkvKiogVGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgYXMga2V5IGZpbGVzIG1heSBiZSByZWxhdGl2ZSB0byBoZXJlLiAqLwogCXByaXZhdGUgZmluYWwgRmlsZSBob21lOwogCkBAIC0xMDUsMTEgKzEwMCw5IEBACiAJICogZnVsbHkgcmVzb2x2ZWQgZW50cmllcyBjcmVhdGVkIGZyb20gdGhhdC4KIAkgKi8KIAlwcml2YXRlIHN0YXRpYyBjbGFzcyBTdGF0ZSB7Ci0JCS8vIEtleWVkIGJ5IHBhdHRlcm47IGlmIGEgIkhvc3QiIGxpbmUgaGFzIG11bHRpcGxlIHBhdHRlcm5zLCB3ZSBnZW5lcmF0ZQotCQkvLyBkdXBsaWNhdGUgSG9zdEVudHJ5IG9iamVjdHMKLQkJTWFwPFN0cmluZywgSG9zdEVudHJ5PiBlbnRyaWVzID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOworCQlMaXN0PEhvc3RFbnRyeT4gZW50cmllcyA9IG5ldyBMaW5rZWRMaXN0PD4oKTsKIAotCQkvLyBLZXllZCBieSB1c2VyQGhvc3RuYW1lOnBvcnQKKwkJLy8gUHJldmlvdXMgbG9va3Vwcywga2V5ZWQgYnkgdXNlckBob3N0bmFtZTpwb3J0CiAJCU1hcDxTdHJpbmcsIEhvc3RFbnRyeT4gaG9zdHMgPSBuZXcgSGFzaE1hcDw+KCk7CiAKIAkJQE92ZXJyaWRlCkBAIC0xNjUsMTQgKzE1OCwxNiBAQAogCQkJcmV0dXJuIGg7CiAJCX0KIAkJSG9zdEVudHJ5IGZ1bGxDb25maWcgPSBuZXcgSG9zdEVudHJ5KCk7Ci0JCS8vIEluaXRpYWxpemUgd2l0aCBkZWZhdWx0IGVudHJpZXMgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSwgYmVmb3JlIHRoZQotCQkvLyBmaXJzdCBIb3N0IGJsb2NrLgotCQlmdWxsQ29uZmlnLm1lcmdlKGNhY2hlLmVudHJpZXMuZ2V0KERFRkFVTFRfTkFNRSkpOwotCQlmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIEhvc3RFbnRyeT4gZSA6IGNhY2hlLmVudHJpZXMuZW50cnlTZXQoKSkgewotCQkJU3RyaW5nIHBhdHRlcm4gPSBlLmdldEtleSgpOwotCQkJaWYgKGlzSG9zdE1hdGNoKHBhdHRlcm4sIGhvc3ROYW1lKSkgewotCQkJCWZ1bGxDb25maWcubWVyZ2UoZS5nZXRWYWx1ZSgpKTsKLQkJCX0KKwkJSXRlcmF0b3I8SG9zdEVudHJ5PiBlbnRyaWVzID0gY2FjaGUuZW50cmllcy5pdGVyYXRvcigpOworCQlpZiAoZW50cmllcy5oYXNOZXh0KCkpIHsKKwkJCS8vIFNob3VsZCBhbHdheXMgaGF2ZSBhdCBsZWFzdCB0aGUgZmlyc3QgdG9wIGVudHJ5IGNvbnRhaW5pbmcKKwkJCS8vIGtleS12YWx1ZSBwYWlycyBiZWZvcmUgdGhlIGZpcnN0IEhvc3QgYmxvY2sKKwkJCWZ1bGxDb25maWcubWVyZ2UoZW50cmllcy5uZXh0KCkpOworCQkJZW50cmllcy5mb3JFYWNoUmVtYWluaW5nKGVudHJ5IC0+IHsKKwkJCQlpZiAoZW50cnkubWF0Y2hlcyhob3N0TmFtZSkpIHsKKwkJCQkJZnVsbENvbmZpZy5tZXJnZShlbnRyeSk7CisJCQkJfQorCQkJfSk7CiAJCX0KIAkJZnVsbENvbmZpZy5zdWJzdGl0dXRlKGhvc3ROYW1lLCBwb3J0LCB1c2VyTmFtZSwgbG9jYWxVc2VyTmFtZSwgaG9tZSk7CiAJCWNhY2hlLmhvc3RzLnB1dChjYWNoZUtleSwgZnVsbENvbmZpZyk7CkBAIC0yMDgsMjAgKzIwMywxOSBAQAogCQlyZXR1cm4gc3RhdGU7CiAJfQogCi0JcHJpdmF0ZSBNYXA8U3RyaW5nLCBIb3N0RW50cnk+IHBhcnNlKEJ1ZmZlcmVkUmVhZGVyIHJlYWRlcikKKwlwcml2YXRlIExpc3Q8SG9zdEVudHJ5PiBwYXJzZShCdWZmZXJlZFJlYWRlciByZWFkZXIpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmaW5hbCBNYXA8U3RyaW5nLCBIb3N0RW50cnk+IGVudHJpZXMgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7Ci0JCWZpbmFsIExpc3Q8SG9zdEVudHJ5PiBjdXJyZW50ID0gbmV3IEFycmF5TGlzdDw+KDQpOwotCQlTdHJpbmcgbGluZTsKKwkJZmluYWwgTGlzdDxIb3N0RW50cnk+IGVudHJpZXMgPSBuZXcgTGlua2VkTGlzdDw+KCk7CiAKIAkJLy8gVGhlIG1hbiBwYWdlIGRvZXNuJ3Qgc2F5IHNvLCBidXQgdGhlIG9wZW5zc2ggcGFyc2VyIChyZWFkY29uZi5jKQogCQkvLyBzdGFydHMgb3V0IGluIGFjdGl2ZSBtb2RlIGFuZCB0aHVzIGFsd2F5cyBhcHBsaWVzIGFueSBsaW5lcyB0aGF0CiAJCS8vIG9jY3VyIGJlZm9yZSB0aGUgZmlyc3QgaG9zdCBibG9jay4gV2UgZ2F0aGVyIHRob3NlIG9wdGlvbnMgaW4gYQogCQkvLyBIb3N0RW50cnkgZm9yIERFRkFVTFRfTkFNRS4KIAkJSG9zdEVudHJ5IGRlZmF1bHRzID0gbmV3IEhvc3RFbnRyeSgpOwotCQljdXJyZW50LmFkZChkZWZhdWx0cyk7Ci0JCWVudHJpZXMucHV0KERFRkFVTFRfTkFNRSwgZGVmYXVsdHMpOworCQlIb3N0RW50cnkgY3VycmVudCA9IGRlZmF1bHRzOworCQllbnRyaWVzLmFkZChkZWZhdWx0cyk7CiAKKwkJU3RyaW5nIGxpbmU7CiAJCXdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAJCQkvLyBPcGVuU3NoIGlnbm9yZXMgdHJhaWxpbmcgY29tbWVudHMgb24gYSBsaW5lLiBBbnl0aGluZyBhZnRlciB0aGUKIAkJCS8vIGZpcnN0ICMgb24gYSBsaW5lIGlzIHRyaW1tZWQgYXdheSAoeWVzLCBldmVuIGlmIHRoZSBoYXNoIGlzCkBAIC0yNDYsMzggKzI0MCwxNyBAQAogCQkJU3RyaW5nIGFyZ1ZhbHVlID0gcGFydHMubGVuZ3RoID4gMSA/IHBhcnRzWzFdLnRyaW0oKSA6ICIiOyAvLyROT04tTkxTLTEkCiAKIAkJCWlmIChTdHJpbmdVdGlscy5lcXVhbHNJZ25vcmVDYXNlKFNzaENvbnN0YW50cy5IT1NULCBrZXl3b3JkKSkgewotCQkJCWN1cnJlbnQuY2xlYXIoKTsKLQkJCQlmb3IgKFN0cmluZyBuYW1lIDogcGFyc2VMaXN0KGFyZ1ZhbHVlKSkgewotCQkJCQlpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUuaXNFbXB0eSgpKSB7Ci0JCQkJCQkvLyBudWxsIHNob3VsZCBub3Qgb2NjdXIsIGJ1dCBiZXR0ZXIgYmUgc2FmZSB0aGFuIHNvcnJ5LgotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJSG9zdEVudHJ5IGMgPSBlbnRyaWVzLmdldChuYW1lKTsKLQkJCQkJaWYgKGMgPT0gbnVsbCkgewotCQkJCQkJYyA9IG5ldyBIb3N0RW50cnkoKTsKLQkJCQkJCWVudHJpZXMucHV0KG5hbWUsIGMpOwotCQkJCQl9Ci0JCQkJCWN1cnJlbnQuYWRkKGMpOwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJaWYgKGN1cnJlbnQuaXNFbXB0eSgpKSB7Ci0JCQkJLy8gV2UgcmVjZWl2ZWQgYW4gb3B0aW9uIG91dHNpZGUgb2YgYSBIb3N0IGJsb2NrLiBXZQotCQkJCS8vIGRvbid0IGtub3cgd2hvIHRoaXMgc2hvdWxkIG1hdGNoIGFnYWluc3QsIHNvIHNraXAuCisJCQkJY3VycmVudCA9IG5ldyBIb3N0RW50cnkocGFyc2VMaXN0KGFyZ1ZhbHVlKSk7CisJCQkJZW50cmllcy5hZGQoY3VycmVudCk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKIAkJCWlmIChIb3N0RW50cnkuaXNMaXN0S2V5KGtleXdvcmQpKSB7CiAJCQkJTGlzdDxTdHJpbmc+IGFyZ3MgPSB2YWxpZGF0ZShrZXl3b3JkLCBwYXJzZUxpc3QoYXJnVmFsdWUpKTsKLQkJCQlmb3IgKEhvc3RFbnRyeSBlbnRyeSA6IGN1cnJlbnQpIHsKLQkJCQkJZW50cnkuc2V0VmFsdWUoa2V5d29yZCwgYXJncyk7Ci0JCQkJfQorCQkJCWN1cnJlbnQuc2V0VmFsdWUoa2V5d29yZCwgYXJncyk7CiAJCQl9IGVsc2UgaWYgKCFhcmdWYWx1ZS5pc0VtcHR5KCkpIHsKIAkJCQlhcmdWYWx1ZSA9IHZhbGlkYXRlKGtleXdvcmQsIGRlcXVvdGUoYXJnVmFsdWUpKTsKLQkJCQlmb3IgKEhvc3RFbnRyeSBlbnRyeSA6IGN1cnJlbnQpIHsKLQkJCQkJZW50cnkuc2V0VmFsdWUoa2V5d29yZCwgYXJnVmFsdWUpOwotCQkJCX0KKwkJCQljdXJyZW50LnNldFZhbHVlKGtleXdvcmQsIGFyZ1ZhbHVlKTsKIAkJCX0KIAkJfQogCkBAIC0zMDAsNyArMjczLDcgQEAKIAkJaW50IGxlbmd0aCA9IGFyZ3VtZW50Lmxlbmd0aCgpOwogCQl3aGlsZSAoc3RhcnQgPCBsZW5ndGgpIHsKIAkJCS8vIFNraXAgd2hpdGVzcGFjZQotCQkJaWYgKENoYXJhY3Rlci5pc1NwYWNlQ2hhcihhcmd1bWVudC5jaGFyQXQoc3RhcnQpKSkgeworCQkJaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UoYXJndW1lbnQuY2hhckF0KHN0YXJ0KSkpIHsKIAkJCQlzdGFydCsrOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMzE1LDcgKzI4OCw3IEBACiAJCQl9IGVsc2UgewogCQkJCWludCBzdG9wID0gc3RhcnQgKyAxOwogCQkJCXdoaWxlIChzdG9wIDwgbGVuZ3RoCi0JCQkJCQkmJiAhQ2hhcmFjdGVyLmlzU3BhY2VDaGFyKGFyZ3VtZW50LmNoYXJBdChzdG9wKSkpIHsKKwkJCQkJCSYmICFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGFyZ3VtZW50LmNoYXJBdChzdG9wKSkpIHsKIAkJCQkJc3RvcCsrOwogCQkJCX0KIAkJCQlyZXN1bHQuYWRkKGFyZ3VtZW50LnN1YnN0cmluZyhzdGFydCwgc3RvcCkpOwpAQCAtMzU4LDEzICszMzEsNiBAQAogCQlyZXR1cm4gdmFsdWU7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0hvc3RNYXRjaChTdHJpbmcgcGF0dGVybiwgU3RyaW5nIG5hbWUpIHsKLQkJaWYgKHBhdHRlcm4uc3RhcnRzV2l0aCgiISIpKSB7IC8vJE5PTi1OTFMtMSQKLQkJCXJldHVybiAhcGF0dGVybk1hdGNoZXNIb3N0KHBhdHRlcm4uc3Vic3RyaW5nKDEpLCBuYW1lKTsKLQkJfQotCQlyZXR1cm4gcGF0dGVybk1hdGNoZXNIb3N0KHBhdHRlcm4sIG5hbWUpOwotCX0KLQogCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gcGF0dGVybk1hdGNoZXNIb3N0KFN0cmluZyBwYXR0ZXJuLCBTdHJpbmcgbmFtZSkgewogCQlpZiAocGF0dGVybi5pbmRleE9mKCcqJykgPj0gMCB8fCBwYXR0ZXJuLmluZGV4T2YoJz8nKSA+PSAwKSB7CiAJCQlmaW5hbCBGaWxlTmFtZU1hdGNoZXIgZm47CkBAIC0zODksOSArMzU1LDEyIEBACiAKIAlwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyaXBXaGl0ZXNwYWNlKFN0cmluZyB2YWx1ZSkgewogCQlmaW5hbCBTdHJpbmdCdWlsZGVyIGIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWlmICghQ2hhcmFjdGVyLmlzU3BhY2VDaGFyKHZhbHVlLmNoYXJBdChpKSkpCi0JCQkJYi5hcHBlbmQodmFsdWUuY2hhckF0KGkpKTsKKwkJaW50IGxlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOworCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CisJCQljaGFyIGNoID0gdmFsdWUuY2hhckF0KGkpOworCQkJaWYgKCFDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoKSkgeworCQkJCWIuYXBwZW5kKGNoKTsKKwkJCX0KIAkJfQogCQlyZXR1cm4gYi50b1N0cmluZygpOwogCX0KQEAgLTUxMSw2ICs0ODAsMzIgQEAKIAogCQlwcml2YXRlIE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4gbGlzdE9wdGlvbnM7CiAKKwkJcHJpdmF0ZSBmaW5hbCBMaXN0PFN0cmluZz4gcGF0dGVybnM7CisKKwkJLy8gQ29uc3RydWN0b3IgdXNlZCB0byBidWlsZCB0aGUgbWVyZ2VkIGVudHJ5OyBuZXZlciBtYXRjaGVzIGFueXRoaW5nCisJCUhvc3RFbnRyeSgpIHsKKwkJCXRoaXMucGF0dGVybnMgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKwkJfQorCisJCUhvc3RFbnRyeShMaXN0PFN0cmluZz4gcGF0dGVybnMpIHsKKwkJCXRoaXMucGF0dGVybnMgPSBwYXR0ZXJuczsKKwkJfQorCisJCWJvb2xlYW4gbWF0Y2hlcyhTdHJpbmcgaG9zdE5hbWUpIHsKKwkJCWJvb2xlYW4gZG9lc01hdGNoID0gZmFsc2U7CisJCQlmb3IgKFN0cmluZyBwYXR0ZXJuIDogcGF0dGVybnMpIHsKKwkJCQlpZiAocGF0dGVybi5zdGFydHNXaXRoKCIhIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJCQlpZiAocGF0dGVybk1hdGNoZXNIb3N0KHBhdHRlcm4uc3Vic3RyaW5nKDEpLCBob3N0TmFtZSkpIHsKKwkJCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJfQorCQkJCX0gZWxzZSBpZiAoIWRvZXNNYXRjaAorCQkJCQkJJiYgcGF0dGVybk1hdGNoZXNIb3N0KHBhdHRlcm4sIGhvc3ROYW1lKSkgeworCQkJCQlkb2VzTWF0Y2ggPSB0cnVlOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiBkb2VzTWF0Y2g7CisJCX0KKwogCQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgdG9LZXkoU3RyaW5nIGtleSkgewogCQkJU3RyaW5nIGsgPSBBTElBU0VTLmdldChrZXkpOwogCQkJcmV0dXJuIGsgIT0gbnVsbCA/IGsgOiBrZXk7CkBAIC03MDgsMTAgKzcwMywxMCBAQAogCQl9CiAKIAkJcHJpdmF0ZSBMaXN0PFN0cmluZz4gc3Vic3RpdHV0ZShMaXN0PFN0cmluZz4gdmFsdWVzLCBTdHJpbmcgYWxsb3dlZCwKLQkJCQlSZXBsYWNlciByKSB7CisJCQkJUmVwbGFjZXIgciwgYm9vbGVhbiB3aXRoRW52KSB7CiAJCQlMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KHZhbHVlcy5zaXplKCkpOwogCQkJZm9yIChTdHJpbmcgdmFsdWUgOiB2YWx1ZXMpIHsKLQkJCQlyZXN1bHQuYWRkKHIuc3Vic3RpdHV0ZSh2YWx1ZSwgYWxsb3dlZCkpOworCQkJCXJlc3VsdC5hZGQoci5zdWJzdGl0dXRlKHZhbHVlLCBhbGxvd2VkLCB3aXRoRW52KSk7CiAJCQl9CiAJCQlyZXR1cm4gcmVzdWx0OwogCQl9CkBAIC03NDMsNyArNzM4LDcgQEAKIAkJCQlpZiAoaG9zdE5hbWUgPT0gbnVsbCB8fCBob3N0TmFtZS5pc0VtcHR5KCkpIHsKIAkJCQkJb3B0aW9ucy5wdXQoU3NoQ29uc3RhbnRzLkhPU1RfTkFNRSwgb3JpZ2luYWxIb3N0TmFtZSk7CiAJCQkJfSBlbHNlIHsKLQkJCQkJaG9zdE5hbWUgPSByLnN1YnN0aXR1dGUoaG9zdE5hbWUsICJoIik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJaG9zdE5hbWUgPSByLnN1YnN0aXR1dGUoaG9zdE5hbWUsICJoIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCiAJCQkJCW9wdGlvbnMucHV0KFNzaENvbnN0YW50cy5IT1NUX05BTUUsIGhvc3ROYW1lKTsKIAkJCQkJci51cGRhdGUoJ2gnLCBob3N0TmFtZSk7CiAJCQkJfQpAQCAtNzUyLDEzICs3NDcsMTMgQEAKIAkJCQlMaXN0PFN0cmluZz4gdmFsdWVzID0gbXVsdGlPcHRpb25zCiAJCQkJCQkuZ2V0KFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFKTsKIAkJCQlpZiAodmFsdWVzICE9IG51bGwpIHsKLQkJCQkJdmFsdWVzID0gc3Vic3RpdHV0ZSh2YWx1ZXMsICJkaGxydSIsIHIpOyAvLyROT04tTkxTLTEkCisJCQkJCXZhbHVlcyA9IHN1YnN0aXR1dGUodmFsdWVzLCAiZGhscnUiLCByLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAogCQkJCQl2YWx1ZXMgPSByZXBsYWNlVGlsZGUodmFsdWVzLCBob21lKTsKIAkJCQkJbXVsdGlPcHRpb25zLnB1dChTc2hDb25zdGFudHMuSURFTlRJVFlfRklMRSwgdmFsdWVzKTsKIAkJCQl9CiAJCQkJdmFsdWVzID0gbXVsdGlPcHRpb25zLmdldChTc2hDb25zdGFudHMuQ0VSVElGSUNBVEVfRklMRSk7CiAJCQkJaWYgKHZhbHVlcyAhPSBudWxsKSB7Ci0JCQkJCXZhbHVlcyA9IHN1YnN0aXR1dGUodmFsdWVzLCAiZGhscnUiLCByKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl2YWx1ZXMgPSBzdWJzdGl0dXRlKHZhbHVlcywgImRobHJ1IiwgciwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKIAkJCQkJdmFsdWVzID0gcmVwbGFjZVRpbGRlKHZhbHVlcywgaG9tZSk7CiAJCQkJCW11bHRpT3B0aW9ucy5wdXQoU3NoQ29uc3RhbnRzLkNFUlRJRklDQVRFX0ZJTEUsIHZhbHVlcyk7CiAJCQkJfQpAQCAtNzc1LDI5ICs3NzAsMjkgQEAKIAkJCQkvLyBIT1NUTkFNRSBhbHJlYWR5IGRvbmUgYWJvdmUKIAkJCQlTdHJpbmcgdmFsdWUgPSBvcHRpb25zLmdldChTc2hDb25zdGFudHMuSURFTlRJVFlfQUdFTlQpOwogCQkJCWlmICh2YWx1ZSAhPSBudWxsKSB7Ci0JCQkJCXZhbHVlID0gci5zdWJzdGl0dXRlKHZhbHVlLCAiZGhscnUiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgImRobHJ1IiwgdHJ1ZSk7IC8vJE5PTi1OTFMtMSQKIAkJCQkJdmFsdWUgPSB0b0ZpbGUodmFsdWUsIGhvbWUpLmdldFBhdGgoKTsKIAkJCQkJb3B0aW9ucy5wdXQoU3NoQ29uc3RhbnRzLklERU5USVRZX0FHRU5ULCB2YWx1ZSk7CiAJCQkJfQogCQkJCXZhbHVlID0gb3B0aW9ucy5nZXQoU3NoQ29uc3RhbnRzLkNPTlRST0xfUEFUSCk7CiAJCQkJaWYgKHZhbHVlICE9IG51bGwpIHsKLQkJCQkJdmFsdWUgPSByLnN1YnN0aXR1dGUodmFsdWUsICJDaExsbnBydSIpOyAvLyROT04tTkxTLTEkCisJCQkJCXZhbHVlID0gci5zdWJzdGl0dXRlKHZhbHVlLCAiQ2hMbG5wcnUiLCB0cnVlKTsgLy8kTk9OLU5MUy0xJAogCQkJCQl2YWx1ZSA9IHRvRmlsZSh2YWx1ZSwgaG9tZSkuZ2V0UGF0aCgpOwogCQkJCQlvcHRpb25zLnB1dChTc2hDb25zdGFudHMuQ09OVFJPTF9QQVRILCB2YWx1ZSk7CiAJCQkJfQogCQkJCXZhbHVlID0gb3B0aW9ucy5nZXQoU3NoQ29uc3RhbnRzLkxPQ0FMX0NPTU1BTkQpOwogCQkJCWlmICh2YWx1ZSAhPSBudWxsKSB7Ci0JCQkJCXZhbHVlID0gci5zdWJzdGl0dXRlKHZhbHVlLCAiQ2RobG5wclR1Iik7IC8vJE5PTi1OTFMtMSQKKwkJCQkJdmFsdWUgPSByLnN1YnN0aXR1dGUodmFsdWUsICJDZGhsbnByVHUiLCBmYWxzZSk7IC8vJE5PTi1OTFMtMSQKIAkJCQkJb3B0aW9ucy5wdXQoU3NoQ29uc3RhbnRzLkxPQ0FMX0NPTU1BTkQsIHZhbHVlKTsKIAkJCQl9CiAJCQkJdmFsdWUgPSBvcHRpb25zLmdldChTc2hDb25zdGFudHMuUkVNT1RFX0NPTU1BTkQpOwogCQkJCWlmICh2YWx1ZSAhPSBudWxsKSB7Ci0JCQkJCXZhbHVlID0gci5zdWJzdGl0dXRlKHZhbHVlLCAiQ2RobG5wcnUiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgIkNkaGxucHJ1IiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCiAJCQkJCW9wdGlvbnMucHV0KFNzaENvbnN0YW50cy5SRU1PVEVfQ09NTUFORCwgdmFsdWUpOwogCQkJCX0KIAkJCQl2YWx1ZSA9IG9wdGlvbnMuZ2V0KFNzaENvbnN0YW50cy5QUk9YWV9DT01NQU5EKTsKIAkJCQlpZiAodmFsdWUgIT0gbnVsbCkgewotCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgImhwciIpOyAvLyROT04tTkxTLTEkCisJCQkJCXZhbHVlID0gci5zdWJzdGl0dXRlKHZhbHVlLCAiaHByIiwgZmFsc2UpOyAvLyROT04tTkxTLTEkCiAJCQkJCW9wdGlvbnMucHV0KFNzaENvbnN0YW50cy5QUk9YWV9DT01NQU5ELCB2YWx1ZSk7CiAJCQkJfQogCQkJfQpAQCAtODcxLDcgKzg2Niw3IEBACiAJCQlyZXBsYWNlbWVudHMucHV0KENoYXJhY3Rlci52YWx1ZU9mKCdyJyksIHVzZXIgPT0gbnVsbCA/ICIiIDogdXNlcik7IC8vJE5PTi1OTFMtMSQKIAkJCXJlcGxhY2VtZW50cy5wdXQoQ2hhcmFjdGVyLnZhbHVlT2YoJ3UnKSwgbG9jYWxVc2VyTmFtZSk7CiAJCQlyZXBsYWNlbWVudHMucHV0KENoYXJhY3Rlci52YWx1ZU9mKCdDJyksCi0JCQkJCXN1YnN0aXR1dGUoIiVsJWglcCVyIiwgImhscHIiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQlzdWJzdGl0dXRlKCIlbCVoJXAlciIsICJobHByIiwgZmFsc2UpKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCiAJCQlyZXBsYWNlbWVudHMucHV0KENoYXJhY3Rlci52YWx1ZU9mKCdUJyksICJOT05FIik7IC8vJE5PTi1OTFMtMSQKIAkJfQogCkBAIC04NzksMzYgKzg3NCw2MyBAQAogCQkJcmVwbGFjZW1lbnRzLnB1dChDaGFyYWN0ZXIudmFsdWVPZihrZXkpLCB2YWx1ZSk7CiAJCQlpZiAoImxocHIiLmluZGV4T2Yoa2V5KSA+PSAwKSB7IC8vJE5PTi1OTFMtMSQKIAkJCQlyZXBsYWNlbWVudHMucHV0KENoYXJhY3Rlci52YWx1ZU9mKCdDJyksCi0JCQkJCQlzdWJzdGl0dXRlKCIlbCVoJXAlciIsICJobHByIikpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKKwkJCQkJCXN1YnN0aXR1dGUoIiVsJWglcCVyIiwgImhscHIiLCBmYWxzZSkpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKIAkJCX0KIAkJfQogCi0JCXB1YmxpYyBTdHJpbmcgc3Vic3RpdHV0ZShTdHJpbmcgaW5wdXQsIFN0cmluZyBhbGxvd2VkKSB7CisJCXB1YmxpYyBTdHJpbmcgc3Vic3RpdHV0ZShTdHJpbmcgaW5wdXQsIFN0cmluZyBhbGxvd2VkLAorCQkJCWJvb2xlYW4gd2l0aEVudikgewogCQkJaWYgKGlucHV0ID09IG51bGwgfHwgaW5wdXQubGVuZ3RoKCkgPD0gMQotCQkJCQl8fCBpbnB1dC5pbmRleE9mKCclJykgPCAwKSB7CisJCQkJCXx8IChpbnB1dC5pbmRleE9mKCclJykgPCAwCisJCQkJCQkJJiYgKCF3aXRoRW52IHx8IGlucHV0LmluZGV4T2YoIiR7IikgPCAwKSkpIHsgLy8kTk9OLU5MUy0xJAogCQkJCXJldHVybiBpbnB1dDsKIAkJCX0KIAkJCVN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAJCQlpbnQgc3RhcnQgPSAwOwogCQkJaW50IGxlbmd0aCA9IGlucHV0Lmxlbmd0aCgpOwogCQkJd2hpbGUgKHN0YXJ0IDwgbGVuZ3RoKSB7Ci0JCQkJaW50IHBlcmNlbnQgPSBpbnB1dC5pbmRleE9mKCclJywgc3RhcnQpOwotCQkJCWlmIChwZXJjZW50IDwgMCB8fCBwZXJjZW50ICsgMSA+PSBsZW5ndGgpIHsKLQkJCQkJYnVpbGRlci5hcHBlbmQoaW5wdXQuc3Vic3RyaW5nKHN0YXJ0KSk7CisJCQkJY2hhciBjaCA9IGlucHV0LmNoYXJBdChzdGFydCk7CisJCQkJc3dpdGNoIChjaCkgeworCQkJCWNhc2UgJyUnOgorCQkJCQlpZiAoc3RhcnQgKyAxID49IGxlbmd0aCkgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJU3RyaW5nIHJlcGxhY2VtZW50ID0gbnVsbDsKKwkJCQkJY2ggPSBpbnB1dC5jaGFyQXQoc3RhcnQgKyAxKTsKKwkJCQkJaWYgKGNoID09ICclJyB8fCBhbGxvd2VkLmluZGV4T2YoY2gpID49IDApIHsKKwkJCQkJCXJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnRzLmdldChDaGFyYWN0ZXIudmFsdWVPZihjaCkpOworCQkJCQl9CisJCQkJCWlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CisJCQkJCQlidWlsZGVyLmFwcGVuZCgnJScpLmFwcGVuZChjaCk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlidWlsZGVyLmFwcGVuZChyZXBsYWNlbWVudCk7CisJCQkJCX0KKwkJCQkJc3RhcnQgKz0gMjsKKwkJCQkJY29udGludWU7CisJCQkJY2FzZSAnJCc6CisJCQkJCWlmICghd2l0aEVudiB8fCBzdGFydCArIDIgPj0gbGVuZ3RoKSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQljaCA9IGlucHV0LmNoYXJBdChzdGFydCArIDEpOworCQkJCQlpZiAoY2ggPT0gJ3snKSB7CisJCQkJCQlpbnQgY2xvc2UgPSBpbnB1dC5pbmRleE9mKCd9Jywgc3RhcnQgKyAyKTsKKwkJCQkJCWlmIChjbG9zZSA+IHN0YXJ0ICsgMikgeworCQkJCQkJCVN0cmluZyB2YXJpYWJsZSA9IFN5c3RlbVJlYWRlci5nZXRJbnN0YW5jZSgpCisJCQkJCQkJCQkuZ2V0ZW52KGlucHV0LnN1YnN0cmluZyhzdGFydCArIDIsIGNsb3NlKSk7CisJCQkJCQkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHZhcmlhYmxlKSkgeworCQkJCQkJCQlidWlsZGVyLmFwcGVuZCh2YXJpYWJsZSk7CisJCQkJCQkJfQorCQkJCQkJCXN0YXJ0ID0gY2xvc2UgKyAxOworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWNoID0gJyQnOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQkJU3RyaW5nIHJlcGxhY2VtZW50ID0gbnVsbDsKLQkJCQljaGFyIGNoID0gaW5wdXQuY2hhckF0KHBlcmNlbnQgKyAxKTsKLQkJCQlpZiAoY2ggPT0gJyUnIHx8IGFsbG93ZWQuaW5kZXhPZihjaCkgPj0gMCkgewotCQkJCQlyZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50cy5nZXQoQ2hhcmFjdGVyLnZhbHVlT2YoY2gpKTsKLQkJCQl9Ci0JCQkJaWYgKHJlcGxhY2VtZW50ID09IG51bGwpIHsKLQkJCQkJYnVpbGRlci5hcHBlbmQoaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCBwZXJjZW50ICsgMikpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWJ1aWxkZXIuYXBwZW5kKGlucHV0LnN1YnN0cmluZyhzdGFydCwgcGVyY2VudCkpCi0JCQkJCQkJLmFwcGVuZChyZXBsYWNlbWVudCk7Ci0JCQkJfQotCQkJCXN0YXJ0ID0gcGVyY2VudCArIDI7CisJCQkJYnVpbGRlci5hcHBlbmQoY2gpOworCQkJCXN0YXJ0Kys7CiAJCQl9CiAJCQlyZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogCQl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWdDb25zdGFudHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhCmluZGV4IDAzYzFlZjkuLjNlM2Q5YjUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhCkBAIC0zOTgsNyArMzk4LDE1IEBACiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9GRiA9ICJmZiI7CiAKIAkvKioKKwkgKiBUaGUgImNvbmZsaWN0U3R5bGUiIGtleS4KKwkgKgorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9DT05GTElDVFNUWUxFID0gImNvbmZsaWN0U3R5bGUiOworCisJLyoqCiAJICogVGhlICJjaGVja3N0YXQiIGtleQorCSAqCiAJICogQHNpbmNlIDMuMAogCSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfQ0hFQ0tTVEFUID0gImNoZWNrc3RhdCI7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL0NvbnRlbnRNZXJnZVN0cmF0ZWd5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL0NvbnRlbnRNZXJnZVN0cmF0ZWd5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ1Njg2NAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvQ29udGVudE1lcmdlU3RyYXRlZ3kuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxLCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5tZXJnZTsKKworLyoqCisgKiBIb3cgdG8gaGFuZGxlIGNvbnRlbnQgY29uZmxpY3RzLgorICoKKyAqIEBzaW5jZSA1LjEyCisgKi8KK3B1YmxpYyBlbnVtIENvbnRlbnRNZXJnZVN0cmF0ZWd5IHsKKworCS8qKiBQcm9kdWNlIGEgY29uZmxpY3QuICovCisJQ09ORkxJQ1QsCisKKwkvKiogUmVzb2x2ZSB0aGUgY29uZmxpY3QgaHVuayB1c2luZyB0aGUgb3VycyB2ZXJzaW9uLiAqLworCU9VUlMsCisKKwkvKiogUmVzb2x2ZSB0aGUgY29uZmxpY3QgaHVuayB1c2luZyB0aGUgdGhlaXJzIHZlcnNpb24uICovCisJVEhFSVJTCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZUFsZ29yaXRobS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZUFsZ29yaXRobS5qYXZhCmluZGV4IDI3MTQxYzEuLjgwNjA3MzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VBbGdvcml0aG0uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlQWxnb3JpdGhtLmphdmEKQEAgLTE0LDYgKzE0LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk5vbk51bGw7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZBbGdvcml0aG07CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkVkaXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkVkaXRMaXN0OwpAQCAtMjgsOCArMjksMTIgQEAKICAqIGRpZmYgYWxnb3JpdGhtLgogICovCiBwdWJsaWMgZmluYWwgY2xhc3MgTWVyZ2VBbGdvcml0aG0geworCiAJcHJpdmF0ZSBmaW5hbCBEaWZmQWxnb3JpdGhtIGRpZmZBbGc7CiAKKwlATm9uTnVsbAorCXByaXZhdGUgQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kgPSBDb250ZW50TWVyZ2VTdHJhdGVneS5DT05GTElDVDsKKwogCS8qKgogCSAqIENyZWF0ZXMgYSBuZXcgTWVyZ2VBbGdvcml0aG0gd2hpY2ggdXNlcwogCSAqIHtAbGluayBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuSGlzdG9ncmFtRGlmZn0gYXMgZGlmZiBhbGdvcml0aG0KQEAgLTQ4LDYgKzUzLDMwIEBACiAJCXRoaXMuZGlmZkFsZyA9IGRpZmY7CiAJfQogCisJLyoqCisJICogUmV0cmlldmVzIHRoZSB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9LgorCSAqCisJICogQHJldHVybiB0aGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSBpbiBlZmZlY3QKKwkgKiBAc2luY2UgNS4xMgorCSAqLworCUBOb25OdWxsCisJcHVibGljIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGdldENvbnRlbnRNZXJnZVN0cmF0ZWd5KCkgeworCQlyZXR1cm4gc3RyYXRlZ3k7CisJfQorCisJLyoqCisJICogU2V0cyB0aGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fS4KKwkgKgorCSAqIEBwYXJhbSBzdHJhdGVneQorCSAqICAgICAgICAgICAge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSB0byBzZXQ7IGlmIHtAY29kZSBudWxsfSwgc2V0CisJICogICAgICAgICAgICB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3kjQ09ORkxJQ1R9CisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgdm9pZCBzZXRDb250ZW50TWVyZ2VTdHJhdGVneShDb250ZW50TWVyZ2VTdHJhdGVneSBzdHJhdGVneSkgeworCQl0aGlzLnN0cmF0ZWd5ID0gc3RyYXRlZ3kgPT0gbnVsbCA/IENvbnRlbnRNZXJnZVN0cmF0ZWd5LkNPTkZMSUNUCisJCQkJOiBzdHJhdGVneTsKKwl9CisKIAkvLyBBbiBzcGVjaWFsIGVkaXQgd2hpY2ggYWN0cyBhcyBhIHNlbnRpbmVsIHZhbHVlIGJ5IG1hcmtpbmcgdGhlIGVuZCB0aGUKIAkvLyBsaXN0IG9mIGVkaXRzCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgRWRpdCBFTkRfRURJVCA9IG5ldyBFZGl0KEludGVnZXIuTUFYX1ZBTFVFLApAQCAtNzksMjkgKzEwOCw1NCBAQAogCQkJaWYgKHRoZWlycy5zaXplKCkgIT0gMCkgewogCQkJCUVkaXRMaXN0IHRoZWlyc0VkaXRzID0gZGlmZkFsZy5kaWZmKGNtcCwgYmFzZSwgdGhlaXJzKTsKIAkJCQlpZiAoIXRoZWlyc0VkaXRzLmlzRW1wdHkoKSkgewotCQkJCQkvLyB3ZSBkZWxldGVkLCB0aGV5IG1vZGlmaWVkIC0+IExldCB0aGVpciBjb21wbGV0ZSBjb250ZW50Ci0JCQkJCS8vIGNvbmZsaWN0IHdpdGggZW1wdHkgdGV4dAotCQkJCQlyZXN1bHQuYWRkKDEsIDAsIDAsIENvbmZsaWN0U3RhdGUuRklSU1RfQ09ORkxJQ1RJTkdfUkFOR0UpOwotCQkJCQlyZXN1bHQuYWRkKDIsIDAsIHRoZWlycy5zaXplKCksCi0JCQkJCQkJQ29uZmxpY3RTdGF0ZS5ORVhUX0NPTkZMSUNUSU5HX1JBTkdFKTsKLQkJCQl9IGVsc2UKKwkJCQkJLy8gd2UgZGVsZXRlZCwgdGhleSBtb2RpZmllZAorCQkJCQlzd2l0Y2ggKHN0cmF0ZWd5KSB7CisJCQkJCWNhc2UgT1VSUzoKKwkJCQkJCXJlc3VsdC5hZGQoMSwgMCwgMCwgQ29uZmxpY3RTdGF0ZS5OT19DT05GTElDVCk7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBUSEVJUlM6CisJCQkJCQlyZXN1bHQuYWRkKDIsIDAsIHRoZWlycy5zaXplKCksCisJCQkJCQkJCUNvbmZsaWN0U3RhdGUuTk9fQ09ORkxJQ1QpOworCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQkvLyBMZXQgdGhlaXIgY29tcGxldGUgY29udGVudCBjb25mbGljdCB3aXRoIGVtcHR5IHRleHQKKwkJCQkJCXJlc3VsdC5hZGQoMSwgMCwgMCwKKwkJCQkJCQkJQ29uZmxpY3RTdGF0ZS5GSVJTVF9DT05GTElDVElOR19SQU5HRSk7CisJCQkJCQlyZXN1bHQuYWRkKDIsIDAsIHRoZWlycy5zaXplKCksCisJCQkJCQkJCUNvbmZsaWN0U3RhdGUuTkVYVF9DT05GTElDVElOR19SQU5HRSk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CiAJCQkJCS8vIHdlIGRlbGV0ZWQsIHRoZXkgZGlkbid0IG1vZGlmeSAtPiBMZXQgb3VyIGRlbGV0aW9uIHdpbgogCQkJCQlyZXN1bHQuYWRkKDEsIDAsIDAsIENvbmZsaWN0U3RhdGUuTk9fQ09ORkxJQ1QpOwotCQkJfSBlbHNlCisJCQkJfQorCQkJfSBlbHNlIHsKIAkJCQkvLyB3ZSBhbmQgdGhleSBkZWxldGVkIC0+IHJldHVybiBhIHNpbmdsZSBjaHVuayBvZiBub3RoaW5nCiAJCQkJcmVzdWx0LmFkZCgxLCAwLCAwLCBDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCX0KIAkJCXJldHVybiByZXN1bHQ7CiAJCX0gZWxzZSBpZiAodGhlaXJzLnNpemUoKSA9PSAwKSB7CiAJCQlFZGl0TGlzdCBvdXJzRWRpdHMgPSBkaWZmQWxnLmRpZmYoY21wLCBiYXNlLCBvdXJzKTsKIAkJCWlmICghb3Vyc0VkaXRzLmlzRW1wdHkoKSkgewotCQkJCS8vIHdlIG1vZGlmaWVkLCB0aGV5IGRlbGV0ZWQgLT4gTGV0IG91ciBjb21wbGV0ZSBjb250ZW50Ci0JCQkJLy8gY29uZmxpY3Qgd2l0aCBlbXB0eSB0ZXh0Ci0JCQkJcmVzdWx0LmFkZCgxLCAwLCBvdXJzLnNpemUoKSwKLQkJCQkJCUNvbmZsaWN0U3RhdGUuRklSU1RfQ09ORkxJQ1RJTkdfUkFOR0UpOwotCQkJCXJlc3VsdC5hZGQoMiwgMCwgMCwgQ29uZmxpY3RTdGF0ZS5ORVhUX0NPTkZMSUNUSU5HX1JBTkdFKTsKLQkJCX0gZWxzZQorCQkJCS8vIHdlIG1vZGlmaWVkLCB0aGV5IGRlbGV0ZWQKKwkJCQlzd2l0Y2ggKHN0cmF0ZWd5KSB7CisJCQkJY2FzZSBPVVJTOgorCQkJCQlyZXN1bHQuYWRkKDEsIDAsIG91cnMuc2l6ZSgpLCBDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUSEVJUlM6CisJCQkJCXJlc3VsdC5hZGQoMiwgMCwgMCwgQ29uZmxpY3RTdGF0ZS5OT19DT05GTElDVCk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCS8vIExldCBvdXIgY29tcGxldGUgY29udGVudCBjb25mbGljdCB3aXRoIGVtcHR5IHRleHQKKwkJCQkJcmVzdWx0LmFkZCgxLCAwLCBvdXJzLnNpemUoKSwKKwkJCQkJCQlDb25mbGljdFN0YXRlLkZJUlNUX0NPTkZMSUNUSU5HX1JBTkdFKTsKKwkJCQkJcmVzdWx0LmFkZCgyLCAwLCAwLCBDb25mbGljdFN0YXRlLk5FWFRfQ09ORkxJQ1RJTkdfUkFOR0UpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgewogCQkJCS8vIHRoZXkgZGVsZXRlZCwgd2UgZGlkbid0IG1vZGlmeSAtPiBMZXQgdGhlaXIgZGVsZXRpb24gd2luCiAJCQkJcmVzdWx0LmFkZCgyLCAwLCAwLCBDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCX0KIAkJCXJldHVybiByZXN1bHQ7CiAJCX0KIApAQCAtMjQ5LDEyICszMDMsMjYgQEAKIAogCQkJCS8vIEFkZCB0aGUgY29uZmxpY3QgKE9ubHkgaWYgdGhlcmUgaXMgYSBjb25mbGljdCBsZWZ0IHRvIHJlcG9ydCkKIAkJCQlpZiAobWluQlNpemUgPiAwIHx8IEJTaXplRGVsdGEgIT0gMCkgewotCQkJCQlyZXN1bHQuYWRkKDEsIG91cnNCZWdpbkIgKyBjb21tb25QcmVmaXgsIG91cnNFbmRCCi0JCQkJCQkJLSBjb21tb25TdWZmaXgsCi0JCQkJCQkJQ29uZmxpY3RTdGF0ZS5GSVJTVF9DT05GTElDVElOR19SQU5HRSk7Ci0JCQkJCXJlc3VsdC5hZGQoMiwgdGhlaXJzQmVnaW5CICsgY29tbW9uUHJlZml4LCB0aGVpcnNFbmRCCi0JCQkJCQkJLSBjb21tb25TdWZmaXgsCi0JCQkJCQkJQ29uZmxpY3RTdGF0ZS5ORVhUX0NPTkZMSUNUSU5HX1JBTkdFKTsKKwkJCQkJc3dpdGNoIChzdHJhdGVneSkgeworCQkJCQljYXNlIE9VUlM6CisJCQkJCQlyZXN1bHQuYWRkKDEsIG91cnNCZWdpbkIgKyBjb21tb25QcmVmaXgsCisJCQkJCQkJCW91cnNFbmRCIC0gY29tbW9uU3VmZml4LAorCQkJCQkJCQlDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFRIRUlSUzoKKwkJCQkJCXJlc3VsdC5hZGQoMiwgdGhlaXJzQmVnaW5CICsgY29tbW9uUHJlZml4LAorCQkJCQkJCQl0aGVpcnNFbmRCIC0gY29tbW9uU3VmZml4LAorCQkJCQkJCQlDb25mbGljdFN0YXRlLk5PX0NPTkZMSUNUKTsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJcmVzdWx0LmFkZCgxLCBvdXJzQmVnaW5CICsgY29tbW9uUHJlZml4LAorCQkJCQkJCQlvdXJzRW5kQiAtIGNvbW1vblN1ZmZpeCwKKwkJCQkJCQkJQ29uZmxpY3RTdGF0ZS5GSVJTVF9DT05GTElDVElOR19SQU5HRSk7CisJCQkJCQlyZXN1bHQuYWRkKDIsIHRoZWlyc0JlZ2luQiArIGNvbW1vblByZWZpeCwKKwkJCQkJCQkJdGhlaXJzRW5kQiAtIGNvbW1vblN1ZmZpeCwKKwkJCQkJCQkJQ29uZmxpY3RTdGF0ZS5ORVhUX0NPTkZMSUNUSU5HX1JBTkdFKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CiAJCQkJfQogCiAJCQkJLy8gQWRkIHRoZSBjb21tb24gbGluZXMgYXQgZW5kIG9mIGNvbmZsaWN0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVzb2x2ZU1lcmdlci5qYXZhCmluZGV4IDRiZmIzOGQuLjc3Njc2NjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVzb2x2ZU1lcmdlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVzb2x2ZU1lcmdlci5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuQXR0cmlidXRlczsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuRGlmZkFsZ29yaXRobTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYuRGlmZkFsZ29yaXRobS5TdXBwb3J0ZWRBbGdvcml0aG07CkBAIC0yNjgsNiArMjY5LDEzIEBACiAJcHJpdmF0ZSBpbnQgaW5Db3JlTGltaXQ7CiAKIAkvKioKKwkgKiBUaGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSB0byB1c2UgZm9yICJyZXNvbHZlIiBhbmQgInJlY3Vyc2l2ZSIKKwkgKiBtZXJnZXMuCisJICovCisJQE5vbk51bGwKKwlwcml2YXRlIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneSA9IENvbnRlbnRNZXJnZVN0cmF0ZWd5LkNPTkZMSUNUOworCisJLyoqCiAJICogS2VlcHMge0BsaW5rIENoZWNrb3V0TWV0YWRhdGF9IGZvciB7QGxpbmsgI2NoZWNrb3V0KCl9IGFuZAogCSAqIHtAbGluayAjY2xlYW5VcCgpfS4KIAkgKi8KQEAgLTM0NCw2ICszNTIsMjkgQEAKIAkJZGlyY2FjaGUgPSBEaXJDYWNoZS5uZXdJbkNvcmUoKTsKIAl9CiAKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGNvbnRlbnQgbWVyZ2Ugc3RyYXRlZ3kgZm9yIGNvbnRlbnQgY29uZmxpY3RzLgorCSAqCisJICogQHJldHVybiB0aGUge0BsaW5rIENvbnRlbnRNZXJnZVN0cmF0ZWd5fSBpbiBlZmZlY3QKKwkgKiBAc2luY2UgNS4xMgorCSAqLworCUBOb25OdWxsCisJcHVibGljIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGdldENvbnRlbnRNZXJnZVN0cmF0ZWd5KCkgeworCQlyZXR1cm4gY29udGVudFN0cmF0ZWd5OworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGNvbnRlbnQgbWVyZ2Ugc3RyYXRlZ3kgZm9yIGNvbnRlbnQgY29uZmxpY3RzLgorCSAqCisJICogQHBhcmFtIHN0cmF0ZWd5CisJICogICAgICAgICAgICB7QGxpbmsgQ29udGVudE1lcmdlU3RyYXRlZ3l9IHRvIHVzZQorCSAqIEBzaW5jZSA1LjEyCisJICovCisJcHVibGljIHZvaWQgc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpIHsKKwkJY29udGVudFN0cmF0ZWd5ID0gc3RyYXRlZ3kgPT0gbnVsbCA/IENvbnRlbnRNZXJnZVN0cmF0ZWd5LkNPTkZMSUNUCisJCQkJOiBzdHJhdGVneTsKKwl9CisKIAkvKioge0Bpbmhlcml0RG9jfSAqLwogCUBPdmVycmlkZQogCXByb3RlY3RlZCBib29sZWFuIG1lcmdlSW1wbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CkBAIC02NDQsMTUgKzY3NSwxOSBAQAogCQkJCX0KIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCX0KLQkJCS8vIEZpbGVNb2RlcyBhcmUgbm90IG1lcmdlYWJsZS4gV2UgZm91bmQgYSBjb25mbGljdCBvbiBtb2Rlcy4KLQkJCS8vIEZvciBjb25mbGljdGluZyBlbnRyaWVzIHdlIGRvbid0IGtub3cgbGFzdE1vZGlmaWVkIGFuZAotCQkJLy8gbGVuZ3RoLgotCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgYmFzZSwgRGlyQ2FjaGVFbnRyeS5TVEFHRV8xLCBFUE9DSCwgMCk7Ci0JCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCBvdXJzLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzIsIEVQT0NILCAwKTsKLQkJCWFkZCh0dy5nZXRSYXdQYXRoKCksIHRoZWlycywgRGlyQ2FjaGVFbnRyeS5TVEFHRV8zLCBFUE9DSCwgMCk7Ci0JCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwotCQkJbWVyZ2VSZXN1bHRzLnB1dCh0dy5nZXRQYXRoU3RyaW5nKCksCi0JCQkJCW5ldyBNZXJnZVJlc3VsdDw+KENvbGxlY3Rpb25zLjxSYXdUZXh0PiBlbXB0eUxpc3QoKSkpOworCQkJaWYgKCFpZ25vcmVDb25mbGljdHMpIHsKKwkJCQkvLyBGaWxlTW9kZXMgYXJlIG5vdCBtZXJnZWFibGUuIFdlIGZvdW5kIGEgY29uZmxpY3Qgb24gbW9kZXMuCisJCQkJLy8gRm9yIGNvbmZsaWN0aW5nIGVudHJpZXMgd2UgZG9uJ3Qga25vdyBsYXN0TW9kaWZpZWQgYW5kCisJCQkJLy8gbGVuZ3RoLgorCQkJCS8vIFRoaXMgcGF0aCBjYW4gYmUgc2tpcHBlZCBvbiBpZ25vcmVDb25mbGljdHMsIHNvIHRoZSBjYWxsZXIKKwkJCQkvLyBjb3VsZCB1c2UgdmlydHVhbCBjb21taXQuCisJCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgYmFzZSwgRGlyQ2FjaGVFbnRyeS5TVEFHRV8xLCBFUE9DSCwgMCk7CisJCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgb3VycywgRGlyQ2FjaGVFbnRyeS5TVEFHRV8yLCBFUE9DSCwgMCk7CisJCQkJYWRkKHR3LmdldFJhd1BhdGgoKSwgdGhlaXJzLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzMsIEVQT0NILCAwKTsKKwkJCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOworCQkJCW1lcmdlUmVzdWx0cy5wdXQodHcuZ2V0UGF0aFN0cmluZygpLAorCQkJCQkJbmV3IE1lcmdlUmVzdWx0PD4oQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCkpKTsKKwkJCX0KIAkJCXJldHVybiB0cnVlOwogCQl9CiAKQEAgLTc1Nyw2ICs3OTIsMTkgQEAKIAkJCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwogCQkJCXJldHVybiB0cnVlOwogCQkJfSBlbHNlIGlmICghYXR0cmlidXRlcy5jYW5CZUNvbnRlbnRNZXJnZWQoKSkgeworCQkJCS8vIEZpbGUgbWFya2VkIGFzIGJpbmFyeQorCQkJCXN3aXRjaCAoZ2V0Q29udGVudE1lcmdlU3RyYXRlZ3koKSkgeworCQkJCWNhc2UgT1VSUzoKKwkJCQkJa2VlcChvdXJEY2UpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQljYXNlIFRIRUlSUzoKKwkJCQkJRGlyQ2FjaGVFbnRyeSB0aGVpckVudHJ5ID0gYWRkKHR3LmdldFJhd1BhdGgoKSwgdGhlaXJzLAorCQkJCQkJCURpckNhY2hlRW50cnkuU1RBR0VfMCwgRVBPQ0gsIDApOworCQkJCQlhZGRUb0NoZWNrb3V0KHR3LmdldFBhdGhTdHJpbmcoKSwgdGhlaXJFbnRyeSwgYXR0cmlidXRlcyk7CisJCQkJCXJldHVybiB0cnVlOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCBiYXNlLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzEsIEVQT0NILCAwKTsKIAkJCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCBvdXJzLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzIsIEVQT0NILCAwKTsKIAkJCQlhZGQodHcuZ2V0UmF3UGF0aCgpLCB0aGVpcnMsIERpckNhY2hlRW50cnkuU1RBR0VfMywgRVBPQ0gsIDApOwpAQCAtNzcxLDggKzgxOSwyNiBAQAogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KIAotCQkJTWVyZ2VSZXN1bHQ8UmF3VGV4dD4gcmVzdWx0ID0gY29udGVudE1lcmdlKGJhc2UsIG91cnMsIHRoZWlycywKLQkJCQkJYXR0cmlidXRlcyk7CisJCQlNZXJnZVJlc3VsdDxSYXdUZXh0PiByZXN1bHQgPSBudWxsOworCQkJdHJ5IHsKKwkJCQlyZXN1bHQgPSBjb250ZW50TWVyZ2UoYmFzZSwgb3VycywgdGhlaXJzLCBhdHRyaWJ1dGVzLAorCQkJCQkJZ2V0Q29udGVudE1lcmdlU3RyYXRlZ3koKSk7CisJCQl9IGNhdGNoIChCaW5hcnlCbG9iRXhjZXB0aW9uIGUpIHsKKwkJCQlzd2l0Y2ggKGdldENvbnRlbnRNZXJnZVN0cmF0ZWd5KCkpIHsKKwkJCQljYXNlIE9VUlM6CisJCQkJCWtlZXAob3VyRGNlKTsKKwkJCQkJcmV0dXJuIHRydWU7CisJCQkJY2FzZSBUSEVJUlM6CisJCQkJCURpckNhY2hlRW50cnkgdGhlaXJFbnRyeSA9IGFkZCh0dy5nZXRSYXdQYXRoKCksIHRoZWlycywKKwkJCQkJCQlEaXJDYWNoZUVudHJ5LlNUQUdFXzAsIEVQT0NILCAwKTsKKwkJCQkJYWRkVG9DaGVja291dCh0dy5nZXRQYXRoU3RyaW5nKCksIHRoZWlyRW50cnksIGF0dHJpYnV0ZXMpOworCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCQlkZWZhdWx0OgorCQkJCQlyZXN1bHQgPSBuZXcgTWVyZ2VSZXN1bHQ8PihDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKSk7CisJCQkJCXJlc3VsdC5zZXRDb250YWluc0NvbmZsaWN0cyh0cnVlKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCQkJaWYgKGlnbm9yZUNvbmZsaWN0cykgewogCQkJCXJlc3VsdC5zZXRDb250YWluc0NvbmZsaWN0cyhmYWxzZSk7CiAJCQl9CkBAIC03OTksOSArODY1LDE2IEBACiAJCQkJCW1lcmdlUmVzdWx0cy5wdXQodHcuZ2V0UGF0aFN0cmluZygpLCByZXN1bHQpOwogCQkJCQl1bm1lcmdlZFBhdGhzLmFkZCh0dy5nZXRQYXRoU3RyaW5nKCkpOwogCQkJCX0gZWxzZSB7Ci0JCQkJCU1lcmdlUmVzdWx0PFJhd1RleHQ+IHJlc3VsdCA9IGNvbnRlbnRNZXJnZShiYXNlLCBvdXJzLAotCQkJCQkJCXRoZWlycywgYXR0cmlidXRlcyk7Ci0KKwkJCQkJLy8gQ29udGVudCBtZXJnZSBzdHJhdGVneSBkb2VzIG5vdCBhcHBseSB0byBkZWxldGUtbW9kaWZ5CisJCQkJCS8vIGNvbmZsaWN0cyEKKwkJCQkJTWVyZ2VSZXN1bHQ8UmF3VGV4dD4gcmVzdWx0OworCQkJCQl0cnkgeworCQkJCQkJcmVzdWx0ID0gY29udGVudE1lcmdlKGJhc2UsIG91cnMsIHRoZWlycywgYXR0cmlidXRlcywKKwkJCQkJCQkJQ29udGVudE1lcmdlU3RyYXRlZ3kuQ09ORkxJQ1QpOworCQkJCQl9IGNhdGNoIChCaW5hcnlCbG9iRXhjZXB0aW9uIGUpIHsKKwkJCQkJCXJlc3VsdCA9IG5ldyBNZXJnZVJlc3VsdDw+KENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpKTsKKwkJCQkJCXJlc3VsdC5zZXRDb250YWluc0NvbmZsaWN0cyh0cnVlKTsKKwkJCQkJfQogCQkJCQlpZiAoaWdub3JlQ29uZmxpY3RzKSB7CiAJCQkJCQkvLyBJbiBjYXNlIGEgY29uZmxpY3QgaXMgZGV0ZWN0ZWQgdGhlIHdvcmtpbmcgdHJlZSBmaWxlCiAJCQkJCQkvLyBpcyBhZ2FpbiBmaWxsZWQgd2l0aCBuZXcgY29udGVudCAoY29udGFpbmluZyBjb25mbGljdApAQCAtODYzLDMyICs5MzYsMjYgQEAKIAkgKiBAcGFyYW0gb3VycwogCSAqIEBwYXJhbSB0aGVpcnMKIAkgKiBAcGFyYW0gYXR0cmlidXRlcworCSAqIEBwYXJhbSBzdHJhdGVneQogCSAqCiAJICogQHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjb250ZW50IG1lcmdlCisJICogQHRocm93cyBCaW5hcnlCbG9iRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgYW55IG9mIHRoZSBibG9icyBsb29rcyBsaWtlIGEgYmluYXJ5IGJsb2IKIAkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCiAJICovCiAJcHJpdmF0ZSBNZXJnZVJlc3VsdDxSYXdUZXh0PiBjb250ZW50TWVyZ2UoQ2Fub25pY2FsVHJlZVBhcnNlciBiYXNlLAogCQkJQ2Fub25pY2FsVHJlZVBhcnNlciBvdXJzLCBDYW5vbmljYWxUcmVlUGFyc2VyIHRoZWlycywKLQkJCUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVJhd1RleHQgYmFzZVRleHQ7Ci0JCVJhd1RleHQgb3VyVGV4dDsKLQkJUmF3VGV4dCB0aGVpcnNUZXh0OwotCi0JCXRyeSB7Ci0JCQliYXNlVGV4dCA9IGJhc2UgPT0gbnVsbCA/IFJhd1RleHQuRU1QVFlfVEVYVCA6IGdldFJhd1RleHQoCi0JCQkJCQkJYmFzZS5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXMpOwotCQkJb3VyVGV4dCA9IG91cnMgPT0gbnVsbCA/IFJhd1RleHQuRU1QVFlfVEVYVCA6IGdldFJhd1RleHQoCi0JCQkJCQkJb3Vycy5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXMpOwotCQkJdGhlaXJzVGV4dCA9IHRoZWlycyA9PSBudWxsID8gUmF3VGV4dC5FTVBUWV9URVhUIDogZ2V0UmF3VGV4dCgKLQkJCQkJCQl0aGVpcnMuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzKTsKLQkJfSBjYXRjaCAoQmluYXJ5QmxvYkV4Y2VwdGlvbiBlKSB7Ci0JCQlNZXJnZVJlc3VsdDxSYXdUZXh0PiByID0gbmV3IE1lcmdlUmVzdWx0PD4oQ29sbGVjdGlvbnMuPFJhd1RleHQ+ZW1wdHlMaXN0KCkpOwotCQkJci5zZXRDb250YWluc0NvbmZsaWN0cyh0cnVlKTsKLQkJCXJldHVybiByOwotCQl9Ci0JCXJldHVybiAobWVyZ2VBbGdvcml0aG0ubWVyZ2UoUmF3VGV4dENvbXBhcmF0b3IuREVGQVVMVCwgYmFzZVRleHQsCi0JCQkJb3VyVGV4dCwgdGhlaXJzVGV4dCkpOworCQkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBDb250ZW50TWVyZ2VTdHJhdGVneSBzdHJhdGVneSkKKwkJCXRocm93cyBCaW5hcnlCbG9iRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCVJhd1RleHQgYmFzZVRleHQgPSBiYXNlID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQKKwkJCQk6IGdldFJhd1RleHQoYmFzZS5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXMpOworCQlSYXdUZXh0IG91clRleHQgPSBvdXJzID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQKKwkJCQk6IGdldFJhd1RleHQob3Vycy5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXMpOworCQlSYXdUZXh0IHRoZWlyc1RleHQgPSB0aGVpcnMgPT0gbnVsbCA/IFJhd1RleHQuRU1QVFlfVEVYVAorCQkJCTogZ2V0UmF3VGV4dCh0aGVpcnMuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzKTsKKwkJbWVyZ2VBbGdvcml0aG0uc2V0Q29udGVudE1lcmdlU3RyYXRlZ3koc3RyYXRlZ3kpOworCQlyZXR1cm4gbWVyZ2VBbGdvcml0aG0ubWVyZ2UoUmF3VGV4dENvbXBhcmF0b3IuREVGQVVMVCwgYmFzZVRleHQsCisJCQkJb3VyVGV4dCwgdGhlaXJzVGV4dCk7CiAJfQogCiAJcHJpdmF0ZSBib29sZWFuIGlzSW5kZXhEaXJ0eSgpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsay5qYXZhCmluZGV4IDYzMWQ4NjEuLjZlMjk0MzggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGsuamF2YQpAQCAtMzIsMTAgKzMyLDEzIEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQXN5bmNPYmplY3RMb2FkZXJRdWV1ZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuTXV0YWJsZU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk51bGxQcm9ncmVzc01vbml0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWRPd25lck1hcDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RMb2FkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0UmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyLlJldkZpbHRlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlci5UcmVlRmlsdGVyOwpAQCAtMTgxLDYgKzE4NCwxMiBAQAogCiAJYm9vbGVhbiBzaGFsbG93Q29tbWl0c0luaXRpYWxpemVkOwogCisJcHJpdmF0ZSBlbnVtIEdldE1lcmdlZEludG9TdHJhdGVneSB7CisJCVJFVFVSTl9PTl9GSVJTVF9GT1VORCwKKwkJUkVUVVJOX09OX0ZJUlNUX05PVF9GT1VORCwKKwkJRVZBTFVBVEVfQUxMCisJfQorCiAJLyoqCiAJICogQ3JlYXRlIGEgbmV3IHJldmlzaW9uIHdhbGtlciBmb3IgYSBnaXZlbiByZXBvc2l0b3J5LgogCSAqCkBAIC00MjUsNiArNDM0LDE1NSBAQAogCX0KIAogCS8qKgorCSAqIERldGVybWluZSB0aGUgUmVmcyBpbnRvIHdoaWNoIGEgY29tbWl0IGlzIG1lcmdlZC4KKwkgKiA8cD4KKwkgKiBBIGNvbW1pdCBpcyBtZXJnZWQgaW50byBhIHJlZiBpZiB3ZSBjYW4gZmluZCBhIHBhdGggb2YgY29tbWl0cyB0aGF0IGxlYWRzCisJICogZnJvbSB0aGF0IHNwZWNpZmljIHJlZiBhbmQgZW5kcyBhdCA8Y29kZT5jb21taXQ8L2NvZGU+LgorCSAqIDxwPgorCSAqCisJICogQHBhcmFtIGNvbW1pdAorCSAqICAgICAgICAgICAgY29tbWl0IHRoZSBjYWxsZXIgdGhpbmtzIGlzIHJlYWNoYWJsZSBmcm9tIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICByZWZzIHRvIHN0YXJ0IGl0ZXJhdGlvbiBmcm9tLCBhbmQgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYQorCSAqICAgICAgICAgICAgZGVzY2VuZGFudCAoY2hpbGQpIG9mIDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogQHJldHVybiBsaXN0IG9mIHJlZnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gPGNvZGU+Y29tbWl0PC9jb2RlPi4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgTGlzdDxSZWY+IGdldE1lcmdlZEludG8oUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb257CisJCXJldHVybiBnZXRNZXJnZWRJbnRvKGNvbW1pdCwgcmVmcywgTnVsbFByb2dyZXNzTW9uaXRvci5JTlNUQU5DRSk7CisJfQorCisJLyoqCisJICogRGV0ZXJtaW5lIHRoZSBSZWZzIGludG8gd2hpY2ggYSBjb21taXQgaXMgbWVyZ2VkLgorCSAqIDxwPgorCSAqIEEgY29tbWl0IGlzIG1lcmdlZCBpbnRvIGEgcmVmIGlmIHdlIGNhbiBmaW5kIGEgcGF0aCBvZiBjb21taXRzIHRoYXQgbGVhZHMKKwkgKiBmcm9tIHRoYXQgc3BlY2lmaWMgcmVmIGFuZCBlbmRzIGF0IDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogPHA+CisJICoKKwkgKiBAcGFyYW0gY29tbWl0CisJICogICAgICAgICAgICBjb21taXQgdGhlIGNhbGxlciB0aGlua3MgaXMgcmVhY2hhYmxlIGZyb20gPGNvZGU+cmVmczwvY29kZT4uCisJICogQHBhcmFtIHJlZnMKKwkgKiAgICAgICAgICAgIHJlZnMgdG8gc3RhcnQgaXRlcmF0aW9uIGZyb20sIGFuZCB3aGljaCBpcyBtb3N0IGxpa2VseSBhCisJICogICAgICAgICAgICBkZXNjZW5kYW50IChjaGlsZCkgb2YgPGNvZGU+Y29tbWl0PC9jb2RlPi4KKwkgKiBAcGFyYW0gbW9uaXRvcgorCSAqICAgICAgICAgICAgdGhlIGNhbGxiYWNrIGZvciBwcm9ncmVzcyBhbmQgY2FuY2VsbGF0aW9uCisJICogQHJldHVybiBsaXN0IG9mIHJlZnMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gPGNvZGU+Y29tbWl0PC9jb2RlPi4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgTGlzdDxSZWY+IGdldE1lcmdlZEludG8oUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMsCisJCQkJCVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb257CisJCXJldHVybiBnZXRNZXJnZWRJbnRvKGNvbW1pdCwgcmVmcywKKwkJCQlHZXRNZXJnZWRJbnRvU3RyYXRlZ3kuRVZBTFVBVEVfQUxMLAorCQkJCW1vbml0b3IpOworCX0KKworCS8qKgorCSAqIERldGVybWluZSBpZiBhIDxjb2RlPmNvbW1pdDwvY29kZT4gaXMgbWVyZ2VkIGludG8gYW55IG9mIHRoZSBnaXZlbgorCSAqIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqCisJICogQHBhcmFtIGNvbW1pdAorCSAqICAgICAgICAgICAgY29tbWl0IHRoZSBjYWxsZXIgdGhpbmtzIGlzIHJlYWNoYWJsZSBmcm9tIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICByZWZzIHRvIHN0YXJ0IGl0ZXJhdGlvbiBmcm9tLCBhbmQgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYQorCSAqICAgICAgICAgICAgZGVzY2VuZGFudCAoY2hpbGQpIG9mIDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogQHJldHVybiB0cnVlIGlmIGNvbW1pdCBpcyBtZXJnZWQgaW50byBhbnkgb2YgdGhlIHJlZnM7IGZhbHNlIG90aGVyd2lzZS4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc01lcmdlZEludG9BbnkoUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZ2V0TWVyZ2VkSW50byhjb21taXQsIHJlZnMsCisJCQkJR2V0TWVyZ2VkSW50b1N0cmF0ZWd5LlJFVFVSTl9PTl9GSVJTVF9GT1VORCwKKwkJCQlOdWxsUHJvZ3Jlc3NNb25pdG9yLklOU1RBTkNFKS5zaXplKCkgPiAwOworCX0KKworCS8qKgorCSAqIERldGVybWluZSBpZiBhIDxjb2RlPmNvbW1pdDwvY29kZT4gaXMgbWVyZ2VkIGludG8gYWxsIG9mIHRoZSBnaXZlbgorCSAqIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqCisJICogQHBhcmFtIGNvbW1pdAorCSAqICAgICAgICAgICAgY29tbWl0IHRoZSBjYWxsZXIgdGhpbmtzIGlzIHJlYWNoYWJsZSBmcm9tIDxjb2RlPnJlZnM8L2NvZGU+LgorCSAqIEBwYXJhbSByZWZzCisJICogICAgICAgICAgICByZWZzIHRvIHN0YXJ0IGl0ZXJhdGlvbiBmcm9tLCBhbmQgd2hpY2ggaXMgbW9zdCBsaWtlbHkgYQorCSAqICAgICAgICAgICAgZGVzY2VuZGFudCAoY2hpbGQpIG9mIDxjb2RlPmNvbW1pdDwvY29kZT4uCisJICogQHJldHVybiB0cnVlIGlmIGNvbW1pdCBpcyBtZXJnZWQgaW50byBhbGwgb2YgdGhlIHJlZnM7IGZhbHNlIG90aGVyd2lzZS4KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBhIHBhY2sgZmlsZSBvciBsb29zZSBvYmplY3QgY291bGQgbm90IGJlIHJlYWQuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc01lcmdlZEludG9BbGwoUmV2Q29tbWl0IGNvbW1pdCwgQ29sbGVjdGlvbjxSZWY+IHJlZnMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZ2V0TWVyZ2VkSW50byhjb21taXQsIHJlZnMsCisJCQkJR2V0TWVyZ2VkSW50b1N0cmF0ZWd5LlJFVFVSTl9PTl9GSVJTVF9OT1RfRk9VTkQsCisJCQkJTnVsbFByb2dyZXNzTW9uaXRvci5JTlNUQU5DRSkuc2l6ZSgpCisJCQkJPT0gcmVmcy5zaXplKCk7CisJfQorCisJcHJpdmF0ZSBMaXN0PFJlZj4gZ2V0TWVyZ2VkSW50byhSZXZDb21taXQgbmVlZGxlLCBDb2xsZWN0aW9uPFJlZj4gaGF5c3RhY2tzLAorCQkJCUVudW0gcmV0dXJuU3RyYXRlZ3ksIFByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlMaXN0PFJlZj4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCUxpc3Q8UmV2Q29tbWl0PiB1bmludGVyZXN0aW5nID0gbmV3IEFycmF5TGlzdDw+KCk7CisJCUxpc3Q8UmV2Q29tbWl0PiBtYXJrZWQgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwkJUmV2RmlsdGVyIG9sZFJGID0gZmlsdGVyOworCQlUcmVlRmlsdGVyIG9sZFRGID0gdHJlZUZpbHRlcjsKKwkJdHJ5IHsKKwkJCWZpbmlzaERlbGF5ZWRGcmVlRmxhZ3MoKTsKKwkJCXJlc2V0KH5mcmVlRmxhZ3MgJiBBUFBfRkxBR1MpOworCQkJZmlsdGVyID0gUmV2RmlsdGVyLkFMTDsKKwkJCXRyZWVGaWx0ZXIgPSBUcmVlRmlsdGVyLkFMTDsKKwkJCWZvciAoUmVmIHI6IGhheXN0YWNrcykgeworCQkJCWlmIChtb25pdG9yLmlzQ2FuY2VsbGVkKCkpIHsKKwkJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCQl9CisJCQkJbW9uaXRvci51cGRhdGUoMSk7CisJCQkJUmV2T2JqZWN0IG8gPSBwZWVsKHBhcnNlQW55KHIuZ2V0T2JqZWN0SWQoKSkpOworCQkJCWlmICghKG8gaW5zdGFuY2VvZiBSZXZDb21taXQpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlSZXZDb21taXQgYyA9IChSZXZDb21taXQpIG87CisJCQkJcmVzZXQoVU5JTlRFUkVTVElORyB8IFRFTVBfTUFSSyk7CisJCQkJbWFya1N0YXJ0KGMpOworCQkJCWJvb2xlYW4gY29tbWl0Rm91bmQgPSBmYWxzZTsKKwkJCQlSZXZDb21taXQgbmV4dDsKKwkJCQl3aGlsZSAoKG5leHQgPSBuZXh0KCkpICE9IG51bGwpIHsKKwkJCQkJaWYgKFJlZmVyZW5jZXMuaXNTYW1lT2JqZWN0KG5leHQsIG5lZWRsZSkKKwkJCQkJCQl8fCAobmV4dC5mbGFncyAmIFRFTVBfTUFSSykgIT0gMCkgeworCQkJCQkJcmVzdWx0LmFkZChyKTsKKwkJCQkJCWlmIChyZXR1cm5TdHJhdGVneSA9PSBHZXRNZXJnZWRJbnRvU3RyYXRlZ3kuUkVUVVJOX09OX0ZJUlNUX0ZPVU5EKSB7CisJCQkJCQkJcmV0dXJuIHJlc3VsdDsKKwkJCQkJCX0KKwkJCQkJCWNvbW1pdEZvdW5kID0gdHJ1ZTsKKwkJCQkJCWMuZmxhZ3MgfD0gVEVNUF9NQVJLOworCQkJCQkJbWFya2VkLmFkZChjKTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmKCFjb21taXRGb3VuZCl7CisJCQkJCW1hcmtVbmludGVyZXN0aW5nKGMpOworCQkJCQl1bmludGVyZXN0aW5nLmFkZChjKTsKKwkJCQkJaWYgKHJldHVyblN0cmF0ZWd5ID09IEdldE1lcmdlZEludG9TdHJhdGVneS5SRVRVUk5fT05fRklSU1RfTk9UX0ZPVU5EKSB7CisJCQkJCQlyZXR1cm4gcmVzdWx0OworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGZpbmFsbHkgeworCQkJcm9vdHMuYWRkQWxsKHVuaW50ZXJlc3RpbmcpOworCQkJZmlsdGVyID0gb2xkUkY7CisJCQl0cmVlRmlsdGVyID0gb2xkVEY7CisJCQlmb3IgKFJldkNvbW1pdCBjIDogbWFya2VkKSB7CisJCQkJYy5mbGFncyAmPSB+VEVNUF9NQVJLOworCQkJfQorCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorCisJLyoqCiAJICogUG9wIHRoZSBuZXh0IG1vc3QgcmVjZW50IGNvbW1pdC4KIAkgKgogCSAqIEByZXR1cm4gbmV4dCBtb3N0IHJlY2VudCBjb21taXQ7IG51bGwgaWYgdHJhdmVyc2FsIGlzIG92ZXIuCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa1V0aWxzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsa1V0aWxzLmphdmEKaW5kZXggM2ZlYjljNS4uZTUyZTkxNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGtVdGlscy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrVXRpbHMuamF2YQpAQCAtMTU5LDE1ICsxNTksMTIgQEAKIAkJLy8gTWFrZSBzdXJlIGNvbW1pdCBpcyBmcm9tIHRoZSBzYW1lIFJldldhbGsKIAkJY29tbWl0ID0gcmV2V2Fsay5wYXJzZUNvbW1pdChjb21taXQuZ2V0SWQoKSk7CiAJCXJldldhbGsucmVzZXQoKTsKLQkJTGlzdDxSZWY+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3Q8PigpOworCQlMaXN0PFJlZj4gZmlsdGVyZWRSZWZzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAJCW1vbml0b3IuYmVnaW5UYXNrKEpHaXRUZXh0LmdldCgpLnNlYXJjaEZvclJlYWNoYWJsZUJyYW5jaGVzLAogCQkJCXJlZnMuc2l6ZSgpKTsKIAkJZmluYWwgaW50IFNLRVcgPSAyNCozNjAwOyAvLyBvbmUgZGF5IGNsb2NrIHNrZXcKIAogCQlmb3IgKFJlZiByZWYgOiByZWZzKSB7Ci0JCQlpZiAobW9uaXRvci5pc0NhbmNlbGxlZCgpKQotCQkJCXJldHVybiByZXN1bHQ7Ci0JCQltb25pdG9yLnVwZGF0ZSgxKTsKIAkJCVJldk9iamVjdCBtYXliZWhlYWQgPSByZXZXYWxrLnBhcnNlQW55KHJlZi5nZXRPYmplY3RJZCgpKTsKIAkJCWlmICghKG1heWJlaGVhZCBpbnN0YW5jZW9mIFJldkNvbW1pdCkpCiAJCQkJY29udGludWU7CkBAIC0xNzksOSArMTc2LDkgQEAKIAkJCWlmIChoZWFkQ29tbWl0LmdldENvbW1pdFRpbWUoKSArIFNLRVcgPCBjb21taXQuZ2V0Q29tbWl0VGltZSgpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAocmV2V2Fsay5pc01lcmdlZEludG8oY29tbWl0LCBoZWFkQ29tbWl0KSkKLQkJCQlyZXN1bHQuYWRkKHJlZik7CisJCQlmaWx0ZXJlZFJlZnMuYWRkKHJlZik7CiAJCX0KKwkJTGlzdDxSZWY+IHJlc3VsdCA9IHJldldhbGsuZ2V0TWVyZ2VkSW50byhjb21taXQsIGZpbHRlcmVkUmVmcywgbW9uaXRvcik7CiAJCW1vbml0b3IuZW5kVGFzaygpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvU3NoQ29uc3RhbnRzLmphdmEKaW5kZXggYmU1NWNkMS4uNWNkNWIzMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvU3NoQ29uc3RhbnRzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvU3NoQ29uc3RhbnRzLmphdmEKQEAgLTExOCw3ICsxMTgsNyBAQAogCSAqIEtleSBpbiBhbiBzc2ggY29uZmlnIGZpbGU7IGRlZmluZXMgc2lnbmF0dXJlIGFsZ29yaXRobXMgZm9yIHB1YmxpYyBrZXkKIAkgKiBhdXRoZW50aWNhdGlvbiBhcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LgogCSAqCi0JICogQHNpbmNlIDUuMTEKKwkgKiBAc2luY2UgNS4xMS4xCiAJICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFVCS0VZX0FDQ0VQVEVEX0FMR09SSVRITVMgPSAiUHVia2V5QWNjZXB0ZWRBbGdvcml0aG1zIjsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhbnNwb3J0SHR0cC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhbnNwb3J0SHR0cC5qYXZhCmluZGV4IGE1YjM3NzMuLjQwNTM3M2EgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYW5zcG9ydEh0dHAuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnRIdHRwLmphdmEKQEAgLTM1LDYgKzM1LDcgQEAKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CkBAIC01Myw4ICs1NCw2IEBACiBpbXBvcnQgamF2YS5uZXQuVVJMRGVjb2RlcjsKIGltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5JbnZhbGlkUGF0aEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LkdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LmNlcnQuQ2VydFBhdGhCdWlsZGVyRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuY2VydC5DZXJ0UGF0aFZhbGlkYXRvckV4Y2VwdGlvbjsKQEAgLTEwMSw2ICsxMDAsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuSHR0cENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5IdHRwQ29ubmVjdGlvbkZhY3Rvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5IdHRwQ29ubmVjdGlvbkZhY3RvcnkyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLklPOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5SYXdQYXJzZVV0aWxzOwpAQCAtMTE1NywxNyArMTE1NywyOCBAQAogCQlyZXR1cm4gbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbih1cmksIHdoeSk7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgTmV0c2NhcGVDb29raWVGaWxlIGdldENvb2tpZUZpbGVGcm9tQ29uZmlnKAorCXByaXZhdGUgTmV0c2NhcGVDb29raWVGaWxlIGdldENvb2tpZUZpbGVGcm9tQ29uZmlnKAogCQkJSHR0cENvbmZpZyBjb25maWcpIHsKLQkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKGNvbmZpZy5nZXRDb29raWVGaWxlKCkpKSB7CisJCVN0cmluZyBwYXRoID0gY29uZmlnLmdldENvb2tpZUZpbGUoKTsKKwkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHBhdGgpKSB7CiAJCQl0cnkgewotCQkJCVBhdGggY29va2llRmlsZVBhdGggPSBQYXRocy5nZXQoY29uZmlnLmdldENvb2tpZUZpbGUoKSk7CisJCQkJRlMgZnMgPSBsb2NhbCAhPSBudWxsID8gbG9jYWwuZ2V0RlMoKSA6IEZTLkRFVEVDVEVEOworCQkJCUZpbGUgZjsKKwkJCQlpZiAocGF0aC5zdGFydHNXaXRoKCJ+LyIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJZiA9IGZzLnJlc29sdmUoZnMudXNlckhvbWUoKSwgcGF0aC5zdWJzdHJpbmcoMikpOworCQkJCX0gZWxzZSB7CisJCQkJCWYgPSBuZXcgRmlsZShwYXRoKTsKKwkJCQkJaWYgKCFmLmlzQWJzb2x1dGUoKSkgeworCQkJCQkJZiA9IGZzLnJlc29sdmUobnVsbCwgcGF0aCk7CisJCQkJCQlMT0cud2FybihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQkJSkdpdFRleHQuZ2V0KCkuY29va2llRmlsZVBhdGhSZWxhdGl2ZSwgZikpOworCQkJCQl9CisJCQkJfQogCQkJCXJldHVybiBOZXRzY2FwZUNvb2tpZUZpbGVDYWNoZS5nZXRJbnN0YW5jZShjb25maWcpCi0JCQkJCQkuZ2V0RW50cnkoY29va2llRmlsZVBhdGgpOworCQkJCQkJLmdldEVudHJ5KGYudG9QYXRoKCkpOwogCQkJfSBjYXRjaCAoSW52YWxpZFBhdGhFeGNlcHRpb24gZSkgewogCQkJCUxPRy53YXJuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAotCQkJCQkJSkdpdFRleHQuZ2V0KCkuY291bGROb3RSZWFkQ29va2llRmlsZSwKLQkJCQkJCWNvbmZpZy5nZXRDb29raWVGaWxlKCkpLCBlKTsKKwkJCQkJCUpHaXRUZXh0LmdldCgpLmNvdWxkTm90UmVhZENvb2tpZUZpbGUsIHBhdGgpLCBlKTsKIAkJCX0KIAkJfQogCQlyZXR1cm4gbnVsbDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1VzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsc1Byb3ZpZGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9Vc2VybmFtZVBhc3N3b3JkQ3JlZGVudGlhbHNQcm92aWRlci5qYXZhCmluZGV4IDk3OTk2MWYuLmMwZGU0MmMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1VzZXJuYW1lUGFzc3dvcmRDcmVkZW50aWFsc1Byb3ZpZGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVXNlcm5hbWVQYXNzd29yZENyZWRlbnRpYWxzUHJvdmlkZXIuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAyMSBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC01OCwxNCArNTgsMjEgQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgYm9vbGVhbiBzdXBwb3J0cyhDcmVkZW50aWFsSXRlbS4uLiBpdGVtcykgewogCQlmb3IgKENyZWRlbnRpYWxJdGVtIGkgOiBpdGVtcykgewotCQkJaWYgKGkgaW5zdGFuY2VvZiBDcmVkZW50aWFsSXRlbS5Vc2VybmFtZSkKKwkJCWlmIChpIGluc3RhbmNlb2YgQ3JlZGVudGlhbEl0ZW0uSW5mb3JtYXRpb25hbE1lc3NhZ2UpIHsKIAkJCQljb250aW51ZTsKLQotCQkJZWxzZSBpZiAoaSBpbnN0YW5jZW9mIENyZWRlbnRpYWxJdGVtLlBhc3N3b3JkKQorCQkJfQorCQkJaWYgKGkgaW5zdGFuY2VvZiBDcmVkZW50aWFsSXRlbS5Vc2VybmFtZSkgewogCQkJCWNvbnRpbnVlOwotCi0JCQllbHNlCi0JCQkJcmV0dXJuIGZhbHNlOworCQkJfQorCQkJaWYgKGkgaW5zdGFuY2VvZiBDcmVkZW50aWFsSXRlbS5QYXNzd29yZCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGkgaW5zdGFuY2VvZiBDcmVkZW50aWFsSXRlbS5TdHJpbmdUeXBlKSB7CisJCQkJaWYgKGkuZ2V0UHJvbXB0VGV4dCgpLmVxdWFscygiUGFzc3dvcmQ6ICIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCXJldHVybiB0cnVlOwogCX0KQEAgLTc1LDYgKzgyLDkgQEAKIAlwdWJsaWMgYm9vbGVhbiBnZXQoVVJJaXNoIHVyaSwgQ3JlZGVudGlhbEl0ZW0uLi4gaXRlbXMpCiAJCQl0aHJvd3MgVW5zdXBwb3J0ZWRDcmVkZW50aWFsSXRlbSB7CiAJCWZvciAoQ3JlZGVudGlhbEl0ZW0gaSA6IGl0ZW1zKSB7CisJCQlpZiAoaSBpbnN0YW5jZW9mIENyZWRlbnRpYWxJdGVtLkluZm9ybWF0aW9uYWxNZXNzYWdlKSB7CisJCQkJY29udGludWU7CisJCQl9CiAJCQlpZiAoaSBpbnN0YW5jZW9mIENyZWRlbnRpYWxJdGVtLlVzZXJuYW1lKSB7CiAJCQkJKChDcmVkZW50aWFsSXRlbS5Vc2VybmFtZSkgaSkuc2V0VmFsdWUodXNlcm5hbWUpOwogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9Xb3JraW5nVHJlZUl0ZXJhdG9yLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1dvcmtpbmdUcmVlSXRlcmF0b3IuamF2YQppbmRleCA1NWI3ZDYyLi4wYjdjMGE5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1dvcmtpbmdUcmVlSXRlcmF0b3IuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1dvcmtpbmdUcmVlSXRlcmF0b3IuamF2YQpAQCAtNTAyLDggKzUwMiw3IEBACiAJCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKG5ldyBGaWx0ZXJGYWlsZWRFeGNlcHRpb24ocmMsCiAJCQkJCQlmaWx0ZXJDb21tYW5kLCBnZXRFbnRyeVBhdGhTdHJpbmcoKSwKIAkJCQkJCXJlc3VsdC5nZXRTdGRvdXQoKS50b0J5dGVBcnJheShNQVhfRVhDRVBUSU9OX1RFWFRfU0laRSksCi0JCQkJCQlSYXdQYXJzZVV0aWxzLmRlY29kZShyZXN1bHQuZ2V0U3RkZXJyKCkKLQkJCQkJCQkJLnRvQnl0ZUFycmF5KE1BWF9FWENFUFRJT05fVEVYVF9TSVpFKSkpKTsKKwkJCQkJCXJlc3VsdC5nZXRTdGRlcnIoKS50b1N0cmluZyhNQVhfRVhDRVBUSU9OX1RFWFRfU0laRSkpKTsKIAkJCX0KIAkJCXJldHVybiByZXN1bHQuZ2V0U3Rkb3V0KCkub3BlbklucHV0U3RyZWFtV2l0aEF1dG9EZXN0cm95KCk7CiAJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9CYXNlODUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9CYXNlODUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGI3Y2ZjCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0Jhc2U4NS5qYXZhCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7CisKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CisKKy8qKgorICogQmFzZS04NSBlbmNvZGVyL2RlY29kZXIuCisgKgorICogQHNpbmNlIDUuMTIKKyAqLworcHVibGljIGZpbmFsIGNsYXNzIEJhc2U4NSB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBieXRlW10gRU5DT0RFID0gKCIwMTIzNDU2Nzg5IiAvLyROT04tTkxTLTEkCisJCQkrICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIgLy8kTk9OLU5MUy0xJAorCQkJKyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiIC8vJE5PTi1OTFMtMSQKKwkJCSsgIiEjJCUmKCkqKy07PD0+P0BeX2B7fH1+IikgLy8kTk9OLU5MUy0xJAorCQkJCQkuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSSk7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBERUNPREUgPSBuZXcgaW50WzI1Nl07CisKKwlzdGF0aWMgeworCQlBcnJheXMuZmlsbChERUNPREUsIC0xKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBFTkNPREUubGVuZ3RoOyBpKyspIHsKKwkJCURFQ09ERVtFTkNPREVbaV1dID0gaTsKKwkJfQorCX0KKworCXByaXZhdGUgQmFzZTg1KCkgeworCQkvLyBObyBpbnN0YW50aWF0aW9uCisJfQorCisJLyoqCisJICogRGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIHRoZSBiYXNlLTg1IGVuY29kaW5nIGZvciB7QGNvZGUgcmF3TGVuZ3RofQorCSAqIGJ5dGVzLgorCSAqCisJICogQHBhcmFtIHJhd0xlbmd0aAorCSAqICAgICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIHRvIGVuY29kZQorCSAqIEByZXR1cm4gbnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCBmb3IgdGhlIGJhc2UtODUgZW5jb2Rpbmcgb2YKKwkgKiAgICAgICAgIHtAY29kZSByYXdMZW5ndGh9IGJ5dGVzCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgZW5jb2RlZExlbmd0aChpbnQgcmF3TGVuZ3RoKSB7CisJCXJldHVybiAocmF3TGVuZ3RoICsgMykgLyA0ICogNTsKKwl9CisKKwkvKioKKwkgKiBFbmNvZGVzIHRoZSBnaXZlbiB7QGNvZGUgZGF0YX0gaW4gQmFzZS04NS4KKwkgKgorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICB0byBlbmNvZGUKKwkgKiBAcmV0dXJuIGVuY29kZWQgZGF0YQorCSAqLworCXB1YmxpYyBzdGF0aWMgYnl0ZVtdIGVuY29kZShieXRlW10gZGF0YSkgeworCQlyZXR1cm4gZW5jb2RlKGRhdGEsIDAsIGRhdGEubGVuZ3RoKTsKKwl9CisKKwkvKioKKwkgKiBFbmNvZGVzIHtAY29kZSBsZW5ndGh9IGJ5dGVzIG9mIHtAY29kZSBkYXRhfSBpbiBCYXNlLTg1LCBiZWdpbm5pbmcgYXQgdGhlCisJICoge0Bjb2RlIHN0YXJ0fSBpbmRleC4KKwkgKgorCSAqIEBwYXJhbSBkYXRhCisJICogICAgICAgICAgICB0byBlbmNvZGUKKwkgKiBAcGFyYW0gc3RhcnQKKwkgKiAgICAgICAgICAgIGluZGV4IG9mIHRoZSBmaXJzdCBieXRlIHRvIGVuY29kZQorCSAqIEBwYXJhbSBsZW5ndGgKKwkgKiAgICAgICAgICAgIG51bWJlciBvZiBieXRlcyB0byBlbmNvZGUKKwkgKiBAcmV0dXJuIGVuY29kZWQgZGF0YQorCSAqLworCXB1YmxpYyBzdGF0aWMgYnl0ZVtdIGVuY29kZShieXRlW10gZGF0YSwgaW50IHN0YXJ0LCBpbnQgbGVuZ3RoKSB7CisJCWJ5dGVbXSByZXN1bHQgPSBuZXcgYnl0ZVtlbmNvZGVkTGVuZ3RoKGxlbmd0aCldOworCQlpbnQgZW5kID0gc3RhcnQgKyBsZW5ndGg7CisJCWludCBpbiA9IHN0YXJ0OworCQlpbnQgb3V0ID0gMDsKKwkJd2hpbGUgKGluIDwgZW5kKSB7CisJCQkvLyBBY2N1bXVsYXRlIHJlbWFpbmluZyBieXRlcyBNU0IgZmlyc3QgYXMgYSAzMmJpdCB2YWx1ZQorCQkJbG9uZyBhY2N1bXVsYXRvciA9ICgobG9uZykgKGRhdGFbaW4rK10gJiAweEZGKSkgPDwgMjQ7CisJCQlpZiAoaW4gPCBlbmQpIHsKKwkJCQlhY2N1bXVsYXRvciB8PSAoZGF0YVtpbisrXSAmIDB4RkYpIDw8IDE2OworCQkJCWlmIChpbiA8IGVuZCkgeworCQkJCQlhY2N1bXVsYXRvciB8PSAoZGF0YVtpbisrXSAmIDB4RkYpIDw8IDg7CisJCQkJCWlmIChpbiA8IGVuZCkgeworCQkJCQkJYWNjdW11bGF0b3IgfD0gKGRhdGFbaW4rK10gJiAweEZGKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS8vIFdyaXRlIHRoZSAzMmJpdCB2YWx1ZSBpbiBiYXNlLTg1IGVuY29kaW5nLCBhbHNvIE1TQiBmaXJzdAorCQkJZm9yIChpbnQgaSA9IDQ7IGkgPj0gMDsgaS0tKSB7CisJCQkJcmVzdWx0W291dCArIGldID0gRU5DT0RFWyhpbnQpIChhY2N1bXVsYXRvciAlIDg1KV07CisJCQkJYWNjdW11bGF0b3IgLz0gODU7CisJCQl9CisJCQlvdXQgKz0gNTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIERlY29kZXMgdGhlIEJhc2UtODUge0Bjb2RlIGVuY29kZWR9IGRhdGEgaW50byBhIGJ5dGUgYXJyYXkgb2YKKwkgKiB7QGNvZGUgZXhwZWN0ZWRTaXplfSBieXRlcy4KKwkgKgorCSAqIEBwYXJhbSBlbmNvZGVkCisJICogICAgICAgICAgICBCYXNlLTg1IGVuY29kZWQgZGF0YQorCSAqIEBwYXJhbSBleHBlY3RlZFNpemUKKwkgKiAgICAgICAgICAgIG9mIHRoZSByZXN1bHQKKwkgKiBAcmV0dXJuIHRoZSBkZWNvZGVkIGJ5dGVzCisJICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiBleHBlY3RlZFNpemUgZG9lc24ndCBtYXRjaCwgdGhlIGVuY29kZWQgZGF0YSBoYXMgYSBsZW5ndGgKKwkgKiAgICAgICAgICAgICB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mIDUsIG9yIHRoZXJlIGFyZSBpbnZhbGlkIGNoYXJhY3RlcnMKKwkgKiAgICAgICAgICAgICBpbiB0aGUgZW5jb2RlZCBkYXRhCisJICovCisJcHVibGljIHN0YXRpYyBieXRlW10gZGVjb2RlKGJ5dGVbXSBlbmNvZGVkLCBpbnQgZXhwZWN0ZWRTaXplKSB7CisJCXJldHVybiBkZWNvZGUoZW5jb2RlZCwgMCwgZW5jb2RlZC5sZW5ndGgsIGV4cGVjdGVkU2l6ZSk7CisJfQorCisJLyoqCisJICogRGVjb2RlcyB7QGNvZGUgbGVuZ3RofSBieXRlcyBvZiBCYXNlLTg1IHtAY29kZSBlbmNvZGVkfSBkYXRhLCBiZWdpbm5pbmcKKwkgKiBhdCB0aGUge0Bjb2RlIHN0YXJ0fSBpbmRleCwgaW50byBhIGJ5dGUgYXJyYXkgb2Yge0Bjb2RlIGV4cGVjdGVkU2l6ZX0KKwkgKiBieXRlcy4KKwkgKgorCSAqIEBwYXJhbSBlbmNvZGVkCisJICogICAgICAgICAgICBCYXNlLTg1IGVuY29kZWQgZGF0YQorCSAqIEBwYXJhbSBzdGFydAorCSAqICAgICAgICAgICAgaW5kZXggYXQgd2hpY2ggdGhlIGRhdGEgdG8gZGVjb2RlIHN0YXJ0cyBpbiB7QGNvZGUgZW5jb2RlZH0KKwkgKiBAcGFyYW0gbGVuZ3RoCisJICogICAgICAgICAgICBvZiB0aGUgQmFzZS04NSBlbmNvZGVkIGRhdGEKKwkgKiBAcGFyYW0gZXhwZWN0ZWRTaXplCisJICogICAgICAgICAgICBvZiB0aGUgcmVzdWx0CisJICogQHJldHVybiB0aGUgZGVjb2RlZCBieXRlcworCSAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgZXhwZWN0ZWRTaXplIGRvZXNuJ3QgbWF0Y2gsIHtAY29kZSBsZW5ndGh9IGlzIG5vdCBhCisJICogICAgICAgICAgICAgbXVsdGlwbGUgb2YgNSwgb3IgdGhlcmUgYXJlIGludmFsaWQgY2hhcmFjdGVycyBpbiB0aGUgZW5jb2RlZAorCSAqICAgICAgICAgICAgIGRhdGEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGJ5dGVbXSBkZWNvZGUoYnl0ZVtdIGVuY29kZWQsIGludCBzdGFydCwgaW50IGxlbmd0aCwKKwkJCWludCBleHBlY3RlZFNpemUpIHsKKwkJaWYgKGxlbmd0aCAlIDUgIT0gMCkgeworCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihKR2l0VGV4dC5nZXQoKS5iYXNlODVsZW5ndGgpOworCQl9CisJCWJ5dGVbXSByZXN1bHQgPSBuZXcgYnl0ZVtleHBlY3RlZFNpemVdOworCQlpbnQgZW5kID0gc3RhcnQgKyBsZW5ndGg7CisJCWludCBpbiA9IHN0YXJ0OworCQlpbnQgb3V0ID0gMDsKKwkJd2hpbGUgKGluIDwgZW5kICYmIG91dCA8IGV4cGVjdGVkU2l6ZSkgeworCQkJLy8gQWNjdW11bGF0ZSA1IGJ5dGVzLCAiTVNCIiBmaXJzdAorCQkJbG9uZyBhY2N1bXVsYXRvciA9IDA7CisJCQlmb3IgKGludCBpID0gNDsgaSA+PSAwOyBpLS0pIHsKKwkJCQlpbnQgdmFsID0gREVDT0RFW2VuY29kZWRbaW4rK10gJiAweEZGXTsKKwkJCQlpZiAodmFsIDwgMCkgeworCQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCUpHaXRUZXh0LmdldCgpLmJhc2U4NWludmFsaWRDaGFyLAorCQkJCQkJCUludGVnZXIudG9IZXhTdHJpbmcoZW5jb2RlZFtpbiAtIDFdICYgMHhGRikpKTsKKwkJCQl9CisJCQkJYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvciAqIDg1ICsgdmFsOworCQkJfQorCQkJaWYgKGFjY3VtdWxhdG9yID4gMHhGRkZGX0ZGRkZMKSB7CisJCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKwkJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmJhc2U4NW92ZXJmbG93LAorCQkJCQkJCQlMb25nLnRvSGV4U3RyaW5nKGFjY3VtdWxhdG9yKSkpOworCQkJfQorCQkJLy8gV3JpdGUgcmVtYWluaW5nIGJ5dGVzLCBNU0IgZmlyc3QKKwkJCXJlc3VsdFtvdXQrK10gPSAoYnl0ZSkgKGFjY3VtdWxhdG9yID4+PiAyNCk7CisJCQlpZiAob3V0IDwgZXhwZWN0ZWRTaXplKSB7CisJCQkJcmVzdWx0W291dCsrXSA9IChieXRlKSAoYWNjdW11bGF0b3IgPj4+IDE2KTsKKwkJCQlpZiAob3V0IDwgZXhwZWN0ZWRTaXplKSB7CisJCQkJCXJlc3VsdFtvdXQrK10gPSAoYnl0ZSkgKGFjY3VtdWxhdG9yID4+PiA4KTsKKwkJCQkJaWYgKG91dCA8IGV4cGVjdGVkU2l6ZSkgeworCQkJCQkJcmVzdWx0W291dCsrXSA9IChieXRlKSBhY2N1bXVsYXRvcjsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQkvLyBTaG91bGQgaGF2ZSBleGhhdXN0ZWQgJ2luJyBhbmQgZmlsbGVkICdvdXQnIGNvbXBsZXRlbHkKKwkJaWYgKGluIDwgZW5kKSB7CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChKR2l0VGV4dC5nZXQoKS5iYXNlODV0b29Mb25nLAorCQkJCQkJCUludGVnZXIudmFsdWVPZihleHBlY3RlZFNpemUpKSk7CisJCX0KKwkJaWYgKG91dCA8IGV4cGVjdGVkU2l6ZSkgeworCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKKwkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoSkdpdFRleHQuZ2V0KCkuYmFzZTg1dG9vU2hvcnQsCisJCQkJCQkJSW50ZWdlci52YWx1ZU9mKGV4cGVjdGVkU2l6ZSkpKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9UZW1wb3JhcnlCdWZmZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9UZW1wb3JhcnlCdWZmZXIuamF2YQppbmRleCA1NjJlYjA1Li5mYjg5M2E2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvVGVtcG9yYXJ5QnVmZmVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1RlbXBvcmFyeUJ1ZmZlci5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uVW5jaGVja2VkSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7CkBAIC0yMTMsNiArMjE0LDI0IEBACiAJfQogCiAJLyoqCisJICogQ29udmVydCBmaXJzdCB7QGNvZGUgbGltaXR9IG51bWJlciBvZiBieXRlcyBvZiB0aGUgYnVmZmVyIGNvbnRlbnQgdG8KKwkgKiBTdHJpbmcuCisJICoKKwkgKiBAcGFyYW0gbGltaXQKKwkgKiAgICAgICAgICAgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBiZSBjb252ZXJ0ZWQgdG8gU3RyaW5nCisJICogQHJldHVybiBmaXJzdCB7QGNvZGUgbGltaXR9IG51bWJlciBvZiBieXRlcyBvZiB0aGUgYnVmZmVyIGNvbnRlbnQKKwkgKiAgICAgICAgIGNvbnZlcnRlZCB0byBTdHJpbmcuCisJICogQHNpbmNlIDUuMTIKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKGludCBsaW1pdCkgeworCQl0cnkgeworCQkJcmV0dXJuIFJhd1BhcnNlVXRpbHMuZGVjb2RlKHRvQnl0ZUFycmF5KGxpbWl0KSk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCXRocm93IG5ldyBVbmNoZWNrZWRJT0V4Y2VwdGlvbihlKTsKKwkJfQorCX0KKworCS8qKgogCSAqIENvbnZlcnQgdGhpcyBidWZmZXIncyBjb250ZW50cyBpbnRvIGEgY29udGlndW91cyBieXRlIGFycmF5LiBJZiB0aGlzIHNpemUKIAkgKiBvZiB0aGUgYnVmZmVyIGV4Y2VlZHMgdGhlIGxpbWl0IG9ubHkgcmV0dXJuIHRoZSBmaXJzdCB7QGNvZGUgbGltaXR9IGJ5dGVzCiAJICogPHA+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5RGVsdGFJbnB1dFN0cmVhbS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeURlbHRhSW5wdXRTdHJlYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNlZWI4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeURlbHRhSW5wdXRTdHJlYW0uamF2YQpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvOworCitpbXBvcnQgamF2YS5pby5FT0ZFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKKworLyoqCisgKiBBbiB7QGxpbmsgSW5wdXRTdHJlYW19IHRoYXQgYXBwbGllcyBhIGJpbmFyeSBkZWx0YSB0byBhIGJhc2Ugb24gdGhlIGZseS4KKyAqIDxwPgorICogRGVsdGEgYXBwbGljYXRpb24gdG8gYSBiYXNlIG5lZWRzIHJhbmRvbSBhY2Nlc3MgdG8gdGhlIGJhc2UgZGF0YS4gVGhlIGRlbHRhCisgKiBpcyBleHByZXNzZWQgYXMgYSBzZXF1ZW5jZSBvZiBjb3B5IGFuZCBpbnNlcnQgaW5zdHJ1Y3Rpb25zLiBBIGNvcHkKKyAqIGluc3RydWN0aW9uIGhhcyB0aGUgZm9ybSAiQ09QWSBmcm9tT2Zmc2V0IGxlbmd0aCIgYW5kIHNheXMgImNvcHkgbGVuZ3RoIGJ5dGVzCisgKiBmcm9tIHRoZSBiYXNlLCBzdGFydGluZyBhdCBvZmZzZXQgZnJvbU9mZnNldCwgdG8gdGhlIHJlc3VsdCIuIEFuIGluc2VydAorICogaW5zdHJ1Y3Rpb24gaGFzIHRoZSBmb3JtICJJTlNFUlQgbGVuZ3RoIiBmb2xsb3dlZCBieSBsZW5ndGggYnl0ZXMgYW5kIHNheXMKKyAqICJjb3B5IHRoZSBuZXh0IGxlbmd0aCBieXRlcyBmcm9tIHRoZSBkZWx0YSB0byB0aGUgcmVzdWx0Ii4KKyAqIDwvcD4KKyAqIDxwPgorICogVGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmF0ZWQgdXNpbmcgYSBjb250ZW50LWRlZmluZWQgY2h1bmtpbmcgYWxnb3JpdGhtCisgKiAoY3VycmVudGx5IEMgZ2l0IHVzZXMgdGhlIHN0YW5kYXJkIFJhYmluIHZhcmlhbnQ7IGJ1dCB0aGVyZSBhcmUgb3RoZXJzIHRoYXQKKyAqIGNvdWxkIGJlIHVzZWQpIHRoYXQgaWRlbnRpZmllcyBlcXVhbCBjaHVua3MuIEl0IGlzIGVudGlyZWx5IHBvc3NpYmxlIHRoYXQgYQorICogbGF0ZXIgY29weSBpbnN0cnVjdGlvbiBoYXMgYSBmcm9tT2Zmc2V0IHRoYXQgaXMgYmVmb3JlIHRoZSBmcm9tT2Zmc2V0IG9mIGFuCisgKiBlYXJsaWVyIGNvcHkgaW5zdHJ1Y3Rpb24uCisgKiA8L3A+CisgKiA8cD4KKyAqIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBzdHJlYW0gdGhlIGJhc2UuCisgKiA8L3A+CisgKiA8cD4KKyAqIEpHaXQgaXMgbGltaXRlZCB0byAyR0IgbWF4aW11bSBzaXplIGZvciB0aGUgYmFzZSBzaW5jZSBhcnJheSBpbmRpY2VzIGFyZQorICogc2lnbmVkIDMyYml0IHZhbHVlcy4KKyAqCisgKiBAc2luY2UgNS4xMgorICovCitwdWJsaWMgY2xhc3MgQmluYXJ5RGVsdGFJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKKworCXByaXZhdGUgZmluYWwgYnl0ZVtdIGJhc2U7CisKKwlwcml2YXRlIGZpbmFsIElucHV0U3RyZWFtIGRlbHRhOworCisJcHJpdmF0ZSBsb25nIHJlc3VsdExlbmd0aDsKKworCXByaXZhdGUgbG9uZyB0b0RlbGl2ZXIgPSAtMTsKKworCXByaXZhdGUgaW50IGZyb21CYXNlOworCisJcHJpdmF0ZSBpbnQgZnJvbURlbHRhOworCisJcHJpdmF0ZSBpbnQgYmFzZU9mZnNldCA9IC0xOworCisJLyoqCisJICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgQmluYXJ5RGVsdGFJbnB1dFN0cmVhbX0gdGhhdCBhcHBsaWVzIHtAY29kZSBkZWx0YX0KKwkgKiB0byB7QGNvZGUgYmFzZX0uCisJICoKKwkgKiBAcGFyYW0gYmFzZQorCSAqICAgICAgICAgICAgZGF0YSB0byBhcHBseSB0aGUgZGVsdGEgdG8KKwkgKiBAcGFyYW0gZGVsdGEKKwkgKiAgICAgICAgICAgIHtAbGluayBJbnB1dFN0cmVhbX0gZGVsaXZlcmluZyB0aGUgZGVsdGEgdG8gYXBwbHkKKwkgKi8KKwlwdWJsaWMgQmluYXJ5RGVsdGFJbnB1dFN0cmVhbShieXRlW10gYmFzZSwgSW5wdXRTdHJlYW0gZGVsdGEpIHsKKwkJdGhpcy5iYXNlID0gYmFzZTsKKwkJdGhpcy5kZWx0YSA9IGRlbHRhOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWludCBiID0gcmVhZE5leHQoKTsKKwkJaWYgKGIgPj0gMCkgeworCQkJdG9EZWxpdmVyLS07CisJCX0KKwkJcmV0dXJuIGI7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gc3VwZXIucmVhZChiLCBvZmYsIGxlbik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlsb25nIGJhc2VTaXplID0gcmVhZFZhckludChkZWx0YSk7CisJCWlmIChiYXNlU2l6ZSA+IEludGVnZXIuTUFYX1ZBTFVFIHx8IGJhc2VTaXplIDwgMAorCQkJCXx8IChpbnQpIGJhc2VTaXplICE9IGJhc2UubGVuZ3RoKSB7CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCUpHaXRUZXh0LmdldCgpLmJpbmFyeURlbHRhQmFzZUxlbmd0aE1pc21hdGNoLAorCQkJCQlJbnRlZ2VyLnZhbHVlT2YoYmFzZS5sZW5ndGgpLCBMb25nLnZhbHVlT2YoYmFzZVNpemUpKSk7CisJCX0KKwkJcmVzdWx0TGVuZ3RoID0gcmVhZFZhckludChkZWx0YSk7CisJCWlmIChyZXN1bHRMZW5ndGggPCAwKSB7CisJCQl0aHJvdyBuZXcgU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uKAorCQkJCQlKR2l0VGV4dC5nZXQoKS5iaW5hcnlEZWx0YUludmFsaWRSZXN1bHRMZW5ndGgpOworCQl9CisJCXRvRGVsaXZlciA9IHJlc3VsdExlbmd0aDsKKwkJYmFzZU9mZnNldCA9IDA7CisJfQorCisJcHJpdmF0ZSBpbnQgcmVhZE5leHQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAoYmFzZU9mZnNldCA8IDApIHsKKwkJCWluaXRpYWxpemUoKTsKKwkJfQorCQlpZiAoZnJvbUJhc2UgPiAwKSB7CisJCQlmcm9tQmFzZS0tOworCQkJcmV0dXJuIGJhc2VbYmFzZU9mZnNldCsrXSAmIDB4RkY7CisJCX0gZWxzZSBpZiAoZnJvbURlbHRhID4gMCkgeworCQkJZnJvbURlbHRhLS07CisJCQlyZXR1cm4gZGVsdGEucmVhZCgpOworCQl9CisJCWludCBjb21tYW5kID0gZGVsdGEucmVhZCgpOworCQlpZiAoY29tbWFuZCA8IDApIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoKGNvbW1hbmQgJiAweDgwKSAhPSAwKSB7CisJCQkvLyBEZWNvZGUgb2Zmc2V0IGFuZCBsZW5ndGggdG8gcmVhZCBmcm9tIGJhc2UKKwkJCWxvbmcgY29weU9mZnNldCA9IDA7CisJCQlmb3IgKGludCBpID0gMSwgc2hpZnQgPSAwOyBpIDwgMHgxMDsgaSAqPSAyLCBzaGlmdCArPSA4KSB7CisJCQkJaWYgKChjb21tYW5kICYgaSkgIT0gMCkgeworCQkJCQljb3B5T2Zmc2V0IHw9ICgobG9uZykgbmV4dChkZWx0YSkpIDw8IHNoaWZ0OworCQkJCX0KKwkJCX0KKwkJCWludCBjb3B5U2l6ZSA9IDA7CisJCQlmb3IgKGludCBpID0gMHgxMCwgc2hpZnQgPSAwOyBpIDwgMHg4MDsgaSAqPSAyLCBzaGlmdCArPSA4KSB7CisJCQkJaWYgKChjb21tYW5kICYgaSkgIT0gMCkgeworCQkJCQljb3B5U2l6ZSB8PSBuZXh0KGRlbHRhKSA8PCBzaGlmdDsKKwkJCQl9CisJCQl9CisJCQlpZiAoY29weVNpemUgPT0gMCkgeworCQkJCWNvcHlTaXplID0gMHgxMDAwMDsKKwkJCX0KKwkJCWlmIChjb3B5T2Zmc2V0ID4gYmFzZS5sZW5ndGggLSBjb3B5U2l6ZSkgeworCQkJCXRocm93IG5ldyBTdHJlYW1Db3JydXB0ZWRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQlKR2l0VGV4dC5nZXQoKS5iaW5hcnlEZWx0YUludmFsaWRPZmZzZXQsCisJCQkJCQlMb25nLnZhbHVlT2YoY29weU9mZnNldCksIEludGVnZXIudmFsdWVPZihjb3B5U2l6ZSkpKTsKKwkJCX0KKwkJCWJhc2VPZmZzZXQgPSAoaW50KSBjb3B5T2Zmc2V0OworCQkJZnJvbUJhc2UgPSBjb3B5U2l6ZTsKKwkJCXJldHVybiByZWFkTmV4dCgpOworCQl9IGVsc2UgaWYgKGNvbW1hbmQgIT0gMCkgeworCQkJLy8gVGhlIG5leHQgJ2NvbW1hbmQnIGJ5dGVzIGNvbWUgZnJvbSB0aGUgZGVsdGEKKwkJCWZyb21EZWx0YSA9IGNvbW1hbmQgLSAxOworCQkJcmV0dXJuIGRlbHRhLnJlYWQoKTsKKwkJfSBlbHNlIHsKKwkJCS8vIFplcm8gaXMgcmVzZXJ2ZWQKKwkJCXRocm93IG5ldyBTdHJlYW1Db3JydXB0ZWRFeGNlcHRpb24oCisJCQkJCUpHaXRUZXh0LmdldCgpLnVuc3VwcG9ydGVkQ29tbWFuZDApOworCQl9CisJfQorCisJcHJpdmF0ZSBpbnQgbmV4dChJbnB1dFN0cmVhbSBpbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaW50IGIgPSBpbi5yZWFkKCk7CisJCWlmIChiIDwgMCkgeworCQkJdGhyb3cgbmV3IEVPRkV4Y2VwdGlvbigpOworCQl9CisJCXJldHVybiBiOworCX0KKworCXByaXZhdGUgbG9uZyByZWFkVmFySW50KElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlsb25nIHZhbCA9IDA7CisJCWludCBzaGlmdCA9IDA7CisJCWludCBiOworCQlkbyB7CisJCQliID0gbmV4dChpbik7CisJCQl2YWwgfD0gKChsb25nKSAoYiAmIDB4N2YpKSA8PCBzaGlmdDsKKwkJCXNoaWZ0ICs9IDc7CisJCX0gd2hpbGUgKChiICYgMHg4MCkgIT0gMCk7CisJCXJldHVybiB2YWw7CisJfQorCisJLyoqCisJICogVGVsbHMgdGhlIGV4cGVjdGVkIHNpemUgb2YgdGhlIGZpbmFsIHJlc3VsdC4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHNpemUKKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIHNpemUgY2Fubm90IGJlIGRldGVybWluZWQgZnJvbSB7QGNvZGUgZGVsdGF9CisJICovCisJcHVibGljIGxvbmcgZ2V0RXhwZWN0ZWRSZXN1bHRTaXplKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKGJhc2VPZmZzZXQgPCAwKSB7CisJCQlpbml0aWFsaXplKCk7CisJCX0KKwkJcmV0dXJuIHJlc3VsdExlbmd0aDsKKwl9CisKKwkvKioKKwkgKiBUZWxscyB3aGV0aGVyIHRoZSBkZWx0YSBoYXMgYmVlbiBmdWxseSBjb25zdW1lZCwgYW5kIHRoZSBleHBlY3RlZCBudW1iZXIKKwkgKiBvZiBieXRlcyBmb3IgdGhlIGNvbWJpbmVkIHJlc3VsdCBoYXZlIGJlZW4gcmVhZCBmcm9tIHRoaXMKKwkgKiB7QGxpbmsgQmluYXJ5RGVsdGFJbnB1dFN0cmVhbX0uCisJICoKKwkgKiBAcmV0dXJuIHdoZXRoZXIgZGVsdGEgYXBwbGljYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc0Z1bGx5Q29uc3VtZWQoKSB7CisJCXRyeSB7CisJCQlyZXR1cm4gdG9EZWxpdmVyID09IDAgJiYgZGVsdGEucmVhZCgpIDwgMDsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJcmV0dXJuIHRvRGVsaXZlciA9PSAwOworCQl9CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlkZWx0YS5jbG9zZSgpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlIdW5rSW5wdXRTdHJlYW0uamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlIdW5rSW5wdXRTdHJlYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Zjk0MGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtJbnB1dFN0cmVhbS5qYXZhCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87CisKK2ltcG9ydCBqYXZhLmlvLkVPRkV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5TdHJlYW1Db3JydXB0ZWRFeGNlcHRpb247CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5CYXNlODU7CisKKy8qKgorICogQSBzdHJlYW0gdGhhdCBkZWNvZGVzIGdpdCBiaW5hcnkgcGF0Y2ggZGF0YSBvbiB0aGUgZmx5LgorICoKKyAqIEBzaW5jZSA1LjEyCisgKi8KK3B1YmxpYyBjbGFzcyBCaW5hcnlIdW5rSW5wdXRTdHJlYW0gZXh0ZW5kcyBJbnB1dFN0cmVhbSB7CisKKwlwcml2YXRlIGZpbmFsIElucHV0U3RyZWFtIGluOworCisJcHJpdmF0ZSBpbnQgbGluZU51bWJlcjsKKworCXByaXZhdGUgYnl0ZVtdIGJ1ZmZlcjsKKworCXByaXZhdGUgaW50IHBvcyA9IDA7CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBCaW5hcnlIdW5rSW5wdXRTdHJlYW19LgorCSAqCisJICogQHBhcmFtIGluCisJICogICAgICAgICAgICB7QGxpbmsgSW5wdXRTdHJlYW19IHRvIHJlYWQgdGhlIGJhc2UtODUgZW5jb2RlZCBwYXRjaCBkYXRhCisJICogICAgICAgICAgICBmcm9tCisJICovCisJcHVibGljIEJpbmFyeUh1bmtJbnB1dFN0cmVhbShJbnB1dFN0cmVhbSBpbikgeworCQl0aGlzLmluID0gaW47CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKHBvcyA8IDApIHsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoYnVmZmVyID09IG51bGwgfHwgcG9zID09IGJ1ZmZlci5sZW5ndGgpIHsKKwkJCWZpbGxCdWZmZXIoKTsKKwkJfQorCQlpZiAocG9zID49IDApIHsKKwkJCXJldHVybiBidWZmZXJbcG9zKytdICYgMHhGRjsKKwkJfQorCQlyZXR1cm4gLTE7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGludCByZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlyZXR1cm4gc3VwZXIucmVhZChiLCBvZmYsIGxlbik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpbi5jbG9zZSgpOworCQlidWZmZXIgPSBudWxsOworCX0KKworCXByaXZhdGUgdm9pZCBmaWxsQnVmZmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaW50IGxlbmd0aCA9IGluLnJlYWQoKTsKKwkJaWYgKGxlbmd0aCA8IDApIHsKKwkJCXBvcyA9IGxlbmd0aDsKKwkJCWJ1ZmZlciA9IG51bGw7CisJCQlyZXR1cm47CisJCX0KKwkJbGluZU51bWJlcisrOworCQkvLyBMZW5ndGggaXMgZW5jb2RlZCB3aXRoIGNoYXJhY3RlcnMsIEEuLlogZm9yIDEuLjI2IGFuZCBhLi56IGZvciAyNy4uNTIKKwkJaWYgKCdBJyA8PSBsZW5ndGggJiYgbGVuZ3RoIDw9ICdaJykgeworCQkJbGVuZ3RoID0gbGVuZ3RoIC0gJ0EnICsgMTsKKwkJfSBlbHNlIGlmICgnYScgPD0gbGVuZ3RoICYmIGxlbmd0aCA8PSAneicpIHsKKwkJCWxlbmd0aCA9IGxlbmd0aCAtICdhJyArIDI3OworCQl9IGVsc2UgeworCQkJdGhyb3cgbmV3IFN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJSkdpdFRleHQuZ2V0KCkuYmluYXJ5SHVua0ludmFsaWRMZW5ndGgsCisJCQkJCUludGVnZXIudmFsdWVPZihsaW5lTnVtYmVyKSwgSW50ZWdlci50b0hleFN0cmluZyhsZW5ndGgpKSk7CisJCX0KKwkJYnl0ZVtdIGVuY29kZWQgPSBuZXcgYnl0ZVtCYXNlODUuZW5jb2RlZExlbmd0aChsZW5ndGgpXTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBlbmNvZGVkLmxlbmd0aDsgaSsrKSB7CisJCQlpbnQgYiA9IGluLnJlYWQoKTsKKwkJCWlmIChiIDwgMCB8fCBiID09ICdcbicpIHsKKwkJCQl0aHJvdyBuZXcgRU9GRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJSkdpdFRleHQuZ2V0KCkuYmluYXJ5SHVua0ludmFsaWRMZW5ndGgsCisJCQkJCQlJbnRlZ2VyLnZhbHVlT2YobGluZU51bWJlcikpKTsKKwkJCX0KKwkJCWVuY29kZWRbaV0gPSAoYnl0ZSkgYjsKKwkJfQorCQkvLyBNdXN0IGJlIGZvbGxvd2VkIGJ5IGEgbmV3bGluZTsgdG9sZXJhdGUgRU9GLgorCQlpbnQgYiA9IGluLnJlYWQoKTsKKwkJaWYgKGIgPj0gMCAmJiBiICE9ICdcbicpIHsKKwkJCXRocm93IG5ldyBTdHJlYW1Db3JydXB0ZWRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCUpHaXRUZXh0LmdldCgpLmJpbmFyeUh1bmtNaXNzaW5nTmV3bGluZSwKKwkJCQkJSW50ZWdlci52YWx1ZU9mKGxpbmVOdW1iZXIpKSk7CisJCX0KKwkJdHJ5IHsKKwkJCWJ1ZmZlciA9IEJhc2U4NS5kZWNvZGUoZW5jb2RlZCwgbGVuZ3RoKTsKKwkJfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKwkJCVN0cmVhbUNvcnJ1cHRlZEV4Y2VwdGlvbiBleCA9IG5ldyBTdHJlYW1Db3JydXB0ZWRFeGNlcHRpb24oCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmJpbmFyeUh1bmtEZWNvZGVFcnJvciwKKwkJCQkJCQlJbnRlZ2VyLnZhbHVlT2YobGluZU51bWJlcikpKTsKKwkJCWV4LmluaXRDYXVzZShlKTsKKwkJCXRocm93IGV4OworCQl9CisJCXBvcyA9IDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtPdXRwdXRTdHJlYW0uamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlIdW5rT3V0cHV0U3RyZWFtLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1NTFjMAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlIdW5rT3V0cHV0U3RyZWFtLmphdmEKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuQmFzZTg1OworCisvKioKKyAqIEFuIHtAbGluayBPdXRwdXRTdHJlYW19IHRoYXQgZW5jb2RlcyBkYXRhIGZvciBhIGdpdCBiaW5hcnkgcGF0Y2guCisgKgorICogQHNpbmNlIDUuMTIKKyAqLworcHVibGljIGNsYXNzIEJpbmFyeUh1bmtPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRwdXRTdHJlYW0geworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9CWVRFUyA9IDUyOworCisJcHJpdmF0ZSBmaW5hbCBPdXRwdXRTdHJlYW0gb3V0OworCisJcHJpdmF0ZSBmaW5hbCBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbTUFYX0JZVEVTXTsKKworCXByaXZhdGUgaW50IHBvczsKKworCS8qKgorCSAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIEJpbmFyeUh1bmtPdXRwdXRTdHJlYW19LgorCSAqCisJICogQHBhcmFtIG91dAorCSAqICAgICAgICAgICAge0BsaW5rIE91dHB1dFN0cmVhbX0gdG8gd3JpdGUgdGhlIGVuY29kZWQgZGF0YSB0bworCSAqLworCXB1YmxpYyBCaW5hcnlIdW5rT3V0cHV0U3RyZWFtKE91dHB1dFN0cmVhbSBvdXQpIHsKKwkJdGhpcy5vdXQgPSBvdXQ7CisJfQorCisJLyoqCisJICogRmx1c2hlcyBhbmQgY2xvc2VzIHRoaXMgc3RyZWFtLCBhbmQgY2xvc2VzIHRoZSB1bmRlcmx5aW5nCisJICoge0BsaW5rIE91dHB1dFN0cmVhbX0uCisJICovCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgY2xvc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlmbHVzaCgpOworCQlvdXQuY2xvc2UoKTsKKwl9CisKKwkvKioKKwkgKiBXcml0ZXMgYW55IGJ1ZmZlcmVkIG91dHB1dCBhcyBhIGJpbmFyeSBwYXRjaCBsaW5lIHRvIHRoZSB1bmRlcmx5aW5nCisJICoge0BsaW5rIE91dHB1dFN0cmVhbX0gYW5kIGZsdXNoZXMgdGhhdCBzdHJlYW0sIHRvby4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBmbHVzaCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChwb3MgPiAwKSB7CisJCQllbmNvZGUoYnVmZmVyLCAwLCBwb3MpOworCQkJcG9zID0gMDsKKwkJfQorCQlvdXQuZmx1c2goKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB3cml0ZShpbnQgYikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJYnVmZmVyW3BvcysrXSA9IChieXRlKSBiOworCQlpZiAocG9zID09IGJ1ZmZlci5sZW5ndGgpIHsKKwkJCWVuY29kZShidWZmZXIsIDAsIHBvcyk7CisJCQlwb3MgPSAwOworCQl9CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgd3JpdGUoYnl0ZVtdIGIsIGludCBvZmYsIGludCBsZW4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChsZW4gPT0gMCkgeworCQkJcmV0dXJuOworCQl9CisJCWludCB0b0NvcHkgPSBsZW47CisJCWludCBpbiA9IG9mZjsKKwkJaWYgKHBvcyA+IDApIHsKKwkJCS8vIEZpbGwgdGhlIGJ1ZmZlcgorCQkJaW50IGNodW5rID0gTWF0aC5taW4odG9Db3B5LCBidWZmZXIubGVuZ3RoIC0gcG9zKTsKKwkJCVN5c3RlbS5hcnJheWNvcHkoYiwgaW4sIGJ1ZmZlciwgcG9zLCBjaHVuayk7CisJCQlpbiArPSBjaHVuazsKKwkJCXBvcyArPSBjaHVuazsKKwkJCXRvQ29weSAtPSBjaHVuazsKKwkJCWlmIChwb3MgPT0gYnVmZmVyLmxlbmd0aCkgeworCQkJCWVuY29kZShidWZmZXIsIDAsIHBvcyk7CisJCQkJcG9zID0gMDsKKwkJCX0KKwkJCWlmICh0b0NvcHkgPT0gMCkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQl3aGlsZSAodG9Db3B5ID49IE1BWF9CWVRFUykgeworCQkJZW5jb2RlKGIsIGluLCBNQVhfQllURVMpOworCQkJdG9Db3B5IC09IE1BWF9CWVRFUzsKKwkJCWluICs9IE1BWF9CWVRFUzsKKwkJfQorCQlpZiAodG9Db3B5ID4gMCkgeworCQkJU3lzdGVtLmFycmF5Y29weShiLCBpbiwgYnVmZmVyLCAwLCB0b0NvcHkpOworCQkJcG9zID0gdG9Db3B5OworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGVuY29kZShieXRlW10gZGF0YSwgaW50IG9mZiwgaW50IGxlbmd0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaWYgKGxlbmd0aCA8PSAyNikgeworCQkJb3V0LndyaXRlKCdBJyArIGxlbmd0aCAtIDEpOworCQl9IGVsc2UgeworCQkJb3V0LndyaXRlKCdhJyArIGxlbmd0aCAtIDI3KTsKKwkJfQorCQlvdXQud3JpdGUoQmFzZTg1LmVuY29kZShkYXRhLCBvZmYsIGxlbmd0aCkpOworCQlvdXQud3JpdGUoJ1xuJyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvcG9tLnhtbCBiL3BvbS54bWwKaW5kZXggZjY2OGMxNy4uMWQxZWYzMyAxMDA2NDQKLS0tIGEvcG9tLnhtbAorKysgYi9wb20ueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgogICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICA8dmVyc2lvbj41LjExLjItU05BUFNIT1Q8L3ZlcnNpb24+CisgIDx2ZXJzaW9uPjUuMTIuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAogICA8bmFtZT5KR2l0IC0gUGFyZW50PC9uYW1lPgogICA8dXJsPiR7amdpdC11cmx9PC91cmw+CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICA8bWF2ZW4uY29tcGlsZXIudGFyZ2V0PjEuODwvbWF2ZW4uY29tcGlsZXIudGFyZ2V0PgogICAgIDxidW5kbGUtbWFuaWZlc3Q+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vTUVUQS1JTkYvTUFOSUZFU1QuTUY8L2J1bmRsZS1tYW5pZmVzdD4KIAotICAgIDxqZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9uPjUuMTAuMC4yMDIwMTIwODA5NTUtcjwvamdpdC1sYXN0LXJlbGVhc2UtdmVyc2lvbj4KKyAgICA8amdpdC1sYXN0LXJlbGVhc2UtdmVyc2lvbj41LjExLjAuMjAyMTAzMDkxNjEwLXI8L2pnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+CiAgICAgPGFwYWNoZS1zc2hkLXZlcnNpb24+Mi42LjA8L2FwYWNoZS1zc2hkLXZlcnNpb24+CiAgICAgPGpzY2gtdmVyc2lvbj4wLjEuNTU8L2pzY2gtdmVyc2lvbj4KICAgICA8anpsaWItdmVyc2lvbj4xLjEuMTwvanpsaWItdmVyc2lvbj4KQEAgLTE2Miw4ICsxNjIsOCBAQAogICAgIDxjb21tb25zLWNvbXByZXNzLXZlcnNpb24+MS4xOTwvY29tbW9ucy1jb21wcmVzcy12ZXJzaW9uPgogICAgIDxvc2dpLWNvcmUtdmVyc2lvbj40LjMuMTwvb3NnaS1jb3JlLXZlcnNpb24+CiAgICAgPHNlcnZsZXQtYXBpLXZlcnNpb24+My4xLjA8L3NlcnZsZXQtYXBpLXZlcnNpb24+Ci0gICAgPGpldHR5LXZlcnNpb24+OS40LjM2LnYyMDIxMDExNDwvamV0dHktdmVyc2lvbj4KLSAgICA8amFwaWNtcC12ZXJzaW9uPjAuMTQuNDwvamFwaWNtcC12ZXJzaW9uPgorICAgIDxqZXR0eS12ZXJzaW9uPjkuNC40MS52MjAyMTA1MTY8L2pldHR5LXZlcnNpb24+CisgICAgPGphcGljbXAtdmVyc2lvbj4wLjE1LjM8L2phcGljbXAtdmVyc2lvbj4KICAgICA8aHR0cGNsaWVudC12ZXJzaW9uPjQuNS4xMzwvaHR0cGNsaWVudC12ZXJzaW9uPgogICAgIDxodHRwY29yZS12ZXJzaW9uPjQuNC4xNDwvaHR0cGNvcmUtdmVyc2lvbj4KICAgICA8c2xmNGotdmVyc2lvbj4xLjcuMzA8L3NsZjRqLXZlcnNpb24+CkBAIC0zNTUsNyArMzU1LDcgQEAKICAgICAgICAgICAgIDxkZXBlbmRlbmN5PjwhLS0gYWRkIHN1cHBvcnQgZm9yIHNzaC9zY3AgLS0+CiAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ud2Fnb248L2dyb3VwSWQ+CiAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPndhZ29uLXNzaDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgPHZlcnNpb24+My40LjI8L3ZlcnNpb24+CisgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuNC4zPC92ZXJzaW9uPgogICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICA8L3BsdWdpbj4KQEAgLTM5Nyw3ICszOTcsNyBAQAogICAgICAgICA8cGx1Z2luPgogICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcmsuYm9vdDwvZ3JvdXBJZD4KICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYm9vdC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+CisgICAgICAgICAgPHZlcnNpb24+Mi40LjQ8L3ZlcnNpb24+CiAgICAgICAgIDwvcGx1Z2luPgogICAgICAgICA8cGx1Z2luPgogICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmRhc2g8L2dyb3VwSWQ+CkBAIC04NjAsMTIgKzg2MCwxMiBAQAogICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgPGZvcms+dHJ1ZTwvZm9yaz4KICAgICAgICAgICAgICAgPGNvbXBpbGVyQXJncyBjb21iaW5lLmNoaWxkcmVuPSJhcHBlbmQiPgogICAgICAgICAgICAgICAgIDxhcmc+LUotWGJvb3RjbGFzc3BhdGgvcDoke3NldHRpbmdzLmxvY2FsUmVwb3NpdG9yeX0vY29tL2dvb2dsZS9lcnJvcnByb25lL2phdmFjLyR7amF2YWMudmVyc2lvbn0vamF2YWMtJHtqYXZhYy52ZXJzaW9ufS5qYXI8L2FyZz4KICAgICAgICAgICAgICAgPC9jb21waWxlckFyZ3M+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgogICAgICAgICAgIDwvcGx1Z2luPgogICAgICAgICA8L3BsdWdpbnM+CiAgICAgICA8L2J1aWxkPgpAQCAtOTAwLDcgKzkwMCw3IEBACiAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpkdDwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5lY2o8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+My4yNC4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMjUuMDwvdmVyc2lvbj4KICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CiAgICAgICAgICAgPC9wbHVnaW4+Cg==