PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8ZG9jdW1lbnQ+PHByb3BlcnRpZXM+PHRpdGxlPkFwYWNoZSBXU1M0SiBBUEkgT3ZlcnZpZXc8L3RpdGxlPjwvcHJvcGVydGllcz48Ym9keT48c2VjdGlvbiBuYW1lPSJBcGFjaGUgV1NTNEogQVBJIE92ZXJ2aWV3Ij48L3NlY3Rpb24+PHNlY3Rpb24gbmFtZT0iIj48c3Vic2VjdGlvbiBuYW1lPSJDb250ZW50cyI+PHVsPgogIDxsaT48YSBocmVmPSIjQVBJX092ZXJ2aWV3Ij5BUEkgT3ZlcnZpZXc8L2E+PGJyPjwvYnI+CiAgPC9saT4KICA8dWw+CiAgICA8bGk+PGEgaHJlZj0iI29yZy5hcGFjaGUud3Muc2VjdXJpdHkuV1NTZWN1cml0eUVuZ2luZSI+V1NTZWN1cml0eUVuZ2luZTwvYT48L2xpPgogICAgPGxpPjxhIGhyZWY9IiNvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UuV1NCYXNlTWVzc2FnZSI+V1NCYXNlTWVzc2FnZTwvYT48L2xpPgogICAgPGxpPjxhIGhyZWY9IiNvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UuV1NTaWduRW52ZWxvcGUiPldTU2lnbkVudmVsb3BlPC9hPqAKKGV4dGVuZHMgV1NCYXNlTWVzc2FnZSk8L2xpPgogICAgPGxpPjxhIGhyZWY9IiNvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UuV1NBZGRUaW1lc3RhbXAiPldTQWRkVGltZXN0YW1wPC9hPqAKKGV4dGVuZHMgV1NCYXNlTWVzc2FnZSk8L2xpPgogICAgPGxpPjxhIGhyZWY9IiNvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UuV1NFbmNyeXB0Qm9keSI+V1NFbmNyeXB0Qm9keTwvYT6goAooZXh0ZW5kcyBXU0Jhc2VNZXNzYWdlKTwvbGk+CiAgICA8bGk+PGEgaHJlZj0iI29yZy5hcGFjaGUud3Muc2VjdXJpdHkubWVzc2FnZS5XU0FkZFVzZXJuYW1lVG9rZW4iPldTQWRkVXNlcm5hbWVUb2tlbjwvYT4KKGV4dGVuZHMgV1NCYXNlTWVzc2FnZSk8L2xpPgogICAgPGxpPjxhIGhyZWY9IiNvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UuV1NTQWRkU0FNTFRva2VuIj5XU1NBZGRTQU1MVG9rZW48L2E+CihleHRlbmRzIFdTQmFzZU1lc3NhZ2UpPC9saT4KICA8L3VsPgogIDxsaT48YSBocmVmPSIjRXhhbXBsZXMiPkV4YW1wbGVzPC9hPjwvbGk+CiAgPHVsPgogICAgPGxpPlNpZ24gdGhlIFNPQVAgQm9keTwvbGk+CiAgICA8bGk+RW5jcnlwdCB0aGUgU09BUCBCb2R5PC9saT4KICAgIDxsaT5Qcm9jZXNzIFdTUyBIZWFkZXIgYW5kIENoZWNrIHRoZSBSZXN1bHRzPGJyPjwvYnI+CiAgICA8L2xpPgogIDwvdWw+CjwvdWw+PGJyPjwvYnI+PC9zdWJzZWN0aW9uPjwvc2VjdGlvbj48c2VjdGlvbiBuYW1lPSIiPjxzdWJzZWN0aW9uIG5hbWU9IkFQSSBPdmVydmlldyI+PHA+V1NTNEogY2FuIGJlIHVzZWQgYXMgYSBsaWJyYXJ5IHRvIHByb3ZpZGUgYW4gQVBJIGZvciBXUy1TZWN1cml0eQpwcm9jZXNzaW5nLiBJbiB0aGlzIGNhc2UgV1NTNEogZG9lcyBub3QgbmVlZCB0byBiZSB1c2VkIHdpdGggQXhpcywgb3IKZXZlbiBiZSBhIHBhcnQgb2YgYSBkZXBsb3llZCB3ZWIgYXBwbGljYXRpb24uIFRoZSBXU1M0SiBBUEkgY2FuIGJlCmludm9rZWQgZGlyZWN0bHkgdG8gY3JlYXRlIFdTLVNlY3VyaXR5IGhlYWRlcnMgb3IgcHJvY2VzcyB0aGVtIGdpdmVuIGEKU09BUCBFbnZlbG9wZSBET00gRG9jdW1lbnQuPGJyPjwvYnI+CjwvcD48cD5Gb2xsb3dpbmcgaXMgYW4gb3ZlcnZpZXcgb2YgdGhlIG1haW4gY2xhc3NlcyBhbmQgbWV0aG9kcyBmb3IgdGhlCldTUzRKIEFQSS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBqYXZhIGRvY3MgZm9yIHRoZSBjb21wbGV0ZSBBUEkKZG9jdW1lbnRhdGlvbi48YnI+PC9icj4KPC9wPjwvc3Vic2VjdGlvbj48c3Vic2VjdGlvbiBuYW1lPSJvcmcuYXBhY2hlLndzLnNlY3VyaXR5LldTU2VjdXJpdHlFbmdpbmUiPjx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGxlZnQ7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iNCI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5BY3Rpb248YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+TWV0aG9kPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5HZXQgYW4gaW5zdGFuY2Ugb2Ygc2VjdXJpdHkKZW5naW5lIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPgogICAgICA8cHJlPnB1YmxpYyBzdGF0aWMgb3JnLmFwYWNoZS53cy5zZWN1cml0eS5XU1NlY3VyaXR5RW5naW5lIGdldEluc3RhbmNlKCk8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPkRlc2NyaXB0aW9uPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+R2V0CmEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHNlY3VyaXR5IGVuZ2luZQpjbGFzcy4gSWYgeW91IG5lZWQgdG8gZ2V0IGFuIGluc3RhbmNlIGNvbmZpZ3VyZWQgZm9yIGFuIG9sZGVyIHNwZWMKKGRpZmZlcmVudCBuYW1lc3BhY2VzKSB0aGVuIHVzZSB0aGUgb3RoZXIgbWV0aG9kIHdoaWNoIHRha2VzCm9yZy5hcGFjaGUud3Muc2VjdXJpdHkuV1NTQ29uZmlnPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iNCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5QYXJhbWV0ZXJzPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgPC90cj4KICAgIDx0cj4KICAgIDwvdHI+CiAgICA8dHI+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPlJldHVybnM8L3NwYW4+PGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+CiAgICAgIDxwcmU+b3JnLmFwYWNoZS53cy5zZWN1cml0eS5XU1NlY3VyaXR5RW5naW5lPC9wcmU+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+UHJvY2Vzc2VzCldTLVNlY3VyaXR5IEhlYWRlcnMgaW4gYSBTT0FQIEVudmVsb3BlPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+PGJyPjwvYnI+PHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSI0Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPkFjdGlvbjxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgY29sc3Bhbj0iMiIgcm93c3Bhbj0iMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5NZXRob2Q8YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiPlZlcmlmeSBXU1MgSGVhZGVyczxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgY29sc3Bhbj0iMiIgcm93c3Bhbj0iMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij4KICAgICAgPHByZT5qYXZhLnV0aWwuVmVjdG9yIDxiPnByb2Nlc3NTZWN1cml0eUhlYWRlcjwvYj4oPGJyPjwvYnI+ICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyw8YnI+PC9icj4gICAgamF2YS5sYW5nLlN0cmluZ6BhY3Rvciw8YnI+PC9icj4gICAgamF2YXguc2VjdXJpdHkuYXV0aC5jYWxsYmFjay5DYWxsYmFja0hhbmRsZXKgY2IsPGJyPjwvYnI+ICAgIG9yZy5hcGFjaGUud3Muc2VjdXJpdHkuY29tcG9uZW50cy5jcnlwdG8uQ3J5cHRvoGNyeXB0bzxicj48L2JyPiAgICApIHRocm93cyBvcmcuYXBhY2hlLndzLnNlY3VyaXR5LldTU2VjdXJpdHlFeGNlcHRpb248L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPkRlc2NyaXB0aW9uPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+VGFrZXMKYSBTT0FQIEVudmVsb3BlIGFzIGEgVzNDIERvY3VtZW50IGFuZCB2ZXJpZmllcyB0aGUgV1NTIEhlYWRlcnMuoApUaGlzCmluY2x1ZGVzIFVzZXJuYW1lIFRva2VuIHByb2Nlc3NpbmcsIFNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIGRlY3J5cHRpb24KYW5kIHRpbWVzdGFtcCB2ZXJpZmljYXRpb24uIEluIHRoZSBjYXNlIG9mIGVuY3J5cHRlZCBlbGVtZW50cywKZGVjcnlwdGlvbiBpcyBwZXJmb3JtZWQgbGl2ZSBvbiB0aGUgcGFzc2VkIGRvY3VtZW50LCBpLmUuLCBpdCBpcwp0cmFuc2Zvcm1lZCBpbnRvIHRoZSBkZWNyeXB0ZWQgZm9ybWF0Ljxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjQiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+UGFyYW1ldGVyczxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGZvbnQtd2VpZ2h0OiBib2xkOyI+CiAgICAgIDxwcmU+ZG9jPC9wcmU+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPnRoZSBTT0FQIEVudmVsb3BlIGFzIFczQyBET00KRG9jdW1lbnQ8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBmb250LXdlaWdodDogYm9sZDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+YWN0b3I8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDI1NSwgMjU1KTsiPnRoZQplbmdpbmUgd29ya3Mgb24gYmVoYWxmIG9mIHRoaXMgYWN0b3IuIFJlZmVyIHRvIHRoZSBTT0FQIHNwZWNpZmljYXRpb24KYWJvdXQgYWN0b3Igb3Igcm9sZSwgdGhpcyBtYXkgYmUgbnVsbC48YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5jYjxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5hIGNhbGxiYWNrIGhhbmRlciB0byB0aGUgY2FsbGVyCnRvIHJlc29sdmUgcGFzc3dvcmRzIGR1cmluZyBlbmNyeXB0aW9uIGFuZCBVc2VybmFtZVRva2VuIGhhbmRsaW5nLCB0aGlzCm1heSBiZSBudWxsLjxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBmb250LXdlaWdodDogYm9sZDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+Y3J5cHRvPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+dGhlCm9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGFjY2VzcyB0byB0aGUga2V5c3RvcmUgYW5kIHRoZSBoYW5kbGluZyBvZgpjZXJ0aWZpY2F0ZXMuIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBpbmNsdWRlZDoKb3JnLmFwYWNoZS53cy5zZWN1cml0eS5jb21wb25lbnRzLmNyeXB0by5NZXJsaW48YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+UmV0dXJuczwvc3Bhbj48YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+CiAgICAgIDxwcmU+amF2YS51dGlsLlZlY3RvcjwvcHJlPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5WZWN0b3Igb2YKb3JnLmFwYWNoZS53cy5zZWN1cml0eS5XU1NlY3VyaXR5RW5naW5lUmVzdWx0LCB0aGlzIGhhcyB0aGUgaW5mb3JtYXRpb24KcmVzdWx0aW5nIGZyb20gdGhlIHByb2Nlc3NpbmcsIHN1Y2ggYXMgdGhlIHByaW5jaXBhbCwgU0FNTCB0b2tlbiwgZXRjLjxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPjxicj48L2JyPjwvc3Vic2VjdGlvbj48c3Vic2VjdGlvbiBuYW1lPSJvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UuV1NCYXNlTWVzc2FnZSI+PHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSI0Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPkFjdGlvbjxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgY29sc3Bhbj0iMiIgcm93c3Bhbj0iMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5NZXRob2Q8YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiPlNldCB0aGUgU2lnbmF0dXJlL0VuY3J5cHRpb24KcGFydHM8YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+CiAgICAgIDxwcmU+cHVibGljIHZvaWQgc2V0UGFydHMoamF2YS51dGlsLlZlY3RvciBwYXJ0cyk8L3ByZT4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPkRlc2NyaXB0aW9uPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+VGFrZXMKYSB2ZWN0b3Igb2Ygb3JnLmFwYWNoZS53cy5zZWN1cml0eS5XU0VuY3J5cHRpb25QYXJ0Ljxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+UGFyYW1ldGVyczxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGZvbnQtd2VpZ2h0OiBib2xkOyI+CiAgICAgIDxwcmU+ZG9jPC9wcmU+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPnRoZSBTT0FQIEVudmVsb3BlIGFzIFczQyBET00KRG9jdW1lbnQ8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBmb250LXdlaWdodDogYm9sZDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+Y3J5cHRvPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+dGhlCm9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGFjY2VzcyB0byB0aGUga2V5c3RvcmUgYW5kIHRoZSBoYW5kbGluZyBvZgpjZXJ0aWZpY2F0ZXMuIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBpbmNsdWRlZDoKb3JnLmFwYWNoZS53cy5zZWN1cml0eS5jb21wb25lbnRzLmNyeXB0by5NZXJsaW48YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+UmV0dXJuczwvc3Bhbj48YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+CiAgICAgIDxwcmU+b3JnLnczYy5kb20uRG9jdW1lbnQ8L3ByZT4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+dGhlClNPQVAgRW52ZWxvcGUgU2lnbmVkLiBUaGUgc2lnbmVkIGVsZW1lbnRzIGRlcGVuZCBvbiB0aGUgc2lnbmF0dXJlIHBhcnRzCnRoYXQgYXJlIHNwZWNpZmllZCBieSB0aGUgV1NCYXNlTWVzc2FnZS5zZXRQYXJ0cyhqYXZhLnV0aWwuVmVjdG9yCnBhcnRzKSBtZXRob2Q8YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT48YnI+PC9icj48L3N1YnNlY3Rpb24+PHN1YnNlY3Rpb24gbmFtZT0ib3JnLmFwYWNoZS53cy5zZWN1cml0eS5tZXNzYWdlLldTU2lnbkVudmVsb3BlCihleHRlbmRzIFdTQmFzZU1lc3NhZ2UpIj48dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBsZWZ0OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjQiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+QWN0aW9uPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPk1ldGhvZDxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+U2lnbnMgYSBTT0FQIEVudmVsb3BlPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPgogICAgICA8cHJlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudCBidWlsZCg8YnI+PC9icj4gICAgb3JnLnczYy5kb20uRG9jdW1lbnQgZG9jLDxicj48L2JyPiAgICBvcmcuYXBhY2hlLndzLnNlY3VyaXR5LmNvbXBvbmVudHMuY3J5cHRvLkNyeXB0byBjcnlwdG88YnI+PC9icj4gICAgKSB0aHJvd3Mgb3JnLmFwYWNoZS53cy5zZWN1cml0eS5XU1NlY3VyaXR5RXhjZXB0aW9uPC9wcmU+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5EZXNjcmlwdGlvbjxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgY29sc3Bhbj0iMiIgcm93c3Bhbj0iMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDI1NSwgMjU1KTsiPlRha2VzCmEgU09BUCBFbnZlbG9wZSBhcyBhIFczQyBEb2N1bWVudCBhbmQgYWRkcyBXU1MgU2lnbmF0dXJlIGhlYWRlciB0byBpdC4KVGhlIHNpZ25lZCBlbGVtZW50cyBkZXBlbmQgb24gdGhlIHNpZ25hdHVyZSBwYXJ0cwp0aGF0IGFyZSBzcGVjaWZpZWQgYnkgdGhlIFdTQmFzZU1lc3NhZ2Uuc2V0UGFydHMoamF2YS51dGlsLlZlY3RvcgpwYXJ0cykgbWV0aG9kLiBCeSBkZWZhdWx0LCBTT0FQIEJvZHkgaXMgc2lnbmVkIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMiIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5QYXJhbWV0ZXJzPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij4KICAgICAgPHByZT5kb2M8L3ByZT4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+dGhlIFNPQVAgRW52ZWxvcGUgYXMgVzNDIERPTQpEb2N1bWVudDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGZvbnQtd2VpZ2h0OiBib2xkOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij5jcnlwdG88YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij50aGUKb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgYWNjZXNzIHRvIHRoZSBrZXlzdG9yZSBhbmQgdGhlIGhhbmRsaW5nIG9mCmNlcnRpZmljYXRlcy4gQSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGluY2x1ZGVkOgpvcmcuYXBhY2hlLndzLnNlY3VyaXR5LmNvbXBvbmVudHMuY3J5cHRvLk1lcmxpbjxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5SZXR1cm5zPC9zcGFuPjxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij4KICAgICAgPHByZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvcHJlPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij50aGUKU09BUCBFbnZlbG9wZSBzaWduZWQuPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+PGJyPjwvYnI+PC9zdWJzZWN0aW9uPjxzdWJzZWN0aW9uIG5hbWU9Im9yZy5hcGFjaGUud3Muc2VjdXJpdHkubWVzc2FnZS5XU0FkZFRpbWVzdGFtcAooZXh0ZW5kcyBXU0Jhc2VNZXNzYWdlKSI+PHRhYmxlIHN0eWxlPSJ3aWR0aDogMTAwJTsgdGV4dC1hbGlnbjogbGVmdDsiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjQiIGNlbGxzcGFjaW5nPSI0Ij4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPkFjdGlvbjxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgY29sc3Bhbj0iMiIgcm93c3Bhbj0iMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5NZXRob2Q8YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiPkFkZCBhIFRpbWVzdGFtcCBUb2tlbiB0byBhClNPQVAgRW52ZWxvcGUgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+CiAgICAgIDxwcmU+cHVibGljIG9yZy53M2MuZG9tLkRvY3VtZW50IDxiPmJ1aWxkPC9iPig8YnI+PC9icj4gICAgb3JnLnczYy5kb20uRG9jdW1lbnSgZG9jLDxicj48L2JyPiAgIKBpbnSgdHRsKTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+RGVzY3JpcHRpb248YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij5UYWtlcwphIFNPQVAgRW52ZWxvcGUgYXMgYSBXM0MgRG9jdW1lbnQgYW5kIGFkZHMgYSBUaW1lc3RhbXAgaGVhZGVyIHRvCml0LiBQbGVhc2UgcmVmZXIgdG8gdGhlIFdTIHNwZWNpZmljYXRpb24gMS4wLiBjaGFwdGVyIDEwIC8gYXBwZW5kaXggQS4yCiAgICAgIDxwPiA8L3A+CiAgICAgIDxwPiA8L3A+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgY29sc3Bhbj0iMSIgcm93c3Bhbj0iMiIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5QYXJhbWV0ZXJzPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij4KICAgICAgPHByZT5kb2M8L3ByZT4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+dGhlIFNPQVAgRW52ZWxvcGUgYXMgVzNDIERPTQpEb2N1bWVudDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGZvbnQtd2VpZ2h0OiBib2xkOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij4KICAgICAgPHByZT50dGw8L3ByZT4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij4odGltZQp0byBsaXZlKSBUaGlzIGlzIHRoZSB0aW1lIGRpZmZlcmVuY2UgaW4gc2Vjb25kcyBiZXR3ZWVuIHRoZSA8Y29kZT5DcmVhdGVkPC9jb2RlPgphbmQgdGhlIDxjb2RlPkV4cGlyZXM8L2NvZGU+IGluIDxjb2RlPlRpbWVzdGFtcDwvY29kZT4sIHNldCB0byB6ZXJvCmlmIDxjb2RlPkV4cGlyZXM8L2NvZGU+IHNob3VsZCBub3QgYmUgYWRkZWQuIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogYm9sZDsiPlJldHVybnM8L3NwYW4+PGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpOyI+CiAgICAgIDxwcmU+b3JnLnczYy5kb20uRG9jdW1lbnQ8L3ByZT4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Ij50aGUKU09BUCBFbnZlbG9wZSB3aXRoIHRoZSBUaW1lc3RhbXAgYWRkZWQ8YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT48YnI+PC9icj48L3N1YnNlY3Rpb24+PHN1YnNlY3Rpb24gbmFtZT0ib3JnLmFwYWNoZS53cy5zZWN1cml0eS5tZXNzYWdlLldTRW5jcnlwdEJvZHkKKGV4dGVuZHMgV1NCYXNlTWVzc2FnZSkiPjx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGxlZnQ7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iNCI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5BY3Rpb248YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+TWV0aG9kPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5FbmNyeXB0IGEgU09BUCBFbnZlbG9wZTxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgY29sc3Bhbj0iMiIgcm93c3Bhbj0iMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij4KICAgICAgPHByZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQgYnVpbGQoPGJyPjwvYnI+ICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyw8YnI+PC9icj4gICAgb3JnLmFwYWNoZS53cy5zZWN1cml0eS5jb21wb25lbnRzLmNyeXB0by5DcnlwdG8gY3J5cHRvPGJyPjwvYnI+ICAgICkgdGhyb3dzIG9yZy5hcGFjaGUud3Muc2VjdXJpdHkuV1NTZWN1cml0eUV4Y2VwdGlvbjwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+RGVzY3JpcHRpb248YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij5UYWtlcwphIFNPQVAgRW52ZWxvcGUgYXMgYSBXM0MgRG9jdW1lbnQgYW5kIGFkZHMgV1NTIEVuY3J5cHRpb24gaGVhZGVyIHRvIGl0LgpVbmxpa2UKd2hhdCB0aGUgY2xhc3MgbmFtZSBtaWdodCBpbXBseSwgdGhpcyBjYW4gYmUgdXNlZCB0byBlbmNyeXB0IGVsZW1lbnRzCmluIHRoZSBTT0FQIEhlYWRlciwgc3VjaCBhcyBVc2VybmFtZSBUb2tlbnMgb3Igb3RoZXIgYXJiaXRyYXJ5CmVsZW1lbnRzLiBUaGUgZW5jcnlwdGVkIGVsZW1lbnRzIGRlcGVuZCBvbiB0aGUgc2lnbmF0dXJlIHBhcnRzCnRoYXQgYXJlIHNwZWNpZmllZCBieSB0aGUgV1NCYXNlTWVzc2FnZS5zZXRQYXJ0cyhqYXZhLnV0aWwuVmVjdG9yCnBhcnRzKSBtZXRob2QuIEJ5IGRlZmF1bHQsIFNPQVAgQm9keSBpcyBlbmNyeXB0ZWQ8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+UGFyYW1ldGVyczxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGZvbnQtd2VpZ2h0OiBib2xkOyI+CiAgICAgIDxwcmU+ZG9jPC9wcmU+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPnRoZSBTT0FQIEVudmVsb3BlIGFzIFczQyBET00KRG9jdW1lbnQ8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBmb250LXdlaWdodDogYm9sZDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+Y3J5cHRvPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+dGhlCm9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGFjY2VzcyB0byB0aGUga2V5c3RvcmUgYW5kIHRoZSBoYW5kbGluZyBvZgpjZXJ0aWZpY2F0ZXMuIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBpbmNsdWRlZDoKb3JnLmFwYWNoZS53cy5zZWN1cml0eS5jb21wb25lbnRzLmNyeXB0by5NZXJsaW48YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+UmV0dXJuczwvc3Bhbj48YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+CiAgICAgIDxwcmU+b3JnLnczYy5kb20uRG9jdW1lbnQ8L3ByZT4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyI+dGhlClNPQVAgRW52ZWxvcGUgZW5jcnlwdGVkLjxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPjxicj48L2JyPjwvc3Vic2VjdGlvbj48c3Vic2VjdGlvbiBuYW1lPSJvcmcuYXBhY2hlLndzLnNlY3VyaXR5Lm1lc3NhZ2UuV1NBZGRVc2VybmFtZVRva2VuCihleHRlbmRzIFdTQmFzZU1lc3NhZ2UpIj48dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyB0ZXh0LWFsaWduOiBsZWZ0OyIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjQiPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+QWN0aW9uPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPk1ldGhvZDxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+QWRkIGEgVXNlcm5hbWUgVG9rZW4gdG8gYQpTT0FQIEVudmVsb3BlPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBjb2xzcGFuPSIyIiByb3dzcGFuPSIxIiBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPgogICAgICA8cHJlPnB1YmxpYyBvcmcudzNjLmRvbS5Eb2N1bWVudCBidWlsZCg8YnI+PC9icj4gICAgb3JnLnczYy5kb20uRG9jdW1lbnQgZG9jLDxicj48L2JyPiAgICBqYXZhLmxhbmcuU3RyaW5nIHVzZXJuYW1lLDxicj48L2JyPiAgICBqYXZhLmxhbmcuU3RyaW5nIHBhc3N3b3JkKTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+RGVzY3JpcHRpb248YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij5UYWtlcwphIFNPQVAgRW52ZWxvcGUgYXMgYSBXM0MgRG9jdW1lbnQgYW5kIGFkZHMgYSBVc2VybmFtZSBUb2tlbiBoZWFkZXIgdG8KaXQuIFVzZSBzZXRQYXNzd29yZFR5cGUoamF2YS5sYW5nLlN0cmluZyBwd1R5cGUpIHRvIGNob29zZSBiZXR3ZWVuCnBsYWluIHRleHQgcGFzc3dvcmRzIGFuZCBkaWdlc3RlZCBvbmVzLiA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGNvbHNwYW49IjEiIHJvd3NwYW49IjMiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+UGFyYW1ldGVyczxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGZvbnQtd2VpZ2h0OiBib2xkOyI+CiAgICAgIDxwcmU+ZG9jPC9wcmU+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsiPnRoZSBTT0FQIEVudmVsb3BlIGFzIFczQyBET00KRG9jdW1lbnQ8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBmb250LXdlaWdodDogYm9sZDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+dXNlcm5hbWU8YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij50aGUKdXNlcm5hbWUgdG8gdXNlPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij5wYXNzd29yZDxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij50aGUgcGFzc3dvcmQgdG8gdXNlIChhIHBsYWluCnRleHQgc3RyaW5nKTxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7Ij48c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IGJvbGQ7Ij5SZXR1cm5zPC9zcGFuPjxicj48L2JyPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDI1NSwgMjU1KTsiPgogICAgICA8cHJlPm9yZy53M2MuZG9tLkRvY3VtZW50PC9wcmU+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjU1LCAyNTUpOyI+dGhlClNPQVAgRW52ZWxvcGUgd2l0aCB0aGUgdXNlcm5hbWUgdG9rZW4gaGVhZGVyIGFkZGVkPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+PGJyPjwvYnI+PC9zdWJzZWN0aW9uPjxzdWJzZWN0aW9uIG5hbWU9Im9yZy5hcGFjaGUud3Muc2VjdXJpdHkubWVzc2FnZS5XU1NBZGRTQU1MVG9rZW4KKGV4dGVuZHMgV1NCYXNlTWVzc2FnZSkiPjx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQtYWxpZ246IGxlZnQ7IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI0IiBjZWxsc3BhY2luZz0iNCI+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIwNCwgMjA0KTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij5BY3Rpb248YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+TWV0aG9kPGJyPjwvYnI+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5BZGQgYSBTQU1MIFRva2VuIHRvIGEgU09BUApFbnZlbG9wZSA8L3RkPgogICAgICA8dGQgY29sc3Bhbj0iMiIgcm93c3Bhbj0iMSIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij4KICAgICAgPHByZT5wdWJsaWMgb3JnLnczYy5kb20uRG9jdW1lbnQgYnVpbGQoPGJyPjwvYnI+ICAgIG9yZy53M2MuZG9tLkRvY3VtZW50IGRvYyw8YnI+PC9icj4gICCgb3JnLm9wZW5zYW1sLlNBTUxBc3NlcnRpb24gYXNzZXJ0aW9uKTwvcHJlPgogICAgICA8L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyMDQsIDIwNCk7IGZvbnQtd2VpZ2h0OiBib2xkOyI+RGVzY3JpcHRpb248YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIGNvbHNwYW49IjIiIHJvd3NwYW49IjEiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjA0LCAyNTUsIDI1NSk7Ij5UYWtlcwphIFNPQVAgRW52ZWxvcGUgYXMgYSBXM0MgRG9jdW1lbnQgYW5kIGFkZHMgYSBTQU1MIEFzc2VydGlvbiBUb2tlbgpoZWFkZXIgdG8KaXQuIFBsZWFzZSByZWZlciB0byB0aGUgT3BlblNBTUwgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gY29uc3RydWN0IFNBTUwKYXNzZXJ0aW9ucy48YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBjb2xzcGFuPSIxIiByb3dzcGFuPSIyIiBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyBmb250LXdlaWdodDogYm9sZDsiPlBhcmFtZXRlcnM8YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBmb250LXdlaWdodDogYm9sZDsiPgogICAgICA8cHJlPmRvYzwvcHJlPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7Ij50aGUgU09BUCBFbnZlbG9wZSBhcyBXM0MgRE9NCkRvY3VtZW50PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDI1NSwgMjU1KTsiPgogICAgICA8cHJlPmFzc2VydGlvbjwvcHJlPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDI1NSwgMjU1KTsiPnRoZQpTQU1MIGFzc2VydGlvbiB0byBhZGQ8YnI+PC9icj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IHRvcDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjA0LCAyMDQpOyI+PHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBib2xkOyI+UmV0dXJuczwvc3Bhbj48YnI+PC9icj4KICAgICAgPC90ZD4KICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogdG9wOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSk7Ij4KICAgICAgPHByZT5vcmcudzNjLmRvbS5Eb2N1bWVudDwvcHJlPgogICAgICA8L3RkPgogICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiB0b3A7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1KTsiPnRoZQpTT0FQIEVudmVsb3BlIHdpdGggdGhlIFNBTUwgYXNzZXJ0aW9uIGhlYWRlciBhZGRlZDxicj48L2JyPgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPjxicj48L2JyPjwvc3Vic2VjdGlvbj48c3Vic2VjdGlvbiBuYW1lPSJFeGFtcGxlcyI+PC9zdWJzZWN0aW9uPjxzdWJzZWN0aW9uIG5hbWU9IlNpZ24gdGhlIFNPQVAgQm9keSI+PHNtYWxsPkRvY3VtZW50IGVudmVsb3BlID0gLi4uPGJyPjwvYnI+CldTU2lnbkVudmVsb3BlIHNpZ25lciA9IG5ldyBXU1NpZ25FbnZlbG9wZSgpOzxicj48L2JyPgpDcnlwdG8gY3J5cHRvID0gQ3J5cHRvRmFjdG9yeS5nZXRJbnN0YW5jZSgiY3J5cHRvLnByb3BlcnRpZXMiKTs8YnI+PC9icj4KVmVjdG9yIHBhcnRzID0gbmV3IFZlY3RvcigpOzxicj48L2JyPgpXU0VuY3J5cHRpb25QYXJ0IHBhcnQgPSBuZXcKV1NFbmNyeXB0aW9uUGFydChzb2FwQ29uc3RhbnRzLmdldEJvZHlRTmFtZSgpLmdldExvY2FsUGFydCgpLDxicj48L2JyPgqgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoAqgIKAgoCCgIKAgoCCgIKAgoAqgoCBzb2FwQ29uc3RhbnRzLmdldEVudmVsb3BlVVJJKCksPGJyPjwvYnI+CqAgoCCgIKAgoCCgIKAgoCCgCqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgCiJDb250ZW50Iik7PGJyPjwvYnI+CnBhcnRzLmFkZChwYXJ0KTs8YnI+PC9icj4Kc2lnbmVyLnNldFBhcnRzKHBhcnRzKTsgLy8gdGhpcyBpcyBvcHRpb25hbCBzaW5jZSB0aGUgYm9keSBpcyBzaWduZWQgYnkKZGVmYXVsdDxicj48L2JyPgplbnZlbG9wZSA9IHNpZ25lci5idWlsZChlbnZlbG9wZSwgY3J5cHRvKTs8L3NtYWxsPjxicj48L2JyPjwvc3Vic2VjdGlvbj48c3Vic2VjdGlvbiBuYW1lPSJFbmNyeXB0IHRoZSBTT0FQIEJvZHkiPjxzbWFsbD5Eb2N1bWVudCBlbnZlbG9wZSA9IC4uLjxicj48L2JyPgpXU0VuY3J5cHRCb2R5IGVuY3J5cHRvciA9IG5ldyBXU0VuY3J5cHRCb2R5KCk7PGJyPjwvYnI+CkNyeXB0byBjcnlwdG8gPSBDcnlwdG9GYWN0b3J5LmdldEluc3RhbmNlKCJjcnlwdG8ucHJvcGVydGllcyIpOzxicj48L2JyPgpWZWN0b3IgcGFydHMgPSBuZXcgVmVjdG9yKCk7PGJyPjwvYnI+CldTRW5jcnlwdGlvblBhcnQgcGFydCA9IG5ldwpXU0VuY3J5cHRpb25QYXJ0KHNvYXBDb25zdGFudHMuZ2V0Qm9keVFOYW1lKCkuZ2V0TG9jYWxQYXJ0KCksPGJyPjwvYnI+CqCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgCqAgoCCgIKAgoCCgIKAgoCCgCqCgIHNvYXBDb25zdGFudHMuZ2V0RW52ZWxvcGVVUkkoKSw8YnI+PC9icj4KoCCgIKAgoCCgIKAgoCCgIKAKoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAKIkNvbnRlbnQiKTs8YnI+PC9icj4KcGFydHMuYWRkKHBhcnQpOzxicj48L2JyPgplbmNyeXB0b3Iuc2V0UGFydHMocGFydHMpOyA8L3NtYWxsPjxzbWFsbD4vLyB0aGlzIGlzIG9wdGlvbmFsIHNpbmNlCnRoZSBib2R5IGlzIGVuY3J5cHRlZCBieSBkZWZhdWx0PC9zbWFsbD48YnI+PC9icj48c21hbGw+ZW52ZWxvcGUgPSBlbmNyeXB0b3IuYnVpbGQoZW52ZWxvcGUsIGNyeXB0byk7PC9zbWFsbD48YnI+PC9icj48L3N1YnNlY3Rpb24+PHN1YnNlY3Rpb24gbmFtZT0iUHJvY2VzcyBXU1MgSGVhZGVyIGFuZCBDaGVjayB0aGUgUmVzdWx0cyI+PHNtYWxsPgpEb2N1bWVudCBlbnZlbG9wZSA9IC4uLjxicj48L2JyPgpXU1NlY3VyaXR5RW5naW5lIHNlY0VuZ2luZSA9IFdTU2VjdXJpdHlFbmdpbmUuZ2V0SW5zdGFuY2UoKTs8YnI+PC9icj4KQ3J5cHRvIGNyeXB0byA9IENyeXB0b0ZhY3RvcnkuZ2V0SW5zdGFuY2UoImNyeXB0by5wcm9wZXJ0aWVzIik7PGJyPjwvYnI+Cjxjb2RlPi8vIDwvY29kZT48Y29kZT5qYXZheC5zZWN1cml0eS5hdXRoLmNhbGxiYWNrLkNhbGxiYWNrSGFuZGxlcjxicj48L2JyPgovLyBwbGVhc2UgcmVmZXIgdG8gdGhlIHRlc3RzIGZvciBleGFtcGxlcyBvZiBjYWxsYmFjayBoYW5kbGVyczxicj48L2JyPgo8L2NvZGU+PGNvZGU+Q2FsbGJhY2tIYW5kbGVyoGNiID0gbmV3IE15Q2FsbGJhY2tIYW5kbGVyKCk7PC9jb2RlPjxjb2RlPjwvY29kZT48YnI+PC9icj4KVmVjdG9yIHJlc3VsdHMgPSBzZWNFbmdpbmUucHJvY2Vzc1NlY3VyaXR5SGVhZGVyKGVudmVsb3BlLCBudWxsLCA8Y29kZT5jYjwvY29kZT4sCmNyeXB0byk7PGJyPjwvYnI+CmZvciAoaW50IGkgPSAwOyBpICZsdDsgcmVzdWx0cy5zaXplKCk7IGkrKykgezxicj48L2JyPgqgoKAgV1NIYW5kbGVyUmVzdWx0IGhSZXN1bHQgPQooV1NIYW5kbGVyUmVzdWx0KXJlc3VsdHMuZ2V0KGkpOzxicj48L2JyPgqgoKAgU3RyaW5nIGFjdG9yID0gaFJlc3VsdC5nZXRBY3RvcigpOzxicj48L2JyPgqgoKAgVmVjdG9yIGhSZXN1bHRzID0gaFJlc3VsdC5nZXRSZXN1bHRzKCk7PGJyPjwvYnI+CqCgoCBmb3IgKGludCBqID0gMDsgaiAmbHQ7IGhSZXN1bHRzLnNpemUoKTsgaisrKSB7PGJyPjwvYnI+CqCgoKCgoKAgV1NTZWN1cml0eUVuZ2luZVJlc3VsdAplUmVzdWx0ID0gKFdTU2VjdXJpdHlFbmdpbmVSZXN1bHQpaFJlc3VsdHMuZ2V0KGopOzxicj48L2JyPgqgoKCgoKCgIC8vIE5vdGU6IGFuIGVuY3J5cHRpb24KYWN0aW9uIGRvZXMgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCBwcmluY2lwYWw8YnI+PC9icj4KoKCgIKCgoCAvLyBvbmx5IFNpZ25hdHVyZSBhbmQKVXNlcm5hbWVUb2tlbiBhY3Rpb25zIHJldHVybiBhIHByaW5jaXBhbDxicj48L2JyPgqgoKCgoKCgIGlmIChlUmVzdWx0LmdldEFjdGlvbigpICE9CldTQ29uc3RhbnRzLkVOQ1IpIHs8YnI+PC9icj4KoKCgoKCgoKCgoKAKU3lzdGVtLm91dC5wcmludGxuKGVSZXN1bHQuZ2V0UHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTs8YnI+PC9icj4KoKCgoKCgoCB9PGJyPjwvYnI+CqCgoCB9PGJyPjwvYnI+Cn08L3NtYWxsPjxicj48L2JyPjwvc3Vic2VjdGlvbj48L3NlY3Rpb24+PC9ib2R5PjwvZG9jdW1lbnQ+