ZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORyBiL0NPTlRSSUJVVElORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDBhYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvQ09OVFJJQlVUSU5HCkBAIC0wLDAgKzEsNTUgQEAKKworIyBDb250cmlidXRpbmcgdG8gRWNsaXBzZSBBUFA0TUMKKworVGhhbmtzIGZvciB5b3VyIGludGVyZXN0IGluIHRoaXMgcHJvamVjdC4KKworIyMgUHJvamVjdCBkZXNjcmlwdGlvbgorCitBcHBsaWNhdGlvbiBQbGF0Zm9ybSBQcm9qZWN0IGZvciBNdWx0aSBDb3JlCisKKyogaHR0cHM6Ly9wcm9qZWN0cy5lY2xpcHNlLm9yZy9wcm9qZWN0cy90ZWNobm9sb2d5LmFwcDRtYworCisjIyBEZXZlbG9wZXIgcmVzb3VyY2VzCisKK0luZm9ybWF0aW9uIHJlZ2FyZGluZyBzb3VyY2UgY29kZSBtYW5hZ2VtZW50LCBidWlsZHMsIGNvZGluZyBzdGFuZGFyZHMsIGFuZAorbW9yZS4KKworKiBodHRwczovL3Byb2plY3RzLmVjbGlwc2Uub3JnL3Byb2plY3RzL3RlY2hub2xvZ3kuYXBwNG1jL2RldmVsb3BlcgorCitUaGUgcHJvamVjdCBtYWludGFpbnMgdGhlIGZvbGxvd2luZyBzb3VyY2UgY29kZSByZXBvc2l0b3JpZXMKKworKiBodHRwczovL2dpdC5lY2xpcHNlLm9yZy9yL3BsdWdpbnMvZ2l0aWxlcy9hcHA0bWMvb3JnLmVjbGlwc2UuYXBwNG1jCisqIGh0dHBzOi8vZ2l0LmVjbGlwc2Uub3JnL3IvcGx1Z2lucy9naXRpbGVzL2FwcDRtYy9vcmcuZWNsaXBzZS5hcHA0bWMuYWRkb24ubWlncmF0aW9uCisqIGh0dHBzOi8vZ2l0LmVjbGlwc2Uub3JnL3IvcGx1Z2lucy9naXRpbGVzL2FwcDRtYy9vcmcuZWNsaXBzZS5hcHA0bWMuZXhhbXBsZXMKKyogaHR0cHM6Ly9naXQuZWNsaXBzZS5vcmcvci9wbHVnaW5zL2dpdGlsZXMvYXBwNG1jL29yZy5lY2xpcHNlLmFwcDRtYy50b29scworCitUaGlzIHByb2plY3QgdXNlcyBCdWd6aWxsYSB0byB0cmFjayBvbmdvaW5nIGRldmVsb3BtZW50IGFuZCBpc3N1ZXMuCisKKyogU2VhcmNoIGZvciBpc3N1ZXM6IGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL2J1Z2xpc3QuY2dpP3Byb2R1Y3Q9QVBQNE1DCisqIENyZWF0ZSBhIG5ldyByZXBvcnQ6CisgICBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9QVBQNE1DCisKK0JlIHN1cmUgdG8gc2VhcmNoIGZvciBleGlzdGluZyBidWdzIGJlZm9yZSB5b3UgY3JlYXRlIGFub3RoZXIgb25lLiBSZW1lbWJlciB0aGF0Citjb250cmlidXRpb25zIGFyZSBhbHdheXMgd2VsY29tZSEKKworIyMgRWNsaXBzZSBDb250cmlidXRvciBBZ3JlZW1lbnQKKworQmVmb3JlIHlvdXIgY29udHJpYnV0aW9uIGNhbiBiZSBhY2NlcHRlZCBieSB0aGUgcHJvamVjdCB0ZWFtIGNvbnRyaWJ1dG9ycyBtdXN0CitlbGVjdHJvbmljYWxseSBzaWduIHRoZSBFY2xpcHNlIENvbnRyaWJ1dG9yIEFncmVlbWVudCAoRUNBKS4KKworKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL0VDQS5waHAKKworQ29tbWl0cyB0aGF0IGFyZSBwcm92aWRlZCBieSBub24tY29tbWl0dGVycyBtdXN0IGhhdmUgYSBTaWduZWQtb2ZmLWJ5IGZpZWxkIGluCit0aGUgZm9vdGVyIGluZGljYXRpbmcgdGhhdCB0aGUgYXV0aG9yIGlzIGF3YXJlIG9mIHRoZSB0ZXJtcyBieSB3aGljaCB0aGUKK2NvbnRyaWJ1dGlvbiBoYXMgYmVlbiBwcm92aWRlZCB0byB0aGUgcHJvamVjdC4gVGhlIG5vbi1jb21taXR0ZXIgbXVzdAorYWRkaXRpb25hbGx5IGhhdmUgYW4gRWNsaXBzZSBGb3VuZGF0aW9uIGFjY291bnQgYW5kIG11c3QgaGF2ZSBhIHNpZ25lZCBFY2xpcHNlCitDb250cmlidXRvciBBZ3JlZW1lbnQgKEVDQSkgb24gZmlsZS4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIEVjbGlwc2UgQ29tbWl0dGVyIEhhbmRib29rOgoraHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvcHJvamVjdHMvaGFuZGJvb2svI3Jlc291cmNlcy1jb21taXQKKworIyMgQ29udGFjdAorCitDb250YWN0IHRoZSBwcm9qZWN0IGRldmVsb3BlcnMgdmlhIHRoZSBwcm9qZWN0J3MgImRldiIgbGlzdC4KKworKiBodHRwczovL2Rldi5lY2xpcHNlLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FwcDRtYy1kZXYKZGlmZiAtLWdpdCBhL05PVElDRSBiL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjczYjJjCi0tLSAvZGV2L251bGwKKysrIGIvTk9USUNFCkBAIC0wLDAgKzEsMjg5IEBACisKKyMgTm90aWNlcyBmb3IgRWNsaXBzZSBBUFA0TUMKKworVGhpcyBjb250ZW50IGlzIHByb2R1Y2VkIGFuZCBtYWludGFpbmVkIGJ5IHRoZSBFY2xpcHNlIEFQUDRNQyBwcm9qZWN0LgorCisqIFByb2plY3QgaG9tZTogaHR0cHM6Ly9wcm9qZWN0cy5lY2xpcHNlLm9yZy9wcm9qZWN0cy90ZWNobm9sb2d5LmFwcDRtYworCisjIyBUcmFkZW1hcmtzCisKK0VjbGlwc2UgQVBQNE1DLCBhbmQgQVBQNE1DIGFyZSB0cmFkZW1hcmtzIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24uCisKKyMjIENvcHlyaWdodAorCitBbGwgY29udGVudCBpcyB0aGUgcHJvcGVydHkgb2YgdGhlIHJlc3BlY3RpdmUgYXV0aG9ycyBvciB0aGVpciBlbXBsb3llcnMuIEZvcgorbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYXV0aG9yc2hpcCBvZiBjb250ZW50LCBwbGVhc2UgY29uc3VsdCB0aGUgbGlzdGVkCitzb3VyY2UgY29kZSByZXBvc2l0b3J5IGxvZ3MuCisKKyMjIERlY2xhcmVkIFByb2plY3QgTGljZW5zZXMKKworVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2LiAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CitodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAuCisKK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisKKyMjIFNvdXJjZSBDb2RlCisKK1RoZSBwcm9qZWN0IG1haW50YWlucyB0aGUgZm9sbG93aW5nIHNvdXJjZSBjb2RlIHJlcG9zaXRvcmllczoKKworKiBodHRwczovL2dpdC5lY2xpcHNlLm9yZy9yL3BsdWdpbnMvZ2l0aWxlcy9hcHA0bWMvb3JnLmVjbGlwc2UuYXBwNG1jCisqIGh0dHBzOi8vZ2l0LmVjbGlwc2Uub3JnL3IvcGx1Z2lucy9naXRpbGVzL2FwcDRtYy9vcmcuZWNsaXBzZS5hcHA0bWMuYWRkb24ubWlncmF0aW9uCisqIGh0dHBzOi8vZ2l0LmVjbGlwc2Uub3JnL3IvcGx1Z2lucy9naXRpbGVzL2FwcDRtYy9vcmcuZWNsaXBzZS5hcHA0bWMuZXhhbXBsZXMKKyogaHR0cHM6Ly9naXQuZWNsaXBzZS5vcmcvci9wbHVnaW5zL2dpdGlsZXMvYXBwNG1jL29yZy5lY2xpcHNlLmFwcDRtYy50b29scworCisjIyBUaGlyZC1wYXJ0eSBDb250ZW50CisKK1RoaXMgcHJvamVjdCBsZXZlcmFnZXMgdGhlIGZvbGxvd2luZyB0aGlyZCBwYXJ0eSBjb250ZW50LgorCitBcGFjaGUgQ29tbW9ucyBMYW5nICgyLjYpCisKKyogTGljZW5zZTogQXBhY2hlIExpY2Vuc2UsIDIuMAorCitBcGFjaGUgQ29tbW9ucyBMYW5nICgzLjEuMCkKKworKiBMaWNlbnNlOiBBcGFjaGUgTGljZW5zZSwgMi4wCisKK0FwYWNoZSBDb21tb25zIE1hdGggKDIuMS4wKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAsIE5ldyBCU0QgbGljZW5zZSAKKworQXBhY2hlIENvbW1vbnMgTWF0aCAoMy41LjApCisKKyogTGljZW5zZTogQXBhY2hlIExpY2Vuc2UsIDIuMCwgTmV3IEJTRCBMaWNlbnNlCisKK0FwYWNoZSBKZW5hLUFSUSAoMi4xMC4wKQorCisqIExpY2Vuc2U6IEFwYWNoZS0yLjAgCisKK0FwYWNoZSBKZW5hLUNvcmUgKDIuNy4xKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlIDIuMCwgTmV3IEJTRCBsaWNlbnNlCisKK0FwYWNoZSBqZW5hLWlyaSAoMC45LjIpCisKKyogTGljZW5zZTogQXBhY2hlIExpY2Vuc2UsIDIuMAorCitBcGFjaGUgSmVuYS1UREIgKDAuMTAuMCkKKworKiBMaWNlbnNlOiBBcGFjaGUtMi4wIAorCitBcmR1aVBpIEFkYWZydWl0IFNTRDEzMDYgT0xFRCBEcml2ZXIgU0hBIENvbW1pdAorMzc5NTZiMTZhYTg1MTRkZGU1YjZlY2JhMDRhMjBjYzBiYWJlMzlmMSAobi9hKQorCisqIExpY2Vuc2U6IEJTRC0yLUNsYXVzZQorCitCQ0VMLkphciAoNS4yKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAKKworY2hvY28gKDQuMC42KQorCisqIExpY2Vuc2U6IEJTRC00LUNsYXVzZQorKiBQcm9qZWN0OiBodHRwOi8vd3d3LmNob2NvLXNvbHZlci5vcmcKKyogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vY2hvY290ZWFtL2Nob2NvLXNvbHZlcgorCitjaG9jby1jdXRvZmZzZXEgKDEuMC40KQorCisqIExpY2Vuc2U6IEJTRC00LUNsYXVzZQorKiBQcm9qZWN0OiBodHRwczovL2dpdGh1Yi5jb20vY2hvY290ZWFtL2N1dG9mZnNlcQorKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9jb3RlYW0vY3V0b2Zmc2VxL3JlbGVhc2VzL3RhZy9wZjRjcy0xLjAuNAorCitjaG9jby1ncmFwaCAoNC4yLjApCisKKyogTGljZW5zZTogQlNELTQtQ2xhdXNlIEFORCBCU0QtMi1DbGF1c2UgQU5EIEJTRC0zLUNsYXVzZQorKiBQcm9qZWN0OiBodHRwczovL2dpdGh1Yi5jb20vY2hvY290ZWFtL2Nob2NvLWdyYXBoCisqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2Nob2NvdGVhbS9jaG9jby1ncmFwaAorCitjaG9jby1zYXQgKDEuMC4yKQorCisqIExpY2Vuc2U6IEJTRC0zLUNsYXVzZQorKiBQcm9qZWN0OiBodHRwczovL2dpdGh1Yi5jb20vY2hvY290ZWFtL2Nob2NvLXNhdAorKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9jb3RlYW0vY2hvY28tc2F0CisKK2Nob2NvLXNvbHZlciAoNC4wLjkpCisKKyogTGljZW5zZTogQlNELTQtQ2xhdXNlCisqIFByb2plY3Q6IGh0dHA6Ly93d3cuY2hvY28tc29sdmVyLm9yZworKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9jb3RlYW0vY2hvY28tc29sdmVyL3JlbGVhc2VzL3RhZy80LjAuOQorCitjcHByb2YtamF2YSAoMS4zLjApCisKKyogTGljZW5zZTogTUlUCisqIFByb2plY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9jcC1wcm9maWxlci9qYXZhLWludGVncmF0aW9uCisqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2NwLXByb2ZpbGVyL2phdmEtaW50ZWdyYXRpb24KKworZGsuYnJpY3MuYXV0b21hdG9uICgxOC4wMS4yMDE4KQorCisqIExpY2Vuc2U6IEJTRCAzLUNsYXVzZQorKiBQcm9qZWN0OiBodHRwOi8vd3d3LmJyaWNzLmRrL2F1dG9tYXRvbi8KKyogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vY3MtYXUtZGsvZGsuYnJpY3MuYXV0b21hdG9uCisKK2Vhc3ltb2NrICgzLjMuMSkKKworKiBMaWNlbnNlOiBBcGFjaGUgTGljZW5zZSwgMi4wCisqIFByb2plY3Q6IGh0dHA6Ly9lYXN5bW9jay5vcmcvCisqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2Vhc3ltb2NrL2Vhc3ltb2NrL2FyY2hpdmUvZWFzeW1vY2stMy4zLjEuemlwCisKK0dvb2dsZSBHdWF2YSAoMTUuMC4wKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAKKworR29vZ2xlIEd1YXZhICgyMS4wKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAKKworSU5DSFJPTiBSZWFsdGltZSBTeXN0ZW0gTW9kZWwgKDIuOTguMikKKworKiBMaWNlbnNlOiBFUEwtMi4wCisqIFByb2plY3Q6IGh0dHA6Ly93d3cuaW5jaHJvbi5jb20KKyogU291cmNlOiBodHRwOi8vZWNsaXBzZS5pbmNocm9uLmNvbS9yZWFsdGltZS91cGRhdGVzaXRlcy9yZWxlYXNlLzIuOTguMi8KKworSW5jaHJvbiBSZWFsdGltZSBTeXN0ZW0gbW9kZWwgKDIuOTguNSkKKworKiBMaWNlbnNlOiBFUEwtMi4wCisqIFByb2plY3Q6IGh0dHA6Ly93d3cuaW5jaHJvbi5jb20KKyogU291cmNlOiBodHRwOi8vZWNsaXBzZS5pbmNocm9uLmNvbS9yZWFsdGltZS91cGRhdGVzaXRlcy9yZWxlYXNlLzIuOTguNS8KKworamF2YV9jdXAgcnVudGltZSBWZXJzaW9uOiAxMGsgKG4vYSkKKworKiBMaWNlbnNlOiBKYXZhIEN1cCBMaWNlbnNlIChNSVQgU3R5bGUpCisKK2phdmFzc2lzdCAoMy4xOS4wKQorCisqIExpY2Vuc2U6IE1vemlsbGEgUHVibGljIExpY2Vuc2UgMS4xIChNUEwpLCBBcGFjaGUgMi4wIAorKiBQcm9qZWN0OiBodHRwOi8vamJvc3MtamF2YXNzaXN0LmdpdGh1Yi5pby9qYXZhc3Npc3QvCisqIFNvdXJjZToKKyAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qYm9zcy1qYXZhc3Npc3QvamF2YXNzaXN0L2FyY2hpdmUvcmVsXzNfMTlfMF9nYS56aXAKKworamF4ZW4gKDEuMS42KQorCisqIExpY2Vuc2U6IEJTRCBMaWNlbnNlLCBXM0MgKE9uZSBGaWxlKQorKiBQcm9qZWN0OiBodHRwczovL2dpdGh1Yi5jb20vY29kZWhhdXMvamF4ZW4KKyogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vY29kZWhhdXMvamF4ZW4vdHJlZS9WXzFfMV82X0ZpbmFsL2pheGVuCisKK2pjbC1vdmVyLXNsZjRqLTEuNy4xMC5qYXIgKDEuNy4xMCkKKworKiBMaWNlbnNlOiBBcGFjaGUtMi4wCisKK2pkb20gKDIuMC42KQorCisqIExpY2Vuc2U6IEpEb20gTGljZW5zZSAoYmFzZWQgb24gQXBhY2hlIDEuMSBTdHlsZSBMaWNlbnNlKQorKiBQcm9qZWN0OiBodHRwOi8vd3d3Lmpkb20ub3JnCisqIFNvdXJjZTogaHR0cDovL3d3dy5qZG9tLm9yZy9kaXN0L2JpbmFyeS9qZG9tLTIuMC42LnppcAorCitqZW5ldGljcyAoMy4wLjEpCisKKyogTGljZW5zZTogQXBhY2hlIExpY2Vuc2UsIDIuMAorKiBQcm9qZWN0OiBodHRwOi8vamVuZXRpY3MuaW8vCisqIFNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2plbmV0aWNzL2plbmV0aWNzL3JlbGVhc2VzL3RhZy92My4wLjEKKworSmVuZXRpY3MgKDMuOC4wKQorCisqIExpY2Vuc2U6IEFwYWNoZS0yLjAKKyogUHJvamVjdDogaHR0cDovL2plbmV0aWNzLmlvLworKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9qZW5ldGljcy9qZW5ldGljcy90cmVlL3YzLjguMAorCitqZ3JhcGh0ICgwLjkuMCkKKworKiBMaWNlbnNlOiBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDEuMAorKiBQcm9qZWN0OiBodHRwOi8vamdyYXBodC5vcmcvCisKK2pncmFwaHQtY29yZSAoMS4xLjApCisKKyogTGljZW5zZTogRVBMLTEuMCBPUiBMR1BMLTIuMS1vci1sYXRlciAJCisKK0pISEMtU1IwNCAobi9hKQorCisqIExpY2Vuc2U6IFBlbmRpbmcKKworSkhQV01Ecml2ZXIgKG4vYSkKKworKiBMaWNlbnNlOiBNSVQKKworSlVuaXQgKDQuMTIpCisKKyogTGljZW5zZTogRWNsaXBzZSBQdWJsaWMgTGljZW5zZQorCitsb2c0aiAoMS4yLjE1KQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAKKworbG9nNGogb3ZlciBzbGY0aiAxLjcuMTAuamFyICgxLjcuMTApCisKKyogTGljZW5zZTogQXBhY2hlLTIuMAorCitteEdyYXBoICgzLjcuMC4wKQorCisqIExpY2Vuc2U6IEFwYWNoZS0yLjAgQU5EIEJTRC0zLUNsYXVzZQorKiBQcm9qZWN0OiBodHRwczovL2pncmFwaC5naXRodWIuaW8vbXhncmFwaC8KKyogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vamdyYXBoL214Z3JhcGgKKworbmV0LnNmLnRyb3ZlNGo6dHJvdmU0aiAoMy4wLjMpCisKKyogTGljZW5zZTogR05VIExpYnJhcnkgb3IgJ0xlc3NlcicgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoTEdQTCkgMi4xLCBNSVQgU3R5bGUKKyAgICgyIEZpbGVzKQorCitvamFsZ28gKDM5LjApCisKKyogTGljZW5zZTogTUlUIExpY2Vuc2UsIEJTRCwgUHVibGljIERvbWFpbgorKiBQcm9qZWN0OiBodHRwOi8vb2phbGdvLm9yZy8KKyogU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vb3B0aW1hdGlrYS9vakFsZ28vdHJlZS92MzkKKworb3JnLnhlcmlhbC5zcWxpdGUgKDMuNy4yKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAsIElTQyBMaWNlbnNlCisKK3BmNGNzICgxLjAuNSkKKworKiBMaWNlbnNlOiBCU0QtNC1DbGF1c2UKKyogUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL2Nob2NvdGVhbS9wZjRjcworKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9jaG9jb3RlYW0vcGY0Y3MKKworcGxhbnRVTUwgKDIwMTguOCkKKworKiBMaWNlbnNlOiAoRVBMLTEuMCBPUiBCU0QtMy1DTEFVU0UgT1IgTUlUIE9SIEFwYWNoZS0yLjAgT1IgR1BMLTIuMC1vci1sYXRlciBPUgorICAgTEdQTC0zLjAtb3ItbGF0ZXIpIEFORCAoRVBMLTEuMCBPUiBCU0QtMy1DTEFVU0UgT1IgTUlUIE9SIEFwYWNoZS0yLjAgT1IKKyAgIEdQTC0yLjAtb3ItbGF0ZXIgT1IgTEdQTC0zLjAtb3ItbGF0ZXIgT1IgQUdQTC0zLjAtb3ItbGF0ZXIpIEFORCBCU0QtMy1DbGF1c2UKKyAgIEFORCBNSVQgQU5EIEFwYWNoZS0yLjAgIAorCitQbGFudFVNTCBFUEwgVmVyc2lvbjogODAwMCAobi9hKQorCisqIExpY2Vuc2U6IEVjbGlwc2UgUHVibGljIExpY2Vuc2UgKyBQdWJsaWMgRG9tYWluIChPbmUgRmlsZSkKKworcHJvdG9idWYtamF2YSAoMy4yLjApCisKKyogTGljZW5zZTogTmV3IEJTRCBsaWNlbnNlCisKK3Jlc29sdmVyLmphciAoMS4yKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAKKworc2VyaWFsaXplci5qYXIgKDIuNy4xKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAKKworU0xGNEogQVBJIE1vZHVsZSAoc2xmNGotYXBpLTEuNy4xMC5qYXIpICgxLjcuMTApCisKKyogTGljZW5zZTogTUlUCisKK3hhbGFuIDIuNy4xIHRvcCBsZXZlbCBqYXIgKDIuNy4xKQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAKKworWGVyY2VzICgyLjkuMCkKKworKiBMaWNlbnNlOiBBcGFjaGUgTGljZW5zZSwgMi4wCisKK3htbC1hcGlzLmphciAoMS4zLjA0KQorCisqIExpY2Vuc2U6IEFwYWNoZSBMaWNlbnNlLCAyLjAsIFB1YmxpYyBEb21haW4sIFczQworCisjIyBDcnlwdG9ncmFwaHkKKworQ29udGVudCBtYXkgY29udGFpbiBlbmNyeXB0aW9uIHNvZnR3YXJlLiBUaGUgY291bnRyeSBpbiB3aGljaCB5b3UgYXJlIGN1cnJlbnRseQorbWF5IGhhdmUgcmVzdHJpY3Rpb25zIG9uIHRoZSBpbXBvcnQsIHBvc3Nlc3Npb24sIGFuZCB1c2UsIGFuZC9vciByZS1leHBvcnQgdG8KK2Fub3RoZXIgY291bnRyeSwgb2YgZW5jcnlwdGlvbiBzb2Z0d2FyZS4gQkVGT1JFIHVzaW5nIGFueSBlbmNyeXB0aW9uIHNvZnR3YXJlLAorcGxlYXNlIGNoZWNrIHRoZSBjb3VudHJ5J3MgbGF3cywgcmVndWxhdGlvbnMgYW5kIHBvbGljaWVzIGNvbmNlcm5pbmcgdGhlIGltcG9ydCwKK3Bvc3Nlc3Npb24sIG9yIHVzZSwgYW5kIHJlLWV4cG9ydCBvZiBlbmNyeXB0aW9uIHNvZnR3YXJlLCB0byBzZWUgaWYgdGhpcyBpcworcGVybWl0dGVkLgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi8uY2xhc3NwYXRoIGIvZWNsaXBzZS10b29scy9jZGdlbi8uY2xhc3NwYXRoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI4NzRlYTUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuLy5jbGFzc3BhdGgKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxjbGFzc3BhdGg+CisJPGNsYXNzcGF0aGVudHJ5IGV4cG9ydGVkPSJ0cnVlIiBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuOCI+CisJCTxhdHRyaWJ1dGVzPgorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cnVlIi8+CisJCTwvYXR0cmlidXRlcz4KKwk8L2NsYXNzcGF0aGVudHJ5PgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgorCTxjbGFzc3BhdGhlbnRyeSBleHBvcnRlZD0idHJ1ZSIga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KKzwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vLnByb2plY3QKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLy5wcm9qZWN0CnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2NkZ2VuLy5wcm9qZWN0CmluZGV4IDc2MTRiZDAuLmYxNDVlZGEKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC8ucHJvamVjdAorKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuLy5wcm9qZWN0CkBAIC0xLDI4ICsxLDI4IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5uZXQuc291cmNlZm9yZ2UucGxhbnR1bWw8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8cHJvamVjdERlc2NyaXB0aW9uPg0KKwk8bmFtZT5jZGdlbjwvbmFtZT4NCisJPGNvbW1lbnQ+PC9jb21tZW50Pg0KKwk8cHJvamVjdHM+DQorCTwvcHJvamVjdHM+DQorCTxidWlsZFNwZWM+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJCTxidWlsZENvbW1hbmQ+DQorCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4NCisJCQk8YXJndW1lbnRzPg0KKwkJCTwvYXJndW1lbnRzPg0KKwkJPC9idWlsZENvbW1hbmQ+DQorCQk8YnVpbGRDb21tYW5kPg0KKwkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPg0KKwkJCTxhcmd1bWVudHM+DQorCQkJPC9hcmd1bWVudHM+DQorCQk8L2J1aWxkQ29tbWFuZD4NCisJPC9idWlsZFNwZWM+DQorCTxuYXR1cmVzPg0KKwkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+DQorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCisJPC9uYXR1cmVzPg0KKzwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvZWNsaXBzZS10b29scy9jZGdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9jZGdlbi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKaW5kZXggYTY5OGU1OS4uNWNhYTUzOAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpAQCAtMSwxMiArMSwxMyBAQAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5tZXRob2RQYXJhbWV0ZXJzPWRvIG5vdCBnZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjgKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS44Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjgKK2VjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5tZXRob2RQYXJhbWV0ZXJzPWRvIG5vdCBnZW5lcmF0ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS44DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS44DQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQ0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yDQorb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcg0KK29yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnJlbGVhc2U9ZGlzYWJsZWQNCitvcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS44DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWUzYzZkNgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxMyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBhcHA0bWMuc25pcGxldHMNCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLU5hbWU6IEdTT0MyMDE5DQorQnVuZGxlLVN5bWJvbGljTmFtZTogY2RnZW4NCitCdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyDQorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi51dGlscywNCisgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuDQorUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbCwNCisgb3JnLmp1bml0LA0KKyBvcmcuZWNsaXBzZS5qZHQuYW5ub3RhdGlvbg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44DQorQnVuZGxlLVZlbmRvcjogUmFtIFByYXNhdGggR292aW5kYXJhamFuDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9SRUFETUUubWQgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTA2N2RiCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9SRUFETUUubWQKQEAgLTAsMCArMSwzMyBAQAorIyBDZEdlbgorPiBDZEdlbiBpcyBhIG1vZGVsIHRvIHRleHQgY29udmVydGVyIHRvb2wgd2hpY2ggaXMgdXNlZCBmb3IgcmVhbCB0aW1lIGFuYWx5c2lzIG9mIHRoZSBBbWFsdGhlYSBTeXN0ZW0gbW9kZWwgb24gdGhlIEFkYXB0ZXZhIFBhcmFsbGVsbGEgSGFyZHdhcmUuCisKK0ZvciBtb3JlIGRldGFpbHMgcGxlYXNlIHJlZmVyIHRvIFtkb2N1bWVudGF0aW9uXVtkb2N1bWVudGF0aW9uXS4KKworIyMgSW5zdGFsbGF0aW9uCisKKyogW0FQUDRNQyB2ZXJzaW9uIDAuOS41XVtBUFA0TUNdIAorKiBbSmF2YSBTRSAxMF1bSkFWQV0KKyogW1NvdXJjZSBjb2RlIGZvciB0aGUgc2NoZWR1bGVyXVtoZXJlXSAKKworIyMgVXNlciBHdWlkZQorCisqCUNvZGUgR2VuZXJhdGlvbgorMS4gRG93bmxvYWQgYW5kIFVuemlwIEFQUDRNQworMi4gSW5zdGFsbCBKYXZhIFNFIDEwIAorMy4gU3RhcnQgQVBQNE1DIGFuZCBjcmVhdGUgYSBuZXcgd29ya3NwYWNlCis0LiBJbXBvcnQgdGhlIHByb2plY3QgZnJvbSBnaXQgb3IgYW55IG9wdGlvbnMgYXZhaWxhYmxlLgorNS4gU2VsZWN0IGNoZWNrRmlsZUNyZWF0ZUdVSS5qYXZhIGZyb20gdGhlIGNoZWNrcyBkaXJlY3RvcnkgYW5kcmlnaHQgY2xpY2sgYW5kIHJ1biBhcyBKYXZhIGFwcGxpY2F0aW9uCis2LiBTZWxlY3QgdGhlIHNjaGVkdWxlciwgdGFzayBwcmVlbXB0aW9uLCBmaWxlIHNvdXJjZSBvZiBjb3JyZXNwb25kaW5nIHNjaGVkdWxlciBhbmQgTW9kZWwgb2YgY2hvaWNlLgorNy4gQ2xpY2sgc3RhcnQgZm9yIGNvZGUgZ2VuZXJhdGlvbi4KKzguIENvZGUgaXMgZ2VuZXJhdGVkIGluIHRoZSByb290IGxvY2F0aW9uIHdpdGggYSB0aW1lc3RhbXAuCisKKyoJQ29tcGlsYXRpb24gYW5kIEV4ZWN1dGlvbgorOS4gUmVwbGFjZSB0aGUgZ2VuZXJhdGVkIGNvZGUgaW4gcGxhY2Ugb2YgdGhlIHNyYyBkaXJlY3RvcnkgaW4gYmVsb3cgW3NldHVwXVtzZXR1cF0uIAorMTAuIEJ1aWxkLCBkZXBsb3kgYW5kIFJ1biB0aGUgY29kZSBvbiBQYXJhbGxlbGxhLgorCis8IS0tIE1hcmtkb3duIGxpbmsgJiBpbWcgZGZuJ3MgLS0+CitbZG9jdW1lbnRhdGlvbl06aHR0cHM6Ly9jZGdlbmRvYy5yZWFkdGhlZG9jcy5pby9lbi9sYXRlc3QvCitbc2V0dXBdOmh0dHBzOi8vZ2l0LmVjbGlwc2Uub3JnL2MvYXBwNG1jL29yZy5lY2xpcHNlLmFwcDRtYy5leGFtcGxlcy5naXQvY29tbWl0Lz9pZD02OWEwYTI0ZjEyMGJiMGQ3OWNiZDY4ODA4MWNhNjk3MzY4ZTI1MmY3CitbQVBQNE1DXTpodHRwczovL3d3dy5lY2xpcHNlLm9yZy9hcHA0bWMvZG93bmxvYWRzLworW0pBVkFdOmh0dHBzOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvamF2YS9qYXZhc2UvZG93bmxvYWRzL2phdmEtYXJjaGl2ZS1qYXZhc2UxMC00NDI1NDgyLmh0bWwKK1toZXJlXTpodHRwczovL2dpdC5lY2xpcHNlLm9yZy9jL2FwcDRtYy9vcmcuZWNsaXBzZS5hcHA0bWMuZXhhbXBsZXMuZ2l0L2NvbW1pdC8/aWQ9NjlhMGEyNGYxMjBiYjBkNzljYmQ2ODgwODFjYTY5NzM2OGUyNTJmNwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL2Jpbi8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9jZGdlbi9iaW4vLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL2Jpbi8uZ2l0aWdub3JlCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2NkZ2VuL2Jpbi8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2NkZ2VuL2J1aWxkLnByb3BlcnRpZXMgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL2J1aWxkLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwNzk3NwotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDMgQEAKK3NvdXJjZS4uID0gc3JjLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vY2RnZW4uZ3JhcGhpY3MvYnJvd3NlLnBuZyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vY2RnZW4uZ3JhcGhpY3MvYnJvd3NlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2Y3MmMxCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9jZGdlbi5ncmFwaGljcy9icm93c2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vY2RnZW4uZ3JhcGhpY3MvY2xvc2UucG5nIGIvZWNsaXBzZS10b29scy9jZGdlbi9jZGdlbi5ncmFwaGljcy9jbG9zZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhOTA0ZgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vY2RnZW4uZ3JhcGhpY3MvY2xvc2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vY2RnZW4uZ3JhcGhpY3MvaGVscC5wbmcgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL2NkZ2VuLmdyYXBoaWNzL2hlbHAucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjBiZDYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL2NkZ2VuLmdyYXBoaWNzL2hlbHAucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vY2RnZW4uZ3JhcGhpY3Mvc3RhcnQucG5nIGIvZWNsaXBzZS10b29scy9jZGdlbi9jZGdlbi5ncmFwaGljcy9zdGFydC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxYTM4ZgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vY2RnZW4uZ3JhcGhpY3Mvc3RhcnQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vbW9kZWxzL2RlbW9jYXJNdWx0aWNvcmUvQU1BTFRIRUFfRGVtb2Nhcl9NYXBwaW5nRXhhbXBsZS5hbXhtaSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vbW9kZWxzL2RlbW9jYXJNdWx0aWNvcmUvQU1BTFRIRUFfRGVtb2Nhcl9NYXBwaW5nRXhhbXBsZS5hbXhtaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjliOGUwCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9tb2RlbHMvZGVtb2Nhck11bHRpY29yZS9BTUFMVEhFQV9EZW1vY2FyX01hcHBpbmdFeGFtcGxlLmFteG1pCkBAIC0wLDAgKzEsMTExOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8YW06QW1hbHRoZWEgeG1sbnM6YW09Imh0dHA6Ly9hcHA0bWMuZWNsaXBzZS5vcmcvYW1hbHRoZWEvMC45LjUiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1pOnZlcnNpb249IjIuMCI+DQorICA8Y29tbW9uRWxlbWVudHM+DQorICAgIDx0YWdzIG5hbWU9IlN3Y0VuZ2luZUNvbnRyb2xsZXIiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djQWN0dWF0b3JzIiB0YWdUeXBlPSJTT0ZUV0FSRV9DT01QT05FTlQiIC8+DQorICAgIDx0YWdzIG5hbWU9IlN3Y0JyYWtlRm9yY2VBcmJpdGVyIiB0YWdUeXBlPSJTT0ZUV0FSRV9DT01QT05FTlQiIC8+DQorICAgIDx0YWdzIG5hbWU9IlN3Y0FCU0NhbGN1bGF0aW9uIiB0YWdUeXBlPSJTT0ZUV0FSRV9DT01QT05FTlQiIC8+DQorICAgIDx0YWdzIG5hbWU9IlN3Y1NlbnNvcnMiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djU2Vuc29yUG9zdHByb2Nlc3NpbmciIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djQ3lsTnVtT2JzZXJ2ZXIiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uIiB0YWdUeXBlPSJTT0ZUV0FSRV9DT01QT05FTlQiIC8+DQorICAgIDx0YWdzIG5hbWU9IlN3Y0VuZ2luZVNlbnNvcnMiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djSW5qSWduQWN0dWF0aW9uIiB0YWdUeXBlPSJTT0ZUV0FSRV9DT01QT05FTlQiIC8+DQorICAgIDxjb3JlQ2xhc3NpZmllcnMgbmFtZT0iRlBVIiAvPg0KKyAgPC9jb21tb25FbGVtZW50cz4NCisgIDxzd01vZGVsPg0KKyAgICA8dGFza3MgbmFtZT0iVGFza19FU1NQMCIgc3RpbXVsaT0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNTdGltdWx1cyIgbXVsdGlwbGVUYXNrQWN0aXZhdGlvbkxpbWl0PSIwIj4NCisgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9IltDb25zdHJhaW50RXhjbHVkZV0gRXhjbHVkZSBUYXJnZXRzIHdpdGggRlBVIj4NCisgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06UmVmZXJlbmNlT2JqZWN0IiB2YWx1ZT0iRlBVP3R5cGU9Q29yZUNsYXNzaWZpZXIiIC8+DQorICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkdyb3VwIiBuYW1lPSJDYWxsU2VxdWVuY2UiIG9yZGVyZWQ9InRydWUiPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdVZlaGljbGVTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlZlaGljbGVTcGVlZFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1AxIiBzdGltdWxpPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNTdGltdWx1cyIgbXVsdGlwbGVUYXNrQWN0aXZhdGlvbkxpbWl0PSIwIj4NCisgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9IltDb25zdHJhaW50RXhjbHVkZV0gRXhjbHVkZSBUYXJnZXRzIHdpdGggRlBVIj4NCisgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06UmVmZXJlbmNlT2JqZWN0IiB2YWx1ZT0iRlBVP3R5cGU9Q29yZUNsYXNzaWZpZXIiIC8+DQorICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkdyb3VwIiBuYW1lPSJDYWxsU2VxdWVuY2UiIG9yZGVyZWQ9InRydWUiPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkN5bE51bU9ic2VydmVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3Rhc2tzPg0KKyAgICA8dGFza3MgbmFtZT0iVGFza19FU1NQMiIgc3RpbXVsaT0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMCI+DQorICAgICAgPGN1c3RvbVByb3BlcnRpZXMga2V5PSJbQ29uc3RyYWludEV4Y2x1ZGVdIEV4Y2x1ZGUgVGFyZ2V0cyB3aXRoIEZQVSI+DQorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlJlZmVyZW5jZU9iamVjdCIgdmFsdWU9IkZQVT90eXBlPUNvcmVDbGFzc2lmaWVyIiAvPg0KKyAgICAgIDwvY3VzdG9tUHJvcGVydGllcz4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC90YXNrcz4NCisgICAgPHRhc2tzIG5hbWU9IlRhc2tfRVNTUDMiIHN0aW11bGk9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMCI+DQorICAgICAgPGN1c3RvbVByb3BlcnRpZXMga2V5PSJbQ29uc3RyYWludEV4Y2x1ZGVdIEV4Y2x1ZGUgVGFyZ2V0cyB3aXRoIEZQVSI+DQorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlJlZmVyZW5jZU9iamVjdCIgdmFsdWU9IkZQVT90eXBlPUNvcmVDbGFzc2lmaWVyIiAvPg0KKyAgICAgIDwvY3VzdG9tUHJvcGVydGllcz4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJNYXNzQWlyRmxvd1NlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJhc2VGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlRyYW5zaWVudEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVG90YWxGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkluamVjdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1A0IiBzdGltdWxpPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjAiPg0KKyAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0iW0NvbnN0cmFpbnRFeGNsdWRlXSBFeGNsdWRlIFRhcmdldHMgd2l0aCBGUFUiPg0KKyAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpSZWZlcmVuY2VPYmplY3QiIHZhbHVlPSJGUFU/dHlwZT1Db3JlQ2xhc3NpZmllciIgLz4NCisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQVBlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkFQZWRWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlRocm90dGxlQ29udHJvbGxlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlRocm90dGxlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1A1IiBzdGltdWxpPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjAiPg0KKyAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0iW0NvbnN0cmFpbnRJbmNsdWRlXSBSZXF1aXJlcyBUYXJnZXRzIHdpdGggRlBVIj4NCisgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06UmVmZXJlbmNlT2JqZWN0IiB2YWx1ZT0iRlBVP3R5cGU9Q29yZUNsYXNzaWZpZXIiIC8+DQorICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkdyb3VwIiBuYW1lPSJDYWxsU2VxdWVuY2UiIG9yZGVyZWQ9InRydWUiPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlRocm90dGxlU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1QnJha2VQZWRhbFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkNoZWNrUGxhdXNhYmlsaXR5P3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VTYWZldHlNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VGb3JjZUFyYml0ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJTdG9wTGlnaHRBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdVN0b3BMaWdodEFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3Rhc2tzPg0KKyAgICA8dGFza3MgbmFtZT0iVGFza19FU1NQNiIgc3RpbXVsaT0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMCI+DQorICAgICAgPGN1c3RvbVByb3BlcnRpZXMga2V5PSJbQ29uc3RyYWludEluY2x1ZGVdIFJlcXVpcmVzIFRhcmdldHMgd2l0aCBGUFUiPg0KKyAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpSZWZlcmVuY2VPYmplY3QiIHZhbHVlPSJGUFU/dHlwZT1Db3JlQ2xhc3NpZmllciIgLz4NCisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVN0YXRlTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdURlY2VsZXJhdGlvblNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkRlY2VsZXJhdGlvblNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJBQlNDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlRm9yY2VBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3Rhc2tzPg0KKyAgICA8dGFza3MgbmFtZT0iVGFza19FU1NQNyIgc3RpbXVsaT0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMCI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VBY3R1YXRvck1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1A4IiBzdGltdWxpPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNTdGltdWx1cyIgbXVsdGlwbGVUYXNrQWN0aXZhdGlvbkxpbWl0PSIwIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJEaWFnbm9zaXNBcmJpdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iSWduaXRpb25UaW1pbmc/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJJZ25pdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1A5IiBzdGltdWxpPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjAiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkdyb3VwIiBuYW1lPSJDYWxsU2VxdWVuY2UiIG9yZGVyZWQ9InRydWUiPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdVdoZWVsU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQUJTQ2FsY3VsYXRpb24iIHRhZ3M9IlN3Y0FCU0NhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkVmVoaWNsZVNwZWVkP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRXaGVlbFNwZWVkP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBQlNBY3RpdmF0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU01vZGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJBUGVkU2Vuc29yIiB0YWdzPSJTd2NFbmdpbmVTZW5zb3JzP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFNlbnNvcjFWb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFNlbnNvcjJWb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQVBlZFZvdGVyIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRQb3NpdGlvbjE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRBUGVkUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCYXNlRnVlbE1hc3MiIHRhZ3M9IlN3Y0VuZ2luZUNvbnRyb2xsZXI/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTWFzc0FpckZsb3c/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCYXNlRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTUFGUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlQWN0dWF0b3IiIHRhZ3M9IlN3Y0FCU0NhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGlwZXJQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VWb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VBY3R1YXRvck1vbml0b3IiIHRhZ3M9IlN3Y0JyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUZlZWRiYWNrP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZUZvcmNlQWN0dWF0aW9uIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBQlNBY3RpdmF0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQUJTTW9kZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUN1cnJlbnQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZUZvcmNlQXJiaXRlciIgdGFncz0iU3djQnJha2VGb3JjZUFyYml0ZXI/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8yME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsY3VsYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVNhZmV0eVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZUZvcmNlQ2FsY3VsYXRpb24iIHRhZ3M9IlN3Y0JyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlRmVlZGJhY2s/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBcmJpdHJhdGVkRGlhZ25vc2lzUmVxdWVzdD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1vbml0b3JlZFZlaGljbGVTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5TGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxjdWxhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZU1vbml0b3JMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlUGVkYWxTZW5zb3JEaWFnbm9zaXMiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbiIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbjE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlUGVkYWxTZW5zb3JWb3RlciIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbjI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZEJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlU2FmZXR5TW9uaXRvciIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VGZWVkYmFjaz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTW9uaXRvcmVkVmVoaWNsZVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VNb25pdG9yTGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVNhZmV0eUxldmVsP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5U3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbiIgdGFncz0iU3djQUJTQ2FsY3VsYXRpb24/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsaXBlclBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUN1cnJlbnQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxpcGVyUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJDaGVja1BsYXVzYWJpbGl0eSIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQ3lsTnVtT2JzZXJ2ZXIiIHRhZ3M9IlN3Y0N5bE51bU9ic2VydmVyP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVHJpZ2dlcmVkQ3lsaW5kZXJOdW1iZXI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJEZWNlbGVyYXRpb25TZW5zb3JEaWFnbm9zaXMiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkRlY2VsZXJhdGlvblNlbnNvclRyYW5zbGF0aW9uIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJEZWNlbGVyYXRpb25TZW5zb3JWb3RlciIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25SYXRlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkRpYWdub3Npc0FyYml0ZXIiIHRhZ3M9IlN3Y0JyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBcmJpdHJhdGVkRGlhZ25vc2lzUmVxdWVzdD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1QnJha2VBY3R1YXRvciIgdGFncz0iU3djQWN0dWF0b3JzP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkVjdUJyYWtlUGVkYWxTZW5zb3IiIHRhZ3M9IlN3Y1NlbnNvcnM/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iMTQ0MDAwIiB1cHBlckJvdW5kPSIxNzYwMDAiIGF2ZXJhZ2U9IjE2MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkVjdURlY2VsZXJhdGlvblNlbnNvciIgdGFncz0iU3djU2Vuc29ycz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSIxNDQwMDAiIHVwcGVyQm91bmQ9IjE3NjAwMCIgYXZlcmFnZT0iMTYwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1U3RvcExpZ2h0QWN0dWF0b3IiIHRhZ3M9IlN3Y0FjdHVhdG9ycz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlQXBwbGljYXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkVjdVZlaGljbGVTcGVlZFNlbnNvciIgdGFncz0iU3djU2Vuc29ycz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1V2hlZWxTcGVlZFNlbnNvciIgdGFncz0iU3djU2Vuc29ycz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJJZ25pdGlvblRpbWVBY3R1YXRpb24iIHRhZ3M9IlN3Y0luaklnbkFjdHVhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmlnZ2VyZWRDeWxpbmRlck51bWJlcj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWUyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lMz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU1P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lNj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTc/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lOD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9Iklnbml0aW9uVGltaW5nIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1BRlJhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJJbmplY3Rpb25UaW1lQWN0dWF0aW9uIiB0YWdzPSJTd2NJbmpJZ25BY3R1YXRpb24/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVHJpZ2dlcmVkQ3lsaW5kZXJOdW1iZXI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUb3RhbEZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWUzP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lNT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU2P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTc/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lOD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iTWFzc0FpckZsb3dTZW5zb3IiIHRhZ3M9IlN3Y0VuZ2luZVNlbnNvcnM/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNQUZTZW5zb3JWb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTWFzc0FpckZsb3c/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJTdG9wTGlnaHRBY3R1YXRvciIgdGFncz0iU3djQUJTQ2FsY3VsYXRpb24/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUFwcGxpY2F0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iVGhyb3R0bGVBY3R1YXRvciIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlc2lyZWRUaHJvdHRsZVBvc2l0aW9uVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IlRocm90dGxlQ29udHJvbGxlciIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZEFQZWRQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IlRocm90dGxlU2Vuc29yIiB0YWdzPSJTd2NFbmdpbmVTZW5zb3JzP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVTZW5zb3IxVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlU2Vuc29yMlZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUaHJvdHRsZVBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iVG90YWxGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmFuc2llbnRGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRvdGFsRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJUcmFuc2llbnRGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCYXNlRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmFuc2llbnRGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IlZlaGljbGVTcGVlZFNlbnNvckRpYWdub3NpcyIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24iIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWQxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJWZWhpY2xlU3BlZWRTZW5zb3JWb3RlciIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZFZlaGljbGVTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IlZlaGljbGVTdGF0ZU1vbml0b3IiIHRhZ3M9IlN3Y0JyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNb25pdG9yZWRWZWhpY2xlU3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IldoZWVsU3BlZWRTZW5zb3JUcmFuc2xhdGlvbiIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXIiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWQxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZFdoZWVsU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPGxhYmVscyBuYW1lPSJBQlNBY3RpdmF0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQUJTTW9kZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkFQZWRQb3NpdGlvbjEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJBUGVkUG9zaXRpb24yIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQVBlZFNlbnNvcjFWb2x0YWdlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkFQZWRTZW5zb3IyVm9sdGFnZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJBcmJpdHJhdGVkQnJha2VGb3JjZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQmFzZUZ1ZWxNYXNzUGVyU3Ryb2tlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlQXBwbGljYXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZUZvcmNlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VGb3JjZUN1cnJlbnQiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZUZvcmNlRmVlZGJhY2siIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZUZvcmNlVm9sdGFnZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZU1vbml0b3JMZXZlbCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlUGVkYWxQb3NpdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlUGVkYWxQb3NpdGlvbjEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZVBlZGFsUG9zaXRpb24yIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VTYWZldHlMZXZlbCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlU2FmZXR5U3RhdGUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJDYWxjdWxhdGVkQnJha2VGb3JjZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkNhbGlwZXJQb3NpdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkN5bGluZGVyTnVtYmVyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iRGVjZWxlcmF0aW9uUmF0ZTEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJEZWNlbGVyYXRpb25SYXRlMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkRlY2VsZXJhdGlvblZvbHRhZ2UxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkRlY2VsZXJhdGlvblZvbHRhZ2UyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkRlc2lyZWRUaHJvdHRsZVBvc2l0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkRlc2lyZWRUaHJvdHRsZVBvc2l0aW9uVm9sdGFnZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWUzIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTQiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lNSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWU2IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTciIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lOCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lMyIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lNCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lNSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lNiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lNyIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJbmplY3Rpb25UaW1lOCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJNQUZSYXRlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Ik1BRlNlbnNvclZvbHRhZ2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iTWFzc0FpckZsb3ciIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJNb25pdG9yZWRWZWhpY2xlU3RhdGUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJUaHJvdHRsZVBvc2l0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlRocm90dGxlU2Vuc29yMVZvbHRhZ2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJUaHJvdHRsZVNlbnNvcjJWb2x0YWdlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVG90YWxGdWVsTWFzc1BlclN0cm9rZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlRyYW5zaWVudEZ1ZWxNYXNzUGVyU3Ryb2tlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVHJpZ2dlcmVkQ3lsaW5kZXJOdW1iZXIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJWZWhpY2xlU3BlZWQxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVmVoaWNsZVNwZWVkMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlZlaGljbGVTcGVlZFZvbHRhZ2UxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlZlaGljbGVTcGVlZFZvbHRhZ2UyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlZvdGVkQVBlZFBvc2l0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVm90ZWRCcmFrZVBlZGFsUG9zaXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJWb3RlZERlY2VsZXJhdGlvblJhdGUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJWb3RlZFZlaGljbGVTcGVlZCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlZvdGVkV2hlZWxTcGVlZCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IldoZWVsU3BlZWQxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iV2hlZWxTcGVlZDIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJXaGVlbFNwZWVkVm9sdGFnZTEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iV2hlZWxTcGVlZFZvbHRhZ2UyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDAiIGZpcnN0UnVubmFibGU9IkVjdVZlaGljbGVTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiBsYXN0UnVubmFibGU9IlZlaGljbGVTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiI+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkVjdVZlaGljbGVTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDEiIGZpcnN0UnVubmFibGU9IkN5bE51bU9ic2VydmVyP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJDeWxOdW1PYnNlcnZlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9wcm9jZXNzUHJvdG90eXBlcz4NCisgICAgPHByb2Nlc3NQcm90b3R5cGVzIG5hbWU9IkVTU1AyIiBmaXJzdFJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiBhY3RpdmF0aW9uPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iV2hlZWxTcGVlZFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJCcmFrZVBlZGFsU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcHJvY2Vzc1Byb3RvdHlwZXM+DQorICAgIDxwcm9jZXNzUHJvdG90eXBlcyBuYW1lPSJFU1NQMyIgZmlyc3RSdW5uYWJsZT0iTWFzc0FpckZsb3dTZW5zb3I/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJJbmplY3Rpb25UaW1lQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiI+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9Ik1hc3NBaXJGbG93U2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkJhc2VGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJUcmFuc2llbnRGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJUb3RhbEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkluamVjdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9wcm9jZXNzUHJvdG90eXBlcz4NCisgICAgPHByb2Nlc3NQcm90b3R5cGVzIG5hbWU9IkVTU1A0IiBmaXJzdFJ1bm5hYmxlPSJBUGVkU2Vuc29yP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iVGhyb3R0bGVBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiBhY3RpdmF0aW9uPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJBUGVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkFQZWRWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJUaHJvdHRsZUNvbnRyb2xsZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iVGhyb3R0bGVBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDUiIGZpcnN0UnVubmFibGU9IlRocm90dGxlU2Vuc29yP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iRWN1U3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgYWN0aXZhdGlvbj0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iVGhyb3R0bGVTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRWN1QnJha2VQZWRhbFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJCcmFrZVBlZGFsU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkNoZWNrUGxhdXNhYmlsaXR5P3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkJyYWtlU2FmZXR5TW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQnJha2VGb3JjZUFyYml0ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iU3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRWN1U3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9wcm9jZXNzUHJvdG90eXBlcz4NCisgICAgPHByb2Nlc3NQcm90b3R5cGVzIG5hbWU9IkVTU1A2IiBmaXJzdFJ1bm5hYmxlPSJWZWhpY2xlU3RhdGVNb25pdG9yP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iRWN1QnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiBhY3RpdmF0aW9uPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iVmVoaWNsZVN0YXRlTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJFY3VEZWNlbGVyYXRpb25TZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQUJTQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQnJha2VGb3JjZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkVjdUJyYWtlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9wcm9jZXNzUHJvdG90eXBlcz4NCisgICAgPHByb2Nlc3NQcm90b3R5cGVzIG5hbWU9IkVTU1A3IiBmaXJzdFJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJCcmFrZUFjdHVhdG9yTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiBhY3RpdmF0aW9uPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkJyYWtlQWN0dWF0b3JNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcHJvY2Vzc1Byb3RvdHlwZXM+DQorICAgIDxwcm9jZXNzUHJvdG90eXBlcyBuYW1lPSJFU1NQOCIgZmlyc3RSdW5uYWJsZT0iRGlhZ25vc2lzQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiBsYXN0UnVubmFibGU9Iklnbml0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiBhY3RpdmF0aW9uPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRGlhZ25vc2lzQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJJZ25pdGlvblRpbWluZz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJJZ25pdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9wcm9jZXNzUHJvdG90eXBlcz4NCisgICAgPHByb2Nlc3NQcm90b3R5cGVzIG5hbWU9IkVTU1A5IiBmaXJzdFJ1bm5hYmxlPSJFY3VXaGVlbFNwZWVkU2Vuc29yP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iV2hlZWxTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiI+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkVjdVdoZWVsU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iV2hlZWxTcGVlZFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8YWN0aXZhdGlvbnMgeHNpOnR5cGU9ImFtOlBlcmlvZGljQWN0aXZhdGlvbiIgbmFtZT0iVGltZXJfMTBNUyI+DQorICAgICAgPG1pbiB2YWx1ZT0iMTAiIHVuaXQ9Im1zIiAvPg0KKyAgICAgIDxtYXggdmFsdWU9IjEwIiB1bml0PSJtcyIgLz4NCisgICAgICA8b2Zmc2V0IHZhbHVlPSIwIiB1bml0PSJtcyIgLz4NCisgICAgPC9hY3RpdmF0aW9ucz4NCisgICAgPGFjdGl2YXRpb25zIHhzaTp0eXBlPSJhbTpQZXJpb2RpY0FjdGl2YXRpb24iIG5hbWU9IlRpbWVyXzIwTVMiPg0KKyAgICAgIDxtaW4gdmFsdWU9IjIwIiB1bml0PSJtcyIgLz4NCisgICAgICA8bWF4IHZhbHVlPSIyMCIgdW5pdD0ibXMiIC8+DQorICAgICAgPG9mZnNldCB2YWx1ZT0iMCIgdW5pdD0ibXMiIC8+DQorICAgIDwvYWN0aXZhdGlvbnM+DQorICAgIDxhY3RpdmF0aW9ucyB4c2k6dHlwZT0iYW06UGVyaW9kaWNBY3RpdmF0aW9uIiBuYW1lPSJUaW1lcl81TVMiPg0KKyAgICAgIDxtaW4gdmFsdWU9IjUiIHVuaXQ9Im1zIiAvPg0KKyAgICAgIDxtYXggdmFsdWU9IjUiIHVuaXQ9Im1zIiAvPg0KKyAgICAgIDxvZmZzZXQgdmFsdWU9IjAiIHVuaXQ9Im1zIiAvPg0KKyAgICA8L2FjdGl2YXRpb25zPg0KKyAgPC9zd01vZGVsPg0KKyAgPGh3TW9kZWw+DQorICAgIDxkZWZpbml0aW9ucyB4c2k6dHlwZT0iYW06UHJvY2Vzc2luZ1VuaXREZWZpbml0aW9uIiBuYW1lPSJDb3J0ZXgtQTkiIHB1VHlwZT0iQ1BVIiBmZWF0dXJlcz0iSW5zdHJ1Y3Rpb25zL0lQQ18xLjA/dHlwZT1Id0ZlYXR1cmUiPg0KKyAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0iRW5FZi1Wb2x0X0hpZ2giPg0KKyAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpEb3VibGVPYmplY3QiIHZhbHVlPSIxLjE1IiAvPg0KKyAgICAgIDwvY3VzdG9tUHJvcGVydGllcz4NCisgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9IkVuRWYtVm9sdF9Mb3ciPg0KKyAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpEb3VibGVPYmplY3QiIHZhbHVlPSIxLjA1IiAvPg0KKyAgICAgIDwvY3VzdG9tUHJvcGVydGllcz4NCisgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9IkVuRWYtU2NhbGVfSGlnaCI+DQorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOkRvdWJsZU9iamVjdCIgdmFsdWU9IjEuMCIgLz4NCisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+DQorICAgICAgPGN1c3RvbVByb3BlcnRpZXMga2V5PSJFbkVmLVNjYWxlX0xvdyI+DQorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOkRvdWJsZU9iamVjdCIgdmFsdWU9IjAuNSIgLz4NCisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+DQorICAgIDwvZGVmaW5pdGlvbnM+DQorICAgIDxmZWF0dXJlQ2F0ZWdvcmllcyBuYW1lPSJJbnN0cnVjdGlvbnMiIGZlYXR1cmVUeXBlPSJwZXJmb3JtYW5jZSI+DQorICAgICAgPGZlYXR1cmVzIG5hbWU9IklQQ18xLjAiIHZhbHVlPSIxLjAiIC8+DQorICAgIDwvZmVhdHVyZUNhdGVnb3JpZXM+DQorICAgIDxzdHJ1Y3R1cmVzIG5hbWU9IkhvbW9nZW5lb3VzIEV4YW1wbGUgU3lzdGVtIiBzdHJ1Y3R1cmVUeXBlPSJTeXN0ZW0iPg0KKyAgICAgIDxzdHJ1Y3R1cmVzIG5hbWU9IkZyZWVzY2FsZSBpLk1YNiBCb2FyZCIgc3RydWN0dXJlVHlwZT0iRUNVIj4NCisgICAgICAgIDxzdHJ1Y3R1cmVzIG5hbWU9ImkuTVggNiBTZXJpZXMgUHJvY2Vzc29yIiBzdHJ1Y3R1cmVUeXBlPSJNaWNyb2NvbnRyb2xsZXIiPg0KKyAgICAgICAgICA8bW9kdWxlcyB4c2k6dHlwZT0iYW06UHJvY2Vzc2luZ1VuaXQiIG5hbWU9IkNvcnRleC1BOSAjMSIgZnJlcXVlbmN5RG9tYWluPSI3OTJNSFolMkJRdWFydHpfXzEwMC4wP3R5cGU9RnJlcXVlbmN5RG9tYWluIiBkZWZpbml0aW9uPSJDb3J0ZXgtQTk/dHlwZT1Qcm9jZXNzaW5nVW5pdERlZmluaXRpb24iIC8+DQorICAgICAgICAgIDxtb2R1bGVzIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdCIgbmFtZT0iQ29ydGV4LUE5ICMyIiBmcmVxdWVuY3lEb21haW49Ijc5Mk1IWiUyQlF1YXJ0el9fMTAwLjA/dHlwZT1GcmVxdWVuY3lEb21haW4iIGRlZmluaXRpb249IkNvcnRleC1BOT90eXBlPVByb2Nlc3NpbmdVbml0RGVmaW5pdGlvbiIgLz4NCisgICAgICAgICAgPG1vZHVsZXMgeHNpOnR5cGU9ImFtOlByb2Nlc3NpbmdVbml0IiBuYW1lPSJDb3J0ZXgtQTkgIzMiIGZyZXF1ZW5jeURvbWFpbj0iNzkyTUhaJTJCUXVhcnR6X18xMDAuMD90eXBlPUZyZXF1ZW5jeURvbWFpbiIgZGVmaW5pdGlvbj0iQ29ydGV4LUE5P3R5cGU9UHJvY2Vzc2luZ1VuaXREZWZpbml0aW9uIiAvPg0KKyAgICAgICAgICA8bW9kdWxlcyB4c2k6dHlwZT0iYW06UHJvY2Vzc2luZ1VuaXQiIG5hbWU9IkNvcnRleC1BOSAjNCIgZnJlcXVlbmN5RG9tYWluPSI3OTJNSFolMkJRdWFydHpfXzEwMC4wP3R5cGU9RnJlcXVlbmN5RG9tYWluIiBkZWZpbml0aW9uPSJDb3J0ZXgtQTk/dHlwZT1Qcm9jZXNzaW5nVW5pdERlZmluaXRpb24iIC8+DQorICAgICAgICAgIDxtb2R1bGVzIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdCIgbmFtZT0iQ29ydGV4LUE5ICM1IiBmcmVxdWVuY3lEb21haW49Ijc5Mk1IWiUyQlF1YXJ0el9fMTAwLjA/dHlwZT1GcmVxdWVuY3lEb21haW4iIGRlZmluaXRpb249IkNvcnRleC1BOT90eXBlPVByb2Nlc3NpbmdVbml0RGVmaW5pdGlvbiIgLz4NCisgICAgICAgIDwvc3RydWN0dXJlcz4NCisgICAgICA8L3N0cnVjdHVyZXM+DQorICAgIDwvc3RydWN0dXJlcz4NCisgICAgPGRvbWFpbnMgeHNpOnR5cGU9ImFtOkZyZXF1ZW5jeURvbWFpbiIgbmFtZT0iNzkyTUhaIFF1YXJ0eiIgY2xvY2tHYXRpbmc9ImZhbHNlIj4NCisgICAgICA8ZGVmYXVsdFZhbHVlIHZhbHVlPSI3OTIuMCIgdW5pdD0iTUh6IiAvPg0KKyAgICA8L2RvbWFpbnM+DQorICAgIDxkb21haW5zIHhzaTp0eXBlPSJhbTpGcmVxdWVuY3lEb21haW4iIG5hbWU9Ijc5Mk1IWitRdWFydHpfXzEwMC4wIiBjbG9ja0dhdGluZz0iZmFsc2UiPg0KKyAgICAgIDxkZWZhdWx0VmFsdWUgdmFsdWU9Ijc5Mi4wIiB1bml0PSJNSHoiIC8+DQorICAgIDwvZG9tYWlucz4NCisgIDwvaHdNb2RlbD4NCisgIDxvc01vZGVsPg0KKyAgICA8b3BlcmF0aW5nU3lzdGVtcyBuYW1lPSJPUyI+DQorICAgICAgPHRhc2tTY2hlZHVsZXJzIG5hbWU9IlNDSEVEX0NvcnRleC1BOSAjMSIgLz4NCisgICAgICA8dGFza1NjaGVkdWxlcnMgbmFtZT0iU0NIRURfQ29ydGV4LUE5ICMyIiAvPg0KKyAgICAgIDx0YXNrU2NoZWR1bGVycyBuYW1lPSJTQ0hFRF9Db3J0ZXgtQTkgIzMiIC8+DQorICAgICAgPHRhc2tTY2hlZHVsZXJzIG5hbWU9IlNDSEVEX0NvcnRleC1BOSAjNCIgLz4NCisgICAgICA8dGFza1NjaGVkdWxlcnMgbmFtZT0iU0NIRURfQ29ydGV4LUE5ICM1IiAvPg0KKyAgICA8L29wZXJhdGluZ1N5c3RlbXM+DQorICA8L29zTW9kZWw+DQorICA8c3RpbXVsaU1vZGVsPg0KKyAgICA8c3RpbXVsaSB4c2k6dHlwZT0iYW06UGVyaW9kaWNTdGltdWx1cyIgbmFtZT0iVGltZXJfMTBNUyI+DQorICAgICAgPG9mZnNldCB2YWx1ZT0iMCIgdW5pdD0ibXMiIC8+DQorICAgICAgPHJlY3VycmVuY2UgdmFsdWU9IjEwIiB1bml0PSJtcyIgLz4NCisgICAgPC9zdGltdWxpPg0KKyAgICA8c3RpbXVsaSB4c2k6dHlwZT0iYW06UGVyaW9kaWNTdGltdWx1cyIgbmFtZT0iVGltZXJfMjBNUyI+DQorICAgICAgPG9mZnNldCB2YWx1ZT0iMCIgdW5pdD0ibXMiIC8+DQorICAgICAgPHJlY3VycmVuY2UgdmFsdWU9IjIwIiB1bml0PSJtcyIgLz4NCisgICAgPC9zdGltdWxpPg0KKyAgICA8c3RpbXVsaSB4c2k6dHlwZT0iYW06UGVyaW9kaWNTdGltdWx1cyIgbmFtZT0iVGltZXJfNU1TIj4NCisgICAgICA8b2Zmc2V0IHZhbHVlPSIwIiB1bml0PSJtcyIgLz4NCisgICAgICA8cmVjdXJyZW5jZSB2YWx1ZT0iNSIgdW5pdD0ibXMiIC8+DQorICAgIDwvc3RpbXVsaT4NCisgIDwvc3RpbXVsaU1vZGVsPg0KKyAgPGNvbnN0cmFpbnRzTW9kZWw+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJBQlNDYWxjdWxhdGlvbi0tJmd0O0JyYWtlRm9yY2VBY3R1YXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQUJTQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCcmFrZUZvcmNlQXJiaXRlci0tJmd0O0FCU0NhbGN1bGF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNj90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VBcmJpdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQUJTQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkRlY2VsZXJhdGlvblNlbnNvclZvdGVyLS0mZ3Q7QUJTQ2FsY3VsYXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRGVjZWxlcmF0aW9uU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJBQlNDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iVmVoaWNsZVNwZWVkU2Vuc29yVm90ZXItLSZndDtBQlNDYWxjdWxhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJWZWhpY2xlU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkFCU0NhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXItLSZndDtBQlNDYWxjdWxhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDk/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJBQlNDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQVBlZFNlbnNvci0tJmd0O0FQZWRWb3RlciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDQ/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJBUGVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQVBlZFZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJBUGVkVm90ZXItLSZndDtUaHJvdHRsZUNvbnRyb2xsZXIiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A0P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQVBlZFZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVGhyb3R0bGVDb250cm9sbGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCYXNlRnVlbE1hc3MtLSZndDtJZ25pdGlvblRpbWluZyIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDg/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCYXNlRnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJJZ25pdGlvblRpbWluZz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iTWFzc0FpckZsb3dTZW5zb3ItLSZndDtCYXNlRnVlbE1hc3MiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1AzP3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iTWFzc0FpckZsb3dTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCYXNlRnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkJhc2VGdWVsTWFzcy0tJmd0O1RyYW5zaWVudEZ1ZWxNYXNzIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQMz90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJhc2VGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRyYW5zaWVudEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbi0tJmd0O0JyYWtlQWN0dWF0b3IiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQ2FsaXBlclBvc2l0aW9uQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCcmFrZUFjdHVhdG9yLS0mZ3Q7RWN1QnJha2VBY3R1YXRvciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRWN1QnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQnJha2VGb3JjZUFjdHVhdGlvbi0tJmd0O0JyYWtlQWN0dWF0b3JNb25pdG9yIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNz90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUFjdHVhdG9yTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQnJha2VGb3JjZUFjdHVhdGlvbi0tJmd0O0NhbGlwZXJQb3NpdGlvbkNhbGN1bGF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNj90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQnJha2VGb3JjZUNhbGN1bGF0aW9uLS0mZ3Q7QnJha2VGb3JjZUFyYml0ZXIiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A1P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VGb3JjZUFyYml0ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkJyYWtlU2FmZXR5TW9uaXRvci0tJmd0O0JyYWtlRm9yY2VBcmJpdGVyIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlU2FmZXR5TW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VBcmJpdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCcmFrZUZvcmNlQXJiaXRlci0tJmd0O1N0b3BMaWdodEFjdHVhdG9yIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VBcmJpdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iU3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkJyYWtlU2FmZXR5TW9uaXRvci0tJmd0O0JyYWtlRm9yY2VDYWxjdWxhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZVNhZmV0eU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkNoZWNrUGxhdXNhYmlsaXR5LS0mZ3Q7QnJha2VGb3JjZUNhbGN1bGF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkNoZWNrUGxhdXNhYmlsaXR5P3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJWZWhpY2xlU3RhdGVNb25pdG9yLS0mZ3Q7QnJha2VGb3JjZUNhbGN1bGF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNj90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlZlaGljbGVTdGF0ZU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkVjdUJyYWtlUGVkYWxTZW5zb3ItLSZndDtCcmFrZVBlZGFsU2Vuc29yRGlhZ25vc2lzIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdUJyYWtlUGVkYWxTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZVBlZGFsU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCcmFrZVBlZGFsU2Vuc29yVHJhbnNsYXRpb24tLSZndDtCcmFrZVBlZGFsU2Vuc29yVm90ZXIiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A1P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VQZWRhbFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VQZWRhbFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJFY3VCcmFrZVBlZGFsU2Vuc29yLS0mZ3Q7QnJha2VQZWRhbFNlbnNvclRyYW5zbGF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdUJyYWtlUGVkYWxTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZVBlZGFsU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkJyYWtlUGVkYWxTZW5zb3JWb3Rlci0tJmd0O0NoZWNrUGxhdXNhYmlsaXR5IiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlUGVkYWxTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkNoZWNrUGxhdXNhYmlsaXR5P3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJDaGVja1BsYXVzYWJpbGl0eS0tJmd0O0JyYWtlU2FmZXR5TW9uaXRvciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJDaGVja1BsYXVzYWJpbGl0eT90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlU2FmZXR5TW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iVmVoaWNsZVN0YXRlTW9uaXRvci0tJmd0O0JyYWtlU2FmZXR5TW9uaXRvciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJWZWhpY2xlU3RhdGVNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VTYWZldHlNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJDeWxOdW1PYnNlcnZlci0tJmd0O0lnbml0aW9uVGltZUFjdHVhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDg/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJDeWxOdW1PYnNlcnZlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9Iklnbml0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQ3lsTnVtT2JzZXJ2ZXItLSZndDtJbmplY3Rpb25UaW1lQWN0dWF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQMz90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkN5bE51bU9ic2VydmVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iSW5qZWN0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yLS0mZ3Q7RGVjZWxlcmF0aW9uU2Vuc29yRGlhZ25vc2lzIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNj90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdURlY2VsZXJhdGlvblNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkRlY2VsZXJhdGlvblNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24tLSZndDtEZWNlbGVyYXRpb25TZW5zb3JWb3RlciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJEZWNlbGVyYXRpb25TZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkRlY2VsZXJhdGlvblNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJFY3VEZWNlbGVyYXRpb25TZW5zb3ItLSZndDtEZWNlbGVyYXRpb25TZW5zb3JUcmFuc2xhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJFY3VEZWNlbGVyYXRpb25TZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJEZWNlbGVyYXRpb25TZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iU3RvcExpZ2h0QWN0dWF0b3ItLSZndDtFY3VTdG9wTGlnaHRBY3R1YXRvciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJTdG9wTGlnaHRBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdVN0b3BMaWdodEFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJFY3VWZWhpY2xlU3BlZWRTZW5zb3ItLSZndDtWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXMiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A3P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVmVoaWNsZVNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJFY3VWZWhpY2xlU3BlZWRTZW5zb3ItLSZndDtWZWhpY2xlU3BlZWRTZW5zb3JUcmFuc2xhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDA/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJFY3VWZWhpY2xlU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJWZWhpY2xlU3BlZWRTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iRWN1V2hlZWxTcGVlZFNlbnNvci0tJmd0O1doZWVsU3BlZWRTZW5zb3JEaWFnbm9zaXMiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A5P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRWN1V2hlZWxTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IldoZWVsU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkVjdVdoZWVsU3BlZWRTZW5zb3ItLSZndDtXaGVlbFNwZWVkU2Vuc29yVHJhbnNsYXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A5P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRWN1V2hlZWxTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IldoZWVsU3BlZWRTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iSWduaXRpb25UaW1pbmctLSZndDtJZ25pdGlvblRpbWVBY3R1YXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A4P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iSWduaXRpb25UaW1pbmc/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJJZ25pdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IlRvdGFsRnVlbE1hc3MtLSZndDtJbmplY3Rpb25UaW1lQWN0dWF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQMz90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRvdGFsRnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJJbmplY3Rpb25UaW1lQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJUaHJvdHRsZUNvbnRyb2xsZXItLSZndDtUaHJvdHRsZUFjdHVhdG9yIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQND90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRocm90dGxlQ29udHJvbGxlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRocm90dGxlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IlRocm90dGxlU2Vuc29yLS0mZ3Q7VGhyb3R0bGVDb250cm9sbGVyIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRocm90dGxlU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVGhyb3R0bGVDb250cm9sbGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJUcmFuc2llbnRGdWVsTWFzcy0tJmd0O1RvdGFsRnVlbE1hc3MiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1AzP3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVHJhbnNpZW50RnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJUb3RhbEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJWZWhpY2xlU3BlZWRTZW5zb3JUcmFuc2xhdGlvbi0tJmd0O1ZlaGljbGVTcGVlZFNlbnNvclZvdGVyIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQMD90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlZlaGljbGVTcGVlZFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVmVoaWNsZVNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IldoZWVsU3BlZWRTZW5zb3JUcmFuc2xhdGlvbi0tJmd0O1doZWVsU3BlZWRTZW5zb3JWb3RlciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDk/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJXaGVlbFNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgIDwvY29uc3RyYWludHNNb2RlbD4NCisgIDxtYXBwaW5nTW9kZWw+DQorICAgIDxzY2hlZHVsZXJBbGxvY2F0aW9uIHNjaGVkdWxlcj0iU0NIRURfQ29ydGV4LUE5KyUyMzE/dHlwZT1UYXNrU2NoZWR1bGVyIiByZXNwb25zaWJpbGl0eT0iQ29ydGV4LUE5KyUyMzE/dHlwZT1Qcm9jZXNzaW5nVW5pdCIgLz4NCisgICAgPHNjaGVkdWxlckFsbG9jYXRpb24gc2NoZWR1bGVyPSJTQ0hFRF9Db3J0ZXgtQTkrJTIzMj90eXBlPVRhc2tTY2hlZHVsZXIiIHJlc3BvbnNpYmlsaXR5PSJDb3J0ZXgtQTkrJTIzMj90eXBlPVByb2Nlc3NpbmdVbml0IiAvPg0KKyAgICA8c2NoZWR1bGVyQWxsb2NhdGlvbiBzY2hlZHVsZXI9IlNDSEVEX0NvcnRleC1BOSslMjMzP3R5cGU9VGFza1NjaGVkdWxlciIgcmVzcG9uc2liaWxpdHk9IkNvcnRleC1BOSslMjMzP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDxzY2hlZHVsZXJBbGxvY2F0aW9uIHNjaGVkdWxlcj0iU0NIRURfQ29ydGV4LUE5KyUyMzQ/dHlwZT1UYXNrU2NoZWR1bGVyIiByZXNwb25zaWJpbGl0eT0iQ29ydGV4LUE5KyUyMzQ/dHlwZT1Qcm9jZXNzaW5nVW5pdCIgLz4NCisgICAgPHNjaGVkdWxlckFsbG9jYXRpb24gc2NoZWR1bGVyPSJTQ0hFRF9Db3J0ZXgtQTkrJTIzNT90eXBlPVRhc2tTY2hlZHVsZXIiIHJlc3BvbnNpYmlsaXR5PSJDb3J0ZXgtQTkrJTIzNT90eXBlPVByb2Nlc3NpbmdVbml0IiAvPg0KKyAgICA8dGFza0FsbG9jYXRpb24gdGFzaz0iVGFza19FU1NQMD90eXBlPVRhc2siIHNjaGVkdWxlcj0iU0NIRURfQ29ydGV4LUE5KyUyMzE/dHlwZT1UYXNrU2NoZWR1bGVyIiBhZmZpbml0eT0iQ29ydGV4LUE5KyUyMzE/dHlwZT1Qcm9jZXNzaW5nVW5pdCIgLz4NCisgICAgPHRhc2tBbGxvY2F0aW9uIHRhc2s9IlRhc2tfRVNTUDE/dHlwZT1UYXNrIiBzY2hlZHVsZXI9IlNDSEVEX0NvcnRleC1BOSslMjMxP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IkNvcnRleC1BOSslMjMxP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1AyP3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9Db3J0ZXgtQTkrJTIzMj90eXBlPVRhc2tTY2hlZHVsZXIiIGFmZmluaXR5PSJDb3J0ZXgtQTkrJTIzMj90eXBlPVByb2Nlc3NpbmdVbml0IiAvPg0KKyAgICA8dGFza0FsbG9jYXRpb24gdGFzaz0iVGFza19FU1NQMz90eXBlPVRhc2siIHNjaGVkdWxlcj0iU0NIRURfQ29ydGV4LUE5KyUyMzI/dHlwZT1UYXNrU2NoZWR1bGVyIiBhZmZpbml0eT0iQ29ydGV4LUE5KyUyMzI/dHlwZT1Qcm9jZXNzaW5nVW5pdCIgLz4NCisgICAgPHRhc2tBbGxvY2F0aW9uIHRhc2s9IlRhc2tfRVNTUDQ/dHlwZT1UYXNrIiBzY2hlZHVsZXI9IlNDSEVEX0NvcnRleC1BOSslMjMzP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IkNvcnRleC1BOSslMjMzP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A1P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9Db3J0ZXgtQTkrJTIzND90eXBlPVRhc2tTY2hlZHVsZXIiIGFmZmluaXR5PSJDb3J0ZXgtQTkrJTIzND90eXBlPVByb2Nlc3NpbmdVbml0IiAvPg0KKyAgICA8dGFza0FsbG9jYXRpb24gdGFzaz0iVGFza19FU1NQNj90eXBlPVRhc2siIHNjaGVkdWxlcj0iU0NIRURfQ29ydGV4LUE5KyUyMzM/dHlwZT1UYXNrU2NoZWR1bGVyIiBhZmZpbml0eT0iQ29ydGV4LUE5KyUyMzM/dHlwZT1Qcm9jZXNzaW5nVW5pdCIgLz4NCisgICAgPHRhc2tBbGxvY2F0aW9uIHRhc2s9IlRhc2tfRVNTUDc/dHlwZT1UYXNrIiBzY2hlZHVsZXI9IlNDSEVEX0NvcnRleC1BOSslMjM0P3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IkNvcnRleC1BOSslMjM0P3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A4P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9Db3J0ZXgtQTkrJTIzNT90eXBlPVRhc2tTY2hlZHVsZXIiIGFmZmluaXR5PSJDb3J0ZXgtQTkrJTIzNT90eXBlPVByb2Nlc3NpbmdVbml0IiAvPg0KKyAgICA8dGFza0FsbG9jYXRpb24gdGFzaz0iVGFza19FU1NQOT90eXBlPVRhc2siIHNjaGVkdWxlcj0iU0NIRURfQ29ydGV4LUE5KyUyMzU/dHlwZT1UYXNrU2NoZWR1bGVyIiBhZmZpbml0eT0iQ29ydGV4LUE5KyUyMzU/dHlwZT1Qcm9jZXNzaW5nVW5pdCIgLz4NCisgIDwvbWFwcGluZ01vZGVsPg0KKzwvYW06QW1hbHRoZWE+DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9tb2RlbHMvZGVtb2Nhck11bHRpY29yZVJhc3BiZXJyeVBpL0FNQUxUSEVBX0RlbW9jYXJfTXVsdGlfUkFTUEJFUlJZUEkuYW14bWkgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL21vZGVscy9kZW1vY2FyTXVsdGljb3JlUmFzcGJlcnJ5UGkvQU1BTFRIRUFfRGVtb2Nhcl9NdWx0aV9SQVNQQkVSUllQSS5hbXhtaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDFkMTZlCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9tb2RlbHMvZGVtb2Nhck11bHRpY29yZVJhc3BiZXJyeVBpL0FNQUxUSEVBX0RlbW9jYXJfTXVsdGlfUkFTUEJFUlJZUEkuYW14bWkKQEAgLTAsMCArMSwxMTA2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxhbTpBbWFsdGhlYSB4bWxuczphbT0iaHR0cDovL2FwcDRtYy5lY2xpcHNlLm9yZy9hbWFsdGhlYS8wLjkuNSIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWk6dmVyc2lvbj0iMi4wIj4NCisgIDxjb21tb25FbGVtZW50cz4NCisgICAgPHRhZ3MgbmFtZT0iU3djRW5naW5lQ29udHJvbGxlciIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPg0KKyAgICA8dGFncyBuYW1lPSJTd2NBY3R1YXRvcnMiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djQnJha2VGb3JjZUFyYml0ZXIiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djQUJTQ2FsY3VsYXRpb24iIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djU2Vuc29ycyIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPg0KKyAgICA8dGFncyBuYW1lPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZyIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPg0KKyAgICA8dGFncyBuYW1lPSJTd2NDeWxOdW1PYnNlcnZlciIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPg0KKyAgICA8dGFncyBuYW1lPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24iIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPHRhZ3MgbmFtZT0iU3djRW5naW5lU2Vuc29ycyIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPg0KKyAgICA8dGFncyBuYW1lPSJTd2NJbmpJZ25BY3R1YXRpb24iIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4NCisgICAgPGNvcmVDbGFzc2lmaWVycyBuYW1lPSJGUFUiIC8+DQorICA8L2NvbW1vbkVsZW1lbnRzPg0KKyAgPHN3TW9kZWw+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1AwIiBzdGltdWxpPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjAiPg0KKyAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0iW0NvbnN0cmFpbnRFeGNsdWRlXSBFeGNsdWRlIFRhcmdldHMgd2l0aCBGUFUiPg0KKyAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpSZWZlcmVuY2VPYmplY3QiIHZhbHVlPSJGUFU/dHlwZT1Db3JlQ2xhc3NpZmllciIgLz4NCisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC90YXNrcz4NCisgICAgPHRhc2tzIG5hbWU9IlRhc2tfRVNTUDEiIHN0aW11bGk9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjAiPg0KKyAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0iW0NvbnN0cmFpbnRFeGNsdWRlXSBFeGNsdWRlIFRhcmdldHMgd2l0aCBGUFUiPg0KKyAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpSZWZlcmVuY2VPYmplY3QiIHZhbHVlPSJGUFU/dHlwZT1Db3JlQ2xhc3NpZmllciIgLz4NCisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1AyIiBzdGltdWxpPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNTdGltdWx1cyIgbXVsdGlwbGVUYXNrQWN0aXZhdGlvbkxpbWl0PSIwIj4NCisgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9IltDb25zdHJhaW50RXhjbHVkZV0gRXhjbHVkZSBUYXJnZXRzIHdpdGggRlBVIj4NCisgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06UmVmZXJlbmNlT2JqZWN0IiB2YWx1ZT0iRlBVP3R5cGU9Q29yZUNsYXNzaWZpZXIiIC8+DQorICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkdyb3VwIiBuYW1lPSJDYWxsU2VxdWVuY2UiIG9yZGVyZWQ9InRydWUiPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZVBlZGFsU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3Rhc2tzPg0KKyAgICA8dGFza3MgbmFtZT0iVGFza19FU1NQMyIgc3RpbXVsaT0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNTdGltdWx1cyIgbXVsdGlwbGVUYXNrQWN0aXZhdGlvbkxpbWl0PSIwIj4NCisgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9IltDb25zdHJhaW50RXhjbHVkZV0gRXhjbHVkZSBUYXJnZXRzIHdpdGggRlBVIj4NCisgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06UmVmZXJlbmNlT2JqZWN0IiB2YWx1ZT0iRlBVP3R5cGU9Q29yZUNsYXNzaWZpZXIiIC8+DQorICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkdyb3VwIiBuYW1lPSJDYWxsU2VxdWVuY2UiIG9yZGVyZWQ9InRydWUiPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9Ik1hc3NBaXJGbG93U2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQmFzZUZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVHJhbnNpZW50RnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJUb3RhbEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iSW5qZWN0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC90YXNrcz4NCisgICAgPHRhc2tzIG5hbWU9IlRhc2tfRVNTUDQiIHN0aW11bGk9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMCI+DQorICAgICAgPGN1c3RvbVByb3BlcnRpZXMga2V5PSJbQ29uc3RyYWludEV4Y2x1ZGVdIEV4Y2x1ZGUgVGFyZ2V0cyB3aXRoIEZQVSI+DQorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlJlZmVyZW5jZU9iamVjdCIgdmFsdWU9IkZQVT90eXBlPUNvcmVDbGFzc2lmaWVyIiAvPg0KKyAgICAgIDwvY3VzdG9tUHJvcGVydGllcz4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJBUGVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQVBlZFZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVDb250cm9sbGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC90YXNrcz4NCisgICAgPHRhc2tzIG5hbWU9IlRhc2tfRVNTUDUiIHN0aW11bGk9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMCI+DQorICAgICAgPGN1c3RvbVByb3BlcnRpZXMga2V5PSJbQ29uc3RyYWludEluY2x1ZGVdIFJlcXVpcmVzIFRhcmdldHMgd2l0aCBGUFUiPg0KKyAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpSZWZlcmVuY2VPYmplY3QiIHZhbHVlPSJGUFU/dHlwZT1Db3JlQ2xhc3NpZmllciIgLz4NCisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VCcmFrZVBlZGFsU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQ2hlY2tQbGF1c2FiaWxpdHk/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZVNhZmV0eU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlN0b3BMaWdodEFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1U3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1A2IiBzdGltdWxpPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNTdGltdWx1cyIgbXVsdGlwbGVUYXNrQWN0aXZhdGlvbkxpbWl0PSIwIj4NCisgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9IltDb25zdHJhaW50SW5jbHVkZV0gUmVxdWlyZXMgVGFyZ2V0cyB3aXRoIEZQVSI+DQorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlJlZmVyZW5jZU9iamVjdCIgdmFsdWU9IkZQVT90eXBlPUNvcmVDbGFzc2lmaWVyIiAvPg0KKyAgICAgIDwvY3VzdG9tUHJvcGVydGllcz4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3RhdGVNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkFCU0NhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VGb3JjZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkNhbGlwZXJQb3NpdGlvbkNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdUJyYWtlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvdGFza3M+DQorICAgIDx0YXNrcyBuYW1lPSJUYXNrX0VTU1A3IiBzdGltdWxpPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNTdGltdWx1cyIgbXVsdGlwbGVUYXNrQWN0aXZhdGlvbkxpbWl0PSIwIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUFjdHVhdG9yTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC90YXNrcz4NCisgICAgPHRhc2tzIG5hbWU9IlRhc2tfRVNTUDgiIHN0aW11bGk9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjAiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkdyb3VwIiBuYW1lPSJDYWxsU2VxdWVuY2UiIG9yZGVyZWQ9InRydWUiPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkRpYWdub3Npc0FyYml0ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJJZ25pdGlvblRpbWluZz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9Iklnbml0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC90YXNrcz4NCisgICAgPHRhc2tzIG5hbWU9IlRhc2tfRVNTUDkiIHN0aW11bGk9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMCI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+DQorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1V2hlZWxTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC90YXNrcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJBQlNDYWxjdWxhdGlvbiIgdGFncz0iU3djQUJTQ2FsY3VsYXRpb24/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWREZWNlbGVyYXRpb25SYXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRWZWhpY2xlU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZFdoZWVsU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBcmJpdHJhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU0FjdGl2YXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQUJTTW9kZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkFQZWRTZW5zb3IiIHRhZ3M9IlN3Y0VuZ2luZVNlbnNvcnM/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkU2Vuc29yMVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkU2Vuc29yMlZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkUG9zaXRpb24xP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRQb3NpdGlvbjI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJBUGVkVm90ZXIiIHRhZ3M9IlN3Y0VuZ2luZUNvbnRyb2xsZXI/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRQb3NpdGlvbjI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZEFQZWRQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJhc2VGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNYXNzQWlyRmxvdz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJhc2VGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNQUZSYXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VBY3R1YXRvciIgdGFncz0iU3djQUJTQ2FsY3VsYXRpb24/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsaXBlclBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZUFjdHVhdG9yTW9uaXRvciIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlRmVlZGJhY2s/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlRm9yY2VBY3R1YXRpb24iIHRhZ3M9IlN3Y0FCU0NhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU0FjdGl2YXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBQlNNb2RlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlQ3VycmVudD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlRm9yY2VBcmJpdGVyIiB0YWdzPSJTd2NCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzIwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxjdWxhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5U3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBcmJpdHJhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlRm9yY2VDYWxjdWxhdGlvbiIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VGZWVkYmFjaz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTW9uaXRvcmVkVmVoaWNsZVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VTYWZldHlMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGN1bGF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlTW9uaXRvckxldmVsP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VQZWRhbFNlbnNvckRpYWdub3NpcyIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VQZWRhbFNlbnNvclRyYW5zbGF0aW9uIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VQZWRhbFNlbnNvclZvdGVyIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24xP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VTYWZldHlNb25pdG9yIiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUZlZWRiYWNrP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZERpYWdub3Npc1JlcXVlc3Q/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNb25pdG9yZWRWZWhpY2xlU3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZU1vbml0b3JMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5TGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VTYWZldHlTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkNhbGlwZXJQb3NpdGlvbkNhbGN1bGF0aW9uIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxpcGVyUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlQ3VycmVudD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGlwZXJQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkNoZWNrUGxhdXNhYmlsaXR5IiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJDeWxOdW1PYnNlcnZlciIgdGFncz0iU3djQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ3lsaW5kZXJOdW1iZXI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmlnZ2VyZWRDeWxpbmRlck51bWJlcj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkRlY2VsZXJhdGlvblNlbnNvckRpYWdub3NpcyIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24iIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25SYXRlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25SYXRlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkRlY2VsZXJhdGlvblNlbnNvclZvdGVyIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25SYXRlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblJhdGUyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWREZWNlbGVyYXRpb25SYXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRGlhZ25vc2lzQXJiaXRlciIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJFY3VCcmFrZUFjdHVhdG9yIiB0YWdzPSJTd2NBY3R1YXRvcnM/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1QnJha2VQZWRhbFNlbnNvciIgdGFncz0iU3djU2Vuc29ycz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSIxNDQwMDAiIHVwcGVyQm91bmQ9IjE3NjAwMCIgYXZlcmFnZT0iMTYwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yIiB0YWdzPSJTd2NTZW5zb3JzP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjE0NDAwMCIgdXBwZXJCb3VuZD0iMTc2MDAwIiBhdmVyYWdlPSIxNjAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJFY3VTdG9wTGlnaHRBY3R1YXRvciIgdGFncz0iU3djQWN0dWF0b3JzP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VBcHBsaWNhdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yIiB0YWdzPSJTd2NTZW5zb3JzP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJFY3VXaGVlbFNwZWVkU2Vuc29yIiB0YWdzPSJTd2NTZW5zb3JzP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9Iklnbml0aW9uVGltZUFjdHVhdGlvbiIgdGFncz0iU3djSW5qSWduQWN0dWF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyaWdnZXJlZEN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWUzP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lND90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU2P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lNz90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU4P3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iSWduaXRpb25UaW1pbmciIHRhZ3M9IlN3Y0VuZ2luZUNvbnRyb2xsZXI/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTUFGUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IkluamVjdGlvblRpbWVBY3R1YXRpb24iIHRhZ3M9IlN3Y0luaklnbkFjdHVhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmlnZ2VyZWRDeWxpbmRlck51bWJlcj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRvdGFsRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWUyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTM/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lND90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU1P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTY/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lNz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU4P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJNYXNzQWlyRmxvd1NlbnNvciIgdGFncz0iU3djRW5naW5lU2Vuc29ycz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1BRlNlbnNvclZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNYXNzQWlyRmxvdz90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IlN0b3BMaWdodEFjdHVhdG9yIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBcmJpdHJhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlQXBwbGljYXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJUaHJvdHRsZUFjdHVhdG9yIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlc2lyZWRUaHJvdHRsZVBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVzaXJlZFRocm90dGxlUG9zaXRpb25Wb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iVGhyb3R0bGVDb250cm9sbGVyIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkQVBlZFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlc2lyZWRUaHJvdHRsZVBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iVGhyb3R0bGVTZW5zb3IiIHRhZ3M9IlN3Y0VuZ2luZVNlbnNvcnM/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUaHJvdHRsZVNlbnNvcjFWb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVTZW5zb3IyVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJUb3RhbEZ1ZWxNYXNzIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyYW5zaWVudEZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVG90YWxGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IlRyYW5zaWVudEZ1ZWxNYXNzIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJhc2VGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyYW5zaWVudEZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iVmVoaWNsZVNwZWVkU2Vuc29yRGlhZ25vc2lzIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+DQorICAgICAgICAgIDxkZWZhdWx0IHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgYXZlcmFnZT0iODAwMDAuMCIgcFJlbWFpblByb21pbGxlPSIwLjUiIC8+DQorICAgICAgICA8L2l0ZW1zPg0KKyAgICAgIDwvY2FsbEdyYXBoPg0KKyAgICA8L3J1bm5hYmxlcz4NCisgICAgPHJ1bm5hYmxlcyBuYW1lPSJWZWhpY2xlU3BlZWRTZW5zb3JUcmFuc2xhdGlvbiIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IlZlaGljbGVTcGVlZFNlbnNvclZvdGVyIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWQxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkVmVoaWNsZVNwZWVkP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iVmVoaWNsZVN0YXRlTW9uaXRvciIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1vbml0b3JlZFZlaGljbGVTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IldoZWVsU3BlZWRTZW5zb3JEaWFnbm9zaXMiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBhY3RpdmF0aW9ucz0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+DQorICAgICAgPGNhbGxHcmFwaD4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICA8L2NhbGxHcmFwaD4NCisgICAgPC9ydW5uYWJsZXM+DQorICAgIDxydW5uYWJsZXMgbmFtZT0iV2hlZWxTcGVlZFNlbnNvclRyYW5zbGF0aW9uIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgYWN0aXZhdGlvbnM9IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPg0KKyAgICAgIDxjYWxsR3JhcGg+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4NCisgICAgICAgICAgPGRlZmF1bHQgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiBhdmVyYWdlPSI4MDAwMC4wIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgLz4NCisgICAgICAgIDwvaXRlbXM+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8cnVubmFibGVzIG5hbWU9IldoZWVsU3BlZWRTZW5zb3JWb3RlciIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGFjdGl2YXRpb25zPSJUaW1lcl8xME1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4NCisgICAgICA8Y2FsbEdyYXBoPg0KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPg0KKyAgICAgICAgICA8ZGVmYXVsdCB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIGF2ZXJhZ2U9IjgwMDAwLjAiIHBSZW1haW5Qcm9taWxsZT0iMC41IiAvPg0KKyAgICAgICAgPC9pdGVtcz4NCisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkV2hlZWxTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+DQorICAgICAgPC9jYWxsR3JhcGg+DQorICAgIDwvcnVubmFibGVzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkFCU0FjdGl2YXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJBQlNNb2RlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQVBlZFBvc2l0aW9uMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkFQZWRQb3NpdGlvbjIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJBUGVkU2Vuc29yMVZvbHRhZ2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQVBlZFNlbnNvcjJWb2x0YWdlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkFyYml0cmF0ZWRCcmFrZUZvcmNlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQXJiaXRyYXRlZERpYWdub3Npc1JlcXVlc3QiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCYXNlRnVlbE1hc3NQZXJTdHJva2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VBcHBsaWNhdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlRm9yY2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZUZvcmNlQ3VycmVudCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlRm9yY2VGZWVkYmFjayIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlRm9yY2VWb2x0YWdlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlTW9uaXRvckxldmVsIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VQZWRhbFBvc2l0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VQZWRhbFBvc2l0aW9uMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlUGVkYWxQb3NpdGlvbjIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJCcmFrZVNhZmV0eUxldmVsIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VTYWZldHlTdGF0ZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkNhbGN1bGF0ZWRCcmFrZUZvcmNlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQ2FsaXBlclBvc2l0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iQ3lsaW5kZXJOdW1iZXIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJEZWNlbGVyYXRpb25SYXRlMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkRlY2VsZXJhdGlvblJhdGUyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iRGVjZWxlcmF0aW9uVm9sdGFnZTEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iRGVjZWxlcmF0aW9uVm9sdGFnZTIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iRGVzaXJlZFRocm90dGxlUG9zaXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iRGVzaXJlZFRocm90dGxlUG9zaXRpb25Wb2x0YWdlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWUyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTMiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lNCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWU1IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTYiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lNyIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWU4IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWUxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWUyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWUzIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWU0IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWU1IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWU2IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWU3IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IkluamVjdGlvblRpbWU4IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Ik1BRlJhdGUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iTUFGU2Vuc29yVm9sdGFnZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJNYXNzQWlyRmxvdyIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9Ik1vbml0b3JlZFZlaGljbGVTdGF0ZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlRocm90dGxlUG9zaXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVGhyb3R0bGVTZW5zb3IxVm9sdGFnZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlRocm90dGxlU2Vuc29yMlZvbHRhZ2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJUb3RhbEZ1ZWxNYXNzUGVyU3Ryb2tlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVHJhbnNpZW50RnVlbE1hc3NQZXJTdHJva2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJUcmlnZ2VyZWRDeWxpbmRlck51bWJlciIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlZlaGljbGVTcGVlZDEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJWZWhpY2xlU3BlZWQyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVmVoaWNsZVNwZWVkVm9sdGFnZTEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVmVoaWNsZVNwZWVkVm9sdGFnZTIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVm90ZWRBUGVkUG9zaXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJWb3RlZEJyYWtlUGVkYWxQb3NpdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IlZvdGVkVmVoaWNsZVNwZWVkIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iVm90ZWRXaGVlbFNwZWVkIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+DQorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxsYWJlbHMgbmFtZT0iV2hlZWxTcGVlZDEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJXaGVlbFNwZWVkMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+DQorICAgIDwvbGFiZWxzPg0KKyAgICA8bGFiZWxzIG5hbWU9IldoZWVsU3BlZWRWb2x0YWdlMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPg0KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPg0KKyAgICA8L2xhYmVscz4NCisgICAgPGxhYmVscyBuYW1lPSJXaGVlbFNwZWVkVm9sdGFnZTIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4NCisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4NCisgICAgPC9sYWJlbHM+DQorICAgIDxwcm9jZXNzUHJvdG90eXBlcyBuYW1lPSJFU1NQMCIgZmlyc3RSdW5uYWJsZT0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgYWN0aXZhdGlvbj0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IlZlaGljbGVTcGVlZFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IlZlaGljbGVTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcHJvY2Vzc1Byb3RvdHlwZXM+DQorICAgIDxwcm9jZXNzUHJvdG90eXBlcyBuYW1lPSJFU1NQMSIgZmlyc3RSdW5uYWJsZT0iQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgYWN0aXZhdGlvbj0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiI+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkN5bE51bU9ic2VydmVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkRlY2VsZXJhdGlvblNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDIiIGZpcnN0UnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJCcmFrZVBlZGFsU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9wcm9jZXNzUHJvdG90eXBlcz4NCisgICAgPHByb2Nlc3NQcm90b3R5cGVzIG5hbWU9IkVTU1AzIiBmaXJzdFJ1bm5hYmxlPSJNYXNzQWlyRmxvd1NlbnNvcj90eXBlPVJ1bm5hYmxlIiBsYXN0UnVubmFibGU9IkluamVjdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgYWN0aXZhdGlvbj0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iTWFzc0FpckZsb3dTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQmFzZUZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IlRyYW5zaWVudEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IlRvdGFsRnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iSW5qZWN0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDQiIGZpcnN0UnVubmFibGU9IkFQZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJUaHJvdHRsZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzVNUz90eXBlPVBlcmlvZGljQWN0aXZhdGlvbiI+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkFQZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQVBlZFZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IlRocm90dGxlQ29udHJvbGxlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJUaHJvdHRsZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcHJvY2Vzc1Byb3RvdHlwZXM+DQorICAgIDxwcm9jZXNzUHJvdG90eXBlcyBuYW1lPSJFU1NQNSIgZmlyc3RSdW5uYWJsZT0iVGhyb3R0bGVTZW5zb3I/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJFY3VTdG9wTGlnaHRBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiBhY3RpdmF0aW9uPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJUaHJvdHRsZVNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJFY3VCcmFrZVBlZGFsU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJCcmFrZVBlZGFsU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQ2hlY2tQbGF1c2FiaWxpdHk/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQnJha2VTYWZldHlNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkJyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJTdG9wTGlnaHRBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJFY3VTdG9wTGlnaHRBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDYiIGZpcnN0UnVubmFibGU9IlZlaGljbGVTdGF0ZU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJFY3VCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJWZWhpY2xlU3RhdGVNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkVjdURlY2VsZXJhdGlvblNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJBQlNDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkNhbGlwZXJQb3NpdGlvbkNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9IkJyYWtlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRWN1QnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDciIGZpcnN0UnVubmFibGU9IlZlaGljbGVTcGVlZFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiBsYXN0UnVubmFibGU9IkJyYWtlQWN0dWF0b3JNb25pdG9yP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iQnJha2VBY3R1YXRvck1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9wcm9jZXNzUHJvdG90eXBlcz4NCisgICAgPHByb2Nlc3NQcm90b3R5cGVzIG5hbWU9IkVTU1A4IiBmaXJzdFJ1bm5hYmxlPSJEaWFnbm9zaXNBcmJpdGVyP3R5cGU9UnVubmFibGUiIGxhc3RSdW5uYWJsZT0iSWduaXRpb25UaW1lQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIGFjdGl2YXRpb249IlRpbWVyXzEwTVM/dHlwZT1QZXJpb2RpY0FjdGl2YXRpb24iPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJEaWFnbm9zaXNBcmJpdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9Iklnbml0aW9uVGltaW5nP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlQ2FsbHMgcnVubmFibGU9Iklnbml0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3Byb2Nlc3NQcm90b3R5cGVzPg0KKyAgICA8cHJvY2Vzc1Byb3RvdHlwZXMgbmFtZT0iRVNTUDkiIGZpcnN0UnVubmFibGU9IkVjdVdoZWVsU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgbGFzdFJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgYWN0aXZhdGlvbj0iVGltZXJfNU1TP3R5cGU9UGVyaW9kaWNBY3RpdmF0aW9uIj4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iRWN1V2hlZWxTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUNhbGxzIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVDYWxscyBydW5uYWJsZT0iV2hlZWxTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcHJvY2Vzc1Byb3RvdHlwZXM+DQorICAgIDxhY3RpdmF0aW9ucyB4c2k6dHlwZT0iYW06UGVyaW9kaWNBY3RpdmF0aW9uIiBuYW1lPSJUaW1lcl8xME1TIj4NCisgICAgICA8bWluIHZhbHVlPSIxMCIgdW5pdD0ibXMiIC8+DQorICAgICAgPG1heCB2YWx1ZT0iMTAiIHVuaXQ9Im1zIiAvPg0KKyAgICAgIDxvZmZzZXQgdmFsdWU9IjAiIHVuaXQ9Im1zIiAvPg0KKyAgICA8L2FjdGl2YXRpb25zPg0KKyAgICA8YWN0aXZhdGlvbnMgeHNpOnR5cGU9ImFtOlBlcmlvZGljQWN0aXZhdGlvbiIgbmFtZT0iVGltZXJfMjBNUyI+DQorICAgICAgPG1pbiB2YWx1ZT0iMjAiIHVuaXQ9Im1zIiAvPg0KKyAgICAgIDxtYXggdmFsdWU9IjIwIiB1bml0PSJtcyIgLz4NCisgICAgICA8b2Zmc2V0IHZhbHVlPSIwIiB1bml0PSJtcyIgLz4NCisgICAgPC9hY3RpdmF0aW9ucz4NCisgICAgPGFjdGl2YXRpb25zIHhzaTp0eXBlPSJhbTpQZXJpb2RpY0FjdGl2YXRpb24iIG5hbWU9IlRpbWVyXzVNUyI+DQorICAgICAgPG1pbiB2YWx1ZT0iNSIgdW5pdD0ibXMiIC8+DQorICAgICAgPG1heCB2YWx1ZT0iNSIgdW5pdD0ibXMiIC8+DQorICAgICAgPG9mZnNldCB2YWx1ZT0iMCIgdW5pdD0ibXMiIC8+DQorICAgIDwvYWN0aXZhdGlvbnM+DQorICA8L3N3TW9kZWw+DQorICA8aHdNb2RlbD4NCisgICAgPGRlZmluaXRpb25zIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdERlZmluaXRpb24iIG5hbWU9IkFSTSBDb3J0ZXgtQTUzIiBwdVR5cGU9IkNQVSIgZmVhdHVyZXM9Ikluc3RydWN0aW9ucy9JUENfMS4wP3R5cGU9SHdGZWF0dXJlIiAvPg0KKyAgICA8ZmVhdHVyZUNhdGVnb3JpZXMgbmFtZT0iSW5zdHJ1Y3Rpb25zIiBmZWF0dXJlVHlwZT0icGVyZm9ybWFuY2UiPg0KKyAgICAgIDxmZWF0dXJlcyBuYW1lPSJJUENfMS4wIiB2YWx1ZT0iMS4wIiAvPg0KKyAgICA8L2ZlYXR1cmVDYXRlZ29yaWVzPg0KKyAgICA8c3RydWN0dXJlcyBuYW1lPSJIb21vZ2VuZW91cyBFeGFtcGxlIFN5c3RlbSIgc3RydWN0dXJlVHlwZT0iU3lzdGVtIj4NCisgICAgICA8c3RydWN0dXJlcyBuYW1lPSJSUEkzIiBzdHJ1Y3R1cmVUeXBlPSJFQ1UiPg0KKyAgICAgICAgPHN0cnVjdHVyZXMgbmFtZT0iQVJNIENvcnRleC1BNTMiIHN0cnVjdHVyZVR5cGU9Ik1pY3JvY29udHJvbGxlciI+DQorICAgICAgICAgIDxtb2R1bGVzIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdCIgbmFtZT0iUlBJXzAiIGZyZXF1ZW5jeURvbWFpbj0iQ2xvY2tBUk0wP3R5cGU9RnJlcXVlbmN5RG9tYWluIiBkZWZpbml0aW9uPSJBUk0rQ29ydGV4LUE1Mz90eXBlPVByb2Nlc3NpbmdVbml0RGVmaW5pdGlvbiIgLz4NCisgICAgICAgICAgPG1vZHVsZXMgeHNpOnR5cGU9ImFtOlByb2Nlc3NpbmdVbml0IiBuYW1lPSJSUElfMSIgZnJlcXVlbmN5RG9tYWluPSJDbG9ja0FSTTE/dHlwZT1GcmVxdWVuY3lEb21haW4iIGRlZmluaXRpb249IkFSTStDb3J0ZXgtQTUzP3R5cGU9UHJvY2Vzc2luZ1VuaXREZWZpbml0aW9uIiAvPg0KKyAgICAgICAgICA8bW9kdWxlcyB4c2k6dHlwZT0iYW06UHJvY2Vzc2luZ1VuaXQiIG5hbWU9IlJQSV8yIiBmcmVxdWVuY3lEb21haW49IkNsb2NrQVJNMj90eXBlPUZyZXF1ZW5jeURvbWFpbiIgZGVmaW5pdGlvbj0iQVJNK0NvcnRleC1BNTM/dHlwZT1Qcm9jZXNzaW5nVW5pdERlZmluaXRpb24iIC8+DQorICAgICAgICAgIDxtb2R1bGVzIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdCIgbmFtZT0iUlBJXzMiIGZyZXF1ZW5jeURvbWFpbj0iQ2xvY2tBUk0zP3R5cGU9RnJlcXVlbmN5RG9tYWluIiBkZWZpbml0aW9uPSJBUk0rQ29ydGV4LUE1Mz90eXBlPVByb2Nlc3NpbmdVbml0RGVmaW5pdGlvbiIgLz4NCisgICAgICAgIDwvc3RydWN0dXJlcz4NCisgICAgICA8L3N0cnVjdHVyZXM+DQorICAgIDwvc3RydWN0dXJlcz4NCisgICAgPGRvbWFpbnMgeHNpOnR5cGU9ImFtOkZyZXF1ZW5jeURvbWFpbiIgbmFtZT0iQ2xvY2tBUk0yIiBjbG9ja0dhdGluZz0iZmFsc2UiPg0KKyAgICAgIDxkZWZhdWx0VmFsdWUgdmFsdWU9IjEuMiIgdW5pdD0iR0h6IiAvPg0KKyAgICA8L2RvbWFpbnM+DQorICAgIDxkb21haW5zIHhzaTp0eXBlPSJhbTpGcmVxdWVuY3lEb21haW4iIG5hbWU9IkNsb2NrQVJNMyIgY2xvY2tHYXRpbmc9ImZhbHNlIj4NCisgICAgICA8ZGVmYXVsdFZhbHVlIHZhbHVlPSIxLjIiIHVuaXQ9IkdIeiIgLz4NCisgICAgPC9kb21haW5zPg0KKyAgICA8ZG9tYWlucyB4c2k6dHlwZT0iYW06RnJlcXVlbmN5RG9tYWluIiBuYW1lPSJDbG9ja0FSTTAiIGNsb2NrR2F0aW5nPSJmYWxzZSI+DQorICAgICAgPGRlZmF1bHRWYWx1ZSB2YWx1ZT0iMS4yIiB1bml0PSJHSHoiIC8+DQorICAgIDwvZG9tYWlucz4NCisgICAgPGRvbWFpbnMgeHNpOnR5cGU9ImFtOkZyZXF1ZW5jeURvbWFpbiIgbmFtZT0iQ2xvY2tBUk0xIiBjbG9ja0dhdGluZz0iZmFsc2UiPg0KKyAgICAgIDxkZWZhdWx0VmFsdWUgdmFsdWU9IjEuMiIgdW5pdD0iR0h6IiAvPg0KKyAgICA8L2RvbWFpbnM+DQorICA8L2h3TW9kZWw+DQorICA8b3NNb2RlbD4NCisgICAgPG9wZXJhdGluZ1N5c3RlbXMgbmFtZT0iT1MiPg0KKyAgICAgIDx0YXNrU2NoZWR1bGVycyBuYW1lPSJTQ0hFRF9SUElfMCAjMSIgLz4NCisgICAgICA8dGFza1NjaGVkdWxlcnMgbmFtZT0iU0NIRURfUlBJXzEgIzIiIC8+DQorICAgICAgPHRhc2tTY2hlZHVsZXJzIG5hbWU9IlNDSEVEX1JQSV8yICMzIiAvPg0KKyAgICAgIDx0YXNrU2NoZWR1bGVycyBuYW1lPSJTQ0hFRF9SUElfMyAjNCIgLz4NCisgICAgPC9vcGVyYXRpbmdTeXN0ZW1zPg0KKyAgPC9vc01vZGVsPg0KKyAgPHN0aW11bGlNb2RlbD4NCisgICAgPHN0aW11bGkgeHNpOnR5cGU9ImFtOlBlcmlvZGljU3RpbXVsdXMiIG5hbWU9IlRpbWVyXzEwTVMiPg0KKyAgICAgIDxvZmZzZXQgdmFsdWU9IjAiIHVuaXQ9Im1zIiAvPg0KKyAgICAgIDxyZWN1cnJlbmNlIHZhbHVlPSIxMCIgdW5pdD0ibXMiIC8+DQorICAgIDwvc3RpbXVsaT4NCisgICAgPHN0aW11bGkgeHNpOnR5cGU9ImFtOlBlcmlvZGljU3RpbXVsdXMiIG5hbWU9IlRpbWVyXzIwTVMiPg0KKyAgICAgIDxvZmZzZXQgdmFsdWU9IjAiIHVuaXQ9Im1zIiAvPg0KKyAgICAgIDxyZWN1cnJlbmNlIHZhbHVlPSIyMCIgdW5pdD0ibXMiIC8+DQorICAgIDwvc3RpbXVsaT4NCisgICAgPHN0aW11bGkgeHNpOnR5cGU9ImFtOlBlcmlvZGljU3RpbXVsdXMiIG5hbWU9IlRpbWVyXzVNUyI+DQorICAgICAgPG9mZnNldCB2YWx1ZT0iMCIgdW5pdD0ibXMiIC8+DQorICAgICAgPHJlY3VycmVuY2UgdmFsdWU9IjUiIHVuaXQ9Im1zIiAvPg0KKyAgICA8L3N0aW11bGk+DQorICA8L3N0aW11bGlNb2RlbD4NCisgIDxjb25zdHJhaW50c01vZGVsPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQUJTQ2FsY3VsYXRpb24tLSZndDtCcmFrZUZvcmNlQWN0dWF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNj90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkFCU0NhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VGb3JjZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQnJha2VGb3JjZUFyYml0ZXItLSZndDtBQlNDYWxjdWxhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkFCU0NhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJEZWNlbGVyYXRpb25TZW5zb3JWb3Rlci0tJmd0O0FCU0NhbGN1bGF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNj90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkRlY2VsZXJhdGlvblNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQUJTQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IlZlaGljbGVTcGVlZFNlbnNvclZvdGVyLS0mZ3Q7QUJTQ2FsY3VsYXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVmVoaWNsZVNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJBQlNDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iV2hlZWxTcGVlZFNlbnNvclZvdGVyLS0mZ3Q7QUJTQ2FsY3VsYXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A5P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iV2hlZWxTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQUJTQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkFQZWRTZW5zb3ItLSZndDtBUGVkVm90ZXIiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A0P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQVBlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkFQZWRWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQVBlZFZvdGVyLS0mZ3Q7VGhyb3R0bGVDb250cm9sbGVyIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQND90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkFQZWRWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRocm90dGxlQ29udHJvbGxlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQmFzZUZ1ZWxNYXNzLS0mZ3Q7SWduaXRpb25UaW1pbmciIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A4P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQmFzZUZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iSWduaXRpb25UaW1pbmc/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9Ik1hc3NBaXJGbG93U2Vuc29yLS0mZ3Q7QmFzZUZ1ZWxNYXNzIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQMz90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9Ik1hc3NBaXJGbG93U2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQmFzZUZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCYXNlRnVlbE1hc3MtLSZndDtUcmFuc2llbnRGdWVsTWFzcyIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDM/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCYXNlRnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJUcmFuc2llbnRGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQ2FsaXBlclBvc2l0aW9uQ2FsY3VsYXRpb24tLSZndDtCcmFrZUFjdHVhdG9yIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNj90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkNhbGlwZXJQb3NpdGlvbkNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQnJha2VBY3R1YXRvci0tJmd0O0VjdUJyYWtlQWN0dWF0b3IiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdUJyYWtlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkJyYWtlRm9yY2VBY3R1YXRpb24tLSZndDtCcmFrZUFjdHVhdG9yTW9uaXRvciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDc/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VBY3R1YXRvck1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkJyYWtlRm9yY2VBY3R1YXRpb24tLSZndDtDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQ2FsaXBlclBvc2l0aW9uQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkJyYWtlRm9yY2VDYWxjdWxhdGlvbi0tJmd0O0JyYWtlRm9yY2VBcmJpdGVyIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VBcmJpdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCcmFrZVNhZmV0eU1vbml0b3ItLSZndDtCcmFrZUZvcmNlQXJiaXRlciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZVNhZmV0eU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQnJha2VGb3JjZUFyYml0ZXItLSZndDtTdG9wTGlnaHRBY3R1YXRvciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlN0b3BMaWdodEFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCcmFrZVNhZmV0eU1vbml0b3ItLSZndDtCcmFrZUZvcmNlQ2FsY3VsYXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A1P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VTYWZldHlNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJDaGVja1BsYXVzYWJpbGl0eS0tJmd0O0JyYWtlRm9yY2VDYWxjdWxhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJDaGVja1BsYXVzYWJpbGl0eT90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iVmVoaWNsZVN0YXRlTW9uaXRvci0tJmd0O0JyYWtlRm9yY2VDYWxjdWxhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJWZWhpY2xlU3RhdGVNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJFY3VCcmFrZVBlZGFsU2Vuc29yLS0mZ3Q7QnJha2VQZWRhbFNlbnNvckRpYWdub3NpcyIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJFY3VCcmFrZVBlZGFsU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VQZWRhbFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQnJha2VQZWRhbFNlbnNvclRyYW5zbGF0aW9uLS0mZ3Q7QnJha2VQZWRhbFNlbnNvclZvdGVyIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlUGVkYWxTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iRWN1QnJha2VQZWRhbFNlbnNvci0tJmd0O0JyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJFY3VCcmFrZVBlZGFsU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQnJha2VQZWRhbFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJCcmFrZVBlZGFsU2Vuc29yVm90ZXItLSZndDtDaGVja1BsYXVzYWJpbGl0eSIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZVBlZGFsU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJDaGVja1BsYXVzYWJpbGl0eT90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQ2hlY2tQbGF1c2FiaWxpdHktLSZndDtCcmFrZVNhZmV0eU1vbml0b3IiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A1P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQ2hlY2tQbGF1c2FiaWxpdHk/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJCcmFrZVNhZmV0eU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IlZlaGljbGVTdGF0ZU1vbml0b3ItLSZndDtCcmFrZVNhZmV0eU1vbml0b3IiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVmVoaWNsZVN0YXRlTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkJyYWtlU2FmZXR5TW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iQ3lsTnVtT2JzZXJ2ZXItLSZndDtJZ25pdGlvblRpbWVBY3R1YXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A4P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJJZ25pdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkN5bE51bU9ic2VydmVyLS0mZ3Q7SW5qZWN0aW9uVGltZUFjdHVhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDM/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJDeWxOdW1PYnNlcnZlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkluamVjdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkVjdURlY2VsZXJhdGlvblNlbnNvci0tJmd0O0RlY2VsZXJhdGlvblNlbnNvckRpYWdub3NpcyIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDY/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJFY3VEZWNlbGVyYXRpb25TZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJEZWNlbGVyYXRpb25TZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkRlY2VsZXJhdGlvblNlbnNvclRyYW5zbGF0aW9uLS0mZ3Q7RGVjZWxlcmF0aW9uU2Vuc29yVm90ZXIiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJEZWNlbGVyYXRpb25TZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yLS0mZ3Q7RGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A2P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IlN0b3BMaWdodEFjdHVhdG9yLS0mZ3Q7RWN1U3RvcExpZ2h0QWN0dWF0b3IiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A1P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iU3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJFY3VTdG9wTGlnaHRBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yLS0mZ3Q7VmVoaWNsZVNwZWVkU2Vuc29yRGlhZ25vc2lzIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQNz90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdVZlaGljbGVTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlZlaGljbGVTcGVlZFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yLS0mZ3Q7VmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24iIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1AwP3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9IkVjdVdoZWVsU3BlZWRTZW5zb3ItLSZndDtXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQOT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdVdoZWVsU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJFY3VXaGVlbFNwZWVkU2Vuc29yLS0mZ3Q7V2hlZWxTcGVlZFNlbnNvclRyYW5zbGF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQOT90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IkVjdVdoZWVsU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJXaGVlbFNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgPC9ydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cz4NCisgICAgPHJ1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzIG5hbWU9Iklnbml0aW9uVGltaW5nLS0mZ3Q7SWduaXRpb25UaW1lQWN0dWF0aW9uIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQOD90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9Iklnbml0aW9uVGltaW5nP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iSWduaXRpb25UaW1lQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJUb3RhbEZ1ZWxNYXNzLS0mZ3Q7SW5qZWN0aW9uVGltZUFjdHVhdGlvbiIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDM/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJUb3RhbEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iSW5qZWN0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iVGhyb3R0bGVDb250cm9sbGVyLS0mZ3Q7VGhyb3R0bGVBY3R1YXRvciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDQ/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJUaHJvdHRsZUNvbnRyb2xsZXI/dHlwZT1SdW5uYWJsZSIgLz4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJUaHJvdHRsZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJUaHJvdHRsZVNlbnNvci0tJmd0O1Rocm90dGxlQ29udHJvbGxlciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDU/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJUaHJvdHRsZVNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRocm90dGxlQ29udHJvbGxlcj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iVHJhbnNpZW50RnVlbE1hc3MtLSZndDtUb3RhbEZ1ZWxNYXNzIiBvcmRlclR5cGU9InN1Y2Nlc3NvciIgcHJvY2Vzc1Njb3BlPSJFU1NQMz90eXBlPVByb2Nlc3NQcm90b3R5cGUiPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlRyYW5zaWVudEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iVG90YWxGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICA8L3J1bm5hYmxlU2VxdWVuY2luZ0NvbnN0cmFpbnRzPg0KKyAgICA8cnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHMgbmFtZT0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24tLSZndDtWZWhpY2xlU3BlZWRTZW5zb3JWb3RlciIgb3JkZXJUeXBlPSJzdWNjZXNzb3IiIHByb2Nlc3NTY29wZT0iRVNTUDA/dHlwZT1Qcm9jZXNzUHJvdG90eXBlIj4NCisgICAgICA8cnVubmFibGVHcm91cHMgcnVubmFibGVzPSJWZWhpY2xlU3BlZWRTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPg0KKyAgICAgIDxydW5uYWJsZUdyb3VwcyBydW5uYWJsZXM9IlZlaGljbGVTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICAgIDxydW5uYWJsZVNlcXVlbmNpbmdDb25zdHJhaW50cyBuYW1lPSJXaGVlbFNwZWVkU2Vuc29yVHJhbnNsYXRpb24tLSZndDtXaGVlbFNwZWVkU2Vuc29yVm90ZXIiIG9yZGVyVHlwZT0ic3VjY2Vzc29yIiBwcm9jZXNzU2NvcGU9IkVTU1A5P3R5cGU9UHJvY2Vzc1Byb3RvdHlwZSI+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iV2hlZWxTcGVlZFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+DQorICAgICAgPHJ1bm5hYmxlR3JvdXBzIHJ1bm5hYmxlcz0iV2hlZWxTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+DQorICAgIDwvcnVubmFibGVTZXF1ZW5jaW5nQ29uc3RyYWludHM+DQorICA8L2NvbnN0cmFpbnRzTW9kZWw+DQorICA8bWFwcGluZ01vZGVsPg0KKyAgICA8c2NoZWR1bGVyQWxsb2NhdGlvbiBzY2hlZHVsZXI9IlNDSEVEX1JQSV8wKyUyMzE/dHlwZT1UYXNrU2NoZWR1bGVyIiByZXNwb25zaWJpbGl0eT0iUlBJXzA/dHlwZT1Qcm9jZXNzaW5nVW5pdCIgLz4NCisgICAgPHNjaGVkdWxlckFsbG9jYXRpb24gc2NoZWR1bGVyPSJTQ0hFRF9SUElfMSslMjMyP3R5cGU9VGFza1NjaGVkdWxlciIgcmVzcG9uc2liaWxpdHk9IlJQSV8xP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1AwP3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMSslMjMyP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8xP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1AxP3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMSslMjMyP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8xP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1AyP3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMCslMjMxP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8wP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1AzP3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMCslMjMxP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8wP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A0P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMSslMjMyP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8xP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A1P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMCslMjMxP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8wP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A2P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMSslMjMyP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8xP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A3P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMSslMjMyP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8xP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A4P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMCslMjMxP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8wP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICAgIDx0YXNrQWxsb2NhdGlvbiB0YXNrPSJUYXNrX0VTU1A5P3R5cGU9VGFzayIgc2NoZWR1bGVyPSJTQ0hFRF9SUElfMCslMjMxP3R5cGU9VGFza1NjaGVkdWxlciIgYWZmaW5pdHk9IlJQSV8wP3R5cGU9UHJvY2Vzc2luZ1VuaXQiIC8+DQorICA8L21hcHBpbmdNb2RlbD4NCis8L2FtOkFtYWx0aGVhPg0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9Bcm1Db2RlRmlsZUNyZWF0aW9uLmphdmEgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vQXJtQ29kZUZpbGVDcmVhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ODllYTUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vQXJtQ29kZUZpbGVDcmVhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgQ29weXJpZ2h0IChjKSAyMDE5IERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyBhbmQgb3RoZXJzLg0KKyAqDQorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQorICogICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KKyAqICAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQorICoNCisgKiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQorICoNCisgKiAgIENvbnRyaWJ1dG9yczoNCisgKiAgICAgICBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbjsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5NYXBwaW5nTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlNjaGVkdWxlckFsbG9jYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udXRpbHMuZmlsZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBSdW5uYWJsZSBEZWZpbml0aW9uIHdpdGggUnVubmFibGUgc3BlY2lmaWMgZGVsYXkuDQorICoNCisgKi8NCisNCitwdWJsaWMgY2xhc3MgQXJtQ29kZUZpbGVDcmVhdGlvbiB7DQorCWZpbmFsIHByaXZhdGUgQW1hbHRoZWEgbW9kZWw7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RvciBBcm1Db2RlRmlsZUNyZWF0aW9uLg0KKwkgKg0KKwkgKiBAcGFyYW0gTW9kZWwNCisJICogQHBhcmFtIHNyY1BhdGgNCisJICogQHBhcmFtIGhkclBhdGgNCisJICogQHBhcmFtIGNvbmZpZ0ZsYWcNCisJICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKwkgKi8NCisJcHVibGljIEFybUNvZGVGaWxlQ3JlYXRpb24oZmluYWwgQW1hbHRoZWEgTW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBTdHJpbmcgaGRyUGF0aCwgZmluYWwgaW50IGNvbmZpZ0ZsYWcpDQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCXRoaXMubW9kZWwgPSBNb2RlbDsNCisJCWZpbmFsIEVMaXN0PFRhc2s+IHRhc2tzID0gdGhpcy5tb2RlbC5nZXRTd01vZGVsKCkuZ2V0VGFza3MoKTsNCisJCWZpbmFsIEVMaXN0PFJ1bm5hYmxlPiBydW5uYWJsZXMgPSB0aGlzLm1vZGVsLmdldFN3TW9kZWwoKS5nZXRSdW5uYWJsZXMoKTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbigiUnVubmFibGUgRmlsZSBDcmVhdGlvbiBCZWdpbnMiKTsNCisJCWZpbGVDcmVhdGUodGhpcy5tb2RlbCwgc3JjUGF0aCwgaGRyUGF0aCwgY29uZmlnRmxhZywgdGFza3MsIHJ1bm5hYmxlcyk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5hYmxlIEZpbGUgQ3JlYXRpb24gRW5kcyIpOw0KKw0KKwl9DQorDQorCS8qKg0KKwkgKiBmaWxlIGNyZWF0aW9uIGFuZCBzcGVjaWZpY2F0aW9uIGZvciBhcm1jb2RlIGZpbGUNCisJICoNCisJICogQHBhcmFtIG1vZGVsDQorCSAqIEBwYXJhbSBzcmNQYXRoDQorCSAqIEBwYXJhbSBoZHJQYXRoDQorCSAqIEBwYXJhbSBjb25maWdGbGFnDQorCSAqIEBwYXJhbSB0YXNrcw0KKwkgKiBAcGFyYW0gcnVubmFibGVzDQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24NCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgZmlsZUNyZWF0ZShmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgU3RyaW5nIHNyY1BhdGgsIGZpbmFsIFN0cmluZyBoZHJQYXRoLA0KKwkJCWZpbmFsIGludCBjb25maWdGbGFnLCBmaW5hbCBFTGlzdDxUYXNrPiB0YXNrcywgZmluYWwgRUxpc3Q8UnVubmFibGU+IHJ1bm5hYmxlcykgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIFN0cmluZyBmbmFtZSA9IHNyY1BhdGggKyBGaWxlLnNlcGFyYXRvciArICJhcm1jb2RlLmMiOw0KKwkJZmluYWwgRmlsZSBmMiA9IG5ldyBGaWxlKHNyY1BhdGgpOw0KKwkJZmluYWwgRmlsZSBmMSA9IG5ldyBGaWxlKGZuYW1lKTsNCisJCWYyLm1rZGlycygpOw0KKwkJdHJ5IHsNCisJCQlmMS5jcmVhdGVOZXdGaWxlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorDQorCQlmaW5hbCBGaWxlIGZuID0gZjE7DQorCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCXRyeSB7DQorCQkJaWYgKDB4MzExMCA9PSAoY29uZmlnRmxhZyAmIDB4RkZGMCkpIHsNCisJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjEpOw0KKwkJCQlydW5GaWxlSGVhZGVyKGYxKTsNCisJCQkJaGVhZGVySW5jbHVkZXNBcm1Db2RlKGYxKTsNCisJCQkJbnNsZWVwKGYxKTsNCisJCQkJenlucW1haW4obW9kZWwsIGYxKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCWZpbGVVdGlsLmZpbGVNYWluSGVhZGVyKGYxKTsNCisJCQkJcnVuRmlsZUhlYWRlcihmMSk7DQorCQkJCWhlYWRlckluY2x1ZGVzQXJtQ29kZShmMSk7DQorCQkJCW5zbGVlcChmMSk7DQorCQkJCXp5bnFtYWluKG1vZGVsLCBmMSk7DQorCQkJfQ0KKwkJfQ0KKwkJZmluYWxseSB7DQorCQkJdHJ5IHsNCisJCQkJZncuY2xvc2UoKTsNCisJCQl9DQorCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsNCisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIEFybUNvZGUgSGVhZGVyIFRpdGxlIG5vdGUuDQorCSAqDQorCSAqIEBwYXJhbSBmaWxlDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHJ1bkZpbGVIZWFkZXIoZmluYWwgRmlsZSBmaWxlKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmaWxlOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmdy53cml0ZSgiKlRpdGxlIAkJOiAgIEFybUNvZGUgSGVhZGVyXG4iKTsNCisJCQlmdy53cml0ZSgiKkRlc2NyaXB0aW9uCToJSGVhZGVyIGZpbGUgZm9yIERlcGxveS9PZmZsb2FkaW5nIG9mIHRoZSB0YXNrIHRvIEVQSVxuIik7DQorCQkJZncud3JpdGUoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7DQorCQkJZncud3JpdGUoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4iKTsNCisNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogbnNsZWVwIC0gZnVuY3Rpb24gY2FsbCBzdHJ1Y3R1cmUuDQorCSAqDQorCSAqIEBwYXJhbSBmaWxlDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIG5zbGVlcChmaW5hbCBGaWxlIGZpbGUpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCJpbnQgbnNsZWVwKGxvbmcgbWlsaXNlY29uZHMpe1xuIik7DQorCQkJZncud3JpdGUoIlx0c3RydWN0IHRpbWVzcGVjIHJlcSwgcmVtO1xuIik7DQorCQkJZncud3JpdGUoIlx0aWYobWlsaXNlY29uZHMgPiA5OTkpe1xuIik7DQorCQkJZncud3JpdGUoIlx0XHRyZXEudHZfc2VjID0gKGludCkobWlsaXNlY29uZHMgLyAxMDAwKTtcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdFx0cmVxLnR2X25zZWMgPSAobWlsaXNlY29uZHMgLSAoKGxvbmcpcmVxLnR2X3NlYyAqIDEwMDApKSAqIDEwMDAwMDA7XG4iKTsNCisJCQlmdy53cml0ZSgiXHR9IGVsc2Uge1xuIik7DQorCQkJZncud3JpdGUoIlx0XHRyZXEudHZfc2VjID0gMDtcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdFx0cmVxLnR2X25zZWMgPSBtaWxpc2Vjb25kcyAqIDEwMDAwMDA7XG4iKTsNCisJCQlmdy53cml0ZSgiXHR9XG4iKTsNCisJCQlmdy53cml0ZSgiXHRyZXR1cm4gbmFub3NsZWVwKCZyZXEgLCAmcmVtKTtcbiIpOw0KKwkJCWZ3LndyaXRlKCJ9XG4iKTsNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogbWFpbiBmdW5jdGlvbiBmb3IgdGhlIHp5bnEgaW4gd2hpY2ggd2UgZGVwbG95IHRoZQ0KKwkgKg0KKwkgKiBAcGFyYW0gbW9kZWwNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgenlucW1haW4oZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIEZpbGUgZmlsZSkgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZmluYWwgTWFwcGluZ01vZGVsIG1hcHBpbmdNb2RlbCA9IG1vZGVsLmdldE1hcHBpbmdNb2RlbCgpOw0KKwkJCWlmIChtYXBwaW5nTW9kZWwgIT0gbnVsbCkgew0KKwkJCQlmaW5hbCBFTGlzdDxTY2hlZHVsZXJBbGxvY2F0aW9uPiBwcm9jZXNzaW5nVW5pdHMgPSBtb2RlbC5nZXRNYXBwaW5nTW9kZWwoKS5nZXRTY2hlZHVsZXJBbGxvY2F0aW9uKCk7DQorCQkJCWZpbmFsIEFycmF5TGlzdDxTY2hlZHVsZXJBbGxvY2F0aW9uPiBsb2NhbFBVID0gbmV3IEFycmF5TGlzdDxTY2hlZHVsZXJBbGxvY2F0aW9uPigpOw0KKwkJCQlsb2NhbFBVLmFkZEFsbChwcm9jZXNzaW5nVW5pdHMpOw0KKwkJCQlmaW5hbCBIYXNoTWFwPFNjaGVkdWxlckFsbG9jYXRpb24sIExvbmc+IENvcmVNYXAgPSBuZXcgSGFzaE1hcDxTY2hlZHVsZXJBbGxvY2F0aW9uLCBMb25nPigpOw0KKwkJCQlsb25nIGNvdW50ID0gMDsNCisJCQkJZm9yIChmaW5hbCBTY2hlZHVsZXJBbGxvY2F0aW9uIHB1IDogbG9jYWxQVSkgew0KKwkJCQkJQ29yZU1hcC5wdXQocHUsIGNvdW50KTsNCisJCQkJCWNvdW50Kys7DQorCQkJCX0NCisJCQkJZncud3JpdGUoImludCBtYWluKCl7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0dW5zaWduZWQgaW50IHNoYXJlZF9sYWJlbF90b19yZWFkO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdHVuc2lnbmVkICAgcm93X2xvb3AsY29sX2xvb3A7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0ZV9wbGF0Zm9ybV90IGVwaXBoYW55O1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGVfZXBpcGhhbnlfdCBkZXY7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0aW50IGxvb3A7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0aW50IGFkZHI7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0ZV9tZW1fdCBlbWVtO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGVfaW5pdChOVUxMKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRlX3Jlc2V0X3N5c3RlbSgpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGVfZ2V0X3BsYXRmb3JtX2luZm8oJmVwaXBoYW55KTtcbiIpOw0KKwkJCQlpbnQgY29yZUdyb3VwID0gMDsNCisJCQkJaWYgKHByb2Nlc3NpbmdVbml0cy5zaXplKCkgPT0gMSkgew0KKwkJCQkJY29yZUdyb3VwID0gMDsNCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwcm9jZXNzaW5nVW5pdHMuc2l6ZSgpID4gMSAmJiBwcm9jZXNzaW5nVW5pdHMuc2l6ZSgpIDwgNSkgew0KKwkJCQkJY29yZUdyb3VwID0gMjsNCisJCQkJfQ0KKwkJCQllbHNlIGlmIChwcm9jZXNzaW5nVW5pdHMuc2l6ZSgpID4gNCAmJiBwcm9jZXNzaW5nVW5pdHMuc2l6ZSgpIDwgMTApIHsNCisJCQkJCWNvcmVHcm91cCA9IDM7DQorCQkJCX0NCisJCQkJZWxzZSBpZiAocHJvY2Vzc2luZ1VuaXRzLnNpemUoKSA+IDkgJiYgcHJvY2Vzc2luZ1VuaXRzLnNpemUoKSA8IDE3KSB7DQorCQkJCQljb3JlR3JvdXAgPSA0Ow0KKwkJCQl9DQorCQkJCWZ3LndyaXRlKCJcdGVfb3BlbigmZGV2LDAsMCwiICsgY29yZUdyb3VwICsgIiwiICsgY29yZUdyb3VwICsgIik7XG4iKTsNCisJCQkJLyogQ29yZSAxICovDQorCQkJCS8vIDAwDQorCQkJCS8qIENvcmUgMiAqLw0KKwkJCQkvLyAwMCAxMA0KKwkJCQkvLyAwMSAxMQ0KKwkJCQkvKiBDb3JlIDMgKi8NCisJCQkJLy8gMDAgMTAgMjANCisJCQkJLy8gMDEgMTEgMjENCisJCQkJLy8gMDIgMTIgMjINCisJCQkJLyogQ29yZSA0ICovDQorCQkJCS8vIDAwIDEwIDIwIDMwDQorCQkJCS8vIDAxIDExIDIxIDMxDQorCQkJCS8vIDAyIDEyIDIyIDMyDQorCQkJCS8vIDAzIDEzIDIzIDMzDQorDQorCQkJCWZ3LndyaXRlKCJcdGVfcmVzZXRfZ3JvdXAoJmRldik7XG4iKTsNCisJCQkJaW50IGsgPSAwOw0KKwkJCQlmaW5hbCBBcnJheUxpc3Q8U3RyaW5nPiByZXN1bHQgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisJCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhbFBVLnNpemUoKTsgaSsrKSB7DQorCQkJCQlmb3IgKGludCBqID0gMDsgaiA8IGxvY2FsUFUuc2l6ZSgpOyBqKyspIHsNCisJCQkJCQlpZiAoayA8IGxvY2FsUFUuc2l6ZSgpKSB7DQorCQkJCQkJCWZ3LndyaXRlKCJcdGVfcmV0dXJuX3N0YXRfdFx0cmVzdWx0IiArIGsgKyAiO1xuIik7DQorCQkJCQkJCWsrKzsNCisJCQkJCQl9DQorDQorCQkJCQl9DQorCQkJCX0NCisJCQkJaW50IGszID0gMDsNCisJCQkJZm9yIChpbnQgcm93Q29yZUdyb3VwID0gMDsgcm93Q29yZUdyb3VwIDwgbG9jYWxQVS5zaXplKCk7IHJvd0NvcmVHcm91cCsrKSB7DQorCQkJCQlmb3IgKGludCBjb2x1bW5Db3JlR3JvdXAgPSAwOyBjb2x1bW5Db3JlR3JvdXAgPCBsb2NhbFBVLnNpemUoKTsgY29sdW1uQ29yZUdyb3VwKyspIHsNCisJCQkJCQlpZiAoazMgPCBsb2NhbFBVLnNpemUoKSkgew0KKwkJCQkJCQlmdy53cml0ZSgiXHR1bnNpZ25lZCBpbnQgbWVzc2FnZSIgKyBrMyArICJbOV07XG4iKTsNCisJCQkJCQkJazMrKzsNCisJCQkJCQl9DQorCQkJCQl9DQorCQkJCX0NCisJCQkJaW50IGNvcmVJbmRleCA9IDA7DQorCQkJCWZvciAoaW50IHJvd0NvcmVHcm91cCA9IDA7IHJvd0NvcmVHcm91cCA8IGNvcmVHcm91cDsgcm93Q29yZUdyb3VwKyspIHsNCisJCQkJCWZvciAoaW50IGNvbHVtbkNvcmVHcm91cCA9IDA7IGNvbHVtbkNvcmVHcm91cCA8IGNvcmVHcm91cDsgY29sdW1uQ29yZUdyb3VwKyspIHsNCisJCQkJCQlpZiAoY29yZUluZGV4IDwgbG9jYWxQVS5zaXplKCkpIHsNCisJCQkJCQkJZncud3JpdGUoIlx0cmVzdWx0IiArIGNvcmVJbmRleCArICI9ICBlX2xvYWQoXCJtYWluIiArIGNvcmVJbmRleCArICIuZWxmXCIsJmRldiwiDQorCQkJCQkJCQkJKyByb3dDb3JlR3JvdXAgKyAiLCIgKyBjb2x1bW5Db3JlR3JvdXAgKyAiLEVfRkFMU0UpO1xuIik7DQorCQkJCQkJCXJlc3VsdC5hZGQoInJlc3VsdCIgKyBjb3JlSW5kZXggKyAiIT1FX09LIik7DQorCQkJCQkJCWNvcmVJbmRleCsrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlTdHJpbmcgcmVzdWx0RmluYWwgPSAiIjsNCisJCQkJZm9yIChpbnQgazIgPSAwOyBrMiA8IHJlc3VsdC5zaXplKCk7IGsyKyspIHsNCisJCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiU2l6ZSA9PT4gIityZXN1bHQuc2l6ZSgpKTsNCisJCQkJCXJlc3VsdEZpbmFsID0gcmVzdWx0RmluYWwgKyAocmVzdWx0LmdldChrMikgKyAifHwiKTsNCisJCQkJCWlmIChrMiA9PSAocmVzdWx0LnNpemUoKSAtIDIpKSB7DQorCQkJCQkJazIrKzsNCisJCQkJCQlyZXN1bHRGaW5hbCA9IHJlc3VsdEZpbmFsICsgcmVzdWx0LmdldChrMik7DQorCQkJCQkJYnJlYWs7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJY29yZUluZGV4ID0gMDsNCisJCQkJZm9yIChpbnQgcm93Q29yZUdyb3VwID0gMDsgcm93Q29yZUdyb3VwIDwgbG9jYWxQVS5zaXplKCkgJiByb3dDb3JlR3JvdXAgPCA0OyByb3dDb3JlR3JvdXArKykgew0KKwkJCQkJZm9yIChpbnQgY29sdW1uQ29yZSA9IDA7IGNvbHVtbkNvcmUgPCBsb2NhbFBVLnNpemUoKSAmIGNvbHVtbkNvcmUgPCA0OyBjb2x1bW5Db3JlKyspIHsNCisJCQkJCQlpZiAoY29yZUluZGV4IDwgbG9jYWxQVS5zaXplKCkpIHsNCisJCQkJCQkJaWYgKGNvcmVJbmRleCA9PSAwKSB7DQorCQkJCQkJCQlmdy53cml0ZSgiXHRpZiAocmVzdWx0IiArIGNvcmVJbmRleCArICIhPUVfT0spe1xuIik7DQorCQkJCQkJCX0NCisJCQkJCQkJZWxzZSB7DQorCQkJCQkJCQlmdy53cml0ZSgiXHRlbHNlIGlmIChyZXN1bHQiICsgY29yZUluZGV4ICsgIiE9RV9PSyl7XG4iKTsNCisJCQkJCQkJfQ0KKwkJCQkJCQlmdy53cml0ZSgiXHRcdGZwcmludGYoc3RkZXJyLFwiRXJyb3IgTG9hZGluZyB0aGUgRXBpcGhhbnkgQXBwbGljYXRpb24gIiArIGNvcmVJbmRleA0KKwkJCQkJCQkJCSsgIiAlaVxcblwiLCByZXN1bHQiICsgY29yZUluZGV4ICsgIik7Iik7DQorCQkJCQkJCWZ3LndyaXRlKCJcblx0fVxuIik7DQorCQkJCQkJCWNvcmVJbmRleCsrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXHRlX3N0YXJ0X2dyb3VwKCZkZXYpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGZwcmludGYoc3RkZXJyLFwiUk1TIE11bHRpY29yZSBvbiBGcmVlUlRPUyBzdGFydGVkIFxcblwiKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRhZGRyID0gY250X2FkZHJlc3M7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0aW50IHBvbGxMb29wQ291bnRlciA9IDA7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0aW50IHRhc2tNZXNzYWdlO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGludCBwcmV2dGFza01lc3NhZ2U7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0aW50IHByZXZwb2xsTG9vcENvdW50ZXIgPSAwO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGZvciAocG9sbExvb3BDb3VudGVyPTA7cG9sbExvb3BDb3VudGVyPD00MDtwb2xsTG9vcENvdW50ZXIrKyl7XG4iKTsNCisJCQkJY29yZUluZGV4ID0gMDsNCisJCQkJZm9yIChpbnQgcm93Q29yZUdyb3VwID0gMDsgcm93Q29yZUdyb3VwIDwgY29yZUdyb3VwOyByb3dDb3JlR3JvdXArKykgew0KKwkJCQkJZm9yIChpbnQgY29sdW1uQ29yZUdyb3VwID0gMDsgY29sdW1uQ29yZUdyb3VwIDwgY29yZUdyb3VwOyBjb2x1bW5Db3JlR3JvdXArKykgew0KKwkJCQkJCWlmIChjb3JlSW5kZXggPCBsb2NhbFBVLnNpemUoKSkgew0KKwkJCQkJCQlmdy53cml0ZSgiXHRcdGVfcmVhZCgmZGV2LCIgKyByb3dDb3JlR3JvdXAgKyAiLCIgKyBjb2x1bW5Db3JlR3JvdXAgKyAiLGFkZHIsICZtZXNzYWdlIg0KKwkJCQkJCQkJCSsgY29yZUluZGV4ICsgIiwgc2l6ZW9mKG1lc3NhZ2UiICsgY29yZUluZGV4ICsgIikpO1xuIik7DQorCQkJCQkJCWZ3LndyaXRlKCJcdFx0ZnByaW50ZihzdGRlcnIsIFwidGljazEgJTNkfHxcIixtZXNzYWdlIiArIGNvcmVJbmRleCArICJbOF0rMSk7XG4iKTsNCisJCQkJCQkJZncud3JpdGUoIlx0XHRmcHJpbnRmKHN0ZGVycixcInRhc2sgaG9sZGluZyBjb3JlIiArIGNvcmVJbmRleCArICIgJTJ1fHxcIiwgbWVzc2FnZSINCisJCQkJCQkJCQkrIGNvcmVJbmRleCArICJbNl0pO1xuIik7DQorCQkJCQkJCWNvcmVJbmRleCsrOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXHRcdGZwcmludGYoc3RkZXJyLFwiXFxuXCIpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdFx0dXNsZWVwKFJFQURfUFJFQ0lTSU9OX1VTKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHR9XG4iKTsNCisJCQkJZncud3JpdGUoIlx0ZnByaW50ZihzdGRlcnIsXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXCIpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGVfY2xvc2UoJmRldik7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0ZV9maW5hbGl6ZSgpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdGZwcmludGYoc3RkZXJyLFwiUk1TIE11bHRpY29yZSBvbiBGcmVlUlRPUyBDb21wbGV0ZSBcXG4gXCIpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdHJldHVybiAwO1xuIik7DQorCQkJCWZ3LndyaXRlKCJ9XG4iKTsNCisJCQkJZncuY2xvc2UoKTsNCisJCQl9DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBoZWFkZXIgaW5jbHVzaW9uIGZvciBhcm1Db2RlIGZpbGUNCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgaGVhZGVySW5jbHVkZXNBcm1Db2RlKGZpbmFsIEZpbGUgZmlsZSkgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIi8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqL1xuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRpby5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRsaWIuaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RyaW5nLmg+XG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHVuaXN0ZC5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxlLWhhbC5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDx0aW1lLmg+XG5cbiIpOw0KKwkJCWZ3LndyaXRlKCIvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJkZWJ1Z0ZsYWdzLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNkZWZpbmUgUkVBRF9QUkVDSVNJT05fVVMgMTAwMFxuXG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKw0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9GcmVlUlRPU0NvbmZpZ0ZpbGVDcmVhdGlvbi5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL0ZyZWVSVE9TQ29uZmlnRmlsZUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2ZkZjA0YgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9GcmVlUlRPU0NvbmZpZ0ZpbGVDcmVhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgQ29weXJpZ2h0IChjKSAyMDE5IERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyBhbmQgb3RoZXJzLg0KKyAqDQorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQorICogICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KKyAqICAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQorICoNCisgKiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQorICoNCisgKiAgIENvbnRyaWJ1dG9yczoNCisgKiAgICAgICBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbjsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BbWFsdGhlYTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLnV0aWxzLmZpbGVVdGlsOw0KKw0KKy8qKg0KKyAqIEltcGxlbWVudGF0aW9uIG9mIEZyZWVSVE9TIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIG1hY3Jvcy4NCisgKg0KKyAqDQorICovDQorcHVibGljIGNsYXNzIEZyZWVSVE9TQ29uZmlnRmlsZUNyZWF0aW9uIHsNCisJZmluYWwgcHJpdmF0ZSBBbWFsdGhlYSBtb2RlbDsNCisNCisJLyoqDQorCSAqIENvbnN0cnVjdG9yIEZyZWVSVE9TQ29uZmlnRmlsZUNyZWF0aW9uDQorCSAqDQorCSAqIEBwYXJhbSBNb2RlbA0KKwkgKiBAcGFyYW0gc3JjUGF0aA0KKwkgKiBAcGFyYW0gY29uZmlnRmxhZw0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlwdWJsaWMgRnJlZVJUT1NDb25maWdGaWxlQ3JlYXRpb24oZmluYWwgQW1hbHRoZWEgTW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBpbnQgY29uZmlnRmxhZykNCisJCQl0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJdGhpcy5tb2RlbCA9IE1vZGVsOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJGcmVlUlRPU0NvbmZpZyBGaWxlIENyZWF0aW9uIEJlZ2lucyIpOw0KKwkJZmlsZUNyZWF0ZSh0aGlzLm1vZGVsLCBzcmNQYXRoLCBjb25maWdGbGFnKTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbigiRnJlZVJUT1NDb25maWcgRmlsZSBDcmVhdGlvbiBFbmRzIik7DQorCX0NCisNCisJLyoqDQorCSAqIEZpbGVDcmVhdGlvbiBGcmVlUlRPU0NvbmZpZ0ZpbGVDcmVhdGlvbg0KKwkgKg0KKwkgKiBAcGFyYW0gbW9kZWwNCisJICogQHBhcmFtIHNyY1BhdGgNCisJICogQHBhcmFtIGNvbmZpZ0ZsYWcNCisJICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIGZpbGVDcmVhdGUoZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIFN0cmluZyBzcmNwYXRoLCBmaW5hbCBpbnQgY29uZmlnRmxhZykgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIFN0cmluZyBmbmFtZSA9IHNyY3BhdGggKyBGaWxlLnNlcGFyYXRvciArICJGcmVlUlRPU0NvbmZpZy5oIjsNCisJCWZpbmFsIEZpbGUgZjIgPSBuZXcgRmlsZShzcmNwYXRoKTsNCisJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZSk7DQorCQlmMi5ta2RpcnMoKTsNCisJCXRyeSB7DQorCQkJZjEuY3JlYXRlTmV3RmlsZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsNCisJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJfQ0KKw0KKwkJZmluYWwgRmlsZSBmbiA9IGYxOw0KKwkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQl0cnkgew0KKwkJCWZpbGVVdGlsLmZpbGVNYWluSGVhZGVyKGYxKTsNCisJCQlmaWxlVXRpbC5GcmVlUlRPU0NvbmZpZ0ZpbGVIZWFkZXIoZjEpOw0KKwkJCWhlYWRlckluY2x1ZGVzRnJlZVJUT1MobW9kZWwsIGYxLCBjb25maWdGbGFnKTsNCisJCX0NCisJCWZpbmFsbHkgew0KKwkJCXRyeSB7DQorCQkJCWZ3LmNsb3NlKCk7DQorCQkJfQ0KKwkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBNYWNybyBmcmFtZXdvcmsgYW5kIGRlZmluaXRpb24uDQorCSAqDQorCSAqIEBwYXJhbSBtb2RlbA0KKwkgKiBAcGFyYW0gZmlsZQ0KKwkgKiBAcGFyYW0gY29uZmlnRmxhZw0KKwkgKi8NCisJcHVibGljIHN0YXRpYyB2b2lkIGhlYWRlckluY2x1ZGVzRnJlZVJUT1MoZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIEZpbGUgZmlsZSwgZmluYWwgaW50IGNvbmZpZ0ZsYWcpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZpbmFsIGludCBjb25zdHZhbCA9IDE7DQorCQkJZmluYWwgaW50IHRhc2tTaXplID0gbW9kZWwuZ2V0U3dNb2RlbCgpLmdldFRhc2tzKCkuc2l6ZSgpOw0KKwkJCWZ3LndyaXRlKCJcdCNpZm5kZWYgRlJFRVJUT1NfQ09ORklHX0hcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgRlJFRVJUT1NfQ09ORklHX0hcbiIpOw0KKwkJCWZ3LndyaXRlKCIvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZGVmaW5lIGNvbmZpZ0NBTExfU1RBQ0tfU0laRQkJCTB4NTBcbiIpOw0KKwkJCWlmICgweDAwMjAgPT0gKGNvbmZpZ0ZsYWcgJiAweDAwRjApKSB7DQorCQkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgY29uZmlnVVNFX1BSRUVNUFRJT04JCTFcbiIpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJZncud3JpdGUoIlx0I2RlZmluZSBjb25maWdVU0VfUFJFRU1QVElPTgkJMFxuIik7DQorCQkJfQ0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgY29uZmlnVVNFX1RJTUVfU0xJQ0lORwkJCTBcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgY29uZmlnVVNFX0lETEVfSE9PSwkJCQkwXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZGVmaW5lIGNvbmZpZ1VTRV9USUNLX0hPT0sJCQkJMFxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBjb25maWdDUFVfQ0xPQ0tfSFoJCQkJKCAoIHVuc2lnbmVkIGxvbmcgKSA3MDAwMDAwMDAgKVxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBjb25maWdUSUNLX1JBVEVfSFoJCQkJKCAoIFRpY2tUeXBlX3QgKSAxMDAwIClcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgY29uZmlnTUFYX1BSSU9SSVRJRVMJCQkoICggdW5zaWduZWQgcG9ydEJBU0VfVFlQRSApICIgKyAodGFza1NpemUgKyBjb25zdHZhbCkNCisJCQkJCSsgIiApXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZGVmaW5lIGNvbmZpZ01JTklNQUxfU1RBQ0tfU0laRQkJKCAoIHVuc2lnbmVkIHNob3J0ICkgMHgyMDApIC8vNTEyIHdvcmRzXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZGVmaW5lIGNvbmZpZ1RPVEFMX0hFQVBfU0laRQkJCSggKCBzaXplX3QgKSAoIDEwNDUwICkgKVxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBjb25maWdNQVhfVEFTS19OQU1FX0xFTgkJCSggMTI4IClcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgY29uZmlnVVNFX1RSQUNFX0ZBQ0lMSVRZICAgIAkwXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZGVmaW5lIGNvbmZpZ1VTRV8xNl9CSVRfVElDS1MgICAgICAJMVxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBjb25maWdJRExFX1NIT1VMRF9ZSUVMRAkJCTBcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgY29uZmlnVVNFX0FMVEVSTkFUSVZFX0FQSQkJMFxuIik7DQorCQkJZncud3JpdGUoIi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgY29uZmlnVVNFX0NPX1JPVVRJTkVTCQkJMFxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBjb25maWdNQVhfQ09fUk9VVElORV9QUklPUklUSUVTICggMiApXG4iKTsNCisJCQlmdy53cml0ZSgiLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBJTkNMVURFX3ZUYXNrUHJpb3JpdHlTZXQgICAgICAgIAkwXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZGVmaW5lIElOQ0xVREVfdXhUYXNrUHJpb3JpdHlHZXQgICAgICAgCTBcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgSU5DTFVERV92VGFza0RlbGV0ZSAgICAgICAgICAgICAJMFxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBJTkNMVURFX3ZUYXNrQ2xlYW5VcFJlc291cmNlcyAgIAkwXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZGVmaW5lIElOQ0xVREVfdlRhc2tTdXNwZW5kICAgICAgICAgICAgCTFcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgSU5DTFVERV92VGFza0RlbGF5VW50aWwJCQkJMVxuIik7DQorCQkJZncud3JpdGUoIlx0I2RlZmluZSBJTkNMVURFX3ZUYXNrRGVsYXkJCQkJCTFcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgSU5DTFVERV94VGFza0dldEN1cnJlbnRUYXNrSGFuZGxlCTFcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgSU5DTFVERV9wY1Rhc2tHZXRUYXNrTmFtZSAJCQkxXG4iKTsNCisJCQlmdy53cml0ZSgiXG5cdCNkZWZpbmUgQzJDX01TR19UWVBFIGludAkJXG4iKTsNCisJCQlmdy53cml0ZSgiXHQjZW5kaWZcbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9MYWJlbEZpbGVDcmVhdGlvbi5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL0xhYmVsRmlsZUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWJiZDA5YgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9MYWJlbEZpbGVDcmVhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNDE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuCisgKgorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiAgIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICoKKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqCisgKiAgIENvbnRyaWJ1dG9yczoKKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUHJvY2Vzc2luZ1VuaXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlJ1bm5hYmxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5TY2hlZHVsZXJBbGxvY2F0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLkRlcGxveW1lbnRVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLlNvZnR3YXJlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udXRpbHMuZmlsZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworCisvKioKKyAqIERlY2xhcmF0aW9uIG9mIExhYmVscyB3aXRoIGluaXRpYWwgdmFsdWVzIC4KKyAqCisgKgorICovCisKKy8qKgorICogQGF1dGhvciBycHJhcworICoKKyAqLworcHVibGljIGNsYXNzIExhYmVsRmlsZUNyZWF0aW9uIHsKKwlmaW5hbCBwcml2YXRlIEFtYWx0aGVhIG1vZGVsOworCisJLyoqCisJICogQ29uc3RydWN0b3IgTGFiZWxGaWxlQ3JlYXRpb24KKwkgKgorCSAqIEBwYXJhbSBNb2RlbAorCSAqICAgICAgICAgICAgQW1hbHRoZWEgTW9kZWwKKwkgKiBAcGFyYW0gc3JjUGF0aAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgTGFiZWxGaWxlQ3JlYXRpb24oZmluYWwgQW1hbHRoZWEgTW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzLm1vZGVsID0gTW9kZWw7CisJCVN5c3RlbS5vdXQucHJpbnRsbigiTGFiZWwgRmlsZSBDcmVhdGlvbiBCZWdpbnMiKTsKKwkJZmlsZUNyZWF0ZSh0aGlzLm1vZGVsLCBzcmNQYXRoKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJMYWJlbCBGaWxlIENyZWF0aW9uIEVuZHMiKTsKKwl9CisKKwkvKioKKwkgKiBGaWxlQ3JlYXRpb24gTGFiZWxGaWxlQ3JlYXRpb24KKwkgKgorCSAqIEBwYXJhbSBtb2RlbAorCSAqIEBwYXJhbSBzcmNQYXRoCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgZmlsZUNyZWF0ZShmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgU3RyaW5nIHNyY1BhdGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZpbmFsIEVMaXN0PFNjaGVkdWxlckFsbG9jYXRpb24+IENvcmVObyA9IG1vZGVsLmdldE1hcHBpbmdNb2RlbCgpLmdldFNjaGVkdWxlckFsbG9jYXRpb24oKTsKKwkJaW50IGsgPSAwOworCQlmb3IgKGZpbmFsIFNjaGVkdWxlckFsbG9jYXRpb24gYyA6IENvcmVObykgeworCQkJZmluYWwgUHJvY2Vzc2luZ1VuaXQgcHUgPSBjLmdldFJlc3BvbnNpYmlsaXR5KCkuZ2V0KDApOworCQkJZmluYWwgU2V0PFRhc2s+IHRhc2sgPSBEZXBsb3ltZW50VXRpbC5nZXRUYXNrc01hcHBlZFRvQ29yZShwdSwgbW9kZWwpOworCQkJZmluYWwgTGlzdDxUYXNrPiB0YXNrcyA9IG5ldyBBcnJheUxpc3Q8VGFzaz4odGFzayk7CisJCQlmaW5hbCBMaXN0PExhYmVsPiBsYWJlbENvcmVDb21tb25MaXN0ID0gZmlsZVV0aWwuQ29yZVNwZWNpZmljTGFiZWwobW9kZWwsIHRhc2tzKTsKKwkJCWZpbmFsIExpc3Q8TGFiZWw+IHNoYXJlZExhYmVsTGlzdCA9IGZpbGVVdGlsLlNoYXJlZExhYmVsRGVjbGFyYXRpb25IZWFkKG1vZGVsLCB0YXNrcyk7CisJCQlmaW5hbCBTdHJpbmcgZm5hbWUxID0gc3JjUGF0aCArIEZpbGUuc2VwYXJhdG9yICsgImxhYmVsIiArIGsgKyAiLmMiOworCQkJZmluYWwgU3RyaW5nIGZuYW1lMiA9IHNyY1BhdGggKyBGaWxlLnNlcGFyYXRvciArICJsYWJlbCIgKyBrICsgIi5oIjsKKwkJCWZpbmFsIEZpbGUgZjIgPSBuZXcgRmlsZShzcmNQYXRoKTsKKwkJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZTEpOworCQkJZmluYWwgRmlsZSBmMyA9IG5ldyBGaWxlKGZuYW1lMik7CisJCQlmMi5ta2RpcnMoKTsKKwkJCXRyeSB7CisJCQkJZjEuY3JlYXRlTmV3RmlsZSgpOworCQkJfQorCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCQlmaW5hbCBGaWxlIGZuID0gZjE7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsKKwkJCXRyeSB7CisJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjEpOworCQkJCWxhYmVsRmlsZUhlYWRlcihmMSk7CisJCQkJaGVhZGVySW5jbHVkZXNMYWJlbEhlYWQoZjEsIGspOworCQkJCUxhYmVsRGVjbGFyYXRpb24oZjEsIHRhc2tzLCBsYWJlbENvcmVDb21tb25MaXN0KTsKKwkJCQlMYWJlbERlY2xhcmF0aW9uTG9jYWwoZjEsIHRhc2tzLCBsYWJlbENvcmVDb21tb25MaXN0LCBzaGFyZWRMYWJlbExpc3QpOworCQkJfQorCQkJZmluYWxseSB7CisJCQkJdHJ5IHsKKwkJCQkJZncuY2xvc2UoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQl9CisJCQl9CisKKwkJCXRyeSB7CisJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjMpOworCQkJCWxhYmVsRmlsZUhlYWRlcihmMyk7CisJCQkJaGVhZGVySW5jbHVkZXNMYWJlbChmMyk7CisJCQkJTGFiZWxEZWNsYXJhdGlvbkxvY2FsSGVhZGVyKGYzLCB0YXNrcywgbGFiZWxDb3JlQ29tbW9uTGlzdCk7CisJCQl9CisJCQlmaW5hbGx5IHsKKwkJCQl0cnkgeworCQkJCQlmdy5jbG9zZSgpOworCQkJCX0KKwkJCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0KKworCQkJaysrOworCQl9CisJfQorCisJLyoqCisJICogVGl0bGUgY2FyZCAtIExhYmVsRmlsZUNyZWF0aW9uCisJICoKKwkgKiBAcGFyYW0gZmlsZQorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgbGFiZWxGaWxlSGVhZGVyKGZpbmFsIEZpbGUgZmlsZSkgeworCQl0cnkgeworCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsKKwkJCWZ3LndyaXRlKCIqVGl0bGUgCQk6ICAgTGFiZWwgRGVjbGFyYXRpb25cbiIpOworCQkJZncud3JpdGUoIipEZXNjcmlwdGlvbgk6CURlY2xhcmF0aW9uIGFuZCBJbml0aWFsaXNhdGlvbiBvZiBMYWJlbFxuIik7CisJCQlmdy53cml0ZSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwkJCWZ3LndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuIik7CisKKwkJCWZ3LmNsb3NlKCk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOworCQl9CisKKwl9CisKKwkvKioKKwkgKiBIZWFkZXIgaW5jbHVzaW9uIC0gTGFiZWxGaWxlQ3JlYXRpb24KKwkgKgorCSAqIEBwYXJhbSBmaWxlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBoZWFkZXJJbmNsdWRlc0xhYmVsKGZpbmFsIEZpbGUgZmlsZSkgeworCQl0cnkgeworCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsKKwkJCWZ3LndyaXRlKCIvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi9cbiIpOworCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRpby5oPlxuIik7CisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGludC5oPlxuIik7CisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0cmluZy5oPlxuXG4iKTsKKwkJCWZ3LndyaXRlKCIvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovXG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcInNoYXJlZF9jb21tcy5oXCJcbiIpOworCQkJZncuY2xvc2UoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisJCX0KKworCX0KKworCS8qKgorCSAqIEhlYWRlciBpbmNsdXNpb24gLSBMYWJlbEZpbGVDcmVhdGlvbgorCSAqCisJICogQHBhcmFtIGZpbGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGhlYWRlckluY2x1ZGVzTGFiZWxIZWFkKGZpbmFsIEZpbGUgZmlsZSwgZmluYWwgaW50IGspIHsKKwkJdHJ5IHsKKwkJCWZpbmFsIEZpbGUgZm4gPSBmaWxlOworCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikKKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7CisJCQlmdy53cml0ZSgiLyogU3RhbmRhcmQgaW5jbHVkZXMuICovXG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkaW8uaD5cbiIpOworCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRpbnQuaD5cbiIpOworCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdHJpbmcuaD5cblxuIik7CisJCQlmdy53cml0ZSgiLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqL1xuIik7CisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJzaGFyZWRfY29tbXMuaFwiXG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcImxhYmVsIiArIGsgKyAiLmhcIlxuXG4iKTsKKwkJCWZ3LmNsb3NlKCk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOworCQl9CisKKwl9CisKKworCS8qKgorCSAqIExhYmVsIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHN0cnVjdHVyZS4KKwkgKgorCSAqIEBwYXJhbSBmaWxlCisJICogQHBhcmFtIHRhc2tzCisJICogQHBhcmFtIGxhYmVsbGlzdAorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgTGFiZWxEZWNsYXJhdGlvbihmaW5hbCBGaWxlIGZpbGUsIGZpbmFsIExpc3Q8VGFzaz4gdGFza3MsIGZpbmFsIExpc3Q8TGFiZWw+IGxhYmVsbGlzdCkgeworCQl0cnkgeworCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsKKwkJCWxhYmVsbGlzdC5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisJCQlmb3IgKGZpbmFsIExhYmVsIGxhYmVsIDogbGFiZWxsaXN0KSB7CisJCQkJZmluYWwgU3RyaW5nIHR5cGUgPSBmaWxlVXRpbC5kYXRhdHlwZShsYWJlbC5nZXRTaXplKCkudG9TdHJpbmcoKSk7CisJCQkJZmluYWwgbG9uZyBpbml0ID0gZmlsZVV0aWwuaW50aWFsaXNhdGlvbihsYWJlbC5nZXRTaXplKCkudG9TdHJpbmcoKSk7CisJCQkJZncud3JpdGUoIlx0IiArIHR5cGUgKyAiCSIgKyBsYWJlbC5nZXROYW1lKCkgKyAiIFx0PVx0ICIgKyBpbml0ICsgIjtcbiIpOworCQkJfQorCisJCQlmdy53cml0ZSgiXG5cblxuXG4iKTsKKwkJCWZ3LmNsb3NlKCk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOworCQl9CisKKwl9CisKKwkvKioKKwkgKiBMb2NhbCBsYWJlbCBkZWZpbml0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJ1Y3R1cmUuIFRhc2sgc3BlY2lmaWMgbG9jYWwKKwkgKiBsYWJlbHMgYXJlIGRlZmluZWQgdG8gcGVyZm9ybSBDaW4gYW5kIENvdXQgb3BlcmF0aW9uLgorCSAqCisJICogQHBhcmFtIGZpbGUKKwkgKiBAcGFyYW0gdGFza3MKKwkgKiBAcGFyYW0gc2hhcmVkTGFiZWxMaXN0CisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBMYWJlbERlY2xhcmF0aW9uTG9jYWwoZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzLAorCQkJZmluYWwgTGlzdDxMYWJlbD4gbGFiZWxDb3JlQ29tbW9uTGlzdCwgZmluYWwgTGlzdDxMYWJlbD4gc2hhcmVkTGFiZWxMaXN0KSB7CisJCXRyeSB7CisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOworCQkJZm9yIChmaW5hbCBUYXNrIHRhc2sgOiB0YXNrcykgeworCQkJCUxpc3Q8UnVubmFibGU+IHJ1bm5hYmxlc09mVGFzayA9IFNvZnR3YXJlVXRpbC5nZXRSdW5uYWJsZUxpc3QodGFzaywgbnVsbCk7CisJCQkJZmluYWwgQXJyYXlMaXN0PExhYmVsPiBsYWJlbGxpc3QxID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsKKwkJCQlydW5uYWJsZXNPZlRhc2sgPSBydW5uYWJsZXNPZlRhc2suc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCQkJCWZvciAoZmluYWwgUnVubmFibGUgcnVuIDogcnVubmFibGVzT2ZUYXNrKSB7CisJCQkJCWZpbmFsIFNldDxMYWJlbD4gbGFiZWxsaXN0ID0gU29mdHdhcmVVdGlsLmdldEFjY2Vzc2VkTGFiZWxTZXQocnVuLCBudWxsKTsKKwkJCQkJbGFiZWxsaXN0MS5hZGRBbGwobGFiZWxsaXN0KTsKKwkJCQl9CisJCQkJZmluYWwgTGlzdDxMYWJlbD4gbGlzdFdpdGhvdXREdXBsaWNhdGVzMiA9IGxhYmVsbGlzdDEuc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCQkJCWZpbmFsIFNldDxMYWJlbD4gVGFza0xhYmVsID0gU29mdHdhcmVVdGlsLmdldEFjY2Vzc2VkTGFiZWxTZXQodGFzaywgbnVsbCk7CisJCQkJZncud3JpdGUoIlxuIC8vbG9jYWwgdmFyaWFibGUgZm9yICIgKyB0YXNrLmdldE5hbWUoKSArICJcbiIpOworCQkJCWZvciAoZmluYWwgTGFiZWwgbGFiIDogbGlzdFdpdGhvdXREdXBsaWNhdGVzMikgeworCQkJCQlpZiAoKFRhc2tMYWJlbC5jb250YWlucyhsYWIpKSAmJiAhKHNoYXJlZExhYmVsTGlzdC5jb250YWlucyhsYWIpKQorCQkJCQkJCSYmIChsYWJlbENvcmVDb21tb25MaXN0LmNvbnRhaW5zKGxhYikpKSB7CisJCQkJCQlmaW5hbCBTdHJpbmcgdHlwZSA9IGZpbGVVdGlsLmRhdGF0eXBlKGxhYi5nZXRTaXplKCkudG9TdHJpbmcoKSk7CisJCQkJCQlmaW5hbCBsb25nIGluaXQgPSBmaWxlVXRpbC5pbnRpYWxpc2F0aW9uKGxhYi5nZXRTaXplKCkudG9TdHJpbmcoKSk7CisJCQkJCQlmdy53cml0ZSgiXHRcdCIgKyB0eXBlICsgIlx0IiArIGxhYi5nZXROYW1lKCkgKyAiXyIgKyB0YXNrLmdldE5hbWUoKSArICJcdD1cdCIgKyBpbml0ICsgIjtcbiIpOworCQkJCQl9CisJCQkJfQorCQkJCWZ3LndyaXRlKCJcbiAvL1NoYXJlZCBsYWJlbCBcbiIpOworCQkJCWZvciAoZmluYWwgTGFiZWwgbGFiIDogc2hhcmVkTGFiZWxMaXN0KSB7CisJCQkJCWlmIChUYXNrTGFiZWwuY29udGFpbnMobGFiKSkgeworCQkJCQkJZmluYWwgU3RyaW5nIHR5cGUgPSBmaWxlVXRpbC5kYXRhdHlwZShsYWIuZ2V0U2l6ZSgpLnRvU3RyaW5nKCkpOworCQkJCQkJZmluYWwgbG9uZyBpbml0ID0gZmlsZVV0aWwuaW50aWFsaXNhdGlvbihsYWIuZ2V0U2l6ZSgpLnRvU3RyaW5nKCkpOworCQkJCQkJZncud3JpdGUoCisJCQkJCQkJCSJcdFx0IiArIHR5cGUgKyAiXHQiICsgbGFiLmdldE5hbWUoKSArICJfIiArIHRhc2suZ2V0TmFtZSgpICsgIiBcdD1cdCAiICsgaW5pdCArICI7XG4iKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlmaW5hbCBTZXQ8TGFiZWw+IHJlYWRMYWJlbHMgPSBTb2Z0d2FyZVV0aWwuZ2V0UmVhZExhYmVsU2V0KHRhc2ssIG51bGwpOworCQkJCWZpbmFsIFNldDxMYWJlbD4gd3JpdGVMYWJlbHMgPSBTb2Z0d2FyZVV0aWwuZ2V0V3JpdGVMYWJlbFNldCh0YXNrLCBudWxsKTsKKwkJCQlmdy53cml0ZSgiXG5cdHZvaWQgY0lOXyIgKyB0YXNrLmdldE5hbWUoKSArICIoKVxuXHR7XG4iKTsKKwkJCQlMaXN0PFN0cmluZz4gcmVhZExhYmVsVHlwZSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworCQkJCWZpbmFsIEhhc2hNYXA8U3RyaW5nLCBIYXNoTWFwPExhYmVsLCBJbnRlZ2VyPj4gU2hhcmVkTGFiZWxUeXBlTWFwSW5kZXhlZCA9IG5ldyBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxMYWJlbCwgSW50ZWdlcj4+KCk7CisJCQkJZm9yIChmaW5hbCBMYWJlbCBzaGFyZSA6IHNoYXJlZExhYmVsTGlzdCkgeworCQkJCQlmaW5hbCBTdHJpbmcgdHlwZSA9IHNoYXJlLmdldFNpemUoKS50b1N0cmluZygpOworCQkJCQlyZWFkTGFiZWxUeXBlLmFkZCh0eXBlKTsKKwkJCQl9CisJCQkJcmVhZExhYmVsVHlwZSA9IHJlYWRMYWJlbFR5cGUuc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCQkJCWZvciAoZmluYWwgU3RyaW5nIHJMVCA6IHJlYWRMYWJlbFR5cGUpIHsKKworCQkJCQlmaW5hbCBIYXNoTWFwPExhYmVsLCBJbnRlZ2VyPiBTaGFyZWRMYWJlbFR5cGVNYXAgPSBuZXcgSGFzaE1hcDxMYWJlbCwgSW50ZWdlcj4oKTsKKwkJCQkJaW50IGsgPSAwOworCQkJCQlmb3IgKGZpbmFsIExhYmVsIHNoYXJlIDogc2hhcmVkTGFiZWxMaXN0KSB7CisJCQkJCQlmaW5hbCBTdHJpbmcgdHlwZSA9IHNoYXJlLmdldFNpemUoKS50b1N0cmluZygpOworCQkJCQkJaWYgKHR5cGUuZXF1YWxzKHJMVCkpIHsKKwkJCQkJCQlTaGFyZWRMYWJlbFR5cGVNYXAucHV0KHNoYXJlLCBuZXcgSW50ZWdlcihrKSk7CisJCQkJCQkJaysrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCVNoYXJlZExhYmVsVHlwZU1hcEluZGV4ZWQucHV0KHJMVCwgU2hhcmVkTGFiZWxUeXBlTWFwKTsKKwkJCQl9CisJCQkJSGFzaE1hcDxMYWJlbCwgSW50ZWdlcj4gTGFiZWxJbmRleGVkVHlwZSA9IG5ldyBIYXNoTWFwPExhYmVsLCBJbnRlZ2VyPigpOworCQkJCWZvciAoZmluYWwgU3RyaW5nIHJMVCA6IHJlYWRMYWJlbFR5cGUpIHsKKwkJCQkJTGFiZWxJbmRleGVkVHlwZSA9IFNoYXJlZExhYmVsVHlwZU1hcEluZGV4ZWQuZ2V0KHJMVCk7CisJCQkJCWZvciAoZmluYWwgTGFiZWwgc2hhcmUgOiBzaGFyZWRMYWJlbExpc3QpIHsKKwkJCQkJCWZpbmFsIFN0cmluZyB0eXBlID0gc2hhcmUuZ2V0U2l6ZSgpLnRvU3RyaW5nKCk7CisJCQkJCQlpZiAoKHR5cGUuZXF1YWxzKHJMVCkpICYgKHJlYWRMYWJlbHMuY29udGFpbnMoc2hhcmUpKSkgeworCQkJCQkJCWZ3LndyaXRlKCJcdFx0IiArIHNoYXJlLmdldE5hbWUoKSArICJfIiArIHRhc2suZ2V0TmFtZSgpICsgIlx0PVx0c2hhcmVkX2xhYmVsXyIKKwkJCQkJCQkJCSsgdHlwZS5yZXBsYWNlKCIgIiwgIiIpICsgIl9yZWFkKCIgKyBMYWJlbEluZGV4ZWRUeXBlLmdldChzaGFyZSkgKyAiKTtcbiIpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWZvciAoZmluYWwgTGFiZWwgbGFiIDogbGlzdFdpdGhvdXREdXBsaWNhdGVzMikgeworCQkJCQlpZiAobGFiZWxDb3JlQ29tbW9uTGlzdC5jb250YWlucyhsYWIpKSB7CisJCQkJCQlmdy53cml0ZSgiXHRcdCIgKyBsYWIuZ2V0TmFtZSgpICsgIl8iICsgdGFzay5nZXROYW1lKCkgKyAiXHQ9XHQiICsgbGFiLmdldE5hbWUoKSArICI7XG4iKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlmdy53cml0ZSgiXHR9XG4iKTsKKwkJCQlmdy53cml0ZSgiXG5cdHZvaWQgY09VVF8iICsgdGFzay5nZXROYW1lKCkgKyAiKClcblx0e1xuIik7CisJCQkJZmluYWwgQXJyYXlMaXN0PExhYmVsPiBsYWJlbGxpc3QyID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsKKwkJCQlydW5uYWJsZXNPZlRhc2sgPSBydW5uYWJsZXNPZlRhc2suc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCQkJCWZvciAoZmluYWwgUnVubmFibGUgcnVuIDogcnVubmFibGVzT2ZUYXNrKSB7CisJCQkJCWZpbmFsIFNldDxMYWJlbD4gbGFiZWxsaXN0ID0gU29mdHdhcmVVdGlsLmdldFdyaXRlTGFiZWxTZXQocnVuLCBudWxsKTsKKwkJCQkJbGFiZWxsaXN0Mi5hZGRBbGwobGFiZWxsaXN0KTsKKwkJCQl9CisJCQkJZmluYWwgTGlzdDxMYWJlbD4gbGlzdFdpdGhvdXREdXBsaWNhdGVzMSA9IGxhYmVsbGlzdDIuc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCQkJCWZvciAoZmluYWwgTGFiZWwgbGFiIDogbGlzdFdpdGhvdXREdXBsaWNhdGVzMSkgeworCQkJCQlpZiAobGFiZWxDb3JlQ29tbW9uTGlzdC5jb250YWlucyhsYWIpICYgKHdyaXRlTGFiZWxzLmNvbnRhaW5zKGxhYikpKSB7CisJCQkJCQlmdy53cml0ZSgiXHRcdCIgKyBsYWIuZ2V0TmFtZSgpICsgIlx0PVx0IiArIGxhYi5nZXROYW1lKCkgKyAiXyIgKyB0YXNrLmdldE5hbWUoKSArICI7XG4iKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlIYXNoTWFwPExhYmVsLCBJbnRlZ2VyPiBMYWJlbFdyaXRlSW5kZXhlZFR5cGUgPSBuZXcgSGFzaE1hcDxMYWJlbCwgSW50ZWdlcj4oKTsKKwkJCQlmb3IgKGZpbmFsIFN0cmluZyByTFQgOiByZWFkTGFiZWxUeXBlKSB7CisJCQkJCUxhYmVsV3JpdGVJbmRleGVkVHlwZSA9IFNoYXJlZExhYmVsVHlwZU1hcEluZGV4ZWQuZ2V0KHJMVCk7CisJCQkJCWZvciAoZmluYWwgTGFiZWwgc2hhcmUgOiBzaGFyZWRMYWJlbExpc3QpIHsKKwkJCQkJCWZpbmFsIFN0cmluZyB0eXBlID0gc2hhcmUuZ2V0U2l6ZSgpLnRvU3RyaW5nKCk7CisJCQkJCQlpZiAoKHR5cGUuZXF1YWxzKHJMVCkpICYgKHdyaXRlTGFiZWxzLmNvbnRhaW5zKHNoYXJlKSkpIHsKKwkJCQkJCQlmdy53cml0ZSgiXHRcdCIgKyBzaGFyZS5nZXROYW1lKCkgKyAiXyIgKyB0YXNrLmdldE5hbWUoKSArICIrKztcbiIpOworCQkJCQkJCWZ3LndyaXRlKCJcdFx0c2hhcmVkX2xhYmVsXyIgKyB0eXBlLnJlcGxhY2UoIiAiLCAiIikgKyAiX3dyaXRlKCIKKwkJCQkJCQkJCSsgTGFiZWxXcml0ZUluZGV4ZWRUeXBlLmdldChzaGFyZSkgKyAiLCIgKyBzaGFyZS5nZXROYW1lKCkgKyAiXyIgKyB0YXNrLmdldE5hbWUoKQorCQkJCQkJCQkJKyAiICk7XG4iKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCQlmdy53cml0ZSgiXHR9XG4iKTsKKwkJCQlmdy53cml0ZSgiXG5cbiIpOworCQkJfQorCQkJZncuY2xvc2UoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIExhYmVsRGVjbGFyYXRpb25Mb2NhbEhlYWRlcihmaW5hbCBGaWxlIGZpbGUsIGZpbmFsIExpc3Q8VGFzaz4gdGFza3MsCisJCQlmaW5hbCBMaXN0PExhYmVsPiBsYWJlbExpc3QpIHsKKwkJdHJ5IHsKKwkJCWZpbmFsIEZpbGUgZm4gPSBmaWxlOworCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikKKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7CisJCQlmb3IgKGZpbmFsIFRhc2sgdGFzayA6IHRhc2tzKSB7CisJCQkJTGlzdDxSdW5uYWJsZT4gcnVubmFibGVzT2ZUYXNrID0gU29mdHdhcmVVdGlsLmdldFJ1bm5hYmxlTGlzdCh0YXNrLCBudWxsKTsKKwkJCQlmaW5hbCBBcnJheUxpc3Q8TGFiZWw+IGxhYmVsbGlzdDEgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOworCQkJCXJ1bm5hYmxlc09mVGFzayA9IHJ1bm5hYmxlc09mVGFzay5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisJCQkJZm9yIChmaW5hbCBSdW5uYWJsZSBydW4gOiBydW5uYWJsZXNPZlRhc2spIHsKKwkJCQkJZmluYWwgU2V0PExhYmVsPiBsYWJlbGxpc3QgPSBTb2Z0d2FyZVV0aWwuZ2V0QWNjZXNzZWRMYWJlbFNldChydW4sIG51bGwpOworCQkJCQlsYWJlbGxpc3QxLmFkZEFsbChsYWJlbGxpc3QpOworCQkJCX0KKwkJCQlmdy53cml0ZSgiXG5cdHZvaWQgY0lOXyIgKyB0YXNrLmdldE5hbWUoKSArICIoKTsiKTsKKwkJCQlmdy53cml0ZSgiXG5cdHZvaWQgY09VVF8iICsgdGFzay5nZXROYW1lKCkgKyAiKCk7Iik7CisJCQl9CisJCQlmdy5jbG9zZSgpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCX0KKworCXB1YmxpYyBzdGF0aWMgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxGaW5kZXIoZmluYWwgQW1hbHRoZWEgbW9kZWwpIHsKKwkJZmluYWwgRUxpc3Q8VGFzaz4gdGFza3MgPSBtb2RlbC5nZXRTd01vZGVsKCkuZ2V0VGFza3MoKTsKKwkJZmluYWwgQXJyYXlMaXN0PExhYmVsPiBsYWJlbENvbWJpbmVkID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsKKwkJZmluYWwgQXJyYXlMaXN0PExhYmVsPiBsYWJlbE9obmVEdXBsaWNhdGUgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOworCQlmb3IgKGZpbmFsIFRhc2sgdGFzayA6IHRhc2tzKSB7CisJCQlmaW5hbCBTZXQ8TGFiZWw+IGxhYmVsbGlzdCA9IFNvZnR3YXJlVXRpbC5nZXRBY2Nlc3NlZExhYmVsU2V0KHRhc2ssIG51bGwpOworCQkJbGFiZWxDb21iaW5lZC5hZGRBbGwobGFiZWxsaXN0KTsKKwkJfQorCQlmaW5hbCBTZXQ8TGFiZWw+IHVuaXF1ZXMgPSBuZXcgSGFzaFNldDw+KCk7CisJCWZvciAoZmluYWwgTGFiZWwgdCA6IGxhYmVsQ29tYmluZWQpIHsKKwkJCWlmICghdW5pcXVlcy5hZGQodCkpIHsKKwkJCQlsYWJlbE9obmVEdXBsaWNhdGUuYWRkKHQpOworCQkJfQorCQl9CisJCWZpbmFsIExpc3Q8TGFiZWw+IHNoYXJlZExhYmVsTGlzdCA9IGxhYmVsT2huZUR1cGxpY2F0ZS5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisJCXJldHVybiBzaGFyZWRMYWJlbExpc3Q7CisJfQorCisJQFN1cHByZXNzV2FybmluZ3MoIm51bGwiKQorCXB1YmxpYyBzdGF0aWMgSGFzaE1hcDxMYWJlbCwgSGFzaE1hcDxUYXNrLCBQcm9jZXNzaW5nVW5pdD4+IExhYmVsVGFza01hcChmaW5hbCBBbWFsdGhlYSBtb2RlbCwKKwkJCWZpbmFsIExpc3Q8TGFiZWw+IGxhYmVsTGlzdCkgeworCQlmaW5hbCBFTGlzdDxUYXNrPiB0YXNrcyA9IG1vZGVsLmdldFN3TW9kZWwoKS5nZXRUYXNrcygpOworCQlmaW5hbCBIYXNoTWFwPExhYmVsLCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0Pj4gbG9jYWxMYWJlbEFsbG9jYXRpb24gPSBuZXcgSGFzaE1hcDxMYWJlbCwgSGFzaE1hcDxUYXNrLCBQcm9jZXNzaW5nVW5pdD4+KCk7CisKKwkJZm9yIChmaW5hbCBMYWJlbCBsYWJlbCA6IGxhYmVsTGlzdCkgeworCQkJZmluYWwgSGFzaE1hcDxUYXNrLCBQcm9jZXNzaW5nVW5pdD4gbG9jYWxBbGxvY2F0aW9uID0gbmV3IEhhc2hNYXA8VGFzaywgUHJvY2Vzc2luZ1VuaXQ+KCk7CisJCQlmb3IgKGZpbmFsIFRhc2sgdGFzayA6IHRhc2tzKSB7CisJCQkJZmluYWwgUHJvY2Vzc2luZ1VuaXQgcHUgPSBEZXBsb3ltZW50VXRpbC5nZXRBc3NpZ25lZENvcmVGb3JQcm9jZXNzKHRhc2ssIG1vZGVsKS5pdGVyYXRvcigpLm5leHQoKTsKKwkJCQlmaW5hbCBBcnJheUxpc3Q8TGFiZWw+IGxhYmVsTGlzdExvY2FsVGFzayA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KAorCQkJCQkJU29mdHdhcmVVdGlsLmdldEFjY2Vzc2VkTGFiZWxTZXQodGFzaywgbnVsbCkpOworCQkJCWlmIChsYWJlbExpc3RMb2NhbFRhc2suY29udGFpbnMobGFiZWwpKSB7CisJCQkJCWxvY2FsQWxsb2NhdGlvbi5wdXQodGFzaywgcHUpOworCQkJCX0KKwkJCX0KKwkJCWlmIChsb2NhbEFsbG9jYXRpb24gIT0gbnVsbCkgeworCQkJCWxvY2FsTGFiZWxBbGxvY2F0aW9uLnB1dChsYWJlbCwgbG9jYWxBbGxvY2F0aW9uKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gbG9jYWxMYWJlbEFsbG9jYXRpb247CisJfQorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL01haW5GaWxlQ3JlYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9NYWluRmlsZUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjBhM2U2YwotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9NYWluRmlsZUNyZWF0aW9uLmphdmEKQEAgLTAsMCArMSwyNTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuDQorICoNCisgKiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQorICogICB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCisgKg0KKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCisgKg0KKyAqICAgQ29udHJpYnV0b3JzOg0KKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247DQoraW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCitpbXBvcnQgamF2YS51dGlsLlNldDsNCitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5MYWJlbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlByb2Nlc3NpbmdVbml0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU2NoZWR1bGVyQWxsb2NhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLkRlcGxveW1lbnRVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udXRpbHMuZmlsZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBNYWluIGZ1bmN0aW9uIGluIHdoaWNoIHNjaGVkdWxpbmcgaXMgZG9uZS4NCisgKg0KKyAqDQorICovDQorDQorcHVibGljIGNsYXNzIE1haW5GaWxlQ3JlYXRpb24gew0KKwlmaW5hbCBwcml2YXRlIEFtYWx0aGVhIG1vZGVsOw0KKw0KKwkvKioNCisJICogTWFpbkZpbGVDcmVhdGlvbiBDb25zdHJ1Y3Rvcg0KKwkgKg0KKwkgKiBAcGFyYW0gTW9kZWwNCisJICogQHBhcmFtIHNyY1BhdGgNCisJICogQHBhcmFtIGNvbmZpZ0ZsYWcNCisJICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKwkgKi8NCisJcHVibGljIE1haW5GaWxlQ3JlYXRpb24oZmluYWwgQW1hbHRoZWEgTW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBpbnQgY29uZmlnRmxhZykgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCXRoaXMubW9kZWwgPSBNb2RlbDsNCisJCVN5c3RlbS5vdXQucHJpbnRsbigiTWFpbiBGaWxlIENyZWF0aW9uIEJlZ2lucyIpOw0KKwkJaWYgKDB4MjAwMCA9PSAoY29uZmlnRmxhZyAmIDB4RjAwMCkpIHsNCisJCQlmaWxlQ3JlYXRlUHRocmVhZCh0aGlzLm1vZGVsLCBzcmNQYXRoKTsNCisJCX0NCisJCVN5c3RlbS5vdXQucHJpbnRsbigiTWFpbiBGaWxlIENyZWF0aW9uIEVuZHMiKTsNCisJfQ0KKw0KKw0KKwkvKioNCisJICogU2hhcmVkIExhYmVsIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHN0cnVjdHVyZS4NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICogQHBhcmFtIGxhYmVsbGlzdA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbENvcmVEZWZpbml0aW9uKGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBTdHJpbmcgc3JjUGF0aCkgew0KKwkJZmluYWwgRUxpc3Q8TGFiZWw+IGxhYmVsbGlzdCA9IG1vZGVsLmdldFN3TW9kZWwoKS5nZXRMYWJlbHMoKTsNCisJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsTGlzdFNvcnRDb3JlID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsNCisJCWlmIChsYWJlbGxpc3Quc2l6ZSgpID09IDApIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNoYXJlZCBMYWJlbCBzaXplIDAiKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCWZpbmFsIEhhc2hNYXA8TGFiZWwsIEhhc2hNYXA8VGFzaywgUHJvY2Vzc2luZ1VuaXQ+PiBzaGFyZWRMYWJlbFRhc2tNYXAgPSBMYWJlbEZpbGVDcmVhdGlvbg0KKwkJCQkJLkxhYmVsVGFza01hcChtb2RlbCwgbGFiZWxsaXN0KTsNCisJCQlpbnQgaSA9IDAsIGsgPSAwLCBqID0gMDsNCisJCQlmb3IgKGZpbmFsIExhYmVsIHNoYXJlIDogbGFiZWxsaXN0KSB7DQorCQkJCWZpbmFsIEhhc2hNYXA8VGFzaywgUHJvY2Vzc2luZ1VuaXQ+IFRhc2tNYXAgPSBzaGFyZWRMYWJlbFRhc2tNYXAuZ2V0KHNoYXJlKTsNCisJCQkJZmluYWwgQ29sbGVjdGlvbjxQcm9jZXNzaW5nVW5pdD4gcHVMaXN0ID0gVGFza01hcC52YWx1ZXMoKTsNCisJCQkJZmluYWwgTGlzdDxQcm9jZXNzaW5nVW5pdD4gcHVMaXN0VW5pcXVlID0gcHVMaXN0LnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsNCisJCQkJZmluYWwgU2V0PFRhc2s+IFRhc2tMaXN0ID0gVGFza01hcC5rZXlTZXQoKTsNCisJCQkJaWYgKHB1TGlzdFVuaXF1ZS5zaXplKCkgPT0gMSAmJiBUYXNrTGlzdC5zaXplKCkgPiAxKSB7DQorCQkJCQlTaGFyZWRMYWJlbExpc3RTb3J0Q29yZS5hZGQoc2hhcmUpOw0KKwkJCQkJaSsrOw0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHB1TGlzdFVuaXF1ZS5zaXplKCkgPiAxKSB7DQorCQkJCQlqKys7DQorCQkJCX0NCisJCQkJZWxzZSBpZiAoVGFza0xpc3Quc2l6ZSgpID09IDEpIHsNCisJCQkJCWsrKzsNCisJCQkJfQ0KKwkJCX0NCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRvdGFsIExhYmVscyA6IiArIHNoYXJlZExhYmVsVGFza01hcC5rZXlTZXQoKS5zaXplKCkgKyAiPSIgKyBpICsgIisiICsgaiArICIrIiArIGsgKyAiPSINCisJCQkJCSsgKGkgKyBqICsgaykpOw0KKwkJfQ0KKwkJcmV0dXJuIFNoYXJlZExhYmVsTGlzdFNvcnRDb3JlOw0KKwl9DQorDQorDQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2xlZXBUaW1lck1zUHRocmVhZChmaW5hbCBGaWxlIGYxKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoInZvaWQgc2xlZXBUaW1lck1zKGludCB0aWNrcylcbiIpOw0KKwkJCWZ3LndyaXRlKCJ7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRpbnQgdmFyO1xuIik7DQorCQkJZncud3JpdGUoIlx0Zm9yICh2YXIgPSAwOyB2YXIgPCB0aWNrczsgKyt2YXIpXG4iKTsNCisJCQlmdy53cml0ZSgiXHR7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdHN1c3BlbmRNZSgpO1xuIik7DQorCQkJZncud3JpdGUoIlx0XHR7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdFx0dXNsZWVwKDEwMDApO1xuIik7DQorCQkJZncud3JpdGUoIlx0XHR9XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdHJlc3VtZU1lKCk7XG4iKTsNCisJCQlmdy53cml0ZSgiXHR9XG4iKTsNCisJCQlmdy53cml0ZSgifVxuIik7DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxlQ3JlYXRlUHRocmVhZChmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgU3RyaW5nIHBhdGgxKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJZmluYWwgRUxpc3Q8U2NoZWR1bGVyQWxsb2NhdGlvbj4gQ29yZU5vID0gbW9kZWwuZ2V0TWFwcGluZ01vZGVsKCkuZ2V0U2NoZWR1bGVyQWxsb2NhdGlvbigpOw0KKwkJaW50IGsgPSAwOw0KKwkJZm9yIChmaW5hbCBTY2hlZHVsZXJBbGxvY2F0aW9uIGMgOiBDb3JlTm8pIHsNCisJCQlmaW5hbCBQcm9jZXNzaW5nVW5pdCBwdSA9IGMuZ2V0UmVzcG9uc2liaWxpdHkoKS5nZXQoMCk7DQorCQkJZmluYWwgU2V0PFRhc2s+IHRhc2tzID0gRGVwbG95bWVudFV0aWwuZ2V0VGFza3NNYXBwZWRUb0NvcmUocHUsIG1vZGVsKTsNCisJCQlmaW5hbCBTdHJpbmcgZm5hbWUgPSBwYXRoMSArIEZpbGUuc2VwYXJhdG9yICsgIm1haW4iICsgayArICIuYyI7DQorCQkJZmluYWwgRmlsZSBmMiA9IG5ldyBGaWxlKHBhdGgxKTsNCisJCQlmaW5hbCBGaWxlIGYxID0gbmV3IEZpbGUoZm5hbWUpOw0KKwkJCWYyLm1rZGlycygpOw0KKwkJCXRyeSB7DQorCQkJCWYxLmNyZWF0ZU5ld0ZpbGUoKTsNCisJCQl9DQorCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsNCisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorDQorCQkJZmluYWwgRmlsZSBmbiA9IGYxOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQl0cnkgew0KKwkJCQlmaWxlVXRpbC5maWxlTWFpbkhlYWRlcihmMSk7DQorCQkJCW1haW5GaWxlSGVhZGVyKGYxKTsNCisJCQkJaGVhZGVySW5jbHVkZXNNYWluUHRocmVhZChmMSwgbW9kZWwsIGssIHRhc2tzKTsNCisJCQkJc2xlZXBUaW1lck1zUHRocmVhZChmMSk7DQorCQkJCW1haW5GdWNudGlvblB0aHJlYWQoZjEsIHRhc2tzKTsNCisJCQl9DQorCQkJZmluYWxseSB7DQorCQkJCXRyeSB7DQorCQkJCQlmdy5jbG9zZSgpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWsrKzsNCisJCX0NCisJfQ0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIG1haW5GdWNudGlvblB0aHJlYWQoZmluYWwgRmlsZSBmMSwgZmluYWwgU2V0PFRhc2s+IHRhc2tzKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoImludCBtYWluKHZvaWQpIFxue1xuIik7DQorCQkJZncud3JpdGUoIlx0cHRocmVhZF90IHRocmVhZFtOVU1fVEhSRUFEU107XG4iKTsNCisJCQlmdy53cml0ZSgiXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuXG4iKTsNCisJCQlmaW5hbCBpbnQgdGFza3NpemUgPSB0YXNrcy5zaXplKCk7DQorCQkJaW50IGluaXQgPSAwOw0KKwkJCXdoaWxlIChpbml0IDwgdGFza3NpemUpIHsNCisJCQkJZncud3JpdGUoIlx0bG9uZyBydHIiICsgaW5pdCArICI9IiArIGluaXQgKyAiO1xuIik7DQorCQkJCWluaXQrKzsNCisJCQl9DQorCQkJZncud3JpdGUoIlx0bG9uZyB0O1xuIik7DQorCQkJZncud3JpdGUoIlx0aW50IHJjO1xuIik7DQorCQkJZncud3JpdGUoIlx0dm9pZCAqc3RhdHVzO1xuXG4iKTsNCisJCQlmdy53cml0ZSgiXHRmb3IoOzspXG5cdHtcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdFx0cHRocmVhZF9hdHRyX2luaXQoJmF0dHIpO1xuIik7DQorCQkJZncud3JpdGUoIlx0XHRwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJmF0dHIsIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFKTtcblxuIik7DQorCQkJaW50IGluaXQxID0gMDsNCisJCQl3aGlsZSAoaW5pdDEgPCB0YXNrc2l6ZSkgew0KKwkJCQlmdy53cml0ZSgiXHRcdHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkWyIgKyBpbml0MSArICJdLCAmYXR0ciwgdiIgKyB0YXNrcy5pdGVyYXRvcigpLm5leHQoKS5nZXROYW1lKCkNCisJCQkJCQkrICIsICh2b2lkICopcnRyIiArIGluaXQxICsgIik7XG4iKTsNCisJCQkJaW5pdDErKzsNCisJCQl9DQorCQkJZncud3JpdGUoIlx0XHRpZiAocmMpXG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdHtcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdFx0XHRwcmludGYoXCJFUlJPUjsgcmV0dXJuIGNvZGUgZnJvbSBwdGhyZWFkX2pvaW4oKSBpcyAlZFxcblwiLCByYyk7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdFx0ZXhpdCgtMSk7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdH1cbiIpOw0KKw0KKwkJCWZ3LndyaXRlKCJcblx0XHRwdGhyZWFkX2F0dHJfZGVzdHJveSgmYXR0cik7XG4iKTsNCisJCQlmdy53cml0ZSgiXG5cdFx0Zm9yKHQ9MDsgdDxOVU1fVEhSRUFEUzsgdCsrKVxuIik7DQorCQkJZncud3JpdGUoIlx0XHR7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdFx0cmMgPSBwdGhyZWFkX2pvaW4odGhyZWFkW3RdLCAmc3RhdHVzKTtcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdFx0XHRpZiAocmMpXG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdFx0e1xuIik7DQorCQkJZncud3JpdGUoIlx0XHRcdFx0cHJpbnRmKFwiRVJST1I7IHJldHVybiBjb2RlIGZyb20gcHRocmVhZF9qb2luKCkgaXMgJWRcXG5cIiwgcmMpO1xuIik7DQorCQkJZncud3JpdGUoIlx0XHRcdFx0ZXhpdCgtMSk7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdFx0fVxuIik7DQorCQkJZncud3JpdGUoDQorCQkJCQkiXHRcdFx0cHJpbnRmKFwiTWFpbjogY29tcGxldGVkIGpvaW4gd2l0aCB0aHJlYWQgJWxkIGhhdmluZyBhIHN0YXR1cyBvZiAlbGRcXG5cIix0LChsb25nKXN0YXR1cyk7XG4iKTsNCisJCQlmdy53cml0ZSgiXHRcdH1cbiIpOw0KKwkJCWZ3LndyaXRlKCJcdFx0cHJpbnRmKFwiXFxuXCIpO1xuIik7DQorCQkJZncud3JpdGUoIlx0fVxuIik7DQorCQkJZncud3JpdGUoIlx0cHJpbnRmKFwiTWFpbjogcHJvZ3JhbSBjb21wbGV0ZWQuIEV4aXRpbmcuXFxuXCIpO1xuIik7DQorCQkJZncud3JpdGUoIlx0cHRocmVhZF9leGl0KE5VTEwpO1xuIik7DQorCQkJZncud3JpdGUoIn1cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorCXByaXZhdGUgc3RhdGljIHZvaWQgaGVhZGVySW5jbHVkZXNNYWluUHRocmVhZChmaW5hbCBGaWxlIGYxLCBmaW5hbCBBbWFsdGhlYSBtb2RlbDIsIGZpbmFsIGludCBrLA0KKwkJCWZpbmFsIFNldDxUYXNrPiB0YXNrcykgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZjE7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCIvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi9cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkaW8uaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkbGliLmg+XG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHB0aHJlYWQuaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RyaW5nLmg+XG5cbiIpOw0KKwkJCWZ3LndyaXRlKCIvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJ0YXNrRGVmIiArIGsgKyAiLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNkZWZpbmUgTlVNX1RIUkVBRFNcdCIgKyB0YXNrcy5zaXplKCkgKyAiXG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKw0KKwl9DQorDQorCXByaXZhdGUgc3RhdGljIHZvaWQgbWFpbkZpbGVIZWFkZXIoZmluYWwgRmlsZSBmMSkgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZjE7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCIqVGl0bGUgCQk6ICAgQyBGaWxlIGZvciBUYXNrcyBDYWxsXG4iKTsNCisJCQlmdy53cml0ZSgiKkRlc2NyaXB0aW9uCToJTWFpbiBmaWxlIGluIHdoaWNoIHNjaGVkdWxpbmcgaXMgZG9uZSBcbiIpOw0KKwkJCWZ3LndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZ3LndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZ3LndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuIik7DQorDQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorDQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL01haW5STVNGaWxlQ3JlYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9NYWluUk1TRmlsZUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMzI2MQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9NYWluUk1TRmlsZUNyZWF0aW9uLmphdmEKQEAgLTAsMCArMSw0NzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuDQorICoNCisgKiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQorICogICB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCisgKg0KKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCisgKg0KKyAqICAgQ29udHJpYnV0b3JzOg0KKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5NYXA7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5NYXBwaW5nTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5QZXJpb2RpY1N0aW11bHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUHJvY2Vzc2luZ1VuaXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5TY2hlZHVsZXJBbGxvY2F0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU3RpbXVsdXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRpbWVVbml0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwudXRpbC5EZXBsb3ltZW50VXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuUnVudGltZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLlJ1bnRpbWVVdGlsLlRpbWVUeXBlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwudXRpbC5Tb2Z0d2FyZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLlRpbWVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udXRpbHMuZmlsZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsNCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBNYWluIGZ1bmN0aW9uIGluIHdoaWNoIHNjaGVkdWxpbmcgaXMgZG9uZS4gU3BlY2lmaWMgdG8gUk1TDQorICogU2NoZWR1bGVyDQorICoNCisgKg0KKyAqLw0KKw0KK3B1YmxpYyBjbGFzcyBNYWluUk1TRmlsZUNyZWF0aW9uIHsNCisJZmluYWwgcHJpdmF0ZSBBbWFsdGhlYSBtb2RlbDsNCisNCisJLyoqDQorCSAqIE1haW5STVNGaWxlQ3JlYXRpb24gQ29uc3RydWN0b3INCisJICoNCisJICogQHBhcmFtIE1vZGVsDQorCSAqIEBwYXJhbSBzcmNQYXRoDQorCSAqIEBwYXJhbSBjb25maWdGbGFnDQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24NCisJICovDQorCXB1YmxpYyBNYWluUk1TRmlsZUNyZWF0aW9uKGZpbmFsIEFtYWx0aGVhIE1vZGVsLCBmaW5hbCBTdHJpbmcgc3JjUGF0aCwgZmluYWwgaW50IGNvbmZpZ0ZsYWcpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQorCQl0aGlzLm1vZGVsID0gTW9kZWw7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIk1haW4gRmlsZSBDcmVhdGlvbiBCZWdpbnMiKTsNCisJCWZpbGVDcmVhdGUodGhpcy5tb2RlbCwgc3JjUGF0aCwgY29uZmlnRmxhZyk7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIk1haW4gRmlsZSBDcmVhdGlvbiBFbmRzIik7DQorCX0NCisNCisJLyoqDQorCSAqIE1haW5STVNGaWxlQ3JlYXRpb24gLSBGaWxlIENyZWF0aW9uDQorCSAqDQorCSAqIEBwYXJhbSBtb2RlbA0KKwkgKiBAcGFyYW0gc3JjUGF0aA0KKwkgKiBAcGFyYW0gY29uZmlnRmxhZw0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGZpbGVDcmVhdGUoZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBpbnQgY29uZmlnRmxhZykNCisJCQl0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJZmluYWwgRUxpc3Q8U2NoZWR1bGVyQWxsb2NhdGlvbj4gQ29yZU5vID0gbW9kZWwuZ2V0TWFwcGluZ01vZGVsKCkuZ2V0U2NoZWR1bGVyQWxsb2NhdGlvbigpOw0KKwkJaW50IGsgPSAwOw0KKwkJZm9yIChmaW5hbCBTY2hlZHVsZXJBbGxvY2F0aW9uIGMgOiBDb3JlTm8pIHsNCisJCQlmaW5hbCBQcm9jZXNzaW5nVW5pdCBwdSA9IGMuZ2V0UmVzcG9uc2liaWxpdHkoKS5nZXQoMCk7DQorCQkJZmluYWwgU2V0PFRhc2s+IHRhc2tzID0gRGVwbG95bWVudFV0aWwuZ2V0VGFza3NNYXBwZWRUb0NvcmUocHUsIG1vZGVsKTsNCisJCQlmaW5hbCBTdHJpbmcgZm5hbWUgPSBzcmNQYXRoICsgRmlsZS5zZXBhcmF0b3IgKyAibWFpbiIgKyBrICsgIi5jIjsNCisJCQlmaW5hbCBGaWxlIGYyID0gbmV3IEZpbGUoc3JjUGF0aCk7DQorCQkJZmluYWwgRmlsZSBmMSA9IG5ldyBGaWxlKGZuYW1lKTsNCisJCQlmMi5ta2RpcnMoKTsNCisJCQl0cnkgew0KKwkJCQlmMS5jcmVhdGVOZXdGaWxlKCk7DQorCQkJfQ0KKwkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJdHJ5IHsNCisJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjEpOw0KKwkJCQltYWluRmlsZUhlYWRlcihmMSk7DQorCQkJCWlmICgoMHgwMTAwID09ICgweDBGMDAgJiBjb25maWdGbGFnKSkgJiAoMHgzMDAwID09ICgweEYwMDAgJiBjb25maWdGbGFnKSkpIHsNCisJCQkJCWhlYWRlckluY2x1ZGVzTWFpblJNUyhmMSwgayk7DQorCQkJCQltYWluVGFza1N0aW11bGkobW9kZWwsIGYxLCB0YXNrcyk7DQorCQkJCQltYWluVGFza1ByaW9yaXR5KGYxLCB0YXNrcyk7DQorCQkJCQltYWluRnVjbnRpb25STVMobW9kZWwsIGYxLCB0YXNrcyk7DQorCQkJCQkvLyBTaGFyZWRMYWJlbERlY2xhcmF0aW9uSGVhZChmMSwgbW9kZWwpOw0KKwkJCQl9DQorCQkJCWVsc2Ugew0KKwkJCQkJaGVhZGVySW5jbHVkZXNNYWluRnJlZVJUT1MoZjEsIGspOw0KKwkJCQkJbWFpblRhc2tTdGltdWxpKG1vZGVsLCBmMSwgdGFza3MpOw0KKwkJCQkJbWFpblRhc2tQcmlvcml0eShmMSwgdGFza3MpOw0KKwkJCQkJbWFpbkZ1Y250aW9uRnJlZVJUT1MobW9kZWwsIGYxLCB0YXNrcyk7DQorCQkJCX0NCisJCQl9DQorCQkJZmluYWxseSB7DQorCQkJCXRyeSB7DQorCQkJCQlmdy5jbG9zZSgpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWsrKzsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogTWFpbiBmdW5jdGlvbiBpbiBNYWluIGZpbGUgb2YgUk1TIHNwZWNpZmljIHNjaGVkdWxlcg0KKwkgKg0KKwkgKiBAcGFyYW0gbW9kZWwNCisJICogQHBhcmFtIGZpbGUNCisJICogQHBhcmFtIHRhc2tzDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIG1haW5GdWNudGlvblJNUyhmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBTZXQ8VGFzaz4gdGFza3MpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCJpbnQgbWFpbih2b2lkKSBcbntcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdG91dGJ1Zl9pbml0KCk7XG4iKTsNCisJCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbExpc3QgPSBMYWJlbEZpbGVDcmVhdGlvbi5TaGFyZWRMYWJlbEZpbmRlcihtb2RlbCk7DQorCQkJZmluYWwgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxMaXN0U29ydENvcmUgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOw0KKwkJCWlmIChTaGFyZWRMYWJlbExpc3Quc2l6ZSgpID09IDApIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJTaGFyZWQgTGFiZWwgc2l6ZSAwIik7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlmaW5hbCBIYXNoTWFwPExhYmVsLCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0Pj4gc2hhcmVkTGFiZWxUYXNrTWFwID0gTGFiZWxGaWxlQ3JlYXRpb24NCisJCQkJCQkuTGFiZWxUYXNrTWFwKG1vZGVsLCBTaGFyZWRMYWJlbExpc3QpOw0KKwkJCQlmb3IgKGZpbmFsIExhYmVsIHNoYXJlIDogU2hhcmVkTGFiZWxMaXN0KSB7DQorCQkJCQlmaW5hbCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0PiBUYXNrTWFwID0gc2hhcmVkTGFiZWxUYXNrTWFwLmdldChzaGFyZSk7DQorCQkJCQlmaW5hbCBDb2xsZWN0aW9uPFByb2Nlc3NpbmdVbml0PiBwdUxpc3QgPSBUYXNrTWFwLnZhbHVlcygpOw0KKwkJCQkJZmluYWwgTGlzdDxQcm9jZXNzaW5nVW5pdD4gcHVMaXN0VW5pcXVlID0gcHVMaXN0LnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsNCisJCQkJCWlmIChwdUxpc3RVbmlxdWUuc2l6ZSgpID4gMSkgew0KKwkJCQkJCVNoYXJlZExhYmVsTGlzdFNvcnRDb3JlLmFkZChzaGFyZSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJZmluYWwgSGFzaE1hcDxMYWJlbCwgU3RyaW5nPiBTaGFyZWRMYWJlbFR5cGVNYXAgPSBuZXcgSGFzaE1hcDxMYWJlbCwgU3RyaW5nPigpOw0KKwkJCWZvciAoZmluYWwgTGFiZWwgc2hhcmUgOiBTaGFyZWRMYWJlbExpc3RTb3J0Q29yZSkgew0KKwkJCQlTaGFyZWRMYWJlbFR5cGVNYXAucHV0KHNoYXJlLCBzaGFyZS5nZXRTaXplKCkudG9TdHJpbmcoKSk7DQorCQkJfQ0KKwkJCWZpbmFsIExpc3Q8U3RyaW5nPiBTaGFyZWRUeXBlTWFwTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigNCisJCQkJCVNoYXJlZExhYmVsVHlwZU1hcC52YWx1ZXMoKS5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSkpOw0KKwkJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsTWFwTGlzdCA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KFNoYXJlZExhYmVsVHlwZU1hcC5rZXlTZXQoKSk7DQorCQkJZm9yIChpbnQgayA9IDA7IGsgPCBTaGFyZWRUeXBlTWFwTGlzdC5zaXplKCk7IGsrKykgew0KKwkJCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbCA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KCk7DQorCQkJCWZpbmFsIFN0cmluZyBzaCA9IFNoYXJlZFR5cGVNYXBMaXN0LmdldChrKTsNCisJCQkJZm9yIChmaW5hbCBMYWJlbCBzIDogU2hhcmVkTGFiZWxNYXBMaXN0KSB7DQorCQkJCQlmaW5hbCBTdHJpbmcgU2hUeSA9IFNoYXJlZExhYmVsVHlwZU1hcC5nZXQocyk7DQorCQkJCQlpZiAoc2guZXF1YWxzKFNoVHkpKSB7DQorCQkJCQkJU2hhcmVkTGFiZWwuYWRkKHMpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWludCBTaGFyZWRMYWJlbENvdW50ZXIgPSBTaGFyZWRMYWJlbC5zaXplKCk7DQorCQkJCWlmIChTaGFyZWRMYWJlbENvdW50ZXIgIT0gMCkgew0KKwkJCQkJZncud3JpdGUoIlx0c2hhcmVkX2xhYmVsXyIgKyBzaC50b1N0cmluZygpLnJlcGxhY2UoIiAiLCAiIikgKyAiX2luaXQoKTtcbiIpOw0KKwkJCQl9DQorCQkJCVNoYXJlZExhYmVsQ291bnRlciA9IDA7DQorCQkJfQ0KKw0KKwkJCWZvciAoZmluYWwgVGFzayB0YXNrIDogdGFza3MpIHsNCisJCQkJZmluYWwgTWFwcGluZ01vZGVsIG1hcHBpbmdNb2RlbCA9IG1vZGVsLmdldE1hcHBpbmdNb2RlbCgpOw0KKwkJCQlQcm9jZXNzaW5nVW5pdCBwdSA9IG51bGw7DQorCQkJCWlmIChtYXBwaW5nTW9kZWwgIT0gbnVsbCkgew0KKwkJCQkJcHUgPSBEZXBsb3ltZW50VXRpbC5nZXRBc3NpZ25lZENvcmVGb3JQcm9jZXNzKHRhc2ssIG1vZGVsKS5pdGVyYXRvcigpLm5leHQoKTsNCisJCQkJCVRpbWUgdGFza1RpbWUgPSBSdW50aW1lVXRpbC5nZXRFeGVjdXRpb25UaW1lRm9yUHJvY2Vzcyh0YXNrLCBwdSwgbnVsbCwgVGltZVR5cGUuV0NFVCk7DQorCQkJCQl0YXNrVGltZSA9IFRpbWVVdGlsLmNvbnZlcnRUb1RpbWVVbml0KHRhc2tUaW1lLCBUaW1lVW5pdC5NUyk7DQorCQkJCQlmaW5hbCBCaWdJbnRlZ2VyIHNsZWVwVGltZSA9IHRhc2tUaW1lLmdldFZhbHVlKCk7DQorCQkJCQlmaW5hbCBCaWdJbnRlZ2VyIGIyID0gbmV3IEJpZ0ludGVnZXIoIjEwMDAiKTsNCisJCQkJCWZpbmFsIGludCBjb21wYXJldmFsdWUgPSBzbGVlcFRpbWUuY29tcGFyZVRvKGIyKTsNCisJCQkJCWlmIChjb21wYXJldmFsdWUgPCAwKSB7DQorCQkJCQkJZncud3JpdGUoIlx0QW1hbHRoZWFUYXNrIEFtYWxUa18iICsgdGFzay5nZXROYW1lKCkgKyAiID0gY3JlYXRlQW1hbHRoZWFUYXNrKCB2IiArIHRhc2suZ2V0TmFtZSgpDQorCQkJCQkJCQkrICIsIGNJTl8iICsgdGFzay5nZXROYW1lKCkgKyAiLCBjT1VUXyIgKyB0YXNrLmdldE5hbWUoKSArICIsICINCisJCQkJCQkJCSsgdGFzay5nZXRTdGltdWxpKCkuZ2V0KDApLmdldE5hbWUoKSArICIsICIgKyB0YXNrLmdldFN0aW11bGkoKS5nZXQoMCkuZ2V0TmFtZSgpDQorCQkJCQkJCQkrICIsIDEpO1xuIik7DQorCQkJCQl9DQorCQkJCQllbHNlIHsNCisJCQkJCQlmdy53cml0ZSgiXHRBbWFsdGhlYVRhc2sgQW1hbFRrXyIgKyB0YXNrLmdldE5hbWUoKSArICIgPSBjcmVhdGVBbWFsdGhlYVRhc2soIHYiICsgdGFzay5nZXROYW1lKCkNCisJCQkJCQkJCSsgIiwgY0lOXyIgKyB0YXNrLmdldE5hbWUoKSArICIsIGNPVVRfIiArIHRhc2suZ2V0TmFtZSgpICsgIiwgIg0KKwkJCQkJCQkJKyB0YXNrLmdldFN0aW11bGkoKS5nZXQoMCkuZ2V0TmFtZSgpICsgIiwgIiArIHRhc2suZ2V0U3RpbXVsaSgpLmdldCgwKS5nZXROYW1lKCkgKyAiLCAiDQorCQkJCQkJCQkrIHNsZWVwVGltZSArICIpO1xuIik7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorCQkJZm9yIChmaW5hbCBUYXNrIHRhc2sgOiB0YXNrcykgew0KKwkJCQlmaW5hbCBTZXQ8TGFiZWw+IHRhc2tMYWJlbCA9IFNvZnR3YXJlVXRpbC5nZXRBY2Nlc3NlZExhYmVsU2V0KHRhc2ssIG51bGwpOw0KKwkJCQlmaW5hbCBMaXN0PExhYmVsPiB0YXNrTGFiZWxMaXN0ID0gbmV3IEFycmF5TGlzdDw+KHRhc2tMYWJlbCk7DQorCQkJCWZpbmFsIEhhc2hNYXA8TGFiZWwsIFN0cmluZz4gTGFiZWxUeXBlTWFwID0gbmV3IEhhc2hNYXA8TGFiZWwsIFN0cmluZz4oKTsNCisJCQkJZm9yIChmaW5hbCBMYWJlbCB0bCA6IHRhc2tMYWJlbExpc3QpIHsNCisJCQkJCUxhYmVsVHlwZU1hcC5wdXQodGwsIHRsLmdldFNpemUoKS50b1N0cmluZygpKTsNCisJCQkJfQ0KKwkJCQlmaW5hbCBMaXN0PFN0cmluZz4gVHlwZUxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oDQorCQkJCQkJTGFiZWxUeXBlTWFwLnZhbHVlcygpLnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKSk7DQorCQkJCWZpbmFsIExpc3Q8TGFiZWw+IExhYmVsTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigNCisJCQkJCQlMYWJlbFR5cGVNYXAua2V5U2V0KCkuc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpKTsNCisJCQkJZncud3JpdGUoIlx0Y3JlYXRlUlRPU1Rhc2soICZBbWFsVGtfIiArIHRhc2suZ2V0TmFtZSgpICsgIiwgbWFpbiIgKyB0YXNrLmdldE5hbWUoKSArICIsICINCisJCQkJCQkrIFR5cGVMaXN0LnNpemUoKSArICIsIik7DQorCQkJCWZpbmFsIExpc3Q8TGFiZWw+IGRhdGFUeXBlTGlzdCA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KCk7DQorCQkJCWludCBrID0gMDsNCisJCQkJZm9yIChmaW5hbCBTdHJpbmcgdGwgOiBUeXBlTGlzdCkgew0KKwkJCQkJZncud3JpdGUoZmlsZVV0aWwuZGF0YXR5cGVTaXplKHRsKSArICIsICIpOw0KKwkJCQkJZm9yIChmaW5hbCBMYWJlbCBMYSA6IExhYmVsTGlzdCkgew0KKwkJCQkJCWlmIChMYWJlbFR5cGVNYXAuZ2V0KExhKS5jb250YWlucyh0bCkgJiYgKFNoYXJlZExhYmVsTGlzdFNvcnRDb3JlLmNvbnRhaW5zKExhKSkpIHsNCisJCQkJCQkJZGF0YVR5cGVMaXN0LmFkZChMYSk7DQorCQkJCQkJfQ0KKwkJCQkJfQ0KKwkJCQkJZncud3JpdGUoIiIgKyBkYXRhVHlwZUxpc3Quc2l6ZSgpICsgIiIpOw0KKwkJCQkJaysrOw0KKwkJCQkJaWYgKGsgPCBUeXBlTGlzdC5zaXplKCkpIHsNCisJCQkJCQlmdy53cml0ZSgiLCAiKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiKTtcbiIpOw0KKwkJCX0NCisJCQlmdy53cml0ZSgiXHR2VGFza1N0YXJ0U2NoZWR1bGVyKCk7XG4iKTsNCisJCQlmdy53cml0ZSgiXHQiICsgInJldHVybiBFWElUX1NVQ0NFU1M7XG4iKTsNCisJCQlmdy53cml0ZSgifVxuXG4iKTsNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisJfQ0KKw0KKw0KKwkvKioNCisJICogTWFpbiBmdW5jdGlvbiBpbiBNYWluIGZpbGUgb2YgUk1TIHNwZWNpZmljIHNjaGVkdWxlcg0KKwkgKg0KKwkgKiBAcGFyYW0gbW9kZWwNCisJICogQHBhcmFtIGZpbGUNCisJICogQHBhcmFtIHRhc2tzDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIG1haW5GdWNudGlvbkZyZWVSVE9TKGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBGaWxlIGZpbGUsIGZpbmFsIFNldDxUYXNrPiB0YXNrcykgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoImludCBtYWluKHZvaWQpIFxue1xuIik7DQorCQkJZncud3JpdGUoIlx0b3V0YnVmX2luaXQoKTtcbiIpOw0KKwkJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsTGlzdCA9IExhYmVsRmlsZUNyZWF0aW9uLlNoYXJlZExhYmVsRmluZGVyKG1vZGVsKTsNCisJCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbExpc3RTb3J0Q29yZSA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KCk7DQorCQkJaWYgKFNoYXJlZExhYmVsTGlzdC5zaXplKCkgPT0gMCkgew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNoYXJlZCBMYWJlbCBzaXplIDAiKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiU2hhcmVkIExhYmVsIHNpemUNCisJCQkJLy8gIitTaGFyZWRMYWJlbExpc3Quc2l6ZSgpKTsNCisJCQkJZmluYWwgSGFzaE1hcDxMYWJlbCwgSGFzaE1hcDxUYXNrLCBQcm9jZXNzaW5nVW5pdD4+IHNoYXJlZExhYmVsVGFza01hcCA9IExhYmVsRmlsZUNyZWF0aW9uDQorCQkJCQkJLkxhYmVsVGFza01hcChtb2RlbCwgU2hhcmVkTGFiZWxMaXN0KTsNCisJCQkJZm9yIChmaW5hbCBMYWJlbCBzaGFyZSA6IFNoYXJlZExhYmVsTGlzdCkgew0KKwkJCQkJZmluYWwgSGFzaE1hcDxUYXNrLCBQcm9jZXNzaW5nVW5pdD4gVGFza01hcCA9IHNoYXJlZExhYmVsVGFza01hcC5nZXQoc2hhcmUpOw0KKwkJCQkJZmluYWwgQ29sbGVjdGlvbjxQcm9jZXNzaW5nVW5pdD4gcHVMaXN0ID0gVGFza01hcC52YWx1ZXMoKTsNCisJCQkJCWZpbmFsIExpc3Q8UHJvY2Vzc2luZ1VuaXQ+IHB1TGlzdFVuaXF1ZSA9IHB1TGlzdC5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7DQorCQkJCQlpZiAocHVMaXN0VW5pcXVlLnNpemUoKSA+IDEpIHsNCisJCQkJCQlTaGFyZWRMYWJlbExpc3RTb3J0Q29yZS5hZGQoc2hhcmUpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJfQ0KKw0KKwkJCWZpbmFsIEhhc2hNYXA8TGFiZWwsIFN0cmluZz4gU2hhcmVkTGFiZWxUeXBlTWFwID0gbmV3IEhhc2hNYXA8TGFiZWwsIFN0cmluZz4oKTsNCisJCQlmb3IgKGZpbmFsIExhYmVsIHNoYXJlIDogU2hhcmVkTGFiZWxMaXN0U29ydENvcmUpIHsNCisJCQkJU2hhcmVkTGFiZWxUeXBlTWFwLnB1dChzaGFyZSwgc2hhcmUuZ2V0U2l6ZSgpLnRvU3RyaW5nKCkpOw0KKwkJCX0NCisJCQlmaW5hbCBMaXN0PFN0cmluZz4gU2hhcmVkVHlwZU1hcExpc3QgPSBuZXcgQXJyYXlMaXN0PD4oDQorCQkJCQlTaGFyZWRMYWJlbFR5cGVNYXAudmFsdWVzKCkuc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpKTsNCisJCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbE1hcExpc3QgPSBuZXcgQXJyYXlMaXN0PExhYmVsPihTaGFyZWRMYWJlbFR5cGVNYXAua2V5U2V0KCkpOw0KKwkJCWZvciAoaW50IGsgPSAwOyBrIDwgU2hhcmVkVHlwZU1hcExpc3Quc2l6ZSgpOyBrKyspIHsNCisJCQkJZmluYWwgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWwgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOw0KKwkJCQlmaW5hbCBTdHJpbmcgc2ggPSBTaGFyZWRUeXBlTWFwTGlzdC5nZXQoayk7DQorCQkJCWZvciAoZmluYWwgTGFiZWwgcyA6IFNoYXJlZExhYmVsTWFwTGlzdCkgew0KKwkJCQkJZmluYWwgU3RyaW5nIFNoVHkgPSBTaGFyZWRMYWJlbFR5cGVNYXAuZ2V0KHMpOw0KKwkJCQkJaWYgKHNoLmVxdWFscyhTaFR5KSkgew0KKwkJCQkJCVNoYXJlZExhYmVsLmFkZChzKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlpbnQgU2hhcmVkTGFiZWxDb3VudGVyID0gU2hhcmVkTGFiZWwuc2l6ZSgpOw0KKwkJCQlpZiAoU2hhcmVkTGFiZWxDb3VudGVyICE9IDApIHsNCisJCQkJCWZ3LndyaXRlKCJcdHNoYXJlZF9sYWJlbF8iICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpICsgIl9pbml0KCk7XG4iKTsNCisJCQkJCS8vIGZ3LndyaXRlKCJ2b2lkIHNoYXJlZF9sYWJlbF8iK3NoLnRvU3RyaW5nKCkucmVwbGFjZSgiICIsDQorCQkJCQkvLyAiIikrIl9pbml0X2NvcmUoKTtcbiIpOw0KKw0KKwkJCQl9DQorCQkJCVNoYXJlZExhYmVsQ291bnRlciA9IDA7DQorCQkJfQ0KKw0KKwkJCWZvciAoZmluYWwgVGFzayB0YXNrIDogdGFza3MpIHsNCisJCQkJZncud3JpdGUoIlx0eFRhc2tDcmVhdGUoIHYiICsgdGFzay5nZXROYW1lKCkgKyAiICwgXCIiICsgdGFzay5nZXROYW1lKCkNCisJCQkJCQkrICJcIiwgY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFLCAmdiIgKyB0YXNrLmdldE5hbWUoKSArICIsIG1haW4iICsgdGFzay5nZXROYW1lKCkNCisJCQkJCQkrICIsIE5VTEwpO1xuIik7DQorCQkJfQ0KKwkJCWZ3LndyaXRlKCJcdHZUYXNrU3RhcnRTY2hlZHVsZXIoKTtcbiIpOw0KKwkJCWZ3LndyaXRlKCJcdCIgKyAicmV0dXJuIEVYSVRfU1VDQ0VTUztcbiIpOw0KKwkJCWZ3LndyaXRlKCJ9XG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBUaXRsZSBDYXJkIG9mIE1haW5STVNGaWxlQ3JlYXRpb24NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgbWFpbkZpbGVIZWFkZXIoZmluYWwgRmlsZSBmaWxlKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmaWxlOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmdy53cml0ZSgiKlRpdGxlIAkJOiAgIEMgRmlsZSBmb3IgVGFza3MgQ2FsbFxuIik7DQorCQkJZncud3JpdGUoIipEZXNjcmlwdGlvbgk6CU1haW4gZmlsZSBpbiB3aGljaCBzY2hlZHVsaW5nIGlzIGRvbmUgXG4iKTsNCisJCQlmdy53cml0ZSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsNCisJCQlmdy53cml0ZSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsNCisJCQlmdy53cml0ZSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBNYWluUk1TRmlsZUNyZWF0aW9uIEhlYWRlciBpbmNsdXNpb24NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgaGVhZGVySW5jbHVkZXNNYWluUk1TKGZpbmFsIEZpbGUgZmlsZSwgZmluYWwgaW50IGspIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCIvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi9cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkaW8uaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkbGliLmg+XG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0cmluZy5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxlX2xpYi5oPlxuXG4iKTsNCisJCQlmdy53cml0ZSgiLyogU2NoZWR1bGVyIGluY2x1ZGVzLiAqL1xuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwiRnJlZVJUT1MuaFwiXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJ0YXNrLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwicXVldWUuaFwiXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJBbWFsdGhlYUNvbnZlcnRlci5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcImRlYnVnRmxhZ3MuaFwiXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJQYXJhbGxlbGxhVXRpbHMuaFwiXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJ0YXNrRGVmIiArIGsgKyAiLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwic2hhcmVkX2NvbW1zLmhcIlxuXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJsYWJlbCIgKyBrICsgIi5oXCJcbiIpOw0KKwkJCS8vIGZ3LndyaXRlKCIjaW5jbHVkZSBcImMyYy5oXCJcblxuIik7DQorCQkJLy8gZncud3JpdGUoIiNkZWZpbmUgUkVBRF9QUkVDSVNJT05fVVMgMTAwMFxuXG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBBc3NpZ24gUHJpb3JpdHkgdG8gdGFzayBpbiBSTVMNCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICogQHBhcmFtIHRhc2tzDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIG1haW5UYXNrUHJpb3JpdHkoZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBTZXQ8VGFzaz4gdGFza3MpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJZmluYWwgTGlzdDxUYXNrPiBsb2NhbFRhc2tQcmlvcml0eSA9IG5ldyBBcnJheUxpc3Q8VGFzaz4oKTsNCisJCQlsb2NhbFRhc2tQcmlvcml0eS5hZGRBbGwodGFza3MpOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmdy53cml0ZSgiLyogVGFza1ByaW9yaXRpZXMuICovXG4iKTsNCisJCQlmaW5hbCBIYXNoTWFwPFRhc2ssIExvbmc+IHBlcmlvZE1hcCA9IG5ldyBIYXNoTWFwPFRhc2ssIExvbmc+KCk7DQorCQkJZm9yIChmaW5hbCBUYXNrIHRhc2sgOiB0YXNrcykgew0KKwkJCQlmaW5hbCBsb25nIHBlcmlvZCA9IGZpbGVVdGlsLmdldFJlY3VycmVuY2UodGFzaykuZ2V0VmFsdWUoKS5sb25nVmFsdWUoKTsNCisJCQkJcGVyaW9kTWFwLnB1dCh0YXNrLCBwZXJpb2QpOw0KKwkJCX0NCisJCQlmaW5hbCBNYXA8VGFzaywgTG9uZz4gcGVyaW9kTWFwU29ydGVkID0gZmlsZVV0aWwuc29ydEJ5VmFsdWUocGVyaW9kTWFwKTsNCisJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oInBlcmlvZE1hcFNvcnRlZCBTaXplICIrDQorCQkJLy8gcGVyaW9kTWFwU29ydGVkLnNpemUoKSk7DQorCQkJLy8gZm9yIChpbnQgaT0wO2k8KHBlcmlvZE1hcFNvcnRlZC5zaXplKCkpO2krKykgew0KKwkJCWZvciAoaW50IGkgPSAocGVyaW9kTWFwU29ydGVkLnNpemUoKSksIGsgPSAwOyBpID4gMDsgaS0tLCBrKyspIHsNCisJCQkJZmluYWwgVGFzayB0YXNrID0gKFRhc2spIHBlcmlvZE1hcFNvcnRlZC5rZXlTZXQoKS50b0FycmF5KClba107DQorCQkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgbWFpbiIgKyB0YXNrLmdldE5hbWUoKSArICJcdCggdHNrSURMRV9QUklPUklUWSArIiArIChpKSArICIgKVxuIik7DQorCQkJfQ0KKwkJCWZ3LndyaXRlKCJcbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBNYWluUk1TRmlsZUNyZWF0aW9uIEhlYWRlciBpbmNsdXNpb24NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgaGVhZGVySW5jbHVkZXNNYWluRnJlZVJUT1MoZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBpbnQgaykgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIi8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqL1xuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRpby5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRsaWIuaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RyaW5nLmg+XG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPGVfbGliLmg+XG5cbiIpOw0KKwkJCWZ3LndyaXRlKCIvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJGcmVlUlRPUy5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcInRhc2suaFwiXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJxdWV1ZS5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcIkFtYWx0aGVhQ29udmVydGVyLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwiZGVidWdGbGFncy5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcIlBhcmFsbGVsbGFVdGlscy5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcInRhc2tEZWYiICsgayArICIuaFwiXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJzaGFyZWRfY29tbXMuaFwiXG5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcImxhYmVsIiArIGsgKyAiLmhcIlxuIik7DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIE1hY3JvIGZvciBTdGltdWxpIGluIHRoZSBtb2RlbA0KKwkgKg0KKwkgKiBAcGFyYW0gbW9kZWwNCisJICogQHBhcmFtIGZpbGUNCisJICogQHBhcmFtIHRhc2tzDQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIG1haW5UYXNrU3RpbXVsaShmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgRmlsZSBmMSwgZmluYWwgU2V0PFRhc2s+IHRhc2tzKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIi8qIFRhc2tTdGltdWxpLiAqL1xuIik7DQorCQkJZmluYWwgRUxpc3Q8U3RpbXVsdXM+IFN0aW11bGkgPSBtb2RlbC5nZXRTdGltdWxpTW9kZWwoKS5nZXRTdGltdWxpKCk7DQorCQkJZm9yIChmaW5hbCBTdGltdWx1cyBzIDogU3RpbXVsaSkgew0KKwkJCQlpZiAocyBpbnN0YW5jZW9mIFBlcmlvZGljU3RpbXVsdXMpIHsNCisJCQkJCWZ3LndyaXRlKCJcdCNkZWZpbmUgIiArIHMuZ2V0TmFtZSgpICsgIlx0IiArICgoUGVyaW9kaWNTdGltdWx1cykgcykuZ2V0UmVjdXJyZW5jZSgpLmdldFZhbHVlKCkNCisJCQkJCQkJKyAiIFxuIik7DQorCQkJCX0NCisJCQl9DQorCQkJZncud3JpdGUoIlxuIik7DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL01ha2VGaWxlQ3JlYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9NYWtlRmlsZUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU3YjgwNQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9NYWtlRmlsZUNyZWF0aW9uLmphdmEKQEAgLTAsMCArMSwxNzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuDQorICoNCisgKiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQorICogICB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCisgKg0KKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCisgKg0KKyAqICAgQ29udHJpYnV0b3JzOg0KKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU2NoZWR1bGVyQWxsb2NhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KKw0KKy8qKg0KKyAqIEltcGxlbWVudGF0aW9uIG9mIE1haW4gZnVuY3Rpb24gaW4gd2hpY2ggc2NoZWR1bGluZyBpcyBkb25lLg0KKyAqDQorICoNCisgKi8NCisNCitwdWJsaWMgY2xhc3MgTWFrZUZpbGVDcmVhdGlvbiB7DQorCWZpbmFsIHByaXZhdGUgQW1hbHRoZWEgbW9kZWw7DQorDQorCXB1YmxpYyBNYWtlRmlsZUNyZWF0aW9uKGZpbmFsIEFtYWx0aGVhIE1vZGVsLCBmaW5hbCBTdHJpbmcgcGF0aDEsIGZpbmFsIGludCBjb25maWdGbGFnKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJdGhpcy5tb2RlbCA9IE1vZGVsOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJNQUtFRklMRSBDcmVhdGlvbiBCZWdpbnMiKTsNCisJCWZpbGVDcmVhdGUodGhpcy5tb2RlbCwgcGF0aDEsIGNvbmZpZ0ZsYWcpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJNQUtFRklMRSBDcmVhdGlvbiBFbmRzIik7DQorCX0NCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxlQ3JlYXRlKGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBTdHJpbmcgcGF0aDEsIGZpbmFsIGludCBjb25maWdGbGFnKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJbW9kZWwuZ2V0TWFwcGluZ01vZGVsKCkuZ2V0VGFza0FsbG9jYXRpb24oKTsNCisJCWZpbmFsIEVMaXN0PFNjaGVkdWxlckFsbG9jYXRpb24+IENvcmVObyA9IG1vZGVsLmdldE1hcHBpbmdNb2RlbCgpLmdldFNjaGVkdWxlckFsbG9jYXRpb24oKTsNCisJCWZpbmFsIFN0cmluZyBmbmFtZSA9IHBhdGgxICsgRmlsZS5zZXBhcmF0b3IgKyAiTWFrZWZpbGUiOw0KKwkJZmluYWwgRmlsZSBmMiA9IG5ldyBGaWxlKHBhdGgxKTsNCisJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZSk7DQorCQlmMi5ta2RpcnMoKTsNCisJCXRyeSB7DQorCQkJZjEuY3JlYXRlTmV3RmlsZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsNCisJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJfQ0KKwkJZmluYWwgRmlsZSBmbiA9IGYxOw0KKwkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQl0cnkgew0KKwkJCS8vIGZpbGVVdGlsLmZpbGVNYWluSGVhZGVyKGYxKTsNCisJCQltYWtlRmlsZUhlYWRlcihmMSk7DQorCQkJaGVhZGVySW5jbHVkZXNNYWluUk1TKGYxLCBDb3JlTm8pOw0KKwkJfQ0KKwkJZmluYWxseSB7DQorCQkJdHJ5IHsNCisJCQkJZncuY2xvc2UoKTsNCisJCQl9DQorCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsNCisJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQl9DQorCQl9DQorCX0NCisNCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBtYWtlRmlsZUhlYWRlcihmaW5hbCBGaWxlIGYxKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIiMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZ3LndyaXRlKCIjKlRpdGxlIAkJOiAgIE1ha2VmaWxlIFNldHVwXG4iKTsNCisJCQlmdy53cml0ZSgiIypEZXNjcmlwdGlvbgk6CU1ha2VmaWxlIFNldHVwIGZvciB0aGUgU2NoZWR1bGVyIFxuIik7DQorCQkJZncud3JpdGUoIiMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZ3LndyaXRlKCIjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsNCisJCQlmdy53cml0ZSgiIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4iKTsNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisJfQ0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGhlYWRlckluY2x1ZGVzTWFpblJNUyhmaW5hbCBGaWxlIGYxLCBmaW5hbCBFTGlzdDxTY2hlZHVsZXJBbGxvY2F0aW9uPiBjb3JlTm8pIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGYxOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmdy53cml0ZSgiRVBJUEhBTllfSE9NRT0vb3B0L2FkYXB0ZXZhL2VzZGtcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaG9zdCBjb21waWxlciBwYXRoXG4iKTsNCisJCQlmdy53cml0ZSgiTENDPS9vcHQvZ2NjLWxpbmFyby03LjIuMS0yMDE3LjExLXg4Nl82NF9hcm0tbGludXgtZ251ZWFiaWhmL2Jpbi9hcm0tbGludXgtZ251ZWFiaWhmLWdjY1xuIik7DQorCQkJZncud3JpdGUoIiNkZXZpY2UgY29tcGlsZXIgcGF0aFxuIik7DQorCQkJZncud3JpdGUoIkNDPWUtZ2NjXG4iKTsNCisJCQlmdy53cml0ZSgiI0ZyZWVSVE9TIGRlcGVuZGVuY2llc1xuIik7DQorCQkJZncud3JpdGUoIkNGTEFHUz0tSS5cbiIpOw0KKwkJCWZ3LndyaXRlKCJGUkVFUlRPU1NSQz0uLi8uLi9Tb3VyY2VcbiIpOw0KKwkJCWZ3LndyaXRlKCJJTkNMVURFUz0gLWcgLUkkKEZSRUVSVE9TU1JDKS9pbmNsdWRlIC1JJChGUkVFUlRPU1NSQykvcG9ydGFibGUvR0NDL0VwaXBoYW55IC1JLlxuIik7DQorCQkJZncud3JpdGUoIkRFUFMgPSAkKEZSRUVSVE9TU1JDKS9wb3J0YWJsZS9HQ0MvRXBpcGhhbnkvIik7DQorCQkJZncud3JpdGUoInBvcnRtYWNyby5oICIpOw0KKwkJCWZ3LndyaXRlKCJNYWtlZmlsZSAiKTsNCisJCQlmdy53cml0ZSgiRnJlZVJUT1NDb25maWcuaCAiKTsNCisJCQlmdy53cml0ZSgiZGVidWdGbGFncy5oICIpOw0KKwkJCWZ3LndyaXRlKCJBbWFsdGhlYUNvbnZlcnRlci5oICIpOw0KKwkJCWludCBjb3JlSW5kZXg7DQorCQkJZm9yIChjb3JlSW5kZXggPSAwOyBjb3JlSW5kZXggPCBjb3JlTm8uc2l6ZSgpOyBjb3JlSW5kZXgrKykgew0KKwkJCQlmdy53cml0ZSgidGFza0RlZiIgKyBjb3JlSW5kZXggKyAiLmggIik7DQorCQkJfQ0KKwkJCWZvciAoY29yZUluZGV4ID0gMDsgY29yZUluZGV4IDwgY29yZU5vLnNpemUoKTsgY29yZUluZGV4KyspIHsNCisJCQkJZncud3JpdGUoImxhYmVsIiArIGNvcmVJbmRleCArICIuaCAiKTsNCisJCQl9DQorCQkJZm9yIChjb3JlSW5kZXggPSAwOyBjb3JlSW5kZXggPCBjb3JlTm8uc2l6ZSgpOyBjb3JlSW5kZXgrKykgew0KKwkJCQlmdy53cml0ZSgicnVubmFibGUiICsgY29yZUluZGV4ICsgIi5oICIpOw0KKwkJCX0NCisJCQlmdy53cml0ZSgiUGFyYWxsZWxsYVV0aWxzLmggXG4iKTsNCisJCQlmdy53cml0ZSgiI0VwaXBoYW55IFNESyBkZXBlbmRlbmNpZXNcbiIpOw0KKwkJCWZ3LndyaXRlKCJFU0RLPSR7RVBJUEhBTllfSE9NRX0gXG4iKTsNCisJCQlmdy53cml0ZSgiRUxJQlM9JHtFU0RLfS90b29scy9ob3N0LmFybXY3bC9saWIgXG4iKTsNCisJCQlmdy53cml0ZSgiRUlOQ1M9JHtFU0RLfS90b29scy9ob3N0LmFybXY3bC9pbmNsdWRlIFxuIik7DQorCQkJZncud3JpdGUoIkVMREY9JHtFU0RLfS9ic3BzL2N1cnJlbnQvZmFzdC5sZGYgXG4iKTsNCisJCQlmdy53cml0ZSgiRUhERj0ke0VQSVBIQU5ZX0hERn0gXG4iKTsNCisJCQlmdy53cml0ZSgiI3NlYXJjaCBwYXRocyBmb3IgQyBzb3VyY2UgY29kZSBmaWxlcyBcbiIpOw0KKwkJCWZ3LndyaXRlKA0KKwkJCQkJInZwYXRoICUuYyAuOiQoRlJFRVJUT1NTUkMpLzokKEZSRUVSVE9TU1JDKS9wb3J0YWJsZS9NZW1NYW5nOiQoRlJFRVJUT1NTUkMpL3BvcnRhYmxlL0dDQy9FcGlwaGFueTovIFxuIik7DQorCQkJZncud3JpdGUoIiNzZWFyY2ggcGF0aCBmb3IgYXNzZW1ibHkgbGlzdGluZ3MgXG4iKTsNCisJCQlmdy53cml0ZSgidnBhdGggJS5zICQoRlJFRVJUT1NTUkMpL3BvcnRhYmxlL0dDQy9FcGlwaGFueSBcbiIpOw0KKwkJCWZ3LndyaXRlKCIjbWFpbiB0YXJnZXQgIFxuIik7DQorCQkJZncud3JpdGUoInJ1bjogYXJtY29kZSAiKTsNCisJCQlmb3IgKGNvcmVJbmRleCA9IDA7IGNvcmVJbmRleCA8IGNvcmVOby5zaXplKCk7IGNvcmVJbmRleCsrKSB7DQorCQkJCWZ3LndyaXRlKCJtYWluIiArIGNvcmVJbmRleCArICIuZWxmICIpOw0KKwkJCX0NCisJCQlmdy53cml0ZSgiXG4JQGVjaG8gYnVpbGQgc3RhdHVzIDogc3VjY2Vzc2Z1bFxuXG4iKTsNCisJCQlmdy53cml0ZSgiI3J1bGUgZm9yIGV2ZXJ5IGRldmljZSB0YXJnZXRcbiIpOw0KKwkJCWZ3LndyaXRlKA0KKwkJCQkJIiUuZWxmOiAkKEVMREYpIHRhc2tzLm8gcXVldWUubyBsaXN0Lm8gcG9ydC5vIHBvcnRhc20ubyBoZWFwXzEubyBjMmMubyBkZWJ1Z0ZsYWdzLm8gQW1hbHRoZWFDb252ZXJ0ZXIubyAiKTsNCisJCQlmb3IgKGNvcmVJbmRleCA9IDA7IGNvcmVJbmRleCA8IGNvcmVOby5zaXplKCk7IGNvcmVJbmRleCsrKSB7DQorCQkJCWZ3LndyaXRlKCJ0YXNrRGVmIiArIGNvcmVJbmRleCArICIubyAiKTsNCisJCQl9DQorCQkJZm9yIChjb3JlSW5kZXggPSAwOyBjb3JlSW5kZXggPCBjb3JlTm8uc2l6ZSgpOyBjb3JlSW5kZXgrKykgew0KKwkJCQlmdy53cml0ZSgibGFiZWwiICsgY29yZUluZGV4ICsgIi5vICIpOw0KKwkJCX0NCisJCQlmb3IgKGNvcmVJbmRleCA9IDA7IGNvcmVJbmRleCA8IGNvcmVOby5zaXplKCk7IGNvcmVJbmRleCsrKSB7DQorCQkJCWZ3LndyaXRlKCJydW5uYWJsZSIgKyBjb3JlSW5kZXggKyAiLm8gIik7DQorCQkJfQ0KKw0KKwkJCWZ3LndyaXRlKCJQYXJhbGxlbGxhVXRpbHMubyBzaGFyZWRfY29tbXMubyAlLm8gIFxuIik7DQorCQkJZncud3JpdGUoIgkkKENDKSAtZyAtVCQ8IC1XbCwtLWdjLXNlY3Rpb25zIC1vICRAICQoZmlsdGVyLW91dCAkPCwkXikgLWxlLWxpYlxuXG4iKTsNCisJCQlmdy53cml0ZSgiI2hvc3QgdGFyZ2V0XG4iKTsNCisJCQlmdy53cml0ZSgiYXJtY29kZTogYXJtY29kZS5jICQoREVQUylcbiIpOw0KKwkJCWZ3LndyaXRlKCIJJChMQ0MpICQ8IC1vICRAICAtSSAke0VJTkNTfSAtTCAke0VMSUJTfSAtbHBhbCAtbGUtaGFsIC1sZS1sb2FkZXIgLWxwdGhyZWFkXG4iKTsNCisJCQlmdy53cml0ZSgiI2NsZWFuIHRhcmdldFxuIik7DQorCQkJZncud3JpdGUoImNsZWFuOlxuIik7DQorCQkJZncud3JpdGUoIglybSAtZiAqLm8gKi5zcmVjICouZWxmIGFybWNvZGVcblxuIik7DQorCQkJZncud3JpdGUoIi5TRUNPTkRBUlk6XG4iKTsNCisJCQlmdy53cml0ZSgiJS5vOiAlLmMgJChERVBTKVxuIik7DQorCQkJZncud3JpdGUoIgkkKENDKSAtZmRhdGEtc2VjdGlvbnMgLWZmdW5jdGlvbi1zZWN0aW9ucyAgLWMgLW8gJEAgJDwgJChJTkNMVURFUylcblxuIik7DQorCQkJZncud3JpdGUoIiUubzogJS5zICQoREVQUylcbiIpOw0KKwkJCWZ3LndyaXRlKCIJJChDQykgLWMgLW8gJEAgJDwgJChJTkNMVURFUylcbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBBbWFsdGhlYSBNb2RlbA0KKwkgKg0KKwkgKi8NCisJcHVibGljIEFtYWx0aGVhIGdldE1vZGVsKCkgew0KKwkJcmV0dXJuIHRoaXMubW9kZWw7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL1J1bkZpbGVDcmVhdGlvbi5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL1J1bkZpbGVDcmVhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNkNzIzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vUnVuRmlsZUNyZWF0aW9uLmphdmEKQEAgLTAsMCArMSwzNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgIENvcHlyaWdodCAoYykgMjAxOSBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgYW5kIG90aGVycy4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKKyAqICAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqICAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKgorICogICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICoKKyAqICAgQ29udHJpYnV0b3JzOgorICogICAgICAgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlByb2Nlc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlByb2Nlc3NpbmdVbml0OworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU2NoZWR1bGVyQWxsb2NhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGFzazsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGltZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGltZVVuaXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuRGVwbG95bWVudFV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuUnVudGltZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuUnVudGltZVV0aWwuVGltZVR5cGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuU29mdHdhcmVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLlRpbWVVdGlsOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi51dGlscy5maWxlVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CisKKy8qKgorICogSW1wbGVtZW50YXRpb24gb2YgUnVubmFibGUgRGVmaW5pdGlvbiB3aXRoIFJ1bm5hYmxlIHNwZWNpZmljIGRlbGF5LgorICoKKyAqCisgKi8KKworcHVibGljIGNsYXNzIFJ1bkZpbGVDcmVhdGlvbiB7CisJZmluYWwgcHJpdmF0ZSBBbWFsdGhlYSBtb2RlbDsKKworCS8qKgorCSAqIENvbnN0cnVjdG9yIFJ1bkZpbGVDcmVhdGlvbgorCSAqCisJICogQHBhcmFtIE1vZGVsCisJICogICAgICAgICAgICBBbWFsdGhlYSBNb2RlbAorCSAqIEBwYXJhbSBzcmNQYXRoCisJICogQHBhcmFtIHB0aHJlYWRGbGFnCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXB1YmxpYyBSdW5GaWxlQ3JlYXRpb24oZmluYWwgQW1hbHRoZWEgTW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBTdHJpbmcgcGF0aDIsIGZpbmFsIGludCBjb25maWdGbGFnKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdGhpcy5tb2RlbCA9IE1vZGVsOworCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5hYmxlIEZpbGUgQ3JlYXRpb24gQmVnaW5zIik7CisJCWZpbGVDcmVhdGUodGhpcy5tb2RlbCwgc3JjUGF0aCwgcGF0aDIsIGNvbmZpZ0ZsYWcpOworCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5hYmxlIEZpbGUgQ3JlYXRpb24gRW5kcyIpOworCisJfQorCisKKwkvKioKKwkgKiBSdW5uYWJsZSBGaWxlIENyZWF0aW9uCisJICoKKwkgKiBAcGFyYW0gbW9kZWwKKwkgKiBAcGFyYW0gc3JjUGF0aAorCSAqIEBwYXJhbSBwYXRoMgorCSAqIEBwYXJhbSBjb25maWdGbGFnCisJICogQHBhcmFtIHRhc2tzCisJICogQHBhcmFtIHJ1bm5hYmxlcworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGZpbGVDcmVhdGUoZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBTdHJpbmcgcGF0aDIsIGZpbmFsIGludCBjb25maWdGbGFnKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJZmluYWwgRUxpc3Q8U2NoZWR1bGVyQWxsb2NhdGlvbj4gQ29yZU5vID0gbW9kZWwuZ2V0TWFwcGluZ01vZGVsKCkuZ2V0U2NoZWR1bGVyQWxsb2NhdGlvbigpOworCQlpbnQgayA9IDA7CisJCWZvciAoZmluYWwgU2NoZWR1bGVyQWxsb2NhdGlvbiBjIDogQ29yZU5vKSB7CisJCQlmaW5hbCBQcm9jZXNzaW5nVW5pdCBwdSA9IGMuZ2V0UmVzcG9uc2liaWxpdHkoKS5nZXQoMCk7CisJCQlmaW5hbCBTZXQ8VGFzaz4gdGFzayA9IERlcGxveW1lbnRVdGlsLmdldFRhc2tzTWFwcGVkVG9Db3JlKHB1LCBtb2RlbCk7CisJCQlmaW5hbCBMaXN0PFRhc2s+IHRhc2tzID0gbmV3IEFycmF5TGlzdDxUYXNrPih0YXNrKTsKKwkJCWZpbmFsIFN0cmluZyBmbmFtZSA9IHNyY1BhdGggKyBGaWxlLnNlcGFyYXRvciArICJydW5uYWJsZSIgKyBrICsgIi5jIjsKKwkJCWZpbmFsIEZpbGUgZjIgPSBuZXcgRmlsZShzcmNQYXRoKTsKKwkJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZSk7CisJCQlmMi5ta2RpcnMoKTsKKwkJCXRyeSB7CisJCQkJZjEuY3JlYXRlTmV3RmlsZSgpOworCQkJfQorCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJfQorCisJCQlmaW5hbCBGaWxlIGZuID0gZjE7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsKKwkJCXRyeSB7CisJCQkJaWYgKDB4MjAwMCA9PSAoY29uZmlnRmxhZyAmIDB4RjAwMCkpIHsKKwkJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjEpOworCQkJCQlydW5GaWxlSGVhZGVyKGYxKTsKKwkJCQkJaGVhZGVySW5jbHVkZXNSdW4oZjEsIGspOworCQkJCQlydW5uYWJsZVB0aHJlYWREZWZpbml0aW9uKGYxLCB0YXNrcywgbW9kZWwpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjEpOworCQkJCQlydW5GaWxlSGVhZGVyKGYxKTsKKwkJCQkJaGVhZGVySW5jbHVkZXNSdW4oZjEsIGspOworCQkJCQlydW5uYWJsZURlZmluaXRpb24oZjEsIHRhc2tzLCBtb2RlbCk7CisJCQkJfQorCisJCQl9CisJCQlmaW5hbGx5IHsKKwkJCQl0cnkgeworCQkJCQlmdy5jbG9zZSgpOworCQkJCX0KKwkJCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0KKwkJCWZpbmFsIFN0cmluZyBmbmFtZTIgPSBzcmNQYXRoICsgRmlsZS5zZXBhcmF0b3IgKyAicnVubmFibGUiICsgayArICIuaCI7CisJCQlmaW5hbCBGaWxlIGY0ID0gbmV3IEZpbGUoc3JjUGF0aCk7CisJCQlmaW5hbCBGaWxlIGYzID0gbmV3IEZpbGUoZm5hbWUyKTsKKwkJCWY0Lm1rZGlycygpOworCQkJdHJ5IHsKKwkJCQlmMS5jcmVhdGVOZXdGaWxlKCk7CisJCQl9CisJCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQl9CisKKwkJCWZpbmFsIEZpbGUgZm4xID0gZjM7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCQkJZmluYWwgRmlsZVdyaXRlciBmdzEgPSBuZXcgRmlsZVdyaXRlcihmbjEsIHRydWUpOworCQkJdHJ5IHsKKwkJCQlpZiAoMHgyMDAwID09IChjb25maWdGbGFnICYgMHhGMDAwKSkgeworCQkJCQlmaWxlVXRpbC5maWxlTWFpbkhlYWRlcihmMyk7CisJCQkJCXJ1bkZpbGVIZWFkZXIoZjMpOworCQkJCQloZWFkZXJJbmNsdWRlc1J1blB0aHJlYWRIZWFkKGYzKTsKKwkJCQkJcnVubmFibGVEZWNsYXJhdGlvbihmMywgdGFza3MpOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjMpOworCQkJCQlydW5GaWxlSGVhZGVyKGYzKTsKKwkJCQkJaGVhZGVySW5jbHVkZXNSdW5IZWFkKGYzKTsKKwkJCQkJcnVubmFibGVEZWNsYXJhdGlvbihmMywgdGFza3MpOworCQkJCX0KKworCQkJfQorCQkJZmluYWxseSB7CisJCQkJdHJ5IHsKKwkJCQkJZncxLmNsb3NlKCk7CisJCQkJfQorCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQkJaysrOworCQl9CisJfQorCisJLyoqCisJICogVGl0bGUgQ2FyZCBmb3IgUnVuRmlsZUNyZWF0aW9uCisJICoKKwkgKiBAcGFyYW0gZmlsZQorCSAqLworCXByaXZhdGUgc3RhdGljIHZvaWQgcnVuRmlsZUhlYWRlcihmaW5hbCBGaWxlIGZpbGUpIHsKKwkJdHJ5IHsKKwkJCWZpbmFsIEZpbGUgZm4gPSBmaWxlOworCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikKKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7CisJCQlmdy53cml0ZSgiKlRpdGxlIAkJOiAgIFJ1bm5hYmxlIEhlYWRlclxuIik7CisJCQlmdy53cml0ZSgiKkRlc2NyaXB0aW9uCToJUnVubmFibGUgRGVmaW5pdGlvbiB3aXRoIFJ1bm5hYmxlIGRlbGF5XG4iKTsKKwkJCWZ3LndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOworCQkJZncud3JpdGUoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4iKTsKKworCQkJZncuY2xvc2UoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisJCX0KKworCX0KKworCS8qKgorCSAqIEhlYWRlciBpbmNsdXNpb24gZm9yIHRoZSBSdW5uYWJsZS5jIGZpbGUKKwkgKgorCSAqIEBwYXJhbSBmaWxlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBoZWFkZXJJbmNsdWRlc1J1bihmaW5hbCBGaWxlIGZpbGUsIGZpbmFsIGludCBrKSB7CisJCXRyeSB7CisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOworCQkJZncud3JpdGUoIi8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqL1xuIik7CisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGlvLmg+XG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkbGliLmg+XG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RyaW5nLmg+XG5cbiIpOworCQkJZncud3JpdGUoIi8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi9cbiIpOworCQkJZncud3JpdGUoIiNpbmNsdWRlIFwicnVubmFibGUiICsgayArICIuaFwiXG4iKTsKKworCQkJZncuY2xvc2UoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisJCX0KKworCX0KKworCS8qKgorCSAqIFJ1bkZpbGVDcmVhdGlvbiAtIEhlYWRlciBpbmNsdXNpb24gZm9yIHJ1bm5hYmxlLmgKKwkgKgorCSAqIEBwYXJhbSBmaWxlCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBoZWFkZXJJbmNsdWRlc1J1bkhlYWQoZmluYWwgRmlsZSBmaWxlKSB7CisJCXRyeSB7CisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOworCQkJZncud3JpdGUoIi8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqL1xuIik7CisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGlvLmg+XG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkbGliLmg+XG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RyaW5nLmg+XG5cbiIpOworCQkJZncud3JpdGUoIi8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi9cbiIpOworCQkJLy8gZncud3JpdGUoIiNpbmNsdWRlIFwicnVubmFibGUuaFwiXG5cbiIpOworCQkJZncuY2xvc2UoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisJCX0KKworCX0KKworCS8qKgorCSAqIFJ1bkZpbGVDcmVhdGlvbiAtIEhlYWRlciBpbmNsdXNpb24gZm9yIHJ1bm5hYmxlLmggcHRocmVhZCBzcGVjaWZpYworCSAqCisJICogQHBhcmFtIGZpbGUKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGhlYWRlckluY2x1ZGVzUnVuUHRocmVhZEhlYWQoZmluYWwgRmlsZSBmaWxlKSB7CisJCXRyeSB7CisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOworCQkJZncud3JpdGUoIi8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqL1xuIik7CisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGlvLmg+XG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkbGliLmg+XG4iKTsKKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RyaW5nLmg+XG5cbiIpOworCQkJZncuY2xvc2UoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7CisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBSdW5GaWxlQ3JlYXRpb24gLSBSdW5uYWJsZSBEZWZpbml0aW9uIFB0aHJlYWQgc3BlY2lmaWMKKwkgKgorCSAqIEBwYXJhbSBmaWxlCisJICogQHBhcmFtIHRhc2tzCisJICogQHBhcmFtIG1vZGVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBydW5uYWJsZVB0aHJlYWREZWZpbml0aW9uKGZpbmFsIEZpbGUgZmlsZSwgZmluYWwgTGlzdDxUYXNrPiB0YXNrcywgZmluYWwgQW1hbHRoZWEgbW9kZWwpIHsKKwkJdHJ5IHsKKwkJCWZpbmFsIEZpbGUgZm4gPSBmaWxlOworCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikKKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7CisJCQkvLyBpbnQgdGFza0NvdW50ZXIgPTE7CisJCQlmb3IgKGZpbmFsIFRhc2sgdCA6IHRhc2tzKSB7CisJCQkJTGlzdDxSdW5uYWJsZT4gcnVubmFibGVzT2ZUYXNrID0gU29mdHdhcmVVdGlsLmdldFJ1bm5hYmxlTGlzdCh0LCBudWxsKTsKKwkJCQlydW5uYWJsZXNPZlRhc2sgPSBydW5uYWJsZXNPZlRhc2suc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOworCQkJCS8vIGludCBydW5uYWJsZUNvdW50ZXIgPTE7CisJCQkJZm9yIChmaW5hbCBSdW5uYWJsZSBSdW4gOiBydW5uYWJsZXNPZlRhc2spIHsKKwkJCQkJZncud3JpdGUoInZvaWQgIiArIFJ1bi5nZXROYW1lKCkgKyAiICh2b2lkKVx0e1xuIik7CisJCQkJCS8qCisJCQkJCSAqIGZ3LndyaXRlKCJcdHZEaXNwbGF5TWVzc2FnZVB0aHJlYWQoXCIgIiArIHQuZ2V0TmFtZSgpICsKKwkJCQkJICogIiBcdFJ1bm5hYmxlIEV4ZWN1dGlvbgkiICsgIlx0IiArIFJ1bi5nZXROYW1lKCkgKworCQkJCQkgKiAiXFxuXCIpO1xuIik7CisJCQkJCSAqLworCQkJCQlmaW5hbCBQcm9jZXNzIFJ1blRhc2tOYW1lID0gU29mdHdhcmVVdGlsLmdldENhbGxpbmdQcm9jZXNzZXMoUnVuLCBudWxsKS5nZXQoMCk7CisJCQkJCWZpbmFsIFNldDxQcm9jZXNzaW5nVW5pdD4gcHUgPSBEZXBsb3ltZW50VXRpbC5nZXRBc3NpZ25lZENvcmVGb3JQcm9jZXNzKFJ1blRhc2tOYW1lLCBtb2RlbCk7CisJCQkJCWlmIChwdSAhPSBudWxsKSB7CisJCQkJCQlmb3IgKGZpbmFsIFByb2Nlc3NpbmdVbml0IHAgOiBwdSkgeworCQkJCQkJCVRpbWUgUnVuVGltZTEgPSBSdW50aW1lVXRpbC5nZXRFeGVjdXRpb25UaW1lRm9yUnVubmFibGUoUnVuLCBwLCBudWxsLCBUaW1lVHlwZS5XQ0VUKTsKKwkJCQkJCQlSdW5UaW1lMSA9IFRpbWVVdGlsLmNvbnZlcnRUb1RpbWVVbml0KFJ1blRpbWUxLCBUaW1lVW5pdC5VUyk7CisKKwkJCQkJCQlmaW5hbCBkb3VibGUgc2xlZXBUaW1lID0gUnVuVGltZTEuZ2V0VmFsdWUoKS5kb3VibGVWYWx1ZSgpOworCisJCQkJCQkJZncud3JpdGUoIlx0dXNsZWVwKCIgKyBzbGVlcFRpbWUgKyAiKTtcbiIpOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWZ3LndyaXRlKCJ9XG4iKTsKKwkJCQkJLy8gcnVubmFibGVDb3VudGVyKys7CisJCQkJfQorCQkJCS8vIHRhc2tDb3VudGVyKys7CisJCQl9CisJCQlmdy5jbG9zZSgpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsKKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIFJ1bm5hYmxlIERlZmluaXRpb24oR2VuZXJpYykKKwkgKgorCSAqIEBwYXJhbSBmaWxlCisJICogQHBhcmFtIHRhc2tzCisJICogQHBhcmFtIG1vZGVsCisJICovCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBydW5uYWJsZURlZmluaXRpb24oZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzLCBmaW5hbCBBbWFsdGhlYSBtb2RlbCkgeworCQl0cnkgeworCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7CisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsKKwkJCWZvciAoZmluYWwgVGFzayB0IDogdGFza3MpIHsKKwkJCQlMaXN0PFJ1bm5hYmxlPiBydW5uYWJsZXNPZlRhc2sgPSBTb2Z0d2FyZVV0aWwuZ2V0UnVubmFibGVMaXN0KHQsIG51bGwpOworCQkJCXJ1bm5hYmxlc09mVGFzayA9IHJ1bm5hYmxlc09mVGFzay5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisJCQkJZm9yIChmaW5hbCBSdW5uYWJsZSBSdW4gOiBydW5uYWJsZXNPZlRhc2spIHsKKwkJCQkJZncud3JpdGUoInZvaWQgIiArIFJ1bi5nZXROYW1lKCkgKyAiIFx0KHZvaWQpXHR7XG4iKTsKKwkJCQkJZmluYWwgUHJvY2VzcyBSdW5UYXNrTmFtZSA9IFNvZnR3YXJlVXRpbC5nZXRDYWxsaW5nUHJvY2Vzc2VzKFJ1biwgbnVsbCkuZ2V0KDApOworCQkJCQlmaW5hbCBTZXQ8UHJvY2Vzc2luZ1VuaXQ+IHB1ID0gRGVwbG95bWVudFV0aWwuZ2V0QXNzaWduZWRDb3JlRm9yUHJvY2VzcyhSdW5UYXNrTmFtZSwgbW9kZWwpOworCQkJCQlmb3IgKGZpbmFsIFByb2Nlc3NpbmdVbml0IHAgOiBwdSkgeworCQkJCQkJVGltZSBSdW5UaW1lMSA9IFJ1bnRpbWVVdGlsLmdldEV4ZWN1dGlvblRpbWVGb3JSdW5uYWJsZShSdW4sIHAsIG51bGwsIFRpbWVUeXBlLldDRVQpOworCQkJCQkJUnVuVGltZTEgPSBUaW1lVXRpbC5jb252ZXJ0VG9UaW1lVW5pdChSdW5UaW1lMSwgVGltZVVuaXQuVVMpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJZncud3JpdGUoIn1cbiIpOworCQkJCX0KKwkJCX0KKwkJCWZ3LmNsb3NlKCk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOworCQl9CisKKwl9CisKKwkvKioKKwkgKiBSdW5uYWJsZSBEZWNsYXJhdGlvbiBpbiBydW5uYWJsZS5oCisJICoKKwkgKiBAcGFyYW0gZmlsZQorCSAqIEBwYXJhbSBydW5uYWJsZXMKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHJ1bm5hYmxlRGVjbGFyYXRpb24oZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzKSB7CisJCXRyeSB7CisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOworCQkJZmluYWwgTGlzdDxSdW5uYWJsZT4gcnVubmFibGVzID0gbmV3IEFycmF5TGlzdDxSdW5uYWJsZT4oKTsKKwkJCWZvciAoZmluYWwgVGFzayB0YSA6IHRhc2tzKSB7CisJCQkJcnVubmFibGVzLmFkZEFsbChTb2Z0d2FyZVV0aWwuZ2V0UnVubmFibGVMaXN0KHRhLCBudWxsKSk7CisJCQl9CisJCQlmb3IgKGZpbmFsIFJ1bm5hYmxlIFJ1biA6IHJ1bm5hYmxlcykgeworCQkJCWZ3LndyaXRlKCJ2b2lkICIgKyBSdW4uZ2V0TmFtZSgpICsgIiAodm9pZCk7XG4iKTsKKwkJCX0KKwkJCWZ3LmNsb3NlKCk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgeworCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOworCQl9CisKKwl9CisKKwkvKioKKwkgKiBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBBbWFsdGhlYSBNb2RlbAorCSAqCisJICovCisJcHVibGljIEFtYWx0aGVhIGdldE1vZGVsKCkgeworCQlyZXR1cm4gdGhpcy5tb2RlbDsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9TaGFyZWRMYWJlbHNGaWxlQ3JlYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9TaGFyZWRMYWJlbHNGaWxlQ3JlYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTkxZWMzCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL1NoYXJlZExhYmVsc0ZpbGVDcmVhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMzY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgQ29weXJpZ2h0IChjKSAyMDE5IERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyBhbmQgb3RoZXJzLg0KKyAqDQorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQorICogICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KKyAqICAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQorICoNCisgKiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQorICoNCisgKiAgIENvbnRyaWJ1dG9yczoNCisgKiAgICAgICBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbjsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5Qcm9jZXNzaW5nVW5pdDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi51dGlscy5maWxlVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KKw0KKy8qKg0KKyAqIERlY2xhcmF0aW9uIG9mIExhYmVscyB3aXRoIGluaXRpYWwgdmFsdWVzIC4NCisgKg0KKyAqDQorICovDQorDQorLyoqDQorICogQGF1dGhvciBycHJhcw0KKyAqDQorICovDQorcHVibGljIGNsYXNzIFNoYXJlZExhYmVsc0ZpbGVDcmVhdGlvbiB7DQorCWZpbmFsIHByaXZhdGUgQW1hbHRoZWEgbW9kZWw7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RvciBMYWJlbEZpbGVDcmVhdGlvbg0KKwkgKg0KKwkgKiBAcGFyYW0gTW9kZWwNCisJICogICAgICAgICAgICBBbWFsdGhlYSBNb2RlbA0KKwkgKiBAcGFyYW0gc3JjUGF0aA0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlwdWJsaWMgU2hhcmVkTGFiZWxzRmlsZUNyZWF0aW9uKGZpbmFsIEFtYWx0aGVhIE1vZGVsLCBmaW5hbCBTdHJpbmcgc3JjUGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCXRoaXMubW9kZWwgPSBNb2RlbDsNCisJCVN5c3RlbS5vdXQucHJpbnRsbigiU2hhcmVkIExhYmVsIEZpbGUgQ3JlYXRpb24gQmVnaW5zIik7DQorCQlmaWxlQ3JlYXRlKHRoaXMubW9kZWwsIHNyY1BhdGgpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJTaGFyZWQgTGFiZWwgRmlsZSBDcmVhdGlvbiBFbmRzIik7DQorCX0NCisNCisJLyoqDQorCSAqIEZpbGVDcmVhdGlvbiBMYWJlbEZpbGVDcmVhdGlvbg0KKwkgKg0KKwkgKiBAcGFyYW0gbW9kZWwNCisJICogQHBhcmFtIHNyY1BhdGgNCisJICogQHRocm93cyBJT0V4Y2VwdGlvbg0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxlQ3JlYXRlKGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBTdHJpbmcgc3JjUGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIEVMaXN0PExhYmVsPiBsYWJlbGxpc3QgPSBtb2RlbC5nZXRTd01vZGVsKCkuZ2V0TGFiZWxzKCk7DQorCQlmaW5hbCBTdHJpbmcgZm5hbWUxID0gc3JjUGF0aCArIEZpbGUuc2VwYXJhdG9yICsgInNoYXJlZF9jb21tcy5jIjsNCisJCWZpbmFsIFN0cmluZyBmbmFtZTIgPSBzcmNQYXRoICsgRmlsZS5zZXBhcmF0b3IgKyAic2hhcmVkX2NvbW1zLmgiOw0KKwkJZmluYWwgRmlsZSBmMiA9IG5ldyBGaWxlKHNyY1BhdGgpOw0KKwkJZmluYWwgRmlsZSBmMSA9IG5ldyBGaWxlKGZuYW1lMSk7DQorCQlmaW5hbCBGaWxlIGYzID0gbmV3IEZpbGUoZm5hbWUyKTsNCisJCWYyLm1rZGlycygpOw0KKwkJdHJ5IHsNCisJCQlmMS5jcmVhdGVOZXdGaWxlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorDQorCQlmaW5hbCBGaWxlIGZuMSA9IGYxOw0KKwkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbjEsIHRydWUpOw0KKwkJdHJ5IHsNCisJCQlmaWxlVXRpbC5maWxlTWFpbkhlYWRlcihmMSk7DQorCQkJc2hhcmVkTGFiZWxGaWxlSGVhZGVyKGYxKTsNCisJCQloZWFkZXJJbmNsdWRlc1NoYXJlZExhYmVsKGYxKTsNCisJCQlTaGFyZWRMYWJlbERlY2xhcmF0aW9uKGYxLCBtb2RlbCwgbGFiZWxsaXN0KTsNCisJCX0NCisJCWZpbmFsbHkgew0KKwkJCXRyeSB7DQorCQkJCWZ3LmNsb3NlKCk7DQorCQkJfQ0KKwkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJfQ0KKwkJdHJ5IHsNCisJCQlmaWxlVXRpbC5maWxlTWFpbkhlYWRlcihmMyk7DQorCQkJc2hhcmVkTGFiZWxGaWxlSGVhZGVySGVhZChmMyk7DQorCQkJaGVhZGVySW5jbHVkZXNTaGFyZWRMYWJlbEhlYWQoZjMpOw0KKwkJCVNoYXJlZExhYmVsRGVjbGFyYXRpb25IZWFkKGYzLCBtb2RlbCwgbGFiZWxsaXN0KTsNCisJCX0NCisJCWZpbmFsbHkgew0KKwkJCXRyeSB7DQorCQkJCWZ3LmNsb3NlKCk7DQorCQkJfQ0KKwkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaXRsZSBjYXJkIC0gTGFiZWxGaWxlQ3JlYXRpb24NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2hhcmVkTGFiZWxGaWxlSGVhZGVyKGZpbmFsIEZpbGUgZmlsZSkgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIipUaXRsZSAJCTogICBTaGFyZWQgTGFiZWwgRGVjbGFyYXRpb25cbiIpOw0KKwkJCWZ3LndyaXRlKCIqRGVzY3JpcHRpb24JOglEZWNsYXJhdGlvbiBhbmQgSW5pdGlhbGlzYXRpb24gb2YgU2hhcmVkIExhYmVsXG4iKTsNCisJCQlmdy53cml0ZSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsNCisJCQlmdy53cml0ZSgiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiIpOw0KKw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKiBUaXRsZSBjYXJkIC0gTGFiZWxGaWxlQ3JlYXRpb24NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgc2hhcmVkTGFiZWxGaWxlSGVhZGVySGVhZChmaW5hbCBGaWxlIGZpbGUpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCIqVGl0bGUgCQk6ICAgU2hhcmVkIExhYmVsIERlY2xhcmF0aW9uXG4iKTsNCisJCQlmdy53cml0ZSgiKkRlc2NyaXB0aW9uCToJSGVhZGVyIGZpbGUgZm9yIERlY2xhcmF0aW9uIGFuZCBJbml0aWFsaXNhdGlvbiBvZiBTaGFyZWQgTGFiZWxcbiIpOw0KKwkJCWZ3LndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZ3LndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuIik7DQorDQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisNCisJLyoqDQorCSAqIEhlYWRlciBpbmNsdXNpb24gLSBMYWJlbEZpbGVDcmVhdGlvbg0KKwkgKg0KKwkgKiBAcGFyYW0gZmlsZQ0KKwkgKi8NCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBoZWFkZXJJbmNsdWRlc1NoYXJlZExhYmVsSGVhZChmaW5hbCBGaWxlIGZpbGUpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCIjaWZuZGVmIERFTU9fUEFSQUxMRUxMQV9TSEFSRURfQ09NTVNfSF9cbiIpOw0KKwkJCWZ3LndyaXRlKCIjZGVmaW5lIERFTU9fUEFSQUxMRUxMQV9TSEFSRURfQ09NTVNfSF9cblxuIik7DQorDQorCQkJZncud3JpdGUoIi8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqL1xuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRsaWIuaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkaW50Lmg+XG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBIZWFkZXIgaW5jbHVzaW9uIC0gTGFiZWxGaWxlQ3JlYXRpb24NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgaGVhZGVySW5jbHVkZXNTaGFyZWRMYWJlbChmaW5hbCBGaWxlIGZpbGUpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGZpbGU7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCIvKiBTdGFuZGFyZCBpbmNsdWRlcy4gKi9cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcInNoYXJlZF9jb21tcy5oXCJcbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBTaGFyZWQgTGFiZWwgZGVmaW5pdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlLg0KKwkgKg0KKwkgKiBAcGFyYW0gZmlsZQ0KKwkgKiBAcGFyYW0gbGFiZWxsaXN0DQorCSAqLw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIFNoYXJlZExhYmVsRGVjbGFyYXRpb24oZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgRUxpc3Q8TGFiZWw+IGxhYmVsbGlzdCkgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZmlsZTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZmluYWwgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxMaXN0ID0gTGFiZWxGaWxlQ3JlYXRpb24uU2hhcmVkTGFiZWxGaW5kZXIobW9kZWwpOw0KKwkJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsTGlzdFNvcnRDb3JlID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsNCisJCQlpZiAoU2hhcmVkTGFiZWxMaXN0LnNpemUoKSA9PSAwKSB7DQorCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiU2hhcmVkIExhYmVsIHNpemUgMCIpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJTaGFyZWQgTGFiZWwgc2l6ZQ0KKwkJCQkvLyAiK1NoYXJlZExhYmVsTGlzdC5zaXplKCkpOw0KKwkJCQlmaW5hbCBIYXNoTWFwPExhYmVsLCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0Pj4gc2hhcmVkTGFiZWxUYXNrTWFwID0gTGFiZWxGaWxlQ3JlYXRpb24NCisJCQkJCQkuTGFiZWxUYXNrTWFwKG1vZGVsLCBTaGFyZWRMYWJlbExpc3QpOw0KKwkJCQlmb3IgKGZpbmFsIExhYmVsIHNoYXJlIDogU2hhcmVkTGFiZWxMaXN0KSB7DQorCQkJCQlmaW5hbCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0PiBUYXNrTWFwID0gc2hhcmVkTGFiZWxUYXNrTWFwLmdldChzaGFyZSk7DQorCQkJCQlmaW5hbCBDb2xsZWN0aW9uPFByb2Nlc3NpbmdVbml0PiBwdUxpc3QgPSBUYXNrTWFwLnZhbHVlcygpOw0KKwkJCQkJZmluYWwgTGlzdDxQcm9jZXNzaW5nVW5pdD4gcHVMaXN0VW5pcXVlID0gcHVMaXN0LnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsNCisJCQkJCWlmIChwdUxpc3RVbmlxdWUuc2l6ZSgpID4gMSkgew0KKwkJCQkJCVNoYXJlZExhYmVsTGlzdFNvcnRDb3JlLmFkZChzaGFyZSk7DQorCQkJCQl9DQorCQkJCX0NCisJCQl9DQorDQorCQkJZmluYWwgSGFzaE1hcDxMYWJlbCwgU3RyaW5nPiBTaGFyZWRMYWJlbFR5cGVNYXAgPSBuZXcgSGFzaE1hcDxMYWJlbCwgU3RyaW5nPigpOw0KKwkJCWZvciAoZmluYWwgTGFiZWwgc2hhcmUgOiBTaGFyZWRMYWJlbExpc3RTb3J0Q29yZSkgew0KKwkJCQlTaGFyZWRMYWJlbFR5cGVNYXAucHV0KHNoYXJlLCBzaGFyZS5nZXRTaXplKCkudG9TdHJpbmcoKSk7DQorCQkJfQ0KKwkJCWZpbmFsIExpc3Q8U3RyaW5nPiBTaGFyZWRUeXBlTWFwTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigNCisJCQkJCVNoYXJlZExhYmVsVHlwZU1hcC52YWx1ZXMoKS5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSkpOw0KKwkJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsTWFwTGlzdCA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KFNoYXJlZExhYmVsVHlwZU1hcC5rZXlTZXQoKSk7DQorCQkJZm9yIChpbnQgayA9IDA7IGsgPCBTaGFyZWRUeXBlTWFwTGlzdC5zaXplKCk7IGsrKykgew0KKwkJCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbCA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KCk7DQorCQkJCWZpbmFsIFN0cmluZyBzaCA9IFNoYXJlZFR5cGVNYXBMaXN0LmdldChrKTsNCisJCQkJZm9yIChmaW5hbCBMYWJlbCBzIDogU2hhcmVkTGFiZWxNYXBMaXN0KSB7DQorCQkJCQlmaW5hbCBTdHJpbmcgU2hUeSA9IFNoYXJlZExhYmVsVHlwZU1hcC5nZXQocyk7DQorCQkJCQlpZiAoc2guZXF1YWxzKFNoVHkpKSB7DQorCQkJCQkJU2hhcmVkTGFiZWwuYWRkKHMpOw0KKwkJCQkJfQ0KKwkJCQl9DQorCQkJCWludCBTaGFyZWRMYWJlbENvdW50ZXIgPSBTaGFyZWRMYWJlbC5zaXplKCk7DQorCQkJCWlmIChTaGFyZWRMYWJlbENvdW50ZXIgIT0gMCkgew0KKw0KKw0KKwkJCQkJZncud3JpdGUoZmlsZVV0aWwuZGF0YXR5cGUoc2gudG9TdHJpbmcoKSkgKyAiIAkqb3V0YnVmX3NoYXJlZCIgKyBzaC50b1N0cmluZygpLnJlcGxhY2UoIiAiLCAiIikNCisJCQkJCQkJKyAiWyIgKyBTaGFyZWRMYWJlbENvdW50ZXIgKyAiXTtcblxuIik7DQorCQkJCQlmdy53cml0ZSgidm9pZCBzaGFyZWRfbGFiZWxfIiArIHNoLnRvU3RyaW5nKCkucmVwbGFjZSgiICIsICIiKSArICJfaW5pdCgpe1xuIik7DQorCQkJCQlmdy53cml0ZSgiXHRvdXRidWZfc2hhcmVkIiArIHNoLnRvU3RyaW5nKCkucmVwbGFjZSgiICIsICIiKSArICJbMF0gPSAoIg0KKwkJCQkJCQkrIGZpbGVVdGlsLmRhdGF0eXBlKHNoLnRvU3RyaW5nKCkpICsgIiAqKSBzaGFyZWRfbWVtX3NlY3Rpb24iDQorCQkJCQkJCSsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpICsgIjtcbiIpOw0KKwkJCQkJZm9yIChpbnQgaSA9IDE7IGkgPCBTaGFyZWRMYWJlbENvdW50ZXI7IGkrKykgew0KKwkJCQkJCWZ3LndyaXRlKCJcdG91dGJ1Zl9zaGFyZWQiICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpICsgIlsiICsgaSArICJdPW91dGJ1Zl9zaGFyZWQiDQorCQkJCQkJCQkrIHNoLnRvU3RyaW5nKCkucmVwbGFjZSgiICIsICIiKSArICJbIiArIGkgKyAiXSArIDE7XG4iKTsNCisJCQkJCX0NCisJCQkJCWZ3LndyaXRlKCJcdGZvciAoaW50IGk9MDtpPCIgKyBTaGFyZWRMYWJlbENvdW50ZXIgKyAiO2krKyl7XG4iKTsNCisJCQkJCWZ3LndyaXRlKCJcdFx0Km91dGJ1Zl9zaGFyZWQiICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpICsgIltpXSA9MDtcbiIpOw0KKwkJCQkJZncud3JpdGUoIlx0fVxuIik7DQorCQkJCQlmdy53cml0ZSgifVxuXG4iKTsNCisJCQkJCWZ3LndyaXRlKCJ2b2lkIHNoYXJlZF9sYWJlbF8iICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpDQorCQkJCQkJCSsgIl93cml0ZShpbnQgbGFiZWxfaW5keCxpbnQgcGF5bG9hZCl7XG4iKTsNCisJCQkJCS8vIGZ3LndyaXRlKCJcdCIrZmlsZVV0aWwuZGF0YXR5cGUoc2gudG9TdHJpbmcoKSkrIg0KKwkJCQkJLy8gcmV0dmFsPU5VTEw7XG4iKTsNCisJCQkJCWZ3LndyaXRlKCJcdCpvdXRidWZfc2hhcmVkIiArIHNoLnRvU3RyaW5nKCkucmVwbGFjZSgiICIsICIiKSArICJbbGFiZWxfaW5keF0gPSBwYXlsb2FkO1xuIik7DQorCQkJCQkvLyBmdy53cml0ZSgiXHRyZXR1cm4gcmV0dmFsO1xuXG4iKTsNCisJCQkJCWZ3LndyaXRlKCJ9XG5cbiIpOw0KKwkJCQkJZncud3JpdGUoIiIgKyBmaWxlVXRpbC5kYXRhdHlwZShzaC50b1N0cmluZygpKSArICIgc2hhcmVkX2xhYmVsXyIgKyBzaC50b1N0cmluZygpLnJlcGxhY2UoIiAiLCAiIikNCisJCQkJCQkJKyAiX3JlYWQoaW50IGxhYmVsX2luZHgpe1xuIik7DQorCQkJCQlmdy53cml0ZSgiXHRyZXR1cm4gKm91dGJ1Zl9zaGFyZWQiICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpICsgIltsYWJlbF9pbmR4XTtcbiIpOw0KKwkJCQkJZncud3JpdGUoIn1cblxuIik7DQorCQkJCX0NCisJCQkJU2hhcmVkTGFiZWxDb3VudGVyID0gMDsNCisJCQl9DQorCQkJZncud3JpdGUoIlxuXG5cblxuIik7DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisJLyoqDQorCSAqIFNoYXJlZCBMYWJlbCBkZWZpbml0aW9uIGFuZCBpbml0aWFsaXphdGlvbiBzdHJ1Y3R1cmUuDQorCSAqDQorCSAqIEBwYXJhbSBmaWxlDQorCSAqIEBwYXJhbSBsYWJlbGxpc3QNCisJICovDQorCXByaXZhdGUgc3RhdGljIHZvaWQgU2hhcmVkTGFiZWxEZWNsYXJhdGlvbkhlYWQoZmluYWwgRmlsZSBmaWxlLCBmaW5hbCBBbWFsdGhlYSBtb2RlbCwNCisJCQlmaW5hbCBFTGlzdDxMYWJlbD4gbGFiZWxsaXN0KSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmaWxlOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbExpc3QgPSBMYWJlbEZpbGVDcmVhdGlvbi5TaGFyZWRMYWJlbEZpbmRlcihtb2RlbCk7DQorCQkJZmluYWwgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxMaXN0U29ydENvcmUgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOw0KKwkJCWlmIChTaGFyZWRMYWJlbExpc3Quc2l6ZSgpID09IDApIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJTaGFyZWQgTGFiZWwgc2l6ZSAwIik7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlNoYXJlZCBMYWJlbCBzaXplDQorCQkJCS8vICIrU2hhcmVkTGFiZWxMaXN0LnNpemUoKSk7DQorCQkJCWZpbmFsIEhhc2hNYXA8TGFiZWwsIEhhc2hNYXA8VGFzaywgUHJvY2Vzc2luZ1VuaXQ+PiBzaGFyZWRMYWJlbFRhc2tNYXAgPSBMYWJlbEZpbGVDcmVhdGlvbg0KKwkJCQkJCS5MYWJlbFRhc2tNYXAobW9kZWwsIFNoYXJlZExhYmVsTGlzdCk7DQorCQkJCWZvciAoZmluYWwgTGFiZWwgc2hhcmUgOiBTaGFyZWRMYWJlbExpc3QpIHsNCisJCQkJCWZpbmFsIEhhc2hNYXA8VGFzaywgUHJvY2Vzc2luZ1VuaXQ+IFRhc2tNYXAgPSBzaGFyZWRMYWJlbFRhc2tNYXAuZ2V0KHNoYXJlKTsNCisJCQkJCWZpbmFsIENvbGxlY3Rpb248UHJvY2Vzc2luZ1VuaXQ+IHB1TGlzdCA9IFRhc2tNYXAudmFsdWVzKCk7DQorCQkJCQlmaW5hbCBMaXN0PFByb2Nlc3NpbmdVbml0PiBwdUxpc3RVbmlxdWUgPSBwdUxpc3Quc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOw0KKwkJCQkJaWYgKHB1TGlzdFVuaXF1ZS5zaXplKCkgPiAxKSB7DQorCQkJCQkJU2hhcmVkTGFiZWxMaXN0U29ydENvcmUuYWRkKHNoYXJlKTsNCisJCQkJCX0NCisJCQkJfQ0KKwkJCX0NCisNCisJCQlmaW5hbCBIYXNoTWFwPExhYmVsLCBTdHJpbmc+IFNoYXJlZExhYmVsVHlwZU1hcCA9IG5ldyBIYXNoTWFwPExhYmVsLCBTdHJpbmc+KCk7DQorCQkJZm9yIChmaW5hbCBMYWJlbCBzaGFyZSA6IFNoYXJlZExhYmVsTGlzdFNvcnRDb3JlKSB7DQorCQkJCVNoYXJlZExhYmVsVHlwZU1hcC5wdXQoc2hhcmUsIHNoYXJlLmdldFNpemUoKS50b1N0cmluZygpKTsNCisJCQl9DQorCQkJZmluYWwgTGlzdDxTdHJpbmc+IFNoYXJlZFR5cGVNYXBMaXN0ID0gbmV3IEFycmF5TGlzdDw+KA0KKwkJCQkJU2hhcmVkTGFiZWxUeXBlTWFwLnZhbHVlcygpLnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKSk7DQorCQkJZmluYWwgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxNYXBMaXN0ID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oU2hhcmVkTGFiZWxUeXBlTWFwLmtleVNldCgpKTsNCisJCQlmb3IgKGludCBrID0gMDsgayA8IFNoYXJlZFR5cGVNYXBMaXN0LnNpemUoKTsgaysrKSB7DQorCQkJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsNCisJCQkJZmluYWwgU3RyaW5nIHNoID0gU2hhcmVkVHlwZU1hcExpc3QuZ2V0KGspOw0KKwkJCQlmb3IgKGZpbmFsIExhYmVsIHMgOiBTaGFyZWRMYWJlbE1hcExpc3QpIHsNCisJCQkJCWZpbmFsIFN0cmluZyBTaFR5ID0gU2hhcmVkTGFiZWxUeXBlTWFwLmdldChzKTsNCisJCQkJCWlmIChzaC5lcXVhbHMoU2hUeSkpIHsNCisJCQkJCQlTaGFyZWRMYWJlbC5hZGQocyk7DQorCQkJCQl9DQorCQkJCX0NCisJCQkJaW50IFNoYXJlZExhYmVsQ291bnRlciA9IFNoYXJlZExhYmVsLnNpemUoKTsNCisJCQkJaWYgKFNoYXJlZExhYmVsQ291bnRlciAhPSAwKSB7DQorCQkJCQlmdy53cml0ZSgiXG4jZGVmaW5lIHNoYXJlZF9tZW1fc2VjdGlvbiIgKyBzaC50b1N0cmluZygpLnJlcGxhY2UoIiAiLCAiIikgKyAiCTB4MCIgKyAoayArIDEpDQorCQkJCQkJCSsgIjAwMDAwMFxuXG4iKTsNCisJCQkJCWZ3LndyaXRlKCJ2b2lkIHNoYXJlZF9sYWJlbF8iICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpICsgIl9pbml0KCk7XG4iKTsNCisJCQkJCWZ3LndyaXRlKCJ2b2lkIHNoYXJlZF9sYWJlbF8iICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpDQorCQkJCQkJCSsgIl93cml0ZShpbnQgbGFiZWxfaW5keCxpbnQgcGF5bG9hZCk7XG4iKTsNCisJCQkJCWZ3LndyaXRlKCIiICsgZmlsZVV0aWwuZGF0YXR5cGUoc2gudG9TdHJpbmcoKSkgKyAiIHNoYXJlZF9sYWJlbF8iICsgc2gudG9TdHJpbmcoKS5yZXBsYWNlKCIgIiwgIiIpDQorCQkJCQkJCSsgIl9yZWFkKGludCBsYWJlbF9pbmR4KTtcbiIpOw0KKwkJCQl9DQorCQkJCVNoYXJlZExhYmVsQ291bnRlciA9IDA7DQorCQkJfQ0KKwkJCWZ3LndyaXRlKCJcblxuIik7DQorCQkJZncud3JpdGUoIiNlbmRpZiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorDQorCS8qKg0KKwkgKiBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBBbWFsdGhlYSBNb2RlbA0KKwkgKg0KKwkgKi8NCisJcHVibGljIEFtYWx0aGVhIGdldE1vZGVsKCkgew0KKwkJcmV0dXJuIHRoaXMubW9kZWw7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL1Rhc2tGaWxlQ3JlYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9UYXNrRmlsZUNyZWF0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTZkMjgxNQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9UYXNrRmlsZUNyZWF0aW9uLmphdmEKQEAgLTAsMCArMSw2ODMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuDQorICoNCisgKiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQorICogICB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCisgKg0KKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCisgKg0KKyAqICAgQ29udHJpYnV0b3JzOg0KKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5NYXBwaW5nTW9kZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5QZXJpb2RpY1N0aW11bHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUHJvY2Vzc2luZ1VuaXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlNjaGVkdWxlckFsbG9jYXRpb247DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5TdGltdWx1czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UaW1lOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGltZVVuaXQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLkRlcGxveW1lbnRVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwudXRpbC5IYXJkd2FyZVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLlJ1bnRpbWVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwudXRpbC5SdW50aW1lVXRpbC5UaW1lVHlwZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuU29mdHdhcmVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwudXRpbC5UaW1lVXRpbDsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLnV0aWxzLmZpbGVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQorDQorLyoqDQorICogSW1wbGVtZW50YXRpb24gb2YgVGFzayBEZWZpbml0aW9uIHdpdGggQ2luIGFuZCBDb3V0IENhbGxzLg0KKyAqDQorICoNCisgKi8NCisNCitwdWJsaWMgY2xhc3MgVGFza0ZpbGVDcmVhdGlvbiB7DQorCWZpbmFsIHByaXZhdGUgQW1hbHRoZWEgbW9kZWw7DQorDQorCS8qKg0KKwkgKiBDb25zdHJ1Y3RvciBUYXNrRmlsZUNyZWF0aW9uDQorCSAqDQorCSAqIEBwYXJhbSBNb2RlbA0KKwkgKiAgICAgICAgICAgIC0gQW1hbHRoZWEgTW9kZWwNCisJICogQHBhcmFtIHNyY1BhdGgNCisJICogQHBhcmFtIHB0aHJlYWRGbGFnDQorCSAqIEBwYXJhbSBwcmVlbXB0aW9uRmxhZw0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlwdWJsaWMgVGFza0ZpbGVDcmVhdGlvbihmaW5hbCBBbWFsdGhlYSBNb2RlbCwgZmluYWwgU3RyaW5nIHNyY1BhdGgsIGZpbmFsIFN0cmluZyBwYXRoMiwgZmluYWwgaW50IGNvbmZpZ0ZsYWcpDQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCXRoaXMubW9kZWwgPSBNb2RlbDsNCisNCisJCWlmICgoMHgzMTAwID09ICgweEZGMDAgJiBjb25maWdGbGFnKSkgfHwgKDB4MTMwMCA9PSAoMHhGRjAwICYgY29uZmlnRmxhZykpKSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIEZpbGUgQ3JlYXRpb24gQmVnaW5zIik7DQorCQkJZmlsZUNyZWF0ZSh0aGlzLm1vZGVsLCBzcmNQYXRoLCBwYXRoMiwgY29uZmlnRmxhZyk7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIEZpbGUgQ3JlYXRpb24gRW5kcyIpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIEZpbGUgQ3JlYXRpb24gQmVnaW5zIik7DQorCQkJZmlsZUNyZWF0ZVB0aHJlYWQodGhpcy5tb2RlbCwgc3JjUGF0aCwgcGF0aDIsIGNvbmZpZ0ZsYWcpOw0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGFzayBGaWxlIENyZWF0aW9uIEVuZHMiKTsNCisJCX0NCisNCisJfQ0KKw0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGZpbGVDcmVhdGUoZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBTdHJpbmcgcGF0aDIsIGZpbmFsIGludCBjb25maWdGbGFnKQ0KKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7DQorCQlib29sZWFuIHByZWVtcHRpb25GbGFnID0gZmFsc2U7DQorCQlpZiAoMHgwMDIwID09ICgweDAwRjAgJiBjb25maWdGbGFnKSkgew0KKwkJCXByZWVtcHRpb25GbGFnID0gdHJ1ZTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXByZWVtcHRpb25GbGFnID0gZmFsc2U7DQorCQl9DQorCQlmaW5hbCBFTGlzdDxTY2hlZHVsZXJBbGxvY2F0aW9uPiBDb3JlTm8gPSBtb2RlbC5nZXRNYXBwaW5nTW9kZWwoKS5nZXRTY2hlZHVsZXJBbGxvY2F0aW9uKCk7DQorCQlpbnQgayA9IDA7DQorCQlmb3IgKGZpbmFsIFNjaGVkdWxlckFsbG9jYXRpb24gYyA6IENvcmVObykgew0KKwkJCWZpbmFsIFByb2Nlc3NpbmdVbml0IHB1ID0gYy5nZXRSZXNwb25zaWJpbGl0eSgpLmdldCgwKTsNCisJCQlmaW5hbCBTZXQ8VGFzaz4gdGFzayA9IERlcGxveW1lbnRVdGlsLmdldFRhc2tzTWFwcGVkVG9Db3JlKHB1LCBtb2RlbCk7DQorCQkJZmluYWwgTGlzdDxUYXNrPiB0YXNrcyA9IG5ldyBBcnJheUxpc3Q8VGFzaz4odGFzayk7DQorCQkJZmluYWwgU3RyaW5nIGZuYW1lID0gc3JjUGF0aCArIEZpbGUuc2VwYXJhdG9yICsgInRhc2tEZWYiICsgayArICIuYyI7DQorCQkJZmluYWwgRmlsZSBmMiA9IG5ldyBGaWxlKHNyY1BhdGgpOw0KKwkJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZSk7DQorCQkJZjIubWtkaXJzKCk7DQorCQkJdHJ5IHsNCisJCQkJZjEuY3JlYXRlTmV3RmlsZSgpOw0KKwkJCX0NCisJCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgew0KKwkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCX0NCisJCQlmaW5hbCBGaWxlIGZuID0gZjE7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCXRyeSB7DQorCQkJCWZpbGVVdGlsLmZpbGVNYWluSGVhZGVyKGYxKTsNCisJCQkJdGFza0ZpbGVIZWFkZXIoZjEpOw0KKwkJCQlpZiAoKDB4MzAwMCA9PSAoMHhGMDAwICYgY29uZmlnRmxhZykpICYgKDB4MDEwMCA9PSAoMHgwRjAwICYgY29uZmlnRmxhZykpKSB7DQorCQkJCQloZWFkZXJJbmNsdWRlc1Rhc2tIZWFkUk1TKGYxLCBrKTsNCisJCQkJCVRhc2tDb3VudGVyKGYxLCB0YXNrcyk7DQorCQkJCQlUYXNrRGVmaW5pdGlvblJNUyhmMSwgbW9kZWwsIHRhc2tzLCBwcmVlbXB0aW9uRmxhZyk7DQorCQkJCX0NCisJCQkJZWxzZSBpZiAoKDB4MTAwMCA9PSAoMHhGMDAwICYgY29uZmlnRmxhZykpICYgKDB4MDMwMCA9PSAoMHgwRjAwICYgY29uZmlnRmxhZykpKSB7DQorCQkJCQloZWFkZXJJbmNsdWRlc1Rhc2tIZWFkUk1TKGYxLCBrKTsNCisJCQkJCVRhc2tDb3VudGVyKGYxLCB0YXNrcyk7DQorCQkJCQlUYXNrRGVmaW5pdGlvbkZyZWVSVE9TKGYxLCBtb2RlbCwgdGFza3MsIHByZWVtcHRpb25GbGFnKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlmaW5hbGx5IHsNCisJCQkJdHJ5IHsNCisJCQkJCWZ3LmNsb3NlKCk7DQorCQkJCX0NCisJCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsNCisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJCX0NCisJCQl9DQorCQkJZmluYWwgU3RyaW5nIGZuYW1lMiA9IHNyY1BhdGggKyBGaWxlLnNlcGFyYXRvciArICJ0YXNrRGVmIiArIGsgKyAiLmgiOw0KKwkJCWZpbmFsIEZpbGUgZjQgPSBuZXcgRmlsZShzcmNQYXRoKTsNCisJCQlmaW5hbCBGaWxlIGYzID0gbmV3IEZpbGUoZm5hbWUyKTsNCisJCQlmNC5ta2RpcnMoKTsNCisJCQl0cnkgew0KKwkJCQlmMS5jcmVhdGVOZXdGaWxlKCk7DQorCQkJfQ0KKwkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKw0KKwkJCWZpbmFsIEZpbGUgZm4xID0gZjM7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3MSA9IG5ldyBGaWxlV3JpdGVyKGZuMSwgdHJ1ZSk7DQorCQkJdHJ5IHsNCisJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjMpOw0KKwkJCQl0YXNrRmlsZUhlYWRlcihmMyk7DQorCQkJCWhlYWRlckluY2x1ZGVzVGFza1JNU0hlYWQoZjMsIGspOw0KKwkJCQltYWluU3RhdGljVGFza0RlZihmMywgdGFza3MpOw0KKw0KKwkJCX0NCisJCQlmaW5hbGx5IHsNCisJCQkJdHJ5IHsNCisJCQkJCWZ3MS5jbG9zZSgpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWsrKzsNCisJCX0NCisJfQ0KKw0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIFRhc2tDb3VudGVyKGZpbmFsIEZpbGUgZjMsIGZpbmFsIExpc3Q8VGFzaz4gdGFza3MpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGYzOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsgLy8gdGhlIHRydWUgd2lsbA0KKwkJCQkJCQkJCQkJCQkJCS8vIGFwcGVuZCB0aGUgbmV3DQorCQkJCQkJCQkJCQkJCQkJLy8gZGF0YQ0KKwkJCWZ3LndyaXRlKCIvKiBUYXNrIENvdW50ZXIgRGVjbGFyYXRpb24uICovXG4iKTsNCisJCQlmb3IgKGZpbmFsIFRhc2sgdGEgOiB0YXNrcykgew0KKwkJCQlmdy53cml0ZSgiaW50IHRhc2tDb3VudCIgKyB0YS5nZXROYW1lKCkgKyAiXHQ9XHQwO1xuIik7DQorCQkJfQ0KKwkJCWZ3LndyaXRlKCJcblxuIik7DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBmaWxlQ3JlYXRlUHRocmVhZChmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgU3RyaW5nIHBhdGgxLCBmaW5hbCBTdHJpbmcgcGF0aDIsDQorCQkJZmluYWwgaW50IGNvbmZpZ0ZsYWcpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQorCQlib29sZWFuIHByZWVtcHRpb25GbGFnID0gZmFsc2U7DQorCQlpZiAoMHgwMDIwID09ICgweDAwRjAgJiBjb25maWdGbGFnKSkgew0KKwkJCXByZWVtcHRpb25GbGFnID0gdHJ1ZTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCXByZWVtcHRpb25GbGFnID0gZmFsc2U7DQorCQl9DQorCQlmaW5hbCBFTGlzdDxTY2hlZHVsZXJBbGxvY2F0aW9uPiBDb3JlTm8gPSBtb2RlbC5nZXRNYXBwaW5nTW9kZWwoKS5nZXRTY2hlZHVsZXJBbGxvY2F0aW9uKCk7DQorCQlpbnQgayA9IDA7DQorCQlmb3IgKGZpbmFsIFNjaGVkdWxlckFsbG9jYXRpb24gYyA6IENvcmVObykgew0KKwkJCWZpbmFsIFByb2Nlc3NpbmdVbml0IHB1ID0gYy5nZXRSZXNwb25zaWJpbGl0eSgpLmdldCgwKTsNCisJCQlmaW5hbCBTZXQ8VGFzaz4gdGFzayA9IERlcGxveW1lbnRVdGlsLmdldFRhc2tzTWFwcGVkVG9Db3JlKHB1LCBtb2RlbCk7DQorCQkJZmluYWwgTGlzdDxUYXNrPiB0YXNrcyA9IG5ldyBBcnJheUxpc3Q8VGFzaz4odGFzayk7DQorCQkJZmluYWwgU3RyaW5nIGZuYW1lID0gcGF0aDEgKyBGaWxlLnNlcGFyYXRvciArICJ0YXNrRGVmIiArIGsgKyAiLmMiOw0KKwkJCWZpbmFsIEZpbGUgZjIgPSBuZXcgRmlsZShwYXRoMSk7DQorCQkJZmluYWwgRmlsZSBmMSA9IG5ldyBGaWxlKGZuYW1lKTsNCisJCQlmMi5ta2RpcnMoKTsNCisJCQl0cnkgew0KKwkJCQlmMS5jcmVhdGVOZXdGaWxlKCk7DQorCQkJfQ0KKwkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJdHJ5IHsNCisJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjEpOw0KKwkJCQl0YXNrRmlsZUhlYWRlcihmMSk7DQorCQkJCWhlYWRlckluY2x1ZGVzVGFza1B0aHJlYWRIZWFkKGYxKTsNCisJCQkJVGFza0RlZmluaXRpb25QdGhyZWFkKGYxLCB0YXNrcywgbW9kZWwsIHByZWVtcHRpb25GbGFnKTsNCisJCQl9DQorCQkJZmluYWxseSB7DQorCQkJCXRyeSB7DQorCQkJCQlmdy5jbG9zZSgpOw0KKwkJCQl9DQorCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOw0KKwkJCQl9DQorCQkJfQ0KKwkJCWZpbmFsIFN0cmluZyBmbmFtZTIgPSBwYXRoMSArIEZpbGUuc2VwYXJhdG9yICsgInRhc2tEZWYiICsgayArICIuaCI7DQorCQkJZmluYWwgRmlsZSBmNCA9IG5ldyBGaWxlKHBhdGgxKTsNCisJCQlmaW5hbCBGaWxlIGYzID0gbmV3IEZpbGUoZm5hbWUyKTsNCisJCQlmNC5ta2RpcnMoKTsNCisJCQl0cnkgew0KKwkJCQlmMS5jcmVhdGVOZXdGaWxlKCk7DQorCQkJfQ0KKwkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQkJfQ0KKwkJCWZpbmFsIEZpbGUgZm4xID0gZjM7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3MSA9IG5ldyBGaWxlV3JpdGVyKGZuMSwgdHJ1ZSk7DQorCQkJdHJ5IHsNCisJCQkJZmlsZVV0aWwuZmlsZU1haW5IZWFkZXIoZjMpOw0KKwkJCQl0YXNrRmlsZUhlYWRlcihmMyk7DQorCQkJCWhlYWRlckluY2x1ZGVzUHRocmVhZFRhc2soZjMsIGspOw0KKwkJCQltYWluU3RhdGljVGFza1B0aHJlYWREZWYoZjMsIHRhc2tzKTsNCisJCQl9DQorCQkJZmluYWxseSB7DQorCQkJCXRyeSB7DQorCQkJCQlmdzEuY2xvc2UoKTsNCisJCQkJfQ0KKwkJCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgew0KKwkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCQkJfQ0KKwkJCX0NCisJCQlrKys7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBoZWFkZXJJbmNsdWRlc1B0aHJlYWRUYXNrKGZpbmFsIEZpbGUgZjMsIGZpbmFsIGludCBrKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMzsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7IC8vIHRoZSB0cnVlIHdpbGwNCisJCQkJCQkJCQkJCQkJCQkvLyBhcHBlbmQgdGhlIG5ldw0KKwkJCQkJCQkJCQkJCQkJCS8vIGRhdGENCisJCQlmdy53cml0ZSgiLyogU3RhbmRhcmQgaW5jbHVkZXMuICovXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGlvLmg+XG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGxpYi5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdHJpbmcuaD5cblxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRpbnQuaD5cblxuIik7DQorCQkJZncud3JpdGUoIi8qIFNjaGVkdWxlciBpbmNsdWRlcy4gKi9cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcInJ1bm5hYmxlIiArIGsgKyAiLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwibGFiZWwiICsgayArICIuaFwiXG4iKTsNCisNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisNCisJfQ0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIG1haW5TdGF0aWNUYXNrUHRocmVhZERlZihmaW5hbCBGaWxlIGYzLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMzsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIi8qIFN0YXRpYyBkZWZpbml0aW9uIG9mIHRoZSB0YXNrcy4gKi9cbiIpOw0KKwkJCWZvciAoZmluYWwgVGFzayB0YXNrIDogdGFza3MpIHsNCisJCQkJZncud3JpdGUoInZvaWQgdiIgKyB0YXNrLmdldE5hbWUoKSArICIoIHZvaWQgKnQgKTtcbiIpOw0KKwkJCX0NCisJCQlmdy53cml0ZSgiXG4iKTsNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisNCisJfQ0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIFRhc2tEZWZpbml0aW9uUHRocmVhZChmaW5hbCBGaWxlIGYxLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzLCBmaW5hbCBBbWFsdGhlYSBtb2RlbCwNCisJCQlmaW5hbCBib29sZWFuIHByZWVtcHRpb25GbGFnKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZm9yIChmaW5hbCBUYXNrIHRhc2sgOiB0YXNrcykgew0KKwkJCQlmaW5hbCBMaXN0PFJ1bm5hYmxlPiBydW5uYWJsZXNPZlRhc2sgPSBTb2Z0d2FyZVV0aWwuZ2V0UnVubmFibGVMaXN0KHRhc2ssIG51bGwpOw0KKwkJCQlmaW5hbCBBcnJheUxpc3Q8TGFiZWw+IGxhYmVsbGlzdDEgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOw0KKwkJCQlmb3IgKGZpbmFsIFJ1bm5hYmxlIHJ1biA6IHJ1bm5hYmxlc09mVGFzaykgew0KKwkJCQkJZmluYWwgU2V0PExhYmVsPiBsYWJlbGxpc3QgPSBTb2Z0d2FyZVV0aWwuZ2V0QWNjZXNzZWRMYWJlbFNldChydW4sIG51bGwpOw0KKwkJCQkJbGFiZWxsaXN0MS5hZGRBbGwobGFiZWxsaXN0KTsNCisJCQkJfQ0KKwkJCQlmaW5hbCBMaXN0PExhYmVsPiBsaXN0V2l0aG91dER1cGxpY2F0ZXMyID0gbGFiZWxsaXN0MS5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7DQorCQkJCWZvciAoZmluYWwgTGFiZWwgbGFiIDogbGlzdFdpdGhvdXREdXBsaWNhdGVzMikgew0KKwkJCQkJZmluYWwgU3RyaW5nIHR5cGUgPSBmaWxlVXRpbC5kYXRhdHlwZShsYWIuZ2V0U2l6ZSgpLnRvU3RyaW5nKCkpOw0KKwkJCQkJZncud3JpdGUoIlx0XHRleHRlcm5cdCIgKyB0eXBlICsgIlx0IiArIGxhYi5nZXROYW1lKCkgKyAiO1xuIik7DQorCQkJCX0NCisJCQkJZncud3JpdGUoIlxuXG5cbiIpOw0KKwkJCQlmb3IgKGZpbmFsIExhYmVsIGxhYiA6IGxpc3RXaXRob3V0RHVwbGljYXRlczIpIHsNCisJCQkJCWZpbmFsIFN0cmluZyB0eXBlID0gZmlsZVV0aWwuZGF0YXR5cGUobGFiLmdldFNpemUoKS50b1N0cmluZygpKTsNCisJCQkJCWZ3LndyaXRlKCJcdFx0ZXh0ZXJuXHQiICsgdHlwZSArICJcdCIgKyBsYWIuZ2V0TmFtZSgpICsgIl8iICsgdGFzay5nZXROYW1lKCkgKyAiO1xuIik7DQorCQkJCX0NCisJCQkJZncud3JpdGUoIlxuXG5cbiIpOw0KKw0KKwkJCQlmdy53cml0ZSgiXG5cdHZvaWQgY0lOXyIgKyB0YXNrLmdldE5hbWUoKSArICIoKVxuXHR7XG4iKTsNCisJCQkJZm9yIChmaW5hbCBMYWJlbCBsYWIgOiBsaXN0V2l0aG91dER1cGxpY2F0ZXMyKSB7DQorCQkJCQlmdy53cml0ZSgiXHRcdCIgKyBsYWIuZ2V0TmFtZSgpICsgIl8iICsgdGFzay5nZXROYW1lKCkgKyAiXHQ9XHQiICsgbGFiLmdldE5hbWUoKSArICI7XG4iKTsNCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXHR9XG4iKTsNCisJCQkJZncud3JpdGUoIlxuXHR2b2lkIGNPVVRfIiArIHRhc2suZ2V0TmFtZSgpICsgIigpXG5cdHtcbiIpOw0KKwkJCQlmaW5hbCBBcnJheUxpc3Q8TGFiZWw+IGxhYmVsbGlzdDIgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOw0KKwkJCQlmb3IgKGZpbmFsIFJ1bm5hYmxlIHJ1biA6IHJ1bm5hYmxlc09mVGFzaykgew0KKwkJCQkJZmluYWwgU2V0PExhYmVsPiBsYWJlbGxpc3QgPSBTb2Z0d2FyZVV0aWwuZ2V0V3JpdGVMYWJlbFNldChydW4sIG51bGwpOw0KKwkJCQkJbGFiZWxsaXN0Mi5hZGRBbGwobGFiZWxsaXN0KTsNCisJCQkJfQ0KKwkJCQlmaW5hbCBMaXN0PExhYmVsPiBsaXN0V2l0aG91dER1cGxpY2F0ZXMxID0gbGFiZWxsaXN0Mi5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7DQorDQorCQkJCWZvciAoZmluYWwgTGFiZWwgbGFiIDogbGlzdFdpdGhvdXREdXBsaWNhdGVzMSkgew0KKwkJCQkJZncud3JpdGUoIlx0XHQiICsgbGFiLmdldE5hbWUoKSArICJcdD1cdCIgKyBsYWIuZ2V0TmFtZSgpICsgIl8iICsgdGFzay5nZXROYW1lKCkgKyAiO1xuIik7DQorCQkJCX0NCisJCQkJZncud3JpdGUoIlx0fVxuIik7DQorCQkJCWZ3LndyaXRlKCJcblx0dm9pZCB2IiArIHRhc2suZ2V0TmFtZSgpICsgIiggdm9pZCAqdCApIiArICJcblx0e1xuIik7DQorCQkJCWZpbmFsIE1hcHBpbmdNb2RlbCBtYXBwaW5nTW9kZWwgPSBtb2RlbC5nZXRNYXBwaW5nTW9kZWwoKTsNCisJCQkJaWYgKG1hcHBpbmdNb2RlbCAhPSBudWxsKSB7DQorCQkJCQlmaW5hbCBMaXN0PFByb2Nlc3NpbmdVbml0PiBwcm9jZXNzaW5nVW5pdHMgPSBIYXJkd2FyZVV0aWwNCisJCQkJCQkJLmdldE1vZHVsZXNGcm9tSHdNb2RlbChQcm9jZXNzaW5nVW5pdC5jbGFzcywgbW9kZWwpOw0KKwkJCQkJZmluYWwgQXJyYXlMaXN0PFByb2Nlc3NpbmdVbml0PiBsb2NhbFBVID0gbmV3IEFycmF5TGlzdDxQcm9jZXNzaW5nVW5pdD4oKTsNCisJCQkJCWxvY2FsUFUuYWRkQWxsKHByb2Nlc3NpbmdVbml0cyk7DQorDQorCQkJCQlmaW5hbCBIYXNoTWFwPFByb2Nlc3NpbmdVbml0LCBMb25nPiBDb3JlTWFwID0gbmV3IEhhc2hNYXA8UHJvY2Vzc2luZ1VuaXQsIExvbmc+KCk7DQorCQkJCQlsb25nIGNvdW50ID0gMDsNCisJCQkJCWZvciAoZmluYWwgUHJvY2Vzc2luZ1VuaXQgcCA6IGxvY2FsUFUpIHsNCisJCQkJCQlDb3JlTWFwLnB1dChwLCBjb3VudCk7DQorCQkJCQkJY291bnQrKzsNCisJCQkJCX0NCisJCQkJCWZpbmFsIFByb2Nlc3NpbmdVbml0IHB1ID0gRGVwbG95bWVudFV0aWwuZ2V0QXNzaWduZWRDb3JlRm9yUHJvY2Vzcyh0YXNrLCBtb2RlbCkuaXRlcmF0b3IoKS5uZXh0KCk7DQorCQkJCQlmaW5hbCBMb25nIGNvcmVJRCA9IENvcmVNYXAuZ2V0KHB1KTsNCisJCQkJCWZ3LndyaXRlKCJcdFx0Y3B1X3NldF90IGNwdXNldDtcbiIpOw0KKwkJCQkJZncud3JpdGUoIlx0XHRpbnQgY3B1ID0gIiArIGNvcmVJRCArICI7XG4iKTsNCisJCQkJCWZ3LndyaXRlKCJcdFx0Q1BVX1pFUk8oJmNwdXNldCk7XG4iKTsNCisJCQkJCWZ3LndyaXRlKCJcdFx0Q1BVX1NFVCggY3B1ICwgJmNwdXNldCk7XG4iKTsNCisJCQkJCWZpbmFsIFNldDxQcm9jZXNzaW5nVW5pdD4gcHJvY1VuaVNldCA9IERlcGxveW1lbnRVdGlsLmdldEFzc2lnbmVkQ29yZUZvclByb2Nlc3ModGFzaywgbW9kZWwpOw0KKwkJCQkJTGlzdDxQcm9jZXNzaW5nVW5pdD4gcHJvY1VuaUxpc3QgPSBudWxsOw0KKwkJCQkJaWYgKHByb2NVbmlTZXQgIT0gbnVsbCkgew0KKwkJCQkJCXByb2NVbmlMaXN0ID0gbmV3IEFycmF5TGlzdDxQcm9jZXNzaW5nVW5pdD4ocHJvY1VuaVNldCk7DQorCQkJCQl9DQorCQkJCQlpZiAocHJvY1VuaUxpc3QgIT0gbnVsbCkgew0KKwkJCQkJCXByb2NVbmlMaXN0LmdldCgwKTsNCisJCQkJCX0NCisJCQkJCWZ3LndyaXRlKCJcdFx0c2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdXNldCksICZjcHVzZXQpO1xuXG4iKTsNCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXHRcdGZvciggOzsgKVxuXHRcdHtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdFx0c3VzcGVuZE1lICgpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdFx0cHJpbnRfYWZmaW5pdHkoKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdFx0dkRpc3BsYXlNZXNzYWdlUHRocmVhZCggXCIiICsgdGFzay5nZXROYW1lKCkgKyAiIGlzIHJ1bm5pbmdcXHJcXG5cIiApO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdFx0XHQvKiBDaW4gLSBDcmVhdGUgbG9jYWwgdmFyaWFibGVzIGFuZCBjb3B5IHRoZSBhY3R1YWwgdmFyaWFibGUgdG8gdGhlbSAqL1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdFx0XHRjSU5fIiArIHRhc2suZ2V0TmFtZSgpICsgIigpO1xuIik7DQorCQkJCWlmIChwcmVlbXB0aW9uRmxhZyA9PSB0cnVlKSB7DQorCQkJCQlmdy53cml0ZSgiXHRcdFx0cmVzdW1lTWUgKCk7XG4iKTsNCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXG5cdFx0XHQvKlJ1bm5hYmxlIGNhbGxzICovXG4iKTsNCisJCQkJZm9yIChmaW5hbCBSdW5uYWJsZSBydW4gOiBydW5uYWJsZXNPZlRhc2spIHsNCisJCQkJCWZ3LndyaXRlKCJcdFx0XHQiICsgcnVuLmdldE5hbWUoKSArICIoKTtcbiIpOw0KKwkJCQl9DQorCQkJCWZ3LndyaXRlKCJcblx0XHRcdC8qIENvdXQgLSBXcml0ZSBiYWNrIHRoZSBsb2NhbCB2YXJpYWJsZXMgYmFjayB0byB0aGUgYWN0dWFsIHZhcmlhYmxlcyAqL1xuIik7DQorCQkJCWlmIChwcmVlbXB0aW9uRmxhZyA9PSB0cnVlKSB7DQorCQkJCQlmdy53cml0ZSgiXHRcdFx0c3VzcGVuZE1lICgpO1xuIik7DQorCQkJCX0NCisJCQkJZncud3JpdGUoIlx0XHRcdGNPVVRfIiArIHRhc2suZ2V0TmFtZSgpICsgIigpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdFx0XHRyZXN1bWVNZSAoKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdFx0c2xlZXBUaW1lck1zKERFTEFZX01VTFQqTlVMTCk7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0XHRcdHB0aHJlYWRfZXhpdCgodm9pZCopIHQpO1xuIik7DQorCQkJCWZpbmFsIFRpbWUgdGFza3RpbWUgPSBmaWxlVXRpbC5nZXRSZWN1cnJlbmNlKHRhc2spOw0KKwkJCQlpZiAodGFza3RpbWUgIT0gbnVsbCkgew0KKwkJCQkJLy8gVGltZVV0aWwuZ2V0QXNUaW1lVW5pdChmaWxlVXRpbC5nZXRSZWN1cnJlbmNlKHRhc2spLA0KKwkJCQkJLy8gbnVsbCk7DQorDQorCQkJCX0NCisJCQkJZncud3JpdGUoIlx0XHR9XG4iKTsNCisJCQkJZncud3JpdGUoIlx0fVxuXG4iKTsNCisJCQl9DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCB0YXNrRmlsZUhlYWRlcihmaW5hbCBGaWxlIGYxKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIipUaXRsZSAJCTogICBUYXNrIERlZmluaXRpb25cbiIpOw0KKwkJCWZ3LndyaXRlKCIqRGVzY3JpcHRpb24JOglUYXNrIERlZmluaXRpb24gd2l0aCBUYXNrIFN0cnVjdHVyZVxuIik7DQorCQkJZncud3JpdGUoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7DQorCQkJZncud3JpdGUoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4iKTsNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisJfQ0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGhlYWRlckluY2x1ZGVzVGFza1B0aHJlYWRIZWFkKGZpbmFsIEZpbGUgZjEpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGYxOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmdy53cml0ZSgiI2RlZmluZSBfR05VX1NPVVJDRVxuXG4iKTsNCisJCQlmdy53cml0ZSgiLyogU3RhbmRhcmQgaW5jbHVkZXMuICovXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGlvLmg+XG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGxpYi5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdHJpbmcuaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8cHRocmVhZC5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzY2hlZC5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdGRpbnQuaD5cblxuIik7DQorDQorCQkJLy8gZncud3JpdGUoIiNkZWZpbmUgREVMQVlfTVVMVCAxMDBcblxuXG4iKTsNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisJfQ0KKw0KKwlwcml2YXRlIHN0YXRpYyB2b2lkIGhlYWRlckluY2x1ZGVzVGFza1JNU0hlYWQoZmluYWwgRmlsZSBmMSwgZmluYWwgaW50IGspIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGYxOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmdy53cml0ZSgiLyogU3RhbmRhcmQgaW5jbHVkZXMuICovXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGlvLmg+XG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgPHN0ZGxpYi5oPlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIDxzdHJpbmcuaD5cbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSA8c3RkaW50Lmg+XG5cbiIpOw0KKwkJCWZ3LndyaXRlKCIvKiBTY2hlZHVsZXIgaW5jbHVkZXMuICovXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJGcmVlUlRPUy5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcInF1ZXVlLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwiY3JvdXRpbmUuaFwiXG4iKTsNCisJCQlmdy53cml0ZSgiI2luY2x1ZGUgXCJkZWJ1Z0ZsYWdzLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwidGFzay5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcIlBhcmFsbGVsbGFVdGlscy5oXCJcbiIpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcImxhYmVsIiArIGsgKyAiLmhcIlxuIik7DQorCQkJZncud3JpdGUoIiNpbmNsdWRlIFwicnVubmFibGUiICsgayArICIuaFwiXG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorCXByaXZhdGUgc3RhdGljIHZvaWQgaGVhZGVySW5jbHVkZXNUYXNrSGVhZFJNUyhmaW5hbCBGaWxlIGYxLCBmaW5hbCBpbnQgaykgew0KKwkJdHJ5IHsNCisJCQlmaW5hbCBGaWxlIGZuID0gZjE7DQorCQkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCQlmaW5hbCBGaWxlV3JpdGVyIGZ3ID0gbmV3IEZpbGVXcml0ZXIoZm4sIHRydWUpOw0KKwkJCWZ3LndyaXRlKCIjaW5jbHVkZSBcInRhc2tEZWYiICsgayArICIuaFwiXG5cbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKwl9DQorDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluU3RhdGljVGFza0RlZihmaW5hbCBGaWxlIGYxLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIi8qIFN0YXRpYyBkZWZpbml0aW9uIG9mIHRoZSB0YXNrcy4gKi9cbiIpOw0KKwkJCWZvciAoZmluYWwgVGFzayB0YXNrIDogdGFza3MpIHsNCisJCQkJZncud3JpdGUoInZvaWQgdiIgKyB0YXNrLmdldE5hbWUoKSArICIoICk7XG4iKTsNCisJCQl9DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisJcHVibGljIHN0YXRpYyBIYXNoTWFwPFRhc2ssIEludGVnZXI+IFRhc2tJbmRleE1hcHBpbmcoZmluYWwgQW1hbHRoZWEgbW9kZWwpIHsNCisJCWZpbmFsIEVMaXN0PFRhc2s+IHRhc2tzID0gbW9kZWwuZ2V0U3dNb2RlbCgpLmdldFRhc2tzKCk7DQorCQlmaW5hbCBIYXNoTWFwPFRhc2ssIEludGVnZXI+IFRhc2tNYXBwaW5nID0gbmV3IEhhc2hNYXA8VGFzaywgSW50ZWdlcj4oKTsNCisJCWludCBpID0gMDsNCisJCWZvciAoZmluYWwgVGFzayBUYSA6IHRhc2tzKSB7DQorCQkJVGFza01hcHBpbmcucHV0KFRhLCBpKTsNCisJCQlpKys7DQorCQl9DQorCQlyZXR1cm4gVGFza01hcHBpbmc7DQorCX0NCisNCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBUYXNrRGVmaW5pdGlvblJNUyhmaW5hbCBGaWxlIGYxLCBmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgTGlzdDxUYXNrPiB0YXNrcywNCisJCQlmaW5hbCBib29sZWFuIHByZWVtcHRpb25GbGFnKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZmluYWwgSGFzaE1hcDxUYXNrLCBJbnRlZ2VyPiB0YXNrSW5kZXggPSBUYXNrSW5kZXhNYXBwaW5nKG1vZGVsKTsNCisJCQlmb3IgKGZpbmFsIFRhc2sgdGFzayA6IHRhc2tzKSB7DQorCQkJCWZpbmFsIEludGVnZXIgdGFza0NvdW50ID0gdGFza0luZGV4LmdldCh0YXNrKTsNCisJCQkJTGlzdDxSdW5uYWJsZT4gcnVubmFibGVzT2ZUYXNrID0gU29mdHdhcmVVdGlsLmdldFJ1bm5hYmxlTGlzdCh0YXNrLCBudWxsKTsNCisJCQkJcnVubmFibGVzT2ZUYXNrID0gcnVubmFibGVzT2ZUYXNrLnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsNCisJCQkJZncud3JpdGUoIlxuIik7DQorCQkJCWZpbmFsIExpc3Q8TGFiZWw+IHRhc2tMYWJlbExpc3QgPSBUYXNrU3BlY2lmaWNMYWJlbChtb2RlbCwgdGFzayk7DQorCQkJCWZvciAoZmluYWwgTGFiZWwgbGFiIDogdGFza0xhYmVsTGlzdCkgew0KKwkJCQkJZmluYWwgU3RyaW5nIHR5cGUgPSBmaWxlVXRpbC5kYXRhdHlwZShsYWIuZ2V0U2l6ZSgpLnRvU3RyaW5nKCkpOw0KKwkJCQkJZncud3JpdGUoIlx0IiArIHR5cGUgKyAiXHQiICsgbGFiLmdldE5hbWUoKSArICI7XG4iKTsNCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXG4iKTsNCisJCQkJZncud3JpdGUoIlxuXG4iKTsNCisJCQkJZncud3JpdGUoIlxuXHR2b2lkIHYiICsgdGFzay5nZXROYW1lKCkgKyAiKCkiICsgIlxuXHR7XG4iKTsNCisNCisJCQkJLy8gZncud3JpdGUoIlxuXG4iKTsNCisJCQkJZncud3JpdGUoIlx0XHR1cGRhdGVEZWJ1Z0ZsYWcoNzAwKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdHRyYWNlVGFza1Bhc3NlcygxLDEpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcblx0XHRcdC8qUnVubmFibGUgY2FsbHMgKi9cbiIpOw0KKwkJCQlmb3IgKGZpbmFsIFJ1bm5hYmxlIHJ1biA6IHJ1bm5hYmxlc09mVGFzaykgew0KKwkJCQkJZncud3JpdGUoIlx0XHRcdCIgKyBydW4uZ2V0TmFtZSgpICsgIigpO1xuIik7DQorCQkJCX0NCisJCQkJZmluYWwgTWFwcGluZ01vZGVsIG1hcHBpbmdNb2RlbCA9IG1vZGVsLmdldE1hcHBpbmdNb2RlbCgpOw0KKwkJCQlQcm9jZXNzaW5nVW5pdCBwdSA9IG51bGw7DQorCQkJCWlmIChtYXBwaW5nTW9kZWwgIT0gbnVsbCkgew0KKwkJCQkJcHUgPSBEZXBsb3ltZW50VXRpbC5nZXRBc3NpZ25lZENvcmVGb3JQcm9jZXNzKHRhc2ssIG1vZGVsKS5pdGVyYXRvcigpLm5leHQoKTsNCisJCQkJCVRpbWUgdGFza1RpbWUgPSBSdW50aW1lVXRpbC5nZXRFeGVjdXRpb25UaW1lRm9yUHJvY2Vzcyh0YXNrLCBwdSwgbnVsbCwgVGltZVR5cGUuV0NFVCk7DQorCQkJCQl0YXNrVGltZSA9IFRpbWVVdGlsLmNvbnZlcnRUb1RpbWVVbml0KHRhc2tUaW1lLCBUaW1lVW5pdC5NUyk7DQorCQkJCQlmaW5hbCBCaWdJbnRlZ2VyIHNsZWVwVGltZSA9IHRhc2tUaW1lLmdldFZhbHVlKCk7DQorCQkJCQlmaW5hbCBCaWdJbnRlZ2VyIGIyID0gbmV3IEJpZ0ludGVnZXIoIjEwMDAiKTsNCisJCQkJCWZpbmFsIGludCBjb21wYXJldmFsdWUgPSBzbGVlcFRpbWUuY29tcGFyZVRvKGIyKTsNCisJCQkJCWlmIChjb21wYXJldmFsdWUgPCAwKSB7DQorCQkJCQkJZncud3JpdGUoIlxuXHRcdFx0c2xlZXBUaW1lck1zKDEgLCAxIiArICh0YXNrQ291bnQgKyAxKSArICIpO1xuIik7DQorCQkJCQl9DQorCQkJCQllbHNlIHsNCisJCQkJCQlmdy53cml0ZSgiXG5cdFx0XHRzbGVlcFRpbWVyTXMoIiArIHNsZWVwVGltZSArICIsICIgKyB0YXNrQ291bnQgKyAxICsgIik7XG4iKTsNCisJCQkJCX0NCisNCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXG5cdFx0XHR0YXNrQ291bnQiICsgdGFzay5nZXROYW1lKCkgKyAiKys7Iik7DQorCQkJCWZ3LndyaXRlKCJcblx0XHRcdHRyYWNlVGFza1Bhc3NlcygiICsgdGFza0NvdW50ICsgIiwgdGFza0NvdW50IiArIHRhc2suZ2V0TmFtZSgpICsgIik7Iik7DQorCQkJCWZ3LndyaXRlKCJcblx0XHRcdHRyYWNlUnVubmluZ1Rhc2soMCk7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0fVxuXG4iKTsNCisJCQl9DQorCQkJZncuY2xvc2UoKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBpb2UpIHsNCisJCQlTeXN0ZW0uZXJyLnByaW50bG4oIklPRXhjZXB0aW9uOiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSBzdGF0aWMgdm9pZCBUYXNrRGVmaW5pdGlvbkZyZWVSVE9TKGZpbmFsIEZpbGUgZjEsIGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2tzLA0KKwkJCWZpbmFsIGJvb2xlYW4gcHJlZW1wdGlvbkZsYWcpIHsNCisJCXRyeSB7DQorCQkJZmluYWwgRmlsZSBmbiA9IGYxOw0KKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQkJZmluYWwgRmlsZVdyaXRlciBmdyA9IG5ldyBGaWxlV3JpdGVyKGZuLCB0cnVlKTsNCisJCQlmaW5hbCBIYXNoTWFwPFRhc2ssIEludGVnZXI+IHRhc2tJbmRleCA9IFRhc2tJbmRleE1hcHBpbmcobW9kZWwpOw0KKwkJCWZvciAoZmluYWwgVGFzayB0YXNrIDogdGFza3MpIHsNCisJCQkJSW50ZWdlciB0YXNrQ291bnQgPSB0YXNrSW5kZXguZ2V0KHRhc2spOw0KKwkJCQlMaXN0PFJ1bm5hYmxlPiBydW5uYWJsZXNPZlRhc2sgPSBTb2Z0d2FyZVV0aWwuZ2V0UnVubmFibGVMaXN0KHRhc2ssIG51bGwpOw0KKwkJCQlydW5uYWJsZXNPZlRhc2sgPSBydW5uYWJsZXNPZlRhc2suc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOw0KKwkJCQlmaW5hbCBMaXN0PExhYmVsPiB0YXNrTGFiZWxMaXN0ID0gVGFza1NwZWNpZmljTGFiZWwobW9kZWwsIHRhc2spOw0KKwkJCQlmdy53cml0ZSgiXG4iKTsNCisJCQkJZm9yIChmaW5hbCBMYWJlbCBsYWIgOiB0YXNrTGFiZWxMaXN0KSB7DQorCQkJCQlmaW5hbCBTdHJpbmcgdHlwZSA9IGZpbGVVdGlsLmRhdGF0eXBlKGxhYi5nZXRTaXplKCkudG9TdHJpbmcoKSk7DQorCQkJCQlmdy53cml0ZSgiXHRcdCIgKyB0eXBlICsgIlx0IiArIGxhYi5nZXROYW1lKCkgKyAiO1xuIik7DQorCQkJCX0NCisJCQkJZncud3JpdGUoIlxuIik7DQorCQkJCWZ3LndyaXRlKCJcblx0dm9pZCB2IiArIHRhc2suZ2V0TmFtZSgpICsgIigpIiArICJcblx0e1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdHBvcnRUaWNrVHlwZSB4TGFzdFdha2VUaW1lPXhUYXNrR2V0VGlja0NvdW50KCk7XG4iKTsNCisJCQkJZncud3JpdGUoIlxuXHRcdGZvciggOzsgKVxuXHRcdHtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdHVwZGF0ZURlYnVnRmxhZyg3MDApO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdFx0dHJhY2VUYXNrUGFzc2VzKDEsMSk7XG4iKTsNCisJCQkJZncud3JpdGUoIlx0XHRcdC8qIENpbiAtIENyZWF0ZSBsb2NhbCB2YXJpYWJsZXMgYW5kIGNvcHkgdGhlIGFjdHVhbCB2YXJpYWJsZSB0byB0aGVtICovXG4iKTsNCisJCQkJZncud3JpdGUoIlx0XHRcdHRhc2tFTlRFUl9DUklUSUNBTCAoKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdFx0Y0lOXyIgKyB0YXNrLmdldE5hbWUoKSArICIoKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdFx0dGFza0VYSVRfQ1JJVElDQUwgKCk7XG4iKTsNCisJCQkJZncud3JpdGUoIlxuXHRcdFx0LypSdW5uYWJsZSBjYWxscyAqL1xuIik7DQorCQkJCWZvciAoZmluYWwgUnVubmFibGUgcnVuIDogcnVubmFibGVzT2ZUYXNrKSB7DQorCQkJCQlmdy53cml0ZSgiXHRcdFx0IiArIHJ1bi5nZXROYW1lKCkgKyAiKCk7XG4iKTsNCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXG5cdFx0XHQvKiBDb3V0IC0gV3JpdGUgYmFjayB0aGUgbG9jYWwgdmFyaWFibGVzIGJhY2sgdG8gdGhlIGFjdHVhbCB2YXJpYWJsZXMgKi9cbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdFx0dGFza0VOVEVSX0NSSVRJQ0FMICgpO1xuIik7DQorCQkJCWZ3LndyaXRlKCJcdFx0XHRjT1VUXyIgKyB0YXNrLmdldE5hbWUoKSArICIoKTtcbiIpOw0KKwkJCQlmdy53cml0ZSgiXHRcdFx0dGFza0VYSVRfQ1JJVElDQUwgKCk7XG4iKTsNCisJCQkJZmluYWwgTWFwcGluZ01vZGVsIG1hcHBpbmdNb2RlbCA9IG1vZGVsLmdldE1hcHBpbmdNb2RlbCgpOw0KKwkJCQlQcm9jZXNzaW5nVW5pdCBwdSA9IG51bGw7DQorCQkJCWlmIChtYXBwaW5nTW9kZWwgIT0gbnVsbCkgew0KKwkJCQkJcHUgPSBEZXBsb3ltZW50VXRpbC5nZXRBc3NpZ25lZENvcmVGb3JQcm9jZXNzKHRhc2ssIG1vZGVsKS5pdGVyYXRvcigpLm5leHQoKTsNCisJCQkJCVRpbWUgdGFza1RpbWUgPSBSdW50aW1lVXRpbC5nZXRFeGVjdXRpb25UaW1lRm9yUHJvY2Vzcyh0YXNrLCBwdSwgbnVsbCwgVGltZVR5cGUuV0NFVCk7DQorCQkJCQl0YXNrVGltZSA9IFRpbWVVdGlsLmNvbnZlcnRUb1RpbWVVbml0KHRhc2tUaW1lLCBUaW1lVW5pdC5NUyk7DQorCQkJCQlmaW5hbCBCaWdJbnRlZ2VyIHNsZWVwVGltZSA9IHRhc2tUaW1lLmdldFZhbHVlKCk7DQorCQkJCQlmaW5hbCBCaWdJbnRlZ2VyIGIyID0gbmV3IEJpZ0ludGVnZXIoIjEwMDAiKTsNCisJCQkJCWZpbmFsIGludCBjb21wYXJldmFsdWUgPSBzbGVlcFRpbWUuY29tcGFyZVRvKGIyKTsNCisJCQkJCWlmIChjb21wYXJldmFsdWUgPCAwKSB7DQorCQkJCQkJZncud3JpdGUoIlxuXHRcdFx0c2xlZXBUaW1lck1zKDEgLCAxIiArICh0YXNrQ291bnQgKyAxKSArICIpO1xuIik7DQorCQkJCQl9DQorCQkJCQllbHNlIHsNCisJCQkJCQlmdy53cml0ZSgiXG5cdFx0XHRzbGVlcFRpbWVyTXMoIiArIHNsZWVwVGltZSArICIsICIgKyB0YXNrQ291bnQgKyAxICsgIik7XG4iKTsNCisJCQkJCX0NCisJCQkJCXRhc2tDb3VudCsrOw0KKwkJCQl9DQorCQkJCWZ3LndyaXRlKCJcblx0XHRcdHRhc2tDb3VudCIgKyB0YXNrLmdldE5hbWUoKSArICIrKzsiKTsNCisJCQkJZncud3JpdGUoIlxuXHRcdFx0dHJhY2VUYXNrUGFzc2VzKCIgKyB0YXNrQ291bnQgKyAiLCB0YXNrQ291bnQiICsgdGFzay5nZXROYW1lKCkgKyAiKTsiKTsNCisJCQkJZncud3JpdGUoIlxuXHRcdFx0dHJhY2VSdW5uaW5nVGFzaygwKTtcbiIpOw0KKwkJCQlmaW5hbCBFTGlzdDxTdGltdWx1cz4gU3RpbXVsaSA9IG1vZGVsLmdldFN0aW11bGlNb2RlbCgpLmdldFN0aW11bGkoKTsNCisJCQkJZm9yIChmaW5hbCBTdGltdWx1cyBzIDogU3RpbXVsaSkgew0KKwkJCQkJaWYgKHMgaW5zdGFuY2VvZiBQZXJpb2RpY1N0aW11bHVzKSB7DQorCQkJCQkJaWYgKHRhc2suZ2V0U3RpbXVsaSgpLmdldCgwKSA9PSBzKSB7DQorCQkJCQkJCWZ3LndyaXRlKCJcdFx0XHR2VGFza0RlbGF5VW50aWwoJnhMYXN0V2FrZVRpbWUsICINCisJCQkJCQkJCQkrICgoUGVyaW9kaWNTdGltdWx1cykgcykuZ2V0UmVjdXJyZW5jZSgpLmdldFZhbHVlKCkgKyAiKTtcbiIpOw0KKwkJCQkJCX0NCisJCQkJCX0NCisJCQkJfQ0KKwkJCQlmdy53cml0ZSgiXHRcdH1cbiIpOw0KKwkJCQlmdy53cml0ZSgiXHR9XG5cbiIpOw0KKwkJCX0NCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisJfQ0KKw0KKwkvKioNCisJICogU2hhcmVkIExhYmVsIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHN0cnVjdHVyZS4NCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICogQHBhcmFtIGxhYmVsbGlzdA0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBMaXN0PExhYmVsPiBUYXNrU3BlY2lmaWNMYWJlbChmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgVGFzayB0YXNrcykgew0KKwkJTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxMaXN0ID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oU29mdHdhcmVVdGlsLmdldEFjY2Vzc2VkTGFiZWxTZXQodGFza3MsIG51bGwpKTsNCisJCVNoYXJlZExhYmVsTGlzdCA9IFNoYXJlZExhYmVsTGlzdC5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7DQorCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbExpc3RTb3J0Q29yZSA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KCk7DQorCQlpZiAoU2hhcmVkTGFiZWxMaXN0LnNpemUoKSA9PSAwKSB7DQorCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJTaGFyZWQgTGFiZWwgc2l6ZSAwIik7DQorCQl9DQorCQllbHNlIHsNCisJCQlmaW5hbCBIYXNoTWFwPExhYmVsLCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0Pj4gc2hhcmVkTGFiZWxUYXNrTWFwID0gTGFiZWxGaWxlQ3JlYXRpb24NCisJCQkJCS5MYWJlbFRhc2tNYXAobW9kZWwsIFNoYXJlZExhYmVsTGlzdCk7DQorCQkJZm9yIChmaW5hbCBMYWJlbCBzaGFyZSA6IFNoYXJlZExhYmVsTGlzdCkgew0KKwkJCQlmaW5hbCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0PiBUYXNrTWFwID0gc2hhcmVkTGFiZWxUYXNrTWFwLmdldChzaGFyZSk7DQorCQkJCWZpbmFsIFNldDxUYXNrPiB0YXNrTGlzdCA9IFRhc2tNYXAua2V5U2V0KCk7DQorCQkJCWZpbmFsIENvbGxlY3Rpb248UHJvY2Vzc2luZ1VuaXQ+IHB1TGlzdCA9IFRhc2tNYXAudmFsdWVzKCk7DQorCQkJCWZpbmFsIExpc3Q8UHJvY2Vzc2luZ1VuaXQ+IHB1TGlzdFVuaXF1ZSA9IHB1TGlzdC5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7DQorCQkJCWlmICghKChwdUxpc3RVbmlxdWUuc2l6ZSgpID09IDEgJiYgdGFza0xpc3Quc2l6ZSgpID4gMSkgfHwgKHB1TGlzdFVuaXF1ZS5zaXplKCkgPiAxKSkpIHsNCisJCQkJCVNoYXJlZExhYmVsTGlzdFNvcnRDb3JlLmFkZChzaGFyZSk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQlyZXR1cm4gU2hhcmVkTGFiZWxMaXN0U29ydENvcmU7DQorCX0NCisNCisJLyoqDQorCSAqIGhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIEFtYWx0aGVhIE1vZGVsDQorCSAqDQorCSAqLw0KKwlwdWJsaWMgQW1hbHRoZWEgZ2V0TW9kZWwoKSB7DQorCQlyZXR1cm4gdGhpcy5tb2RlbDsNCisJfQ0KK30NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vY2hlY2tzL2NoZWNrRmlsZUNyZWF0ZUdVSS5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL2NoZWNrcy9jaGVja0ZpbGVDcmVhdGVHVUkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xZjcxNDYzCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL2NoZWNrcy9jaGVja0ZpbGVDcmVhdGVHVUkuamF2YQpAQCAtMCwwICsxLDMyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgQ29weXJpZ2h0IChjKSAyMDE5IERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyBhbmQgb3RoZXJzLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogICB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqCisgKiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKgorICogICBDb250cmlidXRvcnM6CisgKiAgICAgICBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uY2hlY2tzOworCitpbXBvcnQgamF2YS5hd3QuQ29sb3I7CitpbXBvcnQgamF2YS5hd3QuRGVza3RvcDsKK2ltcG9ydCBqYXZhLmF3dC5FdmVudFF1ZXVlOworaW1wb3J0IGphdmEuYXd0LkZvbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CitpbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uTGlzdGVuZXI7CitpbXBvcnQgamF2YS5hd3QuaW1hZ2UuQnVmZmVyZWRJbWFnZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS5zcWwuVGltZXN0YW1wOworCitpbXBvcnQgamF2YXguaW1hZ2Vpby5JbWFnZUlPOworaW1wb3J0IGphdmF4LnN3aW5nLkJ1dHRvbkdyb3VwOworaW1wb3J0IGphdmF4LnN3aW5nLkltYWdlSWNvbjsKK2ltcG9ydCBqYXZheC5zd2luZy5KQnV0dG9uOworaW1wb3J0IGphdmF4LnN3aW5nLkpGaWxlQ2hvb3NlcjsKK2ltcG9ydCBqYXZheC5zd2luZy5KRnJhbWU7CitpbXBvcnQgamF2YXguc3dpbmcuSkxhYmVsOworaW1wb3J0IGphdmF4LnN3aW5nLkpSYWRpb0J1dHRvbjsKK2ltcG9ydCBqYXZheC5zd2luZy5KU2VwYXJhdG9yOworaW1wb3J0IGphdmF4LnN3aW5nLkpUZXh0RmllbGQ7CitpbXBvcnQgamF2YXguc3dpbmcuZmlsZWNob29zZXIuRmlsZU5hbWVFeHRlbnNpb25GaWx0ZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLmlvLkFtYWx0aGVhTG9hZGVyOworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIG9mIEdVSSBEZXNpZ24gYW5kIEFjdGlvbiBvbiBCdXR0b24gQ2xpY2suCisgKi8KKworcHVibGljIGNsYXNzIGNoZWNrRmlsZUNyZWF0ZUdVSSB7CisJSkZyYW1lIGZyYW1lOworCisJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgeworCQlFdmVudFF1ZXVlLmludm9rZUxhdGVyKG5ldyBSdW5uYWJsZSgpIHsKKwkJCUBTdXBwcmVzc1dhcm5pbmdzKCJudWxsIikKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWNoZWNrRmlsZUNyZWF0ZUdVSSB3aW5kb3cgPSBudWxsOworCQkJCXRyeSB7CisJCQkJCXdpbmRvdyA9IG5ldyBjaGVja0ZpbGVDcmVhdGVHVUkoKTsKKwkJCQl9CisJCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJCQl9CisJCQkJd2luZG93LmZyYW1lLnNldFZpc2libGUodHJ1ZSk7CisJCQkJd2luZG93LmZyYW1lLnNldFRpdGxlKCJDREdlbiIpOworCisJCQl9CisJCX0pOworCisJfQorCisJcHVibGljIGNoZWNrRmlsZUNyZWF0ZUdVSSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWluaXRpYWxpemUoKTsKKwl9CisKKwlpbnQgbW9kZWxJbmRleDsKKwlTdHJpbmcgZmlsZUlucHV0OworCVN0cmluZyBmaWxlSW5wdXQxOworCUpUZXh0RmllbGQgdHh0RmllbGRTY2hlZHVsZXIgPSBuZXcgSlRleHRGaWVsZCgiRnJlZVJUT1MgLyBSTVMgLyBQT1NJWCBCcm93c2UgcGF0aCIpOworCUpUZXh0RmllbGQgdHh0RmllbGRNb2RlbCA9IG5ldyBKVGV4dEZpZWxkKCJBbWFsdGhlYSBNb2RlbCBCcm93c2UgcGF0aCIpOworCisJcHJpdmF0ZSB2b2lkIGluaXRpYWxpemUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzLmZyYW1lID0gbmV3IEpGcmFtZSgpOworCQl0aGlzLmZyYW1lLnNldEJvdW5kcygxMDAsIDEwMCwgODY0LCAyNzIpOworCQl0aGlzLmZyYW1lLnNldERlZmF1bHRDbG9zZU9wZXJhdGlvbihKRnJhbWUuRVhJVF9PTl9DTE9TRSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5zZXRMYXlvdXQobnVsbCk7CisKKwkJZmluYWwgSlJhZGlvQnV0dG9uIGNkZ2VuRnJlZVJUT1MgPSBuZXcgSlJhZGlvQnV0dG9uKCJGcmVlUlRPUyIpOworCQljZGdlbkZyZWVSVE9TLnNldEJvdW5kcyg0MCwgODAsIDE0NSwgMjUpOworCQl0aGlzLmZyYW1lLmdldENvbnRlbnRQYW5lKCkuYWRkKGNkZ2VuRnJlZVJUT1MpOworCisJCWZpbmFsIEpSYWRpb0J1dHRvbiBjZGdlblBvc2l4ID0gbmV3IEpSYWRpb0J1dHRvbigiUE9TSVgiKTsKKwkJY2RnZW5Qb3NpeC5zZXRCb3VuZHMoNDAsIDExMCwgMTQ1LCAyNSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQoY2RnZW5Qb3NpeCk7CisKKwkJZmluYWwgSlJhZGlvQnV0dG9uIGNkZ2VuQ3VzdG9tID0gbmV3IEpSYWRpb0J1dHRvbigiUk1TKFJhdGUgTW9ub3RvbmljKSIpOworCQljZGdlbkN1c3RvbS5zZXRCb3VuZHMoNDAsIDE0MCwgMjEwLCAyNSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQoY2RnZW5DdXN0b20pOworCisJCWZpbmFsIEJ1dHRvbkdyb3VwIGdyb3VwID0gbmV3IEJ1dHRvbkdyb3VwKCk7CisJCWdyb3VwLmFkZChjZGdlbkZyZWVSVE9TKTsKKwkJZ3JvdXAuYWRkKGNkZ2VuUG9zaXgpOworCQlncm91cC5hZGQoY2RnZW5DdXN0b20pOworCisJCWZpbmFsIEpSYWRpb0J1dHRvbiBjZGdlbkNvb3BlcmF0aXZlID0gbmV3IEpSYWRpb0J1dHRvbigiQ29vcGVyYXRpdmUiKTsKKwkJY2RnZW5Db29wZXJhdGl2ZS5zZXRCb3VuZHMoMTkwLCA4MCwgMTQ1LCAyNSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQoY2RnZW5Db29wZXJhdGl2ZSk7CisKKwkJZmluYWwgSlJhZGlvQnV0dG9uIGNkZ2VuUHJlZW1wdGl2ZSA9IG5ldyBKUmFkaW9CdXR0b24oIlByZWVtcHRpdmUiKTsKKwkJY2RnZW5QcmVlbXB0aXZlLnNldEJvdW5kcygxOTAsIDExMCwgMTQ1LCAyNSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQoY2RnZW5QcmVlbXB0aXZlKTsKKworCQlmaW5hbCBCdXR0b25Hcm91cCBncm91cDMgPSBuZXcgQnV0dG9uR3JvdXAoKTsKKwkJZ3JvdXAzLmFkZChjZGdlbkNvb3BlcmF0aXZlKTsKKwkJZ3JvdXAzLmFkZChjZGdlblByZWVtcHRpdmUpOworCQlmaW5hbCBCdWZmZXJlZEltYWdlIGJyb3dzZUJ1dHRvbkljb25TY2hlZHVsZXIgPSBJbWFnZUlPLnJlYWQobmV3IEZpbGUoIi4vY2RnZW4uZ3JhcGhpY3MvYnJvd3NlLnBuZyIpKTsKKwkJZmluYWwgSkJ1dHRvbiBidG5Ccm93c2VTY2hlZHVsZXIgPSBuZXcgSkJ1dHRvbihuZXcgSW1hZ2VJY29uKGJyb3dzZUJ1dHRvbkljb25TY2hlZHVsZXIpKTsKKwkJZmluYWwgSkZpbGVDaG9vc2VyIGZjID0gbmV3IEpGaWxlQ2hvb3NlcigpOworCQlidG5Ccm93c2VTY2hlZHVsZXIuYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoZmluYWwgQWN0aW9uRXZlbnQgZSkgeworCQkJCWlmIChlLmdldFNvdXJjZSgpID09IGJ0bkJyb3dzZVNjaGVkdWxlcikgeworCQkJCQlmaW5hbCBpbnQgcmV0dXJuVmFsID0gZmMuc2hvd09wZW5EaWFsb2coY2hlY2tGaWxlQ3JlYXRlR1VJLnRoaXMuZnJhbWUpOworCQkJCQlpZiAocmV0dXJuVmFsID09IEpGaWxlQ2hvb3Nlci5BUFBST1ZFX09QVElPTikgeworCQkJCQkJZmluYWwgRmlsZSBmaWxlID0gZmMuZ2V0Q3VycmVudERpcmVjdG9yeSgpOworCQkJCQkJY2hlY2tGaWxlQ3JlYXRlR1VJLnRoaXMuZmlsZUlucHV0ID0gZmlsZS5nZXRQYXRoKCk7CisJCQkJCQljaGVja0ZpbGVDcmVhdGVHVUkudGhpcy50eHRGaWVsZFNjaGVkdWxlci5zZXRUZXh0KGNoZWNrRmlsZUNyZWF0ZUdVSS50aGlzLmZpbGVJbnB1dCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0pOworCQlidG5Ccm93c2VTY2hlZHVsZXIuc2V0Qm91bmRzKDY3MywgNzUsIDEyMCwgMzUpOworCQl0aGlzLmZyYW1lLmdldENvbnRlbnRQYW5lKCkuYWRkKGJ0bkJyb3dzZVNjaGVkdWxlcik7CisKKwkJZmluYWwgQnVmZmVyZWRJbWFnZSBicm93c2VCdXR0b25JY29uTW9kZWwgPSBJbWFnZUlPLnJlYWQobmV3IEZpbGUoIi4vY2RnZW4uZ3JhcGhpY3MvYnJvd3NlLnBuZyIpKTsKKwkJZmluYWwgSkJ1dHRvbiBidG5Ccm93c2VNb2RlbCA9IG5ldyBKQnV0dG9uKG5ldyBJbWFnZUljb24oYnJvd3NlQnV0dG9uSWNvbk1vZGVsKSk7CisJCWZpbmFsIEpGaWxlQ2hvb3NlciBmYzEgPSBuZXcgSkZpbGVDaG9vc2VyKCk7CisJCS8vIGZpbmFsIFN0cmluZyBmaWxlSW5wdXQxOworCQlidG5Ccm93c2VNb2RlbC5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChmaW5hbCBBY3Rpb25FdmVudCBlKSB7CisKKwkJCQlpZiAoZS5nZXRTb3VyY2UoKSA9PSBidG5Ccm93c2VNb2RlbCkgeworCQkJCQlmaW5hbCBGaWxlTmFtZUV4dGVuc2lvbkZpbHRlciBmaWx0ZXIgPSBuZXcgRmlsZU5hbWVFeHRlbnNpb25GaWx0ZXIoIiouYW14bWkiLCAiKi5hbXhtaSIpOworCQkJCQlmYzEuYWRkQ2hvb3NhYmxlRmlsZUZpbHRlcihmaWx0ZXIpOworCQkJCQlmYzEuc2V0TXVsdGlTZWxlY3Rpb25FbmFibGVkKGZhbHNlKTsKKwkJCQkJLy8gZmMxLnNob3dPcGVuRGlhbG9nKG51bGwpOworCQkJCQlmaW5hbCBpbnQgcmV0dXJuVmFsID0gZmMxLnNob3dPcGVuRGlhbG9nKGNoZWNrRmlsZUNyZWF0ZUdVSS50aGlzLmZyYW1lKTsKKwkJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJcblJhbSAiICsKKwkJCQkJLy8gZmlsZVV0aWwuZ2V0RmlsZUV4dGVuc2lvbihmYzEuZ2V0U2VsZWN0ZWRGaWxlKCkpKTsKKwkJCQkJLy8gaWYoZmlsZVV0aWwuZ2V0RmlsZUV4dGVuc2lvbihmYzEuZ2V0U2VsZWN0ZWRGaWxlKCkpPT0iYW14bWkiKXsKKwkJCQkJaWYgKHJldHVyblZhbCA9PSBKRmlsZUNob29zZXIuQVBQUk9WRV9PUFRJT04pIHsKKwkJCQkJCWZpbmFsIEZpbGUgZmlsZSA9IGZjMS5nZXRTZWxlY3RlZEZpbGUoKTsKKwkJCQkJCWNoZWNrRmlsZUNyZWF0ZUdVSS50aGlzLmZpbGVJbnB1dDEgPSBmaWxlLmdldFBhdGgoKTsKKwkJCQkJCWNoZWNrRmlsZUNyZWF0ZUdVSS50aGlzLnR4dEZpZWxkTW9kZWwuc2V0VGV4dChjaGVja0ZpbGVDcmVhdGVHVUkudGhpcy5maWxlSW5wdXQxKTsKKwkJCQkJfQorCQkJCQkvKgorCQkJCQkgKiB9ZWxzZSB7IEpPcHRpb25QYW5lLnNob3dNZXNzYWdlRGlhbG9nKG51bGwsCisJCQkJCSAqICIgY2hvb3NlIGEgZmlsZSB3aXRoIFwiLmFteG1pXCIgZmlsZSAiLCJXcm9uZyBtb2RlbCBmaWxlIgorCQkJCQkgKiAsMik7IH0KKwkJCQkJICovCisJCQkJfQorCQkJfQorCQl9KTsKKwkJYnRuQnJvd3NlTW9kZWwuc2V0Qm91bmRzKDY3MywgMTMwLCAxMjAsIDM1KTsKKwkJdGhpcy5mcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZChidG5Ccm93c2VNb2RlbCk7CisJCWZpbmFsIEJ1ZmZlcmVkSW1hZ2UgaGVscEJ1dHRvbkljb24gPSBJbWFnZUlPLnJlYWQobmV3IEZpbGUoIi4vY2RnZW4uZ3JhcGhpY3MvaGVscC5wbmciKSk7CisJCWZpbmFsIEpCdXR0b24gYnRuSGVscCA9IG5ldyBKQnV0dG9uKG5ldyBJbWFnZUljb24oaGVscEJ1dHRvbkljb24pKTsKKwkJYnRuSGVscC5hZGRBY3Rpb25MaXN0ZW5lcihuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChmaW5hbCBBY3Rpb25FdmVudCBlKSB7CisJCQkJdHJ5IHsKKwkJCQkJRGVza3RvcC5nZXREZXNrdG9wKCkKKwkJCQkJCQkuYnJvd3NlKG5ldyBVUkwoImh0dHBzOi8vY2RnZW5kb2MucmVhZHRoZWRvY3MuaW8vZW4vbGF0ZXN0L0dVSV9MYXlvdXQuaHRtbCIpLnRvVVJJKCkpOworCQkJCX0KKwkJCQljYXRjaCAoZmluYWwgRXhjZXB0aW9uIGUxKSB7CisJCQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQkJCX0KKwkJCX0KKwkJfSk7CisJCWJ0bkhlbHAuc2V0Qm91bmRzKDgwMCwgMTAsIDMwLCAzMCk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQoYnRuSGVscCk7CisKKwkJdGhpcy50eHRGaWVsZFNjaGVkdWxlci5zZXRCb3VuZHMoMzcwLCA4MCwgMjgwLCAyNSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQodGhpcy50eHRGaWVsZFNjaGVkdWxlcik7CisKKworCQl0aGlzLnR4dEZpZWxkTW9kZWwuc2V0Qm91bmRzKDM3MCwgMTQwLCAyODAsIDI1KTsKKwkJdGhpcy5mcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZCh0aGlzLnR4dEZpZWxkTW9kZWwpOworCisKKwkJZmluYWwgQnVmZmVyZWRJbWFnZSBzdGFydEJ1dHRvbkljb24gPSBJbWFnZUlPLnJlYWQobmV3IEZpbGUoIi4vY2RnZW4uZ3JhcGhpY3Mvc3RhcnQucG5nIikpOworCQlmaW5hbCBKQnV0dG9uIGJ0blNlbGVjdFRhc2tzID0gbmV3IEpCdXR0b24obmV3IEltYWdlSWNvbihzdGFydEJ1dHRvbkljb24pKTsKKwkJYnRuU2VsZWN0VGFza3MuYWRkQWN0aW9uTGlzdGVuZXIobmV3IEFjdGlvbkxpc3RlbmVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoZmluYWwgQWN0aW9uRXZlbnQgZSkgeworCQkJCS8vIEZpbGUgaW5wdXRGaWxlID0gbmV3IEZpbGUoKTsKKwkJCQkvLyBTdHJpbmcgaW5wdXRGaWxlID0gQ29uc3RhbnRzLkRFTU9DQVJNVUxUSTsKKwkJCQlmaW5hbCBBbWFsdGhlYSBtb2RlbCA9IEFtYWx0aGVhTG9hZGVyCisJCQkJCQkubG9hZEZyb21GaWxlTmFtZWQoY2hlY2tGaWxlQ3JlYXRlR1VJLnRoaXMudHh0RmllbGRNb2RlbC5nZXRUZXh0KCkpOworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG4gTW9kZWwgZmlsZSAiICsgY2hlY2tGaWxlQ3JlYXRlR1VJLnRoaXMudHh0RmllbGRNb2RlbC5nZXRUZXh0KCkpOworCQkJCWlmIChtb2RlbCA9PSBudWxsKSB7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3I6IE5vIG1vZGVsIGxvYWRlZCEiKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQlmaW5hbCBTdHJpbmcgcGF0aCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKTsKKwkJCQlTdHJpbmcgdGltZXN0YW1wID0gbmV3IFRpbWVzdGFtcChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSkudG9TdHJpbmcoKTsKKwkJCQl0aW1lc3RhbXAgPSB0aW1lc3RhbXAuc3Vic3RyaW5nKDAsIHRpbWVzdGFtcC5sZW5ndGgoKSAtIDYpLnJlcGxhY2VBbGwoIjoiLCAiIik7CisJCQkJdGltZXN0YW1wID0gdGltZXN0YW1wLnJlcGxhY2VBbGwoIi0iLCAiXyIpOworCQkJCXRpbWVzdGFtcCA9IHRpbWVzdGFtcC5yZXBsYWNlQWxsKCIgIiwgIl8iKTsKKwkJCQlmaW5hbCBGaWxlIHRoZURpciA9IG5ldyBGaWxlKHRpbWVzdGFtcCk7CisJCQkJaWYgKCF0aGVEaXIuZXhpc3RzKCkpIHsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJjcmVhdGluZyBkaXJlY3Rvcnk6ICIgKyB0aGVEaXIuZ2V0TmFtZSgpKTsKKwkJCQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKKwkJCQkJdHJ5IHsKKwkJCQkJCXRoZURpci5ta2RpcigpOworCQkJCQkJcmVzdWx0ID0gdHJ1ZTsKKwkJCQkJfQorCQkJCQljYXRjaCAoZmluYWwgU2VjdXJpdHlFeGNlcHRpb24gc2UpIHsKKwkJCQkJCVN5c3RlbS5leGl0KDApOworCQkJCQl9CisJCQkJCWlmIChyZXN1bHQpIHsKKwkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRElSIGNyZWF0ZWQiKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlmaW5hbCBTdHJpbmcgcGF0aDEgPSBwYXRoICsgIi8iICsgdGltZXN0YW1wOworCQkJCWZpbmFsIFN0cmluZyBwYXRoMiA9IGNoZWNrRmlsZUNyZWF0ZUdVSS50aGlzLnR4dEZpZWxkU2NoZWR1bGVyLmdldFRleHQoKTsKKwkJCQlpbnQgY29uZmlnRmxhZyA9IDB4RkZGRjsKKwkJCQkvKgorCQkJCSAqCisJCQkJICogMFgxMDAwID09PiBGcmVlUlRPUyAwWDIwMDAgPT0+IFBPU0lYIDB4MzAwMCA9PT4gUk1TCisJCQkJICoKKwkJCQkgKiAwWDAwMTAgPT0+IENvb3BlcmF0aXZlIDBYMDAyMCA9PT4gUHJlZW1wdGl2ZQorCQkJCSAqCisJCQkJICogRnJlZVJUT1MgPT0gQ29vcGVyYXRpdmUgPT0gMHgxWDEwIEZyZWVSVE9TID09IFByZWVtcHRpdmUgPT0KKwkJCQkgKiAweDFYMjAgUE9TSVggPT0gQ29vcGVyYXRpdmUgPT0gMHgyWDEwIFBPU0lYID09IFByZWVtcHRpdmUgPT0KKwkJCQkgKiAweDJYMjAgUk1TID09IENvb3BlcmF0aXZlID09IDB4M1gxMCBSTVMgPT0gUHJlZW1wdGl2ZSA9PQorCQkJCSAqIDB4M1gyMCBYID09IERvbid0IGNhcmUKKwkJCQkgKi8KKworCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCQkJaWYgKGNkZ2VuRnJlZVJUT1MuaXNTZWxlY3RlZCgpICYgY2RnZW5QcmVlbXB0aXZlLmlzU2VsZWN0ZWQoKSkgeworCQkJCQljb25maWdGbGFnID0gMHgxMzIwOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHRGcmVlUlRPU1x0UHJlZW1wdGl2ZSIpOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkJCQluZXcgY2hlY2tGcmVlUlRPU0NvbmZpZ3VyYXRpb24obW9kZWwsIHBhdGgxLCBwYXRoMiwgY29uZmlnRmxhZyk7CisJCQkJfQorCQkJCWVsc2UgaWYgKGNkZ2VuRnJlZVJUT1MuaXNTZWxlY3RlZCgpICYgY2RnZW5Db29wZXJhdGl2ZS5pc1NlbGVjdGVkKCkpIHsKKwkJCQkJY29uZmlnRmxhZyA9IDB4MTMxMDsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJcdFx0RnJlZVJUT1NcdENvb3BlcmF0aXZlIik7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCQkJCW5ldyBjaGVja0ZyZWVSVE9TQ29uZmlndXJhdGlvbihtb2RlbCwgcGF0aDEsIHBhdGgyLCBjb25maWdGbGFnKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoY2RnZW5Qb3NpeC5pc1NlbGVjdGVkKCkgJiBjZGdlblByZWVtcHRpdmUuaXNTZWxlY3RlZCgpKSB7CisJCQkJCWNvbmZpZ0ZsYWcgPSAweDIzMjA7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRcdFBvc2l4XHRQcmVlbXB0aXZlIik7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCQkJCW5ldyBjaGVja1BPU0lYQ29uZmlndXJhdGlvbihtb2RlbCwgcGF0aDEsIHBhdGgyLCBjb25maWdGbGFnKTsKKwkJCQl9CisJCQkJZWxzZSBpZiAoY2RnZW5Qb3NpeC5pc1NlbGVjdGVkKCkgJiBjZGdlbkNvb3BlcmF0aXZlLmlzU2VsZWN0ZWQoKSkgeworCQkJCQljb25maWdGbGFnID0gMHgyMzEwOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHRQb3NpeFx0Q29vcGVyYXRpdmUiKTsKKwkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsKKwkJCQkJbmV3IGNoZWNrUE9TSVhDb25maWd1cmF0aW9uKG1vZGVsLCBwYXRoMSwgcGF0aDIsIGNvbmZpZ0ZsYWcpOworCQkJCX0KKwkJCQllbHNlIGlmIChjZGdlbkN1c3RvbS5pc1NlbGVjdGVkKCkgJiBjZGdlblByZWVtcHRpdmUuaXNTZWxlY3RlZCgpKSB7CisJCQkJCWNvbmZpZ0ZsYWcgPSAweDMxMjA7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRcdFJNU1x0UHJlZW1wdGl2ZSIpOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOworCQkJCQluZXcgY2hlY2tSTVNDb25maWd1cmF0aW9uKG1vZGVsLCBwYXRoMSwgcGF0aDIsIGNvbmZpZ0ZsYWcpOworCQkJCX0KKwkJCQllbHNlIGlmIChjZGdlbkN1c3RvbS5pc1NlbGVjdGVkKCkgJiBjZGdlbkNvb3BlcmF0aXZlLmlzU2VsZWN0ZWQoKSkgeworCQkJCQljb25maWdGbGFnID0gMHgzMTEwOworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHRSTVNcdENvb3BlcmF0aXZlIik7CisJCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIik7CisJCQkJCW5ldyBjaGVja1JNU0NvbmZpZ3VyYXRpb24obW9kZWwsIHBhdGgxLCBwYXRoMiwgY29uZmlnRmxhZyk7CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkNvbmZpZ3VyYXRpb24gTm90IERlZmluZWQhIik7CisJCQkJfQorCQkJfQorCQl9KTsKKwkJYnRuU2VsZWN0VGFza3Muc2V0Qm91bmRzKDE5MCwgMTkwLCAxMjAsIDM1KTsKKwkJdGhpcy5mcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZChidG5TZWxlY3RUYXNrcyk7CisJCWZpbmFsIEJ1ZmZlcmVkSW1hZ2UgY2xvc2VCdXR0b25JY29uID0gSW1hZ2VJTy5yZWFkKG5ldyBGaWxlKCIuL2NkZ2VuLmdyYXBoaWNzL2Nsb3NlLnBuZyIpKTsKKwkJZmluYWwgSkJ1dHRvbiBidG5DbG9zZSA9IG5ldyBKQnV0dG9uKG5ldyBJbWFnZUljb24oY2xvc2VCdXR0b25JY29uKSk7CisJCWJ0bkNsb3NlLmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgYWN0aW9uUGVyZm9ybWVkKGZpbmFsIEFjdGlvbkV2ZW50IGUpIHsKKwkJCQlTeXN0ZW0uZXhpdCgwKTsKKwkJCX0KKwkJfSk7CisJCWJ0bkNsb3NlLnNldEJvdW5kcygzNzAsIDE5MCwgMTIwLCAzNSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQoYnRuQ2xvc2UpOworCQlmaW5hbCBKTGFiZWwgbGJsQWxsVGFza3MgPSBuZXcgSkxhYmVsKCJPUyBPcHRpb25zIik7CisJCWxibEFsbFRhc2tzLnNldEZvbnQobmV3IEZvbnQoIlRhaG9tYSIsIEZvbnQuQk9MRCwgMTMpKTsKKwkJbGJsQWxsVGFza3Muc2V0Qm91bmRzKDQwLCA1NSwgMTEwLCAxNik7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQobGJsQWxsVGFza3MpOworCisJCWZpbmFsIEpMYWJlbCBsYmxNb2RlbFNlbGVjdGlvbiA9IG5ldyBKTGFiZWwoIk1vZGVsIHNlbGVjdGlvbiIpOworCQlsYmxNb2RlbFNlbGVjdGlvbi5zZXRGb250KG5ldyBGb250KCJUYWhvbWEiLCBGb250LkJPTEQsIDEzKSk7CisJCWxibE1vZGVsU2VsZWN0aW9uLnNldEJvdW5kcygzNzAsIDExMCwgMTQ1LCAyNSk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQobGJsTW9kZWxTZWxlY3Rpb24pOworCisJCWZpbmFsIEpMYWJlbCBsYmxTb3VyY2VQYXRoID0gbmV3IEpMYWJlbCgiU291cmNlIFBhdGgiKTsKKwkJbGJsU291cmNlUGF0aC5zZXRGb250KG5ldyBGb250KCJUYWhvbWEiLCBGb250LkJPTEQsIDEzKSk7CisJCWxibFNvdXJjZVBhdGguc2V0Qm91bmRzKDM3MCwgNTAsIDE0NSwgMjUpOworCQl0aGlzLmZyYW1lLmdldENvbnRlbnRQYW5lKCkuYWRkKGxibFNvdXJjZVBhdGgpOworCisJCWZpbmFsIEpMYWJlbCBsYmxSZXNwb25zZXRpbWUgPSBuZXcgSkxhYmVsKCJUYXNrIFByZWVtcHRpb24iKTsKKwkJbGJsUmVzcG9uc2V0aW1lLnNldEZvbnQobmV3IEZvbnQoIlRhaG9tYSIsIEZvbnQuQk9MRCwgMTMpKTsKKwkJbGJsUmVzcG9uc2V0aW1lLnNldEJvdW5kcygxOTAsIDU1LCAxNTAsIDE2KTsKKwkJdGhpcy5mcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZChsYmxSZXNwb25zZXRpbWUpOworCisJCWZpbmFsIEpMYWJlbCBsYmxQZXJmb3JtYW5jZU1ldHJpYyA9IG5ldyBKTGFiZWwoIkNER2VuIC0gQ29kZSBHZW5lcmF0b3IgZm9yIEFQUDRNQyIpOworCQlsYmxQZXJmb3JtYW5jZU1ldHJpYy5zZXRGb3JlZ3JvdW5kKENvbG9yLk9SQU5HRSk7CisJCWxibFBlcmZvcm1hbmNlTWV0cmljLnNldEZvbnQobmV3IEZvbnQoIlRhaG9tYSIsIEZvbnQuQk9MRCwgMjApKTsKKwkJbGJsUGVyZm9ybWFuY2VNZXRyaWMuc2V0Qm91bmRzKDI3LCAxMywgNDUwLCAzMCk7CisJCXRoaXMuZnJhbWUuZ2V0Q29udGVudFBhbmUoKS5hZGQobGJsUGVyZm9ybWFuY2VNZXRyaWMpOworCisJCWZpbmFsIEpTZXBhcmF0b3Igc2VwYXJhdG9yID0gbmV3IEpTZXBhcmF0b3IoKTsKKwkJc2VwYXJhdG9yLnNldEJvdW5kcygxMiwgNDIsIDgyMiwgMjcyKTsKKwkJdGhpcy5mcmFtZS5nZXRDb250ZW50UGFuZSgpLmFkZChzZXBhcmF0b3IpOworCX0KK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9jaGVja3MvY2hlY2tGcmVlUlRPU0NvbmZpZ3VyYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9jaGVja3MvY2hlY2tGcmVlUlRPU0NvbmZpZ3VyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGI4ZmMwCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL2NoZWNrcy9jaGVja0ZyZWVSVE9TQ29uZmlndXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuCisgKgorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiAgIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICoKKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqCisgKiAgIENvbnRyaWJ1dG9yczoKKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5jaGVja3M7CisKK2ltcG9ydCBqYXZhLmF3dC5EZXNrdG9wOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLkZyZWVSVE9TQ29uZmlnRmlsZUNyZWF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5MYWJlbEZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uTWFpblJNU0ZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uTWFrZUZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uUnVuRmlsZUNyZWF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5TaGFyZWRMYWJlbHNGaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLlRhc2tGaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLnRlc3QudGVzdFRhc2tTdHJ1Y3R1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLnV0aWxzLmZpbGVVdGlsOworCisKKy8qKgorICogSW1wbGVtZW50YXRpb24gb2YgR1VJIERlc2lnbiBhbmQgQWN0aW9uIG9uIEJ1dHRvbiBDbGljay4KKyAqCisgKi8KKworcHVibGljIGNsYXNzIGNoZWNrRnJlZVJUT1NDb25maWd1cmF0aW9uIHsKKwlwdWJsaWMgY2hlY2tGcmVlUlRPU0NvbmZpZ3VyYXRpb24oZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBTdHJpbmcgaGVhZGVyUGF0aCwKKwkJCWZpbmFsIGludCBjb25maWdGbGFnKSB7CisJCUZyZWVSVE9TQ29uZmlndXJhdGlvbihtb2RlbCwgc3JjUGF0aCwgaGVhZGVyUGF0aCwgY29uZmlnRmxhZyk7CisJfQorCisJcHVibGljIHZvaWQgRnJlZVJUT1NDb25maWd1cmF0aW9uKGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBTdHJpbmcgc3JjUGF0aCwgZmluYWwgU3RyaW5nIGhlYWRlclBhdGgsCisJCQlmaW5hbCBpbnQgY29uZmlnRmxhZykgeworCQl0cnkgeworCQkJLy8gU3RyaW5nIHBhdGggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIik7CisJCQkvLyBjcmVhdGUgbmV3IGZpbGUKKwkJCWZpbmFsIEZpbGUgbF9Tb3VyY2VEaXJlY3RvcnkgPSBuZXcgRmlsZShoZWFkZXJQYXRoKTsKKwkJCS8vIGFycmF5IG9mIGZpbGVzIGFuZCBkaXJlY3RvcnkKKwkJCWZpbmFsIFN0cmluZ1tdIGZpbGVzTmFtZSA9IGxfU291cmNlRGlyZWN0b3J5Lmxpc3QoKTsKKwkJCS8vIGZvciBlYWNoIG5hbWUgaW4gdGhlIHBhdGggYXJyYXkKKwkJCWZvciAoZmluYWwgU3RyaW5nIHBhdGhpIDogZmlsZXNOYW1lKSB7CisJCQkJZmluYWwgRmlsZSBTb3VyY2VGaWxlID0gbmV3IEZpbGUobF9Tb3VyY2VEaXJlY3RvcnkudG9TdHJpbmcoKSArICIvIiArIHBhdGhpKTsKKwkJCQlmaW5hbCBGaWxlIERlc3RpbmF0aW9uRmlsZSA9IG5ldyBGaWxlKFBhdGhzLmdldChzcmNQYXRoKS50b1N0cmluZygpICsgIi8iICsgcGF0aGkpOworCQkJCWlmIChmaWxlVXRpbC5nZXRGaWxlRXh0ZW5zaW9uKFNvdXJjZUZpbGUpID09ICJjIiB8fCBmaWxlVXRpbC5nZXRGaWxlRXh0ZW5zaW9uKFNvdXJjZUZpbGUpID09ICJoIgorCQkJCQkJfHwgZmlsZVV0aWwuZ2V0RmlsZUV4dGVuc2lvbihTb3VyY2VGaWxlKSA9PSAiIikgeworCQkJCQljb20uZ29vZ2xlLmNvbW1vbi5pby5GaWxlcy5jb3B5KFNvdXJjZUZpbGUsIERlc3RpbmF0aW9uRmlsZSk7CisJCQkJfQorCQkJfQorCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJdHJ5IHsKKwkJCW5ldyBNYWluUk1TRmlsZUNyZWF0aW9uKG1vZGVsLCBzcmNQYXRoLCBjb25maWdGbGFnKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXRyeSB7CisJCQluZXcgUnVuRmlsZUNyZWF0aW9uKG1vZGVsLCBzcmNQYXRoLCBoZWFkZXJQYXRoLCBjb25maWdGbGFnKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXRyeSB7CisJCQluZXcgTWFrZUZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IEZyZWVSVE9TQ29uZmlnRmlsZUNyZWF0aW9uKG1vZGVsLCBzcmNQYXRoLCBjb25maWdGbGFnKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXRyeSB7CisJCQluZXcgVGFza0ZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgaGVhZGVyUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IFNoYXJlZExhYmVsc0ZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IExhYmVsRmlsZUNyZWF0aW9uKG1vZGVsLCBzcmNQYXRoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXRyeSB7CisJCQluZXcgdGVzdFRhc2tTdHJ1Y3R1cmUobW9kZWwsIHNyY1BhdGgsIGNvbmZpZ0ZsYWcpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJHZW5lcmF0aW9uIGNvbXBsZXRlZCwgQ2hlY2sgcGF0aCAJIiArIHNyY1BhdGgpOworCQkvLyBUT0RPOiBTZXQgaHlwZXJsaW5rIGZvciBwYXRoCisJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiPGEgaHJlZj1cImh0dHA6Ly93d3cuZ29vZ2xlLmNvbVwiPndoYXRldmVyPC9hPiIpOworCQl0cnkgeworCQkJRGVza3RvcC5nZXREZXNrdG9wKCkub3BlbihuZXcgRmlsZShzcmNQYXRoKSk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlTeXN0ZW0uZXhpdCgwKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9jaGVja3MvY2hlY2tQT1NJWENvbmZpZ3VyYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9jaGVja3MvY2hlY2tQT1NJWENvbmZpZ3VyYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmI0NjI4Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL2NoZWNrcy9jaGVja1BPU0lYQ29uZmlndXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuCisgKgorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiAgIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICoKKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqCisgKiAgIENvbnRyaWJ1dG9yczoKKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5jaGVja3M7CisKK2ltcG9ydCBqYXZhLmF3dC5EZXNrdG9wOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5GcmVlUlRPU0NvbmZpZ0ZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uTGFiZWxGaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLk1haW5GaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLk1ha2VGaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLlJ1bkZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uVGFza0ZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udGVzdC50ZXN0VGFza1N0cnVjdHVyZTsKKworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIG9mIEdVSSBEZXNpZ24gYW5kIEFjdGlvbiBvbiBCdXR0b24gQ2xpY2suCisgKgorICoKKyAqLworCitwdWJsaWMgY2xhc3MgY2hlY2tQT1NJWENvbmZpZ3VyYXRpb24geworCXB1YmxpYyBjaGVja1BPU0lYQ29uZmlndXJhdGlvbihmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgU3RyaW5nIHNyY1BhdGgsIGZpbmFsIFN0cmluZyBoZWFkZXJQYXRoLAorCQkJZmluYWwgaW50IGNvbmZpZ0ZsYWcpIHsKKwkJUE9TSVhDb25maWd1cmF0aW9uKG1vZGVsLCBzcmNQYXRoLCBoZWFkZXJQYXRoLCBjb25maWdGbGFnKTsKKwl9CisKKwlwdWJsaWMgdm9pZCBQT1NJWENvbmZpZ3VyYXRpb24oZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIFN0cmluZyBzcmNQYXRoLCBmaW5hbCBTdHJpbmcgaGVhZGVyUGF0aCwKKwkJCWZpbmFsIGludCBjb25maWdGbGFnKSB7CisJCXRyeSB7CisJCQluZXcgTWFpbkZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IFJ1bkZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgaGVhZGVyUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IExhYmVsRmlsZUNyZWF0aW9uKG1vZGVsLCBzcmNQYXRoKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXRyeSB7CisJCQluZXcgRnJlZVJUT1NDb25maWdGaWxlQ3JlYXRpb24obW9kZWwsIHNyY1BhdGgsIGNvbmZpZ0ZsYWcpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJdHJ5IHsKKwkJCW5ldyBUYXNrRmlsZUNyZWF0aW9uKG1vZGVsLCBzcmNQYXRoLCBoZWFkZXJQYXRoLCBjb25maWdGbGFnKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXRyeSB7CisJCQluZXcgVGFza0ZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgaGVhZGVyUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IE1ha2VGaWxlQ3JlYXRpb24obW9kZWwsIHNyY1BhdGgsIGNvbmZpZ0ZsYWcpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJdHJ5IHsKKwkJCW5ldyB0ZXN0VGFza1N0cnVjdHVyZShtb2RlbCwgc3JjUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCisKKwkJU3lzdGVtLm91dC5wcmludGxuKCJHZW5lcmF0aW9uIGNvbXBsZXRlZCwgQ2hlY2sgcGF0aCAJIiArIHNyY1BhdGgpOworCQkvLyBUT0RPOiBTZXQgaHlwZXJsaW5rIGZvciBwYXRoCisJCXRyeSB7CisJCQlEZXNrdG9wLmdldERlc2t0b3AoKS5vcGVuKG5ldyBGaWxlKHNyY1BhdGgpKTsKKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisKKwkJU3lzdGVtLmV4aXQoMCk7CisKKwl9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi9jaGVja3MvY2hlY2tSTVNDb25maWd1cmF0aW9uLmphdmEgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vY2hlY2tzL2NoZWNrUk1TQ29uZmlndXJhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YjMyMTEKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vY2hlY2tzL2NoZWNrUk1TQ29uZmlndXJhdGlvbi5qYXZhCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICBDb3B5cmlnaHQgKGMpIDIwMTkgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIGFuZCBvdGhlcnMuCisgKgorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiAgIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICoKKyAqICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqCisgKiAgIENvbnRyaWJ1dG9yczoKKyAqICAgICAgIERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5jaGVja3M7CisKK2ltcG9ydCBqYXZhLmF3dC5EZXNrdG9wOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLkFybUNvZGVGaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLkZyZWVSVE9TQ29uZmlnRmlsZUNyZWF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5MYWJlbEZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uTWFpblJNU0ZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uTWFrZUZpbGVDcmVhdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uUnVuRmlsZUNyZWF0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi5TaGFyZWRMYWJlbHNGaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLlRhc2tGaWxlQ3JlYXRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLnRlc3QudGVzdFRhc2tTdHJ1Y3R1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmNkZ2VuLnV0aWxzLmZpbGVVdGlsOworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIG9mIEdVSSBEZXNpZ24gYW5kIEFjdGlvbiBvbiBCdXR0b24gQ2xpY2suCisgKgorICoKKyAqLworCitwdWJsaWMgY2xhc3MgY2hlY2tSTVNDb25maWd1cmF0aW9uIHsKKworCisJcHVibGljIGNoZWNrUk1TQ29uZmlndXJhdGlvbihmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgU3RyaW5nIHNyY1BhdGgsIGZpbmFsIFN0cmluZyBoZWFkZXJQYXRoLAorCQkJZmluYWwgaW50IGNvbmZpZ0ZsYWcpIHsKKwkJUk1TQ29uZmlndXJhdGlvbihtb2RlbCwgc3JjUGF0aCwgaGVhZGVyUGF0aCwgY29uZmlnRmxhZyk7CisJfQorCisJcHVibGljIHZvaWQgUk1TQ29uZmlndXJhdGlvbihmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgU3RyaW5nIHNyY1BhdGgsIGZpbmFsIFN0cmluZyBoZWFkZXJQYXRoLAorCQkJZmluYWwgaW50IGNvbmZpZ0ZsYWcpIHsKKwkJLyoKKwkJICogdHJ5IHsgU3RyaW5nIHBhdGggPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIik7IEZpbGUKKwkJICogbF9Tb3VyY2VEaXJlY3RvcnkgPSBudWxsOyBpZigweDMxMTAgPT0gKGNvbmZpZ0ZsYWcgJiAweEZGRjApKSB7CisJCSAqIGxfU291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUocGF0aCArICIvcmVmL3Jtc19jb29wLyIpOyB9ZWxzZQorCQkgKiBpZigweDMxMjAgPT0gKGNvbmZpZ0ZsYWcgJiAweEZGRjApKXsgbF9Tb3VyY2VEaXJlY3RvcnkgPSBuZXcKKwkJICogRmlsZShwYXRoICsgIi9yZWYvZnJlZXJ0b3NfcHJlZW0vIik7IH0gU3RyaW5nW10gZmlsZXNOYW1lID0KKwkJICogbF9Tb3VyY2VEaXJlY3RvcnkubGlzdCgpOyBmb3IoU3RyaW5nIHBhdGhpOmZpbGVzTmFtZSkgeyBGaWxlCisJCSAqIFNvdXJjZUZpbGUgPSBuZXcgRmlsZShsX1NvdXJjZURpcmVjdG9yeS50b1N0cmluZygpICsiLyIgKyBwYXRoaSk7CisJCSAqIEZpbGUgRGVzdGluYXRpb25GaWxlID0gbmV3IEZpbGUoUGF0aHMuZ2V0KHNyY1BhdGgpLnRvU3RyaW5nKCkgKyAiLyIgKworCQkgKiBwYXRoaSApOyBjb20uZ29vZ2xlLmNvbW1vbi5pby5GaWxlcy5jb3B5KFNvdXJjZUZpbGUgLCBEZXN0aW5hdGlvbkZpbGUKKwkJICogKTsgfSB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlMSkgeyBlMS5wcmludFN0YWNrVHJhY2UoKTsgfQorCQkgKi8KKwkJdHJ5IHsKKwkJCS8vIFN0cmluZyBwYXRoID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpOworCQkJLy8gY3JlYXRlIG5ldyBmaWxlCisJCQlmaW5hbCBGaWxlIGxfU291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoaGVhZGVyUGF0aCk7CisJCQkvLyBhcnJheSBvZiBmaWxlcyBhbmQgZGlyZWN0b3J5CisJCQlmaW5hbCBTdHJpbmdbXSBmaWxlc05hbWUgPSBsX1NvdXJjZURpcmVjdG9yeS5saXN0KCk7CisJCQkvLyBmb3IgZWFjaCBuYW1lIGluIHRoZSBwYXRoIGFycmF5CisJCQlmb3IgKGZpbmFsIFN0cmluZyBwYXRoaSA6IGZpbGVzTmFtZSkgeworCQkJCWZpbmFsIEZpbGUgU291cmNlRmlsZSA9IG5ldyBGaWxlKGxfU291cmNlRGlyZWN0b3J5LnRvU3RyaW5nKCkgKyAiLyIgKyBwYXRoaSk7CisJCQkJZmluYWwgRmlsZSBEZXN0aW5hdGlvbkZpbGUgPSBuZXcgRmlsZShQYXRocy5nZXQoc3JjUGF0aCkudG9TdHJpbmcoKSArICIvIiArIHBhdGhpKTsKKwkJCQlpZiAoZmlsZVV0aWwuZ2V0RmlsZUV4dGVuc2lvbihTb3VyY2VGaWxlKSA9PSAiYyIgfHwgZmlsZVV0aWwuZ2V0RmlsZUV4dGVuc2lvbihTb3VyY2VGaWxlKSA9PSAiaCIKKwkJCQkJCXx8IGZpbGVVdGlsLmdldEZpbGVFeHRlbnNpb24oU291cmNlRmlsZSkgPT0gIiIpIHsKKwkJCQkJY29tLmdvb2dsZS5jb21tb24uaW8uRmlsZXMuY29weShTb3VyY2VGaWxlLCBEZXN0aW5hdGlvbkZpbGUpOworCQkJCX0KKwkJCX0KKwkJfQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZTEpIHsKKwkJCWUxLnByaW50U3RhY2tUcmFjZSgpOworCQl9CisJCXRyeSB7CisJCQluZXcgTWFpblJNU0ZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IFJ1bkZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgaGVhZGVyUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IFRhc2tGaWxlQ3JlYXRpb24obW9kZWwsIHNyY1BhdGgsIGhlYWRlclBhdGgsIGNvbmZpZ0ZsYWcpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJdHJ5IHsKKwkJCW5ldyBGcmVlUlRPU0NvbmZpZ0ZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IE1ha2VGaWxlQ3JlYXRpb24obW9kZWwsIHNyY1BhdGgsIGNvbmZpZ0ZsYWcpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJdHJ5IHsKKwkJCW5ldyBTaGFyZWRMYWJlbHNGaWxlQ3JlYXRpb24obW9kZWwsIHNyY1BhdGgpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJdHJ5IHsKKwkJCW5ldyBMYWJlbEZpbGVDcmVhdGlvbihtb2RlbCwgc3JjUGF0aCk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQl0cnkgeworCQkJbmV3IEFybUNvZGVGaWxlQ3JlYXRpb24obW9kZWwsIHNyY1BhdGgsIGhlYWRlclBhdGgsIGNvbmZpZ0ZsYWcpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJdHJ5IHsKKwkJCW5ldyB0ZXN0VGFza1N0cnVjdHVyZShtb2RlbCwgc3JjUGF0aCwgY29uZmlnRmxhZyk7CisJCX0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUxKSB7CisJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIkdlbmVyYXRpb24gY29tcGxldGVkLCBDaGVjayBwYXRoIAkiICsgc3JjUGF0aCk7CisJCS8vIFRPRE86IFNldCBoeXBlcmxpbmsgZm9yIHBhdGgKKwkJdHJ5IHsKKwkJCURlc2t0b3AuZ2V0RGVza3RvcCgpLm9wZW4obmV3IEZpbGUoc3JjUGF0aCkpOworCQl9CisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlMSkgeworCQkJZTEucHJpbnRTdGFja1RyYWNlKCk7CisJCX0KKwkJU3lzdGVtLmV4aXQoMCk7CisJfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vdGVzdC90ZXN0TGFiZWwuamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi90ZXN0L3Rlc3RMYWJlbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTg0YTgKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vdGVzdC90ZXN0TGFiZWwuamF2YQpAQCAtMCwwICsxLDk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgQ29weXJpZ2h0IChjKSAyMDE5IERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyBhbmQgb3RoZXJzLg0KKyAqDQorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQorICogICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KKyAqICAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQorICoNCisgKiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQorICoNCisgKiAgIENvbnRyaWJ1dG9yczoNCisgKiAgICAgICBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi50ZXN0Ow0KKw0KK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsNCisNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuTGFiZWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLlNvZnR3YXJlVXRpbDsNCisNCisvKioNCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0ZXN0aW5nIFRhc2ssIFJ1bm5hYmxlIHN0cnVjdHVyZSBhbmQgTGFiZWwgdHlwZXMuDQorICoNCisgKi8NCisNCitwdWJsaWMgY2xhc3MgdGVzdExhYmVsDQorDQorew0KKw0KKwlwdWJsaWMgdGVzdExhYmVsKGZpbmFsIEFtYWx0aGVhIE1vZGVsLCBmaW5hbCBTdHJpbmcgcGF0aDEsIGZpbmFsIGludCBrLCBmaW5hbCBMaXN0PFRhc2s+IHRhc2ttb2QpDQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbGVUZXN0TGFiZWwoTW9kZWwsIHBhdGgxLCBrLCB0YXNrbW9kKTsNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgZmlsZVRlc3RMYWJlbChmaW5hbCBBbWFsdGhlYSBtb2RlbDIsIGZpbmFsIFN0cmluZyBwYXRoMSwgZmluYWwgaW50IGssIGZpbmFsIExpc3Q8VGFzaz4gdGFza3MpDQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIFN0cmluZyBmbmFtZSA9IHBhdGgxICsgRmlsZS5zZXBhcmF0b3IgKyAibGFiZWwiICsgayArICIuYyI7DQorCQkvLyBFTGlzdDxMYWJlbD4gbGFiZWwgPSBtb2RlbDIuZ2V0U3dNb2RlbCgpLmdldExhYmVscygpOw0KKwkJZmluYWwgTGlzdDxMYWJlbD4gbGFiZWwgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOw0KKwkJZm9yIChmaW5hbCBUYXNrIHRhIDogdGFza3MpIHsNCisJCQlsYWJlbC5hZGRBbGwoU29mdHdhcmVVdGlsLmdldEFjY2Vzc2VkTGFiZWxTZXQodGEsIG51bGwpKTsNCisJCX0NCisJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZSk7DQorCQlTdHJpbmdbXSB3b3JkcyA9IG51bGw7DQorCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJZmluYWwgRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKGYxKTsNCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQlmaW5hbCBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmcik7DQorCQlTdHJpbmcgczsNCisJCWZpbmFsIFN0cmluZyBpbnB1dCA9ICJcdHVpbnQiLCBpbnB1dDEgPSAiXHQ9XHQiOw0KKwkJaW50IGNvdW50ID0gMCwgY291bnQxID0gMDsNCisJCWludCBDb3VudGVyID0gMDsNCisJCXdoaWxlICgocyA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsNCisJCQl3b3JkcyA9IHMuc3BsaXQoIiAiKTsNCisJCQlmb3IgKGZpbmFsIFN0cmluZyB3b3JkIDogd29yZHMpIHsNCisJCQkJaWYgKHdvcmQuY29udGFpbnMoaW5wdXQpKSB7DQorCQkJCQljb3VudCsrOw0KKwkJCQl9DQorCQkJCWlmICh3b3JkLmVxdWFscyhpbnB1dDEpKSB7DQorCQkJCQljb3VudDErKzsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWZvciAoZmluYWwgVGFzayB0YXNrIDogdGFza3MpIHsNCisJCQlMaXN0PFJ1bm5hYmxlPiBydW5uYWJsZXNPZlRhc2sgPSBTb2Z0d2FyZVV0aWwuZ2V0UnVubmFibGVMaXN0KHRhc2ssIG51bGwpOw0KKwkJCWZpbmFsIEFycmF5TGlzdDxMYWJlbD4gbGFiZWxsaXN0MSA9IG5ldyBBcnJheUxpc3Q8TGFiZWw+KCk7DQorCQkJcnVubmFibGVzT2ZUYXNrID0gcnVubmFibGVzT2ZUYXNrLnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsNCisJCQlmb3IgKGZpbmFsIFJ1bm5hYmxlIHJ1biA6IHJ1bm5hYmxlc09mVGFzaykgew0KKwkJCQlmaW5hbCBTZXQ8TGFiZWw+IGxhYmVsbGlzdCA9IFNvZnR3YXJlVXRpbC5nZXRBY2Nlc3NlZExhYmVsU2V0KHJ1biwgbnVsbCk7DQorCQkJCWxhYmVsbGlzdDEuYWRkQWxsKGxhYmVsbGlzdCk7DQorCQkJfQ0KKwkJCWZpbmFsIExpc3Q8TGFiZWw+IGxpc3RXaXRob3V0RHVwbGljYXRlczIgPSBsYWJlbGxpc3QxLnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsNCisJCQlDb3VudGVyID0gQ291bnRlciArIGxpc3RXaXRob3V0RHVwbGljYXRlczIuc2l6ZSgpOw0KKwkJfQ0KKwkJaWYgKGNvdW50ICE9IGxhYmVsLnNpemUoKSArIENvdW50ZXIpIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oKGxhYmVsLnNpemUoKSArIENvdW50ZXIpICsgIlx0TGFiZWwgOiBFUlJPUjogTGFiZWwyIGNvdW50XHQiICsgY291bnQpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJMYWJlbCA6IExhYmVsMiBjb3VudCBPSyIpOw0KKwkJfQ0KKwkJaWYgKGNvdW50MSAhPSBsYWJlbC5zaXplKCkpIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4obGFiZWwuc2l6ZSgpICsgIlx0TGFiZWwgOiBFUlJPUjogTGFiZWwgY291bnRcdCIgKyBjb3VudDEpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJMYWJlbCA6IExhYmVsMSBjb3VudCBPSyIpOw0KKwkJfQ0KKwkJZnIuY2xvc2UoKTsNCisJfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vdGVzdC90ZXN0TWFpbi5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL3Rlc3QvdGVzdE1haW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yjg2MGEyCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL3Rlc3QvdGVzdE1haW4uamF2YQpAQCAtMCwwICsxLDExMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAgIENvcHlyaWdodCAoYykgMjAxOSBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgYW5kIG90aGVycy4NCisgKg0KKyAqICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KKyAqICAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCisgKiAgIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KKyAqDQorICogICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KKyAqDQorICogICBDb250cmlidXRvcnM6DQorICogICAgICAgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udGVzdDsNCisNCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrOw0KKw0KKy8qKg0KKyAqIEltcGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgVGFzaywgUnVubmFibGUgc3RydWN0dXJlIGFuZCBMYWJlbCB0eXBlcy4NCisgKg0KKyAqLw0KKw0KK3B1YmxpYyBjbGFzcyB0ZXN0TWFpbg0KKw0KK3sNCisNCisJcHVibGljIHRlc3RNYWluKGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBTdHJpbmcgcGF0aDEsIGZpbmFsIGludCBjb25maWdGbGFnLCBmaW5hbCBpbnQgaywNCisJCQlmaW5hbCBMaXN0PFRhc2s+IHRhc2ttb2QpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQorCQlpZiAoKDB4MTAwMCA9PSAoY29uZmlnRmxhZyAmIDB4RjAwMCkpKSB7DQorCQkJZmlsZVRlc3RtYWluVGFzayhtb2RlbCwgcGF0aDEsIGssIHRhc2ttb2QpOw0KKwkJfQ0KKwkJZWxzZSBpZiAoMHgyMDAwID09IChjb25maWdGbGFnICYgMHhGMDAwKSkgew0KKwkJCWZpbGVUZXN0bWFpblRhc2tQdGhyZWFkKG1vZGVsLCBwYXRoMSwgaywgdGFza21vZCk7DQorCQl9DQorCX0NCisNCisJcHJpdmF0ZSB2b2lkIGZpbGVUZXN0bWFpblRhc2tQdGhyZWFkKGZpbmFsIEFtYWx0aGVhIG1vZGVsMiwgZmluYWwgU3RyaW5nIHBhdGgxLCBmaW5hbCBpbnQgaywNCisJCQlmaW5hbCBMaXN0PFRhc2s+IHRhc2ttb2QpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQorCQlmaW5hbCBTdHJpbmcgZm5hbWUgPSBwYXRoMSArIEZpbGUuc2VwYXJhdG9yICsgIm1haW4iICsgayArICIuYyI7DQorCQkvLyBFTGlzdDxUYXNrPiB0YXNrbW9kID0gbW9kZWwyLmdldFN3TW9kZWwoKS5nZXRUYXNrcygpOw0KKwkJZmluYWwgRmlsZSBmMSA9IG5ldyBGaWxlKGZuYW1lKTsNCisJCVN0cmluZ1tdIHdvcmRzID0gbnVsbDsNCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQlmaW5hbCBGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIoZjEpOw0KKwkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCWZpbmFsIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsNCisJCVN0cmluZyBzOw0KKwkJZmluYWwgU3RyaW5nIGlucHV0ID0gIlx0XHRwdGhyZWFkX2NyZWF0ZSI7DQorCQlpbnQgY291bnQgPSAwOw0KKwkJd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKwkJCXdvcmRzID0gcy5zcGxpdCgiICIpOw0KKwkJCWZvciAoZmluYWwgU3RyaW5nIHdvcmQgOiB3b3Jkcykgew0KKwkJCQlpZiAod29yZC5lcXVhbHMoaW5wdXQpKSB7DQorCQkJCQljb3VudCsrOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKGNvdW50ICE9IHRhc2ttb2Quc2l6ZSgpKSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpICsgIlx0TWFpbiIgKyBrICsgIiA6IEVSUk9SOiBUYXNrIGNyZWF0ZSBjb3VudFx0IiArIGNvdW50KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiTWFpbiIgKyBrICsgIiA6IFRhc2sgY3JlYXRlIGNvdW50IE9LIik7DQorCQl9DQorCQlmci5jbG9zZSgpOw0KKwl9DQorDQorCXByaXZhdGUgdm9pZCBmaWxlVGVzdG1haW5UYXNrKGZpbmFsIEFtYWx0aGVhIG1vZGVsMiwgZmluYWwgU3RyaW5nIHBhdGgxLCBmaW5hbCBpbnQgaywgZmluYWwgTGlzdDxUYXNrPiB0YXNrbW9kKQ0KKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7DQorCQlmaW5hbCBTdHJpbmcgZm5hbWUgPSBwYXRoMSArIEZpbGUuc2VwYXJhdG9yICsgIm1haW4iICsgayArICIuYyI7DQorCQkvLyBFTGlzdDxUYXNrPiB0YXNrbW9kID0gbW9kZWwyLmdldFN3TW9kZWwoKS5nZXRUYXNrcygpOw0KKwkJZmluYWwgRmlsZSBmMSA9IG5ldyBGaWxlKGZuYW1lKTsNCisJCVN0cmluZ1tdIHdvcmRzID0gbnVsbDsNCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQlmaW5hbCBGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIoZjEpOw0KKwkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCWZpbmFsIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsNCisJCVN0cmluZyBzOw0KKwkJZmluYWwgU3RyaW5nIGlucHV0ID0gIlx0eFRhc2tDcmVhdGUoIjsNCisJCWZpbmFsIFN0cmluZyBpbnB1dDIgPSAiY29uZmlnTUlOSU1BTF9TVEFDS19TSVpFLCI7DQorCQlpbnQgY291bnQgPSAwLCBjb3VudDEgPSAwOw0KKwkJd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKwkJCXdvcmRzID0gcy5zcGxpdCgiICIpOw0KKwkJCWZvciAoZmluYWwgU3RyaW5nIHdvcmQgOiB3b3Jkcykgew0KKwkJCQlpZiAod29yZC5lcXVhbHMoaW5wdXQpKSB7DQorCQkJCQljb3VudCsrOw0KKwkJCQl9DQorCQkJCWVsc2UgaWYgKHdvcmQuZXF1YWxzKGlucHV0MikpIHsNCisJCQkJCWNvdW50MSsrOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKGNvdW50ICE9IHRhc2ttb2Quc2l6ZSgpKSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpICsgIlx0TWFpbiIgKyBrICsgIiA6IEVSUk9SOiBUYXNrIGNyZWF0ZSBjb3VudFx0IiArIGNvdW50KTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiTWFpbiIgKyBrICsgIiA6IFRhc2sgY3JlYXRlIGNvdW50IE9LIik7DQorCQl9DQorCQlpZiAoY291bnQxICE9IHRhc2ttb2Quc2l6ZSgpKSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpICsgIlx0TWFpbiIgKyBrICsgIiA6IEVSUk9SOiBUYXNrIFByaW9yaXRpZXMgY291bnRcdCIgKyBjb3VudDEpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJNYWluIiArIGsgKyAiIDogVGFzayBQcmlvcml0aWVzIGNvdW50IE9LIik7DQorCQl9DQorCQlmci5jbG9zZSgpOw0KKwl9DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi90ZXN0L3Rlc3RSdW5uYWJsZS5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL3Rlc3QvdGVzdFJ1bm5hYmxlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwZDlhMgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi90ZXN0L3Rlc3RSdW5uYWJsZS5qYXZhCkBAIC0wLDAgKzEsMTQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgQ29weXJpZ2h0IChjKSAyMDE5IERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyBhbmQgb3RoZXJzLg0KKyAqDQorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQorICogICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KKyAqICAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQorICoNCisgKiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQorICoNCisgKiAgIENvbnRyaWJ1dG9yczoNCisgKiAgICAgICBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi50ZXN0Ow0KKw0KK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BbWFsdGhlYTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlJ1bm5hYmxlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGFzazsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuU29mdHdhcmVVdGlsOw0KKw0KKy8qKg0KKyAqIEltcGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgVGFzaywgUnVubmFibGUgc3RydWN0dXJlIGFuZCBMYWJlbCB0eXBlcy4NCisgKg0KKyAqLw0KKw0KKw0KK3B1YmxpYyBjbGFzcyB0ZXN0UnVubmFibGUgew0KKwlwdWJsaWMgdGVzdFJ1bm5hYmxlKGZpbmFsIEFtYWx0aGVhIE1vZGVsLCBmaW5hbCBTdHJpbmcgcGF0aDEsIGZpbmFsIGludCBjb25maWdGbGFnLCBmaW5hbCBpbnQgaywNCisJCQlmaW5hbCBMaXN0PFRhc2s+IHRhc2tzKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJdGhpcy5tb2RlbCA9IE1vZGVsOw0KKwkJaWYgKDB4MjAwMCAhPSAoY29uZmlnRmxhZyAmIDB4RjAwMCkpIHsNCisJCQlmaWxlVGVzdFJ1bm5hYmxlKHRoaXMubW9kZWwsIHBhdGgxLCBrLCB0YXNrcyk7DQorCQl9DQorCQllbHNlIHsNCisJCQlmaWxlVGVzdFJ1bm5hYmxlUHRocmVhZCh0aGlzLm1vZGVsLCBwYXRoMSwgaywgdGFza3MpOw0KKwkJfQ0KKwl9DQorDQorDQorCXByaXZhdGUgdm9pZCBmaWxlVGVzdFJ1bm5hYmxlKGZpbmFsIEFtYWx0aGVhIG1vZGVsMiwgZmluYWwgU3RyaW5nIHBhdGgxLCBmaW5hbCBpbnQgaywgZmluYWwgTGlzdDxUYXNrPiB0YXNrcykNCisJCQl0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJZmluYWwgU3RyaW5nIGZuYW1lID0gcGF0aDEgKyBGaWxlLnNlcGFyYXRvciArICJydW5uYWJsZSIgKyBrICsgIi5jIjsNCisJCWZpbmFsIExpc3Q8UnVubmFibGU+IHJ1bm1vZCA9IG5ldyBBcnJheUxpc3Q8UnVubmFibGU+KCk7DQorCQlmb3IgKGZpbmFsIFRhc2sgdGEgOiB0YXNrcykgew0KKwkJCXJ1bm1vZC5hZGRBbGwoU29mdHdhcmVVdGlsLmdldFJ1bm5hYmxlTGlzdCh0YSwgbnVsbCkpOw0KKwkJfQ0KKw0KKwkJZmluYWwgRmlsZSBmMSA9IG5ldyBGaWxlKGZuYW1lKTsNCisJCVN0cmluZ1tdIHdvcmRzID0gbnVsbDsNCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQlmaW5hbCBGaWxlUmVhZGVyIGZyID0gbmV3IEZpbGVSZWFkZXIoZjEpOw0KKwkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCWZpbmFsIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZyKTsNCisJCVN0cmluZyBzOw0KKwkJZmluYWwgU3RyaW5nIGlucHV0MSA9ICJ2b2lkIjsNCisJCWludCBjb3VudDEgPSAwOw0KKwkJd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKwkJCXdvcmRzID0gcy5zcGxpdCgiICIpOw0KKwkJCWZvciAoZmluYWwgU3RyaW5nIHdvcmQgOiB3b3Jkcykgew0KKwkJCQkvKg0KKwkJCQkgKiBpZiAod29yZC5lcXVhbHMoaW5wdXQpKSB7IGNvdW50Kys7IH0NCisJCQkJICovDQorCQkJCWlmICh3b3JkLmVxdWFscyhpbnB1dDEpKSB7DQorCQkJCQljb3VudDErKzsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCS8qDQorCQkgKiBpZiAoY291bnQgIT0gcnVubW9kLnNpemUoKSkgeyBTeXN0ZW0ub3V0LnByaW50bG4ocnVubW9kLnNpemUoKSArDQorCQkgKiAiXHRSdW5uYWJsZSIraysiIDogRVJST1I6IFJ1bm5hYmxlIHNpemUgTm90IG1hdGNoaW5nIGNvdW50XHQiICsNCisJCSAqIGNvdW50KTsgfSBlbHNlIHsNCisJCSAqIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmFibGUgOiBOdW1iZXIgb2YgUnVubmFibGVzIE9LIik7IH0NCisJCSAqLw0KKwkJaWYgKGNvdW50MSA9PSBydW5tb2Quc2l6ZSgpKSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uYWJsZSIgKyBrICsgIiA6IE51bWJlciBvZiBSdW5uYWJsZXMgIHZvaWQgT0siKTsNCisJCX0NCisJCWVsc2Ugew0KKw0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigNCisJCQkJCXJ1bm1vZC5zaXplKCkgKyAiXHRSdW5uYWJsZSIgKyBrICsgIiA6IEVSUk9SOiBSdW5uYWJsZSBWT0lEIE5vdCBtYXRjaGluZyBjb3VudFx0IiArIGNvdW50MSk7DQorCQl9DQorCQlmci5jbG9zZSgpOw0KKwl9DQorDQorCXByaXZhdGUgdm9pZCBmaWxlVGVzdFJ1bm5hYmxlUHRocmVhZChmaW5hbCBBbWFsdGhlYSBtb2RlbDIsIGZpbmFsIFN0cmluZyBwYXRoMSwgZmluYWwgaW50IGssIGZpbmFsIExpc3Q8VGFzaz4gdGFza3MpDQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIFN0cmluZyBmbmFtZSA9IHBhdGgxICsgRmlsZS5zZXBhcmF0b3IgKyAicnVubmFibGUiICsgayArICIuYyI7DQorCQlmaW5hbCBMaXN0PFJ1bm5hYmxlPiBydW5tb2QgPSBuZXcgQXJyYXlMaXN0PFJ1bm5hYmxlPigpOw0KKwkJZm9yIChmaW5hbCBUYXNrIHRhIDogdGFza3MpIHsNCisJCQlydW5tb2QuYWRkQWxsKFNvZnR3YXJlVXRpbC5nZXRSdW5uYWJsZUxpc3QodGEsIG51bGwpKTsNCisJCX0NCisNCisJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZSk7DQorCQlTdHJpbmdbXSB3b3JkcyA9IG51bGw7DQorCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJZmluYWwgRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKGYxKTsNCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQlmaW5hbCBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmcik7DQorCQlTdHJpbmcgczsNCisJCWJvb2xlYW4gZmxhZ1J1biA9IGZhbHNlOw0KKwkJZmluYWwgU3RyaW5nIGlucHV0ID0gIlx0UnVubmFibGUiLCBpbnB1dDEgPSAidm9pZCI7DQorCQlpbnQgY291bnQgPSAwLCBjb3VudDEgPSAwOw0KKwkJd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKwkJCXdvcmRzID0gcy5zcGxpdCgiICIpOw0KKwkJCWZvciAoZmluYWwgU3RyaW5nIHdvcmQgOiB3b3Jkcykgew0KKwkJCQlpZiAoZmxhZ1J1bikgew0KKwkJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJcblJ1bm5hYmxlICIrd29yZCk7DQorCQkJCQlmbGFnUnVuID0gZmFsc2U7DQorCQkJCX0NCisJCQkJaWYgKHdvcmQuZXF1YWxzKGlucHV0KSkgew0KKwkJCQkJY291bnQrKzsNCisJCQkJfQ0KKwkJCQlpZiAod29yZC5lcXVhbHMoaW5wdXQxKSkgew0KKwkJCQkJY291bnQxKys7DQorCQkJCQlmbGFnUnVuID0gdHJ1ZTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWlmIChjb3VudCAhPSBydW5tb2Quc2l6ZSgpKSB7DQorCQkJU3lzdGVtLm91dA0KKwkJCQkJLnByaW50bG4ocnVubW9kLnNpemUoKSArICJcdFJ1bm5hYmxlIiArIGsgKyAiIDogRVJST1I6IFJ1bm5hYmxlIHNpemUgTm90IG1hdGNoaW5nIGNvdW50XHQiICsgY291bnQpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJSdW5uYWJsZSIgKyBrICsgIiA6IE51bWJlciBvZiBSdW5uYWJsZXMgT0siKTsNCisJCX0NCisJCWlmIChjb3VudDEgIT0gcnVubW9kLnNpemUoKSkgew0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigNCisJCQkJCXJ1bm1vZC5zaXplKCkgKyAiXHRSdW5uYWJsZSIgKyBrICsgIiA6IEVSUk9SOiBSdW5uYWJsZSBWT0lEIE5vdCBtYXRjaGluZyBjb3VudFx0IiArIGNvdW50MSk7DQorCQl9DQorCQllbHNlIHsNCisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5hYmxlIiArIGsgKyAiIDogTnVtYmVyIG9mIFJ1bm5hYmxlcyAgdm9pZCBPSyIpOw0KKwkJfQ0KKwkJZnIuY2xvc2UoKTsNCisJfQ0KKw0KKw0KKwlmaW5hbCBwcml2YXRlIEFtYWx0aGVhIG1vZGVsOw0KKw0KKw0KK30NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2NkZ2VuL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvY2RnZW4vdGVzdC90ZXN0VGFza0RlZi5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL3Rlc3QvdGVzdFRhc2tEZWYuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODcxMGUyCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL3Rlc3QvdGVzdFRhc2tEZWYuamF2YQpAQCAtMCwwICsxLDIzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAgIENvcHlyaWdodCAoYykgMjAxOSBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgYW5kIG90aGVycy4NCisgKg0KKyAqICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KKyAqICAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCisgKiAgIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KKyAqDQorICogICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KKyAqDQorICogICBDb250cmlidXRvcnM6DQorICogICAgICAgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udGVzdDsNCisNCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrOw0KKw0KKy8qKg0KKyAqIEltcGxlbWVudGF0aW9uIG9mIHRlc3RpbmcgVGFzaywgUnVubmFibGUgc3RydWN0dXJlIGFuZCBMYWJlbCB0eXBlcy4NCisgKg0KKyAqLw0KKw0KK3B1YmxpYyBjbGFzcyB0ZXN0VGFza0RlZg0KKw0KK3sNCisNCisNCisJcHVibGljIHRlc3RUYXNrRGVmKGZpbmFsIEFtYWx0aGVhIG1vZGVsLCBmaW5hbCBTdHJpbmcgcGF0aDEsIGZpbmFsIGludCBjb25maWdGbGFnLCBmaW5hbCBpbnQgaywNCisJCQlmaW5hbCBMaXN0PFRhc2s+IHRhc2tzKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKw0KKwkJaWYgKDB4MjAwMCAhPSAoY29uZmlnRmxhZyAmIDB4RjAwMCkpIHsNCisJCQlmaWxlVGVzdFRhc2sobW9kZWwsIHBhdGgxLCBjb25maWdGbGFnLCBrLCB0YXNrcyk7DQorCQl9DQorCQllbHNlIHsNCisJCQlmaWxlVGVzdFRhc2tQdGhyZWFkKG1vZGVsLCBwYXRoMSwgY29uZmlnRmxhZywgaywgdGFza3MpOw0KKwkJfQ0KKwl9DQorDQorCS8qKg0KKwkgKg0KKwkgKiBAcGFyYW0gbW9kZWwyDQorCSAqIEBwYXJhbSBwYXRoMQ0KKwkgKiBAcGFyYW0gY29uZmlnRmxhZw0KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uDQorCSAqLw0KKwlwcml2YXRlIHZvaWQgZmlsZVRlc3RUYXNrKGZpbmFsIEFtYWx0aGVhIG1vZGVsMiwgZmluYWwgU3RyaW5nIHBhdGgxLCBmaW5hbCBpbnQgY29uZmlnRmxhZywgZmluYWwgaW50IGssDQorCQkJZmluYWwgTGlzdDxUYXNrPiB0YXNrbW9kKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJZmluYWwgU3RyaW5nIGZuYW1lID0gcGF0aDEgKyBGaWxlLnNlcGFyYXRvciArICJ0YXNrRGVmIiArIGsgKyAiLmMiOw0KKwkJLy8gRUxpc3Q8VGFzaz4gdGFza21vZCA9IG1vZGVsMi5nZXRTd01vZGVsKCkuZ2V0VGFza3MoKTsNCisJCWZpbmFsIEZpbGUgZjEgPSBuZXcgRmlsZShmbmFtZSk7DQorCQlTdHJpbmdbXSB3b3JkcyA9IG51bGw7DQorCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJZmluYWwgRmlsZVJlYWRlciBmciA9IG5ldyBGaWxlUmVhZGVyKGYxKTsNCisJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpDQorCQlmaW5hbCBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmcik7DQorCQlTdHJpbmcgczsNCisJCS8vIFRPRE8NCisJCWZpbmFsIFN0cmluZyBpbnB1dCA9ICJDb3V0IiwgaW5wdXQyID0gIkNpbiIsIGlucHV0MyA9ICJcdFx0XHR0YXNrRU5URVJfQ1JJVElDQUwiLA0KKwkJCQlpbnB1dDQgPSAiXHRcdFx0dGFza0VYSVRfQ1JJVElDQUwiOw0KKwkJZmluYWwgU3RyaW5nIGlucHV0NSA9ICJcdHZvaWQiOw0KKwkJaW50IGNvdW50ID0gMCwgY291bnQxID0gMCwgY291bnQyID0gMCwgY291bnQzID0gMCwgY291bnQ0ID0gMDsNCisJCXdoaWxlICgocyA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsNCisJCQl3b3JkcyA9IHMuc3BsaXQoIiAiKTsNCisJCQlmb3IgKGZpbmFsIFN0cmluZyB3b3JkIDogd29yZHMpIHsNCisJCQkJaWYgKHdvcmQuZXF1YWxzKGlucHV0KSkgew0KKwkJCQkJY291bnQrKzsNCisJCQkJfQ0KKwkJCQllbHNlIGlmICh3b3JkLmVxdWFscyhpbnB1dDIpKSB7DQorCQkJCQljb3VudDErKzsNCisJCQkJfQ0KKwkJCQllbHNlIGlmICh3b3JkLmVxdWFscyhpbnB1dDMpKSB7DQorCQkJCQljb3VudDIrKzsNCisJCQkJfQ0KKwkJCQllbHNlIGlmICh3b3JkLmVxdWFscyhpbnB1dDQpKSB7DQorCQkJCQljb3VudDMrKzsNCisJCQkJfQ0KKwkJCQllbHNlIGlmICh3b3JkLmVxdWFscyhpbnB1dDUpKSB7DQorCQkJCQljb3VudDQrKzsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWlmICgweDEwMDAgPT0gKGNvbmZpZ0ZsYWcgJiAweEYwMDApKSB7DQorCQkJaWYgKGNvdW50ICE9IHRhc2ttb2Quc2l6ZSgpKSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YXNrbW9kLnNpemUoKSArICJcdFRhc2siICsgayArICIgOiBFUlJPUjogQ291dCBjb3VudFx0IiArIGNvdW50KTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGFzayIgKyBrICsgIiA6IENvdXQgY291bnQgT0siKTsNCisJCQl9DQorCQkJaWYgKGNvdW50MSAhPSB0YXNrbW9kLnNpemUoKSkgew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4odGFza21vZC5zaXplKCkgKyAiXHRUYXNrIiArIGsgKyAiIDogRVJST1I6IENpbiBjb3VudFx0IiArIGNvdW50MSk7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRhc2siICsgayArICIgOiBDaW4gY291bnQgT0siKTsNCisJCQl9DQorCQkJLy8gaWYoMHgwMDIwID09IChjb25maWdGbGFnICYgMHgwMEYwKSkgew0KKwkJCWlmIChjb3VudDIgIT0gdGFza21vZC5zaXplKCkgKiAyKSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YXNrbW9kLnNpemUoKSAqIDIgKyAiXHRUYXNrIiArIGsgKyAiIDogRVJST1I6IHRhc2tFTlRFUl9DUklUSUNBTFx0IiArIGNvdW50Mik7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRhc2siICsgayArICIgOiB0YXNrRU5URVJfQ1JJVElDQUwgT0siKTsNCisJCQl9DQorCQkJLyoNCisJCQkgKiBlbHNlIHsgaWYgKGNvdW50MiAhPSB0YXNrbW9kLnNpemUoKSkgew0KKwkJCSAqIFN5c3RlbS5vdXQucHJpbnRsbih0YXNrbW9kLnNpemUoKSAqIDIgKw0KKwkJCSAqICJcdFRhc2siK2srIiA6IEVSUk9SOiB0YXNrRU5URVJfQ1JJVElDQUxcdCIgKyBjb3VudDIpOyB9IGVsc2Ugew0KKwkJCSAqIFN5c3RlbS5vdXQucHJpbnRsbigiVGFzayIraysiIDogdGFza0VOVEVSX0NSSVRJQ0FMIE9LIik7IH0gfQ0KKwkJCSAqLw0KKwkJCS8vIGlmKDB4MDAyMCA9PSAoY29uZmlnRmxhZyAmIDB4MDBGMCkpIHsNCisJCQlpZiAoY291bnQzICE9IHRhc2ttb2Quc2l6ZSgpICogMikgew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4odGFza21vZC5zaXplKCkgKiAyICsgIlx0VGFzayIgKyBrICsgIiA6IEVSUk9SOiB0YXNrRVhJVF9DUklUSUNBTFx0IiArIGNvdW50Mik7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRhc2siICsgayArICIgOiB0YXNrRVhJVF9DUklUSUNBTCBPSyIpOw0KKwkJCX0NCisJCQkvKg0KKwkJCSAqIGVsc2UgeyBpZiAoY291bnQzICE9IHRhc2ttb2Quc2l6ZSgpKSB7DQorCQkJICogU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpKw0KKwkJCSAqICJcdFRhc2siK2srIiA6IEVSUk9SOiB0YXNrRVhJVF9DUklUSUNBTFx0IiArIGNvdW50Mik7IH0gZWxzZSB7DQorCQkJICogU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIitrKyIgOiB0YXNrRVhJVF9DUklUSUNBTCBPSyIpOyB9DQorCQkJICovDQorDQorCQkJaWYgKGNvdW50MyAhPSBjb3VudDIpIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpICsgIlx0VGFzayIgKyBrICsgIiA6IEVSUk9SOiB0YXNrRVhJVF9DUklUSUNBTFx0IiArIGNvdW50Mik7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRhc2siICsgayArICIgOiB0YXNrRVhJVF9DUklUSUNBTCBhbmQgdGFza0VOVEVSX0NSSVRJQ0FMIE9LIik7DQorCQkJfQ0KKwkJfQ0KKwkJaWYgKGNvdW50NCAhPSB0YXNrbW9kLnNpemUoKSkgew0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbih0YXNrbW9kLnNpemUoKSArICJcdFRhc2siICsgayArICIgOiBFUlJPUjogdGFza0VYSVRfQ1JJVElDQUxcdCIgKyBjb3VudDQpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIiArIGsgKyAiIDogVGFzayBDb3VudCBPSyIpOw0KKwkJfQ0KKw0KKwkJZnIuY2xvc2UoKTsNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgZmlsZVRlc3RUYXNrUHRocmVhZChmaW5hbCBBbWFsdGhlYSBtb2RlbDIsIGZpbmFsIFN0cmluZyBwYXRoMSwgZmluYWwgaW50IGNvbmZpZ0ZsYWcsIGZpbmFsIGludCBrLA0KKwkJCWZpbmFsIExpc3Q8VGFzaz4gdGFza21vZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisJCWZpbmFsIFN0cmluZyBmbmFtZSA9IHBhdGgxICsgRmlsZS5zZXBhcmF0b3IgKyAidGFza0RlZiIgKyBrICsgIi5jIjsNCisJCS8vIEVMaXN0PFRhc2s+IHRhc2ttb2QgPSBtb2RlbDIuZ2V0U3dNb2RlbCgpLmdldFRhc2tzKCk7DQorCQlmaW5hbCBGaWxlIGYxID0gbmV3IEZpbGUoZm5hbWUpOw0KKwkJU3RyaW5nW10gd29yZHMgPSBudWxsOw0KKwkJQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikNCisJCWZpbmFsIEZpbGVSZWFkZXIgZnIgPSBuZXcgRmlsZVJlYWRlcihmMSk7DQorCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJZmluYWwgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZnIpOw0KKwkJU3RyaW5nIHM7DQorCQlmaW5hbCBTdHJpbmcgaW5wdXQxID0gIkNvdXQiLCBpbnB1dDIgPSAiQ2luIiwgaW5wdXQzID0gIlx0XHRcdHN1c3BlbmRNZSIsIGlucHV0NCA9ICJcdFx0XHRyZXN1bWVNZSIsDQorCQkJCWlucHV0NSA9ICJ2b2lkIjsNCisJCWludCBjb3VudDEgPSAwLCBjb3VudDIgPSAwLCBjb3VudDMgPSAwLCBjb3VudDQgPSAwLCBjb3VudDUgPSAwOw0KKwkJd2hpbGUgKChzID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKwkJCXdvcmRzID0gcy5zcGxpdCgiICIpOw0KKwkJCWZvciAoZmluYWwgU3RyaW5nIHdvcmQgOiB3b3Jkcykgew0KKwkJCQlpZiAod29yZC5lcXVhbHMoaW5wdXQxKSkgew0KKwkJCQkJY291bnQxKys7DQorCQkJCX0NCisJCQkJZWxzZSBpZiAod29yZC5lcXVhbHMoaW5wdXQyKSkgew0KKwkJCQkJY291bnQyKys7DQorCQkJCX0NCisJCQkJZWxzZSBpZiAod29yZC5lcXVhbHMoaW5wdXQzKSkgew0KKwkJCQkJY291bnQzKys7DQorCQkJCX0NCisJCQkJZWxzZSBpZiAod29yZC5lcXVhbHMoaW5wdXQ0KSkgew0KKwkJCQkJY291bnQ0Kys7DQorCQkJCX0NCisJCQkJZWxzZSBpZiAod29yZC5lcXVhbHMoaW5wdXQ1KSkgew0KKwkJCQkJY291bnQ1Kys7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQlpZiAoMHgzMTEwID09IChjb25maWdGbGFnICYgMHhGRkYwKSkgew0KKwkJCWlmIChjb3VudDEgIT0gdGFza21vZC5zaXplKCkpIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpICsgIlx0VGFzayIgKyBrICsgIiA6IEVSUk9SOiBDb3V0IGNvdW50XHQiICsgY291bnQxKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGFzayIgKyBrICsgIiA6IENvdXQgY291bnQgT0siKTsNCisJCQl9DQorCQkJaWYgKGNvdW50MiAhPSB0YXNrbW9kLnNpemUoKSkgew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4odGFza21vZC5zaXplKCkgKyAiXHRUYXNrIiArIGsgKyAiIDogRVJST1I6IENpbiBjb3VudFx0IiArIGNvdW50Mik7DQorCQkJfQ0KKwkJCWVsc2Ugew0KKwkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRhc2siICsgayArICIgOiBDaW4gY291bnQgT0siKTsNCisJCQl9DQorDQorCQkJLy8gaWYoMHgwMDIwID09IChjb25maWdGbGFnICYgMHgwMEYwKSl7DQorCQkJaWYgKGNvdW50MyAhPSB0YXNrbW9kLnNpemUoKSAqIDIpIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpICogMiArICJcdFRhc2siICsgayArICIgOiBFUlJPUjogc3VzcGVuZE1lXHQiICsgY291bnQzKTsNCisJCQl9DQorCQkJZWxzZSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGFzayIgKyBrICsgIiA6IHN1c3BlbmRNZSBPSyIpOw0KKwkJCX0NCisJCQkvKg0KKwkJCSAqIH1lbHNlIHsgaWYgKGNvdW50MyAhPSB0YXNrbW9kLnNpemUoKSkgew0KKwkJCSAqIFN5c3RlbS5vdXQucHJpbnRsbih0YXNrbW9kLnNpemUoKSsNCisJCQkgKiAiXHRUYXNrIitrKyIgOiBFUlJPUjogc3VzcGVuZE1lXHQiICsgY291bnQzKTsgfSBlbHNlIHsNCisJCQkgKiBTeXN0ZW0ub3V0LnByaW50bG4oIlRhc2siK2srIiA6IHN1c3BlbmRNZSBPSyIpOyB9IH0NCisJCQkgKi8NCisNCisJCQkvLyBpZigweDAwMjAgPT0gKGNvbmZpZ0ZsYWcgJiAweDAwRjApKSB7DQorCQkJaWYgKGNvdW50NCAhPSB0YXNrbW9kLnNpemUoKSAqIDIpIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKHRhc2ttb2Quc2l6ZSgpICogMiArICJcdFRhc2siICsgayArICIgOiBFUlJPUjogcmVzdW1lTWVcdCIgKyBjb3VudDQpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIiArIGsgKyAiIDogcmVzdW1lTWUgT0siKTsNCisJCQl9DQorCQkJLyoNCisJCQkgKiB9ZWxzZSB7IGlmIChjb3VudDQgIT0gdGFza21vZC5zaXplKCkpIHsNCisJCQkgKiBTeXN0ZW0ub3V0LnByaW50bG4odGFza21vZC5zaXplKCkrDQorCQkJICogIlx0VGFzayIraysiIDogRVJST1I6IHJlc3VtZU1lXHQiICsgY291bnQ0KTsgfSBlbHNlIHsNCisJCQkgKiBTeXN0ZW0ub3V0LnByaW50bG4oIlRhc2siK2srIiA6IHJlc3VtZU1lIE9LIik7IH0gfQ0KKwkJCSAqLw0KKw0KKwkJCWlmIChjb3VudDQgIT0gY291bnQzKSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjb3VudDQgKyAiXHRUYXNrIiArIGsgKyAiIDogRVJST1I6IHN1c3BlbmRNZSBcdCIgKyBjb3VudDMpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIiArIGsgKyAiIDogc3VzcGVuZE1lIGFuZCByZXN1bWVNZSBPSyIpOw0KKwkJCX0NCisJCQlpZiAoY291bnQ1ICE9IHRhc2ttb2Quc2l6ZSgpKSB7DQorCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0YXNrbW9kLnNpemUoKSArICJcdFRhc2siICsgayArICIgOiBFUlJPUjogdGFza0VYSVRfQ1JJVElDQUxcdCIgKyBjb3VudDUpOw0KKwkJCX0NCisJCQllbHNlIHsNCisJCQkJU3lzdGVtLm91dC5wcmludGxuKCJUYXNrIiArIGsgKyAiIDogVGFzayBDb3VudCBPSyIpOw0KKwkJCX0NCisJCX0NCisJCWZyLmNsb3NlKCk7DQorCX0NCisNCisNCit9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL3Rlc3QvdGVzdFRhc2tTdHJ1Y3R1cmUuamF2YSBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi90ZXN0L3Rlc3RUYXNrU3RydWN0dXJlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDAxOTlhYgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi90ZXN0L3Rlc3RUYXNrU3RydWN0dXJlLmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisgKiAgIENvcHlyaWdodCAoYykgMjAxOSBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgYW5kIG90aGVycy4NCisgKg0KKyAqICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KKyAqICAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCisgKiAgIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KKyAqDQorICogICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KKyAqDQorICogICBDb250cmlidXRvcnM6DQorICogICAgICAgRG9ydG11bmQgVW5pdmVyc2l0eSBvZiBBcHBsaWVkIFNjaWVuY2VzIGFuZCBBcnRzIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4udGVzdDsNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5TZXQ7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BbWFsdGhlYTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlByb2Nlc3NpbmdVbml0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU2NoZWR1bGVyQWxsb2NhdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2s7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLkRlcGxveW1lbnRVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQorDQorLyoqDQorICogSW1wbGVtZW50YXRpb24gb2YgdGVzdGluZyBUYXNrLCBSdW5uYWJsZSBzdHJ1Y3R1cmUgYW5kIExhYmVsIHR5cGVzLg0KKyAqDQorICovDQorDQorcHVibGljIGNsYXNzIHRlc3RUYXNrU3RydWN0dXJlDQorDQorew0KKwlmaW5hbCBwcml2YXRlIEFtYWx0aGVhIG1vZGVsOw0KKw0KKwlwdWJsaWMgdGVzdFRhc2tTdHJ1Y3R1cmUoZmluYWwgQW1hbHRoZWEgTW9kZWwsIGZpbmFsIFN0cmluZyBwYXRoMSwgZmluYWwgaW50IGNvbmZpZ0ZsYWcpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQorCQl0aGlzLm1vZGVsID0gTW9kZWw7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJcdFx0XHRUZXN0IEJlZ2lucyIpOw0KKwkJU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsNCisJCWZpbmFsIEVMaXN0PFNjaGVkdWxlckFsbG9jYXRpb24+IENvcmVObyA9IHRoaXMubW9kZWwuZ2V0TWFwcGluZ01vZGVsKCkuZ2V0U2NoZWR1bGVyQWxsb2NhdGlvbigpOw0KKwkJaW50IGsgPSAwOw0KKwkJZm9yIChmaW5hbCBTY2hlZHVsZXJBbGxvY2F0aW9uIGMgOiBDb3JlTm8pIHsNCisJCQlmaW5hbCBQcm9jZXNzaW5nVW5pdCBwdSA9IGMuZ2V0UmVzcG9uc2liaWxpdHkoKS5nZXQoMCk7DQorCQkJZmluYWwgU2V0PFRhc2s+IHRhc2sgPSBEZXBsb3ltZW50VXRpbC5nZXRUYXNrc01hcHBlZFRvQ29yZShwdSwgdGhpcy5tb2RlbCk7DQorCQkJZmluYWwgTGlzdDxUYXNrPiB0YXNrcyA9IG5ldyBBcnJheUxpc3Q8VGFzaz4odGFzayk7DQorCQkJbmV3IHRlc3RSdW5uYWJsZSh0aGlzLm1vZGVsLCBwYXRoMSwgY29uZmlnRmxhZywgaywgdGFza3MpOw0KKwkJCW5ldyB0ZXN0VGFza0RlZih0aGlzLm1vZGVsLCBwYXRoMSwgY29uZmlnRmxhZywgaywgdGFza3MpOw0KKwkJCW5ldyB0ZXN0TWFpbih0aGlzLm1vZGVsLCBwYXRoMSwgY29uZmlnRmxhZywgaywgdGFza3MpOw0KKwkJCS8vIG5ldyB0ZXN0TGFiZWwobW9kZWwsIHBhdGgxLCBrLCB0YXNrcyk7DQorCQkJaysrOw0KKwkJfQ0KKwkJU3lzdGVtLm91dC5wcmludGxuKCIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiKTsNCisJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRcdFx0VGVzdCBFbmRzIik7DQorCQlTeXN0ZW0ub3V0LnByaW50bG4oIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyIpOw0KKwl9DQorfQ0KKw0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi91dGlscy9maWxlVXRpbC5qYXZhIGIvZWNsaXBzZS10b29scy9jZGdlbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2NkZ2VuL3V0aWxzL2ZpbGVVdGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWIwNTk4YgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvY2RnZW4vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9jZGdlbi91dGlscy9maWxlVXRpbC5qYXZhCkBAIC0wLDAgKzEsMjkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqICAgQ29weXJpZ2h0IChjKSAyMDE5IERvcnRtdW5kIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcyBhbmQgQXJ0cyBhbmQgb3RoZXJzLg0KKyAqDQorICogICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQorICogICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KKyAqICAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQorICoNCisgKiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQorICoNCisgKiAgIENvbnRyaWJ1dG9yczoNCisgKiAgICAgICBEb3J0bXVuZCBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMgYW5kIEFydHMgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5jZGdlbi51dGlsczsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BbWFsdGhlYTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkxhYmVsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUGVyaW9kaWNTdGltdWx1czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlByb2Nlc3NpbmdVbml0Ow0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU3RpbXVsdXM7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGltZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLnV0aWwuU29mdHdhcmVVdGlsOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuY2RnZW4uTGFiZWxGaWxlQ3JlYXRpb247DQorDQorDQorLyoqDQorICogSW1wbGVtZW50YXRpb24gb2YgQ29tbW9uIEFQSSBmb3IgQ0RHZW4uDQorICoNCisgKi8NCisNCitwdWJsaWMgY2xhc3MgZmlsZVV0aWwgew0KKw0KKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJudWxsIiwgInJlc291cmNlIiB9KQ0KKwlwdWJsaWMgc3RhdGljIHZvaWQgZmlsZU1haW5IZWFkZXIoZmluYWwgRmlsZSBmKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKwkJRmlsZVdyaXRlciBmciA9IG51bGw7DQorCQl0cnkgew0KKwkJCWZyID0gbmV3IEZpbGVXcml0ZXIoZik7DQorCQkJZnIud3JpdGUoIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqKiMjIyMjKiojIyMjKioqKiojIyMjIyoqIyMjIyMjKiMjIyoqKiojIyoqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqIyMqKioqKiojKioqIyMqKiMjKioqKioqIyMqKioqKiMjKiMqKiojIyoqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqIyoqKioqKiojKioqKiMqKiMqKioqIyMqIyMjIyMjKiMjKiojKiojIyoqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqIyMqKioqKiojKioqIyMqKiMjKioqIyMqIyMqKioqKiMjKioqIyojIyoqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqKiMjIyMjKiojIyMjKioqKiojIyMjIyMqIyMjIyMjKiMjKioqKiMjIyoqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiIpOw0KKwkJCWZyLndyaXRlKCIqQXV0aG9yCQk6CVJhbSBQcmFzYXRoIEdvdmluZGFyYWphblxuIik7DQorCQkJZnIud3JpdGUoIipUb29sIAkJOglDREdlbl9HU29DXG4iKTsNCisJCQlmci53cml0ZSgiKlZlcnNpb24gCToJVjEuMC4wXG4iKTsNCisJCX0NCisJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7DQorCQkJZS5wcmludFN0YWNrVHJhY2UoKTsNCisJCX0NCisNCisJCWZyLmNsb3NlKCk7DQorCX0NCisNCisJcHVibGljIHN0YXRpYyB2b2lkIEZyZWVSVE9TQ29uZmlnRmlsZUhlYWRlcihmaW5hbCBGaWxlIGYxKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7DQorCQkJZncud3JpdGUoIipUaXRsZSAJCTogICBGcmVlUlRPU0NvbmZpZ1xuIik7DQorCQkJZncud3JpdGUoIipEZXNjcmlwdGlvbgk6CUhvbGRzIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBGcmVlUlRPUyBTb2Z0d2FyZVxuIik7DQorCQkJZncud3JpdGUoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7DQorCQkJZncud3JpdGUoIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4iKTsNCisNCisJCQlmdy5jbG9zZSgpOw0KKwkJfQ0KKwkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGlvZSkgew0KKwkJCVN5c3RlbS5lcnIucHJpbnRsbigiSU9FeGNlcHRpb246ICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsNCisJCX0NCisNCisJfQ0KKw0KKw0KKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRGaWxlRXh0ZW5zaW9uKGZpbmFsIEZpbGUgZmlsZSkgew0KKwkJZmluYWwgU3RyaW5nIGZpbGVOYW1lID0gZmlsZS5nZXROYW1lKCk7DQorCQlTdHJpbmcgZmlsZUV4dGVuc2lvbiA9IG51bGw7DQorCQlpZiAoZmlsZU5hbWUubGFzdEluZGV4T2YoIi4iKSAhPSAtMSAmJiBmaWxlTmFtZS5sYXN0SW5kZXhPZigiLiIpICE9IDApIHsNCisJCQlmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCIuIikgKyAxKTsNCisJCQkvLyByZXR1cm4gZmlsZU5hbWUuc3Vic3RyaW5nKGZpbGVOYW1lLmxhc3RJbmRleE9mKCIuIikgKyAxKTsNCisJCX0NCisJCXJldHVybiBmaWxlRXh0ZW5zaW9uOw0KKwl9DQorDQorCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGRhdGF0eXBlKGZpbmFsIFN0cmluZyBzdHJpbmcpIHsNCisJCVN0cmluZyB0eXBlID0gbnVsbDsNCisJCXN3aXRjaCAoc3RyaW5nKSB7DQorCQkJY2FzZSAiOCBiaXQiOg0KKwkJCQl0eXBlID0gInVpbnQ4X3QiOw0KKwkJCQlicmVhazsNCisJCQljYXNlICIxNiBiaXQiOg0KKwkJCQl0eXBlID0gInVpbnQxNl90IjsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAiMzIgYml0IjoNCisJCQkJdHlwZSA9ICJ1aW50MzJfdCI7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgIjY0IGJpdCI6DQorCQkJCXR5cGUgPSAidWludDY0X3QiOw0KKwkJCQlicmVhazsNCisJCQlkZWZhdWx0Og0KKwkJCQl0eXBlID0gImludCI7DQorCQkJCWJyZWFrOw0KKwkJfQ0KKwkJcmV0dXJuIHR5cGU7DQorCX0NCisNCisNCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZGF0YXR5cGVTaXplKGZpbmFsIFN0cmluZyBzdHJpbmcpIHsNCisJCVN0cmluZyB0eXBlID0gbnVsbDsNCisJCXN3aXRjaCAoc3RyaW5nKSB7DQorCQkJY2FzZSAiOCBiaXQiOg0KKwkJCQl0eXBlID0gIjgiOw0KKwkJCQlicmVhazsNCisJCQljYXNlICIxNiBiaXQiOg0KKwkJCQl0eXBlID0gIjE2IjsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSAiMzIgYml0IjoNCisJCQkJdHlwZSA9ICIzMiI7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgIjY0IGJpdCI6DQorCQkJCXR5cGUgPSAiNjQiOw0KKwkJCQlicmVhazsNCisJCQlkZWZhdWx0Og0KKwkJCQl0eXBlID0gIjAwIjsNCisJCQkJYnJlYWs7DQorCQl9DQorCQlyZXR1cm4gdHlwZTsNCisJfQ0KKw0KKwkvKioNCisJICogU2hhcmVkIExhYmVsIGRlZmluaXRpb24gYW5kIGluaXRpYWxpemF0aW9uIHN0cnVjdHVyZS4NCisJICoNCisJICogQHBhcmFtIHRhc2tzDQorCSAqDQorCSAqIEBwYXJhbSBmaWxlDQorCSAqIEBwYXJhbSBsYWJlbGxpc3QNCisJICogQHJldHVybg0KKwkgKi8NCisJcHVibGljIHN0YXRpYyBMaXN0PExhYmVsPiBDb3JlU3BlY2lmaWNMYWJlbChmaW5hbCBBbWFsdGhlYSBtb2RlbCwgZmluYWwgTGlzdDxUYXNrPiB0YXNrcykgew0KKwkJTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxMaXN0ID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsNCisJCWZvciAoZmluYWwgVGFzayB0YSA6IHRhc2tzKSB7DQorCQkJU2hhcmVkTGFiZWxMaXN0LmFkZEFsbChTb2Z0d2FyZVV0aWwuZ2V0UmVhZExhYmVsU2V0KHRhLCBudWxsKSk7DQorCQl9DQorCQlTaGFyZWRMYWJlbExpc3QgPSBTaGFyZWRMYWJlbExpc3Quc3RyZWFtKCkuZGlzdGluY3QoKS5jb2xsZWN0KENvbGxlY3RvcnMudG9MaXN0KCkpOw0KKwkJZmluYWwgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxMaXN0U29ydENvcmUgPSBuZXcgQXJyYXlMaXN0PExhYmVsPigpOw0KKwkJaWYgKFNoYXJlZExhYmVsTGlzdC5zaXplKCkgPT0gMCkgew0KKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2hhcmVkIExhYmVsIHNpemUgMCIpOw0KKwkJfQ0KKwkJZWxzZSB7DQorCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJTaGFyZWQgTGFiZWwgc2l6ZSAiK1NoYXJlZExhYmVsTGlzdC5zaXplKCkpOw0KKwkJCWZpbmFsIEhhc2hNYXA8TGFiZWwsIEhhc2hNYXA8VGFzaywgUHJvY2Vzc2luZ1VuaXQ+PiBzaGFyZWRMYWJlbFRhc2tNYXAgPSBMYWJlbEZpbGVDcmVhdGlvbg0KKwkJCQkJLkxhYmVsVGFza01hcChtb2RlbCwgU2hhcmVkTGFiZWxMaXN0KTsNCisJCQlmb3IgKGZpbmFsIExhYmVsIHNoYXJlIDogU2hhcmVkTGFiZWxMaXN0KSB7DQorCQkJCWZpbmFsIEhhc2hNYXA8VGFzaywgUHJvY2Vzc2luZ1VuaXQ+IFRhc2tNYXAgPSBzaGFyZWRMYWJlbFRhc2tNYXAuZ2V0KHNoYXJlKTsNCisJCQkJZmluYWwgU2V0PFRhc2s+IHRhc2tMaXN0ID0gVGFza01hcC5rZXlTZXQoKTsNCisJCQkJZmluYWwgQ29sbGVjdGlvbjxQcm9jZXNzaW5nVW5pdD4gcHVMaXN0ID0gVGFza01hcC52YWx1ZXMoKTsNCisJCQkJZmluYWwgTGlzdDxQcm9jZXNzaW5nVW5pdD4gcHVMaXN0VW5pcXVlID0gcHVMaXN0LnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKTsNCisJCQkJaWYgKHB1TGlzdFVuaXF1ZS5zaXplKCkgPT0gMSAmJiB0YXNrTGlzdC5zaXplKCkgPiAxKSB7DQorCQkJCQlTaGFyZWRMYWJlbExpc3RTb3J0Q29yZS5hZGQoc2hhcmUpOw0KKwkJCQl9DQorCQkJfQ0KKwkJfQ0KKwkJcmV0dXJuIFNoYXJlZExhYmVsTGlzdFNvcnRDb3JlOw0KKwl9DQorDQorCS8qKg0KKwkgKiBTaGFyZWQgTGFiZWwgZGVmaW5pdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlLg0KKwkgKg0KKwkgKiBAcGFyYW0gdGFza3MNCisJICoNCisJICogQHBhcmFtIGZpbGUNCisJICogQHBhcmFtIGxhYmVsbGlzdA0KKwkgKiBAcmV0dXJuDQorCSAqLw0KKwkvLyBwdWJsaWMgc3RhdGljIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsRGVjbGFyYXRpb25IZWFkKEFtYWx0aGVhIG1vZGVsLA0KKwkvLyBMaXN0PFRhc2s+IHRhc2tzKSB7DQorCXB1YmxpYyBzdGF0aWMgTGlzdDxMYWJlbD4gU2hhcmVkTGFiZWxEZWNsYXJhdGlvbkhlYWQoZmluYWwgQW1hbHRoZWEgbW9kZWwsIGZpbmFsIExpc3Q8VGFzaz4gdGFza3MpIHsNCisJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsTGlzdCA9IExhYmVsRmlsZUNyZWF0aW9uLlNoYXJlZExhYmVsRmluZGVyKG1vZGVsKTsNCisJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsTGlzdFNvcnRDb3JlID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsNCisJCWZpbmFsIExpc3Q8TGFiZWw+IFNoYXJlZExhYmVsID0gbmV3IEFycmF5TGlzdDxMYWJlbD4oKTsNCisJCWlmIChTaGFyZWRMYWJlbExpc3Quc2l6ZSgpID09IDApIHsNCisJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oIlNoYXJlZCBMYWJlbCBzaXplIDAiKTsNCisJCX0NCisJCWVsc2Ugew0KKwkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiU2hhcmVkIExhYmVsIHNpemUgIitTaGFyZWRMYWJlbExpc3Quc2l6ZSgpKTsNCisJCQlmaW5hbCBIYXNoTWFwPExhYmVsLCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0Pj4gc2hhcmVkTGFiZWxUYXNrTWFwID0gTGFiZWxGaWxlQ3JlYXRpb24NCisJCQkJCS5MYWJlbFRhc2tNYXAobW9kZWwsIFNoYXJlZExhYmVsTGlzdCk7DQorCQkJZm9yIChmaW5hbCBMYWJlbCBzaGFyZSA6IFNoYXJlZExhYmVsTGlzdCkgew0KKwkJCQlmaW5hbCBIYXNoTWFwPFRhc2ssIFByb2Nlc3NpbmdVbml0PiBUYXNrTWFwID0gc2hhcmVkTGFiZWxUYXNrTWFwLmdldChzaGFyZSk7DQorCQkJCWZpbmFsIENvbGxlY3Rpb248UHJvY2Vzc2luZ1VuaXQ+IHB1TGlzdCA9IFRhc2tNYXAudmFsdWVzKCk7DQorCQkJCWZpbmFsIExpc3Q8UHJvY2Vzc2luZ1VuaXQ+IHB1TGlzdFVuaXF1ZSA9IHB1TGlzdC5zdHJlYW0oKS5kaXN0aW5jdCgpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7DQorCQkJCWlmIChwdUxpc3RVbmlxdWUuc2l6ZSgpID4gMSkgew0KKwkJCQkJU2hhcmVkTGFiZWxMaXN0U29ydENvcmUuYWRkKHNoYXJlKTsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisNCisJCWZpbmFsIEhhc2hNYXA8TGFiZWwsIFN0cmluZz4gU2hhcmVkTGFiZWxUeXBlTWFwID0gbmV3IEhhc2hNYXA8TGFiZWwsIFN0cmluZz4oKTsNCisJCWZvciAoZmluYWwgTGFiZWwgc2hhcmUgOiBTaGFyZWRMYWJlbExpc3RTb3J0Q29yZSkgew0KKwkJCVNoYXJlZExhYmVsVHlwZU1hcC5wdXQoc2hhcmUsIHNoYXJlLmdldFNpemUoKS50b1N0cmluZygpKTsNCisJCX0NCisJCWZpbmFsIExpc3Q8U3RyaW5nPiBTaGFyZWRUeXBlTWFwTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigNCisJCQkJU2hhcmVkTGFiZWxUeXBlTWFwLnZhbHVlcygpLnN0cmVhbSgpLmRpc3RpbmN0KCkuY29sbGVjdChDb2xsZWN0b3JzLnRvTGlzdCgpKSk7DQorCQlmaW5hbCBMaXN0PExhYmVsPiBTaGFyZWRMYWJlbE1hcExpc3QgPSBuZXcgQXJyYXlMaXN0PExhYmVsPihTaGFyZWRMYWJlbFR5cGVNYXAua2V5U2V0KCkpOw0KKwkJZm9yIChpbnQgayA9IDA7IGsgPCBTaGFyZWRUeXBlTWFwTGlzdC5zaXplKCk7IGsrKykgew0KKwkJCWZpbmFsIFN0cmluZyBzaCA9IFNoYXJlZFR5cGVNYXBMaXN0LmdldChrKTsNCisJCQlmb3IgKGZpbmFsIExhYmVsIHMgOiBTaGFyZWRMYWJlbE1hcExpc3QpIHsNCisJCQkJZmluYWwgU3RyaW5nIFNoVHkgPSBTaGFyZWRMYWJlbFR5cGVNYXAuZ2V0KHMpOw0KKwkJCQlpZiAoc2guZXF1YWxzKFNoVHkpKSB7DQorCQkJCQlTaGFyZWRMYWJlbC5hZGQocyk7DQorCQkJCX0NCisJCQl9DQorCQl9DQorCQlyZXR1cm4gU2hhcmVkTGFiZWw7DQorCX0NCisNCisNCisJcHVibGljIHN0YXRpYyBsb25nIGludGlhbGlzYXRpb24oZmluYWwgU3RyaW5nIHN0cmluZykgew0KKwkJbG9uZyBpbml0ID0gMDsNCisJCXN3aXRjaCAoc3RyaW5nKSB7DQorCQkJY2FzZSAiOCBiaXQiOg0KKwkJCQlpbml0ID0gMjU1Ow0KKwkJCQlicmVhazsNCisJCQljYXNlICIxNiBiaXQiOg0KKwkJCQlpbml0ID0gNjU1MzU7DQorCQkJCWJyZWFrOw0KKwkJCS8vIGNhc2UgIjMyIGJpdCI6IGluaXQgPTQyOTQ5NjcyOTU7IGJyZWFrOw0KKwkJCS8vIGNhc2UgIjY0IGJpdCI6IGluaXQgPTE4NDQ2NzQ0MDczNzA5NTUxNjE1OyBicmVhazsNCisJCQlkZWZhdWx0Og0KKwkJCQlpbml0ID0gMDAwMDsNCisJCQkJYnJlYWs7DQorCQl9DQorCQlyZXR1cm4gaW5pdDsNCisJfQ0KKw0KKwlwdWJsaWMgc3RhdGljIHZvaWQgZGVmaW5lTWFpbihmaW5hbCBGaWxlIGYxKSB7DQorCQl0cnkgew0KKwkJCWZpbmFsIEZpbGUgZm4gPSBmMTsNCisJCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQ0KKwkJCWZpbmFsIEZpbGVXcml0ZXIgZncgPSBuZXcgRmlsZVdyaXRlcihmbiwgdHJ1ZSk7IC8vIHRoZSB0cnVlIHdpbGwNCisJCQkvLyBhcHBlbmQgdGhlIG5ldw0KKwkJCS8vIGRhdGENCisJCQlmdy53cml0ZSgiI2RlZmluZSBERUxBWV9NVUxUIDEwMCIpOw0KKwkJCWZ3LndyaXRlKCJcbiIpOw0KKwkJCWZ3LmNsb3NlKCk7DQorCQl9DQorCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gaW9lKSB7DQorCQkJU3lzdGVtLmVyci5wcmludGxuKCJJT0V4Y2VwdGlvbjogIiArIGlvZS5nZXRNZXNzYWdlKCkpOw0KKwkJfQ0KKw0KKwl9DQorDQorCXB1YmxpYyBzdGF0aWMgVGltZSBnZXRSZWN1cnJlbmNlKGZpbmFsIFRhc2sgdCkgew0KKwkJZmluYWwgTGlzdDxTdGltdWx1cz4gbFN0aW11bGkgPSB0LmdldFN0aW11bGkoKTsNCisJCWZvciAoZmluYWwgU3RpbXVsdXMgcyA6IGxTdGltdWxpKSB7DQorCQkJaWYgKHMgaW5zdGFuY2VvZiBQZXJpb2RpY1N0aW11bHVzKSB7DQorCQkJCXJldHVybiAoKFBlcmlvZGljU3RpbXVsdXMpIHMpLmdldFJlY3VycmVuY2UoKTsNCisJCQl9DQorCQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlI6IFVuc3VwcG9ydGVkIFN0aW11bHVzIGluIFRhc2sgIiArIHQgKyAiIC0+ICIgKyBzKTsNCisJCX0NCisJCXJldHVybiBudWxsOw0KKwl9DQorDQorCS8vIFRoaXMgY29kZSBpcyBmb3JtIHN0YWNrb3ZlcmZsb3cgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzI1ODE3NTQNCisJcHVibGljIHN0YXRpYyA8SywgViBleHRlbmRzIENvbXBhcmFibGU8PyBzdXBlciBWPj4gTWFwPEssIFY+IHNvcnRCeVZhbHVlKGZpbmFsIE1hcDxLLCBWPiBtYXApIHsNCisJCWZpbmFsIExpc3Q8RW50cnk8SywgVj4+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4obWFwLmVudHJ5U2V0KCkpOw0KKwkJbGlzdC5zb3J0KEVudHJ5LmNvbXBhcmluZ0J5VmFsdWUoKSk7DQorDQorCQlmaW5hbCBNYXA8SywgVj4gcmVzdWx0ID0gbmV3IExpbmtlZEhhc2hNYXA8PigpOw0KKwkJZm9yIChmaW5hbCBFbnRyeTxLLCBWPiBlbnRyeSA6IGxpc3QpIHsNCisJCQlyZXN1bHQucHV0KGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKTsNCisJCX0NCisJCXJldHVybiByZXN1bHQ7DQorCX0NCit9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYzczNGUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyLy5naXRpZ25vcmUKQEAgLTAsMCArMSw1IEBACisubWV0YWRhdGEvCisKKyMgRWNsaXBzZSB0YXJnZXQgZGlyZWN0b3JpZXMKK2Jpbi8KK3RhcmdldC8KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvLm12bi9leHRlbnNpb25zLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvLm12bi9leHRlbnNpb25zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBhOWVjCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci8ubXZuL2V4dGVuc2lvbnMueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxleHRlbnNpb25zPgorICA8ZXh0ZW5zaW9uPgorICAgIDxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvLmV4dHJhczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD50eWNoby1wb21sZXNzPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPgorICA8L2V4dGVuc2lvbj4KKzwvZXh0ZW5zaW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2I0MmQuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuZXh0cmFjdG9yLmJ1aWxkLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZDwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc3ZmI4OC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBFTUYgQ29udGVudCBFeHRyYWN0b3IgQnVpbGQKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQ7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4yLjAKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjcsCi0gSmF2YVNFLTEuOAotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKLUJ1bmRsZS1DbGFzc1BhdGg6IC4sCi0gbGliL3BsYW50dW1sLjgwNDEuamFyCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlIEFQUDRNQwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuZXh0cmFjdG9yLmJ1aWxkL2Fib3V0Lmh0bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY0Zjc4MS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLQk8aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotCTxwPk5vdmVtYmVyIDMwLCAyMDE3PC9wPgotCTxoMz5MaWNlbnNlPC9oMz4KLQotCTxwPgotCQlUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4KLQkJKCZxdW90O0NvbnRlbnQmcXVvdDspLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQKLQkJaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZQotCQlQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMKLQkJYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wPC9hPi4KLQkJRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LgotCTwvcD4KLQotCTxwPgotCQlJZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlCi0JCUZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eQotCQkoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLQkJYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiBDaGVjayB0aGUKLQkJUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaAotCQlsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQKLQkJYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UKLQkJY29kZSBpbiB0aGUgQ29udGVudCBhbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEKLQkJCWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi4KLQk8L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuZXh0cmFjdG9yLmJ1aWxkL2VwbC0yLjAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjM3YTE4MS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvZXBsLTIuMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLSAgPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Ci0gICAgPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDIuMDwvdGl0bGU+Ci0gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLSAgICAgIGJvZHkgewotICAgICAgICBtYXJnaW46IDEuNWVtIDNlbTsKLSAgICAgIH0KLSAgICAgIGgxewotICAgICAgICBmb250LXNpemU6MS41ZW07Ci0gICAgICB9Ci0gICAgICBoMnsKLSAgICAgICAgZm9udC1zaXplOjFlbTsKLSAgICAgICAgbWFyZ2luLWJvdHRvbTowLjVlbTsKLSAgICAgICAgbWFyZ2luLXRvcDoxZW07Ci0gICAgICB9Ci0gICAgICBwIHsKLSAgICAgICAgbWFyZ2luLXRvcDogIDAuNWVtOwotICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKLSAgICAgIH0KLSAgICAgIHVsLCBvbHsKLSAgICAgICAgbGlzdC1zdHlsZS10eXBlOm5vbmU7Ci0gICAgICB9Ci0gICAgPC9zdHlsZT4KLSAgPC9oZWFkPgotICA8Ym9keT4KLSAgICA8aDE+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMi4wPC9oMT4KLSAgICA8cD5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRQotICAgICAgUFVCTElDIExJQ0VOU0UgKCZsZHF1bztBR1JFRU1FTlQmcmRxdW87KS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTgotICAgICAgT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJiMwMzk7UyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImRlZmluaXRpb25zIj4xLiBERUZJTklUSU9OUzwvaDI+Ci0gICAgPHA+JmxkcXVvO0NvbnRyaWJ1dGlvbiZyZHF1bzsgbWVhbnM6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29udGVudAotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6Ci0gICAgICAgIDx1bD4KLSAgICAgICAgICA8bGk+aSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9saT4KLSAgICAgICAgICA8bGk+aWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L2xpPgotICAgICAgICA8L3VsPgotICAgICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbQotICAgICAgICBhbmQgYXJlIERpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KLSAgICAgICAgJmxkcXVvO29yaWdpbmF0ZXMmcmRxdW87IGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaAotICAgICAgICBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJiMwMzk7cyBiZWhhbGYuCi0gICAgICAgIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gdGhhdAotICAgICAgICBhcmUgbm90IE1vZGlmaWVkIFdvcmtzLgotICAgICAgPC9saT4KLSAgICA8L3VsPgotICAgIDxwPiZsZHF1bztDb250cmlidXRvciZyZHF1bzsgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3A+Ci0gICAgPHA+JmxkcXVvO0xpY2Vuc2VkIFBhdGVudHMmcmRxdW87IG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2gKLSAgICAgIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUKLSAgICAgIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1Byb2dyYW0mcmRxdW87IG1lYW5zIHRoZSBDb250cmlidXRpb25zIERpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzCi0gICAgICBBZ3JlZW1lbnQuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztSZWNpcGllbnQmcmRxdW87IG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLSAgICAgIG9yIGFueSBTZWNvbmRhcnkgTGljZW5zZSAoYXMgYXBwbGljYWJsZSksIGluY2x1ZGluZyBDb250cmlidXRvcnMuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztEZXJpdmF0aXZlIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyCi0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBQcm9ncmFtIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO01vZGlmaWVkIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyIGZvcm0gdGhhdAotICAgICAgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlCi0gICAgICBjb250ZW50cyBvZiB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nLCBmb3IgcHVycG9zZXMgb2YgY2xhcml0eSBhbnkgbmV3IGZpbGUKLSAgICAgIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBjb250YWlucyBhbnkgY29udGVudHMgb2YgdGhlIFByb2dyYW0uIE1vZGlmaWVkCi0gICAgICBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IGNvbnRhaW4gb25seSBkZWNsYXJhdGlvbnMsIGludGVyZmFjZXMsCi0gICAgICB0eXBlcywgY2xhc3Nlcywgc3RydWN0dXJlcywgb3IgZmlsZXMgb2YgdGhlIFByb2dyYW0gc29sZWx5IGluIGVhY2ggY2FzZQotICAgICAgaW4gb3JkZXIgdG8gbGluayB0bywgYmluZCBieSBuYW1lLCBvciBzdWJjbGFzcyB0aGUgUHJvZ3JhbSBvciBNb2RpZmllZAotICAgICAgV29ya3MgdGhlcmVvZi4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO0Rpc3RyaWJ1dGUmcmRxdW87IG1lYW5zIHRoZSBhY3RzIG9mIGEpIGRpc3RyaWJ1dGluZyBvciBiKSBtYWtpbmcgYXZhaWxhYmxlCi0gICAgICBpbiBhbnkgbWFubmVyIHRoYXQgZW5hYmxlcyB0aGUgdHJhbnNmZXIgb2YgYSBjb3B5LgotICAgIDwvcD4KLSAgICA8cD4mbGRxdW87U291cmNlIENvZGUmcmRxdW87IG1lYW5zIHRoZSBmb3JtIG9mIGEgUHJvZ3JhbSBwcmVmZXJyZWQgZm9yIG1ha2luZwotICAgICAgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwKLSAgICAgIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1NlY29uZGFyeSBMaWNlbnNlJnJkcXVvOyBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICAgICAgVmVyc2lvbiAyLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UsIGluY2x1ZGluZyBhbnkKLSAgICAgIGV4Y2VwdGlvbnMgb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcyBpZGVudGlmaWVkIGJ5IHRoZSBpbml0aWFsCi0gICAgICBDb250cmlidXRvci4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJncmFudC1vZi1yaWdodHMiPjIuIEdSQU5UIE9GIFJJR0hUUzwvaDI+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0Ci0gICAgICAgIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksCi0gICAgICAgIHB1YmxpY2x5IHBlcmZvcm0sIERpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi0gICAgICAgIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50Ci0gICAgICAgIGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCi0gICAgICAgIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKLSAgICAgICAgaWYgYW55LCBpbiBTb3VyY2UgQ29kZSBvciBvdGhlciBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsCi0gICAgICAgIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwKLSAgICAgICAgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKLSAgICAgICAgYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkCi0gICAgICAgIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueQotICAgICAgICBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIKLSAgICAgICAgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgotICAgICAgPC9saT4KLSAgICAgIDxsaT5jKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUKLSAgICAgICAgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKLSAgICAgICAgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlCi0gICAgICAgIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuCi0gICAgICAgIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKLSAgICAgICAgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLSAgICAgICAgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzCi0gICAgICAgIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZQotICAgICAgICByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLAotICAgICAgICBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvCi0gICAgICAgIGFsbG93IFJlY2lwaWVudCB0byBEaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQmIzAzOTtzCi0gICAgICAgIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCi0gICAgICA8L2xpPgotICAgICAgPGxpPmQpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKLSAgICAgICAgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQKLSAgICAgICAgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmUpIE5vdHdpdGhzdGFuZGluZyB0aGUgdGVybXMgb2YgYW55IFNlY29uZGFyeSBMaWNlbnNlLCBubyBDb250cmlidXRvcgotICAgICAgICBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyB0byBhbnkgUmVjaXBpZW50IChvdGhlciB0aGFuIHRob3NlIHNldCBmb3J0aAotICAgICAgICBpbiB0aGlzIEFncmVlbWVudCkgYXMgYSByZXN1bHQgb2Ygc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJlY2VpcHQgb2YgdGhlCi0gICAgICAgIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UgKGlmIHBlcm1pdHRlZCB1bmRlcgotICAgICAgICB0aGUgdGVybXMgb2YgU2VjdGlvbiAzKS4KLSAgICAgIDwvbGk+Ci0gICAgPC91bD4KLSAgICA8aDIgaWQ9InJlcXVpcmVtZW50cyI+My4gUkVRVUlSRU1FTlRTPC9oMj4KLSAgICA8cD4zLjEgSWYgYSBDb250cmlidXRvciBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybSwgdGhlbjo8L3A+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIHRoZSBQcm9ncmFtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSwgaW4KLSAgICAgICAgYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gMy4yLCBhbmQgdGhlIENvbnRyaWJ1dG9yIG11c3QgYWNjb21wYW55Ci0gICAgICAgIHRoZSBQcm9ncmFtIHdpdGggYSBzdGF0ZW1lbnQgdGhhdCB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBQcm9ncmFtCi0gICAgICAgIGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kIGluZm9ybXMgUmVjaXBpZW50cyBob3cgdG8KLSAgICAgICAgb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseQotICAgICAgICB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZTsgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSB0aGUgQ29udHJpYnV0b3IgbWF5IERpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgYSBsaWNlbnNlCi0gICAgICAgIGRpZmZlcmVudCB0aGFuIHRoaXMgQWdyZWVtZW50LCBwcm92aWRlZCB0aGF0IHN1Y2ggbGljZW5zZToKLSAgICAgICAgPHVsPgotICAgICAgICAgIDxsaT5pKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBvdGhlciBDb250cmlidXRvcnMgYWxsCi0gICAgICAgICAgICB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIG90aGVyIENvbnRyaWJ1dG9ycyBhbGwKLSAgICAgICAgICAgIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwKLSAgICAgICAgICAgIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpaSkgZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50cyYjMDM5OyByaWdodHMgaW4gdGhlCi0gICAgICAgICAgICBTb3VyY2UgQ29kZSB1bmRlciBzZWN0aW9uIDMuMjsgYW5kCi0gICAgICAgICAgPC9saT4KLSAgICAgICAgICA8bGk+aXYpIHJlcXVpcmVzIGFueSBzdWJzZXF1ZW50IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbnkgcGFydHkKLSAgICAgICAgICAgIHRvIGJlIHVuZGVyIGEgbGljZW5zZSB0aGF0IHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgc2VjdGlvbiAzLgotICAgICAgICAgIDwvbGk+Ci0gICAgICAgIDwvdWw+Ci0gICAgICA8L2xpPgotICAgIDwvdWw+Ci0gICAgPHA+My4yIFdoZW4gdGhlIFByb2dyYW0gaXMgRGlzdHJpYnV0ZWQgYXMgU291cmNlIENvZGU6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBvciBpZiB0aGUgUHJvZ3JhbSAoaSkKLSAgICAgICAgaXMgY29tYmluZWQgd2l0aCBvdGhlciBtYXRlcmlhbCBpbiBhIHNlcGFyYXRlIGZpbGUgb3IgZmlsZXMgbWFkZSBhdmFpbGFibGUKLSAgICAgICAgdW5kZXIgYSBTZWNvbmRhcnkgTGljZW5zZSwgYW5kIChpaSkgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgYXR0YWNoZWQgdG8KLSAgICAgICAgdGhlIFNvdXJjZSBDb2RlIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBvZiB0aGlzIEFncmVlbWVudCwKLSAgICAgICAgdGhlbiB0aGUgUHJvZ3JhbSBtYXkgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2gKLSAgICAgICAgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQKLSAgICAgIDwvbGk+Ci0gICAgICA8bGk+YikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uPC9saT4KLSAgICA8L3VsPgotICAgIDxwPjMuMyBDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssCi0gICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzLCBkaXNjbGFpbWVycyBvZiB3YXJyYW50eSwgb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5Ci0gICAgICAoJmxzcXVvO25vdGljZXMmcnNxdW87KSBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtIGZyb20gYW55IGNvcHkgb2YgdGhlIFByb2dyYW0gd2hpY2gKLSAgICAgIHRoZXkgRGlzdHJpYnV0ZSwgcHJvdmlkZWQgdGhhdCBDb250cmlidXRvcnMgbWF5IGFkZCB0aGVpciBvd24gYXBwcm9wcmlhdGUKLSAgICAgIG5vdGljZXMuCi0gICAgPC9wPgotICAgIDxoMiBpZD0iY29tbWVyY2lhbC1kaXN0cmlidXRpb24iPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9oMj4KLSAgICA8cD5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcwotICAgICAgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzCi0gICAgICBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUKLSAgICAgIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQKLSAgICAgIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlcgotICAgICAgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQotICAgICAgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmbGRxdW87Q29tbWVyY2lhbCBDb250cmlidXRvciZyZHF1bzspCi0gICAgICBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yCi0gICAgICAoJmxkcXVvO0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnJkcXVvOykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cwotICAgICAgKGNvbGxlY3RpdmVseSAmbGRxdW87TG9zc2VzJnJkcXVvOykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMKLSAgICAgIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50Ci0gICAgICBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uCi0gICAgICB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuCi0gICAgICBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZwotICAgICAgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvCi0gICAgICBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlCi0gICAgICBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsCi0gICAgICBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sCi0gICAgICB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZAotICAgICAgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KLSAgICA8L3A+Ci0gICAgPHA+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbQotICAgICAgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLSAgICAgIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi0gICAgICBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMKLSAgICAgIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3ImIzAzOTtzIHJlc3BvbnNpYmlsaXR5IGFsb25lLgotICAgICAgVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMKLSAgICAgIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLSAgICAgIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMKLSAgICAgIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgotICAgIDwvcD4KLSAgICA8aDIgaWQ9IndhcnJhbnR5Ij41LiBOTyBXQVJSQU5UWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZsZHF1bztBUyBJUyZyZHF1bzsgQkFTSVMsIFdJVEhPVVQKLSAgICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi0gICAgICBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi0gICAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCi0gICAgICBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCi0gICAgICBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKLSAgICAgIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUKLSAgICAgIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlCi0gICAgICB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yCi0gICAgICBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJkaXNjbGFpbWVyIj42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZCi0gICAgICBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gICAgICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwKLSAgICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gICAgICBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKLSAgICAgIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJnZW5lcmFsIj43LiBHRU5FUkFMPC9oMj4KLSAgICA8cD5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotICAgICAgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZQotICAgICAgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlCi0gICAgICBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50Ci0gICAgICBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCi0gICAgPC9wPgotICAgIDxwPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmCi0gICAgICAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKQotICAgICAgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50JiMwMzk7cyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyBncmFudGVkCi0gICAgICB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLSAgICA8L3A+Ci0gICAgPHA+QWxsIFJlY2lwaWVudCYjMDM5O3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0bwotICAgICAgY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZAotICAgICAgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nCi0gICAgICBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotICAgICAgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtCi0gICAgICBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCYjMDM5O3Mgb2JsaWdhdGlvbnMgdW5kZXIKLSAgICAgIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlCi0gICAgICBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgotICAgIDwvcD4KLSAgICA8cD5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsCi0gICAgICBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkKLSAgICAgIG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZCByZXNlcnZlcwotICAgICAgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudAotICAgICAgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0Ci0gICAgICB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50Ci0gICAgICBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzCi0gICAgICB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YKLSAgICAgIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotICAgICAgKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIERpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24KLSAgICAgIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcKLSAgICAgIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBEaXN0cmlidXRlCi0gICAgICB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uCi0gICAgPC9wPgotICAgIDxwPkV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudAotICAgICAgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55Ci0gICAgICBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLAotICAgICAgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZAotICAgICAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IGlzIGludGVuZGVkCi0gICAgICB0byBiZSBlbmZvcmNlYWJsZSBieSBhbnkgZW50aXR5IHRoYXQgaXMgbm90IGEgQ29udHJpYnV0b3Igb3IgUmVjaXBpZW50LgotICAgICAgTm8gdGhpcmQtcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBjcmVhdGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImV4aGliaXQtYSI+RXhoaWJpdCBBICZuZGFzaDsgRm9ybSBvZiBTZWNvbmRhcnkgTGljZW5zZXMgTm90aWNlPC9oMj4KLSAgICA8cD4mbGRxdW87VGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIAotICAgIAlTZWNvbmRhcnkgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIAotICAgIAlpbiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IHtuYW1lIGxpY2Vuc2UocyksCi0gICAgCXZlcnNpb24ocyksIGFuZCBleGNlcHRpb25zIG9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgaGVyZX0uJnJkcXVvOwotICAgIDwvcD4KLSAgICA8YmxvY2txdW90ZT4KLSAgICAgIDxwPlNpbXBseSBpbmNsdWRpbmcgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgdGhpcyBFeGhpYml0IEEKLSAgICAgICAgaXMgbm90IHN1ZmZpY2llbnQgdG8gbGljZW5zZSB0aGUgU291cmNlIENvZGUgdW5kZXIgU2Vjb25kYXJ5IExpY2Vuc2VzLgotICAgICAgPC9wPgotICAgICAgPHA+SWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgZmlsZSwKLSAgICAgICAgdGhlbiBZb3UgbWF5IGluY2x1ZGUgdGhlIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgTElDRU5TRSBmaWxlIGluIGEKLSAgICAgICAgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKLSAgICAgICAgc3VjaCBhIG5vdGljZS4KLSAgICAgIDwvcD4KLSAgICAgIDxwPllvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLjwvcD4KLSAgICA8L2Jsb2NrcXVvdGU+Ci0gIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmVkNjQzLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLTxwcm9qZWN0PgotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gIDxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3RvcjwvZ3JvdXBJZD4KLSAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZDwvYXJ0aWZhY3RJZD4KLSAgPHZlcnNpb24+MC44LjM8L3ZlcnNpb24+IAotICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICA8bmFtZT5FY29yZSBSZWZlcmVuY2UgRXh0cmFjdG9yPC9uYW1lPgotIAotCTxwcm9wZXJ0aWVzPgotCQk8dHljaG8udmVyc2lvbj4wLjIyLjA8L3R5Y2hvLnZlcnNpb24+Ci0JCTxqYWNvY28udmVyc2lvbj4wLjcuNC4yMDE1MDIyNjIxMjg8L2phY29jby52ZXJzaW9uPgotCQk8cHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZz5VVEYtODwvcHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZz4KLQkJPHByb2plY3QucmVwb3J0aW5nLm91dHB1dEVuY29kaW5nPlVURi04PC9wcm9qZWN0LnJlcG9ydGluZy5vdXRwdXRFbmNvZGluZz4KLQkJPGx1bmEtcmVwby51cmw+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL2x1bmE8L2x1bmEtcmVwby51cmw+Ci0JCTxhbWFsdGhlYS1yZXBvLnVybD5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvYXBwNG1jL3VwZGF0ZXNpdGVzL3JlbGVhc2VzLzAuOC4zLzwvYW1hbHRoZWEtcmVwby51cmw+Ci0JCQotCQk8ZnJhbmNhLXJlcG8udXJsPmh0dHA6Ly9mcmFuY2EuZ2l0aHViLmlvL2ZyYW5jYS91cGRhdGVfc2l0ZS9yZWxlYXNlcy8wLjkuMS88L2ZyYW5jYS1yZXBvLnVybD4KLQkJPG9yYml0LXJlcG8udXJsPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMTUwMTI0MDczNzQ3L3JlcG9zaXRvcnkvPC9vcmJpdC1yZXBvLnVybD4KLQkJPGVhc2UtcmVwby11cmw+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2Vhc2UvdXBkYXRlL3JlbGVhc2U8L2Vhc2UtcmVwby11cmw+Ci0JCTxzcGhpbngtcmVwby11cmw+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3NwaGlueC91cGRhdGVzL2ludGVyaW08L3NwaGlueC1yZXBvLXVybD4KLQk8L3Byb3BlcnRpZXM+Ci0gIAk8cmVwb3NpdG9yaWVzPgotPHJlcG9zaXRvcnk+Ci0JCQk8aWQ+YW1hbHRoZWE8L2lkPgotCQkJPHVybD4ke2FtYWx0aGVhLXJlcG8udXJsfTwvdXJsPgotCQkJPGxheW91dD5wMjwvbGF5b3V0PgotCQk8L3JlcG9zaXRvcnk+Ci0JCTxyZXBvc2l0b3J5PgotCQkJPGlkPmZyYW5jYTwvaWQ+Ci0JCQk8dXJsPiR7ZnJhbmNhLXJlcG8udXJsfTwvdXJsPgotCQkJPGxheW91dD5wMjwvbGF5b3V0PgotCQk8L3JlcG9zaXRvcnk+Ci0JCTxyZXBvc2l0b3J5PgotCQkJPGlkPmx1bmE8L2lkPgotCQkJPHVybD4ke2x1bmEtcmVwby51cmx9PC91cmw+Ci0JCQk8bGF5b3V0PnAyPC9sYXlvdXQ+Ci0JCTwvcmVwb3NpdG9yeT4KLQkJPHJlcG9zaXRvcnk+Ci0JCQk8aWQ+b3JiaXQ8L2lkPgotCQkJPHVybD4ke29yYml0LXJlcG8udXJsfTwvdXJsPgotCQkJPGxheW91dD5wMjwvbGF5b3V0PgotCQk8L3JlcG9zaXRvcnk+Ci0JCTxyZXBvc2l0b3J5PgotCQkJPGlkPmVhc2U8L2lkPgotCQkJPHVybD4ke2Vhc2UtcmVwby11cmx9PC91cmw+Ci0JCQk8bGF5b3V0PnAyPC9sYXlvdXQ+Ci0JCTwvcmVwb3NpdG9yeT4KLQkJPHJlcG9zaXRvcnk+Ci0JCQk8aWQ+c3BoaW54PC9pZD4KLQkJCTx1cmw+JHtzcGhpbngtcmVwby11cmx9PC91cmw+Ci0JCQk8bGF5b3V0PnAyPC9sYXlvdXQ+Ci0JCTwvcmVwb3NpdG9yeT4KLQk8L3JlcG9zaXRvcmllcz4KLSAgCi0KLSAgPG1vZHVsZXM+Ci0gIAk8IS0tIFBsdWdpbnMgLS0+Ci0gICAgPG1vZHVsZT4uLi8uLi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3RvcjwvbW9kdWxlPgotICAgPG1vZHVsZT4uLi8uLi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXI8L21vZHVsZT4KLSAgIDxtb2R1bGU+Li4vLi4vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyPC9tb2R1bGU+Ci0KLSAgIDxtb2R1bGU+Li4vLi4vcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWw8L21vZHVsZT4KLSAgIAotICAgIDwhLS0gVGVzdHMgLS0+Ci0gIAotICAgIDwhLS0gRmVhdHVyZXMgLS0+Ci0gICAgPG1vZHVsZT4uLi8uLi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZTwvbW9kdWxlPgotCTxtb2R1bGU+Li4vLi4vZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlPC9tb2R1bGU+Ci0JICAKLSAgICA8IS0tIFAyUmVwbyAtLT4KLSAgICA8bW9kdWxlPi4uL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5wMnJlcG88L21vZHVsZT4KLQotICA8L21vZHVsZXM+Ci0gIAotICAKLSAgCTxidWlsZD4KLQkJPHBsdWdpbnM+Ci0JCQk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgotCQkJCTxhcnRpZmFjdElkPnR5Y2hvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgotCQkJCTxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+Ci0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD50eWNoby1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4KLQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJPHZlcmJvc2U+dHJ1ZTwvdmVyYm9zZT4KLQkJCQkJPHNvdXJjZT4xLjg8L3NvdXJjZT4KLQkJCQkJPHRhcmdldD4xLjg8L3RhcmdldD4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD50YXJnZXQtcGxhdGZvcm0tY29uZmlndXJhdGlvbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8ZGVwZW5kZW5jeS1yZXNvbHV0aW9uPgotCQkJCQkJPGV4dHJhUmVxdWlyZW1lbnRzPgotCQkJCQkJCTxyZXF1aXJlbWVudD4KLQkJCQkJCQkJPHR5cGU+ZWNsaXBzZS1wbHVnaW48L3R5cGU+Ci0JCQkJCQkJCTxpZD5vcmcuaGFtY3Jlc3Q8L2lkPgotCQkJCQkJCQk8dmVyc2lvblJhbmdlPjAuMC4wPC92ZXJzaW9uUmFuZ2U+Ci0JCQkJCQkJPC9yZXF1aXJlbWVudD4KLQkJCQkJCTwvZXh0cmFSZXF1aXJlbWVudHM+Ci0JCQkJCTwvZGVwZW5kZW5jeS1yZXNvbHV0aW9uPgotCQkJCQk8ZW52aXJvbm1lbnRzPgotCQkJCQkJPGVudmlyb25tZW50PgotCQkJCQkJCTxvcz5saW51eDwvb3M+Ci0JCQkJCQkJPHdzPmd0azwvd3M+Ci0JCQkJCQkJPGFyY2g+eDg2PC9hcmNoPgotCQkJCQkJPC9lbnZpcm9ubWVudD4KLQkJCQkJCTxlbnZpcm9ubWVudD4KLQkJCQkJCQk8b3M+bGludXg8L29zPgotCQkJCQkJCTx3cz5ndGs8L3dzPgotCQkJCQkJCTxhcmNoPng4Nl82NDwvYXJjaD4KLQkJCQkJCTwvZW52aXJvbm1lbnQ+Ci0JCQkJCQk8ZW52aXJvbm1lbnQ+Ci0JCQkJCQkJPG9zPndpbjMyPC9vcz4KLQkJCQkJCQk8d3M+d2luMzI8L3dzPgotCQkJCQkJCTxhcmNoPng4NjwvYXJjaD4KLQkJCQkJCTwvZW52aXJvbm1lbnQ+Ci0JCQkJCQk8ZW52aXJvbm1lbnQ+Ci0JCQkJCQkJPG9zPndpbjMyPC9vcz4KLQkJCQkJCQk8d3M+d2luMzI8L3dzPgotCQkJCQkJCTxhcmNoPng4Nl82NDwvYXJjaD4KLQkJCQkJCTwvZW52aXJvbm1lbnQ+Ci0JCQkJCQk8ZW52aXJvbm1lbnQ+Ci0JCQkJCQkJPG9zPm1hY29zeDwvb3M+Ci0JCQkJCQkJPHdzPmNvY29hPC93cz4KLQkJCQkJCQk8YXJjaD54ODZfNjQ8L2FyY2g+Ci0JCQkJCQk8L2Vudmlyb25tZW50PgotCQkJCQk8L2Vudmlyb25tZW50cz4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG88L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+dHljaG8tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+Ci0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCTwhLS0gYXJnTGluZT4ke3R5Y2hvLnRlc3RBcmdMaW5lfTwvYXJnTGluZT4gLS0+Ci0JCQkJCTxmb3JrTW9kZT5uZXZlcjwvZm9ya01vZGU+Ci0JCQkJCTxpbmNsdWRlcz4KLQkJCQkJCTxpbmNsdWRlPioqLypUZXN0Lio8L2luY2x1ZGU+Ci0JCQkJCTwvaW5jbHVkZXM+Ci0JCQkJPC9jb25maWd1cmF0aW9uPgotCQkJPC9wbHVnaW4+Ci0JCQk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5qYWNvY288L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+amFjb2NvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4wLjcuNC4yMDE1MDIyNjIxMjg8L3ZlcnNpb24+Ci0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCTxleGNsdWRlcz4KLQotCQkJCQk8L2V4Y2x1ZGVzPgotCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCQk8ZXhlY3V0aW9ucz4KLQkJCQkJPCEtLSBQcmVwYXJlcyB0aGUgcHJvcGVydHkgcG9pbnRpbmcgdG8gdGhlIEphQ29DbyBydW50aW1lIGFnZW50IHdoaWNoCi0JCQkJCQlpcyBwYXNzZWQgYXMgVk0gYXJndW1lbnQgd2hlbiBNYXZlbiB0aGUgU3VyZWZpcmUgcGx1Z2luIGlzIGV4ZWN1dGVkLiAtLT4KLQkJCQkJPGV4ZWN1dGlvbj4KLQkJCQkJCTxpZD5wcmUtdW5pdC10ZXN0PC9pZD4KLQkJCQkJCTxnb2Fscz4KLQkJCQkJCQk8Z29hbD5wcmVwYXJlLWFnZW50PC9nb2FsPgotCQkJCQkJPC9nb2Fscz4KLQkJCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQkJCTwhLS0gU2V0cyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGljaCBjb250YWlucyB0aGUgZXhlY3V0aW9uIGRhdGEuIC0tPgotCQkJCQkJCTxkZXN0RmlsZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9jb3ZlcmFnZS1yZXBvcnRzL2phY29jby11dC5leGVjPC9kZXN0RmlsZT4KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCQkJPC9leGVjdXRpb24+Ci0JCQkJCTwhLS0gRW5zdXJlcyB0aGF0IHRoZSBjb2RlIGNvdmVyYWdlIHJlcG9ydCBmb3IgdW5pdCB0ZXN0cyBpcyBjcmVhdGVkCi0JCQkJCQlhZnRlciB1bml0IHRlc3RzIGhhdmUgYmVlbiBydW4uIC0tPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGlkPnBvc3QtdW5pdC10ZXN0PC9pZD4KLQkJCQkJCTxwaGFzZT52ZXJpZnk8L3BoYXNlPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPnJlcG9ydDwvZ29hbD4KLQkJCQkJCTwvZ29hbHM+Ci0JCQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJCQk8IS0tIFNldHMgdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hpY2ggY29udGFpbnMgdGhlIGV4ZWN1dGlvbiBkYXRhLiAtLT4KLQkJCQkJCQk8ZGF0YUZpbGU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vY292ZXJhZ2UtcmVwb3J0cy9qYWNvY28tdXQuZXhlYzwvZGF0YUZpbGU+Ci0JCQkJCQkJPCEtLSBTZXRzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgY29kZSBjb3ZlcmFnZSByZXBvcnQuIC0tPgotCQkJCQkJCTxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LnJlcG9ydGluZy5vdXRwdXREaXJlY3Rvcnl9L2phY29jby11dDwvb3V0cHV0RGlyZWN0b3J5PgotCQkJCQkJPC9jb25maWd1cmF0aW9uPgotCQkJCQk8L2V4ZWN1dGlvbj4KLQkJCQk8L2V4ZWN1dGlvbnM+Ci0JCQk8L3BsdWdpbj4KLQkJPC9wbHVnaW5zPgotCTwvYnVpbGQ+Ci0gIAotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL2NhdGVnb3J5LnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby9jYXRlZ29yeS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2MWI3ZjQuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL2NhdGVnb3J5LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2l0ZT4KLSAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlXzAuOC4zLmphciIgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZSIgdmVyc2lvbj0iMC44LjMiPgotICAgICAgPGNhdGVnb3J5IG5hbWU9IkVjb3JlIFRvb2xzIi8+Ci0gICA8L2ZlYXR1cmU+Ci0gICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlXzAuOC4zLmphciIgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlIiB2ZXJzaW9uPSIwLjguMyI+Ci0gICAgICA8Y2F0ZWdvcnkgbmFtZT0iRWNvcmUgVG9vbHMiLz4KLSAgIDwvZmVhdHVyZT4KLSAgIDxjYXRlZ29yeS1kZWYgbmFtZT0iRWNvcmUgVG9vbHMiIGxhYmVsPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IiLz4KLTwvc2l0ZT4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby9wb20ueG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3M2RiOWIuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotCTxwYXJlbnQ+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZDwvcmVsYXRpdmVQYXRoPgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3I8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjAuOC4zPC92ZXJzaW9uPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwbzwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcmVwb3NpdG9yeTwvcGFja2FnaW5nPgotCQotCTxwcm9wZXJ0aWVzPgotCQk8b3JnLmpib3NzLnRvb2xzLnR5Y2hvLXBsdWdpbnMudmVyc2lvbj4wLjIyLjA8L29yZy5qYm9zcy50b29scy50eWNoby1wbHVnaW5zLnZlcnNpb24+Ci0JPC9wcm9wZXJ0aWVzPgotCQotCTxwbHVnaW5SZXBvc2l0b3JpZXM+Ci0JCTxwbHVnaW5SZXBvc2l0b3J5PgotCQkJPGlkPmpib3NzLXB1YmxpYy1yZXBvc2l0b3J5LWdyb3VwPC9pZD4KLQkJCTxuYW1lPkpCb3NzIFB1YmxpYyBSZXBvc2l0b3J5IEdyb3VwPC9uYW1lPgotCQkJPHVybD5odHRwOi8vcmVwb3NpdG9yeS5qYm9zcy5vcmcvbmV4dXMvY29udGVudC9ncm91cHMvcHVibGljLzwvdXJsPgotCQk8L3BsdWdpblJlcG9zaXRvcnk+Ci0KLQkJPHBsdWdpblJlcG9zaXRvcnk+Ci0JCQk8aWQ+amJvc3Mtc25hcHNob3RzLXJlcG9zaXRvcnk8L2lkPgotCQkJPG5hbWU+SkJvc3MgU25hcHNob3RzIFJlcG9zaXRvcnk8L25hbWU+Ci0JCQk8dXJsPmh0dHBzOi8vcmVwb3NpdG9yeS5qYm9zcy5vcmcvbmV4dXMvY29udGVudC9yZXBvc2l0b3JpZXMvc25hcHNob3RzLzwvdXJsPgotCQk8L3BsdWdpblJlcG9zaXRvcnk+Ci0JPC9wbHVnaW5SZXBvc2l0b3JpZXM+Ci0KLQk8YnVpbGQ+Ci0JCTxwbHVnaW5zPgotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD50eWNoby1wMi1yZXBvc2l0b3J5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgotCi0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCTxjb21wcmVzcy8+Ci0JCQkJPC9jb25maWd1cmF0aW9uPgotCQkJPC9wbHVnaW4+Ci0KLQkJCQotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuamJvc3MudG9vbHMudHljaG8tcGx1Z2luczwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD5yZXBvc2l0b3J5LXV0aWxzPC9hcnRpZmFjdElkPgotCQkJCTx2ZXJzaW9uPiR7b3JnLmpib3NzLnRvb2xzLnR5Y2hvLXBsdWdpbnMudmVyc2lvbn08L3ZlcnNpb24+Ci0KLQkJCQk8ZXhlY3V0aW9ucz4KLQkJCQkJPGV4ZWN1dGlvbj4KLQkJCQkJCTxpZD5nZW5lcmF0ZS1mYWNhZGU8L2lkPgotCQkJCQkJPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgotCQotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmdlbmVyYXRlLXJlcG9zaXRvcnktZmFjYWRlPC9nb2FsPgotCQkJCQkJPC9nb2Fscz4KLQkKLQkJCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQkJCTxzaXRlVGVtcGxhdGVGb2xkZXI+c2l0ZVRlbXBsYXRlPC9zaXRlVGVtcGxhdGVGb2xkZXI+Ci0JCQkJCQkJCi0JCQkJCQkJPCEtLSBTeW1ib2xzIGFyZSB1c2VkIHdoaWxlIGV4cGFuZGluZyBpbmRleC5odG1sIHRlbXBsYXRlIC0tPgotCQkJCQkJCTxzeW1ib2xzPgotCQkJCQkJCQk8dXBkYXRlLnNpdGUubmFtZT4ke3Byb2plY3QucGFyZW50Lm5hbWV9PC91cGRhdGUuc2l0ZS5uYW1lPgotCQkJCQkJCQk8dGFyZ2V0LmVjbGlwc2UudmVyc2lvbj40LjMuMjwvdGFyZ2V0LmVjbGlwc2UudmVyc2lvbj4KLQkJCQkJCQk8L3N5bWJvbHM+Ci0KLQkJCQkJCQk8YXNzb2NpYXRlU2l0ZXM+Ci0JCQkJCQkJCTwhLS0gc2l0ZT5odHRwOi8vaHVkc29uLmVjbGlwc2Uub3JnL2h1ZHNvbi9qb2IvZGFtb3MtbWFzdGVyL2xhc3RTdWNjZXNzZnVsQnVpbGQvYXJ0aWZhY3QvdXBkYXRlLXNpdGU8L3NpdGU+Ci0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9lbWYvZW1mL3VwZGF0ZXMvcmVsZWFzZXM8L3NpdGU+Ci0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9lbWYvY29tcGFyZS91cGRhdGVzL3JlbGVhc2VzPC9zaXRlPgotCQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcm1mL3VwZGF0ZXM8L3NpdGU+Ci0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zcGhpbngvdXBkYXRlcy9pbnRlcmltPC9zaXRlPgotCQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvdG1mL3h0ZXh0L3VwZGF0ZXMvY29tcG9zaXRlL3JlbGVhc2VzPC9zaXRlPgotCQkJCQkJCQk8c2l0ZT5odHRwOi8vZnJhbmNhLmdpdGh1Yi5pby9mcmFuY2EvdXBkYXRlX3NpdGUvcmVsZWFzZXM8L3NpdGU+Ci0JCQkJCQkJCTxzaXRlPmh0dHA6Ly91cGRhdGVzLnlha2luZHUub3JnL3NjdC9rZXBsZXIvcmVsZWFzZXM8L3NpdGU+Ci0JCQkJCQkJCQotCQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3BoaW54L3VwZGF0ZXMvaW50ZXJpbTwvc2l0ZS0tPgotCQkJCQkJCTwvYXNzb2NpYXRlU2l0ZXM+Ci0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQkJCTwvZXhlY3V0aW9uPgotCQkJCTwvZXhlY3V0aW9ucz4KLQkJCTwvcGx1Z2luPgotCQk8L3BsdWdpbnM+Ci0JPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL3NpdGUueG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL3NpdGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDZmMzQzLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby9zaXRlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2l0ZT4KLSAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmVfMC44LjMuMjAxNzA0MDcxMzQyLmphciIgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlIiB2ZXJzaW9uPSIwLjguMy4yMDE3MDQwNzEzNDIiPgotICAgICAgPGNhdGVnb3J5IG5hbWU9IkVjb3JlIFRvb2xzIi8+Ci0gICA8L2ZlYXR1cmU+Ci0gICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZV8wLjguMy4yMDE3MDQwNzEzNDIuamFyIiBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlIiB2ZXJzaW9uPSIwLjguMy4yMDE3MDQwNzEzNDIiPgotICAgICAgPGNhdGVnb3J5IG5hbWU9IkVjb3JlIFRvb2xzIi8+Ci0gICA8L2ZlYXR1cmU+Ci0gICA8Y2F0ZWdvcnktZGVmIG5hbWU9IkVjb3JlIFRvb2xzIiBsYWJlbD0iRWNvcmUgVG9vbHMiLz4KLTwvc2l0ZT4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS8uZ2l0aWdub3JlCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy8uZ2l0aWdub3JlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXJzLy5wcm9qZWN0CnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlLy5wcm9qZWN0CnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy8ucHJvamVjdAppbmRleCAyYjY4MWM0Li4zMGE0MmQ5IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS8ucHJvamVjdAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy8ucHJvamVjdApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZTwvbmFtZT4KKwk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcnM8L25hbWU+CiAJPGNvbW1lbnQ+PC9jb21tZW50PgogCTxwcm9qZWN0cz4KIAk8L3Byb2plY3RzPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZS9hYm91dC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcnMvYWJvdXQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZS9hYm91dC5odG1sCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy9hYm91dC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy9idWlsZC5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXJzL2J1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcnMvZXBsLTIuMC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlL2VwbC0yLjAuaHRtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcnMvZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy9mZWF0dXJlLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXJzL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDk4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2Vycy9mZWF0dXJlLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGZlYXR1cmUKKyAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcnMiCisgICAgICBsYWJlbD0iQVBQNE1DIEVNRiBNZXRhTW9kZWwgVmlld2VycyIKKyAgICAgIHZlcnNpb249IjAuOS44LnF1YWxpZmllciIKKyAgICAgIHByb3ZpZGVyLW5hbWU9IkVjbGlwc2UgQVBQNE1DIgorICAgICAgbGljZW5zZS1mZWF0dXJlPSJvcmcuZWNsaXBzZS5saWNlbnNlIgorICAgICAgbGljZW5zZS1mZWF0dXJlLXZlcnNpb249IjIuMC4yLnF1YWxpZmllciI+CisKKyAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHBzOi8vcHJvamVjdHMuZWNsaXBzZS5vcmcvcHJvamVjdHMvdGVjaG5vbG9neS5hcHA0bWMiPgorICAgICAgQVBQNE1DIEVNRiBNZXRhTW9kZWwgVmlld2VycworICAgPC9kZXNjcmlwdGlvbj4KKworICAgPGNvcHlyaWdodCB1cmw9Imh0dHBzOi8vcHJvamVjdHMuZWNsaXBzZS5vcmcvcHJvamVjdHMvdGVjaG5vbG9neS5hcHA0bWMiPgorICAgICAgKGMpIENvcHlyaWdodCBSb2JlcnQgQm9zY2ggR21iSC4gMjAxNy0yMDIwLiAKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisgICA8L2NvcHlyaWdodD4KKworICAgPHJlcXVpcmVzPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgorICAgPC9yZXF1aXJlcz4KKworICAgPHBsdWdpbgorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyIgorICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCIKKyAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCIKKyAgICAgICAgIHZlcnNpb249IjAuMC4wIgorICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPgorCis8L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5ncmFwaGljYWwvLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZS8uZ2l0aWdub3JlCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5ncmFwaGljYWwvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmUvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5ncmFwaGljYWwvLnByb2plY3QKc2ltaWxhcml0eSBpbmRleCA4MyUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlLy5wcm9qZWN0CmNvcHkgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsLy5wcm9qZWN0CmluZGV4IDJiNjgxYzQuLjkyMWNlYjYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlLy5wcm9qZWN0CisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLmdyYXBoaWNhbC8ucHJvamVjdApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZTwvbmFtZT4KKwk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsPC9uYW1lPgogCTxjb21tZW50PjwvY29tbWVudD4KIAk8cHJvamVjdHM+CiAJPC9wcm9qZWN0cz4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvYWJvdXQuaHRtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLmdyYXBoaWNhbC9hYm91dC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZS9hYm91dC5odG1sCmNvcHkgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsL2Fib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvYnVpbGQucHJvcGVydGllcyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLmdyYXBoaWNhbC9idWlsZC5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmNvcHkgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsL2J1aWxkLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsL2VwbC0yLjAuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvZXBsLTIuMC5odG1sCmNvcHkgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsL2VwbC0yLjAuaHRtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsL2ZlYXR1cmUueG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMuZ3JhcGhpY2FsL2ZlYXR1cmUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZDM2NTUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5ncmFwaGljYWwvZmVhdHVyZS54bWwKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxmZWF0dXJlCisgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLmdyYXBoaWNhbCIKKyAgICAgIGxhYmVsPSJBUFA0TUMgRU1GIEdyYXBoaWNhbCBWaWV3ZXJzIgorICAgICAgdmVyc2lvbj0iMC45LjgucXVhbGlmaWVyIgorICAgICAgcHJvdmlkZXItbmFtZT0iRWNsaXBzZSBBUFA0TUMiCisgICAgICBsaWNlbnNlLWZlYXR1cmU9Im9yZy5lY2xpcHNlLmxpY2Vuc2UiCisgICAgICBsaWNlbnNlLWZlYXR1cmUtdmVyc2lvbj0iMi4wLjIucXVhbGlmaWVyIj4KKworICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cHM6Ly9wcm9qZWN0cy5lY2xpcHNlLm9yZy9wcm9qZWN0cy90ZWNobm9sb2d5LmFwcDRtYyI+CisgICAgICBBUFA0TUMgRU1GIEdyYXBoaWNhbCBWaWV3ZXJzCisgICA8L2Rlc2NyaXB0aW9uPgorCisgICA8Y29weXJpZ2h0IHVybD0iaHR0cHM6Ly9wcm9qZWN0cy5lY2xpcHNlLm9yZy9wcm9qZWN0cy90ZWNobm9sb2d5LmFwcDRtYyI+CisgICAgICAoYykgQ29weXJpZ2h0IFJvYmVydCBCb3NjaCBHbWJILiAyMDE3LTIwMjAuIAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgIDwvY29weXJpZ2h0PgorCisgICA8aW5jbHVkZXMKKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcnMiCisgICAgICAgICB2ZXJzaW9uPSIwLjAuMCIvPgorCisgICA8cmVxdWlyZXM+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlIi8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhtaSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zcGhpbnguZW1mLmVkaXRvcnMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5zcGhpbnguZW1mLmVkaXRvcnMuZm9ybXMiLz4KKyAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpLmJyb3dzZXIiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ibmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmVjb3JlLmZlYXR1cmUiIHZlcnNpb249IjEuMS4yNCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZmVhdHVyZSIgdmVyc2lvbj0iMS4xLjI0Ii8+CisgICAgICA8aW1wb3J0IGZlYXR1cmU9Im5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5saWIuZmVhdHVyZSIgdmVyc2lvbj0iMS4yMDE5LjExIi8+CisgICA8L3JlcXVpcmVzPgorCisgICA8cGx1Z2luCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwiCisgICAgICAgICBkb3dubG9hZC1zaXplPSIwIgorICAgICAgICAgaW5zdGFsbC1zaXplPSIwIgorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiCisgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+CisKKzwvZmVhdHVyZT4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDkwNjM3Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5GZWF0dXJlQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLkZlYXR1cmVOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmUxZTMzLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZlYXR1cmUgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlIiBsYWJlbD0iQU1BTFRIRUEgR3JhcGhpY2FsIFRvb2xzIiBwcm92aWRlci1uYW1lPSJFY2xpcHNlIEFQUDRNQyIgdmVyc2lvbj0iMC44LjMiPgotCTxjb3B5cmlnaHQgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2NvcHlyaWdodCI+Ci0JCVtFbnRlciBDb3B5cmlnaHQgRGVzY3JpcHRpb24gaGVyZS5dCi0JPC9jb3B5cmlnaHQ+Ci0JPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9kZXNjcmlwdGlvbiI+Ci0JCVtFbnRlciBGZWF0dXJlIERlc2NyaXB0aW9uIGhlcmUuXQotCTwvZGVzY3JpcHRpb24+Ci0JPGluY2x1ZGVzIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmUiIHZlcnNpb249IjAuMC4wIi8+Ci0JPGxpY2Vuc2UgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2xpY2Vuc2UiPgotCQlbRW50ZXIgTGljZW5zZSBEZXNjcmlwdGlvbiBoZXJlLl0KLQk8L2xpY2Vuc2U+Ci0JPHBsdWdpbiBkb3dubG9hZC1zaXplPSIwIiBpZD0ibmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sIiBpbnN0YWxsLXNpemU9IjAiIHZlcnNpb249IjAuMC4wIi8+Ci0JPHBsdWdpbiBkb3dubG9hZC1zaXplPSIwIiBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yIiBpbnN0YWxsLXNpemU9IjAiIHVucGFjaz0iZmFsc2UiIHZlcnNpb249IjAuMC4wIi8+Ci0JPHJlcXVpcmVzPgotCQk8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lIi8+Ci0JCTxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLz4KLQkJPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiLz4KLQkJPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYiLz4KLQkJPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYuZWRpdG9ycyIvPgotCQk8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3BoaW54LmVtZi5lZGl0b3JzLmZvcm1zIi8+Ci0JCTxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS51aSIvPgotCQk8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkuYnJvd3NlciIvPgotCTwvcmVxdWlyZXM+Ci08L2ZlYXR1cmU+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YWI3NzkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZmVhdHVyZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0KLQk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQ8L3JlbGF0aXZlUGF0aD4KLQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuZXh0cmFjdG9yLmJ1aWxkPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjguMzwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5mZWF0dXJlPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+ZWNsaXBzZS1mZWF0dXJlPC9wYWNrYWdpbmc+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS9hYm91dC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmUvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY0Zjc4MS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIKLSAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Ci08aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIC8+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPC9oZWFkPgotPGJvZHkgbGFuZz0iRU4tVVMiPgotCTxoMj5BYm91dCBUaGlzIENvbnRlbnQ8L2gyPgotCi0JPHA+Tm92ZW1iZXIgMzAsIDIwMTc8L3A+Ci0JPGgzPkxpY2Vuc2U8L2gzPgotCi0JPHA+Ci0JCVRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbgotCQkoJnF1b3Q7Q29udGVudCZxdW90OykuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudAotCQlpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlCi0JCVB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMi4wICgmcXVvdDtFUEwmcXVvdDspLiBBIGNvcHkgb2YgdGhlIEVQTCBpcwotCQlhdmFpbGFibGUgYXQgPGEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjA8L2E+LgotCQlGb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgJnF1b3Q7UHJvZ3JhbSZxdW90OyB3aWxsIG1lYW4gdGhlIENvbnRlbnQuCi0JPC9wPgotCi0JPHA+Ci0JCUlmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UKLQkJRm91bmRhdGlvbiwgdGhlIENvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5Ci0JCSgmcXVvdDtSZWRpc3RyaWJ1dG9yJnF1b3Q7KSBhbmQgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG1heQotCQlhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIENoZWNrIHRoZQotCQlSZWRpc3RyaWJ1dG9yJ3MgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoCi0JCWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZAotCQliZWxvdywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZQotCQljb2RlIGluIHRoZSBDb250ZW50IGFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdCA8YQotCQkJaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmc8L2E+LgotCTwvcD4KLQotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjkwYzcwLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4KLSMgIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0jICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyAgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSMgCi0jICAgQ29udHJpYnV0b3JzOgotIyAgCSBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyAKLSMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotYmluLmluY2x1ZGVzID0gZmVhdHVyZS54bWwsXAotICAgICAgICAgICAgICAgZXBsLTIuMC5odG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLXNyYy5pbmNsdWRlcyA9IGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS9lcGwtMi4wLmh0bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS9lcGwtMi4wLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzN2ExODEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmUvZXBsLTIuMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLSAgPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Ci0gICAgPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDIuMDwvdGl0bGU+Ci0gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLSAgICAgIGJvZHkgewotICAgICAgICBtYXJnaW46IDEuNWVtIDNlbTsKLSAgICAgIH0KLSAgICAgIGgxewotICAgICAgICBmb250LXNpemU6MS41ZW07Ci0gICAgICB9Ci0gICAgICBoMnsKLSAgICAgICAgZm9udC1zaXplOjFlbTsKLSAgICAgICAgbWFyZ2luLWJvdHRvbTowLjVlbTsKLSAgICAgICAgbWFyZ2luLXRvcDoxZW07Ci0gICAgICB9Ci0gICAgICBwIHsKLSAgICAgICAgbWFyZ2luLXRvcDogIDAuNWVtOwotICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKLSAgICAgIH0KLSAgICAgIHVsLCBvbHsKLSAgICAgICAgbGlzdC1zdHlsZS10eXBlOm5vbmU7Ci0gICAgICB9Ci0gICAgPC9zdHlsZT4KLSAgPC9oZWFkPgotICA8Ym9keT4KLSAgICA8aDE+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMi4wPC9oMT4KLSAgICA8cD5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRQotICAgICAgUFVCTElDIExJQ0VOU0UgKCZsZHF1bztBR1JFRU1FTlQmcmRxdW87KS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTgotICAgICAgT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJiMwMzk7UyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImRlZmluaXRpb25zIj4xLiBERUZJTklUSU9OUzwvaDI+Ci0gICAgPHA+JmxkcXVvO0NvbnRyaWJ1dGlvbiZyZHF1bzsgbWVhbnM6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29udGVudAotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6Ci0gICAgICAgIDx1bD4KLSAgICAgICAgICA8bGk+aSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9saT4KLSAgICAgICAgICA8bGk+aWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L2xpPgotICAgICAgICA8L3VsPgotICAgICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbQotICAgICAgICBhbmQgYXJlIERpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KLSAgICAgICAgJmxkcXVvO29yaWdpbmF0ZXMmcmRxdW87IGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaAotICAgICAgICBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJiMwMzk7cyBiZWhhbGYuCi0gICAgICAgIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gdGhhdAotICAgICAgICBhcmUgbm90IE1vZGlmaWVkIFdvcmtzLgotICAgICAgPC9saT4KLSAgICA8L3VsPgotICAgIDxwPiZsZHF1bztDb250cmlidXRvciZyZHF1bzsgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3A+Ci0gICAgPHA+JmxkcXVvO0xpY2Vuc2VkIFBhdGVudHMmcmRxdW87IG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2gKLSAgICAgIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUKLSAgICAgIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1Byb2dyYW0mcmRxdW87IG1lYW5zIHRoZSBDb250cmlidXRpb25zIERpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzCi0gICAgICBBZ3JlZW1lbnQuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztSZWNpcGllbnQmcmRxdW87IG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLSAgICAgIG9yIGFueSBTZWNvbmRhcnkgTGljZW5zZSAoYXMgYXBwbGljYWJsZSksIGluY2x1ZGluZyBDb250cmlidXRvcnMuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztEZXJpdmF0aXZlIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyCi0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBQcm9ncmFtIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO01vZGlmaWVkIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyIGZvcm0gdGhhdAotICAgICAgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlCi0gICAgICBjb250ZW50cyBvZiB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nLCBmb3IgcHVycG9zZXMgb2YgY2xhcml0eSBhbnkgbmV3IGZpbGUKLSAgICAgIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBjb250YWlucyBhbnkgY29udGVudHMgb2YgdGhlIFByb2dyYW0uIE1vZGlmaWVkCi0gICAgICBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IGNvbnRhaW4gb25seSBkZWNsYXJhdGlvbnMsIGludGVyZmFjZXMsCi0gICAgICB0eXBlcywgY2xhc3Nlcywgc3RydWN0dXJlcywgb3IgZmlsZXMgb2YgdGhlIFByb2dyYW0gc29sZWx5IGluIGVhY2ggY2FzZQotICAgICAgaW4gb3JkZXIgdG8gbGluayB0bywgYmluZCBieSBuYW1lLCBvciBzdWJjbGFzcyB0aGUgUHJvZ3JhbSBvciBNb2RpZmllZAotICAgICAgV29ya3MgdGhlcmVvZi4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO0Rpc3RyaWJ1dGUmcmRxdW87IG1lYW5zIHRoZSBhY3RzIG9mIGEpIGRpc3RyaWJ1dGluZyBvciBiKSBtYWtpbmcgYXZhaWxhYmxlCi0gICAgICBpbiBhbnkgbWFubmVyIHRoYXQgZW5hYmxlcyB0aGUgdHJhbnNmZXIgb2YgYSBjb3B5LgotICAgIDwvcD4KLSAgICA8cD4mbGRxdW87U291cmNlIENvZGUmcmRxdW87IG1lYW5zIHRoZSBmb3JtIG9mIGEgUHJvZ3JhbSBwcmVmZXJyZWQgZm9yIG1ha2luZwotICAgICAgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwKLSAgICAgIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1NlY29uZGFyeSBMaWNlbnNlJnJkcXVvOyBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICAgICAgVmVyc2lvbiAyLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UsIGluY2x1ZGluZyBhbnkKLSAgICAgIGV4Y2VwdGlvbnMgb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcyBpZGVudGlmaWVkIGJ5IHRoZSBpbml0aWFsCi0gICAgICBDb250cmlidXRvci4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJncmFudC1vZi1yaWdodHMiPjIuIEdSQU5UIE9GIFJJR0hUUzwvaDI+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0Ci0gICAgICAgIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksCi0gICAgICAgIHB1YmxpY2x5IHBlcmZvcm0sIERpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi0gICAgICAgIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50Ci0gICAgICAgIGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCi0gICAgICAgIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKLSAgICAgICAgaWYgYW55LCBpbiBTb3VyY2UgQ29kZSBvciBvdGhlciBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsCi0gICAgICAgIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwKLSAgICAgICAgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKLSAgICAgICAgYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkCi0gICAgICAgIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueQotICAgICAgICBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIKLSAgICAgICAgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgotICAgICAgPC9saT4KLSAgICAgIDxsaT5jKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUKLSAgICAgICAgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKLSAgICAgICAgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlCi0gICAgICAgIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuCi0gICAgICAgIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKLSAgICAgICAgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLSAgICAgICAgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzCi0gICAgICAgIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZQotICAgICAgICByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLAotICAgICAgICBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvCi0gICAgICAgIGFsbG93IFJlY2lwaWVudCB0byBEaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQmIzAzOTtzCi0gICAgICAgIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCi0gICAgICA8L2xpPgotICAgICAgPGxpPmQpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKLSAgICAgICAgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQKLSAgICAgICAgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmUpIE5vdHdpdGhzdGFuZGluZyB0aGUgdGVybXMgb2YgYW55IFNlY29uZGFyeSBMaWNlbnNlLCBubyBDb250cmlidXRvcgotICAgICAgICBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyB0byBhbnkgUmVjaXBpZW50IChvdGhlciB0aGFuIHRob3NlIHNldCBmb3J0aAotICAgICAgICBpbiB0aGlzIEFncmVlbWVudCkgYXMgYSByZXN1bHQgb2Ygc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJlY2VpcHQgb2YgdGhlCi0gICAgICAgIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UgKGlmIHBlcm1pdHRlZCB1bmRlcgotICAgICAgICB0aGUgdGVybXMgb2YgU2VjdGlvbiAzKS4KLSAgICAgIDwvbGk+Ci0gICAgPC91bD4KLSAgICA8aDIgaWQ9InJlcXVpcmVtZW50cyI+My4gUkVRVUlSRU1FTlRTPC9oMj4KLSAgICA8cD4zLjEgSWYgYSBDb250cmlidXRvciBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybSwgdGhlbjo8L3A+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIHRoZSBQcm9ncmFtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSwgaW4KLSAgICAgICAgYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gMy4yLCBhbmQgdGhlIENvbnRyaWJ1dG9yIG11c3QgYWNjb21wYW55Ci0gICAgICAgIHRoZSBQcm9ncmFtIHdpdGggYSBzdGF0ZW1lbnQgdGhhdCB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBQcm9ncmFtCi0gICAgICAgIGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kIGluZm9ybXMgUmVjaXBpZW50cyBob3cgdG8KLSAgICAgICAgb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseQotICAgICAgICB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZTsgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSB0aGUgQ29udHJpYnV0b3IgbWF5IERpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgYSBsaWNlbnNlCi0gICAgICAgIGRpZmZlcmVudCB0aGFuIHRoaXMgQWdyZWVtZW50LCBwcm92aWRlZCB0aGF0IHN1Y2ggbGljZW5zZToKLSAgICAgICAgPHVsPgotICAgICAgICAgIDxsaT5pKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBvdGhlciBDb250cmlidXRvcnMgYWxsCi0gICAgICAgICAgICB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIG90aGVyIENvbnRyaWJ1dG9ycyBhbGwKLSAgICAgICAgICAgIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwKLSAgICAgICAgICAgIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpaSkgZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50cyYjMDM5OyByaWdodHMgaW4gdGhlCi0gICAgICAgICAgICBTb3VyY2UgQ29kZSB1bmRlciBzZWN0aW9uIDMuMjsgYW5kCi0gICAgICAgICAgPC9saT4KLSAgICAgICAgICA8bGk+aXYpIHJlcXVpcmVzIGFueSBzdWJzZXF1ZW50IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbnkgcGFydHkKLSAgICAgICAgICAgIHRvIGJlIHVuZGVyIGEgbGljZW5zZSB0aGF0IHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgc2VjdGlvbiAzLgotICAgICAgICAgIDwvbGk+Ci0gICAgICAgIDwvdWw+Ci0gICAgICA8L2xpPgotICAgIDwvdWw+Ci0gICAgPHA+My4yIFdoZW4gdGhlIFByb2dyYW0gaXMgRGlzdHJpYnV0ZWQgYXMgU291cmNlIENvZGU6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBvciBpZiB0aGUgUHJvZ3JhbSAoaSkKLSAgICAgICAgaXMgY29tYmluZWQgd2l0aCBvdGhlciBtYXRlcmlhbCBpbiBhIHNlcGFyYXRlIGZpbGUgb3IgZmlsZXMgbWFkZSBhdmFpbGFibGUKLSAgICAgICAgdW5kZXIgYSBTZWNvbmRhcnkgTGljZW5zZSwgYW5kIChpaSkgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgYXR0YWNoZWQgdG8KLSAgICAgICAgdGhlIFNvdXJjZSBDb2RlIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBvZiB0aGlzIEFncmVlbWVudCwKLSAgICAgICAgdGhlbiB0aGUgUHJvZ3JhbSBtYXkgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2gKLSAgICAgICAgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQKLSAgICAgIDwvbGk+Ci0gICAgICA8bGk+YikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uPC9saT4KLSAgICA8L3VsPgotICAgIDxwPjMuMyBDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssCi0gICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzLCBkaXNjbGFpbWVycyBvZiB3YXJyYW50eSwgb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5Ci0gICAgICAoJmxzcXVvO25vdGljZXMmcnNxdW87KSBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtIGZyb20gYW55IGNvcHkgb2YgdGhlIFByb2dyYW0gd2hpY2gKLSAgICAgIHRoZXkgRGlzdHJpYnV0ZSwgcHJvdmlkZWQgdGhhdCBDb250cmlidXRvcnMgbWF5IGFkZCB0aGVpciBvd24gYXBwcm9wcmlhdGUKLSAgICAgIG5vdGljZXMuCi0gICAgPC9wPgotICAgIDxoMiBpZD0iY29tbWVyY2lhbC1kaXN0cmlidXRpb24iPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9oMj4KLSAgICA8cD5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcwotICAgICAgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzCi0gICAgICBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUKLSAgICAgIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQKLSAgICAgIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlcgotICAgICAgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQotICAgICAgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmbGRxdW87Q29tbWVyY2lhbCBDb250cmlidXRvciZyZHF1bzspCi0gICAgICBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yCi0gICAgICAoJmxkcXVvO0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnJkcXVvOykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cwotICAgICAgKGNvbGxlY3RpdmVseSAmbGRxdW87TG9zc2VzJnJkcXVvOykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMKLSAgICAgIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50Ci0gICAgICBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uCi0gICAgICB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuCi0gICAgICBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZwotICAgICAgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvCi0gICAgICBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlCi0gICAgICBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsCi0gICAgICBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sCi0gICAgICB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZAotICAgICAgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KLSAgICA8L3A+Ci0gICAgPHA+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbQotICAgICAgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLSAgICAgIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi0gICAgICBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMKLSAgICAgIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3ImIzAzOTtzIHJlc3BvbnNpYmlsaXR5IGFsb25lLgotICAgICAgVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMKLSAgICAgIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLSAgICAgIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMKLSAgICAgIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgotICAgIDwvcD4KLSAgICA8aDIgaWQ9IndhcnJhbnR5Ij41LiBOTyBXQVJSQU5UWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZsZHF1bztBUyBJUyZyZHF1bzsgQkFTSVMsIFdJVEhPVVQKLSAgICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi0gICAgICBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi0gICAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCi0gICAgICBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCi0gICAgICBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKLSAgICAgIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUKLSAgICAgIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlCi0gICAgICB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yCi0gICAgICBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJkaXNjbGFpbWVyIj42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZCi0gICAgICBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gICAgICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwKLSAgICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gICAgICBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKLSAgICAgIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJnZW5lcmFsIj43LiBHRU5FUkFMPC9oMj4KLSAgICA8cD5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotICAgICAgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZQotICAgICAgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlCi0gICAgICBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50Ci0gICAgICBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCi0gICAgPC9wPgotICAgIDxwPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmCi0gICAgICAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKQotICAgICAgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50JiMwMzk7cyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyBncmFudGVkCi0gICAgICB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLSAgICA8L3A+Ci0gICAgPHA+QWxsIFJlY2lwaWVudCYjMDM5O3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0bwotICAgICAgY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZAotICAgICAgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nCi0gICAgICBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotICAgICAgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtCi0gICAgICBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCYjMDM5O3Mgb2JsaWdhdGlvbnMgdW5kZXIKLSAgICAgIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlCi0gICAgICBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgotICAgIDwvcD4KLSAgICA8cD5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsCi0gICAgICBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkKLSAgICAgIG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZCByZXNlcnZlcwotICAgICAgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudAotICAgICAgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0Ci0gICAgICB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50Ci0gICAgICBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzCi0gICAgICB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YKLSAgICAgIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotICAgICAgKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIERpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24KLSAgICAgIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcKLSAgICAgIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBEaXN0cmlidXRlCi0gICAgICB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uCi0gICAgPC9wPgotICAgIDxwPkV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudAotICAgICAgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55Ci0gICAgICBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLAotICAgICAgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZAotICAgICAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IGlzIGludGVuZGVkCi0gICAgICB0byBiZSBlbmZvcmNlYWJsZSBieSBhbnkgZW50aXR5IHRoYXQgaXMgbm90IGEgQ29udHJpYnV0b3Igb3IgUmVjaXBpZW50LgotICAgICAgTm8gdGhpcmQtcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBjcmVhdGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImV4aGliaXQtYSI+RXhoaWJpdCBBICZuZGFzaDsgRm9ybSBvZiBTZWNvbmRhcnkgTGljZW5zZXMgTm90aWNlPC9oMj4KLSAgICA8cD4mbGRxdW87VGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIAotICAgIAlTZWNvbmRhcnkgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIAotICAgIAlpbiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IHtuYW1lIGxpY2Vuc2UocyksCi0gICAgCXZlcnNpb24ocyksIGFuZCBleGNlcHRpb25zIG9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgaGVyZX0uJnJkcXVvOwotICAgIDwvcD4KLSAgICA8YmxvY2txdW90ZT4KLSAgICAgIDxwPlNpbXBseSBpbmNsdWRpbmcgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgdGhpcyBFeGhpYml0IEEKLSAgICAgICAgaXMgbm90IHN1ZmZpY2llbnQgdG8gbGljZW5zZSB0aGUgU291cmNlIENvZGUgdW5kZXIgU2Vjb25kYXJ5IExpY2Vuc2VzLgotICAgICAgPC9wPgotICAgICAgPHA+SWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgZmlsZSwKLSAgICAgICAgdGhlbiBZb3UgbWF5IGluY2x1ZGUgdGhlIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgTElDRU5TRSBmaWxlIGluIGEKLSAgICAgICAgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKLSAgICAgICAgc3VjaCBhIG5vdGljZS4KLSAgICAgIDwvcD4KLSAgICAgIDxwPllvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLjwvcD4KLSAgICA8L2Jsb2NrcXVvdGU+Ci0gIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlL2ZlYXR1cmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNmE5MGI4Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmZWF0dXJlIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmUiIGxhYmVsPSJBTUFMVEhFQSBNZXRhTW9kZWwgVmlld2VyIiBwcm92aWRlci1uYW1lPSJFY2xpcHNlIEFQUDRNQyIgdmVyc2lvbj0iMC44LjMiPgotCTxjb3B5cmlnaHQgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2NvcHlyaWdodCI+Ci0JCVtFbnRlciBDb3B5cmlnaHQgRGVzY3JpcHRpb24gaGVyZS5dCi0JPC9jb3B5cmlnaHQ+Ci0JPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9kZXNjcmlwdGlvbiI+Ci0JCVtFbnRlciBGZWF0dXJlIERlc2NyaXB0aW9uIGhlcmUuXQotCTwvZGVzY3JpcHRpb24+Ci0JPGxpY2Vuc2UgdXJsPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2xpY2Vuc2UiPgotCQlbRW50ZXIgTGljZW5zZSBEZXNjcmlwdGlvbiBoZXJlLl0KLQk8L2xpY2Vuc2U+Ci0JPHBsdWdpbiBkb3dubG9hZC1zaXplPSIwIiBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlciIgaW5zdGFsbC1zaXplPSIwIiB1bnBhY2s9ImZhbHNlIiB2ZXJzaW9uPSIwLjAuMCIvPgotCTxyZXF1aXJlcz4KLQkJPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPgotCQk8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2Uuc3BoaW54LmVtZiIvPgotCQk8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkiLz4KLQk8L3JlcXVpcmVzPgotPC9mZWF0dXJlPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmUvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5mZWF0dXJlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZDQ3N2MuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmUvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCi0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCi0JPHBhcmVudD4KLQkJPHJlbGF0aXZlUGF0aD4uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuZXh0cmFjdG9yLmJ1aWxkPC9yZWxhdGl2ZVBhdGg+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3RvcjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MC44LjM8L3ZlcnNpb24+Ci0JPC9wYXJlbnQ+Ci0KLQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmZlYXR1cmU8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz5lY2xpcHNlLWZlYXR1cmU8L3BhY2thZ2luZz4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvLmNsYXNzcGF0aCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NkNjRkNC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBleHBvcnRlZD0idHJ1ZSIga2luZD0ibGliIiBwYXRoPSJsaWIvcGxhbnR1bWwtMjAxOC44LmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuOCIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZTNiYzkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0vYmluLwotL3RhcmdldC8KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWM2MzkwLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogUGxhbnR1bWwKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbAotQnVuZGxlLVZlcnNpb246IDgwMDAuMC4wLnF1YWxpZmllcgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKLUJ1bmRsZS1DbGFzc1BhdGg6IGxpYi9wbGFudHVtbC0yMDE4LjguamFyCi1FeHBvcnQtUGFja2FnZTogZ2VuLmxpYi5jZHQsCi0gZ2VuLmxpYi5jZ3JhcGgsCi0gZ2VuLmxpYi5jaXJjb2dlbiwKLSBnZW4ubGliLmNvbW1vbiwKLSBnZW4ubGliLmRvdGdlbiwKLSBnZW4ubGliLmZkcGdlbiwKLSBnZW4ubGliLmd2YywKLSBnZW4ubGliLmxhYmVsLAotIGdlbi5saWIub3J0aG8sCi0gZ2VuLmxpYi5wYWNrLAotIGdlbi5saWIucGF0aHBsYW4sCi0gZ2VuLmxpYi54ZG90LAotIGdlbi5wbHVnaW4uY29yZSwKLSBnZW4ucGx1Z2luLmRvdF9sYXlvdXQsCi0gaCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmFjdGl2aXR5ZGlhZ3JhbSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuYWN0aXZpdHlkaWFncmFtLmNvbW1hbmQsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmFjdGl2aXR5ZGlhZ3JhbTMsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmFjdGl2aXR5ZGlhZ3JhbTMuY29tbWFuZCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuYWN0aXZpdHlkaWFncmFtMy5mdGlsZSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuYWN0aXZpdHlkaWFncmFtMy5mdGlsZS52Y29tcGFjdCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuYWN0aXZpdHlkaWFncmFtMy5mdGlsZS52Y29tcGFjdC5jb25kLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5hY3Rpdml0eWRpYWdyYW0zLmZ0aWxlLnZlcnRpY2FsLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5hbmltLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5hbnQsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmFwaSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuYXBpLm1kYS5vcHRpb24yLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5hcGkubWRhLm9wdGlvbjMsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmFzY2lpYXJ0LAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5icG0sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmJyYWlsbGUsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmJyb3RsaSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuY2xhc3NkaWFncmFtLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5jbGFzc2RpYWdyYW0uY29tbWFuZCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuY29kZSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuY29tbWFuZCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuY29tbWFuZC5ub3RlLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5jb21tYW5kLm5vdGUuc2VxdWVuY2UsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmNvbW1hbmQucmVnZXgsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmNvbXBvc2l0ZWRpYWdyYW0sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmNvbXBvc2l0ZWRpYWdyYW0uY29tbWFuZCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuY29yZSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuY3Jlb2xlLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5jdWNhZGlhZ3JhbSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuY3VjYWRpYWdyYW0uZG90LAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5jdWNhZGlhZ3JhbS5lbnRpdHksCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmN1dGUsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmRlZGljYXRpb24sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmRlZmluaXRpb24sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmRlc2NkaWFncmFtLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5kZXNjZGlhZ3JhbS5jb21tYW5kLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5kaXJlY3Rkb3QsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmRvbm9ycywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWdncywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZXBzLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5mbGFzaGNvZGUsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmZsb3dkaWFncmFtLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5mb250LAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5mdHAsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmZ1biwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZ2VvbSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZ2VvbS5raW5ldGljLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5nb2xlbSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZ3JhcGgsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmdyYXBoMiwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZ3JhcGhpYywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZ3JhcGhpYy5jb2xvciwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuaGVjdG9yLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5oZWN0b3IyLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5oZWN0b3IyLmNvbnRpbnVpdHksCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmhlY3RvcjIuZ3JhcGhpYywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuaGVjdG9yMi5sYXllcmluZywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuaGVjdG9yMi5tcG9zLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5odG1sLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5qZG90LAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5qdW5nbGUsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLm1hdGgsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLm1kYSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwubWpwZWcsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLm9iamVjdGRpYWdyYW0sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLm9iamVjdGRpYWdyYW0uY29tbWFuZCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwub3Blbmljb25pYywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwub3Blbmljb25pYy5kYXRhLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5vcmVnb24sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnBkZiwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwucG5nLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5wb3NpbW8sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnBvc3RpdCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwucHJlcHJvYywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwucHJpbnRza2luLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5wcm9qZWN0LAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5wcm9qZWN0LmNvbW1hbmQsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnByb2plY3QuZ3JhcGhpYywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwucHJvamVjdDIsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnByb2plY3QyLmNvbW1hbmQsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnByb2plY3QzLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5yZWFsLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zYWx0LAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zYWx0LmVsZW1lbnQsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnNhbHQuZmFjdG9yeSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuc2VxdWVuY2VkaWFncmFtLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zZXF1ZW5jZWRpYWdyYW0uY29tbWFuZCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuc2VxdWVuY2VkaWFncmFtLmdyYXBoaWMsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnNlcXVlbmNlZGlhZ3JhbS5wdW1hLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zZXF1ZW5jZWRpYWdyYW0udGVveiwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuc2tpbiwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuc2tpbi5ibHVlbW9kZXJuLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5za2luLnJvc2UsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnN0YXRlZGlhZ3JhbSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuc3RhdGVkaWFncmFtLmNvbW1hbmQsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnN0YXRzLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zdGF0cy5hcGksCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnN1Z2dlc3QsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnN2ZWssCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnN2ZWsuZXh0cmVtaXR5LAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zdmVrLmltYWdlLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zdmcsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnN3aW5nLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5zeW50YXgsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnRlbG5ldCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwudGlreiwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwudGltaW5nZGlhZ3JhbSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwudWdyYXBoaWMsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnVncmFwaGljLmFyYywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwudWdyYXBoaWMuY3Jvc3NpbmcsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnVncmFwaGljLmVwcywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwudWdyYXBoaWMuZzJkLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC51Z3JhcGhpYy5oYW5kLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC51Z3JhcGhpYy5odG1sNSwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwudWdyYXBoaWMuc3ByaXRlLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC51Z3JhcGhpYy5zdmcsCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnVncmFwaGljLnRpa3osCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnVncmFwaGljLnR4dCwKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwudWdyYXBoaWMudmlzaW8sCi0gbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLnV0aWxzLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC52ZXJzaW9uLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC52aXpqcywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwueG1pLAotIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC54bWxzYywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuem9wZmxpLAotIHNtZXRhbmEuY29yZSwKLSBzbWV0YW5hLmNvcmUuYW1pZ2EsCi0gc21ldGFuYS5jb3JlLmRlYnVnCi1BdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9idWlsZC5wcm9wZXJ0aWVzIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzIwYWJlLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotIyAgQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLgotIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKLSMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jICBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLwotIyAKLSMgICBDb250cmlidXRvcnM6Ci0jICAJIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIAotIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgbGliLXNyYy8sXAotICAgICAgICAgICAgICAgbGliL3BsYW50dW1sLTIwMTguOC5qYXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvbGliLXNyYy9SRUFETUUudHh0IGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9saWItc3JjL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MTY5NTkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9saWItc3JjL1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLUdvdG8gaHR0cDovL3BsYW50dW1sLnNvdXJjZWZvcmdlLm5ldC8gZm9yIHByb2R1Y3QgaW5mbwotCi1DUSBjbGVhcmFuY2UgYXMgYSBwYXJ0IG9mIGVjbGlwc2UgSVBaaWxsYSAoQ1EgODE3OCk6IGh0dHBzOi8vZGV2LmVjbGlwc2Uub3JnL2lwemlsbGEvc2hvd19idWcuY2dpP2lkPTgxNzggCi0KLURvd25sb2FkZWQgamFyIGZyb20gOiBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BsYW50dW1sL2ZpbGVzL3BsYW50dW1sLWphci1lcGwtODAwMC56aXAvZG93bmxvYWQKLQotRG93bmxvYWRlZCBzb3VyY2VzIGZyb20gOiAgaHR0cHM6Ly9kZXYuZWNsaXBzZS5vcmcvaXB6aWxsYS9hdHRhY2htZW50LmNnaT9pZD0xMTYyNwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvbGliLXNyYy9wbGFudHVtbC1zb3VyY2VzLWVwbC04MDAwLnppcCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvbGliLXNyYy9wbGFudHVtbC1zb3VyY2VzLWVwbC04MDAwLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjlkYjQ4MC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sL2xpYi1zcmMvcGxhbnR1bWwtc291cmNlcy1lcGwtODAwMC56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sL2xpYi9wbGFudHVtbC0yMDE4LjguamFyIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9saWIvcGxhbnR1bWwtMjAxOC44LmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Y0YmRlNi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sL2xpYi9wbGFudHVtbC0yMDE4LjguamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9saWNlbnNlL2xpY2Vuc2UudHh0IGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9saWNlbnNlL2xpY2Vuc2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2FkYWY5Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvbGljZW5zZS9saWNlbnNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotUGxhbnRVTUwgOiBhIGZyZWUgVU1MIGRpYWdyYW0gZ2VuZXJhdG9yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKEMpIENvcHlyaWdodCAyMDA5LTIwMTQsIEFybmF1ZCBSb3F1ZXMKLQotUHJvamVjdCBJbmZvOiAgaHR0cDovL3BsYW50dW1sLnNvdXJjZWZvcmdlLm5ldAotCi1QbGFudFVNTCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci11bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UuCi0KLVRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBFQ0xJUFNFIFBVQkxJQwotTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBbRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMS4wXQotCi1BTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTCi1SRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgotCi1Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLQotVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLVdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLU5vdGUgdGhhdCBpbWFnZXMgKHdoYXRldmVyIHRoZWlyIGZvcm1hdCA6IFBORywgU1ZHLi4uKSBnZW5lcmF0ZWQgYnkgcnVubmluZyBQbGFudFVNTAotYXJlIG93bmVkIGJ5IHRoZSBhdXRob3Igb2YgdGhlaXIgY29ycmVzcG9uZGluZyBzb3VyY2VzIGNvZGUgKHRoYXQgaXMsIHRoZWlyCi10ZXh0dWFsIGRlc2NyaXB0aW9uIGluIFBsYW50VU1MIGxhbmd1YWdlKS4gVGhvc2UgaW1hZ2VzIGFyZSBub3QgY292ZXJlZCBieQotdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UuCi0KLVRoZSBnZW5lcmF0ZWQgaW1hZ2VzIGNhbiB0aGVuIGJlIHVzZWQgd2l0aG91dCBhbnkgcmVmZXJlbmNlIHRvIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLgotSXQgaXMgbm90IGV2ZW4gbmVjZXNzYXJ5IHRvIHN0aXB1bGF0ZSB0aGF0IHRoZXkgaGF2ZSBiZWVuIGdlbmVyYXRlZCB3aXRoIFBsYW50VU1MLAotYWxzbyB0aGlzIHdpbGwgYmUgYXBwcmVjaWF0ZSBieSBQbGFudFVNTCB0ZWFtLgotCi1UaGVyZSBpcyBhbiBleGNlcHRpb24gOiBpZiB0aGUgdGV4dHVhbCBkZXNjcmlwdGlvbiBpbiBQbGFudFVNTCBsYW5ndWFnZSBpcyBhbHNvIGNvdmVyZWQKLWJ5IGEgbGljZW5zZSAobGlrZSB0aGUgRVBMKSwgdGhlbiB0aGUgZ2VuZXJhdGVkIGltYWdlcyBhcmUgbG9naWNhbGx5IGNvdmVyZWQKLWJ5IHRoZSB2ZXJ5IHNhbWUgbGljZW5zZS4KLQotSWNvbiBwcm92aWRlZCBieSBPcGVuSWNvbmljIDogIGh0dHBzOi8vdXNlaWNvbmljLmNvbS9vcGVuLwotCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ODllYWEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0KLTxwYXJlbnQ+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZDwvcmVsYXRpdmVQYXRoPgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3I8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjAuOC4zPC92ZXJzaW9uPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+bmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4KLQk8dmVyc2lvbj44MDAwLjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvLmNsYXNzcGF0aCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci8uY2xhc3NwYXRoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci8uY2xhc3NwYXRoCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvLmNsYXNzcGF0aApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci8uZ2l0aWdub3JlCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci8ucHJvamVjdApzaW1pbGFyaXR5IGluZGV4IDkxJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC8ucHJvamVjdApjb3B5IHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci8ucHJvamVjdAppbmRleCA3NjE0YmQwLi43NTFkZTZhIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLy5wcm9qZWN0CisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci8ucHJvamVjdApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbDwvbmFtZT4KKwk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcjwvbmFtZT4KIAk8Y29tbWVudD48L2NvbW1lbnQ+CiAJPHByb2plY3RzPgogCTwvcHJvamVjdHM+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTRlNGYyCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMjAgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IEFQUDRNQyBFTUYgTWV0YW1vZGVsIFZpZXdlcgorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXI7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMC45LjgucXVhbGlmaWVyCitCdW5kbGUtVmVuZG9yOiBFY2xpcHNlIEFQUDRNQworUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKKyBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLAorIG9yZy5lY2xpcHNlLmpmYWNlO2J1bmRsZS12ZXJzaW9uPSIzLjE0LjAiLAorIG9yZy5lY2xpcHNlLnVpCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIuYmFzZS5BY3RpdmF0b3IKK0J1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIuYmFzZSwKKyBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5kaWFsb2dzLAorIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnByZWZlcmVuY2VzLAorIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnV0aWxzLAorIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnZpZXdzLAorIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVycworQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvYWJvdXQuaHRtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9hYm91dC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9hYm91dC5odG1sCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvYnVpbGQucHJvcGVydGllcyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9idWlsZC5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9idWlsZC5wcm9wZXJ0aWVzCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvYnVpbGQucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2VwbC0yLjAuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvZXBsLTIuMC5odG1sCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9hYnN0cmFjdF9jbGFzc19vYmoucG5nIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2Fic3RyYWN0X2NsYXNzX29iai5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2Fic3RyYWN0X2NsYXNzX29iai5wbmcKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9hYnN0cmFjdF9jbGFzc19vYmoucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2F0dHJpYnV0ZS5wbmcgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvYXR0cmlidXRlLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvYXR0cmlidXRlLnBuZwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2F0dHJpYnV0ZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvYXR0cmlidXRlX2NvbnRhaW5tZW50LnBuZyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9hdHRyaWJ1dGVfY29udGFpbm1lbnQucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9hdHRyaWJ1dGVfY29udGFpbm1lbnQucG5nCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvYXR0cmlidXRlX2NvbnRhaW5tZW50LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9hdHRyaWJ1dGVfcmVmZXJlbmNlLnBuZyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9hdHRyaWJ1dGVfcmVmZXJlbmNlLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvYXR0cmlidXRlX3JlZmVyZW5jZS5wbmcKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9hdHRyaWJ1dGVfcmVmZXJlbmNlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9jbGFzc19vYmoucG5nIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2NsYXNzX29iai5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2NsYXNzX29iai5wbmcKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9jbGFzc19vYmoucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2NvbnRhaW5lci5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvY29udGFpbmVyLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvY29udGFpbmVyLmdpZgpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2NvbnRhaW5lci5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvZG93bndhcmRfY28uZ2lmIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2Rvd253YXJkX2NvLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvZG93bndhcmRfY28uZ2lmCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvZG93bndhcmRfY28uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2VudW1fb2JqLnBuZyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9lbnVtX29iai5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2VudW1fb2JqLnBuZwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2VudW1fb2JqLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9oaWVyYXJjaHkuZ2lmIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2hpZXJhcmNoeS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2hpZXJhcmNoeS5naWYKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9oaWVyYXJjaHkuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL2ludGVyZmFjZV9vYmoucG5nIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2ludGVyZmFjZV9vYmoucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9pbnRlcmZhY2Vfb2JqLnBuZwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL2ludGVyZmFjZV9vYmoucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL3Byb3BfcHMuZ2lmIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL3Byb3BfcHMuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9wcm9wX3BzLmdpZgpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL3Byb3BfcHMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL3JlZ2lzdGVyX2Vjb3Jlcy5wbmcgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvcmVnaXN0ZXJfZWNvcmVzLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvcmVnaXN0ZXJfZWNvcmVzLnBuZwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL3JlZ2lzdGVyX2Vjb3Jlcy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvc2FtcGxlLmdpZiBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9zYW1wbGUuZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9zYW1wbGUuZ2lmCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvc2FtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9zdXBlcl9jby5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvc3VwZXJfY28uZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9zdXBlcl9jby5naWYKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9pY29ucy9zdXBlcl9jby5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvdHlwZV9vYmouZ2lmIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL2ljb25zL3R5cGVfb2JqLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvdHlwZV9vYmouZ2lmCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvdHlwZV9vYmouZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9wbHVnaW4ueG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3BsdWdpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgzNGQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9wbHVnaW4ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Cis8cGx1Z2luPgorCisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgorICAgICAgPGNhdGVnb3J5CisgICAgICAgICAgICBuYW1lPSJNZXRhIE1vZGVsIEV4cGxvcmVyIgorICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLmV4cGxvcmVyLnZpZXcuY2F0ZWdvcnkiPgorICAgICAgPC9jYXRlZ29yeT4KKyAgICAgIDx2aWV3CisgICAgICAgICAgICBhbGxvd011bHRpcGxlPSJ0cnVlIgorICAgICAgICAgICAgY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLmV4cGxvcmVyLnZpZXcuY2F0ZWdvcnkiCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudmlld3MuTWV0YU1vZGVsRXhwbG9yZXJWaWV3IgorICAgICAgICAgICAgaWNvbj0iaWNvbnMvc2FtcGxlLmdpZiIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci52aWV3cy5NZXRhTW9kZWwtRXhwbG9yZXJWaWV3IgorICAgICAgICAgICAgbmFtZT0iTWV0YSBNb2RlbCBFeHBsb3JlciI+CisgICAgICA8L3ZpZXc+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMiPgorICAgICAgPGluaXRpYWxpemVyCisgICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIj4KKyAgICAgIDwvaW5pdGlhbGl6ZXI+CisgICA8L2V4dGVuc2lvbj4KKyAgIDxleHRlbnNpb24KKyAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgorICAgICAgPHBhZ2UKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5wcmVmZXJlbmNlcy5NZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5wYWdlMSIKKyAgICAgICAgICAgIG5hbWU9Ik1ldGEgTW9kZWwgVmlld2VyIj4KKyAgICAgIDwvcGFnZT4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9BY3RpdmF0b3IuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvYmFzZS9BY3RpdmF0b3IuamF2YQpzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvQWN0aXZhdG9yLmphdmEKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvYmFzZS9BY3RpdmF0b3IuamF2YQppbmRleCBjODZiOTI0Li45NTJiM2Y1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvQWN0aXZhdG9yLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci9iYXNlL0FjdGl2YXRvci5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEyLDcgKzEyLDggQEAKICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yOworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLmJhc2U7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKIGltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKQEAgLTIzLDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKIAogCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3RvciI7IC8vJE5PTi1OTFMtMSQKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIiOyAvLyROT04tTkxTLTEkCiAKIAkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCiAJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKQEAgLTM2LDcgKzM3LDcgQEAKIAogCS8qCiAJICogKG5vbi1KYXZhZG9jKQotCSAqIAorCSAqCiAJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdGFydChvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dCkKIAkgKi8KIAlAT3ZlcnJpZGUKQEAgLTQ3LDcgKzQ4LDcgQEAKIAogCS8qCiAJICogKG5vbi1KYXZhZG9jKQotCSAqIAorCSAqCiAJICogQHNlZSBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbiNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQogCSAqLwogCUBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvZGlhbG9ncy9TZWxlY3RlZEVsZW1lbnRDb250ZW50RGlhbG9nLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL2RpYWxvZ3MvU2VsZWN0ZWRFbGVtZW50Q29udGVudERpYWxvZy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODQlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL2RpYWxvZ3MvU2VsZWN0ZWRFbGVtZW50Q29udGVudERpYWxvZy5qYXZhCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL2RpYWxvZ3MvU2VsZWN0ZWRFbGVtZW50Q29udGVudERpYWxvZy5qYXZhCmluZGV4IDcxNTM4ZDMuLjhkZTZkOTYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL2RpYWxvZ3MvU2VsZWN0ZWRFbGVtZW50Q29udGVudERpYWxvZy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvZGlhbG9ncy9TZWxlY3RlZEVsZW1lbnRDb250ZW50RGlhbG9nLmphdmEKQEAgLTEsNiArMSw2IEBACi0gLyoqCisvKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtMTIsMTUgKzEyLDE2IEBACiAgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZGlhbG9nczsKKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5kaWFsb2dzOwogCiBpbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TWFwOwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmJhc2UuQWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIucHJlZmVyZW5jZXMuTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5iYXNlLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5wcmVmZXJlbmNlcy5NZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOwpAQCAtNTQsNyArNTUsNiBAQAogCQl0aGlzLmlXb3JrYmVuY2hQYXJ0U2l0ZSA9IGlXb3JrYmVuY2hQYXJ0U2l0ZTsKIAl9CiAKLQogCUBPdmVycmlkZQogCXByb3RlY3RlZCBDb250cm9sIGNyZWF0ZURpYWxvZ0FyZWEoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgewogCQlmaW5hbCBDb21wb3NpdGUgY29udGFpbmVyID0gKENvbXBvc2l0ZSkgc3VwZXIuY3JlYXRlRGlhbG9nQXJlYShwYXJlbnQpOwpAQCAtNzMsMTMgKzczLDExIEBACiAJCS8vCiAJCS8vIHRoaXMudHYgPSBmaWx0ZXJlZFRyZWUuZ2V0Vmlld2VyKCk7CiAKLQogCQl0aGlzLnR2ID0gbmV3IFRyZWVWaWV3ZXIoY29udGFpbmVyKTsKIAkJdGhpcy50di5nZXRUcmVlKCkuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCB0cnVlKSk7CiAJCXRoaXMudHYuc2V0Q29udGVudFByb3ZpZGVyKAotCQkJCW5ldyBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVycy5WaWV3Q29udGVudFByb3ZpZGVyKCkpOwotCQl0aGlzLnR2LnNldExhYmVsUHJvdmlkZXIobmV3IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIudmlld3MucHJvdmlkZXJzLlZpZXdMYWJlbFByb3ZpZGVyKCkpOwotCisJCQkJbmV3IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVycy5WaWV3Q29udGVudFByb3ZpZGVyKCkpOworCQl0aGlzLnR2LnNldExhYmVsUHJvdmlkZXIobmV3IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVycy5WaWV3TGFiZWxQcm92aWRlcigpKTsKIAogCQlmaW5hbCBFbnRyeTxTdHJpbmcsIEVPYmplY3Q+IGVudHJ5ID0gbmV3IEFic3RyYWN0TWFwLlNpbXBsZUVudHJ5PFN0cmluZywgRU9iamVjdD4oIlNlbGVjdGVkIEVsZW1lbnQiLAogCQkJCXRoaXMuZU9iamVjdCk7CkBAIC0xMTcsNyArMTE1LDYgQEAKIAkJZ2V0SVdvcmtiZW5jaFBhcnRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShtZW51TWdyLCB0aGlzLnR2KTsKIAl9CiAKLQogCXByaXZhdGUgdm9pZCBob29rRG91YmxlQ2xpY2tBY3Rpb24oKSB7CiAJCXRoaXMudHYuYWRkRG91YmxlQ2xpY2tMaXN0ZW5lcihuZXcgSURvdWJsZUNsaWNrTGlzdGVuZXIoKSB7CiAJCQlAT3ZlcnJpZGUKQEAgLTEyOSwyMCArMTI2LDI0IEBACiAJCQkJaWYgKHNlbGVjdGlvbiBpbnN0YW5jZW9mIFRyZWVTZWxlY3Rpb24pIHsKIAkJCQkJZmluYWwgT2JqZWN0IGZpcnN0RWxlbWVudCA9ICgoVHJlZVNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsKIAkJCQkJaWYgKGZpcnN0RWxlbWVudCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQkJCQkJCSBTaGVsbCBwYXJlbnRTaGVsbCA9IG51bGw7Ci0JCQkJCQkJCi0JCQkJCQkJU3RyaW5nIGRpc3BsYXlEaWFsb2dTdHlsZT0oQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5QX0RJQUxPR19ESVNQTEFZKSk7Ci0JCQkJCQkJCi0JCQkJCQkJaWYoZGlzcGxheURpYWxvZ1N0eWxlICE9bnVsbCAmJiBkaXNwbGF5RGlhbG9nU3R5bGUuZXF1YWxzKE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuVl9PTl9UT1ApKXsKLQkJCQkJCQkJcGFyZW50U2hlbGw9bmV3IFNoZWxsKFNXVC5PTl9UT1ApOwotCQkJCQkJCX1lbHNlewotCQkJCQkJCQlwYXJlbnRTaGVsbD1uZXcgU2hlbGwoKTsKLQkJCQkJCQl9CisJCQkJCQlTaGVsbCBwYXJlbnRTaGVsbCA9IG51bGw7CiAKLQkJCQkJCS8vIGZpbmFsIFN0cmluZyBuYW1lID0gKChmaXJzdEVsZW1lbnQgaW5zdGFuY2VvZiBFQ2xhc3MpID8gKChFQ2xhc3MpIGZpcnN0RWxlbWVudCkuZ2V0TmFtZSgpIDoKKwkJCQkJCVN0cmluZyBkaXNwbGF5RGlhbG9nU3R5bGUgPSAoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKQorCQkJCQkJCQkuZ2V0U3RyaW5nKE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuUF9ESUFMT0dfRElTUExBWSkpOworCisJCQkJCQlpZiAoZGlzcGxheURpYWxvZ1N0eWxlICE9IG51bGwKKwkJCQkJCQkJJiYgZGlzcGxheURpYWxvZ1N0eWxlLmVxdWFscyhNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlZfT05fVE9QKSkgeworCQkJCQkJCXBhcmVudFNoZWxsID0gbmV3IFNoZWxsKFNXVC5PTl9UT1ApOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlwYXJlbnRTaGVsbCA9IG5ldyBTaGVsbCgpOworCQkJCQkJfQorCisJCQkJCQkvLyBmaW5hbCBTdHJpbmcgbmFtZSA9ICgoZmlyc3RFbGVtZW50IGluc3RhbmNlb2YgRUNsYXNzKSA/ICgoRUNsYXNzKQorCQkJCQkJLy8gZmlyc3RFbGVtZW50KS5nZXROYW1lKCkgOgogCQkJCQkJLy8gIiIpOwogCQkJCQkJLy8KLQkJCQkJCS8vIHBhcmVudFNoZWxsLnNldFRleHQoIkRldGFpbHMgb2YgOiAiICsgKChFQ2xhc3MpIGZpcnN0RWxlbWVudCkuZUNsYXNzKCkuZ2V0TmFtZSgpICsgIiAiICsKKwkJCQkJCS8vIHBhcmVudFNoZWxsLnNldFRleHQoIkRldGFpbHMgb2YgOiAiICsgKChFQ2xhc3MpCisJCQkJCQkvLyBmaXJzdEVsZW1lbnQpLmVDbGFzcygpLmdldE5hbWUoKSArICIgIiArCiAJCQkJCQkvLyBuYW1lKTsKIAkJCQkJCS8vCiAJCQkJCQkvLwpAQCAtMTUzLDcgKzE1NCw2IEBACiAJCQkJCQkvLyB0YXNrSXRlbS5zZXRPdmVybGF5VGV4dChuYW1lKTsKIAkJCQkJCS8vIHRhc2tJdGVtLnNldFRleHQobmFtZSk7CiAKLQogCQkJCQkJbmV3IFNlbGVjdGVkRWxlbWVudENvbnRlbnREaWFsb2cocGFyZW50U2hlbGwsIGdldElXb3JrYmVuY2hQYXJ0U2l0ZSgpLCAoRU9iamVjdCkgZmlyc3RFbGVtZW50KQogCQkJCQkJCQkub3BlbigpOwogCkBAIC0xODYsMTQgKzE4NiwxMiBAQAogCQlyZXR1cm4gbmV3IFBvaW50KDQ1MCwgMzAwKTsKIAl9CiAKLQogCUBPdmVycmlkZQogCXByb3RlY3RlZCB2b2lkIHNldFNoZWxsU3R5bGUoZmluYWwgaW50IG5ld1NoZWxsU3R5bGUpIHsKIAkJc3VwZXIuc2V0U2hlbGxTdHlsZShTV1QuQ0xPU0UgfCBTV1QuTU9ERUxFU1MgfCBTV1QuQk9SREVSIHwgU1dULlRJVExFIHwgU1dULlJFU0laRSk7CiAJCXNldEJsb2NrT25PcGVuKGZhbHNlKTsKIAl9CiAKLQogCXB1YmxpYyBJV29ya2JlbmNoUGFydFNpdGUgZ2V0SVdvcmtiZW5jaFBhcnRTaXRlKCkgewogCQlyZXR1cm4gdGhpcy5pV29ya2JlbmNoUGFydFNpdGU7CiAJfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvcHJlZmVyZW5jZXMvTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9NZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvcHJlZmVyZW5jZXMvTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3ByZWZlcmVuY2VzL01ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuamF2YQppbmRleCA3YTljZmNmLi4zM2JmMTRiIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9NZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9NZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKQEAgLTEsNiArMSw2IEBACi0gLyoqCisvKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtMTIsNyArMTIsOCBAQAogICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnByZWZlcmVuY2VzOworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnByZWZlcmVuY2VzOwogCiAvKioKICAqIENvbnN0YW50IGRlZmluaXRpb25zIGZvciBwbHVnLWluIHByZWZlcmVuY2VzCkBAIC0yMiw4ICsyMyw3IEBACiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUF9ESUFMT0dfRElTUExBWSA9ICJQX0RJQUxPR19ESVNQTEFZIjsKIAogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZfT05fVE9QID0gIk9uIFRvcCI7Ci0JCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVl9ERUZBVVQgPSAiRGVmYXVsdCI7CiAKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWX0RFRkFVVCA9ICJEZWZhdWx0IjsKIAogfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvcHJlZmVyZW5jZXMvTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvcHJlZmVyZW5jZXMvTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZVBhZ2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9NZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlUGFnZS5qYXZhCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3ByZWZlcmVuY2VzL01ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VQYWdlLmphdmEKaW5kZXggYWUzYzU5MC4uNGZkZjgyNyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvcHJlZmVyZW5jZXMvTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3ByZWZlcmVuY2VzL01ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VQYWdlLmphdmEKQEAgLTEsNiArMSw2IEBACi0gLyoqCisvKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtMTIsMjQgKzEyLDIxIEBACiAgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIucHJlZmVyZW5jZXM7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmJhc2UuQWN0aXZhdG9yOworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5wcmVmZXJlbmNlczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLmJhc2UuQWN0aXZhdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuQ29tYm9GaWVsZEVkaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUHJlZmVyZW5jZVBhZ2U7CiAKLSAKLQotcHVibGljIGNsYXNzIE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VQYWdlIGV4dGVuZHMgRmllbGRFZGl0b3JQcmVmZXJlbmNlUGFnZQotCQlpbXBsZW1lbnRzIElXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSB7CitwdWJsaWMgY2xhc3MgTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsKIAogCXB1YmxpYyBNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlUGFnZSgpIHsKIAkJc3VwZXIoR1JJRCk7CiAJCXNldFByZWZlcmVuY2VTdG9yZShBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpKTsKLQkJc2V0RGVzY3JpcHRpb24oCi0JCQkJIlByZWZlcmVuY2UgcGFnZSB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0aWVzL2JlaGF2aW91ciBvZiBNZXRhTW9kZWwgdmlld2VyIik7CisJCXNldERlc2NyaXB0aW9uKCJQcmVmZXJlbmNlIHBhZ2UgdG8gc3BlY2lmeSB0aGUgcHJvcGVydGllcy9iZWhhdmlvdXIgb2YgTWV0YU1vZGVsIHZpZXdlciIpOwogCX0KIAogCS8qKgpAQCAtMzksMTcgKzM2LDEyIEBACiAJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgewogCi0gCisJCWZpbmFsIFN0cmluZ1tdW10gb3B0aW9ucyA9IHsKKwkJCQl7IE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuVl9ERUZBVVQsIE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuVl9ERUZBVVQgfSwKKwkJCQl7IE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuVl9PTl9UT1AsIE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuVl9PTl9UT1AgfSB9OwogCi0JCWZpbmFsIFN0cmluZ1tdW10gb3B0aW9ucyA9IHsgeyBNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlZfREVGQVVULAotCQkJTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5WX0RFRkFVVH0gLHsgTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5WX09OX1RPUCwgTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5WX09OX1RPUCB9Ci0JCQkJfTsKLQkJCi0JCQotCQlhZGRGaWVsZChuZXcgQ29tYm9GaWVsZEVkaXRvcihNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRElBTE9HX0RJU1BMQVksICImQ29uZmlndXJlIHRoZSB3YXkgY2hpbGQgZGlhbG9ncyBzaG91bGQgYmUgZGlzcGxheWVkIiwgb3B0aW9ucywKLQkJCQlnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7Ci0KLQkJIAorCQlhZGRGaWVsZChuZXcgQ29tYm9GaWVsZEVkaXRvcihNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRElBTE9HX0RJU1BMQVksCisJCQkJIiZDb25maWd1cmUgdGhlIHdheSBjaGlsZCBkaWFsb2dzIHNob3VsZCBiZSBkaXNwbGF5ZWQiLCBvcHRpb25zLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CiAKIAl9CiAKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQppbmRleCAwOGNkY2VlLi4yZWZkZWM5IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEyLDkgKzEyLDEwIEBACiAgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIucHJlZmVyZW5jZXM7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmJhc2UuQWN0aXZhdG9yOworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5wcmVmZXJlbmNlczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLmJhc2UuQWN0aXZhdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CiAKQEAgLTMxLDcgKzMyLDkgQEAKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgewogCQlmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJc3RvcmUuc2V0RGVmYXVsdChNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRElBTE9HX0RJU1BMQVksIHN0b3JlLmdldFN0cmluZyhNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRElBTE9HX0RJU1BMQVkpICE9IG51bGwKLQkJCQk/IHN0b3JlLmdldFN0cmluZyhNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRElBTE9HX0RJU1BMQVkpIDogIiIpOworCQlzdG9yZS5zZXREZWZhdWx0KE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuUF9ESUFMT0dfRElTUExBWSwKKwkJCQlzdG9yZS5nZXRTdHJpbmcoTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5QX0RJQUxPR19ESVNQTEFZKSAhPSBudWxsCisJCQkJCQk/IHN0b3JlLmdldFN0cmluZyhNZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRElBTE9HX0RJU1BMQVkpCisJCQkJCQk6ICIiKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9FbGVtZW50U2VhcmNoUGF0dGVybkZpbHRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9FbGVtZW50U2VhcmNoUGF0dGVybkZpbHRlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3V0aWxzL0VsZW1lbnRTZWFyY2hQYXR0ZXJuRmlsdGVyLmphdmEKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvRWxlbWVudFNlYXJjaFBhdHRlcm5GaWx0ZXIuamF2YQppbmRleCA5ZmQwNDdhLi5kMTFmNjliIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9FbGVtZW50U2VhcmNoUGF0dGVybkZpbHRlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvRWxlbWVudFNlYXJjaFBhdHRlcm5GaWx0ZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKLSAvKioKKy8qKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCkBAIC0xMiw3ICsxMiw4IEBACiAgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIudXRpbHM7CisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudXRpbHM7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKQEAgLTIxLDcgKzIyLDYgQEAKIAogcHVibGljIGNsYXNzIEVsZW1lbnRTZWFyY2hQYXR0ZXJuRmlsdGVyIGV4dGVuZHMgUGF0dGVybkZpbHRlciB7CiAKLQogCXByaXZhdGUgYm9vbGVhbiBmaWx0ZXJGb3JFQ2xhc3NpZmllcnNCb29sZWFuOwogCiAJcHJpdmF0ZSBib29sZWFuIGZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuOwpAQCAtMzgsMTEgKzM4LDkgQEAKIAogCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFN1cGVyQ2xhc3Nlc0xpc3RCdWlsZGVyKSB7CiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFN1YkNsYXNzZXNMaXN0QnVpbGRlcikgeworCQl9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTdWJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKIAkJCXJldHVybiBmYWxzZTsKLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRVN0cnVjdHVyYWxGZWF0dXJlKSB7CisJCX0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVTdHJ1Y3R1cmFsRmVhdHVyZSkgewogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTYyLDIxICs2MCwxNyBAQAogCQkJfQogCQkJcmV0dXJuIHN1cGVyLmlzTGVhZk1hdGNoKHZpZXdlciwgZWxlbWVudCk7CiAKLQkJfQotCQllbHNlIGlmICgoZWxlbWVudCBpbnN0YW5jZW9mIEVTdHJ1Y3R1cmFsRmVhdHVyZSkpIHsKKwkJfSBlbHNlIGlmICgoZWxlbWVudCBpbnN0YW5jZW9mIEVTdHJ1Y3R1cmFsRmVhdHVyZSkpIHsKIAkJCWlmICghaXNGaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbigpKSB7CiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQogCQkJcmV0dXJuIHN1cGVyLmlzTGVhZk1hdGNoKHZpZXdlciwgZWxlbWVudCk7CiAKLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU3VwZXJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKKwkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU3VwZXJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKIAkJCXJldHVybiBmYWxzZTsKLQkJfQotCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlscy5TdWJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKKwkJfSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2Ygb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudXRpbHMuU3ViQ2xhc3Nlc0xpc3RCdWlsZGVyKSB7CiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFR5cGVFbGVtZW50KSB7CisJCX0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFR5cGVFbGVtZW50KSB7CiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJcmV0dXJuIHN1cGVyLmlzTGVhZk1hdGNoKHZpZXdlciwgZWxlbWVudCk7CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9QbHVnaW5VdGlscy5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9QbHVnaW5VdGlscy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODIlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1BsdWdpblV0aWxzLmphdmEKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvUGx1Z2luVXRpbHMuamF2YQppbmRleCBkZTY3OTIyLi42ZDg0ODY1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9QbHVnaW5VdGlscy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvUGx1Z2luVXRpbHMuamF2YQpAQCAtMSw2ICsxLDYgQEAKLSAvKioKKy8qKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCkBAIC0xMiwxMiArMTIsMTMgQEAKICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlsczsKKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci51dGlsczsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuVVJMOwogCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5iYXNlLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci5iYXNlLkFjdGl2YXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwogCkBAIC0zNCwxMSArMzUsOSBAQAogCQkJCWZpbGVVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwoZW50cnkpOwogCQkJCWlmIChmaWxlVVJMICE9IG51bGwpIHsKIAotCiAJCQkJCXJldHVybiBJbWFnZURlc2NyaXB0b3IuY3JlYXRlRnJvbVVSTChmaWxlVVJMKTsKIAkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgeworCQkJfSBjYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgewogCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CiAJCQl9CiAKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1JlZ2lzdGVyRUNPUkVmaWxlc0FjdGlvbi5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9SZWdpc3RlckVDT1JFZmlsZXNBY3Rpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDgyJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9SZWdpc3RlckVDT1JFZmlsZXNBY3Rpb24uamF2YQpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9SZWdpc3RlckVDT1JFZmlsZXNBY3Rpb24uamF2YQppbmRleCA4MTQ5OTljLi5lNTdiYWQ4IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9SZWdpc3RlckVDT1JFZmlsZXNBY3Rpb24uamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1JlZ2lzdGVyRUNPUkVmaWxlc0FjdGlvbi5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEzLDcgKzEzLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlsczsKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudXRpbHM7CiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKQEAgLTI2LDggKzI2LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRWNvcmVQYWNrYWdlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLmltcGwuUmVzb3VyY2VTZXRJbXBsOwpAQCAtMzksNDggKzM5LDQ3IEBACiAKIAlAU3VwcHJlc3NXYXJuaW5ncyh7ICJ1bnVzZWQiLCAicmF3dHlwZXMiLCAidW5jaGVja2VkIiB9KQogCXB1YmxpYyBzdGF0aWMgUmVzb3VyY2VTZXQgbG9hZEVDT1JFcyhMaXN0PFN0cmluZz4gZWNvcmVGaWxlcywgQ29tYm9WaWV3ZXIgY29tYm9fZWNvcmUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCQorCiAJCWZpbmFsIFJlZ2lzdHJ5IG1hc3Rlcl9lUGFja2FnZVJlZ2lzdHJ5ID0gRVBhY2thZ2UuUmVnaXN0cnkuSU5TVEFOQ0U7Ci0JCQorCiAJCVN5c3RlbS5vdXQucHJpbnRsbihtYXN0ZXJfZVBhY2thZ2VSZWdpc3RyeS5zaXplKCkpOwotCQkKKwogCQlSZXNvdXJjZVNldCBtZXRhRGF0YVJlc291cmNlU2V0ID0gbmV3IFJlc291cmNlU2V0SW1wbCgpOwogCi0JCWlmKG1ldGFEYXRhUmVzb3VyY2VTZXQgaW5zdGFuY2VvZiBSZXNvdXJjZVNldEltcGwpeworCQlpZiAobWV0YURhdGFSZXNvdXJjZVNldCBpbnN0YW5jZW9mIFJlc291cmNlU2V0SW1wbCkgewogCQkJKChSZXNvdXJjZVNldEltcGwpIG1ldGFEYXRhUmVzb3VyY2VTZXQpLnNldFVSSVJlc291cmNlTWFwKG5ldyBIYXNoTWFwPD4oKSk7CiAJCX0KLQkJTWFwPFN0cmluZywgT2JqZWN0PiBleHRlbnNpb25Ub0ZhY3RvcnlNYXAgPSBtZXRhRGF0YVJlc291cmNlU2V0LmdldFJlc291cmNlRmFjdG9yeVJlZ2lzdHJ5KCkuZ2V0RXh0ZW5zaW9uVG9GYWN0b3J5TWFwKCk7CisJCU1hcDxTdHJpbmcsIE9iamVjdD4gZXh0ZW5zaW9uVG9GYWN0b3J5TWFwID0gbWV0YURhdGFSZXNvdXJjZVNldC5nZXRSZXNvdXJjZUZhY3RvcnlSZWdpc3RyeSgpCisJCQkJLmdldEV4dGVuc2lvblRvRmFjdG9yeU1hcCgpOwogCiAJCWV4dGVuc2lvblRvRmFjdG9yeU1hcC5wdXQoImVjb3JlIiwgbmV3IEVjb3JlUmVzb3VyY2VGYWN0b3J5SW1wbCgpKTsKIAogLy8JCWV4dGVuc2lvblRvRmFjdG9yeU1hcC5wdXQoInhtaSIsIG5ldyBYTUlSZXNvdXJjZUZhY3RvcnlJbXBsKCkpOwotCQkKKwogCQkvLyByZXNvdXJjZVNldC5nZXRVUklDb252ZXJ0ZXIoKS5nZXRVUklNYXAoKS5wdXRBbGwoRWNvcmVQbHVnaW4uY29tcHV0ZVBsYXRmb3JtVVJJTWFwKHRydWUpKTsKIAogCQlFY29yZVBhY2thZ2UgZWNvcmVQYWNrYWdlID0gRWNvcmVQYWNrYWdlLmVJTlNUQU5DRTsKIAogCQkvLyByZWdpc3RlciBFY29yZSBtb2RlbCBpbiByZXNvdXJjZVNldCByZWdpc3RyeQogCQlNYXAgcGFja2FnZVJlZ2lzdHJ5ID0gbWV0YURhdGFSZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKTsKLQkJCi0JCSAgcGFja2FnZVJlZ2lzdHJ5LnB1dCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIsCi0JCQkJICBFY29yZVBhY2thZ2UuZUlOU1RBTkNFKTsKLQkJCisKKwkJcGFja2FnZVJlZ2lzdHJ5LnB1dCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9lbWYvMjAwMi9FY29yZSIsIEVjb3JlUGFja2FnZS5lSU5TVEFOQ0UpOwogCiAJCWZvciAoU3RyaW5nIGVjb3JlUGF0aCA6IGVjb3JlRmlsZXMpIHsKIAogCQkJRVBhY2thZ2UgbG9hZEVQYWNrYWdlID0gbG9hZEVQYWNrYWdlKGVjb3JlUGF0aCwgbWV0YURhdGFSZXNvdXJjZVNldCk7CiAKLQkJCWlmKHBhY2thZ2VSZWdpc3RyeS5jb250YWluc0tleShsb2FkRVBhY2thZ2UuZ2V0TnNVUkkoKSkpeworCQkJaWYgKHBhY2thZ2VSZWdpc3RyeS5jb250YWluc0tleShsb2FkRVBhY2thZ2UuZ2V0TnNVUkkoKSkpIHsKIAkJCQlPYmplY3Qgb2JqZWN0ID0gcGFja2FnZVJlZ2lzdHJ5LmdldChsb2FkRVBhY2thZ2UuZ2V0TnNVUkkoKSk7Ci0JCQkJCi0JCQkJaWYob2JqZWN0IGluc3RhbmNlb2YgRVBhY2thZ2UpewotCQkJCQkoKEVQYWNrYWdlKW9iamVjdCkuZ2V0RVN1YnBhY2thZ2VzKCkuYWRkKGxvYWRFUGFja2FnZSk7CisKKwkJCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRVBhY2thZ2UpIHsKKwkJCQkJKChFUGFja2FnZSkgb2JqZWN0KS5nZXRFU3VicGFja2FnZXMoKS5hZGQobG9hZEVQYWNrYWdlKTsKIAkJCQl9Ci0JCQl9ZWxzZXsKKwkJCX0gZWxzZSB7CiAJCQkJcGFja2FnZVJlZ2lzdHJ5LnB1dChsb2FkRVBhY2thZ2UuZ2V0TnNVUkkoKSwgbG9hZEVQYWNrYWdlKTsKLQkJCQkKKwogCQkJfQotCQkJCisKIC8vCQkJbWFzdGVyX2VQYWNrYWdlUmVnaXN0cnkucHV0KGxvYWRFUGFja2FnZS5nZXROc1VSSSgpLCBsb2FkRVBhY2thZ2UpOwogCiAJCX0KQEAgLTg4LDI3ICs4NywyNCBAQAogCQlFY29yZVV0aWwucmVzb2x2ZUFsbChtZXRhRGF0YVJlc291cmNlU2V0KTsKIAogCQkvKi1mb3Igc29ydGluZyAqLwotCQkKKwogCQlBcnJheUxpc3QgYXJyYXlMaXN0ID0gbmV3IEFycmF5TGlzdChtYXN0ZXJfZVBhY2thZ2VSZWdpc3RyeS5rZXlTZXQoKSk7CiAKIAkJQ29sbGVjdGlvbnMuc29ydChhcnJheUxpc3QpOwotCQkKKwogCQlhcnJheUxpc3QuYWRkQWxsKDAsIG1ldGFEYXRhUmVzb3VyY2VTZXQuZ2V0UGFja2FnZVJlZ2lzdHJ5KCkua2V5U2V0KCkpOwotCQkKKwogCQltYXN0ZXJfZVBhY2thZ2VSZWdpc3RyeS5wdXRBbGwobWV0YURhdGFSZXNvdXJjZVNldC5nZXRQYWNrYWdlUmVnaXN0cnkoKSk7Ci0JCQotCQkKKwogCQljb21ib19lY29yZS5zZXRJbnB1dChhcnJheUxpc3QudG9BcnJheSgpKTsKLQkJCi0JCQorCiAJCXJldHVybiBtZXRhRGF0YVJlc291cmNlU2V0OwogCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBFUGFja2FnZSBsb2FkRVBhY2thZ2UoU3RyaW5nIHBhdGgsICBSZXNvdXJjZVNldCBtZXRhUmVzb3VyY2VTZXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7IAogCisJcHJpdmF0ZSBzdGF0aWMgRVBhY2thZ2UgbG9hZEVQYWNrYWdlKFN0cmluZyBwYXRoLCBSZXNvdXJjZVNldCBtZXRhUmVzb3VyY2VTZXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKIC8vCQlwYXRoID0gcGF0aC5jb250YWlucygiZmlsZTovLy8vIikgPyBwYXRoIDogImZpbGU6Ly8vLyIgKyBnZXRDYW5vbmljYWxQYXRoRnVsbFBhdGgocGF0aCk7Ci0JCXBhdGggPSAgZ2V0Q2Fub25pY2FsUGF0aEZ1bGxQYXRoKHBhdGgpOworCQlwYXRoID0gZ2V0Q2Fub25pY2FsUGF0aEZ1bGxQYXRoKHBhdGgpOwogCiAvLwkJUmVzb3VyY2UgbWV0YVJlc291cmNlID0gbWV0YVJlc291cmNlU2V0LmdldFJlc291cmNlKFVSSS5jcmVhdGVVUkkocGF0aCksIHRydWUpOwogCQlSZXNvdXJjZSBtZXRhUmVzb3VyY2UgPSBtZXRhUmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2UoVVJJLmNyZWF0ZUZpbGVVUkkocGF0aCksIHRydWUpOwpAQCAtMTE4LDkgKzExNCw5IEBACiAJCUVPYmplY3QgZU9iamVjdCA9IG1ldGFSZXNvdXJjZS5nZXRDb250ZW50cygpLmdldCgwKTsKIAogCQlyZXR1cm4gKEVQYWNrYWdlKSBlT2JqZWN0OwotCQorCiAJfQotCQorCiAJcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldENhbm9uaWNhbFBhdGhGdWxsUGF0aChTdHJpbmcgcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAogCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShwYXRoKTsKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1N1YkNsYXNzZXNMaXN0QnVpbGRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9TdWJDbGFzc2VzTGlzdEJ1aWxkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9TdWJDbGFzc2VzTGlzdEJ1aWxkZXIuamF2YQpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9TdWJDbGFzc2VzTGlzdEJ1aWxkZXIuamF2YQppbmRleCAwNDBiYjQ0Li5kMGE2ZmJjIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9TdWJDbGFzc2VzTGlzdEJ1aWxkZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1N1YkNsYXNzZXNMaXN0QnVpbGRlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEyLDcgKzEyLDggQEAKICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlsczsKKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci51dGlsczsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CkBAIC01MSwxMiArNTIsMTAgQEAKIAogCQkJCXRoaXMuYWxsU3ViQ2xhc3Nlcy5hZGRBbGwoY2xhc3NMaXN0LmdldEFsbFN1YkNsYXNzZXMoKSk7CiAKLQogCQkJfQogCiAJCX0KIAotCiAJCXJldHVybiB0aGlzLmFsbFN1YkNsYXNzZXM7CiAKIAl9CkBAIC04MiwzMCArODEsMjkgQEAKIC8vCQkJCQlmaW5hbCBFT2JqZWN0IGVPYmplY3QgPSBjb250ZW50cy5nZXQoMCk7CiAKIAkJCQkJZm9yIChFT2JqZWN0IGVPYmogOiBjb250ZW50cykgewotCQkJCQkJCisKIAkJCQkJCWlmIChlT2JqIGluc3RhbmNlb2YgRVBhY2thZ2UpIHsKIAkJCQkJCQlhbGxTdWJDbGFzc2VzLmFkZEFsbChnZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MsIChFUGFja2FnZSkgZU9iaikpOwogCQkJCQkJfQotCQkJCQkJCisKIAkJCQkJfQogCQkJCX0KIAogCQkJfQotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCiAJCQlmaW5hbCBFUGFja2FnZSBlUGFja2FnZSA9IHNlbGVjdGVkT2JqQ2xhc3MuZ2V0RVBhY2thZ2UoKTsKLQkJCQotCQkJaWYoZVBhY2thZ2UgIT1udWxsKXsKLQkJCQlFT2JqZWN0IHJvb3RFUGFja2FnZT1vcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWwuZ2V0Um9vdENvbnRhaW5lcihzZWxlY3RlZE9iakNsYXNzKTsKLQkJCQkKLQkJCQlpZihyb290RVBhY2thZ2UgaW5zdGFuY2VvZiBFUGFja2FnZSl7CisKKwkJCWlmIChlUGFja2FnZSAhPSBudWxsKSB7CisJCQkJRU9iamVjdCByb290RVBhY2thZ2UgPSBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWwuZ2V0Um9vdENvbnRhaW5lcihzZWxlY3RlZE9iakNsYXNzKTsKKworCQkJCWlmIChyb290RVBhY2thZ2UgaW5zdGFuY2VvZiBFUGFja2FnZSkgewogCQkJCQlyZXR1cm4gZ2V0U3ViQ2xhc3NlcyhzZWxlY3RlZE9iakNsYXNzLCAoRVBhY2thZ2UpIHJvb3RFUGFja2FnZSk7Ci0JCQkJfSAKLQkJCX0gCi0JCQkJCi0JCQkJcmV0dXJuIGdldFN1YkNsYXNzZXMoc2VsZWN0ZWRPYmpDbGFzcywgZVBhY2thZ2UpOwotCQkJCisJCQkJfQorCQkJfQorCisJCQlyZXR1cm4gZ2V0U3ViQ2xhc3NlcyhzZWxlY3RlZE9iakNsYXNzLCBlUGFja2FnZSk7CisKIAkJfQogCiAJCXJldHVybiBhbGxTdWJDbGFzc2VzOwpAQCAtMTEzLDE3ICsxMTEsMTUgQEAKIAl9CiAKIAlwcml2YXRlIExpc3Q8RUNsYXNzPiBnZXRTdWJDbGFzc2VzKGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzLCBmaW5hbCBFUGFja2FnZSBlUGFja2FnZSkgewotCQkKLQkJCi0JCQorCiAJCWZpbmFsIExpc3Q8RUNsYXNzPiBhbGxTdWJDbGFzc2VzID0gbmV3IEFycmF5TGlzdDxFQ2xhc3M+KCk7CiAKIAkJRUxpc3Q8RVBhY2thZ2U+IGVTdWJwYWNrYWdlcyA9IGVQYWNrYWdlLmdldEVTdWJwYWNrYWdlcygpOwotCQkKKwogCQlmb3IgKEVQYWNrYWdlIGVTdWJQYWNrYWdlIDogZVN1YnBhY2thZ2VzKSB7CiAJCQlhbGxTdWJDbGFzc2VzLmFkZEFsbChnZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MsIGVTdWJQYWNrYWdlKSk7CiAJCX0KLQkJCisKIAkJZmluYWwgRUxpc3Q8RUNsYXNzaWZpZXI+IGVDbGFzc2lmaWVycyA9IGVQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpOwogCiAJCWZvciAoZmluYWwgRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBlQ2xhc3NpZmllcnMpIHsKQEAgLTEzNCw3ICsxMzAsNiBAQAogCQkJCQlhbGxTdWJDbGFzc2VzLmFkZCgoRUNsYXNzKSBlQ2xhc3NpZmllcik7CiAJCQkJfQogCi0KIAkJCX0KIAkJfQogCQlyZXR1cm4gYWxsU3ViQ2xhc3NlczsKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1N1cGVyQ2xhc3Nlc0xpc3RCdWlsZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1N1cGVyQ2xhc3Nlc0xpc3RCdWlsZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvU3VwZXJDbGFzc2VzTGlzdEJ1aWxkZXIuamF2YQpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9TdXBlckNsYXNzZXNMaXN0QnVpbGRlci5qYXZhCmluZGV4IDlmNzk5MWYuLjhkMzhiZjIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1N1cGVyQ2xhc3Nlc0xpc3RCdWlsZGVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci91dGlscy9TdXBlckNsYXNzZXNMaXN0QnVpbGRlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEyLDcgKzEyLDggQEAKICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlsczsKKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci51dGlsczsKIAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5TZXQ7CkBAIC00Niw3ICs0Nyw2IEBACiAKIAkJCQl0aGlzLmFsbFN1cGVyQ2xhc3Nlcy5hZGRBbGwoY2xhc3NMaXN0LmdldEFsbFN1cGVyQ2xhc3NlcygpKTsKIAotCiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvVHlwZUVsZW1lbnQuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvVHlwZUVsZW1lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci91dGlscy9UeXBlRWxlbWVudC5qYXZhCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1R5cGVFbGVtZW50LmphdmEKaW5kZXggODg2ZjNmOS4uNTQzZTgyZSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvdXRpbHMvVHlwZUVsZW1lbnQuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3V0aWxzL1R5cGVFbGVtZW50LmphdmEKQEAgLTEsNiArMSw2IEBACi0gLyoqCisvKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtMTIsNyArMTIsOCBAQAogICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnV0aWxzOworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnV0aWxzOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOwogCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3ZpZXdzL01ldGFNb2RlbEV4cGxvcmVyVmlldy5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci92aWV3cy9NZXRhTW9kZWxFeHBsb3JlclZpZXcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWEwNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci92aWV3cy9NZXRhTW9kZWxFeHBsb3JlclZpZXcuamF2YQpAQCAtMCwwICsxLDQ0OCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci52aWV3czsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIuYmFzZS5BY3RpdmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIuZGlhbG9ncy5TZWxlY3RlZEVsZW1lbnRDb250ZW50RGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnByZWZlcmVuY2VzLk1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudXRpbHMuRWxlbWVudFNlYXJjaFBhdHRlcm5GaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudXRpbHMuUGx1Z2luVXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudXRpbHMuUmVnaXN0ZXJFQ09SRWZpbGVzQWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVycy5WaWV3Q29udGVudFByb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVycy5WaWV3TGFiZWxQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlLlJlZ2lzdHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25JdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudUxpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklUb29sQmFyTWFuYWdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uTWVudU1hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5BcnJheUNvbnRlbnRQcm92aWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbWJvVmlld2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuRG91YmxlQ2xpY2tFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklEb3VibGVDbGlja0xpc3RlbmVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkxhYmVsUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVZpZXdlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLm1ldGFtb2RlbC5JTWV0YU1vZGVsRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLm1ldGFtb2RlbC5NZXRhTW9kZWxEZXNjcmlwdG9yUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21ibzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLk1lbnU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkJhcnM7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5GaWx0ZXJlZFRyZWU7CitpbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKKworcHVibGljIGNsYXNzIE1ldGFNb2RlbEV4cGxvcmVyVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIHZpZXcgYXMgc3BlY2lmaWVkIGJ5IHRoZSBleHRlbnNpb24uCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIudmlld3MuTWV0YU1vZGVsRXhwbG9yZXJWaWV3IjsKKwlwcml2YXRlIHN0YXRpYyBpbnQgaWRfQ291bnRlciA9IDE7CisJcHJpdmF0ZSBUcmVlVmlld2VyIHZpZXdlcjsKKwlwcml2YXRlIEFjdGlvbiBmaWx0ZXJDbGFzc2VzQWN0aW9uOworCXByaXZhdGUgQWN0aW9uIHJlZ2lzdGVyRWNvcmVGaWxlc0FjdGlvbjsKKwlwcml2YXRlIEFjdGlvbiBmaWx0ZXJBdHRyaWJ1dGVzQWN0aW9uOworCXByaXZhdGUgQWN0aW9uIGNsb25lVmlld0FjdGlvbjsKKwlwcml2YXRlIGJvb2xlYW4gZmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbiA9IHRydWU7CisJcHJpdmF0ZSBib29sZWFuIGZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuOworCXByaXZhdGUgRWxlbWVudFNlYXJjaFBhdHRlcm5GaWx0ZXIgcGF0dGVybkZpbHRlcjsKKwlwcml2YXRlIENvbWJvVmlld2VyIGNvbWJvX2Vjb3JlOworCisJLyoqCisJICogVGhlIGNvbnN0cnVjdG9yLgorCSAqLworCXB1YmxpYyBNZXRhTW9kZWxFeHBsb3JlclZpZXcoKSB7CisJfQorCisJLyoqCisJICogVGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZSBpdC4KKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisJCXBhcmVudC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpKTsKKworCQlmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIDApOworCisJCWxhYmVsLnNldFRleHQoIlNQSElOWCBSZWdpc3RyeSIpOworCisJCWxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOworCisJCWZpbmFsIENvbWJvIGNvbWJvID0gbmV3IENvbWJvKHBhcmVudCwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMIHwgU1dULlJFQURfT05MWSk7CisKKwkJZmluYWwgTGFiZWwgbGFiZWxfZWNvcmUgPSBuZXcgTGFiZWwocGFyZW50LCAwKTsKKworCQlsYWJlbF9lY29yZS5zZXRUZXh0KCJFQ09SRSBSZWdpc3RyeSIpOworCisJCWxhYmVsX2Vjb3JlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOworCisJCWNvbWJvX2Vjb3JlID0gbmV3IENvbWJvVmlld2VyKHBhcmVudCwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMIHwgU1dULlJFQURfT05MWSk7CisKKwkJZmluYWwgUmVnaXN0cnkgZVBhY2thZ2VSZWdpc3RyeSA9IEVQYWNrYWdlLlJlZ2lzdHJ5LklOU1RBTkNFOworCisJCWZpbmFsIFNldDxTdHJpbmc+IGtleVNldCA9IGVQYWNrYWdlUmVnaXN0cnkua2V5U2V0KCk7CisJCS8vIGZvciAoZmluYWwgU3RyaW5nIHN0cmluZyA6IG5ldyBUcmVlU2V0PFN0cmluZz4oa2V5U2V0KSkgeworCQkvLworCQkvLyBjb21ib19lY29yZS5hZGQoc3RyaW5nKTsKKwkJLy8gfQorCQljb21ib19lY29yZS5zZXRDb250ZW50UHJvdmlkZXIoQXJyYXlDb250ZW50UHJvdmlkZXIuZ2V0SW5zdGFuY2UoKSk7CisJCWNvbWJvX2Vjb3JlLnNldExhYmVsUHJvdmlkZXIobmV3IExhYmVsUHJvdmlkZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dChPYmplY3QgZWxlbWVudCkgeworCQkJCXJldHVybiBzdXBlci5nZXRUZXh0KGVsZW1lbnQpOworCQkJfQorCQl9KTsKKworCQlBcnJheUxpc3Q8U3RyaW5nPiBhcnJheUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oa2V5U2V0KTsKKworCQlDb2xsZWN0aW9ucy5zb3J0KGFycmF5TGlzdCk7CisKKwkJY29tYm9fZWNvcmUuc2V0SW5wdXQoYXJyYXlMaXN0LnRvQXJyYXkoKSk7CisKKwkJY29tYm9fZWNvcmUuZ2V0Q29tYm8oKS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworCQkJCWNvbWJvLmRlc2VsZWN0QWxsKCk7CisKKwkJCQlmaW5hbCBTdHJpbmcgdGV4dCA9IGNvbWJvX2Vjb3JlLmdldENvbWJvKCkuZ2V0VGV4dCgpOworCisJCQkJZmluYWwgRVBhY2thZ2UgZVBhY2thZ2UgPSBlUGFja2FnZVJlZ2lzdHJ5LmdldEVQYWNrYWdlKHRleHQpOworCisJCQkJZ2V0Vmlld2VyKCkuc2V0SW5wdXQoZVBhY2thZ2UpOworCQkJfQorCQl9KTsKKworCQlmaW5hbCBMaXN0PElNZXRhTW9kZWxEZXNjcmlwdG9yPiBkZXNjcmlwdG9ycyA9IE1ldGFNb2RlbERlc2NyaXB0b3JSZWdpc3RyeS5JTlNUQU5DRQorCQkJCS5nZXREZXNjcmlwdG9ycyhNZXRhTW9kZWxEZXNjcmlwdG9yUmVnaXN0cnkuQU5ZX01NKTsKKworCQlmb3IgKGZpbmFsIElNZXRhTW9kZWxEZXNjcmlwdG9yIGlNZXRhTW9kZWxEZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKKwkJCWZpbmFsIFN0cmluZyBpZGVudGlmaWVyID0gaU1ldGFNb2RlbERlc2NyaXB0b3IuZ2V0SWRlbnRpZmllcigpOworCQkJY29tYm8uYWRkKGlkZW50aWZpZXIpOworCQl9CisKKwkJY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKwkJCQljb21ib19lY29yZS5nZXRDb21ibygpLmRlc2VsZWN0QWxsKCk7CisKKwkJCQlmaW5hbCBTdHJpbmcgdGV4dCA9IGNvbWJvLmdldFRleHQoKTsKKworCQkJCWZpbmFsIElNZXRhTW9kZWxEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBNZXRhTW9kZWxEZXNjcmlwdG9yUmVnaXN0cnkuSU5TVEFOQ0UuZ2V0RGVzY3JpcHRvcih0ZXh0KTsKKworCQkJCWdldFZpZXdlcigpLnNldElucHV0KGRlc2NyaXB0b3IpOworCQkJfQorCQl9KTsKKworCQl0aGlzLnBhdHRlcm5GaWx0ZXIgPSBuZXcgRWxlbWVudFNlYXJjaFBhdHRlcm5GaWx0ZXIodGhpcy5maWx0ZXJGb3JFQ2xhc3NpZmllcnNCb29sZWFuLAorCQkJCXRoaXMuZmlsdGVyRm9yQXR0cmlidXRlc0Jvb2xlYW4pOworCisJCWZpbmFsIEZpbHRlcmVkVHJlZSBmaWx0ZXJlZFRyZWUgPSBuZXcgRmlsdGVyZWRUcmVlKHBhcmVudCwgU1dULk1VTFRJIHwgU1dULkhfU0NST0xMIHwgU1dULlZfU0NST0xMIHwgU1dULkJPUkRFUiwKKwkJCQl0aGlzLnBhdHRlcm5GaWx0ZXIsIHRydWUpOworCisJCWZpbHRlcmVkVHJlZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUsIDIsIDApKTsKKworCQl0aGlzLnZpZXdlciA9IGZpbHRlcmVkVHJlZS5nZXRWaWV3ZXIoKTsKKworCQlmaW5hbCBHcmlkRGF0YSBncmlkTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOworCQlncmlkTGF5b3V0RGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7CisJCWdyaWRMYXlvdXREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOworCQlncmlkTGF5b3V0RGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7CisJCWdyaWRMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOworCQlncmlkTGF5b3V0RGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7CisKKwkJdGhpcy52aWV3ZXIuZ2V0VHJlZSgpLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSwgMiwgMCkpOworCisJCXRoaXMudmlld2VyLnNldENvbnRlbnRQcm92aWRlcihuZXcgVmlld0NvbnRlbnRQcm92aWRlcigpKTsKKworCQl0aGlzLnZpZXdlci5zZXRJbnB1dChnZXRWaWV3U2l0ZSgpKTsKKworCQl0aGlzLnZpZXdlci5zZXRMYWJlbFByb3ZpZGVyKG5ldyBWaWV3TGFiZWxQcm92aWRlcigpKTsKKworCQlnZXRTaXRlKCkuc2V0U2VsZWN0aW9uUHJvdmlkZXIodGhpcy52aWV3ZXIpOworCisJCW1ha2VBY3Rpb25zKCk7CisKKwkJaG9va0NvbnRleHRNZW51KCk7CisKKwkJaG9va0RvdWJsZUNsaWNrQWN0aW9uKCk7CisKKwkJY29udHJpYnV0ZVRvQWN0aW9uQmFycygpOworCX0KKworCXB1YmxpYyBUcmVlVmlld2VyIGdldFZpZXdlcigpIHsKKwkJcmV0dXJuIHRoaXMudmlld2VyOworCX0KKworCXByaXZhdGUgdm9pZCBob29rQ29udGV4dE1lbnUoKSB7CisJCWZpbmFsIE1lbnVNYW5hZ2VyIG1lbnVNZ3IgPSBuZXcgTWVudU1hbmFnZXIoIiNQb3B1cE1lbnUiKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyBJQ29udHJpYnV0aW9uSXRlbVtdIGdldEl0ZW1zKCkgeworCQkJCUlDb250cmlidXRpb25JdGVtW10gbWVudUl0ZW1zID0gc3VwZXIuZ2V0SXRlbXMoKTsKKworCQkJCWZpbmFsIExpc3Q8SUNvbnRyaWJ1dGlvbkl0ZW0+IGZpbHRlcmVkQ29udHJpYnV0aW9uSXRlbXMgPSBuZXcgTGlua2VkTGlzdDxJQ29udHJpYnV0aW9uSXRlbT4oKTsKKworCQkJCWZvciAoZmluYWwgSUNvbnRyaWJ1dGlvbkl0ZW0gY29udHJpYnV0aW9uSXRlbSA6IG1lbnVJdGVtcykgeworCQkJCQlpZiAoKGNvbnRyaWJ1dGlvbkl0ZW0gIT0gbnVsbCkgJiYgKChjb250cmlidXRpb25JdGVtLmdldElkKCkgIT0gbnVsbCkgJiYgKCEoY29udHJpYnV0aW9uSXRlbS5nZXRJZCgpCisJCQkJCQkJLnN0YXJ0c1dpdGgoIm9yZy5lY2xpcHNlLmVtZi5lY29yZS5lZGl0b3IuQ3JlYXRlRHluYW1pY0luc3RhbmNlIikpKSkpIHsKKwkJCQkJCWZpbHRlcmVkQ29udHJpYnV0aW9uSXRlbXMuYWRkKGNvbnRyaWJ1dGlvbkl0ZW0pOworCQkJCQl9CisJCQkJfQorCisJCQkJbWVudUl0ZW1zID0gbmV3IElDb250cmlidXRpb25JdGVtW2ZpbHRlcmVkQ29udHJpYnV0aW9uSXRlbXMuc2l6ZSgpXTsKKworCQkJCXJldHVybiBmaWx0ZXJlZENvbnRyaWJ1dGlvbkl0ZW1zLnRvQXJyYXkobWVudUl0ZW1zKTsKKwkJCX0KKwkJfTsKKworCQltZW51TWdyLnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKKwkJbWVudU1nci5hZGRNZW51TGlzdGVuZXIobmV3IElNZW51TGlzdGVuZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIG1lbnVBYm91dFRvU2hvdyhmaW5hbCBJTWVudU1hbmFnZXIgbWFuYWdlcikgeworCQkJCU1ldGFNb2RlbEV4cGxvcmVyVmlldy50aGlzLmZpbGxDb250ZXh0TWVudShtYW5hZ2VyKTsKKwkJCX0KKwkJfSk7CisKKwkJZmluYWwgTWVudSBtZW51ID0gbWVudU1nci5jcmVhdGVDb250ZXh0TWVudSh0aGlzLnZpZXdlci5nZXRDb250cm9sKCkpOworCQl0aGlzLnZpZXdlci5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKKwkJZ2V0U2l0ZSgpLnJlZ2lzdGVyQ29udGV4dE1lbnUobWVudU1nciwgdGhpcy52aWV3ZXIpOworCX0KKworCXByaXZhdGUgdm9pZCBjb250cmlidXRlVG9BY3Rpb25CYXJzKCkgeworCQlmaW5hbCBJQWN0aW9uQmFycyBiYXJzID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCk7CisJCWZpbGxMb2NhbFB1bGxEb3duKGJhcnMuZ2V0TWVudU1hbmFnZXIoKSk7CisJCWZpbGxMb2NhbFRvb2xCYXIoYmFycy5nZXRUb29sQmFyTWFuYWdlcigpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgZmlsbExvY2FsUHVsbERvd24oZmluYWwgSU1lbnVNYW5hZ2VyIG1hbmFnZXIpIHsKKwkJbWFuYWdlci5hZGQodGhpcy5maWx0ZXJDbGFzc2VzQWN0aW9uKTsKKwkJbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJbWFuYWdlci5hZGQodGhpcy5maWx0ZXJBdHRyaWJ1dGVzQWN0aW9uKTsKKwkJbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKKwkJbWFuYWdlci5hZGQodGhpcy5jbG9uZVZpZXdBY3Rpb24pOworCX0KKworCXZvaWQgZmlsbENvbnRleHRNZW51KGZpbmFsIElNZW51TWFuYWdlciBtYW5hZ2VyKSB7CisJCS8vIG1hbmFnZXIuYWRkKHRoaXMuZmlsdGVyQ2xhc3Nlc0FjdGlvbik7CisJCS8vIG1hbmFnZXIuYWRkKHRoaXMuZmlsdGVyQXR0cmlidXRlc0FjdGlvbik7CisJCS8vIG1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7CisJCS8vIHRoaXMuZHJpbGxEb3duQWRhcHRlci5hZGROYXZpZ2F0aW9uQWN0aW9ucyhtYW5hZ2VyKTsKKwkJLy8gT3RoZXIgcGx1Zy1pbnMgY2FuIGNvbnRyaWJ1dGUgdGhlcmUgYWN0aW9ucyBoZXJlCisJCS8vIG1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoSVdvcmtiZW5jaEFjdGlvbkNvbnN0YW50cy5NQl9BRERJVElPTlMpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgZmlsbExvY2FsVG9vbEJhcihmaW5hbCBJVG9vbEJhck1hbmFnZXIgbWFuYWdlcikgeworCQltYW5hZ2VyLmFkZCh0aGlzLmZpbHRlckNsYXNzZXNBY3Rpb24pOworCQltYW5hZ2VyLmFkZCh0aGlzLmZpbHRlckF0dHJpYnV0ZXNBY3Rpb24pOworCQltYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOworCisJCW1hbmFnZXIuYWRkKHRoaXMucmVnaXN0ZXJFY29yZUZpbGVzQWN0aW9uKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgbWFrZUFjdGlvbnMoKSB7CisJCXRoaXMuZmlsdGVyQ2xhc3Nlc0FjdGlvbiA9IG5ldyBBY3Rpb24oIkZpbHRlciBmb3IgRUNsYXNzaWZlcnMiLCBJQWN0aW9uLkFTX0NIRUNLX0JPWCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJaWYgKGlzQ2hlY2tlZCgpKSB7CisJCQkJCXNldEZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4odHJ1ZSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0RmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbihmYWxzZSk7CisJCQkJfQorCQkJfQorCQl9OworCisJCXRoaXMuZmlsdGVyQ2xhc3Nlc0FjdGlvbi5zZXRFbmFibGVkKHRydWUpOworCisJCXRoaXMuZmlsdGVyQ2xhc3Nlc0FjdGlvbi5zZXRUb29sVGlwVGV4dCgiRmlsdGVyIGZvciBFQ2xhc3NpZmllcnMiKTsKKwkJdGhpcy5maWx0ZXJDbGFzc2VzQWN0aW9uLnNldEltYWdlRGVzY3JpcHRvcihQbHVnaW5VdGlscy5nZXRJbWFnZURlc2NyaXB0b3IoImljb25zL2NsYXNzX29iai5wbmciKSk7CisKKwkJdGhpcy5maWx0ZXJBdHRyaWJ1dGVzQWN0aW9uID0gbmV3IEFjdGlvbigiRmlsdGVyIGZvciBBdHRyaWJ1dGVzIiwgSUFjdGlvbi5BU19DSEVDS19CT1gpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCWlmIChpc0NoZWNrZWQoKSkgeworCQkJCQlzZXRGaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbih0cnVlKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzZXRGaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbihmYWxzZSk7CisJCQkJfQorCQkJfQorCQl9OworCQl0aGlzLmZpbHRlckF0dHJpYnV0ZXNBY3Rpb24uc2V0VG9vbFRpcFRleHQoIkZpbHRlciBmb3IgQXR0cmlidXRlcyIpOworCQl0aGlzLmZpbHRlckF0dHJpYnV0ZXNBY3Rpb24uc2V0SW1hZ2VEZXNjcmlwdG9yKFBsdWdpblV0aWxzLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvcHJvcF9wcy5naWYiKSk7CisKKwkJdGhpcy5jbG9uZVZpZXdBY3Rpb24gPSBuZXcgQWN0aW9uKCJDbG9uZSBWaWV3IiwgSUFjdGlvbi5BU19DSEVDS19CT1gpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCXRyeSB7CisJCQkJCWdldFZpZXdTaXRlKCkuZ2V0UGFnZSgpLnNob3dWaWV3KElELCBpZF9Db3VudGVyKysgKyAiIiwgSVdvcmtiZW5jaFBhZ2UuVklFV19WSVNJQkxFKTsKKwkJCQl9IGNhdGNoIChQYXJ0SW5pdEV4Y2VwdGlvbiBlKSB7CisJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7CisJCQkJfQorCQkJfQorCQl9OworCQl0aGlzLmNsb25lVmlld0FjdGlvbi5zZXRUb29sVGlwVGV4dCgiQ2xvbmUgVmlldyIpOworCQl0aGlzLmNsb25lVmlld0FjdGlvbi5zZXRJbWFnZURlc2NyaXB0b3IoUGx1Z2luVXRpbHMuZ2V0SW1hZ2VEZXNjcmlwdG9yKCJpY29ucy9wcm9wX3BzLmdpZiIpKTsKKworCQl0aGlzLnJlZ2lzdGVyRWNvcmVGaWxlc0FjdGlvbiA9IG5ldyBBY3Rpb24oIlJlZ2lzdGVyIEVDT1JFIGZpbGVzIikgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBydW4oKSB7CisJCQkJLy8gVE9ETzogYWRkIGltcGxlbWVudGF0aW9uIGZvciBDU1YgcmVwb3J0IGdlbmVyYXRpb24KKwkJCQlPYmplY3QgaW5wdXQgPSB2aWV3ZXIuZ2V0SW5wdXQoKTsKKworCQkJCUZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2coRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULk9QRU4gfCBTV1QuTVVMVEkpOworCisJCQkJZGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMobmV3IFN0cmluZ1tdIHsgIiouZWNvcmUiIH0pOworCisJCQkJZGlhbG9nLm9wZW4oKTsKKworCQkJCWlmICgoZGlhbG9nLmdldEZpbGVOYW1lKCkgPT0gbnVsbCkgfHwgKGRpYWxvZy5nZXRGaWxlTmFtZXMoKSA9PSBudWxsKSkgeworCQkJCQlyZXR1cm47CisJCQkJfQorCisJCQkJTGlzdDxTdHJpbmc+IGZpbGVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKwkJCQlmb3IgKFN0cmluZyBmaWxlTmFtZSA6IGRpYWxvZy5nZXRGaWxlTmFtZXMoKSkgeworCQkJCQlTdHJpbmcgZmlsZVBhdGggPSBkaWFsb2cuZ2V0RmlsdGVyUGF0aCgpICsgRmlsZS5zZXBhcmF0b3IgKyBmaWxlTmFtZTsKKworCQkJCQlmaWxlcy5hZGQoZmlsZVBhdGgpOworCQkJCX0KKworCQkJCXRyeSB7CisJCQkJCVJlZ2lzdGVyRUNPUkVmaWxlc0FjdGlvbi5sb2FkRUNPUkVzKGZpbGVzLCBjb21ib19lY29yZSk7CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKKwkJCQkJCUBPdmVycmlkZQorCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgeworCQkJCQkJCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksICJFcnJvciIsIGUuZ2V0TWVzc2FnZSgpKTsKKwkJCQkJCX0KKwkJCQkJfSk7CisJCQkJfQorCQkJfQorCQl9OworCQl0aGlzLnJlZ2lzdGVyRWNvcmVGaWxlc0FjdGlvbi5zZXRUb29sVGlwVGV4dCgiUmVnaXN0ZXIgRUNPUkUgZmlsZXMiKTsKKwkJdGhpcy5yZWdpc3RlckVjb3JlRmlsZXNBY3Rpb24uc2V0SW1hZ2VEZXNjcmlwdG9yKFBsdWdpblV0aWxzLmdldEltYWdlRGVzY3JpcHRvcigiaWNvbnMvcmVnaXN0ZXJfZWNvcmVzLnBuZyIpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgaG9va0RvdWJsZUNsaWNrQWN0aW9uKCkgeworCQl0aGlzLnZpZXdlci5hZGREb3VibGVDbGlja0xpc3RlbmVyKG5ldyBJRG91YmxlQ2xpY2tMaXN0ZW5lcigpIHsKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQgZG91YmxlQ2xpY2soZmluYWwgRG91YmxlQ2xpY2tFdmVudCBldmVudCkgeworCQkJCWZpbmFsIElTZWxlY3Rpb24gc2VsZWN0aW9uID0gZXZlbnQuZ2V0U2VsZWN0aW9uKCk7CisKKwkJCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgVHJlZVNlbGVjdGlvbikgeworCQkJCQlmaW5hbCBPYmplY3QgZmlyc3RFbGVtZW50ID0gKChUcmVlU2VsZWN0aW9uKSBzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOworCisJCQkJCWlmIChmaXJzdEVsZW1lbnQgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQkJCQlTaGVsbCBwYXJlbnRTaGVsbCA9IG51bGw7CisKKwkJCQkJCVN0cmluZyBkaXNwbGF5RGlhbG9nU3R5bGUgPSAoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKQorCQkJCQkJCQkuZ2V0U3RyaW5nKE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuUF9ESUFMT0dfRElTUExBWSkpOworCisJCQkJCQlpZiAoKGRpc3BsYXlEaWFsb2dTdHlsZSAhPSBudWxsKQorCQkJCQkJCQkmJiBkaXNwbGF5RGlhbG9nU3R5bGUuZXF1YWxzKE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuVl9PTl9UT1ApKSB7CisJCQkJCQkJcGFyZW50U2hlbGwgPSBuZXcgU2hlbGwoU1dULk9OX1RPUCk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXBhcmVudFNoZWxsID0gbmV3IFNoZWxsKCk7CisJCQkJCQl9CisKKwkJCQkJCS8vIGZpbmFsIFN0cmluZyBuYW1lID0gKChmaXJzdEVsZW1lbnQgaW5zdGFuY2VvZiBFQ2xhc3MpID8gKChFQ2xhc3MpCisJCQkJCQkvLyBmaXJzdEVsZW1lbnQpLmdldE5hbWUoKSA6CisJCQkJCQkvLyAiIik7CisJCQkJCQkvLworCQkJCQkJLy8gcGFyZW50U2hlbGwuc2V0VGV4dCgiRGV0YWlscyBvZiA6ICIgKyAoKEVDbGFzcykKKwkJCQkJCS8vIGZpcnN0RWxlbWVudCkuZUNsYXNzKCkuZ2V0TmFtZSgpICsgIiAiICsKKwkJCQkJCS8vIG5hbWUpOworCQkJCQkJLy8KKwkJCQkJCS8vCisJCQkJCQkvLyBmaW5hbCBUYXNrQmFyIHN5c3RlbVRhc2tCYXIgPSBwYXJlbnRTaGVsbC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtVGFza0JhcigpOworCQkJCQkJLy8gZmluYWwgVGFza0l0ZW0gdGFza0l0ZW0gPSBzeXN0ZW1UYXNrQmFyLmdldEl0ZW0ocGFyZW50U2hlbGwpOworCQkJCQkJLy8KKwkJCQkJCS8vIHRhc2tJdGVtLnNldERhdGEocGFyZW50U2hlbGwpOworCQkJCQkJLy8gdGFza0l0ZW0uc2V0T3ZlcmxheVRleHQobmFtZSk7CisJCQkJCQkvLyB0YXNrSXRlbS5zZXRUZXh0KG5hbWUpOworCQkJCQkJbmV3IFNlbGVjdGVkRWxlbWVudENvbnRlbnREaWFsb2cocGFyZW50U2hlbGwsIGdldFNpdGUoKSwgKEVPYmplY3QpIGZpcnN0RWxlbWVudCkub3BlbigpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9KTsKKwl9CisKKwkvKioKKwkgKiBQYXNzaW5nIHRoZSBmb2N1cyByZXF1ZXN0IHRvIHRoZSB2aWV3ZXIncyBjb250cm9sLgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgeworCQl0aGlzLnZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKKwl9CisKKwlwdWJsaWMgQWN0aW9uIGdldEZpbHRlckNsYXNzZXNBY3Rpb24oKSB7CisJCXJldHVybiB0aGlzLmZpbHRlckNsYXNzZXNBY3Rpb247CisJfQorCisJcHVibGljIEFjdGlvbiBnZXRGaWx0ZXJBdHRyaWJ1dGVzQWN0aW9uKCkgeworCQlyZXR1cm4gdGhpcy5maWx0ZXJBdHRyaWJ1dGVzQWN0aW9uOworCX0KKworCXB1YmxpYyBib29sZWFuIGlzRmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbigpIHsKKwkJcmV0dXJuIHRoaXMuZmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbjsKKwl9CisKKwlwdWJsaWMgYm9vbGVhbiBpc0ZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuKCkgeworCQlyZXR1cm4gdGhpcy5maWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbjsKKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRGaWx0ZXJDbGFzc2VzQWN0aW9uKGZpbmFsIEFjdGlvbiBmaWx0ZXJDbGFzc2VzQWN0aW9uKSB7CisJCXRoaXMuZmlsdGVyQ2xhc3Nlc0FjdGlvbiA9IGZpbHRlckNsYXNzZXNBY3Rpb247CisJfQorCisJcHVibGljIHZvaWQgc2V0RmlsdGVyQXR0cmlidXRlc0FjdGlvbihmaW5hbCBBY3Rpb24gZmlsdGVyQXR0cmlidXRlc0FjdGlvbikgeworCQl0aGlzLmZpbHRlckF0dHJpYnV0ZXNBY3Rpb24gPSBmaWx0ZXJBdHRyaWJ1dGVzQWN0aW9uOworCX0KKworCXB1YmxpYyB2b2lkIHNldEZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4oZmluYWwgYm9vbGVhbiBmaWx0ZXJGb3JFQ2xhc3NpZmllcnNCb29sZWFuKSB7CisJCXRoaXMuZmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbiA9IGZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW47CisKKwkJdGhpcy5wYXR0ZXJuRmlsdGVyLnNldEZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4oZmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbik7CisJfQorCisJcHVibGljIHZvaWQgc2V0RmlsdGVyRm9yQXR0cmlidXRlc0Jvb2xlYW4oZmluYWwgYm9vbGVhbiBmaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbikgeworCQl0aGlzLmZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuID0gZmlsdGVyRm9yQXR0cmlidXRlc0Jvb2xlYW47CisKKwkJdGhpcy5wYXR0ZXJuRmlsdGVyLnNldEZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuKGZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci92aWV3cy9wcm92aWRlcnMvVmlld0NvbnRlbnRQcm92aWRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci92aWV3cy9wcm92aWRlcnMvVmlld0NvbnRlbnRQcm92aWRlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3ZpZXdzL3Byb3ZpZGVycy9WaWV3Q29udGVudFByb3ZpZGVyLmphdmEKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvdmlld3MvcHJvdmlkZXJzL1ZpZXdDb250ZW50UHJvdmlkZXIuamF2YQppbmRleCAyMmUxNTRmLi5hYTI1MTlkIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci92aWV3cy9wcm92aWRlcnMvVmlld0NvbnRlbnRQcm92aWRlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi9tZXRhbW9kZWx2aWV3ZXIvdmlld3MvcHJvdmlkZXJzL1ZpZXdDb250ZW50UHJvdmlkZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKLSAvKioKKy8qKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCkBAIC0xMiw3ICsxMiw4IEBACiAgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIudmlld3MucHJvdmlkZXJzOworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVyczsKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CkBAIC0yMiw5ICsyMyw5IEBACiBpbXBvcnQgamF2YS51dGlsLk1hcC5FbnRyeTsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlscy5TdWJDbGFzc2VzTGlzdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlscy5TdXBlckNsYXNzZXNMaXN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnV0aWxzLlR5cGVFbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnV0aWxzLlN1YkNsYXNzZXNMaXN0QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci51dGlscy5TdXBlckNsYXNzZXNMaXN0QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci51dGlscy5UeXBlRWxlbWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CkBAIC00OCw4ICs0OSw3IEBACiAJCQlmaW5hbCBDb2xsZWN0aW9uPEVQYWNrYWdlPiBlUGFja2FnZXMgPSAoKElNZXRhTW9kZWxEZXNjcmlwdG9yKSBwYXJlbnQpLmdldEVQYWNrYWdlcygpOwogCiAJCQlyZXR1cm4gZVBhY2thZ2VzLnRvQXJyYXkoKTsKLQkJfQotCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFUGFja2FnZSkgeworCQl9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVQYWNrYWdlKSB7CiAKIAkJCWZpbmFsIEVMaXN0PEVQYWNrYWdlPiBlU3VicGFja2FnZXMgPSAoKEVQYWNrYWdlKSBwYXJlbnQpLmdldEVTdWJwYWNrYWdlcygpOwogCQkJZmluYWwgRUxpc3Q8RUNsYXNzaWZpZXI+IGVDbGFzc2lmaWVycyA9ICgoRVBhY2thZ2UpIHBhcmVudCkuZ2V0RUNsYXNzaWZpZXJzKCk7CkBAIC01OCw3ICs1OCw2IEBACiAKIAkJCWFycmF5TGlzdDEuYWRkQWxsKGVTdWJwYWNrYWdlcyk7CiAKLQogCQkJQ29sbGVjdGlvbnMuc29ydChhcnJheUxpc3QxLCB0aGlzLmNvbXBhcmF0b3IpOwogCiAJCQlmaW5hbCBBcnJheUxpc3Q8RUNsYXNzaWZpZXI+IGFycmF5TGlzdDIgPSBuZXcgQXJyYXlMaXN0PEVDbGFzc2lmaWVyPigpOwpAQCAtNzQsOCArNzMsNyBAQAogCiAJCQlyZXR1cm4gY29tYmluZWRMaXN0LnRvQXJyYXkoKTsKIAotCQl9Ci0JCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVudHJ5KSB7CisJCX0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRW50cnkpIHsKIAkJCXJldHVybiBuZXcgT2JqZWN0W10geyAoKEVudHJ5PD8sID8+KSBwYXJlbnQpLmdldFZhbHVlKCkgfTsKIAkJfQogCkBAIC04NywxMSArODUsOSBAQAogCiAJCWlmIChjaGlsZCBpbnN0YW5jZW9mIEVQYWNrYWdlKSB7CiAJCQlyZXR1cm4gKChFUGFja2FnZSkgY2hpbGQpLmVDb250YWluZXIoKTsKLQkJfQotCQllbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIEVDbGFzcykgeworCQl9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgRUNsYXNzKSB7CiAJCQlyZXR1cm4gKChFQ2xhc3MpIGNoaWxkKS5lQ29udGFpbmVyKCk7Ci0JCX0KLQkJZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBFU3RydWN0dXJhbEZlYXR1cmUpIHsKKwkJfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIEVTdHJ1Y3R1cmFsRmVhdHVyZSkgewogCQkJcmV0dXJuICgoRVN0cnVjdHVyYWxGZWF0dXJlKSBjaGlsZCkuZUNvbnRhaW5lcigpOwogCQl9CiAKQEAgLTExMCw3ICsxMDYsNiBAQAogCiAJCQlhcnJheUxpc3QxLmFkZEFsbChlU3VicGFja2FnZXMpOwogCi0KIAkJCUNvbGxlY3Rpb25zLnNvcnQoYXJyYXlMaXN0MSwgdGhpcy5jb21wYXJhdG9yKTsKIAogCQkJZmluYWwgQXJyYXlMaXN0PEVDbGFzc2lmaWVyPiBhcnJheUxpc3QyID0gbmV3IEFycmF5TGlzdDxFQ2xhc3NpZmllcj4oKTsKQEAgLTEyNiw4ICsxMjEsNyBAQAogCiAJCQlyZXR1cm4gY29tYmluZWRMaXN0LnRvQXJyYXkoKTsKIAotCQl9Ci0JCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVDbGFzcykgeworCQl9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVDbGFzcykgewogCiAJCQlmaW5hbCBFTGlzdDxFU3RydWN0dXJhbEZlYXR1cmU+IGVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMgPSAoKEVDbGFzcykgcGFyZW50KS5nZXRFQWxsU3RydWN0dXJhbEZlYXR1cmVzKCk7CiAKQEAgLTEzNSw3ICsxMjksNiBAQAogCiAJCQlsaXN0LmFkZEFsbChlQWxsU3RydWN0dXJhbEZlYXR1cmVzKTsKIAotCiAJCQlDb2xsZWN0aW9ucy5zb3J0KGxpc3QsIHRoaXMuY29tcGFyYXRvcik7CiAKIAkJCWludCBpbmRleCA9IDA7CkBAIC0xNTQsOCArMTQ3LDcgQEAKIAkJCX0KIAogCQkJcmV0dXJuIGxpc3QudG9BcnJheSgpOwotCQl9Ci0JCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVEYXRhVHlwZSkgeworCQl9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVEYXRhVHlwZSkgewogCiAJCQlpZiAocGFyZW50IGluc3RhbmNlb2YgRUVudW0pIHsKIApAQCAtMTc5LDggKzE3MSw3IEBACiAJCQlDb2xsZWN0aW9ucy5zb3J0KGxpc3QsIHRoaXMuY29tcGFyYXRvcik7CiAKIAkJCXJldHVybiBsaXN0LnRvQXJyYXkoKTsKLQkJfQotCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFRW51bSkgeworCQl9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVFbnVtKSB7CiAKIAkJCWZpbmFsIEVMaXN0PEVFbnVtTGl0ZXJhbD4gZUxpdGVyYWxzID0gKChFRW51bSkgcGFyZW50KS5nZXRFTGl0ZXJhbHMoKTsKIApAQCAtMTkxLDI0ICsxODIsMjAgQEAKIAkJCUNvbGxlY3Rpb25zLnNvcnQobGlzdCwgdGhpcy5jb21wYXJhdG9yKTsKIAogCQkJcmV0dXJuIGxpc3QudG9BcnJheSgpOwotCQl9Ci0JCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFN1cGVyQ2xhc3Nlc0xpc3RCdWlsZGVyKSB7CisJCX0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgU3VwZXJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKIAkJCWZpbmFsIFNldDxFQ2xhc3M+IGFsbFN1cGVyQ2xhc3NlcyA9ICgoU3VwZXJDbGFzc2VzTGlzdEJ1aWxkZXIpIHBhcmVudCkuZ2V0QWxsU3VwZXJDbGFzc2VzKCk7CiAJCQlmaW5hbCBBcnJheUxpc3Q8RU5hbWVkRWxlbWVudD4gYXJyYXlMaXN0ID0gbmV3IEFycmF5TGlzdDxFTmFtZWRFbGVtZW50PihhbGxTdXBlckNsYXNzZXMpOwogCQkJQ29sbGVjdGlvbnMuc29ydChhcnJheUxpc3QsIHRoaXMuY29tcGFyYXRvcik7CiAJCQlyZXR1cm4gYXJyYXlMaXN0LnRvQXJyYXkoKTsKLQkJfQotCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBTdWJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKKwkJfSBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBTdWJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKIAkJCWZpbmFsIFNldDxFQ2xhc3M+IGFsbFN1YkNsYXNzZXMgPSAoKFN1YkNsYXNzZXNMaXN0QnVpbGRlcikgcGFyZW50KS5nZXRBbGxTdWJDbGFzc2VzKCk7CiAJCQlmaW5hbCBBcnJheUxpc3Q8RU5hbWVkRWxlbWVudD4gYXJyYXlMaXN0ID0gbmV3IEFycmF5TGlzdDxFTmFtZWRFbGVtZW50PihhbGxTdWJDbGFzc2VzKTsKIAkJCUNvbGxlY3Rpb25zLnNvcnQoYXJyYXlMaXN0LCB0aGlzLmNvbXBhcmF0b3IpOwogCQkJcmV0dXJuIGFycmF5TGlzdC50b0FycmF5KCk7Ci0JCX0KLQkJZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRVN0cnVjdHVyYWxGZWF0dXJlKSB7CisJCX0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRVN0cnVjdHVyYWxGZWF0dXJlKSB7CiAJCQlmaW5hbCBFQ2xhc3NpZmllciBlVHlwZSA9ICgoRVN0cnVjdHVyYWxGZWF0dXJlKSBwYXJlbnQpLmdldEVUeXBlKCk7CiAJCQlyZXR1cm4gbmV3IE9iamVjdFtdIHsgbmV3IFR5cGVFbGVtZW50KGVUeXBlKSB9OwotCQl9Ci0JCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFR5cGVFbGVtZW50KSB7CisJCX0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgVHlwZUVsZW1lbnQpIHsKIAkJCWZpbmFsIEVDbGFzc2lmaWVyIGVUeXBlID0gKChUeXBlRWxlbWVudCkgcGFyZW50KS5nZXRDbGFzc2lmaWVyKCk7CiAJCQlyZXR1cm4gbmV3IE9iamVjdFtdIHsgZVR5cGUgfTsKIAkJfQpAQCAtMjE5LDE4ICsyMDYsMTUgQEAKIAlwdWJsaWMgYm9vbGVhbiBoYXNDaGlsZHJlbihmaW5hbCBPYmplY3QgcGFyZW50KSB7CiAJCWlmIChwYXJlbnQgaW5zdGFuY2VvZiBFUGFja2FnZSkgewogCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQkJZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCX0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRUNsYXNzKSB7CiAJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFRGF0YVR5cGUpIHsKKwkJfSBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFRGF0YVR5cGUpIHsKIAogCQkJaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVFbnVtKSB7CiAJCQkJcmV0dXJuICgoRUVudW0pIHBhcmVudCkuZ2V0RUxpdGVyYWxzKCkuc2l6ZSgpID4gMDsKIAkJCX0KIAkJCXJldHVybiAoKEVEYXRhVHlwZSkgcGFyZW50KS5nZXRFVHlwZVBhcmFtZXRlcnMoKS5zaXplKCkgPiAwOwotCQl9Ci0JCWVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIEVFbnVtKSB7CisJCX0gZWxzZSBpZiAocGFyZW50IGluc3RhbmNlb2YgRUVudW0pIHsKIAkJCXJldHVybiAoKEVFbnVtKSBwYXJlbnQpLmdldEVMaXRlcmFscygpLnNpemUoKSA+IDA7CiAJCX0KIApAQCAtMjQwLDE0ICsyMjQsMTEgQEAKIAogCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBTdXBlckNsYXNzZXNMaXN0QnVpbGRlcikgewogCQkJcmV0dXJuICgoU3VwZXJDbGFzc2VzTGlzdEJ1aWxkZXIpIHBhcmVudCkuZ2V0QWxsU3VwZXJDbGFzc2VzKCkuc2l6ZSgpID4gMDsKLQkJfQotCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBTdWJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKKwkJfSBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBTdWJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKIAkJCXJldHVybiAoKFN1YkNsYXNzZXNMaXN0QnVpbGRlcikgcGFyZW50KS5nZXRBbGxTdWJDbGFzc2VzKCkuc2l6ZSgpID4gMDsKLQkJfQotCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFRW51bUxpdGVyYWwpIHsKKwkJfSBlbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFRW51bUxpdGVyYWwpIHsKIAkJCXJldHVybiBmYWxzZTsKLQkJfQotCQllbHNlIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBUeXBlRWxlbWVudCkgeworCQl9IGVsc2UgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFR5cGVFbGVtZW50KSB7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCQlyZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3ZpZXdzL3Byb3ZpZGVycy9WaWV3TGFiZWxQcm92aWRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci92aWV3cy9wcm92aWRlcnMvVmlld0xhYmVsUHJvdmlkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDc0JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci92aWV3cy9wcm92aWRlcnMvVmlld0xhYmVsUHJvdmlkZXIuamF2YQpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL21ldGFtb2RlbHZpZXdlci92aWV3cy9wcm92aWRlcnMvVmlld0xhYmVsUHJvdmlkZXIuamF2YQppbmRleCAyY2U0MmYwLi45MDdhNWNkIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci92aWV3cy9wcm92aWRlcnMvVmlld0xhYmVsUHJvdmlkZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvbWV0YW1vZGVsdmlld2VyL3ZpZXdzL3Byb3ZpZGVycy9WaWV3TGFiZWxQcm92aWRlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEyLDE1ICsxMiwxNiBAQAogICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVyczsKKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci52aWV3cy5wcm92aWRlcnM7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSTDsKIAotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuYmFzZS5BY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlscy5TdWJDbGFzc2VzTGlzdEJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlscy5TdXBlckNsYXNzZXNMaXN0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnV0aWxzLlR5cGVFbGVtZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLmJhc2UuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYubWV0YW1vZGVsdmlld2VyLnV0aWxzLlN1YkNsYXNzZXNMaXN0QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci51dGlscy5TdXBlckNsYXNzZXNMaXN0QnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLm1ldGFtb2RlbHZpZXdlci51dGlscy5UeXBlRWxlbWVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKQEAgLTM5LDEyICs0MCwxMSBAQAogCiBwdWJsaWMgY2xhc3MgVmlld0xhYmVsUHJvdmlkZXIgZXh0ZW5kcyBMYWJlbFByb3ZpZGVyIHsKIAotCiAJcHJpdmF0ZSBmaW5hbCBJbWFnZSBjbGFzc0ltYWdlOwogCXByaXZhdGUgZmluYWwgSW1hZ2UgZW51bUltYWdlOwogCXByaXZhdGUgZmluYWwgSW1hZ2UgY29udGFpbm1lbnRJbWFnZTsKIAlwcml2YXRlIGZpbmFsIEltYWdlIHN1cGVyQ2xhc3NMaXN0SW1hZ2U7Ci0JcHJpdmF0ZSBmaW5hbCBJbWFnZSBTdWJDbGFzc2VzTGlzdEJ1aWxkZXJJbWFnZTsKKwlwcml2YXRlIGZpbmFsIEltYWdlIHN1YkNsYXNzTGlzdEltYWdlOwogCXByaXZhdGUgZmluYWwgSW1hZ2UgYXR0cmlidXRlSW1hZ2U7CiAJcHJpdmF0ZSBmaW5hbCBJbWFnZSBhdHRyaWJ1dGVfcmVmZXJlbmNlSW1hZ2U7CiAJcHJpdmF0ZSBmaW5hbCBJbWFnZSBhYnN0cmFjdENsYXNzSW1hZ2U7CkBAIC01Nyw3ICs1Nyw3IEBACiAJCXRoaXMuZW51bUltYWdlID0gZ2V0SW1hZ2UoImljb25zL2VudW1fb2JqLnBuZyIpOwogCQl0aGlzLmNvbnRhaW5tZW50SW1hZ2UgPSBnZXRJbWFnZSgiaWNvbnMvYXR0cmlidXRlX2NvbnRhaW5tZW50LnBuZyIpOwogCQl0aGlzLnN1cGVyQ2xhc3NMaXN0SW1hZ2UgPSBnZXRJbWFnZSgiaWNvbnMvc3VwZXJfY28uZ2lmIik7Ci0JCXRoaXMuU3ViQ2xhc3Nlc0xpc3RCdWlsZGVySW1hZ2UgPSBnZXRJbWFnZSgiaWNvbnMvZG93bndhcmRfY28uZ2lmIik7CisJCXRoaXMuc3ViQ2xhc3NMaXN0SW1hZ2UgPSBnZXRJbWFnZSgiaWNvbnMvZG93bndhcmRfY28uZ2lmIik7CiAJCXRoaXMuYXR0cmlidXRlSW1hZ2UgPSBnZXRJbWFnZSgiaWNvbnMvYXR0cmlidXRlLnBuZyIpOwogCQl0aGlzLmF0dHJpYnV0ZV9yZWZlcmVuY2VJbWFnZSA9IGdldEltYWdlKCJpY29ucy9hdHRyaWJ1dGVfcmVmZXJlbmNlLnBuZyIpOwogCQl0aGlzLmFic3RyYWN0Q2xhc3NJbWFnZSA9IGdldEltYWdlKCJpY29ucy9hYnN0cmFjdF9jbGFzc19vYmoucG5nIik7CkBAIC02NSw3ICs2NSw2IEBACiAJCXRoaXMuZVR5cGVJbWFnZSA9IGdldEltYWdlKCJpY29ucy90eXBlX29iai5naWYiKTsKIAl9CiAKLQogCXByaXZhdGUgSW1hZ2UgZ2V0SW1hZ2UoZmluYWwgU3RyaW5nIGxvY2F0aW9uKSB7CiAKIAkJZmluYWwgVVJMIGVudHJ5ID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShsb2NhdGlvbik7CkBAIC03OCw4ICs3Nyw3IEBACiAJCQkJaWYgKGZpbGVVUkwgIT0gbnVsbCkgewogCQkJCQlyZXR1cm4gbmV3IEltYWdlKERpc3BsYXkuZ2V0RGVmYXVsdCgpLCBuZXcgSW1hZ2VEYXRhKGZpbGVVUkwuZ2V0RmlsZSgpKSk7CiAJCQkJfQotCQkJfQotCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKKwkJCX0gY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKIAkJCQllLnByaW50U3RhY2tUcmFjZSgpOwogCQkJfQogCkBAIC04NywyNiArODUsMjAgQEAKIAkJcmV0dXJuIG51bGw7CiAJfQogCi0KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgU3RyaW5nIGdldFRleHQoZmluYWwgT2JqZWN0IGNoaWxkKSB7CiAKIAkJaWYgKGNoaWxkIGluc3RhbmNlb2YgRVBhY2thZ2UpIHsKIAkJCXJldHVybiAoKEVQYWNrYWdlKSBjaGlsZCkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgRUNsYXNzKSB7CisJCX0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKIAkJCXJldHVybiAoKEVDbGFzcykgY2hpbGQpLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIEVEYXRhVHlwZSkgeworCQl9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgRURhdGFUeXBlKSB7CiAJCQlyZXR1cm4gKChFRGF0YVR5cGUpIGNoaWxkKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBFRW51bSkgeworCQl9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgRUVudW0pIHsKIAkJCXJldHVybiAiRW51bSA6ICIgKyAoKEVFbnVtKSBjaGlsZCkuZ2V0TmFtZSgpOwotCQl9Ci0JCWVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgRUVudW1MaXRlcmFsKSB7CisJCX0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBFRW51bUxpdGVyYWwpIHsKIAkJCXJldHVybiAoKEVFbnVtTGl0ZXJhbCkgY2hpbGQpLmdldE5hbWUoKTsKLQkJfQotCQllbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIEVTdHJ1Y3R1cmFsRmVhdHVyZSkgeworCQl9IGVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgRVN0cnVjdHVyYWxGZWF0dXJlKSB7CiAJCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0RmVhdHVyZSA9IChFU3RydWN0dXJhbEZlYXR1cmUpIGNoaWxkOwogCiAJCQlmaW5hbCBpbnQgbG93ZXJCb3VuZCA9IGVTdEZlYXR1cmUuZ2V0TG93ZXJCb3VuZCgpOwpAQCAtMTE5LDE0ICsxMTEsMTEgQEAKIAkJCWZpbmFsIFN0cmluZyBtdWx0aXBsaWNpdHkgPSAiWyIgKyBsb3dlckJvdW5kU3RyaW5nICsgIiAiICsgdXBwZXJCb3VuZFN0cmluZyArICJdIjsKIAogCQkJcmV0dXJuIGVTdEZlYXR1cmUuZ2V0TmFtZSgpICsgIiAgIiArIG11bHRpcGxpY2l0eSArICIgIiArIGVTdEZlYXR1cmUuZ2V0RVR5cGUoKS5nZXROYW1lKCk7Ci0JCX0KLQkJZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBTdXBlckNsYXNzZXNMaXN0QnVpbGRlcikgewotCQkJcmV0dXJuICJTdXBlciBDbGFzc2VzIjsKLQkJfQotCQllbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIFN1YkNsYXNzZXNMaXN0QnVpbGRlcikgewotCQkJcmV0dXJuICJBbGwtU3ViIENsYXNzZXMiOwotCQl9Ci0JCWVsc2UgaWYgKGNoaWxkIGluc3RhbmNlb2YgVHlwZUVsZW1lbnQpIHsKKwkJfSBlbHNlIGlmIChjaGlsZCBpbnN0YW5jZW9mIFN1cGVyQ2xhc3Nlc0xpc3RCdWlsZGVyKSB7CisJCQlyZXR1cm4gIkFsbCBTdXBlciBDbGFzc2VzIChmbGF0KSI7CisJCX0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBTdWJDbGFzc2VzTGlzdEJ1aWxkZXIpIHsKKwkJCXJldHVybiAiQWxsIFN1YiBDbGFzc2VzIChmbGF0KSI7CisJCX0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBUeXBlRWxlbWVudCkgewogCQkJcmV0dXJuICI8LS1FVHlwZS0tPiI7CiAJCX0KIAkJcmV0dXJuIGNoaWxkLnRvU3RyaW5nKCk7CkBAIC0xMzcsMjggKzEyNiwyNCBAQAogCQlTdHJpbmcgaW1hZ2VLZXkgPSBJU2hhcmVkSW1hZ2VzLklNR19PQkpfRUxFTUVOVDsKIAkJaWYgKG9iaiBpbnN0YW5jZW9mIEVQYWNrYWdlKSB7CiAJCQlpbWFnZUtleSA9IElTaGFyZWRJbWFnZXMuSU1HX09CSl9GT0xERVI7Ci0JCX0KLQkJZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRVN0cnVjdHVyYWxGZWF0dXJlICYmIG9iaiBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpIHsKKwkJfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFU3RydWN0dXJhbEZlYXR1cmUgJiYgb2JqIGluc3RhbmNlb2YgRVJlZmVyZW5jZSkgewogCiAJCQlpZiAoKChFUmVmZXJlbmNlKSBvYmopLmlzQ29udGFpbm1lbnQoKSkgewogCQkJCXJldHVybiB0aGlzLmNvbnRhaW5tZW50SW1hZ2U7CiAJCQl9CiAKIAkJCXJldHVybiB0aGlzLmF0dHJpYnV0ZV9yZWZlcmVuY2VJbWFnZTsKLQkJfQotCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFQXR0cmlidXRlKSB7CisJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRUF0dHJpYnV0ZSkgewogCQkJcmV0dXJuIHRoaXMuYXR0cmlidXRlSW1hZ2U7CiAKLQkJfQotCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFRGF0YVR5cGUpIHsKKwkJfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBFRGF0YVR5cGUpIHsKIAkJCWltYWdlS2V5ID0gSVNoYXJlZEltYWdlcy5JTUdfT0JKX0VMRU1FTlQ7CiAKIAkJCWlmIChvYmogaW5zdGFuY2VvZiBFRW51bSkgewogCQkJCXJldHVybiB0aGlzLmVudW1JbWFnZTsKIAkJCX0KIAotCQl9Ci0JCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEVDbGFzcykgeworCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEVDbGFzcykgewogCQkJaWYgKCgoRUNsYXNzKSBvYmopLmlzQWJzdHJhY3QoKSAmJiAoKEVDbGFzcykgb2JqKS5pc0ludGVyZmFjZSgpKSB7CiAJCQkJcmV0dXJuIHRoaXMuaW50ZXJmYWNlSW1hZ2U7CiAJCQl9CkBAIC0xNjcsMTggKzE1MiwxNCBAQAogCQkJfQogCiAJCQlyZXR1cm4gdGhpcy5jbGFzc0ltYWdlOwotCQl9Ci0JCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEVFbnVtKSB7CisJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRUVudW0pIHsKIAkJCXJldHVybiB0aGlzLmVudW1JbWFnZTsKLQkJfQotCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBTdXBlckNsYXNzZXNMaXN0QnVpbGRlcikgeworCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFN1cGVyQ2xhc3Nlc0xpc3RCdWlsZGVyKSB7CiAJCQlyZXR1cm4gdGhpcy5zdXBlckNsYXNzTGlzdEltYWdlOwotCQl9Ci0JCWVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFN1YkNsYXNzZXNMaXN0QnVpbGRlcikgeworCQl9IGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIFN1YkNsYXNzZXNMaXN0QnVpbGRlcikgewogCi0JCQlyZXR1cm4gdGhpcy5TdWJDbGFzc2VzTGlzdEJ1aWxkZXJJbWFnZTsKLQkJfQotCQllbHNlIGlmIChvYmogaW5zdGFuY2VvZiBUeXBlRWxlbWVudCkgeworCQkJcmV0dXJuIHRoaXMuc3ViQ2xhc3NMaXN0SW1hZ2U7CisJCX0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgVHlwZUVsZW1lbnQpIHsKIAogCQkJcmV0dXJuIHRoaXMuZVR5cGVJbWFnZTsKIAkJfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvLmNsYXNzcGF0aCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC8uY2xhc3NwYXRoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvLmNsYXNzcGF0aApjb3B5IHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC8uY2xhc3NwYXRoCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvLmdpdGlnbm9yZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci8uZ2l0aWdub3JlCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvLmdpdGlnbm9yZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC8ucHJvamVjdApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLy5wcm9qZWN0CnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvLnByb2plY3QKaW5kZXggNWYwYmNkZC4uYzM4ZjRmYSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci8ucHJvamVjdAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvLnByb2plY3QKQEAgLTEsNiArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3I8L25hbWU+CisJPG5hbWU+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWw8L25hbWU+CiAJPGNvbW1lbnQ+PC9jb21tZW50PgogCTxwcm9qZWN0cz4KIAk8L3Byb2plY3RzPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpjb3B5IHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2EyMjFiCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMzcgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IEFQUDRNQyBFTUYgVmlld2VyIChQbGFudFVNTCkKK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sO3NpbmdsZXRvbjo9dHJ1ZQorQnVuZGxlLVZlcnNpb246IDAuOS44LnF1YWxpZmllcgorQnVuZGxlLUNsYXNzUGF0aDogLgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuQWN0aXZhdG9yCitCdW5kbGUtVmVuZG9yOiBFY2xpcHNlIEFQUDRNQworUmVxdWlyZS1CdW5kbGU6IGNvbS5nb29nbGUuZ3VhdmEsCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAorIG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKKyBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLAorIG9yZy5lY2xpcHNlLnh0ZXh0LnhiYXNlLmxpYiwKKyBvcmcuZWNsaXBzZS54dGVuZC5saWIsCisgb3JnLmVjbGlwc2UueHRlbmQubGliLm1hY3JvLAorIG9yZy5lY2xpcHNlLnVpLAorIG9yZy5lY2xpcHNlLnVpLmJyb3dzZXIsCisgb3JnLmVjbGlwc2Uuc3BoaW54LmVtZiwKKyBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLmVkaXRvcnMsCisgb3JnLmVjbGlwc2Uuc3BoaW54LmVtZi5lZGl0b3JzLmZvcm1zLAorIG9yZy5lY2xpcHNlLmU0LnVpLm1vZGVsLndvcmtiZW5jaCwKKyBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLAorIG9yZy5lY2xpcHNlLmU0LmNvcmUuY29udGV4dHMsCisgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5leHRlbnNpb25zLAorIG9yZy5lY2xpcHNlLmU0LnVpLmRpLAorIG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLAorIG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaCwKKyBvcmcuZWNsaXBzZS5lNC5jb3JlLnNlcnZpY2VzCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0ltcG9ydC1QYWNrYWdlOiBqYXZheC5hbm5vdGF0aW9uO3ZlcnNpb249IjEuMi4wIiwKKyBqYXZheC5pbmplY3Q7dmVyc2lvbj0iMS4wLjAiLAorIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbDt2ZXJzaW9uPSIxLjIwMTkuMCIsCisgbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmNvcmU7dmVyc2lvbj0iMS4yMDE5LjAiLAorIG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5lY2xpcHNlLnV0aWxzLAorIG9yZy5zbGY0ajt2ZXJzaW9uPSIxLjcuMiIKK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvYWJvdXQuaHRtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9hYm91dC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2Fib3V0Lmh0bWwKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9hYm91dC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvYnVpbGQucHJvcGVydGllcyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9idWlsZC5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMDNiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDExIEBACitvdXRwdXQuLiA9IGJpbi8KK2Jpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCisgICAgICAgICAgICAgICAuLFwKKyAgICAgICAgICAgICAgIHBsdWdpbi54bWwsXAorICAgICAgICAgICAgICAgaWNvbnMvLFwKKyAgICAgICAgICAgICAgIGVwbC0yLjAuaHRtbCxcCisgICAgICAgICAgICAgICBhYm91dC5odG1sLFwKKyAgICAgICAgICAgICAgIGZyYWdtZW50LmU0eG1pCitzcmMuaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKKyAgICAgICAgICAgICAgIGVwbC0yLjAuaHRtbAorc291cmNlLi4gPSBzcmMvCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2VwbC0yLjAuaHRtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9lcGwtMi4wLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvZXBsLTIuMC5odG1sCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvZnJhZ21lbnQuZTR4bWkgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvZnJhZ21lbnQuZTR4bWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI3MzNlOAotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9mcmFnbWVudC5lNHhtaQpAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgorPGZyYWdtZW50Ok1vZGVsRnJhZ21lbnRzIHhtaTp2ZXJzaW9uPSIyLjAiIHhtbG5zOnhtaT0iaHR0cDovL3d3dy5vbWcub3JnL1hNSSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6YmFzaWM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdWkvMjAxMC9VSU1vZGVsL2FwcGxpY2F0aW9uL2Rlc2NyaXB0b3IvYmFzaWMiIHhtbG5zOmNvbW1hbmRzPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VpLzIwMTAvVUlNb2RlbC9hcHBsaWNhdGlvbi9jb21tYW5kcyIgeG1sbnM6ZnJhZ21lbnQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvdWkvMjAxMC9VSU1vZGVsL2ZyYWdtZW50IiB4bWxuczptZW51PSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3VpLzIwMTAvVUlNb2RlbC9hcHBsaWNhdGlvbi91aS9tZW51IiB4bWxuczp1aT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy91aS8yMDEwL1VJTW9kZWwvYXBwbGljYXRpb24vdWkiIHhtaTppZD0iXzI0SnhrR21wRWVxbHlfalkzRkxueXciPgorICA8ZnJhZ21lbnRzIHhzaTp0eXBlPSJmcmFnbWVudDpTdHJpbmdNb2RlbEZyYWdtZW50IiB4bWk6aWQ9Il80TTFza0dtcEVlcWx5X2pZM0ZMbnl3IiBmZWF0dXJlbmFtZT0iZGVzY3JpcHRvcnMiIHBhcmVudEVsZW1lbnRJZD0ieHBhdGg6LyI+CisgICAgPGVsZW1lbnRzIHhzaTp0eXBlPSJiYXNpYzpQYXJ0RGVzY3JpcHRvciIgeG1pOmlkPSJfN0V3VTRHbXBFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC52aWV3cy5EaWFncmFtVmlldyIgbGFiZWw9IkRpYWdyYW0gVmlldyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9zYW1wbGUuZ2lmIiBjYXRlZ29yeT0iQVBQNE1DIiBjbG9zZWFibGU9InRydWUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC52aWV3cy5EaWFncmFtVmlldyI+CisgICAgICA8dG9vbGJhciB4bWk6aWQ9Il9ESUMxNEdtcUVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnRvb2xiYXIuMCI+CisgICAgICAgIDxjaGlsZHJlbiB4c2k6dHlwZT0ibWVudTpEaXJlY3RUb29sSXRlbSIgeG1pOmlkPSJfamdCcDBHbXFFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5kaXJlY3R0b29saXRlbS5zZWxlY3QiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvc3luY2VkLnBuZyIgdG9vbHRpcD0iTGluayB0aGUgc2VsZWN0aW9uIGluIHRoZSBlZGl0b3Igd2l0aCB0aGUgY3VycmVudCBkaWFncmFtIHR5cGUiIHR5cGU9IkNoZWNrIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnMuTGlua1dpdGhFZGl0b3JIYW5kbGVyIi8+CisgICAgICA8L3Rvb2xiYXI+CisgICAgPC9lbGVtZW50cz4KKyAgPC9mcmFnbWVudHM+CisgIDxmcmFnbWVudHMgeHNpOnR5cGU9ImZyYWdtZW50OlN0cmluZ01vZGVsRnJhZ21lbnQiIHhtaTppZD0iX2dNdmg0R212RWVxbHlfalkzRkxueXciIGZlYXR1cmVuYW1lPSJjb21tYW5kcyIgcGFyZW50RWxlbWVudElkPSJ4cGF0aDovIj4KKyAgICA8ZWxlbWVudHMgeHNpOnR5cGU9ImNvbW1hbmRzOkNvbW1hbmQiIHhtaTppZD0iX2hubTlZR212RWVxbHlfalkzRkxueXciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuY29tbWFuZC5leHRyYWN0ZWNsYXNzaGllcmFyY2h5IiBjb21tYW5kTmFtZT0iRXh0cmFjdCBFQ2xhc3MgSGllcmFyY2h5IiBjYXRlZ29yeT0iX3FLekdjR212RWVxbHlfalkzRkxueXciLz4KKyAgICA8ZWxlbWVudHMgeHNpOnR5cGU9ImNvbW1hbmRzOkNvbW1hbmQiIHhtaTppZD0iXzFpdUE4R212RWVxbHlfalkzRkxueXciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuY29tbWFuZC5leHRyYWN0ZW9iamVjdHJlZmVyZW5jZXMiIGNvbW1hbmROYW1lPSJFeHRyYWN0IEVPYmplY3QgUmVmZXJlbmNlcyIgY2F0ZWdvcnk9Il9xS3pHY0dtdkVlcWx5X2pZM0ZMbnl3Ii8+CisgICAgPGVsZW1lbnRzIHhzaTp0eXBlPSJjb21tYW5kczpDb21tYW5kIiB4bWk6aWQ9Il9QOFJ1b0dtd0VlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmNvbW1hbmQuZXh0cmFjdGVjbGFzc2FsbHJlZmVyZW5jZXMiIGNvbW1hbmROYW1lPSJFeHRyYWN0IEVDbGFzcyBBbGwgUmVmZXJlbmNlcyIgY2F0ZWdvcnk9Il9xS3pHY0dtdkVlcWx5X2pZM0ZMbnl3Ii8+CisgICAgPGVsZW1lbnRzIHhzaTp0eXBlPSJjb21tYW5kczpDb21tYW5kIiB4bWk6aWQ9Il9TVm9Mb0dtd0VlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmNvbW1hbmQuZXh0cmFjdGVjbGFzc2hpZXJhcmNoeWFuZHRoZWlyY29udGVudHMiIGNvbW1hbmROYW1lPSJFeHRyYWN0IEVDbGFzcyBIaWVyYXJjaHkgQW5kIFRoZWlyIENvbnRlbnRzIiBjYXRlZ29yeT0iX3FLekdjR212RWVxbHlfalkzRkxueXciLz4KKyAgICA8ZWxlbWVudHMgeHNpOnR5cGU9ImNvbW1hbmRzOkNvbW1hbmQiIHhtaTppZD0iX1c0eG1zR213RWVxbHlfalkzRkxueXciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuY29tbWFuZC5leHRyYWN0ZWNsYXNzdW1sY29udGVudHMiIGNvbW1hbmROYW1lPSJFeHRyYWN0IEVDbGFzcyBVTUwgQ29udGVudHMiIGNhdGVnb3J5PSJfcUt6R2NHbXZFZXFseV9qWTNGTG55dyIvPgorICAgIDxlbGVtZW50cyB4c2k6dHlwZT0iY29tbWFuZHM6Q29tbWFuZCIgeG1pOmlkPSJfWnc5VXdHbXdFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5jb21tYW5kLmZyb21yZWZlcmVuY2UtZXh0cmFjdGVjbGFzc3VtbGNvbnRlbnRzIiBjb21tYW5kTmFtZT0iRnJvbSByZWZlcmVuY2UgLT4gRXh0cmFjdCBFQ2xhc3MgVU1MIENvbnRlbnRzIiBjYXRlZ29yeT0iX3FLekdjR212RWVxbHlfalkzRkxueXciLz4KKyAgICA8ZWxlbWVudHMgeHNpOnR5cGU9ImNvbW1hbmRzOkNvbW1hbmQiIHhtaTppZD0iX2RJa0p3R213RWVxbHlfalkzRkxueXciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuY29tbWFuZC5jb3B5Y29udGVudHNhbmRnZW5lcmF0ZWNzdiIgY29tbWFuZE5hbWU9IkNvcHkgQ29udGVudHMgYW5kIEdlbmVyYXRlIENTViIgY2F0ZWdvcnk9Il9xS3pHY0dtdkVlcWx5X2pZM0ZMbnl3Ii8+CisgIDwvZnJhZ21lbnRzPgorICA8ZnJhZ21lbnRzIHhzaTp0eXBlPSJmcmFnbWVudDpTdHJpbmdNb2RlbEZyYWdtZW50IiB4bWk6aWQ9Il9uZnZPWUdtdkVlcWx5X2pZM0ZMbnl3IiBmZWF0dXJlbmFtZT0iY2F0ZWdvcmllcyIgcGFyZW50RWxlbWVudElkPSJ4cGF0aDovIj4KKyAgICA8ZWxlbWVudHMgeHNpOnR5cGU9ImNvbW1hbmRzOkNhdGVnb3J5IiB4bWk6aWQ9Il9xS3pHY0dtdkVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmNhdGVnb3J5IiBuYW1lPSJFeHRyYWN0IEVjbGFzcyBSZWZlcmVuY2VzIi8+CisgIDwvZnJhZ21lbnRzPgorICA8ZnJhZ21lbnRzIHhzaTp0eXBlPSJmcmFnbWVudDpTdHJpbmdNb2RlbEZyYWdtZW50IiB4bWk6aWQ9Il9iUUZ2d0dteEVlcWx5X2pZM0ZMbnl3IiBmZWF0dXJlbmFtZT0iaGFuZGxlcnMiIHBhcmVudEVsZW1lbnRJZD0ieHBhdGg6LyI+CisgICAgPGVsZW1lbnRzIHhzaTp0eXBlPSJjb21tYW5kczpIYW5kbGVyIiB4bWk6aWQ9Il9jZWg0MEdteEVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXIuMCIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXJzLkVDbGFzc0hpZXJhcmNoeUhhbmRsZXIiIGNvbW1hbmQ9Il9obm05WUdtdkVlcWx5X2pZM0ZMbnl3Ii8+CisgICAgPGVsZW1lbnRzIHhzaTp0eXBlPSJjb21tYW5kczpIYW5kbGVyIiB4bWk6aWQ9Il9rVl9rVUdteEVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXIuMSIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXJzLkVPYmplY3RSZWZzSGFuZGxlciIgY29tbWFuZD0iXzFpdUE4R212RWVxbHlfalkzRkxueXciLz4KKyAgICA8ZWxlbWVudHMgeHNpOnR5cGU9ImNvbW1hbmRzOkhhbmRsZXIiIHhtaTppZD0iX3FnMEgwR214RWVxbHlfalkzRkxueXciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlci4yIiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnMuRUNsYXNzQWxsUmVmZXJlbmNlc0hhbmRsZXIiIGNvbW1hbmQ9Il9QOFJ1b0dtd0VlcWx5X2pZM0ZMbnl3Ii8+CisgICAgPGVsZW1lbnRzIHhzaTp0eXBlPSJjb21tYW5kczpIYW5kbGVyIiB4bWk6aWQ9Il91QldQVUdteEVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXIuMyIgY29udHJpYnV0aW9uVVJJPSJidW5kbGVjbGFzczovL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXJzLkVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlciIgY29tbWFuZD0iX1NWb0xvR213RWVxbHlfalkzRkxueXciLz4KKyAgICA8ZWxlbWVudHMgeHNpOnR5cGU9ImNvbW1hbmRzOkhhbmRsZXIiIHhtaTppZD0iX3lsUDRVR214RWVxbHlfalkzRkxueXciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlci40IiBjb250cmlidXRpb25VUkk9ImJ1bmRsZWNsYXNzOi8vb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnMuRUNsYXNzQ29udGVudHNIYW5kbGVyIiBjb21tYW5kPSJfVzR4bXNHbXdFZXFseV9qWTNGTG55dyIvPgorICAgIDxlbGVtZW50cyB4c2k6dHlwZT0iY29tbWFuZHM6SGFuZGxlciIgeG1pOmlkPSJfMTczMTRHbXhFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVyLjUiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVycy5FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VIYW5kbGVyIiBjb21tYW5kPSJfWnc5VXdHbXdFZXFseV9qWTNGTG55dyIvPgorICAgIDxlbGVtZW50cyB4c2k6dHlwZT0iY29tbWFuZHM6SGFuZGxlciIgeG1pOmlkPSJfNDNzdDBHbXhFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVyLjYiIGNvbnRyaWJ1dGlvblVSST0iYnVuZGxlY2xhc3M6Ly9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVycy5Db3B5Q29udGVudHNIYW5kbGVyIiBjb21tYW5kPSJfZElrSndHbXdFZXFseV9qWTNGTG55dyIvPgorICA8L2ZyYWdtZW50cz4KKyAgPGZyYWdtZW50cyB4c2k6dHlwZT0iZnJhZ21lbnQ6U3RyaW5nTW9kZWxGcmFnbWVudCIgeG1pOmlkPSJfVS1wS1lHbXlFZXFseV9qWTNGTG55dyIgZmVhdHVyZW5hbWU9Im1lbnVDb250cmlidXRpb25zIiBwYXJlbnRFbGVtZW50SWQ9InhwYXRoOi8iPgorICAgIDxlbGVtZW50cyB4c2k6dHlwZT0ibWVudTpNZW51Q29udHJpYnV0aW9uIiB4bWk6aWQ9Il9XUWdhNEdteUVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLm1lbnVjb250cmlidXRpb24uMCIgcG9zaXRpb25JblBhcmVudD0iYWZ0ZXI9YWRkaXRpb25zIiBwYXJlbnRJZD0icG9wdXAiPgorICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51Ok1lbnUiIHhtaTppZD0iX2Rkck1NR215RWVxbHlfalkzRkxueXciIGVsZW1lbnRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwubWVudSIgbGFiZWw9IkFQUDRNQyBFTUYgVXRpbHMiIG1uZW1vbmljcz0iIj4KKyAgICAgICAgPHZpc2libGVXaGVuIHhzaTp0eXBlPSJ1aTpDb3JlRXhwcmVzc2lvbiIgeG1pOmlkPSJfbjYtY0VHbXpFZXFseV9qWTNGTG55dyIgY29yZUV4cHJlc3Npb25JZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuZGVmaW5pdGlvbi5lY29yZSIvPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZE1lbnVJdGVtIiB4bWk6aWQ9Il9oSjYwY0dteUVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZWRtZW51aXRlbS5lY2xhc3NoaWVyYXJjaHkiIGxhYmVsPSJFQ2xhc3MgSGllcmFyY2h5IiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL2ljb25zL2tleWdyb3Vwc19vYmouZ2lmIiBtbmVtb25pY3M9IiIgY29tbWFuZD0iX2hubTlZR212RWVxbHlfalkzRkxueXciLz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRNZW51SXRlbSIgeG1pOmlkPSJfbjc0UWNHbXlFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVkbWVudWl0ZW0uZW9iamVjdHJlZnMiIGxhYmVsPSJFT2JqZWN0IFJlZnMiIGljb25VUkk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvc2FtcGxlLmdpZiIgY29tbWFuZD0iXzFpdUE4R212RWVxbHlfalkzRkxueXciLz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRNZW51SXRlbSIgeG1pOmlkPSJfdFlhS2tHbXlFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVkbWVudWl0ZW0uZWNsYXNzYWxscmVmZXJlbmNlcyIgbGFiZWw9IkVDbGFzcyBBbGwgUmVmZXJlbmNlcyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy90YWdfYmx1ZV9hZGQucG5nIiBjb21tYW5kPSJfUDhSdW9HbXdFZXFseV9qWTNGTG55dyIvPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZE1lbnVJdGVtIiB4bWk6aWQ9Il8wck5Dd0dteUVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZWRtZW51aXRlbS5lY2xhc3Njb250ZW50c2hpZXJhcmNoeSIgbGFiZWw9IkVDbGFzcyBDb250ZW50cyArIEhpZXJhcmNoeSIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9lbGVtZW50c19vYmouZ2lmIiBjb21tYW5kPSJfU1ZvTG9HbXdFZXFseV9qWTNGTG55dyIvPgorICAgICAgICA8Y2hpbGRyZW4geHNpOnR5cGU9Im1lbnU6SGFuZGxlZE1lbnVJdGVtIiB4bWk6aWQ9Il84WG9pOEdteUVlcWx5X2pZM0ZMbnl3IiBlbGVtZW50SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZWRtZW51aXRlbS5lY2xhc3Njb250ZW50cyIgbGFiZWw9IkVDbGFzcyBDb250ZW50cyIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9wcm9wX3BzLmdpZiIgY29tbWFuZD0iX1c0eG1zR213RWVxbHlfalkzRkxueXciLz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRNZW51SXRlbSIgeG1pOmlkPSJfX2c2QkFHbXlFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVkbWVudWl0ZW0uZWNsYXNzY29udGVudHNmcm9tcmVmZXJlbmNlIiBsYWJlbD0iRUNsYXNzIENvbnRlbnRzIGZyb20gUmVmZXJlbmNlIiBpY29uVVJJPSJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL2ljb25zL2RyaXZlX2dvLnBuZyIgY29tbWFuZD0iX1p3OVV3R213RWVxbHlfalkzRkxueXciLz4KKyAgICAgICAgPGNoaWxkcmVuIHhzaTp0eXBlPSJtZW51OkhhbmRsZWRNZW51SXRlbSIgeG1pOmlkPSJfSHZEdU1HbXpFZXFseV9qWTNGTG55dyIgZWxlbWVudElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVkbWVudWl0ZW0uY29weWNvbnRlbnRzY29tbWFuZCIgbGFiZWw9IkNvcHkgQ29udGVudHMgQ29tbWFuZCIgaWNvblVSST0icGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9rZXlncm91cHNfb2JqLmdpZiIgY29tbWFuZD0iX2RJa0p3R213RWVxbHlfalkzRkxueXciLz4KKyAgICAgIDwvY2hpbGRyZW4+CisgICAgPC9lbGVtZW50cz4KKyAgPC9mcmFnbWVudHM+Cis8L2ZyYWdtZW50Ok1vZGVsRnJhZ21lbnRzPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9pY29ucy9kcml2ZV9nby5wbmcgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvZHJpdmVfZ28ucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL2RyaXZlX2dvLnBuZwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL2ljb25zL2RyaXZlX2dvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL2VsZW1lbnRzX29iai5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvZWxlbWVudHNfb2JqLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9pY29ucy9lbGVtZW50c19vYmouZ2lmCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvZWxlbWVudHNfb2JqLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL2ZpbGVuYXZfbmF2LmdpZiBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9maWxlbmF2X25hdi5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvaWNvbnMvZmlsZW5hdl9uYXYuZ2lmCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvZmlsZW5hdl9uYXYuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvaWNvbnMva2V5Z3JvdXBzX29iai5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMva2V5Z3JvdXBzX29iai5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvaWNvbnMva2V5Z3JvdXBzX29iai5naWYKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9rZXlncm91cHNfb2JqLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9wcm9wX3BzLmdpZiBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9wcm9wX3BzLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL3Byb3BfcHMuZ2lmCmNvcHkgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL2ljb25zL3Byb3BfcHMuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL3NhbXBsZS5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvc2FtcGxlLmdpZgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL2ljb25zL3NhbXBsZS5naWYKY29weSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvc2FtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9pY29ucy9zdXBlcl9jby5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvc3VwZXJfY28uZ2lmCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvaWNvbnMvc3VwZXJfY28uZ2lmCmNvcHkgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL2ljb25zL3N1cGVyX2NvLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvc3luY2VkLnBuZyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy9zeW5jZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjMwZmMKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvc3luY2VkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL3RhZ19ibHVlX2FkZC5wbmcgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvdGFnX2JsdWVfYWRkLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9pY29ucy90YWdfYmx1ZV9hZGQucG5nCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvdGFnX2JsdWVfYWRkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvdGFyZ2V0aW50ZXJuYWxfb2JqLnBuZyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9pY29ucy90YXJnZXRpbnRlcm5hbF9vYmoucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNDgzYzEKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvaWNvbnMvdGFyZ2V0aW50ZXJuYWxfb2JqLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvcGx1Z2luLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9wbHVnaW4ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMjg0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvcGx1Z2luLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHBsdWdpbj4KKworICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+CisgICAgICA8cGFnZQorICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnByZWZlcmVuY2VzLkFtYWx0aGVhR3JhcGhpY2FsUmVwcmVzZW50YXRpb25QcmVmZXJlbmNlUGFnZSIKKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5wcmVmZXJlbmNlcy5BbWFsdGhlYVByZWZlcmVuY2VQYWdlIgorICAgICAgICAgICAgbmFtZT0iQU1BTFRIRUEgR3JhcGhpY2FsIFJlcHJlc2VudGF0aW9uIj4KKyAgICAgIDwvcGFnZT4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcyI+CisgICAgICA8aW5pdGlhbGl6ZXIKKyAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlSW5pdGlhbGl6ZXIiPgorICAgICAgPC9pbml0aWFsaXplcj4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBlcnNwZWN0aXZlRXh0ZW5zaW9ucyI+CisgICAgICA8cGVyc3BlY3RpdmVFeHRlbnNpb24KKyAgICAgICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlIj4KKyAgICAgICAgIDx2aWV3CisgICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudmlld3MuRGlhZ3JhbVZpZXciCisgICAgICAgICAgICAgICByYXRpbz0iMC41IgorICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwPSJyaWdodCIKKyAgICAgICAgICAgICAgIHJlbGF0aXZlPSJvcmcuZWNsaXBzZS51aS52aWV3cy5Qcm9ibGVtVmlldyI+CisgICAgICAgICA8L3ZpZXc+CisgICAgICA8L3BlcnNwZWN0aXZlRXh0ZW5zaW9uPgorICAgPC9leHRlbnNpb24+CisgICA8ZXh0ZW5zaW9uCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuZnJhZ21lbnQiCisgICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UuZTQud29ya2JlbmNoLm1vZGVsIj4KKyAgICAgIDxmcmFnbWVudAorICAgICAgICAgICAgdXJpPSJmcmFnbWVudC5lNHhtaSIKKyAgICAgICAgICAgIGFwcGx5PSJhbHdheXMiPgorICAgICAgPC9mcmFnbWVudD4KKyAgIDwvZXh0ZW5zaW9uPgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUuZXhwcmVzc2lvbnMuZGVmaW5pdGlvbnMiPgorICAgICAgPGRlZmluaXRpb24KKyAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5kZWZpbml0aW9uLmVjb3JlIj4KKyAgICAgICAgICAgPHdpdGgKKyAgICAgICAgICAgICAgICAgdmFyaWFibGU9ImFjdGl2ZU1lbnVTZWxlY3Rpb24iPgorICAgICAgICAgICAgICA8aXRlcmF0ZT4KKyAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKKyAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ij4KKyAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgorICAgICAgICAgICAgICA8L2l0ZXJhdGU+CisgICAgICAgICAgIDwvd2l0aD4KKyAgICAgIDwvZGVmaW5pdGlvbj4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9BY3RpdmF0b3IuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvQWN0aXZhdG9yLmphdmEKc2ltaWxhcml0eSBpbmRleCA4NiUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9BY3RpdmF0b3IuamF2YQpjb3B5IHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvQWN0aXZhdG9yLmphdmEKaW5kZXggYzg2YjkyNC4uNTRmZjBmOCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL0FjdGl2YXRvci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvQWN0aXZhdG9yLmphdmEKQEAgLTEsNiArMSw2IEBACi0gLyoqCisvKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtMTIsNyArMTIsOCBAQAogICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3I7CisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWw7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKIGltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKQEAgLTIzLDcgKzI0LDcgQEAKIHB1YmxpYyBjbGFzcyBBY3RpdmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKIAogCS8vIFRoZSBwbHVnLWluIElECi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3RvciI7IC8vJE5PTi1OTFMtMSQKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwiOyAvLyROT04tTkxTLTEkCiAKIAkvLyBUaGUgc2hhcmVkIGluc3RhbmNlCiAJcHJpdmF0ZSBzdGF0aWMgQWN0aXZhdG9yIHBsdWdpbjsKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWQzNjkxCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9BYnN0cmFjdFBsYW50VU1MQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMzE3IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVyczsKKworaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OworaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRW51bTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUVudW1MaXRlcmFsOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOworCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIgeworCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdE1hcDsKKwlwcml2YXRlIE1hcDxPYmplY3QsIFN0cmluZz4gb2JqZWN0MklkTWFwOworCXByaXZhdGUgU2V0PE9iamVjdD4gbm9kZXM7CisJcHJpdmF0ZSBTZXQ8U3RyaW5nPiBjb25uZWN0aW9uczsKKworCXB1YmxpYyBCdWlsZGVyUmVzdWx0IGdlbmVyYXRlUGxhbnRVTUwoT2JqZWN0IHNlbGVjdGVkT2JqZWN0KSB7CisJCWlmIChzZWxlY3RlZE9iamVjdCBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJcmV0dXJuIGdlbmVyYXRlUGxhbnRVTUwoKEVDbGFzcykgc2VsZWN0ZWRPYmplY3QpOworCQl9IGVsc2UgaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuIGdlbmVyYXRlUGxhbnRVTUwoKEVPYmplY3QpIHNlbGVjdGVkT2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisJCisJcHVibGljIGFic3RyYWN0IEJ1aWxkZXJSZXN1bHQgZ2VuZXJhdGVQbGFudFVNTChFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcyk7CisJCisJcHVibGljIGFic3RyYWN0IEJ1aWxkZXJSZXN1bHQgZ2VuZXJhdGVQbGFudFVNTChFT2JqZWN0IGVPYmplY3QpOworCQorCXByb3RlY3RlZCB2b2lkIHJlc2V0Q2FjaGVzKCkgeworCQlpZDJPYmplY3RNYXAgPSBudWxsOworCQlvYmplY3QySWRNYXAgPSBudWxsOworCQlub2RlcyA9IG51bGw7CisJCWNvbm5lY3Rpb25zID0gbnVsbDsKKwl9CisKKwlwcm90ZWN0ZWQgTWFwPFN0cmluZywgT2JqZWN0PiBnZXRJZDJPYmplY3RNYXAoKSB7CisJCWlmIChpZDJPYmplY3RNYXAgPT0gbnVsbCkgeworCQkJaWQyT2JqZWN0TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCk7CisJCX0KKwkJcmV0dXJuIGlkMk9iamVjdE1hcDsKKwl9CisKKwlwcm90ZWN0ZWQgTWFwPE9iamVjdCwgU3RyaW5nPiBnZXRPYmplY3QySWRNYXAoKSB7CisJCWlmIChvYmplY3QySWRNYXAgPT0gbnVsbCkgeworCQkJb2JqZWN0MklkTWFwID0gbmV3IEhhc2hNYXA8T2JqZWN0LCBTdHJpbmc+KCk7CisJCX0KKwkJcmV0dXJuIG9iamVjdDJJZE1hcDsKKwl9CisKKwlwcm90ZWN0ZWQgU3RyaW5nIGdldElkRm9yT2JqZWN0KE9iamVjdCBvYmopIHsKKwkJaWYgKGdldE9iamVjdDJJZE1hcCgpLmNvbnRhaW5zS2V5KG9iaikpIHsKKwkJCXJldHVybiBnZXRPYmplY3QySWRNYXAoKS5nZXQob2JqKTsKKwkJfQorCisJCS8vIGNyZWF0ZSBuZXcgVVVJRAorCQlmaW5hbCBTdHJpbmcgdXVpZCA9IEVjb3JlVXRpbC5nZW5lcmF0ZVVVSUQoKTsKKwkJZ2V0SWQyT2JqZWN0TWFwKCkucHV0KHV1aWQsIG9iaik7CisJCWdldE9iamVjdDJJZE1hcCgpLnB1dChvYmosIHV1aWQpOworCisJCXJldHVybiB1dWlkOworCX0KKworCXByb3RlY3RlZCBTZXQ8T2JqZWN0PiBnZXROb2RlcygpIHsKKwkJaWYgKG5vZGVzID09IG51bGwpIHsKKwkJCW5vZGVzID0gbmV3IEhhc2hTZXQ8T2JqZWN0PigpOworCQl9CisJCXJldHVybiBub2RlczsKKwl9CisKKwlwcm90ZWN0ZWQgU2V0PFN0cmluZz4gZ2V0Q29ubmVjdGlvbnMoKSB7CisJCWlmIChjb25uZWN0aW9ucyA9PSBudWxsKSB7CisJCQljb25uZWN0aW9ucyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKKwkJfQorCQlyZXR1cm4gY29ubmVjdGlvbnM7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgYWRkTm9kZShPYmplY3Qgb2JqKSB7CisJCWdldE5vZGVzKCkuYWRkKG9iaik7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgYWRkQ29ubmVjdGlvbihTdHJpbmcgc3RyKSB7CisJCWdldENvbm5lY3Rpb25zKCkuYWRkKHN0cik7CisJfQorCisJcHJvdGVjdGVkIFN0cmluZyB0aW1lc3RhbXAoKSB7CisJCWZpbmFsIERhdGVGb3JtYXQgZGF0ZUZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRkIEhIOm1tOnNzOlNTUyIpOworCQlyZXR1cm4gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSk7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgYXBwZW5kU2tpblBhcmFtcyhmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sKSB7CisJCXBsYW50dW1sLmFwcGVuZCgic2tpbnBhcmFtIGNsYXNzIHsiKTsKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbiAgQmFja2dyb3VuZENvbG9yIFBhbGVHcmVlbiIpOworCQlwbGFudHVtbC5hcHBlbmQoIlxuICBBcnJvd0NvbG9yIFNlYUdyZWVuIik7CisJCXBsYW50dW1sLmFwcGVuZCgiXG4gIEJvcmRlckNvbG9yIFNwcmluZ0dyZWVuIik7CisJCXBsYW50dW1sLmFwcGVuZCgiXG4gIEJhY2tncm91bmRDb2xvcjw8SD4+IFdoZWF0Iik7CisJCXBsYW50dW1sLmFwcGVuZCgiXG4gIEJvcmRlckNvbG9yPDxIPj4gVG9tYXRvIik7CisJCQorCQlwbGFudHVtbC5hcHBlbmQoIlxuICBCYWNrZ3JvdW5kQ29sb3I8PFNlbGVjdGVkRWxlbWVudD4+IERhcmtPcmFuZ2UgIik7CisJCXBsYW50dW1sLmFwcGVuZCgiXG4gIEJvcmRlckNvbG9yPDxTZWxlY3RlZEVsZW1lbnQ+PiBUb21hdG8iKTsKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbn0iKTsKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbnNraW5wYXJhbSBzdGVyZW90eXBlQ0JhY2tncm91bmRDb2xvciBZZWxsb3dHcmVlbiIpOworCQlwbGFudHVtbC5hcHBlbmQoIlxuc2tpbnBhcmFtIHN0ZXJlb3R5cGVDQmFja2dyb3VuZENvbG9yPDxIPj4gRGltR3JheSIpOworCQlwbGFudHVtbC5hcHBlbmQoIlxuIik7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgYXBwZW5kSW5oZXJpdGFuY2UoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRUNsYXNzIHN1cGVyQ2xhc3MsIGZpbmFsIEVDbGFzcyBzdWJDbGFzcywgZmluYWwgU3RyaW5nIGNvbG9yKSB7CisJCQorCQlTdHJpbmcgY29ubmVjdG9yID0gc3VwZXJDbGFzcy5nZXROYW1lKCkgKyAiIDx8LS0gIiArIHN1YkNsYXNzLmdldE5hbWUoKTsKKwkJU3RyaW5nIHN0eWxlID0gKGNvbG9yICE9IG51bGwgJiYgY29sb3IubGVuZ3RoKCkgPiAwKSA/ICgiICAiICsgY29sb3IpIDogIiI7CisJCQorCQlhcHBlbmRDb25uZWN0aW9uKHBsYW50dW1sLCBjb25uZWN0b3IsIHN0eWxlKTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBhcHBlbmRBc0NvbnRhaW5tZW50KGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlKSB7CisJCWZpbmFsIEVDbGFzcyBzb3VyY2UgPSBmZWF0dXJlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKKwkJZmluYWwgRUNsYXNzaWZpZXIgdGFyZ2V0ID0gZmVhdHVyZS5nZXRFVHlwZSgpOworCisJCWFwcGVuZEFzQ29udGFpbm1lbnQocGxhbnR1bWwsIGZlYXR1cmUsIHNvdXJjZSwgdGFyZ2V0KTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBhcHBlbmRBc0NvbnRhaW5tZW50KGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBmZWF0dXJlLCBmaW5hbCBFQ2xhc3Mgc291cmNlLCBmaW5hbCBFQ2xhc3NpZmllciB0YXJnZXQpIHsKKwkJCisJCWZpbmFsIFN0cmluZyBjYXJkaW5hbGl0eSA9IGZlYXR1cmUuaXNNYW55KCkgPyAiICgwLSopICIgOiAiIjsKKwkJZmluYWwgU3RyaW5nIHJlZk5hbWUgPSBmZWF0dXJlLmdldE5hbWUoKTsKKwkJCisJCVN0cmluZyBjb25uZWN0b3IgPSBzb3VyY2UuZ2V0TmFtZSgpICsgIiAqLS0+ICIgKyB0YXJnZXQuZ2V0TmFtZSgpICsgIiA6ICIgICsgcmVmTmFtZSArIGNhcmRpbmFsaXR5OworCQkKKwkJYXBwZW5kQ29ubmVjdGlvbihwbGFudHVtbCwgY29ubmVjdG9yLCAiIik7CisJfQorCisJcHJvdGVjdGVkIHZvaWQgYXBwZW5kUmVmZXJlbmNlKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVSZWZlcmVuY2UgcmVmZXJlbmNlKSB7CisJCWZpbmFsIEVDbGFzcyBzb3VyY2UgPSByZWZlcmVuY2UuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOworCQlmaW5hbCBFQ2xhc3MgdGFyZ2V0ID0gKEVDbGFzcykgcmVmZXJlbmNlLmdldEVUeXBlKCk7CisKKwkJYXBwZW5kUmVmZXJlbmNlKHBsYW50dW1sLCByZWZlcmVuY2UsIHNvdXJjZSwgdGFyZ2V0KTsKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBhcHBlbmRSZWZlcmVuY2UoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRVJlZmVyZW5jZSByZWYsIGZpbmFsIEVDbGFzcyBzb3VyY2UsIGZpbmFsIEVDbGFzcyB0YXJnZXQpIHsKKwkJCisJCWZpbmFsIFN0cmluZyByZWxhdGlvbiA9IHJlZi5pc0NvbnRhaW5tZW50KCkgPyAiICotLT4gIiA6ICIgLS0+ICI7CisJCWZpbmFsIFN0cmluZyBsb3dlckJvdW5kID0gcmVmLmdldExvd2VyQm91bmQoKSA9PSAtMSA/ICIqIiA6IEludGVnZXIudG9TdHJpbmcocmVmLmdldExvd2VyQm91bmQoKSk7CisJCWZpbmFsIFN0cmluZyB1cHBlckJvdW5kID0gcmVmLmdldFVwcGVyQm91bmQoKSA9PSAtMSA/ICIqIiA6IEludGVnZXIudG9TdHJpbmcocmVmLmdldFVwcGVyQm91bmQoKSk7CisJCWZpbmFsIFN0cmluZyBjYXJkaW5hbGl0eSA9ICIgWyIgKyBsb3dlckJvdW5kICsgIjoiICsgdXBwZXJCb3VuZCArICJdIjsKKwkJZmluYWwgU3RyaW5nIHJlZk5hbWUgPSByZWYuZ2V0TmFtZSgpOworCQorCQlTdHJpbmcgY29ubmVjdG9yID0gc291cmNlLmdldE5hbWUoKSArIHJlbGF0aW9uICsgdGFyZ2V0LmdldE5hbWUoKSArICIgOiAiKyByZWZOYW1lICsgY2FyZGluYWxpdHkgOworCQkKKwkJYXBwZW5kQ29ubmVjdGlvbihwbGFudHVtbCwgY29ubmVjdG9yLCAiIik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGFwcGVuZENvbm5lY3Rpb24oZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgU3RyaW5nIGNvbm5lY3Rpb24sIFN0cmluZyBzdHlsZSkgeworCQkKKwkJaWYgKCFnZXRDb25uZWN0aW9ucygpLmNvbnRhaW5zKGNvbm5lY3Rpb24pKSB7CisJCQlhZGRDb25uZWN0aW9uKGNvbm5lY3Rpb24pOyAvLyBtYXJrIGFzIGNyZWF0ZWQKKwkJCQorCQkJcGxhbnR1bWwuYXBwZW5kKGNvbm5lY3Rpb24gKyBzdHlsZSk7CisJCQlwbGFudHVtbC5hcHBlbmQoIlxuIik7CisJCX0KKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBhcHBlbmRDbGFzc2lmaWVyKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyLCBmaW5hbCBib29sZWFuIHdpdGhVVUlEKSB7CisKKwkJaWYgKCFnZXROb2RlcygpLmNvbnRhaW5zKGVDbGFzc2lmaWVyKSkgeworCQkJYWRkTm9kZShlQ2xhc3NpZmllcik7IC8vIG1hcmsgYXMgY3JlYXRlZAorCQkJCisJCQlwbGFudHVtbC5hcHBlbmQoImNsYXNzIFwiIiArIGVDbGFzc2lmaWVyLmdldE5hbWUoKSArICJcIiIpOworCQkJCisJCQlpZiAod2l0aFVVSUQpIHsKKwkJCQlmaW5hbCBTdHJpbmcgdXVpZCA9IGdldElkRm9yT2JqZWN0KGVDbGFzc2lmaWVyKTsKKwkJCQlwbGFudHVtbC5hcHBlbmQoIiBbWyIgKyB1dWlkICsgIl1dIik7CisJCQl9CisKKwkJCXBsYW50dW1sLmFwcGVuZCgiXG4iKTsKKwkJfQorCX0KKworCXByb3RlY3RlZCB2b2lkIGFwcGVuZEVudW0oZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRUVudW0gZUVudW0pIHsKKworCQlpZiAoIWdldE5vZGVzKCkuY29udGFpbnMoZUVudW0pKSB7CisJCQlhZGROb2RlKGVFbnVtKTsgLy8gbWFyayBhcyBjcmVhdGVkCisJCQkKKwkJCXBsYW50dW1sLmFwcGVuZCgiZW51bSBcIiIgKyBlRW51bS5nZXROYW1lKCkgKyAiXCIiKTsKKwkJCXBsYW50dW1sLmFwcGVuZCgiIHsiKTsKKworCQkJZm9yIChmaW5hbCBFRW51bUxpdGVyYWwgbGl0ZXJhbCA6IGVFbnVtLmdldEVMaXRlcmFscygpKSB7CisKKwkJCQlwbGFudHVtbC5hcHBlbmQoIlxuICAiKTsKKwkJCQlwbGFudHVtbC5hcHBlbmQobGl0ZXJhbC5nZXROYW1lKCkpOworCQkJfQorCisJCQlwbGFudHVtbC5hcHBlbmQoIlxufVxuIik7CisJCX0KKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBhcHBlbmREYXRhVHlwZShmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sLCBmaW5hbCBFRGF0YVR5cGUgZURhdGFUeXBlKSB7CisKKwl9CisKKwlwcm90ZWN0ZWQgdm9pZCBhcHBlbmRDbGFzcyhmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sLCBmaW5hbCBFQ2xhc3MgZUNsYXNzLCBmaW5hbCBTdHJpbmcgc3RlcmVvVHlwZSwKKwkJCWZpbmFsIGJvb2xlYW4gd2l0aFVVSUQsIGZpbmFsIEVMaXN0PEVBdHRyaWJ1dGU+IGF0dHJpYnV0ZXMsIGZpbmFsIEVMaXN0PEVSZWZlcmVuY2U+IHJlZmVyZW5jZXMpIHsKKworCQlpZiAoIWdldE5vZGVzKCkuY29udGFpbnMoZUNsYXNzKSkgeworCQkJYWRkTm9kZShlQ2xhc3MpOyAvLyBtYXJrIGFzIGNyZWF0ZWQKKwkJCQorCQkJYXBwZW5kQ2xhc3NIZWFkZXIocGxhbnR1bWwsIGVDbGFzcywgc3RlcmVvVHlwZSwgd2l0aFVVSUQpOworCQkJCisJCQlib29sZWFuIHdpdGhBdHRyaWJ1dGVzID0gYXR0cmlidXRlcyAhPSBudWxsICYmIGF0dHJpYnV0ZXMuaXNFbXB0eSgpID09IGZhbHNlOworCQkJYm9vbGVhbiB3aXRoUmVmZXJlbmNlcyA9IHJlZmVyZW5jZXMgIT0gbnVsbCAmJiByZWZlcmVuY2VzLmlzRW1wdHkoKSA9PSBmYWxzZTsKKwkJCQkJCisJCQlpZiAod2l0aEF0dHJpYnV0ZXMgfHwgd2l0aFJlZmVyZW5jZXMpIHsKKwkJCQlwbGFudHVtbC5hcHBlbmQoIiB7Iik7CisJCQkJCisJCQkJaWYgKHdpdGhBdHRyaWJ1dGVzKSB7CisJCQkJCWFwcGVuZENsYXNzQXR0cmlidXRlcyhwbGFudHVtbCwgZUNsYXNzLCBhdHRyaWJ1dGVzKTsJCQkKKwkJCQl9CisJCQkJCisJCQkJaWYgKHdpdGhSZWZlcmVuY2VzKSB7CisJCQkJCWFwcGVuZENsYXNzUmVmZXJlbmNlcyhwbGFudHVtbCwgZUNsYXNzLCByZWZlcmVuY2VzKTsJCQkKKwkJCQl9CisJCQkJCisJCQkJcGxhbnR1bWwuYXBwZW5kKCJcbn0iKTsKKwkJCX0KKwkJCQorCQkJcGxhbnR1bWwuYXBwZW5kKCJcbiIpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGFwcGVuZENsYXNzSGVhZGVyKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVDbGFzcyBlQ2xhc3MsIGZpbmFsIFN0cmluZyBzdGVyZW9UeXBlLCBmaW5hbCBib29sZWFuIHdpdGhVVUlEKSB7CisKKwkJaWYgKGVDbGFzcy5pc0Fic3RyYWN0KCkgJiYgZUNsYXNzLmlzSW50ZXJmYWNlKCkpIHsKKwkJCXBsYW50dW1sLmFwcGVuZCgiaW50ZXJmYWNlIFwiIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKKwkJfSBlbHNlIGlmIChlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7CisJCQlwbGFudHVtbC5hcHBlbmQoImFic3RyYWN0IFwiIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKKwkJfSBlbHNlIGlmIChlQ2xhc3MuaXNJbnRlcmZhY2UoKSkgeworCQkJcGxhbnR1bWwuYXBwZW5kKCJpbnRlcmZhY2UgXCIiICsgZUNsYXNzLmdldE5hbWUoKSArICJcIiIpOworCQl9IGVsc2UgeworCQkJcGxhbnR1bWwuYXBwZW5kKCJjbGFzcyBcIiIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7CisJCX0KKworCQlpZiAoc3RlcmVvVHlwZSAhPSBudWxsKSB7CisJCQlwbGFudHVtbC5hcHBlbmQoIjw8IiArIHN0ZXJlb1R5cGUgKyAiPj4iKTsKKwkJfQorCisJCWlmICh3aXRoVVVJRCkgeworCQkJZmluYWwgU3RyaW5nIHV1aWQgPSBnZXRJZEZvck9iamVjdChlQ2xhc3MpOworCQkJcGxhbnR1bWwuYXBwZW5kKCIgW1siICsgdXVpZCArICJdXSIpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGFwcGVuZENsYXNzQXR0cmlidXRlcyhmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sLCBmaW5hbCBFQ2xhc3MgZUNsYXNzLCBFTGlzdDxFQXR0cmlidXRlPiBhdHRyaWJ1dGVMaXN0KSB7CisJCQorCQkvKiBsaXN0aW5nIGF0dHJpYnV0ZXMgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpYyBFTUYgZWxlbWVudCAqLworCQkKKwkJZm9yIChmaW5hbCBFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUxpc3QpIHsKKworCQkJcGxhbnR1bWwuYXBwZW5kKCJcbiAgIik7CisKKwkJCWZpbmFsIFN0cmluZyBsb3dlckJvdW5kID0gYXR0cmlidXRlLmdldExvd2VyQm91bmQoKSA9PSAtMSA/ICIqIiA6IGF0dHJpYnV0ZS5nZXRMb3dlckJvdW5kKCkgKyAiIjsKKwkJCWZpbmFsIFN0cmluZyB1cHBlckJvdW5kID0gYXR0cmlidXRlLmdldFVwcGVyQm91bmQoKSA9PSAtMSA/ICIqIiA6IGF0dHJpYnV0ZS5nZXRVcHBlckJvdW5kKCkgKyAiIjsKKworCQkJcGxhbnR1bWwuYXBwZW5kKAorCQkJCQlhdHRyaWJ1dGUuZ2V0RVR5cGUoKS5nZXROYW1lKCkgKyAiICIKKwkJCQkJKyBhdHRyaWJ1dGUuZ2V0TmFtZSgpCisJCQkJCSsgIiBbIiArIGxvd2VyQm91bmQgKyAiOiIgKyB1cHBlckJvdW5kICsgIl0iKTsKKwkJfQorCX0KKwkKKwlwcml2YXRlIHZvaWQgYXBwZW5kQ2xhc3NSZWZlcmVuY2VzKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVDbGFzcyBlQ2xhc3MsIEVMaXN0PEVSZWZlcmVuY2U+IHJlZmVyZW5jZUxpc3QpIHsKKworCQkvKiBsaXN0aW5nIHJlZmVyZW5jZXMgYmVsb25naW5nIHRvIHRoZSBzcGVjaWZpYyBFTUYgZWxlbWVudCAqLworCisJCWZvciAoZmluYWwgRVJlZmVyZW5jZSByZWZlcmVuY2UgOiByZWZlcmVuY2VMaXN0KSB7CisJCQkKKwkJCQlwbGFudHVtbC5hcHBlbmQoIlxuICAiKTsKKworCQkJCWZpbmFsIFN0cmluZyBsb3dlckJvdW5kID0gcmVmZXJlbmNlLmdldExvd2VyQm91bmQoKSA9PSAtMSA/ICIqIiA6IHJlZmVyZW5jZS5nZXRMb3dlckJvdW5kKCkgKyAiIjsKKwkJCQlmaW5hbCBTdHJpbmcgdXBwZXJCb3VuZCA9IHJlZmVyZW5jZS5nZXRVcHBlckJvdW5kKCkgPT0gLTEgPyAiKiIgOiByZWZlcmVuY2UuZ2V0VXBwZXJCb3VuZCgpICsgIiI7CisKKwkJCQlwbGFudHVtbC5hcHBlbmQoCisJCQkJCQlyZWZlcmVuY2UuZ2V0RVR5cGUoKS5nZXROYW1lKCkgKyAiICIKKwkJCQkJCSsgcmVmZXJlbmNlLmdldE5hbWUoKQorCQkJCQkJKyAiIFsiICsgbG93ZXJCb3VuZCArICI6IiArIHVwcGVyQm91bmQgKyAiXSIpOworCQl9CisJfQorCit9CisKKwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9CdWlsZGVyUmVzdWx0LmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2J1aWxkZXJzL0J1aWxkZXJSZXN1bHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWUwOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9CdWlsZGVyUmVzdWx0LmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuYnVpbGRlcnM7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitwdWJsaWMgY2xhc3MgQnVpbGRlclJlc3VsdCB7CisJCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdDsKKwlwcml2YXRlIFN0cmluZyBwbGFudFVNTDsKKworCXB1YmxpYyBCdWlsZGVyUmVzdWx0KE1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0TWFwLCBTdHJpbmcgcGxhbnRVTUxUZXh0KSB7CisJCXRoaXMuaWQyT2JqZWN0ID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+KCk7CisJCWlmIChpZDJPYmplY3RNYXAgIT0gbnVsbCAmJiAhaWQyT2JqZWN0TWFwLmlzRW1wdHkoKSkgeworCQkJaWQyT2JqZWN0LnB1dEFsbChpZDJPYmplY3RNYXApOworCQl9CisJCXRoaXMucGxhbnRVTUwgPSBwbGFudFVNTFRleHQ7CisJfQorCisJcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0SWQyT2JqZWN0TWFwKCkgeworCQlyZXR1cm4gaWQyT2JqZWN0OworCX0KKworCXB1YmxpYyBTdHJpbmcgZ2V0UGxhbnRVTUxUZXh0KCkgeworCQlyZXR1cm4gcGxhbnRVTUw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9CdWlsZGVyVXRpbC5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9CdWlsZGVyVXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzRkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2J1aWxkZXJzL0J1aWxkZXJVdGlsLmphdmEKQEAgLTAsMCArMSw2OSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuYnVpbGRlcnM7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKKworcHVibGljIGNsYXNzIEJ1aWxkZXJVdGlsIHsKKworCXB1YmxpYyBzdGF0aWMgU2V0PEVDbGFzcz4gZ2V0U3ViQ2xhc3NlcyhmaW5hbCBFQ2xhc3MgZUNsYXNzKSB7CisKKwkJZmluYWwgU2V0PEVDbGFzcz4gYWxsU3ViQ2xhc3NlcyA9IG5ldyBIYXNoU2V0PEVDbGFzcz4oKTsKKworCQlmaW5hbCBSZXNvdXJjZSBlUmVzb3VyY2UgPSBlQ2xhc3MuZVJlc291cmNlKCk7CisJCWlmIChlUmVzb3VyY2UgIT0gbnVsbCAmJiBlUmVzb3VyY2UuZ2V0UmVzb3VyY2VTZXQoKSAhPSBudWxsKSB7CisKKwkJCS8vIEZpbmQgdGhlIHN1YmNsYXNzZXMgZm9yIHRoZSBzdXBwbGllZCBFQ2xhc3MgaW4gYWxsIHRoZSBwYWNrYWdlcyBiZWxvbmdpbmcgdG8gdGhlIHJlc291cmNlIHNldAorCisJCQlmb3IgKGZpbmFsIFJlc291cmNlIHJlc291cmNlIDogZVJlc291cmNlLmdldFJlc291cmNlU2V0KCkuZ2V0UmVzb3VyY2VzKCkpIHsKKwkJCQlmb3IgKEVPYmplY3QgZU9iaiA6IHJlc291cmNlLmdldENvbnRlbnRzKCkpIHsKKwkJCQkJaWYgKGVPYmogaW5zdGFuY2VvZiBFUGFja2FnZSkgeworCQkJCQkJYWxsU3ViQ2xhc3Nlcy5hZGRBbGwoZ2V0U3ViQ2xhc3NlcyhlQ2xhc3MsIChFUGFja2FnZSkgZU9iaikpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0gZWxzZSB7CisKKwkJCXJldHVybiBnZXRTdWJDbGFzc2VzKGVDbGFzcywgZUNsYXNzLmdldEVQYWNrYWdlKCkpOworCQl9CisKKwkJcmV0dXJuIGFsbFN1YkNsYXNzZXM7CisJfQorCisJcHVibGljIHN0YXRpYyBTZXQ8RUNsYXNzPiBnZXRTdWJDbGFzc2VzKGZpbmFsIEVDbGFzcyBlQ2xhc3MsIGZpbmFsIEVQYWNrYWdlIGVQYWNrYWdlKSB7CisJCWZpbmFsIFNldDxFQ2xhc3M+IGFsbFN1YkNsYXNzZXMgPSBuZXcgSGFzaFNldDxFQ2xhc3M+KCk7CisKKwkJZm9yIChmaW5hbCBFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGVQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpKSB7CisKKwkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgeworCisJCQkJaWYgKCEoZUNsYXNzID09IGVDbGFzc2lmaWVyKSAmJiBlQ2xhc3MuaXNTdXBlclR5cGVPZigoRUNsYXNzKSBlQ2xhc3NpZmllcikpIHsKKwkJCQkJYWxsU3ViQ2xhc3Nlcy5hZGQoKEVDbGFzcykgZUNsYXNzaWZpZXIpOworCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gYWxsU3ViQ2xhc3NlczsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvRUNsYXNzQWxsUmVmZXJlbmNlc0J1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvRUNsYXNzQWxsUmVmZXJlbmNlc0J1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDgwYWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9FQ2xhc3NBbGxSZWZlcmVuY2VzQnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMjA2IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKKyAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIAorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmc7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZVNldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CisKK3B1YmxpYyBjbGFzcyBFQ2xhc3NBbGxSZWZlcmVuY2VzQnVpbGRlciBleHRlbmRzIEFic3RyYWN0UGxhbnRVTUxCdWlsZGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBCdWlsZGVyUmVzdWx0IGdlbmVyYXRlUGxhbnRVTUwoZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKKworCQlyZXNldENhY2hlcygpOworCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisJCXBsYW50dW1sLmFwcGVuZCgiQHN0YXJ0dW1sXG5cbiIpOworCQkKKwkJcGxhbnR1bWwuYXBwZW5kKCInIENyZWF0ZWQgYnkgRUNsYXNzQWxsUmVmZXJlbmNlc0J1aWxkZXIgKCIgKyB0aW1lc3RhbXAoKSArICIpXG5cbiIpOworCisJCXBsYW50dW1sLmFwcGVuZCgic2tpbnBhcmFtIGNsYXNzIHtcbiIpOworCQlwbGFudHVtbC5hcHBlbmQoIiAgQmFja2dyb3VuZENvbG9yPDxzZWxlY3RlZD4+IE1vY2Nhc2luXG4iKTsKKwkJcGxhbnR1bWwuYXBwZW5kKCJ9XG5cbiIpOworCQkKKwkJcGxhbnR1bWwuYXBwZW5kKCInID09PT09IE1haW4gQ2xhc3MgPT09PT1cblxuIik7CisJCQorCQlhcHBlbmRDbGFzcyhwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcywgInNlbGVjdGVkIiwgZmFsc2UsIG51bGwsIG51bGwpOworCisJCXBsYW50dW1sLmFwcGVuZCgiXG4nID09PT09IFN1cGVyIENsYXNzZXMgPT09PT1cblxuIik7CisKKwkJcG9wdWxhdGVTdXBlckNsYXNzZXMocGxhbnR1bWwsIHNlbGVjdGVkT2JqQ2xhc3MpOworCisJCXBsYW50dW1sLmFwcGVuZCgiXG4nID09PT09IFN1YiBDbGFzc2VzID09PT09XG5cbiIpOworCisJCXBvcHVsYXRlU3ViQ2xhc3NlcyhwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcywgQnVpbGRlclV0aWwuZ2V0U3ViQ2xhc3NlcyhzZWxlY3RlZE9iakNsYXNzKSk7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbkBlbmR1bWwiKTsKKworCQlyZXR1cm4gbmV3IEJ1aWxkZXJSZXN1bHQoZ2V0SWQyT2JqZWN0TWFwKCksIHBsYW50dW1sLnRvU3RyaW5nKCkpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBCdWlsZGVyUmVzdWx0IGdlbmVyYXRlUGxhbnRVTUwoRU9iamVjdCBlT2JqZWN0KSB7CisJCXJldHVybiBnZW5lcmF0ZVBsYW50VU1MKGVPYmplY3QuZUNsYXNzKCkpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgcG9wdWxhdGVTdXBlckNsYXNzZXMoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRUNsYXNzIGVDbGFzcykgeworCisJCXBvcHVsYXRlRUNsYXNzUmVmZXJlbmNlcyhwbGFudHVtbCwgZUNsYXNzKTsKKworCQlmb3IgKGZpbmFsIEVDbGFzcyBzdXBlckNsYXNzIDogZUNsYXNzLmdldEVTdXBlclR5cGVzKCkpIHsKKworCQkJYXBwZW5kQ2xhc3MocGxhbnR1bWwsIHN1cGVyQ2xhc3MsIG51bGwsIHRydWUsIG51bGwsIG51bGwpOworCisJCQlhcHBlbmRJbmhlcml0YW5jZShwbGFudHVtbCwgc3VwZXJDbGFzcywgZUNsYXNzLCAiI2RhcmtibHVlIik7CisKKwkJCXBvcHVsYXRlU3VwZXJDbGFzc2VzKHBsYW50dW1sLCBzdXBlckNsYXNzKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBwb3B1bGF0ZVN1YkNsYXNzZXMoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRUNsYXNzIGVDbGFzcywgZmluYWwgU2V0PEVDbGFzcz4gc3ViQ2xhc3NlcykgeworCisJCWZvciAoZmluYWwgRUNsYXNzIHN1YkNsYXNzIDogc3ViQ2xhc3NlcykgeworCisJCQlpZiAoc3ViQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5jb250YWlucyhlQ2xhc3MpKSB7CisKKwkJCQlhcHBlbmRDbGFzcyhwbGFudHVtbCwgc3ViQ2xhc3MsIG51bGwsIHRydWUsIG51bGwsIG51bGwpOworCQkJCQorCQkJCWFwcGVuZEluaGVyaXRhbmNlKHBsYW50dW1sLCBlQ2xhc3MsIHN1YkNsYXNzLCAiI2RhcmtHcmVlbiIpOworCQkJCQorCQkJCXBvcHVsYXRlRUNsYXNzQ29udGFpbmVySW5mbyhwbGFudHVtbCwgc3ViQ2xhc3MpOworCisJCQkJcG9wdWxhdGVTdWJDbGFzc2VzKHBsYW50dW1sLCBzdWJDbGFzcywgc3ViQ2xhc3Nlcyk7CisJCQl9CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgcG9wdWxhdGVFQ2xhc3NSZWZlcmVuY2VzKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzKSB7CisJCWZpbmFsIExpc3Q8RVJlZmVyZW5jZT4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxFUmVmZXJlbmNlPigpOworCisJCWZpbmFsIE9iamVjdCBzZWFyY2hTY29wZSA9IChzZWxlY3RlZE9iakNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCkgPT0gbnVsbCkKKwkJCQk/IHNlbGVjdGVkT2JqQ2xhc3MuZVJlc291cmNlKCkKKwkJCQk6IHNlbGVjdGVkT2JqQ2xhc3MuZVJlc291cmNlKCkuZ2V0UmVzb3VyY2VTZXQoKTsKKworCQkvKi0gZ2V0dGluZyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNlbGVjdGVkIG9iamVjdHMgRUNsYXNzIC0tPiBieSBzdXBwbHlpbmcgdGhlIEVSZXNvdXJjZSBvZiB0aGUgY29ycmVzcG9uZGluZyBFQ2xhc3MgKGkuZS4gZWNvcmUgb3IgWGNvcmUpICovCisKKwkJQ29sbGVjdGlvbjxTZXR0aW5nPiBhbGxSZWZTZXR0aW5ncyA9IG51bGw7CisJCWlmIChzZWFyY2hTY29wZSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQlhbGxSZWZTZXR0aW5ncyA9IEVjb3JlVXRpbC5Vc2FnZUNyb3NzUmVmZXJlbmNlci5maW5kKHNlbGVjdGVkT2JqQ2xhc3MsIChSZXNvdXJjZSkgc2VhcmNoU2NvcGUpOworCQl9IGVsc2UgaWYgKHNlYXJjaFNjb3BlIGluc3RhbmNlb2YgUmVzb3VyY2VTZXQpIHsKKwkJCWFsbFJlZlNldHRpbmdzID0gRWNvcmVVdGlsLlVzYWdlQ3Jvc3NSZWZlcmVuY2VyLmZpbmQoc2VsZWN0ZWRPYmpDbGFzcywgKFJlc291cmNlU2V0KSBzZWFyY2hTY29wZSk7CisJCX0KKworCQkvKi0gaWYgcmVmcyBvZiB0aGUgRUNsYXNzIGFyZSBmb3VuZCwgdGhlbiBmaWxsIHRoZSBwbGFudFVNTEJ1ZmZlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb250ZW50cyAqLworCisJCWlmIChhbGxSZWZTZXR0aW5ncy5zaXplKCkgPiAwKSB7CisKKwkJCWZvciAoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmcgcmVmU2V0dGluZyA6IGFsbFJlZlNldHRpbmdzKSB7CisKKwkJCQlpZiAocmVmU2V0dGluZy5nZXRFT2JqZWN0KCkgaW5zdGFuY2VvZiBFUmVmZXJlbmNlCisJCQkJCQkmJiAhaXNFbGVtZW50Q29udGFpbmVkKHJlc3VsdCwgKEVSZWZlcmVuY2UpIHJlZlNldHRpbmcuZ2V0RU9iamVjdCgpKSkgeworCQkJCQlyZXN1bHQuYWRkKChFUmVmZXJlbmNlKSByZWZTZXR0aW5nLmdldEVPYmplY3QoKSk7CisJCQkJfQorCQkJfQorCisJCQlmb3IgKGZpbmFsIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA6IHJlc3VsdCkgeworCisJCQkJZmluYWwgRUNsYXNzIHNvdXJjZUNsYXNzID0gZVJlZmVyZW5jZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisKKwkJCQlhcHBlbmRDbGFzc2lmaWVyKHBsYW50dW1sLCBzb3VyY2VDbGFzcywgdHJ1ZSk7CisJCQkJCisJCQkJYXBwZW5kUmVmZXJlbmNlKHBsYW50dW1sLCBlUmVmZXJlbmNlLCBzb3VyY2VDbGFzcywgc2VsZWN0ZWRPYmpDbGFzcyk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCS8qLSBubyByZWZlcmVuY2VzIGZvciB0aGlzIEVDbGFzcyBhcmUgZm91bmQgKi8KKwkJCQorCQkJYXBwZW5kQ2xhc3NpZmllcihwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcywgdHJ1ZSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgcG9wdWxhdGVFQ2xhc3NDb250YWluZXJJbmZvKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzKSB7CisJCWZpbmFsIExpc3Q8RVJlZmVyZW5jZT4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxFUmVmZXJlbmNlPigpOworCisJCWZpbmFsIE9iamVjdCBzZWFyY2hTY29wZSA9IChzZWxlY3RlZE9iakNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCkgPT0gbnVsbCkKKwkJCQk/IHNlbGVjdGVkT2JqQ2xhc3MuZVJlc291cmNlKCkKKwkJCQk6IHNlbGVjdGVkT2JqQ2xhc3MuZVJlc291cmNlKCkuZ2V0UmVzb3VyY2VTZXQoKTsKKworCQkvKi0gZ2V0dGluZyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNlbGVjdGVkIG9iamVjdHMgRUNsYXNzIC0tPiBieSBzdXBwbHlpbmcgdGhlIEVSZXNvdXJjZSBvZiB0aGUgY29ycmVzcG9uZGluZyBFQ2xhc3MgKGkuZS4gZWNvcmUgb3IgWGNvcmUpICovCisKKwkJQ29sbGVjdGlvbjxTZXR0aW5nPiBhbGxSZWZTZXR0aW5ncyA9IG51bGw7CisJCWlmIChzZWFyY2hTY29wZSBpbnN0YW5jZW9mIFJlc291cmNlKSB7CisJCQlhbGxSZWZTZXR0aW5ncyA9IEVjb3JlVXRpbC5Vc2FnZUNyb3NzUmVmZXJlbmNlci5maW5kKHNlbGVjdGVkT2JqQ2xhc3MsIChSZXNvdXJjZSkgc2VhcmNoU2NvcGUpOworCQl9IGVsc2UgaWYgKHNlYXJjaFNjb3BlIGluc3RhbmNlb2YgUmVzb3VyY2VTZXQpIHsKKwkJCWFsbFJlZlNldHRpbmdzID0gRWNvcmVVdGlsLlVzYWdlQ3Jvc3NSZWZlcmVuY2VyLmZpbmQoc2VsZWN0ZWRPYmpDbGFzcywgKFJlc291cmNlU2V0KSBzZWFyY2hTY29wZSk7CisJCX0KKworCQkvKi0gaWYgcmVmcyBvZiB0aGUgRUNsYXNzIGFyZSBmb3VuZCwgdGhlbiBmaWxsIHRoZSBwbGFudFVNTEJ1ZmZlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb250ZW50cyAqLworCisJCWlmIChhbGxSZWZTZXR0aW5ncy5zaXplKCkgPiAwKSB7CisKKwkJCWZvciAoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmcgcmVmU2V0dGluZyA6IGFsbFJlZlNldHRpbmdzKSB7CisKKwkJCQlpZiAocmVmU2V0dGluZy5nZXRFT2JqZWN0KCkgaW5zdGFuY2VvZiBFUmVmZXJlbmNlCisJCQkJCQkmJiAhaXNFbGVtZW50Q29udGFpbmVkKHJlc3VsdCwgKEVSZWZlcmVuY2UpIHJlZlNldHRpbmcuZ2V0RU9iamVjdCgpKSkgeworCQkJCQlpZiAoKChFUmVmZXJlbmNlKSByZWZTZXR0aW5nLmdldEVPYmplY3QoKSkuaXNDb250YWlubWVudCgpKSB7CisJCQkJCQlyZXN1bHQuYWRkKChFUmVmZXJlbmNlKSByZWZTZXR0aW5nLmdldEVPYmplY3QoKSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisKKwkJCWZvciAoZmluYWwgRVJlZmVyZW5jZSBlUmVmZXJlbmNlIDogcmVzdWx0KSB7CisJCQkJCisJCQkJZmluYWwgRUNsYXNzIHNvdXJjZUNsYXNzID0gZVJlZmVyZW5jZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7CisKKwkJCQlhcHBlbmRDbGFzc2lmaWVyKHBsYW50dW1sLCBzb3VyY2VDbGFzcywgdHJ1ZSk7CisJCQkJCisJCQkJYXBwZW5kUmVmZXJlbmNlKHBsYW50dW1sLCBlUmVmZXJlbmNlLCBzb3VyY2VDbGFzcywgc2VsZWN0ZWRPYmpDbGFzcyk7CQorCQkJfQorCisJCX0gZWxzZSB7CisKKwkJCS8qLSBubyByZWZlcmVuY2VzIGZvciB0aGlzIEVDbGFzcyBhcmUgZm91bmQgKi8KKworCQkJYXBwZW5kQ2xhc3NpZmllcihwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcywgdHJ1ZSk7CisJCX0KKwl9CisKKwlwcml2YXRlIGJvb2xlYW4gaXNFbGVtZW50Q29udGFpbmVkKGZpbmFsIExpc3Q8RVJlZmVyZW5jZT4gbCwgZmluYWwgRVJlZmVyZW5jZSBlUmVmKSB7CisJCWJvb2xlYW4gaXNFbGVtZW50Rm91bmQgPSBmYWxzZTsKKwkJZmluYWwgSXRlcmF0b3I8RVJlZmVyZW5jZT4gaXQgPSBsLml0ZXJhdG9yKCk7CisJCXdoaWxlIChpdC5oYXNOZXh0KCkgJiYgIWlzRWxlbWVudEZvdW5kKSB7CisJCQlmaW5hbCBFUmVmZXJlbmNlIGlzQ29udGFpbmVkID0gaXQubmV4dCgpOworCQkJaWYgKGlzQ29udGFpbmVkLmVxdWFscyhlUmVmKSkgeworCQkJCWlzRWxlbWVudEZvdW5kID0gdHJ1ZTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gaXNFbGVtZW50Rm91bmQ7CisJfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2J1aWxkZXJzL0VDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5QnVpbGRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9FQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWZkYjlkCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9FQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDEyMSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworCitwdWJsaWMgY2xhc3MgRUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHlCdWlsZGVyIGV4dGVuZHMgQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIgeworCisJQE92ZXJyaWRlCisJcHVibGljIEJ1aWxkZXJSZXN1bHQgZ2VuZXJhdGVQbGFudFVNTChmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcykgeworCisJCXRoaXMucmVzZXRDYWNoZXMoKTsKKworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIkBzdGFydHVtbFxuXG4iKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIicgQ3JlYXRlZCBieSBFQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1aWxkZXIgKCIgKyB0aW1lc3RhbXAoKSArICIpXG5cbiIpOworCisJCWFwcGVuZFNraW5QYXJhbXMocGxhbnR1bWwpOworCisJCXBsYW50dW1sLmFwcGVuZCgiXG4nID09PT09IE1haW4gQ2xhc3MgPT09PT1cblxuIik7CisKKwkJY3JlYXRlQ2xhc3MocGxhbnR1bWwsIHNlbGVjdGVkT2JqQ2xhc3MsICJTZWxlY3RlZEVsZW1lbnQiKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIlxuJyA9PT09PSBTdXBlciBDbGFzc2VzID09PT09XG5cbiIpOworCisJCXBvcHVsYXRlU3VwZXJDbGFzc2VzKHBsYW50dW1sLCBzZWxlY3RlZE9iakNsYXNzKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIlxuJyA9PT09PSBTdWIgQ2xhc3NlcyA9PT09PVxuXG4iKTsKKworCQlwb3B1bGF0ZVN1YkNsYXNzSW5mbyhwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcyk7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbkBlbmR1bWwiKTsKKworCQlyZXR1cm4gbmV3IEJ1aWxkZXJSZXN1bHQoZ2V0SWQyT2JqZWN0TWFwKCksIHBsYW50dW1sLnRvU3RyaW5nKCkpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBCdWlsZGVyUmVzdWx0IGdlbmVyYXRlUGxhbnRVTUwoRU9iamVjdCBlT2JqZWN0KSB7CisJCXJldHVybiBnZW5lcmF0ZVBsYW50VU1MKGVPYmplY3QuZUNsYXNzKCkpOworCX0KKworCXByaXZhdGUgdm9pZCBwb3B1bGF0ZVN1YkNsYXNzSW5mbyhmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sLCBmaW5hbCBFQ2xhc3MgZUNsYXNzKSB7CisKKwkJZm9yIChmaW5hbCBFQ2xhc3Mgc3ViQ2xhc3MgOiBCdWlsZGVyVXRpbC5nZXRTdWJDbGFzc2VzKGVDbGFzcykpIHsKKworCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWwsIHN1YkNsYXNzLCAiSCIpOworCisJCQlhcHBlbmRJbmhlcml0YW5jZShwbGFudHVtbCwgZUNsYXNzLCBzdWJDbGFzcywgbnVsbCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgcG9wdWxhdGVTdXBlckNsYXNzZXMoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRUNsYXNzIGVDbGFzcykgeworCisJCWZvciAoZmluYWwgRUNsYXNzIHN1cGVyQ2xhc3MgOiBlQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKSkgeworCisJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgc3VwZXJDbGFzcywgIkgiKTsKKworCQkJYXBwZW5kSW5oZXJpdGFuY2UocGxhbnR1bWwsIHN1cGVyQ2xhc3MsIGVDbGFzcywgbnVsbCk7CisKKwkJCXBvcHVsYXRlU3VwZXJDbGFzc2VzKHBsYW50dW1sLCBzdXBlckNsYXNzKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBjcmVhdGVDbGFzcyhmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sLCBmaW5hbCBFQ2xhc3MgZUNsYXNzLCBmaW5hbCBTdHJpbmcgc3RlcmVvVHlwZSkgeworCisJCWlmICghZ2V0Tm9kZXMoKS5jb250YWlucyhlQ2xhc3MpKSB7CisKKwkJCWJvb2xlYW4gY3JlYXRlVVVJRCA9ICgiU2VsZWN0ZWRFbGVtZW50Ii5lcXVhbHMoc3RlcmVvVHlwZSkgPT0gZmFsc2UpOworCQkJCisJCQlhcHBlbmRDbGFzcyhwbGFudHVtbCwgZUNsYXNzLCBzdGVyZW9UeXBlLCBjcmVhdGVVVUlELCBlQ2xhc3MuZ2V0RUF0dHJpYnV0ZXMoKSwgZUNsYXNzLmdldEVSZWZlcmVuY2VzKCkpOworCisJCQkvKi0gbWFuYWdpbmcgRUVudW1zIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWMgRU1GIGVsZW1lbnQgKi8KKworCQkJZm9yIChmaW5hbCBFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGVDbGFzcy5nZXRFQXR0cmlidXRlcygpKSB7CisJCQkJaWYgKGF0dHJpYnV0ZS5nZXRFQXR0cmlidXRlVHlwZSgpIGluc3RhbmNlb2YgRUVudW0pIHsKKworCQkJCQlFRW51bSBlRW51bSA9IChFRW51bSkgYXR0cmlidXRlLmdldEVUeXBlKCk7CisJCQkJCQorCQkJCQlhcHBlbmRFbnVtKHBsYW50dW1sLCBlRW51bSk7CisKKwkJCQkJYXBwZW5kQXNDb250YWlubWVudChwbGFudHVtbCwgYXR0cmlidXRlLCBlQ2xhc3MsIGVFbnVtKTsKKwkJCQl9CisJCQl9CisKKwkJCS8qLSBtYW5hZ2luZyBFUmVmZXJlbmNlcyBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmljIEVNRiBlbGVtZW50ICovCisKKwkJCWZvciAoZmluYWwgRVJlZmVyZW5jZSByZWZlcmVuY2UgOiBlQ2xhc3MuZ2V0RVJlZmVyZW5jZXMoKSkgeworCQkJCWlmIChyZWZlcmVuY2UuZ2V0RVR5cGUoKSBpbnN0YW5jZW9mIEVDbGFzcykgeworCisJCQkJCUVDbGFzcyB0YXJnZXQgPSAoRUNsYXNzKSByZWZlcmVuY2UuZ2V0RVR5cGUoKTsKKworCQkJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgdGFyZ2V0LCBudWxsKTsKKworCQkJCQlhcHBlbmRSZWZlcmVuY2UocGxhbnR1bWwsIHJlZmVyZW5jZSwgZUNsYXNzLCB0YXJnZXQpOworCQkJCX0KKwkJCX0KKworCQkJcGxhbnR1bWwuYXBwZW5kKCJcbiIpOworCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2J1aWxkZXJzL0VDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlQnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwM2ZiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2J1aWxkZXJzL0VDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVyczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworCitwdWJsaWMgY2xhc3MgRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlQnVpbGRlciBleHRlbmRzIEFic3RyYWN0UGxhbnRVTUxCdWlsZGVyIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyBCdWlsZGVyUmVzdWx0IGdlbmVyYXRlUGxhbnRVTUwoZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKKworCQl0aGlzLnJlc2V0Q2FjaGVzKCk7CisKKwkJZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJAc3RhcnR1bWxcblxuIik7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCInIENyZWF0ZWQgYnkgRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlQnVpbGRlciAoIiArIHRpbWVzdGFtcCgpICsgIilcblxuIik7CisKKwkJYXBwZW5kU2tpblBhcmFtcyhwbGFudHVtbCk7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbicgPT09PT0gTWFpbiBDbGFzcyA9PT09PVxuXG4iKTsKKworCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcywgIlNlbGVjdGVkRWxlbWVudCIsIDEpOworCisJCXBsYW50dW1sLmFwcGVuZCgiXG4nID09PT09IFN1YiBDbGFzc2VzID09PT09XG5cbiIpOworCisJCXBvcHVsYXRlU3ViQ2xhc3NJbmZvKHBsYW50dW1sLCBzZWxlY3RlZE9iakNsYXNzKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIlxuQGVuZHVtbCIpOworCisJCXJldHVybiBuZXcgQnVpbGRlclJlc3VsdChnZXRJZDJPYmplY3RNYXAoKSwgcGxhbnR1bWwudG9TdHJpbmcoKSk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEJ1aWxkZXJSZXN1bHQgZ2VuZXJhdGVQbGFudFVNTChFT2JqZWN0IGVPYmplY3QpIHsKKwkJcmV0dXJuIGdlbmVyYXRlUGxhbnRVTUwoZU9iamVjdC5lQ2xhc3MoKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlU3ViQ2xhc3NJbmZvKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVDbGFzcyBlQ2xhc3MpIHsKKworCQlmb3IgKGZpbmFsIEVDbGFzcyBzdWJDbGFzcyA6IEJ1aWxkZXJVdGlsLmdldFN1YkNsYXNzZXMoZUNsYXNzKSkgeworCisJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgc3ViQ2xhc3MsICJIIiwgMSk7CisKKwkJCWFwcGVuZEluaGVyaXRhbmNlKHBsYW50dW1sLCBlQ2xhc3MsIHN1YkNsYXNzLCBudWxsKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBjcmVhdGVDbGFzcyhmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sLCBmaW5hbCBFQ2xhc3MgZUNsYXNzLCBmaW5hbCBTdHJpbmcgc3RlcmVvVHlwZSwgZmluYWwgaW50IGxldmVsKSB7CisKKwkJaWYgKGxldmVsID4gMikgcmV0dXJuOworCisJCWlmICghZ2V0Tm9kZXMoKS5jb250YWlucyhlQ2xhc3MpKSB7CisKKwkJCWJvb2xlYW4gY3JlYXRlVVVJRCA9ICgiU2VsZWN0ZWRFbGVtZW50Ii5lcXVhbHMoc3RlcmVvVHlwZSkgPT0gZmFsc2UpOworCQkJCisJCQlhcHBlbmRDbGFzcyhwbGFudHVtbCwgZUNsYXNzLCBzdGVyZW9UeXBlLCBjcmVhdGVVVUlELCBlQ2xhc3MuZ2V0RUFsbEF0dHJpYnV0ZXMoKSwgZUNsYXNzLmdldEVBbGxSZWZlcmVuY2VzKCkpOworCisJCQkvKi0gbWFuYWdpbmcgRUVudW1zIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWMgRU1GIGVsZW1lbnQgKi8KKworCQkJZm9yIChmaW5hbCBFQXR0cmlidXRlIGF0dHJpYnV0ZSA6IGVDbGFzcy5nZXRFQWxsQXR0cmlidXRlcygpKSB7CisJCQkJaWYgKGF0dHJpYnV0ZS5nZXRFQXR0cmlidXRlVHlwZSgpIGluc3RhbmNlb2YgRUVudW0pIHsKKworCQkJCQlFRW51bSBlRW51bSA9IChFRW51bSkgYXR0cmlidXRlLmdldEVUeXBlKCk7CisJCQkJCQorCQkJCQlhcHBlbmRFbnVtKHBsYW50dW1sLCBlRW51bSk7CisKKwkJCQkJYXBwZW5kQXNDb250YWlubWVudChwbGFudHVtbCwgYXR0cmlidXRlLCBlQ2xhc3MsIGVFbnVtKTsKKwkJCQl9CisJCQl9CisKKwkJCS8qLSBtYW5hZ2luZyBFUmVmZXJlbmNlcyBiZWxvbmdpbmcgdG8gdGhlIHNwZWNpZmljIEVNRiBlbGVtZW50ICovCisKKwkJCWZvciAoZmluYWwgRVJlZmVyZW5jZSByZWZlcmVuY2UgOiBlQ2xhc3MuZ2V0RUFsbFJlZmVyZW5jZXMoKSkgeworCQkJCWlmIChyZWZlcmVuY2UuZ2V0RVR5cGUoKSBpbnN0YW5jZW9mIEVDbGFzcykgeworCisJCQkJCUVDbGFzcyB0YXJnZXQgPSAoRUNsYXNzKSByZWZlcmVuY2UuZ2V0RVR5cGUoKTsKKworCQkJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgdGFyZ2V0LCBudWxsLCBsZXZlbCArIDEpOworCisJCQkJCWFwcGVuZFJlZmVyZW5jZShwbGFudHVtbCwgcmVmZXJlbmNlLCBlQ2xhc3MsIHRhcmdldCk7CisJCQkJfQorCQkJfQorCisJCQlwbGFudHVtbC5hcHBlbmQoIlxuIik7CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvRUNsYXNzSGllcmFyY2h5QnVpbGRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9FQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4YjU5OAotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvRUNsYXNzSGllcmFyY2h5QnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsODkgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuYnVpbGRlcnM7CisKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKKworcHVibGljIGNsYXNzIEVDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgZXh0ZW5kcyBBYnN0cmFjdFBsYW50VU1MQnVpbGRlciB7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQnVpbGRlclJlc3VsdCBnZW5lcmF0ZVBsYW50VU1MKEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzKSB7CisKKwkJcmVzZXRDYWNoZXMoKTsKKworCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIkBzdGFydHVtbFxuXG4iKTsKKwkJCisJCXBsYW50dW1sLmFwcGVuZCgiJyBDcmVhdGVkIGJ5IEVDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgKCIgKyB0aW1lc3RhbXAoKSArICIpXG5cbiIpOworCisJCXBsYW50dW1sLmFwcGVuZCgic2tpbnBhcmFtIGNsYXNzIHtcbiIpOworCQlwbGFudHVtbC5hcHBlbmQoIiAgQmFja2dyb3VuZENvbG9yPDxzZWxlY3RlZD4+IE1vY2Nhc2luXG4iKTsKKwkJcGxhbnR1bWwuYXBwZW5kKCJ9XG5cbiIpOworCQkKKwkJcGxhbnR1bWwuYXBwZW5kKCInID09PT09IE1haW4gQ2xhc3MgPT09PT1cblxuIik7CisJCQorCQlhcHBlbmRDbGFzcyhwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcywgInNlbGVjdGVkIiwgZmFsc2UsIG51bGwsIG51bGwpOworCQkKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbicgPT09PT0gU3VwZXIgQ2xhc3NlcyA9PT09PVxuXG4iKTsKKworCQlwb3B1bGF0ZVN1cGVyQ2xhc3NlcyhwbGFudHVtbCwgc2VsZWN0ZWRPYmpDbGFzcyk7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbicgPT09PT0gU3ViIENsYXNzZXMgPT09PT1cblxuIik7CisKKwkJcG9wdWxhdGVTdWJDbGFzc2VzKHBsYW50dW1sLCBzZWxlY3RlZE9iakNsYXNzLCBCdWlsZGVyVXRpbC5nZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MpKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIlxuQGVuZHVtbCIpOworCisJCXJldHVybiBuZXcgQnVpbGRlclJlc3VsdChnZXRJZDJPYmplY3RNYXAoKSwgcGxhbnR1bWwudG9TdHJpbmcoKSk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEJ1aWxkZXJSZXN1bHQgZ2VuZXJhdGVQbGFudFVNTChFT2JqZWN0IGVPYmplY3QpIHsKKwkJcmV0dXJuIGdlbmVyYXRlUGxhbnRVTUwoZU9iamVjdC5lQ2xhc3MoKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHBvcHVsYXRlU3VwZXJDbGFzc2VzKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVDbGFzcyBlQ2xhc3MpIHsKKwkJCisJCWZvciAoZmluYWwgRUNsYXNzIHN1cGVyQ2xhc3MgOiBlQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKSkgeworCQorCQkJYXBwZW5kQ2xhc3MocGxhbnR1bWwsIHN1cGVyQ2xhc3MsIG51bGwsIHRydWUsIG51bGwsIG51bGwpOworCisJCQlhcHBlbmRJbmhlcml0YW5jZShwbGFudHVtbCwgc3VwZXJDbGFzcywgZUNsYXNzLCBudWxsKTsKKwkKKwkJCXBvcHVsYXRlU3VwZXJDbGFzc2VzKHBsYW50dW1sLCBzdXBlckNsYXNzKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBwb3B1bGF0ZVN1YkNsYXNzZXMoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRUNsYXNzIGVDbGFzcywgZmluYWwgU2V0PEVDbGFzcz4gc3ViQ2xhc3NlcykgeworCisJCWZvciAoZmluYWwgRUNsYXNzIHN1YkNsYXNzIDogc3ViQ2xhc3NlcykgeworCisJCQlpZiAoc3ViQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKS5jb250YWlucyhlQ2xhc3MpKSB7CisKKwkJCQlhcHBlbmRDbGFzcyhwbGFudHVtbCwgc3ViQ2xhc3MsIG51bGwsIHRydWUsIG51bGwsIG51bGwpOworCQkJCQorCQkJCWFwcGVuZEluaGVyaXRhbmNlKHBsYW50dW1sLCBlQ2xhc3MsIHN1YkNsYXNzLCBudWxsKTsKKworCQkJCXBvcHVsYXRlU3ViQ2xhc3NlcyhwbGFudHVtbCwgc3ViQ2xhc3MsIHN1YkNsYXNzZXMpOworCQkJfQorCQl9CisJfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2J1aWxkZXJzL0VPYmplY3RSZWZzQnVpbGRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9FT2JqZWN0UmVmc0J1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjczYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9FT2JqZWN0UmVmc0J1aWxkZXIuamF2YQpAQCAtMCwwICsxLDI4MyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVyczsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOworCitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuVUlTeW5jaHJvbml6ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZS5TZXR0aW5nOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUudXRpbC5FY29yZVV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JSW5wdXRWYWxpZGF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JbnB1dERpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworCitwdWJsaWMgY2xhc3MgRU9iamVjdFJlZnNCdWlsZGVyIGV4dGVuZHMgQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIgeworCisJVUlTeW5jaHJvbml6ZSBzeW5jOworCQorCXB1YmxpYyBFT2JqZWN0UmVmc0J1aWxkZXIoVUlTeW5jaHJvbml6ZSBzeW5jKSB7CisJCXRoaXMuc3luYyA9IHN5bmM7CisJfQorCisJLy8gTk9URTogRUNsYXNzIGlzIGFuIEVPYmplY3QKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQnVpbGRlclJlc3VsdCBnZW5lcmF0ZVBsYW50VU1MKGZpbmFsIEVDbGFzcyBlT2JqZWN0KSB7CisJCXJldHVybiBnZW5lcmF0ZVBsYW50VU1MKChFT2JqZWN0KSBlT2JqZWN0KTsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIEJ1aWxkZXJSZXN1bHQgZ2VuZXJhdGVQbGFudFVNTChmaW5hbCBFT2JqZWN0IGVPYmplY3QpIHsKKworCQlyZXNldENhY2hlcygpOworCisJCWZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCisJCXBsYW50dW1sLmFwcGVuZCgiQHN0YXJ0dW1sXG5cbiIpOworCQkKKwkJcGxhbnR1bWwuYXBwZW5kKCInIENyZWF0ZWQgYnkgRU9iamVjdFJlZnNCdWlsZGVyICgiICsgdGltZXN0YW1wKCkgKyAiKVxuXG4iKTsKKworCQlwbGFudHVtbC5hcHBlbmQoInNraW5wYXJhbSBjbGFzcyB7XG4iKTsKKwkJcGxhbnR1bWwuYXBwZW5kKCIgIEJhY2tncm91bmRDb2xvcjw8c2VsZWN0ZWQ+PiBNb2NjYXNpblxuIik7CisJCXBsYW50dW1sLmFwcGVuZCgifVxuXG4iKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIicgPT09PT0gTWFpbiBPYmplY3QgPT09PT1cblxuIik7CisJCQorCQlidWlsZEJ1ZmZlcihlT2JqZWN0LCBwbGFudHVtbCk7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbkBlbmR1bWwiKTsKKworCQlyZXR1cm4gbmV3IEJ1aWxkZXJSZXN1bHQoZ2V0SWQyT2JqZWN0TWFwKCksIHBsYW50dW1sLnRvU3RyaW5nKCkpOworCX0KKworCXByaXZhdGUgdm9pZCBidWlsZEJ1ZmZlcihmaW5hbCBFT2JqZWN0IHNlbGVjdGVkRU9iaiwgZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCkgeworCisJCWZpbmFsIExpc3Q8RU9iamVjdD4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxFT2JqZWN0PigpOworCisJCS8qIGdldHRpbmcgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzZWxlY3RlZCBvYmplY3RzIEVDbGFzcyAtLT4gYnkgc3VwcGx5aW5nIHRoZSBFUmVzb3VyY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgRUNsYXNzIChpLmUuIGVjb3JlIG9yIFhjb3JlKSAqLworCisJCWZpbmFsIENvbGxlY3Rpb248U2V0dGluZz4gYWxsUmVmU2V0dGluZ3MgPSBmaWx0ZXJCYWNrUmVmZXJlbmNlcyhnZXRBbGxSZWZTZXR0aW5ncyhzZWxlY3RlZEVPYmopKTsKKwkJCisJCS8qCisJCSAqIEluIGNhc2Ugb2YgbWFueSBlbGVtZW50cyBpdCBpcyBkaWZmaWN1bHQgdG8gdmlzdWFsaXplIHRoZSBjb250ZW50cyBpbiB0aGUgZGlhZ3JhbS4KKwkJICoKKwkJICogQmVsb3cgY29kZSBwcm92aWRlcyB0aGUgcG9zc2liaWxpdHkgdG8gc3BlY2lmeSB0aGUgcmFuZ2UKKwkJICovCisJCWlmIChhbGxSZWZTZXR0aW5ncy5zaXplKCkgPiAxMDApIHsKKworCQkJaWYgKHN5bmMgIT0gbnVsbCkgeworCQkJCXN5bmMuc3luY0V4ZWMoKCkgLT4geworCQkJCQlJbnB1dERpYWxvZyBpbnB1dERpYWxvZyA9IG5ldyBJbnB1dERpYWxvZygKKwkJCQkJCQlEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCAKKwkJCQkJCQkiRWxlbWVudCBzZWxlY3Rpb24gZGlhbG9nIiwKKwkJCQkJCQkiVGhlcmUgYXJlICIgKyBhbGxSZWZTZXR0aW5ncy5zaXplKCkgKyAiIHJlZmVyZW5jZXMuIFNwZWNpZnkgdGhlIHJhbmdlIGZvciB3aGljaCBjb250ZW50cyBzaG91bGQgYmUgcmVwcmVzZW50ZWQgZ3JhcGhpY2FsbHkiLAorCQkJCQkJCSIwLSIgKyAoYWxsUmVmU2V0dGluZ3Muc2l6ZSgpIC0gMSksIG5ldyBJSW5wdXRWYWxpZGF0b3IoKSB7CisKKwkJCQkJCQkJQE92ZXJyaWRlCisJCQkJCQkJCXB1YmxpYyBTdHJpbmcgaXNWYWxpZChmaW5hbCBTdHJpbmcgbmV3VGV4dCkgeworCQkJCQkJCQkJaWYgKCFQYXR0ZXJuLm1hdGNoZXMoIihcXGQpK1xcLShcXGQpKyIsIG5ld1RleHQpKSB7CisJCQkJCQkJCQkJcmV0dXJuICJTcGVjaWZ5IHRoZSByYW5nZSBpbiB0aGUgZm9sbG93aW5nIHdheSBpbnQtaW50IGVnLiAxMC0yMCAiOworCQkJCQkJCQkJfQorCQkJCQkJCQkJcmV0dXJuIG51bGw7CisJCQkJCQkJCX0KKwkJCQkJCQl9KTsKKworCQkJCQlpbnQgc3RhdHVzID0gaW5wdXREaWFsb2cub3BlbigpOworCisJCQkJCUxpc3Q8U2V0dGluZz4gc3ViTGlzdCA9IG51bGw7CisJCQkJCWlmIChzdGF0dXMgPT0gRGlhbG9nLk9LKSB7CisJCQkJCQlTdHJpbmcgdmFsdWUgPSBpbnB1dERpYWxvZy5nZXRWYWx1ZSgpOworCQkJCQkJU3RyaW5nW10gc3BsaXQgPSB2YWx1ZS5zcGxpdCgiLSIpOworCisJCQkJCQlzdWJMaXN0ID0gbmV3IEFycmF5TGlzdDw+KGFsbFJlZlNldHRpbmdzKS5zdWJMaXN0KEludGVnZXIucGFyc2VJbnQoc3BsaXRbMF0pLAorCQkJCQkJCQlJbnRlZ2VyLnBhcnNlSW50KHNwbGl0WzFdKSA8IGFsbFJlZlNldHRpbmdzLnNpemUoKSAKKwkJCQkJCQkJCQk/IEludGVnZXIucGFyc2VJbnQoc3BsaXRbMV0pCisJCQkJCQkJCQkJOiAoYWxsUmVmU2V0dGluZ3Muc2l6ZSgpIC0gMSkpOworCisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdWJMaXN0ID0gbmV3IEFycmF5TGlzdDxTZXR0aW5nPihhbGxSZWZTZXR0aW5ncykuc3ViTGlzdCgwLCA5OSk7CisJCQkJCX0KKwkJCQkJCisJCQkJCWFsbFJlZlNldHRpbmdzLmNsZWFyKCk7CisJCQkJCWFsbFJlZlNldHRpbmdzLmFkZEFsbChzdWJMaXN0KTsKKwkJCQl9KTsKKwkJCQkKKwkJCX0gZWxzZSB7CisJCQkJTGlzdDxTZXR0aW5nPiBzdWJMaXN0ID0gbmV3IEFycmF5TGlzdDw+KGFsbFJlZlNldHRpbmdzKS5zdWJMaXN0KDAsIDk5KTsKKwkJCQlhbGxSZWZTZXR0aW5ncy5jbGVhcigpOworCQkJCWFsbFJlZlNldHRpbmdzLmFkZEFsbChzdWJMaXN0KTsKKwkJCX0KKwkJfQorCisJCS8qLSBpZiByZWZzIG9mIHRoZSBFQ2xhc3MgYXJlIGZvdW5kLCB0aGVuIGZpbGwgdGhlIHBsYW50VU1MQnVmZmVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbnRlbnRzICovCisKKwkJaWYgKGFsbFJlZlNldHRpbmdzLnNpemUoKSA+IDApIHsKKworCQkJZm9yIChmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUuU2V0dGluZyBzZXR0aW5nIDogYWxsUmVmU2V0dGluZ3MpIHsKKworCQkJCWlmICghaXNFbGVtZW50Q29udGFpbmVkKHJlc3VsdCwgc2V0dGluZy5nZXRFT2JqZWN0KCkpKSB7CisJCQkJCXJlc3VsdC5hZGQoc2V0dGluZy5nZXRFT2JqZWN0KCkpOworCQkJCX0KKwkJCX0KKworCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWwsIHNlbGVjdGVkRU9iaik7CisKKwkJCWZvciAoZmluYWwgRU9iamVjdCBlb2JqIDogcmVzdWx0KSB7CisKKwkJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgZW9iaik7CisKKwkJCQlpZiAoIWlzTmFtZVByZXNlbnQoZW9iaikpIHsKKworCQkJCQkvKi0gQXMgbmFtZSBpcyBub3QgcHJlc2VudCwgZ2VuZXJhdGUgdGhlIGhpZXJhcmNoeSB0aWxsIHRoZSBsZXZlbCBPYmplY3Qgd2l0aCBTdHJ1Y3R1cmFsIEZlYXR1cmUgbmFtZSBpcyBwcmVzZW50ICovCisJCQkJCWFzc29jaWF0ZUNvbnRhaW5lcihwbGFudHVtbCwgZW9iaik7CisJCQkJfQorCQkJfQorCisJCQlmb3IgKGZpbmFsIEVPYmplY3QgZW9iaiA6IHJlc3VsdCkgeworCisJCQkJZmluYWwgU3RyaW5nIG5hbWUgPSBnZXROYW1lKGVvYmopLnRvU3RyaW5nKCk7CisKKwkJCQlwbGFudHVtbC5hcHBlbmQobmFtZSArICItLT4gIiArIGdldE5hbWUoc2VsZWN0ZWRFT2JqKSk7CisJCQkJcGxhbnR1bWwuYXBwZW5kKCJcbiIpOworCQkJfQorCQkJCisJCX0gZWxzZSB7CisKKwkJCS8qLSBubyByZWZlcmVuY2VzIGZvciB0aGlzIEVDbGFzcyBhcmUgZm91bmQgKi8KKwkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sLCBzZWxlY3RlZEVPYmopOworCQl9CisJfQorCisJLyoqCisJICogSW4gY2FzZSBvZiBjZXJ0YWluIG1ldGEtbW9kZWxzIChlLmc6IEFtYWx0aGVhKSwgdG8gaGF2ZSBiYWNrIHJlZmVyZW5jZXMgLT4gZGVyaXZlZCBhdHRyaWJ1dGVzIGFyZSBzcGVjaWZpZWQgb24gUmVmZXJlbmNlIGluIEVjb3JlLgorCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gcmVtb3ZlIGJhY2sgcmVmZXJlbmNlIG9iamVjdHMgZnJvbSB0aGUgY29sbGVjdGlvbi4KKwkgKiBAcGFyYW0gYWxsUmVmU2V0dGluZ3MKKwkgKiBAcmV0dXJuIGZpbHRlcmVkU2V0dGluZ3Mgd2hpY2ggZG8gbm90IGhhdmUgZGVyaXZlZCByZWZlcmVuY2VzCisJICovCisJcHJpdmF0ZSBDb2xsZWN0aW9uPFNldHRpbmc+IGZpbHRlckJhY2tSZWZlcmVuY2VzKENvbGxlY3Rpb248U2V0dGluZz4gYWxsUmVmU2V0dGluZ3MpIHsKKworCQlDb2xsZWN0aW9uPFNldHRpbmc+IGZpbHRlcmVkU2V0dGluZ0VsZW1lbnRzPW5ldyBBcnJheUxpc3Q8RVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmc+KCk7CisKKwkJaWYgKGFsbFJlZlNldHRpbmdzLnNpemUoKSA+IDApIHsKKworCQkJZm9yIChmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUuU2V0dGluZyBzZXR0aW5nIDogYWxsUmVmU2V0dGluZ3MpIHsKKworCQkJCUVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmUgPSBzZXR0aW5nLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgpOworCQkJCQorCQkJCWlmIChlU3RydWN0dXJhbEZlYXR1cmUgaW5zdGFuY2VvZiBFUmVmZXJlbmNlCisJCQkJCQkmJiAoKChFUmVmZXJlbmNlKSBlU3RydWN0dXJhbEZlYXR1cmUpLmlzQ29udGFpbm1lbnQoKSA9PSBmYWxzZSkKKwkJCQkJCSYmICgoKEVSZWZlcmVuY2UpIGVTdHJ1Y3R1cmFsRmVhdHVyZSkuaXNEZXJpdmVkKCkgPT0gZmFsc2UpKSB7CisJCQkJCWZpbHRlcmVkU2V0dGluZ0VsZW1lbnRzLmFkZChzZXR0aW5nKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJCisJCXJldHVybiBmaWx0ZXJlZFNldHRpbmdFbGVtZW50czsKKwl9CisKKwlwcml2YXRlIENvbGxlY3Rpb248U2V0dGluZz4gZ2V0QWxsUmVmU2V0dGluZ3MoRU9iamVjdCBzZWxlY3RlZEVPYmopIHsKKwkJUmVzb3VyY2UgZVJlc291cmNlID0gc2VsZWN0ZWRFT2JqLmVSZXNvdXJjZSgpOworCQlpZiAoZVJlc291cmNlID09IG51bGwpIHsKKwkJCXJldHVybiBFY29yZVV0aWwuVXNhZ2VDcm9zc1JlZmVyZW5jZXIuZmluZChzZWxlY3RlZEVPYmosIEVjb3JlVXRpbC5nZXRSb290Q29udGFpbmVyKHNlbGVjdGVkRU9iaikpOworCQl9IGVsc2UgaWYgKGVSZXNvdXJjZS5nZXRSZXNvdXJjZVNldCgpID09IG51bGwpIHsKKwkJCXJldHVybiBFY29yZVV0aWwuVXNhZ2VDcm9zc1JlZmVyZW5jZXIuZmluZChzZWxlY3RlZEVPYmosIGVSZXNvdXJjZSk7CisJCX0KKwkJcmV0dXJuIEVjb3JlVXRpbC5Vc2FnZUNyb3NzUmVmZXJlbmNlci5maW5kKHNlbGVjdGVkRU9iaiwgZVJlc291cmNlLmdldFJlc291cmNlU2V0KCkpOworCX0KKwkKKwlwcml2YXRlIHZvaWQgY3JlYXRlQ2xhc3MoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRU9iamVjdCBzZWxlY3RlZEVPYmopIHsKKwkJaWYgKCFnZXROb2RlcygpLmNvbnRhaW5zKHNlbGVjdGVkRU9iaikpIHsKKwkJCWFkZE5vZGUoc2VsZWN0ZWRFT2JqKTsgLy8gbWFyayBhcyBjcmVhdGVkCisJCQkKKwkJCWZpbmFsIE9iamVjdCBuYW1lID0gZ2V0TmFtZShzZWxlY3RlZEVPYmopOworCQkJZmluYWwgU3RyaW5nIGNsYXNzTmFtZSA9IHNlbGVjdGVkRU9iai5lQ2xhc3MoKS5nZXROYW1lKCk7CisJCQlmaW5hbCBTdHJpbmcgdXVpZCA9IGdldElkRm9yT2JqZWN0KHNlbGVjdGVkRU9iaik7CisJCQkKKwkJCXBsYW50dW1sLmFwcGVuZCgiY2xhc3MgIiArIG5hbWUgKyAiIDw8IChPLCNCNEE3RTUpICIgKyBjbGFzc05hbWUgKyAiID4+IiArICIgW1siICsgdXVpZCArICJdXSIpOworCQkJcGxhbnR1bWwuYXBwZW5kKCJcbiIpOworCQl9CisJfQorCisJcHJpdmF0ZSBPYmplY3QgZ2V0TmFtZShmaW5hbCBFT2JqZWN0IGVPYmplY3QpIHsKKwkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGVTdHJ1Y3R1cmFsRmVhdHVyZSA9IGVPYmplY3QuZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCJuYW1lIik7CisKKwkJaWYgKGVTdHJ1Y3R1cmFsRmVhdHVyZSAhPSBudWxsKSB7CisKKwkJCWZpbmFsIE9iamVjdCBvcmlnaW5hbE5hbWUgPSBlT2JqZWN0LmVHZXQoZVN0cnVjdHVyYWxGZWF0dXJlKTsKKworCQkJaWYgKG9yaWdpbmFsTmFtZSA9PSBudWxsIHx8IG9yaWdpbmFsTmFtZS50b1N0cmluZygpLmxlbmd0aCgpID09IDApIHsKKwkJCQlyZXR1cm4gZU9iamVjdC5lQ2xhc3MoKS5nZXROYW1lKCkgKyAiX18iICsgZU9iamVjdC5oYXNoQ29kZSgpOworCQkJfQorCisJCQlyZXR1cm4gIlwiIiArIG9yaWdpbmFsTmFtZSArICJcIiI7CisJCX0KKworCQlyZXR1cm4gZU9iamVjdC5lQ2xhc3MoKS5nZXROYW1lKCkgKyAiX18iICsgZU9iamVjdC5oYXNoQ29kZSgpOworCX0KKworCXByaXZhdGUgdm9pZCBhc3NvY2lhdGVDb250YWluZXIoZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCwgZmluYWwgRU9iamVjdCBlT2JqZWN0KSB7CisKKwkJZmluYWwgRU9iamVjdCBlQ29udGFpbmVyT2JqID0gZU9iamVjdC5lQ29udGFpbmVyKCk7CisKKwkJaWYgKGVDb250YWluZXJPYmogPT0gbnVsbCkgeworCQkJcmV0dXJuOworCQl9CisKKwkJY3JlYXRlQ2xhc3MocGxhbnR1bWwsIGVDb250YWluZXJPYmopOworCisJCXBsYW50dW1sLmFwcGVuZChnZXROYW1lKGVDb250YWluZXJPYmopICsgIiAqLS0gIiArIGdldE5hbWUoZU9iamVjdCkpOworCisJCXBsYW50dW1sLmFwcGVuZCgiXG4iKTsKKworCQlpZiAoIWlzTmFtZVByZXNlbnQoZUNvbnRhaW5lck9iaikpIHsKKwkJCWFzc29jaWF0ZUNvbnRhaW5lcihwbGFudHVtbCwgZUNvbnRhaW5lck9iaik7CisJCX0KKworCX0KKworCXByaXZhdGUgYm9vbGVhbiBpc05hbWVQcmVzZW50KGZpbmFsIEVPYmplY3QgZU9iamVjdCkgeworCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlID0gZU9iamVjdC5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoIm5hbWUiKTsKKworCQlpZiAoZVN0cnVjdHVyYWxGZWF0dXJlID09IG51bGwpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCXJldHVybiB0cnVlOworCX0KKworCXByaXZhdGUgYm9vbGVhbiBpc0VsZW1lbnRDb250YWluZWQoZmluYWwgTGlzdDxFT2JqZWN0PiBsaXN0LCBmaW5hbCBFT2JqZWN0IGVSZWYpIHsKKwkJYm9vbGVhbiBpc0VsZW1lbnRGb3VuZCA9IGZhbHNlOworCQlmaW5hbCBJdGVyYXRvcjxFT2JqZWN0PiBpdCA9IGxpc3QuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0Lmhhc05leHQoKSAmJiAhaXNFbGVtZW50Rm91bmQpIHsKKwkJCWZpbmFsIEVPYmplY3QgaXNDb250YWluZWQgPSBpdC5uZXh0KCk7CisJCQlpZiAoaXNDb250YWluZWQuZXF1YWxzKGVSZWYpKSB7CisJCQkJaXNFbGVtZW50Rm91bmQgPSB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBpc0VsZW1lbnRGb3VuZDsKKwl9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvT2JqZWN0Q29udGVudEJ1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvYnVpbGRlcnMvT2JqZWN0Q29udGVudEJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDU3YWFkCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9idWlsZGVycy9PYmplY3RDb250ZW50QnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMjcyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKKyAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIAorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLmRpLlVJU3luY2hyb25pemU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklJbnB1dFZhbGlkYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklucHV0RGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CisKK3B1YmxpYyBjbGFzcyBPYmplY3RDb250ZW50QnVpbGRlciBleHRlbmRzIEFic3RyYWN0UGxhbnRVTUxCdWlsZGVyIHsKKworCVVJU3luY2hyb25pemUgc3luYzsKKwkKKwlwdWJsaWMgT2JqZWN0Q29udGVudEJ1aWxkZXIoVUlTeW5jaHJvbml6ZSBzeW5jKSB7CisJCXRoaXMuc3luYyA9IHN5bmM7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIEJ1aWxkZXJSZXN1bHQgZ2VuZXJhdGVQbGFudFVNTChPYmplY3Qgc2VsZWN0ZWRPYmplY3QpIHsKKwkJaWYgKHNlbGVjdGVkT2JqZWN0IGluc3RhbmNlb2YgRUxpc3QpIHsKKwkJCXJldHVybiBnZW5lcmF0ZVBsYW50VU1MRm9yQ29sbGVjdGlvbigoRUxpc3Q8Pz4pIHNlbGVjdGVkT2JqZWN0KTsKKwkJfQorCQlyZXR1cm4gc3VwZXIuZ2VuZXJhdGVQbGFudFVNTChzZWxlY3RlZE9iamVjdCk7CisJfQorCisJLy8gTk9URTogRUNsYXNzIGlzIGFuIEVPYmplY3QKKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQnVpbGRlclJlc3VsdCBnZW5lcmF0ZVBsYW50VU1MKGZpbmFsIEVDbGFzcyBlT2JqZWN0KSB7CisJCXJldHVybiBnZW5lcmF0ZVBsYW50VU1MKChFT2JqZWN0KSBlT2JqZWN0KTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgQnVpbGRlclJlc3VsdCBnZW5lcmF0ZVBsYW50VU1MKGZpbmFsIEVPYmplY3QgZU9iamVjdCkgeworCisJCXJlc2V0Q2FjaGVzKCk7CisJCQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIkBzdGFydHVtbFxuXG4iKTsKKwkJCisJCXBsYW50dW1sLmFwcGVuZCgiJyBDcmVhdGVkIGJ5IE9iamVjdENvbnRlbnRCdWlsZGVyICgiICsgdGltZXN0YW1wKCkgKyAiKVxuXG4iKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIicgPT09PT0gTWFpbiBPYmplY3QgPT09PT1cblxuIik7CisKKwkJYnVpbGRCdWZmZXIoZU9iamVjdCwgcGxhbnR1bWwpOworCisJCXBsYW50dW1sLmFwcGVuZCgiXG5AZW5kdW1sIik7CisKKwkJcmV0dXJuIG5ldyBCdWlsZGVyUmVzdWx0KGdldElkMk9iamVjdE1hcCgpLCBwbGFudHVtbC50b1N0cmluZygpKTsKKwl9CisKKwlwdWJsaWMgQnVpbGRlclJlc3VsdCBnZW5lcmF0ZVBsYW50VU1MRm9yQ29sbGVjdGlvbihmaW5hbCBFTGlzdDw/PiBlTGlzdCkgeworCisJCXJlc2V0Q2FjaGVzKCk7CisJCQorCQlmaW5hbCBTdHJpbmdCdWlsZGVyIHBsYW50dW1sID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIkBzdGFydHVtbFxuXG4iKTsKKworCQlwbGFudHVtbC5hcHBlbmQoIicgQ3JlYXRlZCBieSBPYmplY3RDb250ZW50QnVpbGRlciAoIiArIHRpbWVzdGFtcCgpICsgIilcblxuIik7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCInID09PT09IE1haW4gT2JqZWN0cyA9PT09PVxuXG4iKTsKKworCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgZUxpc3QsIG51bGwpOworCisJCWZvciAoZmluYWwgT2JqZWN0IG9iamVjdCA6IGdldEVsZW1lbnRzQmFzZWRPblJhbmdlKGVMaXN0KSkgeworCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKworCQkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sLCAoRU9iamVjdCkgb2JqZWN0KTsKKworCQkJCWZpbmFsIFN0cmluZyBuYW1lID0gZ2V0TmFtZSgoRU9iamVjdCkgb2JqZWN0KS50b1N0cmluZygpOworCisJCQkJcGxhbnR1bWwuYXBwZW5kKCJDb2xsZWN0aW9uIC0tPiAiICsgbmFtZSk7CisJCQkJcGxhbnR1bWwuYXBwZW5kKCJcbiIpOworCQkJfQorCQl9CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJcbkBlbmR1bWwiKTsKKworCQlyZXR1cm4gbmV3IEJ1aWxkZXJSZXN1bHQoZ2V0SWQyT2JqZWN0TWFwKCksIHBsYW50dW1sLnRvU3RyaW5nKCkpOworCX0KKworCXByaXZhdGUgdm9pZCBidWlsZEJ1ZmZlcihmaW5hbCBFT2JqZWN0IHNlbGVjdGVkRU9iaiwgZmluYWwgU3RyaW5nQnVpbGRlciBwbGFudHVtbCkgeworCisJCWZpbmFsIEVMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZVN0cnVjdHVyYWxGZWF0dXJlcyA9IHNlbGVjdGVkRU9iai5lQ2xhc3MoKS5nZXRFQWxsU3RydWN0dXJhbEZlYXR1cmVzKCk7CisKKwkJLyotIGlmIHJlZnMgb2YgdGhlIEVDbGFzcyBhcmUgZm91bmQsIHRoZW4gZmlsbCB0aGUgcGxhbnRVTUxCdWZmZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29udGVudHMgKi8KKworCQlpZiAoZVN0cnVjdHVyYWxGZWF0dXJlcy5zaXplKCkgPiAwKSB7CisKKwkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sLCBzZWxlY3RlZEVPYmopOworCisJCQlmaW5hbCBMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4gcHJvY2Vzc2VkRmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4oKTsKKworCQkJZm9yIChmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlIDogZVN0cnVjdHVyYWxGZWF0dXJlcykgeworCisJCQkJZmluYWwgYm9vbGVhbiBlSXNTZXQgPSBzZWxlY3RlZEVPYmouZUlzU2V0KGVTdHJ1Y3R1cmFsRmVhdHVyZSk7CisKKwkJCQlpZiAoZUlzU2V0ICYmICFwcm9jZXNzZWRGZWF0dXJlcy5jb250YWlucyhlU3RydWN0dXJhbEZlYXR1cmUpCisJCQkJCQkmJiAoZVN0cnVjdHVyYWxGZWF0dXJlIGluc3RhbmNlb2YgRVJlZmVyZW5jZSkpIHsKKworCQkJCQlwcm9jZXNzZWRGZWF0dXJlcy5hZGQoZVN0cnVjdHVyYWxGZWF0dXJlKTsKKworCQkJCQlmaW5hbCBPYmplY3QgZW9iaiA9IHNlbGVjdGVkRU9iai5lR2V0KGVTdHJ1Y3R1cmFsRmVhdHVyZSk7CisKKwkJCQkJaWYgKGVvYmogaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQkJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgKEVPYmplY3QpIGVvYmopOworCisJCQkJCQlmaW5hbCBTdHJpbmcgbmFtZSA9IGdldE5hbWUoKEVPYmplY3QpIGVvYmopLnRvU3RyaW5nKCk7CisKKwkJCQkJCWZpbmFsIFN0cmluZyByZWxhdGlvbiA9ICgoRVJlZmVyZW5jZSkgZVN0cnVjdHVyYWxGZWF0dXJlKS5pc0NvbnRhaW5tZW50KCkgPyAiICotLSAiIDogIi0tPiAiOworCisJCQkJCQlwbGFudHVtbC5hcHBlbmQoZ2V0TmFtZShzZWxlY3RlZEVPYmopICsgcmVsYXRpb24gKyBuYW1lKTsKKwkJCQkJCXBsYW50dW1sLmFwcGVuZCgiXG4iKTsKKworCQkJCQl9IGVsc2UgaWYgKGVvYmogaW5zdGFuY2VvZiBFTGlzdCkgeworCisJCQkJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgKEVMaXN0PD8+KSBlb2JqLCBlU3RydWN0dXJhbEZlYXR1cmUpOworCisJCQkJCQlmaW5hbCBTdHJpbmcgcmVsYXRpb24gPSAoKEVSZWZlcmVuY2UpIGVTdHJ1Y3R1cmFsRmVhdHVyZSkuaXNDb250YWlubWVudCgpID8gIiAqLS0gIiA6ICItLT4gIjsKKworCQkJCQkJcGxhbnR1bWwuYXBwZW5kKGdldE5hbWUoc2VsZWN0ZWRFT2JqKSArIHJlbGF0aW9uICsgZVN0cnVjdHVyYWxGZWF0dXJlLmdldE5hbWUoKSk7CisJCQkJCQlwbGFudHVtbC5hcHBlbmQoIlxuIik7CisJCQkJCX0KKworCQkJCX0KKwkJCX0KKworCQl9IGVsc2UgeworCisJCQkvKi0gbm8gcmVmZXJlbmNlcyBmb3IgdGhpcyBFQ2xhc3MgYXJlIGZvdW5kICovCisJCQljcmVhdGVDbGFzcyhwbGFudHVtbCwgc2VsZWN0ZWRFT2JqKTsKKwkJfQorCisJfQorCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNsYXNzKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVMaXN0PD8+IGVMaXN0LCBmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlKSB7CisKKwkJZmluYWwgU3RyaW5nIHV1aWQgPSBnZXRJZEZvck9iamVjdChlTGlzdCk7CisKKwkJaWYgKGVTdHJ1Y3R1cmFsRmVhdHVyZSAhPSBudWxsKSB7CisJCQlmaW5hbCBTdHJpbmcgbmFtZSA9IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXROYW1lKCk7CisJCQlmaW5hbCBTdHJpbmcgdHlwZU5hbWUgPSBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0RVR5cGUoKS5nZXROYW1lKCk7CisKKwkJCXBsYW50dW1sLmFwcGVuZCgiY2xhc3MgXCIiICsgbmFtZSArICJcIiIgKyAiIDw8ICgqLCNGRjc3MDApIEVMaXN0PCIgKyB0eXBlTmFtZSArICI+ID4+IiArICIgW1siICsgdXVpZCArICJdXSIpOworCQl9IGVsc2UgeworCQkJcGxhbnR1bWwuYXBwZW5kKCJjbGFzcyBcIiIgKyAiQ29sbGVjdGlvbiIgKyAiXCIiICsgIiA8PCAoKiwjRkY3NzAwKSBDb2xsZWN0aW9uPCIgKyAiRUxpc3QiICsgIj4gPj4iICsgIiBbWyIgKyB1dWlkICsgIl1dIik7CisJCX0KKworCQlwbGFudHVtbC5hcHBlbmQoIlxuIik7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNyZWF0ZUNsYXNzKGZpbmFsIFN0cmluZ0J1aWxkZXIgcGxhbnR1bWwsIGZpbmFsIEVPYmplY3Qgc2VsZWN0ZWRFT2JqKSB7CisKKwkJZmluYWwgT2JqZWN0IG5hbWUgPSBnZXROYW1lKHNlbGVjdGVkRU9iaik7CisJCWZpbmFsIFN0cmluZyBjbGFzc05hbWUgPSBzZWxlY3RlZEVPYmouZUNsYXNzKCkuZ2V0TmFtZSgpOworCQlmaW5hbCBTdHJpbmcgdXVpZCA9IGdldElkRm9yT2JqZWN0KHNlbGVjdGVkRU9iaik7CisKKwkJcGxhbnR1bWwuYXBwZW5kKCJjbGFzcyAiICsgbmFtZSArICIgPDwgKE8sI0I0QTdFNSkgIiArIGNsYXNzTmFtZSArICIgPj4iICsgIiBbWyIgKyB1dWlkICsgIl1dIik7CisKKwkJZmluYWwgRUxpc3Q8RUF0dHJpYnV0ZT4gZUFsbEF0dHJpYnV0ZXMgPSBzZWxlY3RlZEVPYmouZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKKworCQlpZiAoZUFsbEF0dHJpYnV0ZXMuc2l6ZSgpID4gMCkgeworCisJCQlwbGFudHVtbC5hcHBlbmQoIiB7Iik7CisKKwkJCWZpbmFsIExpc3Q8RUF0dHJpYnV0ZT4gcHJvY2Vzc2VkRmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEVBdHRyaWJ1dGU+KCk7CisKKwkJCWZvciAoZmluYWwgRUF0dHJpYnV0ZSBlQXR0cmlidXRlIDogZUFsbEF0dHJpYnV0ZXMpIHsKKworCQkJCWlmIChzZWxlY3RlZEVPYmouZUlzU2V0KGVBdHRyaWJ1dGUpICYmICFwcm9jZXNzZWRGZWF0dXJlcy5jb250YWlucyhlQXR0cmlidXRlKSkgeworCisJCQkJCXByb2Nlc3NlZEZlYXR1cmVzLmFkZChlQXR0cmlidXRlKTsKKworCQkJCQlwbGFudHVtbC5hcHBlbmQoIlxuICAiKTsKKwkJCQkJcGxhbnR1bWwuYXBwZW5kKGVBdHRyaWJ1dGUuZ2V0RVR5cGUoKS5nZXROYW1lKCkgKyAiICIgKyBlQXR0cmlidXRlLmdldE5hbWUoKSArICIgPSAiICsgc2VsZWN0ZWRFT2JqLmVHZXQoZUF0dHJpYnV0ZSkpOworCQkJCX0KKwkJCX0KKwkJCXBsYW50dW1sLmFwcGVuZCgiXG59Iik7CisJCX0KKworCQlwbGFudHVtbC5hcHBlbmQoIlxuIik7CisJfQorCisJcHJpdmF0ZSBPYmplY3QgZ2V0TmFtZShmaW5hbCBFT2JqZWN0IGVPYmplY3QpIHsKKwkJZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGVTdHJ1Y3R1cmFsRmVhdHVyZSA9IGVPYmplY3QuZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCJuYW1lIik7CisKKwkJaWYgKGVTdHJ1Y3R1cmFsRmVhdHVyZSAhPSBudWxsKSB7CisKKwkJCWZpbmFsIE9iamVjdCBvcmlnaW5hbE5hbWUgPSBlT2JqZWN0LmVHZXQoZVN0cnVjdHVyYWxGZWF0dXJlKTsKKworCQkJcmV0dXJuICJcIiIgKyBvcmlnaW5hbE5hbWUgKyAiXCIiOworCQl9CisKKwkJcmV0dXJuIGVPYmplY3QuZUNsYXNzKCkuZ2V0TmFtZSgpICsgIl9fIiArIGVPYmplY3QuaGFzaENvZGUoKTsKKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncyh7ICJyYXd0eXBlcyIsICJ1bmNoZWNrZWQiIH0pCisJcHJpdmF0ZSBMaXN0PD8+IGdldEVsZW1lbnRzQmFzZWRPblJhbmdlKGZpbmFsIEVMaXN0PD8+IGVMaXN0KSB7CisKKwkJaWYgKGVMaXN0LnNpemUoKSA+IDEwMCkgeworCisJCQlpZiAoc3luYyAhPSBudWxsKSB7CisJCQkJc3luYy5zeW5jRXhlYygoKSAtPiB7CisJCQkJCQorCQkJCQlMaXN0IHN1Ykxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7CisJCQkJCQorCQkJCQlJbnB1dERpYWxvZyBpbnB1dERpYWxvZyA9IG5ldyBJbnB1dERpYWxvZygKKwkJCQkJCQlEaXNwbGF5LmdldERlZmF1bHQoKS5nZXRBY3RpdmVTaGVsbCgpLCAKKwkJCQkJCQkiRWxlbWVudCBzZWxlY3Rpb24gZGlhbG9nIiwKKwkJCQkJCQkiVGhlcmUgYXJlICIgKyBlTGlzdC5zaXplKCkgKyAiIHJlZmVyZW5jZXMuIFNwZWNpZnkgdGhlIHJhbmdlIGZvciB3aGljaCBjb250ZW50cyBzaG91bGQgYmUgcmVwcmVzZW50ZWQgZ3JhcGhpY2FsbHkiLAorCQkJCQkJCSIwLSIgKyAoZUxpc3Quc2l6ZSgpIC0gMSksIG5ldyBJSW5wdXRWYWxpZGF0b3IoKSB7CisJCQkJCQkJCQorCQkJCQkJCQlAT3ZlcnJpZGUKKwkJCQkJCQkJcHVibGljIFN0cmluZyBpc1ZhbGlkKGZpbmFsIFN0cmluZyBuZXdUZXh0KSB7CisJCQkJCQkJCQlpZiAoIVBhdHRlcm4ubWF0Y2hlcygiKFxcZCkrXFwtKFxcZCkrIiwgbmV3VGV4dCkpIHsKKwkJCQkJCQkJCQlyZXR1cm4gIlNwZWNpZnkgdGhlIHJhbmdlIGluIHRoZSBmb2xsb3dpbmcgd2F5IGludC1pbnQgZWcuIDEwLTIwICI7CisJCQkJCQkJCQl9CisJCQkJCQkJCQlyZXR1cm4gbnVsbDsKKwkJCQkJCQkJfQorCQkJCQkJCX0pOworCQkJCQkKKwkJCQkJaW50IHN0YXR1cyA9IGlucHV0RGlhbG9nLm9wZW4oKTsKKwkJCQkJCisJCQkJCWlmIChzdGF0dXMgPT0gRGlhbG9nLk9LKSB7CisJCQkJCQlTdHJpbmcgdmFsdWUgPSBpbnB1dERpYWxvZy5nZXRWYWx1ZSgpOworCQkJCQkJCisJCQkJCQlTdHJpbmdbXSBzcGxpdCA9IHZhbHVlLnNwbGl0KCItIik7CisJCQkJCQkKKwkJCQkJCXN1Ykxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oZUxpc3QpLnN1Ykxpc3QoCisJCQkJCQkJCUludGVnZXIucGFyc2VJbnQoc3BsaXRbMF0pLAorCQkJCQkJCQlJbnRlZ2VyLnBhcnNlSW50KHNwbGl0WzFdKSA8IGVMaXN0LnNpemUoKSAKKwkJCQkJCQkJCQk/IEludGVnZXIucGFyc2VJbnQoc3BsaXRbMV0pIAorCQkJCQkJCQkJCTogKGVMaXN0LnNpemUoKSAtIDEpKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXN1Ykxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oZUxpc3QpLnN1Ykxpc3QoMCwgOTkpOworCQkJCQl9CisJCQkJCQorCQkJCQllTGlzdC5jbGVhcigpOworCQkJCQllTGlzdC5hZGRBbGwoc3ViTGlzdCk7CisJCQkJfSk7CisJCQl9CisJCX0KKwkJCisJCXJldHVybiBlTGlzdDsKKwl9Cit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0Fic3RyYWN0UGxhbnRVTUxIYW5kbGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0Fic3RyYWN0UGxhbnRVTUxIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMGE4NgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvQWJzdHJhY3RQbGFudFVNTEhhbmRsZXIuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVyczsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkFic3RyYWN0UGxhbnRVTUxCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkJ1aWxkZXJSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHMuRGlhZ3JhbUNyZWF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHMuRXhlY3V0aW9uQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHMuRXhlY3V0aW9uVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC52aWV3cy5EaWFncmFtVmlldzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuVUlTeW5jaHJvbml6ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS5tb2RlbC5hcHBsaWNhdGlvbi51aS5iYXNpYy5NUGFydDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gubW9kZWxpbmcuRVBhcnRTZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5tb2RlbGluZy5FUGFydFNlcnZpY2UuUGFydFN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlcjsKK2ltcG9ydCBvcmcuc2xmNGouTG9nZ2VyRmFjdG9yeTsKKworcHVibGljIGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGxhbnRVTUxIYW5kbGVyIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBMT0dHRVIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcihBYnN0cmFjdFBsYW50VU1MSGFuZGxlci5jbGFzcyk7CisJCisJcHJvdGVjdGVkIGFic3RyYWN0IEFic3RyYWN0UGxhbnRVTUxCdWlsZGVyIGNyZWF0ZVBsYW50VU1MQnVpbGRlcihVSVN5bmNocm9uaXplIHN5bmMpOworCQorCXByb3RlY3RlZCBhYnN0cmFjdCBFeGVjdXRpb25DYXRlZ29yeSBnZXRFeGVjdXRpb25DYXRlZ29yeSgpOworCisJcHVibGljIGFic3RyYWN0IFN0cmluZyBnZXRGaWxlTmFtZVByZWZpeChPYmplY3QgZU9iamVjdCk7CisJCisJcHVibGljIHZvaWQgZXhlY3V0ZSgKKwkJCVNoZWxsIHNoZWxsLAorCQkJVUlTeW5jaHJvbml6ZSBzeW5jLAorCQkJU3RyaW5nIGRvdFBhdGgsCisJCQlTdHJpbmcgZ2VuRm9sZGVyUGF0aCwKKwkJCUlTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwKKwkJCUVQYXJ0U2VydmljZSBwYXJ0U2VydmljZSkgeworCQkKKwkJRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MgPSBudWxsOworCQkKKwkJT2JqZWN0IGVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7CisJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQlzZWxlY3RlZE9iakNsYXNzID0gKEVDbGFzcykgZWxlbWVudDsKKwkJCX0gZWxzZSB7CisJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9ICgoRU9iamVjdCkgZWxlbWVudCkuZUNsYXNzKCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlvcGVuRXJyb3JEaWFsb2coc2hlbGwpOworCQkJcmV0dXJuOworCQl9CisJCQorCQlleGVjdXRlKAorCQkJCXNoZWxsLAorCQkJCXN5bmMsCisJCQkJZG90UGF0aCwKKwkJCQlnZW5Gb2xkZXJQYXRoLAorCQkJCXBhcnRTZXJ2aWNlLAorCQkJCXNlbGVjdGVkT2JqQ2xhc3MsCisJCQkJKEVPYmplY3QpZWxlbWVudCk7CisJfQorCQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoCisJCQlTaGVsbCBzaGVsbCwKKwkJCVVJU3luY2hyb25pemUgc3luYywKKwkJCVN0cmluZyBkb3RQYXRoLAorCQkJU3RyaW5nIGdlbkZvbGRlclBhdGgsCisJCQlFUGFydFNlcnZpY2UgcGFydFNlcnZpY2UsCisJCQlPYmplY3Qgc2VsZWN0ZWQsCisJCQlFT2JqZWN0IGVPYmplY3QpIHsKKwkJCisJCS8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgdmFsaWQgZG90IHBhdGgKKwkJaWYgKHZlcmlmeURvdFBhdGgoc2hlbGwsIGRvdFBhdGgpKSB7CisJCQkKKwkJCS8vIGdlbmVyYXRlIFVNTAorCQkJaWYgKHNlbGVjdGVkICE9IG51bGwpIHsKKwkJCQkKKwkJCQlTdHJpbmcgZ2VuRm9sZGVyID0gRGlhZ3JhbUNyZWF0b3IuZ2V0R2VuRm9sZGVyKGdlbkZvbGRlclBhdGgsIGVPYmplY3QgIT0gbnVsbCA/IGVPYmplY3QuZVJlc291cmNlKCkgOiBudWxsKTsKKwkJCQlpZiAoZ2VuRm9sZGVyID09IG51bGwgfHwgZ2VuRm9sZGVyLmxlbmd0aCgpID09IDApIHsKKwkJCQkJb3BlbkVycm9yRGlhbG9nKHNoZWxsLCAiRm9sZGVyIGZvciBkaWFncmFtIGdlbmVyYXRpb24gaXMgbm90IHNldC4gQ29uZmlndXJlIGEgZm9sZGVyIHBhdGggaW4gUHJlZmVyZW5jZXMgLT4gQU1BTFRIRUEgR3JhcGhpY2FsIFJlcHJlc2VudGF0aW9uIik7CisJCQkJCXJldHVybjsKKwkJCQl9IGVsc2UgaWYgKCFuZXcgRmlsZShnZW5Gb2xkZXIpLmV4aXN0cygpKSB7CisJCQkJCW9wZW5FcnJvckRpYWxvZyhzaGVsbCwgIkludmFsaWQgZm9sZGVyIHBhdGggaXMgc3BlY2lmaWVkLiBDb25maWd1cmUgYSB2YWxpZCBmb2xkZXIgcGF0aCBpbiBQcmVmZXJlbmNlcyAtPiBBTUFMVEhFQSBHcmFwaGljYWwgUmVwcmVzZW50YXRpb24iKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCQkKKwkJCQkvLyBnZW5lcmF0ZSBVTUwgYW5kIFNWRworCQkJCUpvYiBqb2IgPSBKb2IuY3JlYXRlKCJHZW5lcmF0ZSBkaWFncmFtIiwgbW9uaXRvciAtPiB7CisJCQkJCUFic3RyYWN0UGxhbnRVTUxCdWlsZGVyIGJ1aWxkZXIgPSBjcmVhdGVQbGFudFVNTEJ1aWxkZXIoc3luYyk7CisJCQkJCUJ1aWxkZXJSZXN1bHQgcmVzdWx0ID0gYnVpbGRlci5nZW5lcmF0ZVBsYW50VU1MKHNlbGVjdGVkKTsKKwkJCQkJCisJCQkJCUxPR0dFUi5pbmZvKHJlc3VsdC5nZXRQbGFudFVNTFRleHQoKSk7CisJCQkJCQorCQkJCQlFeGVjdXRpb25VdGlsLnNldEV4ZWN1dGlvbkNhdGVnb3J5KGdldEV4ZWN1dGlvbkNhdGVnb3J5KCkpOworCQkJCQlTdHJpbmcgZmlsZU5hbWVQcmVmaXggPSBnZXRGaWxlTmFtZVByZWZpeChlT2JqZWN0ICE9IG51bGwgPyBlT2JqZWN0IDogc2VsZWN0ZWQpOworCQkJCQlTdHJpbmcgc3ZnRmlsZVBhdGggPSBEaWFncmFtQ3JlYXRvci5nZW5lcmF0ZVNWRyhyZXN1bHQsIGdlbkZvbGRlciwgZmlsZU5hbWVQcmVmaXgsIGVPYmplY3QpOworCQkJCQkKKwkJCQkJc3luYy5hc3luY0V4ZWMoKCkgLT4geworCQkJCQkJLy8gZGlzcGxheSB2aWV3CisJCQkJCQlNUGFydCBkaWFncmFtUGFydCA9IHBhcnRTZXJ2aWNlLmZpbmRQYXJ0KERpYWdyYW1WaWV3LklEKTsKKwkJCQkJCWlmIChkaWFncmFtUGFydCA9PSBudWxsKSB7CisJCQkJCQkJZGlhZ3JhbVBhcnQgPSBwYXJ0U2VydmljZS5jcmVhdGVQYXJ0KERpYWdyYW1WaWV3LklEKTsKKwkJCQkJCX0KKwkJCQkJCWlmIChkaWFncmFtUGFydCAhPSBudWxsKSB7CisJCQkJCQkJcGFydFNlcnZpY2Uuc2hvd1BhcnQoZGlhZ3JhbVBhcnQsIFBhcnRTdGF0ZS5WSVNJQkxFKTsKKwkJCQkJCQlEaWFncmFtVmlldyBkaWFncmFtVmlldyA9IChEaWFncmFtVmlldykgZGlhZ3JhbVBhcnQuZ2V0T2JqZWN0KCk7CisJCQkJCQkJZGlhZ3JhbVZpZXcuc2hvd0RpYWdyYW0oZmlsZU5hbWVQcmVmaXgsIGVPYmplY3QsIHN2Z0ZpbGVQYXRoLCByZXN1bHQuZ2V0SWQyT2JqZWN0TWFwKCkpOworCQkJCQkJfQorCQkJCQl9KTsKKwkJCQl9KTsKKwkJCQlqb2Iuc2NoZWR1bGUoKTsKKwkJCX0KKwkJfQorCX0KKwkKKwlwcm90ZWN0ZWQgYm9vbGVhbiB2ZXJpZnlEb3RQYXRoKFNoZWxsIHNoZWxsLCBTdHJpbmcgZG90UGF0aCkgeworCQlpZiAoZG90UGF0aCA9PSBudWxsKSB7CisJCQlvcGVuRXJyb3JEaWFsb2coc2hlbGwsICJNaXNzaW5nIEdyYXBodml6IERPVC5leGUgbG9jYXRpb24gaW4gUHJlZmVyZW5jZXMuIitTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikrIlBsZWFzZSBzcGVjaWZ5IGxvY2F0aW9uIHZpYSBcIldpbmRvdyAtIFByZWZlcmVuY2VzIC0gUGxhbnRVTUwgLSBQYXRoIHRvIHRoZSBkb3QgZXhlY3V0YWJsZSBvZiBHcmFwaHZpei5cIiIpOworCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKCFuZXcgRmlsZShkb3RQYXRoKS5leGlzdHMoKSkgeworCQkJb3BlbkVycm9yRGlhbG9nKHNoZWxsLCAiSW52YWxpZCBwYXRoIG9mIEdyYXBodml6IERPVC5leGUgaXMgcHJlc2VudCBpbiBQcmVmZXJlbmNlcy4iK1N5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSsiUGxlYXNlIHNwZWNpZnkgdmFsaWQgcGF0aCB2aWEgXCJXaW5kb3cgLSBQcmVmZXJlbmNlcyAtIFBsYW50VU1MIC0gUGF0aCB0byB0aGUgZG90IGV4ZWN1dGFibGUgb2YgR3JhcGh2aXouXCIiKTsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCisJCVN5c3RlbS5zZXRQcm9wZXJ0eSgiR1JBUEhWSVpfRE9UIiwgZG90UGF0aCk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCQorCXByb3RlY3RlZCB2b2lkIG9wZW5FcnJvckRpYWxvZyhTaGVsbCBzaGVsbCkgeworCQlvcGVuRXJyb3JEaWFsb2coc2hlbGwsICJTZWxlY3RlZCBvYmplY3QgaXMgbm90IGEgRU1GIG9iamVjdCIpOworCX0KKworCXByb3RlY3RlZCB2b2lkIG9wZW5FcnJvckRpYWxvZyhTaGVsbCBzaGVsbCwgU3RyaW5nIG1zZykgeworCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihzaGVsbCwgIkVNRiBjb250ZW50IGV4dHJhY3RvciBkaWFsb2ciLCBtc2cpOworCX0KKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvQ29weUNvbnRlbnRzSGFuZGxlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9Db3B5Q29udGVudHNIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNmFjMQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvQ29weUNvbnRlbnRzSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsNTMgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnM7CisKK2ltcG9ydCBqYXZhLmF3dC5Ub29sa2l0OworaW1wb3J0IGphdmEuYXd0LmRhdGF0cmFuc2Zlci5DbGlwYm9hcmQ7CitpbXBvcnQgamF2YS5hd3QuZGF0YXRyYW5zZmVyLlN0cmluZ1NlbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CisKK2ltcG9ydCBqYXZheC5pbmplY3QuTmFtZWQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmFubm90YXRpb25zLkV4ZWN1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuSVNlcnZpY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVOYW1lZEVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKKworcHVibGljIGNsYXNzIENvcHlDb250ZW50c0hhbmRsZXIgeworCisJQEV4ZWN1dGUKKwlwdWJsaWMgdm9pZCBleGVjdXRlKEBOYW1lZChJU2VydmljZUNvbnN0YW50cy5BQ1RJVkVfU0VMRUNUSU9OKSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKKwkJU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisKKwkJSXRlcmF0b3I8Pz4gaXRlcmF0b3IgPSBzZWxlY3Rpb24uaXRlcmF0b3IoKTsKKworCQl3aGlsZSAoaXRlcmF0b3IuaGFzTmV4dCgpKSB7CisJCQlPYmplY3QgbmV4dCA9IGl0ZXJhdG9yLm5leHQoKTsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXh0KTsKKworCQkJaWYgKG5leHQgaW5zdGFuY2VvZiBFTmFtZWRFbGVtZW50KSB7CisJCQkJU3RyaW5nIG5hbWUgPSAoKEVOYW1lZEVsZW1lbnQpIG5leHQpLmdldE5hbWUoKTsKKwkJCQlzYi5hcHBlbmQobmFtZSk7CisJCQkJc2IuYXBwZW5kKCJcbiIpOworCQkJfQorCQl9CisJCVN0cmluZ1NlbGVjdGlvbiBzZWxlY3Rpb24xID0gbmV3IFN0cmluZ1NlbGVjdGlvbihzYi50b1N0cmluZygpKTsKKwkJQ2xpcGJvYXJkIGNsaXBib2FyZCA9IFRvb2xraXQuZ2V0RGVmYXVsdFRvb2xraXQoKS5nZXRTeXN0ZW1DbGlwYm9hcmQoKTsKKwkJY2xpcGJvYXJkLnNldENvbnRlbnRzKHNlbGVjdGlvbjEsIHNlbGVjdGlvbjEpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9FQ2xhc3NBbGxSZWZlcmVuY2VzSGFuZGxlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9FQ2xhc3NBbGxSZWZlcmVuY2VzSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZDE2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0VDbGFzc0FsbFJlZmVyZW5jZXNIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVyczsKKworaW1wb3J0IGphdmF4LmluamVjdC5OYW1lZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkFic3RyYWN0UGxhbnRVTUxCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkVDbGFzc0FsbFJlZmVyZW5jZXNCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHMuRXhlY3V0aW9uQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5FeGVjdXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LmNvcmUuZGkuYW5ub3RhdGlvbnMuT3B0aW9uYWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5leHRlbnNpb25zLlByZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuVUlTeW5jaHJvbml6ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5JU2VydmljZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gubW9kZWxpbmcuRVBhcnRTZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CisKK2ltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNsaXBzZS51dGlscy5QbGFudHVtbENvbnN0YW50czsKKworQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKK3B1YmxpYyBjbGFzcyBFQ2xhc3NBbGxSZWZlcmVuY2VzSGFuZGxlciBleHRlbmRzIEFic3RyYWN0UGxhbnRVTUxIYW5kbGVyIHsKKwkKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIgY3JlYXRlUGxhbnRVTUxCdWlsZGVyKFVJU3luY2hyb25pemUgc3luYykgeworCQlyZXR1cm4gbmV3IEVDbGFzc0FsbFJlZmVyZW5jZXNCdWlsZGVyKCk7IAorCX0KKwkKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRXhlY3V0aW9uQ2F0ZWdvcnkgZ2V0RXhlY3V0aW9uQ2F0ZWdvcnkoKSB7CisJCXJldHVybiBFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NBbGxSZWZlcmVuY2VzOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lUHJlZml4KE9iamVjdCBlT2JqZWN0KSB7CisJCWlmIChlT2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdCllT2JqZWN0KS5lQ2xhc3MoKS5nZXROYW1lKCkgKyAiX1N1cGVyVHlwZXNfUmVmZXJlbmNlcyI7CisJCX0KKwkJcmV0dXJuIGVPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiX1N1cGVyVHlwZXNfUmVmZXJlbmNlcyI7CisJfQorCisJQE92ZXJyaWRlCisJQEV4ZWN1dGUKKwlwdWJsaWMgdm9pZCBleGVjdXRlKAorCQkJU2hlbGwgc2hlbGwsCisJCQlVSVN5bmNocm9uaXplIHN5bmMsCisJCQlAT3B0aW9uYWwKKwkJCUBQcmVmZXJlbmNlKAorCQkJCQlub2RlUGF0aCA9ICJuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNsaXBzZSIsIAorCQkJCQl2YWx1ZSA9IFBsYW50dW1sQ29uc3RhbnRzLkdSQVBIVklaX1BBVEgpIAorCQkJU3RyaW5nIGRvdFBhdGgsCisJCQlAT3B0aW9uYWwKKwkJCUBQcmVmZXJlbmNlKAorCQkJCQlub2RlUGF0aCA9ICJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbCIsIAorCQkJCQl2YWx1ZSA9IFByZWZlcmVuY2VDb25zdGFudHMuUF9GT0xERVJfUEFUSCkgCisJCQlTdHJpbmcgZ2VuRm9sZGVyUGF0aCwKKwkJCUBOYW1lZChJU2VydmljZUNvbnN0YW50cy5BQ1RJVkVfU0VMRUNUSU9OKSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sCisJCQlFUGFydFNlcnZpY2UgcGFydFNlcnZpY2UpIHsKKwkJCisJCXN1cGVyLmV4ZWN1dGUoc2hlbGwsIHN5bmMsIGRvdFBhdGgsIGdlbkZvbGRlclBhdGgsIHNlbGVjdGlvbiwgcGFydFNlcnZpY2UpOworCX0KK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvRUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHlIYW5kbGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhM2RjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnM7CisKK2ltcG9ydCBqYXZheC5pbmplY3QuTmFtZWQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVycy5BYnN0cmFjdFBsYW50VU1MQnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVycy5FQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC51dGlscy5FeGVjdXRpb25DYXRlZ29yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmFubm90YXRpb25zLkV4ZWN1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5PcHRpb25hbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmV4dGVuc2lvbnMuUHJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS5kaS5VSVN5bmNocm9uaXplOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLklTZXJ2aWNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5tb2RlbGluZy5FUGFydFNlcnZpY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKKworaW1wb3J0IG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5lY2xpcHNlLnV0aWxzLlBsYW50dW1sQ29uc3RhbnRzOworCitAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQorcHVibGljIGNsYXNzIEVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlciBleHRlbmRzIEFic3RyYWN0UGxhbnRVTUxIYW5kbGVyIHsKKwkKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIgY3JlYXRlUGxhbnRVTUxCdWlsZGVyKFVJU3luY2hyb25pemUgc3luYykgeworCQlyZXR1cm4gbmV3IEVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5QnVpbGRlcigpOyAKKwl9CisJCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEV4ZWN1dGlvbkNhdGVnb3J5IGdldEV4ZWN1dGlvbkNhdGVnb3J5KCkgeworCQlyZXR1cm4gRXhlY3V0aW9uQ2F0ZWdvcnkuZUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHk7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0RmlsZU5hbWVQcmVmaXgoT2JqZWN0IGVPYmplY3QpIHsKKwkJaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlyZXR1cm4gKChFT2JqZWN0KWVPYmplY3QpLmVDbGFzcygpLmdldE5hbWUoKSArICJfX2NvbnRlbnRzX2RlZXBfSGllcmFyY2h5IjsKKwkJfQorCQlyZXR1cm4gZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArICJfX2NvbnRlbnRzX2RlZXBfSGllcmFyY2h5IjsKKwl9CisJCisJQE92ZXJyaWRlCisJQEV4ZWN1dGUKKwlwdWJsaWMgdm9pZCBleGVjdXRlKAorCQkJU2hlbGwgc2hlbGwsCisJCQlVSVN5bmNocm9uaXplIHN5bmMsCisJCQlAT3B0aW9uYWwKKwkJCUBQcmVmZXJlbmNlKAorCQkJCQlub2RlUGF0aCA9ICJuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNsaXBzZSIsIAorCQkJCQl2YWx1ZSA9IFBsYW50dW1sQ29uc3RhbnRzLkdSQVBIVklaX1BBVEgpIAorCQkJU3RyaW5nIGRvdFBhdGgsCisJCQlAT3B0aW9uYWwKKwkJCUBQcmVmZXJlbmNlKAorCQkJCQlub2RlUGF0aCA9ICJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbCIsIAorCQkJCQl2YWx1ZSA9IFByZWZlcmVuY2VDb25zdGFudHMuUF9GT0xERVJfUEFUSCkgCisJCQlTdHJpbmcgZ2VuRm9sZGVyUGF0aCwKKwkJCUBOYW1lZChJU2VydmljZUNvbnN0YW50cy5BQ1RJVkVfU0VMRUNUSU9OKSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sCisJCQlFUGFydFNlcnZpY2UgcGFydFNlcnZpY2UpIHsKKwkJCisJCXN1cGVyLmV4ZWN1dGUoc2hlbGwsIHN5bmMsIGRvdFBhdGgsIGdlbkZvbGRlclBhdGgsIHNlbGVjdGlvbiwgcGFydFNlcnZpY2UpOworCX0KK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlSGFuZGxlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1MzM5MQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnM7CisKK2ltcG9ydCBqYXZheC5pbmplY3QuTmFtZWQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVycy5BYnN0cmFjdFBsYW50VU1MQnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVycy5FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHMuRXhlY3V0aW9uQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5FeGVjdXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LmNvcmUuZGkuYW5ub3RhdGlvbnMuT3B0aW9uYWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5leHRlbnNpb25zLlByZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuVUlTeW5jaHJvbml6ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5JU2VydmljZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gubW9kZWxpbmcuRVBhcnRTZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CisKK2ltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNsaXBzZS51dGlscy5QbGFudHVtbENvbnN0YW50czsKKworQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKK3B1YmxpYyBjbGFzcyBFQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RQbGFudFVNTEhhbmRsZXIgeworCQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBBYnN0cmFjdFBsYW50VU1MQnVpbGRlciBjcmVhdGVQbGFudFVNTEJ1aWxkZXIoVUlTeW5jaHJvbml6ZSBzeW5jKSB7CisJCXJldHVybiBuZXcgRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlQnVpbGRlcigpOyAKKwl9CisJCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEV4ZWN1dGlvbkNhdGVnb3J5IGdldEV4ZWN1dGlvbkNhdGVnb3J5KCkgeworCQlyZXR1cm4gRXhlY3V0aW9uQ2F0ZWdvcnkuZUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lUHJlZml4KE9iamVjdCBlT2JqZWN0KSB7CisJCWlmIChlT2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdCllT2JqZWN0KS5lQ2xhc3MoKS5nZXROYW1lKCkgKyAiX19yZWZlcmVuY2VfdHlwZV9IaWVyYXJjaHkiOworCQl9CisJCXJldHVybiBlT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIl9fcmVmZXJlbmNlX3R5cGVfSGllcmFyY2h5IjsKKwl9CisJCisJQE92ZXJyaWRlCisJQEV4ZWN1dGUKKwlwdWJsaWMgdm9pZCBleGVjdXRlKAorCQkJU2hlbGwgc2hlbGwsCisJCQlVSVN5bmNocm9uaXplIHN5bmMsCisJCQlAT3B0aW9uYWwKKwkJCUBQcmVmZXJlbmNlKAorCQkJCQlub2RlUGF0aCA9ICJuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNsaXBzZSIsIAorCQkJCQl2YWx1ZSA9IFBsYW50dW1sQ29uc3RhbnRzLkdSQVBIVklaX1BBVEgpIAorCQkJU3RyaW5nIGRvdFBhdGgsCisJCQlAT3B0aW9uYWwKKwkJCUBQcmVmZXJlbmNlKAorCQkJCQlub2RlUGF0aCA9ICJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbCIsIAorCQkJCQl2YWx1ZSA9IFByZWZlcmVuY2VDb25zdGFudHMuUF9GT0xERVJfUEFUSCkgCisJCQlTdHJpbmcgZ2VuRm9sZGVyUGF0aCwKKwkJCUBOYW1lZChJU2VydmljZUNvbnN0YW50cy5BQ1RJVkVfU0VMRUNUSU9OKSBJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24sCisJCQlFUGFydFNlcnZpY2UgcGFydFNlcnZpY2UpIHsKKwkJCisJCXN1cGVyLmV4ZWN1dGUoc2hlbGwsIHN5bmMsIGRvdFBhdGgsIGdlbkZvbGRlclBhdGgsIHNlbGVjdGlvbiwgcGFydFNlcnZpY2UpOworCX0KK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvRUNsYXNzQ29udGVudHNIYW5kbGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YzI2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsNzcgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQorICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICogCisgKiBDb250cmlidXRvcnM6CisgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnM7CisKK2ltcG9ydCBqYXZheC5pbmplY3QuTmFtZWQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVycy5BYnN0cmFjdFBsYW50VU1MQnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5idWlsZGVycy5FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHMuRXhlY3V0aW9uQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5FeGVjdXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LmNvcmUuZGkuYW5ub3RhdGlvbnMuT3B0aW9uYWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5leHRlbnNpb25zLlByZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuVUlTeW5jaHJvbml6ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5JU2VydmljZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gubW9kZWxpbmcuRVBhcnRTZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CisKK2ltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNsaXBzZS51dGlscy5QbGFudHVtbENvbnN0YW50czsKKworQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKK3B1YmxpYyBjbGFzcyBFQ2xhc3NDb250ZW50c0hhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdFBsYW50VU1MSGFuZGxlciB7CisJCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEFic3RyYWN0UGxhbnRVTUxCdWlsZGVyIGNyZWF0ZVBsYW50VU1MQnVpbGRlcihVSVN5bmNocm9uaXplIHN5bmMpIHsKKwkJcmV0dXJuIG5ldyBFQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWlsZGVyKCk7IAorCX0KKwkKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgRXhlY3V0aW9uQ2F0ZWdvcnkgZ2V0RXhlY3V0aW9uQ2F0ZWdvcnkoKSB7CisJCXJldHVybiBFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NDb250ZW50czsKKwl9CisJCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRGaWxlTmFtZVByZWZpeChPYmplY3QgZU9iamVjdCkgeworCQlpZiAoZU9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKKwkJCXJldHVybiAoKEVPYmplY3QpZU9iamVjdCkuZUNsYXNzKCkuZ2V0TmFtZSgpICsgIl9fcHJlY2lzZV9IaWVyYXJjaHkiOworCQl9CisJCXJldHVybiBlT2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIl9fcHJlY2lzZV9IaWVyYXJjaHkiOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlARXhlY3V0ZQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoCisJCQlTaGVsbCBzaGVsbCwKKwkJCVVJU3luY2hyb25pemUgc3luYywKKwkJCUBPcHRpb25hbAorCQkJQFByZWZlcmVuY2UoCisJCQkJCW5vZGVQYXRoID0gIm5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5lY2xpcHNlIiwgCisJCQkJCXZhbHVlID0gUGxhbnR1bWxDb25zdGFudHMuR1JBUEhWSVpfUEFUSCkgCisJCQlTdHJpbmcgZG90UGF0aCwKKwkJCUBPcHRpb25hbAorCQkJQFByZWZlcmVuY2UoCisJCQkJCW5vZGVQYXRoID0gIm9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sIiwgCisJCQkJCXZhbHVlID0gUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRIKSAKKwkJCVN0cmluZyBnZW5Gb2xkZXJQYXRoLAorCQkJQE5hbWVkKElTZXJ2aWNlQ29uc3RhbnRzLkFDVElWRV9TRUxFQ1RJT04pIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwKKwkJCUVQYXJ0U2VydmljZSBwYXJ0U2VydmljZSkgeworCQkKKwkJc3VwZXIuZXhlY3V0ZShzaGVsbCwgc3luYywgZG90UGF0aCwgZ2VuRm9sZGVyUGF0aCwgc2VsZWN0aW9uLCBwYXJ0U2VydmljZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9FQ2xhc3NIaWVyYXJjaHlIYW5kbGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0VDbGFzc0hpZXJhcmNoeUhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDkzZWJiCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9FQ2xhc3NIaWVyYXJjaHlIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw4MSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVyczsKKworaW1wb3J0IGphdmF4LmluamVjdC5OYW1lZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkFic3RyYWN0UGxhbnRVTUxCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkVDbGFzc0hpZXJhcmNoeUJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC51dGlscy5FeGVjdXRpb25DYXRlZ29yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmFubm90YXRpb25zLkV4ZWN1dGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5PcHRpb25hbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmV4dGVuc2lvbnMuUHJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS5kaS5VSVN5bmNocm9uaXplOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzLklTZXJ2aWNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5tb2RlbGluZy5FUGFydFNlcnZpY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKKworaW1wb3J0IG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5lY2xpcHNlLnV0aWxzLlBsYW50dW1sQ29uc3RhbnRzOworCitAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQorcHVibGljIGNsYXNzIEVDbGFzc0hpZXJhcmNoeUhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdFBsYW50VU1MSGFuZGxlciB7CisJCisJRVBhcnRTZXJ2aWNlIHBhcnRTZXJ2aWNlOworCQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBBYnN0cmFjdFBsYW50VU1MQnVpbGRlciBjcmVhdGVQbGFudFVNTEJ1aWxkZXIoVUlTeW5jaHJvbml6ZSBzeW5jKSB7CisJCXJldHVybiBuZXcgRUNsYXNzSGllcmFyY2h5QnVpbGRlcigpOyAKKwl9CisJCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEV4ZWN1dGlvbkNhdGVnb3J5IGdldEV4ZWN1dGlvbkNhdGVnb3J5KCkgeworCQlyZXR1cm4gRXhlY3V0aW9uQ2F0ZWdvcnkuZUNsYXNzSGllcmFyY2h5OworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lUHJlZml4KE9iamVjdCBlT2JqZWN0KSB7CisJCWlmIChlT2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJcmV0dXJuICgoRU9iamVjdCllT2JqZWN0KS5lQ2xhc3MoKS5nZXROYW1lKCkgKyAiX19lY2xhc3NfSGllcmFyY2h5IjsKKwkJfQorCQlyZXR1cm4gZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArICJfX2VjbGFzc19IaWVyYXJjaHkiOworCX0KKwkKKwlAT3ZlcnJpZGUKKwlARXhlY3V0ZQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoCisJCQlTaGVsbCBzaGVsbCwKKwkJCVVJU3luY2hyb25pemUgc3luYywKKwkJCUBPcHRpb25hbAorCQkJQFByZWZlcmVuY2UoCisJCQkJCW5vZGVQYXRoID0gIm5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5lY2xpcHNlIiwgCisJCQkJCXZhbHVlID0gUGxhbnR1bWxDb25zdGFudHMuR1JBUEhWSVpfUEFUSCkgCisJCQlTdHJpbmcgZG90UGF0aCwKKwkJCUBPcHRpb25hbAorCQkJQFByZWZlcmVuY2UoCisJCQkJCW5vZGVQYXRoID0gIm9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sIiwgCisJCQkJCXZhbHVlID0gUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRIKSAKKwkJCVN0cmluZyBnZW5Gb2xkZXJQYXRoLAorCQkJQE5hbWVkKElTZXJ2aWNlQ29uc3RhbnRzLkFDVElWRV9TRUxFQ1RJT04pIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbiwKKwkJCUVQYXJ0U2VydmljZSBwYXJ0U2VydmljZSkgeworCQkKKwkJdGhpcy5wYXJ0U2VydmljZSA9IHBhcnRTZXJ2aWNlOworCQkKKwkJc3VwZXIuZXhlY3V0ZShzaGVsbCwgc3luYywgZG90UGF0aCwgZ2VuRm9sZGVyUGF0aCwgc2VsZWN0aW9uLCBwYXJ0U2VydmljZSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9FT2JqZWN0UmVmc0hhbmRsZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvRU9iamVjdFJlZnNIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjYjc4OAotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvRU9iamVjdFJlZnNIYW5kbGVyLmphdmEKQEAgLTAsMCArMSw5NyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVyczsKKworaW1wb3J0IGphdmF4LmluamVjdC5OYW1lZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkFic3RyYWN0UGxhbnRVTUxCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkVPYmplY3RSZWZzQnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnV0aWxzLkV4ZWN1dGlvbkNhdGVnb3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LmNvcmUuZGkuYW5ub3RhdGlvbnMuRXhlY3V0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmFubm90YXRpb25zLk9wdGlvbmFsOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LmNvcmUuZGkuZXh0ZW5zaW9ucy5QcmVmZXJlbmNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLmRpLlVJU3luY2hyb25pemU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuSVNlcnZpY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLm1vZGVsaW5nLkVQYXJ0U2VydmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CisKK2ltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNsaXBzZS51dGlscy5QbGFudHVtbENvbnN0YW50czsKKworQFN1cHByZXNzV2FybmluZ3MoInJlc3RyaWN0aW9uIikKK3B1YmxpYyBjbGFzcyBFT2JqZWN0UmVmc0hhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdFBsYW50VU1MSGFuZGxlciB7CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgQWJzdHJhY3RQbGFudFVNTEJ1aWxkZXIgY3JlYXRlUGxhbnRVTUxCdWlsZGVyKFVJU3luY2hyb25pemUgc3luYykgeworCQlyZXR1cm4gbmV3IEVPYmplY3RSZWZzQnVpbGRlcihzeW5jKTsgCisJfQorCQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBFeGVjdXRpb25DYXRlZ29yeSBnZXRFeGVjdXRpb25DYXRlZ29yeSgpIHsKKwkJcmV0dXJuIEV4ZWN1dGlvbkNhdGVnb3J5LmVPYmplY3RSZWZzOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0RmlsZU5hbWVQcmVmaXgoT2JqZWN0IGVPYmplY3QpIHsKKwkJaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlFT2JqZWN0IGUgPSAoRU9iamVjdCllT2JqZWN0OworCQkJRVN0cnVjdHVyYWxGZWF0dXJlIGVTdHJ1Y3R1cmFsRmVhdHVyZSA9IGUuZUNsYXNzKCkuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlKCJuYW1lIik7CisJCQkKKwkJCVN0cmluZyBuYW1lID0gKGVTdHJ1Y3R1cmFsRmVhdHVyZSAhPSBudWxsKSAKKwkJCQkJPyAoU3RyaW5nKSBlLmVHZXQoZVN0cnVjdHVyYWxGZWF0dXJlKSAKKwkJCQkJOiBlLmVDbGFzcygpLmdldE5hbWUoKSArICJfXyIgKyBlT2JqZWN0Lmhhc2hDb2RlKCk7CisJCQkKKwkJCXJldHVybiBlLmVDbGFzcygpLmdldE5hbWUoKSArICJfXyIgKyBuYW1lICsgIl9SZWZlcmVuY2VzIjsKKwkJfQorCQlyZXR1cm4gZU9iamVjdC5nZXRDbGFzcygpLmdldE5hbWUoKSArICJfXyIgKyAiX1JlZmVyZW5jZXMiOworCX0KKworCUBPdmVycmlkZQorCUBFeGVjdXRlCisJcHVibGljIHZvaWQgZXhlY3V0ZSgKKwkJCVNoZWxsIHNoZWxsLAorCQkJVUlTeW5jaHJvbml6ZSBzeW5jLAorCQkJQE9wdGlvbmFsCisJCQlAUHJlZmVyZW5jZSgKKwkJCQkJbm9kZVBhdGggPSAibmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmVjbGlwc2UiLCAKKwkJCQkJdmFsdWUgPSBQbGFudHVtbENvbnN0YW50cy5HUkFQSFZJWl9QQVRIKSAKKwkJCVN0cmluZyBkb3RQYXRoLAorCQkJQE9wdGlvbmFsCisJCQlAUHJlZmVyZW5jZSgKKwkJCQkJbm9kZVBhdGggPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwiLCAKKwkJCQkJdmFsdWUgPSBQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRk9MREVSX1BBVEgpIAorCQkJU3RyaW5nIGdlbkZvbGRlclBhdGgsCisJCQlATmFtZWQoSVNlcnZpY2VDb25zdGFudHMuQUNUSVZFX1NFTEVDVElPTikgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLAorCQkJRVBhcnRTZXJ2aWNlIHBhcnRTZXJ2aWNlKSB7CisJCQorCQlPYmplY3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlleGVjdXRlKAorCQkJCQlzaGVsbCwKKwkJCQkJc3luYywKKwkJCQkJZG90UGF0aCwKKwkJCQkJZ2VuRm9sZGVyUGF0aCwKKwkJCQkJcGFydFNlcnZpY2UsCisJCQkJCWVsZW1lbnQsCisJCQkJCShFT2JqZWN0KWVsZW1lbnQpOworCQl9IGVsc2UgeworCQkJb3BlbkVycm9yRGlhbG9nKHNoZWxsKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvTGlua1dpdGhFZGl0b3JIYW5kbGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0xpbmtXaXRoRWRpdG9ySGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Y2E3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL2hhbmRsZXJzL0xpbmtXaXRoRWRpdG9ySGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKKyAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAorICoKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8gCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXJzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudmlld3MuRGlhZ3JhbVZpZXc7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5jb250ZXh0cy5BY3RpdmU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5FeGVjdXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLm1vZGVsLmFwcGxpY2F0aW9uLnVpLmJhc2ljLk1QYXJ0OworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLm1vZGVsLmFwcGxpY2F0aW9uLnVpLm1lbnUuTURpcmVjdFRvb2xJdGVtOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLm1vZGVsLmFwcGxpY2F0aW9uLnVpLm1lbnUuTVRvb2xCYXJFbGVtZW50OworCitwdWJsaWMgY2xhc3MgTGlua1dpdGhFZGl0b3JIYW5kbGVyIHsKKwkKKwlARXhlY3V0ZQorCXB1YmxpYyB2b2lkIGV4ZWN1dGUoQEFjdGl2ZSBNUGFydCBhY3RpdmVQYXJ0KSB7CisJCQorCQlpZiAoYWN0aXZlUGFydC5nZXRPYmplY3QoKSBpbnN0YW5jZW9mIERpYWdyYW1WaWV3KSB7CisJCQlmb3IgKE1Ub29sQmFyRWxlbWVudCBlbGVtZW50IDogYWN0aXZlUGFydC5nZXRUb29sYmFyKCkuZ2V0Q2hpbGRyZW4oKSkgeworCQkJCWlmIChlbGVtZW50LmdldEVsZW1lbnRJZCgpLmVxdWFscygib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuZGlyZWN0dG9vbGl0ZW0uc2VsZWN0IikpIHsKKwkJCQkJTURpcmVjdFRvb2xJdGVtIHRvb2xJdGVtID0gKE1EaXJlY3RUb29sSXRlbSkgZWxlbWVudDsKKwkJCQkJCisJCQkJCURpYWdyYW1WaWV3IGRpYWdyYW1WaWV3ID0gKERpYWdyYW1WaWV3KSBhY3RpdmVQYXJ0LmdldE9iamVjdCgpOworCQkJCQkKKwkJCQkJYm9vbGVhbiBpc0xpbmtlZCA9IGRpYWdyYW1WaWV3LmlzTGlua2VkV2l0aEVkaXRvcigpOworCQkJCQlkaWFncmFtVmlldy5zZXRMaW5rZWRXaXRoRWRpdG9yKCFpc0xpbmtlZCk7CisJCQkJCXRvb2xJdGVtLnNldFNlbGVjdGVkKCFpc0xpbmtlZCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvT2JqZWN0Q29udGVudEhhbmRsZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvaGFuZGxlcnMvT2JqZWN0Q29udGVudEhhbmRsZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWU2YThjCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9oYW5kbGVycy9PYmplY3RDb250ZW50SGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsMTAyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKKyAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIAorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXJzOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKKworaW1wb3J0IGphdmF4LmluamVjdC5OYW1lZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkFic3RyYWN0UGxhbnRVTUxCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLk9iamVjdENvbnRlbnRCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHMuRXhlY3V0aW9uQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5FeGVjdXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LmNvcmUuZGkuYW5ub3RhdGlvbnMuT3B0aW9uYWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5leHRlbnNpb25zLlByZWZlcmVuY2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuVUlTeW5jaHJvbml6ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS5zZXJ2aWNlcy5JU2VydmljZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gubW9kZWxpbmcuRVBhcnRTZXJ2aWNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOworCitpbXBvcnQgbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmVjbGlwc2UudXRpbHMuUGxhbnR1bWxDb25zdGFudHM7CisKK0BTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpCitwdWJsaWMgY2xhc3MgT2JqZWN0Q29udGVudEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdFBsYW50VU1MSGFuZGxlciB7CisJCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIEFic3RyYWN0UGxhbnRVTUxCdWlsZGVyIGNyZWF0ZVBsYW50VU1MQnVpbGRlcihVSVN5bmNocm9uaXplIHN5bmMpIHsKKwkJcmV0dXJuIG5ldyBPYmplY3RDb250ZW50QnVpbGRlcihzeW5jKTsgCisJfQorCQorCUBPdmVycmlkZQorCXByb3RlY3RlZCBFeGVjdXRpb25DYXRlZ29yeSBnZXRFeGVjdXRpb25DYXRlZ29yeSgpIHsKKwkJcmV0dXJuIEV4ZWN1dGlvbkNhdGVnb3J5LmR1bW15OworCX0KKwkKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldEZpbGVOYW1lUHJlZml4KE9iamVjdCBlT2JqZWN0KSB7CisJCWlmIChlT2JqZWN0IGluc3RhbmNlb2YgRUxpc3QpIHsKKwkJCUVMaXN0PD8+IGVMaXN0ID0gKEVMaXN0PD8+KSBlT2JqZWN0OworCQkJU3RyaW5nIHR5cGVTdHJpbmcgPSAiIjsKKwkJCWlmICghZUxpc3QuaXNFbXB0eSgpKSB7CisJCQkJVHlwZVtdIGdlbmVyaWNJbnRlcmZhY2VzID0gZUxpc3QuZ2V0Q2xhc3MoKS5nZXRHZW5lcmljSW50ZXJmYWNlcygpOworCQkJCQorCQkJCXR5cGVTdHJpbmcgPSBnZW5lcmljSW50ZXJmYWNlcy5sZW5ndGggPiAwID8gZ2VuZXJpY0ludGVyZmFjZXNbMF0uZ2V0VHlwZU5hbWUoKSA6ICIiOworCQkJCQorCQkJCS8vIHJlcGxhY2UgZ2VuZXJpYyBpbmZvcm1hdGlvbgorCQkJCXR5cGVTdHJpbmcgPSB0eXBlU3RyaW5nLnJlcGxhY2VBbGwoIjxbYS16QS1aXSs+IiwgIiIpOworCQkJfQorCQkJcmV0dXJuICJDb2xsZWN0aW9uIiArICJfIiArIHR5cGVTdHJpbmcgKyAiX19vYmplY3RfQ29udGVudCI7CisJCX0KKwkJcmV0dXJuIGVPYmplY3QuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiX19vYmplY3RfQ29udGVudCI7CisJfQorCQorCUBPdmVycmlkZQorCUBFeGVjdXRlCisJcHVibGljIHZvaWQgZXhlY3V0ZSgKKwkJCVNoZWxsIHNoZWxsLAorCQkJVUlTeW5jaHJvbml6ZSBzeW5jLAorCQkJQE9wdGlvbmFsCisJCQlAUHJlZmVyZW5jZSgKKwkJCQkJbm9kZVBhdGggPSAibmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmVjbGlwc2UiLCAKKwkJCQkJdmFsdWUgPSBQbGFudHVtbENvbnN0YW50cy5HUkFQSFZJWl9QQVRIKSAKKwkJCVN0cmluZyBkb3RQYXRoLAorCQkJQE9wdGlvbmFsCisJCQlAUHJlZmVyZW5jZSgKKwkJCQkJbm9kZVBhdGggPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwiLCAKKwkJCQkJdmFsdWUgPSBQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRk9MREVSX1BBVEgpIAorCQkJU3RyaW5nIGdlbkZvbGRlclBhdGgsCisJCQlATmFtZWQoSVNlcnZpY2VDb25zdGFudHMuQUNUSVZFX1NFTEVDVElPTikgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uLAorCQkJRVBhcnRTZXJ2aWNlIHBhcnRTZXJ2aWNlKSB7CisJCQorCQlPYmplY3QgZWxlbWVudCA9IHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKKwkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQlleGVjdXRlKAorCQkJCQlzaGVsbCwKKwkJCQkJc3luYywKKwkJCQkJZG90UGF0aCwKKwkJCQkJZ2VuRm9sZGVyUGF0aCwKKwkJCQkJcGFydFNlcnZpY2UsCisJCQkJCWVsZW1lbnQsCisJCQkJCShFT2JqZWN0KWVsZW1lbnQpOworCQl9IGVsc2UgeworCQkJb3BlbkVycm9yRGlhbG9nKHNoZWxsKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9wcmVmZXJlbmNlcy9BbWFsdGhlYUdyYXBoaWNhbFJlcHJlc2VudGF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvcHJlZmVyZW5jZXMvQW1hbHRoZWFHcmFwaGljYWxSZXByZXNlbnRhdGlvblByZWZlcmVuY2VQYWdlLmphdmEKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3ByZWZlcmVuY2VzL0FtYWx0aGVhR3JhcGhpY2FsUmVwcmVzZW50YXRpb25QcmVmZXJlbmNlUGFnZS5qYXZhCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3ByZWZlcmVuY2VzL0FtYWx0aGVhR3JhcGhpY2FsUmVwcmVzZW50YXRpb25QcmVmZXJlbmNlUGFnZS5qYXZhCmluZGV4IGQ1MmFmZWYuLmZjMzAwNzcgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9wcmVmZXJlbmNlcy9BbWFsdGhlYUdyYXBoaWNhbFJlcHJlc2VudGF0aW9uUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3ByZWZlcmVuY2VzL0FtYWx0aGVhR3JhcGhpY2FsUmVwcmVzZW50YXRpb25QcmVmZXJlbmNlUGFnZS5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEyLDE1ICsxMiwxNCBAQAogICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IucHJlZmVyZW5jZXM7CisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwucHJlZmVyZW5jZXM7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLkFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkJvb2xlYW5GaWVsZEVkaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5BY3RpdmF0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5EaXJlY3RvcnlGaWVsZEVkaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkZpZWxkRWRpdG9yUHJlZmVyZW5jZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWxlRmllbGRFZGl0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUGVyc2lzdGVudFByZWZlcmVuY2VTdG9yZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CiBpbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKQEAgLTQxLDggKzQwLDcgQEAKIAlwdWJsaWMgQW1hbHRoZWFHcmFwaGljYWxSZXByZXNlbnRhdGlvblByZWZlcmVuY2VQYWdlKCkgewogCQlzdXBlcihHUklEKTsKIAkJc2V0UHJlZmVyZW5jZVN0b3JlKEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOwotCQlzZXREZXNjcmlwdGlvbigKLQkJCQkiUHJlZmVyZW5jZSBwYWdlIHRvIHNwZWNpZnkgdGhlIEdyYXBodml6IChkb3QgZXhlY3V0YWJsZSkgbG9jYXRpb24gJiB0aGUgZm9sZGVyICh3aXRoIFJXIGFjY2VzcykgdG8gZ2VuZXJhdGUgU1ZHIGZpbGVzIik7CisJCXNldERlc2NyaXB0aW9uKCJQcmVmZXJlbmNlIHBhZ2UgdG8gc3BlY2lmeSB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBkaWFncmFtcyBzaG91bGQgYmUgZ2VuZXJhdGVkLiIpOwogCX0KIAogCS8qKgpAQCAtNTIsNDIgKzUwLDIyIEBACiAJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgY3JlYXRlRmllbGRFZGl0b3JzKCkgewogCi0JCWFkZEZpZWxkKG5ldyBGaWxlRmllbGRFZGl0b3IoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0RPVF9QQVRILCAiJlBhdGggdG8gdGhlIGRvdCBleGVjdXRhYmxlIG9mIEdyYXBodml6OiIsCi0JCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOwotCiAJCWFkZEZpZWxkKG5ldyBEaXJlY3RvcnlGaWVsZEVkaXRvcihQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRk9MREVSX1BBVEgsCiAJCQkJIiZQYXRoIHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgU1ZHIGZpbGVzIHNoYWxsIGJlIGdlbmVyYXRlZDoiLCBnZXRGaWVsZEVkaXRvclBhcmVudCgpKSk7CiAKLQkJYWRkRmllbGQobmV3IEJvb2xlYW5GaWVsZEVkaXRvcihQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRFJJTExfRE9XTiwKLQkJCQkiJlNob3cgdGhlIGRldGFpbHMgb2Ygc2VsZWN0ZWQgZWxlbWVudCAoQ29udGVudHMpIiwgZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOwotCi0JCWFkZEZpZWxkKG5ldyBCb29sZWFuRmllbGRFZGl0b3IoUHJlZmVyZW5jZUNvbnN0YW50cy5QX1JFRFJBV19UUkVFX09OX1NFTEVDVElPTiwKLQkJCQkiJkNvbGxhcHNlIG90aGVyIGVsZW1lbnRzIGFuZCBtYWtlIHRoZSBzZWxlY3Rpb24gKGJ5IGVuYWJsaW5nIHRoaXMgLT4gc2VsZWN0ZWQgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQgbW9yZSBwcmVjaXNlbHkgaW4gdGhlIHRyZWUgKSIsCi0JCQkJZ2V0RmllbGRFZGl0b3JQYXJlbnQoKSkpOwotCiAJfQogCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZSNpbml0KG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2gpCi0JICovCisJQE92ZXJyaWRlCiAJcHVibGljIHZvaWQgaW5pdChmaW5hbCBJV29ya2JlbmNoIHdvcmtiZW5jaCkgewogCX0KIAogCUBPdmVycmlkZQotCXB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQlyZXR1cm4gc3VwZXIucGVyZm9ybU9rKCk7Ci0JfQotCQotCUBPdmVycmlkZQogCXByb3RlY3RlZCB2b2lkIHBlcmZvcm1BcHBseSgpIHsKIAkJc3VwZXIucGVyZm9ybUFwcGx5KCk7Ci0JCQorCiAJCUlQcmVmZXJlbmNlU3RvcmUgcHJlZmVyZW5jZVN0b3JlID0gZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlpZihwcmVmZXJlbmNlU3RvcmUgaW5zdGFuY2VvZiBJUGVyc2lzdGVudFByZWZlcmVuY2VTdG9yZSkgeworCisJCWlmIChwcmVmZXJlbmNlU3RvcmUgaW5zdGFuY2VvZiBJUGVyc2lzdGVudFByZWZlcmVuY2VTdG9yZSkgewogCQkJdHJ5IHsKIAkJCQkoKElQZXJzaXN0ZW50UHJlZmVyZW5jZVN0b3JlKSBwcmVmZXJlbmNlU3RvcmUpLnNhdmUoKTsKIAkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VDb25zdGFudHMuamF2YQppbmRleCAyM2M1ZDQzLi4zNjMxNTNlIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0xLDYgKzEsNiBAQAotIC8qKgorLyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSC4KICAqIAogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKQEAgLTEyLDE4ICsxMiwxNCBAQAogICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IucHJlZmVyZW5jZXM7CisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwucHJlZmVyZW5jZXM7CiAKIC8qKgogICogQ29uc3RhbnQgZGVmaW5pdGlvbnMgZm9yIHBsdWctaW4gcHJlZmVyZW5jZXMKICAqLwogcHVibGljIGNsYXNzIFByZWZlcmVuY2VDb25zdGFudHMgewogCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUF9ET1RfUEFUSCA9ICJQX0RPVF9QQVRIIjsKLQogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBfRk9MREVSX1BBVEggPSAiUF9GT0xERVJfUEFUSCI7CiAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQX0RSSUxMX0RPV04gPSAiUF9EUklMTF9ET1dOIjsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBfUkVEUkFXX1RSRUVfT05fU0VMRUNUSU9OID0gIlBfUkVEUkFXX1RSRUVfT05fU0VMRUNUSU9OIjsKIH0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYxJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKY29weSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCmluZGV4IDA4Y2RjZWUuLjE1YTEzYzEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvcHJlZmVyZW5jZXMvUHJlZmVyZW5jZUluaXRpYWxpemVyLmphdmEKQEAgLTEsNiArMSw2IEBACi0gLyoqCisvKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtMTIsOSArMTIsMTAgQEAKICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5wcmVmZXJlbmNlczsKIAotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuYmFzZS5BY3RpdmF0b3I7CitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnByZWZlcmVuY2VzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuQWN0aXZhdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7CiAKQEAgLTIzLDE1ICsyNCwxNCBAQAogICovCiBwdWJsaWMgY2xhc3MgUHJlZmVyZW5jZUluaXRpYWxpemVyIGV4dGVuZHMgQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIgewogCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5BYnN0cmFjdFByZWZlcmVuY2VJbml0aWFsaXplciNpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkKLQkgKi8KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgdm9pZCBpbml0aWFsaXplRGVmYXVsdFByZWZlcmVuY2VzKCkgeworCiAJCWZpbmFsIElQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlzdG9yZS5zZXREZWZhdWx0KE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuUF9ESUFMT0dfRElTUExBWSwgc3RvcmUuZ2V0U3RyaW5nKE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuUF9ESUFMT0dfRElTUExBWSkgIT0gbnVsbAotCQkJCT8gc3RvcmUuZ2V0U3RyaW5nKE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuUF9ESUFMT0dfRElTUExBWSkgOiAiIik7CisJCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRILAorCQkJCXN0b3JlLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRk9MREVSX1BBVEgpICE9IG51bGwKKwkJCQkJCT8gc3RvcmUuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuUF9GT0xERVJfUEFUSCkKKwkJCQkJCTogIiIpOwogCX0KKwogfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC91dGlscy9EaWFncmFtQ3JlYXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC91dGlscy9EaWFncmFtQ3JlYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDM0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3V0aWxzL0RpYWdyYW1DcmVhdG9yLmphdmEKQEAgLTAsMCArMSwxMjYgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKKyAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIAorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudXRpbHM7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmJ1aWxkZXJzLkJ1aWxkZXJSZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUNvbnRhaW5lcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRm9sZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOworaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOworaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CitpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CisKK2ltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuRmlsZUZvcm1hdDsKK2ltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuRmlsZUZvcm1hdE9wdGlvbjsKK2ltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuU291cmNlU3RyaW5nUmVhZGVyOworCitwdWJsaWMgZmluYWwgY2xhc3MgRGlhZ3JhbUNyZWF0b3IgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgTG9nZ2VyIExPR0dFUiA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKERpYWdyYW1DcmVhdG9yLmNsYXNzKTsKKworCXByaXZhdGUgRGlhZ3JhbUNyZWF0b3IoKSB7CisJCS8vIGVtcHR5IGRlZmF1bHQgY29uc3RydWN0b3IgZm9yIHN0YXRpYyBoZWxwZXIgY2xhc3MKKwl9CisJCisJcHVibGljIHN0YXRpYyBTdHJpbmcgZ2VuZXJhdGVTVkcoCisJCQlCdWlsZGVyUmVzdWx0IHJlc3VsdCwgCisJCQlTdHJpbmcgZ2VuRm9sZGVyLCAKKwkJCVN0cmluZyBmaWxlTmFtZVByZWZpeCwKKwkJCUVPYmplY3Qgc2VsZWN0ZWRFbGVtZW50KSB7CisJCQorCQlTb3VyY2VTdHJpbmdSZWFkZXIgcmVhZGVyID0gbmV3IFNvdXJjZVN0cmluZ1JlYWRlcihyZXN1bHQuZ2V0UGxhbnRVTUxUZXh0KCkpOworCisJCVN0cmluZyBnZW5GaWxlTG9jYXRpb24gPSBnZW5Gb2xkZXIgKyAiLyIgKyBmaWxlTmFtZVByZWZpeDsJLy8gYWx3YXlzIHVzZSBzdGFuZGFyZCBkZWxpbWl0ZXIgIQorCisJCS8vIHdyaXRlIHBsYW50dW1sIGZpbGUKKwkJdHJ5IChGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShuZXcgRmlsZShnZW5GaWxlTG9jYXRpb24gKyAiLnBsYW50dW1sIikpOworCQkJCUJ1ZmZlcmVkV3JpdGVyIGJ3ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZmlsZU91dHB1dFN0cmVhbSkpOykgeworCQkJYncud3JpdGUocmVzdWx0LmdldFBsYW50VU1MVGV4dCgpKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJTE9HR0VSLmVycm9yKCJFcnJvciBvbiBQbGFudFVNTCBwZXJzaXN0ZW5jZSIsIGUpOworCQl9CisKKwkJLy8gd3JpdGUgU1ZHIGZpbGUKKwkJRmlsZSBzdmdGaWxlID0gbmV3IEZpbGUoZ2VuRmlsZUxvY2F0aW9uICsgIi5zdmciKTsKKwkJdHJ5IChGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShzdmdGaWxlKTspIHsKKwkJCXJlYWRlci5vdXRwdXRJbWFnZShmaWxlT3V0cHV0U3RyZWFtLCBuZXcgRmlsZUZvcm1hdE9wdGlvbihGaWxlRm9ybWF0LlNWRykpOworCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQlMT0dHRVIuZXJyb3IoIkVycm9yIG9uIFNWRyBwZXJzaXN0ZW5jZSIsIGUpOworCQl9CisKKwkJaWYgKHNlbGVjdGVkRWxlbWVudCAhPSBudWxsKSB7CisJCQlVUkkgdXJpID0gc2VsZWN0ZWRFbGVtZW50LmVSZXNvdXJjZSgpLmdldFVSSSgpOworCQkJU3RyaW5nIHBsYXRmb3JtU3RyaW5nID0gdXJpLnRvUGxhdGZvcm1TdHJpbmcodHJ1ZSk7CisJCQlpZiAocGxhdGZvcm1TdHJpbmcgIT0gbnVsbCkgeworCQkJCUlQYXRoIHBhdGggPSBuZXcgUGF0aChwbGF0Zm9ybVN0cmluZyk7CisJCQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShwYXRoKTsKKwkJCQkKKwkJCQl0cnkgeworCQkJCQlmaWxlLmdldFBhcmVudCgpLnJlZnJlc2hMb2NhbCgyLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKKwkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkJTE9HR0VSLmVycm9yKCJFcnJvciBvbiByZWZyZXNoaW5nIHdvcmtzcGFjZSBmb2xkZXIiLCBlKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJCisJCXJldHVybiBzdmdGaWxlLmdldEFic29sdXRlUGF0aCgpOworCX0KKwkKKwlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRHZW5Gb2xkZXIoU3RyaW5nIGdlbkZvbGRlciwgUmVzb3VyY2UgcmVzb3VyY2UpIHsKKwkJLy8gZXh0cmFjdCB0aGUgZ2VuIGZvbGRlciBmcm9tIHRoZSBCdWlsZGVyUmVzdWx0IGlmIG5vIHByZWZlcmVuY2UgdmFsdWUgaXMgc2V0CisJCWlmICgoZ2VuRm9sZGVyID09IG51bGwgfHwgZ2VuRm9sZGVyLmxlbmd0aCgpID09IDApICYmIHJlc291cmNlICE9IG51bGwpIHsKKwkJCVVSSSB1cmkgPSByZXNvdXJjZS5nZXRVUkkoKTsKKwkJCVN0cmluZyBwbGF0Zm9ybVN0cmluZyA9IHVyaS50b1BsYXRmb3JtU3RyaW5nKHRydWUpOworCQkJaWYgKHBsYXRmb3JtU3RyaW5nICE9IG51bGwpIHsKKwkJCQlJUGF0aCBwYXRoID0gbmV3IFBhdGgocGxhdGZvcm1TdHJpbmcpOworCQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUocGF0aCk7CisJCQkJCisJCQkJSUNvbnRhaW5lciBwYXJlbnRGb2xkZXIgPSBmaWxlLmdldFBhcmVudCgpOworCQkJCWlmIChwYXJlbnRGb2xkZXIgIT0gbnVsbCkgeworCQkJCQkvLyAqKioqIEZpbmQgdmlzdWFsaXphdGlvbiBmb2xkZXIgKGNyZWF0ZSBpZiBuZWNlc3NhcnkpCisJCQkJCQorCQkJCQlJRm9sZGVyIGZvbGRlciA9IHBhcmVudEZvbGRlci5nZXRGb2xkZXIobmV3IFBhdGgoIi5lbWZfdmlld2VyX2RpYWdyYW1zIikpOworCQkJCQkKKwkJCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJZm9sZGVyLmNyZWF0ZShJUmVzb3VyY2UuTk9ORSwgdHJ1ZSwgbnVsbCk7CisJCQkJCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKKwkJCQkJCQlMT0dHRVIuZXJyb3IoIkVycm9yIG9uIGNyZWF0aW5nIGZvbGRlciBmb3IgZ2VuZXJhdGVkIGRpYWdyYW1zLiIsIGUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCQorCQkJCQlnZW5Gb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKQorCQkJCQkJCSsgZm9sZGVyLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKKwkJCQl9CisJCQl9CisJCX0KKworCQlyZXR1cm4gZ2VuRm9sZGVyOworCX0KKworfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3V0aWxzL0V4ZWN1dGlvbkNhdGVnb3J5LmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3V0aWxzL0V4ZWN1dGlvbkNhdGVnb3J5LmphdmEKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3V0aWxzL0V4ZWN1dGlvbkNhdGVnb3J5LmphdmEKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvdXRpbHMvRXhlY3V0aW9uQ2F0ZWdvcnkuamF2YQppbmRleCBhMjNkNWNmLi41MTcwMTJjIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvdXRpbHMvRXhlY3V0aW9uQ2F0ZWdvcnkuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3V0aWxzL0V4ZWN1dGlvbkNhdGVnb3J5LmphdmEKQEAgLTEsNiArMSw2IEBACi0gLyoqCisvKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtMTIsOCArMTIsMTUgQEAKICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnV0aWxzOworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnV0aWxzOwogCiBwdWJsaWMgZW51bSBFeGVjdXRpb25DYXRlZ29yeSB7Ci0JZHVtbXksIGVDbGFzc0hpZXJhcmNoeSwgZU9iamVjdFJlZnMsIGVDbGFzc0FsbFJlZmVyZW5jZXMsIGVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5LCBlQ2xhc3NDb250ZW50cywgZUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlCisJZHVtbXksCisJZUNsYXNzSGllcmFyY2h5LAorCWVPYmplY3RSZWZzLAorCWVDbGFzc0FsbFJlZmVyZW5jZXMsCisJZUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHksCisJZUNsYXNzQ29udGVudHMsCisJZUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlCiB9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvdXRpbHMvRXhlY3V0aW9uVXRpbC5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC91dGlscy9FeGVjdXRpb25VdGlsLmphdmEKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3V0aWxzL0V4ZWN1dGlvblV0aWwuamF2YQpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mL3ZpZXdlci9wbGFudHVtbC91dGlscy9FeGVjdXRpb25VdGlsLmphdmEKaW5kZXggY2RhOGQyZS4uZjZjOTNlOCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3V0aWxzL0V4ZWN1dGlvblV0aWwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3V0aWxzL0V4ZWN1dGlvblV0aWwuamF2YQpAQCAtMSw2ICsxLDYgQEAKLSAvKioKKy8qKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkguCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCkBAIC0xMiw3ICsxMiw4IEBACiAgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci51dGlsczsKKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC51dGlsczsKIAogcHVibGljIGNsYXNzIEV4ZWN1dGlvblV0aWwgewogCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3ZpZXdzL0RpYWdyYW1WaWV3LmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWYvdmlld2VyL3BsYW50dW1sL3ZpZXdzL0RpYWdyYW1WaWV3LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVkNzg5YgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZi92aWV3ZXIvcGxhbnR1bWwvdmlld3MvRGlhZ3JhbVZpZXcuamF2YQpAQCAtMCwwICsxLDI3OCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgorICogCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCisgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAorICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiAKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCisgKiAKKyAqIENvbnRyaWJ1dG9yczoKKyAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC52aWV3czsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RhY2s7CisKK2ltcG9ydCBqYXZheC5hbm5vdGF0aW9uLlBvc3RDb25zdHJ1Y3Q7CitpbXBvcnQgamF2YXguaW5qZWN0LkluamVjdDsKK2ltcG9ydCBqYXZheC5pbmplY3QuTmFtZWQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVycy5BYnN0cmFjdFBsYW50VU1MSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVycy5FQ2xhc3NBbGxSZWZlcmVuY2VzSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVycy5FQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUhhbmRsZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwuaGFuZGxlcnMuRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVycy5FQ2xhc3NIaWVyYXJjaHlIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmhhbmRsZXJzLkVPYmplY3RSZWZzSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5oYW5kbGVycy5PYmplY3RDb250ZW50SGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlci5wbGFudHVtbC5wcmVmZXJlbmNlcy5QcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnV0aWxzLkV4ZWN1dGlvbkNhdGVnb3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLnV0aWxzLkV4ZWN1dGlvblV0aWw7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQuY29yZS5kaS5hbm5vdGF0aW9ucy5PcHRpb25hbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmV4dGVuc2lvbnMuUHJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lNC5jb3JlLnNlcnZpY2VzLmV2ZW50cy5JRXZlbnRCcm9rZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuRm9jdXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuZGkuUGVyc2lzdFN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmU0LnVpLmRpLlVJU3luY2hyb25pemU7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkubW9kZWwuYXBwbGljYXRpb24udWkuYmFzaWMuTVBhcnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkubW9kZWwuYXBwbGljYXRpb24udWkubWVudS5NRGlyZWN0VG9vbEl0ZW07CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkubW9kZWwuYXBwbGljYXRpb24udWkubWVudS5NVG9vbEJhckVsZW1lbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkuc2VydmljZXMuSVNlcnZpY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLm1vZGVsaW5nLkVQYXJ0U2VydmljZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKK2ltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmJyb3dzZXIuQnJvd3NlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYnJvd3Nlci5Mb2NhdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmJyb3dzZXIuTG9jYXRpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKKworaW1wb3J0IG5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5lY2xpcHNlLnV0aWxzLlBsYW50dW1sQ29uc3RhbnRzOworCitAU3VwcHJlc3NXYXJuaW5ncygicmVzdHJpY3Rpb24iKQorcHVibGljIGNsYXNzIERpYWdyYW1WaWV3IHsKKwkKKwkvKioKKwkgKiBUaGUgSUQgb2YgdGhlIHZpZXcuCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwudmlld3MuRGlhZ3JhbVZpZXciOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExJTktFRF9LRVkgPSAiTElOS0VEX1dJVEhfRURJVE9SIjsKKwkKKwlwcml2YXRlIGJvb2xlYW4gbGlua2VkV2l0aEVkaXRvciA9IGZhbHNlOworCisJcHJpdmF0ZSBCcm93c2VyIGJyb3dzZXI7CisKKwlmaW5hbCBIYXNoTWFwPFN0cmluZywgT2JqZWN0PiBpZE9iamVjdHNNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisKKwlASW5qZWN0CisJU2hlbGwgc2hlbGw7CisJCisJQEluamVjdAorCVVJU3luY2hyb25pemUgc3luYzsKKworCUBJbmplY3QKKwlFUGFydFNlcnZpY2UgcGFydFNlcnZpY2U7CisJCisJQEluamVjdAorCUlFdmVudEJyb2tlciBicm9rZXI7CisJCisJQEluamVjdAorCUBPcHRpb25hbAorCUBQcmVmZXJlbmNlKAorCQkJbm9kZVBhdGggPSAibmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmVjbGlwc2UiLCAKKwkJCXZhbHVlID0gUGxhbnR1bWxDb25zdGFudHMuR1JBUEhWSVpfUEFUSCkgCisJU3RyaW5nIGRvdFBhdGg7CisJCisJQEluamVjdAorCUBPcHRpb25hbAorCUBQcmVmZXJlbmNlKAorCQkJbm9kZVBhdGggPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXIucGxhbnR1bWwiLCAKKwkJCXZhbHVlID0gUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRIKSAKKwlTdHJpbmcgZ2VuRm9sZGVyUGF0aDsKKwkKKwlwcml2YXRlIFN0YWNrPFN0cmluZz4gaGlzdG9yeSA9IG5ldyBTdGFjazw+KCk7CisJCisJLyoqCisJICogVGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZSBpdC4KKwkgKi8KKwlAUG9zdENvbnN0cnVjdAorCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQsIE1QYXJ0IHBhcnQpIHsKKwkJTWFwPFN0cmluZywgU3RyaW5nPiBzdGF0ZSA9IHBhcnQuZ2V0UGVyc2lzdGVkU3RhdGUoKTsKKwkgICAgU3RyaW5nIHZhbHVlID0gc3RhdGUuZ2V0KExJTktFRF9LRVkpOworCSAgICB0aGlzLmxpbmtlZFdpdGhFZGl0b3IgPSB2YWx1ZSAhPSBudWxsID8gQm9vbGVhbi52YWx1ZU9mKHZhbHVlKSA6IGZhbHNlOworCSAgICAKKwkJdGhpcy5icm93c2VyID0gbmV3IEJyb3dzZXIocGFyZW50LCBTV1QuTm9uZSk7CisJCXRoaXMuYnJvd3Nlci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpKTsKKworCQl0aGlzLmJyb3dzZXIuYWRkS2V5TGlzdGVuZXIobmV3IEtleUFkYXB0ZXIoKSB7CisJCQkKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIHZvaWQga2V5UHJlc3NlZChLZXlFdmVudCBlKSB7CisJCQkJaWYgKGUuY2hhcmFjdGVyID09ICdcYicgJiYgIWhpc3RvcnkuaXNFbXB0eSgpKSB7CisJCQkJCVN0cmluZyBwcmV2aW91cyA9IGhpc3RvcnkucG9wKCk7CisJCQkJCWlmIChwcmV2aW91cyAhPSBudWxsKSB7CisJCQkJCQkKKwkJCQkJCS8vIGV4dHJhY3QgSUQgZnJvbSBVUkwKKwkJCQkJCWludCBsYXN0SW5kZXhPZiA9IHByZXZpb3VzLmxhc3RJbmRleE9mKCIvIik7CisKKwkJCQkJCVN0cmluZyBpZCA9ICIiOworCQkJCQkJaWYgKGxhc3RJbmRleE9mICE9IC0xKSB7CisJCQkJCQkJaWQgPSBwcmV2aW91cy5zdWJzdHJpbmcobGFzdEluZGV4T2YgKyAxLCBwcmV2aW91cy5sYXN0SW5kZXhPZigiLiIpKTsKKwkJCQkJCX0KKworCQkJCQkJLy8gZ2V0IG9iamVjdCBvZiB0aGUgcHJldmlvdXMgdmlldworCQkJCQkJT2JqZWN0IGVPYmplY3QgPSBpZE9iamVjdHNNYXAuZ2V0KGlkKTsKKwkJCQkJCWlmIChlT2JqZWN0ICE9IG51bGwgJiYgaXNMaW5rZWRXaXRoRWRpdG9yKCkpIHsKKwkJCQkJCQlpZiAoZU9iamVjdCBpbnN0YW5jZW9mIEVDbGFzcykgeworCQkJCQkJCQl1cGRhdGVEaWFncmFtKChlT2JqZWN0KSwgbnVsbCk7CisJCQkJCQkJfSBlbHNlIGlmIChlT2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJCQkJCQl1cGRhdGVEaWFncmFtKCgoRU9iamVjdCkgZU9iamVjdCkuZUNsYXNzKCksIChFT2JqZWN0KSBlT2JqZWN0KTsKKwkJCQkJCQl9CisJCQkJCQkJc2VsZWN0SW5FZGl0b3IoZU9iamVjdCk7CisJCQkJCQkJCisJCQkJCQkJZS5kb2l0ID0gZmFsc2U7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0pOworCQkKKwkJdGhpcy5icm93c2VyLmFkZExvY2F0aW9uTGlzdGVuZXIobmV3IExvY2F0aW9uQWRhcHRlcigpIHsKKwkJCQorCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBjaGFuZ2luZyhMb2NhdGlvbkV2ZW50IGV2ZW50KSB7CisJCQkJU3RyaW5nIGxvY2F0aW9uID0gZXZlbnQubG9jYXRpb247CisJCQkJaWYgKCFsb2NhdGlvbi5lbmRzV2l0aCgiLnN2ZyIpKSB7CisJCQkJCWludCBsYXN0SW5kZXhPZiA9IGxvY2F0aW9uLmxhc3RJbmRleE9mKCIvIik7CisKKwkJCQkJU3RyaW5nIGlkID0gIiI7CisJCQkJCWlmIChsYXN0SW5kZXhPZiAhPSAtMSkgeworCQkJCQkJaWQgPSBsb2NhdGlvbi5zdWJzdHJpbmcobGFzdEluZGV4T2YgKyAxLCBsb2NhdGlvbi5sZW5ndGgoKSk7CisJCQkJCX0KKwkJCQkKKwkJCQkJT2JqZWN0IGVPYmplY3QgPSBpZE9iamVjdHNNYXAuZ2V0KGlkKTsKKwkJCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCQkJaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKKwkJCQkJCQl1cGRhdGVEaWFncmFtKChlT2JqZWN0KSwgbnVsbCk7CisJCQkJCQl9IGVsc2UgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBFT2JqZWN0KSB7CisJCQkJCQkJdXBkYXRlRGlhZ3JhbSgoKEVPYmplY3QpIGVPYmplY3QpLmVDbGFzcygpLCAoRU9iamVjdCkgZU9iamVjdCk7CisJCQkJCQl9IGVsc2UgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBFTGlzdDw/PikgeworCQkJCQkJCS8vIHdlIHBhc3MgdGhlIGVPYmplY3Qgd2hpY2ggaXMgYSBFTGlzdCBzbyB0aGUgT2JqZWN0Q29udGVudEhhbmRsZXIgY2FuIGhhbmRsZSB0aGUgRUxpc3Qgc3BlY2lhbCBjYXNlCisJCQkJCQkJdXBkYXRlRGlhZ3JhbShlT2JqZWN0LCBudWxsKTsKKwkJCQkJCX0KKwkJCQkJCWlmIChpc0xpbmtlZFdpdGhFZGl0b3IoKSkgeworCQkJCQkJCXNlbGVjdEluRWRpdG9yKGVPYmplY3QpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCisJCQkJCWV2ZW50LmRvaXQgPSBmYWxzZTsKKwkJCQl9CisJCQl9CisJCX0pOworCX0KKwkKKwlASW5qZWN0CisJQE9wdGlvbmFsCisJdm9pZCBoYW5kbGVTZWxlY3Rpb24oQE5hbWVkKElTZXJ2aWNlQ29uc3RhbnRzLkFDVElWRV9TRUxFQ1RJT04pIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHNlbGVjdGlvbikgeworCQlpZiAoaXNMaW5rZWRXaXRoRWRpdG9yKCkgJiYgc2VsZWN0aW9uICE9IG51bGwgJiYgIXNlbGVjdGlvbi5pc0VtcHR5KCkpIHsKKwkJCU9iamVjdCBmaXJzdEVsZW1lbnQgPSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7CisJCQlpZiAoZmlyc3RFbGVtZW50IGluc3RhbmNlb2YgRU9iamVjdCkgeworCQkJCXVwZGF0ZURpYWdyYW0oKChFT2JqZWN0KWZpcnN0RWxlbWVudCkuZUNsYXNzKCksIChFT2JqZWN0KWZpcnN0RWxlbWVudCk7CisJCQl9CisJCX0KKwl9CisJCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZURpYWdyYW0oT2JqZWN0IGVDbGFzcywgRU9iamVjdCBlT2JqZWN0KSB7CisKKwkJT2JqZWN0IHNlbGVjdGVkID0gZUNsYXNzOworCQkKKwkJLyoKKwkJICogUmVnZW5lcmF0aW9uIG9mIFNWRyBCdWZmZXIgZm9yIHBvcHVsYXRpbmcgY29udGVudCBzcGVjaWZpYyB0byB0aGUgc2VsZWN0aW9uCisJCSAqLworCisJCUFic3RyYWN0UGxhbnRVTUxIYW5kbGVyIGhhbmRsZXIgPSBudWxsOworCQlpZiAoRXhlY3V0aW9uVXRpbC5pc0V4ZWN1dGluZyhFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NIaWVyYXJjaHkpKSB7CisJCQloYW5kbGVyID0gbmV3IEVDbGFzc0hpZXJhcmNoeUhhbmRsZXIoKTsKKwkJfSBlbHNlIGlmIChFeGVjdXRpb25VdGlsLmlzRXhlY3V0aW5nKEV4ZWN1dGlvbkNhdGVnb3J5LmVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5KSkgeworCQkJaGFuZGxlciA9IG5ldyBFQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUhhbmRsZXIoKTsKKwkJfSBlbHNlIGlmIChFeGVjdXRpb25VdGlsLmlzRXhlY3V0aW5nKEV4ZWN1dGlvbkNhdGVnb3J5LmVDbGFzc0FsbFJlZmVyZW5jZXMpKSB7CisJCQloYW5kbGVyID0gbmV3IEVDbGFzc0FsbFJlZmVyZW5jZXNIYW5kbGVyKCk7CisJCX0gZWxzZSBpZiAoRXhlY3V0aW9uVXRpbC5pc0V4ZWN1dGluZyhFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2UpKSB7CisJCQloYW5kbGVyID0gbmV3IEVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUhhbmRsZXIoKTsKKwkJfSBlbHNlIGlmIChFeGVjdXRpb25VdGlsLmlzRXhlY3V0aW5nKEV4ZWN1dGlvbkNhdGVnb3J5LmVPYmplY3RSZWZzKSkgeworCQkJaGFuZGxlciA9IG5ldyBFT2JqZWN0UmVmc0hhbmRsZXIoKTsKKwkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKKwkJCQkvLyBpZiB0aGUgZU9iamVjdCBpcyBub3QgbnVsbCB3ZSB1c2UgdGhpcyBmb3IgdGhlIHZpc3VhbGl6YXRpb24sIG90aGVyd2lzZSBtYXliZSBhIGNvbGxlY3Rpb24gd2FzIHNlbGVjdGVkCisJCQkJc2VsZWN0ZWQgPSBlT2JqZWN0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyotIEVDbGFzc0NvbnRlbnRzIGFuZCBFT2JqZWN0UmVmcyBiZWhhdmlvdXIgaXMgaW5jbHVkZWQgaW4gT2JqZWN0Q29udGVudEJ1aWxkZXIgamF2YSBjbGFzcyAqLworCQkJaGFuZGxlciA9IG5ldyBPYmplY3RDb250ZW50SGFuZGxlcigpOworCQkJaWYgKGVPYmplY3QgIT0gbnVsbCkgeworCQkJCS8vIGlmIHRoZSBlT2JqZWN0IGlzIG5vdCBudWxsIHdlIHVzZSB0aGlzIGZvciB0aGUgdmlzdWFsaXphdGlvbiwgb3RoZXJ3aXNlIG1heWJlIGEgY29sbGVjdGlvbiB3YXMgc2VsZWN0ZWQKKwkJCQlzZWxlY3RlZCA9IGVPYmplY3Q7CisJCQl9CisJCX0KKwkJCisJCWhhbmRsZXIuZXhlY3V0ZShzaGVsbCwgc3luYywgZG90UGF0aCwgZ2VuRm9sZGVyUGF0aCwgcGFydFNlcnZpY2UsIHNlbGVjdGVkLCBlT2JqZWN0KTsKKwl9CisJCisJLyoqCisJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZWxlY3Qgc3BlY2lmaWVkIEFNQUxUSEVBIGVsZW1lbnQgaW4gdGhlIFNwaGlueCBlZGl0b3IKKwkgKgorCSAqIEBwYXJhbSBlbGVtZW50CisJICovCisJcHJpdmF0ZSB2b2lkIHNlbGVjdEluRWRpdG9yKE9iamVjdCBlbGVtZW50KSB7CisJCUhhc2hNYXA8U3RyaW5nLCBPYmplY3Q+IGRhdGEgPSBuZXcgSGFzaE1hcDw+KCk7CisJCWRhdGEucHV0KCJtb2RlbEVsZW1lbnRzIiwgQXJyYXlzLmFzTGlzdChlbGVtZW50KSk7CisJCWJyb2tlci5zZW5kKCJvcmcvZWNsaXBzZS9hcHA0bWMvYW1hbHRoZWEvZWRpdG9yL1NFTEVDVCIsIGRhdGEpOworCX0KKwkKKwlARm9jdXMKKwlwdWJsaWMgdm9pZCBzZXRGb2N1cyhNUGFydCBhY3RpdmVQYXJ0KSB7CisJCWZvciAoTVRvb2xCYXJFbGVtZW50IGVsZW1lbnQgOiBhY3RpdmVQYXJ0LmdldFRvb2xiYXIoKS5nZXRDaGlsZHJlbigpKSB7CisJCQlpZiAoZWxlbWVudC5nZXRFbGVtZW50SWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2VyLnBsYW50dW1sLmRpcmVjdHRvb2xpdGVtLnNlbGVjdCIpKSB7CisJCQkJTURpcmVjdFRvb2xJdGVtIHRvb2xJdGVtID0gKE1EaXJlY3RUb29sSXRlbSkgZWxlbWVudDsKKwkJCQl0b29sSXRlbS5zZXRTZWxlY3RlZChsaW5rZWRXaXRoRWRpdG9yKTsKKwkJCX0KKwkJfQorCX0KKworCUBQZXJzaXN0U3RhdGUKKwlwdWJsaWMgdm9pZCBwZXJzaXN0U3RhdGUoTVBhcnQgcGFydCkgeworCSAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHN0YXRlID0gcGFydC5nZXRQZXJzaXN0ZWRTdGF0ZSgpOworCSAgICBzdGF0ZS5wdXQoTElOS0VEX0tFWSwgQm9vbGVhbi52YWx1ZU9mKGxpbmtlZFdpdGhFZGl0b3IpLnRvU3RyaW5nKCkpOworCX0KKwkKKwlwdWJsaWMgYm9vbGVhbiBpc0xpbmtlZFdpdGhFZGl0b3IoKSB7CisJCXJldHVybiB0aGlzLmxpbmtlZFdpdGhFZGl0b3I7CisJfQorCQorCXB1YmxpYyB2b2lkIHNldExpbmtlZFdpdGhFZGl0b3IoYm9vbGVhbiBsaW5rZWQpIHsKKwkJdGhpcy5saW5rZWRXaXRoRWRpdG9yID0gbGlua2VkOworCX0KKwkKKwlwdWJsaWMgdm9pZCBzaG93RGlhZ3JhbShTdHJpbmcgZmlsZU5hbWVQcmVmaXgsIE9iamVjdCBlbGVtZW50LCBTdHJpbmcgc3ZnUGF0aCwgTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwKSB7CisJCWlmICh0aGlzLmJyb3dzZXIgIT0gbnVsbCAmJiAhdGhpcy5icm93c2VyLmlzRGlzcG9zZWQoKSkgeworCQkJaWYgKGVsZW1lbnQgIT0gbnVsbCkgeworCQkJCXRoaXMuaWRPYmplY3RzTWFwLnB1dChmaWxlTmFtZVByZWZpeCwgZWxlbWVudCk7CisJCQl9CisJCQl0aGlzLmlkT2JqZWN0c01hcC5wdXRBbGwoaWQyT2JqZWN0c01hcCk7CisJCQl0aGlzLmhpc3RvcnkuYWRkKGJyb3dzZXIuZ2V0VXJsKCkpOworCQkJdGhpcy5icm93c2VyLnNldFVybChzdmdQYXRoKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MmRlMzYuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS43Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS43CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIxZmNmYy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogRU1GIENvbnRlbnQgRXh0cmFjdG9yCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3I7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMC44LjMKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5BY3RpdmF0b3IKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuZW1mLmVjb3JlLAotIG9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWksCi0gb3JnLmVjbGlwc2UudWkuYnJvd3NlciwKLSBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLAotIG9yZy5lY2xpcHNlLnNwaGlueC5lbWYuZWRpdG9ycywKLSBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLmVkaXRvcnMuZm9ybXMsCi0gY29tLmdvb2dsZS5ndWF2YSwKLSBvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5saWIsCi0gb3JnLmVjbGlwc2UueHRlbmQubGliLAotIG9yZy5lY2xpcHNlLnh0ZW5kLmxpYi5tYWNybywKLSBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43LEphdmFTRS0xLjgKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtQ2xhc3NQYXRoOiAuCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwotCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2J1aWxkLnByb3BlcnRpZXMgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3YTYwMjYuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0jICBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuCi0jICBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jICBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAotIyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCi0jIAotIyAgIENvbnRyaWJ1dG9yczoKLSMgIAkgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMgCi0jICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGljb25zLyxcCi0gICAgICAgICAgICAgICBlcGwtMi4wLmh0bWwsXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICBlcGwtMi4wLmh0bWwKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvaWNvbnMvcHJvcF9wcy5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL3Byb3BfcHMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTFjOTk2Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvaWNvbnMvcHJvcF9wcy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL3NhbXBsZS5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL3NhbXBsZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0ZmIzYzkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9pY29ucy9zYW1wbGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9pY29ucy9zdXBlcl9jby5naWYgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL3N1cGVyX2NvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTlhYzExNi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL2ljb25zL3N1cGVyX2NvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvcGx1Z2luLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZmM2ZlZi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4KLTxwbHVnaW4+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuY29tbWFuZHMiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmNhdGVnb3J5IgotICAgICAgICAgICAgbmFtZT0iRXh0cmFjdCBFY2xhc3MgUmVmZXJlbmNlcyBDYXRlZ29yeSI+Ci0gICAgICA8L2NhdGVnb3J5PgotICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5jYXRlZ29yeSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZUNsYXNzSGllcmFyY2h5LmNvbW1hbmQiCi0gICAgICAgICAgICBuYW1lPSJFeHRyYWN0IEVjbGFzcyBIaWVyYXJjaHkiPgotICAgICAgPC9jb21tYW5kPgotICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5jYXRlZ29yeSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZU9iamVjdFJlZmVyZW5jZXMuY29tbWFuZCIKLSAgICAgICAgICAgIG5hbWU9IkV4dHJhY3QgRW9iamVjdCBSZWZlcmVuY2VzIj4KLSAgICAgIDwvY29tbWFuZD4KLSAgICAgIDxjb21tYW5kCi0gICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuY2F0ZWdvcnkiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmVDbGFzc0FsbFJlZmVyZW5jZXMuY29tbWFuZCIKLSAgICAgICAgICAgIG5hbWU9IkV4dHJhY3QgRWNsYXNzIEFsbCBSZWZlcmVuY2VzIj4KLSAgICAgIDwvY29tbWFuZD4KLSAgICAgIDxjb21tYW5kCi0gICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuY2F0ZWdvcnkiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5LmNvbW1hbmQiCi0gICAgICAgICAgICBuYW1lPSJFeHRyYWN0IEVjbGFzcyBIaWVyYXJjaHkgQW5kIFRoZWlyIENvbnRlbnRzIj4KLSAgICAgIDwvY29tbWFuZD4KLSAgICAgIDxjb21tYW5kCi0gICAgICAgICAgICBjYXRlZ29yeUlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuY2F0ZWdvcnkiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmVDbGFzc0NvbnRlbnRzLmNvbW1hbmQiCi0gICAgICAgICAgICBuYW1lPSJFeHRyYWN0IEVjbGFzcyBVTUwgQ29udGVudHMiPgotICAgICAgPC9jb21tYW5kPgotICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgIGNhdGVnb3J5SWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5jYXRlZ29yeSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlLmNvbW1hbmQiCi0gICAgICAgICAgICBuYW1lPSJGcm9tIHJlZmVyZW5jZSAtJmd0OyBFeHRyYWN0IEVjbGFzcyBVTUwgQ29udGVudHMiPgotICAgICAgPC9jb21tYW5kPgotICAgICAgCi0gICAgICA8Y29tbWFuZAotICAgICAgICAgICAgY2F0ZWdvcnlJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmNhdGVnb3J5IgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5jb3B5Q29udGVudHMuY29tbWFuZCIKLSAgICAgICAgICAgIG5hbWU9IkNvcHkgQ29udGVudHMgYW5kIEdlbmVyYXRlIENTViI+Ci0gICAgICA8L2NvbW1hbmQ+Ci0gICAgICAKLSAgICAgIAotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuaGFuZGxlcnMiPgotICAgICAgPGhhbmRsZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuaGFuZGxlcnMuRUNsYXNzSGllcmFyY2h5SGFuZGxlciIKLSAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmVDbGFzc0hpZXJhcmNoeS5jb21tYW5kIj4KLSAgICAgIDwvaGFuZGxlcj4KLSAgICAgIDxoYW5kbGVyCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmhhbmRsZXJzLkVPYmplY3RSZWZzSGFuZGxlciIKLSAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmVPYmplY3RSZWZlcmVuY2VzLmNvbW1hbmQiPgotICAgICAgPC9oYW5kbGVyPgotICAgICAgPGhhbmRsZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuaGFuZGxlcnMuRUNsYXNzQWxsUmVmZXJlbmNlc0hhbmRsZXIiCi0gICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5lQ2xhc3NBbGxSZWZlcmVuY2VzLmNvbW1hbmQiPgotICAgICAgPC9oYW5kbGVyPgotICAgICAgPGhhbmRsZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuaGFuZGxlcnMuRUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHlIYW5kbGVyIgotICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHkuY29tbWFuZCI+Ci0gICAgICA8L2hhbmRsZXI+Ci0gICAgICA8aGFuZGxlcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5oYW5kbGVycy5FQ2xhc3NDb250ZW50c0hhbmRsZXIiCi0gICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5lQ2xhc3NDb250ZW50cy5jb21tYW5kIj4KLSAgICAgIDwvaGFuZGxlcj4KLSAgICAgIDxoYW5kbGVyCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmhhbmRsZXJzLkVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUhhbmRsZXIiCi0gICAgICAgICAgICBjb21tYW5kSWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5lQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2UuY29tbWFuZCI+Ci0gICAgICA8L2hhbmRsZXI+Ci0gICAgICA8aGFuZGxlcgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5oYW5kbGVycy5Db3B5Q29udGVudHNIYW5kbGVyIgotICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuY29weUNvbnRlbnRzLmNvbW1hbmQiPgotICAgICAgPC9oYW5kbGVyPgotICAgPC9leHRlbnNpb24+Ci0gIAotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLm1lbnVzIj4KLSAgICAgIDxtZW51Q29udHJpYnV0aW9uCi0gICAgICAgICAgICBsb2NhdGlvblVSST0icG9wdXA6b3JnLmVjbGlwc2UudWkucG9wdXAuYW55P2FmdGVyPWFkZGl0aW9ucyI+Ci0gICAgICAgICA8bWVudQotICAgICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5tZW51IgotICAgICAgICAgICAgICAgbGFiZWw9IkFQUDRNQy1FTUYgVXRpbHMiCi0gICAgICAgICAgICAgICBtbmVtb25pYz0iTSI+Ci0gICAgICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZUNsYXNzSGllcmFyY2h5LmNvbW1hbmQiCi0gICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9rZXlncm91cHNfb2JqLmdpZiIKLSAgICAgICAgICAgICAgICAgIGlkPSJjb20udGVzdC5tZW51cy5zYW1wbGVDb21tYW5kIgotICAgICAgICAgICAgICAgICAgbGFiZWw9IkVDbGFzcyBIaWVyYXJjaHkiCi0gICAgICAgICAgICAgICAgICBtbmVtb25pYz0iUyI+Ci0gICAgICAgICAgICAgICA8dmlzaWJsZVdoZW4KLSAgICAgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0idHJ1ZSI+Ci0gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICA8d2l0aAotICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9ImFjdGl2ZU1lbnVTZWxlY3Rpb24iPgotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICA8aXRlcmF0ZQotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I9Im9yIj4KLSAgICAgICAgICAgICAgICAgICAgIDxub3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgotICAgICAgICAgICAgICAgICAgICAgPC9ub3Q+Ci0gICAgICAgICAgICAgICAgICAgICA8b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90PgotICAgICAgICAgICAgICAgICAgICAgPC9vcj4KLSAgICAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIDwvd2l0aD4KLSAgICAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+Ci0gICAgICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZU9iamVjdFJlZmVyZW5jZXMuY29tbWFuZCIKLSAgICAgICAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCi0gICAgICAgICAgICAgICAgICBpZD0iY29tLnRlc3QubWVudXMuc2FtcGxlQ29tbWFuZDEiCi0gICAgICAgICAgICAgICAgICBsYWJlbD0iRW9iamVjdCBSZWZzIj4KLSAgICAgICAgICAgICAgIDx2aXNpYmxlV2hlbgotICAgICAgICAgICAgICAgICAgICAgY2hlY2tFbmFibGVkPSJ0cnVlIj4KLSAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgPHdpdGgKLSAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPSJhY3RpdmVNZW51U2VsZWN0aW9uIj4KLSAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPGl0ZXJhdGU+Ci0gICAgICAgICAgICAgICAgICAgICA8bm90PgotICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgICAgIDwvbm90PgotICAgICAgICAgICAgICAgICAgICAgPG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdD4KLSAgICAgICAgICAgICAgICAgICAgIDwvb3I+Ci0gICAgICAgICAgICAgICAgICAgICA8b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90PgotICAgICAgICAgICAgICAgICAgICAgPC9vcj4KLSAgICAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2l0aD4KLSAgICAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+Ci0gICAgICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZUNsYXNzQWxsUmVmZXJlbmNlcy5jb21tYW5kIgotICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvdGFnX2JsdWVfYWRkLnBuZyIKLSAgICAgICAgICAgICAgICAgIGlkPSJjb20udGVzdC5tZW51cy5zYW1wbGVDb21tYW5kNCIKLSAgICAgICAgICAgICAgICAgIGxhYmVsPSJFQ2xhc3MgQWxsIFJlZmVyZW5jZXMiCi0gICAgICAgICAgICAgICAgICBtbmVtb25pYz0iUyI+Ci0gICAgICAgICAgICAgICA8dmlzaWJsZVdoZW4KLSAgICAgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0idHJ1ZSI+Ci0gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aXRoCi0gICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT0iYWN0aXZlTWVudVNlbGVjdGlvbiI+Ci0gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIDxpdGVyYXRlPgotICAgICAgICAgICAgICAgICAgICAgPG5vdD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+Ci0gICAgICAgICAgICAgICAgICAgICA8L25vdD4KLSAgICAgICAgICAgICAgICAgICAgIDxvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxub3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9ub3Q+Ci0gICAgICAgICAgICAgICAgICAgICA8L29yPgotICAgICAgICAgICAgICAgICAgPC9pdGVyYXRlPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIDwvd2l0aD4KLSAgICAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+Ci0gICAgICAgICAgICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHkuY29tbWFuZCIKLSAgICAgICAgICAgICAgICAgIGljb249Imljb25zL2VsZW1lbnRzX29iai5naWYiCi0gICAgICAgICAgICAgICAgICBpZD0iY29tLnRlc3QubWVudXMuc2FtcGxlQ29tbWFuZCIKLSAgICAgICAgICAgICAgICAgIGxhYmVsPSJFQ2xhc3MgQ29udGVudHMgKyBIaWVyYXJjaHkiCi0gICAgICAgICAgICAgICAgICBtbmVtb25pYz0iUyI+Ci0gICAgICAgICAgICAgICA8dmlzaWJsZVdoZW4KLSAgICAgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0idHJ1ZSI+Ci0gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2l0aAotICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9ImFjdGl2ZU1lbnVTZWxlY3Rpb24iPgotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICA8aXRlcmF0ZT4KLSAgICAgICAgICAgICAgICAgICAgIDxub3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgotICAgICAgICAgICAgICAgICAgICAgPC9ub3Q+Ci0gICAgICAgICAgICAgICAgICAgICA8b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90PgotICAgICAgICAgICAgICAgICAgICAgPC9vcj4KLSAgICAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIDwvd2l0aD4KLSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+Ci0gICAgICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuZUNsYXNzQ29udGVudHMuY29tbWFuZCIKLSAgICAgICAgICAgICAgICAgIGljb249Imljb25zL3Byb3BfcHMuZ2lmIgotICAgICAgICAgICAgICAgICAgaWQ9ImNvbS50ZXN0Lm1lbnVzLnNhbXBsZUNvbW1hbmQiCi0gICAgICAgICAgICAgICAgICBsYWJlbD0iRUNsYXNzIENvbnRlbnRzIgotICAgICAgICAgICAgICAgICAgbW5lbW9uaWM9IlMiPgotICAgICAgICAgICAgICAgPHZpc2libGVXaGVuCi0gICAgICAgICAgICAgICAgICAgICBjaGVja0VuYWJsZWQ9InRydWUiPgotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICA8d2l0aAotICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9ImFjdGl2ZU1lbnVTZWxlY3Rpb24iPgotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICA8aXRlcmF0ZT4KLSAgICAgICAgICAgICAgICAgICAgIDxub3Q+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRGF0YVR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPgotICAgICAgICAgICAgICAgICAgICAgPC9ub3Q+Ci0gICAgICAgICAgICAgICAgICAgICA8b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bm90PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvbm90PgotICAgICAgICAgICAgICAgICAgICAgPC9vcj4KLSAgICAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIDwvd2l0aD4KLSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+Ci0gICAgICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAgICAgICAgIAotICAgICAgICAgICAgPGNvbW1hbmQKLSAgICAgICAgICAgICAgICAgIGNvbW1hbmRJZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZS5jb21tYW5kIgotICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbnMvZHJpdmVfZ28ucG5nIgotICAgICAgICAgICAgICAgICAgaWQ9ImNvbS50ZXN0Lm1lbnVzLnNhbXBsZUNvbW1hbmQiCi0gICAgICAgICAgICAgICAgICBsYWJlbD0iRUNsYXNzIENvbnRlbnRzIGZyb20gUmVmZXJlbmNlIgotICAgICAgICAgICAgICAgICAgbW5lbW9uaWM9IlMiPgotICAgICAgICAgICAgICAgPHZpc2libGVXaGVuCi0gICAgICAgICAgICAgICAgICAgICBjaGVja0VuYWJsZWQ9InRydWUiPgotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgIDx3aXRoCi0gICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT0iYWN0aXZlTWVudVNlbGVjdGlvbiI+Ci0gICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIDxpdGVyYXRlPgotICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlIj4KLSAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgIDwvd2l0aD4KLSAgICAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+Ci0gICAgICAgICAgICA8L2NvbW1hbmQ+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICA8Y29tbWFuZAotICAgICAgICAgICAgICAgICAgY29tbWFuZElkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuY29weUNvbnRlbnRzLmNvbW1hbmQiCi0gICAgICAgICAgICAgICAgICBpY29uPSJpY29ucy9rZXlncm91cHNfb2JqLmdpZiIKLSAgICAgICAgICAgICAgICAgIGlkPSJjb20udGVzdC5tZW51cy5zYW1wbGVDb21tYW5kLmNvcHkiCi0gICAgICAgICAgICAgICAgICBsYWJlbD0iQ29weSBDb250ZW50cyBDb21tYW5kIgotICAgICAgICAgICAgICAgICAgbW5lbW9uaWM9IlMiPgotICAgICAgICAgICAgICAgPHZpc2libGVXaGVuCi0gICAgICAgICAgICAgICAgICAgICBjaGVja0VuYWJsZWQ9InRydWUiPgotICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgPHdpdGgKLSAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPSJhY3RpdmVNZW51U2VsZWN0aW9uIj4KLSAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPGl0ZXJhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yPSJvciI+Ci0gICAgICAgICAgICAgICAgICAgICA8bm90PgotICAgICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgICAgIDwvbm90PgotICAgICAgICAgICAgICAgICAgICAgPG9yPgotICAgICAgICAgICAgICAgICAgICAgICAgPG5vdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnN0YW5jZW9mCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luc3RhbmNlb2Y+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L25vdD4KLSAgICAgICAgICAgICAgICAgICAgIDwvb3I+Ci0gICAgICAgICAgICAgICAgICA8L2l0ZXJhdGU+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICA8L3dpdGg+Ci0gICAgICAgICAgICAgICA8L3Zpc2libGVXaGVuPgotICAgICAgICAgICAgPC9jb21tYW5kPgotICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAgICAgICAgCi0gICAgICAgICAgICA8dmlzaWJsZVdoZW4KLSAgICAgICAgICAgICAgICAgIGNoZWNrRW5hYmxlZD0idHJ1ZSI+Ci0gICAgICAgICAgICAgICA8d2l0aAotICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9ImFjdGl2ZU1lbnVTZWxlY3Rpb24iPgotICAgICAgICAgICAgICAgICAgPGl0ZXJhdGU+Ci0gICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VvZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ij4KLSAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4KLSAgICAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4KLSAgICAgICAgICAgICAgIDwvd2l0aD4KLSAgICAgICAgICAgIDwvdmlzaWJsZVdoZW4+Ci0gICAgICAgICA8L21lbnU+Ci0gICAgICA8L21lbnVDb250cmlidXRpb24+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPgotICAgICAgPHBhZ2UKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IucHJlZmVyZW5jZXMuQW1hbHRoZWFHcmFwaGljYWxSZXByZXNlbnRhdGlvblByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5wcmVmZXJlbmNlcy5BbWFsdGhlYVByZWZlcmVuY2VQYWdlIgotICAgICAgICAgICAgbmFtZT0iQU1BTFRIRUEtR3JhcGhpY2FsLVJlcHJlc2VudGF0aW9uIj4KLSAgICAgIDwvcGFnZT4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcyI+Ci0gICAgICA8aW5pdGlhbGl6ZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUluaXRpYWxpemVyIj4KLSAgICAgIDwvaW5pdGlhbGl6ZXI+Ci0gICA8L2V4dGVuc2lvbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0gICAgICA8Y2F0ZWdvcnkKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IiCi0gICAgICAgICAgICBuYW1lPSJBTUFMVEhFQSBHcmFwaGljYWwgUmVwcmVzZW50YXRpb24iPgotICAgICAgPC9jYXRlZ29yeT4KLSAgICAgIDx2aWV3Ci0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yIgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci52aWV3cy5EaWFncmFtVmlldyIKLSAgICAgICAgICAgIGljb249Imljb25zL3NhbXBsZS5naWYiCi0gICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnZpZXdzLkRpYWdyYW1WaWV3IgotICAgICAgICAgICAgbmFtZT0iRGlhZ3JhbSBWaWV3Ij4KLSAgICAgIDwvdmlldz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnBlcnNwZWN0aXZlRXh0ZW5zaW9ucyI+Ci0gICAgICA8cGVyc3BlY3RpdmVFeHRlbnNpb24KLSAgICAgICAgICAgIHRhcmdldElEPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVBlcnNwZWN0aXZlIj4KLSAgICAgICAgIDx2aWV3Ci0gICAgICAgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnZpZXdzLkRpYWdyYW1WaWV3IgotICAgICAgICAgICAgICAgcmF0aW89IjAuNSIKLSAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcD0icmlnaHQiCi0gICAgICAgICAgICAgICByZWxhdGl2ZT0ib3JnLmVjbGlwc2UudWkudmlld3MuUHJvYmxlbVZpZXciPgotICAgICAgICAgPC92aWV3PgotICAgICAgPC9wZXJzcGVjdGl2ZUV4dGVuc2lvbj4KLSAgIDwvZXh0ZW5zaW9uPgotCi08L3BsdWdpbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhZWNlNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0KLQk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQ8L3JlbGF0aXZlUGF0aD4KLQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuZXh0cmFjdG9yLmJ1aWxkPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjguMzwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3RvcjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0KLQk8YnVpbGQ+Ci0JCTxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+Ci0JCTxyZXNvdXJjZXM+Ci0JCQk8cmVzb3VyY2U+Ci0JCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4KLQkJCQk8ZXhjbHVkZXM+Ci0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4KLQkJCQk8L2V4Y2x1ZGVzPgotCQkJPC9yZXNvdXJjZT4KLQkJCTxyZXNvdXJjZT4KLQkJCQk8ZGlyZWN0b3J5PnNyYzwvZGlyZWN0b3J5PgotCQkJCTxleGNsdWRlcz4KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPgotCQkJCTwvZXhjbHVkZXM+Ci0JCQk8L3Jlc291cmNlPgotCQk8L3Jlc291cmNlcz4KLQkJPHBsdWdpbnM+Ci0JCQk8cGx1Z2luPgotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4yLjQuMTwvdmVyc2lvbj4KLQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJPGZpbGVzZXRzPgotCQkJCQkJPGZpbGVzZXQ+Ci0JCQkJCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4KLQkJCQkJCQk8aW5jbHVkZXM+Ci0JCQkJCQkJCTxpbmNsdWRlPioqPC9pbmNsdWRlPgotCQkJCQkJCTwvaW5jbHVkZXM+Ci0JCQkJCQk8L2ZpbGVzZXQ+Ci0JCQkJCTwvZmlsZXNldHM+Ci0JCQkJPC9jb25maWd1cmF0aW9uPgotCQkJPC9wbHVnaW4+Ci0JCQk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+MS43PC92ZXJzaW9uPgotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGlkPmFkZC1zb3VyY2U8L2lkPgotCQkJCQkJPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmFkZC1zb3VyY2U8L2dvYWw+Ci0JCQkJCQk8L2dvYWxzPgotCQkJCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCQkJPHNvdXJjZXM+Ci0JCQkJCQkJCTxzb3VyY2U+eHRlbmQtZ2VuPC9zb3VyY2U+Ci0JCQkJCQkJPC9zb3VyY2VzPgotCQkJCQkJPC9jb25maWd1cmF0aW9uPgotCQkJCQk8L2V4ZWN1dGlvbj4KLQkJCQk8L2V4ZWN1dGlvbnM+Ci0JCQk8L3BsdWdpbj4KLQkgCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+eHRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJCTx2ZXJzaW9uPjIuMTQuMDwvdmVyc2lvbj4KLQkJCQk8ZGVwZW5kZW5jaWVzPgotCQkJCSA8ZGVwZW5kZW5jeT4KLQkJCTxncm91cElkPm9yZy5lY2xpcHNlLmpkdDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpkdC5jb3JlPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+My4xMy4xMDI8L3ZlcnNpb24+Ci0JCTwvZGVwZW5kZW5jeT4KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZHQ8L2dyb3VwSWQ+Ci0JCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZHQuY29tcGlsZXIuYXB0PC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+MS4zLjExMDwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCQk8ZGVwZW5kZW5jeT4KLQkJCTxncm91cElkPm9yZy5lY2xpcHNlLmpkdDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpkdC5jb21waWxlci50b29sPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+MS4yLjEwMTwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCQk8ZGVwZW5kZW5jeT4KLQkJCTxncm91cElkPm9yZy5lY2xpcHNlLmVtZjwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmVtZi5jb2RlZ2VuPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+Mi4xMS4wPC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0JCQkJPC9kZXBlbmRlbmNpZXM+Ci0KLQkJCQk8ZXhlY3V0aW9ucz4KLQkJCQkJPGV4ZWN1dGlvbj4KLQkJCQkJCTxnb2Fscz4KLQkJCQkJCQk8Z29hbD5jb21waWxlPC9nb2FsPgotCQkJCQkJCTxnb2FsPnh0ZW5kLWluc3RhbGwtZGVidWctaW5mbzwvZ29hbD4KLQkJCQkJCQk8Z29hbD50ZXN0Q29tcGlsZTwvZ29hbD4KLQkJCQkJCQk8Z29hbD54dGVuZC10ZXN0LWluc3RhbGwtZGVidWctaW5mbzwvZ29hbD4KLQkJCQkJCTwvZ29hbHM+Ci0JCQkJCTwvZXhlY3V0aW9uPgotCQkJCTwvZXhlY3V0aW9ucz4KLQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQkJPC9wbHVnaW5zPgotCTwvYnVpbGQ+Ci08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VDbGFzc0FsbFJlZmVyZW5jZXNCdWZmZXJCdWlsZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvYnVpbGRlcnMvRUNsYXNzQWxsUmVmZXJlbmNlc0J1ZmZlckJ1aWxkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYwYTZjNS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvYnVpbGRlcnMvRUNsYXNzQWxsUmVmZXJlbmNlc0J1ZmZlckJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1MSArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzc2lmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmUuU2V0dGluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKLQotcHVibGljIGNsYXNzIEVDbGFzc0FsbFJlZmVyZW5jZXNCdWZmZXJCdWlsZGVyIHsKLQotCi0JcHJpdmF0ZSBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwOwotCi0JcHVibGljIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGdldElkMk9iamVjdHNNYXAoKSB7Ci0JCXJldHVybiB0aGlzLmlkMk9iamVjdHNNYXA7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCBzZXRJZDJPYmplY3RzTWFwKGZpbmFsIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdHNNYXApIHsKLQkJdGhpcy5pZDJPYmplY3RzTWFwID0gaWQyT2JqZWN0c01hcDsKLQl9Ci0KLQotCXB1YmxpYyBTdHJpbmdCdWZmZXIgYnVpbGRCdWZmZXIoZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKLQotCQl0aGlzLmlkMk9iamVjdHNNYXAgPSBuZXcgQmFzaWNFTWFwPFN0cmluZywgT2JqZWN0PigpOwotCi0KLQkJZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJAc3RhcnR1bWwiKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQotCQlhZGRDbGFzc0luZm8oc2VsZWN0ZWRPYmpDbGFzcywgcGxhbnR1bWxCdWZmZXIpOwotCi0KLQkJcG9wdWxhdGVIZWlyYXJjaHkocGxhbnR1bWxCdWZmZXIsIHNlbGVjdGVkT2JqQ2xhc3MpOwotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCS8qLSBhbHNvIGRpc3BsYXkgaW5mb3JtYXRpb24gb2Ygc3ViLWNsYXNzZXMgKi8KLQkJcG9wdWxhdGVTdWJDbGFzc2VzKHBsYW50dW1sQnVmZmVyLCBzZWxlY3RlZE9iakNsYXNzKTsKLQotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkBlbmR1bWwiKTsKLQotCQlyZXR1cm4gcGxhbnR1bWxCdWZmZXI7Ci0KLQl9Ci0KLQotCXByaXZhdGUgdm9pZCBhZGRDbGFzc0luZm8oZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MsIGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlcikgewotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCi0JCWlmIChzZWxlY3RlZE9iakNsYXNzLmlzQWJzdHJhY3QoKSAmJiBzZWxlY3RlZE9iakNsYXNzLmlzSW50ZXJmYWNlKCkpIHsKLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiaW50ZXJmYWNlIFwiIiArIHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7Ci0KLQkJfQotCQllbHNlIGlmIChzZWxlY3RlZE9iakNsYXNzLmlzQWJzdHJhY3QoKSkgewotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJhYnN0cmFjdCBcIiIgKyBzZWxlY3RlZE9iakNsYXNzLmdldE5hbWUoKSArICJcIiIpOwotCi0JCX0KLQkJZWxzZSBpZiAoc2VsZWN0ZWRPYmpDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiaW50ZXJmYWNlIFwiIiArIHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImNsYXNzIFwiIiArIHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7Ci0KLQkJfQotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlSGVpcmFyY2h5KGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKLQotCQlwb3B1bGF0ZUVDbGFzc1JlZmVyZW5jZXMocGxhbnR1bWxCdWZmZXIsIHNlbGVjdGVkT2JqQ2xhc3MpOwotCi0JCWZvciAoZmluYWwgRUNsYXNzIHN1cGVyQ2xhc3MgOiBzZWxlY3RlZE9iakNsYXNzLmdldEVTdXBlclR5cGVzKCkpIHsKLQotCi0JCQlpZiAoc3VwZXJDbGFzcy5pc0Fic3RyYWN0KCkgJiYgc3VwZXJDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0JCQkJYWRkQ29udGVudFRvQnVmZmVyKHBsYW50dW1sQnVmZmVyLAotCQkJCQkJImludGVyZmFjZSBcIiIgKyBzdXBlckNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIGdldFVVSUQoc3VwZXJDbGFzcykgKyAiXV0iKTsKLQotCQkJfQotCQkJZWxzZSBpZiAoc3VwZXJDbGFzcy5pc0Fic3RyYWN0KCkpIHsKLQkJCQlhZGRDb250ZW50VG9CdWZmZXIocGxhbnR1bWxCdWZmZXIsCi0JCQkJCQkiYWJzdHJhY3QgXCIiICsgc3VwZXJDbGFzcy5nZXROYW1lKCkgKyAiXCIiICsgIiAgICBbWyIgKyBnZXRVVUlEKHN1cGVyQ2xhc3MpICsgIl1dIik7Ci0KLQkJCX0KLQkJCWVsc2UgaWYgKHN1cGVyQ2xhc3MuaXNJbnRlcmZhY2UoKSkgewotCi0JCQkJYWRkQ29udGVudFRvQnVmZmVyKHBsYW50dW1sQnVmZmVyLAotCQkJCQkJImludGVyZmFjZSBcIiIgKyBzdXBlckNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIGdldFVVSUQoc3VwZXJDbGFzcykgKyAiXV0iKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFkZENvbnRlbnRUb0J1ZmZlcihwbGFudHVtbEJ1ZmZlciwKLQkJCQkJCSJjbGFzcyBcIiIgKyBzdXBlckNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIGdldFVVSUQoc3VwZXJDbGFzcykgKyAiXV0iKTsKLQotCQkJfQotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJYWRkQ29udGVudFRvQnVmZmVyKHBsYW50dW1sQnVmZmVyLAotCQkJCQlzdXBlckNsYXNzLmdldE5hbWUoKSArICIgPHwtLSAiICsgc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCkgKyAiICAjZGFya2JsdWUiKTsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCXBvcHVsYXRlSGVpcmFyY2h5KHBsYW50dW1sQnVmZmVyLCBzdXBlckNsYXNzKTsKLQotCi0JCX0KLQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZENvbnRlbnRUb0J1ZmZlcihmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIsIGZpbmFsIFN0cmluZyBkYXRhKSB7Ci0KLQkJaWYgKHBsYW50dW1sQnVmZmVyLnRvU3RyaW5nKCkuY29udGFpbnMoZGF0YSkgPT0gZmFsc2UpIHsKLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChkYXRhKTsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlU3ViQ2xhc3NlcyhmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIsIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzKSB7Ci0KLQkJZm9yIChmaW5hbCBFQ2xhc3Mgc3ViQ2xhc3MgOiBnZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MpKSB7Ci0KLQotCQkJaWYgKHN1YkNsYXNzLmlzQWJzdHJhY3QoKSAmJiBzdWJDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0KLQotCQkJCWFkZENvbnRlbnRUb0J1ZmZlcihwbGFudHVtbEJ1ZmZlciwKLQkJCQkJCSJpbnRlcmZhY2UgXCIiICsgc3ViQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIiArICIgICAgW1siICsgZ2V0VVVJRChzdWJDbGFzcykgKyAiXV0iKTsKLQotCQkJfQotCQkJZWxzZSBpZiAoc3ViQ2xhc3MuaXNBYnN0cmFjdCgpKSB7Ci0JCQkJYWRkQ29udGVudFRvQnVmZmVyKHBsYW50dW1sQnVmZmVyLAotCQkJCQkJImFic3RyYWN0IFwiIiArIHN1YkNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIGdldFVVSUQoc3ViQ2xhc3MpICsgIl1dIik7Ci0KLQkJCX0KLQkJCWVsc2UgaWYgKHN1YkNsYXNzLmlzSW50ZXJmYWNlKCkpIHsKLQotCQkJCWFkZENvbnRlbnRUb0J1ZmZlcihwbGFudHVtbEJ1ZmZlciwKLQkJCQkJCSJpbnRlcmZhY2UgXCIiICsgc3ViQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIiArICIgICAgW1siICsgZ2V0VVVJRChzdWJDbGFzcykgKyAiXV0iKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFkZENvbnRlbnRUb0J1ZmZlcihwbGFudHVtbEJ1ZmZlciwKLQkJCQkJCSJjbGFzcyBcIiIgKyBzdWJDbGFzcy5nZXROYW1lKCkgKyAiXCIiICsgIiAgICBbWyIgKyBnZXRVVUlEKHN1YkNsYXNzKSArICJdXSIpOwotCi0JCQl9Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQlhZGRDb250ZW50VG9CdWZmZXIocGxhbnR1bWxCdWZmZXIsCi0JCQkJCXNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIiA8fC0tICIgKyBzdWJDbGFzcy5nZXROYW1lKCkgKyAiICAjZGFya0dyZWVuIik7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQlwb3B1bGF0ZUVDbGFzc0NvbnRhaW5lckluZm8ocGxhbnR1bWxCdWZmZXIsIHN1YkNsYXNzKTsKLQotCQkJcG9wdWxhdGVTdWJDbGFzc2VzKHBsYW50dW1sQnVmZmVyLCBzdWJDbGFzcyk7Ci0KLQkJfQotCX0KLQotCi0JcHJpdmF0ZSBMaXN0PEVDbGFzcz4gZ2V0U3ViQ2xhc3NlcyhmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcykgewotCi0JCWZpbmFsIExpc3Q8RUNsYXNzPiBhbGxTdWJDbGFzc2VzID0gbmV3IEFycmF5TGlzdDxFQ2xhc3M+KCk7Ci0KLQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBzZWxlY3RlZE9iakNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCk7Ci0KLQkJaWYgKHJlc291cmNlU2V0ICE9IG51bGwpIHsKLQotCQkJLy8gV2l0aCB0aGlzIGFwcHJvYWNoIGNoZWNrIGlzIG1hZGUgdG8gZmluZCB0aGUgU3ViLUNsYXNzZXMgZm9yIHRoZSBzdXBwbGllZCBFQ2xhc3MgaW4gYWxsIHRoZSBwYWNrYWdlcwotCQkJLy8gYmVsb25naW5nIHRvIHRoZSByZXNvdXJjZXNldAotCi0JCQlmaW5hbCBFTGlzdDxSZXNvdXJjZT4gcmVzb3VyY2VzID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCk7Ci0KLQkJCWZvciAoZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgOiByZXNvdXJjZXMpIHsKLQotCQkJCWZpbmFsIEVMaXN0PEVPYmplY3Q+IGNvbnRlbnRzID0gcmVzb3VyY2UuZ2V0Q29udGVudHMoKTsKLQotCQkJCWlmIChjb250ZW50cy5zaXplKCkgPiAwKSB7Ci0vLwkJCQkJZmluYWwgRU9iamVjdCBlT2JqZWN0ID0gY29udGVudHMuZ2V0KDApOwotCi0JCQkJCWZvciAoRU9iamVjdCBlb2JqIDogY29udGVudHMpIHsKLQkJCQkJCQotCQkJCQkJaWYgKGVvYmogaW5zdGFuY2VvZiBFUGFja2FnZSkgewotCQkJCQkJCWFsbFN1YkNsYXNzZXMuYWRkQWxsKGdldFN1YkNsYXNzZXMoc2VsZWN0ZWRPYmpDbGFzcywgKEVQYWNrYWdlKSBlb2JqKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQotCQkJZmluYWwgRVBhY2thZ2UgZVBhY2thZ2UgPSBzZWxlY3RlZE9iakNsYXNzLmdldEVQYWNrYWdlKCk7Ci0JCQlyZXR1cm4gZ2V0U3ViQ2xhc3NlcyhzZWxlY3RlZE9iakNsYXNzLCBlUGFja2FnZSk7Ci0JCX0KLQotCQlyZXR1cm4gYWxsU3ViQ2xhc3NlczsKLQotCX0KLQotCXByaXZhdGUgTGlzdDxFQ2xhc3M+IGdldFN1YkNsYXNzZXMoZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MsIGZpbmFsIEVQYWNrYWdlIGVQYWNrYWdlKSB7Ci0JCWZpbmFsIExpc3Q8RUNsYXNzPiBhbGxTdWJDbGFzc2VzID0gbmV3IEFycmF5TGlzdDxFQ2xhc3M+KCk7Ci0KLQkJZmluYWwgRUxpc3Q8RUNsYXNzaWZpZXI+IGVDbGFzc2lmaWVycyA9IGVQYWNrYWdlLmdldEVDbGFzc2lmaWVycygpOwotCi0JCWZvciAoZmluYWwgRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIgOiBlQ2xhc3NpZmllcnMpIHsKLQotCQkJaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRUNsYXNzKSB7Ci0KLQkJCQlpZiAoIShzZWxlY3RlZE9iakNsYXNzID09IGVDbGFzc2lmaWVyKSAmJiBzZWxlY3RlZE9iakNsYXNzLmlzU3VwZXJUeXBlT2YoKEVDbGFzcykgZUNsYXNzaWZpZXIpKSB7Ci0JCQkJCWFsbFN1YkNsYXNzZXMuYWRkKChFQ2xhc3MpIGVDbGFzc2lmaWVyKTsKLQkJCQl9Ci0KLQotCQkJfQotCQl9Ci0JCXJldHVybiBhbGxTdWJDbGFzc2VzOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRUNsYXNzUmVmZXJlbmNlcyhmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIsIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzKSB7Ci0JCWZpbmFsIExpc3Q8RVJlZmVyZW5jZT4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxFUmVmZXJlbmNlPigpOwotCi0JCWZpbmFsIE9iamVjdCBzZWFyY2hTY29wZSA9IChzZWxlY3RlZE9iakNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCkgPT0gbnVsbCkKLQkJCQk/IHNlbGVjdGVkT2JqQ2xhc3MuZVJlc291cmNlKCkgOiBzZWxlY3RlZE9iakNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCk7Ci0KLQkJLyotIGdldHRpbmcgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBzZWxlY3RlZCBvYmplY3RzIEVDbGFzcyAtLT4gYnkgc3VwcGx5aW5nIHRoZSBFUmVzb3VyY2Ugb2YgdGhlIGNvcnJlc3BvbmRpbmcgRUNsYXNzIChpLmUuIGVjb3JlIG9yIFhjb3JlKSAqLwotCi0JCUNvbGxlY3Rpb248U2V0dGluZz4gYWxsUmVmU2V0dGluZ3MgPSBudWxsOwotCQlpZiAoc2VhcmNoU2NvcGUgaW5zdGFuY2VvZiBSZXNvdXJjZSkgewotCQkJYWxsUmVmU2V0dGluZ3MgPSBFY29yZVV0aWwuVXNhZ2VDcm9zc1JlZmVyZW5jZXIuZmluZChzZWxlY3RlZE9iakNsYXNzLCAoUmVzb3VyY2UpIHNlYXJjaFNjb3BlKTsKLQkJfQotCQllbHNlIGlmIChzZWFyY2hTY29wZSBpbnN0YW5jZW9mIFJlc291cmNlU2V0KSB7Ci0JCQlhbGxSZWZTZXR0aW5ncyA9IEVjb3JlVXRpbC5Vc2FnZUNyb3NzUmVmZXJlbmNlci5maW5kKHNlbGVjdGVkT2JqQ2xhc3MsIChSZXNvdXJjZVNldCkgc2VhcmNoU2NvcGUpOwotCQl9Ci0KLQotCQkvKi0gaWYgcmVmcyBvZiB0aGUgRUNsYXNzIGFyZSBmb3VuZCwgdGhlbiBmaWxsIHRoZSBwbGFudFVNTEJ1ZmZlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb250ZW50cyAqLwotCi0JCWlmIChhbGxSZWZTZXR0aW5ncy5zaXplKCkgPiAwKSB7Ci0KLQkJCWZvciAoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmcgcmVmU2V0dGluZyA6IGFsbFJlZlNldHRpbmdzKSB7Ci0KLQkJCQlpZiAocmVmU2V0dGluZy5nZXRFT2JqZWN0KCkgaW5zdGFuY2VvZiBFUmVmZXJlbmNlCi0JCQkJCQkmJiAhaXNFbGVtZW50Q29udGFpbmVkKHJlc3VsdCwgKEVSZWZlcmVuY2UpIHJlZlNldHRpbmcuZ2V0RU9iamVjdCgpKSkgewotCQkJCQlyZXN1bHQuYWRkKChFUmVmZXJlbmNlKSByZWZTZXR0aW5nLmdldEVPYmplY3QoKSk7Ci0JCQkJfQotCQkJfQotCi0JCQlmb3IgKGZpbmFsIEVSZWZlcmVuY2UgZVJlZmVyZW5jZSA6IHJlc3VsdCkgewotCi0JCQkJZmluYWwgRUNsYXNzaWZpZXIgZVR5cGUgPSBlUmVmZXJlbmNlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKLQotCQkJCWFkZENvbnRlbnRUb0J1ZmZlcihwbGFudHVtbEJ1ZmZlciwgImNsYXNzIFwiIiArIGVUeXBlLmdldE5hbWUoKSArICJcIiIKLQkJCQkJCSsgKGVSZWZlcmVuY2UuaXNDb250YWlubWVudCgpID8gIiIgOiAiIikgKyAiICAgIFtbIiArIGdldFVVSUQoZVR5cGUpICsgIl1dIik7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQkJCX0KLQotCQkJZm9yIChmaW5hbCBFUmVmZXJlbmNlIGVSZWZlcmVuY2UgOiByZXN1bHQpIHsKLQotCQkJCWZpbmFsIEVDbGFzc2lmaWVyIHJlZmVyZW5jZUNsYXNzZVR5cGUgPSBlUmVmZXJlbmNlLmdldEVDb250YWluaW5nQ2xhc3MoKTsKLQotCi0JCQkJZmluYWwgU3RyaW5nIG5hbWUgPSBlUmVmZXJlbmNlLmdldE5hbWUoKTsKLQotCQkJCWZpbmFsIGJvb2xlYW4gY29udGFpbm1lbnQgPSBlUmVmZXJlbmNlLmlzQ29udGFpbm1lbnQoKTsKLQotCQkJCWZpbmFsIGJvb2xlYW4gbWFueSA9IGVSZWZlcmVuY2UuaXNNYW55KCk7Ci0KLQkJCQlpZiAoY29udGFpbm1lbnQpIHsKLQotCQkJCQlhZGRDb250ZW50VG9CdWZmZXIocGxhbnR1bWxCdWZmZXIsIHJlZmVyZW5jZUNsYXNzZVR5cGUuZ2V0TmFtZSgpICsgIiotLSAiCi0JCQkJCQkJKyBzZWxlY3RlZE9iakNsYXNzLmdldE5hbWUoKSArICI6IiArIChtYW55ID8gIiAoMC0qKSAiIDogIiIpICsgbmFtZSArICIgPiIpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJYWRkQ29udGVudFRvQnVmZmVyKHBsYW50dW1sQnVmZmVyLCByZWZlcmVuY2VDbGFzc2VUeXBlLmdldE5hbWUoKSArICItLT4gIgotCQkJCQkJCSsgc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCkgKyAiOiIgKyAobWFueSA/ICIgKDAtKikgIiA6ICIiKSArIG5hbWUpOwotCi0JCQkJfQotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0KLQkJCS8qLSBubyByZWZlcmVuY2VzIGZvciB0aGlzIEVDbGFzcyBhcmUgZm91bmQgKi8KLQkJCWFkZENvbnRlbnRUb0J1ZmZlcihwbGFudHVtbEJ1ZmZlciwKLQkJCQkJImNsYXNzIFwiIiArIHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIiArICIgICAgW1siICsgZ2V0VVVJRChzZWxlY3RlZE9iakNsYXNzKSArICJdXSIpOwotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJfQotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlRUNsYXNzQ29udGFpbmVySW5mbyhmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIsIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzKSB7Ci0JCWZpbmFsIExpc3Q8RVJlZmVyZW5jZT4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxFUmVmZXJlbmNlPigpOwotCi0KLQkJZmluYWwgT2JqZWN0IHNlYXJjaFNjb3BlID0gKHNlbGVjdGVkT2JqQ2xhc3MuZVJlc291cmNlKCkuZ2V0UmVzb3VyY2VTZXQoKSA9PSBudWxsKQotCQkJCT8gc2VsZWN0ZWRPYmpDbGFzcy5lUmVzb3VyY2UoKSA6IHNlbGVjdGVkT2JqQ2xhc3MuZVJlc291cmNlKCkuZ2V0UmVzb3VyY2VTZXQoKTsKLQotCQkvKi0gZ2V0dGluZyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhlIHNlbGVjdGVkIG9iamVjdHMgRUNsYXNzIC0tPiBieSBzdXBwbHlpbmcgdGhlIEVSZXNvdXJjZSBvZiB0aGUgY29ycmVzcG9uZGluZyBFQ2xhc3MgKGkuZS4gZWNvcmUgb3IgWGNvcmUpICovCi0KLQkJQ29sbGVjdGlvbjxTZXR0aW5nPiBhbGxSZWZTZXR0aW5ncyA9IG51bGw7Ci0JCWlmIChzZWFyY2hTY29wZSBpbnN0YW5jZW9mIFJlc291cmNlKSB7Ci0JCQlhbGxSZWZTZXR0aW5ncyA9IEVjb3JlVXRpbC5Vc2FnZUNyb3NzUmVmZXJlbmNlci5maW5kKHNlbGVjdGVkT2JqQ2xhc3MsIChSZXNvdXJjZSkgc2VhcmNoU2NvcGUpOwotCQl9Ci0JCWVsc2UgaWYgKHNlYXJjaFNjb3BlIGluc3RhbmNlb2YgUmVzb3VyY2VTZXQpIHsKLQkJCWFsbFJlZlNldHRpbmdzID0gRWNvcmVVdGlsLlVzYWdlQ3Jvc3NSZWZlcmVuY2VyLmZpbmQoc2VsZWN0ZWRPYmpDbGFzcywgKFJlc291cmNlU2V0KSBzZWFyY2hTY29wZSk7Ci0JCX0KLQotCi0JCS8qLSBpZiByZWZzIG9mIHRoZSBFQ2xhc3MgYXJlIGZvdW5kLCB0aGVuIGZpbGwgdGhlIHBsYW50VU1MQnVmZmVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNvbnRlbnRzICovCi0KLQkJaWYgKGFsbFJlZlNldHRpbmdzLnNpemUoKSA+IDApIHsKLQotCQkJZm9yIChmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUuU2V0dGluZyByZWZTZXR0aW5nIDogYWxsUmVmU2V0dGluZ3MpIHsKLQotCQkJCWlmIChyZWZTZXR0aW5nLmdldEVPYmplY3QoKSBpbnN0YW5jZW9mIEVSZWZlcmVuY2UKLQkJCQkJCSYmICFpc0VsZW1lbnRDb250YWluZWQocmVzdWx0LCAoRVJlZmVyZW5jZSkgcmVmU2V0dGluZy5nZXRFT2JqZWN0KCkpKSB7Ci0JCQkJCWlmICgoKEVSZWZlcmVuY2UpIHJlZlNldHRpbmcuZ2V0RU9iamVjdCgpKS5pc0NvbnRhaW5tZW50KCkpIHsKLQkJCQkJCXJlc3VsdC5hZGQoKEVSZWZlcmVuY2UpIHJlZlNldHRpbmcuZ2V0RU9iamVjdCgpKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQkJZm9yIChmaW5hbCBFUmVmZXJlbmNlIGVSZWZlcmVuY2UgOiByZXN1bHQpIHsKLQotCQkJCS8qLSBvbmx5IGNvbnRhaW5tZW50IHJlZmVyZW5jZSBpbmZvcm1hdGlvbiBzaG91bGQgYmUgZGlzcGxheWVkIC0tPiBvdGhlciBpbmZvIHNob3VsZCBiZSBpZ25vcmVkICovCi0KLQkJCQlmaW5hbCBFQ2xhc3NpZmllciBlVHlwZSA9IGVSZWZlcmVuY2UuZ2V0RUNvbnRhaW5pbmdDbGFzcygpOwotCi0JCQkJYWRkQ29udGVudFRvQnVmZmVyKHBsYW50dW1sQnVmZmVyLCAiY2xhc3MgXCIiICsgZVR5cGUuZ2V0TmFtZSgpICsgIlwiIgotCQkJCQkJKyAoZVJlZmVyZW5jZS5pc0NvbnRhaW5tZW50KCkgPyAiIiA6ICIiKSArICIgICAgW1siICsgZ2V0VVVJRChlVHlwZSkgKyAiXV0iKTsKLQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQl9Ci0KLQkJCWZvciAoZmluYWwgRVJlZmVyZW5jZSBlUmVmZXJlbmNlIDogcmVzdWx0KSB7Ci0KLQkJCQlmaW5hbCBFQ2xhc3NpZmllciByZWZlcmVuY2VDbGFzc2VUeXBlID0gZVJlZmVyZW5jZS5nZXRFQ29udGFpbmluZ0NsYXNzKCk7Ci0KLQotCQkJCWZpbmFsIFN0cmluZyBuYW1lID0gZVJlZmVyZW5jZS5nZXROYW1lKCk7Ci0KLQkJCQlmaW5hbCBib29sZWFuIGNvbnRhaW5tZW50ID0gZVJlZmVyZW5jZS5pc0NvbnRhaW5tZW50KCk7Ci0KLQkJCQlmaW5hbCBib29sZWFuIG1hbnkgPSBlUmVmZXJlbmNlLmlzTWFueSgpOwotCi0JCQkJaWYgKGNvbnRhaW5tZW50KSB7Ci0KLQkJCQkJYWRkQ29udGVudFRvQnVmZmVyKHBsYW50dW1sQnVmZmVyLCByZWZlcmVuY2VDbGFzc2VUeXBlLmdldE5hbWUoKSArICIqLS0gIgotCQkJCQkJCSsgc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCkgKyAiOiIgKyAobWFueSA/ICIgKDAtKikgIiA6ICIiKSArIG5hbWUgKyAiID4iKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWFkZENvbnRlbnRUb0J1ZmZlcihwbGFudHVtbEJ1ZmZlciwgcmVmZXJlbmNlQ2xhc3NlVHlwZS5nZXROYW1lKCkgKyAiLS0+ICIKLQkJCQkJCQkrIHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIjoiICsgKG1hbnkgPyAiICgwLSopICIgOiAiIikgKyBuYW1lKTsKLQotCQkJCX0KLQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCi0JCQkvKi0gbm8gcmVmZXJlbmNlcyBmb3IgdGhpcyBFQ2xhc3MgYXJlIGZvdW5kICovCi0JCQlhZGRDb250ZW50VG9CdWZmZXIocGxhbnR1bWxCdWZmZXIsCi0JCQkJCSJjbGFzcyBcIiIgKyBzZWxlY3RlZE9iakNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIGdldFVVSUQoc2VsZWN0ZWRPYmpDbGFzcykgKyAiXV0iKTsKLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCX0KLQl9Ci0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VsZW1lbnRDb250YWluZWQoZmluYWwgTGlzdDxFUmVmZXJlbmNlPiBsLCBmaW5hbCBFUmVmZXJlbmNlIGVSZWYpIHsKLQkJYm9vbGVhbiBpc0VsZW1lbnRGb3VuZCA9IGZhbHNlOwotCQlmaW5hbCBJdGVyYXRvcjxFUmVmZXJlbmNlPiBpdCA9IGwuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSAmJiAhaXNFbGVtZW50Rm91bmQpIHsKLQkJCWZpbmFsIEVSZWZlcmVuY2UgaXNDb250YWluZWQgPSBpdC5uZXh0KCk7Ci0JCQlpZiAoaXNDb250YWluZWQuZXF1YWxzKGVSZWYpKSB7Ci0JCQkJaXNFbGVtZW50Rm91bmQgPSB0cnVlOwotCQkJfQotCQl9Ci0JCXJldHVybiBpc0VsZW1lbnRGb3VuZDsKLQl9Ci0KLQotCXByaXZhdGUgU3RyaW5nIGdldFVVSUQoZmluYWwgRUNsYXNzaWZpZXIgZUNsYXNzKSB7Ci0KLQkJaWYgKHRoaXMuaWQyT2JqZWN0c01hcC5jb250YWluc1ZhbHVlKGVDbGFzcykpIHsKLQotCi0JCQlmb3IgKGZpbmFsIFN0cmluZyBrZXkgOiB0aGlzLmlkMk9iamVjdHNNYXAua2V5U2V0KCkpIHsKLQkJCQlpZiAoZUNsYXNzID09IHRoaXMuaWQyT2JqZWN0c01hcC5nZXQoa2V5KSkgewotCQkJCQlyZXR1cm4ga2V5OwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWZpbmFsIFN0cmluZyB1dWlkID0gRWNvcmVVdGlsLmdlbmVyYXRlVVVJRCgpOwotCi0JCXRoaXMuaWQyT2JqZWN0c01hcC5wdXQodXVpZCwgZUNsYXNzKTsKLQotCQlyZXR1cm4gdXVpZDsKLQotCX0KLQotCi19CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvYnVpbGRlcnMvRUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHlCdWZmZXJCdWlsZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvYnVpbGRlcnMvRUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHlCdWZmZXJCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5OThkMzEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5QnVmZmVyQnVpbGRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQwICswLDAgQEAKLSAvKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KLSAqIAotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLwotICogCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5idWlsZGVyczsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUF0dHJpYnV0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRURhdGFUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FRW51bTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUVudW1MaXRlcmFsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOwotCi1wdWJsaWMgY2xhc3MgRUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHlCdWZmZXJCdWlsZGVyIHsKLQotCXByaXZhdGUgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcDsKLQotCXByaXZhdGUgZmluYWwgRUxpc3Q8RUNsYXNzPiBhZGRlZEVDbGFzc2lmaWVycyA9IG5ldyBCYXNpY0VMaXN0PEVDbGFzcz4oKTsKLQotCXB1YmxpYyBFTWFwPFN0cmluZywgT2JqZWN0PiBnZXRJZDJPYmplY3RzTWFwKCkgewotCQlyZXR1cm4gdGhpcy5pZDJPYmplY3RzTWFwOwotCX0KLQotCi0JcHVibGljIHZvaWQgc2V0SWQyT2JqZWN0c01hcChmaW5hbCBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwKSB7Ci0JCXRoaXMuaWQyT2JqZWN0c01hcCA9IGlkMk9iamVjdHNNYXA7Ci0JfQotCi0KLQlwdWJsaWMgU3RyaW5nQnVmZmVyIGJ1aWxkQnVmZmVyKGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzKSB7Ci0KLQkJdGhpcy5hZGRlZEVDbGFzc2lmaWVycy5jbGVhcigpOwotCi0JCXRoaXMuaWQyT2JqZWN0c01hcCA9IG5ldyBCYXNpY0VNYXA8U3RyaW5nLCBPYmplY3Q+KCk7Ci0KLQkJZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJAc3RhcnR1bWwiKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQotCQlmaWxsUGxhbnRVTUxTa2luUGFyYW1zKHBsYW50dW1sQnVmZmVyKTsKLQotCQlpZiAoc2VsZWN0ZWRPYmpDbGFzcy5nZXRFU3VwZXJUeXBlcygpLnNpemUoKSA+IDApIHsKLQotCQkJcG9wdWxhdGVIZWlyYXJjaHkocGxhbnR1bWxCdWZmZXIsIHNlbGVjdGVkT2JqQ2xhc3MpOwotCi0JCX0KLQkJZWxzZSB7Ci0KLQkJCS8qLSBubyByZWZlcmVuY2VzIGZvciB0aGlzIEVDbGFzcyBhcmUgZm91bmQgKi8KLQkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sQnVmZmVyLCBzZWxlY3RlZE9iakNsYXNzLCAiU2VsZWN0ZWRFbGVtZW50Iik7Ci0KLQkJfQotCi0KLQkJcG9wdWxhdGVTdWJDbGFzc0luZm8oc2VsZWN0ZWRPYmpDbGFzcywgcGxhbnR1bWxCdWZmZXIpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQGVuZHVtbCIpOwotCi0JCXJldHVybiBwbGFudHVtbEJ1ZmZlcjsKLQotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlU3ViQ2xhc3NJbmZvKGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzLCBmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIpIHsKLQkJZm9yIChmaW5hbCBFQ2xhc3Mgc3ViQ2xhc3MgOiBnZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MpKSB7Ci0KLQotCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIHN1YkNsYXNzLCAiSCIpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIiA8fC0tICIgKyBzdWJDbGFzcy5nZXROYW1lKCkpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQl9Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgZmlsbFBsYW50VU1MU2tpblBhcmFtcyhmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIpIHsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgic2tpbnBhcmFtIGNsYXNzIHsiKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQmFja2dyb3VuZENvbG9yIFBhbGVHcmVlbiIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJBcnJvd0NvbG9yIFNlYUdyZWVuIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJvcmRlckNvbG9yIFNwcmluZ0dyZWVuIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJhY2tncm91bmRDb2xvcjw8SD4+IFdoZWF0Iik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJvcmRlckNvbG9yPDxIPj4gVG9tYXRvIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQmFja2dyb3VuZENvbG9yPDxTZWxlY3RlZEVsZW1lbnQ+PiBEYXJrT3JhbmdlICIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJvcmRlckNvbG9yPDxTZWxlY3RlZEVsZW1lbnQ+PiBUb21hdG8iKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJ9Iik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJza2lucGFyYW0gc3RlcmVvdHlwZUNCYWNrZ3JvdW5kQ29sb3IgWWVsbG93R3JlZW4iKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJza2lucGFyYW0gc3RlcmVvdHlwZUNCYWNrZ3JvdW5kQ29sb3IgPDxIPj4gRGltR3JheSIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlSGVpcmFyY2h5KGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKLQotCQljcmVhdGVDbGFzcyhwbGFudHVtbEJ1ZmZlciwgc2VsZWN0ZWRPYmpDbGFzcywgIlNlbGVjdGVkRWxlbWVudCIpOwotCi0KLQkJZm9yIChmaW5hbCBFQ2xhc3Mgc3VwZXJDbGFzcyA6IHNlbGVjdGVkT2JqQ2xhc3MuZ2V0RVN1cGVyVHlwZXMoKSkgewotCi0KLQkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sQnVmZmVyLCBzdXBlckNsYXNzLCAiSCIpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKHN1cGVyQ2xhc3MuZ2V0TmFtZSgpICsgIiA8fC0tICIgKyBzZWxlY3RlZE9iakNsYXNzLmdldE5hbWUoKSk7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQlwb3B1bGF0ZUhlaXJhcmNoeShwbGFudHVtbEJ1ZmZlciwgc3VwZXJDbGFzcyk7Ci0JCX0KLQotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUVFbnVtKGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRUVudW0gZUNsYXNzaWZpZXIpIHsKLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImVudW0gXCIiICsgZUNsYXNzaWZpZXIuZ2V0TmFtZSgpICsgIlwiIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgieyIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQlmaW5hbCBFTGlzdDxFRW51bUxpdGVyYWw+IGVUeXBlUGFyYW1ldGVycyA9IGVDbGFzc2lmaWVyLmdldEVMaXRlcmFscygpOwotCi0JCWZvciAoZmluYWwgRUVudW1MaXRlcmFsIGVUeXBlUGFyYW1ldGVyIDogZVR5cGVQYXJhbWV0ZXJzKSB7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKGVUeXBlUGFyYW1ldGVyLmdldE5hbWUoKSk7Ci0KLQotCQl9Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIn0iKTsKLQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUVEYXRhVHlwZShmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIsIGZpbmFsIEVEYXRhVHlwZSBlQ2xhc3NpZmllcikgewotCi0JfQotCi0KLQlwcml2YXRlIHZvaWQgY3JlYXRlQ2xhc3MoZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyLCBmaW5hbCBFQ2xhc3MgZUNsYXNzLCBmaW5hbCBTdHJpbmcgc3RlcmVvVHlwZSkgewotCi0JCWlmICghdGhpcy5hZGRlZEVDbGFzc2lmaWVycy5jb250YWlucyhlQ2xhc3MpKSB7Ci0KLQkJCXRoaXMuYWRkZWRFQ2xhc3NpZmllcnMuYWRkKGVDbGFzcyk7Ci0KLQkJCS8qLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBTdGFydCBvZiBDbGFzcyBPYmplY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotCQkJZmluYWwgU3RyaW5nIHV1aWQgPSBFY29yZVV0aWwuZ2VuZXJhdGVVVUlEKCk7Ci0KLQotCQkJaWYgKGVDbGFzcy5pc0Fic3RyYWN0KCkgJiYgZUNsYXNzLmlzSW50ZXJmYWNlKCkpIHsKLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImludGVyZmFjZSBcIiIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7Ci0KLQkJCX0KLQkJCWVsc2UgaWYgKGVDbGFzcy5pc0Fic3RyYWN0KCkpIHsKLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImFic3RyYWN0IFwiIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKLQotCQkJfQotCQkJZWxzZSBpZiAoZUNsYXNzLmlzSW50ZXJmYWNlKCkpIHsKLQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiaW50ZXJmYWNlIFwiIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiY2xhc3MgXCIiICsgZUNsYXNzLmdldE5hbWUoKSArICJcIiIpOwotCi0JCQl9Ci0KLQkJCWlmIChzdGVyZW9UeXBlICE9IG51bGwpIHsKLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIjw8IiArIHN0ZXJlb1R5cGUgKyAiPj4iKTsKLQkJCX0KLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCIgICAgW1siICsgdXVpZCArICJdXSAiKTsKLQotCQkJdGhpcy5pZDJPYmplY3RzTWFwLnB1dCh1dWlkLCBlQ2xhc3MpOwotCi0KLQkJCS8qLSBsaXN0aW5nIGF0dHJpYnV0ZXMgYmVsb25pbmcgdG8gdGhlIHNwZWNpZmljIEVNRiBlbGVtZW50ICovCi0KLQkJCWZpbmFsIEVMaXN0PEVBdHRyaWJ1dGU+IGVBdHRyaWJ1dGVzID0gZUNsYXNzLmdldEVBdHRyaWJ1dGVzKCk7Ci0JCQlmaW5hbCBFTGlzdDxFU3RydWN0dXJhbEZlYXR1cmU+IGVTdHJ1Y3R1cmFsRmVhdHVyZXMgPSBlQ2xhc3MuZ2V0RVN0cnVjdHVyYWxGZWF0dXJlcygpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoInsiKTsKLQotCQkJZmluYWwgTGlzdDxFQXR0cmlidXRlPiByZWZlcnJlZEVudW1zID0gbmV3IEFycmF5TGlzdDxFQXR0cmlidXRlPigpOwotCi0JCQlpZiAoZUF0dHJpYnV0ZXMuc2l6ZSgpID4gMCkgewotCi0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJCWZpbmFsIExpc3Q8RUF0dHJpYnV0ZT4gcHJvY2Vzc2VkQXR0cmlidXRlcyA9IG5ldyBBcnJheUxpc3Q8RUF0dHJpYnV0ZT4oKTsKLQotCQkJCWZvciAoZmluYWwgRUF0dHJpYnV0ZSBlQXR0cmlidXRlIDogZUF0dHJpYnV0ZXMpIHsKLQotCQkJCQlpZiAoIXByb2Nlc3NlZEF0dHJpYnV0ZXMuY29udGFpbnMoZUF0dHJpYnV0ZSkpIHsKLQotCQkJCQkJaWYgKGVBdHRyaWJ1dGUuZ2V0RUF0dHJpYnV0ZVR5cGUoKSBpbnN0YW5jZW9mIEVFbnVtKSB7Ci0JCQkJCQkJcmVmZXJyZWRFbnVtcy5hZGQoZUF0dHJpYnV0ZSk7Ci0JCQkJCQl9Ci0KLQkJCQkJCXByb2Nlc3NlZEF0dHJpYnV0ZXMuYWRkKGVBdHRyaWJ1dGUpOwotCi0JCQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJCQkJZmluYWwgU3RyaW5nIGxvd2VyQm91bmQgPSBlQXR0cmlidXRlLmdldExvd2VyQm91bmQoKSA9PSAtMSA/ICIqIgotCQkJCQkJCQk6IGVBdHRyaWJ1dGUuZ2V0TG93ZXJCb3VuZCgpICsgIiI7Ci0KLQkJCQkJCWZpbmFsIFN0cmluZyB1cHBlckJvdW5kID0gZUF0dHJpYnV0ZS5nZXRVcHBlckJvdW5kKCkgPT0gLTEgPyAiKiIKLQkJCQkJCQkJOiBlQXR0cmlidXRlLmdldFVwcGVyQm91bmQoKSArICIiOwotCi0JCQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoZUF0dHJpYnV0ZS5nZXRFVHlwZSgpLmdldE5hbWUoKSArICIgIiArIGVBdHRyaWJ1dGUuZ2V0TmFtZSgpICsgIiBbIgotCQkJCQkJCQkrIGxvd2VyQm91bmQgKyAiOiIgKyB1cHBlckJvdW5kICsgIl0iKTsKLQotCQkJCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCQkJCX0KLQotCi0JCQkJfQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJCX0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJCS8qLSBsaXN0aW5nIEVTdHJ1Y3R1cmFsRmVhdHVyZXMgYmVsb25pbmcgdG8gdGhlIHNwZWNpZmljIEVNRiBlbGVtZW50ICovCi0KLQkJCWZpbmFsIExpc3Q8RVN0cnVjdHVyYWxGZWF0dXJlPiBwcm9jZXNzZWRGZWF0dXJlcyA9IG5ldyBBcnJheUxpc3Q8RVN0cnVjdHVyYWxGZWF0dXJlPigpOwotCi0JCQlmaW5hbCBMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4gcmVmZXJyZWRFU3RyY3V0dXJhbEZlYXR1cmVzID0gbmV3IEFycmF5TGlzdDxFU3RydWN0dXJhbEZlYXR1cmU+KCk7Ci0KLQkJCWZvciAoZmluYWwgRVN0cnVjdHVyYWxGZWF0dXJlIGVTdHJ1Y3R1cmFsRmVhdHVyZSA6IGVTdHJ1Y3R1cmFsRmVhdHVyZXMpIHsKLQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQkJaWYgKCFwcm9jZXNzZWRGZWF0dXJlcy5jb250YWlucyhlU3RydWN0dXJhbEZlYXR1cmUpICYmIChlU3RydWN0dXJhbEZlYXR1cmUgaW5zdGFuY2VvZiBFUmVmZXJlbmNlKSkgewotCi0JCQkJCXByb2Nlc3NlZEZlYXR1cmVzLmFkZChlU3RydWN0dXJhbEZlYXR1cmUpOwotCi0JCQkJCXJlZmVycmVkRVN0cmN1dHVyYWxGZWF0dXJlcy5hZGQoZVN0cnVjdHVyYWxGZWF0dXJlKTsKLQotCQkJCQlmaW5hbCBTdHJpbmcgbG93ZXJCb3VuZCA9IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRMb3dlckJvdW5kKCkgPT0gLTEgPyAiKiIKLQkJCQkJCQk6IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRMb3dlckJvdW5kKCkgKyAiIjsKLQotCQkJCQlmaW5hbCBTdHJpbmcgdXBwZXJCb3VuZCA9IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRVcHBlckJvdW5kKCkgPT0gLTEgPyAiKiIKLQkJCQkJCQk6IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRVcHBlckJvdW5kKCkgKyAiIjsKLQotCQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoZVN0cnVjdHVyYWxGZWF0dXJlLmdldEVUeXBlKCkuZ2V0TmFtZSgpICsgIiAiICsgZVN0cnVjdHVyYWxGZWF0dXJlLmdldE5hbWUoKQotCQkJCQkJCSsgIiBbIiArIGxvd2VyQm91bmQgKyAiOiIgKyB1cHBlckJvdW5kICsgIl0iKTsKLQotCQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJCX0KLQkJCX0KLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJ9Iik7Ci0KLQkJCS8qLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSBFbmQgb2YgQ2xhc3MgT2JqZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQlmb3IgKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmUgOiByZWZlcnJlZEVTdHJjdXR1cmFsRmVhdHVyZXMpIHsKLQotCQkJCWNyZWF0ZUVDbGFzc2lmaWVyKHBsYW50dW1sQnVmZmVyLCBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0RVR5cGUoKSk7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJCWZpbmFsIFN0cmluZyByZWxhdGlvbiA9ICgoRVJlZmVyZW5jZSkgZVN0cnVjdHVyYWxGZWF0dXJlKS5pc0NvbnRhaW5tZW50KCkgPyAiICotLSAiIDogIi0tPiAiOwotCi0KLQkJCQlmaW5hbCBTdHJpbmcgbG93ZXJCb3VuZCA9IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRMb3dlckJvdW5kKCkgPT0gLTEgPyAiKiIKLQkJCQkJCTogZVN0cnVjdHVyYWxGZWF0dXJlLmdldExvd2VyQm91bmQoKSArICIiOwotCi0JCQkJZmluYWwgU3RyaW5nIHVwcGVyQm91bmQgPSBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0VXBwZXJCb3VuZCgpID09IC0xID8gIioiCi0JCQkJCQk6IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRVcHBlckJvdW5kKCkgKyAiIjsKLQotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKGVDbGFzcy5nZXROYW1lKCkgKyByZWxhdGlvbiArIGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRFVHlwZSgpLmdldE5hbWUoKSArICIgOiAiCi0JCQkJCQkrIGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXROYW1lKCkgKyAiIFsiICsgbG93ZXJCb3VuZCArICI6IiArIHVwcGVyQm91bmQgKyAiXSIpOwotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCX0KLQotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJZm9yIChmaW5hbCBFQXR0cmlidXRlIGVBdHRyaWJ1dGUgOiByZWZlcnJlZEVudW1zKSB7Ci0KLQkJCQljcmVhdGVFQ2xhc3NpZmllcihwbGFudHVtbEJ1ZmZlciwgZUF0dHJpYnV0ZS5nZXRFVHlwZSgpKTsKLQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJCQlmaW5hbCBTdHJpbmcgbG93ZXJCb3VuZCA9IGVBdHRyaWJ1dGUuZ2V0TG93ZXJCb3VuZCgpID09IC0xID8gIioiIDogZUF0dHJpYnV0ZS5nZXRMb3dlckJvdW5kKCkgKyAiIjsKLQotCQkJCWZpbmFsIFN0cmluZyB1cHBlckJvdW5kID0gZUF0dHJpYnV0ZS5nZXRVcHBlckJvdW5kKCkgPT0gLTEgPyAiKiIgOiBlQXR0cmlidXRlLmdldFVwcGVyQm91bmQoKSArICIiOwotCi0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoZUNsYXNzLmdldE5hbWUoKSArICIgKi0tICIgKyBlQXR0cmlidXRlLmdldEVUeXBlKCkuZ2V0TmFtZSgpICsgIiA6ICIKLQkJCQkJCSsgZUF0dHJpYnV0ZS5nZXROYW1lKCkgKyAiIFsiICsgbG93ZXJCb3VuZCArICI6IiArIHVwcGVyQm91bmQgKyAiXSIpOwotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCX0KLQotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCi0JCX0KLQotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUVDbGFzc2lmaWVyKGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRUNsYXNzaWZpZXIgZUNsYXNzaWZpZXIpIHsKLQotCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKLQkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sQnVmZmVyLCAoRUNsYXNzKSBlQ2xhc3NpZmllciwgbnVsbCk7Ci0JCX0KLQkJZWxzZSBpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFRW51bSkgewotCQkJY3JlYXRlRUVudW0ocGxhbnR1bWxCdWZmZXIsIChFRW51bSkgZUNsYXNzaWZpZXIpOwotCQl9Ci0JCWVsc2UgaWYgKGVDbGFzc2lmaWVyIGluc3RhbmNlb2YgRURhdGFUeXBlKSB7Ci0JCQljcmVhdGVFRGF0YVR5cGUocGxhbnR1bWxCdWZmZXIsIChFRGF0YVR5cGUpIGVDbGFzc2lmaWVyKTsKLQkJfQotCX0KLQotCXByaXZhdGUgTGlzdDxFQ2xhc3M+IGdldFN1YkNsYXNzZXMoZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKLQotCQlmaW5hbCBMaXN0PEVDbGFzcz4gYWxsU3ViQ2xhc3NlcyA9IG5ldyBBcnJheUxpc3Q8RUNsYXNzPigpOwotCi0JCWZpbmFsIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gc2VsZWN0ZWRPYmpDbGFzcy5lUmVzb3VyY2UoKS5nZXRSZXNvdXJjZVNldCgpOwotCi0JCWlmIChyZXNvdXJjZVNldCAhPSBudWxsKSB7Ci0KLQkJCS8vIFdpdGggdGhpcyBhcHByb2FjaCBjaGVjayBpcyBtYWRlIHRvIGZpbmQgdGhlIFN1Yi1DbGFzc2VzIGZvciB0aGUgc3VwcGxpZWQgRUNsYXNzIGluIGFsbCB0aGUgcGFja2FnZXMKLQkJCS8vIGJlbG9uZ2luZyB0byB0aGUgcmVzb3VyY2VzZXQKLQotCQkJZmluYWwgRUxpc3Q8UmVzb3VyY2U+IHJlc291cmNlcyA9IHJlc291cmNlU2V0LmdldFJlc291cmNlcygpOwotCi0JCQlmb3IgKGZpbmFsIFJlc291cmNlIHJlc291cmNlIDogcmVzb3VyY2VzKSB7Ci0KLQkJCQlmaW5hbCBFTGlzdDxFT2JqZWN0PiBjb250ZW50cyA9IHJlc291cmNlLmdldENvbnRlbnRzKCk7Ci0KLQkJCQlpZiAoY29udGVudHMuc2l6ZSgpID4gMCkgewotLy8JCQkJCWZpbmFsIEVPYmplY3QgZU9iamVjdCA9IGNvbnRlbnRzLmdldCgwKTsKLQotCQkJCQlmb3IgKEVPYmplY3QgZW9iaiA6IGNvbnRlbnRzKSB7Ci0JCQkJCQkKLQkJCQkJCWlmIChlb2JqIGluc3RhbmNlb2YgRVBhY2thZ2UpIHsKLQkJCQkJCQlhbGxTdWJDbGFzc2VzLmFkZEFsbChnZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MsIChFUGFja2FnZSkgZW9iaikpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCi0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0KLQkJCWZpbmFsIEVQYWNrYWdlIGVQYWNrYWdlID0gc2VsZWN0ZWRPYmpDbGFzcy5nZXRFUGFja2FnZSgpOwotCQkJcmV0dXJuIGdldFN1YkNsYXNzZXMoc2VsZWN0ZWRPYmpDbGFzcywgZVBhY2thZ2UpOwotCQl9Ci0KLQkJcmV0dXJuIGFsbFN1YkNsYXNzZXM7Ci0KLQl9Ci0KLQlwcml2YXRlIExpc3Q8RUNsYXNzPiBnZXRTdWJDbGFzc2VzKGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzLCBmaW5hbCBFUGFja2FnZSBlUGFja2FnZSkgewotCQlmaW5hbCBMaXN0PEVDbGFzcz4gYWxsU3ViQ2xhc3NlcyA9IG5ldyBBcnJheUxpc3Q8RUNsYXNzPigpOwotCi0JCWZpbmFsIEVMaXN0PEVDbGFzc2lmaWVyPiBlQ2xhc3NpZmllcnMgPSBlUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKTsKLQotCQlmb3IgKGZpbmFsIEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZUNsYXNzaWZpZXJzKSB7Ci0KLQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgewotCi0JCQkJaWYgKCEoc2VsZWN0ZWRPYmpDbGFzcyA9PSBlQ2xhc3NpZmllcikgJiYgc2VsZWN0ZWRPYmpDbGFzcy5pc1N1cGVyVHlwZU9mKChFQ2xhc3MpIGVDbGFzc2lmaWVyKSkgewotCQkJCQlhbGxTdWJDbGFzc2VzLmFkZCgoRUNsYXNzKSBlQ2xhc3NpZmllcik7Ci0JCQkJfQotCi0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYWxsU3ViQ2xhc3NlczsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1ZmZlckJ1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9idWlsZGVycy9FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWZmZXJCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmMjA1ZjkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1ZmZlckJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyNCArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVBdHRyaWJ1dGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVEYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUVudW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVFbnVtTGl0ZXJhbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVBhY2thZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKLQotcHVibGljIGNsYXNzIEVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1ZmZlckJ1aWxkZXIgewotCi0JcHJpdmF0ZSBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwOwotCi0JcHJpdmF0ZSBmaW5hbCBFTGlzdDxFQ2xhc3M+IGFkZGVkRUNsYXNzaWZpZXJzID0gbmV3IEJhc2ljRUxpc3Q8RUNsYXNzPigpOwotCi0JcHVibGljIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGdldElkMk9iamVjdHNNYXAoKSB7Ci0JCXJldHVybiB0aGlzLmlkMk9iamVjdHNNYXA7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCBzZXRJZDJPYmplY3RzTWFwKGZpbmFsIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdHNNYXApIHsKLQkJdGhpcy5pZDJPYmplY3RzTWFwID0gaWQyT2JqZWN0c01hcDsKLQl9Ci0KLQotCXB1YmxpYyBTdHJpbmdCdWZmZXIgYnVpbGRCdWZmZXIoZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKLQotCQl0aGlzLmFkZGVkRUNsYXNzaWZpZXJzLmNsZWFyKCk7Ci0KLQkJdGhpcy5pZDJPYmplY3RzTWFwID0gbmV3IEJhc2ljRU1hcDxTdHJpbmcsIE9iamVjdD4oKTsKLQotCQlmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkBzdGFydHVtbCIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCi0JCWZpbGxQbGFudFVNTFNraW5QYXJhbXMocGxhbnR1bWxCdWZmZXIpOwotCi0JCWlmIChzZWxlY3RlZE9iakNsYXNzLmdldEVTdXBlclR5cGVzKCkuc2l6ZSgpID4gMCkgewotCi0JCQlwb3B1bGF0ZUhlaXJhcmNoeShwbGFudHVtbEJ1ZmZlciwgc2VsZWN0ZWRPYmpDbGFzcyk7Ci0KLQkJfQotCQllbHNlIHsKLQotCQkJLyotIG5vIHJlZmVyZW5jZXMgZm9yIHRoaXMgRUNsYXNzIGFyZSBmb3VuZCAqLwotCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIHNlbGVjdGVkT2JqQ2xhc3MsICJTZWxlY3RlZEVsZW1lbnQiLCAxKTsKLQotCQl9Ci0KLQkJcG9wdWxhdGVTdWJDbGFzc0luZm8oc2VsZWN0ZWRPYmpDbGFzcywgcGxhbnR1bWxCdWZmZXIpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQGVuZHVtbCIpOwotCi0JCXJldHVybiBwbGFudHVtbEJ1ZmZlcjsKLQotCX0KLQotCXByaXZhdGUgdm9pZCBwb3B1bGF0ZVN1YkNsYXNzSW5mbyhmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcywgZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyKSB7Ci0JCWZvciAoZmluYWwgRUNsYXNzIHN1YkNsYXNzIDogZ2V0U3ViQ2xhc3NlcyhzZWxlY3RlZE9iakNsYXNzKSkgewotCi0KLQkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sQnVmZmVyLCBzdWJDbGFzcywgIlNlbGVjdGVkRWxlbWVudCIsIDEpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIiA8fC0tICIgKyBzdWJDbGFzcy5nZXROYW1lKCkpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQl9Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgZmlsbFBsYW50VU1MU2tpblBhcmFtcyhmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIpIHsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgic2tpbnBhcmFtIGNsYXNzIHsiKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQmFja2dyb3VuZENvbG9yIFBhbGVHcmVlbiIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJBcnJvd0NvbG9yIFNlYUdyZWVuIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJvcmRlckNvbG9yIFNwcmluZ0dyZWVuIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJhY2tncm91bmRDb2xvcjw8SD4+IFdoZWF0Iik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJvcmRlckNvbG9yPDxIPj4gVG9tYXRvIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQmFja2dyb3VuZENvbG9yPDxTZWxlY3RlZEVsZW1lbnQ+PiBEYXJrT3JhbmdlICIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkJvcmRlckNvbG9yPDxTZWxlY3RlZEVsZW1lbnQ+PiBUb21hdG8iKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJ9Iik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJza2lucGFyYW0gc3RlcmVvdHlwZUNCYWNrZ3JvdW5kQ29sb3IgWWVsbG93R3JlZW4iKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJza2lucGFyYW0gc3RlcmVvdHlwZUNCYWNrZ3JvdW5kQ29sb3IgPDxIPj4gRGltR3JheSIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHBvcHVsYXRlSGVpcmFyY2h5KGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MpIHsKLQotCQljcmVhdGVDbGFzcyhwbGFudHVtbEJ1ZmZlciwgc2VsZWN0ZWRPYmpDbGFzcywgIkgiLCAxKTsKLQotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUVFbnVtKGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRUVudW0gZUNsYXNzaWZpZXIsIGZpbmFsIGludCBsZXZlbCkgewotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiZW51bSBcIiIgKyBlQ2xhc3NpZmllci5nZXROYW1lKCkgKyAiXCIiKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJ7Iik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCWZpbmFsIEVMaXN0PEVFbnVtTGl0ZXJhbD4gZVR5cGVQYXJhbWV0ZXJzID0gZUNsYXNzaWZpZXIuZ2V0RUxpdGVyYWxzKCk7Ci0KLQkJZm9yIChmaW5hbCBFRW51bUxpdGVyYWwgZVR5cGVQYXJhbWV0ZXIgOiBlVHlwZVBhcmFtZXRlcnMpIHsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoZVR5cGVQYXJhbWV0ZXIuZ2V0TmFtZSgpKTsKLQotCi0JCX0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgifSIpOwotCi0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlRURhdGFUeXBlKGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRURhdGFUeXBlIGVDbGFzc2lmaWVyLCBmaW5hbCBpbnQgbGV2ZWwpIHsKLQotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZUNsYXNzKGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgRUNsYXNzIGVDbGFzcywgZmluYWwgU3RyaW5nIHN0ZXJlb1R5cGUsCi0JCQlmaW5hbCBpbnQgbGV2ZWwpIHsKLQotCQlpZiAoIXRoaXMuYWRkZWRFQ2xhc3NpZmllcnMuY29udGFpbnMoZUNsYXNzKSkgewotCi0JCQl0aGlzLmFkZGVkRUNsYXNzaWZpZXJzLmFkZChlQ2xhc3MpOwotCi0JCQkvKi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gU3RhcnQgb2YgQ2xhc3MgT2JqZWN0ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLQkJCWZpbmFsIFN0cmluZyB1dWlkID0gRWNvcmVVdGlsLmdlbmVyYXRlVVVJRCgpOwotCi0KLQkJCWlmIChlQ2xhc3MuaXNBYnN0cmFjdCgpICYmIGVDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJpbnRlcmZhY2UgXCIiICsgZUNsYXNzLmdldE5hbWUoKSArICJcIiIpOwotCi0JCQl9Ci0JCQllbHNlIGlmIChlQ2xhc3MuaXNBYnN0cmFjdCgpKSB7Ci0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJhYnN0cmFjdCBcIiIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7Ci0KLQkJCX0KLQkJCWVsc2UgaWYgKGVDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImludGVyZmFjZSBcIiIgKyBlQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImNsYXNzIFwiIiArIGVDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKLQotCQkJfQotCi0JCQlpZiAoc3RlcmVvVHlwZSAhPSBudWxsKSB7Ci0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCI8PCIgKyBzdGVyZW9UeXBlICsgIj4+Iik7Ci0JCQl9Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiICAgIFtbIiArIHV1aWQgKyAiXV0gIik7Ci0KLQkJCXRoaXMuaWQyT2JqZWN0c01hcC5wdXQodXVpZCwgZUNsYXNzKTsKLQotCi0JCQkvKi0gbGlzdGluZyBhdHRyaWJ1dGVzIGJlbG9uaW5nIHRvIHRoZSBzcGVjaWZpYyBFTUYgZWxlbWVudCAqLwotCi0JCQlmaW5hbCBFTGlzdDxFQXR0cmlidXRlPiBlQXR0cmlidXRlcyA9IGVDbGFzcy5nZXRFQWxsQXR0cmlidXRlcygpOwotCQkJZmluYWwgRUxpc3Q8RVN0cnVjdHVyYWxGZWF0dXJlPiBlU3RydWN0dXJhbEZlYXR1cmVzID0gZUNsYXNzLmdldEVBbGxTdHJ1Y3R1cmFsRmVhdHVyZXMoKTsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJ7Iik7Ci0KLQkJCWZpbmFsIExpc3Q8RUF0dHJpYnV0ZT4gcmVmZXJyZWRFbnVtcyA9IG5ldyBBcnJheUxpc3Q8RUF0dHJpYnV0ZT4oKTsKLQotCQkJaWYgKGVBdHRyaWJ1dGVzLnNpemUoKSA+IDApIHsKLQotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCQlmaW5hbCBMaXN0PEVBdHRyaWJ1dGU+IHByb2Nlc3NlZEF0dHJpYnV0ZXMgPSBuZXcgQXJyYXlMaXN0PEVBdHRyaWJ1dGU+KCk7Ci0KLQkJCQlmb3IgKGZpbmFsIEVBdHRyaWJ1dGUgZUF0dHJpYnV0ZSA6IGVBdHRyaWJ1dGVzKSB7Ci0KLQkJCQkJaWYgKCFwcm9jZXNzZWRBdHRyaWJ1dGVzLmNvbnRhaW5zKGVBdHRyaWJ1dGUpKSB7Ci0KLQkJCQkJCWlmIChlQXR0cmlidXRlLmdldEVBdHRyaWJ1dGVUeXBlKCkgaW5zdGFuY2VvZiBFRW51bSkgewotCQkJCQkJCXJlZmVycmVkRW51bXMuYWRkKGVBdHRyaWJ1dGUpOwotCQkJCQkJfQotCi0JCQkJCQlwcm9jZXNzZWRBdHRyaWJ1dGVzLmFkZChlQXR0cmlidXRlKTsKLQotCQkJCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCQkJCWZpbmFsIFN0cmluZyBsb3dlckJvdW5kID0gZUF0dHJpYnV0ZS5nZXRMb3dlckJvdW5kKCkgPT0gLTEgPyAiKiIKLQkJCQkJCQkJOiBlQXR0cmlidXRlLmdldExvd2VyQm91bmQoKSArICIiOwotCi0JCQkJCQlmaW5hbCBTdHJpbmcgdXBwZXJCb3VuZCA9IGVBdHRyaWJ1dGUuZ2V0VXBwZXJCb3VuZCgpID09IC0xID8gIioiCi0JCQkJCQkJCTogZUF0dHJpYnV0ZS5nZXRVcHBlckJvdW5kKCkgKyAiIjsKLQotCQkJCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKGVBdHRyaWJ1dGUuZ2V0RVR5cGUoKS5nZXROYW1lKCkgKyAiICIgKyBlQXR0cmlidXRlLmdldE5hbWUoKSArICIgWyIKLQkJCQkJCQkJKyBsb3dlckJvdW5kICsgIjoiICsgdXBwZXJCb3VuZCArICJdIik7Ci0KLQkJCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQkJCQl9Ci0KLQotCQkJCX0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCi0JCQl9Ci0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCi0JCQkvKi0gbGlzdGluZyBFU3RydWN0dXJhbEZlYXR1cmVzIGJlbG9uaW5nIHRvIHRoZSBzcGVjaWZpYyBFTUYgZWxlbWVudCAqLwotCi0JCQlmaW5hbCBMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4gcHJvY2Vzc2VkRmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4oKTsKLQotCQkJZmluYWwgTGlzdDxFU3RydWN0dXJhbEZlYXR1cmU+IHJlZmVycmVkRVN0cmN1dHVyYWxGZWF0dXJlcyA9IG5ldyBBcnJheUxpc3Q8RVN0cnVjdHVyYWxGZWF0dXJlPigpOwotCi0JCQlmb3IgKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmUgOiBlU3RydWN0dXJhbEZlYXR1cmVzKSB7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJCWlmICghcHJvY2Vzc2VkRmVhdHVyZXMuY29udGFpbnMoZVN0cnVjdHVyYWxGZWF0dXJlKSAmJiAoZVN0cnVjdHVyYWxGZWF0dXJlIGluc3RhbmNlb2YgRVJlZmVyZW5jZSkpIHsKLQotCQkJCQlwcm9jZXNzZWRGZWF0dXJlcy5hZGQoZVN0cnVjdHVyYWxGZWF0dXJlKTsKLQotCQkJCQlyZWZlcnJlZEVTdHJjdXR1cmFsRmVhdHVyZXMuYWRkKGVTdHJ1Y3R1cmFsRmVhdHVyZSk7Ci0KLQkJCQkJZmluYWwgU3RyaW5nIGxvd2VyQm91bmQgPSBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0TG93ZXJCb3VuZCgpID09IC0xID8gIioiCi0JCQkJCQkJOiBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0TG93ZXJCb3VuZCgpICsgIiI7Ci0KLQkJCQkJZmluYWwgU3RyaW5nIHVwcGVyQm91bmQgPSBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0VXBwZXJCb3VuZCgpID09IC0xID8gIioiCi0JCQkJCQkJOiBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0VXBwZXJCb3VuZCgpICsgIiI7Ci0KLQkJCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRFVHlwZSgpLmdldE5hbWUoKSArICIgIiArIGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXROYW1lKCkKLQkJCQkJCQkrICIgWyIgKyBsb3dlckJvdW5kICsgIjoiICsgdXBwZXJCb3VuZCArICJdIik7Ci0KLQkJCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCQl9Ci0JCQl9Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgifSIpOwotCi0JCQkvKi0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gRW5kIG9mIENsYXNzIE9iamVjdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJZm9yIChmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlIDogcmVmZXJyZWRFU3RyY3V0dXJhbEZlYXR1cmVzKSB7Ci0KLQkJCQljcmVhdGVFQ2xhc3NpZmllcihwbGFudHVtbEJ1ZmZlciwgZVN0cnVjdHVyYWxGZWF0dXJlLmdldEVUeXBlKCksIGxldmVsICsgMSk7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJCWZpbmFsIFN0cmluZyByZWxhdGlvbiA9ICgoRVJlZmVyZW5jZSkgZVN0cnVjdHVyYWxGZWF0dXJlKS5pc0NvbnRhaW5tZW50KCkgPyAiICotLSAiIDogIi0tPiAiOwotCi0KLQkJCQlmaW5hbCBTdHJpbmcgbG93ZXJCb3VuZCA9IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRMb3dlckJvdW5kKCkgPT0gLTEgPyAiKiIKLQkJCQkJCTogZVN0cnVjdHVyYWxGZWF0dXJlLmdldExvd2VyQm91bmQoKSArICIiOwotCi0JCQkJZmluYWwgU3RyaW5nIHVwcGVyQm91bmQgPSBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0VXBwZXJCb3VuZCgpID09IC0xID8gIioiCi0JCQkJCQk6IGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRVcHBlckJvdW5kKCkgKyAiIjsKLQotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKGVDbGFzcy5nZXROYW1lKCkgKyByZWxhdGlvbiArIGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXRFVHlwZSgpLmdldE5hbWUoKSArICIgOiAiCi0JCQkJCQkrIGVTdHJ1Y3R1cmFsRmVhdHVyZS5nZXROYW1lKCkgKyAiIFsiICsgbG93ZXJCb3VuZCArICI6IiArIHVwcGVyQm91bmQgKyAiXSIpOwotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCX0KLQotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJZm9yIChmaW5hbCBFQXR0cmlidXRlIGVBdHRyaWJ1dGUgOiByZWZlcnJlZEVudW1zKSB7Ci0KLQkJCQljcmVhdGVFQ2xhc3NpZmllcihwbGFudHVtbEJ1ZmZlciwgZUF0dHJpYnV0ZS5nZXRFVHlwZSgpLCBsZXZlbCArIDEpOwotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQotCQkJCWZpbmFsIFN0cmluZyBsb3dlckJvdW5kID0gZUF0dHJpYnV0ZS5nZXRMb3dlckJvdW5kKCkgPT0gLTEgPyAiKiIgOiBlQXR0cmlidXRlLmdldExvd2VyQm91bmQoKSArICIiOwotCi0JCQkJZmluYWwgU3RyaW5nIHVwcGVyQm91bmQgPSBlQXR0cmlidXRlLmdldFVwcGVyQm91bmQoKSA9PSAtMSA/ICIqIiA6IGVBdHRyaWJ1dGUuZ2V0VXBwZXJCb3VuZCgpICsgIiI7Ci0KLQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChlQ2xhc3MuZ2V0TmFtZSgpICsgIiAqLS0gIiArIGVBdHRyaWJ1dGUuZ2V0RVR5cGUoKS5nZXROYW1lKCkgKyAiIDogIgotCQkJCQkJKyBlQXR0cmlidXRlLmdldE5hbWUoKSArICIgWyIgKyBsb3dlckJvdW5kICsgIjoiICsgdXBwZXJCb3VuZCArICJdIik7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJfQotCi0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJfQotCi0JfQotCi0KLQlwcml2YXRlIHZvaWQgY3JlYXRlRUNsYXNzaWZpZXIoZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyLCBmaW5hbCBFQ2xhc3NpZmllciBlQ2xhc3NpZmllciwgZmluYWwgaW50IGxldmVsKSB7Ci0KLQkJaWYgKGxldmVsID4gMikgewotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgewotCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIChFQ2xhc3MpIGVDbGFzc2lmaWVyLCBudWxsLCBsZXZlbCk7Ci0JCX0KLQkJZWxzZSBpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFRW51bSkgewotCQkJY3JlYXRlRUVudW0ocGxhbnR1bWxCdWZmZXIsIChFRW51bSkgZUNsYXNzaWZpZXIsIGxldmVsKTsKLQkJfQotCQllbHNlIGlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVEYXRhVHlwZSkgewotCQkJY3JlYXRlRURhdGFUeXBlKHBsYW50dW1sQnVmZmVyLCAoRURhdGFUeXBlKSBlQ2xhc3NpZmllciwgbGV2ZWwpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBMaXN0PEVDbGFzcz4gZ2V0U3ViQ2xhc3NlcyhmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcykgewotCi0JCWZpbmFsIExpc3Q8RUNsYXNzPiBhbGxTdWJDbGFzc2VzID0gbmV3IEFycmF5TGlzdDxFQ2xhc3M+KCk7Ci0KLQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBzZWxlY3RlZE9iakNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCk7Ci0KLQkJaWYgKHJlc291cmNlU2V0ICE9IG51bGwpIHsKLQotCQkJLy8gV2l0aCB0aGlzIGFwcHJvYWNoIGNoZWNrIGlzIG1hZGUgdG8gZmluZCB0aGUgU3ViLUNsYXNzZXMgZm9yIHRoZSBzdXBwbGllZCBFQ2xhc3MgaW4gYWxsIHRoZSBwYWNrYWdlcwotCQkJLy8gYmVsb25naW5nIHRvIHRoZSByZXNvdXJjZXNldAotCi0JCQlmaW5hbCBFTGlzdDxSZXNvdXJjZT4gcmVzb3VyY2VzID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCk7Ci0KLQkJCWZvciAoZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgOiByZXNvdXJjZXMpIHsKLQotCQkJCWZpbmFsIEVMaXN0PEVPYmplY3Q+IGNvbnRlbnRzID0gcmVzb3VyY2UuZ2V0Q29udGVudHMoKTsKLQotCQkJCWlmIChjb250ZW50cy5zaXplKCkgPiAwKSB7Ci0JCQkJCWZpbmFsIEVPYmplY3QgZU9iamVjdCA9IGNvbnRlbnRzLmdldCgwKTsKLQotCQkJCQlpZiAoZU9iamVjdCBpbnN0YW5jZW9mIEVQYWNrYWdlKSB7Ci0JCQkJCQlhbGxTdWJDbGFzc2VzLmFkZEFsbChnZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MsIChFUGFja2FnZSkgZU9iamVjdCkpOwotCQkJCQl9Ci0JCQkJfQotCi0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0KLQkJCWZpbmFsIEVQYWNrYWdlIGVQYWNrYWdlID0gc2VsZWN0ZWRPYmpDbGFzcy5nZXRFUGFja2FnZSgpOwotCQkJcmV0dXJuIGdldFN1YkNsYXNzZXMoc2VsZWN0ZWRPYmpDbGFzcywgZVBhY2thZ2UpOwotCQl9Ci0KLQkJcmV0dXJuIGFsbFN1YkNsYXNzZXM7Ci0KLQl9Ci0KLQlwcml2YXRlIExpc3Q8RUNsYXNzPiBnZXRTdWJDbGFzc2VzKGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzLCBmaW5hbCBFUGFja2FnZSBlUGFja2FnZSkgewotCQlmaW5hbCBMaXN0PEVDbGFzcz4gYWxsU3ViQ2xhc3NlcyA9IG5ldyBBcnJheUxpc3Q8RUNsYXNzPigpOwotCi0JCWZpbmFsIEVMaXN0PEVDbGFzc2lmaWVyPiBlQ2xhc3NpZmllcnMgPSBlUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKTsKLQotCQlmb3IgKGZpbmFsIEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZUNsYXNzaWZpZXJzKSB7Ci0KLQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgewotCi0JCQkJaWYgKCEoc2VsZWN0ZWRPYmpDbGFzcyA9PSBlQ2xhc3NpZmllcikgJiYgc2VsZWN0ZWRPYmpDbGFzcy5pc1N1cGVyVHlwZU9mKChFQ2xhc3MpIGVDbGFzc2lmaWVyKSkgewotCQkJCQlhbGxTdWJDbGFzc2VzLmFkZCgoRUNsYXNzKSBlQ2xhc3NpZmllcik7Ci0JCQkJfQotCi0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYWxsU3ViQ2xhc3NlczsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VDbGFzc0hpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9idWlsZGVycy9FQ2xhc3NIaWVyYXJjaHlCdWZmZXJCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYzkwNWMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VDbGFzc0hpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzaWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5SZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2VTZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOwotCi1wdWJsaWMgY2xhc3MgRUNsYXNzSGllcmFyY2h5QnVmZmVyQnVpbGRlciB7Ci0KLQlwcml2YXRlIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdHNNYXA7Ci0KLQlwdWJsaWMgRU1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0SWQyT2JqZWN0c01hcCgpIHsKLQkJcmV0dXJuIHRoaXMuaWQyT2JqZWN0c01hcDsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHNldElkMk9iamVjdHNNYXAoZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcCkgewotCQl0aGlzLmlkMk9iamVjdHNNYXAgPSBpZDJPYmplY3RzTWFwOwotCX0KLQotCi0JcHVibGljIFN0cmluZ0J1ZmZlciBidWlsZEJ1ZmZlcihmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcykgewotCi0JCXRoaXMuaWQyT2JqZWN0c01hcCA9IG5ldyBCYXNpY0VNYXA8U3RyaW5nLCBPYmplY3Q+KCk7Ci0KLQkJZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJAc3RhcnR1bWwiKTsKLQotCQlhZGRDbGFzc0luZm8oc2VsZWN0ZWRPYmpDbGFzcywgcGxhbnR1bWxCdWZmZXIpOwotCi0JCWZpbmFsIEVMaXN0PEVDbGFzcz4gZVN1cGVyVHlwZXMgPSBzZWxlY3RlZE9iakNsYXNzLmdldEVTdXBlclR5cGVzKCk7Ci0JCWZpbmFsIExpc3Q8RUNsYXNzPiBzdWJDbGFzc2VzID0gZ2V0U3ViQ2xhc3NlcyhzZWxlY3RlZE9iakNsYXNzKTsKLQotCQlpZiAoZVN1cGVyVHlwZXMuc2l6ZSgpID4gMCkgewotCi0JCQlwb3B1bGF0ZUhlaXJhcmNoeShwbGFudHVtbEJ1ZmZlciwgc2VsZWN0ZWRPYmpDbGFzcywgdGhpcy5pZDJPYmplY3RzTWFwKTsKLQotCQl9Ci0KLQkJaWYgKHN1YkNsYXNzZXMuc2l6ZSgpID4gMCkgewotCi0JCQkvKi0gcG9wdWxhdGluZyBzdWItY2xhc3NlcyAqLwotCQkJcG9wdWxhdGVTdWJDbGFzc2VzKHBsYW50dW1sQnVmZmVyLCBzdWJDbGFzc2VzLCBzZWxlY3RlZE9iakNsYXNzLCB0aGlzLmlkMk9iamVjdHNNYXApOwotCQl9Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJAZW5kdW1sIik7Ci0KLQkJcmV0dXJuIHBsYW50dW1sQnVmZmVyOwotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZENsYXNzSW5mbyhmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcywgZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyKSB7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJaWYgKHNlbGVjdGVkT2JqQ2xhc3MuaXNBYnN0cmFjdCgpICYmIHNlbGVjdGVkT2JqQ2xhc3MuaXNJbnRlcmZhY2UoKSkgewotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJpbnRlcmZhY2UgXCIiICsgc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKLQotCQl9Ci0JCWVsc2UgaWYgKHNlbGVjdGVkT2JqQ2xhc3MuaXNBYnN0cmFjdCgpKSB7Ci0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImFic3RyYWN0IFwiIiArIHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIik7Ci0KLQkJfQotCQllbHNlIGlmIChzZWxlY3RlZE9iakNsYXNzLmlzSW50ZXJmYWNlKCkpIHsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJpbnRlcmZhY2UgXCIiICsgc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKLQkJfQotCQllbHNlIHsKLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiY2xhc3MgXCIiICsgc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCkgKyAiXCIiKTsKLQotCQl9Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgcG9wdWxhdGVTdWJDbGFzc2VzKGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciwgZmluYWwgTGlzdDxFQ2xhc3M+IHN1YkNsYXNzZXMsCi0JCQlmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcywgZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcCkgewotCi0JCWZvciAoZmluYWwgRUNsYXNzIHN1YkNsYXNzIDogc3ViQ2xhc3NlcykgewotCi0JCQlmaW5hbCBTdHJpbmcgdXVpZCA9IEVjb3JlVXRpbC5nZW5lcmF0ZVVVSUQoKTsKLQotCi0JCQlpZiAoc3ViQ2xhc3MuaXNBYnN0cmFjdCgpICYmIHN1YkNsYXNzLmlzSW50ZXJmYWNlKCkpIHsKLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImludGVyZmFjZSBcIiIgKyBzdWJDbGFzcy5nZXROYW1lKCkgKyAiXCIiICsgIiAgICBbWyIgKyB1dWlkICsgIl1dIik7Ci0KLQkJCX0KLQkJCWVsc2UgaWYgKHN1YkNsYXNzLmlzQWJzdHJhY3QoKSkgewotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiYWJzdHJhY3QgXCIiICsgc3ViQ2xhc3MuZ2V0TmFtZSgpICsgIlwiIiArICIgICAgW1siICsgdXVpZCArICJdXSIpOwotCi0JCQl9Ci0JCQllbHNlIGlmIChzdWJDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImludGVyZmFjZSBcIiIgKyBzdWJDbGFzcy5nZXROYW1lKCkgKyAiXCIiICsgIiAgICBbWyIgKyB1dWlkICsgIl1dIik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImNsYXNzIFwiIiArIHN1YkNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIHV1aWQgKyAiXV0iKTsKLQotCQkJfQotCi0JCQlpZDJPYmplY3RzTWFwLnB1dCh1dWlkLCBzdWJDbGFzcyk7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCkgKyAiIDx8LS0gIiArIHN1YkNsYXNzLmdldE5hbWUoKSk7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJfQotCi0JfQotCi0JcHJpdmF0ZSBMaXN0PEVDbGFzcz4gZ2V0U3ViQ2xhc3NlcyhmaW5hbCBFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcykgewotCi0JCWZpbmFsIExpc3Q8RUNsYXNzPiBhbGxTdWJDbGFzc2VzID0gbmV3IEFycmF5TGlzdDxFQ2xhc3M+KCk7Ci0KLQkJZmluYWwgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQgPSBzZWxlY3RlZE9iakNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCk7Ci0KLQkJaWYgKHJlc291cmNlU2V0ICE9IG51bGwpIHsKLQotCQkJLy8gV2l0aCB0aGlzIGFwcHJvYWNoIGNoZWNrIGlzIG1hZGUgdG8gZmluZCB0aGUgU3ViLUNsYXNzZXMgZm9yIHRoZSBzdXBwbGllZCBFQ2xhc3MgaW4gYWxsIHRoZSBwYWNrYWdlcwotCQkJLy8gYmVsb25naW5nIHRvIHRoZSByZXNvdXJjZXNldAotCi0JCQlmaW5hbCBFTGlzdDxSZXNvdXJjZT4gcmVzb3VyY2VzID0gcmVzb3VyY2VTZXQuZ2V0UmVzb3VyY2VzKCk7Ci0KLQkJCWZvciAoZmluYWwgUmVzb3VyY2UgcmVzb3VyY2UgOiByZXNvdXJjZXMpIHsKLQotCQkJCWZpbmFsIEVMaXN0PEVPYmplY3Q+IGNvbnRlbnRzID0gcmVzb3VyY2UuZ2V0Q29udGVudHMoKTsKLQotCQkJCWlmIChjb250ZW50cy5zaXplKCkgPiAwKSB7Ci0vLwkJCQkJZmluYWwgRU9iamVjdCBlT2JqZWN0ID0gY29udGVudHMuZ2V0KDApOwotCQkJCQkKLQkJCQkJZm9yIChFT2JqZWN0IGVvYmogOiBjb250ZW50cykgewotCQkJCQkJCi0JCQkJCQlpZiAoZW9iaiBpbnN0YW5jZW9mIEVQYWNrYWdlKSB7Ci0JCQkJCQkJYWxsU3ViQ2xhc3Nlcy5hZGRBbGwoZ2V0U3ViQ2xhc3NlcyhzZWxlY3RlZE9iakNsYXNzLCAoRVBhY2thZ2UpIGVvYmopKTsKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJfQotCi0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0KLQkJCWZpbmFsIEVQYWNrYWdlIGVQYWNrYWdlID0gc2VsZWN0ZWRPYmpDbGFzcy5nZXRFUGFja2FnZSgpOwotCQkJcmV0dXJuIGdldFN1YkNsYXNzZXMoc2VsZWN0ZWRPYmpDbGFzcywgZVBhY2thZ2UpOwotCQl9Ci0KLQkJcmV0dXJuIGFsbFN1YkNsYXNzZXM7Ci0KLQl9Ci0KLQlwcml2YXRlIExpc3Q8RUNsYXNzPiBnZXRTdWJDbGFzc2VzKGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzLCBmaW5hbCBFUGFja2FnZSBlUGFja2FnZSkgewotCQlmaW5hbCBMaXN0PEVDbGFzcz4gYWxsU3ViQ2xhc3NlcyA9IG5ldyBBcnJheUxpc3Q8RUNsYXNzPigpOwotCi0JCWZpbmFsIEVMaXN0PEVDbGFzc2lmaWVyPiBlQ2xhc3NpZmllcnMgPSBlUGFja2FnZS5nZXRFQ2xhc3NpZmllcnMoKTsKLQotCQlmb3IgKGZpbmFsIEVDbGFzc2lmaWVyIGVDbGFzc2lmaWVyIDogZUNsYXNzaWZpZXJzKSB7Ci0KLQkJCWlmIChlQ2xhc3NpZmllciBpbnN0YW5jZW9mIEVDbGFzcykgewotCi0JCQkJaWYgKCEoc2VsZWN0ZWRPYmpDbGFzcyA9PSBlQ2xhc3NpZmllcikgJiYgc2VsZWN0ZWRPYmpDbGFzcy5pc1N1cGVyVHlwZU9mKChFQ2xhc3MpIGVDbGFzc2lmaWVyKSkgewotCQkJCQlhbGxTdWJDbGFzc2VzLmFkZCgoRUNsYXNzKSBlQ2xhc3NpZmllcik7Ci0JCQkJfQotCi0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYWxsU3ViQ2xhc3NlczsKLQl9Ci0KLQotCXByaXZhdGUgdm9pZCBwb3B1bGF0ZUhlaXJhcmNoeShmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIsIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzLAotCQkJZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcCkgewotCQlmb3IgKGZpbmFsIEVDbGFzcyBzdXBlckNsYXNzIDogc2VsZWN0ZWRPYmpDbGFzcy5nZXRFU3VwZXJUeXBlcygpKSB7Ci0KLQkJCWZpbmFsIFN0cmluZyB1dWlkID0gRWNvcmVVdGlsLmdlbmVyYXRlVVVJRCgpOwotCi0JCQlpZiAoc3VwZXJDbGFzcy5pc0Fic3RyYWN0KCkgJiYgc3VwZXJDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJpbnRlcmZhY2UgXCIiICsgc3VwZXJDbGFzcy5nZXROYW1lKCkgKyAiXCIiICsgIiAgICBbWyIgKyB1dWlkICsgIl1dIik7Ci0KLQkJCX0KLQkJCWVsc2UgaWYgKHN1cGVyQ2xhc3MuaXNBYnN0cmFjdCgpKSB7Ci0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJhYnN0cmFjdCBcIiIgKyBzdXBlckNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIHV1aWQgKyAiXV0iKTsKLQotCQkJfQotCQkJZWxzZSBpZiAoc3VwZXJDbGFzcy5pc0ludGVyZmFjZSgpKSB7Ci0KLQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImludGVyZmFjZSBcIiIgKyBzdXBlckNsYXNzLmdldE5hbWUoKSArICJcIiIgKyAiICAgIFtbIiArIHV1aWQgKyAiXV0iKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiY2xhc3MgXCIiICsgc3VwZXJDbGFzcy5nZXROYW1lKCkgKyAiXCIiICsgIiAgICBbWyIgKyB1dWlkICsgIl1dIik7Ci0KLQkJCX0KLQotCQkJaWQyT2JqZWN0c01hcC5wdXQodXVpZCwgc3VwZXJDbGFzcyk7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoc3VwZXJDbGFzcy5nZXROYW1lKCkgKyAiIDx8LS0gIiArIHNlbGVjdGVkT2JqQ2xhc3MuZ2V0TmFtZSgpKTsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCXBvcHVsYXRlSGVpcmFyY2h5KHBsYW50dW1sQnVmZmVyLCBzdXBlckNsYXNzLCBpZDJPYmplY3RzTWFwKTsKLQkJfQotCX0KLQotCi19CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvYnVpbGRlcnMvRUNsYXNzSGllcmFyY2h5QnVmZmVyQnVpbGRlcjIueHRlbmQgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvYnVpbGRlcnMvRUNsYXNzSGllcmFyY2h5QnVmZmVyQnVpbGRlcjIueHRlbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ODNmZDUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VDbGFzc0hpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIyLnh0ZW5kCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5idWlsZGVycwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdAotaW1wb3J0IGphdmEudXRpbC5MaXN0Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcAotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTGlzdAotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzcwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcgotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlCi1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsCi0KLWNsYXNzIEVDbGFzc0hpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIyIHsKLQotCXZhciBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwID0gbmV3IEJhc2ljRU1hcAotCi0JZGVmIHB1YmxpYyBzZXRJZDJPYmplY3RzTWFwKEVNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdHNNYXApIHsKLQkJdGhpcy5pZDJPYmplY3RzTWFwID0gaWQyT2JqZWN0c01hcAotCX0KLQotCWRlZiBidWlsZEJ1ZmZlcihFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcykgJycnCi0JCQotCQmraWQyT2JqZWN0c01hcCA9IG5ldyBCYXNpY0VNYXC7Ci0JCQotCQlAc3RhcnR1bWwKLQkJCi0JCaurqyBHZW5lcmF0aW9uIG9mIEVDbGFzcyBiYXNpYyBpbmZvcm1hdGlvbiC7uwotCQkKLQkJq2FkZENsYXNzSW5mbyhzZWxlY3RlZE9iakNsYXNzKbsKLQkJCi0JCaurqyBHZW5lcmF0aW9uIG9mIEhpZXJhcmNoeSBmb3IgU3VwZXIgdHlwZXMgu7sKLQotCQmrSUYgc2VsZWN0ZWRPYmpDbGFzcy5FU3VwZXJUeXBlcy5zaXplID4gMLsKLQkJCQotCQkJq0ZPUiBzdXBlckNsYXNzOiBzZWxlY3RlZE9iakNsYXNzLkVTdXBlclR5cGVzuwotCQkJCQotCQkJCQmrq6sgVVVJRCAtIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgZWxlbWVudHMgbG9va3VwILu7Ci0JCQkJCat2YXIgU3RyaW5nIHV1aWQ9RWNvcmVVdGlsLmdlbmVyYXRlVVVJRLsKLQkJCQkJCQkKLQkJCQkJCQmrSUYgc3VwZXJDbGFzcy5hYnN0cmFjdCAmJiBzdXBlckNsYXNzLmludGVyZmFjZbsKLQkJCQkJCQkJaW50ZXJmYWNlIKtzdXBlckNsYXNzLm5hbWW7ICJbW6t1dWlku11dIgotCQkJCQkJCatFTFNFSUYgc3VwZXJDbGFzcy5hYnN0cmFjdLsKLQkJCQkJCQkJYWJzdHJhY3Qgq3N1cGVyQ2xhc3MubmFtZbsgIltbq3V1aWS7XV0iCi0JCQkJCQkJq0VMU0VJRiBzdXBlckNsYXNzLmludGVyZmFjZbsKLQkJCQkJCQkJaW50ZXJmYWNlIKtzdXBlckNsYXNzLm5hbWW7ICJbW6t1dWlku11dIgotCQkJCQkJCatFTFNFuwotCQkJCQkJCQljbGFzcyAgq3N1cGVyQ2xhc3MubmFtZbsgIltbq3V1aWS7XV0iCi0JCQkJCQkJCQotCQkJCQkJCatFTkRJRrsKLQkJCQkJCQkKLQkJCQkKLQkJCQmraWQyT2JqZWN0c01hcC5wdXQodXVpZCwgc3VwZXJDbGFzcym7Ci0JCQkJCi0JCQkJq3N1cGVyQ2xhc3MubmFtZbsgPHwtLatzZWxlY3RlZE9iakNsYXNzLm5hbWW7Ci0JCQkJCi0JCQkJCi0JCQkJCi0JCQmrRU5ERk9SuwotCQkJCi0JCQkKLQkJq0VORElGuwotCQkKLQkJq3ZhciBMaXN0PEVDbGFzcz4gc3ViQ2xhc3Nlcz1nZXRTdWJDbGFzc2VzKHNlbGVjdGVkT2JqQ2xhc3MpuwotCQkKLQkJCQmrSUYgc3ViQ2xhc3Nlcy5zaXplPjC7Ci0JCQkJCQotCQkJCatFTkRJRrsKLQkJCi0JCUBlbmR1bWwKLQkJCi0JCQotCQkKLQknJycKLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRkIEVDbGFzcyBzcGVjaWZpYyBpbmZvcm1hdGlvbgotCSAqLwotCXByb3RlY3RlZCBkZWYgQ2hhclNlcXVlbmNlIGFkZENsYXNzSW5mbyhFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcykgJycnq0lGIHNlbGVjdGVkT2JqQ2xhc3MuYWJzdHJhY3QgJiYgc2VsZWN0ZWRPYmpDbGFzcy5pbnRlcmZhY2W7Ci0JCQotCQkJaW50ZXJmYWNlIKtzZWxlY3RlZE9iakNsYXNzLm5hbWW7Ci0JCatFTFNFSUYgc2VsZWN0ZWRPYmpDbGFzcy5hYnN0cmFjdLsKLQkJCWFic3RyYWN0IKtzZWxlY3RlZE9iakNsYXNzLm5hbWW7Ci0JCatFTFNFSUYgc2VsZWN0ZWRPYmpDbGFzcy5pbnRlcmZhY2W7Ci0JCQlpbnRlcmZhY2Ugq3NlbGVjdGVkT2JqQ2xhc3MubmFtZbsKLQkJq0VMU0W7Ci0JCQljbGFzcyCrc2VsZWN0ZWRPYmpDbGFzcy5uYW1luwotCQmrRU5ESUa7JycnCi0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgTGlzdCBvZiBzdWItY2xhc3NlcyBvZiBhIHNwZWNpZmljIEVDbGFzcwotCSAqLwotCWRlZiBwcml2YXRlIExpc3Q8RUNsYXNzPiBnZXRTdWJDbGFzc2VzKEVDbGFzcyBlQ2xhc3MpIHsKLQotCQl2YXIgTGlzdDxFQ2xhc3M+IGFsbFN1YkNsYXNzZXMgPSBuZXcgQXJyYXlMaXN0Ci0KLQkJdmFyIFJlc291cmNlU2V0IHJlc291cmNlU2V0ID0gZUNsYXNzLmVSZXNvdXJjZSgpLmdldFJlc291cmNlU2V0KCk7Ci0KLQkJaWYgKHJlc291cmNlU2V0ICE9IG51bGwpIHsKLQotCQkJLy8gV2l0aCB0aGlzIGFwcHJvYWNoIGNoZWNrIGlzIG1hZGUgdG8gZmluZCB0aGUgU3ViLUNsYXNzZXMgZm9yIHRoZSBzdXBwbGllZCBFQ2xhc3MgaW4gYWxsIHRoZSBwYWNrYWdlcwotCQkJLy8gYmVsb25naW5nIHRvIHRoZSByZXNvdXJjZXNldAotCQkJdmFyIEVMaXN0PFJlc291cmNlPiByZXNvdXJjZXMgPSByZXNvdXJjZVNldC5nZXRSZXNvdXJjZXMoKTsKLQotCQkJZm9yIChSZXNvdXJjZSByZXNvdXJjZSA6IHJlc291cmNlcykgewotCi0JCQkJdmFyIEVMaXN0PEVPYmplY3Q+IGNvbnRlbnRzID0gcmVzb3VyY2UuZ2V0Q29udGVudHMoKTsKLQotCQkJCWlmIChjb250ZW50cy5zaXplKCkgPiAwKSB7Ci0vLwkJCQkJdmFyIEVPYmplY3QgZU9iamVjdCA9IGNvbnRlbnRzLmdldCgwKTsKLQkJCQkJZm9yIChlbGVtZW50IDogY29udGVudHMpIHsKLQkJCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRVBhY2thZ2UpIHsKLQkJCQkJCQlhbGxTdWJDbGFzc2VzLmFkZEFsbChnZXRTdWJDbGFzc2VzKGVDbGFzcywgZWxlbWVudCkpOwotCQkJCQkJfQotCi0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJfSBlbHNlIHsKLQotCQkJdmFyIEVQYWNrYWdlIGVQYWNrYWdlID0gZUNsYXNzLmdldEVQYWNrYWdlKCk7Ci0JCQlyZXR1cm4gZ2V0U3ViQ2xhc3NlcyhlQ2xhc3MsIGVQYWNrYWdlKTsKLQkJfQotCi0JCXJldHVybiBhbGxTdWJDbGFzc2VzOwotCi0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIExpc3Qgb2Ygc3ViLWNsYXNzZXMgb2YgYSBzcGVjaWZpYyBFQ2xhc3MgaW4gdGhlIHNjb3BlIG9mIEVQYWNrYWdlCi0JICovCi0JZGVmIExpc3Q8RUNsYXNzPiBnZXRTdWJDbGFzc2VzKEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzLCBFUGFja2FnZSBlUGFja2FnZSkgewotCi0JCXZhciBMaXN0PEVDbGFzcz4gYWxsU3ViQ2xhc3NlcyA9IG5ldyBBcnJheUxpc3Q8RUNsYXNzPigpOwotCi0JCXZhciBFTGlzdDxFQ2xhc3NpZmllcj4gZUNsYXNzaWZpZXJzID0gZVBhY2thZ2UuZ2V0RUNsYXNzaWZpZXJzKCk7Ci0KLQkJZm9yIChFQ2xhc3NpZmllciBlQ2xhc3NpZmllciA6IGVDbGFzc2lmaWVycykgewotCi0JCQlpZiAoZUNsYXNzaWZpZXIgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKLQotCQkJCWlmICghKHNlbGVjdGVkT2JqQ2xhc3MgPT0gZUNsYXNzaWZpZXIpICYmIHNlbGVjdGVkT2JqQ2xhc3MuaXNTdXBlclR5cGVPZihlQ2xhc3NpZmllcikpIHsKLQkJCQkJYWxsU3ViQ2xhc3Nlcy5hZGQoZUNsYXNzaWZpZXIpOwotCQkJCX0KLQotCQkJfQotCQl9Ci0JCXJldHVybiBhbGxTdWJDbGFzc2VzOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VPYmplY3RSZWZzQnVmZmVyQnVpbGRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL0VPYmplY3RSZWZzQnVmZmVyQnVpbGRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjNhMmQ5Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9idWlsZGVycy9FT2JqZWN0UmVmc0J1ZmZlckJ1aWxkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlLlNldHRpbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS51dGlsLkVjb3JlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklJbnB1dFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLklucHV0RGlhbG9nOwotCi1wdWJsaWMgY2xhc3MgRU9iamVjdFJlZnNCdWZmZXJCdWlsZGVyIHsKLQotCXByaXZhdGUgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcDsKLQotCXB1YmxpYyBTdHJpbmdCdWZmZXIgYnVpbGRCdWZmZXIoZmluYWwgRU9iamVjdCBlT2JqZWN0KSB7Ci0KLQkJdGhpcy5pZDJPYmplY3RzTWFwID0gbmV3IEJhc2ljRU1hcDxTdHJpbmcsIE9iamVjdD4oKTsKLQotCQlmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkBzdGFydHVtbCIpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQlidWlsZEJ1ZmZlcihlT2JqZWN0LCBwbGFudHVtbEJ1ZmZlcik7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQGVuZHVtbCIpOwotCi0JCXJldHVybiBwbGFudHVtbEJ1ZmZlcjsKLQotCX0KLQotCi0JcHVibGljIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGdldElkMk9iamVjdHNNYXAoKSB7Ci0JCXJldHVybiB0aGlzLmlkMk9iamVjdHNNYXA7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgYnVpbGRCdWZmZXIoZmluYWwgRU9iamVjdCBzZWxlY3RlZEVPYmosIGZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlcikgewotCi0JCWZpbmFsIExpc3Q8RU9iamVjdD4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDxFT2JqZWN0PigpOwotCi0JCS8qLSBnZXR0aW5nIGFsbCB0aGUgZWxlbWVudHMgZnJvbSB0aGUgc2VsZWN0ZWQgb2JqZWN0cyBFQ2xhc3MgLS0+IGJ5IHN1cHBseWluZyB0aGUgRVJlc291cmNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIEVDbGFzcyAoaS5lLiBlY29yZSBvciBYY29yZSkgKi8KLQotCQlDb2xsZWN0aW9uPFNldHRpbmc+IGFsbFJlZlNldHRpbmdzID0gbnVsbDsKLQotCQlmaW5hbCBSZXNvdXJjZSBlUmVzb3VyY2UgPSBzZWxlY3RlZEVPYmouZVJlc291cmNlKCk7Ci0KLQkJaWYgKGVSZXNvdXJjZSA9PSBudWxsKSB7Ci0JCQlhbGxSZWZTZXR0aW5ncyA9IEVjb3JlVXRpbC5Vc2FnZUNyb3NzUmVmZXJlbmNlci5maW5kKHNlbGVjdGVkRU9iaiwKLQkJCQkJRWNvcmVVdGlsLmdldFJvb3RDb250YWluZXIoc2VsZWN0ZWRFT2JqKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhbGxSZWZTZXR0aW5ncyA9IEVjb3JlVXRpbC5Vc2FnZUNyb3NzUmVmZXJlbmNlci5maW5kKHNlbGVjdGVkRU9iaiwgZVJlc291cmNlLmdldFJlc291cmNlU2V0KCkpOwotCQl9Ci0KLQkJLyotCi0JCSAqIEluIGNhc2Ugb2YgbWFueSBlbGVtZW50cyBpdCBpcyBkaWZmaWN1bHQgdG8gdmlzdWFsaXplIHRoZSBjb250ZW50cyBpbiB0aGUgZGlhZ3JhbS4KLQkJICoKLQkJICogQmVsb3cgY29kZSBwcm92aWRlcyB0aGUgcG9zc2liaWxpdHkgdG8gc3BlY2lmeSB0aGUgcmFuZ2UKLQkJICovCi0JCWlmIChhbGxSZWZTZXR0aW5ncy5zaXplKCkgPiAxMDApIHsKLQotCi0JCQlmaW5hbCBJbnB1dERpYWxvZyBpbnB1dERpYWxvZyA9IG5ldyBJbnB1dERpYWxvZygKLQkJCQkJb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgIkVsZW1lbnQgc2VsZWN0aW9uIGRpYWxvZyIsCi0JCQkJCSJUaGVyZSBhcmUgIiArIGFsbFJlZlNldHRpbmdzLnNpemUoKQotCQkJCQkJCSsgIiByZWZlcmVuY2VzLiBzcGVjaWZ5IHRoZSByYW5nZSBmb3Igd2hpY2ggY29udGVudHMgc2hvdWxkIGJlIHJlcHJlc2VudGVkIGdyYXBoaWNhbGx5IiwKLQkJCQkJIjAtIiArIChhbGxSZWZTZXR0aW5ncy5zaXplKCkgLSAxKSwgbmV3IElJbnB1dFZhbGlkYXRvcigpIHsKLQotCQkJCQkJQE92ZXJyaWRlCi0JCQkJCQlwdWJsaWMgU3RyaW5nIGlzVmFsaWQoZmluYWwgU3RyaW5nIG5ld1RleHQpIHsKLQkJCQkJCQlpZiAoUGF0dGVybi5tYXRjaGVzKCIoXFxkKStcXC0oXFxkKSsiLCBuZXdUZXh0KSA9PSBmYWxzZSkgewotCQkJCQkJCQlyZXR1cm4gIlNwZWNpZnkgdGhlIHJhbmdlIGluIHRoZSBmb2xsb3dpbmcgd2F5IGludC1pbnQgZWcuIDEwLTIwICI7Ci0JCQkJCQkJfQotCQkJCQkJCXJldHVybiBudWxsOwotCQkJCQkJfQotCQkJCQl9KTsKLQotCQkJZmluYWwgaW50IHN0YXR1cyA9IGlucHV0RGlhbG9nLm9wZW4oKTsKLQotCQkJaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCQkJZmluYWwgU3RyaW5nIHZhbHVlID0gaW5wdXREaWFsb2cuZ2V0VmFsdWUoKTsKLQotCQkJCWZpbmFsIFN0cmluZ1tdIHNwbGl0ID0gdmFsdWUuc3BsaXQoIi0iKTsKLQotCQkJCWFsbFJlZlNldHRpbmdzID0gbmV3IEFycmF5TGlzdDxTZXR0aW5nPihhbGxSZWZTZXR0aW5ncykuc3ViTGlzdChJbnRlZ2VyLnBhcnNlSW50KHNwbGl0WzBdKSwKLQkJCQkJCUludGVnZXIucGFyc2VJbnQoc3BsaXRbMV0pIDwgYWxsUmVmU2V0dGluZ3Muc2l6ZSgpID8gSW50ZWdlci5wYXJzZUludChzcGxpdFsxXSkKLQkJCQkJCQkJOiAoYWxsUmVmU2V0dGluZ3Muc2l6ZSgpIC0gMSkpOwotCi0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhbGxSZWZTZXR0aW5ncyA9IG5ldyBBcnJheUxpc3Q8U2V0dGluZz4oYWxsUmVmU2V0dGluZ3MpLnN1Ykxpc3QoMCwgOTkpOwotCQkJfQotCi0KLQkJfQotCi0KLQkJLyotIGlmIHJlZnMgb2YgdGhlIEVDbGFzcyBhcmUgZm91bmQsIHRoZW4gZmlsbCB0aGUgcGxhbnRVTUxCdWZmZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY29udGVudHMgKi8KLQotCQlpZiAoYWxsUmVmU2V0dGluZ3Muc2l6ZSgpID4gMCkgewotCi0JCQlmb3IgKGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZS5TZXR0aW5nIHNldHRpbmcgOiBhbGxSZWZTZXR0aW5ncykgewotCi0JCQkJaWYgKCFpc0VsZW1lbnRDb250YWluZWQocmVzdWx0LCBzZXR0aW5nLmdldEVPYmplY3QoKSkpIHsKLQkJCQkJcmVzdWx0LmFkZChzZXR0aW5nLmdldEVPYmplY3QoKSk7Ci0KLQkJCQl9Ci0KLQkJCX0KLQotCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIHRoaXMuaWQyT2JqZWN0c01hcCwgc2VsZWN0ZWRFT2JqKTsKLQotCQkJZm9yIChmaW5hbCBFT2JqZWN0IGVvYmogOiByZXN1bHQpIHsKLQotCQkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sQnVmZmVyLCB0aGlzLmlkMk9iamVjdHNNYXAsIGVvYmopOwotCi0JCQkJaWYgKCFpc05hbWVQcmVzZW50KGVvYmopKSB7Ci0KLQkJCQkJLyotIEFzIG5hbWUgaXMgbm90IHByZXNlbnQsIGdlbmVyYXRlIHRoZSBoZWlyYXJjaHkgdGlsbCB0aGUgbGV2ZWwgT2JqZWN0IHdpdGggU3RydWN0dXJhbCBGZWF0dXJlIG5hbWUgaXMgcHJlc2VudCAqLwotCi0JCQkJCWFzc29jaWF0ZUNvbnRhaW5lcihlb2JqLCBwbGFudHVtbEJ1ZmZlciwgdGhpcy5pZDJPYmplY3RzTWFwKTsKLQotCi0JCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQkJCX0KLQkJCX0KLQotCQkJZm9yIChmaW5hbCBFT2JqZWN0IGVvYmogOiByZXN1bHQpIHsKLQotCQkJCWZpbmFsIFN0cmluZyBuYW1lID0gZ2V0TmFtZShlb2JqKS50b1N0cmluZygpOwotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKG5hbWUgKyAiLS0+ICIgKyBnZXROYW1lKHNlbGVjdGVkRU9iaikpOwotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0KLQkJCS8qLSBubyByZWZlcmVuY2VzIGZvciB0aGlzIEVDbGFzcyBhcmUgZm91bmQgKi8KLQotCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIHRoaXMuaWQyT2JqZWN0c01hcCwgc2VsZWN0ZWRFT2JqKTsKLQotCQl9Ci0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVDbGFzcyhmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIsIGZpbmFsIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdHNNYXAsCi0JCQlmaW5hbCBFT2JqZWN0IHNlbGVjdGVkRU9iaikgewotCQlmaW5hbCBTdHJpbmcgdXVpZCA9IEVjb3JlVXRpbC5nZW5lcmF0ZVVVSUQoKTsKLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoImNsYXNzICIgKyBnZXROYW1lKHNlbGVjdGVkRU9iaikgKyAiIDw8IChPLCNCNEE3RTUpICIgKyBzZWxlY3RlZEVPYmouZUNsYXNzKCkuZ2V0TmFtZSgpCi0JCQkJKyAiID4+IiArICIgICAgW1siICsgdXVpZCArICJdXSIpOwotCi0JCWlkMk9iamVjdHNNYXAucHV0KHV1aWQsIHNlbGVjdGVkRU9iaik7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JfQotCi0KLQlwcml2YXRlIE9iamVjdCBnZXROYW1lKGZpbmFsIEVPYmplY3QgZU9iamVjdCkgewotCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlID0gZU9iamVjdC5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoIm5hbWUiKTsKLQotCQlpZiAoZVN0cnVjdHVyYWxGZWF0dXJlICE9IG51bGwpIHsKLQotCQkJZmluYWwgT2JqZWN0IG9yaWdpbmFsTmFtZSA9IGVPYmplY3QuZUdldChlU3RydWN0dXJhbEZlYXR1cmUpOwotCQkJCi0JCQlpZihvcmlnaW5hbE5hbWUgPT0gbnVsbCB8fCBvcmlnaW5hbE5hbWUudG9TdHJpbmcoKS5sZW5ndGgoKT09MCkgewotCQkJCXJldHVybiBlT2JqZWN0LmVDbGFzcygpLmdldE5hbWUoKSArICJfXyIgKyBlT2JqZWN0Lmhhc2hDb2RlKCk7Ci0JCQl9Ci0KLQkJCXJldHVybiAiXCIiICsgb3JpZ2luYWxOYW1lICsgIlwiIjsKLQkJfQotCi0JCXJldHVybiBlT2JqZWN0LmVDbGFzcygpLmdldE5hbWUoKSArICJfXyIgKyBlT2JqZWN0Lmhhc2hDb2RlKCk7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgYXNzb2NpYXRlQ29udGFpbmVyKGZpbmFsIEVPYmplY3QgZW9iaiwgZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyLAotCQkJZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcCkgewotCi0JCWZpbmFsIEVPYmplY3QgZUNvbnRhaW5lck9iaiA9IGVvYmouZUNvbnRhaW5lcigpOwotCi0JCWlmIChlQ29udGFpbmVyT2JqID09IG51bGwpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCWNyZWF0ZUNsYXNzKHBsYW50dW1sQnVmZmVyLCBpZDJPYmplY3RzTWFwLCBlQ29udGFpbmVyT2JqKTsKLQotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChnZXROYW1lKGVDb250YWluZXJPYmopICsgIiAqLS0gIiArIGdldE5hbWUoZW9iaikpOwotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCWlmICghaXNOYW1lUHJlc2VudChlQ29udGFpbmVyT2JqKSkgewotCi0JCQlhc3NvY2lhdGVDb250YWluZXIoZUNvbnRhaW5lck9iaiwgcGxhbnR1bWxCdWZmZXIsIGlkMk9iamVjdHNNYXApOwotCi0JCX0KLQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc05hbWVQcmVzZW50KGZpbmFsIEVPYmplY3QgZU9iamVjdCkgewotCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlID0gZU9iamVjdC5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoIm5hbWUiKTsKLQotCQlpZiAoZVN0cnVjdHVyYWxGZWF0dXJlID09IG51bGwpIHsKLQotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRWxlbWVudENvbnRhaW5lZChmaW5hbCBMaXN0PEVPYmplY3Q+IGwsIGZpbmFsIEVPYmplY3QgZVJlZikgewotCQlib29sZWFuIGlzRWxlbWVudEZvdW5kID0gZmFsc2U7Ci0JCWZpbmFsIEl0ZXJhdG9yPEVPYmplY3Q+IGl0ID0gbC5pdGVyYXRvcigpOwotCQl3aGlsZSAoaXQuaGFzTmV4dCgpICYmICFpc0VsZW1lbnRGb3VuZCkgewotCQkJZmluYWwgRU9iamVjdCBpc0NvbnRhaW5lZCA9IGl0Lm5leHQoKTsKLQkJCWlmIChpc0NvbnRhaW5lZC5lcXVhbHMoZVJlZikpIHsKLQkJCQlpc0VsZW1lbnRGb3VuZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGlzRWxlbWVudEZvdW5kOwotCX0KLX0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9idWlsZGVycy9PYmplY3RDb250ZW50QnVmZmVyQnVpbGRlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL09iamVjdENvbnRlbnRCdWZmZXJCdWlsZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0MTE1NzMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2J1aWxkZXJzL09iamVjdENvbnRlbnRCdWZmZXJCdWlsZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTAgKzAsMCBAQAotIC8qKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgotICogCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCi0gKiAKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmJ1aWxkZXJzOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQXR0cmlidXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FU3RydWN0dXJhbEZlYXR1cmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSUlucHV0VmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSW5wdXREaWFsb2c7Ci0KLQotcHVibGljIGNsYXNzIE9iamVjdENvbnRlbnRCdWZmZXJCdWlsZGVyIHsKLQotCS8qIEVDbGFzc0NvbnRlbnRzIGFuZCBFT2JqZWN0UmVmcyBiZWhhdmlvdXIgaXMgaW5jbHVkZWQgaW4gT2JqZWN0Q29udGVudEJ1ZmZlckJ1aWxkZXIgamF2YSBjbGFzcyAqLwotCi0JcHJpdmF0ZSBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwOwotCi0JcHVibGljIFN0cmluZ0J1ZmZlciBidWlsZEJ1ZmZlcihmaW5hbCBFT2JqZWN0IGVPYmplY3QpIHsKLQotCQl0aGlzLmlkMk9iamVjdHNNYXAgPSBuZXcgQmFzaWNFTWFwPFN0cmluZywgT2JqZWN0PigpOwotCi0JCWZpbmFsIFN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQHN0YXJ0dW1sIik7Ci0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0JCWJ1aWxkQnVmZmVyKGVPYmplY3QsIHBsYW50dW1sQnVmZmVyKTsKLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJAZW5kdW1sIik7Ci0KLQkJcmV0dXJuIHBsYW50dW1sQnVmZmVyOwotCi0JfQotCi0KLQlwdWJsaWMgU3RyaW5nQnVmZmVyIGJ1aWxkQnVmZmVyRm9yQ29sbGVjdGlvbihmaW5hbCBFTGlzdDw/PiBlTGlzdCkgewotCi0JCXRoaXMuaWQyT2JqZWN0c01hcCA9IG5ldyBCYXNpY0VNYXA8U3RyaW5nLCBPYmplY3Q+KCk7Ci0KLQkJZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJAc3RhcnR1bWwiKTsKLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQotCQljcmVhdGVDbGFzcyhwbGFudHVtbEJ1ZmZlciwgdGhpcy5pZDJPYmplY3RzTWFwLCBlTGlzdCwgbnVsbCk7Ci0KLQkJZm9yIChmaW5hbCBPYmplY3Qgb2JqZWN0IDogZ2V0RWxlbWVudHNCYXNlZE9uUmFuZ2UoZUxpc3QpKSB7Ci0JCQlpZiAob2JqZWN0IGluc3RhbmNlb2YgRU9iamVjdCkgewotCi0JCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIHRoaXMuaWQyT2JqZWN0c01hcCwgKEVPYmplY3QpIG9iamVjdCk7Ci0KLQkJCQlmaW5hbCBTdHJpbmcgbmFtZSA9IGdldE5hbWUoKEVPYmplY3QpIG9iamVjdCkudG9TdHJpbmcoKTsKLQotCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiQ29sbGVjdGlvbiAtLT4gIiArIG5hbWUpOwotCi0JCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCX0KLQkJfQotCi0JCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoIkBlbmR1bWwiKTsKLQotCQlyZXR1cm4gcGxhbnR1bWxCdWZmZXI7Ci0KLQl9Ci0KLQotCXB1YmxpYyBFTWFwPFN0cmluZywgT2JqZWN0PiBnZXRJZDJPYmplY3RzTWFwKCkgewotCQlyZXR1cm4gdGhpcy5pZDJPYmplY3RzTWFwOwotCX0KLQotCi0JcHJpdmF0ZSB2b2lkIGJ1aWxkQnVmZmVyKGZpbmFsIEVPYmplY3Qgc2VsZWN0ZWRFT2JqLCBmaW5hbCBTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIpIHsKLQotCi0JCWZpbmFsIEVMaXN0PEVTdHJ1Y3R1cmFsRmVhdHVyZT4gZVN0cnVjdHVyYWxGZWF0dXJlcyA9IHNlbGVjdGVkRU9iai5lQ2xhc3MoKS5nZXRFQWxsU3RydWN0dXJhbEZlYXR1cmVzKCk7Ci0KLQotCQkvKi0gaWYgcmVmcyBvZiB0aGUgRUNsYXNzIGFyZSBmb3VuZCwgdGhlbiBmaWxsIHRoZSBwbGFudFVNTEJ1ZmZlciB3aXRoIHRoZSBhcHByb3ByaWF0ZSBjb250ZW50cyAqLwotCi0JCWlmIChlU3RydWN0dXJhbEZlYXR1cmVzLnNpemUoKSA+IDApIHsKLQotCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIHRoaXMuaWQyT2JqZWN0c01hcCwgc2VsZWN0ZWRFT2JqKTsKLQotCQkJZmluYWwgTGlzdDxFU3RydWN0dXJhbEZlYXR1cmU+IHByb2Nlc3NlZEZlYXR1cmVzID0gbmV3IEFycmF5TGlzdDxFU3RydWN0dXJhbEZlYXR1cmU+KCk7Ci0KLQotCQkJZm9yIChmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlIDogZVN0cnVjdHVyYWxGZWF0dXJlcykgewotCi0JCQkJZmluYWwgYm9vbGVhbiBlSXNTZXQgPSBzZWxlY3RlZEVPYmouZUlzU2V0KGVTdHJ1Y3R1cmFsRmVhdHVyZSk7Ci0KLQkJCQlpZiAoZUlzU2V0ICYmICFwcm9jZXNzZWRGZWF0dXJlcy5jb250YWlucyhlU3RydWN0dXJhbEZlYXR1cmUpCi0JCQkJCQkmJiAoZVN0cnVjdHVyYWxGZWF0dXJlIGluc3RhbmNlb2YgRVJlZmVyZW5jZSkpIHsKLQotCQkJCQlwcm9jZXNzZWRGZWF0dXJlcy5hZGQoZVN0cnVjdHVyYWxGZWF0dXJlKTsKLQotCQkJCQlmaW5hbCBPYmplY3QgZW9iaiA9IHNlbGVjdGVkRU9iai5lR2V0KGVTdHJ1Y3R1cmFsRmVhdHVyZSk7Ci0KLQotCQkJCQlpZiAoZW9iaiBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQkJCQkJCWNyZWF0ZUNsYXNzKHBsYW50dW1sQnVmZmVyLCB0aGlzLmlkMk9iamVjdHNNYXAsIChFT2JqZWN0KSBlb2JqKTsKLQotCQkJCQkJZmluYWwgU3RyaW5nIG5hbWUgPSBnZXROYW1lKChFT2JqZWN0KSBlb2JqKS50b1N0cmluZygpOwotCi0JCQkJCQlmaW5hbCBTdHJpbmcgcmVsYXRpb24gPSAoKEVSZWZlcmVuY2UpIGVTdHJ1Y3R1cmFsRmVhdHVyZSkuaXNDb250YWlubWVudCgpID8gIiAqLS0gIiA6ICItLT4gIjsKLQotCQkJCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKGdldE5hbWUoc2VsZWN0ZWRFT2JqKSArIHJlbGF0aW9uICsgbmFtZSk7Ci0KLQkJCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJCQkJfQotCQkJCQllbHNlIGlmIChlb2JqIGluc3RhbmNlb2YgRUxpc3QpIHsKLQotCQkJCQkJY3JlYXRlQ2xhc3MocGxhbnR1bWxCdWZmZXIsIHRoaXMuaWQyT2JqZWN0c01hcCwgKEVMaXN0PD8+KSBlb2JqLCBlU3RydWN0dXJhbEZlYXR1cmUpOwotCi0JCQkJCQlmaW5hbCBTdHJpbmcgcmVsYXRpb24gPSAoKEVSZWZlcmVuY2UpIGVTdHJ1Y3R1cmFsRmVhdHVyZSkuaXNDb250YWlubWVudCgpID8gIiAqLS0gIiA6ICItLT4gIjsKLQotCQkJCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKGdldE5hbWUoc2VsZWN0ZWRFT2JqKSArIHJlbGF0aW9uICsgZVN0cnVjdHVyYWxGZWF0dXJlLmdldE5hbWUoKSk7Ci0KLQkJCQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZChTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIikpOwotCi0KLQkJCQkJfQotCi0JCQkJfQotCQkJfQotCi0KLQkJfQotCQllbHNlIHsKLQotCQkJLyotIG5vIHJlZmVyZW5jZXMgZm9yIHRoaXMgRUNsYXNzIGFyZSBmb3VuZCAqLwotCi0JCQljcmVhdGVDbGFzcyhwbGFudHVtbEJ1ZmZlciwgdGhpcy5pZDJPYmplY3RzTWFwLCBzZWxlY3RlZEVPYmopOwotCi0JCX0KLQotCi0JfQotCi0KLQlwcml2YXRlIHZvaWQgY3JlYXRlQ2xhc3MoZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyLCBmaW5hbCBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwLAotCQkJZmluYWwgRUxpc3Q8Pz4gZUxpc3QsIGZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmUpIHsKLQotCQlmaW5hbCBTdHJpbmcgdXVpZCA9IEVjb3JlVXRpbC5nZW5lcmF0ZVVVSUQoKTsKLQotCQlpZiAoZVN0cnVjdHVyYWxGZWF0dXJlICE9IG51bGwpIHsKLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgiY2xhc3MgXCIiICsgZVN0cnVjdHVyYWxGZWF0dXJlLmdldE5hbWUoKSArICJcIiIgKyAiIDw8ICgqLCNGRjc3MDApIEVMaXN0PCIKLQkJCQkJKyBlU3RydWN0dXJhbEZlYXR1cmUuZ2V0RVR5cGUoKS5nZXROYW1lKCkgKyAiPiA+PiIgKyAiICAgIFtbIiArIHV1aWQgKyAiXV0iKTsKLQotCQl9Ci0JCWVsc2UgewotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJjbGFzcyBcIiIgKyAiQ29sbGVjdGlvbiIgKyAiXCIiICsgIiA8PCAoKiwjRkY3NzAwKSBDb2xsZWN0aW9uPCIgKyAiRUxpc3QiICsgIj4gPj4iCi0JCQkJCSsgIiAgICBbWyIgKyB1dWlkICsgIl1dIik7Ci0JCX0KLQotCQlpZDJPYmplY3RzTWFwLnB1dCh1dWlkLCBlTGlzdCk7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgY3JlYXRlQ2xhc3MoZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyLCBmaW5hbCBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwLAotCQkJZmluYWwgRU9iamVjdCBzZWxlY3RlZEVPYmopIHsKLQkJZmluYWwgU3RyaW5nIHV1aWQgPSBFY29yZVV0aWwuZ2VuZXJhdGVVVUlEKCk7Ci0KLQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKCJjbGFzcyAiICsgZ2V0TmFtZShzZWxlY3RlZEVPYmopICsgIiA8PCAgKE8sI0I0QTdFNSkgIiArIHNlbGVjdGVkRU9iai5lQ2xhc3MoKS5nZXROYW1lKCkKLQkJCQkrICIgPj4iICsgIiAgICBbWyIgKyB1dWlkICsgIl1dIik7Ci0KLQkJZmluYWwgRUxpc3Q8RUF0dHJpYnV0ZT4gZUFsbEF0dHJpYnV0ZXMgPSBzZWxlY3RlZEVPYmouZUNsYXNzKCkuZ2V0RUFsbEF0dHJpYnV0ZXMoKTsKLQotCQlpZiAoZUFsbEF0dHJpYnV0ZXMuc2l6ZSgpID4gMCkgewotCi0JCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoInsiKTsKLQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCWZpbmFsIExpc3Q8RUF0dHJpYnV0ZT4gcHJvY2Vzc2VkRmVhdHVyZXMgPSBuZXcgQXJyYXlMaXN0PEVBdHRyaWJ1dGU+KCk7Ci0KLQkJCWZvciAoZmluYWwgRUF0dHJpYnV0ZSBlQXR0cmlidXRlIDogZUFsbEF0dHJpYnV0ZXMpIHsKLQotCQkJCWlmIChzZWxlY3RlZEVPYmouZUlzU2V0KGVBdHRyaWJ1dGUpICYmICFwcm9jZXNzZWRGZWF0dXJlcy5jb250YWlucyhlQXR0cmlidXRlKSkgewotCi0JCQkJCXByb2Nlc3NlZEZlYXR1cmVzLmFkZChlQXR0cmlidXRlKTsKLQotCQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQotCQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoZUF0dHJpYnV0ZS5nZXRFVHlwZSgpLmdldE5hbWUoKSArICIgIiArIGVBdHRyaWJ1dGUuZ2V0TmFtZSgpICsgIiA9ICIKLQkJCQkJCQkrIHNlbGVjdGVkRU9iai5lR2V0KGVBdHRyaWJ1dGUpKTsKLQotCQkJCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQkJCQl9Ci0KLQotCQkJfQotCQkJcGxhbnR1bWxCdWZmZXIuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0KLQkJCXBsYW50dW1sQnVmZmVyLmFwcGVuZCgifSIpOwotCQl9Ci0KLQkJaWQyT2JqZWN0c01hcC5wdXQodXVpZCwgc2VsZWN0ZWRFT2JqKTsKLQotCQlwbGFudHVtbEJ1ZmZlci5hcHBlbmQoU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpKTsKLQl9Ci0KLQotCXByaXZhdGUgT2JqZWN0IGdldE5hbWUoZmluYWwgRU9iamVjdCBlT2JqZWN0KSB7Ci0JCWZpbmFsIEVTdHJ1Y3R1cmFsRmVhdHVyZSBlU3RydWN0dXJhbEZlYXR1cmUgPSBlT2JqZWN0LmVDbGFzcygpLmdldEVTdHJ1Y3R1cmFsRmVhdHVyZSgibmFtZSIpOwotCi0JCWlmIChlU3RydWN0dXJhbEZlYXR1cmUgIT0gbnVsbCkgewotCi0JCQlmaW5hbCBPYmplY3Qgb3JpZ2luYWxOYW1lID0gZU9iamVjdC5lR2V0KGVTdHJ1Y3R1cmFsRmVhdHVyZSk7Ci0KLQkJCXJldHVybiAiXCIiICsgb3JpZ2luYWxOYW1lICsgIlwiIjsKLQkJfQotCi0JCXJldHVybiBlT2JqZWN0LmVDbGFzcygpLmdldE5hbWUoKSArICJfXyIgKyBlT2JqZWN0Lmhhc2hDb2RlKCk7Ci0JfQotCi0JcHJpdmF0ZSBMaXN0PD8+IGdldEVsZW1lbnRzQmFzZWRPblJhbmdlKGZpbmFsIEVMaXN0PD8+IGVMaXN0KSB7Ci0KLQotCQlpZiAoZUxpc3Quc2l6ZSgpID4gMTAwKSB7Ci0KLQkJCUxpc3Q8Pz4gc3ViTGlzdCA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQkJZmluYWwgSW5wdXREaWFsb2cgaW5wdXREaWFsb2cgPSBuZXcgSW5wdXREaWFsb2coCi0JCQkJCW9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksICJFbGVtZW50IHNlbGVjdGlvbiBkaWFsb2ciLAotCQkJCQkiVGhlcmUgYXJlICIgKyBlTGlzdC5zaXplKCkKLQkJCQkJCQkrICIgcmVmZXJlbmNlcy4gc3BlY2lmeSB0aGUgcmFuZ2UgZm9yIHdoaWNoIGNvbnRlbnRzIHNob3VsZCBiZSByZXByZXNlbnRlZCBncmFwaGljYWxseSIsCi0JCQkJCSIwLSIgKyAoZUxpc3Quc2l6ZSgpIC0gMSksIG5ldyBJSW5wdXRWYWxpZGF0b3IoKSB7Ci0KLQkJCQkJCUBPdmVycmlkZQotCQkJCQkJcHVibGljIFN0cmluZyBpc1ZhbGlkKGZpbmFsIFN0cmluZyBuZXdUZXh0KSB7Ci0JCQkJCQkJaWYgKFBhdHRlcm4ubWF0Y2hlcygiKFxcZCkrXFwtKFxcZCkrIiwgbmV3VGV4dCkgPT0gZmFsc2UpIHsKLQkJCQkJCQkJcmV0dXJuICJTcGVjaWZ5IHRoZSByYW5nZSBpbiB0aGUgZm9sbG93aW5nIHdheSBpbnQtaW50IGVnLiAxMC0yMCAiOwotCQkJCQkJCX0KLQkJCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0KLQkJCWZpbmFsIGludCBzdGF0dXMgPSBpbnB1dERpYWxvZy5vcGVuKCk7Ci0KLQkJCWlmIChzdGF0dXMgPT0gMCkgewotCQkJCWZpbmFsIFN0cmluZyB2YWx1ZSA9IGlucHV0RGlhbG9nLmdldFZhbHVlKCk7Ci0KLQkJCQlmaW5hbCBTdHJpbmdbXSBzcGxpdCA9IHZhbHVlLnNwbGl0KCItIik7Ci0KLQkJCQlzdWJMaXN0ID0gbmV3IEFycmF5TGlzdChlTGlzdCkuc3ViTGlzdChJbnRlZ2VyLnBhcnNlSW50KHNwbGl0WzBdKSwKLQkJCQkJCUludGVnZXIucGFyc2VJbnQoc3BsaXRbMV0pIDwgZUxpc3Quc2l6ZSgpID8gSW50ZWdlci5wYXJzZUludChzcGxpdFsxXSkgOiAoZUxpc3Quc2l6ZSgpIC0gMSkpOwotCi0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzdWJMaXN0ID0gbmV3IEFycmF5TGlzdChlTGlzdCkuc3ViTGlzdCgwLCA5OSk7Ci0JCQl9Ci0KLQkJCXJldHVybiBzdWJMaXN0OwotCi0JCX0KLQkJcmV0dXJuIGVMaXN0OwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2hhbmRsZXJzL0Fic3RyYWN0SGFuZGxlclV0aWxzLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvQWJzdHJhY3RIYW5kbGVyVXRpbHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFlNDY2MS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvQWJzdHJhY3RIYW5kbGVyVXRpbHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzMCArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuaGFuZGxlcnM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLkFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IucHJlZmVyZW5jZXMuUHJlZmVyZW5jZUNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Iudmlld3MuRGlhZ3JhbVZpZXc7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5BYnN0cmFjdEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLk1lc3NhZ2VEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3UmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci0KLWltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuRmlsZUZvcm1hdDsKLWltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuRmlsZUZvcm1hdE9wdGlvbjsKLWltcG9ydCBuZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuU291cmNlU3RyaW5nUmVhZGVyOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RIYW5kbGVyVXRpbHMgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgewotCi0JcHJvdGVjdGVkIHZvaWQgb3BlbkVSZWZlcmVuY2VzVmlldyhmaW5hbCBFQ2xhc3MgYWN0aXZlRUNsYXNzKSB7Ci0KLQkJaWYgKGFjdGl2ZUVDbGFzcyAhPSBudWxsKSB7Ci0JCQl0cnkgewotCi0JCQkJaWYgKFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpCi0JCQkJCQkuZmluZFZpZXcoIm9yZy5lY2xpcHNlLmVtZi5lY29yZXRvb2xzLmludGVybmFsLnZpZXdzLkVSZWZlcmVuY2VzVmlldyIpID09IG51bGwpIHsKLQotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJCWZpbmFsIElWaWV3UGFydCB2aWV3ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkKLQkJCQkJCS5zaG93Vmlldygib3JnLmVjbGlwc2UuZW1mLmVjb3JldG9vbHMuaW50ZXJuYWwudmlld3MuRVJlZmVyZW5jZXNWaWV3Iik7Ci0KLQkJCQlpZiAodmlldyAhPSBudWxsKSB7Ci0JCQkJCWZpbmFsIENsYXNzPD8+IGVDbGFzc1JlZmVyZW5jZXNWaWV3Q2xhc3MgPSBDbGFzcwotCQkJCQkJCS5mb3JOYW1lKCJvcmcuZWNsaXBzZS5lbWYuZWNvcmV0b29scy5pbnRlcm5hbC52aWV3cy5FUmVmZXJlbmNlc1ZpZXciKTsKLQotCQkJCQlpZiAoZUNsYXNzUmVmZXJlbmNlc1ZpZXdDbGFzcyAhPSBudWxsKSB7Ci0JCQkJCQlmaW5hbCBNZXRob2Qgc2V0QW5hbHl6ZWRPYmplY3RNZXRob2QgPSBlQ2xhc3NSZWZlcmVuY2VzVmlld0NsYXNzLmdldE1ldGhvZCgic2V0QW5hbHl6ZWRPYmplY3QiLAotCQkJCQkJCQlFT2JqZWN0LmNsYXNzKTsKLQotCQkJCQkJaWYgKHNldEFuYWx5emVkT2JqZWN0TWV0aG9kICE9IG51bGwpIHsKLQkJCQkJCQlzZXRBbmFseXplZE9iamVjdE1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQkJCQkJCXNldEFuYWx5emVkT2JqZWN0TWV0aG9kLmludm9rZSh2aWV3LCBhY3RpdmVFQ2xhc3MpOwotCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJCWNhdGNoIChmaW5hbCBQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChmaW5hbCBOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgU2VjdXJpdHlFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChmaW5hbCBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIG9wZW5IaWVyYXJjaHlWaWV3KGZpbmFsIEVDbGFzcyBhY3RpdmVFQ2xhc3MpIHsKLQotCQlpZiAoYWN0aXZlRUNsYXNzICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0KLQkJCQlpZiAoUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkKLQkJCQkJCS5maW5kVmlldygib3JnLmVjbGlwc2UuZW1mLmVjb3JldG9vbHMuaW50ZXJuYWwudmlld3MuRUNsYXNzSGllcmFyY2h5VmlldyIpID09IG51bGwpIHsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQotCQkJCWZpbmFsIElWaWV3UGFydCB2aWV3ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkKLQkJCQkJCS5zaG93Vmlldygib3JnLmVjbGlwc2UuZW1mLmVjb3JldG9vbHMuaW50ZXJuYWwudmlld3MuRUNsYXNzSGllcmFyY2h5VmlldyIpOwotCi0JCQkJaWYgKHZpZXcgIT0gbnVsbCkgewotCQkJCQlmaW5hbCBDbGFzczw/PiBlQ2xhc3NIaWVyYXJjaHlWaWV3Q2xhc3MgPSBDbGFzcwotCQkJCQkJCS5mb3JOYW1lKCJvcmcuZWNsaXBzZS5lbWYuZWNvcmV0b29scy5pbnRlcm5hbC52aWV3cy5FQ2xhc3NIaWVyYXJjaHlWaWV3Iik7Ci0KLQkJCQkJaWYgKGVDbGFzc0hpZXJhcmNoeVZpZXdDbGFzcyAhPSBudWxsKSB7Ci0JCQkJCQlmaW5hbCBNZXRob2Qgc2V0QW5hbHl6ZWRPYmplY3RNZXRob2QgPSBlQ2xhc3NIaWVyYXJjaHlWaWV3Q2xhc3MuZ2V0TWV0aG9kKCJzZXRBbmFseXplZE9iamVjdCIsCi0JCQkJCQkJCUVPYmplY3QuY2xhc3MpOwotCi0JCQkJCQlpZiAoc2V0QW5hbHl6ZWRPYmplY3RNZXRob2QgIT0gbnVsbCkgewotCQkJCQkJCXNldEFuYWx5emVkT2JqZWN0TWV0aG9kLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCQkJCQkJc2V0QW5hbHl6ZWRPYmplY3RNZXRob2QuaW52b2tlKHZpZXcsIGFjdGl2ZUVDbGFzcyk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgUGFydEluaXRFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKGZpbmFsIENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKGZpbmFsIFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKGZpbmFsIElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoZmluYWwgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJY2F0Y2ggKGZpbmFsIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCXByb3RlY3RlZCB2b2lkIG9wZW5FcnJvckRpYWxvZygpIHsKLQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0KLQkJCQlmaW5hbCBTaGVsbCBzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldERlZmF1bHQoKSk7Ci0KLQkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihzaGVsbCwgIkVNRiBjb250ZW50IGV4dHJhY3RvciBkaWFsb2ciLCAiU2VsZWN0ZWQgb2JqZWN0IGlzIG5vdCBhIEVNRiBvYmplY3QiKTsKLQotCQkJfQotCQl9KTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgb3BlbkVycm9yRGlhbG9nKGZpbmFsIFN0cmluZyBtc2cpIHsKLQkJRGlzcGxheS5nZXREZWZhdWx0KCkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQotCQkJQE92ZXJyaWRlCi0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0KLQkJCQlmaW5hbCBTaGVsbCBzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldERlZmF1bHQoKSk7Ci0KLQkJCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihzaGVsbCwgIkVNRiBjb250ZW50IGV4dHJhY3RvciBkaWFsb2ciLCBtc2cpOwotCi0JCQl9Ci0JCX0pOwotCX0KLQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdmFsdWUgZm9yIGEgc3VwcGxpZWQga2V5IGZyb20gdGhlIFByZWZlcmVuY2UgU3RvcmUKLQkgKgotCSAqIEBwYXJhbSBrZXkKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyBTdHJpbmcgZ2V0VmFsdWVGcm9tUHJlZmVyZW5jZVN0b3JlKGZpbmFsIFN0cmluZyBrZXkpIHsKLQotCQlmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlyZXR1cm4gc3RvcmUuZ2V0U3RyaW5nKGtleSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGdlbmVyYXRlU1ZHQW5kRGlzcGxheURpYWdyYW0oZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyLCBmaW5hbCBTdHJpbmcgZmlsZU5hbWVQcmVmaXgsCi0JCQlmaW5hbCBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwLCBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnRpZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJZmluYWwgU3RyaW5nIGRvdF9leGVfbG9jYXRpb24gPSBnZXRWYWx1ZUZyb21QcmVmZXJlbmNlU3RvcmUoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0RPVF9QQVRIKTsKLQotCQlpZiAoZG90X2V4ZV9sb2NhdGlvbiA9PSBudWxsKSB7Ci0KLQkJCW9wZW5FcnJvckRpYWxvZygiRE9UIGZpbGUgZXhlIHBhdGggaXMgbm90IHNldCBpbiB0aGUgUHJlZmVyZW5jZXMiKTsKLQotCQkJcmV0dXJuOwotCQl9Ci0JCWVsc2UgaWYgKCFuZXcgRmlsZShkb3RfZXhlX2xvY2F0aW9uKS5leGlzdHMoKSkgewotCQkJb3BlbkVycm9yRGlhbG9nKAotCQkJCQkiRE9UIGZpbGUgZXhlIGlzIG5vdCBleGlzdGluZyBpbiB0aGUgc3BlY2lmaWVkIHBhdGguIFVwZGF0ZSB0aGUgdmFsaWQgcGF0aCBpbiBQcmVmZXJlbmNlcyAtPiBBTUFMVEhFQS1HcnBhaGljYWwtUmVwcmVzZW50YXRpb24gbm9kZSIpOwotCi0JCQlyZXR1cm47Ci0JCX0KLQotCQlTeXN0ZW0uc2V0UHJvcGVydHkoIkdSQVBIVklaX0RPVCIsIGRvdF9leGVfbG9jYXRpb24pOwotCi0JCWZpbmFsIFNvdXJjZVN0cmluZ1JlYWRlciByZWFkZXIgPSBuZXcgU291cmNlU3RyaW5nUmVhZGVyKHBsYW50dW1sQnVmZmVyLnRvU3RyaW5nKCkpOwotCi0JCWZpbmFsIFN0cmluZyBnZW5GaWxlTG9jYXRpb24gPSBnZXRWYWx1ZUZyb21QcmVmZXJlbmNlU3RvcmUoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRIKQotCQkJCSsgIlxcYW1hbHRoZWFfZWxlbWVudF8iICsgZmlsZU5hbWVQcmVmaXg7Ci0KLQkJdHJ5IChmaW5hbCBGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgKLQotCQkJCW5ldyBGaWxlKGdlbkZpbGVMb2NhdGlvbiArICIuc3ZnIikpOykgewotCi0JCQlyZWFkZXIuZ2VuZXJhdGVJbWFnZShmaWxlT3V0cHV0U3RyZWFtLCBuZXcgRmlsZUZvcm1hdE9wdGlvbihGaWxlRm9ybWF0LlNWRykpOwotCi0JCQlmaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0JCX0KLQotCi0JCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCi0JCQkJdHJ5IChmaW5hbCBGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgKLQotCQkJCQkJbmV3IEZpbGUoZ2VuRmlsZUxvY2F0aW9uICsgIi5wbGFudHVtbCIpKTsKLQotCQkJCQkJZmluYWwgQnVmZmVyZWRXcml0ZXIgYncgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcihmaWxlT3V0cHV0U3RyZWFtKSk7KSB7Ci0KLQkJCQkJYncud3JpdGUocGxhbnR1bWxCdWZmZXIudG9TdHJpbmcoKSk7Ci0KLQkJCQl9Ci0JCQkJY2F0Y2ggKGZpbmFsIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCi0KLQkJfSk7Ci0KLQotCQlEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMobmV3IFJ1bm5hYmxlKCkgewotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQlmaW5hbCBJV29ya2JlbmNoUGFnZSBhY3RpdmVQYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCk7Ci0KLQkJCQlmaW5hbCBTdHJpbmcgZGlhZ3JhbVZpZXdJRCA9ICJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Iudmlld3MuRGlhZ3JhbVZpZXciOwotCi0JCQkJSVZpZXdQYXJ0IGRpYWdyYW1WaWV3ID0gYWN0aXZlUGFnZS5maW5kVmlldyhkaWFncmFtVmlld0lEKTsKLQotCQkJCWZpbmFsIElWaWV3UmVmZXJlbmNlIGZpbmRWaWV3UmVmZXJlbmNlID0gYWN0aXZlUGFnZS5maW5kVmlld1JlZmVyZW5jZShkaWFncmFtVmlld0lEKTsKLQotCi0JCQkJaWYgKGRpYWdyYW1WaWV3ID09IG51bGwpIHsKLQkJCQkJdHJ5IHsKLQkJCQkJCWRpYWdyYW1WaWV3ID0gYWN0aXZlUGFnZS5zaG93VmlldyhkaWFncmFtVmlld0lEKTsKLQotCQkJCQkJLy8gdXBkYXRlQm9vbGVhblByb3BzKHByb3BlcnRpZXMsIGRpYWdyYW1WaWV3KTsKLQotCi0JCQkJCQkoKERpYWdyYW1WaWV3KSBkaWFncmFtVmlldykuZ2V0SWRPYmplY3RzTWFwKCkucHV0QWxsKGlkMk9iamVjdHNNYXApOwotCQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLmdldEJyb3dzZXIoKQotCQkJCQkJCQkuc2V0VXJsKCgiZmlsZTpcXCIgKyBnZXRWYWx1ZUZyb21QcmVmZXJlbmNlU3RvcmUoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRIKQotCQkJCQkJCQkJCSsgIlxcYW1hbHRoZWFfZWxlbWVudF8iICsgZmlsZU5hbWVQcmVmaXggKyAiLnN2ZyIpKTsKLQkJCQkJfQotCQkJCQljYXRjaCAoZmluYWwgUGFydEluaXRFeGNlcHRpb24gZSkgewotCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJfQotCi0JCQkJfQotCQkJCWVsc2UgewotCi0JCQkJCS8vIHVwZGF0ZUJvb2xlYW5Qcm9wcyhwcm9wZXJ0aWVzLCBkaWFncmFtVmlldyk7Ci0KLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLmdldElkT2JqZWN0c01hcCgpLnB1dEFsbChpZDJPYmplY3RzTWFwKTsKLQotCQkJCQkoKERpYWdyYW1WaWV3KSBkaWFncmFtVmlldykuZ2V0QnJvd3NlcigpCi0JCQkJCQkJLnNldFVybCgoImZpbGU6LyIgKyBnZXRWYWx1ZUZyb21QcmVmZXJlbmNlU3RvcmUoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRIKQotCQkJCQkJCQkJKyAiXFxhbWFsdGhlYV9lbGVtZW50XyIgKyBmaWxlTmFtZVByZWZpeCArICIuc3ZnIikpOwotCQkJCX0KLQkJCX0KLQotCQkJLyotcHJpdmF0ZSB2b2lkIHVwZGF0ZUJvb2xlYW5Qcm9wcyhmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BlcnRpZXMsIGZpbmFsIElWaWV3UGFydCBkaWFncmFtVmlldykgewotCQkJCWlmIChwcm9wZXJ0aWVzLmdldChFeGVjdXRpb25DYXRlZ29yeS5pc0NsYXNzSGllcmFyY2h5R2VuZXJhdGlvbi50b1N0cmluZygpKSAhPSBudWxsCi0JCQkJCQkmJiBwcm9wZXJ0aWVzLmdldChFeGVjdXRpb25DYXRlZ29yeS5pc0NsYXNzSGllcmFyY2h5R2VuZXJhdGlvbi50b1N0cmluZygpKS5lcXVhbHMoInRydWUiKSkgewotCQkJCi0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NIaWVyYXJjaHkodHJ1ZSk7Ci0JCQkKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldERpc3BsYXlpbmdDbGFzc0hpZXJhcmNoeV9BbmRfY29ycmVzcG9uZGluZ19SZWxhdGlvbl9Db250ZW50cyhmYWxzZSk7Ci0JCQkKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldERpc3BsYXlpbmdDbGFzc1JlZmVyZW5jZV9IaWVyYXJjaHlfc3ViY2xhc3NfaW5mb19nZW5lcmF0aW9uKGZhbHNlKTsKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldENsYXNzQ29udGVudHNfVU1MX0dlbmVyYXRpb24oZmFsc2UpOwotCQkJCX0KLQkJCQllbHNlIGlmIChwcm9wZXJ0aWVzLmdldChFeGVjdXRpb25DYXRlZ29yeS5pc0NsYXNzSGllcmFyY2h5X0NvbnRlbnRzX0dlbmVyYXRpb24udG9TdHJpbmcoKSkgIT0gbnVsbAotCQkJCQkJJiYgcHJvcGVydGllcy5nZXQoRXhlY3V0aW9uQ2F0ZWdvcnkuaXNDbGFzc0hpZXJhcmNoeV9Db250ZW50c19HZW5lcmF0aW9uLnRvU3RyaW5nKCkpCi0JCQkJCQkJCS5lcXVhbHMoInRydWUiKSkgewotCQkJCi0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NIaWVyYXJjaHkoZmFsc2UpOwotCQkJCi0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NIaWVyYXJjaHlfQW5kX2NvcnJlc3BvbmRpbmdfUmVsYXRpb25fQ29udGVudHModHJ1ZSk7Ci0JCQkKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldERpc3BsYXlpbmdDbGFzc1JlZmVyZW5jZV9IaWVyYXJjaHlfc3ViY2xhc3NfaW5mb19nZW5lcmF0aW9uKGZhbHNlKTsKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldENsYXNzQ29udGVudHNfVU1MX0dlbmVyYXRpb24oZmFsc2UpOwotCQkJCX0KLQkJCQllbHNlIGlmIChwcm9wZXJ0aWVzCi0JCQkJCQkuZ2V0KEV4ZWN1dGlvbkNhdGVnb3J5LmlzQ2xhc3NSZWZlcmVuY2VfSGllcmFyY2h5X3N1YmNsYXNzX2luZm9fZ2VuZXJhdGlvbi50b1N0cmluZygpKSAhPSBudWxsCi0JCQkJCQkmJiBwcm9wZXJ0aWVzCi0JCQkJCQkJCS5nZXQoRXhlY3V0aW9uQ2F0ZWdvcnkuaXNDbGFzc1JlZmVyZW5jZV9IaWVyYXJjaHlfc3ViY2xhc3NfaW5mb19nZW5lcmF0aW9uLnRvU3RyaW5nKCkpCi0JCQkJCQkJCS5lcXVhbHMoInRydWUiKSkgewotCQkJCi0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NIaWVyYXJjaHkoZmFsc2UpOwotCQkJCi0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NIaWVyYXJjaHlfQW5kX2NvcnJlc3BvbmRpbmdfUmVsYXRpb25fQ29udGVudHMoZmFsc2UpOwotCQkJCi0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NSZWZlcmVuY2VfSGllcmFyY2h5X3N1YmNsYXNzX2luZm9fZ2VuZXJhdGlvbih0cnVlKTsKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldENsYXNzQ29udGVudHNfVU1MX0dlbmVyYXRpb24oZmFsc2UpOwotCQkJCX0KLQkJCQllbHNlIGlmIChwcm9wZXJ0aWVzLmdldChFeGVjdXRpb25DYXRlZ29yeS5pc0NsYXNzQ29udGVudHNfVU1MX0dlbmVyYXRpb24udG9TdHJpbmcoKSkgIT0gbnVsbAotCQkJCQkJJiYgcHJvcGVydGllcy5nZXQoRXhlY3V0aW9uQ2F0ZWdvcnkuaXNDbGFzc0NvbnRlbnRzX1VNTF9HZW5lcmF0aW9uLnRvU3RyaW5nKCkpLmVxdWFscygidHJ1ZSIpKSB7Ci0JCQkKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldERpc3BsYXlpbmdDbGFzc0hpZXJhcmNoeShmYWxzZSk7Ci0JCQkKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldERpc3BsYXlpbmdDbGFzc0hpZXJhcmNoeV9BbmRfY29ycmVzcG9uZGluZ19SZWxhdGlvbl9Db250ZW50cyhmYWxzZSk7Ci0JCQkKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldERpc3BsYXlpbmdDbGFzc1JlZmVyZW5jZV9IaWVyYXJjaHlfc3ViY2xhc3NfaW5mb19nZW5lcmF0aW9uKGZhbHNlKTsKLQkJCQkJKChEaWFncmFtVmlldykgZGlhZ3JhbVZpZXcpLnNldENsYXNzQ29udGVudHNfVU1MX0dlbmVyYXRpb24odHJ1ZSk7Ci0JCQkKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NIaWVyYXJjaHkoZmFsc2UpOwotCQkJCQkoKERpYWdyYW1WaWV3KSBkaWFncmFtVmlldykuc2V0Q2xhc3NDb250ZW50c19VTUxfR2VuZXJhdGlvbihmYWxzZSk7Ci0JCQkJCSgoRGlhZ3JhbVZpZXcpIGRpYWdyYW1WaWV3KS5zZXREaXNwbGF5aW5nQ2xhc3NIaWVyYXJjaHlfQW5kX2NvcnJlc3BvbmRpbmdfUmVsYXRpb25fQ29udGVudHMoZmFsc2UpOwotCQkJCQkoKERpYWdyYW1WaWV3KSBkaWFncmFtVmlldykuc2V0RGlzcGxheWluZ0NsYXNzUmVmZXJlbmNlX0hpZXJhcmNoeV9zdWJjbGFzc19pbmZvX2dlbmVyYXRpb24oZmFsc2UpOwotCQkJCX0KLQkJCX0qLwotCQl9KTsKLQotCi0JfQotCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZW5lcmF0ZVNWR0ZpbGUoZmluYWwgU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyLCBmaW5hbCBTdHJpbmcgZmlsZU5hbWVQcmVmaXgsCi0JCQlmaW5hbCBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0KLQkJZmluYWwgU3RyaW5nIGRvdF9leGVfbG9jYXRpb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpCi0JCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRE9UX1BBVEgpOwotCi0JCWlmIChkb3RfZXhlX2xvY2F0aW9uID09IG51bGwpIHsKLQotCQkJb3BlbkVycm9yRGlhbG9nKCJET1QgZmlsZSBleGUgcGF0aCBpcyBub3Qgc2V0IGluIHRoZSBQcmVmZXJlbmNlcyIpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQkJZWxzZSBpZiAoIW5ldyBGaWxlKGRvdF9leGVfbG9jYXRpb24pLmV4aXN0cygpKSB7Ci0JCQlvcGVuRXJyb3JEaWFsb2coCi0JCQkJCSJET1QgZmlsZSBleGUgaXMgbm90IGV4aXN0aW5nIGluIHRoZSBzcGVjaWZpZWQgcGF0aC4gVXBkYXRlIHRoZSB2YWxpZCBwYXRoIGluIFByZWZlcmVuY2VzIC0+IEFNQUxUSEVBLUdycGFoaWNhbC1SZXByZXNlbnRhdGlvbiBub2RlIik7Ci0KLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJU3lzdGVtLnNldFByb3BlcnR5KCJHUkFQSFZJWl9ET1QiLCBkb3RfZXhlX2xvY2F0aW9uKTsKLQotCQlmaW5hbCBTb3VyY2VTdHJpbmdSZWFkZXIgcmVhZGVyID0gbmV3IFNvdXJjZVN0cmluZ1JlYWRlcihwbGFudHVtbEJ1ZmZlci50b1N0cmluZygpKTsKLQotCi0JCWZpbmFsIFN0cmluZyBnZW5GaWxlTG9jYXRpb24gPSBBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpCi0JCQkJLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRk9MREVSX1BBVEgpICsgIlxcYW1hbHRoZWFfZWxlbWVudF8iICsgZmlsZU5hbWVQcmVmaXg7Ci0KLQotCQl0cnkgKGZpbmFsIEZpbGVPdXRwdXRTdHJlYW0gc3ZnRmlsZU91dHB1dFN0cmVhbSA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG5ldyBGaWxlKGdlbkZpbGVMb2NhdGlvbiArICIuc3ZnIikpOwotCi0JCSkgewotCi0JCQlyZWFkZXIuZ2VuZXJhdGVJbWFnZShzdmdGaWxlT3V0cHV0U3RyZWFtLCBuZXcgRmlsZUZvcm1hdE9wdGlvbihGaWxlRm9ybWF0LlNWRykpOwotCi0JCX0KLQotCi0JCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0KLQkJCUBPdmVycmlkZQotCQkJcHVibGljIHZvaWQgcnVuKCkgewotCi0JCQkJdHJ5IChmaW5hbCBGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgKLQotCQkJCQkJbmV3IEZpbGUoZ2VuRmlsZUxvY2F0aW9uICsgIi5wbGFudHVtbCIpKTsKLQotCQkJCQkJZmluYWwgQnVmZmVyZWRXcml0ZXIgYncgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IE91dHB1dFN0cmVhbVdyaXRlcihmaWxlT3V0cHV0U3RyZWFtKSk7KSB7Ci0KLQkJCQkJYncud3JpdGUocGxhbnR1bWxCdWZmZXIudG9TdHJpbmcoKSk7Ci0KLQkJCQl9Ci0JCQkJY2F0Y2ggKGZpbmFsIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCi0KLQkJfSk7Ci0KLQotCQlyZXR1cm4gKCJmaWxlOi8iICsgQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0ZPTERFUl9QQVRIKQotCQkJCSsgIlxcYW1hbHRoZWFfZWxlbWVudF8iICsgZmlsZU5hbWVQcmVmaXggKyAiLnN2ZyIpOwotCi0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9Db3B5Q29udGVudHNIYW5kbGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvQ29weUNvbnRlbnRzSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmZlZmNkLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9Db3B5Q29udGVudHNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5oYW5kbGVyczsKLQotaW1wb3J0IGphdmEuYXd0LlRvb2xraXQ7Ci1pbXBvcnQgamF2YS5hd3QuZGF0YXRyYW5zZmVyLkNsaXBib2FyZDsKLWltcG9ydCBqYXZhLmF3dC5kYXRhdHJhbnNmZXIuU3RyaW5nU2VsZWN0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU5hbWVkRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKLQotcHVibGljIGNsYXNzIENvcHlDb250ZW50c0hhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXJVdGlsc3sKLQotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKLQotCQlzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbC5nZXRBY3RpdmVNZW51U2VsZWN0aW9uKGV2ZW50KTsKLQkJCi0JCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkgewotCi0JCQlzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coZXZlbnQpLmdldEFjdGl2ZVBhZ2UoKS5nZXRTZWxlY3Rpb24oKTsKLQotCQl9Ci0JCVN0cmluZ0J1ZmZlciBzYj1uZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQotCQlpZihzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJSXRlcmF0b3IgaXRlcmF0b3IgPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLml0ZXJhdG9yKCk7Ci0JCQkKLQkJCXdoaWxlKGl0ZXJhdG9yLmhhc05leHQoKSkgewotCQkJCU9iamVjdCBuZXh0ID0gaXRlcmF0b3IubmV4dCgpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXh0KTsKLQkJCQotCQkJCWlmKG5leHQgaW5zdGFuY2VvZiBFTmFtZWRFbGVtZW50KSB7Ci0JCQkJCVN0cmluZyBuYW1lID0gKChFTmFtZWRFbGVtZW50KSBuZXh0KS5nZXROYW1lKCk7Ci0JCQkJCXNiLmFwcGVuZChuYW1lKTsKLQkJCQkJc2IuYXBwZW5kKFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKSk7Ci0JCQkJfQotCQkJfQotCQkJU3RyaW5nU2VsZWN0aW9uIHNlbGVjdGlvbjEgPSBuZXcgU3RyaW5nU2VsZWN0aW9uKHNiLnRvU3RyaW5nKCkpOwotCQkJQ2xpcGJvYXJkIGNsaXBib2FyZCA9IFRvb2xraXQuZ2V0RGVmYXVsdFRvb2xraXQoKS5nZXRTeXN0ZW1DbGlwYm9hcmQoKTsKLQkJCWNsaXBib2FyZC5zZXRDb250ZW50cyhzZWxlY3Rpb24xLCBzZWxlY3Rpb24xKTsKLQkJfQotCQkKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvRUNsYXNzQWxsUmVmZXJlbmNlc0hhbmRsZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9FQ2xhc3NBbGxSZWZlcmVuY2VzSGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTM0NDhiLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9FQ2xhc3NBbGxSZWZlcmVuY2VzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSAvKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KLSAqIAotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLwotICogCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5oYW5kbGVyczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnMuRUNsYXNzQWxsUmVmZXJlbmNlc0J1ZmZlckJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnV0aWxzLkV4ZWN1dGlvbkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci51dGlscy5FeGVjdXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FT2JqZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOwotCi0KLXB1YmxpYyBjbGFzcyBFQ2xhc3NBbGxSZWZlcmVuY2VzSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlclV0aWxzIHsKLQotCXByaXZhdGUgZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcDsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRUNsYXNzQWxsUmVmZXJlbmNlc0hhbmRsZXIoKSB7Ci0KLQkJdGhpcy5pZDJPYmplY3RzTWFwID0gbmV3IEJhc2ljRU1hcDxTdHJpbmcsIE9iamVjdD4oKTsKLQl9Ci0KLQkvKioKLQkgKiB0aGUgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZCwgc28gZXh0cmFjdCBleHRyYWN0IHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwbGljYXRpb24gY29udGV4dC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCi0KLQkJU3RyaW5nQnVmZmVyIHBsYW50dW1sQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCi0JCWZpbmFsIEVDbGFzc0FsbFJlZmVyZW5jZXNCdWZmZXJCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRUNsYXNzQWxsUmVmZXJlbmNlc0J1ZmZlckJ1aWxkZXIoKTsKLQotCi0JCWZpbmFsIFN0cmluZyBlQ2xhc3NOYW1lID0gIiI7Ci0KLQotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLQkJc2VsZWN0aW9uID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlTWVudVNlbGVjdGlvbihldmVudCk7Ci0KLQkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0KLQkJCXNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdyhldmVudCkuZ2V0QWN0aXZlUGFnZSgpLmdldFNlbGVjdGlvbigpOwotCi0JCX0KLQkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQotCQkJZmluYWwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWNTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQotCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxPYmplY3Q+IGl0ZXJhdG9yID0gc3RydWNTZWxlY3Rpb24uaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewotCi0JCQkJZmluYWwgT2JqZWN0IGVsZW1lbnQgPSBpdGVyYXRvci5uZXh0KCk7Ci0KLQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQotCQkJCQlFQ2xhc3MgZUNsYXNzID0gbnVsbDsKLQotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVDbGFzcykgewotCQkJCQkJZUNsYXNzID0gKEVDbGFzcykgZWxlbWVudDsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWVDbGFzcyA9ICgoRU9iamVjdCkgZWxlbWVudCkuZUNsYXNzKCk7Ci0JCQkJCX0KLQotCQkJCQlwbGFudHVtbEJ1ZmZlciA9IGJ1aWxkZXIuYnVpbGRCdWZmZXIoZUNsYXNzKTsKLQotCQkJCQl0aGlzLmlkMk9iamVjdHNNYXAuYWRkQWxsKGJ1aWxkZXIuZ2V0SWQyT2JqZWN0c01hcCgpKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCW9wZW5FcnJvckRpYWxvZygpOwotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlvcGVuRXJyb3JEaWFsb2coKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKHBsYW50dW1sQnVmZmVyLnRvU3RyaW5nKCkpOwotCi0JCXRyeSB7Ci0JCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0KLQkJCS8vIHByb3BzTWFwLnB1dChFeGVjdXRpb25DYXRlZ29yeS5pc0NsYXNzUmVmZXJlbmNlX0hpZXJhcmNoeV9zdWJjbGFzc19pbmZvX2dlbmVyYXRpb24udG9TdHJpbmcoKSwgInRydWUiKTsKLQotCQkJRXhlY3V0aW9uVXRpbC5zZXRFeGVjdXRpb25DYXRlZ29yeShFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NBbGxSZWZlcmVuY2VzKTsKLQotCQkJZ2VuZXJhdGVTVkdBbmREaXNwbGF5RGlhZ3JhbShwbGFudHVtbEJ1ZmZlciwgZUNsYXNzTmFtZSArICJfU3VwZXJUeXBlc19SZWZlcmVuY2VzIiwgdGhpcy5pZDJPYmplY3RzTWFwLAotCQkJCQlwcm9wc01hcCk7Ci0JCX0KLQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTRkOWNhLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9FQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuaGFuZGxlcnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmJ1aWxkZXJzLkVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5QnVmZmVyQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IudXRpbHMuRXhlY3V0aW9uQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnV0aWxzLkV4ZWN1dGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7Ci0KLQotcHVibGljIGNsYXNzIEVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlclV0aWxzIHsKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEVDbGFzc0NvbnRlbnRzQW5kSGllcmFyY2h5SGFuZGxlcigpIHsKLQl9Ci0KLQkvKioKLQkgKiB0aGUgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZCwgc28gZXh0cmFjdCBleHRyYWN0IHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwbGljYXRpb24gY29udGV4dC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCi0KLQkJZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcCA9IG5ldyBCYXNpY0VNYXA8U3RyaW5nLCBPYmplY3Q+KCk7Ci0KLQotCQlTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQotCQlTdHJpbmcgZUNsYXNzTmFtZSA9ICIiOwotCi0KLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBudWxsOwotCi0JCXNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEFjdGl2ZU1lbnVTZWxlY3Rpb24oZXZlbnQpOwotCi0JCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkgewotCi0JCQlzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coZXZlbnQpLmdldEFjdGl2ZVBhZ2UoKS5nZXRTZWxlY3Rpb24oKTsKLQotCQl9Ci0JCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0KLQkJCWZpbmFsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0KLQkJCWZvciAoZmluYWwgSXRlcmF0b3I8T2JqZWN0PiBpdGVyYXRvciA9IHN0cnVjU2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKLQotCQkJCWZpbmFsIE9iamVjdCBlbGVtZW50ID0gaXRlcmF0b3IubmV4dCgpOwotCi0JCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0KLQotCQkJCQlFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcyA9IG51bGw7Ci0KLQkJCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFQ2xhc3MpIHsKLQkJCQkJCXNlbGVjdGVkT2JqQ2xhc3MgPSAoRUNsYXNzKSBlbGVtZW50OwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9ICgoRU9iamVjdCkgZWxlbWVudCkuZUNsYXNzKCk7Ci0JCQkJCX0KLQotCi0JCQkJCS8vIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzID0gKChFT2JqZWN0KSBlbGVtZW50KS5lQ2xhc3MoKTsKLQotCQkJCQkvKiA9PT09PT09PT09PT09PT09PT09PU9wZW5pbmcgSGVpcmFyY2h5IFZpZXcgPT09PT09PT09PT09PT09PT09PT09ICovCi0KLQkJCQkJb3BlbkhpZXJhcmNoeVZpZXcoc2VsZWN0ZWRPYmpDbGFzcyk7Ci0KLQotCQkJCQllQ2xhc3NOYW1lID0gc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCk7Ci0KLQotCQkJCQlmaW5hbCBFQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIgYnVpbGRlciA9IG5ldyBFQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIoKTsKLQotCQkJCQlwbGFudHVtbEJ1ZmZlciA9IGJ1aWxkZXIuYnVpbGRCdWZmZXIoc2VsZWN0ZWRPYmpDbGFzcyk7Ci0KLQkJCQkJaWQyT2JqZWN0c01hcC5hZGRBbGwoYnVpbGRlci5nZXRJZDJPYmplY3RzTWFwKCkpOwotCi0JCQkJfQotCQkJCWVsc2UgewotCQkJCQlvcGVuRXJyb3JEaWFsb2coKTsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJb3BlbkVycm9yRGlhbG9nKCk7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCVN5c3RlbS5vdXQucHJpbnRsbihwbGFudHVtbEJ1ZmZlci50b1N0cmluZygpKTsKLQotCQl0cnkgewotCQkJZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wc01hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotCi0JCQkvLyBwcm9wc01hcC5wdXQoRXhlY3V0aW9uQ2F0ZWdvcnkuaXNDbGFzc0hpZXJhcmNoeV9Db250ZW50c19HZW5lcmF0aW9uLnRvU3RyaW5nKCksICJ0cnVlIik7Ci0KLQkJCUV4ZWN1dGlvblV0aWwuc2V0RXhlY3V0aW9uQ2F0ZWdvcnkoRXhlY3V0aW9uQ2F0ZWdvcnkuZUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHkpOwotCi0JCQlnZW5lcmF0ZVNWR0FuZERpc3BsYXlEaWFncmFtKHBsYW50dW1sQnVmZmVyLCBlQ2xhc3NOYW1lICsgIl9fY29udGVudHNfZGVlcF9IZWlyYXJjaHkiLCBpZDJPYmplY3RzTWFwLAotCQkJCQlwcm9wc01hcCk7Ci0JCX0KLQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIFRPRE8gWm1lZXIgQXV0by1nZW5lcmF0ZWQgY2F0Y2ggYmxvY2sKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUhhbmRsZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMWI3NjguLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2hhbmRsZXJzL0VDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUhhbmRsZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuaGFuZGxlcnM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmJ1aWxkZXJzLkVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1ZmZlckJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnV0aWxzLkV4ZWN1dGlvbkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci51dGlscy5FeGVjdXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkJhc2ljRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRUNsYXNzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3NpZmllcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVJlZmVyZW5jZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRVN0cnVjdHVyYWxGZWF0dXJlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmhhbmRsZXJzLkhhbmRsZXJVdGlsOwotCi0KLXB1YmxpYyBjbGFzcyBFQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyVXRpbHMgewotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlSGFuZGxlcigpIHsKLQl9Ci0KLQkvKioKLQkgKiB0aGUgY29tbWFuZCBoYXMgYmVlbiBleGVjdXRlZCwgc28gZXh0cmFjdCBleHRyYWN0IHRoZSBuZWVkZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgYXBwbGljYXRpb24gY29udGV4dC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gewotCi0KLQkJZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWQyT2JqZWN0c01hcCA9IG5ldyBCYXNpY0VNYXA8U3RyaW5nLCBPYmplY3Q+KCk7Ci0KLQotCQlTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQotCQlTdHJpbmcgZUNsYXNzTmFtZSA9ICIiOwotCi0KLQkJSVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBudWxsOwotCi0JCXNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEFjdGl2ZU1lbnVTZWxlY3Rpb24oZXZlbnQpOwotCi0JCWlmIChzZWxlY3Rpb24gPT0gbnVsbCkgewotCi0JCQlzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbC5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coZXZlbnQpLmdldEFjdGl2ZVBhZ2UoKS5nZXRTZWxlY3Rpb24oKTsKLQotCQl9Ci0JCWlmIChzZWxlY3Rpb24gIT0gbnVsbCAmIHNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0KLQkJCWZpbmFsIElTdHJ1Y3R1cmVkU2VsZWN0aW9uIHN0cnVjU2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0KLQkJCWlmIChzdHJ1Y1NlbGVjdGlvbiA9PSBudWxsKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0KLQkJCWZvciAoZmluYWwgSXRlcmF0b3I8T2JqZWN0PiBpdGVyYXRvciA9IHN0cnVjU2VsZWN0aW9uLml0ZXJhdG9yKCk7IGl0ZXJhdG9yLmhhc05leHQoKTspIHsKLQotCQkJCWZpbmFsIE9iamVjdCBlbGVtZW50ID0gaXRlcmF0b3IubmV4dCgpOwotCi0JCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFT2JqZWN0KSB7Ci0KLQotCQkJCQlFQ2xhc3Mgc2VsZWN0ZWRPYmpDbGFzcyA9IG51bGw7Ci0KLQkJCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBFU3RydWN0dXJhbEZlYXR1cmUgJiYgZWxlbWVudCBpbnN0YW5jZW9mIEVSZWZlcmVuY2UpIHsKLQotCQkJCQkJZmluYWwgRUNsYXNzaWZpZXIgZVR5cGUgPSAoKEVSZWZlcmVuY2UpIGVsZW1lbnQpLmdldEVUeXBlKCk7Ci0KLQkJCQkJCWlmIChlVHlwZSBpbnN0YW5jZW9mIEVDbGFzcykgewotCi0JCQkJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9IChFQ2xhc3MpIGVUeXBlOwotCQkJCQkJfQotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9ICgoRU9iamVjdCkgZWxlbWVudCkuZUNsYXNzKCk7Ci0JCQkJCQl9Ci0KLQkJCQkJfQotCQkJCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRUNsYXNzKSB7Ci0JCQkJCQlzZWxlY3RlZE9iakNsYXNzID0gKChFQ2xhc3MpIGVsZW1lbnQpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9ICgoRU9iamVjdCkgZWxlbWVudCkuZUNsYXNzKCk7Ci0JCQkJCX0KLQotCi0JCQkJCS8vIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzID0gKChFT2JqZWN0KSBlbGVtZW50KS5lQ2xhc3MoKTsKLQotCQkJCQkvKiA9PT09PT09PT09PT09PT09PT09PU9wZW5pbmcgSGVpcmFyY2h5IFZpZXcgPT09PT09PT09PT09PT09PT09PT09ICovCi0KLQkJCQkJb3BlbkhpZXJhcmNoeVZpZXcoc2VsZWN0ZWRPYmpDbGFzcyk7Ci0KLQotCQkJCQllQ2xhc3NOYW1lID0gc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCk7Ci0KLQotCQkJCQlmaW5hbCBFQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWZmZXJCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlQnVmZmVyQnVpbGRlcigpOwotCi0JCQkJCXBsYW50dW1sQnVmZmVyID0gYnVpbGRlci5idWlsZEJ1ZmZlcihzZWxlY3RlZE9iakNsYXNzKTsKLQotCQkJCQlpZDJPYmplY3RzTWFwLmFkZEFsbChidWlsZGVyLmdldElkMk9iamVjdHNNYXAoKSk7Ci0KLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCW9wZW5FcnJvckRpYWxvZygpOwotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlvcGVuRXJyb3JEaWFsb2coKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKHBsYW50dW1sQnVmZmVyLnRvU3RyaW5nKCkpOwotCi0JCXRyeSB7Ci0JCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHByb3BzTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0KLQkJCS8vIHByb3BzTWFwLnB1dChFeGVjdXRpb25DYXRlZ29yeS5pc0NsYXNzQ29udGVudHNfVU1MX0dlbmVyYXRpb24udG9TdHJpbmcoKSwgInRydWUiKTsKLQotCQkJRXhlY3V0aW9uVXRpbC5zZXRFeGVjdXRpb25DYXRlZ29yeShFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2UpOwotCi0JCQlnZW5lcmF0ZVNWR0FuZERpc3BsYXlEaWFncmFtKHBsYW50dW1sQnVmZmVyLCBlQ2xhc3NOYW1lICsgIl9fcmVmZXJlbmNlX3R5cGVfSGVpcmFyY2h5IiwgaWQyT2JqZWN0c01hcCwKLQkJCQkJcHJvcHNNYXApOwotCQl9Ci0JCWNhdGNoIChmaW5hbCBJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBUT0RPIFptZWVyIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9FQ2xhc3NDb250ZW50c0hhbmRsZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9oYW5kbGVycy9FQ2xhc3NDb250ZW50c0hhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBhMjZiMy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvRUNsYXNzQ29udGVudHNIYW5kbGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotIC8qKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgotICogCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCi0gKiAKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLmhhbmRsZXJzOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5idWlsZGVycy5FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWZmZXJCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci51dGlscy5FeGVjdXRpb25DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IudXRpbHMuRXhlY3V0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKLQotCi1wdWJsaWMgY2xhc3MgRUNsYXNzQ29udGVudHNIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyVXRpbHMgewotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRUNsYXNzQ29udGVudHNIYW5kbGVyKCkgewotCX0KLQotCS8qKgotCSAqIHRoZSBjb21tYW5kIGhhcyBiZWVuIGV4ZWN1dGVkLCBzbyBleHRyYWN0IGV4dHJhY3QgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0KLQotCQlmaW5hbCBFTWFwPFN0cmluZywgT2JqZWN0PiBpZDJPYmplY3RzTWFwID0gbmV3IEJhc2ljRU1hcDxTdHJpbmcsIE9iamVjdD4oKTsKLQotCi0JCVN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCi0JCVN0cmluZyBlQ2xhc3NOYW1lID0gIiI7Ci0KLQotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLQkJc2VsZWN0aW9uID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlTWVudVNlbGVjdGlvbihldmVudCk7Ci0KLQkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0KLQkJCXNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdyhldmVudCkuZ2V0QWN0aXZlUGFnZSgpLmdldFNlbGVjdGlvbigpOwotCi0JCX0KLQkJaWYgKHNlbGVjdGlvbiAhPSBudWxsICYgc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQotCQkJZmluYWwgSVN0cnVjdHVyZWRTZWxlY3Rpb24gc3RydWNTZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHNlbGVjdGlvbjsKLQotCQkJZm9yIChmaW5hbCBJdGVyYXRvcjxPYmplY3Q+IGl0ZXJhdG9yID0gc3RydWNTZWxlY3Rpb24uaXRlcmF0b3IoKTsgaXRlcmF0b3IuaGFzTmV4dCgpOykgewotCi0JCQkJZmluYWwgT2JqZWN0IGVsZW1lbnQgPSBpdGVyYXRvci5uZXh0KCk7Ci0KLQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQotCi0JCQkJCUVDbGFzcyBzZWxlY3RlZE9iakNsYXNzID0gbnVsbDsKLQotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVDbGFzcykgewotCQkJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9IChFQ2xhc3MpIGVsZW1lbnQ7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlzZWxlY3RlZE9iakNsYXNzID0gKChFT2JqZWN0KSBlbGVtZW50KS5lQ2xhc3MoKTsKLQkJCQkJfQotCi0KLQkJCQkJLy8gZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MgPSAoKEVPYmplY3QpIGVsZW1lbnQpLmVDbGFzcygpOwotCi0JCQkJCS8qID09PT09PT09PT09PT09PT09PT09T3BlbmluZyBIZWlyYXJjaHkgVmlldyA9PT09PT09PT09PT09PT09PT09PT0gKi8KLQotCQkJCQlvcGVuSGllcmFyY2h5VmlldyhzZWxlY3RlZE9iakNsYXNzKTsKLQotCi0JCQkJCWVDbGFzc05hbWUgPSBzZWxlY3RlZE9iakNsYXNzLmdldE5hbWUoKTsKLQotCi0JCQkJCWZpbmFsIEVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1ZmZlckJ1aWxkZXIgYnVpbGRlciA9IG5ldyBFQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWZmZXJCdWlsZGVyKCk7Ci0KLQkJCQkJcGxhbnR1bWxCdWZmZXIgPSBidWlsZGVyLmJ1aWxkQnVmZmVyKHNlbGVjdGVkT2JqQ2xhc3MpOwotCi0JCQkJCWlkMk9iamVjdHNNYXAuYWRkQWxsKGJ1aWxkZXIuZ2V0SWQyT2JqZWN0c01hcCgpKTsKLQotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJb3BlbkVycm9yRGlhbG9nKCk7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQkJCX0KLQkJfQotCQllbHNlIHsKLQkJCW9wZW5FcnJvckRpYWxvZygpOwotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlTeXN0ZW0ub3V0LnByaW50bG4ocGxhbnR1bWxCdWZmZXIudG9TdHJpbmcoKSk7Ci0KLQkJdHJ5IHsKLQkJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQotCQkJLy8gcHJvcHNNYXAucHV0KEV4ZWN1dGlvbkNhdGVnb3J5LmlzQ2xhc3NDb250ZW50c19VTUxfR2VuZXJhdGlvbi50b1N0cmluZygpLCAidHJ1ZSIpOwotCQkJRXhlY3V0aW9uVXRpbC5zZXRFeGVjdXRpb25DYXRlZ29yeShFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NDb250ZW50cyk7Ci0KLQkJCWdlbmVyYXRlU1ZHQW5kRGlzcGxheURpYWdyYW0ocGxhbnR1bWxCdWZmZXIsIGVDbGFzc05hbWUgKyAiX19wcmVjaXNlX0hlaXJhcmNoeSIsIGlkMk9iamVjdHNNYXAsIHByb3BzTWFwKTsKLQkJfQotCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgewotCQkJLy8gVE9ETyBabWVlciBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jawotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvRUNsYXNzSGllcmFyY2h5SGFuZGxlci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2hhbmRsZXJzL0VDbGFzc0hpZXJhcmNoeUhhbmRsZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg0Zjg2MC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvRUNsYXNzSGllcmFyY2h5SGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAKLSAvKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KLSAqIAotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLwotICogCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5oYW5kbGVyczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnMuRUNsYXNzSGllcmFyY2h5QnVmZmVyQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IudXRpbHMuRXhlY3V0aW9uQ2F0ZWdvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnV0aWxzLkV4ZWN1dGlvblV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuQmFzaWNFTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7Ci0KLQotcHVibGljIGNsYXNzIEVDbGFzc0hpZXJhcmNoeUhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXJVdGlscyB7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEVDbGFzc0hpZXJhcmNoeUhhbmRsZXIoKSB7Ci0JfQotCi0JLyoqCi0JICogdGhlIGNvbW1hbmQgaGFzIGJlZW4gZXhlY3V0ZWQsIHNvIGV4dHJhY3QgZXh0cmFjdCB0aGUgbmVlZGVkIGluZm9ybWF0aW9uIGZyb20gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQuCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIE9iamVjdCBleGVjdXRlKGZpbmFsIEV4ZWN1dGlvbkV2ZW50IGV2ZW50KSB0aHJvd3MgRXhlY3V0aW9uRXhjZXB0aW9uIHsKLQotCi0JCWZpbmFsIEVNYXA8U3RyaW5nLCBPYmplY3Q+IGlkMk9iamVjdHNNYXAgPSBuZXcgQmFzaWNFTWFwPFN0cmluZywgT2JqZWN0PigpOwotCi0JCWZpbmFsIEVDbGFzc0hpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIgYnVpbGRlciA9IG5ldyBFQ2xhc3NIaWVyYXJjaHlCdWZmZXJCdWlsZGVyKCk7Ci0KLQotCQlTdHJpbmcgZUNsYXNzTmFtZSA9ICIiOwotCi0JCVN0cmluZ0J1ZmZlciBwbGFudHVtbEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCi0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gbnVsbDsKLQotCQlzZWxlY3Rpb24gPSBIYW5kbGVyVXRpbC5nZXRBY3RpdmVNZW51U2VsZWN0aW9uKGV2ZW50KTsKLQotCQlpZiAoc2VsZWN0aW9uID09IG51bGwpIHsKLQotCQkJc2VsZWN0aW9uID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KGV2ZW50KS5nZXRBY3RpdmVQYWdlKCkuZ2V0U2VsZWN0aW9uKCk7Ci0KLQkJfQotCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCi0JCQlmaW5hbCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y1NlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCi0JCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE9iamVjdD4gaXRlcmF0b3IgPSBzdHJ1Y1NlbGVjdGlvbi5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0KLQkJCQlmaW5hbCBPYmplY3QgZWxlbWVudCA9IGl0ZXJhdG9yLm5leHQoKTsKLQotCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRU9iamVjdCkgewotCi0JCQkJCUVDbGFzcyBzZWxlY3RlZE9iakNsYXNzID0gbnVsbDsKLQotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVDbGFzcykgewotCQkJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9IChFQ2xhc3MpIGVsZW1lbnQ7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlzZWxlY3RlZE9iakNsYXNzID0gKChFT2JqZWN0KSBlbGVtZW50KS5lQ2xhc3MoKTsKLQkJCQkJfQotCi0KLQkJCQkJLy8gZmluYWwgRUNsYXNzIHNlbGVjdGVkT2JqQ2xhc3MgPSAoKEVPYmplY3QpIGVsZW1lbnQpLmVDbGFzcygpOwotCi0JCQkJCS8qID09PT09PT09PT09PT09PT09PT09T3BlbmluZyBIZWlyYXJjaHkgVmlldyA9PT09PT09PT09PT09PT09PT09PT0gKi8KLQotCQkJCQlvcGVuSGllcmFyY2h5VmlldyhzZWxlY3RlZE9iakNsYXNzKTsKLQotCi0JCQkJCWVDbGFzc05hbWUgPSBzZWxlY3RlZE9iakNsYXNzLmdldE5hbWUoKTsKLQotCi0JCQkJCXBsYW50dW1sQnVmZmVyID0gYnVpbGRlci5idWlsZEJ1ZmZlcihzZWxlY3RlZE9iakNsYXNzKTsKLQotCQkJCQlpZDJPYmplY3RzTWFwLmFkZEFsbChidWlsZGVyLmdldElkMk9iamVjdHNNYXAoKSk7Ci0KLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCW9wZW5FcnJvckRpYWxvZygpOwotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlvcGVuRXJyb3JEaWFsb2coKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQotCQlTeXN0ZW0ub3V0LnByaW50bG4ocGxhbnR1bWxCdWZmZXIudG9TdHJpbmcoKSk7Ci0KLQkJdHJ5IHsKLQkJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQotCQkJRXhlY3V0aW9uVXRpbC5zZXRFeGVjdXRpb25DYXRlZ29yeShFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NIaWVyYXJjaHkpOwotCi0JCQlnZW5lcmF0ZVNWR0FuZERpc3BsYXlEaWFncmFtKHBsYW50dW1sQnVmZmVyLCBlQ2xhc3NOYW1lICsgIl9fZWNsYXNzX0hlaXJhcmNoeSIsIGlkMk9iamVjdHNNYXAsIHByb3BzTWFwKTsKLQkJfQotCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCi0JCXJldHVybiBudWxsOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvRU9iamVjdFJlZnNIYW5kbGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3IvaGFuZGxlcnMvRU9iamVjdFJlZnNIYW5kbGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmOTdhMzguLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL2hhbmRsZXJzL0VPYmplY3RSZWZzSGFuZGxlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLSAvKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KLSAqIAotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLwotICogCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5oYW5kbGVyczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnMuRU9iamVjdFJlZnNCdWZmZXJCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci51dGlscy5FeGVjdXRpb25DYXRlZ29yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IudXRpbHMuRXhlY3V0aW9uVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkV4ZWN1dGlvbkV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMuRXhlY3V0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FQ2xhc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVTdHJ1Y3R1cmFsRmVhdHVyZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5oYW5kbGVycy5IYW5kbGVyVXRpbDsKLQotCi1wdWJsaWMgY2xhc3MgRU9iamVjdFJlZnNIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyVXRpbHMgewotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgRU9iamVjdFJlZnNIYW5kbGVyKCkgewotCX0KLQotCS8qKgotCSAqIHRoZSBjb21tYW5kIGhhcyBiZWVuIGV4ZWN1dGVkLCBzbyBleHRyYWN0IGV4dHJhY3QgdGhlIG5lZWRlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0LgotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7Ci0KLQkJZmluYWwgRU9iamVjdFJlZnNCdWZmZXJCdWlsZGVyIGJ1ZmZlckJ1aWxkZXIgPSBuZXcgRU9iamVjdFJlZnNCdWZmZXJCdWlsZGVyKCk7Ci0KLQotCQlTdHJpbmdCdWZmZXIgcGxhbnR1bWxCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQkJU3RyaW5nIGVDbGFzc05hbWUgPSAiIjsKLQotCQlTdHJpbmcgZWxlbWVudE5hbWUgPSAiIjsKLQotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG51bGw7Ci0KLQkJc2VsZWN0aW9uID0gSGFuZGxlclV0aWwuZ2V0QWN0aXZlTWVudVNlbGVjdGlvbihldmVudCk7Ci0KLQkJaWYgKHNlbGVjdGlvbiA9PSBudWxsKSB7Ci0KLQkJCXNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdyhldmVudCkuZ2V0QWN0aXZlUGFnZSgpLmdldFNlbGVjdGlvbigpOwotCi0JCX0KLQotCQlpZiAoc2VsZWN0aW9uICE9IG51bGwgJiBzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCi0JCQlmaW5hbCBJU3RydWN0dXJlZFNlbGVjdGlvbiBzdHJ1Y1NlbGVjdGlvbiA9IChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uOwotCi0JCQlmb3IgKGZpbmFsIEl0ZXJhdG9yPE9iamVjdD4gaXRlcmF0b3IgPSBzdHJ1Y1NlbGVjdGlvbi5pdGVyYXRvcigpOyBpdGVyYXRvci5oYXNOZXh0KCk7KSB7Ci0KLQkJCQlmaW5hbCBPYmplY3QgZWxlbWVudCA9IGl0ZXJhdG9yLm5leHQoKTsKLQotCQkJCWlmIChlbGVtZW50IGluc3RhbmNlb2YgRU9iamVjdCkgewotCi0JCQkJCUVDbGFzcyBzZWxlY3RlZE9iakNsYXNzID0gbnVsbDsKLQotCQkJCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEVDbGFzcykgewotCQkJCQkJc2VsZWN0ZWRPYmpDbGFzcyA9IChFQ2xhc3MpIGVsZW1lbnQ7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlzZWxlY3RlZE9iakNsYXNzID0gKChFT2JqZWN0KSBlbGVtZW50KS5lQ2xhc3MoKTsKLQkJCQkJfQotCi0JCQkJCS8vIGZpbmFsIEVDbGFzcyBzZWxlY3RlZE9iakNsYXNzID0gKChFT2JqZWN0KSBlbGVtZW50KS5lQ2xhc3MoKTsKLQotCQkJCQllQ2xhc3NOYW1lID0gc2VsZWN0ZWRPYmpDbGFzcy5nZXROYW1lKCk7Ci0KLQkJCQkJZWxlbWVudE5hbWUgPSAoU3RyaW5nKSBnZXROYW1lKChFT2JqZWN0KSBlbGVtZW50KTsKLQotCi0JCQkJCXBsYW50dW1sQnVmZmVyID0gYnVmZmVyQnVpbGRlci5idWlsZEJ1ZmZlcigoRU9iamVjdCkgZWxlbWVudCk7Ci0KLQotCQkJCQkvKiA9PT09PT09PT09PT09PT09PT09PU9wZW5pbmcgUmVmZXJlbmNlcyBWaWV3ID09PT09PT09PT09PT09PT09PT09PSAqLwotCi0JCQkJCW9wZW5FUmVmZXJlbmNlc1ZpZXcoc2VsZWN0ZWRPYmpDbGFzcyk7Ci0KLQkJCQkJLyogPT09PT09PT09PT09PT09PT09PT1PcGVuaW5nIEhpZXJhcmNoeSBWaWV3ID09PT09PT09PT09PT09PT09PT09PSAqLwotCQkJCQlvcGVuSGllcmFyY2h5VmlldyhzZWxlY3RlZE9iakNsYXNzKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCW9wZW5FcnJvckRpYWxvZygpOwotCQkJCQlyZXR1cm4gbnVsbDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlvcGVuRXJyb3JEaWFsb2coKTsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKHBsYW50dW1sQnVmZmVyLnRvU3RyaW5nKCkpOwotCi0JCXRyeSB7Ci0KLQkJCWZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gcHJvcHNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKLQotCQkJRXhlY3V0aW9uVXRpbC5zZXRFeGVjdXRpb25DYXRlZ29yeShFeGVjdXRpb25DYXRlZ29yeS5lT2JqZWN0UmVmcyk7Ci0KLQkJCWdlbmVyYXRlU1ZHQW5kRGlzcGxheURpYWdyYW0ocGxhbnR1bWxCdWZmZXIsIGVDbGFzc05hbWUgKyAiXyIgKyBlbGVtZW50TmFtZSArICJfUmVmZXJlbmNlcyIsCi0JCQkJCWJ1ZmZlckJ1aWxkZXIuZ2V0SWQyT2JqZWN0c01hcCgpLCBwcm9wc01hcCk7Ci0JCX0KLQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcml2YXRlIE9iamVjdCBnZXROYW1lKGZpbmFsIEVPYmplY3QgZU9iamVjdCkgewotCQlmaW5hbCBFU3RydWN0dXJhbEZlYXR1cmUgZVN0cnVjdHVyYWxGZWF0dXJlID0gZU9iamVjdC5lQ2xhc3MoKS5nZXRFU3RydWN0dXJhbEZlYXR1cmUoIm5hbWUiKTsKLQotCQlpZiAoZVN0cnVjdHVyYWxGZWF0dXJlICE9IG51bGwpIHsKLQotCQkJZmluYWwgT2JqZWN0IG9yaWdpbmFsTmFtZSA9IGVPYmplY3QuZUdldChlU3RydWN0dXJhbEZlYXR1cmUpOwotCi0JCQlyZXR1cm4gb3JpZ2luYWxOYW1lOwotCQl9Ci0KLQkJcmV0dXJuIGVPYmplY3QuZUNsYXNzKCkuZ2V0TmFtZSgpICsgIl9fIiArIGVPYmplY3QuaGFzaENvZGUoKTsKLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3ByZWZlcmVuY2VzL1ByZWZlcmVuY2VJbml0aWFsaXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWU1MDQ3Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Ivc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9jb250ZW50L2V4dHJhY3Rvci9wcmVmZXJlbmNlcy9QcmVmZXJlbmNlSW5pdGlhbGl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSAvKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KLSAqIAotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLwotICogCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5wcmVmZXJlbmNlczsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5BY3RpdmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLQotLyoqCi0gKiBDbGFzcyB1c2VkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlcy4KLSAqLwotcHVibGljIGNsYXNzIFByZWZlcmVuY2VJbml0aWFsaXplciBleHRlbmRzIEFic3RyYWN0UHJlZmVyZW5jZUluaXRpYWxpemVyIHsKLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqCi0JICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuQWJzdHJhY3RQcmVmZXJlbmNlSW5pdGlhbGl6ZXIjaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJCi0JCQotCQlmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRE9UX1BBVEgsIHN0b3JlLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRE9UX1BBVEgpICE9IG51bGwKLQkJCQk/IHN0b3JlLmdldFN0cmluZyhQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRE9UX1BBVEgpIDogIiIpOwotCQlzdG9yZS5zZXREZWZhdWx0KFByZWZlcmVuY2VDb25zdGFudHMuUF9GT0xERVJfUEFUSCwgc3RvcmUuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuUF9GT0xERVJfUEFUSCkgIT0gbnVsbAotCQkJCT8gc3RvcmUuZ2V0U3RyaW5nKFByZWZlcmVuY2VDb25zdGFudHMuUF9GT0xERVJfUEFUSCkgOiAiIik7Ci0KLQkJc3RvcmUuc2V0RGVmYXVsdChQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRFJJTExfRE9XTiwgc3RvcmUuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRFJJTExfRE9XTikpOwotCi0JCXN0b3JlLnNldERlZmF1bHQoUHJlZmVyZW5jZUNvbnN0YW50cy5QX1JFRFJBV19UUkVFX09OX1NFTEVDVElPTiwKLQkJCQlzdG9yZS5jb250YWlucyhQcmVmZXJlbmNlQ29uc3RhbnRzLlBfUkVEUkFXX1RSRUVfT05fU0VMRUNUSU9OKQotCQkJCQkJPyBzdG9yZS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuUF9SRURSQVdfVFJFRV9PTl9TRUxFQ1RJT04pIDogZmFsc2UpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL2NvbnRlbnQvZXh0cmFjdG9yL3ZpZXdzL0RpYWdyYW1WaWV3LmphdmEgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3Ivdmlld3MvRGlhZ3JhbVZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFlMjIzNS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvY29udGVudC9leHRyYWN0b3Ivdmlld3MvRGlhZ3JhbVZpZXcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0NyArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3Iudmlld3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuU3RhY2s7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuQWN0aXZhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5idWlsZGVycy5FQ2xhc3NBbGxSZWZlcmVuY2VzQnVmZmVyQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuYnVpbGRlcnMuRUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHlCdWZmZXJCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5idWlsZGVycy5FQ2xhc3NDb250ZW50c0Zyb21SZWZlcmVuY2VCdWZmZXJCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5idWlsZGVycy5FQ2xhc3NIaWVyYXJjaHlCdWZmZXJCdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci5idWlsZGVycy5PYmplY3RDb250ZW50QnVmZmVyQnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IuaGFuZGxlcnMuQWJzdHJhY3RIYW5kbGVyVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnByZWZlcmVuY2VzLlByZWZlcmVuY2VDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLnV0aWxzLkV4ZWN1dGlvbkNhdGVnb3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci51dGlscy5FeGVjdXRpb25VdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLlVSSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5CYXNpY0VNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5FTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udXRpbC5VUkk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVDbGFzczsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuRU9iamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSVRvb2xCYXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5UcmVlVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnNwaGlueC5lbWYuZWRpdG9ycy5mb3Jtcy5CYXNpY1RyYW5zYWN0aW9uYWxGb3JtRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnNwaGlueC5lbWYudWkudXRpbC5FY29yZVVJVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5icm93c2VyLkJyb3dzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmJyb3dzZXIuTG9jYXRpb25FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuYnJvd3Nlci5Mb2NhdGlvbkxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5icm93c2VyLlByb2dyZXNzRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmJyb3dzZXIuUHJvZ3Jlc3NMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuVHJhdmVyc2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlRyYXZlcnNlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JQWN0aW9uQmFyczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5NdWx0aVBhZ2VFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci0KLQotcHVibGljIGNsYXNzIERpYWdyYW1WaWV3IGV4dGVuZHMgVmlld1BhcnQgewotCi0JLyoqCi0JICogVGhlIElEIG9mIHRoZSB2aWV3IGFzIHNwZWNpZmllZCBieSB0aGUgZXh0ZW5zaW9uLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIElEID0gIm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci52aWV3cy5EaWFncmFtVmlldyI7Ci0KLQkvKiogY291bnRlciBmb3IgdGhlIGdlbmVyYXRlZCBmaWxlcyAod2hpY2ggYXJlIGFzc29jaWF0ZWQgdG8gdGhlIGNvbGxlY3Rpb25zICkgKiovCi0JcHJpdmF0ZSBpbnQgaSA9IDA7Ci0KLQlwcml2YXRlIEJyb3dzZXIgYnJvd3NlcjsKLQotCi0JZmluYWwgRU1hcDxTdHJpbmcsIE9iamVjdD4gaWRPYmplY3RzTWFwOwotCi0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIERpYWdyYW1WaWV3KCkgewotCi0JCXRoaXMuaWRPYmplY3RzTWFwID0gbmV3IEJhc2ljRU1hcDxTdHJpbmcsIE9iamVjdD4oKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBpbml0KGZpbmFsIElWaWV3U2l0ZSBzaXRlKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUpOwotCQlhZGRBY3Rpb25zKCk7Ci0JfQotCi0JCi0gCi0JLyoqCi0JICogVGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZSBpdC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0JCXRoaXMuYnJvd3NlciA9IG5ldyBCcm93c2VyKHBhcmVudCwgU1dULk5vbmUpOwotCi0JCXRoaXMuYnJvd3Nlci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpKTsKLQotCQlDdXN0b21Ccm93c2VyTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgQ3VzdG9tQnJvd3Nlckxpc3RlbmVyKCk7Ci0JCXRoaXMuYnJvd3Nlci5hZGRLZXlMaXN0ZW5lcihsaXN0ZW5lciApOyAKLQkJCi0JCXRoaXMuYnJvd3Nlci5hZGRMb2NhdGlvbkxpc3RlbmVyKGxpc3RlbmVyKTsKLQkJCi0JCSAKLQotCX0KLQkKLQljbGFzcyBDdXN0b21Ccm93c2VyTGlzdGVuZXIgaW1wbGVtZW50cyBMb2NhdGlvbkxpc3RlbmVyLCBLZXlMaXN0ZW5lciAgewotCi0JCVN0cmluZyBsYXN0U291cmNlID0gIiI7Ci0KLQkJcHVibGljIFN0YWNrPFN0cmluZz4gdXJscz1uZXcgU3RhY2s8PigpOzsKLQkJCi0JCWJvb2xlYW4gaXNCYWNrQnV0dG9uUHJlc3NlZD1mYWxzZTsKLQkJCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCBjaGFuZ2luZyhmaW5hbCBMb2NhdGlvbkV2ZW50IGV2ZW50KSB7Ci0JCQkKLQkJCWlmKGlzQmFja0J1dHRvblByZXNzZWQpIHsKLQkJCQlpc0JhY2tCdXR0b25QcmVzc2VkPWZhbHNlOwotCQkJCXJldHVybjsKLQkJCX0KLQotCQkJZmluYWwgU3RyaW5nIGxvY2F0aW9uID0gZXZlbnQubG9jYXRpb247Ci0vL1RPRE86IGZvdW5kIHRoaXMKLQkJCWlmICghbG9jYXRpb24uZW5kc1dpdGgoIi5zdmciKSkgewotCQkJCWZpbmFsIGludCBsYXN0SW5kZXhPZiA9IGxvY2F0aW9uLmxhc3RJbmRleE9mKCIvIik7Ci0KLQkJCQlTdHJpbmcgaWQgPSAiIjsKLQkJCQlpZiAobGFzdEluZGV4T2YgIT0gLTEpIHsKLQkJCQkJaWQgPSBsb2NhdGlvbi5zdWJzdHJpbmcobGFzdEluZGV4T2YgKyAxLCBsb2NhdGlvbi5sZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWZpbmFsIE9iamVjdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTsKLQotCQkJCWlmIChzb3VyY2UgaW5zdGFuY2VvZiBCcm93c2VyKSB7Ci0KLQkJCQkJdHJ5IHsKLS8vCQkJCQkJKChCcm93c2VyKSBzb3VyY2UpLnNldFVybCh0aGlzLmxhc3RTb3VyY2UpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgewotCQkJCQkJLy8gc2tpcHBpbmcgZXhjZXB0aW9uIGxvZ2dpbmcsIGFzIGhlcmUgZ29hbCBpcyB0byBzdGlsbCByZXRhaW4gdGhlIHNhbWUgaW1hZ2UKLQkJCQkJfQotCQkJCX0KLQotCQkJCWZpbmFsIE9iamVjdCBlT2JqZWN0ID0gRGlhZ3JhbVZpZXcudGhpcy5pZE9iamVjdHNNYXAuZ2V0KGlkKTsKLQotCQkJCWlmIChlT2JqZWN0ICE9IG51bGwpIHsKLQotCQkJCQlpZiAoZU9iamVjdCBpbnN0YW5jZW9mIEVPYmplY3QpIHsKLQkJCQkJCWlmIChBY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpCi0JCQkJCQkJCS5nZXRCb29sZWFuKFByZWZlcmVuY2VDb25zdGFudHMuUF9EUklMTF9ET1dOKSkgewotCi0JCQkJCQkJLyotID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gUmVnZW5lcmF0aW9uIG9mIFNWRyBCdWZmZXIgZm9yIHBvcHVsYXRpbmcgY29udGVudCBzcGVjaWZpYyB0byB0aGUgc2VsZWN0aW9uID09PT09PT09PT09PT09PT09PT09PSovCi0KLQkJCQkJCQlTdHJpbmdCdWZmZXIgYnVpbGRCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0KLQotCQkJCQkJCWlmIChFeGVjdXRpb25VdGlsLmlzRXhlY3V0aW5nKEV4ZWN1dGlvbkNhdGVnb3J5LmVDbGFzc0hpZXJhcmNoeSkKLQkJCQkJCQkJCSYmIChlT2JqZWN0IGluc3RhbmNlb2YgRUNsYXNzKSkgewotCi0JCQkJCQkJCWZpbmFsIEVDbGFzc0hpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIgYnVmZmVyQnVpbGRlciA9IG5ldyBFQ2xhc3NIaWVyYXJjaHlCdWZmZXJCdWlsZGVyKCk7Ci0KLQkJCQkJCQkJYnVpbGRCdWZmZXIgPSBidWZmZXJCdWlsZGVyLmJ1aWxkQnVmZmVyKChFQ2xhc3MpIGVPYmplY3QpOwotCi0JCQkJCQkJCWdldElkT2JqZWN0c01hcCgpLmFkZEFsbChidWZmZXJCdWlsZGVyLmdldElkMk9iamVjdHNNYXAoKSk7Ci0JCQkJCQkJfQotCQkJCQkJCWVsc2UgaWYgKEV4ZWN1dGlvblV0aWwuaXNFeGVjdXRpbmcoRXhlY3V0aW9uQ2F0ZWdvcnkuZUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHkpCi0JCQkJCQkJCQkmJiAoZU9iamVjdCBpbnN0YW5jZW9mIEVDbGFzcykpIHsKLQotCQkJCQkJCQlmaW5hbCBFQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIgYnVmZmVyQnVpbGRlciA9IG5ldyBFQ2xhc3NDb250ZW50c0FuZEhpZXJhcmNoeUJ1ZmZlckJ1aWxkZXIoKTsKLQotCQkJCQkJCQlidWlsZEJ1ZmZlciA9IGJ1ZmZlckJ1aWxkZXIuYnVpbGRCdWZmZXIoKEVDbGFzcykgZU9iamVjdCk7Ci0KLQkJCQkJCQkJZ2V0SWRPYmplY3RzTWFwKCkuYWRkQWxsKGJ1ZmZlckJ1aWxkZXIuZ2V0SWQyT2JqZWN0c01hcCgpKTsKLQkJCQkJCQl9Ci0JCQkJCQkJZWxzZSBpZiAoRXhlY3V0aW9uVXRpbC5pc0V4ZWN1dGluZyhFeGVjdXRpb25DYXRlZ29yeS5lQ2xhc3NBbGxSZWZlcmVuY2VzKQotCQkJCQkJCQkJJiYgKGVPYmplY3QgaW5zdGFuY2VvZiBFQ2xhc3MpKSB7Ci0KLQotCQkJCQkJCQlmaW5hbCBFQ2xhc3NBbGxSZWZlcmVuY2VzQnVmZmVyQnVpbGRlciBidWZmZXJCdWlsZGVyID0gbmV3IEVDbGFzc0FsbFJlZmVyZW5jZXNCdWZmZXJCdWlsZGVyKCk7Ci0KLQkJCQkJCQkJYnVpbGRCdWZmZXIgPSBidWZmZXJCdWlsZGVyLmJ1aWxkQnVmZmVyKChFQ2xhc3MpIGVPYmplY3QpOwotCi0JCQkJCQkJCWdldElkT2JqZWN0c01hcCgpLmFkZEFsbChidWZmZXJCdWlsZGVyLmdldElkMk9iamVjdHNNYXAoKSk7Ci0KLQotCQkJCQkJCX0KLQkJCQkJCQllbHNlIGlmIChFeGVjdXRpb25VdGlsLmlzRXhlY3V0aW5nKEV4ZWN1dGlvbkNhdGVnb3J5LmVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZSkKLQkJCQkJCQkJCSYmIChlT2JqZWN0IGluc3RhbmNlb2YgRUNsYXNzKSkgewotCi0KLQkJCQkJCQkJZmluYWwgRUNsYXNzQ29udGVudHNGcm9tUmVmZXJlbmNlQnVmZmVyQnVpbGRlciBidWZmZXJCdWlsZGVyID0gbmV3IEVDbGFzc0NvbnRlbnRzRnJvbVJlZmVyZW5jZUJ1ZmZlckJ1aWxkZXIoKTsKLQotCQkJCQkJCQlidWlsZEJ1ZmZlciA9IGJ1ZmZlckJ1aWxkZXIuYnVpbGRCdWZmZXIoKEVDbGFzcykgZU9iamVjdCk7Ci0KLQkJCQkJCQkJZ2V0SWRPYmplY3RzTWFwKCkuYWRkQWxsKGJ1ZmZlckJ1aWxkZXIuZ2V0SWQyT2JqZWN0c01hcCgpKTsKLQotCi0JCQkJCQkJfQotCi0JCQkJCQkJZWxzZSB7Ci0KLQkJCQkJCQkJLyotIEVDbGFzc0NvbnRlbnRzIGFuZCBFT2JqZWN0UmVmcyBiZWhhdmlvdXIgaXMgaW5jbHVkZWQgaW4gT2JqZWN0Q29udGVudEJ1ZmZlckJ1aWxkZXIgamF2YSBjbGFzcyAqLwotCQkJCQkJCQlmaW5hbCBPYmplY3RDb250ZW50QnVmZmVyQnVpbGRlciBidWZmZXJCdWlsZGVyID0gbmV3IE9iamVjdENvbnRlbnRCdWZmZXJCdWlsZGVyKCk7Ci0KLQkJCQkJCQkJYnVpbGRCdWZmZXIgPSBidWZmZXJCdWlsZGVyLmJ1aWxkQnVmZmVyKChFT2JqZWN0KSBlT2JqZWN0KTsKLQotCQkJCQkJCQlnZXRJZE9iamVjdHNNYXAoKS5hZGRBbGwoYnVmZmVyQnVpbGRlci5nZXRJZDJPYmplY3RzTWFwKCkpOwotCQkJCQkJCX0KLQotCi0JCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGJ1aWxkQnVmZmVyKTsKLQotCQkJCQkJCXRyeSB7Ci0KLQotCQkJCQkJCQlmaW5hbCBTdHJpbmcgc3ZnRmlsZSA9IEFic3RyYWN0SGFuZGxlclV0aWxzLmdlbmVyYXRlU1ZHRmlsZShidWlsZEJ1ZmZlciwKLQkJCQkJCQkJCQkoKEVPYmplY3QpIGVPYmplY3QpLmVDbGFzcygpLmdldE5hbWUoKSArIERpYWdyYW1WaWV3LnRoaXMuaSsrLAotCQkJCQkJCQkJCW5ldyBCYXNpY0VNYXA8U3RyaW5nLCBPYmplY3Q+KCkpOwotCQkJCQkJCQkoKEJyb3dzZXIpIHNvdXJjZSkuc2V0VXJsKHN2Z0ZpbGUpOwotCQkJCQkJCX0KLQkJCQkJCQljYXRjaCAoZmluYWwgSU9FeGNlcHRpb24gZSkgewotCQkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCQkJCX0KLQotCi0JCQkJCQl9Ci0JCQkJCQllbHNlIHsKLQotCi0JCQkJCQkJaWYgKEV4ZWN1dGlvblV0aWwuaXNFeGVjdXRpbmcoRXhlY3V0aW9uQ2F0ZWdvcnkuZUNsYXNzSGllcmFyY2h5KQotCQkJCQkJCQkJJiYgKGVPYmplY3QgaW5zdGFuY2VvZiBFQ2xhc3MpKSB7Ci0JCQkJCQkJCS8vIGRvIG5vdGhpbmcKLQkJCQkJCQl9Ci0KLQotCQkJCQkJCWVsc2UgaWYgKEV4ZWN1dGlvblV0aWwuaXNFeGVjdXRpbmcoRXhlY3V0aW9uQ2F0ZWdvcnkuZUNsYXNzQ29udGVudHNBbmRIaWVyYXJjaHkpCi0JCQkJCQkJCQkmJiAoZU9iamVjdCBpbnN0YW5jZW9mIEVDbGFzcykpIHsKLQkJCQkJCQkJLy8gZG8gbm90aGluZwotCQkJCQkJCX0KLQkJCQkJCQllbHNlIGlmIChFeGVjdXRpb25VdGlsLmlzRXhlY3V0aW5nKEV4ZWN1dGlvbkNhdGVnb3J5LmVDbGFzc0FsbFJlZmVyZW5jZXMpCi0JCQkJCQkJCQkmJiAoZU9iamVjdCBpbnN0YW5jZW9mIEVDbGFzcykpIHsKLQkJCQkJCQkJLy8gZG8gbm90aGluZwotCQkJCQkJCX0KLQkJCQkJCQllbHNlIHsKLQkJCQkJCQkJc2VsZWN0RWxlbWVudCgoRU9iamVjdCkgZU9iamVjdCk7Ci0KLQkJCQkJCQl9Ci0JCQkJCQkJCi0vLwkJCQkJCQkoKEJyb3dzZXIpc291cmNlKS5zdG9wKCk7Ci0JCQkJCQkJCi0JCQkJCQkJZXZlbnQuZG9pdD1mYWxzZTsKLQkJCQkJCX0KLQotCQkJCQl9Ci0JCQkJCWVsc2UgaWYgKGVPYmplY3QgaW5zdGFuY2VvZiBFTGlzdDw/PikgewotCi0JCQkJCQlpZiAoQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKQotCQkJCQkJCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRFJJTExfRE9XTikpIHsKLQotCQkJCQkJCS8qLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFJlZ2VuZXJhdGlvbiBvZiBTVkcgQnVmZmVyIGZvciBwb3B1bGF0aW5nIGNvbnRlbnQgc3BlY2lmaWMgdG8gdGhlIHNlbGVjdGlvbiA9PT09PT09PT09PT09PT09PT09PT0qLwotCi0JCQkJCQkJZmluYWwgT2JqZWN0Q29udGVudEJ1ZmZlckJ1aWxkZXIgYnVmZmVyQnVpbGRlciA9IG5ldyBPYmplY3RDb250ZW50QnVmZmVyQnVpbGRlcigpOwotCi0JCQkJCQkJZmluYWwgU3RyaW5nQnVmZmVyIGJ1aWxkQnVmZmVyID0gYnVmZmVyQnVpbGRlcgotCQkJCQkJCQkJLmJ1aWxkQnVmZmVyRm9yQ29sbGVjdGlvbigoRUxpc3Q8Pz4pIGVPYmplY3QpOwotCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbihidWlsZEJ1ZmZlcik7Ci0KLQkJCQkJCQl0cnkgewotCi0JCQkJCQkJCWdldElkT2JqZWN0c01hcCgpLmFkZEFsbChidWZmZXJCdWlsZGVyLmdldElkMk9iamVjdHNNYXAoKSk7Ci0KLQkJCQkJCQkJZmluYWwgU3RyaW5nIHN2Z0ZpbGUgPSBBYnN0cmFjdEhhbmRsZXJVdGlscy5nZW5lcmF0ZVNWR0ZpbGUoYnVpbGRCdWZmZXIsCi0JCQkJCQkJCQkJIkNvbGxlY3Rpb24iICsgRGlhZ3JhbVZpZXcudGhpcy5pKyssIGJ1ZmZlckJ1aWxkZXIuZ2V0SWQyT2JqZWN0c01hcCgpKTsKLQkJCQkJCQkJKChCcm93c2VyKSBzb3VyY2UpLnNldFVybChzdmdGaWxlKTsKLQkJCQkJCQl9Ci0JCQkJCQkJY2F0Y2ggKGZpbmFsIElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkJCQl9Ci0KLQotCQkJCQkJfQotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgIkVsZW1lbnQgU2VsZWN0aW9uIiwKLQkJCQkJCQkJCSJTZWxlY3Rpb24gb2YgbGlzdCBpcyBub3QgcG9zc2libGUgZm9yIEFNQUxUSEVBIG1vZGVsIik7Ci0KLQkJCQkJCQl0cnkgewotCQkJCQkJCQkoKEJyb3dzZXIpIHNvdXJjZSkuc2V0VXJsKHRoaXMubGFzdFNvdXJjZSk7Ci0KLQkJCQkJCQl9Ci0JCQkJCQkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJCXRocm93IGU7Ci0JCQkJCQkJfQotCQkJCQkJfQotCi0JCQkJCX0KLQotCi0JCQkJfQotCi0KLQkJCX0KLQotCi0JCX0KLQotCQlAT3ZlcnJpZGUKLQkJcHVibGljIHZvaWQgY2hhbmdlZChmaW5hbCBMb2NhdGlvbkV2ZW50IGV2ZW50KSB7Ci0JCQl0aGlzLmxhc3RTb3VyY2UgPSBldmVudC5sb2NhdGlvbjsKLQkJCXVybHMucHVzaCh0aGlzLmxhc3RTb3VyY2UpOwotCQl9Ci0KLQkJLyoqCi0JCSAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VsZWN0IHNwZWNpZmllZCBBTUFMVEhFQSBlbGVtZW50IGluIHRoZSBTcGhpbnggZWRpdG9yCi0JCSAqCi0JCSAqIEBwYXJhbSBlbGVtZW50Ci0JCSAqLwotCQlwcml2YXRlIHZvaWQgc2VsZWN0RWxlbWVudChmaW5hbCBFT2JqZWN0IGVsZW1lbnQpIHsKLQotCQkJZmluYWwgVVJJRWRpdG9ySW5wdXQgaW5wdXQgPSBFY29yZVVJVXRpbC5jcmVhdGVVUklFZGl0b3JJbnB1dChlbGVtZW50LmVSZXNvdXJjZSgpKTsKLQkJCWlmIChudWxsICE9IGlucHV0KSB7Ci0KLQkJCQlmaW5hbCBJV29ya2JlbmNoUGFnZSBwYWdlID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKSAhPSBudWxsCi0JCQkJCQk/IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpCi0JCQkJCQk6IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0V29ya2JlbmNoV2luZG93cygpWzBdLmdldEFjdGl2ZVBhZ2UoKTsKLQotCQkJCURpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgamF2YS5sYW5nLlJ1bm5hYmxlKCkgewotCi0JCQkJCUBPdmVycmlkZQotCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQlmaW5hbCBJRWRpdG9yUmVmZXJlbmNlW10gZWRpdG9yUmVmZXJlbmNlcyA9IHBhZ2UuZ2V0RWRpdG9yUmVmZXJlbmNlcygpOwotCi0JCQkJCQlmb3IgKGZpbmFsIElFZGl0b3JSZWZlcmVuY2UgaUVkaXRvclJlZmVyZW5jZSA6IGVkaXRvclJlZmVyZW5jZXMpIHsKLQotCi0JCQkJCQkJaWYgKGlFZGl0b3JSZWZlcmVuY2UuZ2V0SWQoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5zcGhpbngudWkuZWRpdG9yIikKLQkJCQkJCQkJCXx8IGlFZGl0b3JSZWZlcmVuY2UuZ2V0SWQoKS5lcXVhbHMoIm9yZy5pdGVhMi5hbWFsdGhlYS5zcGhpbngudWkuZWRpdG9yIikKLQkJCQkJCQkJfHwgaUVkaXRvclJlZmVyZW5jZS5nZXRJZCgpLmVxdWFscygiY29tLmluY2hyb24ucmVhbHRpbWUucm9vdC5wcmVzZW50YXRpb24uUm9vdEVkaXRvcklEIikpIHsKLQkJCQkJCQkJdHJ5IHsKLQkJCQkJCQkJCWZpbmFsIEZpbGVFZGl0b3JJbnB1dCBlZGl0b3JJbnB1dCA9IChGaWxlRWRpdG9ySW5wdXQpIGlFZGl0b3JSZWZlcmVuY2UKLQkJCQkJCQkJCQkJLmdldEVkaXRvcklucHV0KCk7Ci0KLQkJCQkJCQkJCWZpbmFsIElGaWxlIGZpbGVGcm9tRWRpdG9yID0gZWRpdG9ySW5wdXQuZ2V0RmlsZSgpOwotCi0JCQkJCQkJCQlmaW5hbCBSZXNvdXJjZSBlUmVzb3VyY2UgPSBlbGVtZW50LmVSZXNvdXJjZSgpOwotCi0JCQkJCQkJCQlmaW5hbCBVUkkgdXJpID0gZVJlc291cmNlLmdldFVSSSgpOwotCi0JCQkJCQkJCQlmaW5hbCBJRmlsZSBmaWxlRnJvbVJlc291cmNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKQotCQkJCQkJCQkJCQkuZ2V0RmlsZShuZXcgUGF0aCh1cmkudG9QbGF0Zm9ybVN0cmluZyh0cnVlKSkpOwotCi0KLQkJCQkJCQkJCWlmICgoZmlsZUZyb21FZGl0b3IgIT0gbnVsbCAmJiBmaWxlRnJvbVJlc291cmNlICE9IG51bGwpCi0JCQkJCQkJCQkJCSYmIGZpbGVGcm9tRWRpdG9yLnRvU3RyaW5nKCkuZXF1YWxzKGZpbGVGcm9tUmVzb3VyY2UudG9TdHJpbmcoKSkpIHsKLQotCQkJCQkJCQkJCWZpbmFsIElFZGl0b3JQYXJ0IGFjdGl2ZUVkaXRvciA9IGlFZGl0b3JSZWZlcmVuY2UuZ2V0RWRpdG9yKGZhbHNlKTsKLQotCQkJCQkJCQkJCWlmIChhY3RpdmVFZGl0b3IgaW5zdGFuY2VvZiBNdWx0aVBhZ2VFZGl0b3JQYXJ0KSB7Ci0KLQkJCQkJCQkJCQkJSURFLm9wZW5FZGl0b3IocGFnZSwgZWRpdG9ySW5wdXQsIGlFZGl0b3JSZWZlcmVuY2UuZ2V0SWQoKSk7Ci0KLQkJCQkJCQkJCQkJaWYgKGNhbkNvbGxhcHNlVHJlZUVsZW1lbnRzKCkpIHsKLQotCQkJCQkJCQkJCQkJTWV0aG9kIG1ldGhvZCA9IGFjdGl2ZUVkaXRvci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0Vmlld2VyIik7Ci0JCQkJCQkJCQkJCQkKLQkJCQkJCQkJCQkJCQotCQkJCQkJCQkJCQkJZmluYWwgVmlld2VyIHZpZXdlciA9ICAgKFZpZXdlcikgbWV0aG9kLmludm9rZShhY3RpdmVFZGl0b3IpOwotCi0JCQkJCQkJCQkJCQlpZiAodmlld2VyIGluc3RhbmNlb2YgVHJlZVZpZXdlcikgewotCQkJCQkJCQkJCQkJCSgoVHJlZVZpZXdlcikgdmlld2VyKS5jb2xsYXBzZUFsbCgpOwotCQkJCQkJCQkJCQkJCQotCQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJCQotCQkJCQkJCQkJCQlpZihhY3RpdmVFZGl0b3IgaW5zdGFuY2VvZiBCYXNpY1RyYW5zYWN0aW9uYWxGb3JtRWRpdG9yKSB7Ci0JCQkJCQkJCQkJCQkoKEJhc2ljVHJhbnNhY3Rpb25hbEZvcm1FZGl0b3IpIGFjdGl2ZUVkaXRvcikKLQkJCQkJCQkJCQkJCS5zZXRTZWxlY3Rpb25Ub1ZpZXdlcihDb2xsZWN0aW9ucy5zaW5nbGV0b24oZWxlbWVudCkpOwotCQkJCQkJCQkJCQkJCi0JCQkJCQkJCQkJCX1lbHNlIHsKLQotCQkJCQkJCQkJCQkJTWV0aG9kIG1ldGhvZCA9IGFjdGl2ZUVkaXRvci5nZXRDbGFzcygpLmdldE1ldGhvZCgiZ2V0Vmlld2VyIik7Ci0JCQkJCQkJCQkJCQkKLQkJCQkJCQkJCQkJCQotCQkJCQkJCQkJCQkJZmluYWwgVmlld2VyIHZpZXdlciA9ICAgKFZpZXdlcikgbWV0aG9kLmludm9rZShhY3RpdmVFZGl0b3IpOwotCi0JCQkJCQkJCQkJCQlpZiAodmlld2VyIGluc3RhbmNlb2YgVHJlZVZpZXdlcikgewotCQkJCQkJCQkJCQkJCSgoVHJlZVZpZXdlcikgdmlld2VyKS5zZXRTZWxlY3Rpb24obmV3IFN0cnVjdHVyZWRTZWxlY3Rpb24oZWxlbWVudCksIHRydWUpOwotCQkJCQkJCQkJCQkJCQotCQkJCQkJCQkJCQkJfQotCQkJCQkJCQkJCQl9Ci0JCQkJCQkJCQkJfQotCi0JCQkJCQkJCQl9Ci0JCQkJCQkJCX0KLQkJCQkJCQkJY2F0Y2ggKGZpbmFsIFBhcnRJbml0RXhjZXB0aW9uIHwgTm9TdWNoTWV0aG9kRXhjZXB0aW9uIHwgU2VjdXJpdHlFeGNlcHRpb24gfCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIHwgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCQkJCQl9Ci0JCQkJCQkJfQotCQkJCQkJfQotCi0JCQkJCX0KLQotCQkJCQlwcml2YXRlIGJvb2xlYW4gY2FuQ29sbGFwc2VUcmVlRWxlbWVudHMoKSB7Ci0JCQkJCQlyZXR1cm4gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKQotCQkJCQkJCQkuZ2V0Qm9vbGVhbihQcmVmZXJlbmNlQ29uc3RhbnRzLlBfUkVEUkFXX1RSRUVfT05fU0VMRUNUSU9OKTsKLQkJCQkJfQotCQkJCX0pOwotCi0JCQl9Ci0KLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKEtleUV2ZW50IGUpIHsKLQotCQkJaWYoZS5jaGFyYWN0ZXI9PSdcYicpIHsKLQkJCQlpc0JhY2tCdXR0b25QcmVzc2VkPXRydWU7Ci0JCQkJT2JqZWN0IHNvdXJjZSA9IGUuZ2V0U291cmNlKCk7Ci0JCQkJaWYgKHNvdXJjZSBpbnN0YW5jZW9mIEJyb3dzZXIpIHsKLQotCQkJCQl0cnkgewotCQkJCQkJaWYodXJscy5pc0VtcHR5KCk9PWZhbHNlKSB7Ci0JCQkJCQkJU3RyaW5nIHBvcCA9IHVybHMucG9wKCk7Ci0JCQkJCQkJCi0JCQkJCQkJaWYodXJscy5pc0VtcHR5KCk9PWZhbHNlKSB7Ci0JCQkJCQkJCXBvcCA9IHVybHMucG9wKCk7Ci0JCQkJCQkJCSgoQnJvd3Nlcikgc291cmNlKS5zZXRVcmwocG9wKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCQkJCS8vIHNraXBwaW5nIGV4Y2VwdGlvbiBsb2dnaW5nLCBhcyBoZXJlIGdvYWwgaXMgdG8gc3RpbGwgcmV0YWluIHRoZSBzYW1lIGltYWdlCi0JCQkJCX0KLQkJCQl9Ci0KLQkJCX0KLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCBrZXlSZWxlYXNlZChLZXlFdmVudCBlKSB7Ci0JCSAKLQkJCQotCQl9Ci0JfTsKLQotCXByaXZhdGUgdm9pZCBhZGRBY3Rpb25zKCkgewotCQlmaW5hbCBTdHJpbmcgUF9EUklMTF9ET1dOID0gQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKQotCQkJCS5nZXRTdHJpbmcoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0RSSUxMX0RPV04pOwotCi0JCWJvb2xlYW4gc3RhdGUgPSBmYWxzZTsKLQkJaWYgKFBfRFJJTExfRE9XTiA9PSBudWxsKSB7Ci0JCQlzdGF0ZSA9IHRydWU7Ci0JCX0KLQkJZWxzZSBpZiAoUF9EUklMTF9ET1dOLmVxdWFscygiZmFsc2UiKSkgewotCQkJc3RhdGUgPSB0cnVlOwotCQl9Ci0JCWVsc2UgaWYgKFBfRFJJTExfRE9XTi5lcXVhbHMoInRydWUiKSkgewotCQkJc3RhdGUgPSBmYWxzZTsKLQkJfQotCi0KLQkJZmluYWwgSUFjdGlvbkJhcnMgYWN0aW9uQmFycyA9IGdldFZpZXdTaXRlKCkuZ2V0QWN0aW9uQmFycygpOwotCi0JCWZpbmFsIElUb29sQmFyTWFuYWdlciB0b29sQmFyID0gYWN0aW9uQmFycy5nZXRUb29sQmFyTWFuYWdlcigpOwotCQlmaW5hbCBBY3Rpb24gYWN0aW9uID0gbmV3IEFjdGlvbigiU2VsZWN0IGluIEVkaXRvciIsIElBY3Rpb24uQVNfQ0hFQ0tfQk9YKSB7Ci0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHNldFRleHQoZmluYWwgU3RyaW5nIHRleHQpIHsKLQkJCQlzdXBlci5zZXRUZXh0KHRleHQpOwotCQkJfQotCi0JCQlAT3ZlcnJpZGUKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQotCQkJCWlmIChpc0NoZWNrZWQoKSA9PSBmYWxzZSkgewotCi0JCQkJCXRyeSB7Ci0KLQkJCQkJCUFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0VmFsdWUoUHJlZmVyZW5jZUNvbnN0YW50cy5QX0RSSUxMX0RPV04sIHRydWUpOwotCQkJCQl9Ci0JCQkJCWNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgewotCi0JCQkJCQl0aHJvdyBlOwotCQkJCQl9Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGlzQ2hlY2tlZCgpID09IHRydWUpIHsKLQotCQkJCQl0cnkgewotCQkJCQkJQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZShQcmVmZXJlbmNlQ29uc3RhbnRzLlBfRFJJTExfRE9XTiwgZmFsc2UpOwotCi0JCQkJCX0KLQkJCQkJY2F0Y2ggKGZpbmFsIEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQl0aHJvdyBlOwotCQkJCQl9Ci0JCQkJfQotCi0JCQl9Ci0KLQotCQl9OwotCi0JCWFjdGlvbi5zZXRDaGVja2VkKHN0YXRlKTsKLQotCQl0b29sQmFyLmFkZChhY3Rpb24pOwotCi0JfQotCi0JLyoqCi0JICogUGFzc2luZyB0aGUgZm9jdXMgcmVxdWVzdCB0byB0aGUgdmlld2VyJ3MgY29udHJvbC4KLQkgKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkudXBkYXRlQWN0aW9uQmFycygpOwotCi0KLQl9Ci0KLQlwdWJsaWMgQnJvd3NlciBnZXRCcm93c2VyKCkgewotCQlyZXR1cm4gdGhpcy5icm93c2VyOwotCX0KLQotCXB1YmxpYyBFTWFwPFN0cmluZywgT2JqZWN0PiBnZXRJZE9iamVjdHNNYXAoKSB7Ci0JCXJldHVybiB0aGlzLmlkT2JqZWN0c01hcDsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLy5wcm9qZWN0IGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZTk3OWEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxZTI4MDMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBFTUYgTWV0YW1vZGVsIFZpZXdlcgotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlcjtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAwLjguMwotQnVuZGxlLVZlbmRvcjogRWNsaXBzZSBBUFA0TUMKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2Uuc3BoaW54LmVtZgotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuYmFzZS5BY3RpdmF0b3IKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5iYXNlLAotIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZGlhbG9ncywKLSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnByZWZlcmVuY2VzLAotIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIudXRpbHMsCi0gb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci52aWV3cywKLSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnZpZXdzLnByb3ZpZGVycwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvcGx1Z2luLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYjliMDUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy40Ij8+Ci08cGx1Z2luPgotCi0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotICAgICAgPGNhdGVnb3J5Ci0gICAgICAgICAgICBuYW1lPSJNZXRhIE1vZGVsIEV4cGxvcmVyIgotICAgICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIuZXhwbG9yZXIudmlldy5jYXRlZ29yeSI+Ci0gICAgICA8L2NhdGVnb3J5PgotICAgICAgPHZpZXcKLSAgICAgICAgICAgIGFsbG93TXVsdGlwbGU9InRydWUiCi0gICAgICAgICAgICBjYXRlZ29yeT0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5leHBsb3Jlci52aWV3LmNhdGVnb3J5IgotICAgICAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIudmlld3MuTWV0YU1vZGVsRXhwbG9yZXJWaWV3IgotICAgICAgICAgICAgaWNvbj0iaWNvbnMvc2FtcGxlLmdpZiIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnZpZXdzLk1ldGFNb2RlbC1FeHBsb3JlclZpZXciCi0gICAgICAgICAgICBuYW1lPSJNZXRhIE1vZGVsIEV4cGxvcmVyIj4KLSAgICAgIDwvdmlldz4KLSAgIDwvZXh0ZW5zaW9uPgotICAgPGV4dGVuc2lvbgotICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcyI+Ci0gICAgICA8aW5pdGlhbGl6ZXIKLSAgICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnByZWZlcmVuY2VzLlByZWZlcmVuY2VJbml0aWFsaXplciI+Ci0gICAgICA8L2luaXRpYWxpemVyPgotICAgPC9leHRlbnNpb24+Ci0gICA8ZXh0ZW5zaW9uCi0gICAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkucHJlZmVyZW5jZVBhZ2VzIj4KLSAgICAgIDxwYWdlCi0gICAgICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5wcmVmZXJlbmNlcy5NZXRhTW9kZWxWaWV3ZXJQcmVmZXJlbmNlUGFnZSIKLSAgICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnBhZ2UxIgotICAgICAgICAgICAgbmFtZT0iTWV0YSBNb2RlbCBWaWV3ZXIiPgotICAgICAgPC9wYWdlPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNjg2MDQuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotCTxwYXJlbnQ+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZDwvcmVsYXRpdmVQYXRoPgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3I8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjAuOC4zPC92ZXJzaW9uPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlcjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0KLQk8YnVpbGQ+Ci0JCTxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+Ci0JCTxyZXNvdXJjZXM+Ci0JCQk8cmVzb3VyY2U+Ci0JCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4KLQkJCQk8ZXhjbHVkZXM+Ci0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4KLQkJCQk8L2V4Y2x1ZGVzPgotCQkJPC9yZXNvdXJjZT4KLQkJCTxyZXNvdXJjZT4KLQkJCQk8ZGlyZWN0b3J5PnNyYzwvZGlyZWN0b3J5PgotCQkJCTxleGNsdWRlcz4KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPgotCQkJCTwvZXhjbHVkZXM+Ci0JCQk8L3Jlc291cmNlPgotCQk8L3Jlc291cmNlcz4KLQkJPHBsdWdpbnM+Ci0JCQk8cGx1Z2luPgotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4yLjQuMTwvdmVyc2lvbj4KLQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJPGZpbGVzZXRzPgotCQkJCQkJPGZpbGVzZXQ+Ci0JCQkJCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4KLQkJCQkJCQk8aW5jbHVkZXM+Ci0JCQkJCQkJCTxpbmNsdWRlPioqPC9pbmNsdWRlPgotCQkJCQkJCTwvaW5jbHVkZXM+Ci0JCQkJCQk8L2ZpbGVzZXQ+Ci0JCQkJCTwvZmlsZXNldHM+Ci0JCQkJPC9jb25maWd1cmF0aW9uPgotCQkJPC9wbHVnaW4+Ci0JCQk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+MS43PC92ZXJzaW9uPgotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGlkPmFkZC1zb3VyY2U8L2lkPgotCQkJCQkJPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmFkZC1zb3VyY2U8L2dvYWw+Ci0JCQkJCQk8L2dvYWxzPgotCQkJCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCQkJPHNvdXJjZXM+Ci0JCQkJCQkJCTxzb3VyY2U+eHRlbmQtZ2VuPC9zb3VyY2U+Ci0JCQkJCQkJPC9zb3VyY2VzPgotCQkJCQkJPC9jb25maWd1cmF0aW9uPgotCQkJCQk8L2V4ZWN1dGlvbj4KLQkJCQk8L2V4ZWN1dGlvbnM+Ci0JCQk8L3BsdWdpbj4KLQkJCSAJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS54dGVuZDwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD54dGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+Mi4xNC4wPC92ZXJzaW9uPgotCQkJCTxkZXBlbmRlbmNpZXM+Ci0JCQkJIDxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamR0PC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamR0LmNvcmU8L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4zLjEzLjEwMjwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCQk8ZGVwZW5kZW5jeT4KLQkJCTxncm91cElkPm9yZy5lY2xpcHNlLmpkdDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpkdC5jb21waWxlci5hcHQ8L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4xLjMuMTEwPC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamR0PC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamR0LmNvbXBpbGVyLnRvb2w8L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4xLjIuMTAxPC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZW1mPC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuZW1mLmNvZGVnZW48L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4yLjExLjA8L3ZlcnNpb24+Ci0JCTwvZGVwZW5kZW5jeT4KLQkJCQk8L2RlcGVuZGVuY2llcz4KLQotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+Ci0JCQkJCQkJPGdvYWw+eHRlbmQtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJCTxnb2FsPnRlc3RDb21waWxlPC9nb2FsPgotCQkJCQkJCTxnb2FsPnh0ZW5kLXRlc3QtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJPC9nb2Fscz4KLQkJCQkJPC9leGVjdXRpb24+Ci0JCQkJPC9leGVjdXRpb25zPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5PgotCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCTwvcGx1Z2luPgotCQk8L3BsdWdpbnM+Ci0JPC9idWlsZD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci9iYXNlL0FjdGl2YXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvYmFzZS9BY3RpdmF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc0ODcxYi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL2VtZnV0aWxzL21ldGFtb2RlbHZpZXdlci9iYXNlL0FjdGl2YXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotIC8qKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgotICogCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCi0gKiAKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5iYXNlOwotCi0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgYWN0aXZhdG9yIGNsYXNzIGNvbnRyb2xzIHRoZSBwbHVnLWluIGxpZmUgY3ljbGUKLSAqLwotcHVibGljIGNsYXNzIEFjdGl2YXRvciBleHRlbmRzIEFic3RyYWN0VUlQbHVnaW4gewotCi0JLy8gVGhlIHBsdWctaW4gSUQKLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlciI7IC8vJE5PTi1OTFMtMSQKLQotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UKLQlwcml2YXRlIHN0YXRpYyBBY3RpdmF0b3IgcGx1Z2luOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yCi0JICovCi0JcHVibGljIEFjdGl2YXRvcigpIHsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkucGx1Z2luLkFic3RyYWN0VUlQbHVnaW4jc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RhcnQoZmluYWwgQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICoKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnBsdWdpbi5BYnN0cmFjdFVJUGx1Z2luI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RvcChmaW5hbCBCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlwbHVnaW4gPSBudWxsOwotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZQotCSAqCi0JICogQHJldHVybiB0aGUgc2hhcmVkIGluc3RhbmNlCi0JICovCi0JcHVibGljIHN0YXRpYyBBY3RpdmF0b3IgZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvbWV0YW1vZGVsdmlld2VyL3ZpZXdzL01ldGFNb2RlbEV4cGxvcmVyVmlldy5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvdmlld3MvTWV0YU1vZGVsRXhwbG9yZXJWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZWY5ZGMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9tZXRhbW9kZWx2aWV3ZXIvdmlld3MvTWV0YU1vZGVsRXhwbG9yZXJWaWV3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NzUgKzAsMCBAQAotIC8qKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgotICogCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCi0gKiAKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci52aWV3czsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci5iYXNlLkFjdGl2YXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLmRpYWxvZ3MuU2VsZWN0ZWRFbGVtZW50Q29udGVudERpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnByZWZlcmVuY2VzLk1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci51dGlscy5FbGVtZW50U2VhcmNoUGF0dGVybkZpbHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLnV0aWxzLlBsdWdpblV0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIudXRpbHMuUmVnaXN0ZXJFQ09SRWZpbGVzQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5tZXRhbW9kZWx2aWV3ZXIudmlld3MucHJvdmlkZXJzLlZpZXdDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci52aWV3cy5wcm92aWRlcnMuVmlld0xhYmVsUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVPYmplY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLkVQYWNrYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZS5SZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uSXRlbTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JVG9vbEJhck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLk1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQXJyYXlDb250ZW50UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Db21ib1ZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkRvdWJsZUNsaWNrRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JRG91YmxlQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5MYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRyZWVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3BoaW54LmVtZi5tZXRhbW9kZWwuSU1ldGFNb2RlbERlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3BoaW54LmVtZi5tZXRhbW9kZWwuTWV0YU1vZGVsRGVzY3JpcHRvclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZW51OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklBY3Rpb25CYXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuRmlsdGVyZWRUcmVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci0KLQotcHVibGljIGNsYXNzIE1ldGFNb2RlbEV4cGxvcmVyVmlldyBleHRlbmRzIFZpZXdQYXJ0IHsKLSAgICAvKioKLSAgICAgKiBUaGUgSUQgb2YgdGhlIHZpZXcgYXMgc3BlY2lmaWVkIGJ5IHRoZSBleHRlbnNpb24uCi0gICAgICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci52aWV3cy5NZXRhTW9kZWwtRXhwbG9yZXJWaWV3IjsKLSAgICBwcml2YXRlIHN0YXRpYyBpbnQgaWRfQ291bnRlciA9IDE7Ci0gICAgcHJpdmF0ZSBUcmVlVmlld2VyIHZpZXdlcjsKLSAgICBwcml2YXRlIEFjdGlvbiBmaWx0ZXJDbGFzc2VzQWN0aW9uOwotICAgIHByaXZhdGUgQWN0aW9uIHJlZ2lzdGVyRWNvcmVGaWxlc0FjdGlvbjsKLSAgICBwcml2YXRlIEFjdGlvbiBmaWx0ZXJBdHRyaWJ1dGVzQWN0aW9uOwotICAgIHByaXZhdGUgQWN0aW9uIGNsb25lVmlld0FjdGlvbjsKLSAgICBwcml2YXRlIGJvb2xlYW4gZmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbiA9IHRydWU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuOwotICAgIHByaXZhdGUgRWxlbWVudFNlYXJjaFBhdHRlcm5GaWx0ZXIgcGF0dGVybkZpbHRlcjsKLSAgICBwcml2YXRlIENvbWJvVmlld2VyIGNvbWJvX2Vjb3JlOwotCi0gICAgLyoqCi0gICAgICogVGhlIGNvbnN0cnVjdG9yLgotICAgICAqLwotICAgIHB1YmxpYyBNZXRhTW9kZWxFeHBsb3JlclZpZXcoKSB7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhpcyBpcyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBjcmVhdGUgdGhlIHZpZXdlciBhbmQgaW5pdGlhbGl6ZSBpdC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7Ci0gICAgICAgIHBhcmVudC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgZmFsc2UpKTsKLQotICAgICAgICBmaW5hbCBMYWJlbCBsYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIDApOwotCi0gICAgICAgIGxhYmVsLnNldFRleHQoIlNQSElOWCBSZWdpc3RyeSIpOwotCi0gICAgICAgIGxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKCkpOwotCi0gICAgICAgIGZpbmFsIENvbWJvIGNvbWJvID0gbmV3IENvbWJvKHBhcmVudCwKLSAgICAgICAgICAgICAgICBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuUkVBRF9PTkxZKTsKLQotICAgICAgICBmaW5hbCBMYWJlbCBsYWJlbF9lY29yZSA9IG5ldyBMYWJlbChwYXJlbnQsIDApOwotCi0gICAgICAgIGxhYmVsX2Vjb3JlLnNldFRleHQoIkVDT1JFIFJlZ2lzdHJ5Iik7Ci0KLSAgICAgICAgbGFiZWxfZWNvcmUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoKSk7Ci0KLSAgICAgICAgY29tYm9fZWNvcmUgPSBuZXcgQ29tYm9WaWV3ZXIocGFyZW50LAotICAgICAgICAgICAgICAgIFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5SRUFEX09OTFkpOwotCi0gICAgICAgIGZpbmFsIFJlZ2lzdHJ5IGVQYWNrYWdlUmVnaXN0cnkgPSBFUGFja2FnZS5SZWdpc3RyeS5JTlNUQU5DRTsKLQotICAgICAgICBmaW5hbCBTZXQ8U3RyaW5nPiBrZXlTZXQgPSBlUGFja2FnZVJlZ2lzdHJ5LmtleVNldCgpOwotICAgICAgICAvLwkJZm9yIChmaW5hbCBTdHJpbmcgc3RyaW5nIDogbmV3IFRyZWVTZXQ8U3RyaW5nPihrZXlTZXQpKSB7Ci0gICAgICAgIC8vCQkJCi0gICAgICAgIC8vCQkJY29tYm9fZWNvcmUuYWRkKHN0cmluZyk7Ci0gICAgICAgIC8vCQl9Ci0gICAgICAgIGNvbWJvX2Vjb3JlLnNldENvbnRlbnRQcm92aWRlcihBcnJheUNvbnRlbnRQcm92aWRlci5nZXRJbnN0YW5jZSgpKTsKLSAgICAgICAgY29tYm9fZWNvcmUuc2V0TGFiZWxQcm92aWRlcihuZXcgTGFiZWxQcm92aWRlcigpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFRleHQoT2JqZWN0IGVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmdldFRleHQoZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gYXJyYXlMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGtleVNldCk7Ci0KLSAgICAgICAgQ29sbGVjdGlvbnMuc29ydChhcnJheUxpc3QpOwotCi0gICAgICAgIGNvbWJvX2Vjb3JlLnNldElucHV0KGFycmF5TGlzdC50b0FycmF5KCkpOwotCi0gICAgICAgIGNvbWJvX2Vjb3JlLmdldENvbWJvKCkuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgewotICAgICAgICAgICAgICAgICAgICBjb21iby5kZXNlbGVjdEFsbCgpOwotCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZyB0ZXh0ID0gY29tYm9fZWNvcmUuZ2V0Q29tYm8oKS5nZXRUZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgRVBhY2thZ2UgZVBhY2thZ2UgPSBlUGFja2FnZVJlZ2lzdHJ5LmdldEVQYWNrYWdlKHRleHQpOwotCi0gICAgICAgICAgICAgICAgICAgIGdldFZpZXdlcigpLnNldElucHV0KGVQYWNrYWdlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICBmaW5hbCBMaXN0PElNZXRhTW9kZWxEZXNjcmlwdG9yPiBkZXNjcmlwdG9ycyA9IE1ldGFNb2RlbERlc2NyaXB0b3JSZWdpc3RyeS5JTlNUQU5DRS5nZXREZXNjcmlwdG9ycyhNZXRhTW9kZWxEZXNjcmlwdG9yUmVnaXN0cnkuQU5ZX01NKTsKLQotICAgICAgICBmb3IgKGZpbmFsIElNZXRhTW9kZWxEZXNjcmlwdG9yIGlNZXRhTW9kZWxEZXNjcmlwdG9yIDogZGVzY3JpcHRvcnMpIHsKLSAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpZGVudGlmaWVyID0gaU1ldGFNb2RlbERlc2NyaXB0b3IuZ2V0SWRlbnRpZmllcigpOwotICAgICAgICAgICAgY29tYm8uYWRkKGlkZW50aWZpZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgY29tYm8uYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgewotICAgICAgICAgICAgICAgICAgICBjb21ib19lY29yZS5nZXRDb21ibygpLmRlc2VsZWN0QWxsKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHRleHQgPSBjb21iby5nZXRUZXh0KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZmluYWwgSU1ldGFNb2RlbERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IE1ldGFNb2RlbERlc2NyaXB0b3JSZWdpc3RyeS5JTlNUQU5DRS5nZXREZXNjcmlwdG9yKHRleHQpOwotCi0gICAgICAgICAgICAgICAgICAgIGdldFZpZXdlcigpLnNldElucHV0KGRlc2NyaXB0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMucGF0dGVybkZpbHRlciA9IG5ldyBFbGVtZW50U2VhcmNoUGF0dGVybkZpbHRlcih0aGlzLmZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4sCi0gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbik7Ci0KLSAgICAgICAgZmluYWwgRmlsdGVyZWRUcmVlIGZpbHRlcmVkVHJlZSA9IG5ldyBGaWx0ZXJlZFRyZWUocGFyZW50LAotICAgICAgICAgICAgICAgIFNXVC5NVUxUSSB8IFNXVC5IX1NDUk9MTCB8IFNXVC5WX1NDUk9MTCB8IFNXVC5CT1JERVIsCi0gICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJuRmlsdGVyLCB0cnVlKTsKLQotICAgICAgICBmaWx0ZXJlZFRyZWUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCB0cnVlLCB0cnVlLAotICAgICAgICAgICAgICAgIDIsIDApKTsKLQotICAgICAgICB0aGlzLnZpZXdlciA9IGZpbHRlcmVkVHJlZS5nZXRWaWV3ZXIoKTsKLQotICAgICAgICBmaW5hbCBHcmlkRGF0YSBncmlkTGF5b3V0RGF0YSA9IG5ldyBHcmlkRGF0YSgpOwotICAgICAgICBncmlkTGF5b3V0RGF0YS5ob3Jpem9udGFsU3BhbiA9IDI7Ci0gICAgICAgIGdyaWRMYXlvdXREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotICAgICAgICBncmlkTGF5b3V0RGF0YS5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0gICAgICAgIGdyaWRMYXlvdXREYXRhLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotICAgICAgICBncmlkTGF5b3V0RGF0YS52ZXJ0aWNhbEFsaWdubWVudCA9IEdyaWREYXRhLkZJTEw7Ci0KLSAgICAgICAgdGhpcy52aWV3ZXIuZ2V0VHJlZSgpCi0gICAgICAgICAgICAgICAgICAgLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSwKLSAgICAgICAgICAgICAgICAyLCAwKSk7Ci0KLSAgICAgICAgdGhpcy52aWV3ZXIuc2V0Q29udGVudFByb3ZpZGVyKG5ldyBWaWV3Q29udGVudFByb3ZpZGVyKCkpOwotCi0gICAgICAgIHRoaXMudmlld2VyLnNldElucHV0KGdldFZpZXdTaXRlKCkpOwotCi0gICAgICAgIHRoaXMudmlld2VyLnNldExhYmVsUHJvdmlkZXIobmV3IFZpZXdMYWJlbFByb3ZpZGVyKCkpOwotCi0gICAgICAgIGdldFNpdGUoKS5zZXRTZWxlY3Rpb25Qcm92aWRlcih0aGlzLnZpZXdlcik7Ci0KLSAgICAgICAgbWFrZUFjdGlvbnMoKTsKLQotICAgICAgICBob29rQ29udGV4dE1lbnUoKTsKLQotICAgICAgICBob29rRG91YmxlQ2xpY2tBY3Rpb24oKTsKLQotICAgICAgICBjb250cmlidXRlVG9BY3Rpb25CYXJzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIFRyZWVWaWV3ZXIgZ2V0Vmlld2VyKCkgewotICAgICAgICByZXR1cm4gdGhpcy52aWV3ZXI7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGhvb2tDb250ZXh0TWVudSgpIHsKLSAgICAgICAgZmluYWwgTWVudU1hbmFnZXIgbWVudU1nciA9IG5ldyBNZW51TWFuYWdlcigiI1BvcHVwTWVudSIpIHsKLSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgSUNvbnRyaWJ1dGlvbkl0ZW1bXSBnZXRJdGVtcygpIHsKLSAgICAgICAgICAgICAgICAgICAgSUNvbnRyaWJ1dGlvbkl0ZW1bXSBtZW51SXRlbXMgPSBzdXBlci5nZXRJdGVtcygpOwotCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3Q8SUNvbnRyaWJ1dGlvbkl0ZW0+IGZpbHRlcmVkQ29udHJpYnV0aW9uSXRlbXMgPSBuZXcgTGlua2VkTGlzdDxJQ29udHJpYnV0aW9uSXRlbT4oKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKGZpbmFsIElDb250cmlidXRpb25JdGVtIGNvbnRyaWJ1dGlvbkl0ZW0gOiBtZW51SXRlbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY29udHJpYnV0aW9uSXRlbSAhPSBudWxsKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNvbnRyaWJ1dGlvbkl0ZW0uZ2V0SWQoKSAhPSBudWxsKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIShjb250cmlidXRpb25JdGVtLmdldElkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhcnRzV2l0aCgib3JnLmVjbGlwc2UuZW1mLmVjb3JlLmVkaXRvci5DcmVhdGVEeW5hbWljSW5zdGFuY2UiKSkpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQ29udHJpYnV0aW9uSXRlbXMuYWRkKGNvbnRyaWJ1dGlvbkl0ZW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgbWVudUl0ZW1zID0gbmV3IElDb250cmlidXRpb25JdGVtW2ZpbHRlcmVkQ29udHJpYnV0aW9uSXRlbXMuc2l6ZSgpXTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRDb250cmlidXRpb25JdGVtcy50b0FycmF5KG1lbnVJdGVtcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfTsKLQotICAgICAgICBtZW51TWdyLnNldFJlbW92ZUFsbFdoZW5TaG93bih0cnVlKTsKLSAgICAgICAgbWVudU1nci5hZGRNZW51TGlzdGVuZXIobmV3IElNZW51TGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgbWVudUFib3V0VG9TaG93KGZpbmFsIElNZW51TWFuYWdlciBtYW5hZ2VyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE1ldGFNb2RlbEV4cGxvcmVyVmlldy50aGlzLmZpbGxDb250ZXh0TWVudShtYW5hZ2VyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICBmaW5hbCBNZW51IG1lbnUgPSBtZW51TWdyLmNyZWF0ZUNvbnRleHRNZW51KHRoaXMudmlld2VyLmdldENvbnRyb2woKSk7Ci0gICAgICAgIHRoaXMudmlld2VyLmdldENvbnRyb2woKS5zZXRNZW51KG1lbnUpOwotICAgICAgICBnZXRTaXRlKCkucmVnaXN0ZXJDb250ZXh0TWVudShtZW51TWdyLCB0aGlzLnZpZXdlcik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNvbnRyaWJ1dGVUb0FjdGlvbkJhcnMoKSB7Ci0gICAgICAgIGZpbmFsIElBY3Rpb25CYXJzIGJhcnMgPSBnZXRWaWV3U2l0ZSgpLmdldEFjdGlvbkJhcnMoKTsKLSAgICAgICAgZmlsbExvY2FsUHVsbERvd24oYmFycy5nZXRNZW51TWFuYWdlcigpKTsKLSAgICAgICAgZmlsbExvY2FsVG9vbEJhcihiYXJzLmdldFRvb2xCYXJNYW5hZ2VyKCkpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBmaWxsTG9jYWxQdWxsRG93bihmaW5hbCBJTWVudU1hbmFnZXIgbWFuYWdlcikgewotICAgICAgICBtYW5hZ2VyLmFkZCh0aGlzLmZpbHRlckNsYXNzZXNBY3Rpb24pOwotICAgICAgICBtYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotICAgICAgICBtYW5hZ2VyLmFkZCh0aGlzLmZpbHRlckF0dHJpYnV0ZXNBY3Rpb24pOwotICAgICAgICBtYW5hZ2VyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotICAgICAgICBtYW5hZ2VyLmFkZCh0aGlzLmNsb25lVmlld0FjdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCBmaWxsQ29udGV4dE1lbnUoZmluYWwgSU1lbnVNYW5hZ2VyIG1hbmFnZXIpIHsKLSAgICAgICAgLy8gbWFuYWdlci5hZGQodGhpcy5maWx0ZXJDbGFzc2VzQWN0aW9uKTsKLSAgICAgICAgLy8gbWFuYWdlci5hZGQodGhpcy5maWx0ZXJBdHRyaWJ1dGVzQWN0aW9uKTsKLSAgICAgICAgLy8gbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLSAgICAgICAgLy8gdGhpcy5kcmlsbERvd25BZGFwdGVyLmFkZE5hdmlnYXRpb25BY3Rpb25zKG1hbmFnZXIpOwotICAgICAgICAvLyBPdGhlciBwbHVnLWlucyBjYW4gY29udHJpYnV0ZSB0aGVyZSBhY3Rpb25zIGhlcmUKLSAgICAgICAgLy8gbWFuYWdlci5hZGQobmV3IFNlcGFyYXRvcihJV29ya2JlbmNoQWN0aW9uQ29uc3RhbnRzLk1CX0FERElUSU9OUykpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBmaWxsTG9jYWxUb29sQmFyKGZpbmFsIElUb29sQmFyTWFuYWdlciBtYW5hZ2VyKSB7Ci0gICAgICAgIG1hbmFnZXIuYWRkKHRoaXMuZmlsdGVyQ2xhc3Nlc0FjdGlvbik7Ci0gICAgICAgIG1hbmFnZXIuYWRkKHRoaXMuZmlsdGVyQXR0cmlidXRlc0FjdGlvbik7Ci0gICAgICAgIG1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0KLSAgICAgICAgbWFuYWdlci5hZGQodGhpcy5yZWdpc3RlckVjb3JlRmlsZXNBY3Rpb24pOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBtYWtlQWN0aW9ucygpIHsKLSAgICAgICAgdGhpcy5maWx0ZXJDbGFzc2VzQWN0aW9uID0gbmV3IEFjdGlvbigiRmlsdGVyIGZvciBFQ2xhc3NpZmVycyIsCi0gICAgICAgICAgICAgICAgSUFjdGlvbi5BU19DSEVDS19CT1gpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4oZmFsc2UpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICB0aGlzLmZpbHRlckNsYXNzZXNBY3Rpb24uc2V0RW5hYmxlZCh0cnVlKTsKLQotICAgICAgICB0aGlzLmZpbHRlckNsYXNzZXNBY3Rpb24uc2V0VG9vbFRpcFRleHQoIkZpbHRlciBmb3IgRUNsYXNzaWZpZXJzIik7Ci0gICAgICAgIHRoaXMuZmlsdGVyQ2xhc3Nlc0FjdGlvbi5zZXRJbWFnZURlc2NyaXB0b3IoUGx1Z2luVXRpbHMuZ2V0SW1hZ2VEZXNjcmlwdG9yKAotICAgICAgICAgICAgICAgICJpY29ucy9jbGFzc19vYmoucG5nIikpOwotCi0gICAgICAgIHRoaXMuZmlsdGVyQXR0cmlidXRlc0FjdGlvbiA9IG5ldyBBY3Rpb24oIkZpbHRlciBmb3IgQXR0cmlidXRlcyIsCi0gICAgICAgICAgICAgICAgSUFjdGlvbi5BU19DSEVDS19CT1gpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrZWQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9OwotICAgICAgICB0aGlzLmZpbHRlckF0dHJpYnV0ZXNBY3Rpb24uc2V0VG9vbFRpcFRleHQoIkZpbHRlciBmb3IgQXR0cmlidXRlcyIpOwotICAgICAgICB0aGlzLmZpbHRlckF0dHJpYnV0ZXNBY3Rpb24uc2V0SW1hZ2VEZXNjcmlwdG9yKFBsdWdpblV0aWxzLmdldEltYWdlRGVzY3JpcHRvcigKLSAgICAgICAgICAgICAgICAiaWNvbnMvcHJvcF9wcy5naWYiKSk7Ci0KLSAgICAgICAgdGhpcy5jbG9uZVZpZXdBY3Rpb24gPSBuZXcgQWN0aW9uKCJDbG9uZSBWaWV3IiwgSUFjdGlvbi5BU19DSEVDS19CT1gpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Vmlld1NpdGUoKS5nZXRQYWdlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNob3dWaWV3KElELCBpZF9Db3VudGVyKysgKyAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVdvcmtiZW5jaFBhZ2UuVklFV19WSVNJQkxFKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfTsKLSAgICAgICAgdGhpcy5jbG9uZVZpZXdBY3Rpb24uc2V0VG9vbFRpcFRleHQoIkNsb25lIFZpZXciKTsKLSAgICAgICAgdGhpcy5jbG9uZVZpZXdBY3Rpb24uc2V0SW1hZ2VEZXNjcmlwdG9yKFBsdWdpblV0aWxzLmdldEltYWdlRGVzY3JpcHRvcigKLSAgICAgICAgICAgICAgICAiaWNvbnMvcHJvcF9wcy5naWYiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICAgICAgdGhpcy5yZWdpc3RlckVjb3JlRmlsZXNBY3Rpb24gPSBuZXcgQWN0aW9uKCJSZWdpc3RlciBFQ09SRSBmaWxlcyIpIHsKLSAgICAgICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vVE9ETzogYWRkIGltcGxlbWVudGF0aW9uIGZvciBDU1YgcmVwb3J0IGdlbmVyYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBpbnB1dCA9IHZpZXdlci5nZXRJbnB1dCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBGaWxlRGlhbG9nIGRpYWxvZyA9IG5ldyBGaWxlRGlhbG9nKERpc3BsYXkuZ2V0RGVmYXVsdCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QWN0aXZlU2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1dULk9QRU4gfCBTV1QuTVVMVEkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhuZXcgU3RyaW5nW10geyAiKi5lY29yZSIgfSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZy5vcGVuKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZGlhbG9nLmdldEZpbGVOYW1lKCkgPT0gbnVsbCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpYWxvZy5nZXRGaWxlTmFtZXMoKSA9PSBudWxsKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGZpbGVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGZpbGVOYW1lIDogZGlhbG9nLmdldEZpbGVOYW1lcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVQYXRoID0gZGlhbG9nLmdldEZpbHRlclBhdGgoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUuc2VwYXJhdG9yICsgZmlsZU5hbWU7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcy5hZGQoZmlsZVBhdGgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyRUNPUkVmaWxlc0FjdGlvbi5sb2FkRUNPUkVzKGZpbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21ib19lY29yZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihEaXNwbGF5LmdldERlZmF1bHQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QWN0aXZlU2hlbGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIiwgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgIHRoaXMucmVnaXN0ZXJFY29yZUZpbGVzQWN0aW9uLnNldFRvb2xUaXBUZXh0KAotICAgICAgICAgICAgIlJlZ2lzdGVyIEVDT1JFIGZpbGVzIik7Ci0gICAgICAgIHRoaXMucmVnaXN0ZXJFY29yZUZpbGVzQWN0aW9uLnNldEltYWdlRGVzY3JpcHRvcihQbHVnaW5VdGlscy5nZXRJbWFnZURlc2NyaXB0b3IoCi0gICAgICAgICAgICAgICAgImljb25zL3JlZ2lzdGVyX2Vjb3Jlcy5wbmciKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGhvb2tEb3VibGVDbGlja0FjdGlvbigpIHsKLSAgICAgICAgdGhpcy52aWV3ZXIuYWRkRG91YmxlQ2xpY2tMaXN0ZW5lcihuZXcgSURvdWJsZUNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgZG91YmxlQ2xpY2soZmluYWwgRG91YmxlQ2xpY2tFdmVudCBldmVudCkgewotICAgICAgICAgICAgICAgICAgICBmaW5hbCBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGV2ZW50LmdldFNlbGVjdGlvbigpOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBUcmVlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBPYmplY3QgZmlyc3RFbGVtZW50ID0gKChUcmVlU2VsZWN0aW9uKSBzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RFbGVtZW50IGluc3RhbmNlb2YgRU9iamVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoZWxsIHBhcmVudFNoZWxsID0gbnVsbDsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBkaXNwbGF5RGlhbG9nU3R5bGUgPSAoQWN0aXZhdG9yLmdldERlZmF1bHQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFByZWZlcmVuY2VTdG9yZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3RyaW5nKE1ldGFNb2RlbFZpZXdlclByZWZlcmVuY2VDb25zdGFudHMuUF9ESUFMT0dfRElTUExBWSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChkaXNwbGF5RGlhbG9nU3R5bGUgIT0gbnVsbCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlEaWFsb2dTdHlsZS5lcXVhbHMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0YU1vZGVsVmlld2VyUHJlZmVyZW5jZUNvbnN0YW50cy5WX09OX1RPUCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U2hlbGwgPSBuZXcgU2hlbGwoU1dULk9OX1RPUCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U2hlbGwgPSBuZXcgU2hlbGwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5hbCBTdHJpbmcgbmFtZSA9ICgoZmlyc3RFbGVtZW50IGluc3RhbmNlb2YgRUNsYXNzKSA/ICgoRUNsYXNzKSBmaXJzdEVsZW1lbnQpLmdldE5hbWUoKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyZW50U2hlbGwuc2V0VGV4dCgiRGV0YWlscyBvZiA6ICIgKyAoKEVDbGFzcykgZmlyc3RFbGVtZW50KS5lQ2xhc3MoKS5nZXROYW1lKCkgKyAiICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5hbCBUYXNrQmFyIHN5c3RlbVRhc2tCYXIgPSBwYXJlbnRTaGVsbC5nZXREaXNwbGF5KCkuZ2V0U3lzdGVtVGFza0JhcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZpbmFsIFRhc2tJdGVtIHRhc2tJdGVtID0gc3lzdGVtVGFza0Jhci5nZXRJdGVtKHBhcmVudFNoZWxsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhc2tJdGVtLnNldERhdGEocGFyZW50U2hlbGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhc2tJdGVtLnNldE92ZXJsYXlUZXh0KG5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRhc2tJdGVtLnNldFRleHQobmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNlbGVjdGVkRWxlbWVudENvbnRlbnREaWFsb2cocGFyZW50U2hlbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNpdGUoKSwgKEVPYmplY3QpIGZpcnN0RWxlbWVudCkub3BlbigpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUGFzc2luZyB0aGUgZm9jdXMgcmVxdWVzdCB0byB0aGUgdmlld2VyJ3MgY29udHJvbC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLSAgICAgICAgdGhpcy52aWV3ZXIuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0gICAgfQotCi0gICAgcHVibGljIEFjdGlvbiBnZXRGaWx0ZXJDbGFzc2VzQWN0aW9uKCkgewotICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJDbGFzc2VzQWN0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBBY3Rpb24gZ2V0RmlsdGVyQXR0cmlidXRlc0FjdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQXR0cmlidXRlc0FjdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0ZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4oKSB7Ci0gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW47Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNGaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbigpIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9yQXR0cmlidXRlc0Jvb2xlYW47Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0RmlsdGVyQ2xhc3Nlc0FjdGlvbihmaW5hbCBBY3Rpb24gZmlsdGVyQ2xhc3Nlc0FjdGlvbikgewotICAgICAgICB0aGlzLmZpbHRlckNsYXNzZXNBY3Rpb24gPSBmaWx0ZXJDbGFzc2VzQWN0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEZpbHRlckF0dHJpYnV0ZXNBY3Rpb24oZmluYWwgQWN0aW9uIGZpbHRlckF0dHJpYnV0ZXNBY3Rpb24pIHsKLSAgICAgICAgdGhpcy5maWx0ZXJBdHRyaWJ1dGVzQWN0aW9uID0gZmlsdGVyQXR0cmlidXRlc0FjdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaWx0ZXJGb3JFQ2xhc3NpZmllcnNCb29sZWFuKAotICAgICAgICBmaW5hbCBib29sZWFuIGZpbHRlckZvckVDbGFzc2lmaWVyc0Jvb2xlYW4pIHsKLSAgICAgICAgdGhpcy5maWx0ZXJGb3JFQ2xhc3NpZmllcnNCb29sZWFuID0gZmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbjsKLQotICAgICAgICB0aGlzLnBhdHRlcm5GaWx0ZXIuc2V0RmlsdGVyRm9yRUNsYXNzaWZpZXJzQm9vbGVhbihmaWx0ZXJGb3JFQ2xhc3NpZmllcnNCb29sZWFuKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRGaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbigKLSAgICAgICAgZmluYWwgYm9vbGVhbiBmaWx0ZXJGb3JBdHRyaWJ1dGVzQm9vbGVhbikgewotICAgICAgICB0aGlzLmZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuID0gZmlsdGVyRm9yQXR0cmlidXRlc0Jvb2xlYW47Ci0KLSAgICAgICAgdGhpcy5wYXR0ZXJuRmlsdGVyLnNldEZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuKGZpbHRlckZvckF0dHJpYnV0ZXNCb29sZWFuKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci8uY2xhc3NwYXRoIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNhN2JkYi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjgiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0YTQ5MTMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotL3RhcmdldAotL2JpbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyLy5wcm9qZWN0IGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMzQ5YWUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2OGE2MS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS44Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuOAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS44CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2Q2MTlkLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogRU1GIFJlc291cmNlc2V0IE1hcHBlcgotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlcjtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAwLjguMwotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci5BY3RpdmF0b3IKLUJ1bmRsZS1WZW5kb3I6IEVjbGlwc2UgQVBQNE1DCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLnNwaGlueC5lbWYKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44Ci1CdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvYWJvdXQuaHRtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NGY3ODEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLQk8aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotCTxwPk5vdmVtYmVyIDMwLCAyMDE3PC9wPgotCTxoMz5MaWNlbnNlPC9oMz4KLQotCTxwPgotCQlUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4KLQkJKCZxdW90O0NvbnRlbnQmcXVvdDspLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQKLQkJaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZQotCQlQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMKLQkJYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wPC9hPi4KLQkJRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LgotCTwvcD4KLQotCTxwPgotCQlJZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlCi0JCUZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eQotCQkoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLQkJYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiBDaGVjayB0aGUKLQkJUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaAotCQlsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQKLQkJYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UKLQkJY29kZSBpbiB0aGUgQ29udGVudCBhbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEKLQkJCWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi4KLQk8L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci9lcGwtMi4wLmh0bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci9lcGwtMi4wLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzN2ExODEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvZXBsLTIuMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLSAgPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Ci0gICAgPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDIuMDwvdGl0bGU+Ci0gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLSAgICAgIGJvZHkgewotICAgICAgICBtYXJnaW46IDEuNWVtIDNlbTsKLSAgICAgIH0KLSAgICAgIGgxewotICAgICAgICBmb250LXNpemU6MS41ZW07Ci0gICAgICB9Ci0gICAgICBoMnsKLSAgICAgICAgZm9udC1zaXplOjFlbTsKLSAgICAgICAgbWFyZ2luLWJvdHRvbTowLjVlbTsKLSAgICAgICAgbWFyZ2luLXRvcDoxZW07Ci0gICAgICB9Ci0gICAgICBwIHsKLSAgICAgICAgbWFyZ2luLXRvcDogIDAuNWVtOwotICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKLSAgICAgIH0KLSAgICAgIHVsLCBvbHsKLSAgICAgICAgbGlzdC1zdHlsZS10eXBlOm5vbmU7Ci0gICAgICB9Ci0gICAgPC9zdHlsZT4KLSAgPC9oZWFkPgotICA8Ym9keT4KLSAgICA8aDE+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMi4wPC9oMT4KLSAgICA8cD5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRQotICAgICAgUFVCTElDIExJQ0VOU0UgKCZsZHF1bztBR1JFRU1FTlQmcmRxdW87KS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTgotICAgICAgT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJiMwMzk7UyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImRlZmluaXRpb25zIj4xLiBERUZJTklUSU9OUzwvaDI+Ci0gICAgPHA+JmxkcXVvO0NvbnRyaWJ1dGlvbiZyZHF1bzsgbWVhbnM6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29udGVudAotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6Ci0gICAgICAgIDx1bD4KLSAgICAgICAgICA8bGk+aSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9saT4KLSAgICAgICAgICA8bGk+aWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L2xpPgotICAgICAgICA8L3VsPgotICAgICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbQotICAgICAgICBhbmQgYXJlIERpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KLSAgICAgICAgJmxkcXVvO29yaWdpbmF0ZXMmcmRxdW87IGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaAotICAgICAgICBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJiMwMzk7cyBiZWhhbGYuCi0gICAgICAgIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gdGhhdAotICAgICAgICBhcmUgbm90IE1vZGlmaWVkIFdvcmtzLgotICAgICAgPC9saT4KLSAgICA8L3VsPgotICAgIDxwPiZsZHF1bztDb250cmlidXRvciZyZHF1bzsgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3A+Ci0gICAgPHA+JmxkcXVvO0xpY2Vuc2VkIFBhdGVudHMmcmRxdW87IG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2gKLSAgICAgIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUKLSAgICAgIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1Byb2dyYW0mcmRxdW87IG1lYW5zIHRoZSBDb250cmlidXRpb25zIERpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzCi0gICAgICBBZ3JlZW1lbnQuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztSZWNpcGllbnQmcmRxdW87IG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLSAgICAgIG9yIGFueSBTZWNvbmRhcnkgTGljZW5zZSAoYXMgYXBwbGljYWJsZSksIGluY2x1ZGluZyBDb250cmlidXRvcnMuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztEZXJpdmF0aXZlIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyCi0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBQcm9ncmFtIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO01vZGlmaWVkIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyIGZvcm0gdGhhdAotICAgICAgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlCi0gICAgICBjb250ZW50cyBvZiB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nLCBmb3IgcHVycG9zZXMgb2YgY2xhcml0eSBhbnkgbmV3IGZpbGUKLSAgICAgIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBjb250YWlucyBhbnkgY29udGVudHMgb2YgdGhlIFByb2dyYW0uIE1vZGlmaWVkCi0gICAgICBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IGNvbnRhaW4gb25seSBkZWNsYXJhdGlvbnMsIGludGVyZmFjZXMsCi0gICAgICB0eXBlcywgY2xhc3Nlcywgc3RydWN0dXJlcywgb3IgZmlsZXMgb2YgdGhlIFByb2dyYW0gc29sZWx5IGluIGVhY2ggY2FzZQotICAgICAgaW4gb3JkZXIgdG8gbGluayB0bywgYmluZCBieSBuYW1lLCBvciBzdWJjbGFzcyB0aGUgUHJvZ3JhbSBvciBNb2RpZmllZAotICAgICAgV29ya3MgdGhlcmVvZi4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO0Rpc3RyaWJ1dGUmcmRxdW87IG1lYW5zIHRoZSBhY3RzIG9mIGEpIGRpc3RyaWJ1dGluZyBvciBiKSBtYWtpbmcgYXZhaWxhYmxlCi0gICAgICBpbiBhbnkgbWFubmVyIHRoYXQgZW5hYmxlcyB0aGUgdHJhbnNmZXIgb2YgYSBjb3B5LgotICAgIDwvcD4KLSAgICA8cD4mbGRxdW87U291cmNlIENvZGUmcmRxdW87IG1lYW5zIHRoZSBmb3JtIG9mIGEgUHJvZ3JhbSBwcmVmZXJyZWQgZm9yIG1ha2luZwotICAgICAgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwKLSAgICAgIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1NlY29uZGFyeSBMaWNlbnNlJnJkcXVvOyBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICAgICAgVmVyc2lvbiAyLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UsIGluY2x1ZGluZyBhbnkKLSAgICAgIGV4Y2VwdGlvbnMgb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcyBpZGVudGlmaWVkIGJ5IHRoZSBpbml0aWFsCi0gICAgICBDb250cmlidXRvci4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJncmFudC1vZi1yaWdodHMiPjIuIEdSQU5UIE9GIFJJR0hUUzwvaDI+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0Ci0gICAgICAgIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksCi0gICAgICAgIHB1YmxpY2x5IHBlcmZvcm0sIERpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi0gICAgICAgIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50Ci0gICAgICAgIGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCi0gICAgICAgIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKLSAgICAgICAgaWYgYW55LCBpbiBTb3VyY2UgQ29kZSBvciBvdGhlciBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsCi0gICAgICAgIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwKLSAgICAgICAgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKLSAgICAgICAgYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkCi0gICAgICAgIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueQotICAgICAgICBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIKLSAgICAgICAgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgotICAgICAgPC9saT4KLSAgICAgIDxsaT5jKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUKLSAgICAgICAgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKLSAgICAgICAgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlCi0gICAgICAgIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuCi0gICAgICAgIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKLSAgICAgICAgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLSAgICAgICAgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzCi0gICAgICAgIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZQotICAgICAgICByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLAotICAgICAgICBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvCi0gICAgICAgIGFsbG93IFJlY2lwaWVudCB0byBEaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQmIzAzOTtzCi0gICAgICAgIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCi0gICAgICA8L2xpPgotICAgICAgPGxpPmQpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKLSAgICAgICAgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQKLSAgICAgICAgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmUpIE5vdHdpdGhzdGFuZGluZyB0aGUgdGVybXMgb2YgYW55IFNlY29uZGFyeSBMaWNlbnNlLCBubyBDb250cmlidXRvcgotICAgICAgICBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyB0byBhbnkgUmVjaXBpZW50IChvdGhlciB0aGFuIHRob3NlIHNldCBmb3J0aAotICAgICAgICBpbiB0aGlzIEFncmVlbWVudCkgYXMgYSByZXN1bHQgb2Ygc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJlY2VpcHQgb2YgdGhlCi0gICAgICAgIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UgKGlmIHBlcm1pdHRlZCB1bmRlcgotICAgICAgICB0aGUgdGVybXMgb2YgU2VjdGlvbiAzKS4KLSAgICAgIDwvbGk+Ci0gICAgPC91bD4KLSAgICA8aDIgaWQ9InJlcXVpcmVtZW50cyI+My4gUkVRVUlSRU1FTlRTPC9oMj4KLSAgICA8cD4zLjEgSWYgYSBDb250cmlidXRvciBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybSwgdGhlbjo8L3A+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIHRoZSBQcm9ncmFtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSwgaW4KLSAgICAgICAgYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gMy4yLCBhbmQgdGhlIENvbnRyaWJ1dG9yIG11c3QgYWNjb21wYW55Ci0gICAgICAgIHRoZSBQcm9ncmFtIHdpdGggYSBzdGF0ZW1lbnQgdGhhdCB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBQcm9ncmFtCi0gICAgICAgIGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kIGluZm9ybXMgUmVjaXBpZW50cyBob3cgdG8KLSAgICAgICAgb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseQotICAgICAgICB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZTsgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSB0aGUgQ29udHJpYnV0b3IgbWF5IERpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgYSBsaWNlbnNlCi0gICAgICAgIGRpZmZlcmVudCB0aGFuIHRoaXMgQWdyZWVtZW50LCBwcm92aWRlZCB0aGF0IHN1Y2ggbGljZW5zZToKLSAgICAgICAgPHVsPgotICAgICAgICAgIDxsaT5pKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBvdGhlciBDb250cmlidXRvcnMgYWxsCi0gICAgICAgICAgICB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIG90aGVyIENvbnRyaWJ1dG9ycyBhbGwKLSAgICAgICAgICAgIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwKLSAgICAgICAgICAgIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpaSkgZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50cyYjMDM5OyByaWdodHMgaW4gdGhlCi0gICAgICAgICAgICBTb3VyY2UgQ29kZSB1bmRlciBzZWN0aW9uIDMuMjsgYW5kCi0gICAgICAgICAgPC9saT4KLSAgICAgICAgICA8bGk+aXYpIHJlcXVpcmVzIGFueSBzdWJzZXF1ZW50IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbnkgcGFydHkKLSAgICAgICAgICAgIHRvIGJlIHVuZGVyIGEgbGljZW5zZSB0aGF0IHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgc2VjdGlvbiAzLgotICAgICAgICAgIDwvbGk+Ci0gICAgICAgIDwvdWw+Ci0gICAgICA8L2xpPgotICAgIDwvdWw+Ci0gICAgPHA+My4yIFdoZW4gdGhlIFByb2dyYW0gaXMgRGlzdHJpYnV0ZWQgYXMgU291cmNlIENvZGU6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBvciBpZiB0aGUgUHJvZ3JhbSAoaSkKLSAgICAgICAgaXMgY29tYmluZWQgd2l0aCBvdGhlciBtYXRlcmlhbCBpbiBhIHNlcGFyYXRlIGZpbGUgb3IgZmlsZXMgbWFkZSBhdmFpbGFibGUKLSAgICAgICAgdW5kZXIgYSBTZWNvbmRhcnkgTGljZW5zZSwgYW5kIChpaSkgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgYXR0YWNoZWQgdG8KLSAgICAgICAgdGhlIFNvdXJjZSBDb2RlIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBvZiB0aGlzIEFncmVlbWVudCwKLSAgICAgICAgdGhlbiB0aGUgUHJvZ3JhbSBtYXkgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2gKLSAgICAgICAgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQKLSAgICAgIDwvbGk+Ci0gICAgICA8bGk+YikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uPC9saT4KLSAgICA8L3VsPgotICAgIDxwPjMuMyBDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssCi0gICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzLCBkaXNjbGFpbWVycyBvZiB3YXJyYW50eSwgb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5Ci0gICAgICAoJmxzcXVvO25vdGljZXMmcnNxdW87KSBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtIGZyb20gYW55IGNvcHkgb2YgdGhlIFByb2dyYW0gd2hpY2gKLSAgICAgIHRoZXkgRGlzdHJpYnV0ZSwgcHJvdmlkZWQgdGhhdCBDb250cmlidXRvcnMgbWF5IGFkZCB0aGVpciBvd24gYXBwcm9wcmlhdGUKLSAgICAgIG5vdGljZXMuCi0gICAgPC9wPgotICAgIDxoMiBpZD0iY29tbWVyY2lhbC1kaXN0cmlidXRpb24iPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9oMj4KLSAgICA8cD5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcwotICAgICAgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzCi0gICAgICBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUKLSAgICAgIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQKLSAgICAgIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlcgotICAgICAgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQotICAgICAgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmbGRxdW87Q29tbWVyY2lhbCBDb250cmlidXRvciZyZHF1bzspCi0gICAgICBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yCi0gICAgICAoJmxkcXVvO0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnJkcXVvOykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cwotICAgICAgKGNvbGxlY3RpdmVseSAmbGRxdW87TG9zc2VzJnJkcXVvOykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMKLSAgICAgIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50Ci0gICAgICBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uCi0gICAgICB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuCi0gICAgICBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZwotICAgICAgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvCi0gICAgICBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlCi0gICAgICBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsCi0gICAgICBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sCi0gICAgICB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZAotICAgICAgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KLSAgICA8L3A+Ci0gICAgPHA+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbQotICAgICAgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLSAgICAgIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi0gICAgICBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMKLSAgICAgIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3ImIzAzOTtzIHJlc3BvbnNpYmlsaXR5IGFsb25lLgotICAgICAgVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMKLSAgICAgIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLSAgICAgIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMKLSAgICAgIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgotICAgIDwvcD4KLSAgICA8aDIgaWQ9IndhcnJhbnR5Ij41LiBOTyBXQVJSQU5UWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZsZHF1bztBUyBJUyZyZHF1bzsgQkFTSVMsIFdJVEhPVVQKLSAgICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi0gICAgICBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi0gICAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCi0gICAgICBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCi0gICAgICBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKLSAgICAgIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUKLSAgICAgIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlCi0gICAgICB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yCi0gICAgICBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJkaXNjbGFpbWVyIj42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZCi0gICAgICBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gICAgICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwKLSAgICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gICAgICBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKLSAgICAgIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJnZW5lcmFsIj43LiBHRU5FUkFMPC9oMj4KLSAgICA8cD5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotICAgICAgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZQotICAgICAgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlCi0gICAgICBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50Ci0gICAgICBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCi0gICAgPC9wPgotICAgIDxwPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmCi0gICAgICAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKQotICAgICAgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50JiMwMzk7cyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyBncmFudGVkCi0gICAgICB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLSAgICA8L3A+Ci0gICAgPHA+QWxsIFJlY2lwaWVudCYjMDM5O3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0bwotICAgICAgY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZAotICAgICAgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nCi0gICAgICBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotICAgICAgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtCi0gICAgICBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCYjMDM5O3Mgb2JsaWdhdGlvbnMgdW5kZXIKLSAgICAgIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlCi0gICAgICBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgotICAgIDwvcD4KLSAgICA8cD5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsCi0gICAgICBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkKLSAgICAgIG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZCByZXNlcnZlcwotICAgICAgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudAotICAgICAgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0Ci0gICAgICB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50Ci0gICAgICBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzCi0gICAgICB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YKLSAgICAgIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotICAgICAgKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIERpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24KLSAgICAgIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcKLSAgICAgIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBEaXN0cmlidXRlCi0gICAgICB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uCi0gICAgPC9wPgotICAgIDxwPkV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudAotICAgICAgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55Ci0gICAgICBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLAotICAgICAgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZAotICAgICAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IGlzIGludGVuZGVkCi0gICAgICB0byBiZSBlbmZvcmNlYWJsZSBieSBhbnkgZW50aXR5IHRoYXQgaXMgbm90IGEgQ29udHJpYnV0b3Igb3IgUmVjaXBpZW50LgotICAgICAgTm8gdGhpcmQtcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBjcmVhdGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImV4aGliaXQtYSI+RXhoaWJpdCBBICZuZGFzaDsgRm9ybSBvZiBTZWNvbmRhcnkgTGljZW5zZXMgTm90aWNlPC9oMj4KLSAgICA8cD4mbGRxdW87VGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIAotICAgIAlTZWNvbmRhcnkgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIAotICAgIAlpbiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IHtuYW1lIGxpY2Vuc2UocyksCi0gICAgCXZlcnNpb24ocyksIGFuZCBleGNlcHRpb25zIG9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgaGVyZX0uJnJkcXVvOwotICAgIDwvcD4KLSAgICA8YmxvY2txdW90ZT4KLSAgICAgIDxwPlNpbXBseSBpbmNsdWRpbmcgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgdGhpcyBFeGhpYml0IEEKLSAgICAgICAgaXMgbm90IHN1ZmZpY2llbnQgdG8gbGljZW5zZSB0aGUgU291cmNlIENvZGUgdW5kZXIgU2Vjb25kYXJ5IExpY2Vuc2VzLgotICAgICAgPC9wPgotICAgICAgPHA+SWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgZmlsZSwKLSAgICAgICAgdGhlbiBZb3UgbWF5IGluY2x1ZGUgdGhlIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgTElDRU5TRSBmaWxlIGluIGEKLSAgICAgICAgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKLSAgICAgICAgc3VjaCBhIG5vdGljZS4KLSAgICAgIDwvcD4KLSAgICAgIDxwPllvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLjwvcD4KLSAgICA8L2Jsb2NrcXVvdGU+Ci0gIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci9wbHVnaW4ueG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvcGx1Z2luLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ2MjQ1OC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgotPHBsdWdpbj4KLSAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5zdGFydHVwIj4KLSAgICAgICAgICA8c3RhcnR1cCBjbGFzcz0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci5SZXNvdXJjZVNldE1hcHBlciIvPgotICAgPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNWZkYjguLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotCTxwYXJlbnQ+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmV4dHJhY3Rvci5idWlsZDwvcmVsYXRpdmVQYXRoPgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3I8L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5leHRyYWN0b3IuYnVpbGQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjAuOC4zPC92ZXJzaW9uPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlcjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0KLQk8YnVpbGQ+Ci0JCTxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+Ci0JCTxyZXNvdXJjZXM+Ci0JCQk8cmVzb3VyY2U+Ci0JCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4KLQkJCQk8ZXhjbHVkZXM+Ci0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4KLQkJCQk8L2V4Y2x1ZGVzPgotCQkJPC9yZXNvdXJjZT4KLQkJCTxyZXNvdXJjZT4KLQkJCQk8ZGlyZWN0b3J5PnNyYzwvZGlyZWN0b3J5PgotCQkJCTxleGNsdWRlcz4KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPgotCQkJCTwvZXhjbHVkZXM+Ci0JCQk8L3Jlc291cmNlPgotCQk8L3Jlc291cmNlcz4KLQkJPHBsdWdpbnM+Ci0JCQk8cGx1Z2luPgotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4yLjQuMTwvdmVyc2lvbj4KLQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJPGZpbGVzZXRzPgotCQkJCQkJPGZpbGVzZXQ+Ci0JCQkJCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4KLQkJCQkJCQk8aW5jbHVkZXM+Ci0JCQkJCQkJCTxpbmNsdWRlPioqPC9pbmNsdWRlPgotCQkJCQkJCTwvaW5jbHVkZXM+Ci0JCQkJCQk8L2ZpbGVzZXQ+Ci0JCQkJCTwvZmlsZXNldHM+Ci0JCQkJPC9jb25maWd1cmF0aW9uPgotCQkJPC9wbHVnaW4+Ci0JCQk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+MS43PC92ZXJzaW9uPgotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGlkPmFkZC1zb3VyY2U8L2lkPgotCQkJCQkJPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmFkZC1zb3VyY2U8L2dvYWw+Ci0JCQkJCQk8L2dvYWxzPgotCQkJCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCQkJPHNvdXJjZXM+Ci0JCQkJCQkJCTxzb3VyY2U+eHRlbmQtZ2VuPC9zb3VyY2U+Ci0JCQkJCQkJPC9zb3VyY2VzPgotCQkJCQkJPC9jb25maWd1cmF0aW9uPgotCQkJCQk8L2V4ZWN1dGlvbj4KLQkJCQk8L2V4ZWN1dGlvbnM+Ci0JCQk8L3BsdWdpbj4KLQkJIAk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnh0ZW5kPC9ncm91cElkPgotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4yLjE0LjA8L3ZlcnNpb24+Ci0JCQkJPGRlcGVuZGVuY2llcz4KLQkJCQkgPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZHQ8L2dyb3VwSWQ+Ci0JCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZHQuY29yZTwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjMuMTMuMTAyPC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamR0PC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamR0LmNvbXBpbGVyLmFwdDwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjEuMy4xMTA8L3ZlcnNpb24+Ci0JCTwvZGVwZW5kZW5jeT4KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZHQ8L2dyb3VwSWQ+Ci0JCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZHQuY29tcGlsZXIudG9vbDwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjEuMi4xMDE8L3ZlcnNpb24+Ci0JCTwvZGVwZW5kZW5jeT4KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5lbWY8L2dyb3VwSWQ+Ci0JCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5lbWYuY29kZWdlbjwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjIuMTEuMDwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCQkJCTwvZGVwZW5kZW5jaWVzPgotCi0JCQkJPGV4ZWN1dGlvbnM+Ci0JCQkJCTxleGVjdXRpb24+Ci0JCQkJCQk8Z29hbHM+Ci0JCQkJCQkJPGdvYWw+Y29tcGlsZTwvZ29hbD4KLQkJCQkJCQk8Z29hbD54dGVuZC1pbnN0YWxsLWRlYnVnLWluZm88L2dvYWw+Ci0JCQkJCQkJPGdvYWw+dGVzdENvbXBpbGU8L2dvYWw+Ci0JCQkJCQkJPGdvYWw+eHRlbmQtdGVzdC1pbnN0YWxsLWRlYnVnLWluZm88L2dvYWw+Ci0JCQkJCQk8L2dvYWxzPgotCQkJCQk8L2V4ZWN1dGlvbj4KLQkJCQk8L2V4ZWN1dGlvbnM+Ci0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCTxvdXRwdXREaXJlY3Rvcnk+eHRlbmQtZ2VuPC9vdXRwdXREaXJlY3Rvcnk+Ci0JCQkJPC9jb25maWd1cmF0aW9uPgotCQkJPC9wbHVnaW4+Ci0JCTwvcGx1Z2lucz4KLQk8L2J1aWxkPgotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvcmVzb3VyY2VzZXQvbWFwcGVyL0FjdGl2YXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9yZXNvdXJjZXNldC9tYXBwZXIvQWN0aXZhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxN2NjZDkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9yZXNvdXJjZXNldC9tYXBwZXIvQWN0aXZhdG9yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0gLyoqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCi0gKiAKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KLSAqIAotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyOwotCi1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotcHVibGljIGNsYXNzIEFjdGl2YXRvciBpbXBsZW1lbnRzIEJ1bmRsZUFjdGl2YXRvciB7Ci0KLQlwcml2YXRlIHN0YXRpYyBCdW5kbGVDb250ZXh0IGNvbnRleHQ7Ci0KLQlzdGF0aWMgQnVuZGxlQ29udGV4dCBnZXRDb250ZXh0KCkgewotCQlyZXR1cm4gY29udGV4dDsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0JICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgc3RhcnQoZmluYWwgQnVuZGxlQ29udGV4dCBidW5kbGVDb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJQWN0aXZhdG9yLmNvbnRleHQgPSBidW5kbGVDb250ZXh0OwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUFjdGl2YXRvciNzdG9wKG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0KQotCSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIHN0b3AoZmluYWwgQnVuZGxlQ29udGV4dCBidW5kbGVDb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJQWN0aXZhdG9yLmNvbnRleHQgPSBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9yZXNvdXJjZXNldC9tYXBwZXIvUmVzb3VyY2VTZXRNYXBwZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucmVzb3VyY2VzZXQubWFwcGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvZW1mdXRpbHMvcmVzb3VyY2VzZXQvbWFwcGVyL1Jlc291cmNlU2V0TWFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZjJkMjIuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9lbWZ1dGlscy9yZXNvdXJjZXNldC9tYXBwZXIvUmVzb3VyY2VTZXRNYXBwZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSAvKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDE3IC0gMjAxOCBSb2JlcnQgQm9zY2ggR21iSC4KLSAqIAotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLwotICogCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5FUGFja2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5lbWYuZWNvcmUucmVzb3VyY2UuUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnJlc291cmNlLlJlc291cmNlU2V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5yZXNvdXJjZS5pbXBsLlJlc291cmNlU2V0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLm1ldGFtb2RlbC5JTWV0YU1vZGVsRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLm1ldGFtb2RlbC5NZXRhTW9kZWxEZXNjcmlwdG9yUmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0YXJ0dXA7Ci0KLXB1YmxpYyBjbGFzcyBSZXNvdXJjZVNldE1hcHBlciBpbXBsZW1lbnRzIElTdGFydHVwIHsKLQotCUBPdmVycmlkZQotCXB1YmxpYyB2b2lkIGVhcmx5U3RhcnR1cCgpIHsKLQkJCi0JCSAgTGlzdDxJTWV0YU1vZGVsRGVzY3JpcHRvcj4gZGVzY3JpcHRvcnMgPSBNZXRhTW9kZWxEZXNjcmlwdG9yUmVnaXN0cnkuSU5TVEFOQ0UKLQkJCQkuZ2V0RGVzY3JpcHRvcnMoTWV0YU1vZGVsRGVzY3JpcHRvclJlZ2lzdHJ5LkFOWV9NTSk7Ci0JCSAgCi0JCSAgZm9yIChJTWV0YU1vZGVsRGVzY3JpcHRvciBpTWV0YU1vZGVsRGVzY3JpcHRvciA6IGRlc2NyaXB0b3JzKSB7Ci0JCQkKLQkJCSAgUmVzb3VyY2VTZXQgcmVzb3VyY2VTZXQ9bmV3IFJlc291cmNlU2V0SW1wbCgpOwotCQkJCQotCQkJCWZvciAoRVBhY2thZ2UgZVBhY2thZ2UgOiBpTWV0YU1vZGVsRGVzY3JpcHRvci5nZXRFUGFja2FnZXMoKSkgewotCQkJCQkKLQkJCQkJUmVzb3VyY2UgZVJlc291cmNlID0gZVBhY2thZ2UuZVJlc291cmNlKCk7Ci0JCQkJCQotCQkJCQlpZihlUmVzb3VyY2UuZ2V0UmVzb3VyY2VTZXQoKT09bnVsbCl7Ci0KLQkJCQkJCSgoUmVzb3VyY2VTZXRJbXBsKXJlc291cmNlU2V0KS5nZXRSZXNvdXJjZXMoKS5hZGQoZVJlc291cmNlKTsKLQkJCQkJCQotCQkJCQl9Ci0JCQkJfQotCQl9Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzM1YjU2Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wb20ueG1sCkBAIC0wLDAgKzEsMTQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzPC9ncm91cElkPgorICA8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+CisgIDx2ZXJzaW9uPjAuOS44LVNOQVBTSE9UPC92ZXJzaW9uPgorICAgCisgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisgIAorICA8bmFtZT5FY2xpcHNlIEFQUDRNQyBFTUYgVmlld2VyczwvbmFtZT4KKyAKKyAgPHByb3BlcnRpZXM+CisgICAgPHR5Y2hvLnZlcnNpb24+MS42LjA8L3R5Y2hvLnZlcnNpb24+CisgICAgCisgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+CisgICAgPHByb2plY3QucmVwb3J0aW5nLm91dHB1dEVuY29kaW5nPlVURi04PC9wcm9qZWN0LnJlcG9ydGluZy5vdXRwdXRFbmNvZGluZz4KKyAgPC9wcm9wZXJ0aWVzPgorIAorCTxwbHVnaW5SZXBvc2l0b3JpZXM+CisJCTxwbHVnaW5SZXBvc2l0b3J5PgorCQkJPGlkPmNiaTwvaWQ+CisJCQk8dXJsPmh0dHBzOi8vcmVwby5lY2xpcHNlLm9yZy9jb250ZW50L3JlcG9zaXRvcmllcy9jYmktcmVsZWFzZXMvPC91cmw+CisJCQk8cmVsZWFzZXM+CisJCQkJPGVuYWJsZWQ+dHJ1ZTwvZW5hYmxlZD4KKwkJCTwvcmVsZWFzZXM+CisJCQk8c25hcHNob3RzPgorCQkJCTxlbmFibGVkPmZhbHNlPC9lbmFibGVkPgorCQkJPC9zbmFwc2hvdHM+CisJCTwvcGx1Z2luUmVwb3NpdG9yeT4KKwk8L3BsdWdpblJlcG9zaXRvcmllcz4KKworICA8bW9kdWxlcz4KKyAgCQk8bW9kdWxlPnBsdWdpbnM8L21vZHVsZT4KKwkJPG1vZHVsZT5mZWF0dXJlczwvbW9kdWxlPgorCQk8bW9kdWxlPnJlbGVuZzwvbW9kdWxlPgorICA8L21vZHVsZXM+CisgIAorICAJPGJ1aWxkPgorCQk8cGx1Z2lucz4KKwkJCTxwbHVnaW4+CisJCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG88L2dyb3VwSWQ+CisJCQkJPGFydGlmYWN0SWQ+dHljaG8tbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+CisJCQkJPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKwkJCTwvcGx1Z2luPgorCisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnR5Y2hvLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8dmVyYm9zZT50cnVlPC92ZXJib3NlPgorCQkJCQk8c291cmNlPjEuODwvc291cmNlPgorCQkJCQk8dGFyZ2V0PjEuODwvdGFyZ2V0PgorCQkJCTwvY29uZmlndXJhdGlvbj4KKwkJCTwvcGx1Z2luPgorCisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnRhcmdldC1wbGF0Zm9ybS1jb25maWd1cmF0aW9uPC9hcnRpZmFjdElkPgorCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+CisJCQkJPGNvbmZpZ3VyYXRpb24+CisJCQkJCTxlbnZpcm9ubWVudHM+CisJCQkJCQk8ZW52aXJvbm1lbnQ+CisJCQkJCQkJPG9zPmxpbnV4PC9vcz4KKwkJCQkJCQk8d3M+Z3RrPC93cz4KKwkJCQkJCQk8YXJjaD54ODZfNjQ8L2FyY2g+CisJCQkJCQk8L2Vudmlyb25tZW50PgorCQkJCQkJPGVudmlyb25tZW50PgorCQkJCQkJCTxvcz53aW4zMjwvb3M+CisJCQkJCQkJPHdzPndpbjMyPC93cz4KKwkJCQkJCQk8YXJjaD54ODZfNjQ8L2FyY2g+CisJCQkJCQk8L2Vudmlyb25tZW50PgorCQkJCQkJPGVudmlyb25tZW50PgorCQkJCQkJCTxvcz5tYWNvc3g8L29zPgorCQkJCQkJCTx3cz5jb2NvYTwvd3M+CisJCQkJCQkJPGFyY2g+eDg2XzY0PC9hcmNoPgorCQkJCQkJPC9lbnZpcm9ubWVudD4KKwkJCQkJPC9lbnZpcm9ubWVudHM+CisKKwkJCQkJPHRhcmdldD4KKwkJCQkJCTxhcnRpZmFjdD4KKwkJCQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnM8L2dyb3VwSWQ+CisJCQkJCQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnRhcmdldDwvYXJ0aWZhY3RJZD4KKwkJCQkJCQk8dmVyc2lvbj4wLjkuOC1TTkFQU0hPVDwvdmVyc2lvbj4KKwkJCQkJCTwvYXJ0aWZhY3Q+CisJCQkJCTwvdGFyZ2V0PgorCQkJCQk8dGFyZ2V0RGVmaW5pdGlvbkluY2x1ZGVTb3VyY2U+aG9ub3I8L3RhcmdldERlZmluaXRpb25JbmNsdWRlU291cmNlPgorCQkJCTwvY29uZmlndXJhdGlvbj4KKwkJCTwvcGx1Z2luPgorCQkJCisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnR5Y2hvLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8IS0tIGFyZ0xpbmU+JHt0eWNoby50ZXN0QXJnTGluZX08L2FyZ0xpbmU+IC0tPgorCQkJCQk8Zm9ya01vZGU+bmV2ZXI8L2ZvcmtNb2RlPgorCQkJCQk8aW5jbHVkZXM+CisJCQkJCQk8aW5jbHVkZT4qKi8qVGVzdC4qPC9pbmNsdWRlPgorCQkJCQk8L2luY2x1ZGVzPgorCQkJCTwvY29uZmlndXJhdGlvbj4KKwkJCTwvcGx1Z2luPgorCisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnR5Y2hvLXNvdXJjZS1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4KKworCQkJCTxleGVjdXRpb25zPgorCQkJCQk8ZXhlY3V0aW9uPgorCQkJCQkJPGlkPnBsdWdpbi1zb3VyY2U8L2lkPgorCQkJCQkJPGdvYWxzPgorCQkJCQkJCTxnb2FsPnBsdWdpbi1zb3VyY2U8L2dvYWw+CisJCQkJCQk8L2dvYWxzPgorCQkJCQk8L2V4ZWN1dGlvbj4KKwkJCQk8L2V4ZWN1dGlvbnM+CisJCQk8L3BsdWdpbj4KKwkJPC9wbHVnaW5zPgorCTwvYnVpbGQ+CisKKwk8cHJvZmlsZXM+CisJCTxwcm9maWxlPgorCQkJPGlkPnNpZ248L2lkPgorCQkJPGJ1aWxkPgorCQkJCTxwbHVnaW5zPgorCQkJCQk8cGx1Z2luPgorCQkJCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuY2JpLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisJCQkJCQk8YXJ0aWZhY3RJZD5lY2xpcHNlLWphcnNpZ25lci1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJCQk8dmVyc2lvbj4xLjEuMzwvdmVyc2lvbj4KKwkJCQkJCTxleGVjdXRpb25zPgorCQkJCQkJCTxleGVjdXRpb24+CisJCQkJCQkJCTxpZD5zaWduPC9pZD4KKwkJCQkJCQkJPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgorCQkJCQkJCQk8Z29hbHM+CisJCQkJCQkJCQk8Z29hbD5zaWduPC9nb2FsPgorCQkJCQkJCQk8L2dvYWxzPgorCQkJCQkJCTwvZXhlY3V0aW9uPgorCQkJCQkJPC9leGVjdXRpb25zPgorCQkJCQk8L3BsdWdpbj4KKwkJCQk8L3BsdWdpbnM+CisJCQk8L2J1aWxkPgorCQk8L3Byb2ZpbGU+CisJPC9wcm9maWxlcz4gIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvLy5naXRpZ25vcmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby8uZ2l0aWdub3JlCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5wMnJlcG8vLnByb2plY3QKc2ltaWxhcml0eSBpbmRleCA4NiUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvLy5wcm9qZWN0CnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvLy5wcm9qZWN0CmluZGV4IDc1YTQ4YTAuLjVjMmU2N2IgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby8ucHJvamVjdAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvLy5wcm9qZWN0CkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwbzwvbmFtZT4KKwk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvPC9uYW1lPgogCTxjb21tZW50PjwvY29tbWVudD4KIAk8cHJvamVjdHM+CiAJPC9wcm9qZWN0cz4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby9hYm91dC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnAycmVwby9hYm91dC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5wMnJlcG8vYWJvdXQuaHRtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnAycmVwby9hYm91dC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvL2NhdGVnb3J5LnhtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5wMnJlcG8vY2F0ZWdvcnkueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMTI5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvL2NhdGVnb3J5LnhtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHNpdGU+CisgICA8ZmVhdHVyZSBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLmdyYXBoaWNhbCI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0iQVBQNE1DIEVNRiBWaWV3ZXJzIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi5tZXRhbW9kZWx2aWV3ZXJzIj4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJBUFA0TUMgRU1GIFZpZXdlcnMiLz4KKyAgIDwvZmVhdHVyZT4KKyAgIDxjYXRlZ29yeS1kZWYgbmFtZT0iQVBQNE1DIEVNRiBWaWV3ZXJzIiBsYWJlbD0ib3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzIi8+Cis8L3NpdGU+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5wMnJlcG8vZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnAycmVwby9lcGwtMi4wLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby9lcGwtMi4wLmh0bWwKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5wMnJlcG8vZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0MDM4OQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy5wMnJlcG8vcG9tLnhtbApAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KKworICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKyAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnAycmVwbzwvYXJ0aWZhY3RJZD4KKworICA8cGFja2FnaW5nPmVjbGlwc2UtcmVwb3NpdG9yeTwvcGFja2FnaW5nPgorCisgIDxwYXJlbnQ+CisgIAk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnM8L2dyb3VwSWQ+CisgIAk8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+CisJPHZlcnNpb24+MC45LjgtU05BUFNIT1Q8L3ZlcnNpb24+CisgIAk8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgPC9wYXJlbnQ+Cis8L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL3NpdGVUZW1wbGF0ZS9pbmRleC5odG1sIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnAycmVwby9zaXRlVGVtcGxhdGUvaW5kZXguaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL3NpdGVUZW1wbGF0ZS9pbmRleC5odG1sCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMucDJyZXBvL3NpdGVUZW1wbGF0ZS9pbmRleC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy50YXJnZXQvLnByb2plY3QKc2ltaWxhcml0eSBpbmRleCA3NiUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkLy5wcm9qZWN0CmNvcHkgdG8gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnRhcmdldC8ucHJvamVjdAppbmRleCBlNTE1NWU0Li5iYmU4YzY4IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC8ucHJvamVjdAorKysgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0Ly5wcm9qZWN0CkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkPC9uYW1lPgorCTxuYW1lPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy50YXJnZXQ8L25hbWU+CiAJPGNvbW1lbnQ+PC9jb21tZW50PgogCTxwcm9qZWN0cz4KIAk8L3Byb2plY3RzPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL2Fib3V0Lmh0bWwgYi9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0L2Fib3V0Lmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5wMnJlcG8vYWJvdXQuaHRtbApjb3B5IHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy50YXJnZXQvYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL2VwbC0yLjAuaHRtbCBiL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy50YXJnZXQvZXBsLTIuMC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMucDJyZXBvL2VwbC0yLjAuaHRtbApjb3B5IHRvIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy50YXJnZXQvZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0L29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy50YXJnZXQudGFyZ2V0IGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnRhcmdldC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0LnRhcmdldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzI0YWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnRhcmdldC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0LnRhcmdldApAQCAtMCwwICsxLDQ3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzw/cGRlPz4KKzwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KKzx0YXJnZXQgbmFtZT0iRU1GIEdyYXBoaWNhbCBWaWV3ZXIgVGFyZ2V0IiBzZXF1ZW5jZU51bWJlcj0iMTU4NDk2NjMzMyI+CisgIDxsb2NhdGlvbnM+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9InRydWUiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uuc2RrLmlkZSIgdmVyc2lvbj0iNC44LjAuSTIwMTgwNjExLTA1MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueGNvcmUubGliLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMy4wLnYyMDE4MDEyNS0xMTMwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjE0LjAudjIwMTgwNTI5LTExNTciLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYudHJhbnNhY3Rpb24uZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMS4xMi4wLjIwMTgwNTE0MDgyNCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi52YWxpZGF0aW9uLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMTIuMC4yMDE4MDUwMzA3MTciLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYud29ya3NwYWNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMTIuMC4yMDE4MDUxNDA4MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC5ydW50aW1lLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjIuMTQuMC52MjAxODA1MjMtMDkzNyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnh0ZXh0LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjE0LjAudjIwMTgwNTIzLTA5MzciLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjE0LjAudjIwMTgwNTIzLTA5MzciLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5saWIuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi4xNC4wLnYyMDE4MDUyMi0xNjMxIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRlbmQuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjIuMTQuMC52MjAxODA1MjMtMDkzNyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnhwYW5kLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjIuMC52MjAxNjA1MjYwMzE1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNsaSIgdmVyc2lvbj0iMS4yLjAudjIwMTQwNDI3MDIyMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sYW5nIiB2ZXJzaW9uPSIyLjYuMC52MjAxNDA0MjcwMjIwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5sb2c0aiIgdmVyc2lvbj0iMS4yLjE1LnYyMDEwMTIwNzA4MTUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnhlcmNlcyIgdmVyc2lvbj0iMi45LjAudjIwMTEwMTIxMTYxNyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUueGFsYW4iIHZlcnNpb249IjIuNy4xLnYyMDEwMDUwODA0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnhtbC5yZXNvbHZlciIgdmVyc2lvbj0iMS4yLjAudjIwMTAwNTA4MDQwMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXIiIHZlcnNpb249IjIuNy4xLnYyMDEwMDUwODA0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJqYXZheC54bWwiIHZlcnNpb249IjEuMy40LnYyMDEwMDUwODA0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuamRvbSIgdmVyc2lvbj0iMS4xLjEudjIwMTEwMTE1MTQwMCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3VhdmEiIHZlcnNpb249IjIxLjAuMC52MjAxNzAyMDYtMTQyNSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5hcGkiIHZlcnNpb249IjEuNy4yLnYyMDEyMTEwOC0xMjUwIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL3Bob3RvbiIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9InRydWUiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uuc3BoaW54LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjExLjIuMjAxODAyMjMwODA1Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3NwaGlueC91cGRhdGVzLzAuMTEueCIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9InRydWUiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ibmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmxpYi5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMjAxOS4xMSIvPgorICAgICAgPHVuaXQgaWQ9Im5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMS4yNCIvPgorICAgICAgPHVuaXQgaWQ9Im5ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC5lY29yZS5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMS4yNCIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9oYWxsdmFyZC5naXRodWIuaW8vcGxhbnR1bWwiLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJ0cnVlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmxpY2Vuc2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi4wLjIudjIwMTgxMDE2LTIyMTAiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvY2JpL3VwZGF0ZXMvbGljZW5zZSIvPgorICAgIDwvbG9jYXRpb24+CisgIDwvbG9jYXRpb25zPgorPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0L29yZy5lY2xpcHNlLmFwcDRtYy5lbWYudmlld2Vycy50YXJnZXQudHBkIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnRhcmdldC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0LnRwZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQzMjdkCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZi52aWV3ZXJzLnRhcmdldC9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mLnZpZXdlcnMudGFyZ2V0LnRwZApAQCAtMCwwICsxLDQzIEBACit0YXJnZXQgIkVNRiBHcmFwaGljYWwgVmlld2VyIFRhcmdldCIKKword2l0aCBzb3VyY2UgYWxsRW52aXJvbm1lbnRzCisKK2xvY2F0aW9uICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvcGhvdG9uIiB7CisJb3JnLmVjbGlwc2Uuc2RrLmlkZQorCW9yZy5lY2xpcHNlLmVtZi5lY29yZS54Y29yZS5saWIuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi5zZGsuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi50cmFuc2FjdGlvbi5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UuZW1mLnZhbGlkYXRpb24uZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi53b3Jrc3BhY2UuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnJ1bnRpbWUuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnNkay5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UueHRleHQueGJhc2UuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnhiYXNlLmxpYi5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UueHRlbmQuc2RrLmZlYXR1cmUuZ3JvdXAKKwlvcmcuZWNsaXBzZS54cGFuZC5zZGsuZmVhdHVyZS5ncm91cAorCW9yZy5hcGFjaGUuY29tbW9ucy5jbGkKKwlvcmcuYXBhY2hlLmNvbW1vbnMubGFuZworCW9yZy5hcGFjaGUubG9nNGoKKwlvcmcuYXBhY2hlLnhlcmNlcworCW9yZy5hcGFjaGUueGFsYW4KKwlvcmcuYXBhY2hlLnhtbC5yZXNvbHZlcgorCW9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXIKKwlqYXZheC54bWwKKwlvcmcuamRvbQorCWNvbS5nb29nbGUuZ3VhdmEKKwlvcmcuc2xmNGouYXBpCit9CisKK2xvY2F0aW9uICJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3BoaW54L3VwZGF0ZXMvMC4xMS54IiB7CisJb3JnLmVjbGlwc2Uuc3BoaW54LnNkay5mZWF0dXJlLmdyb3VwCit9CisKK2xvY2F0aW9uICJodHRwOi8vaGFsbHZhcmQuZ2l0aHViLmlvL3BsYW50dW1sIiB7CisJbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmxpYi5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAgWzEuMjAxOS4xMSwxLjIwMTkuMTFdCisJbmV0LnNvdXJjZWZvcmdlLnBsYW50dW1sLmZlYXR1cmUuZmVhdHVyZS5ncm91cCBbMS4xLjI0LDEuMS4yNF0KKwluZXQuc291cmNlZm9yZ2UucGxhbnR1bWwuZWNvcmUuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIFsxLjEuMjQsMS4xLjI0XQorfQorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2NiaS91cGRhdGVzL2xpY2Vuc2UiIHsKKwlvcmcuZWNsaXBzZS5saWNlbnNlLmZlYXR1cmUuZ3JvdXAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNjMzFmNwotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vLmdpdGlnbm9yZQpAQCAtMCwwICsxLDggQEAKKy5tZXRhZGF0YS8KKworIyBFY2xpcHNlIHRhcmdldCBkaXJlY3RvcmllcworYmluLwordGFyZ2V0LworCit4dGVuZC1nZW4vCitvdXRwdXQvKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vLm12bi9leHRlbnNpb25zLnhtbCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vLm12bi9leHRlbnNpb25zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTBhOWVjCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi8ubXZuL2V4dGVuc2lvbnMueG1sCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxleHRlbnNpb25zPgorICA8ZXh0ZW5zaW9uPgorICAgIDxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvLmV4dHJhczwvZ3JvdXBJZD4KKyAgICA8YXJ0aWZhY3RJZD50eWNoby1wb21sZXNzPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPgorICA8L2V4dGVuc2lvbj4KKzwvZXh0ZW5zaW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxOTdkYjMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0vYmluLwotL3h0ZW5kLWdlbi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL2Rldl91dGlscy9kZXYudGFyZ2V0IGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9kZXZfdXRpbHMvZGV2LnRhcmdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2MjlhMC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL2Rldl91dGlscy9kZXYudGFyZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMTk0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPD9wZGUgdmVyc2lvbj0iMy44Ij8+PHRhcmdldCBuYW1lPSJPeHlnZW4tUGxhdGZvcm0iIHNlcXVlbmNlTnVtYmVyPSIzIj4KLTxsb2NhdGlvbnM+Ci08bG9jYXRpb24gaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVTb3VyY2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0Lm5hc2hvcm4uZXh0ZW5zaW9uIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9veHlnZW4vMjAxNzA2MDIxMDAwIi8+Ci08L2xvY2F0aW9uPgotPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlU291cmNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGVuZC5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC5kb2NzLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRleHQuZXhhbXBsZXMuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC5yZWRpc3QuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC5ydW50aW1lLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRleHQuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRleHQudWkuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnh0ZXh0LnhiYXNlLmxpYi5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnh0ZXh0Lnh0ZXh0LnVpLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL3RtZi94dGV4dC91cGRhdGVzL3JlbGVhc2VzLzIuMTMuMCIvPgotPC9sb2NhdGlvbj4KLTxsb2NhdGlvbiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZVNvdXJjZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci08dW5pdCBpZD0iY29tLmdvb2dsZS5pbmplY3QiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0iY29tLnN1bi54bWwuYmluZCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJqYXZhX2N1cC5ydW50aW1lIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9ImphdmF4LmFjdGl2YXRpb24iIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0iamF2YXguYW5ub3RhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJqYXZheC5lbCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJqYXZheC5zZXJ2bGV0IiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9ImphdmF4LndzLnJzIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9ImphdmF4LnhtbCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJqYXZheC54bWwuYmluZCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJqYXZheC54bWwuc3RyZWFtIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hbnRsci5ydW50aW1lIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYmF0aWsuY3NzIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYmF0aWsudXRpbCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuYXBhY2hlLmJhdGlrLnV0aWwuZ3VpIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUuYmNlbCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmlvIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sYW5nIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5tYXRoIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5tYXRoMyIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuYXBhY2hlLmxvZzRqIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5hcGFjaGUueGFsYW4iIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmFwYWNoZS54ZXJjZXMiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmFwYWNoZS54bWwucmVzb2x2ZXIiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmFwYWNoZS54bWwuc2VyaWFsaXplciIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWFzeW1vY2siIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmpkb20iIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLnNsZjRqLmxvZzRqIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5zbGY0ai5sb2c0ai5zb3VyY2UiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLnN3dGNoYXJ0IiB2ZXJzaW9uPSIwLjAuMCIvPgotPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMTgwMzMwMDExNDU3L3JlcG9zaXRvcnkvIi8+Ci08L2xvY2F0aW9uPgotPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlU291cmNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5saWNlbnNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2NiaS91cGRhdGVzL2xpY2Vuc2UvIi8+Ci08L2xvY2F0aW9uPgotPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlU291cmNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lYXNlLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lYXNlLmxhbmcuamF2YXNjcmlwdC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWFzZS5sYW5nLmp2bS5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWFzZS5tb2R1bGVzLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lYXNlLnVpLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWFzZS91cGRhdGUvcmVsZWFzZSIvPgotPC9sb2NhdGlvbj4KLTxsb2NhdGlvbiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZVNvdXJjZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuanN0LmNvbW1vbi5mcHJvai5lbmFibGVtZW50LmpkdC5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJfYWRhcHRlcnMuZXh0LmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyX2FkYXB0ZXJzLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyX2NvcmUuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXJfdWkuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb24uZnByb2ouZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS53c3QuY29tbW9uX2NvcmUuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLndzdC5jb21tb25fdWkuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLndzdC5qc2R0LmNocm9taXVtLmRlYnVnLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS53c3QuanNkdC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlcl9hZGFwdGVycy5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2Uud3N0LnNlcnZlcl9jb3JlLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS53c3Quc2VydmVyX3VpLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvd2VidG9vbHMvZG93bmxvYWRzL2Ryb3BzL1IzLjkuNS9SLTMuOS41LTIwMTgwNDA5MTAwNzQwL3JlcG9zaXRvcnkiLz4KLTwvbG9jYXRpb24+Ci08bG9jYXRpb24gaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVTb3VyY2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotPHVuaXQgaWQ9ImNvbS5nb29nbGUucHJvdG9idWYiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuYWNjZWxlby5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmNkdC5yZW1vdGUuY29yZSIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5jZHQuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZHJhdzJkLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWNmLmNvcmUuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVjZi5jb3JlLnNzbC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWNmLmRpc2NvdmVyeS5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWNmLmZpbGV0cmFuc2Zlci5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWNmLmZpbGV0cmFuc2Zlci5odHRwY2xpZW50NC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWNmLmZpbGV0cmFuc2Zlci5odHRwY2xpZW50NC5zc2wuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVjZi5maWxldHJhbnNmZXIuc3NsLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lY2YucmVtb3Rlc2VydmljZS5zZGsuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVlZi5leHQud2lkZ2V0cy5yZWZlcmVuY2UuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVlZi5zZGsuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVnaXQuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lZ2l0Lm15bHluLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZWdpdC5zb3VyY2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueGNvcmUuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLmVlZi5lZHQtZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lZWYuZXh0ZW5kZWQtZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi5lZWYucnVudGltZS1mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLmVlZi5zZGstZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi5td2Uuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLm13ZTIubGFuZ3VhZ2Uuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLm13ZTIucnVudGltZS5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYucGFyc2xleS5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnRyYW5zYWN0aW9uLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi52YWxpZGF0aW9uLmRvYy5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi52YWxpZGF0aW9uLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnZhbGlkYXRpb24ub2NsLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnZhbGlkYXRpb24ub2NsLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi52YWxpZGF0aW9uLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi52YWxpZGF0aW9uLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIuZGlzY292ZXJ5LmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guc2VydmVyLmpldHR5LmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZnguY29kZS5lZGl0b3IuY29uZmlndXJhdGlvbiIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5meC5pZGUuYmFzaWMuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmZ4LmlkZS5jb252ZXJ0ZXIuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmZ4LmlkZS5jc3MuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmZ4LmlkZS5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZnguaWRlLmZ4Z3JhcGguZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmZ4LmlkZS5meG1sLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5meC5pZGUuZ21vZC5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZnguaWRlLmwxMG4uZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmZ4LmlkZS5sZGVmLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5meC5pZGUucGRlLmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5meC5pZGUucnJvYm90LmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5meC5ydW50aW1lLm1pbi5mZWF0dXJlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ2VmLmNvbW1vbi5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5nZWYuZG90LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdlZi5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdlZi5meC5kb2MuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5nZWYuZnguZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5nZWYuZnguamZhY2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5nZWYuZnguc3d0LmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ2VmLmdlb21ldHJ5LmNvbnZlcnQuZnguZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5nZWYuZ2VvbWV0cnkuZG9jLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ2VmLmdlb21ldHJ5LmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ2VmLmdyYXBoLmRvYy5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdlZi5ncmFwaC5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdlZi5sYXlvdXQuZG9jLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ2VmLmxheW91dC5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdlZi5tdmMuZG9jLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ2VmLm12Yy5meC5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdlZi5tdmMuZngudWkuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5nZWYuemVzdC5meC51aS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdlZi56ZXN0LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdtZi5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuZ3JhcGhpdGkuZXhwb3J0LmZlYXR1cmUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5ncmFwaGl0aS5zZGsuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpkdC5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2Uub2NsLmFsbC5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5wZGUuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5wbGF0Zm9ybS5pZGUiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UucGxhdGZvcm0uc2RrIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnJlbW90ZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnNwaGlueC5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS51bWwyLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLndzdC54bWxfdWkuZmVhdHVyZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnhwYW5kLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnhzZC5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC4wLjAiLz4KLTx1bml0IGlkPSJvcmcuc2xmNGouYXBpIiB2ZXJzaW9uPSIwLjAuMCIvPgotPHVuaXQgaWQ9Im9yZy5zbGY0ai5pbXBsLmxvZzRqMTIiIHZlcnNpb249IjAuMC4wIi8+Ci08dW5pdCBpZD0ib3JnLnNsZjRqLmpjbCIgdmVyc2lvbj0iMC4wLjAiLz4KLTxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvcmVsZWFzZXMvb3h5Z2VuIi8+Ci08L2xvY2F0aW9uPgotPGxvY2F0aW9uIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlU291cmNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWxzLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuOS4yLjIwMTgxMDMxMTMwMiIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbHMuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuOS4yLjIwMTgxMDMxMTMwMiIvPgotPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS53b3JrZmxvdy5td2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC45LjIuMjAxODEwMzExMzAyIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLndvcmtmbG93Lm13ZS5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC45LjIuMjAxODEwMzExMzAyIi8+Ci08dW5pdCBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLndvcmtmbG93LnNjcmlwdGluZy5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjkuMi4yMDE4MTAzMTEzMDIiLz4KLTx1bml0IGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEud29ya2Zsb3cuc2NyaXB0aW5nLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjkuMi4yMDE4MTAzMTEzMDIiLz4KLTxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvYXBwNG1jL3VwZGF0ZXNpdGVzL3JlbGVhc2VzLzAuOS4yLyIvPgotPC9sb2NhdGlvbj4KLTwvbG9jYXRpb25zPgotPC90YXJnZXQ+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL2Rldl91dGlscy93b3JraW5nU2V0cy5wc2YgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL2Rldl91dGlscy93b3JraW5nU2V0cy5wc2YKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2YmY5ZTEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9kZXZfdXRpbHMvd29ya2luZ1NldHMucHNmCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwc2YgdmVyc2lvbj0iMi4wIj4KLSAKLTx3b3JraW5nU2V0cyBlZGl0UGFnZUlkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVdvcmtpbmdTZXRQYWdlIiBpZD0iMTUyOTkxNDYyNTM4MF8xMiIgbGFiZWw9ImJ1aWxkIiBuYW1lPSJidWlsZCI+Ci08aXRlbSBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLm1vZGVsLlJlc291cmNlRmFjdG9yeSIgcGF0aD0iL2Rldl91dGlscyIgdHlwZT0iNCIvPgotPGl0ZW0gZWxlbWVudElEPSI9b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlciIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KLTxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgotPGl0ZW0gZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5tb2RlbC5SZXNvdXJjZUZhY3RvcnkiIHBhdGg9Ii9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvIiB0eXBlPSI0Ii8+Ci08aXRlbSBlbGVtZW50SUQ9Ij1vcmcuZWNsaXBzZS5hcHA0bWMuaW5jaHJvbi50cmFuc2Zvcm1hdGlvbi5pbnN0YWxsZXIiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5Ii8+Ci08aXRlbSBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLm1vZGVsLlJlc291cmNlRmFjdG9yeSIgcGF0aD0iL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZCIgdHlwZT0iNCIvPgotPC93b3JraW5nU2V0cz4KLTx3b3JraW5nU2V0cyBlZGl0UGFnZUlkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVdvcmtpbmdTZXRQYWdlIiBpZD0iMTUyOTIxNTMzMjY0MV8xIiBsYWJlbD0iY29yZSIgbmFtZT0iY29yZSI+Ci08aXRlbSBlbGVtZW50SUQ9Ij1vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24iIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5Ii8+Ci08aXRlbSBlbGVtZW50SUQ9Ij1vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucyIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KLTwvd29ya2luZ1NldHM+Ci08d29ya2luZ1NldHMgZWRpdFBhZ2VJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFXb3JraW5nU2V0UGFnZSIgaWQ9IjE1Mjk0MzkwMjk2NzdfOCIgbGFiZWw9ImV4YW1wbGVzIiBuYW1lPSJleGFtcGxlcyI+Ci08aXRlbSBlbGVtZW50SUQ9Ij1hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgotPGl0ZW0gZWxlbWVudElEPSI9YXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ybSIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KLTxpdGVtIGVsZW1lbnRJRD0iPWFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5Ii8+Ci08aXRlbSBlbGVtZW50SUQ9Ij1hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uc2FtcGxlbW9kZWwiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5Ii8+Ci08L3dvcmtpbmdTZXRzPgotPHdvcmtpbmdTZXRzIGVkaXRQYWdlSWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhV29ya2luZ1NldFBhZ2UiIGlkPSIxNTI5OTE1MjAyNTU0XzE4IiBsYWJlbD0iRXhhbXBsZXNfQnVpbGRlcnMiIG5hbWU9IkV4YW1wbGVzX0J1aWxkZXJzIj4KLTxpdGVtIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubW9kZWwuUmVzb3VyY2VGYWN0b3J5IiBwYXRoPSIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmZlYXR1cmUiIHR5cGU9IjQiLz4KLTxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5Ii8+Ci08aXRlbSBlbGVtZW50SUQ9Ij1vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlciIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KLTxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy5pbmNocm9uLnRyYW5zZm9ybWF0aW9uLmluc3RhbGxlciIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KLTwvd29ya2luZ1NldHM+Ci08d29ya2luZ1NldHMgZWRpdFBhZ2VJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFXb3JraW5nU2V0UGFnZSIgaWQ9IjE1Mjk5MTUzMjc5NzdfMjMiIGxhYmVsPSJmZWF0dXJlcyIgbmFtZT0iZmVhdHVyZXMiPgotPGl0ZW0gZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5tb2RlbC5SZXNvdXJjZUZhY3RvcnkiIHBhdGg9Ii9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuZmVhdHVyZSIgdHlwZT0iNCIvPgotPGl0ZW0gZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5tb2RlbC5SZXNvdXJjZUZhY3RvcnkiIHBhdGg9Ii9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uY29yZS5mZWF0dXJlIiB0eXBlPSI0Ii8+Ci08aXRlbSBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLm1vZGVsLlJlc291cmNlRmFjdG9yeSIgcGF0aD0iL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50by5pbmNocm9uLmZlYXR1cmUiIHR5cGU9IjQiLz4KLTxpdGVtIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubW9kZWwuUmVzb3VyY2VGYWN0b3J5IiBwYXRoPSIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLjNyZHBhcnR5LmZlYXR1cmUiIHR5cGU9IjQiLz4KLTwvd29ya2luZ1NldHM+Ci08d29ya2luZ1NldHMgZWRpdFBhZ2VJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFXb3JraW5nU2V0UGFnZSIgaWQ9IjE1MjkyMTUzMzgxNDhfMiIgbGFiZWw9ImluY2hyb24iIG5hbWU9ImluY2hyb24iPgotPGl0ZW0gZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5tb2RlbC5SZXNvdXJjZUZhY3RvcnkiIHBhdGg9Ii9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udG8uaW5jaHJvbi5mZWF0dXJlIiB0eXBlPSI0Ii8+Ci08aXRlbSBlbGVtZW50SUQ9Ij1vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtLnRvLmluY2hyb24uYXBwIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgotPGl0ZW0gZWxlbWVudElEPSI9b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybSIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiLz4KLTxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi4zcmRwYXJ0eS5saWJzIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgotPGl0ZW0gZWxlbWVudElEPSI9b3JnLmVjbGlwc2UuYXBwNG1jLmluY2hyb24udHJhbnNmb3JtYXRpb24uaW5zdGFsbGVyIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgotPGl0ZW0gZWxlbWVudElEPSI9b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLnByb2R1Y3QiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5Ii8+Ci08aXRlbSBlbGVtZW50SUQ9Ij1jb20uaW5jaHJvbi5yZWFsdGltZS5yb290IiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIvPgotPC93b3JraW5nU2V0cz4KLTwvcHNmPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzZTE0OTAuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBBUFA0TUMgRU1GIG1vZGVsIHRyYW5zZm9ybWF0aW9uIGJ1aWxkCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQ7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMC4zLjAucXVhbGlmaWVyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWkKLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS43LAotIEphdmFTRS0xLjgKLUJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtQ2xhc3NQYXRoOiAuCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlIEFQUDRNQwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1ZDQyNjUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3Q+Ci0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KLQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQ8L2FydGlmYWN0SWQ+Ci0JPHZlcnNpb24+MC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLQk8bmFtZT5Nb2RlbCBUcmFuc2Zvcm1hdGlvbjwvbmFtZT4KLQotCTxwcm9wZXJ0aWVzPgotCQk8dHljaG8udmVyc2lvbj4wLjIyLjA8L3R5Y2hvLnZlcnNpb24+Ci0JCTxqYWNvY28udmVyc2lvbj4wLjcuNC4yMDE1MDIyNjIxMjg8L2phY29jby52ZXJzaW9uPgotCQk8cHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZz5VVEYtODwvcHJvamVjdC5idWlsZC5zb3VyY2VFbmNvZGluZz4KLQkJPHByb2plY3QucmVwb3J0aW5nLm91dHB1dEVuY29kaW5nPlVURi04Ci0JCTwvcHJvamVjdC5yZXBvcnRpbmcub3V0cHV0RW5jb2Rpbmc+Ci0KLQkJPGx1bmEtcmVwby51cmw+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzL25lb24KLQkJPC9sdW5hLXJlcG8udXJsPgotCQk8YW1hbHRoZWEtcmVwby51cmw+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2FwcDRtYy91cGRhdGVzaXRlcy9yZWxlYXNlcy8wLjkuMy8KLQkJPC9hbWFsdGhlYS1yZXBvLnVybD4KLQotCQk8b3JiaXQtcmVwby51cmw+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAxNzAzMDcxODA2MzUvcmVwb3NpdG9yeS8KLQkJPC9vcmJpdC1yZXBvLnVybD4KLQkJPHNwaGlueC1yZXBvLXVybD5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3BoaW54L3VwZGF0ZXMvaW50ZXJpbS8KLQkJPC9zcGhpbngtcmVwby11cmw+Ci0KLQkJPHh0ZXh0LXVybD5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvdG1mL3h0ZXh0L3VwZGF0ZXMvcmVsZWFzZXMvMi4xNC4wLwotCQk8L3h0ZXh0LXVybD4KLQkJCi0JCTxlY2xpcHNlLWxpY2Vuc2U+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2NiaS91cGRhdGVzL2xpY2Vuc2UvPC9lY2xpcHNlLWxpY2Vuc2U+Ci0KLQkJCi0JPC9wcm9wZXJ0aWVzPgotCQotCQk8cGx1Z2luUmVwb3NpdG9yaWVzPgotCQk8cGx1Z2luUmVwb3NpdG9yeT4KLQkJCTxpZD5qYm9zcy1wdWJsaWMtcmVwb3NpdG9yeS1ncm91cDwvaWQ+Ci0JCQk8bmFtZT5KQm9zcyBQdWJsaWMgUmVwb3NpdG9yeSBHcm91cDwvbmFtZT4KLQkJCTx1cmw+aHR0cDovL3JlcG9zaXRvcnkuamJvc3Mub3JnL25leHVzL2NvbnRlbnQvZ3JvdXBzL3B1YmxpYy88L3VybD4KLQkJPC9wbHVnaW5SZXBvc2l0b3J5PgotCi0JCTxwbHVnaW5SZXBvc2l0b3J5PgotCQkJPGlkPmpib3NzLXNuYXBzaG90cy1yZXBvc2l0b3J5PC9pZD4KLQkJCTxuYW1lPkpCb3NzIFNuYXBzaG90cyBSZXBvc2l0b3J5PC9uYW1lPgotCQkJPHVybD5odHRwczovL3JlcG9zaXRvcnkuamJvc3Mub3JnL25leHVzL2NvbnRlbnQvcmVwb3NpdG9yaWVzL3NuYXBzaG90cy88L3VybD4KLQkJPC9wbHVnaW5SZXBvc2l0b3J5PgotCTwvcGx1Z2luUmVwb3NpdG9yaWVzPgotCQotCQotCTxyZXBvc2l0b3JpZXM+Ci0JCi0gCi0JCQotCQkKLQkJPHJlcG9zaXRvcnk+Ci0JCQk8aWQ+YW1hbHRoZWE8L2lkPgotCQkJPHVybD4ke2FtYWx0aGVhLXJlcG8udXJsfTwvdXJsPgotCQkJPGxheW91dD5wMjwvbGF5b3V0PgotCQk8L3JlcG9zaXRvcnk+Ci0KLQotCTxyZXBvc2l0b3J5PgotIAkJCTxpZD5lY2xpcHNlLWxpY2Vuc2U8L2lkPgotIAkJCTx1cmw+JHtlY2xpcHNlLWxpY2Vuc2V9PC91cmw+Ci0gCQkJPGxheW91dD5wMjwvbGF5b3V0PgotIAkJPC9yZXBvc2l0b3J5PgotIAkJCi0JCTxyZXBvc2l0b3J5PgotCQkJPGlkPmx1bmE8L2lkPgotCQkJPHVybD4ke2x1bmEtcmVwby51cmx9PC91cmw+Ci0JCQk8bGF5b3V0PnAyPC9sYXlvdXQ+Ci0JCTwvcmVwb3NpdG9yeT4KLQkJPHJlcG9zaXRvcnk+Ci0JCQk8aWQ+b3JiaXQ8L2lkPgotCQkJPHVybD4ke29yYml0LXJlcG8udXJsfTwvdXJsPgotCQkJPGxheW91dD5wMjwvbGF5b3V0PgotCQk8L3JlcG9zaXRvcnk+Ci0JCTxyZXBvc2l0b3J5PgotCQkJPGlkPnh0ZXh0PC9pZD4KLQkJCTx1cmw+JHt4dGV4dC11cmx9PC91cmw+Ci0JCQk8bGF5b3V0PnAyPC9sYXlvdXQ+Ci0JCTwvcmVwb3NpdG9yeT4KLQkJPHJlcG9zaXRvcnk+Ci0JCQk8aWQ+c3BoaW54PC9pZD4KLQkJCTx1cmw+JHtzcGhpbngtcmVwby11cmx9PC91cmw+Ci0JCQk8bGF5b3V0PnAyPC9sYXlvdXQ+Ci0JCTwvcmVwb3NpdG9yeT4KLQkJCi0JCQotCQkKLQk8L3JlcG9zaXRvcmllcz4KLQotCi0JPG1vZHVsZXM+Ci0JCTwhLS0gZXhhbXBsZSBwbHVnaW5zIC0tPgotCi0JCTxtb2R1bGU+Li4vLi4vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbAotCQk8L21vZHVsZT4KLQkJPG1vZHVsZT4uLi8uLi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ybQotCQk8L21vZHVsZT4KLQkJPG1vZHVsZT4uLi8uLi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydAotCQk8L21vZHVsZT4KLQkJPG1vZHVsZT4uLi8uLi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcAotCQk8L21vZHVsZT4KLQotCQk8IS0tIEFtbHQySW5jaHJvbiB0cmFuc2Zvcm1hdGlvbiBwbHVnaW5zIHBsdWdpbnMgLS0+Ci0KLTxtb2R1bGU+Li4vLi4vZXhhbXBsZXMvYW1sdDJpbmNocm9uL2NvbS5pbmNocm9uLnJlYWx0aW1lLnJvb3Q8L21vZHVsZT4KLQotPG1vZHVsZT4uLi8uLi9leGFtcGxlcy9hbWx0MmluY2hyb24vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLmFwcDwvbW9kdWxlPgotPG1vZHVsZT4uLi8uLi9leGFtcGxlcy9hbWx0MmluY2hyb24vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybTwvbW9kdWxlPgotCi08bW9kdWxlPi4uLy4uL2V4YW1wbGVzL2FtbHQyaW5jaHJvbi9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uM3JkcGFydHkubGliczwvbW9kdWxlPgotCi0KLQkJPCEtLSBjb3JlIGZyYW1ld29yayBwbHVnaW5zIC0tPgotCi0JCTxtb2R1bGU+Li4vLi4vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24KLQkJPC9tb2R1bGU+Ci0JCTxtb2R1bGU+Li4vLi4vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucwotCQk8L21vZHVsZT4KLQotCi0JCTwhLS0gaW5zdGFsbGVyIHBsdWdpbnMgLS0+Ci0KLQkJPG1vZHVsZT4uLi9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyCi0JCTwvbW9kdWxlPgotCi0gCi0JCQotCi0JCTwhLS0gZmVhdHVyZXMgLS0+Ci0KLQkJPG1vZHVsZT4uLi8uLi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uM3JkcGFydHkuZmVhdHVyZQotCQk8L21vZHVsZT4KLQotCQk8bW9kdWxlPi4uLy4uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5jb3JlLmZlYXR1cmUKLQkJPC9tb2R1bGU+Ci0KLQkJICA8bW9kdWxlPi4uLy4uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5mZWF0dXJlPC9tb2R1bGU+ICAKLQotCQk8bW9kdWxlPi4uLy4uL2V4YW1wbGVzL2FtbHQyaW5jaHJvbi9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udG8uaW5jaHJvbi5mZWF0dXJlPC9tb2R1bGU+Ci0KLQkJPCEtLSBidWlsZCBwbHVnaW5zIC0tPgotCi0JCTxtb2R1bGU+Li4vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwbzwvbW9kdWxlPgotCi0KLQk8L21vZHVsZXM+Ci0KLQotCTxidWlsZD4KLQkJPHBsdWdpbnM+Ci0JCQk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgotCQkJCTxhcnRpZmFjdElkPnR5Y2hvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgotCQkJCTxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+Ci0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD50eWNoby1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4KLQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJPHZlcmJvc2U+dHJ1ZTwvdmVyYm9zZT4KLQkJCQkJPHNvdXJjZT4xLjg8L3NvdXJjZT4KLQkJCQkJPHRhcmdldD4xLjg8L3RhcmdldD4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD50YXJnZXQtcGxhdGZvcm0tY29uZmlndXJhdGlvbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8ZGVwZW5kZW5jeS1yZXNvbHV0aW9uPgotCQkJCQkJPGV4dHJhUmVxdWlyZW1lbnRzPgotCQkJCQkJCTxyZXF1aXJlbWVudD4KLQkJCQkJCQkJPHR5cGU+ZWNsaXBzZS1wbHVnaW48L3R5cGU+Ci0JCQkJCQkJCTxpZD5vcmcuaGFtY3Jlc3Q8L2lkPgotCQkJCQkJCQk8dmVyc2lvblJhbmdlPjAuMC4wPC92ZXJzaW9uUmFuZ2U+Ci0JCQkJCQkJPC9yZXF1aXJlbWVudD4KLQkJCQkJCTwvZXh0cmFSZXF1aXJlbWVudHM+Ci0JCQkJCTwvZGVwZW5kZW5jeS1yZXNvbHV0aW9uPgotCQkJCQk8ZW52aXJvbm1lbnRzPgotCQkJCQkJPGVudmlyb25tZW50PgotCQkJCQkJCTxvcz5saW51eDwvb3M+Ci0JCQkJCQkJPHdzPmd0azwvd3M+Ci0JCQkJCQkJPGFyY2g+eDg2PC9hcmNoPgotCQkJCQkJPC9lbnZpcm9ubWVudD4KLQkJCQkJCTxlbnZpcm9ubWVudD4KLQkJCQkJCQk8b3M+bGludXg8L29zPgotCQkJCQkJCTx3cz5ndGs8L3dzPgotCQkJCQkJCTxhcmNoPng4Nl82NDwvYXJjaD4KLQkJCQkJCTwvZW52aXJvbm1lbnQ+Ci0JCQkJCQk8ZW52aXJvbm1lbnQ+Ci0JCQkJCQkJPG9zPndpbjMyPC9vcz4KLQkJCQkJCQk8d3M+d2luMzI8L3dzPgotCQkJCQkJCTxhcmNoPng4NjwvYXJjaD4KLQkJCQkJCTwvZW52aXJvbm1lbnQ+Ci0JCQkJCQk8ZW52aXJvbm1lbnQ+Ci0JCQkJCQkJPG9zPndpbjMyPC9vcz4KLQkJCQkJCQk8d3M+d2luMzI8L3dzPgotCQkJCQkJCTxhcmNoPng4Nl82NDwvYXJjaD4KLQkJCQkJCTwvZW52aXJvbm1lbnQ+Ci0JCQkJCQk8ZW52aXJvbm1lbnQ+Ci0JCQkJCQkJPG9zPm1hY29zeDwvb3M+Ci0JCQkJCQkJPHdzPmNvY29hPC93cz4KLQkJCQkJCQk8YXJjaD54ODZfNjQ8L2FyY2g+Ci0JCQkJCQk8L2Vudmlyb25tZW50PgotCQkJCQk8L2Vudmlyb25tZW50cz4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG88L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+dHljaG8tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+Ci0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCTwhLS0gYXJnTGluZT4ke3R5Y2hvLnRlc3RBcmdMaW5lfTwvYXJnTGluZT4gLS0+Ci0JCQkJCTxmb3JrTW9kZT5uZXZlcjwvZm9ya01vZGU+Ci0JCQkJCTxpbmNsdWRlcz4KLQkJCQkJCTxpbmNsdWRlPioqLypUZXN0Lio8L2luY2x1ZGU+Ci0JCQkJCTwvaW5jbHVkZXM+Ci0JCQkJPC9jb25maWd1cmF0aW9uPgotCQkJPC9wbHVnaW4+Ci0JCQk8cGx1Z2luPgotCQkJCTxncm91cElkPm9yZy5qYWNvY288L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+amFjb2NvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4wLjcuNC4yMDE1MDIyNjIxMjg8L3ZlcnNpb24+Ci0JCQkJPGNvbmZpZ3VyYXRpb24+Ci0JCQkJCTxleGNsdWRlcz4KLQotCQkJCQk8L2V4Y2x1ZGVzPgotCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCQk8ZXhlY3V0aW9ucz4KLQkJCQkJPCEtLSBQcmVwYXJlcyB0aGUgcHJvcGVydHkgcG9pbnRpbmcgdG8gdGhlIEphQ29DbyBydW50aW1lIGFnZW50IHdoaWNoIAotCQkJCQkJaXMgcGFzc2VkIGFzIFZNIGFyZ3VtZW50IHdoZW4gTWF2ZW4gdGhlIFN1cmVmaXJlIHBsdWdpbiBpcyBleGVjdXRlZC4gLS0+Ci0JCQkJCTxleGVjdXRpb24+Ci0JCQkJCQk8aWQ+cHJlLXVuaXQtdGVzdDwvaWQ+Ci0JCQkJCQk8Z29hbHM+Ci0JCQkJCQkJPGdvYWw+cHJlcGFyZS1hZ2VudDwvZ29hbD4KLQkJCQkJCTwvZ29hbHM+Ci0JCQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJCQk8IS0tIFNldHMgdGhlIHBhdGggdG8gdGhlIGZpbGUgd2hpY2ggY29udGFpbnMgdGhlIGV4ZWN1dGlvbiBkYXRhLiAtLT4KLQkJCQkJCQk8ZGVzdEZpbGU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vY292ZXJhZ2UtcmVwb3J0cy9qYWNvY28tdXQuZXhlYwotCQkJCQkJCTwvZGVzdEZpbGU+Ci0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQkJCTwvZXhlY3V0aW9uPgotCQkJCQk8IS0tIEVuc3VyZXMgdGhhdCB0aGUgY29kZSBjb3ZlcmFnZSByZXBvcnQgZm9yIHVuaXQgdGVzdHMgaXMgY3JlYXRlZCAKLQkJCQkJCWFmdGVyIHVuaXQgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gLS0+Ci0JCQkJCTxleGVjdXRpb24+Ci0JCQkJCQk8aWQ+cG9zdC11bml0LXRlc3Q8L2lkPgotCQkJCQkJPHBoYXNlPnZlcmlmeTwvcGhhc2U+Ci0JCQkJCQk8Z29hbHM+Ci0JCQkJCQkJPGdvYWw+cmVwb3J0PC9nb2FsPgotCQkJCQkJPC9nb2Fscz4KLQkJCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQkJCTwhLS0gU2V0cyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGljaCBjb250YWlucyB0aGUgZXhlY3V0aW9uIGRhdGEuIC0tPgotCQkJCQkJCTxkYXRhRmlsZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9jb3ZlcmFnZS1yZXBvcnRzL2phY29jby11dC5leGVjCi0JCQkJCQkJPC9kYXRhRmlsZT4KLQkJCQkJCQk8IS0tIFNldHMgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBjb2RlIGNvdmVyYWdlIHJlcG9ydC4gLS0+Ci0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT4ke3Byb2plY3QucmVwb3J0aW5nLm91dHB1dERpcmVjdG9yeX0vamFjb2NvLXV0Ci0JCQkJCQkJPC9vdXRwdXREaXJlY3Rvcnk+Ci0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQkJCTwvZXhlY3V0aW9uPgotCQkJCTwvZXhlY3V0aW9ucz4KLQkJCTwvcGx1Z2luPgotIAotICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1jbGVhbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjAuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgIDxmaWxlc2V0cz4KLSAgICAgICAgICAgICAgICAgICAgPGZpbGVzZXQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5PiR7YmFzZWRpcn08L2RpcmVjdG9yeT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi94dGVuZC1nZW4vKio8L2luY2x1ZGU+Ci0JCQkJCQk8IS0tIDxvdXRwdXREaXJlY3Rvcnk+KiovZXhhbXBsZXMvKio8L291dHB1dERpcmVjdG9yeT4gLS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGZvbGxvd1N5bWxpbmtzPmZhbHNlPC9mb2xsb3dTeW1saW5rcz4KLSAgICAgICAgICAgICAgICAgICAgPC9maWxlc2V0PgotICAgICAgICAgICAgICAgIDwvZmlsZXNldHM+Ci0gICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgIDwvcGx1Z2luPgotICAgICAgICAKLSAgICAgICAgCi0KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+eHRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJCTx2ZXJzaW9uPjIuMTQuMDwvdmVyc2lvbj4KLQkJCQk8ZGVwZW5kZW5jaWVzPgotCQkJCQkJPGRlcGVuZGVuY3k+Ci0JCQkJCQkgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGxhdGZvcm08L2dyb3VwSWQ+Ci0JCQkJCQkgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb248L2FydGlmYWN0SWQ+Ci0JCQkJCQkgICAgPHZlcnNpb24+WzMuOC4wLDQuMC4wKTwvdmVyc2lvbj4KLQkJCQkJCTwvZGVwZW5kZW5jeT4KLQkJCQkJPC9kZXBlbmRlbmNpZXM+Ci0JCQkJCQotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+Ci0JCQkJCQkJPGdvYWw+eHRlbmQtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJCTxnb2FsPnRlc3RDb21waWxlPC9nb2FsPgotCQkJCQkJCTxnb2FsPnh0ZW5kLXRlc3QtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJPC9nb2Fscz4KLQkJCQkJPC9leGVjdXRpb24+Ci0JCQkJPC9leGVjdXRpb25zPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5PgotCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCTwvcGx1Z2luPgotCi0KLTwhLS0KLQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuamJvc3MudG9vbHMudHljaG8tcGx1Z2luczwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD5yZXBvc2l0b3J5LXV0aWxzPC9hcnRpZmFjdElkPgotCQkJCTx2ZXJzaW9uPjAuMjMuMjwvdmVyc2lvbj4KLQotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGlkPmdlbmVyYXRlLWZhY2FkZTwvaWQ+Ci0JCQkJCQk8cGhhc2U+cGFja2FnZTwvcGhhc2U+Ci0KLQkJCQkJCTxnb2Fscz4KLQkJCQkJCQk8Z29hbD5nZW5lcmF0ZS1yZXBvc2l0b3J5LWZhY2FkZTwvZ29hbD4KLQkJCQkJCTwvZ29hbHM+Ci0KLQkJCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQkJCTxzaXRlVGVtcGxhdGVGb2xkZXI+c2l0ZVRlbXBsYXRlPC9zaXRlVGVtcGxhdGVGb2xkZXI+Ci0KLSAJCQkJCQkJPHN5bWJvbHM+Ci0JCQkJCQkJCTx1cGRhdGUuc2l0ZS5uYW1lPkFtYWx0aGVhIE1vZGVsIFRyYW5zZm9ybWF0aW9uPC91cGRhdGUuc2l0ZS5uYW1lPgotCQkJCQkJCQk8dGFyZ2V0LmVjbGlwc2UudmVyc2lvbj5OZW9uLjMgKDQuNi4zKTwvdGFyZ2V0LmVjbGlwc2UudmVyc2lvbj4KLQkJCQkJCQk8L3N5bWJvbHM+Ci0KLQkJCQkJCQk8YXNzb2NpYXRlU2l0ZXM+Ci0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9uZW9uPC9zaXRlPgotCQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvYXBwNG1jL3VwZGF0ZXNpdGVzL3JlbGVhc2VzLzAuOS4wLzwvc2l0ZT4KLQkJCQkJCQkJPHNpdGU+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAxNzAzMDcxODA2MzUvcmVwb3NpdG9yeS88L3NpdGU+Ci0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zcGhpbngvdXBkYXRlcy9pbnRlcmltPC9zaXRlPgotCQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvdG1mL3h0ZXh0L3VwZGF0ZXMvcmVsZWFzZXMvMi4xMC4wLzwvc2l0ZT4KLQkJCQkJCQkJPHNpdGU+aHR0cDovL2VjbGlwc2UuaW5jaHJvbi5jb20vcmVhbHRpbWUvdXBkYXRlc2l0ZXMvcmVsZWFzZS9jdXJyZW50Lzwvc2l0ZT4KLQkJCQkJCQk8L2Fzc29jaWF0ZVNpdGVzPgotCQkJCQkJPC9jb25maWd1cmF0aW9uPgotCQkJCQk8L2V4ZWN1dGlvbj4KLQkJCQk8L2V4ZWN1dGlvbnM+Ci0JCQk8L3BsdWdpbj4KLQktLT4JCQotCQkJCi0JCTwvcGx1Z2lucz4KLQk8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyLy5jbGFzc3BhdGggYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjZWI0ODAuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjgiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Nzg4ZTZhLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotYmluCi10YXJnZXQKLS5EU19TdG9yZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNzlhMjAuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMjE1MzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuOAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjgKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuOApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci9hYm91dC5odG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjRmNzgxLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGxhbmc9IkVOLVVTIj4KLQk8aDI+QWJvdXQgVGhpcyBDb250ZW50PC9oMj4KLQotCTxwPk5vdmVtYmVyIDMwLCAyMDE3PC9wPgotCTxoMz5MaWNlbnNlPC9oMz4KLQotCTxwPgotCQlUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4KLQkJKCZxdW90O0NvbnRlbnQmcXVvdDspLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQKLQkJaXMgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZQotCQlQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMCAoJnF1b3Q7RVBMJnF1b3Q7KS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMKLQkJYXZhaWxhYmxlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wPC9hPi4KLQkJRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICZxdW90O1Byb2dyYW0mcXVvdDsgd2lsbCBtZWFuIHRoZSBDb250ZW50LgotCTwvcD4KLQotCTxwPgotCQlJZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlCi0JCUZvdW5kYXRpb24sIHRoZSBDb250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eQotCQkoJnF1b3Q7UmVkaXN0cmlidXRvciZxdW90OykgYW5kIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkKLQkJYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiBDaGVjayB0aGUKLQkJUmVkaXN0cmlidXRvcidzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaAotCQlsaWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQKLQkJYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UKLQkJY29kZSBpbiB0aGUgQ29udGVudCBhbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQgPGEKLQkJCWhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnPC9hPi4KLQk8L3A+Ci0KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyL2VwbC0yLjAuaHRtbCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvZXBsLTIuMC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzdhMTgxLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvZXBsLTIuMC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KLSAgPGhlYWQ+Ci0gICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+Ci0gICAgPHRpdGxlPkVjbGlwc2UgUHVibGljIExpY2Vuc2UgLSBWZXJzaW9uIDIuMDwvdGl0bGU+Ci0gICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLSAgICAgIGJvZHkgewotICAgICAgICBtYXJnaW46IDEuNWVtIDNlbTsKLSAgICAgIH0KLSAgICAgIGgxewotICAgICAgICBmb250LXNpemU6MS41ZW07Ci0gICAgICB9Ci0gICAgICBoMnsKLSAgICAgICAgZm9udC1zaXplOjFlbTsKLSAgICAgICAgbWFyZ2luLWJvdHRvbTowLjVlbTsKLSAgICAgICAgbWFyZ2luLXRvcDoxZW07Ci0gICAgICB9Ci0gICAgICBwIHsKLSAgICAgICAgbWFyZ2luLXRvcDogIDAuNWVtOwotICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjVlbTsKLSAgICAgIH0KLSAgICAgIHVsLCBvbHsKLSAgICAgICAgbGlzdC1zdHlsZS10eXBlOm5vbmU7Ci0gICAgICB9Ci0gICAgPC9zdHlsZT4KLSAgPC9oZWFkPgotICA8Ym9keT4KLSAgICA8aDE+RWNsaXBzZSBQdWJsaWMgTGljZW5zZSAtIHYgMi4wPC9oMT4KLSAgICA8cD5USEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRQotICAgICAgUFVCTElDIExJQ0VOU0UgKCZsZHF1bztBR1JFRU1FTlQmcmRxdW87KS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTgotICAgICAgT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJiMwMzk7UyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImRlZmluaXRpb25zIj4xLiBERUZJTklUSU9OUzwvaDI+Ci0gICAgPHA+JmxkcXVvO0NvbnRyaWJ1dGlvbiZyZHF1bzsgbWVhbnM6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29udGVudAotICAgICAgICBEaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6Ci0gICAgICAgIDx1bD4KLSAgICAgICAgICA8bGk+aSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kPC9saT4KLSAgICAgICAgICA8bGk+aWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTs8L2xpPgotICAgICAgICA8L3VsPgotICAgICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbQotICAgICAgICBhbmQgYXJlIERpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KLSAgICAgICAgJmxkcXVvO29yaWdpbmF0ZXMmcmRxdW87IGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaAotICAgICAgICBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJiMwMzk7cyBiZWhhbGYuCi0gICAgICAgIENvbnRyaWJ1dGlvbnMgZG8gbm90IGluY2x1ZGUgY2hhbmdlcyBvciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gdGhhdAotICAgICAgICBhcmUgbm90IE1vZGlmaWVkIFdvcmtzLgotICAgICAgPC9saT4KLSAgICA8L3VsPgotICAgIDxwPiZsZHF1bztDb250cmlidXRvciZyZHF1bzsgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS48L3A+Ci0gICAgPHA+JmxkcXVvO0xpY2Vuc2VkIFBhdGVudHMmcmRxdW87IG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2gKLSAgICAgIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUKLSAgICAgIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1Byb2dyYW0mcmRxdW87IG1lYW5zIHRoZSBDb250cmlidXRpb25zIERpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzCi0gICAgICBBZ3JlZW1lbnQuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztSZWNpcGllbnQmcmRxdW87IG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQKLSAgICAgIG9yIGFueSBTZWNvbmRhcnkgTGljZW5zZSAoYXMgYXBwbGljYWJsZSksIGluY2x1ZGluZyBDb250cmlidXRvcnMuCi0gICAgPC9wPgotICAgIDxwPiZsZHF1bztEZXJpdmF0aXZlIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyCi0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBQcm9ncmFtIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO01vZGlmaWVkIFdvcmtzJnJkcXVvOyBzaGFsbCBtZWFuIGFueSB3b3JrIGluIFNvdXJjZSBDb2RlIG9yIG90aGVyIGZvcm0gdGhhdAotICAgICAgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlCi0gICAgICBjb250ZW50cyBvZiB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nLCBmb3IgcHVycG9zZXMgb2YgY2xhcml0eSBhbnkgbmV3IGZpbGUKLSAgICAgIGluIFNvdXJjZSBDb2RlIGZvcm0gdGhhdCBjb250YWlucyBhbnkgY29udGVudHMgb2YgdGhlIFByb2dyYW0uIE1vZGlmaWVkCi0gICAgICBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IGNvbnRhaW4gb25seSBkZWNsYXJhdGlvbnMsIGludGVyZmFjZXMsCi0gICAgICB0eXBlcywgY2xhc3Nlcywgc3RydWN0dXJlcywgb3IgZmlsZXMgb2YgdGhlIFByb2dyYW0gc29sZWx5IGluIGVhY2ggY2FzZQotICAgICAgaW4gb3JkZXIgdG8gbGluayB0bywgYmluZCBieSBuYW1lLCBvciBzdWJjbGFzcyB0aGUgUHJvZ3JhbSBvciBNb2RpZmllZAotICAgICAgV29ya3MgdGhlcmVvZi4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO0Rpc3RyaWJ1dGUmcmRxdW87IG1lYW5zIHRoZSBhY3RzIG9mIGEpIGRpc3RyaWJ1dGluZyBvciBiKSBtYWtpbmcgYXZhaWxhYmxlCi0gICAgICBpbiBhbnkgbWFubmVyIHRoYXQgZW5hYmxlcyB0aGUgdHJhbnNmZXIgb2YgYSBjb3B5LgotICAgIDwvcD4KLSAgICA8cD4mbGRxdW87U291cmNlIENvZGUmcmRxdW87IG1lYW5zIHRoZSBmb3JtIG9mIGEgUHJvZ3JhbSBwcmVmZXJyZWQgZm9yIG1ha2luZwotICAgICAgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwKLSAgICAgIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgICA8L3A+Ci0gICAgPHA+JmxkcXVvO1NlY29uZGFyeSBMaWNlbnNlJnJkcXVvOyBtZWFucyBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICAgICAgVmVyc2lvbiAyLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UsIGluY2x1ZGluZyBhbnkKLSAgICAgIGV4Y2VwdGlvbnMgb3IgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcyBpZGVudGlmaWVkIGJ5IHRoZSBpbml0aWFsCi0gICAgICBDb250cmlidXRvci4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJncmFudC1vZi1yaWdodHMiPjIuIEdSQU5UIE9GIFJJR0hUUzwvaDI+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0Ci0gICAgICAgIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksCi0gICAgICAgIHB1YmxpY2x5IHBlcmZvcm0sIERpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoCi0gICAgICAgIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQotICAgICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50Ci0gICAgICAgIGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCi0gICAgICAgIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKLSAgICAgICAgaWYgYW55LCBpbiBTb3VyY2UgQ29kZSBvciBvdGhlciBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsCi0gICAgICAgIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwKLSAgICAgICAgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2gKLSAgICAgICAgYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkCi0gICAgICAgIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueQotICAgICAgICBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIKLSAgICAgICAgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgotICAgICAgPC9saT4KLSAgICAgIDxsaT5jKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUKLSAgICAgICAgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKLSAgICAgICAgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlCi0gICAgICAgIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuCi0gICAgICAgIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKLSAgICAgICAgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKLSAgICAgICAgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzCi0gICAgICAgIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZQotICAgICAgICByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLAotICAgICAgICBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvCi0gICAgICAgIGFsbG93IFJlY2lwaWVudCB0byBEaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQmIzAzOTtzCi0gICAgICAgIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCi0gICAgICA8L2xpPgotICAgICAgPGxpPmQpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKLSAgICAgICAgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQKLSAgICAgICAgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCi0gICAgICA8L2xpPgotICAgICAgPGxpPmUpIE5vdHdpdGhzdGFuZGluZyB0aGUgdGVybXMgb2YgYW55IFNlY29uZGFyeSBMaWNlbnNlLCBubyBDb250cmlidXRvcgotICAgICAgICBtYWtlcyBhZGRpdGlvbmFsIGdyYW50cyB0byBhbnkgUmVjaXBpZW50IChvdGhlciB0aGFuIHRob3NlIHNldCBmb3J0aAotICAgICAgICBpbiB0aGlzIEFncmVlbWVudCkgYXMgYSByZXN1bHQgb2Ygc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJlY2VpcHQgb2YgdGhlCi0gICAgICAgIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UgKGlmIHBlcm1pdHRlZCB1bmRlcgotICAgICAgICB0aGUgdGVybXMgb2YgU2VjdGlvbiAzKS4KLSAgICAgIDwvbGk+Ci0gICAgPC91bD4KLSAgICA8aDIgaWQ9InJlcXVpcmVtZW50cyI+My4gUkVRVUlSRU1FTlRTPC9oMj4KLSAgICA8cD4zLjEgSWYgYSBDb250cmlidXRvciBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSBpbiBhbnkgZm9ybSwgdGhlbjo8L3A+Ci0gICAgPHVsPgotICAgICAgPGxpPmEpIHRoZSBQcm9ncmFtIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBhcyBTb3VyY2UgQ29kZSwgaW4KLSAgICAgICAgYWNjb3JkYW5jZSB3aXRoIHNlY3Rpb24gMy4yLCBhbmQgdGhlIENvbnRyaWJ1dG9yIG11c3QgYWNjb21wYW55Ci0gICAgICAgIHRoZSBQcm9ncmFtIHdpdGggYSBzdGF0ZW1lbnQgdGhhdCB0aGUgU291cmNlIENvZGUgZm9yIHRoZSBQcm9ncmFtCi0gICAgICAgIGlzIGF2YWlsYWJsZSB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kIGluZm9ybXMgUmVjaXBpZW50cyBob3cgdG8KLSAgICAgICAgb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseQotICAgICAgICB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZTsgYW5kCi0gICAgICA8L2xpPgotICAgICAgPGxpPgotICAgICAgICBiKSB0aGUgQ29udHJpYnV0b3IgbWF5IERpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgYSBsaWNlbnNlCi0gICAgICAgIGRpZmZlcmVudCB0aGFuIHRoaXMgQWdyZWVtZW50LCBwcm92aWRlZCB0aGF0IHN1Y2ggbGljZW5zZToKLSAgICAgICAgPHVsPgotICAgICAgICAgIDxsaT5pKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBvdGhlciBDb250cmlidXRvcnMgYWxsCi0gICAgICAgICAgICB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiB0aXRsZSBhbmQgbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcwotICAgICAgICAgICAgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpKSBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIG90aGVyIENvbnRyaWJ1dG9ycyBhbGwKLSAgICAgICAgICAgIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwKLSAgICAgICAgICAgIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOwotICAgICAgICAgIDwvbGk+Ci0gICAgICAgICAgPGxpPmlpaSkgZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50cyYjMDM5OyByaWdodHMgaW4gdGhlCi0gICAgICAgICAgICBTb3VyY2UgQ29kZSB1bmRlciBzZWN0aW9uIDMuMjsgYW5kCi0gICAgICAgICAgPC9saT4KLSAgICAgICAgICA8bGk+aXYpIHJlcXVpcmVzIGFueSBzdWJzZXF1ZW50IGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbnkgcGFydHkKLSAgICAgICAgICAgIHRvIGJlIHVuZGVyIGEgbGljZW5zZSB0aGF0IHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgc2VjdGlvbiAzLgotICAgICAgICAgIDwvbGk+Ci0gICAgICAgIDwvdWw+Ci0gICAgICA8L2xpPgotICAgIDwvdWw+Ci0gICAgPHA+My4yIFdoZW4gdGhlIFByb2dyYW0gaXMgRGlzdHJpYnV0ZWQgYXMgU291cmNlIENvZGU6PC9wPgotICAgIDx1bD4KLSAgICAgIDxsaT5hKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBvciBpZiB0aGUgUHJvZ3JhbSAoaSkKLSAgICAgICAgaXMgY29tYmluZWQgd2l0aCBvdGhlciBtYXRlcmlhbCBpbiBhIHNlcGFyYXRlIGZpbGUgb3IgZmlsZXMgbWFkZSBhdmFpbGFibGUKLSAgICAgICAgdW5kZXIgYSBTZWNvbmRhcnkgTGljZW5zZSwgYW5kIChpaSkgdGhlIGluaXRpYWwgQ29udHJpYnV0b3IgYXR0YWNoZWQgdG8KLSAgICAgICAgdGhlIFNvdXJjZSBDb2RlIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBvZiB0aGlzIEFncmVlbWVudCwKLSAgICAgICAgdGhlbiB0aGUgUHJvZ3JhbSBtYXkgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2gKLSAgICAgICAgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQKLSAgICAgIDwvbGk+Ci0gICAgICA8bGk+YikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uPC9saT4KLSAgICA8L3VsPgotICAgIDxwPjMuMyBDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssCi0gICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzLCBkaXNjbGFpbWVycyBvZiB3YXJyYW50eSwgb3IgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5Ci0gICAgICAoJmxzcXVvO25vdGljZXMmcnNxdW87KSBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtIGZyb20gYW55IGNvcHkgb2YgdGhlIFByb2dyYW0gd2hpY2gKLSAgICAgIHRoZXkgRGlzdHJpYnV0ZSwgcHJvdmlkZWQgdGhhdCBDb250cmlidXRvcnMgbWF5IGFkZCB0aGVpciBvd24gYXBwcm9wcmlhdGUKLSAgICAgIG5vdGljZXMuCi0gICAgPC9wPgotICAgIDxoMiBpZD0iY29tbWVyY2lhbC1kaXN0cmlidXRpb24iPjQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OPC9oMj4KLSAgICA8cD5Db21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcwotICAgICAgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzCi0gICAgICBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUKLSAgICAgIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQKLSAgICAgIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlcgotICAgICAgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQotICAgICAgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgmbGRxdW87Q29tbWVyY2lhbCBDb250cmlidXRvciZyZHF1bzspCi0gICAgICBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yCi0gICAgICAoJmxkcXVvO0luZGVtbmlmaWVkIENvbnRyaWJ1dG9yJnJkcXVvOykgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cwotICAgICAgKGNvbGxlY3RpdmVseSAmbGRxdW87TG9zc2VzJnJkcXVvOykgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMKLSAgICAgIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50Ci0gICAgICBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uCi0gICAgICB3aXRoIGl0cyBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuCi0gICAgICBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZwotICAgICAgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvCi0gICAgICBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OiBhKSBwcm9tcHRseSBub3RpZnkgdGhlCi0gICAgICBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsCi0gICAgICBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sCi0gICAgICB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZAotICAgICAgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KLSAgICA8L3A+Ci0gICAgPHA+Rm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbQotICAgICAgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEKLSAgICAgIENvbW1lcmNpYWwgQ29udHJpYnV0b3IuIElmIHRoYXQgQ29tbWVyY2lhbCBDb250cmlidXRvciB0aGVuIG1ha2VzIHBlcmZvcm1hbmNlCi0gICAgICBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMKLSAgICAgIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3ImIzAzOTtzIHJlc3BvbnNpYmlsaXR5IGFsb25lLgotICAgICAgVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMKLSAgICAgIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlIGNsYWltcyBhbmQKLSAgICAgIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMKLSAgICAgIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgotICAgIDwvcD4KLSAgICA8aDIgaWQ9IndhcnJhbnR5Ij41LiBOTyBXQVJSQU5UWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBQUk9HUkFNIElTIFBST1ZJREVEIE9OIEFOICZsZHF1bztBUyBJUyZyZHF1bzsgQkFTSVMsIFdJVEhPVVQKLSAgICAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsCi0gICAgICBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsCi0gICAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzCi0gICAgICBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCi0gICAgICBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKLSAgICAgIGV4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUKLSAgICAgIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlCi0gICAgICB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yCi0gICAgICBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJkaXNjbGFpbWVyIj42LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWTwvaDI+Ci0gICAgPHA+RVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIEFORCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRAotICAgICAgQlkgQVBQTElDQUJMRSBMQVcsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUiBBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZCi0gICAgICBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gICAgICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwKLSAgICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gICAgICBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gICAgICBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMKLSAgICAgIEdSQU5URUQgSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KLSAgICA8L3A+Ci0gICAgPGgyIGlkPSJnZW5lcmFsIj43LiBHRU5FUkFMPC9oMj4KLSAgICA8cD5JZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotICAgICAgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZQotICAgICAgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlCi0gICAgICBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50Ci0gICAgICBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCi0gICAgPC9wPgotICAgIDxwPklmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmCi0gICAgICAoZXhjbHVkaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKQotICAgICAgaW5mcmluZ2VzIHN1Y2ggUmVjaXBpZW50JiMwMzk7cyBwYXRlbnQocyksIHRoZW4gc3VjaCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyBncmFudGVkCi0gICAgICB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLSAgICA8L3A+Ci0gICAgPHA+QWxsIFJlY2lwaWVudCYjMDM5O3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0bwotICAgICAgY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZAotICAgICAgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nCi0gICAgICBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQmIzAzOTtzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudAotICAgICAgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtCi0gICAgICBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuIEhvd2V2ZXIsIFJlY2lwaWVudCYjMDM5O3Mgb2JsaWdhdGlvbnMgdW5kZXIKLSAgICAgIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlCi0gICAgICBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgotICAgIDwvcD4KLSAgICA8cD5FdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcyBBZ3JlZW1lbnQsCi0gICAgICBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkKLSAgICAgIG9ubHkgYmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXIuIFRoZSBBZ3JlZW1lbnQgU3Rld2FyZCByZXNlcnZlcwotICAgICAgdGhlIHJpZ2h0IHRvIHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudAotICAgICAgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0Ci0gICAgICB0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIFRoZSBFY2xpcHNlIEZvdW5kYXRpb24gaXMgdGhlIGluaXRpYWwgQWdyZWVtZW50Ci0gICAgICBTdGV3YXJkLiBUaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzCi0gICAgICB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YKLSAgICAgIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbQotICAgICAgKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIERpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24KLSAgICAgIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcKLSAgICAgIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBEaXN0cmlidXRlCi0gICAgICB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uCi0gICAgPC9wPgotICAgIDxwPkV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsIFJlY2lwaWVudAotICAgICAgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55Ci0gICAgICBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLAotICAgICAgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkgZ3JhbnRlZAotICAgICAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLiBOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IGlzIGludGVuZGVkCi0gICAgICB0byBiZSBlbmZvcmNlYWJsZSBieSBhbnkgZW50aXR5IHRoYXQgaXMgbm90IGEgQ29udHJpYnV0b3Igb3IgUmVjaXBpZW50LgotICAgICAgTm8gdGhpcmQtcGFydHkgYmVuZWZpY2lhcnkgcmlnaHRzIGFyZSBjcmVhdGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgotICAgIDwvcD4KLSAgICA8aDIgaWQ9ImV4aGliaXQtYSI+RXhoaWJpdCBBICZuZGFzaDsgRm9ybSBvZiBTZWNvbmRhcnkgTGljZW5zZXMgTm90aWNlPC9oMj4KLSAgICA8cD4mbGRxdW87VGhpcyBTb3VyY2UgQ29kZSBtYXkgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgZm9sbG93aW5nIAotICAgIAlTZWNvbmRhcnkgTGljZW5zZXMgd2hlbiB0aGUgY29uZGl0aW9ucyBmb3Igc3VjaCBhdmFpbGFiaWxpdHkgc2V0IGZvcnRoIAotICAgIAlpbiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSwgdi4gMi4wIGFyZSBzYXRpc2ZpZWQ6IHtuYW1lIGxpY2Vuc2UocyksCi0gICAgCXZlcnNpb24ocyksIGFuZCBleGNlcHRpb25zIG9yIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgaGVyZX0uJnJkcXVvOwotICAgIDwvcD4KLSAgICA8YmxvY2txdW90ZT4KLSAgICAgIDxwPlNpbXBseSBpbmNsdWRpbmcgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgdGhpcyBFeGhpYml0IEEKLSAgICAgICAgaXMgbm90IHN1ZmZpY2llbnQgdG8gbGljZW5zZSB0aGUgU291cmNlIENvZGUgdW5kZXIgU2Vjb25kYXJ5IExpY2Vuc2VzLgotICAgICAgPC9wPgotICAgICAgPHA+SWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgZmlsZSwKLSAgICAgICAgdGhlbiBZb3UgbWF5IGluY2x1ZGUgdGhlIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgTElDRU5TRSBmaWxlIGluIGEKLSAgICAgICAgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHJlY2lwaWVudCB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3IKLSAgICAgICAgc3VjaCBhIG5vdGljZS4KLSAgICAgIDwvcD4KLSAgICAgIDxwPllvdSBtYXkgYWRkIGFkZGl0aW9uYWwgYWNjdXJhdGUgbm90aWNlcyBvZiBjb3B5cmlnaHQgb3duZXJzaGlwLjwvcD4KLSAgICA8L2Jsb2NrcXVvdGU+Ci0gIDwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyL2V4YW1wbGVCdWlsZGVyVGVtcGxhdGVzL2NvcHlFeGFtcGxlLmFudCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvZXhhbXBsZUJ1aWxkZXJUZW1wbGF0ZXMvY29weUV4YW1wbGUuYW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTA3YmFiLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvZXhhbXBsZUJ1aWxkZXJUZW1wbGF0ZXMvY29weUV4YW1wbGUuYW50CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08cHJvamVjdCBuYW1lPSJjb3B5RXhhbXBsZSIgZGVmYXVsdD0ibWFpbiIgYmFzZWRpcj0iLi4vLi4iPgotCi0JPHByb3BlcnR5IG5hbWU9Imluc3RhbGxlciIgdmFsdWU9IiNJTlNUQUxMRVJfUFJPSkVDVCMiIC8+Ci0JPGltcG9ydCBmaWxlPSIuLi8uLi8uLi8uLi9idWlsZC8ke2luc3RhbGxlcn0vY29weUV4YW1wbGVMaWIuYW50IiBvcHRpb25hbD0idHJ1ZSIgLz4KLQk8YmFzZW5hbWUgZmlsZT0iJHtidWlsZC5wcm9qZWN0fSIgcHJvcGVydHk9InByb2plY3QiIC8+Ci0KLQk8dGFyZ2V0IG5hbWU9Im1haW4iPgotCQk8Y29weUV4YW1wbGUgcHJvamVjdD0iJHtwcm9qZWN0fSIgLz4KLQk8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci9leGFtcGxlQnVpbGRlclRlbXBsYXRlcy90ZW1wbGF0ZS5sYXVuY2ggYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyL2V4YW1wbGVCdWlsZGVyVGVtcGxhdGVzL3RlbXBsYXRlLmxhdW5jaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU4ZmRiOS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyL2V4YW1wbGVCdWlsZGVyVGVtcGxhdGVzL3RlbXBsYXRlLmxhdW5jaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgotPGxhdW5jaENvbmZpZ3VyYXRpb24gdHlwZT0ib3JnLmVjbGlwc2UuYW50LkFudEJ1aWxkZXJMYXVuY2hDb25maWd1cmF0aW9uVHlwZSI+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmFudC51aS5BVFRSX1RBUkdFVFNfVVBEQVRFRCIgdmFsdWU9InRydWUiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuYW50LnVpLkRFRkFVTFRfVk1fSU5TVEFMTCIgdmFsdWU9ImZhbHNlIi8+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmFudC51aVNFVF9JTlBVVEhBTkRMRVIiIHZhbHVlPSJmYWxzZSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuQVRUUl9SRUZSRVNIX1NDT1BFIiB2YWx1ZT0iJHt3b3JraW5nX3NldDombHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7JiMxMzsmIzEwOyZsdDtyZXNvdXJjZXMmZ3Q7JiMxMzsmIzEwOyNSRUZSRVNIX1JFU09VUkNFUyMmbHQ7L3Jlc291cmNlcyZndDt9Ii8+Ci08Ym9vbGVhbkF0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLmRlYnVnLmNvcmUuY2FwdHVyZV9vdXRwdXQiIHZhbHVlPSJmYWxzZSIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5kZWJ1Zy51aS5BVFRSX0NPTlNPTEVfT1VUUFVUX09OIiB2YWx1ZT0iZmFsc2UiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuZGVidWcudWkuQVRUUl9MQVVOQ0hfSU5fQkFDS0dST1VORCIgdmFsdWU9ImZhbHNlIi8+Ci08c3RyaW5nQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5DTEFTU1BBVEhfUFJPVklERVIiIHZhbHVlPSJvcmcuZWNsaXBzZS5hbnQudWkuQW50Q2xhc3NwYXRoUHJvdmlkZXIiLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5ERUZBVUxUX0NMQVNTUEFUSCIgdmFsdWU9InRydWUiLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLlBST0pFQ1RfQVRUUiIgdmFsdWU9IiIvPgotPGJvb2xlYW5BdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkFUVFJfQlVJTERFUl9FTkFCTEVEIiB2YWx1ZT0idHJ1ZSIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuQVRUUl9CVUlMRF9TQ09QRSIgdmFsdWU9IiR7d29ya2luZ19zZXQ6Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyYjMTM7JiMxMDsmbHQ7cmVzb3VyY2VzJmd0OyYjMTM7JiMxMDsjUkVMRVZBTlRfUkVTT1VSQ0VTIyZsdDsvcmVzb3VyY2VzJmd0O30iLz4KLTxzdHJpbmdBdHRyaWJ1dGUga2V5PSJvcmcuZWNsaXBzZS51aS5leHRlcm5hbHRvb2xzLkFUVFJfTE9DQVRJT04iIHZhbHVlPSIke3Byb2plY3RfbG9jOi8jRVhBTVBMRV9QUk9KRUNUI30vLmV4dGVybmFsVG9vbEJ1aWxkZXJzL2NvcHlFeGFtcGxlLmFudCIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuQVRUUl9SVU5fQlVJTERfS0lORFMiIHZhbHVlPSJpbmNyZW1lbnRhbCxhdXRvLCIvPgotPHN0cmluZ0F0dHJpYnV0ZSBrZXk9Im9yZy5lY2xpcHNlLnVpLmV4dGVybmFsdG9vbHMuQVRUUl9UT09MX0FSR1VNRU5UUyIgdmFsdWU9Ii1EYnVpbGQucHJvamVjdD0ke3Byb2plY3RfbG9jOi8jRVhBTVBMRV9QUk9KRUNUI30iLz4KLTxib29sZWFuQXR0cmlidXRlIGtleT0ib3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5BVFRSX1RSSUdHRVJTX0NPTkZJR1VSRUQiIHZhbHVlPSJ0cnVlIi8+Ci08L2xhdW5jaENvbmZpZ3VyYXRpb24+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyL2V4YW1wbGVCdWlsZGVyVGVtcGxhdGVzL3RlbXBsYXRlLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyL2V4YW1wbGVCdWlsZGVyVGVtcGxhdGVzL3RlbXBsYXRlLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZDAyOTAuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuYnVpbGRlci9leGFtcGxlQnVpbGRlclRlbXBsYXRlcy90ZW1wbGF0ZS5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UudWkuZXh0ZXJuYWx0b29scy5FeHRlcm5hbFRvb2xCdWlsZGVyPC9uYW1lPgotCQkJPHRyaWdnZXJzPmF1dG8sZnVsbCxpbmNyZW1lbnRhbCw8L3RyaWdnZXJzPgotCQkJPGFyZ3VtZW50cz4KLQkJCQk8ZGljdGlvbmFyeT4KLQkJCQkJPGtleT5MYXVuY2hDb25maWdIYW5kbGU8L2tleT4KLQkJCQkJPHZhbHVlPiZsdDtwcm9qZWN0Jmd0Oy8uZXh0ZXJuYWxUb29sQnVpbGRlcnMvI0VYQU1QTEVfUFJPSkVDVCMubGF1bmNoPC92YWx1ZT4KLQkJCQk8L2RpY3Rpb25hcnk+Ci0JCQkJPGRpY3Rpb25hcnk+Ci0JCQkJCTxrZXk+aW5jY2xlYW48L2tleT4KLQkJCQkJPHZhbHVlPnRydWU8L3ZhbHVlPgotCQkJCTwvZGljdGlvbmFyeT4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9wbGF0Zm9ybS9leGFtcGxlc2J1aWxkZXIvR2VuZXJhdGVFeGFtcGxlQnVpbGRlcnMuamF2YSBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmJ1aWxkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9wbGF0Zm9ybS9leGFtcGxlc2J1aWxkZXIvR2VuZXJhdGVFeGFtcGxlQnVpbGRlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIwYjhkZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5idWlsZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvcGxhdGZvcm0vZXhhbXBsZXNidWlsZGVyL0dlbmVyYXRlRXhhbXBsZUJ1aWxkZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotIC8qKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTIgLSAyMDE4IFJvYmVydCBCb3NjaCBHbWJILgotICogCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMAotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCi0gKiAKLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMucGxhdGZvcm0uZXhhbXBsZXNidWlsZGVyOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXAuRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuU0FYUGFyc2VyRmFjdG9yeTsKLQotaW1wb3J0IG9yZy54bWwuc2F4LkF0dHJpYnV0ZXM7Ci1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LmhlbHBlcnMuRGVmYXVsdEhhbmRsZXI7Ci0KLXB1YmxpYyBjbGFzcyBHZW5lcmF0ZUV4YW1wbGVCdWlsZGVycyB7Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gYXZhaWxhYmxlRXhhbXBsZUZvbGRlcnM9bmV3IFN0cmluZ1tdeyJzYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24iLCAiYW1sdDJpbmNocm9uIn07Ci0JCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRPS0VOX0VYQU1QTEVfUFJPSkVDVCA9ICIjRVhBTVBMRV9QUk9KRUNUIyI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fSU5TVEFMTEVSX1BST0pFQ1QgPSAiI0lOU1RBTExFUl9QUk9KRUNUIyI7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVE9LRU5fUkVMRVZBTlRfUkVTT1VSQ0VTID0gIiNSRUxFVkFOVF9SRVNPVVJDRVMjIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUT0tFTl9SRUZSRVNIX1JFU09VUkNFUyA9ICIjUkVGUkVTSF9SRVNPVVJDRVMjIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOTCA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBGaWxlIHJlbGVuZ1Byb2plY3QgPSBuZXcgRmlsZShhcmdzWzBdKS5nZXRDYW5vbmljYWxGaWxlKCk7Ci0JCWZpbmFsIEZpbGUgaW5zdGFsbGVyUG9qZWN0ID0gbmV3IEZpbGUoYXJnc1sxXSkuZ2V0Q2Fub25pY2FsRmlsZSgpOwotCQlmaW5hbCBGaWxlIHBsdWdpblhNTCA9IG5ldyBGaWxlKGluc3RhbGxlclBvamVjdCwgInBsdWdpbi54bWwiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBbmFseXppbmcgIiArIHBsdWdpblhNTCk7Ci0KLQkJZmluYWwgU0FYUGFyc2VyIHBhcnNlciA9IFNBWFBhcnNlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdTQVhQYXJzZXIoKTsKLQkJZmluYWwgWE1MSGFuZGxlciBoYW5kbGVyID0gbmV3IFhNTEhhbmRsZXIocmVsZW5nUHJvamVjdCwgaW5zdGFsbGVyUG9qZWN0KTsKLQotCQl0cnkgKElucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShwbHVnaW5YTUwpKSB7Ci0JCQlwYXJzZXIucGFyc2UoaW4sIGhhbmRsZXIpOwotCQl9Ci0JfQotCi0Jc3RhdGljIHZvaWQgcHJvY2Vzc1Byb2plY3REZXNjcmlwdG9yKGZpbmFsIEZpbGUgZXhhbXBsZVByb2plY3QsIGZpbmFsIEZpbGUgcmVsZW5nUHJvamVjdCwKLQkJCWZpbmFsIEZpbGUgaW5zdGFsbGVyUHJvamVjdCwgZmluYWwgU3RyaW5nIHRhcmdldEZvbGRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBleGFtcGxlUHJvamVjdE5hbWUgPSBleGFtcGxlUHJvamVjdC5nZXROYW1lKCk7Ci0JCWZpbmFsIFN0cmluZyB0YXJnZXRQYXRoID0gaW5zdGFsbGVyUHJvamVjdC5nZXROYW1lKCkgKyAiLyIgKyB0YXJnZXRGb2xkZXI7Ci0KLQkJZmluYWwgU3RyaW5nQnVpbGRlciByZWxldmFudFJlc291cmNlcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCXJlbGV2YW50UmVzb3VyY2VzLmFwcGVuZChnZXRJdGVtUGF0aCh0YXJnZXRQYXRoLCAyKSk7Ci0KLQkJZm9yIChmaW5hbCBGaWxlIGZpbGUgOiBleGFtcGxlUHJvamVjdC5saXN0RmlsZXMoKSkgewotCQkJZmluYWwgU3RyaW5nIG5hbWUgPSBmaWxlLmdldE5hbWUoKTsKLQkJCWZpbmFsIGludCB0eXBlID0gZmlsZS5pc0RpcmVjdG9yeSgpID8gMiA6IDE7Ci0KLQkJCWlmICghImJpbiIuZXF1YWxzKG5hbWUpKSB7Ci0JCQkJZmluYWwgU3RyaW5nIHBhdGggPSBleGFtcGxlUHJvamVjdE5hbWUgKyAiLyIgKyBuYW1lOwotCQkJCXJlbGV2YW50UmVzb3VyY2VzLmFwcGVuZChnZXRJdGVtUGF0aChwYXRoLCB0eXBlKSk7Ci0JCQl9Ci0JCX0KLQotCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHN1YnN0aXR1dGVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0JCWFkZFN1YnRpdHV0ZShzdWJzdGl0dXRlcywgVE9LRU5fRVhBTVBMRV9QUk9KRUNULCBleGFtcGxlUHJvamVjdC5nZXROYW1lKCkpOwotCQlhZGRTdWJ0aXR1dGUoc3Vic3RpdHV0ZXMsIFRPS0VOX0lOU1RBTExFUl9QUk9KRUNULCBpbnN0YWxsZXJQcm9qZWN0LmdldE5hbWUoKSk7Ci0JCWFkZFN1YnRpdHV0ZShzdWJzdGl0dXRlcywgVE9LRU5fUkVMRVZBTlRfUkVTT1VSQ0VTLCByZWxldmFudFJlc291cmNlcy50b1N0cmluZygpKTsKLQkJYWRkU3VidGl0dXRlKHN1YnN0aXR1dGVzLCBUT0tFTl9SRUZSRVNIX1JFU09VUkNFUywgZ2V0SXRlbVBhdGgobmV3IEZpbGUodGFyZ2V0UGF0aCkuZ2V0UGFyZW50KCksIDIpKTsKLQotCQljb3B5KGV4YW1wbGVQcm9qZWN0LCByZWxlbmdQcm9qZWN0LCBzdWJzdGl0dXRlcywgImNvcHlFeGFtcGxlLmFudCIsICIuZXh0ZXJuYWxUb29sQnVpbGRlcnMvY29weUV4YW1wbGUuYW50Iik7Ci0JCWNvcHkoZXhhbXBsZVByb2plY3QsIHJlbGVuZ1Byb2plY3QsIHN1YnN0aXR1dGVzLCAidGVtcGxhdGUubGF1bmNoIiwKLQkJCQkiLmV4dGVybmFsVG9vbEJ1aWxkZXJzLyIgKyBleGFtcGxlUHJvamVjdE5hbWUgKyAiLmxhdW5jaCIpOwotCi0JCXVwZGF0ZVByb2plY3REZXNjcmlwdGlvbihleGFtcGxlUHJvamVjdCwgcmVsZW5nUHJvamVjdCwgc3Vic3RpdHV0ZXMpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgY29weShmaW5hbCBGaWxlIHRhcmdldFByb2plY3QsIGZpbmFsIEZpbGUgcmVsZW5nUHJvamVjdCwgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBzdWJzdGl0dXRlcywKLQkJCWZpbmFsIFN0cmluZyB0ZW1wbGF0ZSwgZmluYWwgU3RyaW5nIHRhcmdldFBhdGgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZpbmFsIEZpbGUgc291cmNlID0gZ2V0VGVtcGxhdGUocmVsZW5nUHJvamVjdCwgdGVtcGxhdGUpOwotCQlmaW5hbCBTdHJpbmcgY29udGVudCA9IHN1YnN0aXR1dGUocmVhZEZpbGUoc291cmNlKSwgc3Vic3RpdHV0ZXMpOwotCi0JCWZpbmFsIEZpbGUgdGFyZ2V0ID0gbmV3IEZpbGUodGFyZ2V0UHJvamVjdCwgdGFyZ2V0UGF0aCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgR2VuZXJhdGluZyAiICsgdGFyZ2V0LmdldENhbm9uaWNhbFBhdGgoKSk7Ci0JCXRhcmdldC5nZXRQYXJlbnRGaWxlKCkubWtkaXIoKTsKLQkJd3JpdGVGaWxlKHRhcmdldCwgY29udGVudCk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCB1cGRhdGVQcm9qZWN0RGVzY3JpcHRpb24oZmluYWwgRmlsZSB0YXJnZXRQcm9qZWN0LCBmaW5hbCBGaWxlIHJlbGVuZ1Byb2plY3QsCi0JCQlmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHN1YnN0aXR1dGVzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmaW5hbCBGaWxlIHNuaXBwZXRUZW1wbGF0ZSA9IGdldFRlbXBsYXRlKHJlbGVuZ1Byb2plY3QsICJ0ZW1wbGF0ZS5wcm9qZWN0Iik7Ci0JCWZpbmFsIFN0cmluZyBzbmlwcGV0ID0gc3Vic3RpdHV0ZShyZWFkRmlsZShzbmlwcGV0VGVtcGxhdGUpLCBzdWJzdGl0dXRlcyk7Ci0KLQkJZmluYWwgRmlsZSBkZXNjcmlwdGlvbkZpbGUgPSBuZXcgRmlsZSh0YXJnZXRQcm9qZWN0LCAiLnByb2plY3QiKTsKLQkJZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uID0gcmVhZEZpbGUoZGVzY3JpcHRpb25GaWxlKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICBVcGRhdGluZyAiICsgZGVzY3JpcHRpb25GaWxlLmdldENhbm9uaWNhbFBhdGgoKSk7Ci0KLQkJaWYgKGRlc2NyaXB0aW9uLmluZGV4T2Yoc25pcHBldCkgIT0gLTEpIHsKLQkJCS8vIE5vdGhpbmcgdG8gdXBkYXRlCi0JCQlyZXR1cm47Ci0JCX0KLQotCQlTdHJpbmcgbmV3RGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLQotCQlmaW5hbCBQYXR0ZXJuIHBhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUoCi0JCQkJIihcXHMqPGJ1aWxkQ29tbWFuZD4uKj88L2J1aWxkQ29tbWFuZD4pKihcXHMqPGJ1aWxkQ29tbWFuZD4uKj88dmFsdWU+Jmx0O3Byb2plY3QmZ3Q7L1xcLmV4dGVybmFsVG9vbEJ1aWxkZXJzLyIKLQkJCQkJCSsgdGFyZ2V0UHJvamVjdC5nZXROYW1lKCkucmVwbGFjZSgiLiIsICJcXC4iKSArICJcXC5sYXVuY2g8L3ZhbHVlPi4qPzwvYnVpbGRDb21tYW5kPikiLAotCQkJCVBhdHRlcm4uRE9UQUxMKTsKLQkJZmluYWwgTWF0Y2hlciBtYXRjaGVyID0gcGF0dGVybi5tYXRjaGVyKGRlc2NyaXB0aW9uKTsKLQkJaWYgKG1hdGNoZXIuZmluZCgpKSB7Ci0JCQlmaW5hbCBTdHJpbmcgcmVtb3ZlID0gbWF0Y2hlci5ncm91cCgyKTsKLQkJCW5ld0Rlc2NyaXB0aW9uID0gbmV3RGVzY3JpcHRpb24ucmVwbGFjZShyZW1vdmUsICIiKTsKLQkJfQotCi0JCW5ld0Rlc2NyaXB0aW9uID0gbmV3RGVzY3JpcHRpb24ucmVwbGFjZUZpcnN0KCJbIFxcdF0qPC9idWlsZFNwZWM+Iiwgc25pcHBldCArICJcdDwvYnVpbGRTcGVjPiIpOwotCQlpZiAoIW5ld0Rlc2NyaXB0aW9uLmVxdWFscyhkZXNjcmlwdGlvbikpIHsKLQkJCXdyaXRlRmlsZShkZXNjcmlwdGlvbkZpbGUsIG5ld0Rlc2NyaXB0aW9uKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIFN0cmluZyByZWFkRmlsZShmaW5hbCBGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQotCQl0cnkgKEZpbGVSZWFkZXIgaW4gPSBuZXcgRmlsZVJlYWRlcihmaWxlKTsgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGluKSkgewotCQkJU3RyaW5nIGxpbmU7Ci0JCQl3aGlsZSAoKGxpbmUgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgewotCQkJCXJlc3VsdC5hcHBlbmQobGluZSk7Ci0JCQkJcmVzdWx0LmFwcGVuZChOTCk7Ci0JCQl9Ci0KLQkJCXJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgd3JpdGVGaWxlKGZpbmFsIEZpbGUgZmlsZSwgZmluYWwgU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRyeSAoRmlsZVdyaXRlciBvdXQgPSBuZXcgRmlsZVdyaXRlcihmaWxlKTsgQnVmZmVyZWRXcml0ZXIgd3JpdGVyID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG91dCkpIHsKLQkJCXdyaXRlci53cml0ZShjb250ZW50KTsKLQkJCXdyaXRlci5mbHVzaCgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldEl0ZW1QYXRoKGZpbmFsIFN0cmluZyByZXNvdXJjZSwgZmluYWwgaW50IHR5cGUpIHsKLQkJcmV0dXJuICImbHQ7aXRlbSBwYXRoPSZxdW90Oy8iICsgcmVzb3VyY2UucmVwbGFjZSgnXFwnLCAnLycpICsgIiZxdW90OyB0eXBlPSZxdW90OyIgKyB0eXBlCi0JCQkJKyAiJnF1b3Q7LyZndDsmIzEzOyYjMTA7IjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBGaWxlIGdldFRlbXBsYXRlKGZpbmFsIEZpbGUgcm9vdCwgZmluYWwgU3RyaW5nIHRlbXBsYXRlKSB7Ci0JCXJldHVybiBuZXcgRmlsZShyb290LCAiZXhhbXBsZUJ1aWxkZXJUZW1wbGF0ZXMvIiArIHRlbXBsYXRlKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFN1YnRpdHV0ZShmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IHN1YnN0aXR1dGVzLCBmaW5hbCBTdHJpbmcgdG9rZW4sCi0JCQlmaW5hbCBTdHJpbmcgc3Vic3RpdHV0ZSkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICIgKyB0b2tlbiArICIgPSAiICsgc3Vic3RpdHV0ZSk7Ci0JCXN1YnN0aXR1dGVzLnB1dCh0b2tlbiwgc3Vic3RpdHV0ZSk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN1YnN0aXR1dGUoU3RyaW5nIGNvbnRlbnQsIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gc3Vic3RpdHV0ZXMpIHsKLQkJZm9yIChmaW5hbCBFbnRyeTxTdHJpbmcsIFN0cmluZz4gZW50cnkgOiBzdWJzdGl0dXRlcy5lbnRyeVNldCgpKSB7Ci0JCQljb250ZW50ID0gY29udGVudC5yZXBsYWNlKGVudHJ5LmdldEtleSgpLCBlbnRyeS5nZXRWYWx1ZSgpKTsKLQkJfQotCi0JCXJldHVybiBjb250ZW50OwotCX0KLQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFhNTEhhbmRsZXIgZXh0ZW5kcyBEZWZhdWx0SGFuZGxlciB7Ci0JCXByaXZhdGUgZmluYWwgRmlsZSByZWxlbmdQcm9qZWN0OwotCQlwcml2YXRlIGZpbmFsIEZpbGUgaW5zdGFsbGVyUG9qZWN0OwotCi0JCXB1YmxpYyBYTUxIYW5kbGVyKGZpbmFsIEZpbGUgcmVsZW5nUHJvamVjdCwgZmluYWwgRmlsZSBpbnN0YWxsZXJQb2plY3QpIHsKLQkJCXRoaXMucmVsZW5nUHJvamVjdCA9IHJlbGVuZ1Byb2plY3Q7Ci0JCQl0aGlzLmluc3RhbGxlclBvamVjdCA9IGluc3RhbGxlclBvamVjdDsKLQkJfQotCi0JCUBPdmVycmlkZQotCQlwdWJsaWMgdm9pZCBzdGFydEVsZW1lbnQoZmluYWwgU3RyaW5nIHVyaSwgZmluYWwgU3RyaW5nIGxvY2FsTmFtZSwgZmluYWwgU3RyaW5nIHFOYW1lLAotCQkJCWZpbmFsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykgdGhyb3dzIFNBWEV4Y2VwdGlvbiB7Ci0JCQlpZiAoInByb2plY3REZXNjcmlwdG9yIi5lcXVhbHNJZ25vcmVDYXNlKHFOYW1lKSkgewotCQkJCXRyeSB7Ci0JCQkJCWZpbmFsIFN0cmluZyBuYW1lID0gYXR0cmlidXRlcy5nZXRWYWx1ZSgibmFtZSIpOwotCQkJCQlmaW5hbCBTdHJpbmcgY29udGVudFVSSSA9IGF0dHJpYnV0ZXMuZ2V0VmFsdWUoImNvbnRlbnRVUkkiKTsKLQkJCQkJICBGaWxlIGV4YW1wbGVQcm9qZWN0ID0gbnVsbDsKLQkJCQkJCi0JCQkJCQotCQkJCQlmb3IoU3RyaW5nIGV4YW1wbGVzRm9sZGVyOiBhdmFpbGFibGVFeGFtcGxlRm9sZGVycyl7Ci0JCQkJCQkKLQkJCQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKHRoaXMuaW5zdGFsbGVyUG9qZWN0LCAiLi4vLi4vZXhhbXBsZXMvIitleGFtcGxlc0ZvbGRlcisiLyIgKyBuYW1lKTsKLQkJCQkJCWlmKGZpbGUuZXhpc3RzKCkpewotCQkJCQkJCWV4YW1wbGVQcm9qZWN0PWZpbGU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCX0KLQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgIFByb2Nlc3NpbmcgIiArIG5hbWUgKyAiIC0tPiAiICsgY29udGVudFVSSSk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgZXhhbXBsZVByb2plY3Q6ICIgKyBleGFtcGxlUHJvamVjdCk7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgaW5zdGFsbGVyUHJvamVjdDogIiArIHRoaXMuaW5zdGFsbGVyUG9qZWN0KTsKLQotCQkJCQlwcm9jZXNzUHJvamVjdERlc2NyaXB0b3IoZXhhbXBsZVByb2plY3QsIHRoaXMucmVsZW5nUHJvamVjdCwgdGhpcy5pbnN0YWxsZXJQb2plY3QsIGNvbnRlbnRVUkkpOwotCQkJCX0KLQkJCQljYXRjaCAoZmluYWwgRXhjZXB0aW9uIGV4KSB7Ci0JCQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9wb20ueG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2OTJmNzkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotCQk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXI8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE4YzRiZi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9wb20ueG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNzcxNTUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIj4KLQotCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLQotCTxwYXJlbnQ+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQ8L2FydGlmYWN0SWQ+Ci0JCTx2ZXJzaW9uPjAuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgotCTwvcGFyZW50PgotCi0JPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwbzwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcmVwb3NpdG9yeTwvcGFja2FnaW5nPgotCQotCTxwcm9wZXJ0aWVzPgotCQk8b3JnLmpib3NzLnRvb2xzLnR5Y2hvLXBsdWdpbnMudmVyc2lvbj4wLjIyLjA8L29yZy5qYm9zcy50b29scy50eWNoby1wbHVnaW5zLnZlcnNpb24+Ci0JPC9wcm9wZXJ0aWVzPgotCQotCTxwbHVnaW5SZXBvc2l0b3JpZXM+Ci0JCTxwbHVnaW5SZXBvc2l0b3J5PgotCQkJPGlkPmpib3NzLXB1YmxpYy1yZXBvc2l0b3J5LWdyb3VwPC9pZD4KLQkJCTxuYW1lPkpCb3NzIFB1YmxpYyBSZXBvc2l0b3J5IEdyb3VwPC9uYW1lPgotCQkJPHVybD5odHRwOi8vcmVwb3NpdG9yeS5qYm9zcy5vcmcvbmV4dXMvY29udGVudC9ncm91cHMvcHVibGljLzwvdXJsPgotCQk8L3BsdWdpblJlcG9zaXRvcnk+Ci0KLQkJPHBsdWdpblJlcG9zaXRvcnk+Ci0JCQk8aWQ+amJvc3Mtc25hcHNob3RzLXJlcG9zaXRvcnk8L2lkPgotCQkJPG5hbWU+SkJvc3MgU25hcHNob3RzIFJlcG9zaXRvcnk8L25hbWU+Ci0JCQk8dXJsPmh0dHBzOi8vcmVwb3NpdG9yeS5qYm9zcy5vcmcvbmV4dXMvY29udGVudC9yZXBvc2l0b3JpZXMvc25hcHNob3RzLzwvdXJsPgotCQk8L3BsdWdpblJlcG9zaXRvcnk+Ci0JCSAgCi0JCQotCTwvcGx1Z2luUmVwb3NpdG9yaWVzPgotCi0JPGJ1aWxkPgotCQk8cGx1Z2lucz4KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG88L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+dHljaG8tcDItcmVwb3NpdG9yeS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4KLQotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8Y29tcHJlc3MvPgotCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCTwvcGx1Z2luPgotCi0JCQkKLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmpib3NzLnRvb2xzLnR5Y2hvLXBsdWdpbnM8L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+cmVwb3NpdG9yeS11dGlsczwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4ke29yZy5qYm9zcy50b29scy50eWNoby1wbHVnaW5zLnZlcnNpb259PC92ZXJzaW9uPgotCi0JCQkJPGV4ZWN1dGlvbnM+Ci0JCQkJCTxleGVjdXRpb24+Ci0JCQkJCQk8aWQ+Z2VuZXJhdGUtZmFjYWRlPC9pZD4KLQkJCQkJCTxwaGFzZT5wYWNrYWdlPC9waGFzZT4KLQkKLQkJCQkJCTxnb2Fscz4KLQkJCQkJCQk8Z29hbD5nZW5lcmF0ZS1yZXBvc2l0b3J5LWZhY2FkZTwvZ29hbD4KLQkJCQkJCTwvZ29hbHM+Ci0JCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJCQk8c2l0ZVRlbXBsYXRlRm9sZGVyPnNpdGVUZW1wbGF0ZTwvc2l0ZVRlbXBsYXRlRm9sZGVyPgotCQkJCQkJCQotCQkJCQkJCTwhLS0gU3ltYm9scyBhcmUgdXNlZCB3aGlsZSBleHBhbmRpbmcgaW5kZXguaHRtbCB0ZW1wbGF0ZSAtLT4KLQkJCQkJCQk8c3ltYm9scz4KLQkJCQkJCQkJPHVwZGF0ZS5zaXRlLm5hbWU+JHtwcm9qZWN0LnBhcmVudC5uYW1lfTwvdXBkYXRlLnNpdGUubmFtZT4KLQkJCQkJCQkJPHRhcmdldC5lY2xpcHNlLnZlcnNpb24+NC42LjA8L3RhcmdldC5lY2xpcHNlLnZlcnNpb24+Ci0JCQkJCQkJPC9zeW1ib2xzPgotCi0JCQkJCQkJPGFzc29jaWF0ZVNpdGVzPgotCQkJCQkJCQotCQkJCQkJCTwhLS0gPHNpdGU+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2FwcDRtYy91cGRhdGVzaXRlcy9yZWxlYXNlcy8wLjguMy88L3NpdGU+Ci0JCQkJCSAJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy90bWYveHRleHQvdXBkYXRlcy9yZWxlYXNlcy8yLjEwLjAvPC9zaXRlPiAKLQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDE3MDMwNzE4MDYzNS9yZXBvc2l0b3J5Lzwvc2l0ZT4KLQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvZW1mL2VtZi91cGRhdGVzL3JlbGVhc2VzLzIuOS4yLzwvc2l0ZT4KLQkJCQkJCQkgLS0+Ci0JCQkJCQkgCi0JCQkJCQkJPC9hc3NvY2lhdGVTaXRlcz4KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCQkJPC9leGVjdXRpb24+Ci0JCQkJPC9leGVjdXRpb25zPgotCQkJPC9wbHVnaW4+Ci0JCTwvcGx1Z2lucz4KLQk8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vc2l0ZS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vc2l0ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlMTc5MDEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL3NpdGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzaXRlPgotICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uY29yZS5mZWF0dXJlXzAuMy4wLnF1YWxpZmllci5qYXIiIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uY29yZS5mZWF0dXJlIiB2ZXJzaW9uPSIwLjMuMC5xdWFsaWZpZXIiPgotICAgICAgPGNhdGVnb3J5IG5hbWU9IkFQUDRNQyBFTUYgbW9kZWwgVHJhbnNmb3JtYXRpb24iLz4KLSAgIDwvZmVhdHVyZT4KLSAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmZlYXR1cmVfMC4zLjAucXVhbGlmaWVyLmphciIgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5mZWF0dXJlIiB2ZXJzaW9uPSIwLjMuMC5xdWFsaWZpZXIiPgotICAgICAgPGNhdGVnb3J5IG5hbWU9IkFQUDRNQyBFTUYgbW9kZWwgVHJhbnNmb3JtYXRpb24iLz4KLSAgIDwvZmVhdHVyZT4KLSAgIDxjYXRlZ29yeS1kZWYgbmFtZT0iQVBQNE1DIEVNRiBtb2RlbCBUcmFuc2Zvcm1hdGlvbiIgbGFiZWw9Im9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8iLz4KLTwvc2l0ZT4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvYW1sdDJpbmNocm9uL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm0udG8uaW5jaHJvbi5tMm0vc3JjL21vZGVsL2xvYWRlci9BbWFsdGhlYU11bHRpRmlsZUxvYWRlci5qYXZhIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9hbWx0MmluY2hyb24vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybS9zcmMvbW9kZWwvbG9hZGVyL0FtYWx0aGVhTXVsdGlGaWxlTG9hZGVyLmphdmEKaW5kZXggNTEzNDUyNC4uODMxZjQ4ZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9hbWx0MmluY2hyb24vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybS9zcmMvbW9kZWwvbG9hZGVyL0FtYWx0aGVhTXVsdGlGaWxlTG9hZGVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9hbWx0MmluY2hyb24vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybS9zcmMvbW9kZWwvbG9hZGVyL0FtYWx0aGVhTXVsdGlGaWxlTG9hZGVyLmphdmEKQEAgLTcyLDYgKzcyLDcgQEAKIAogCQlmb3IgKEZpbGUgYW14bWlGaWxlIDogbGlzdEZpbGVzKSB7CiAKKwkJCWxvZ2dlci5pbmZvKCJsb2FkaW5nIGZpbGUgOiIrYW14bWlGaWxlLmdldE5hbWUoKSk7CiAJCQlTdHJpbmcgYWJzb2x1dGVQYXRoID0gYW14bWlGaWxlLmdldEFic29sdXRlUGF0aCgpOwogCQkJZmluYWwgUmVzb3VyY2UgcmVzID0gcmVzb3VyY2VTZXQuY3JlYXRlUmVzb3VyY2UoVVJJLmNyZWF0ZVVSSSgiZmlsZTovLy8vIiArIGFic29sdXRlUGF0aCkpOwogCQkJdHJ5IHsKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvYW1sdDJpbmNocm9uL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm0udG8uaW5jaHJvbi5tMm0vc3JjL3RlbXBsYXRlcy9tMm0vc3cvcnVubmFibGVJdGVtL1RpY2tzVHJhbnNmb3JtZXIueHRlbmQgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL2FtbHQyaW5jaHJvbi9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtLnRvLmluY2hyb24ubTJtL3NyYy90ZW1wbGF0ZXMvbTJtL3N3L3J1bm5hYmxlSXRlbS9UaWNrc1RyYW5zZm9ybWVyLnh0ZW5kCmluZGV4IDM2MGM5ZmIuLmU5ZDRiMTYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvYW1sdDJpbmNocm9uL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm0udG8uaW5jaHJvbi5tMm0vc3JjL3RlbXBsYXRlcy9tMm0vc3cvcnVubmFibGVJdGVtL1RpY2tzVHJhbnNmb3JtZXIueHRlbmQKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9hbWx0MmluY2hyb24vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybS9zcmMvdGVtcGxhdGVzL20ybS9zdy9ydW5uYWJsZUl0ZW0vVGlja3NUcmFuc2Zvcm1lci54dGVuZApAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLkRlcGxveW1lbnRVdGlsCiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmVjb3JlLnV0aWwuRWNvcmVVdGlsCiBpbXBvcnQgdGVtcGxhdGVzLkFic3RyYWN0QW1hbHRoZWFJbmNocm9uVHJhbnNmb3JtZXIKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUHJvY2Vzc2luZ1VuaXQKIAogQFNpbmdsZXRvbgogY2xhc3MgVGlja3NUcmFuc2Zvcm1lciBleHRlbmRzIEFic3RyYWN0QW1hbHRoZWFJbmNocm9uVHJhbnNmb3JtZXIgewpAQCAtNDUsMTIgKzQ2LDIxIEBACiAJCQlFY29yZVV0aWwuZ2V0Um9vdENvbnRhaW5lcihhbWx0VGFzaykgYXMgQW1hbHRoZWEpOwogCiAJCS8vZ2V0IGRpc3RyaWJ1dGlvbiAoZXh0ZW5kZWQgaWYgcHJvdmlkZWQgYnkgdGhlIG1vZGVsIGVsZW1lbnQpCi0JCXZhbCBhbWx0Q29yZSA9IGFtbHRDb3Jlcz8uZ2V0KDApCisJCXZhciBQcm9jZXNzaW5nVW5pdCBhbWx0Q29yZSA9IG51bGwKKwkJCisJCWlmKGFtbHRDb3JlcyE9PW51bGwgJiYgYW1sdENvcmVzLnNpemU+MCl7CisJCQlhbWx0Q29yZT1hbWx0Q29yZXM/LmdldCgwKQorCQl9CisKIAkJdmFyIGFtbHREaXN0cmlidXRpb24gPSBhbWx0VGlja3M/LmV4dGVuZGVkLmdldChhbWx0Q29yZT8uZGVmaW5pdGlvbikKIAkJaWYgKGFtbHREaXN0cmlidXRpb24gPT09IG51bGwpIHsKIAkJCWFtbHREaXN0cmlidXRpb24gPSBhbWx0VGlja3MuXmRlZmF1bHQKIAkJfQogCQkKKwkJaWYoYW1sdERpc3RyaWJ1dGlvbj09PW51bGwpCisJCXsKKwkJCXJldHVybgorCQl9CiAJCS8vdHJhbnNmb3JtIGJhc2ljIGVsZW1lbnRzCiAJCWl0Lm1pbiA9IGNyZWF0ZVRpbWVUaWNrcyggYW1sdERpc3RyaWJ1dGlvbi5sb3dlckJvdW5kKQogCQlpdC5tZWFuID0gIGNyZWF0ZVRpbWVUaWNrcyhhbWx0RGlzdHJpYnV0aW9uLmF2ZXJhZ2UpCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLm1ldGFtb2RlbHZpZXdlci8uY2xhc3NwYXRoIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvLmNsYXNzcGF0aApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMubWV0YW1vZGVsdmlld2VyLy5jbGFzc3BhdGgKY29weSB0byBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bS5leGFtcGxlLnRyYW5zZm9ybS5jdXN0LmFwcC8uY2xhc3NwYXRoCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bS5leGFtcGxlLnRyYW5zZm9ybS5jdXN0LmFwcC8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTkwMmU4Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitvdXRwdXQvKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bS5leGFtcGxlLnRyYW5zZm9ybS5jdXN0LmFwcC8ucHJvamVjdApzaW1pbGFyaXR5IGluZGV4IDkyJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL25ldC5zb3VyY2Vmb3JnZS5wbGFudHVtbC8ucHJvamVjdApjb3B5IHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwLy5wcm9qZWN0CmluZGV4IDc2MTRiZDAuLmY3M2Y5ODIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9uZXQuc291cmNlZm9yZ2UucGxhbnR1bWwvLnByb2plY3QKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvLnByb2plY3QKQEAgLTEsNiArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5uZXQuc291cmNlZm9yZ2UucGxhbnR1bWw8L25hbWU+CisJPG5hbWU+YXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHA8L25hbWU+CiAJPGNvbW1lbnQ+PC9jb21tZW50PgogCTxwcm9qZWN0cz4KIAk8L3Byb2plY3RzPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKY29weSB0byBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bS5leGFtcGxlLnRyYW5zZm9ybS5jdXN0LmFwcC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwL0N1c3RfTW9kZWxUcmFuc2Zvcm1hdGlvbi5wcm9kdWN0IGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvQ3VzdF9Nb2RlbFRyYW5zZm9ybWF0aW9uLnByb2R1Y3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI4ZWMxMQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwL0N1c3RfTW9kZWxUcmFuc2Zvcm1hdGlvbi5wcm9kdWN0CkBAIC0wLDAgKzEsMTk0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9wZGUgdmVyc2lvbj0iMy41Ij8+CisKKzxwcm9kdWN0IG5hbWU9IkV4YW1wbGU6IFNhbXBsZSBNb2RlbCBUcmFuc2Zvcm1hdGlvbiIgdWlkPSJ0ZXN0IiBpZD0iYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC5wcm9kdWN0IiBhcHBsaWNhdGlvbj0iYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC5hcHBsaWNhdGlvbiIgdmVyc2lvbj0iMSIgdXNlRmVhdHVyZXM9ImZhbHNlIiBpbmNsdWRlTGF1bmNoZXJzPSJ0cnVlIj4KKworICAgPGNvbmZpZ0luaSB1c2U9ImRlZmF1bHQiPgorICAgPC9jb25maWdJbmk+CisKKyAgIDxsYXVuY2hlckFyZ3M+CisgICAgICA8cHJvZ3JhbUFyZ3M+LS1pbnB1dC5wcm9wcyAmcXVvdDske3dvcmtzcGFjZV9sb2M6YXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHB9L2lucHV0LnByb3BlcnRpZXMmcXVvdDsKKyAgICAgIDwvcHJvZ3JhbUFyZ3M+CisgICAgICA8dm1BcmdzTWFjPi1Yc3RhcnRPbkZpcnN0VGhyZWFkIC1Eb3JnLmVjbGlwc2Uuc3d0LmludGVybmFsLmNhcmJvbi5zbWFsbEZvbnRzCisgICAgICA8L3ZtQXJnc01hYz4KKyAgIDwvbGF1bmNoZXJBcmdzPgorCisgICA8d2luZG93SW1hZ2VzLz4KKworICAgPGxhdW5jaGVyPgorICAgICAgPHdpbiB1c2VJY289ImZhbHNlIj4KKyAgICAgICAgIDxibXAvPgorICAgICAgPC93aW4+CisgICA8L2xhdW5jaGVyPgorCisgICA8dm0+CisgICA8L3ZtPgorCisgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4gaWQ9ImFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAiLz4KKyAgICAgIDxwbHVnaW4gaWQ9ImFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm0iLz4KKyAgICAgIDxwbHVnaW4gaWQ9ImFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQiLz4KKyAgICAgIDxwbHVnaW4gaWQ9ImFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdCIgZnJhZ21lbnQ9InRydWUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9ImFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbCIvPgorICAgICAgPHBsdWdpbiBpZD0iY29tLmdvb2dsZS5ndWF2YSIvPgorICAgICAgPHBsdWdpbiBpZD0iY29tLmdvb2dsZS5pbmplY3QiLz4KKyAgICAgIDxwbHVnaW4gaWQ9ImNvbS5pYm0uaWN1Ii8+CisgICAgICA8cGx1Z2luIGlkPSJjb20uaW5jaHJvbi5yZWFsdGltZS5yb290Ii8+CisgICAgICA8cGx1Z2luIGlkPSJqYXZheC5hbm5vdGF0aW9uIi8+CisgICAgICA8cGx1Z2luIGlkPSJqYXZheC5pbmplY3QiLz4KKyAgICAgIDxwbHVnaW4gaWQ9ImphdmF4LnhtbCIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5iYXRpay5jb25zdGFudHMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuYmF0aWsuY3NzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmJhdGlrLmkxOG4iLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuYmF0aWsudXRpbCIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5iYXRpay51dGlsLmd1aSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNsaSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmlvIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuanhwYXRoIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubGFuZyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmciLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5tYXRoMyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5mZWxpeC5nb2dvLmNvbW1hbmQiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuZmVsaXguZ29nby5jb21tYW5kLnNvdXJjZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5mZWxpeC5nb2dvLnJ1bnRpbWUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuZmVsaXguZ29nby5ydW50aW1lLnNvdXJjZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5mZWxpeC5nb2dvLnNoZWxsIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmZlbGl4LmdvZ28uc2hlbGwuc291cmNlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmZlbGl4LnNjciIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5mZWxpeC5zY3Iuc291cmNlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmxvZzRqIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLnhlcmNlcyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS54bWwucmVzb2x2ZXIiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXIiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUueG1sZ3JhcGhpY3MiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5jb252ZXJ0ZXJzLmxvZzRqLmNvbmZpZ3VyYXRpb24iIGZyYWdtZW50PSJ0cnVlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbiIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmNvbXBhcmUuY29yZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuY29yZS5jb250ZW50dHlwZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5vYnNlcnZhYmxlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmRhdGFiaW5kaW5nLnByb3BlcnR5Ii8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmV4cHJlc3Npb25zIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmZpbGVzeXN0ZW0iLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmNvcmUuZmlsZXN5c3RlbS53aW4zMi54ODZfNjQiIGZyYWdtZW50PSJ0cnVlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLmpvYnMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy53aW4zMi54ODZfNjQiIGZyYWdtZW50PSJ0cnVlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmNvcmUudmFyaWFibGVzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC5jb3JlLmNvbW1hbmRzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC5jb3JlLmNvbnRleHRzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC5jb3JlLmRpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmFubm90YXRpb25zIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC5jb3JlLmRpLmV4dGVuc2lvbnMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LmNvcmUuZGkuZXh0ZW5zaW9ucy5zdXBwbGllciIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZTQuY29yZS5zZXJ2aWNlcyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZTQuZW1mLnhwYXRoIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS5iaW5kaW5ncyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZTQudWkuY3NzLmNvcmUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNzcy5zd3QiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNzcy5zd3QudGhlbWUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmRpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS5kaWFsb2dzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS5tb2RlbC53b3JrYmVuY2giLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS53aWRnZXRzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2giLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLndvcmtiZW5jaC5hZGRvbnMuc3d0Ii8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS53b3JrYmVuY2gucmVuZGVyZXJzLnN3dCIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoLnN3dCIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZTQudWkud29ya2JlbmNoMyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZW1mIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS5jaGFuZ2UiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54Y29yZS5saWIiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVtZi5lZGl0Ii8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lbWYuZWRpdC51aSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZW1mLnRyYW5zYWN0aW9uIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lbWYudHJhbnNhY3Rpb24udWkiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVtZi52YWxpZGF0aW9uIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lbWYud29ya3NwYWNlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lbWYud29ya3NwYWNlLnVpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmFwcCIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5iaWRpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LmNvbW1vbiIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5kcyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5ldmVudCIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi5jb3JlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLmVuZ2luZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi5tZXRhZGF0YS5yZXBvc2l0b3J5Ii8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnAyLnJlcG9zaXRvcnkiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucHJlZmVyZW5jZXMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucmVnaW9uIiBmcmFnbWVudD0idHJ1ZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5yZWdpc3RyeSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5zZWN1cml0eSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5zZWN1cml0eS53aW4zMi54ODZfNjQiIGZyYWdtZW50PSJ0cnVlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LnN1cHBsZW1lbnQiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gudHJhbnNmb3Jtcy5ob29rIiBmcmFnbWVudD0idHJ1ZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC51dGlsIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lcXVpbm94LndlYXZpbmcuaG9vayIgZnJhZ21lbnQ9InRydWUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmZ4Lm9zZ2kiIGZyYWdtZW50PSJ0cnVlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5oZWxwIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5qZmFjZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuamZhY2UuZGF0YWJpbmRpbmciLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmpmYWNlLnRleHQiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLm9zZ2kuY29tcGF0aWJpbGl0eS5zdGF0ZSIgZnJhZ21lbnQ9InRydWUiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZXMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZXMuc291cmNlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5vc2dpLnV0aWwiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYuZWRpdG9ycyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uuc3BoaW54LmVtZi5lZGl0b3JzLmZvcm1zIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5zcGhpbnguZW1mLnVpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5zcGhpbnguZW1mLndvcmtzcGFjZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uuc3BoaW54LmVtZi53b3Jrc3BhY2UudWkiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnNwaGlueC5wbGF0Zm9ybSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uuc3BoaW54LnBsYXRmb3JtLnVpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5zd3QiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnN3dC53aW4zMi53aW4zMi54ODZfNjQiIGZyYWdtZW50PSJ0cnVlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS50ZXh0Ii8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS51aSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UudWkuY29uc29sZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UudWkuZm9ybXMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnVpLmlkZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UudWkubmF2aWdhdG9yIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS51aS52aWV3cyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy50YWJiZWQiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnVpLndpbjMyIiBmcmFnbWVudD0idHJ1ZSIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UueHRlbmQubGliIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS54dGVuZC5saWIubWFjcm8iLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLnh0ZXh0LmxvZ2dpbmciIGZyYWdtZW50PSJ0cnVlIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5saWIiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5qZG9tIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcudHVrYWFuaS54eiIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLnczYy5jc3Muc2FjIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcudzNjLmRvbS5ldmVudHMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy53M2MuZG9tLnNtaWwiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy53M2MuZG9tLnN2ZyIvPgorICAgPC9wbHVnaW5zPgorCisgICA8Y29uZmlndXJhdGlvbnM+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUiIGF1dG9TdGFydD0idHJ1ZSIgc3RhcnRMZXZlbD0iMSIgLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIGF1dG9TdGFydD0iZmFsc2UiIHN0YXJ0TGV2ZWw9IjEiIC8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2VzIiBhdXRvU3RhcnQ9ImZhbHNlIiBzdGFydExldmVsPSIwIiAvPgorICAgICAgPHByb3BlcnR5IG5hbWU9ImVxdWlub3gudXNlLmRzIiB2YWx1ZT0iZmFsc2UiIC8+CisgICA8L2NvbmZpZ3VyYXRpb25zPgorCisgICA8cHJlZmVyZW5jZXNJbmZvPgorICAgICAgPHRhcmdldGZpbGUgb3ZlcndyaXRlPSJmYWxzZSIvPgorICAgPC9wcmVmZXJlbmNlc0luZm8+CisKKyAgIDxjc3NJbmZvPgorICAgPC9jc3NJbmZvPgorCis8L3Byb2R1Y3Q+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bS5leGFtcGxlLnRyYW5zZm9ybS5jdXN0LmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzQ5ODYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bS5leGFtcGxlLnRyYW5zZm9ybS5jdXN0LmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDcgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IEFwcAorQnVuZGxlLVN5bWJvbGljTmFtZTogYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAKK0J1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAKK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bS5leGFtcGxlLnRyYW5zZm9ybS5jdXN0LmFwcC9idWlsZC5wcm9wZXJ0aWVzIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGQyZTRkCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvYnVpbGQucHJvcGVydGllcwpAQCAtMCwwICsxLDQgQEAKK3NvdXJjZS4uID0gc3JjLworb3V0cHV0Li4gPSBiaW4vCitiaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAorICAgICAgICAgICAgICAgLgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvYnVpbGQucHJvcGVydGllcyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwL2lucHV0LnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5yZXNvdXJjZXNldC5tYXBwZXIvYnVpbGQucHJvcGVydGllcwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvaW5wdXQucHJvcGVydGllcwppbmRleCA0MTU5M2ExLi40YTNhMjY2IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnJlc291cmNlc2V0Lm1hcHBlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwL2lucHV0LnByb3BlcnRpZXMKQEAgLTEsNSArMSw1IEBACiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSMgIENvcHlyaWdodCAoYykgMjAxNyAtIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4KKyMgIENvcHlyaWdodCAoYykgMjAxOCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLgogIyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogIyAgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAKICMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0CkBAIC05LDEyICs5LDggQEAKICMgIAkgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICMgCiAjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLXNvdXJjZS4uID0gc3JjLwotb3V0cHV0Li4gPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgLixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgZXBsLTIuMC5odG1sCi1zcmMuaW5jbHVkZXMgPSBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGVwbC0yLjAuaHRtbAoraW5wdXRfbW9kZWxzX2ZvbGRlcj0uL2lucHV0L2FtYWx0aGVhX21vZGVscworbTJtX291dHB1dF9mb2xkZXI9Li9vdXRwdXQvbTJtX291dHB1dF9tb2RlbHMKK20ydF9vdXRwdXRfZm9sZGVyPS4vb3V0cHV0L20ydF9vdXRwdXRfdGV4dF9maWxlcworbG9nX2ZpbGU9Li9vdXRwdXQvdHJhbnNmb3JtYXRpb24udHh0Cit0cmFuZm9ybWF0aW9uQ29uZmlnSURzPWFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdDEuY29uZmlnMQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwL2lucHV0L2FtYWx0aGVhX21vZGVscy9kZW1vY2FyLmFteG1pIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAvaW5wdXQvYW1hbHRoZWFfbW9kZWxzL2RlbW9jYXIuYW14bWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc2NzIzYgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtLmV4YW1wbGUudHJhbnNmb3JtLmN1c3QuYXBwL2lucHV0L2FtYWx0aGVhX21vZGVscy9kZW1vY2FyLmFteG1pCkBAIC0wLDAgKzEsNzk5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGFtOkFtYWx0aGVhIHhtbG5zOmFtPSJodHRwOi8vYXBwNG1jLmVjbGlwc2Uub3JnL2FtYWx0aGVhLzAuOS44IiB4bWxuczp4bWk9Imh0dHA6Ly93d3cub21nLm9yZy9YTUkiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtaTp2ZXJzaW9uPSIyLjAiPgorICA8Y29tbW9uRWxlbWVudHM+CisgICAgPHRhZ3MgbmFtZT0iU3djRW5naW5lQ29udHJvbGxlciIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPgorICAgIDx0YWdzIG5hbWU9IlN3Y0FjdHVhdG9ycyIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPgorICAgIDx0YWdzIG5hbWU9IlN3Y0JyYWtlRm9yY2VBcmJpdGVyIiB0YWdUeXBlPSJTT0ZUV0FSRV9DT01QT05FTlQiIC8+CisgICAgPHRhZ3MgbmFtZT0iU3djQUJTQ2FsY3VsYXRpb24iIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4KKyAgICA8dGFncyBuYW1lPSJTd2NTZW5zb3JzIiB0YWdUeXBlPSJTT0ZUV0FSRV9DT01QT05FTlQiIC8+CisgICAgPHRhZ3MgbmFtZT0iU3djU2Vuc29yUG9zdHByb2Nlc3NpbmciIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4KKyAgICA8dGFncyBuYW1lPSJTd2NDeWxOdW1PYnNlcnZlciIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPgorICAgIDx0YWdzIG5hbWU9IlN3Y0JyYWtlRm9yY2VDYWxjdWxhdGlvbiIgdGFnVHlwZT0iU09GVFdBUkVfQ09NUE9ORU5UIiAvPgorICAgIDx0YWdzIG5hbWU9IlN3Y0VuZ2luZVNlbnNvcnMiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4KKyAgICA8dGFncyBuYW1lPSJTd2NJbmpJZ25BY3R1YXRpb24iIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4KKyAgPC9jb21tb25FbGVtZW50cz4KKyAgPHN3TW9kZWw+CisgICAgPHRhc2tzIG5hbWU9IlRhc2tfMTBNUyIgc3RpbXVsaT0iVGltZXJfMTBNUz90eXBlPVBlcmlvZGljU3RpbXVsdXMiIHByZWVtcHRpb249InByZWVtcHRpdmUiIG11bHRpcGxlVGFza0FjdGl2YXRpb25MaW1pdD0iMTAiPgorICAgICAgPGN1c3RvbVByb3BlcnRpZXMga2V5PSJwcmlvcml0eSI+CisgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06U3RyaW5nT2JqZWN0IiB2YWx1ZT0iMTAiIC8+CisgICAgICA8L2N1c3RvbVByb3BlcnRpZXM+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkNoZWNrUGxhdXNhYmlsaXR5P3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUFjdHVhdG9yTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRGlhZ25vc2lzQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVN0YXRlTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZVNhZmV0eU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkFCU0NhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iU3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkRlY2VsZXJhdGlvblNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkRlY2VsZXJhdGlvblNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iV2hlZWxTcGVlZFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVDb250cm9sbGVyP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJBUGVkVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJhc2VGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVG90YWxGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVHJhbnNpZW50RnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkluamVjdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9Iklnbml0aW9uVGltaW5nP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJJZ25pdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3Rhc2tzPgorICAgIDx0YXNrcyBuYW1lPSJUYXNrXzIwTVMiIHN0aW11bGk9IlRpbWVyXzIwTVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBwcmVlbXB0aW9uPSJwcmVlbXB0aXZlIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjEwIj4KKyAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0icHJpb3JpdHkiPgorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlN0cmluZ09iamVjdCIgdmFsdWU9IjEwIiAvPgorICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvdGFza3M+CisgICAgPHRhc2tzIG5hbWU9IlRhc2tfNU1TIiBzdGltdWxpPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBwcmVlbXB0aW9uPSJwcmVlbXB0aXZlIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjEwIj4KKyAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0icHJpb3JpdHkiPgorICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlN0cmluZ09iamVjdCIgdmFsdWU9IjEwIiAvPgorICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VTdG9wTGlnaHRBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1QnJha2VQZWRhbFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VWZWhpY2xlU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdVdoZWVsU3BlZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkFQZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlRocm90dGxlU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJNYXNzQWlyRmxvd1NlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvdGFza3M+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJBQlNDYWxjdWxhdGlvbiIgdGFncz0iU3djQUJTQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRWZWhpY2xlU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkV2hlZWxTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBQlNBY3RpdmF0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQUJTTW9kZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJBUGVkU2Vuc29yIiB0YWdzPSJTd2NFbmdpbmVTZW5zb3JzP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkU2Vuc29yMVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRTZW5zb3IyVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRQb3NpdGlvbjE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkFQZWRWb3RlciIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkQVBlZFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkJhc2VGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTWFzc0FpckZsb3c/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCYXNlRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNQUZSYXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlQWN0dWF0b3IiIHRhZ3M9IlN3Y0FCU0NhbGN1bGF0aW9uP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxpcGVyUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZUFjdHVhdG9yTW9uaXRvciIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlRmVlZGJhY2s/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VGb3JjZUFjdHVhdGlvbiIgdGFncz0iU3djQUJTQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU0FjdGl2YXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU01vZGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUN1cnJlbnQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VGb3JjZUFyYml0ZXIiIHRhZ3M9IlN3Y0JyYWtlRm9yY2VBcmJpdGVyP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxjdWxhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VTYWZldHlTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlRm9yY2VDYWxjdWxhdGlvbiIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VGZWVkYmFjaz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZERpYWdub3Npc1JlcXVlc3Q/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1vbml0b3JlZFZlaGljbGVTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VTYWZldHlMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGN1bGF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VNb25pdG9yTGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VQZWRhbFNlbnNvckRpYWdub3NpcyIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZVBlZGFsU2Vuc29yVHJhbnNsYXRpb24iIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24xP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZVBlZGFsU2Vuc29yVm90ZXIiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24xP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VTYWZldHlNb25pdG9yIiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUZlZWRiYWNrP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBcmJpdHJhdGVkRGlhZ25vc2lzUmVxdWVzdD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTW9uaXRvcmVkVmVoaWNsZVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZU1vbml0b3JMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5TGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVNhZmV0eVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkNhbGlwZXJQb3NpdGlvbkNhbGN1bGF0aW9uIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsaXBlclBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlQ3VycmVudD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGlwZXJQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJDaGVja1BsYXVzYWJpbGl0eSIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZEJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJDeWxOdW1PYnNlcnZlciIgdGFncz0iU3djQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVHJpZ2dlcmVkQ3lsaW5kZXJOdW1iZXI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iRGVjZWxlcmF0aW9uU2Vuc29yRGlhZ25vc2lzIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkRlY2VsZXJhdGlvblNlbnNvclRyYW5zbGF0aW9uIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25SYXRlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJEZWNlbGVyYXRpb25TZW5zb3JWb3RlciIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblJhdGUxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25SYXRlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJEaWFnbm9zaXNBcmJpdGVyIiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkVjdUJyYWtlQWN0dWF0b3IiIHRhZ3M9IlN3Y0FjdHVhdG9ycz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1QnJha2VQZWRhbFNlbnNvciIgdGFncz0iU3djU2Vuc29ycz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iMTQ0MDAwIiB1cHBlckJvdW5kPSIxNzYwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSIxNjAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yIiB0YWdzPSJTd2NTZW5zb3JzP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSIxNDQwMDAiIHVwcGVyQm91bmQ9IjE3NjAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjE2MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJFY3VTdG9wTGlnaHRBY3R1YXRvciIgdGFncz0iU3djQWN0dWF0b3JzP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUFwcGxpY2F0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkVjdVZlaGljbGVTcGVlZFNlbnNvciIgdGFncz0iU3djU2Vuc29ycz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1V2hlZWxTcGVlZFNlbnNvciIgdGFncz0iU3djU2Vuc29ycz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJJZ25pdGlvblRpbWVBY3R1YXRpb24iIHRhZ3M9IlN3Y0luaklnbkFjdHVhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVHJpZ2dlcmVkQ3lsaW5kZXJOdW1iZXI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lMz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lND90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lNT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lNj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTc/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU4P3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9Iklnbml0aW9uVGltaW5nIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNQUZSYXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IkluamVjdGlvblRpbWVBY3R1YXRpb24iIHRhZ3M9IlN3Y0luaklnbkFjdHVhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVHJpZ2dlcmVkQ3lsaW5kZXJOdW1iZXI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRvdGFsRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWUxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTM/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lNT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTY/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU3P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lOD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJNYXNzQWlyRmxvd1NlbnNvciIgdGFncz0iU3djRW5naW5lU2Vuc29ycz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTUFGU2Vuc29yVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1hc3NBaXJGbG93P3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IlN0b3BMaWdodEFjdHVhdG9yIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUFwcGxpY2F0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IlRocm90dGxlQWN0dWF0b3IiIHRhZ3M9IlN3Y0VuZ2luZUNvbnRyb2xsZXI/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlc2lyZWRUaHJvdHRsZVBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVzaXJlZFRocm90dGxlUG9zaXRpb25Wb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IlRocm90dGxlQ29udHJvbGxlciIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRBUGVkUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJUaHJvdHRsZVNlbnNvciIgdGFncz0iU3djRW5naW5lU2Vuc29ycz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVTZW5zb3IxVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVTZW5zb3IyVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iVG90YWxGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVHJhbnNpZW50RnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUb3RhbEZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IlRyYW5zaWVudEZ1ZWxNYXNzIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCYXNlRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmFuc2llbnRGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXMiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24iIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWQxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJWZWhpY2xlU3BlZWRTZW5zb3JWb3RlciIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZFZlaGljbGVTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJWZWhpY2xlU3RhdGVNb25pdG9yIiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNb25pdG9yZWRWZWhpY2xlU3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxydW5uYWJsZXMgbmFtZT0iV2hlZWxTcGVlZFNlbnNvckRpYWdub3NpcyIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KKyAgICA8L3J1bm5hYmxlcz4KKyAgICA8cnVubmFibGVzIG5hbWU9IldoZWVsU3BlZWRTZW5zb3JUcmFuc2xhdGlvbiIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CisgICAgPC9ydW5uYWJsZXM+CisgICAgPHJ1bm5hYmxlcyBuYW1lPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXIiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZFdoZWVsU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgorICAgIDwvcnVubmFibGVzPgorICAgIDxsYWJlbHMgbmFtZT0iQUJTQWN0aXZhdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkFCU01vZGUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJBUGVkUG9zaXRpb24xIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQVBlZFBvc2l0aW9uMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkFQZWRTZW5zb3IxVm9sdGFnZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJBUGVkU2Vuc29yMlZvbHRhZ2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQXJiaXRyYXRlZEJyYWtlRm9yY2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJBcmJpdHJhdGVkRGlhZ25vc2lzUmVxdWVzdCIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkJhc2VGdWVsTWFzc1BlclN0cm9rZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJCcmFrZUFwcGxpY2F0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VGb3JjZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlRm9yY2VDdXJyZW50IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VGb3JjZUZlZWRiYWNrIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VGb3JjZVZvbHRhZ2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VNb25pdG9yTGV2ZWwiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJCcmFrZVBlZGFsUG9zaXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJCcmFrZVBlZGFsUG9zaXRpb24xIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQnJha2VQZWRhbFBvc2l0aW9uMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkJyYWtlU2FmZXR5TGV2ZWwiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJCcmFrZVNhZmV0eVN0YXRlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iQ2FsY3VsYXRlZEJyYWtlRm9yY2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJDYWxpcGVyUG9zaXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJDeWxpbmRlck51bWJlciIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IkRlY2VsZXJhdGlvblJhdGUxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iRGVjZWxlcmF0aW9uUmF0ZTIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJEZWNlbGVyYXRpb25Wb2x0YWdlMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJEZWNlbGVyYXRpb25Wb2x0YWdlMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvblZvbHRhZ2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWUxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lMyIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWU0IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSWduaXRpb25UaW1lNiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJJZ25pdGlvblRpbWU3IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9Iklnbml0aW9uVGltZTgiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTEiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTMiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTQiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTUiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTYiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTciIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iSW5qZWN0aW9uVGltZTgiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSIxNiIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iTUFGUmF0ZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJNQUZTZW5zb3JWb2x0YWdlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9Ik1hc3NBaXJGbG93IiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iTW9uaXRvcmVkVmVoaWNsZVN0YXRlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iVGhyb3R0bGVQb3NpdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJUaHJvdHRsZVNlbnNvcjFWb2x0YWdlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iVGhyb3R0bGVTZW5zb3IyVm9sdGFnZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IlRvdGFsRnVlbE1hc3NQZXJTdHJva2UiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJUcmFuc2llbnRGdWVsTWFzc1BlclN0cm9rZSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IlRyaWdnZXJlZEN5bGluZGVyTnVtYmVyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iVmVoaWNsZVNwZWVkMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IlZlaGljbGVTcGVlZDIiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJWZWhpY2xlU3BlZWRWb2x0YWdlMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJWZWhpY2xlU3BlZWRWb2x0YWdlMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJWb3RlZEFQZWRQb3NpdGlvbiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IlZvdGVkQnJha2VQZWRhbFBvc2l0aW9uIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iVm90ZWREZWNlbGVyYXRpb25SYXRlIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iVm90ZWRWZWhpY2xlU3BlZWQiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJWb3RlZFdoZWVsU3BlZWQiIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KKyAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgICAgPGxhYmVscyBuYW1lPSJXaGVlbFNwZWVkMSIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjgiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IldoZWVsU3BlZWQyIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iOCIgdW5pdD0iYml0IiAvPgorICAgIDwvbGFiZWxzPgorICAgIDxsYWJlbHMgbmFtZT0iV2hlZWxTcGVlZFZvbHRhZ2UxIiBjb25zdGFudD0iZmFsc2UiIGJWb2xhdGlsZT0iZmFsc2UiIGRhdGFTdGFiaWxpdHk9Im5vUHJvdGVjdGlvbiI+CisgICAgICA8c2l6ZSB2YWx1ZT0iMTYiIHVuaXQ9ImJpdCIgLz4KKyAgICA8L2xhYmVscz4KKyAgICA8bGFiZWxzIG5hbWU9IldoZWVsU3BlZWRWb2x0YWdlMiIgY29uc3RhbnQ9ImZhbHNlIiBiVm9sYXRpbGU9ImZhbHNlIiBkYXRhU3RhYmlsaXR5PSJub1Byb3RlY3Rpb24iPgorICAgICAgPHNpemUgdmFsdWU9IjE2IiB1bml0PSJiaXQiIC8+CisgICAgPC9sYWJlbHM+CisgIDwvc3dNb2RlbD4KKyAgPGh3TW9kZWw+CisgICAgPGRlZmluaXRpb25zIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdERlZmluaXRpb24iIG5hbWU9IkRlZmF1bHRDb3JlIiBwdVR5cGU9IkNQVSIgZmVhdHVyZXM9Ikluc3RydWN0aW9ucy9JUENfMT90eXBlPUh3RmVhdHVyZSIgLz4KKyAgICA8ZGVmaW5pdGlvbnMgeHNpOnR5cGU9ImFtOk1lbW9yeURlZmluaXRpb24iIG5hbWU9IkRlZmF1bHRNZW1vcnkiPgorICAgICAgPHNpemUgdmFsdWU9IjQiIHVuaXQ9Ik1CIiAvPgorICAgICAgPGFjY2Vzc0xhdGVuY3kgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVDb25zdGFudCIgdmFsdWU9IjIiIC8+CisgICAgPC9kZWZpbml0aW9ucz4KKyAgICA8ZmVhdHVyZUNhdGVnb3JpZXMgbmFtZT0iSW5zdHJ1Y3Rpb25zIiBmZWF0dXJlVHlwZT0icGVyZm9ybWFuY2UiPgorICAgICAgPGZlYXR1cmVzIG5hbWU9IklQQ18xIiB2YWx1ZT0iMS4wIiAvPgorICAgIDwvZmVhdHVyZUNhdGVnb3JpZXM+CisgICAgPHN0cnVjdHVyZXMgbmFtZT0iRGVtb2NhciIgc3RydWN0dXJlVHlwZT0iU3lzdGVtIj4KKyAgICAgIDxzdHJ1Y3R1cmVzIG5hbWU9IkVDVV8xIiBzdHJ1Y3R1cmVUeXBlPSJFQ1UiPgorICAgICAgICA8c3RydWN0dXJlcyBuYW1lPSJNaWNyb2NvbnRyb2xsZXJfMSIgc3RydWN0dXJlVHlwZT0iTWljcm9jb250cm9sbGVyIj4KKyAgICAgICAgICA8bW9kdWxlcyB4c2k6dHlwZT0iYW06TWVtb3J5IiBuYW1lPSJNZW1fMSIgZnJlcXVlbmN5RG9tYWluPSJGcmVxdWVuY3lEb21haW5fMT90eXBlPUZyZXF1ZW5jeURvbWFpbiIgZGVmaW5pdGlvbj0iRGVmYXVsdE1lbW9yeT90eXBlPU1lbW9yeURlZmluaXRpb24iPgorICAgICAgICAgICAgPHBvcnRzIG5hbWU9InBvcnQiIGJpdFdpZHRoPSIzMiIgcHJpb3JpdHk9IjAiIHBvcnRUeXBlPSJyZXNwb25kZXIiIC8+CisgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICAgIDxtb2R1bGVzIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdCIgbmFtZT0iQ29yZV8xIiBmcmVxdWVuY3lEb21haW49IkZyZXF1ZW5jeURvbWFpbl8xP3R5cGU9RnJlcXVlbmN5RG9tYWluIiBkZWZpbml0aW9uPSJEZWZhdWx0Q29yZT90eXBlPVByb2Nlc3NpbmdVbml0RGVmaW5pdGlvbiI+CisgICAgICAgICAgICA8cG9ydHMgbmFtZT0icG9ydCIgYml0V2lkdGg9IjMyIiBwcmlvcml0eT0iMCIgcG9ydFR5cGU9ImluaXRpYXRvciIgLz4KKyAgICAgICAgICA8L21vZHVsZXM+CisgICAgICAgICAgPGNvbm5lY3Rpb25zIG5hbWU9ImNvbjEiIHBvcnQxPSJDb3JlXzEvcG9ydD90eXBlPUh3UG9ydCIgcG9ydDI9Ik1lbV8xL3BvcnQ/dHlwZT1Id1BvcnQiIC8+CisgICAgICAgIDwvc3RydWN0dXJlcz4KKyAgICAgIDwvc3RydWN0dXJlcz4KKyAgICA8L3N0cnVjdHVyZXM+CisgICAgPGRvbWFpbnMgeHNpOnR5cGU9ImFtOkZyZXF1ZW5jeURvbWFpbiIgbmFtZT0iRnJlcXVlbmN5RG9tYWluXzEiIGNsb2NrR2F0aW5nPSJmYWxzZSI+CisgICAgICA8ZGVmYXVsdFZhbHVlIHZhbHVlPSIyMDAuMCIgdW5pdD0iTUh6IiAvPgorICAgIDwvZG9tYWlucz4KKyAgPC9od01vZGVsPgorICA8b3NNb2RlbD4KKyAgICA8b3BlcmF0aW5nU3lzdGVtcyBuYW1lPSJPcGVyYXRpbmdTeXN0ZW0iPgorICAgICAgPHRhc2tTY2hlZHVsZXJzIG5hbWU9IlRhc2tfU2NoZWR1bGVyX0NvcmVfMSI+CisgICAgICAgIDxzY2hlZHVsaW5nQWxnb3JpdGhtIHhzaTp0eXBlPSJhbTpPU0VLIiAvPgorICAgICAgPC90YXNrU2NoZWR1bGVycz4KKyAgICA8L29wZXJhdGluZ1N5c3RlbXM+CisgIDwvb3NNb2RlbD4KKyAgPHN0aW11bGlNb2RlbD4KKyAgICA8c3RpbXVsaSB4c2k6dHlwZT0iYW06UGVyaW9kaWNTdGltdWx1cyIgbmFtZT0iVGltZXJfMTBNUyI+CisgICAgICA8b2Zmc2V0IHZhbHVlPSIwIiB1bml0PSJtcyIgLz4KKyAgICAgIDxyZWN1cnJlbmNlIHZhbHVlPSIxMCIgdW5pdD0ibXMiIC8+CisgICAgPC9zdGltdWxpPgorICAgIDxzdGltdWxpIHhzaTp0eXBlPSJhbTpQZXJpb2RpY1N0aW11bHVzIiBuYW1lPSJUaW1lcl8yME1TIj4KKyAgICAgIDxvZmZzZXQgdmFsdWU9IjAiIHVuaXQ9Im1zIiAvPgorICAgICAgPHJlY3VycmVuY2UgdmFsdWU9IjIwIiB1bml0PSJtcyIgLz4KKyAgICA8L3N0aW11bGk+CisgICAgPHN0aW11bGkgeHNpOnR5cGU9ImFtOlBlcmlvZGljU3RpbXVsdXMiIG5hbWU9IlRpbWVyXzVNUyI+CisgICAgICA8b2Zmc2V0IHZhbHVlPSIwIiB1bml0PSJtcyIgLz4KKyAgICAgIDxyZWN1cnJlbmNlIHZhbHVlPSI1IiB1bml0PSJtcyIgLz4KKyAgICA8L3N0aW11bGk+CisgIDwvc3RpbXVsaU1vZGVsPgorICA8Y29uc3RyYWludHNNb2RlbD4KKyAgICA8cmVxdWlyZW1lbnRzIHhzaTp0eXBlPSJhbTpQcm9jZXNzUmVxdWlyZW1lbnQiIG5hbWU9IkRlYWRsaW5lXzA1IiBzZXZlcml0eT0iQ3JpdGljYWwiIHByb2Nlc3M9IlRhc2tfNU1TP3R5cGU9VGFzayI+CisgICAgICA8bGltaXQgeHNpOnR5cGU9ImFtOlRpbWVSZXF1aXJlbWVudExpbWl0IiBsaW1pdFR5cGU9IlVwcGVyTGltaXQiIG1ldHJpYz0iUmVzcG9uc2VUaW1lIj4KKyAgICAgICAgPGxpbWl0VmFsdWUgdmFsdWU9IjUiIHVuaXQ9Im1zIiAvPgorICAgICAgPC9saW1pdD4KKyAgICA8L3JlcXVpcmVtZW50cz4KKyAgICA8cmVxdWlyZW1lbnRzIHhzaTp0eXBlPSJhbTpQcm9jZXNzUmVxdWlyZW1lbnQiIG5hbWU9IkRlYWRsaW5lXzEwIiBzZXZlcml0eT0iQ3JpdGljYWwiIHByb2Nlc3M9IlRhc2tfMTBNUz90eXBlPVRhc2siPgorICAgICAgPGxpbWl0IHhzaTp0eXBlPSJhbTpUaW1lUmVxdWlyZW1lbnRMaW1pdCIgbGltaXRUeXBlPSJVcHBlckxpbWl0IiBtZXRyaWM9IlJlc3BvbnNlVGltZSI+CisgICAgICAgIDxsaW1pdFZhbHVlIHZhbHVlPSIxMCIgdW5pdD0ibXMiIC8+CisgICAgICA8L2xpbWl0PgorICAgIDwvcmVxdWlyZW1lbnRzPgorICAgIDxyZXF1aXJlbWVudHMgeHNpOnR5cGU9ImFtOlByb2Nlc3NSZXF1aXJlbWVudCIgbmFtZT0iRGVhZGxpbmVfMjAiIHNldmVyaXR5PSJDcml0aWNhbCIgcHJvY2Vzcz0iVGFza18yME1TP3R5cGU9VGFzayI+CisgICAgICA8bGltaXQgeHNpOnR5cGU9ImFtOlRpbWVSZXF1aXJlbWVudExpbWl0IiBsaW1pdFR5cGU9IlVwcGVyTGltaXQiIG1ldHJpYz0iUmVzcG9uc2VUaW1lIj4KKyAgICAgICAgPGxpbWl0VmFsdWUgdmFsdWU9IjIwIiB1bml0PSJtcyIgLz4KKyAgICAgIDwvbGltaXQ+CisgICAgPC9yZXF1aXJlbWVudHM+CisgIDwvY29uc3RyYWludHNNb2RlbD4KKzwvYW06QW1hbHRoZWE+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwLy5naXRpZ25vcmUKaW5kZXggNTRmNTE2ZS4uN2U5MDJlOCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC8uZ2l0aWdub3JlCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAvLmdpdGlnbm9yZQpAQCAtMSw0ICsxIEBACi0vYmluLwotL3RhcmdldC8KLS94dGVuZC1nZW4vCi0vb3V0cHV0LyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitvdXRwdXQvKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAvRXhhbXBsZV9TYW1wbGVfTW9kZWxfVHJhbnNmb3JtYXRpb24ucHJvZHVjdCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAvRXhhbXBsZV9TYW1wbGVfTW9kZWxfVHJhbnNmb3JtYXRpb24ucHJvZHVjdAppbmRleCA4ZWM5Yjg1Li4zNTIzMmQxIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwL0V4YW1wbGVfU2FtcGxlX01vZGVsX1RyYW5zZm9ybWF0aW9uLnByb2R1Y3QKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC9FeGFtcGxlX1NhbXBsZV9Nb2RlbF9UcmFuc2Zvcm1hdGlvbi5wcm9kdWN0CkBAIC0zNiwxMCArMzYsMTMgQEAKICAgICAgIDxwbHVnaW4gaWQ9ImphdmF4LmFubm90YXRpb24iLz4KICAgICAgIDxwbHVnaW4gaWQ9ImphdmF4LmluamVjdCIvPgogICAgICAgPHBsdWdpbiBpZD0iamF2YXgueG1sIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmJhdGlrLmNvbnN0YW50cyIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5iYXRpay5jc3MiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuYmF0aWsuaTE4biIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS5iYXRpay51dGlsIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmJhdGlrLnV0aWwuZ3VpIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuY2xpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMuaW8iLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5qeHBhdGgiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sYW5nIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZyIvPgpAQCAtNTYsOCArNTksOSBAQAogICAgICAgPHBsdWdpbiBpZD0ib3JnLmFwYWNoZS54ZXJjZXMiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5hcGFjaGUueG1sLnJlc29sdmVyIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuYXBhY2hlLnhtbGdyYXBoaWNzIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEuY29udmVydGVycy5sb2c0ai5jb25maWd1cmF0aW9uIiBmcmFnbWVudD0idHJ1ZSIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsIi8+Ci0gICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEuc3BoaW54Ii8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24iLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5jb21wYXJlLmNvcmUiLz4KQEAgLTg3LDYgKzkxLDcgQEAKICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNzcy5zd3QiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmNzcy5zd3QudGhlbWUiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLmRpIi8+CisgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS5kaWFsb2dzIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS5tb2RlbC53b3JrYmVuY2giLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmU0LnVpLnNlcnZpY2VzIi8+CiAgICAgICA8cGx1Z2luIGlkPSJvcmcuZWNsaXBzZS5lNC51aS53aWRnZXRzIi8+CkBAIC0xMTMsNiArMTE4LDcgQEAKICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guYmlkaSIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5jb21tb24iLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guZHMiLz4KKyAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3guZXZlbnQiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIuY29yZSIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2UuZXF1aW5veC5wMi5lbmdpbmUiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLmVxdWlub3gucDIubWV0YWRhdGEiLz4KQEAgLTEzNSw2ICsxNDEsNyBAQAogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaSIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaS5jb21wYXRpYmlsaXR5LnN0YXRlIiBmcmFnbWVudD0idHJ1ZSIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlcyIvPgorICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlcy5zb3VyY2UiLz4KICAgICAgIDxwbHVnaW4gaWQ9Im9yZy5lY2xpcHNlLm9zZ2kudXRpbCIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uuc3BoaW54LmVtZiIvPgogICAgICAgPHBsdWdpbiBpZD0ib3JnLmVjbGlwc2Uuc3BoaW54LmVtZi5lZGl0b3JzIi8+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAxYmY4YzE0Li40OTNmMTNkIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTYsMyArNiw0IEBACiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogQnVuZGxlLVZlbmRvcjogRWNsaXBzZSBBUFA0TUMKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24KK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC9pbnB1dC9hbWFsdGhlYV9tb2RlbHMvZGVtb2Nhci5hbXhtaSBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAvaW5wdXQvYW1hbHRoZWFfbW9kZWxzL2RlbW9jYXIuYW14bWkKaW5kZXggNWRjNWJmYi4uMjc2NzIzYiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC9pbnB1dC9hbWFsdGhlYV9tb2RlbHMvZGVtb2Nhci5hbXhtaQorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwL2lucHV0L2FtYWx0aGVhX21vZGVscy9kZW1vY2FyLmFteG1pCkBAIC0xLDUgKzEsNSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxhbTpBbWFsdGhlYSB4bWxuczphbT0iaHR0cDovL2FwcDRtYy5lY2xpcHNlLm9yZy9hbWFsdGhlYS8wLjkuMiIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWk6dmVyc2lvbj0iMi4wIj4KKzxhbTpBbWFsdGhlYSB4bWxuczphbT0iaHR0cDovL2FwcDRtYy5lY2xpcHNlLm9yZy9hbWFsdGhlYS8wLjkuOCIgeG1sbnM6eG1pPSJodHRwOi8vd3d3Lm9tZy5vcmcvWE1JIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWk6dmVyc2lvbj0iMi4wIj4KICAgPGNvbW1vbkVsZW1lbnRzPgogICAgIDx0YWdzIG5hbWU9IlN3Y0VuZ2luZUNvbnRyb2xsZXIiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4KICAgICA8dGFncyBuYW1lPSJTd2NBY3R1YXRvcnMiIHRhZ1R5cGU9IlNPRlRXQVJFX0NPTVBPTkVOVCIgLz4KQEAgLTE3LDg1MCArMTcsNTA2IEBACiAgICAgICA8Y3VzdG9tUHJvcGVydGllcyBrZXk9InByaW9yaXR5Ij4KICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpTdHJpbmdPYmplY3QiIHZhbHVlPSIxMCIgLz4KICAgICAgIDwvY3VzdG9tUHJvcGVydGllcz4KLSAgICAgIDxjYWxsR3JhcGg+Ci0gICAgICAgIDxncmFwaEVudHJpZXMgeHNpOnR5cGU9ImFtOkNhbGxTZXF1ZW5jZSI+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQ2hlY2tQbGF1c2FiaWxpdHk/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUFjdHVhdG9yTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPgotICAgICAgICAgIDxjYWxscyB4c2k6dHlwZT0iYW06VGFza1J1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkRpYWdub3Npc0FyYml0ZXI/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3RhdGVNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VTYWZldHlNb25pdG9yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQUJTQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQ2FsaXBlclBvc2l0aW9uQ2FsY3VsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iU3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZVBlZGFsU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPgotICAgICAgICAgIDxjYWxscyB4c2k6dHlwZT0iYW06VGFza1J1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlZlaGljbGVTcGVlZFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJUaHJvdHRsZUNvbnRyb2xsZXI/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJBUGVkVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCYXNlRnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJUaHJvdHRsZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iVG90YWxGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPgotICAgICAgICAgIDxjYWxscyB4c2k6dHlwZT0iYW06VGFza1J1bm5hYmxlQ2FsbCIgcnVubmFibGU9IlRyYW5zaWVudEZ1ZWxNYXNzP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iSW5qZWN0aW9uVGltZUFjdHVhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPgotICAgICAgICAgIDxjYWxscyB4c2k6dHlwZT0iYW06VGFza1J1bm5hYmxlQ2FsbCIgcnVubmFibGU9Iklnbml0aW9uVGltaW5nP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iSWduaXRpb25UaW1lQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgIDwvZ3JhcGhFbnRyaWVzPgotICAgICAgPC9jYWxsR3JhcGg+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkNoZWNrUGxhdXNhYmlsaXR5P3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUFjdHVhdG9yTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRGlhZ25vc2lzQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVN0YXRlTW9uaXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZVNhZmV0eU1vbml0b3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkFCU0NhbGN1bGF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQWN0dWF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJDYWxpcGVyUG9zaXRpb25DYWxjdWxhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iU3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQnJha2VQZWRhbFNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJEZWNlbGVyYXRpb25TZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkRlY2VsZXJhdGlvblNlbnNvclRyYW5zbGF0aW9uP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JEaWFnbm9zaXM/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkRlY2VsZXJhdGlvblNlbnNvclZvdGVyP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJWZWhpY2xlU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVmVoaWNsZVNwZWVkU2Vuc29yVHJhbnNsYXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JUcmFuc2xhdGlvbj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iV2hlZWxTcGVlZFNlbnNvckRpYWdub3Npcz90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQ3lsTnVtT2JzZXJ2ZXI/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IldoZWVsU3BlZWRTZW5zb3JWb3Rlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVDb250cm9sbGVyP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJBUGVkVm90ZXI/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkJhc2VGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVBY3R1YXRvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVG90YWxGdWVsTWFzcz90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVHJhbnNpZW50RnVlbE1hc3M/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkluamVjdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9Iklnbml0aW9uVGltaW5nP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJJZ25pdGlvblRpbWVBY3R1YXRpb24/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3Rhc2tzPgogICAgIDx0YXNrcyBuYW1lPSJUYXNrXzIwTVMiIHN0aW11bGk9IlRpbWVyXzIwTVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBwcmVlbXB0aW9uPSJwcmVlbXB0aXZlIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjEwIj4KICAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0icHJpb3JpdHkiPgogICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlN0cmluZ09iamVjdCIgdmFsdWU9IjEwIiAvPgogICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPgotICAgICAgPGNhbGxHcmFwaD4KLSAgICAgICAgPGdyYXBoRW50cmllcyB4c2k6dHlwZT0iYW06Q2FsbFNlcXVlbmNlIj4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPgotICAgICAgICA8L2dyYXBoRW50cmllcz4KLSAgICAgIDwvY2FsbEdyYXBoPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06R3JvdXAiIG5hbWU9IkNhbGxTZXF1ZW5jZSIgb3JkZXJlZD0idHJ1ZSI+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvdGFza3M+CiAgICAgPHRhc2tzIG5hbWU9IlRhc2tfNU1TIiBzdGltdWxpPSJUaW1lcl81TVM/dHlwZT1QZXJpb2RpY1N0aW11bHVzIiBwcmVlbXB0aW9uPSJwcmVlbXB0aXZlIiBtdWx0aXBsZVRhc2tBY3RpdmF0aW9uTGltaXQ9IjEwIj4KICAgICAgIDxjdXN0b21Qcm9wZXJ0aWVzIGtleT0icHJpb3JpdHkiPgogICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOlN0cmluZ09iamVjdCIgdmFsdWU9IjEwIiAvPgogICAgICAgPC9jdXN0b21Qcm9wZXJ0aWVzPgotICAgICAgPGNhbGxHcmFwaD4KLSAgICAgICAgPGdyYXBoRW50cmllcyB4c2k6dHlwZT0iYW06Q2FsbFNlcXVlbmNlIj4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VCcmFrZUFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1U3RvcExpZ2h0QWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VCcmFrZVBlZGFsU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1RGVjZWxlcmF0aW9uU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1VmVoaWNsZVNwZWVkU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgICAgPGNhbGxzIHhzaTp0eXBlPSJhbTpUYXNrUnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1V2hlZWxTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPgotICAgICAgICAgIDxjYWxscyB4c2k6dHlwZT0iYW06VGFza1J1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkFQZWRTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4KLSAgICAgICAgICA8Y2FsbHMgeHNpOnR5cGU9ImFtOlRhc2tSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJUaHJvdHRsZVNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPgotICAgICAgICAgIDxjYWxscyB4c2k6dHlwZT0iYW06VGFza1J1bm5hYmxlQ2FsbCIgcnVubmFibGU9Ik1hc3NBaXJGbG93U2Vuc29yP3R5cGU9UnVubmFibGUiIC8+Ci0gICAgICAgIDwvZ3JhcGhFbnRyaWVzPgotICAgICAgPC9jYWxsR3JhcGg+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpHcm91cCIgbmFtZT0iQ2FsbFNlcXVlbmNlIiBvcmRlcmVkPSJ0cnVlIj4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdUJyYWtlQWN0dWF0b3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdVN0b3BMaWdodEFjdHVhdG9yP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VCcmFrZVBlZGFsU2Vuc29yP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpSdW5uYWJsZUNhbGwiIHJ1bm5hYmxlPSJFY3VEZWNlbGVyYXRpb25TZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9IkVjdVZlaGljbGVTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iRWN1V2hlZWxTcGVlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iQVBlZFNlbnNvcj90eXBlPVJ1bm5hYmxlIiAvPgorICAgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06UnVubmFibGVDYWxsIiBydW5uYWJsZT0iVGhyb3R0bGVTZW5zb3I/dHlwZT1SdW5uYWJsZSIgLz4KKyAgICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlJ1bm5hYmxlQ2FsbCIgcnVubmFibGU9Ik1hc3NBaXJGbG93U2Vuc29yP3R5cGU9UnVubmFibGUiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC90YXNrcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkFCU0NhbGN1bGF0aW9uIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRWZWhpY2xlU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkV2hlZWxTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQUJTQWN0aXZhdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU01vZGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRWZWhpY2xlU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkV2hlZWxTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBQlNBY3RpdmF0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQUJTTW9kZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJBUGVkU2Vuc29yIiB0YWdzPSJTd2NFbmdpbmVTZW5zb3JzP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFNlbnNvcjFWb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBUGVkU2Vuc29yMlZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRQb3NpdGlvbjI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRTZW5zb3IxVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFNlbnNvcjJWb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFQZWRQb3NpdGlvbjI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iQVBlZFZvdGVyIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZEFQZWRQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQVBlZFBvc2l0aW9uMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkQVBlZFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkJhc2VGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1hc3NBaXJGbG93P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJhc2VGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1BRlJhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1hc3NBaXJGbG93P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQmFzZUZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTUFGUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZUFjdHVhdG9yIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGlwZXJQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsaXBlclBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VBY3R1YXRvck1vbml0b3IiIHRhZ3M9IlN3Y0JyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VGZWVkYmFjaz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VGZWVkYmFjaz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJCcmFrZUZvcmNlQWN0dWF0aW9uIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU0FjdGl2YXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFCU01vZGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VDdXJyZW50P3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBQlNBY3RpdmF0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBQlNNb2RlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VDdXJyZW50P3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlRm9yY2VBcmJpdGVyIiB0YWdzPSJTd2NCcmFrZUZvcmNlQXJiaXRlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGN1bGF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVNhZmV0eVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxjdWxhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VTYWZldHlTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlRm9yY2VDYWxjdWxhdGlvbiIgdGFncz0iU3djQnJha2VGb3JjZUNhbGN1bGF0aW9uP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlRmVlZGJhY2s/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNb25pdG9yZWRWZWhpY2xlU3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5TGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsY3VsYXRlZEJyYWtlRm9yY2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZU1vbml0b3JMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlRmVlZGJhY2s/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNb25pdG9yZWRWZWhpY2xlU3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5TGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxjdWxhdGVkQnJha2VGb3JjZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlTW9uaXRvckxldmVsP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlUGVkYWxTZW5zb3JEaWFnbm9zaXMiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlUGVkYWxTZW5zb3JUcmFuc2xhdGlvbiIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbjI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbjE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkJyYWtlUGVkYWxTZW5zb3JWb3RlciIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24xP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24xP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24yP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iQnJha2VTYWZldHlNb25pdG9yIiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VGZWVkYmFjaz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZERpYWdub3Npc1JlcXVlc3Q/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1vbml0b3JlZFZlaGljbGVTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VNb25pdG9yTGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VTYWZldHlMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5U3RhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUZlZWRiYWNrP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJBcmJpdHJhdGVkRGlhZ25vc2lzUmVxdWVzdD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTW9uaXRvcmVkVmVoaWNsZVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZU1vbml0b3JMZXZlbD90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlU2FmZXR5TGV2ZWw/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVNhZmV0eVN0YXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkNhbGlwZXJQb3NpdGlvbkNhbGN1bGF0aW9uIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkNhbGlwZXJQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZUN1cnJlbnQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsaXBlclBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDYWxpcGVyUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlRm9yY2VDdXJyZW50P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQ2FsaXBlclBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkNoZWNrUGxhdXNhYmlsaXR5IiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZEJyYWtlUGVkYWxQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkN5bE51bU9ic2VydmVyIiB0YWdzPSJTd2NDeWxOdW1PYnNlcnZlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyaWdnZXJlZEN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJDeWxpbmRlck51bWJlcj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyaWdnZXJlZEN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkRlY2VsZXJhdGlvblNlbnNvckRpYWdub3NpcyIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iRGVjZWxlcmF0aW9uU2Vuc29yVHJhbnNsYXRpb24iIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblJhdGUxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblJhdGUxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iRGVjZWxlcmF0aW9uU2Vuc29yVm90ZXIiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblJhdGUyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkRGVjZWxlcmF0aW9uUmF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uUmF0ZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblJhdGUyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWREZWNlbGVyYXRpb25SYXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkRpYWdub3Npc0FyYml0ZXIiIHRhZ3M9IlN3Y0JyYWtlRm9yY2VDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWREaWFnbm9zaXNSZXF1ZXN0P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQXJiaXRyYXRlZERpYWdub3Npc1JlcXVlc3Q/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iRWN1QnJha2VBY3R1YXRvciIgdGFncz0iU3djQWN0dWF0b3JzP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VGb3JjZVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUZvcmNlVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJFY3VCcmFrZVBlZGFsU2Vuc29yIiB0YWdzPSJTd2NTZW5zb3JzP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjE0NDAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSIxNzYwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSIxNjAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlUGVkYWxQb3NpdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSIxNDQwMDAiIHVwcGVyQm91bmQ9IjE3NjAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjE2MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VQZWRhbFBvc2l0aW9uVm9sdGFnZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZVBlZGFsUG9zaXRpb25Wb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJFY3VEZWNlbGVyYXRpb25TZW5zb3IiIHRhZ3M9IlN3Y1NlbnNvcnM/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iMTQ0MDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjE3NjAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjE2MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVjZWxlcmF0aW9uVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjE0NDAwMCIgdXBwZXJCb3VuZD0iMTc2MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iMTYwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZWNlbGVyYXRpb25Wb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlY2VsZXJhdGlvblZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkVjdVN0b3BMaWdodEFjdHVhdG9yIiB0YWdzPSJTd2NBY3R1YXRvcnM/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJCcmFrZUFwcGxpY2F0aW9uP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VBcHBsaWNhdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJFY3VWZWhpY2xlU3BlZWRTZW5zb3IiIHRhZ3M9IlN3Y1NlbnNvcnM/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkVjdVdoZWVsU3BlZWRTZW5zb3IiIHRhZ3M9IlN3Y1NlbnNvcnM/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJJZ25pdGlvblRpbWVBY3R1YXRpb24iIHRhZ3M9IlN3Y0luaklnbkFjdHVhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyaWdnZXJlZEN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTM/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTY/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lNz90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTg/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyaWdnZXJlZEN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTM/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Iklnbml0aW9uVGltZTY/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJZ25pdGlvblRpbWU3P3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lOD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJJZ25pdGlvblRpbWluZyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1BRlJhdGU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNQUZSYXRlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSWduaXRpb25UaW1lP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IkluamVjdGlvblRpbWVBY3R1YXRpb24iIHRhZ3M9IlN3Y0luaklnbkFjdHVhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyaWdnZXJlZEN5bGluZGVyTnVtYmVyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUb3RhbEZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWUzP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lND90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTU/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU2P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lNz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTg/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmlnZ2VyZWRDeWxpbmRlck51bWJlcj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVG90YWxGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWUyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lMz90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU1P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJJbmplY3Rpb25UaW1lNj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iSW5qZWN0aW9uVGltZTc/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkluamVjdGlvblRpbWU4P3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9Ik1hc3NBaXJGbG93U2Vuc29yIiB0YWdzPSJTd2NFbmdpbmVTZW5zb3JzP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTUFGU2Vuc29yVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJNYXNzQWlyRmxvdz90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iTUFGU2Vuc29yVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1hc3NBaXJGbG93P3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IlN0b3BMaWdodEFjdHVhdG9yIiB0YWdzPSJTd2NBQlNDYWxjdWxhdGlvbj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJyYWtlQXBwbGljYXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkFyYml0cmF0ZWRCcmFrZUZvcmNlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQnJha2VBcHBsaWNhdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJUaHJvdHRsZUFjdHVhdG9yIiB0YWdzPSJTd2NFbmdpbmVDb250cm9sbGVyP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVzaXJlZFRocm90dGxlUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iRGVzaXJlZFRocm90dGxlUG9zaXRpb25Wb2x0YWdlP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDxhY3Rpdml0eUdyYXBoPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkRlc2lyZWRUaHJvdHRsZVBvc2l0aW9uVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJUaHJvdHRsZUNvbnRyb2xsZXIiIHRhZ3M9IlN3Y0VuZ2luZUNvbnRyb2xsZXI/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZEFQZWRQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRBUGVkUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJEZXNpcmVkVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJUaHJvdHRsZVNlbnNvciIgdGFncz0iU3djRW5naW5lU2Vuc29ycz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlU2Vuc29yMVZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlU2Vuc29yMlZvbHRhZ2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVQb3NpdGlvbj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVTZW5zb3IxVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVGhyb3R0bGVTZW5zb3IyVm9sdGFnZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRocm90dGxlUG9zaXRpb24/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iVG90YWxGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyYW5zaWVudEZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRvdGFsRnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlRyYW5zaWVudEZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVG90YWxGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJUcmFuc2llbnRGdWVsTWFzcyIgdGFncz0iU3djRW5naW5lQ29udHJvbGxlcj90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IkJhc2VGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJUcmFuc2llbnRGdWVsTWFzc1BlclN0cm9rZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iQmFzZUZ1ZWxNYXNzUGVyU3Ryb2tlP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVHJhbnNpZW50RnVlbE1hc3NQZXJTdHJva2U/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iVmVoaWNsZVNwZWVkU2Vuc29yRGlhZ25vc2lzIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpFeGVjdXRpb25OZWVkIj4KLSAgICAgICAgPGRlZmF1bHQga2V5PSJJbnN0cnVjdGlvbnMiPgotICAgICAgICAgIDx2YWx1ZSB4c2k6dHlwZT0iYW06TmVlZERldmlhdGlvbiI+Ci0gICAgICAgICAgICA8ZGV2aWF0aW9uPgotICAgICAgICAgICAgICA8bG93ZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjcyMDAwIiAvPgotICAgICAgICAgICAgICA8dXBwZXJCb3VuZCB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9Ijg4MDAwIiAvPgotICAgICAgICAgICAgICA8ZGlzdHJpYnV0aW9uIHhzaTp0eXBlPSJhbTpXZWlidWxsRXN0aW1hdG9ycyIgcFJlbWFpblByb21pbGxlPSIwLjUiPgotICAgICAgICAgICAgICAgIDxtZWFuIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODAwMDAiIC8+Ci0gICAgICAgICAgICAgIDwvZGlzdHJpYnV0aW9uPgotICAgICAgICAgICAgPC9kZXZpYXRpb24+Ci0gICAgICAgICAgPC92YWx1ZT4KLSAgICAgICAgPC9kZWZhdWx0PgotICAgICAgPC9ydW5uYWJsZUl0ZW1zPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJWZWhpY2xlU3BlZWRTZW5zb3JUcmFuc2xhdGlvbiIgdGFncz0iU3djU2Vuc29yUG9zdHByb2Nlc3Npbmc/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVmVoaWNsZVNwZWVkMT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWRWb2x0YWdlMj90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWZWhpY2xlU3BlZWQyP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8cnVubmFibGVzIG5hbWU9IlZlaGljbGVTcGVlZFNlbnNvclZvdGVyIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06RXhlY3V0aW9uTmVlZCI+Ci0gICAgICAgIDxkZWZhdWx0IGtleT0iSW5zdHJ1Y3Rpb25zIj4KLSAgICAgICAgICA8dmFsdWUgeHNpOnR5cGU9ImFtOk5lZWREZXZpYXRpb24iPgotICAgICAgICAgICAgPGRldmlhdGlvbj4KLSAgICAgICAgICAgICAgPGxvd2VyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI3MjAwMCIgLz4KLSAgICAgICAgICAgICAgPHVwcGVyQm91bmQgeHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4ODAwMCIgLz4KLSAgICAgICAgICAgICAgPGRpc3RyaWJ1dGlvbiB4c2k6dHlwZT0iYW06V2VpYnVsbEVzdGltYXRvcnMiIHBSZW1haW5Qcm9taWxsZT0iMC41Ij4KLSAgICAgICAgICAgICAgICA8bWVhbiB4c2k6dHlwZT0iYW06TG9uZ09iamVjdCIgdmFsdWU9IjgwMDAwIiAvPgotICAgICAgICAgICAgICA8L2Rpc3RyaWJ1dGlvbj4KLSAgICAgICAgICAgIDwvZGV2aWF0aW9uPgotICAgICAgICAgIDwvdmFsdWU+Ci0gICAgICAgIDwvZGVmYXVsdD4KLSAgICAgIDwvcnVubmFibGVJdGVtcz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRWZWhpY2xlU3BlZWQ/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZlaGljbGVTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJWb3RlZFZlaGljbGVTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJWZWhpY2xlU3RhdGVNb25pdG9yIiB0YWdzPSJTd2NCcmFrZUZvcmNlQ2FsY3VsYXRpb24/dHlwZT1UYWciIGNhbGxiYWNrPSJmYWxzZSIgc2VydmljZT0iZmFsc2UiPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1vbml0b3JlZFZlaGljbGVTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpUaWNrcyI+CisgICAgICAgICAgPGRlZmF1bHQgbG93ZXJCb3VuZD0iNzIwMDAiIHVwcGVyQm91bmQ9Ijg4MDAwIiB4c2k6dHlwZT0iYW06RGlzY3JldGVWYWx1ZVdlaWJ1bGxFc3RpbWF0b3JzRGlzdHJpYnV0aW9uIiBwUmVtYWluUHJvbWlsbGU9IjAuNSIgYXZlcmFnZT0iODAwMDAiIC8+CisgICAgICAgIDwvaXRlbXM+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9Ik1vbml0b3JlZFZlaGljbGVTdGF0ZT90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJXaGVlbFNwZWVkU2Vuc29yRGlhZ25vc2lzIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UxP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkVm9sdGFnZTI/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06VGlja3MiPgorICAgICAgICAgIDxkZWZhdWx0IGxvd2VyQm91bmQ9IjcyMDAwIiB1cHBlckJvdW5kPSI4ODAwMCIgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVXZWlidWxsRXN0aW1hdG9yc0Rpc3RyaWJ1dGlvbiIgcFJlbWFpblByb21pbGxlPSIwLjUiIGF2ZXJhZ2U9IjgwMDAwIiAvPgorICAgICAgICA8L2l0ZW1zPgorICAgICAgPC9hY3Rpdml0eUdyYXBoPgogICAgIDwvcnVubmFibGVzPgogICAgIDxydW5uYWJsZXMgbmFtZT0iV2hlZWxTcGVlZFNlbnNvclRyYW5zbGF0aW9uIiB0YWdzPSJTd2NTZW5zb3JQb3N0cHJvY2Vzc2luZz90eXBlPVRhZyIgY2FsbGJhY2s9ImZhbHNlIiBzZXJ2aWNlPSJmYWxzZSI+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWQxP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDI/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgPGFjdGl2aXR5R3JhcGg+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWRWb2x0YWdlMT90eXBlPUxhYmVsIiBhY2Nlc3M9InJlYWQiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZFZvbHRhZ2UyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJ3cml0ZSIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOkxhYmVsQWNjZXNzIiBkYXRhPSJXaGVlbFNwZWVkMj90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8L2FjdGl2aXR5R3JhcGg+CiAgICAgPC9ydW5uYWJsZXM+CiAgICAgPHJ1bm5hYmxlcyBuYW1lPSJXaGVlbFNwZWVkU2Vuc29yVm90ZXIiIHRhZ3M9IlN3Y1NlbnNvclBvc3Rwcm9jZXNzaW5nP3R5cGU9VGFnIiBjYWxsYmFjaz0iZmFsc2UiIHNlcnZpY2U9ImZhbHNlIj4KLSAgICAgIDxydW5uYWJsZUl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWQyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgotICAgICAgPHJ1bm5hYmxlSXRlbXMgeHNpOnR5cGU9ImFtOkV4ZWN1dGlvbk5lZWQiPgotICAgICAgICA8ZGVmYXVsdCBrZXk9Ikluc3RydWN0aW9ucyI+Ci0gICAgICAgICAgPHZhbHVlIHhzaTp0eXBlPSJhbTpOZWVkRGV2aWF0aW9uIj4KLSAgICAgICAgICAgIDxkZXZpYXRpb24+Ci0gICAgICAgICAgICAgIDxsb3dlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iNzIwMDAiIC8+Ci0gICAgICAgICAgICAgIDx1cHBlckJvdW5kIHhzaTp0eXBlPSJhbTpMb25nT2JqZWN0IiB2YWx1ZT0iODgwMDAiIC8+Ci0gICAgICAgICAgICAgIDxkaXN0cmlidXRpb24geHNpOnR5cGU9ImFtOldlaWJ1bGxFc3RpbWF0b3JzIiBwUmVtYWluUHJvbWlsbGU9IjAuNSI+Ci0gICAgICAgICAgICAgICAgPG1lYW4geHNpOnR5cGU9ImFtOkxvbmdPYmplY3QiIHZhbHVlPSI4MDAwMCIgLz4KLSAgICAgICAgICAgICAgPC9kaXN0cmlidXRpb24+Ci0gICAgICAgICAgICA8L2RldmlhdGlvbj4KLSAgICAgICAgICA8L3ZhbHVlPgotICAgICAgICA8L2RlZmF1bHQ+Ci0gICAgICA8L3J1bm5hYmxlSXRlbXM+Ci0gICAgICA8cnVubmFibGVJdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IlZvdGVkV2hlZWxTcGVlZD90eXBlPUxhYmVsIiBhY2Nlc3M9IndyaXRlIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICA8YWN0aXZpdHlHcmFwaD4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iV2hlZWxTcGVlZDE/dHlwZT1MYWJlbCIgYWNjZXNzPSJyZWFkIiBkYXRhU3RhYmlsaXR5PSJpbmhlcml0ZWQiIC8+CisgICAgICAgIDxpdGVtcyB4c2k6dHlwZT0iYW06TGFiZWxBY2Nlc3MiIGRhdGE9IldoZWVsU3BlZWQyP3R5cGU9TGFiZWwiIGFjY2Vzcz0icmVhZCIgZGF0YVN0YWJpbGl0eT0iaW5oZXJpdGVkIiAvPgorICAgICAgICA8aXRlbXMgeHNpOnR5cGU9ImFtOlRpY2tzIj4KKyAgICAgICAgICA8ZGVmYXVsdCBsb3dlckJvdW5kPSI3MjAwMCIgdXBwZXJCb3VuZD0iODgwMDAiIHhzaTp0eXBlPSJhbTpEaXNjcmV0ZVZhbHVlV2VpYnVsbEVzdGltYXRvcnNEaXN0cmlidXRpb24iIHBSZW1haW5Qcm9taWxsZT0iMC41IiBhdmVyYWdlPSI4MDAwMCIgLz4KKyAgICAgICAgPC9pdGVtcz4KKyAgICAgICAgPGl0ZW1zIHhzaTp0eXBlPSJhbTpMYWJlbEFjY2VzcyIgZGF0YT0iVm90ZWRXaGVlbFNwZWVkP3R5cGU9TGFiZWwiIGFjY2Vzcz0id3JpdGUiIGRhdGFTdGFiaWxpdHk9ImluaGVyaXRlZCIgLz4KKyAgICAgIDwvYWN0aXZpdHlHcmFwaD4KICAgICA8L3J1bm5hYmxlcz4KICAgICA8bGFiZWxzIG5hbWU9IkFCU0FjdGl2YXRpb24iIGNvbnN0YW50PSJmYWxzZSIgYlZvbGF0aWxlPSJmYWxzZSIgZGF0YVN0YWJpbGl0eT0ibm9Qcm90ZWN0aW9uIj4KICAgICAgIDxzaXplIHZhbHVlPSI4IiB1bml0PSJiaXQiIC8+CkBAIC0xMDgwLDcgKzczNiw3IEBACiAgICAgPGRlZmluaXRpb25zIHhzaTp0eXBlPSJhbTpQcm9jZXNzaW5nVW5pdERlZmluaXRpb24iIG5hbWU9IkRlZmF1bHRDb3JlIiBwdVR5cGU9IkNQVSIgZmVhdHVyZXM9Ikluc3RydWN0aW9ucy9JUENfMT90eXBlPUh3RmVhdHVyZSIgLz4KICAgICA8ZGVmaW5pdGlvbnMgeHNpOnR5cGU9ImFtOk1lbW9yeURlZmluaXRpb24iIG5hbWU9IkRlZmF1bHRNZW1vcnkiPgogICAgICAgPHNpemUgdmFsdWU9IjQiIHVuaXQ9Ik1CIiAvPgotICAgICAgPGFjY2Vzc0xhdGVuY3kgeHNpOnR5cGU9ImFtOkxhdGVuY3lDb25zdGFudCIgY3ljbGVzPSIyIiAvPgorICAgICAgPGFjY2Vzc0xhdGVuY3kgeHNpOnR5cGU9ImFtOkRpc2NyZXRlVmFsdWVDb25zdGFudCIgdmFsdWU9IjIiIC8+CiAgICAgPC9kZWZpbml0aW9ucz4KICAgICA8ZmVhdHVyZUNhdGVnb3JpZXMgbmFtZT0iSW5zdHJ1Y3Rpb25zIiBmZWF0dXJlVHlwZT0icGVyZm9ybWFuY2UiPgogICAgICAgPGZlYXR1cmVzIG5hbWU9IklQQ18xIiB2YWx1ZT0iMS4wIiAvPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC9wb20ueG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC9wb20ueG1sCmluZGV4IDNjMGM2YWEuLmQ5OTRlNjYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAvcG9tLnhtbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwL3BvbS54bWwKQEAgLTQsMTkgKzQsMTcgQEAKIAogCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KIAotIAogCTxwYXJlbnQ+Ci0JCTxyZWxhdGl2ZVBhdGg+Li4vLi4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKwkJPHJlbGF0aXZlUGF0aD4uLi8uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CiAJCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkPC9hcnRpZmFjdElkPgorCQk8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+CiAJCTx2ZXJzaW9uPjAuMy4wLVNOQVBTSE9UPC92ZXJzaW9uPgogCTwvcGFyZW50PgogCQogCTxwcm9wZXJ0aWVzPgotCTxwbHVnaW4taWQ+YXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcDwvcGx1Z2luLWlkPgotCTxleGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+Li4vLi4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlcjwvZXhhbXBsZXMtaW5zdGFsbGVyLWxvY2F0aW9uPgotCTwvcHJvcGVydGllcz4gCi0JCisJCTxwbHVnaW4taWQ+YXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcDwvcGx1Z2luLWlkPgorCQk8ZXhhbXBsZXMtaW5zdGFsbGVyLWxvY2F0aW9uPi4uLy4uLy4uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyPC9leGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+CisJPC9wcm9wZXJ0aWVzPiAJCiAKIAk8YXJ0aWZhY3RJZD5hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwPC9hcnRpZmFjdElkPgogCTxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwL3NyYy9hcHA0bWMvZXhhbXBsZS90cmFuc2Zvcm0vYXBwL1NhbXBsZUFwcGxpY2F0aW9uLmphdmEgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwL3NyYy9hcHA0bWMvZXhhbXBsZS90cmFuc2Zvcm0vYXBwL1NhbXBsZUFwcGxpY2F0aW9uLmphdmEKaW5kZXggMDkzMGRmNC4uNTgzM2RmMCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLmFwcC9zcmMvYXBwNG1jL2V4YW1wbGUvdHJhbnNmb3JtL2FwcC9TYW1wbGVBcHBsaWNhdGlvbi5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5hcHAvc3JjL2FwcDRtYy9leGFtcGxlL3RyYW5zZm9ybS9hcHAvU2FtcGxlQXBwbGljYXRpb24uamF2YQpAQCAtNTMsNiArNTMsNyBAQAogCQkJCiAJCQlPYmplY3QgaW5wdXRNb2RlbHNGb2xkZXIgPSBwcm9wZXJ0aWVzLmdldCgiaW5wdXRfbW9kZWxzX2ZvbGRlciIpOwogCQkJT2JqZWN0IG0ybV9vdXRwdXRNb2RlbHNGb2xkZXIgPSBwcm9wZXJ0aWVzLmdldCgibTJtX291dHB1dF9mb2xkZXIiKTsKKwkJCU9iamVjdCBtMnRfb3V0cHV0X2ZvbGRlciA9IHByb3BlcnRpZXMuZ2V0KCJtMnRfb3V0cHV0X2ZvbGRlciIpOwogCQkJT2JqZWN0IGxvZ0ZpbGUgPSBwcm9wZXJ0aWVzLmdldCgibG9nX2ZpbGUiKTsKIAogCQkJaWYoaW5wdXRNb2RlbHNGb2xkZXIgIT1udWxsKSB7CkBAIC03MSw2ICs3MiwxNCBAQAogCQkJCXByb3BlcnRpZXMucHV0KCJtMm1fb3V0cHV0X2ZvbGRlciIsIG5ld1BhdGgpOwogCQkJCQogCQkJfQorCQkJaWYobTJ0X291dHB1dF9mb2xkZXIgIT1udWxsKSB7CisJCQkJU3RyaW5nIHBhdGg9bTJ0X291dHB1dF9mb2xkZXIudG9TdHJpbmcoKTsKKwkJCQkKKwkJCQlTdHJpbmcgbmV3UGF0aD1uZXcgRmlsZShwYXRoKS5leGlzdHMoKT9wYXRoOm5ldyBGaWxlKHByb3BlcnRpZXNGaWxlLmdldFBhcmVudCgpK0ZpbGUuc2VwYXJhdG9yKyBwYXRoKS5nZXRDYW5vbmljYWxQYXRoKCk7CisJCQkJCisJCQkJcHJvcGVydGllcy5wdXQoIm0ydF9vdXRwdXRfZm9sZGVyIiwgbmV3UGF0aCk7CisJCQkJCisJCQl9CiAJCQlpZihsb2dGaWxlICE9bnVsbCkgewogCQkJCVN0cmluZyBwYXRoPWxvZ0ZpbGUudG9TdHJpbmcoKTsKIAkJCQkKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm0vLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm0vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU4ODczZi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJtLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS9iaW4vCi0vdGFyZ2V0LwotL3h0ZW5kLWdlbi8qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ybS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm0vTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZmM3ODc2MS4uMjU1ZDE5ZCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ybS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJtL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0xMSwzICsxMSw0IEBACiAgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsO3Zpc2liaWxpdHk6PXJlZXhwb3J0LAogIG9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zLAogIGFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbAorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBhcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJtCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJtL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJtL3BvbS54bWwKaW5kZXggZWNjNWY2OC4uYjE2NmVhYiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ybS9wb20ueG1sCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm0vcG9tLnhtbApAQCAtNCwyMCArNCwxOCBAQAogCiAJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCi0KIAk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisJCTxyZWxhdGl2ZVBhdGg+Li4vLi4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgogCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb248L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZDwvYXJ0aWZhY3RJZD4KKwkJPGFydGlmYWN0SWQ+cGFyZW50PC9hcnRpZmFjdElkPgogCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KIAk8L3BhcmVudD4KIAogCTxwcm9wZXJ0aWVzPgogCQk8cGx1Z2luLWlkPmFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm08L3BsdWdpbi1pZD4KLQkJPGV4YW1wbGVzLWluc3RhbGxlci1sb2NhdGlvbj4uLi8uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyPC9leGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+CisJCTxleGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+Li4vLi4vLi4vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXI8L2V4YW1wbGVzLWluc3RhbGxlci1sb2NhdGlvbj4KIAk8L3Byb3BlcnRpZXM+CiAKLQogCTxhcnRpZmFjdElkPmFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm08L2FydGlmYWN0SWQ+CiAJPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KIApAQCAtMTA2LDMxICsxMDQsNiBAQAogCiAJCQk8L3BsdWdpbj4KIAotCQkJIAotCi0KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+eHRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJCTx2ZXJzaW9uPjIuMTQuMDwvdmVyc2lvbj4KLQkJCQk8ZXhlY3V0aW9ucz4KLQkJCQkJPGV4ZWN1dGlvbj4KLQkJCQkJCTxnb2Fscz4KLQkJCQkJCQk8Z29hbD5jb21waWxlPC9nb2FsPgotCQkJCQkJCTxnb2FsPnh0ZW5kLWluc3RhbGwtZGVidWctaW5mbzwvZ29hbD4KLQkJCQkJCQk8Z29hbD50ZXN0Q29tcGlsZTwvZ29hbD4KLQkJCQkJCQk8Z29hbD54dGVuZC10ZXN0LWluc3RhbGwtZGVidWctaW5mbzwvZ29hbD4KLQkJCQkJCTwvZ29hbHM+Ci0JCQkJCTwvZXhlY3V0aW9uPgotCQkJCTwvZXhlY3V0aW9ucz4KLQkJCQk8Y29uZmlndXJhdGlvbj4KLQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0KLQkJCTwvcGx1Z2luPgotCi0KLQogCQk8L3BsdWdpbnM+CiAJPC9idWlsZD4KIDwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJtL3NyYy9jb25maWd1cmF0aW9uL00yTVRyYW5zZm9ybWF0aW9uLmphdmEgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJtL3NyYy9jb25maWd1cmF0aW9uL00yTVRyYW5zZm9ybWF0aW9uLmphdmEKaW5kZXggN2U5N2VlOC4uZDFlMDVhZSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ybS9zcmMvY29uZmlndXJhdGlvbi9NMk1UcmFuc2Zvcm1hdGlvbi5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm0vc3JjL2NvbmZpZ3VyYXRpb24vTTJNVHJhbnNmb3JtYXRpb24uamF2YQpAQCAtMTcsNyArMTcsNiBAQAogCiBpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiAKLWltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ01hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5sb2c0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhRmFjdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucy5leGVjdXRpb250eXBlLklNb2RlbFRvTW9kZWxDb25maWc7CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLy5jbGFzc3BhdGggYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3QvLmNsYXNzcGF0aApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLy5jbGFzc3BhdGgKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdC8uY2xhc3NwYXRoCmluZGV4IDMyNTE1MGQuLjQyODMzN2UgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuZW1mdXRpbHMuY29udGVudC5leHRyYWN0b3IvLmNsYXNzcGF0aAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3QvLmNsYXNzcGF0aApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNyIvPgorCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuOCIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9Inh0ZW5kLWdlbiIvPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdC8ucHJvamVjdApzaW1pbGFyaXR5IGluZGV4IDkyJQpjb3B5IGZyb20gZWNsaXBzZS10b29scy9lbWYtZ3JhcGhpY2FsLXZpZXdlci9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3Rvci8ucHJvamVjdApjb3B5IHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdC8ucHJvamVjdAppbmRleCA1ZjBiY2RkLi45MjIxZWQzIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLmNvbnRlbnQuZXh0cmFjdG9yLy5wcm9qZWN0CisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdC8ucHJvamVjdApAQCAtMSw2ICsxLDYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+CiA8cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5jb250ZW50LmV4dHJhY3RvcjwvbmFtZT4KKwk8bmFtZT5hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3Q8L25hbWU+CiAJPGNvbW1lbnQ+PC9jb21tZW50PgogCTxwcm9qZWN0cz4KIAk8L3Byb2plY3RzPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdC8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmNvcHkgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkM2Q4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSw4IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjAKK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKK0J1bmRsZS1OYW1lOiBDdXN0CitCdW5kbGUtU3ltYm9saWNOYW1lOiBhcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3Q7c2luZ2xldG9uOj10cnVlCitCdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCitGcmFnbWVudC1Ib3N0OiBhcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0O2J1bmRsZS12ZXJzaW9uPSIwLjMuMCIKK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0CitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L2J1aWxkLnByb3BlcnRpZXMgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3QvYnVpbGQucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzAyM2UxCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L2J1aWxkLnByb3BlcnRpZXMKQEAgLTAsMCArMSw1IEBACitzb3VyY2UuLiA9IHNyYy8KK291dHB1dC4uID0gYmluLworYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwKKyAgICAgICAgICAgICAgIC4sXAorICAgICAgICAgICAgICAgZnJhZ21lbnQueG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3QvZnJhZ21lbnQueG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L2ZyYWdtZW50LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNmMzA1Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L2ZyYWdtZW50LnhtbApAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPD9lY2xpcHNlIHZlcnNpb249IjMuNCI/PgorPGZyYWdtZW50PgorICAgPGV4dGVuc2lvbgorICAgICAgICAgcG9pbnQ9Im9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5jb25maWd1cmF0aW9uIj4KKyAgICAgIDxjb25maWcKKyAgICAgICAgICAgIGVuYWJsZWQ9InRydWUiCisgICAgICAgICAgICBpZD0iYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0MS5jb25maWcxIgorICAgICAgICAgICAgbTJ0X2NsYXNzPSJjb25maWd1cmF0aW9uLk0yVFRyYW5zZm9ybWF0aW9uIgorICAgICAgICAgICAgbW9kdWxlX2NsYXNzPSJjdXN0bW9kdWxlLkN1c3RNMlRJbmplY3Rvck1vZHVsZSI+CisgICAgICA8L2NvbmZpZz4KKyAgIDwvZXh0ZW5zaW9uPgorCis8L2ZyYWdtZW50PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L3NyYy9jdXN0VGVtcGxhdGVzL0N1c3RUcmFuc2Zvcm1lci54dGVuZCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdC9zcmMvY3VzdFRlbXBsYXRlcy9DdXN0VHJhbnNmb3JtZXIueHRlbmQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUwYzE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQuY3VzdC9zcmMvY3VzdFRlbXBsYXRlcy9DdXN0VHJhbnNmb3JtZXIueHRlbmQKQEAgLTAsMCArMSwyNCBAQAorcGFja2FnZSBjdXN0VGVtcGxhdGVzCisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWEKK2ltcG9ydCB0ZW1wbGF0ZXMuTTJUX091dHB1dF9UcmFuc2Zvcm1lcgorCitjbGFzcyBDdXN0VHJhbnNmb3JtZXIgZXh0ZW5kcyBNMlRfT3V0cHV0X1RyYW5zZm9ybWVyIHsKKwkvKioKKwkgKiBDcmVhdGVzIG91dHB1dCB3aXRoIGEgInRlbXBsYXRlIG9ubHkiIHN0eWxlIChsaWtlIFhwYW5kL1h0ZW5kKS4KKwkgKi8KKwkgIG92ZXJyaWRlIFN0cmluZyBnZW5lcmF0ZU91dHB1dDEoQW1hbHRoZWEgYW1hbHRoZWEpICcnJworCQkgQ3VzdG9tZXIgdGVtcGxhdGUKKwkJIKtzdXBlci5nZW5lcmF0ZU91dHB1dDEoYW1hbHRoZWEpuworCScnJworCisKKwkvKioKKwkgKiBDcmVhdGVzIG91dHB1dCB3aXRoIGEgY29tYmluYXRpb24gb2YgdGVtcGxhdGUgYW5kIGZ1bmN0aW9ucy4KKwkgKiBUaGlzIGFsbG93cyBhIG1vcmUgZmxleGlibGUgdXNlIG9mIHV0aWxpdHkgZnVuY3Rpb25zIGFuZCBsYW1iZGFzLgorCSAqLworCW92ZXJyaWRlIFN0cmluZyBnZW5lcmF0ZU91dHB1dDIoQW1hbHRoZWEgYW1hbHRoZWEpICcnJworCUN1c3RvbWVyIHRlbXBsYXRlCisJq3N1cGVyLmdlbmVyYXRlT3V0cHV0MihhbWFsdGhlYSm7CisJJycnCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L3NyYy9jdXN0bW9kdWxlL0N1c3RNMlRJbmplY3Rvck1vZHVsZS5qYXZhIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0L3NyYy9jdXN0bW9kdWxlL0N1c3RNMlRJbmplY3Rvck1vZHVsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMGE1MGYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0LmN1c3Qvc3JjL2N1c3Rtb2R1bGUvQ3VzdE0yVEluamVjdG9yTW9kdWxlLmphdmEKQEAgLTAsMCArMSwzMiBAQAorIC8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggUm9iZXJ0IEJvc2NoIEdtYkguCisgKiAKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUKKyAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wCisgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIAorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAKKyAqIAorICogQ29udHJpYnV0b3JzOgorICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCitwYWNrYWdlIGN1c3Rtb2R1bGU7CisKK2ltcG9ydCBjdXN0VGVtcGxhdGVzLkN1c3RUcmFuc2Zvcm1lcjsKK2ltcG9ydCBtb2R1bGUuRGVmYXVsdE0yVEluamVjdG9yTW9kdWxlOworaW1wb3J0IHRlbXBsYXRlcy5NMlRfT3V0cHV0X1RyYW5zZm9ybWVyOworCitwdWJsaWMgY2xhc3MgQ3VzdE0yVEluamVjdG9yTW9kdWxlIGV4dGVuZHMgRGVmYXVsdE0yVEluamVjdG9yTW9kdWxlIHsKKworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdGlhbGl6ZUJhc2VDb25maWd1cmF0aW9uKCkgeworCQlzdXBlci5pbml0aWFsaXplQmFzZUNvbmZpZ3VyYXRpb24oKTsKKwkJYmluZChNMlRfT3V0cHV0X1RyYW5zZm9ybWVyLmNsYXNzKS50byhDdXN0VHJhbnNmb3JtZXIuY2xhc3MpOworCX0KKworIAorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZiOTRjLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotL2Jpbi8KLS90YXJnZXQvCi0veHRlbmQtZ2VuLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDA5MzQ0YmQuLmQ3ZThjODQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMTEsMyArMTEsNCBAQAogIG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbDt2aXNpYmlsaXR5Oj1yZWV4cG9ydCwKICBvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucwogRXhwb3J0LVBhY2thZ2U6IG1vZHVsZQorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBhcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L3BvbS54bWwKaW5kZXggNDZiYTUzMy4uOGIwMWJkZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC9wb20ueG1sCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQvcG9tLnhtbApAQCAtNCwxOSArNCwxNyBAQAogCiAJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCi0gCiAJPHBhcmVudD4KLQkJPHJlbGF0aXZlUGF0aD4uLi8uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQvcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorCQk8cmVsYXRpdmVQYXRoPi4uLy4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KIAkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uPC9ncm91cElkPgotCQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQ8L2FydGlmYWN0SWQ+CisJCTxhcnRpZmFjdElkPnBhcmVudDwvYXJ0aWZhY3RJZD4KIAkJPHZlcnNpb24+MC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAJPC9wYXJlbnQ+CiAJCiAJPHByb3BlcnRpZXM+Ci0JPHBsdWdpbi1pZD5hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0PC9wbHVnaW4taWQ+Ci0JPGV4YW1wbGVzLWluc3RhbGxlci1sb2NhdGlvbj4uLi8uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyPC9leGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+Ci0JPC9wcm9wZXJ0aWVzPiAKLQkKKwkJPHBsdWdpbi1pZD5hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0PC9wbHVnaW4taWQ+CisJCTxleGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+Li4vLi4vLi4vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXI8L2V4YW1wbGVzLWluc3RhbGxlci1sb2NhdGlvbj4KKwk8L3Byb3BlcnRpZXM+IAkKIAogCTxhcnRpZmFjdElkPmFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQ8L2FydGlmYWN0SWQ+CiAJPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4KQEAgLTEwNSwyNSArMTAzLDYgQEAKIAkJCQk8L2V4ZWN1dGlvbnM+CiAKIAkJCTwvcGx1Z2luPgotCQkJCi0JCQkJPHBsdWdpbj4KLTxncm91cElkPm9yZy5lY2xpcHNlLnh0ZW5kPC9ncm91cElkPgotPGFydGlmYWN0SWQ+eHRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotPHZlcnNpb24+Mi4xNC4wPC92ZXJzaW9uPgotPGV4ZWN1dGlvbnM+Ci0JPGV4ZWN1dGlvbj4KLQkJPGdvYWxzPgotCQkJPGdvYWw+Y29tcGlsZTwvZ29hbD4KLQkJCTxnb2FsPnh0ZW5kLWluc3RhbGwtZGVidWctaW5mbzwvZ29hbD4KLQkJCTxnb2FsPnRlc3RDb21waWxlPC9nb2FsPgotCQkJPGdvYWw+eHRlbmQtdGVzdC1pbnN0YWxsLWRlYnVnLWluZm88L2dvYWw+Ci0JCTwvZ29hbHM+Ci0JPC9leGVjdXRpb24+Ci08L2V4ZWN1dGlvbnM+Ci08Y29uZmlndXJhdGlvbj4KLQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5PgotPC9jb25maWd1cmF0aW9uPgotPC9wbHVnaW4+CiAJCTwvcGx1Z2lucz4KIAk8L2J1aWxkPgogPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQvc3JjL2NvbmZpZ3VyYXRpb24vTTJUVHJhbnNmb3JtYXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQvc3JjL2NvbmZpZ3VyYXRpb24vTTJUVHJhbnNmb3JtYXRpb24uamF2YQppbmRleCBhNTRiMzVmLi42ZmQyNjg0IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L3NyYy9jb25maWd1cmF0aW9uL00yVFRyYW5zZm9ybWF0aW9uLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC9zcmMvY29uZmlndXJhdGlvbi9NMlRUcmFuc2Zvcm1hdGlvbi5qYXZhCkBAIC0xNyw3ICsxNyw2IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKIAotaW1wb3J0IG9yZy5hcGFjaGUubG9nNGouTG9nTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLmxvZzRqLkxvZ2dlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWFGYWN0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zLmV4ZWN1dGlvbnR5cGUuSU1vZGVsVG9UZXh0Q29uZmlnOwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC9zcmMvdGVtcGxhdGVzL0FtYWx0aGVhTW9kZWwyVGV4dFRyYW5zZm9ybWVyLnh0ZW5kIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC9zcmMvdGVtcGxhdGVzL0FtYWx0aGVhTW9kZWwyVGV4dFRyYW5zZm9ybWVyLnh0ZW5kCmluZGV4IDRmYjkwNzkuLmFlYTUyY2UgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMnQvc3JjL3RlbXBsYXRlcy9BbWFsdGhlYU1vZGVsMlRleHRUcmFuc2Zvcm1lci54dGVuZAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L3NyYy90ZW1wbGF0ZXMvQW1hbHRoZWFNb2RlbDJUZXh0VHJhbnNmb3JtZXIueHRlbmQKQEAgLTI2LDcgKzI2LDcgQEAKIAkJCWZvciAobW9kZWwgOiByZXNvdXJjZS5jb250ZW50cykgewogCQkJCS8vIFRPRE86IG1vZGVsIGlzIGEgQW1hbHRoZWEgbW9kZWwKIAkJCQkvLyBjaGVjayBqYXZhZG9jIDogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcveHRlbmQvZG9jdW1lbnRhdGlvbi8yMDRfYWN0aXZlYW5ub3RhdGlvbnMuaHRtbCNhY3RpdmUtYW5ub3RhdGlvbnMtZXhwcmVzc2lvbiAKLQkJCQlsb2dnZXIuaW5mbygiUHJvY2Vzc2luZyBmaWxlIDogIiArIHJlc291cmNlLlVSSSkKKwkJCQlnZXRMb2dnZXIuaW5mbygiUHJvY2Vzc2luZyBmaWxlIDogIiArIHJlc291cmNlLlVSSSkKIAogCQkJCXZhciBTdHJpbmcgb3V0cHV0Rm9sZGVyID0gZ2V0UHJvcGVydHkoIm0ydF9vdXRwdXRfZm9sZGVyIik7CiAJCQkJdmFsIHRleHRHZW5lcmF0b3IgPSBuZXcgTTJUX091dHB1dF9UcmFuc2Zvcm1lcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC9zcmMvdGVtcGxhdGVzL00yVF9PdXRwdXRfVHJhbnNmb3JtZXIueHRlbmQgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L3NyYy90ZW1wbGF0ZXMvTTJUX091dHB1dF9UcmFuc2Zvcm1lci54dGVuZAppbmRleCAzMTVmODI3Li5iMzE4NmM1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L3NyYy90ZW1wbGF0ZXMvTTJUX091dHB1dF9UcmFuc2Zvcm1lci54dGVuZAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0ubTJ0L3NyYy90ZW1wbGF0ZXMvTTJUX091dHB1dF9UcmFuc2Zvcm1lci54dGVuZApAQCAtMTIsOSArMTIsOCBAQAogcGFja2FnZSB0ZW1wbGF0ZXMKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BbWFsdGhlYQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5DYWxsU2VxdWVuY2UKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUnVubmFibGVDYWxsCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2sKLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuVGFza1J1bm5hYmxlQ2FsbAogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLk1vZGVsVXRpbAogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC51dGlsLlNvZnR3YXJlVXRpbAogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zLmJhc2UudGVtcGxhdGVzLkFic3RyYWN0VHJhbnNmb3JtZXIKQEAgLTMzLDE0ICszMiwxMCBAQAogCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCQlUYXNrOiCrdGFzay5uYW1luwogCQkKLQkJCat2YXIgZ3JhcGhFbnRyaWVzPXRhc2suY2FsbEdyYXBoLmdyYXBoRW50cmllc7sKKwkJCat2YXIgZ3JhcGhFbnRyaWVzPXRhc2suYWN0aXZpdHlHcmFwaC5pdGVtc7sKIAkJCatGT1IgZ3JhcGhFbnRyeTogZ3JhcGhFbnRyaWVzuwotCQkJCatJRiBncmFwaEVudHJ5IGluc3RhbmNlb2YgQ2FsbFNlcXVlbmNluwotCQkJCQmrRk9SIHJ1bm5hYmxlSXRlbTogZ3JhcGhFbnRyeS5jYWxsc7sKLQkJCQkJCatJRiBydW5uYWJsZUl0ZW0gaW5zdGFuY2VvZiBUYXNrUnVubmFibGVDYWxsuwotCQkJCQkJCUFzc29jaWF0ZWQgUnVubmFibGU6IKsocnVubmFibGVJdGVtIGFzIFRhc2tSdW5uYWJsZUNhbGwpLnJ1bm5hYmxlLm5hbWW7Ci0JCQkJCQmrRU5ESUa7Ci0JCQkJCatFTkRGT1K7CisJCQkJq0lGIGdyYXBoRW50cnkgaW5zdGFuY2VvZiBSdW5uYWJsZUNhbGy7CisJCQkJCQkJQXNzb2NpYXRlZCBSdW5uYWJsZTogqyhncmFwaEVudHJ5IGFzICBSdW5uYWJsZUNhbGwpLnJ1bm5hYmxlLm5hbWW7CiAJCQkJq0VORElGuwogCQkJq0VOREZPUrsKIAkJq0VOREZPUrsKQEAgLTY4LDggKzYzLDggQEAKIAknJycKIAkJCiAJZGVmIHJ1bm5hYmxlTmFtZXNPZihUYXNrIHRhc2spIHsKLQkJU29mdHdhcmVVdGlsLmNvbGxlY3RDYWxscyh0YXNrLCBudWxsLCBbZSB8IGUgaW5zdGFuY2VvZiBUYXNrUnVubmFibGVDYWxsXSkKLQkJCS5tYXBbZSB8IChlIGFzIFRhc2tSdW5uYWJsZUNhbGwpLnJ1bm5hYmxlLm5hbWVdCisJCVNvZnR3YXJlVXRpbC5jb2xsZWN0QWN0aXZpdHlHcmFwaEl0ZW1zKHRhc2suYWN0aXZpdHlHcmFwaCwgbnVsbCwgW2UgfCBlIGluc3RhbmNlb2YgUnVubmFibGVDYWxsXSkKKwkJCS5tYXBbZSB8IChlIGFzIFJ1bm5hYmxlQ2FsbCkucnVubmFibGUubmFtZV0KIAkJCS5zb3J0CiAJfQogCQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLnNhbXBsZW1vZGVsLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uc2FtcGxlbW9kZWwvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmYjk0Yy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uc2FtcGxlbW9kZWwvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotL2Jpbi8KLS90YXJnZXQvCi0veHRlbmQtZ2VuLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAzMzhkYmU0Li41ODBiN2ViIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uc2FtcGxlbW9kZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLnNhbXBsZW1vZGVsL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0xMywzICsxMyw0IEBACiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAogIG9yZy5lY2xpcHNlLmVtZi5lY29yZTt2aXNpYmlsaXR5Oj1yZWV4cG9ydAogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLnNhbXBsZW1vZGVsCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2V4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uc2FtcGxlbW9kZWwvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbC9wb20ueG1sCmluZGV4IGQ3ZDIwYTcuLmI2MDI3NGUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbC9wb20ueG1sCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbC9wb20ueG1sCkBAIC00LDE3ICs0LDE2IEBACiAKIAk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKLSAKIAk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisJCTxyZWxhdGl2ZVBhdGg+Li4vLi4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgogCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb248L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZDwvYXJ0aWZhY3RJZD4KKwkJPGFydGlmYWN0SWQ+cGFyZW50PC9hcnRpZmFjdElkPgogCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KIAk8L3BhcmVudD4KIAkKIAk8cHJvcGVydGllcz4KLQk8cGx1Z2luLWlkPmFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbDwvcGx1Z2luLWlkPgotCTxleGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+Li4vLi4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlcjwvZXhhbXBsZXMtaW5zdGFsbGVyLWxvY2F0aW9uPgorCQk8cGx1Z2luLWlkPmFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5zYW1wbGVtb2RlbDwvcGx1Z2luLWlkPgorCQk8ZXhhbXBsZXMtaW5zdGFsbGVyLWxvY2F0aW9uPi4uLy4uLy4uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyPC9leGFtcGxlcy1pbnN0YWxsZXItbG9jYXRpb24+CiAJPC9wcm9wZXJ0aWVzPiAKIAkKIApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9mZWF0dXJlcy8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9mZWF0dXJlcy8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZiOTRjLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZmVhdHVyZXMvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotL2Jpbi8KLS90YXJnZXQvCi0veHRlbmQtZ2VuLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLjNyZHBhcnR5LmZlYXR1cmUvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLjNyZHBhcnR5LmZlYXR1cmUvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmYjk0Yy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi4zcmRwYXJ0eS5mZWF0dXJlLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS9iaW4vCi0vdGFyZ2V0LwotL3h0ZW5kLWdlbi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi4zcmRwYXJ0eS5mZWF0dXJlL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi4zcmRwYXJ0eS5mZWF0dXJlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZjRkNzEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uM3JkcGFydHkuZmVhdHVyZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0KLQk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi4zcmRwYXJ0eS5mZWF0dXJlPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+ZWNsaXBzZS1mZWF0dXJlPC9wYWNrYWdpbmc+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5jb3JlLmZlYXR1cmUvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmNvcmUuZmVhdHVyZS8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkM2ZiOTRjLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmNvcmUuZmVhdHVyZS8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vYmluLwotL3RhcmdldC8KLS94dGVuZC1nZW4vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uY29yZS5mZWF0dXJlL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5jb3JlLmZlYXR1cmUvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE4ODE2Mi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5jb3JlLmZlYXR1cmUvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCi0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCi0JCi0KLQk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5jb3JlLmZlYXR1cmU8L2FydGlmYWN0SWQ+Ci0JPHBhY2thZ2luZz5lY2xpcHNlLWZlYXR1cmU8L3BhY2thZ2luZz4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmZlYXR1cmUvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmZlYXR1cmUvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmYjk0Yy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5mZWF0dXJlLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLS9iaW4vCi0vdGFyZ2V0LwotL3h0ZW5kLWdlbi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5mZWF0dXJlL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5mZWF0dXJlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5OGZkNTIuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuZmVhdHVyZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0KLQk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5mZWF0dXJlPC9hcnRpZmFjdElkPgotCTxwYWNrYWdpbmc+ZWNsaXBzZS1mZWF0dXJlPC9wYWNrYWdpbmc+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZmI5NGMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbi8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vYmluLwotL3RhcmdldC8KLS94dGVuZC1nZW4vClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggM2FkZTI4OC4uNzM1ZGM3NCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0xNywzICsxNyw0IEBACiAgb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uLmJhc2UKK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiM2E0ZDkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+Ci0KLQk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0KLQk8cGFyZW50PgotCQk8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0JCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KLQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkPC9hcnRpZmFjdElkPgotCQk8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLQk8L3BhcmVudD4KLQotCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbjwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0KLQotCi0JPGJ1aWxkPgotCQk8cGx1Z2lucz4KLQkJCSAKLQotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS54dGVuZDwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD54dGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+Mi4xNC4wPC92ZXJzaW9uPgotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+Ci0JCQkJCQkJPGdvYWw+eHRlbmQtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJCTxnb2FsPnRlc3RDb21waWxlPC9nb2FsPgotCQkJCQkJCTxnb2FsPnh0ZW5kLXRlc3QtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJPC9nb2Fscz4KLQkJCQkJPC9leGVjdXRpb24+Ci0JCQkJPC9leGVjdXRpb25zPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5PgotCQkJCTwvY29uZmlndXJhdGlvbj4KLQotCQkJPC9wbHVnaW4+Ci0KLQotCi0JCTwvcGx1Z2lucz4KLQk8L2J1aWxkPgotCQotCQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy90cmFuc2Zvcm1hdGlvbi9hcHBsaWNhdGlvbi9iYXNlL0FwcGxpY2F0aW9uLmphdmEgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvdHJhbnNmb3JtYXRpb24vYXBwbGljYXRpb24vYmFzZS9BcHBsaWNhdGlvbi5qYXZhCmluZGV4IGMwYjhhMmQuLjJmNTI2N2IgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy90cmFuc2Zvcm1hdGlvbi9hcHBsaWNhdGlvbi9iYXNlL0FwcGxpY2F0aW9uLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3RyYW5zZm9ybWF0aW9uL2FwcGxpY2F0aW9uL2Jhc2UvQXBwbGljYXRpb24uamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSBSb2JlcnQgQm9zY2ggR21iSC4KKyAqIENvcHlyaWdodCAoYykgMjAxOC0yMDIwIFJvYmVydCBCb3NjaCBHbWJILgogICogCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMApAQCAtNTMsNyArNTMsNyBAQAogCQkJU3lzdGVtLm91dC5wcmludGxuKAogCQkJCQkiRVJST1IgISEgVW5hYmxlIHRvIHN0YXJ0IHRyYW5zZm9ybWF0aW9uIGFzIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQgaW4gaW5wdXQgcHJvcGVydGllcyBmaWxlIik7CiAKLQkJCXJldHVybiBuZXcgSW50ZWdlcigtMSk7CisJCQlyZXR1cm4gSW50ZWdlci52YWx1ZU9mKC0xKTsKIAkJfQogCiAJCXJldHVybiBJQXBwbGljYXRpb24uRVhJVF9PSzsKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy90cmFuc2Zvcm1hdGlvbi9hcHBsaWNhdGlvbi9iYXNlL0V4ZWN1dGVUcmFuc2Zvcm1hdGlvbi54dGVuZCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYXBwbGljYXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy90cmFuc2Zvcm1hdGlvbi9hcHBsaWNhdGlvbi9iYXNlL0V4ZWN1dGVUcmFuc2Zvcm1hdGlvbi54dGVuZAppbmRleCA1NDVjYTZiLi5jYWNjY2MzIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvdHJhbnNmb3JtYXRpb24vYXBwbGljYXRpb24vYmFzZS9FeGVjdXRlVHJhbnNmb3JtYXRpb24ueHRlbmQKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5hcHBsaWNhdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3RyYW5zZm9ybWF0aW9uL2FwcGxpY2F0aW9uL2Jhc2UvRXhlY3V0ZVRyYW5zZm9ybWF0aW9uLnh0ZW5kCkBAIC0yNSw3ICsyNSw2IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMuQ3VzdG9tT2JqZWN0c1N0b3JlCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMuYmFzZS50ZW1wbGF0ZXMuTW9kZWwyTW9kZWxSb290VHJhbnNmb3JtZXIKIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucy5iYXNlLnRlbXBsYXRlcy5Nb2RlbDJUZXh0Um9vdFRyYW5zZm9ybWVyCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMuYmFzZS50ZW1wbGF0ZXMuQWJzdHJhY3RUcmFuc2Zvcm1lcgogCiBjbGFzcyBFeGVjdXRlVHJhbnNmb3JtYXRpb24gewogCkBAIC02OCw2ICs2Nyw4IEBACiAJCQkJCQkJCQogCQkJCU1vZGVsMk1vZGVsUm9vdFRyYW5zZm9ybWVyLmluamVjdG9yPWluamVjdG9yCiAKKwkJCQlNb2RlbDJNb2RlbFJvb3RUcmFuc2Zvcm1lci5sb2dnZXI9bG9nZ2VyCisKIAkJCQltb2RlbDJNb2RlbFRyYW5zZm9ybWVyLm0ybVRyYW5zZm9ybWF0aW9uKG0ybUNvbmZpZy5pbnB1dFJlc291cmNlU2V0LCBtMm1Db25maWcub3VwdXRSZXNvdXJjZVNldCkKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmYjk0Yy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotL2Jpbi8KLS90YXJnZXQvCi0veHRlbmQtZ2VuLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA5MWQwNTkzLi41NDhjYjkzIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0xNSwzICsxNSw0IEBACiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMuYmFzZS50ZW1wbGF0ZXMsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMuZXhlY3V0aW9udHlwZQorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdkOWVhMS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgotCi0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCi0JPHBhcmVudD4KLQkJPHJlbGF0aXZlUGF0aD4uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQvcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb248L2dyb3VwSWQ+Ci0JCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZDwvYXJ0aWZhY3RJZD4KLQkJPHZlcnNpb24+MC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0JPC9wYXJlbnQ+Ci0KLQk8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9uczwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+Ci0KLQotCi0JPGJ1aWxkPgotCQk8cGx1Z2lucz4KLQotCQkJPHBsdWdpbj4KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS54dGVuZDwvZ3JvdXBJZD4KLQkJCQk8YXJ0aWZhY3RJZD54dGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQkJPHZlcnNpb24+Mi4xNC4wPC92ZXJzaW9uPgotCQkJCTxleGVjdXRpb25zPgotCQkJCQk8ZXhlY3V0aW9uPgotCQkJCQkJPGdvYWxzPgotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+Ci0JCQkJCQkJPGdvYWw+eHRlbmQtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJCTxnb2FsPnRlc3RDb21waWxlPC9nb2FsPgotCQkJCQkJCTxnb2FsPnh0ZW5kLXRlc3QtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgotCQkJCQkJPC9nb2Fscz4KLQkJCQkJPC9leGVjdXRpb24+Ci0JCQkJPC9leGVjdXRpb25zPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5PgotCQkJCTwvY29uZmlndXJhdGlvbj4KLQkJCTwvcGx1Z2luPgotCQkJCi0JCQkKLQkJCQotCQk8L3BsdWdpbnM+Ci0JPC9idWlsZD4KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy90cmFuc2Zvcm1hdGlvbi9leHRlbnNpb25zL2Jhc2UvdGVtcGxhdGVzL0Fic3RyYWN0VHJhbnNmb3JtZXIueHRlbmQgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4dGVuc2lvbnMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy90cmFuc2Zvcm1hdGlvbi9leHRlbnNpb25zL2Jhc2UvdGVtcGxhdGVzL0Fic3RyYWN0VHJhbnNmb3JtZXIueHRlbmQKaW5kZXggNGUzYzNhMS4uZTQxNDIwNCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvdHJhbnNmb3JtYXRpb24vZXh0ZW5zaW9ucy9iYXNlL3RlbXBsYXRlcy9BYnN0cmFjdFRyYW5zZm9ybWVyLnh0ZW5kCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXh0ZW5zaW9ucy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3RyYW5zZm9ybWF0aW9uL2V4dGVuc2lvbnMvYmFzZS90ZW1wbGF0ZXMvQWJzdHJhY3RUcmFuc2Zvcm1lci54dGVuZApAQCAtMjcsNyArMjcsNyBAQAogCQogCXN0YXRpYyBwdWJsaWMgQ3VzdG9tT2JqZWN0c1N0b3JlIGN1c3RvbU9ianNTdG9yZSA9IG5ldyBDdXN0b21PYmplY3RzU3RvcmUKIAotCXN0YXRpYyBwcml2YXRlIExvZ2dlciBsb2dnZXIKKwlzdGF0aWMgcHVibGljIExvZ2dlciBsb2dnZXIKIAogICAgIHN0YXRpYyBwdWJsaWMgUHJvcGVydGllcyBwcm9wZXJ0aWVzCiAJCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE5NmUyMAotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDIwMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgIDxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KKyAgPGFydGlmYWN0SWQ+cGFyZW50PC9hcnRpZmFjdElkPgorICA8dmVyc2lvbj4wLjMuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgIAorICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAKKyAgPG5hbWU+TW9kZWwgVHJhbnNmb3JtYXRpb248L25hbWU+CisgCisgIDxwcm9wZXJ0aWVzPgorICAgIDx0eWNoby52ZXJzaW9uPjEuNi4wPC90eWNoby52ZXJzaW9uPgorICAgIAorICAgIDxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPgorICAgIDxwcm9qZWN0LnJlcG9ydGluZy5vdXRwdXRFbmNvZGluZz5VVEYtODwvcHJvamVjdC5yZXBvcnRpbmcub3V0cHV0RW5jb2Rpbmc+CisgIDwvcHJvcGVydGllcz4KKyAKKwk8cGx1Z2luUmVwb3NpdG9yaWVzPgorCQk8cGx1Z2luUmVwb3NpdG9yeT4KKwkJCTxpZD5jYmk8L2lkPgorCQkJPHVybD5odHRwczovL3JlcG8uZWNsaXBzZS5vcmcvY29udGVudC9yZXBvc2l0b3JpZXMvY2JpLXJlbGVhc2VzLzwvdXJsPgorCQkJPHJlbGVhc2VzPgorCQkJCTxlbmFibGVkPnRydWU8L2VuYWJsZWQ+CisJCQk8L3JlbGVhc2VzPgorCQkJPHNuYXBzaG90cz4KKwkJCQk8ZW5hYmxlZD5mYWxzZTwvZW5hYmxlZD4KKwkJCTwvc25hcHNob3RzPgorCQk8L3BsdWdpblJlcG9zaXRvcnk+CisJPC9wbHVnaW5SZXBvc2l0b3JpZXM+CisKKwk8bW9kdWxlcz4KKworCQk8IS0tIGV4YW1wbGUgcGx1Z2lucyAtLT4KKwkJPG1vZHVsZT5leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLnNhbXBsZW1vZGVsPC9tb2R1bGU+CisJCTxtb2R1bGU+ZXhhbXBsZXMvc2FtcGxlLW1vZGVsLXRyYW5zZm9ybWF0aW9uL2FwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm08L21vZHVsZT4KKwkJPG1vZHVsZT5leGFtcGxlcy9zYW1wbGUtbW9kZWwtdHJhbnNmb3JtYXRpb24vYXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydDwvbW9kdWxlPgorCQk8bW9kdWxlPmV4YW1wbGVzL3NhbXBsZS1tb2RlbC10cmFuc2Zvcm1hdGlvbi9hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwPC9tb2R1bGU+CisKKwkJPCEtLSBBbWx0MkluY2hyb24gdHJhbnNmb3JtYXRpb24gcGx1Z2lucyAtLT4KKwkJPCEtLQorCQk8bW9kdWxlPmV4YW1wbGVzL2FtbHQyaW5jaHJvbi9jb20uaW5jaHJvbi5yZWFsdGltZS5yb290PC9tb2R1bGU+CisJCTxtb2R1bGU+ZXhhbXBsZXMvYW1sdDJpbmNocm9uL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm0udG8uaW5jaHJvbi5hcHA8L21vZHVsZT4KKwkJPG1vZHVsZT5leGFtcGxlcy9hbWx0MmluY2hyb24vb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybTwvbW9kdWxlPgorCQk8bW9kdWxlPmV4YW1wbGVzL2FtbHQyaW5jaHJvbi9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uM3JkcGFydHkubGliczwvbW9kdWxlPgorCQktLT4KKworCQk8IS0tIGNvcmUgLS0+CisgIAkJPG1vZHVsZT5wbHVnaW5zPC9tb2R1bGU+CisJCTxtb2R1bGU+ZmVhdHVyZXM8L21vZHVsZT4KKwkJPG1vZHVsZT5yZWxlbmc8L21vZHVsZT4KKwk8L21vZHVsZXM+CisgIAorICAJPGJ1aWxkPgorCisJCTxwbHVnaW5zPgorCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS54dGVuZDwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD54dGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+Mi4yMC4wPC92ZXJzaW9uPgorCQkJCTxleGVjdXRpb25zPgorCQkJCQk8ZXhlY3V0aW9uPgorCQkJCQkJPGdvYWxzPgorCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+CisJCQkJCQkJPGdvYWw+eHRlbmQtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgorCQkJCQkJCTxnb2FsPnRlc3RDb21waWxlPC9nb2FsPgorCQkJCQkJCTxnb2FsPnh0ZW5kLXRlc3QtaW5zdGFsbC1kZWJ1Zy1pbmZvPC9nb2FsPgorCQkJCQkJPC9nb2Fscz4KKwkJCQkJPC9leGVjdXRpb24+CisJCQkJPC9leGVjdXRpb25zPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8b3V0cHV0RGlyZWN0b3J5PiR7YmFzZWRpcn0veHRlbmQtZ2VuPC9vdXRwdXREaXJlY3Rvcnk+CisJCQkJCTx0ZXN0T3V0cHV0RGlyZWN0b3J5PiR7YmFzZWRpcn0veHRlbmQtZ2VuPC90ZXN0T3V0cHV0RGlyZWN0b3J5PgorCQkJCTwvY29uZmlndXJhdGlvbj4KKwkJCTwvcGx1Z2luPgorCisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnR5Y2hvLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgorCQkJCTxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisJCQk8L3BsdWdpbj4KKworCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD50eWNoby1jb21waWxlci1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4KKwkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJPHZlcmJvc2U+dHJ1ZTwvdmVyYm9zZT4KKwkJCQkJPHNvdXJjZT4xLjg8L3NvdXJjZT4KKwkJCQkJPHRhcmdldD4xLjg8L3RhcmdldD4KKwkJCQk8L2NvbmZpZ3VyYXRpb24+CisJCQk8L3BsdWdpbj4KKworCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD50YXJnZXQtcGxhdGZvcm0tY29uZmlndXJhdGlvbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8ZW52aXJvbm1lbnRzPgorCQkJCQkJPGVudmlyb25tZW50PgorCQkJCQkJCTxvcz5saW51eDwvb3M+CisJCQkJCQkJPHdzPmd0azwvd3M+CisJCQkJCQkJPGFyY2g+eDg2XzY0PC9hcmNoPgorCQkJCQkJPC9lbnZpcm9ubWVudD4KKwkJCQkJCTxlbnZpcm9ubWVudD4KKwkJCQkJCQk8b3M+d2luMzI8L29zPgorCQkJCQkJCTx3cz53aW4zMjwvd3M+CisJCQkJCQkJPGFyY2g+eDg2XzY0PC9hcmNoPgorCQkJCQkJPC9lbnZpcm9ubWVudD4KKwkJCQkJCTxlbnZpcm9ubWVudD4KKwkJCQkJCQk8b3M+bWFjb3N4PC9vcz4KKwkJCQkJCQk8d3M+Y29jb2E8L3dzPgorCQkJCQkJCTxhcmNoPng4Nl82NDwvYXJjaD4KKwkJCQkJCTwvZW52aXJvbm1lbnQ+CisJCQkJCTwvZW52aXJvbm1lbnRzPgorCisJCQkJCTx0YXJnZXQ+CisJCQkJCQk8YXJ0aWZhY3Q+CisJCQkJCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uPC9ncm91cElkPgorCQkJCQkJCTxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQ8L2FydGlmYWN0SWQ+CisJCQkJCQkJPHZlcnNpb24+MC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisJCQkJCQk8L2FydGlmYWN0PgorCQkJCQk8L3RhcmdldD4KKwkJCQkJPHRhcmdldERlZmluaXRpb25JbmNsdWRlU291cmNlPmhvbm9yPC90YXJnZXREZWZpbml0aW9uSW5jbHVkZVNvdXJjZT4KKwkJCQk8L2NvbmZpZ3VyYXRpb24+CisJCQk8L3BsdWdpbj4KKwkJCQorCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD50eWNoby1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4KKwkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJPCEtLSBhcmdMaW5lPiR7dHljaG8udGVzdEFyZ0xpbmV9PC9hcmdMaW5lPiAtLT4KKwkJCQkJPGZvcmtNb2RlPm5ldmVyPC9mb3JrTW9kZT4KKwkJCQkJPGluY2x1ZGVzPgorCQkJCQkJPGluY2x1ZGU+KiovKlRlc3QuKjwvaW5jbHVkZT4KKwkJCQkJPC9pbmNsdWRlcz4KKwkJCQk8L2NvbmZpZ3VyYXRpb24+CisJCQk8L3BsdWdpbj4KKworCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD50eWNoby1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+CisKKwkJCQk8ZXhlY3V0aW9ucz4KKwkJCQkJPGV4ZWN1dGlvbj4KKwkJCQkJCTxpZD5wbHVnaW4tc291cmNlPC9pZD4KKwkJCQkJCTxnb2Fscz4KKwkJCQkJCQk8Z29hbD5wbHVnaW4tc291cmNlPC9nb2FsPgorCQkJCQkJPC9nb2Fscz4KKwkJCQkJPC9leGVjdXRpb24+CisJCQkJPC9leGVjdXRpb25zPgorCQkJPC9wbHVnaW4+CisKKwkJICAgPHBsdWdpbj4KKwkJCQk8YXJ0aWZhY3RJZD5tYXZlbi1jbGVhbi1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+My4wLjA8L3ZlcnNpb24+CisJCQkJPGNvbmZpZ3VyYXRpb24+CisJCQkJCTxmaWxlc2V0cz4KKwkJCQkJCTxmaWxlc2V0PgorCQkJCQkJCTxkaXJlY3Rvcnk+JHtiYXNlZGlyfTwvZGlyZWN0b3J5PgorCQkJCQkJCTxpbmNsdWRlcz4KKwkJCQkJCQkJPGluY2x1ZGU+KioveHRlbmQtZ2VuLyoqPC9pbmNsdWRlPgorCQkJCQkJCTwvaW5jbHVkZXM+CisJCQkJCQkJPGZvbGxvd1N5bWxpbmtzPmZhbHNlPC9mb2xsb3dTeW1saW5rcz4KKwkJCQkJCTwvZmlsZXNldD4KKwkJCQkJPC9maWxlc2V0cz4KKwkJCQk8L2NvbmZpZ3VyYXRpb24+CisJCQk8L3BsdWdpbj4KKwkJPC9wbHVnaW5zPgorCTwvYnVpbGQ+CisKKwk8cHJvZmlsZXM+CisJCTxwcm9maWxlPgorCQkJPGlkPnNpZ248L2lkPgorCQkJPGJ1aWxkPgorCQkJCTxwbHVnaW5zPgorCQkJCQk8cGx1Z2luPgorCQkJCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UuY2JpLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisJCQkJCQk8YXJ0aWZhY3RJZD5lY2xpcHNlLWphcnNpZ25lci1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJCQk8dmVyc2lvbj4xLjEuMzwvdmVyc2lvbj4KKwkJCQkJCTxleGVjdXRpb25zPgorCQkJCQkJCTxleGVjdXRpb24+CisJCQkJCQkJCTxpZD5zaWduPC9pZD4KKwkJCQkJCQkJPHBoYXNlPnBhY2thZ2U8L3BoYXNlPgorCQkJCQkJCQk8Z29hbHM+CisJCQkJCQkJCQk8Z29hbD5zaWduPC9nb2FsPgorCQkJCQkJCQk8L2dvYWxzPgorCQkJCQkJCTwvZXhlY3V0aW9uPgorCQkJCQkJPC9leGVjdXRpb25zPgorCQkJCQk8L3BsdWdpbj4KKwkJCQk8L3BsdWdpbnM+CisJCQk8L2J1aWxkPgorCQk8L3Byb2ZpbGU+CisJPC9wcm9maWxlcz4gIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9kZXZfdXRpbHMvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9kZXZfdXRpbHMvLnByb2plY3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvZGV2X3V0aWxzLy5wcm9qZWN0CnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9kZXZfdXRpbHMvLnByb2plY3QKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL2Rldl91dGlscy93b3JraW5nU2V0cy5wc2YgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9kZXZfdXRpbHMvd29ya2luZ1NldHMucHNmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkODFjYTQKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9kZXZfdXRpbHMvd29ya2luZ1NldHMucHNmCkBAIC0wLDAgKzEsNDEgQEAKKzxwc2YgdmVyc2lvbj0iMi4wIj4KKzx3b3JraW5nU2V0cyBlZGl0UGFnZUlkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVdvcmtpbmdTZXRQYWdlIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtpbmdTZXRGYWN0b3J5IiBpZD0iMTUyOTIxNTMzMjY0MV8xIiBsYWJlbD0idHJhbnNmb3JtYXRpb24uZnJhbWV3b3JrIiBuYW1lPSJ0cmFuc2Zvcm1hdGlvbi5mcmFtZXdvcmsiPgorPGl0ZW0gZWxlbWVudElEPSI9b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmFwcGxpY2F0aW9uIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIgLz4KKzxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leHRlbnNpb25zIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIgLz4KKzxpdGVtIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubW9kZWwuUmVzb3VyY2VGYWN0b3J5IiBwYXRoPSIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmNvcmUuZmVhdHVyZSIgdHlwZT0iNCIgLz4KKzxpdGVtIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubW9kZWwuUmVzb3VyY2VGYWN0b3J5IiBwYXRoPSIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLjNyZHBhcnR5LmZlYXR1cmUiIHR5cGU9IjQiIC8+Cis8L3dvcmtpbmdTZXRzPgorPHdvcmtpbmdTZXRzIGVkaXRQYWdlSWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhV29ya2luZ1NldFBhZ2UiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2luZ1NldEZhY3RvcnkiIGlkPSIxNTI5MjE1MzM4MTQ4XzIiIGxhYmVsPSJpbmNocm9uLnRyYW5zZm9ybWF0aW9uIiBuYW1lPSJpbmNocm9uLnRyYW5zZm9ybWF0aW9uIj4KKzxpdGVtIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubW9kZWwuUmVzb3VyY2VGYWN0b3J5IiBwYXRoPSIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnRvLmluY2hyb24uZmVhdHVyZSIgdHlwZT0iNCIgLz4KKzxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm0udG8uaW5jaHJvbi5hcHAiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5IiAvPgorPGl0ZW0gZWxlbWVudElEPSI9b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybS50by5pbmNocm9uLm0ybSIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiIC8+Cis8aXRlbSBlbGVtZW50SUQ9Ij1vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uM3JkcGFydHkubGlicyIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiIC8+Cis8aXRlbSBlbGVtZW50SUQ9Ij1jb20uaW5jaHJvbi5yZWFsdGltZS5yb290IiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIgLz4KKzxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm0udG8uaW5jaHJvbi5wcm9kdWN0IiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIgLz4KKzwvd29ya2luZ1NldHM+Cis8d29ya2luZ1NldHMgZWRpdFBhZ2VJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFXb3JraW5nU2V0UGFnZSIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JraW5nU2V0RmFjdG9yeSIgaWQ9IjE1Mjk0MzkwMjk2NzdfOCIgbGFiZWw9InNhbXBsZS5tb2RlbC50cmFuc2Zvcm1hdGlvbi5leGFtcGxlIiBuYW1lPSJzYW1wbGUubW9kZWwudHJhbnNmb3JtYXRpb24uZXhhbXBsZSI+Cis8aXRlbSBlbGVtZW50SUQ9Ij1hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uYXBwIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIgLz4KKzxpdGVtIGVsZW1lbnRJRD0iPWFwcDRtYy5leGFtcGxlLnRyYW5zZm9ybS5tMm0iIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5IiAvPgorPGl0ZW0gZWxlbWVudElEPSI9YXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydCIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS5qZHQudWkuUGVyc2lzdGFibGVKYXZhRWxlbWVudEZhY3RvcnkiIC8+Cis8aXRlbSBlbGVtZW50SUQ9Ij1hcHA0bWMuZXhhbXBsZS50cmFuc2Zvcm0uc2FtcGxlbW9kZWwiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5IiAvPgorPGl0ZW0gZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5tb2RlbC5SZXNvdXJjZUZhY3RvcnkiIHBhdGg9Ii9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuZmVhdHVyZSIgdHlwZT0iNCIgLz4KKzwvd29ya2luZ1NldHM+CisKKzx3b3JraW5nU2V0cyBlZGl0UGFnZUlkPSJvcmcuZWNsaXBzZS5qZHQudWkuSmF2YVdvcmtpbmdTZXRQYWdlIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLldvcmtpbmdTZXRGYWN0b3J5IiBpZD0iMTUyOTQzOTAyOTY3N18yNCIgbGFiZWw9InNhbXBsZS5tb2RlbC50cmFuc2Zvcm1hdGlvbi5leGFtcGxlLmN1c3RvbWl6YXRpb24iIG5hbWU9InNhbXBsZS5tb2RlbC50cmFuc2Zvcm1hdGlvbi5leGFtcGxlLmN1c3RvbWl6YXRpb24iPgorPGl0ZW0gZWxlbWVudElEPSI9YXBwNG0uZXhhbXBsZS50cmFuc2Zvcm0uY3VzdC5hcHAiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5IiAvPgorPGl0ZW0gZWxlbWVudElEPSI9YXBwNG1jLmV4YW1wbGUudHJhbnNmb3JtLm0ydC5jdXN0IiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIgLz4KKzwvd29ya2luZ1NldHM+CisKKworPHdvcmtpbmdTZXRzIGVkaXRQYWdlSWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhV29ya2luZ1NldFBhZ2UiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2luZ1NldEZhY3RvcnkiIGlkPSIxNTI5OTE0NjI1MzgwXzEyIiBsYWJlbD0iYnVpbGQiIG5hbWU9ImJ1aWxkIj4KKzxpdGVtIGVsZW1lbnRJRD0iPW9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UuamR0LnVpLlBlcnNpc3RhYmxlSmF2YUVsZW1lbnRGYWN0b3J5IiAvPgorPGl0ZW0gZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5tb2RlbC5SZXNvdXJjZUZhY3RvcnkiIHBhdGg9Ii9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvIiB0eXBlPSI0IiAvPgorPGl0ZW0gZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5tb2RlbC5SZXNvdXJjZUZhY3RvcnkiIHBhdGg9Ii9kZXZfdXRpbHMiIHR5cGU9IjQiIC8+Cis8aXRlbSBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLnVpLmludGVybmFsLm1vZGVsLlJlc291cmNlRmFjdG9yeSIgcGF0aD0iL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQiIHR5cGU9IjQiIC8+Cis8L3dvcmtpbmdTZXRzPgorPHdvcmtpbmdTZXRzIGVkaXRQYWdlSWQ9Im9yZy5lY2xpcHNlLmpkdC51aS5KYXZhV29ya2luZ1NldFBhZ2UiIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwuV29ya2luZ1NldEZhY3RvcnkiIGlkPSIxNTI5OTE1MjAyNTU0XzE4IiBsYWJlbD0iRXhhbXBsZXNfQnVpbGRlcnMiIG5hbWU9IkV4YW1wbGVzX0J1aWxkZXJzIj4KKzxpdGVtIGZhY3RvcnlJRD0ib3JnLmVjbGlwc2UudWkuaW50ZXJuYWwubW9kZWwuUmVzb3VyY2VGYWN0b3J5IiBwYXRoPSIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmZlYXR1cmUiIHR5cGU9IjQiIC8+Cis8aXRlbSBlbGVtZW50SUQ9Ij1vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyIiBmYWN0b3J5SUQ9Im9yZy5lY2xpcHNlLmpkdC51aS5QZXJzaXN0YWJsZUphdmFFbGVtZW50RmFjdG9yeSIgLz4KKzwvd29ya2luZ1NldHM+Cis8d29ya2luZ1NldHMgZWRpdFBhZ2VJZD0ib3JnLmVjbGlwc2UuamR0LnVpLkphdmFXb3JraW5nU2V0UGFnZSIgZmFjdG9yeUlEPSJvcmcuZWNsaXBzZS51aS5pbnRlcm5hbC5Xb3JraW5nU2V0RmFjdG9yeSIgaWQ9IjE1Mjk5MTUzMjc5NzdfMjMiIGxhYmVsPSJmZWF0dXJlcyIgbmFtZT0iZmVhdHVyZXMiIC8+Cis8L3BzZj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvLmNsYXNzcGF0aCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvLmNsYXNzcGF0aApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5jbGFzc3BhdGgKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvLmNsYXNzcGF0aApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5naXRpZ25vcmUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci8uZ2l0aWdub3JlCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci8ucHJvamVjdCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvLnByb2plY3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci8ucHJvamVjdApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci8ucHJvamVjdApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDgxJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOGZmYzUxOC4uYTg0NTM4MCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTYsMyArNiw0IEBACiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmVtZi5jb21tb24udWkKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2UgQVBQNE1DCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9hYm91dC5odG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9hYm91dC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvYWJvdXQuaHRtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9hYm91dC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvYnVpbGQucHJvcGVydGllcyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvYnVpbGQucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvYnVpbGQucHJvcGVydGllcwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDRkMTc5YmMuLjQyYmQwY2IgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvYnVpbGQucHJvcGVydGllcwpAQCAtMTgsOSArMTgsNyBAQAogICAgICAgICAgICAgICAgZXBsLTIuMC5odG1sCiBzcmMuaW5jbHVkZXMgPSBleGFtcGxlcy8sXAogICAgICAgICAgICAgICAgaWNvbnMvLFwKLSAgICAgICAgICAgICAgIHBvbS54bWwsXAogICAgICAgICAgICAgICAgY29weUV4YW1wbGVMaWIuYW50LFwKICAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgbGF1bmNoLyxcCiAgICAgICAgICAgICAgICBnZW5lcmF0ZVRyYW5zZm9ybWF0aW9uRXhhbXBsZXNCdWlsZGVycy5hbnQsXAogICAgICAgICAgICAgICAgZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvY29weUV4YW1wbGVMaWIuYW50IGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9jb3B5RXhhbXBsZUxpYi5hbnQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9jb3B5RXhhbXBsZUxpYi5hbnQKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvY29weUV4YW1wbGVMaWIuYW50CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9lcGwtMi4wLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9lcGwtMi4wLmh0bWwKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvZXBsLTIuMC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvZ2VuZXJhdGVUcmFuc2Zvcm1hdGlvbkV4YW1wbGVzQnVpbGRlcnMuYW50IGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9nZW5lcmF0ZVRyYW5zZm9ybWF0aW9uRXhhbXBsZXNCdWlsZGVycy5hbnQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9nZW5lcmF0ZVRyYW5zZm9ybWF0aW9uRXhhbXBsZXNCdWlsZGVycy5hbnQKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvZ2VuZXJhdGVUcmFuc2Zvcm1hdGlvbkV4YW1wbGVzQnVpbGRlcnMuYW50CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvaWNvbnMvZnVsbC9jdG9vbDE2L05ld0VNRkV4YW1wbGUuZ2lmIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9pY29ucy9mdWxsL2N0b29sMTYvTmV3RU1GRXhhbXBsZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9pY29ucy9mdWxsL2N0b29sMTYvTmV3RU1GRXhhbXBsZS5naWYKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvaWNvbnMvZnVsbC9jdG9vbDE2L05ld0VNRkV4YW1wbGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9pY29ucy9mdWxsL3dpemJhbi9OZXdFTUZFeGFtcGxlLmdpZiBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvaWNvbnMvZnVsbC93aXpiYW4vTmV3RU1GRXhhbXBsZS5naWYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9pY29ucy9mdWxsL3dpemJhbi9OZXdFTUZFeGFtcGxlLmdpZgpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9pY29ucy9mdWxsL3dpemJhbi9OZXdFTUZFeGFtcGxlLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlciBnZW5lcmF0ZVRyYW5zZm9ybWF0aW9uRXhhbXBsZXNCdWlsZGVycy5hbnQubGF1bmNoIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyIGdlbmVyYXRlVHJhbnNmb3JtYXRpb25FeGFtcGxlc0J1aWxkZXJzLmFudC5sYXVuY2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyIGdlbmVyYXRlVHJhbnNmb3JtYXRpb25FeGFtcGxlc0J1aWxkZXJzLmFudC5sYXVuY2gKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlciBnZW5lcmF0ZVRyYW5zZm9ybWF0aW9uRXhhbXBsZXNCdWlsZGVycy5hbnQubGF1bmNoCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvcGx1Z2luLnByb3BlcnRpZXMgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuaW5zdGFsbGVyL3BsdWdpbi5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvcGx1Z2luLnByb3BlcnRpZXMKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvcGx1Z2luLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9wbHVnaW4ueG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9wbHVnaW4ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5pbnN0YWxsZXIvcGx1Z2luLnhtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmV4YW1wbGVzLmluc3RhbGxlci9wbHVnaW4ueG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvLy5wcm9qZWN0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vLnByb2plY3QKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vLnByb2plY3QKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9hYm91dC5odG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9hYm91dC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vYWJvdXQuaHRtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9hYm91dC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vY2F0ZWdvcnkueG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9jYXRlZ29yeS54bWwKc2ltaWxhcml0eSBpbmRleCA3MiUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL2NhdGVnb3J5LnhtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9jYXRlZ29yeS54bWwKaW5kZXggZGUxNzkwMS4uM2NkYzcyZSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL2NhdGVnb3J5LnhtbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL2NhdGVnb3J5LnhtbApAQCAtMSwxMCArMSwxMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KIDxzaXRlPgogICAgPGZlYXR1cmUgdXJsPSJmZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uY29yZS5mZWF0dXJlXzAuMy4wLnF1YWxpZmllci5qYXIiIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uY29yZS5mZWF0dXJlIiB2ZXJzaW9uPSIwLjMuMC5xdWFsaWZpZXIiPgotICAgICAgPGNhdGVnb3J5IG5hbWU9IkFQUDRNQyBFTUYgbW9kZWwgVHJhbnNmb3JtYXRpb24iLz4KKyAgICAgIDxjYXRlZ29yeSBuYW1lPSJBUFA0TUMgRU1GIE1vZGVsIFRyYW5zZm9ybWF0aW9uIi8+CiAgICA8L2ZlYXR1cmU+CiAgICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5leGFtcGxlcy5mZWF0dXJlXzAuMy4wLnF1YWxpZmllci5qYXIiIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uZXhhbXBsZXMuZmVhdHVyZSIgdmVyc2lvbj0iMC4zLjAucXVhbGlmaWVyIj4KLSAgICAgIDxjYXRlZ29yeSBuYW1lPSJBUFA0TUMgRU1GIG1vZGVsIFRyYW5zZm9ybWF0aW9uIi8+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0iQVBQNE1DIEVNRiBNb2RlbCBUcmFuc2Zvcm1hdGlvbiIvPgogICAgPC9mZWF0dXJlPgotICAgPGNhdGVnb3J5LWRlZiBuYW1lPSJBUFA0TUMgRU1GIG1vZGVsIFRyYW5zZm9ybWF0aW9uIiBsYWJlbD0ib3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwbyIvPgorICAgPGNhdGVnb3J5LWRlZiBuYW1lPSJBUFA0TUMgRU1GIE1vZGVsIFRyYW5zZm9ybWF0aW9uIiBsYWJlbD0ib3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwbyIvPgogPC9zaXRlPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL2VwbC0yLjAuaHRtbCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vZXBsLTIuMC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vZXBsLTIuMC5odG1sCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL2VwbC0yLjAuaHRtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9wb20ueG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4M2QzNjEKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24ucDJyZXBvL3BvbS54bWwKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisJeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCI+CisKKyAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorCisgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG88L2FydGlmYWN0SWQ+CisKKyAgPHBhY2thZ2luZz5lY2xpcHNlLXJlcG9zaXRvcnk8L3BhY2thZ2luZz4KKworICA8cGFyZW50PgorCTxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorCTxncm91cElkPm9yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbjwvZ3JvdXBJZD4KKwk8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+CisJPHZlcnNpb24+MC4zLjAtU05BUFNIT1Q8L3ZlcnNpb24+CisgIDwvcGFyZW50PgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9zaXRlVGVtcGxhdGUvaW5kZXguaHRtbCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vc2l0ZVRlbXBsYXRlL2luZGV4Lmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9zaXRlVGVtcGxhdGUvaW5kZXguaHRtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9zaXRlVGVtcGxhdGUvaW5kZXguaHRtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udGFyZ2V0Ly5wcm9qZWN0CnNpbWlsYXJpdHkgaW5kZXggNzYlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkLy5wcm9qZWN0CnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udGFyZ2V0Ly5wcm9qZWN0CmluZGV4IGU1MTU1ZTQuLjk2MWRjZWUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkLy5wcm9qZWN0CisrKyBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQvLnByb2plY3QKQEAgLTEsNiArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQ8L25hbWU+CisJPG5hbWU+b3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnRhcmdldDwvbmFtZT4KIAk8Y29tbWVudD48L2NvbW1lbnQ+CiAJPHByb2plY3RzPgogCTwvcHJvamVjdHM+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vYWJvdXQuaHRtbCBiL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQvYWJvdXQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIGVjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnAycmVwby9hYm91dC5odG1sCmNvcHkgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnRhcmdldC9hYm91dC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnRhcmdldC9lcGwtMi4wLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5wMnJlcG8vZXBsLTIuMC5odG1sCmNvcHkgdG8gZWNsaXBzZS10b29scy9tb2RlbC10cmFuc2Zvcm1hdGlvbi9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnRhcmdldC9lcGwtMi4wLmh0bWwKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnRhcmdldC50YXJnZXQgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udGFyZ2V0L29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQudGFyZ2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMjE1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udGFyZ2V0L29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQudGFyZ2V0CkBAIC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGU/PgorPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgorPHRhcmdldCBuYW1lPSJNb2RlbCBUcmFuc2Zvcm1hdGlvbiBUYXJnZXQiIHNlcXVlbmNlTnVtYmVyPSIxNTg5NzgwOTAyIj4KKyAgPGxvY2F0aW9ucz4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0idHJ1ZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5zZGsuaWRlIiB2ZXJzaW9uPSI0LjE0LjAuSTIwMTkxMjEwLTA2MTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueGNvcmUubGliLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuNS4wLnYyMDE5MDQwMS0wODU2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjIwLjAudjIwMTkxMDI4LTA5MDUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYudHJhbnNhY3Rpb24uZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMS4xMi4wLjIwMTgwNTE0MDgyNCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi52YWxpZGF0aW9uLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMTIuMS4yMDE4MTIwNzA5MTEiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYud29ya3NwYWNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMTIuMC4yMDE4MDUxNDA4MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC5ydW50aW1lLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjIuMjAuMC52MjAxOTEyMDItMTI1NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnh0ZXh0LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjIwLjAudjIwMTkxMjAyLTEyNTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjIwLjAudjIwMTkxMjAyLTEyNTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC54YmFzZS5saWIuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi4yMC4wLnYyMDE5MTIwMi0wOTEwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRlbmQuc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjIuMjAuMC52MjAxOTEyMDItMTI1NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnhwYW5kLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjIuMC52MjAxNjA1MjYwMzE1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmNsaSIgdmVyc2lvbj0iMS4yLjAudjIwMTQwNDI3MDIyMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sYW5nIiB2ZXJzaW9uPSIyLjYuMC52MjAxNDA0MjcwMjIwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5sb2c0aiIgdmVyc2lvbj0iMS4yLjE1LnYyMDEwMTIwNzA4MTUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnhlcmNlcyIgdmVyc2lvbj0iMi45LjAudjIwMTEwMTIxMTYxNyIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUueGFsYW4iIHZlcnNpb249IjIuNy4xLnYyMDEwMDUwODA0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnhtbC5yZXNvbHZlciIgdmVyc2lvbj0iMS4yLjAudjIwMTAwNTA4MDQwMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXIiIHZlcnNpb249IjIuNy4xLnYyMDEwMDUwODA0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJqYXZheC54bWwiIHZlcnNpb249IjEuMy40LnYyMDEwMDUwODA0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuamRvbSIgdmVyc2lvbj0iMS4xLjEudjIwMTEwMTE1MTQwMCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3VhdmEiIHZlcnNpb249IjI3LjEuMC52MjAxOTA1MTctMTk0NiIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuaW5qZWN0IiB2ZXJzaW9uPSIzLjAuMC52MjAxNjA1MTcyMTAwIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMTktMTIiLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJ0cnVlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5wbGF0Zm9ybS5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMC45LjguMjAyMDA0MzAxNDEwIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2FwcDRtYy91cGRhdGVzaXRlcy9yZWxlYXNlcy8wLjkuOCIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9InRydWUiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uuc3BoaW54LnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIwLjExLjIuMjAxODAyMjMwODA1Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3NwaGlueC91cGRhdGVzLzAuMTEueCIvPgorICAgIDwvbG9jYXRpb24+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9InRydWUiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UubGljZW5zZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjAuMi52MjAxODEwMTYtMjIxMCIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9jYmkvdXBkYXRlcy9saWNlbnNlIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgPC9sb2NhdGlvbnM+Cis8L3RhcmdldD4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLnRhcmdldC50cGQgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udGFyZ2V0L29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQudHBkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiOTlmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24udGFyZ2V0L29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi50YXJnZXQudHBkCkBAIC0wLDAgKzEsNDEgQEAKK3RhcmdldCAiTW9kZWwgVHJhbnNmb3JtYXRpb24gVGFyZ2V0IgorCit3aXRoIHNvdXJjZSBhbGxFbnZpcm9ubWVudHMKKworbG9jYXRpb24gImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE5LTEyIiB7CisJb3JnLmVjbGlwc2Uuc2RrLmlkZQorCW9yZy5lY2xpcHNlLmVtZi5lY29yZS54Y29yZS5saWIuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi5zZGsuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi50cmFuc2FjdGlvbi5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UuZW1mLnZhbGlkYXRpb24uZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi53b3Jrc3BhY2UuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnJ1bnRpbWUuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnNkay5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UueHRleHQueGJhc2UuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnhiYXNlLmxpYi5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UueHRlbmQuc2RrLmZlYXR1cmUuZ3JvdXAKKwlvcmcuZWNsaXBzZS54cGFuZC5zZGsuZmVhdHVyZS5ncm91cAorCW9yZy5hcGFjaGUuY29tbW9ucy5jbGkKKwlvcmcuYXBhY2hlLmNvbW1vbnMubGFuZworCW9yZy5hcGFjaGUubG9nNGoKKwlvcmcuYXBhY2hlLnhlcmNlcworCW9yZy5hcGFjaGUueGFsYW4KKwlvcmcuYXBhY2hlLnhtbC5yZXNvbHZlcgorCW9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXIKKwlqYXZheC54bWwKKwlvcmcuamRvbQorCWNvbS5nb29nbGUuZ3VhdmEKKwljb20uZ29vZ2xlLmluamVjdAorfQorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2FwcDRtYy91cGRhdGVzaXRlcy9yZWxlYXNlcy8wLjkuOCIgeworCW9yZy5lY2xpcHNlLmFwcDRtYy5wbGF0Zm9ybS5zZGsuZmVhdHVyZS5ncm91cAorfQorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3NwaGlueC91cGRhdGVzLzAuMTEueCIgeworCW9yZy5lY2xpcHNlLnNwaGlueC5zZGsuZmVhdHVyZS5ncm91cAorfQorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2NiaS91cGRhdGVzL2xpY2Vuc2UiIHsKKwlvcmcuZWNsaXBzZS5saWNlbnNlLmZlYXR1cmUuZ3JvdXAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWM3MzRlCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDUgQEAKKy5tZXRhZGF0YS8KKworIyBFY2xpcHNlIHRhcmdldCBkaXJlY3RvcmllcworYmluLwordGFyZ2V0LwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvLm12bi9leHRlbnNpb25zLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhLy5tdm4vZXh0ZW5zaW9ucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwYTllYwotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhLy5tdm4vZXh0ZW5zaW9ucy54bWwKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPGV4dGVuc2lvbnM+CisgIDxleHRlbnNpb24+CisgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG8uZXh0cmFzPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnR5Y2hvLXBvbWxlc3M8L2FydGlmYWN0SWQ+CisgICAgPHZlcnNpb24+MS42LjA8L3ZlcnNpb24+CisgIDwvZXh0ZW5zaW9uPgorPC9leHRlbnNpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vdGFyZ2V0Lw0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmU2ZjZiLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0RGVzY3JpcHRpb24+DQotCTxuYW1lPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L25hbWU+DQotCTxjb21tZW50PjwvY29tbWVudD4NCi0JPHByb2plY3RzPg0KLQk8L3Byb2plY3RzPg0KLQk8YnVpbGRTcGVjPg0KLQkJPGJ1aWxkQ29tbWFuZD4NCi0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPg0KLQkJCTxhcmd1bWVudHM+DQotCQkJPC9hcmd1bWVudHM+DQotCQk8L2J1aWxkQ29tbWFuZD4NCi0JCTxidWlsZENvbW1hbmQ+DQotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+DQotCQkJPGFyZ3VtZW50cz4NCi0JCQk8L2FyZ3VtZW50cz4NCi0JCTwvYnVpbGRDb21tYW5kPg0KLQk8L2J1aWxkU3BlYz4NCi0JPG5hdHVyZXM+DQotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4NCi0JPC9uYXR1cmVzPg0KLTwvcHJvamVjdERlc2NyaXB0aW9uPg0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNGI1NmRmLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6IEJ1aWxkCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZC9idWlsZC5wcm9wZXJ0aWVzIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZC9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzdjNTM0Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwNCi0gICAgICAgICAgICAgICBlcGwtMi4wLmh0bWwNCi1zcmMuaW5jbHVkZXMgPSBlcGwtMi4wLmh0bWwNCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNWQyY2MuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLTxwcm9qZWN0Pg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvYXJ0aWZhY3RJZD4NCi0gIDx2ZXJzaW9uPjEuMC4wLnF1YWxpZmllcjwvdmVyc2lvbj4gDQotICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPg0KLSAgPG5hbWU+U0NBMkFNQUxUSEVBPC9uYW1lPg0KLSANCi0JPHByb3BlcnRpZXM+DQotCQk8dHljaG8udmVyc2lvbj4wLjIyLjA8L3R5Y2hvLnZlcnNpb24+DQotCQk8amFjb2NvLnZlcnNpb24+MC43LjQuMjAxNTAyMjYyMTI4PC9qYWNvY28udmVyc2lvbj4NCi0JCTxwcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPlVURi04PC9wcm9qZWN0LmJ1aWxkLnNvdXJjZUVuY29kaW5nPg0KLQkJPHByb2plY3QucmVwb3J0aW5nLm91dHB1dEVuY29kaW5nPlVURi04PC9wcm9qZWN0LnJlcG9ydGluZy5vdXRwdXRFbmNvZGluZz4NCi0JCTxtYXJzLXJlcG8udXJsPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy9tYXJzPC9tYXJzLXJlcG8udXJsPg0KLQkJPGFtYWx0aGVhLXJlcG8udXJsPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9hcHA0bWMvdXBkYXRlc2l0ZXMvcmVsZWFzZXMvMC44LjEvPC9hbWFsdGhlYS1yZXBvLnVybD4NCi0JCTxvcmJpdC1yZXBvLnVybD5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDE1MDEyNDA3Mzc0Ny9yZXBvc2l0b3J5Lzwvb3JiaXQtcmVwby51cmw+DQotCQk8ZWFzZS1yZXBvLXVybD5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWFzZS91cGRhdGUvcmVsZWFzZTwvZWFzZS1yZXBvLXVybD4NCi0JCTxzcGhpbngtcmVwby11cmw+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3NwaGlueC91cGRhdGVzL2ludGVyaW08L3NwaGlueC1yZXBvLXVybD4NCi0JPC9wcm9wZXJ0aWVzPg0KLSAgCTxyZXBvc2l0b3JpZXM+DQotPHJlcG9zaXRvcnk+DQotCQkJPGlkPmFtYWx0aGVhPC9pZD4NCi0JCQk8dXJsPiR7YW1hbHRoZWEtcmVwby51cmx9PC91cmw+DQotCQkJPGxheW91dD5wMjwvbGF5b3V0Pg0KLQkJPC9yZXBvc2l0b3J5Pg0KLQkJPHJlcG9zaXRvcnk+DQotCQkJPGlkPm1hcnM8L2lkPg0KLQkJCTx1cmw+JHttYXJzLXJlcG8udXJsfTwvdXJsPg0KLQkJCTxsYXlvdXQ+cDI8L2xheW91dD4NCi0JCTwvcmVwb3NpdG9yeT4NCi0JCTxyZXBvc2l0b3J5Pg0KLQkJCTxpZD5vcmJpdDwvaWQ+DQotCQkJPHVybD4ke29yYml0LXJlcG8udXJsfTwvdXJsPg0KLQkJCTxsYXlvdXQ+cDI8L2xheW91dD4NCi0JCTwvcmVwb3NpdG9yeT4NCi0JCTxyZXBvc2l0b3J5Pg0KLQkJCTxpZD5lYXNlPC9pZD4NCi0JCQk8dXJsPiR7ZWFzZS1yZXBvLXVybH08L3VybD4NCi0JCQk8bGF5b3V0PnAyPC9sYXlvdXQ+DQotCQk8L3JlcG9zaXRvcnk+DQotCQk8cmVwb3NpdG9yeT4NCi0JCQk8aWQ+c3BoaW54PC9pZD4NCi0JCQk8dXJsPiR7c3BoaW54LXJlcG8tdXJsfTwvdXJsPg0KLQkJCTxsYXlvdXQ+cDI8L2xheW91dD4NCi0JCTwvcmVwb3NpdG9yeT4NCi0JPC9yZXBvc2l0b3JpZXM+DQotICANCi0NCi0gIDxtb2R1bGVzPg0KLSAgCTwhLS0gUGx1Z2lucyAtLT4NCi08bW9kdWxlPi4uLy4uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5sb2FkZXI8L21vZHVsZT4NCi08bW9kdWxlPi4uLy4uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlsczwvbW9kdWxlPg0KLTxtb2R1bGU+Li4vLi4vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmc8L21vZHVsZT4NCi08bW9kdWxlPi4uLy4uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlcjwvbW9kdWxlPg0KLTxtb2R1bGU+Li4vLi4vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpPC9tb2R1bGU+DQotPG1vZHVsZT4uLi8uLi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbDwvbW9kdWxlPg0KLTxtb2R1bGU+Li4vLi4vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyPC9tb2R1bGU+DQotPG1vZHVsZT4uLi8uLi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXI8L21vZHVsZT4NCi08bW9kdWxlPi4uLy4uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXI8L21vZHVsZT4NCi08bW9kdWxlPi4uLy4uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtPC9tb2R1bGU+DQotPG1vZHVsZT4uLi8uLi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyPC9tb2R1bGU+DQotPG1vZHVsZT4uLi8uLi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbjwvbW9kdWxlPg0KLTxtb2R1bGU+Li4vLi4vcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpPC9tb2R1bGU+DQotPG1vZHVsZT4uLi8uLi9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHM8L21vZHVsZT4NCi08bW9kdWxlPi4uLy4uL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5kb2N1PC9tb2R1bGU+DQotDQotDQotICAgIDwhLS0gVGVzdHMgLS0+DQotICANCi0gICAgPCEtLSBGZWF0dXJlcyAtLT4NCi0gICAgPG1vZHVsZT4uLi8uLi9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmU8L21vZHVsZT4NCi08bW9kdWxlPi4uLy4uL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGs8L21vZHVsZT4NCi0gICAgICANCi0JICANCi0gICAgPCEtLSBQMlJlcG8gLS0+DQotICAgIDxtb2R1bGU+Li4vb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlPC9tb2R1bGU+DQotDQotICA8L21vZHVsZXM+DQotICANCi0gIA0KLSAgCTxidWlsZD4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPg0KLQkJCQk8YXJ0aWZhY3RJZD50eWNoby1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+DQotCQkJCTxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQ0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotDQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnR5Y2hvLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4NCi0JCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQk8dmVyYm9zZT50cnVlPC92ZXJib3NlPg0KLQkJCQkJPHNvdXJjZT4xLjg8L3NvdXJjZT4NCi0JCQkJCTx0YXJnZXQ+MS44PC90YXJnZXQ+DQotCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQk8L3BsdWdpbj4NCi0NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+dGFyZ2V0LXBsYXRmb3JtLWNvbmZpZ3VyYXRpb248L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGRlcGVuZGVuY3ktcmVzb2x1dGlvbj4NCi0JCQkJCQk8ZXh0cmFSZXF1aXJlbWVudHM+DQotCQkJCQkJCTxyZXF1aXJlbWVudD4NCi0JCQkJCQkJCTx0eXBlPmVjbGlwc2UtcGx1Z2luPC90eXBlPg0KLQkJCQkJCQkJPGlkPm9yZy5oYW1jcmVzdDwvaWQ+DQotCQkJCQkJCQk8dmVyc2lvblJhbmdlPjAuMC4wPC92ZXJzaW9uUmFuZ2U+DQotCQkJCQkJCTwvcmVxdWlyZW1lbnQ+DQotCQkJCQkJPC9leHRyYVJlcXVpcmVtZW50cz4NCi0JCQkJCTwvZGVwZW5kZW5jeS1yZXNvbHV0aW9uPg0KLQkJCQkJPGVudmlyb25tZW50cz4NCi0JCQkJCQk8ZW52aXJvbm1lbnQ+DQotCQkJCQkJCTxvcz5saW51eDwvb3M+DQotCQkJCQkJCTx3cz5ndGs8L3dzPg0KLQkJCQkJCQk8YXJjaD54ODY8L2FyY2g+DQotCQkJCQkJPC9lbnZpcm9ubWVudD4NCi0JCQkJCQk8ZW52aXJvbm1lbnQ+DQotCQkJCQkJCTxvcz5saW51eDwvb3M+DQotCQkJCQkJCTx3cz5ndGs8L3dzPg0KLQkJCQkJCQk8YXJjaD54ODZfNjQ8L2FyY2g+DQotCQkJCQkJPC9lbnZpcm9ubWVudD4NCi0JCQkJCQk8ZW52aXJvbm1lbnQ+DQotCQkJCQkJCTxvcz53aW4zMjwvb3M+DQotCQkJCQkJCTx3cz53aW4zMjwvd3M+DQotCQkJCQkJCTxhcmNoPng4NjwvYXJjaD4NCi0JCQkJCQk8L2Vudmlyb25tZW50Pg0KLQkJCQkJCTxlbnZpcm9ubWVudD4NCi0JCQkJCQkJPG9zPndpbjMyPC9vcz4NCi0JCQkJCQkJPHdzPndpbjMyPC93cz4NCi0JCQkJCQkJPGFyY2g+eDg2XzY0PC9hcmNoPg0KLQkJCQkJCTwvZW52aXJvbm1lbnQ+DQotCQkJCQkJPGVudmlyb25tZW50Pg0KLQkJCQkJCQk8b3M+bWFjb3N4PC9vcz4NCi0JCQkJCQkJPHdzPmNvY29hPC93cz4NCi0JCQkJCQkJPGFyY2g+eDg2XzY0PC9hcmNoPg0KLQkJCQkJCTwvZW52aXJvbm1lbnQ+DQotCQkJCQk8L2Vudmlyb25tZW50cz4NCi0JCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCTwvcGx1Z2luPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPg0KLQkJCQk8YXJ0aWZhY3RJZD50eWNoby1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPCEtLSBhcmdMaW5lPiR7dHljaG8udGVzdEFyZ0xpbmV9PC9hcmdMaW5lPiAtLT4NCi0JCQkJCTxmb3JrTW9kZT5uZXZlcjwvZm9ya01vZGU+DQotCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJPGluY2x1ZGU+KiovKlRlc3QuKjwvaW5jbHVkZT4NCi0JCQkJCTwvaW5jbHVkZXM+DQotCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQk8L3BsdWdpbj4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuamFjb2NvPC9ncm91cElkPg0KLQkJCQk8YXJ0aWZhY3RJZD5qYWNvY28tbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4wLjcuNC4yMDE1MDIyNjIxMjg8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGV4Y2x1ZGVzPg0KLQ0KLQkJCQkJPC9leGNsdWRlcz4NCi0JCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQk8ZXhlY3V0aW9ucz4NCi0JCQkJCTwhLS0gUHJlcGFyZXMgdGhlIHByb3BlcnR5IHBvaW50aW5nIHRvIHRoZSBKYUNvQ28gcnVudGltZSBhZ2VudCB3aGljaA0KLQkJCQkJCWlzIHBhc3NlZCBhcyBWTSBhcmd1bWVudCB3aGVuIE1hdmVuIHRoZSBTdXJlZmlyZSBwbHVnaW4gaXMgZXhlY3V0ZWQuIC0tPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8aWQ+cHJlLXVuaXQtdGVzdDwvaWQ+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5wcmVwYXJlLWFnZW50PC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTwhLS0gU2V0cyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGljaCBjb250YWlucyB0aGUgZXhlY3V0aW9uIGRhdGEuIC0tPg0KLQkJCQkJCQk8ZGVzdEZpbGU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vY292ZXJhZ2UtcmVwb3J0cy9qYWNvY28tdXQuZXhlYzwvZGVzdEZpbGU+DQotCQkJCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQkJPC9leGVjdXRpb24+DQotCQkJCQk8IS0tIEVuc3VyZXMgdGhhdCB0aGUgY29kZSBjb3ZlcmFnZSByZXBvcnQgZm9yIHVuaXQgdGVzdHMgaXMgY3JlYXRlZA0KLQkJCQkJCWFmdGVyIHVuaXQgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gLS0+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5wb3N0LXVuaXQtdGVzdDwvaWQ+DQotCQkJCQkJPHBoYXNlPnZlcmlmeTwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5yZXBvcnQ8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPCEtLSBTZXRzIHRoZSBwYXRoIHRvIHRoZSBmaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBleGVjdXRpb24gZGF0YS4gLS0+DQotCQkJCQkJCTxkYXRhRmlsZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9jb3ZlcmFnZS1yZXBvcnRzL2phY29jby11dC5leGVjPC9kYXRhRmlsZT4NCi0JCQkJCQkJPCEtLSBTZXRzIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgY29kZSBjb3ZlcmFnZSByZXBvcnQuIC0tPg0KLQkJCQkJCQk8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5yZXBvcnRpbmcub3V0cHV0RGlyZWN0b3J5fS9qYWNvY28tdXQ8L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLSAgDQotICANCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2FydGlmYWN0cy5qYXIgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvYXJ0aWZhY3RzLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlOTJjOS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvYXJ0aWZhY3RzLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9jYXRlZ29yeS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvY2F0ZWdvcnkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDc4MGYzLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9jYXRlZ29yeS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxzaXRlPg0KLSAgIDxmZWF0dXJlIHVybD0iZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlXzEuMC4wLnF1YWxpZmllci5qYXIiIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUiIHZlcnNpb249IjEuMC4wLnF1YWxpZmllciI+DQotICAgICAgPGNhdGVnb3J5IG5hbWU9IlNDQTJBTUFMVEhFQSIvPg0KLSAgIDwvZmVhdHVyZT4NCi0gICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGtfMS4wLjAucXVhbGlmaWVyLmphciIgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGsiIHZlcnNpb249IjEuMC4wLnF1YWxpZmllciI+DQotICAgICAgPGNhdGVnb3J5IG5hbWU9IlNDQTJBTUFMVEhFQSIvPg0KLSAgIDwvZmVhdHVyZT4NCi0gICA8Y2F0ZWdvcnktZGVmIG5hbWU9IlNDQTJBTUFMVEhFQSIgbGFiZWw9IlNDQTJBTUFMVEhFQSIvPg0KLTwvc2l0ZT4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvY29udGVudC5qYXIgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvY29udGVudC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0NWE0MWQuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2NvbnRlbnQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGtfMS4wLjAuMjAxNzA4MTgxMTIwLmphciBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUuc2RrXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWVkN2MuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGtfMS4wLjAuMjAxNzA4MTgxMTIwLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmVfMS4wLjAuMjAxNzA4MTgxMTIwLmphciBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmVfMS4wLjAuMjAxNzA4MTgxMTIwLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVkMWQ5NS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDQ4OWMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlcl8xLjAuMC4yMDE3MDgxODExMjAuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXJfMS4wLjAuMjAxNzA4MTgxMTIwLmphciBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyMGY4ZjQuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXJfMS4wLjAuMjAxNzA4MTgxMTIwLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXJfMC4xLjAuMjAxNzA4MTgxMTIwLmphciBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXJfMC4xLjAuMjAxNzA4MTgxMTIwLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjM2ZmZi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyXzAuMS4wLjIwMTcwODE4MTEyMC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm1fMS4wLjAuMjAxNzA4MTgxMTIwLmphciBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bV8xLjAuMC4yMDE3MDgxODExMjAuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGIxZTgwLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bV8xLjAuMC4yMDE3MDgxODExMjAuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXJfMS4wLjAuMjAxNzA4MTgxMTIwLmphciBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODg0M2MuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXJfMS4wLjAuMjAxNzA4MTgxMTIwLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbl8xLjAuMC4yMDE3MDgxODExMjAuamFyIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNGVkZDEuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpXzEuMC4wLjIwMTcwODE4MTEyMC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYjRiZjQuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aV8xLjAuMC4yMDE3MDgxODExMjAuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlsc18xLjAuMC4yMDE3MDgxODExMjAuamFyIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlsc18xLjAuMC4yMDE3MDgxODExMjAuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWUyYjBjLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHNfMS4wLjAuMjAxNzA4MTgxMTIwLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZDc4Y2QuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGU8L2FydGlmYWN0SWQ+DQotICA8cGFja2FnaW5nPmVjbGlwc2UtcmVwb3NpdG9yeTwvcGFja2FnaW5nPg0KLSAgDQotICANCi0gIA0KLQk8cHJvcGVydGllcz4NCi0JCTxvcmcuamJvc3MudG9vbHMudHljaG8tcGx1Z2lucy52ZXJzaW9uPjAuMjIuMDwvb3JnLmpib3NzLnRvb2xzLnR5Y2hvLXBsdWdpbnMudmVyc2lvbj4NCi0JPC9wcm9wZXJ0aWVzPg0KLQkNCi0JPHBsdWdpblJlcG9zaXRvcmllcz4NCi0JCTxwbHVnaW5SZXBvc2l0b3J5Pg0KLQkJCTxpZD5qYm9zcy1wdWJsaWMtcmVwb3NpdG9yeS1ncm91cDwvaWQ+DQotCQkJPG5hbWU+SkJvc3MgUHVibGljIFJlcG9zaXRvcnkgR3JvdXA8L25hbWU+DQotCQkJPHVybD5odHRwOi8vcmVwb3NpdG9yeS5qYm9zcy5vcmcvbmV4dXMvY29udGVudC9ncm91cHMvcHVibGljLzwvdXJsPg0KLQkJPC9wbHVnaW5SZXBvc2l0b3J5Pg0KLQ0KLQkJPHBsdWdpblJlcG9zaXRvcnk+DQotCQkJPGlkPmpib3NzLXNuYXBzaG90cy1yZXBvc2l0b3J5PC9pZD4NCi0JCQk8bmFtZT5KQm9zcyBTbmFwc2hvdHMgUmVwb3NpdG9yeTwvbmFtZT4NCi0JCQk8dXJsPmh0dHBzOi8vcmVwb3NpdG9yeS5qYm9zcy5vcmcvbmV4dXMvY29udGVudC9yZXBvc2l0b3JpZXMvc25hcHNob3RzLzwvdXJsPg0KLQkJPC9wbHVnaW5SZXBvc2l0b3J5Pg0KLQk8L3BsdWdpblJlcG9zaXRvcmllcz4NCi0NCi0JPGJ1aWxkPg0KLQkJPHBsdWdpbnM+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnR5Y2hvLXAyLXJlcG9zaXRvcnktcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPg0KLQ0KLQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCTxjb21wcmVzcy8+DQotCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQk8L3BsdWdpbj4NCi0NCi0JCQkNCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuamJvc3MudG9vbHMudHljaG8tcGx1Z2luczwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+cmVwb3NpdG9yeS11dGlsczwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+JHtvcmcuamJvc3MudG9vbHMudHljaG8tcGx1Z2lucy52ZXJzaW9ufTwvdmVyc2lvbj4NCi0NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5nZW5lcmF0ZS1mYWNhZGU8L2lkPg0KLQkJCQkJCTxwaGFzZT5wYWNrYWdlPC9waGFzZT4NCi0JDQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5nZW5lcmF0ZS1yZXBvc2l0b3J5LWZhY2FkZTwvZ29hbD4NCi0JCQkJCQk8L2dvYWxzPg0KLQkNCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPHNpdGVUZW1wbGF0ZUZvbGRlcj5zaXRlVGVtcGxhdGU8L3NpdGVUZW1wbGF0ZUZvbGRlcj4NCi0JCQkJCQkJDQotCQkJCQkJCTwhLS0gU3ltYm9scyBhcmUgdXNlZCB3aGlsZSBleHBhbmRpbmcgaW5kZXguaHRtbCB0ZW1wbGF0ZSAtLT4NCi0JCQkJCQkJPHN5bWJvbHM+DQotCQkJCQkJCQk8dXBkYXRlLnNpdGUubmFtZT4ke3Byb2plY3QucGFyZW50Lm5hbWV9PC91cGRhdGUuc2l0ZS5uYW1lPg0KLQkJCQkJCQkJPHRhcmdldC5lY2xpcHNlLnZlcnNpb24+NC4zLjI8L3RhcmdldC5lY2xpcHNlLnZlcnNpb24+DQotCQkJCQkJCTwvc3ltYm9scz4NCi0NCi0JCQkJCQkJPGFzc29jaWF0ZVNpdGVzPg0KLQkJCQkJCQkJPCEtLSBzaXRlPmh0dHA6Ly9odWRzb24uZWNsaXBzZS5vcmcvaHVkc29uL2pvYi9kYW1vcy1tYXN0ZXIvbGFzdFN1Y2Nlc3NmdWxCdWlsZC9hcnRpZmFjdC91cGRhdGUtc2l0ZTwvc2l0ZT4NCi0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9tb2RlbGluZy9lbWYvZW1mL3VwZGF0ZXMvcmVsZWFzZXM8L3NpdGU+DQotCQkJCQkJCQk8c2l0ZT5odHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvbW9kZWxpbmcvZW1mL2NvbXBhcmUvdXBkYXRlcy9yZWxlYXNlczwvc2l0ZT4NCi0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9ybWYvdXBkYXRlczwvc2l0ZT4NCi0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zcGhpbngvdXBkYXRlcy9pbnRlcmltPC9zaXRlPg0KLQkJCQkJCQkJPHNpdGU+aHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL21vZGVsaW5nL3RtZi94dGV4dC91cGRhdGVzL2NvbXBvc2l0ZS9yZWxlYXNlczwvc2l0ZT4NCi0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9mcmFuY2EuZ2l0aHViLmlvL2ZyYW5jYS91cGRhdGVfc2l0ZS9yZWxlYXNlczwvc2l0ZT4NCi0JCQkJCQkJCTxzaXRlPmh0dHA6Ly91cGRhdGVzLnlha2luZHUub3JnL3NjdC9rZXBsZXIvcmVsZWFzZXM8L3NpdGU+DQotCQkJCQkJCQkNCi0JCQkJCQkJCTxzaXRlPmh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zcGhpbngvdXBkYXRlcy9pbnRlcmltPC9zaXRlLS0+DQotCQkJCQkJCTwvYXNzb2NpYXRlU2l0ZXM+DQotCQkJCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQkJPC9leGVjdXRpb24+DQotCQkJCTwvZXhlY3V0aW9ucz4NCi0JCQk8L3BsdWdpbj4NCi0JCTwvcGx1Z2lucz4NCi0JPC9idWlsZD4NCi0NCi08L3Byb2plY3Q+DQotICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvc2l0ZS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvc2l0ZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZmViODIuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3NpdGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08c2l0ZT4NCi0gICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZV8xLjAuMC4yMDE3MDgxODExMjAuamFyIiBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlIiB2ZXJzaW9uPSIxLjAuMC4yMDE3MDgxODExMjAiPg0KLSAgICAgIDxjYXRlZ29yeSBuYW1lPSJzY2EyYW1hbHRoZWEgUnVudGltZSIvPg0KLSAgIDwvZmVhdHVyZT4NCi0gICA8ZmVhdHVyZSB1cmw9ImZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGtfMS4wLjAuMjAxNzA4MTgxMTIwLmphciIgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGsiIHZlcnNpb249IjEuMC4wLjIwMTcwODE4MTEyMCI+DQotICAgICAgPGNhdGVnb3J5IG5hbWU9InNjYTJhbWFsdGhlYSBzZGsiLz4NCi0gICA8L2ZlYXR1cmU+DQotICAgPGNhdGVnb3J5LWRlZiBuYW1lPSJzY2EyYW1hbHRoZWEgUnVudGltZSIgbGFiZWw9InNjYTJhbWFsdGhlYSBSdW50aW1lIi8+DQotICAgPGNhdGVnb3J5LWRlZiBuYW1lPSJzY2EyYW1hbHRoZWEgc2RrIiBsYWJlbD0ic2NhMmFtYWx0aGVhIHNkayIvPg0KLTwvc2l0ZT4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvc2l0ZVRlbXBsYXRlL2luZGV4Lmh0bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvc2l0ZVRlbXBsYXRlL2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiMzM2M2QuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3NpdGVUZW1wbGF0ZS9pbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPGh0bWw+DQotCTxoZWFkPg0KLQkJPHRpdGxlPiR7dXBkYXRlLnNpdGUubmFtZX0gVXBkYXRlIFNpdGU8L3RpdGxlPg0KLQk8L2hlYWQ+DQotDQotCTxib2R5IG1hcmdpbmhlaWdodD0iMCIgbWFyZ2lud2lkdGg9IjAiIGxlZnRtYXJnaW49IjAiIHRvcG1hcmdpbj0iMCI+DQotCQkNCi0JCTxoMiBjbGFzcz0idGl0bGUiPiR7dXBkYXRlLnNpdGUubmFtZX0gLSBVc2UgdGhpcyBVUkwgaW4gRWNsaXBzZSB0byBpbnN0YWxsICR7dXBkYXRlLnNpdGUubmFtZX08L2gyPg0KLQkNCi0JCTxwPlRoaXMgaXMgdGhlIFVwZGF0ZSBTaXRlIGZvciAke3VwZGF0ZS5zaXRlLm5hbWV9Lg0KLQkJCTxvbD4NCi0JCQkJPGxpPlRvIGluc3RhbGwgJHt1cGRhdGUuc2l0ZS5uYW1lfSBmcm9tIHRoaXMgc2l0ZSwgc3RhcnQgdXAgRWNsaXBzZSAke3RhcmdldC5lY2xpcHNlLnZlcnNpb259LCB0aGVuIGRvOg0KLQkJCQkJPHVsPjxjb2RlPjxzdHJvbmc+SGVscCA+IEluc3RhbGwgTmV3IFNvZnR3YXJlLi4uID48L3N0cm9uZz48L2NvZGU+PC91bD4NCi0JCQkJPC9saT4NCi0JCQkJPGxpPkNvcHkgdGhpcyBzaXRlJ3MgVVJMIGludG8gRWNsaXBzZSwgYW5kIGhpdCBFbnRlci48L2xpPg0KLQkJCQk8bGk+V2hlbiB0aGUgc2l0ZSBsb2Fkcywgc2VsZWN0IHRoZSBmZWF0dXJlcyB0byBpbnN0YWxsLCBvciBjbGljayB0aGUgPGNvZGU+PHN0cm9uZz5TZWxlY3QgQWxsPC9zdHJvbmc+PC9jb2RlPiBidXR0b24uPC9saT4NCi0JCQkJPGxpPlRvIHByb3Blcmx5IHJlc29sdmUgYWxsIGRlcGVuZGVuY2llcywgY2hlY2sgDQotCQkJCQk8dWw+PGNvZGU+PHN0cm9uZz5beF0gQ29udGFjdCBhbGwgdXBkYXRlIHNpdGVzIGR1cmluZyBpbnN0YWxsIHRvIGZpbmQgcmVxdWlyZWQgc29mdHdhcmU8L3N0cm9uZz48L2NvZGU+PC91bD4NCi0JCQkJPGxpPkNsaWNrIDxjb2RlPjxzdHJvbmc+TmV4dDwvc3Ryb25nPjwvY29kZT4sIGFncmVlIHRvIHRoZSBsaWNlbnNlIHRlcm1zLCBhbmQgaW5zdGFsbC48L2xpPg0KLQkJCTwvb2w+DQotCQk8L3A+DQotDQotCQk8cD4ke3NpdGUuY29udGVudHN9PC9wPg0KLQk8L2JvZHk+DQotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL3JlYWRtZS50eHQgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2I5ZjU2Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1QbGFjZSBvbmx5IGJ1aWxkIHJlbGF0ZWQgcHJvamVjdHMgaGVyZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUuc2RrLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUuc2RrLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4M2QyMjIuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlLnNkay8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL3RhcmdldC8KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGsvZmVhdHVyZS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUuc2RrL2ZlYXR1cmUueG1sCmluZGV4IDlmODIxMjcuLjYwNmM2NDYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGsvZmVhdHVyZS54bWwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlLnNkay9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlDQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGsiDQogICAgICAgbGFiZWw9IlNDQTJBTUFMVEhFQSBTREsiDQotICAgICAgdmVyc2lvbj0iMS4wLjAucXVhbGlmaWVyIg0KKyAgICAgIHZlcnNpb249IjAuOS43LnF1YWxpZmllciINCiAgICAgICBwcm92aWRlci1uYW1lPSJFY2xpcHNlLm9yZyI+DQogDQogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9kZXNjcmlwdGlvbiI+DQpAQCAtMTcsMTMzICsxNywxMDkgQEAKICAgICAgIFtFbnRlciBMaWNlbnNlIERlc2NyaXB0aW9uIGhlcmUuXQ0KICAgIDwvbGljZW5zZT4NCiANCi0gICA8cmVxdWlyZXM+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZSIvPg0KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZyIvPg0KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5lY29yZS54bWkiIHZlcnNpb249IjIuMTAuMiIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnVpIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5jb21tb24iIHZlcnNpb249IjIuMTAuMSIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVhc2UiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLnNwaGlueCIvPg0KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscyIvPg0KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVxdWlub3gucmVnaXN0cnkiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamZhY2UiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscyIgdmVyc2lvbj0iMS4wLjAiIG1hdGNoPSJncmVhdGVyT3JFcXVhbCIvPg0KLSAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwiIHZlcnNpb249IjEuMC4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4NCi0gICA8L3JlcXVpcmVzPg0KKyAgIDxpbmNsdWRlcw0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUiDQorICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4NCiANCiAgICA8cGx1Z2luDQotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIiDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIuc291cmNlIg0KICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQogICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KICAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyIg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlciINCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIuc291cmNlIg0KICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQogICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KICAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KICAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCiANCiAgICA8cGx1Z2luDQotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bSINCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNjYWlybW9kZWxlbnJpY2hlciINCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIuc291cmNlIg0KICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQogICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KICAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KICAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCiANCiAgICA8cGx1Z2luDQotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbiINCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzIg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpIg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlciINCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5sb2FkZXIuc291cmNlIg0KICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQogICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KICAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KICAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCiANCiAgICA8cGx1Z2luDQotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMiDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMuc291cmNlIg0KICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQogICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KICAgICAgICAgIHZlcnNpb249IjAuMC4wIg0KICAgICAgICAgIHVucGFjaz0iZmFsc2UiLz4NCiANCiAgICA8cGx1Z2luDQotICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZyINCisgICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyIg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpIg0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnNvdXJjZSINCiAgICAgICAgICBkb3dubG9hZC1zaXplPSIwIg0KICAgICAgICAgIGluc3RhbGwtc2l6ZT0iMCINCiAgICAgICAgICB2ZXJzaW9uPSIwLjAuMCINCiAgICAgICAgICB1bnBhY2s9ImZhbHNlIi8+DQogDQogICAgPHBsdWdpbg0KLSAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwiDQorICAgICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC5zb3VyY2UiDQogICAgICAgICAgZG93bmxvYWQtc2l6ZT0iMCINCiAgICAgICAgICBpbnN0YWxsLXNpemU9IjAiDQogICAgICAgICAgdmVyc2lvbj0iMC4wLjAiDQogICAgICAgICAgdW5wYWNrPSJmYWxzZSIvPg0KIA0KICAgIDxwbHVnaW4NCi0gICAgICAgICBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5kb2N1Ig0KKyAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmRvY3Uuc291cmNlIg0KICAgICAgICAgIGRvd25sb2FkLXNpemU9IjAiDQogICAgICAgICAgaW5zdGFsbC1zaXplPSIwIg0KICAgICAgICAgIHZlcnNpb249IjAuMC4wIi8+DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlLnNkay9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlLnNkay9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhN2M2NWYwLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS5zZGsvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCINCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+DQotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICA8cGFyZW50Pg0KLSAgICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L2FydGlmYWN0SWQ+DQotICAgIDx2ZXJzaW9uPjEuMC4wLnF1YWxpZmllcjwvdmVyc2lvbj4NCi0gICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9yZWxhdGl2ZVBhdGg+DQotICA8L3BhcmVudD4NCi0gICAgICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUuc2RrPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLWZlYXR1cmU8L3BhY2thZ2luZz4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgzZDIyMi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggM2NiNTk2Ny4uYWQ2NTJlZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvZmVhdHVyZXMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlDQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZSINCiAgICAgICBsYWJlbD0iU0NBMkFNQUxUSEVBIFJ1bnRpbWUiDQotICAgICAgdmVyc2lvbj0iMS4wLjAucXVhbGlmaWVyIg0KKyAgICAgIHZlcnNpb249IjAuOS44LnF1YWxpZmllciINCiAgICAgICBwcm92aWRlci1uYW1lPSJFY2xpcHNlLm9yZyI+DQogDQogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9kZXNjcmlwdGlvbiI+DQpAQCAtMjMsNyArMjMsNiBAQAogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzIi8+DQogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZyIvPg0KICAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5lbWYuZWNvcmUiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+DQogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLnNwaGlueC5lbWYiLz4NCiAgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliIi8+DQogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyIi8+DQpAQCAtMzIsOCArMzEsNiBAQAogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVtZi5jb21tb24iIHZlcnNpb249IjIuMTAuMSIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+DQogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmNvcmUuY29tbWFuZHMiLz4NCiAgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UudWkud29ya2JlbmNoIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmVhc2UiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLnNwaGlueCIvPg0KICAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwiLz4NCiAgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscyIvPg0KICAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyIi8+DQpAQCAtNDEsOCArMzgsNyBAQAogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpmYWNlIi8+DQogICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbCIvPg0KICAgICAgIDxpbXBvcnQgcGx1Z2luPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpIi8+DQotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMiIHZlcnNpb249IjEuMC4wIiBtYXRjaD0iZ3JlYXRlck9yRXF1YWwiLz4NCi0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsIiB2ZXJzaW9uPSIxLjAuMCIgbWF0Y2g9ImdyZWF0ZXJPckVxdWFsIi8+DQorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMiLz4NCiAgICA8L3JlcXVpcmVzPg0KIA0KICAgIDxwbHVnaW4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9mZWF0dXJlcy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmUvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmNjZTUxLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2ZlYXR1cmVzL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIg0KLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4NCi0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gIDxwYXJlbnQ+DQotICAgIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvYXJ0aWZhY3RJZD4NCi0gICAgPHZlcnNpb24+MS4wLjAucXVhbGlmaWVyPC92ZXJzaW9uPg0KLSAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L3JlbGF0aXZlUGF0aD4NCi0gIDwvcGFyZW50Pg0KLSAgICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmZlYXR1cmU8L2FydGlmYWN0SWQ+DQotICA8cGFja2FnaW5nPmVjbGlwc2UtZmVhdHVyZTwvcGFja2FnaW5nPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDY0MzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlci8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL3RhcmdldC8NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlci9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBlODZmYTZjLi43OTg3NjgxIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5sb2FkZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsMTQgKzIsMTQgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiBBbWFsdGhlYSBMb2FkZXIKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMC45LjgucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKICBvcmcuZWNsaXBzZS5zcGhpbnguZW1mLAotIG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5zcGhpbngsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZwogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5sb2FkZXIsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5zZXJpYWxpemVyCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL2Jpbi8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlci9iaW4vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZGIyZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL2Jpbi8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL29yZy8KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5sb2FkZXIvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5sb2FkZXIvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRlMTBkNS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlcjwvYXJ0aWZhY3RJZD4NCi0gIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4NCi0gIA0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL2xvYWRlci9BTUFMVEhFQVJlc291cmNlTG9hZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL2xvYWRlci9BTUFMVEhFQVJlc291cmNlTG9hZGVyLmphdmEKaW5kZXggNDBhNDliNy4uNzQwZDY5YiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9sb2FkZXIvQU1BTFRIRUFSZXNvdXJjZUxvYWRlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbG9hZGVyL0FNQUxUSEVBUmVzb3VyY2VMb2FkZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9zZXJpYWxpemVyL0FNQUxUSEVBUmVzb3VyY2VTZXJpYWxpemVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL3NlcmlhbGl6ZXIvQU1BTFRIRUFSZXNvdXJjZVNlcmlhbGl6ZXIuamF2YQppbmRleCBkNzQ2YmZiLi4yMTM2NDE4IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL3NlcmlhbGl6ZXIvQU1BTFRIRUFSZXNvdXJjZVNlcmlhbGl6ZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL3NlcmlhbGl6ZXIvQU1BTFRIRUFSZXNvdXJjZVNlcmlhbGl6ZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGZiYTgwNjUuLmMxOTk5MjUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsMTQgKzIsMTQgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiBTQ0EyQU1BTFRIRUEgTW9kZWwgRXhwb3J0ZXIgVXRpbAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscwotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDAuOS44LnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKICBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlciwKICBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcsCi0gb3JnLmVjbGlwc2UueHRleHQueGJhc2UsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsCiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy5oZWxwZXIsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy5tYW5pcHVsYXRvcgorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvYmluLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvYmluLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMWRiMmUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL2Jpbi8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL29yZy8KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyM2Q4NjkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLQ0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4NCi0NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvQWN0aXZhdG9yLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvQWN0aXZhdG9yLmphdmEKaW5kZXggN2RjYmI1NC4uZmNmMmQzMiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL0FjdGl2YXRvci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9tb2RlbC91dGlscy9BY3RpdmF0b3IuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL2hlbHBlci9DdXN0b21Qcm9wZXJ0aWVzVXRpbC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL2hlbHBlci9DdXN0b21Qcm9wZXJ0aWVzVXRpbC5qYXZhCmluZGV4IDVmOTM2MzkuLmYyZjc3YTUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9tb2RlbC91dGlscy9oZWxwZXIvQ3VzdG9tUHJvcGVydGllc1V0aWwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvaGVscGVyL0N1c3RvbVByb3BlcnRpZXNVdGlsLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9tb2RlbC91dGlscy9oZWxwZXIvTW9kZWxBY2Nlc3MuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9tb2RlbC91dGlscy9oZWxwZXIvTW9kZWxBY2Nlc3MuamF2YQppbmRleCAxNzlkZmFhLi5lMjIwMzc2IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvaGVscGVyL01vZGVsQWNjZXNzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL2hlbHBlci9Nb2RlbEFjY2Vzcy5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCkBAIC0xNywxNSArMTcsMTQgQEAKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsNCiBpbXBvcnQgamF2YS51dGlsLlNldDsNCiANCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFjdGl2aXR5R3JhcGhJdGVtOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5DYWxsU2VxdWVuY2U7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5DYWxsU2VxdWVuY2VJdGVtOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuR3JhcGhFbnRyeUJhc2U7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5Hcm91cDsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLklTUjsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlByb2Nlc3M7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlJ1bm5hYmxlQ2FsbDsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2s7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrUnVubmFibGVDYWxsOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuRUxpc3Q7DQogDQogLyoqDQpAQCAtNTcsMTQgKzU2LDE1IEBACiAgICAqLw0KICAgcHVibGljIHN0YXRpYyBTZXQ8UnVubmFibGU+IGdldFJ1bm5hYmxlc0Zyb21UYXNrKGZpbmFsIFByb2Nlc3MgcHJvY2Vzcykgew0KICAgICBTZXQ8UnVubmFibGU+IGNhbGxlZFJ1bm5hYmxlcyA9IG5ldyBIYXNoU2V0PD4oKTsNCi0gICAgZm9yIChHcmFwaEVudHJ5QmFzZSBlbnRyeSA6IHByb2Nlc3MuZ2V0Q2FsbEdyYXBoKCkuZ2V0R3JhcGhFbnRyaWVzKCkpIHsNCi0gICAgICBpZiAoIShlbnRyeSBpbnN0YW5jZW9mIENhbGxTZXF1ZW5jZSkpIHsNCisgICAgZm9yIChBY3Rpdml0eUdyYXBoSXRlbSBhY3Rpdml0eUdyYXBoSXRlbSA6IHByb2Nlc3MuZ2V0QWN0aXZpdHlHcmFwaCgpLmdldEl0ZW1zKCkpIHsNCisgICAgICBpZiAoIShhY3Rpdml0eUdyYXBoSXRlbSBpbnN0YW5jZW9mIEdyb3VwKSkgew0KICAgICAgICAgY29udGludWU7DQogICAgICAgfQ0KLSAgICAgIGZvciAoQ2FsbFNlcXVlbmNlSXRlbSBpdGVtIDogKChDYWxsU2VxdWVuY2UpIGVudHJ5KS5nZXRDYWxscygpKSB7DQotICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIFRhc2tSdW5uYWJsZUNhbGwpIHsNCi0gICAgICAgICAgY2FsbGVkUnVubmFibGVzLmFkZCgoKFRhc2tSdW5uYWJsZUNhbGwpIGl0ZW0pLmdldFJ1bm5hYmxlKCkpOw0KLSAgICAgICAgfQ0KKyAgICAgIGZvciAoQWN0aXZpdHlHcmFwaEl0ZW0gZ3JvdXBJdGVtIDogKChHcm91cCkgYWN0aXZpdHlHcmFwaEl0ZW0pLmdldEl0ZW1zKCkpIHsNCisgICAgCSAgaWYoZ3JvdXBJdGVtIGluc3RhbmNlb2YgUnVubmFibGVDYWxsKSB7DQorICAgIAkJICBSdW5uYWJsZUNhbGwgcmM9KFJ1bm5hYmxlQ2FsbClncm91cEl0ZW07DQorICAgIAkJICBjYWxsZWRSdW5uYWJsZXMuYWRkKHJjLmdldFJ1bm5hYmxlKCkpOw0KKyAgICAJICB9DQogICAgICAgfQ0KICAgICB9DQogICAgIHJldHVybiBjYWxsZWRSdW5uYWJsZXM7DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL21hbmlwdWxhdG9yL0Z1bmN0aW9uUG9pbnRlclJ1bm5hYmxlQ29udmVydGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvbWFuaXB1bGF0b3IvRnVuY3Rpb25Qb2ludGVyUnVubmFibGVDb252ZXJ0ZXIuamF2YQppbmRleCAxMmUzMWVlLi41ZGVjYTI0IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvbWFuaXB1bGF0b3IvRnVuY3Rpb25Qb2ludGVyUnVubmFibGVDb252ZXJ0ZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvbWFuaXB1bGF0b3IvRnVuY3Rpb25Qb2ludGVyUnVubmFibGVDb252ZXJ0ZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpAQCAtMTcsMTMgKzE3LDEzIEBACiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7DQogaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOw0KIA0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQWN0aXZpdHlHcmFwaEl0ZW07DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BbWFsdGhlYTsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhRmFjdG9yeTsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkxhYmVsQWNjZXNzOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuTGFiZWxBY2Nlc3NFbnVtOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUnVubmFibGU7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZUNhbGw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZUl0ZW07DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5TdHJpbmdPYmplY3Q7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMuQWN0aXZhdG9yOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzLmhlbHBlci5DdXN0b21Qcm9wZXJ0aWVzVXRpbDsNCkBAIC01MSwxMSArNTEsMTAgQEAKICAgICBFTGlzdDxSdW5uYWJsZT4gcnVubmFibGVzID0gYW1hbHRoZWFNb2RlbC5nZXRTd01vZGVsKCkuZ2V0UnVubmFibGVzKCk7DQogICAgIHRyeSB7DQogICAgICAgZm9yIChSdW5uYWJsZSBydW5uYWJsZSA6IHJ1bm5hYmxlcykgew0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJ1bm5hYmxlLmdldE5hbWUoKSk7DQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJ1bm5hYmxlLmdldFJ1bm5hYmxlSXRlbXMoKS5zaXplKCk7IGkrKykgew0KLSAgICAgICAgICBSdW5uYWJsZUl0ZW0gaXRlbSA9IHJ1bm5hYmxlLmdldFJ1bm5hYmxlSXRlbXMoKS5nZXQoaSk7DQotICAgICAgICAgIGlmICgoaXRlbSAhPSBudWxsKSAmJiAoaXRlbSBpbnN0YW5jZW9mIExhYmVsQWNjZXNzKSkgew0KLSAgICAgICAgICAgIExhYmVsQWNjZXNzIGxhYmVsQWNjZXNzID0gKExhYmVsQWNjZXNzKSBpdGVtOw0KKyAgICAgICAgCUFjdGl2aXR5R3JhcGhJdGVtIGFjdGl2aXR5R3JhcGhJdGVtID0gcnVubmFibGUuZ2V0UnVubmFibGVJdGVtcygpLmdldChpKTsNCisgICAgICAgICAgaWYgKChhY3Rpdml0eUdyYXBoSXRlbSAhPSBudWxsKSAmJiAoYWN0aXZpdHlHcmFwaEl0ZW0gaW5zdGFuY2VvZiBMYWJlbEFjY2VzcykpIHsNCisgICAgICAgICAgICBMYWJlbEFjY2VzcyBsYWJlbEFjY2VzcyA9IChMYWJlbEFjY2VzcykgYWN0aXZpdHlHcmFwaEl0ZW07DQogICAgICAgICAgICAgaWYgKGxhYmVsQWNjZXNzLmdldERhdGEoKSAhPSBudWxsKSB7DQogICAgICAgICAgICAgICBNYXRjaGVyIG1hdGNoZXIgPSBwYXR0ZXJuLm1hdGNoZXIobGFiZWxBY2Nlc3MuZ2V0RGF0YSgpLmdldE5hbWUoKSk7DQogICAgICAgICAgICAgICBpZiAoKGxhYmVsQWNjZXNzLmdldEFjY2VzcygpID09IExhYmVsQWNjZXNzRW51bS5SRUFEKSAmJiBtYXRjaGVyLm1hdGNoZXMoKSkgew0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9tb2RlbC91dGlscy9tYW5pcHVsYXRvci9JTW9kZWxNYW5pcHVsYXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL21hbmlwdWxhdG9yL0lNb2RlbE1hbmlwdWxhdG9yLmphdmEKaW5kZXggNTU5NmVlMi4uMzUyM2M1ZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL21hbmlwdWxhdG9yL0lNb2RlbE1hbmlwdWxhdG9yLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL21hbmlwdWxhdG9yL0lNb2RlbE1hbmlwdWxhdG9yLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9tb2RlbC91dGlscy9tYW5pcHVsYXRvci9TdHJ1Y3RNZW1iZXJSZW1vdmVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvYW1hbHRoZWEvbW9kZWwvdXRpbHMvbWFuaXB1bGF0b3IvU3RydWN0TWVtYmVyUmVtb3Zlci5qYXZhCmluZGV4IDE3MThhMGIuLjQ0NDkzOWUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9hbWFsdGhlYS9tb2RlbC91dGlscy9tYW5pcHVsYXRvci9TdHJ1Y3RNZW1iZXJSZW1vdmVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2FtYWx0aGVhL21vZGVsL3V0aWxzL21hbmlwdWxhdG9yL1N0cnVjdE1lbWJlclJlbW92ZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpAQCAtMTQsMTIgKzE0LDEyIEBACiAgKi8NCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHMubWFuaXB1bGF0b3I7DQogDQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BY3Rpdml0eUdyYXBoSXRlbTsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQ29tcG9uZW50Ow0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuTGFiZWw7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5MYWJlbEFjY2VzczsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlJ1bm5hYmxlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUnVubmFibGVJdGVtOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlci5BTUFMVEhFQVJlc291cmNlTG9hZGVyOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLm1vZGVsLnV0aWxzLkFjdGl2YXRvcjsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nLnV0aWwuU0NBTG9nQ29uc3RhbnRzOw0KQEAgLTM0LDggKzM0LDggQEAKICAqLw0KIHB1YmxpYyBjbGFzcyBTdHJ1Y3RNZW1iZXJSZW1vdmVyIGltcGxlbWVudHMgSU1vZGVsTWFuaXB1bGF0b3Igew0KIA0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRlVOQ1RJT05fU1RBVElDX1ZBUklBQkxFU19NQVJLRVIgPSAiUExBVDRNQ19GUyI7DQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBGSUxFX1NUQVRJQ19WQVJJQUJMRVNfTUFSS0VSID0gIlBMQVQ0TUNfQ1MiOw0KKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRlVOQ1RJT05fU1RBVElDX1ZBUklBQkxFU19NQVJLRVIgPSAiQVBQNE1DX0ZTIjsNCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfU1RBVElDX1ZBUklBQkxFU19NQVJLRVIgPSAiQVBQNE1DX0NTIjsNCiANCiAgIHByaXZhdGUgQW1hbHRoZWEgYW1hbHRoZWFNb2RlbDsNCiAgIHByaXZhdGUgU3RyaW5nIGluRmlsZTsNCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogICAgIEVMaXN0PFJ1bm5hYmxlPiBydW5uYWJsZXMgPSBhbWFsdGhlYU1vZGVsLmdldFN3TW9kZWwoKS5nZXRSdW5uYWJsZXMoKTsNCiAgICAgdHJ5IHsNCiAgICAgICBmb3IgKFJ1bm5hYmxlIHJ1bm5hYmxlIDogcnVubmFibGVzKSB7DQotICAgICAgICBFTGlzdDxSdW5uYWJsZUl0ZW0+IHJ1bm5hYmxlSXRlbUxpc3QgPSBydW5uYWJsZS5nZXRSdW5uYWJsZUl0ZW1zKCk7DQotICAgICAgICBpZiAoKHJ1bm5hYmxlSXRlbUxpc3QgIT0gbnVsbCkgJiYgIXJ1bm5hYmxlSXRlbUxpc3QuaXNFbXB0eSgpKSB7DQotICAgICAgICAgIGZvciAoUnVubmFibGVJdGVtIHJ1bm5hYmxlSXRlbSA6IHJ1bm5hYmxlSXRlbUxpc3QpIHsNCi0gICAgICAgICAgICBpZiAocnVubmFibGVJdGVtIGluc3RhbmNlb2YgTGFiZWxBY2Nlc3MpIHsNCi0gICAgICAgICAgICAgIExhYmVsQWNjZXNzIGxhYmVsQWNjZXNzID0gKExhYmVsQWNjZXNzKSBydW5uYWJsZUl0ZW07DQorICAgICAgICBFTGlzdDxBY3Rpdml0eUdyYXBoSXRlbT4gYWN0aXZpdHlHcmFwaEl0ZW1MaXN0ID0gcnVubmFibGUuZ2V0UnVubmFibGVJdGVtcygpOw0KKyAgICAgICAgaWYgKChhY3Rpdml0eUdyYXBoSXRlbUxpc3QgIT0gbnVsbCkgJiYgIWFjdGl2aXR5R3JhcGhJdGVtTGlzdC5pc0VtcHR5KCkpIHsNCisgICAgICAgICAgZm9yIChBY3Rpdml0eUdyYXBoSXRlbSBhY3Rpdml0eUdyYXBoSXRlbSA6IGFjdGl2aXR5R3JhcGhJdGVtTGlzdCkgew0KKyAgICAgICAgICAgIGlmIChhY3Rpdml0eUdyYXBoSXRlbSBpbnN0YW5jZW9mIExhYmVsQWNjZXNzKSB7DQorICAgICAgICAgICAgICBMYWJlbEFjY2VzcyBsYWJlbEFjY2VzcyA9IChMYWJlbEFjY2VzcykgYWN0aXZpdHlHcmFwaEl0ZW07DQogICAgICAgICAgICAgICBTdHJpbmcgbGFiZWxOYW1lID0gbGFiZWxBY2Nlc3MuZ2V0RGF0YSgpLmdldE5hbWUoKTsNCiAgICAgICAgICAgICAgIGlmIChjb250YWluc1N0cnVjdE1lbWJlcihsYWJlbE5hbWUpKSB7DQogICAgICAgICAgICAgICAgIFN0cmluZyBtYWluTGFiZWxOYW1lID0gcmVtb3ZlTWVtYmVySW5mb3JtYXRpb24obGFiZWxOYW1lKTsNCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL3RhcmdldC8NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGVlMjdmZjYuLjcwOTllNGUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDcgKzIsNyBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgogQnVuZGxlLU5hbWU6IExvZ2dpbmcKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZztzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAwLjkuOC5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZSwKQEAgLTIyLDMgKzIyLDQgQEAKICBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcubm90aWZpY2F0aW9uLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy51dGlsCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL2Jpbi8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvYmluLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMWRiMmUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvYmluLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vb3JnLwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvYnVpbGQucHJvcGVydGllcyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL2J1aWxkLnByb3BlcnRpZXMKaW5kZXggOGExODNkNi4uNTFhYzIzMiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvYnVpbGQucHJvcGVydGllcworKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9idWlsZC5wcm9wZXJ0aWVzCkBAIC04LDUgKzgsNCBAQAogICAgICAgICAgICAgICAgYnVpbGQucHJvcGVydGllcw0KIHNyYy5pbmNsdWRlcyA9IGVwbC0yLjAuaHRtbCxcDQogICAgICAgICAgICAgICAgbG9nZ2VyLnByb3BlcnRpZXMsXA0KLSAgICAgICAgICAgICAgIGJ1aWxkLnByb3BlcnRpZXMsXA0KICAgICAgICAgICAgICAgIGNtZGxvZ2dlci5wcm9wZXJ0aWVzDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZWZjNzMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCINCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+DQotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICA8cGFyZW50Pg0KLSAgICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L2FydGlmYWN0SWQ+DQotICAgIDx2ZXJzaW9uPjEuMC4wLnF1YWxpZmllcjwvdmVyc2lvbj4NCi0gICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9yZWxhdGl2ZVBhdGg+DQotICA8L3BhcmVudD4NCi0gIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZzwvYXJ0aWZhY3RJZD4NCi0gIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4NCi0NCi0NCi0JPGJ1aWxkPg0KLQkJPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4NCi0JCTxyZXNvdXJjZXM+DQotCQkJPHJlc291cmNlPg0KLQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQk8ZXhjbHVkZXM+DQotCQkJCQk8ZXhjbHVkZT4qKi8qLmphdmE8L2V4Y2x1ZGU+DQotCQkJCTwvZXhjbHVkZXM+DQotCQkJPC9yZXNvdXJjZT4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+c3JjPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJPC9yZXNvdXJjZXM+DQotCQk8cGx1Z2lucz4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8YXJ0aWZhY3RJZD5tYXZlbi1jbGVhbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjIuNC4xPC92ZXJzaW9uPg0KLQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCTxmaWxlc2V0cz4NCi0JCQkJCQk8ZmlsZXNldD4NCi0JCQkJCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4NCi0JCQkJCQkJPGluY2x1ZGVzPg0KLQkJCQkJCQkJPGluY2x1ZGU+Kio8L2luY2x1ZGU+DQotCQkJCQkJCTwvaW5jbHVkZXM+DQotCQkJCQkJPC9maWxlc2V0Pg0KLQkJCQkJPC9maWxlc2V0cz4NCi0JCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCTwvcGx1Z2luPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPg0KLQkJCQk8YXJ0aWZhY3RJZD5idWlsZC1oZWxwZXItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4xLjc8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8aWQ+YWRkLXNvdXJjZTwvaWQ+DQotCQkJCQkJPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPg0KLQkJCQkJCTxnb2Fscz4NCi0JCQkJCQkJPGdvYWw+YWRkLXNvdXJjZTwvZ29hbD4NCi0JCQkJCQk8L2dvYWxzPg0KLQkJCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJCQk8c291cmNlcz4NCi0JCQkJCQkJCTxzb3VyY2U+eHRlbmQtZ2VuPC9zb3VyY2U+DQotCQkJCQkJCTwvc291cmNlcz4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnh0ZW5kPC9ncm91cElkPg0KLQkJCQk8YXJ0aWZhY3RJZD54dGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjIuNy4zPC92ZXJzaW9uPg0KLQkJCQk8ZXhlY3V0aW9ucz4NCi0JCQkJCTxleGVjdXRpb24+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5jb21waWxlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxvdXRwdXREaXJlY3Rvcnk+eHRlbmQtZ2VuPC9vdXRwdXREaXJlY3Rvcnk+DQotCQkJCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQkJPC9leGVjdXRpb24+DQotCQkJCTwvZXhlY3V0aW9ucz4NCi0JCQk8L3BsdWdpbj4NCi0JCTwvcGx1Z2lucz4NCi0JPC9idWlsZD4NCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9jb25zb2xlL2xvZ2dlcnMvQ29tbWFuZExpbmVMb2dnZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvY29uc29sZS9sb2dnZXJzL0NvbW1hbmRMaW5lTG9nZ2VyLmphdmEKaW5kZXggZTJiNDdmOC4uODc3M2QxZCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9jb25zb2xlL2xvZ2dlcnMvQ29tbWFuZExpbmVMb2dnZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL2NvbnNvbGUvbG9nZ2Vycy9Db21tYW5kTGluZUxvZ2dlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL2V4Y2VwdGlvbi9BcHA0bWNMb2dnZXJFeGNlcHRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvZXhjZXB0aW9uL0FwcDRtY0xvZ2dlckV4Y2VwdGlvbi5qYXZhCmluZGV4IDU4OTliMTEuLjdkMDNmYjYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvZXhjZXB0aW9uL0FwcDRtY0xvZ2dlckV4Y2VwdGlvbi5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvZXhjZXB0aW9uL0FwcDRtY0xvZ2dlckV4Y2VwdGlvbi5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL2ltcGwvQ29sbGVjdGl2ZUxvZ2dlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0NvbGxlY3RpdmVMb2dnZXIuamF2YQppbmRleCBjNzUwNTc4Li44OTcxNTcyIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL2ltcGwvQ29sbGVjdGl2ZUxvZ2dlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvaW1wbC9Db2xsZWN0aXZlTG9nZ2VyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvaW1wbC9JQ29uZmlndXJhdGlvbi5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lDb25maWd1cmF0aW9uLmphdmEKaW5kZXggMmI3ODcwNC4uMzg1M2Q4MiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lDb25maWd1cmF0aW9uLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lDb25maWd1cmF0aW9uLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvaW1wbC9JQ29uc29sZUxvZ2dlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lDb25zb2xlTG9nZ2VyLmphdmEKaW5kZXggNmZiMmJkOC4uMDFiYmFhNCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lDb25zb2xlTG9nZ2VyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lDb25zb2xlTG9nZ2VyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvaW1wbC9JRXh0ZXJuYWxMb2dnZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvaW1wbC9JRXh0ZXJuYWxMb2dnZXIuamF2YQppbmRleCA4Yjk5ZjRkLi40MmUzOGMxIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL2ltcGwvSUV4dGVybmFsTG9nZ2VyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lFeHRlcm5hbExvZ2dlci5qYXZhCkBAIC05LDcgKzksNyBAQAogDQogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL2ltcGwvSUxvZ2dlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lMb2dnZXIuamF2YQppbmRleCA2ODhkOGZhLi42YTIxMTk1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL2ltcGwvSUxvZ2dlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvaW1wbC9JTG9nZ2VyLmphdmEKQEAgLTUsNyArNSw3IEBACiANCiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvaW1wbC9JVGV4dExvZ2dlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lUZXh0TG9nZ2VyLmphdmEKaW5kZXggZTczOGQ0My4uNjc1ZjU0ZSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lUZXh0TG9nZ2VyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9pbXBsL0lUZXh0TG9nZ2VyLmphdmEKQEAgLTUsNyArNSw3IEBACiANCiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbG9nZ2Vycy9UZXh0RmlsZUxvZ2dlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9sb2dnZXJzL1RleHRGaWxlTG9nZ2VyLmphdmEKaW5kZXggZWM2MjljMi4uMWFmNjYyNSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9sb2dnZXJzL1RleHRGaWxlTG9nZ2VyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9sb2dnZXJzL1RleHRGaWxlTG9nZ2VyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbWFuYWdlci9Mb2dGYWN0b3J5LmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL21hbmFnZXIvTG9nRmFjdG9yeS5qYXZhCmluZGV4IDRiYTY0MzcuLjExMjMwYzUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbWFuYWdlci9Mb2dGYWN0b3J5LmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9tYW5hZ2VyL0xvZ0ZhY3RvcnkuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9tYW5hZ2VyL0xvZ21hbmFnZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbWFuYWdlci9Mb2dtYW5hZ2VyLmphdmEKaW5kZXggNmY4ZDBjZC4uOTM0YmMwYiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9tYW5hZ2VyL0xvZ21hbmFnZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL21hbmFnZXIvTG9nbWFuYWdlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL25vdGlmaWNhdGlvbi9JTG9nTm90aWZpY2F0aW9uTGlzdGVuZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbm90aWZpY2F0aW9uL0lMb2dOb3RpZmljYXRpb25MaXN0ZW5lci5qYXZhCmluZGV4IDcwOGI4MzIuLjdjNmRiYmQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbm90aWZpY2F0aW9uL0lMb2dOb3RpZmljYXRpb25MaXN0ZW5lci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbm90aWZpY2F0aW9uL0lMb2dOb3RpZmljYXRpb25MaXN0ZW5lci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL25vdGlmaWNhdGlvbi9Mb2dOb3RpZmljYXRpb25FdmVudC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy9ub3RpZmljYXRpb24vTG9nTm90aWZpY2F0aW9uRXZlbnQuamF2YQppbmRleCA2OGNkZWZkLi40OTZlZWJlIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL25vdGlmaWNhdGlvbi9Mb2dOb3RpZmljYXRpb25FdmVudC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvbm90aWZpY2F0aW9uL0xvZ05vdGlmaWNhdGlvbkV2ZW50LmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvdXRpbC9BcHA0bWNMb2dVdGlsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL3V0aWwvQXBwNG1jTG9nVXRpbC5qYXZhCmluZGV4IGE1MTIzMTAuLjhkMGI0NWEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvdXRpbC9BcHA0bWNMb2dVdGlsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy91dGlsL0FwcDRtY0xvZ1V0aWwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy91dGlsL0xvZ0luZm9ybWF0aW9uLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL3V0aWwvTG9nSW5mb3JtYXRpb24uamF2YQppbmRleCA2ZmYxNzFmLi40NDJjNGQyIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL3V0aWwvTG9nSW5mb3JtYXRpb24uamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL3V0aWwvTG9nSW5mb3JtYXRpb24uamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy91dGlsL0xvZ1V0aWwuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvdXRpbC9Mb2dVdGlsLmphdmEKaW5kZXggOTdlMjMxNi4uODU3YmVjYSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy91dGlsL0xvZ1V0aWwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL3V0aWwvTG9nVXRpbC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL3V0aWwvU0NBTG9nQ29uc3RhbnRzLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9sb2dnaW5nL3V0aWwvU0NBTG9nQ29uc3RhbnRzLmphdmEKaW5kZXggMmNiOGRiOS4uNWViNTAyNiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvbG9nZ2luZy91dGlsL1NDQUxvZ0NvbnN0YW50cy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL2xvZ2dpbmcvdXRpbC9TQ0FMb2dDb25zdGFudHMuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDMwZTEyOWIuLmI3YjM5MmYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogTG9hZGVyCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDAuOS44LnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLApAQCAtMTMsNiArMTMsNyBAQAogIG9yZy5lY2xpcHNlLmpmYWNlLAogIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKICBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIKKyBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIubW9kZWwKK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlcgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL2Jpbi8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL2Jpbi8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjFkYjJlLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9iaW4vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS9vcmcvCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvYnVpbGQucHJvcGVydGllcyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9idWlsZC5wcm9wZXJ0aWVzCmluZGV4IDFlMTAzMWUuLjY5NGJjMzggMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9idWlsZC5wcm9wZXJ0aWVzCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9idWlsZC5wcm9wZXJ0aWVzCkBAIC0yLDYgKzIsNSBAQAogb3V0cHV0Li4gPSBiaW4vDQogYmluLmluY2x1ZGVzID0gTUVUQS1JTkYvLFwNCiAgICAgICAgICAgICAgICAuLFwNCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwNCiAgICAgICAgICAgICAgICBlcGwtMi4wLmh0bWwNCiBzcmMuaW5jbHVkZXMgPSBlcGwtMi4wLmh0bWwNCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvcGx1Z2luLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNjBmNjJhLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4NCi08cGx1Z2luPg0KLQ0KLTwvcGx1Z2luPg0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNDk5MzkuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLQ0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvYWN0aXZhdG9yL0FjdGl2YXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL2FjdGl2YXRvci9BY3RpdmF0b3IuamF2YQppbmRleCAxMjMxZTI1Li5jMThhNTBiIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvYWN0aXZhdG9yL0FjdGl2YXRvci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9zY2hlZHVsaW5nL2xvYWRlci9hY3RpdmF0b3IvQWN0aXZhdG9yLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9zY2hlZHVsaW5nL2xvYWRlci9tb2RlbC9PU0NvbmZNb2RlbC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL21vZGVsL09TQ29uZk1vZGVsLmphdmEKaW5kZXggZmFjZTZiZC4uZDdkNTM5OCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL21vZGVsL09TQ29uZk1vZGVsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL21vZGVsL09TQ29uZk1vZGVsLmphdmEKQEAgLTEsNyArMSw3IEBACiBwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIubW9kZWw7DQogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvbW9kZWwvT1NUYXNrLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvbW9kZWwvT1NUYXNrLmphdmEKaW5kZXggNDljOGMyOC4uYTIxYjZkZCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL21vZGVsL09TVGFzay5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9zY2hlZHVsaW5nL2xvYWRlci9tb2RlbC9PU1Rhc2suamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL21vZGVsL1NjaGVkdWxpbmdJbmZvcm1hdGlvbkxvYWRlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL21vZGVsL1NjaGVkdWxpbmdJbmZvcm1hdGlvbkxvYWRlci5qYXZhCmluZGV4IGUzMGNiOGUuLjA1Mjc0OWQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS9zY2hlZHVsaW5nL2xvYWRlci9tb2RlbC9TY2hlZHVsaW5nSW5mb3JtYXRpb25Mb2FkZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvbW9kZWwvU2NoZWR1bGluZ0luZm9ybWF0aW9uTG9hZGVyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KQEAgLTI5LDcgKzI5LDYgQEAKICAgICogQHBhcmFtIGFic29sdXRlZmlsZVBhdGgNCiAgICAqIEByZXR1cm4NCiAgICAqLw0KLSAgQFN1cHByZXNzV2FybmluZ3MoImphdmFkb2MiKQ0KICAgcHVibGljIE9TQ29uZk1vZGVsIGdldFRhc2tzSW5mb3JtYXRpb24oZmluYWwgU3RyaW5nIGFic29sdXRlZmlsZVBhdGgpIHsNCiAJICB0aGlzLm9zQ29uZk1vZGVsPW5ldyBPU0NvbmZNb2RlbCgpOw0KIAkgIHRyeSB7DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3NjaGVkdWxpbmcvbG9hZGVyL21vZGVsL1Rhc2tUeXBlLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvbW9kZWwvVGFza1R5cGUuamF2YQppbmRleCAxODU5MWNkLi4xOWE5NGY3IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvbW9kZWwvVGFza1R5cGUuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2Euc2NoZWR1bGluZy5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2Evc2NoZWR1bGluZy9sb2FkZXIvbW9kZWwvVGFza1R5cGUuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDU4NGJhNDIuLjYzZWNjZTkgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTEsOCArMSw4IEBACiBNYW5pZmVzdC1WZXJzaW9uOiAxLjAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBVaQorQnVuZGxlLU5hbWU6IFNDQTJBTUFMVEhFQSBVaQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aTtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAwLjkuOC5xdWFsaWZpZXIKIEJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkuQWN0aXZhdG9yCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLnVpLApAQCAtMTYsNiArMTYsOSBAQAogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aSwKLSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnByZWZlcmVuY2VzLAotIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkucHJlZmVyZW5jZXMuaW50ZXJmYWNlcywKLSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwKKyBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLm1lc3NhZ2VkaWFsb2csCisgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsLAorIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0LmJ1aWxkZXIsCisgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzLAorIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2l6YXJkCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9wbHVnaW4ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3BsdWdpbi54bWwKaW5kZXggODVhMGZlZi4uZTkzZjE3MSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3BsdWdpbi54bWwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3BsdWdpbi54bWwKQEAgLTEsOCArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KIDw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjQiPz4NCiA8cGx1Z2luPg0KLSAgIDxleHRlbnNpb24tcG9pbnQgaWQ9ImV4cG9ydE9wdGlvbnMiIG5hbWU9IlByZWZlcmVuY2VFeHBvcnRlciIgc2NoZW1hPSJzY2hlbWEvZXhwb3J0T3B0aW9ucy5leHNkIi8+DQotPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkubWVudXMiPg0KKyA8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS5tZW51cyI+DQogICA8bWVudUNvbnRyaWJ1dGlvbg0KICAgICAgICAgbG9jYXRpb25VUkk9InBvcHVwOm9yZy5lY2xpcHNlLnVpLnBvcHVwLmFueT9hZnRlcj1hZGRpdGlvbnMiPg0KICAgICAgPG1lbnUNCkBAIC0xNCwzMSArMTMsMTMgQEAKICAgICAgICAgICAgICAgPGl0ZXJhdGU+DQogICAgICAgICAgICAgICAgICA8b3I+DQogICAgICAgICAgICAgICAgICAgICA8YWRhcHQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZSI+DQotICAgICAgICAgICAgICAgICAgICA8L2FkYXB0Pg0KLSAgICAgICAgICAgICAgICAgICAgPGFkYXB0DQotICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQmFzZU9iamVjdCI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdCI+DQogICAgICAgICAgICAgICAgICAgICA8L2FkYXB0Pg0KICAgICAgICAgICAgICAgICAgPC9vcj4NCiAgICAgICAgICAgICAgIDwvaXRlcmF0ZT4NCiAgICAgICAgICAgIDwvYW5kPg0KICAgICAgICAgPC92aXNpYmxlV2hlbj4NCiAgICAgIDwvbWVudT4NCi0gIDwvbWVudUNvbnRyaWJ1dGlvbj4KLTwvZXh0ZW5zaW9uPg0KLQ0KLTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnByZWZlcmVuY2VQYWdlcyI+DQotICAgIDxwYWdlIGlkPSJTQ0EgVG9vbHMiDQotICAgICAgICBuYW1lPSJTQ0EgVG9vbHMiDQotICAgICAgICBjbGFzcz0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5wcmVmZXJlbmNlcy5TQ0FQcmVmZXJlbmNlUGFnZSI+DQotICAgIDwvcGFnZT4KLTwvZXh0ZW5zaW9uPg0KLTxleHRlbnNpb24NCi0gICAgICBwb2ludD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5leHBvcnRPcHRpb25zIj4NCi0gICA8ZXhwb3J0ZXINCi0gICAgICAgICBuYW1lPSJQbGF0Zm9ybSINCi0gICAgICAgICBwcmVmZXJlbmNlcz0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5wcmVmZXJlbmNlcy5TQ0FFeHBvcnRQcmVmZXJlbmNlTGlzdCINCi0gICAgICAgICB0b29sPSJTQ0FUb29scyI+DQotICAgPC9leHBvcnRlcj4NCi08L2V4dGVuc2lvbj4gPgorICA8L21lbnVDb250cmlidXRpb24+DQorPC9leHRlbnNpb24+PgogPC9wbHVnaW4+DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlkMjM4Zi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCINCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+DQotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICA8cGFyZW50Pg0KLSAgICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L2FydGlmYWN0SWQ+DQotICAgIDx2ZXJzaW9uPjEuMC4wLnF1YWxpZmllcjwvdmVyc2lvbj4NCi0gICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9yZWxhdGl2ZVBhdGg+DQotICA8L3BhcmVudD4NCi0gIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWk8L2FydGlmYWN0SWQ+DQotICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+DQotDQotICANCi0JPGJ1aWxkPg0KLQkJPHNvdXJjZURpcmVjdG9yeT5zcmM8L3NvdXJjZURpcmVjdG9yeT4NCi0JCTxyZXNvdXJjZXM+DQotCQkJPHJlc291cmNlPg0KLQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQk8ZXhjbHVkZXM+DQotCQkJCQk8ZXhjbHVkZT4qKi8qLmphdmE8L2V4Y2x1ZGU+DQotCQkJCTwvZXhjbHVkZXM+DQotCQkJPC9yZXNvdXJjZT4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+c3JjPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJPC9yZXNvdXJjZXM+DQotCQk8cGx1Z2lucz4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8YXJ0aWZhY3RJZD5tYXZlbi1jbGVhbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjIuNC4xPC92ZXJzaW9uPg0KLQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCTxmaWxlc2V0cz4NCi0JCQkJCQk8ZmlsZXNldD4NCi0JCQkJCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4NCi0JCQkJCQkJPGluY2x1ZGVzPg0KLQkJCQkJCQkJPGluY2x1ZGU+Kio8L2luY2x1ZGU+DQotCQkJCQkJCTwvaW5jbHVkZXM+DQotCQkJCQkJPC9maWxlc2V0Pg0KLQkJCQkJPC9maWxlc2V0cz4NCi0JCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCTwvcGx1Z2luPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPg0KLQkJCQk8YXJ0aWZhY3RJZD5idWlsZC1oZWxwZXItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4xLjc8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8aWQ+YWRkLXNvdXJjZTwvaWQ+DQotCQkJCQkJPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPg0KLQkJCQkJCTxnb2Fscz4NCi0JCQkJCQkJPGdvYWw+YWRkLXNvdXJjZTwvZ29hbD4NCi0JCQkJCQk8L2dvYWxzPg0KLQkJCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJCQk8c291cmNlcz4NCi0JCQkJCQkJCTxzb3VyY2U+eHRlbmQtZ2VuPC9zb3VyY2U+DQotCQkJCQkJCTwvc291cmNlcz4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnh0ZW5kPC9ncm91cElkPg0KLQkJCQk8YXJ0aWZhY3RJZD54dGVuZC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjIuNy4zPC92ZXJzaW9uPg0KLQkJCQk8ZXhlY3V0aW9ucz4NCi0JCQkJCTxleGVjdXRpb24+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5jb21waWxlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxvdXRwdXREaXJlY3Rvcnk+eHRlbmQtZ2VuPC9vdXRwdXREaXJlY3Rvcnk+DQotCQkJCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQkJPC9leGVjdXRpb24+DQotCQkJCTwvZXhlY3V0aW9ucz4NCi0JCQk8L3BsdWdpbj4NCi0JCTwvcGx1Z2lucz4NCi0JPC9idWlsZD4NCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL0FjdGl2YXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL0FjdGl2YXRvci5qYXZhCmluZGV4IDIzOThkNjYuLjMyZTVkNDIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS9BY3RpdmF0b3IuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvQWN0aXZhdG9yLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS9tZXNzYWdlZGlhbG9nL0FwcDRtY01lc3NnZURpYWxvZy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL21lc3NhZ2VkaWFsb2cvQXBwNG1jTWVzc2dlRGlhbG9nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2YWZjZQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS9tZXNzYWdlZGlhbG9nL0FwcDRtY01lc3NnZURpYWxvZy5qYXZhCkBAIC0wLDAgKzEsNzYgQEAKKworLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5tZXNzYWdlZGlhbG9nOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5JRGlhbG9nQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuSW1hZ2U7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7CisKKy8qKgorICogVGhpcyBpcyBhIG1lc3NhZ2UgZGlhbG9nIGNsYXNzIHRvIGJlIHVzZWQgdG8gc2hvdyB0aGUgcG9wLXVwcyhpbmZvcm1hdGlvbixlcnJvcix3YXJuaW5nKSBhcyBhbmQgd2hlbiByZXF1aXJlZC4KKyAqLworcHVibGljIGNsYXNzIEFwcDRtY01lc3NnZURpYWxvZyB7CisKKworICBwcml2YXRlIGZpbmFsIEltYWdlIHNoZWxsSW1nOworICBwcml2YXRlIGZpbmFsIGludCBraW5kOworICBwcml2YXRlIGZpbmFsIFNoZWxsIHNoZWxsOworICBwcml2YXRlIGZpbmFsIFN0cmluZyB0aXRsZTsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbXNnOworCisgIC8qKgorICAgKiBAcGFyYW0ga2luZCB0aGUga2luZCBvZiBkaWFsb2cgdG8gb3BlbiBFZyBFUlJPUixJTkZPUk1BVElPTixRVUVTVElPTiwgV0FSTklORyxDT05GSVJNLG9yUVVFU1RJT05fV0lUSF9DQU5DRUwuCisgICAqIEBwYXJhbSBzaGVsbCB0aGUgcGFyZW50IHNoZWxsIG9mIHRoZSBkaWFsb2cKKyAgICogQHBhcmFtIHRpdGxlIHRoZSBkaWFsb2cncyB0aXRsZQorICAgKiBAcGFyYW0gc2hlbGxJbWcgdGhlIGltYWdlIHRvIGJlIHNob3duIG9uIHRoZSBsZWZ0IHRvcCBjb3JuZXIgb2YgdGhlIHBvcC11cAorICAgKiBAcGFyYW0gbXNnIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBwb3AgdXAuCisgICAqLworICBwdWJsaWMgQXBwNG1jTWVzc2dlRGlhbG9nKGZpbmFsIGludCBraW5kLCBmaW5hbCBTaGVsbCBzaGVsbCwgZmluYWwgU3RyaW5nIHRpdGxlLCBmaW5hbCBJbWFnZSBzaGVsbEltZywKKyAgICAgIGZpbmFsIFN0cmluZyBtc2cpIHsKKyAgICB0aGlzLmtpbmQgPSBraW5kOworICAgIHRoaXMuc2hlbGwgPSBzaGVsbDsKKyAgICB0aGlzLnRpdGxlID0gdGl0bGU7CisgICAgdGhpcy5zaGVsbEltZyA9IHNoZWxsSW1nOworICAgIHRoaXMubXNnID0gbXNnOworCisgIH0KKworICBwcml2YXRlIFN0cmluZ1tdIGdldEFwcDRtY0J1dHRvbkxhYmVscygpIHsKKyAgICBTdHJpbmdbXSBhcHA0bWNEaWFsb2dCdXR0b25MYWJlbHM7CisKKyAgICBpZiAoKHRoaXMua2luZCA9PSBNZXNzYWdlRGlhbG9nLkVSUk9SKSB8fCAodGhpcy5raW5kID09IE1lc3NhZ2VEaWFsb2cuSU5GT1JNQVRJT04pIHx8CisgICAgICAgICh0aGlzLmtpbmQgPT0gTWVzc2FnZURpYWxvZy5XQVJOSU5HKSkgeworICAgICAgYXBwNG1jRGlhbG9nQnV0dG9uTGFiZWxzID0gbmV3IFN0cmluZ1tdIHsgSURpYWxvZ0NvbnN0YW50cy5PS19MQUJFTCB9OworICAgIH0KKyAgICBlbHNlIGlmICh0aGlzLmtpbmQgPT0gTWVzc2FnZURpYWxvZy5DT05GSVJNKSB7CisgICAgICBhcHA0bWNEaWFsb2dCdXR0b25MYWJlbHMgPSBuZXcgU3RyaW5nW10geyBJRGlhbG9nQ29uc3RhbnRzLk9LX0xBQkVMLCBJRGlhbG9nQ29uc3RhbnRzLkNBTkNFTF9MQUJFTCB9OworICAgIH0KKyAgICBlbHNlIGlmICh0aGlzLmtpbmQgPT0gTWVzc2FnZURpYWxvZy5RVUVTVElPTikgeworICAgICAgYXBwNG1jRGlhbG9nQnV0dG9uTGFiZWxzID0gbmV3IFN0cmluZ1tdIHsgSURpYWxvZ0NvbnN0YW50cy5ZRVNfTEFCRUwsIElEaWFsb2dDb25zdGFudHMuTk9fTEFCRUwgfTsKKyAgICB9CisgICAgZWxzZSBpZiAodGhpcy5raW5kID09IE1lc3NhZ2VEaWFsb2cuUVVFU1RJT05fV0lUSF9DQU5DRUwpIHsKKyAgICAgIGFwcDRtY0RpYWxvZ0J1dHRvbkxhYmVscyA9CisgICAgICAgICAgbmV3IFN0cmluZ1tdIHsgSURpYWxvZ0NvbnN0YW50cy5ZRVNfTEFCRUwsIElEaWFsb2dDb25zdGFudHMuTk9fTEFCRUwsIElEaWFsb2dDb25zdGFudHMuQ0FOQ0VMX0xBQkVMIH07CisgICAgfQorICAgIGVsc2UgeworICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSWxsZWdhbCB2YWx1ZSBmb3Iga2luZCBpbiBNZXNzYWdlRGlhbG9nLm9wZW4oKSIpOworICAgIH0KKyAgICByZXR1cm4gYXBwNG1jRGlhbG9nQnV0dG9uTGFiZWxzOworICB9CisKKyAgLyoqCisgICAqIE9wZW5zIHRoZSBtZXNzYWdlIGRpYWxvZy4KKyAgICoKKyAgICogQHJldHVybiBpbnQgaW5kaWNhdGluZyBpZiB0aGUgbWVzc2FnZSBkaWFsb2cgd2FzIG9wZW5lZCBzdWNjZXNzZnVsbHkuCisgICAqLworICBwdWJsaWMgaW50IG9wZW4oKSB7CisgICAgTWVzc2FnZURpYWxvZyBkID0KKyAgICAgICAgbmV3IE1lc3NhZ2VEaWFsb2codGhpcy5zaGVsbCwgdGhpcy50aXRsZSwgdGhpcy5zaGVsbEltZywgdGhpcy5tc2csIHRoaXMua2luZCwgMCwgZ2V0QXBwNG1jQnV0dG9uTGFiZWxzKCkpOworICAgIHJldHVybiBkLm9wZW4oKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3ByZWZlcmVuY2VzL0Fic3RyYWN0U0NBVG9vbHNQcmVmZXJlbmNlUGFnZS5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3ByZWZlcmVuY2VzL0Fic3RyYWN0U0NBVG9vbHNQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2VhNjMwLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS9wcmVmZXJlbmNlcy9BYnN0cmFjdFNDQVRvb2xzUHJlZmVyZW5jZVBhZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0vKioNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCi0gKiANCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCi0gKiANCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkucHJlZmVyZW5jZXM7DQotDQotaW1wb3J0IGphdmEuaW8uRmlsZTsNCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nLm1hbmFnZXIuTG9nbWFuYWdlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5BY3RpdmF0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5TQ0FUb29sc1VJVXRpbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuSURpYWxvZ0NvbnN0YW50czsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Qb2ludDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRmlsZURpYWxvZzsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQcmVmZXJlbmNlUGFnZTsNCi0NCi0vKioNCi0gKiBBYnN0cmFjdCBwcmVmZXJlbmNlIHBhZ2UgZm9yIHRoZSBtdWx0aWNvcmUgcHJlZmVyZW5jZSBwYWdlIGltcGxlbWVudGF0aW9ucy5UaGUgcGFnZSB3b3VsZCBjb250YWluIHRoZSBkZWZhdWx0DQotICogaW1wbGVtZW50YXRpb24gb2YgYWxsIHRoZSBjb21tb24gZmVhdHVyZXMgYWdyZWVkIHVwb24gaW4gdGhlIG11bHRpY29yZSBhcmNoaXRlY3R1cmUgZ3JvdXAgbWVldGluZw0KLSAqLw0KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNDQVRvb2xzUHJlZmVyZW5jZVBhZ2UgZXh0ZW5kcyBGaWVsZEVkaXRvclByZWZlcmVuY2VQYWdlDQotICAgIGltcGxlbWVudHMgSVdvcmtiZW5jaFByZWZlcmVuY2VQYWdlIHsNCi0NCi0gIC8qKg0KLSAgICogQnV0dG9uIHRvIGV4cG9ydCB0aGUgcHJlZmVyZW5jZXMgdG8gdGhlIG9wdGlvbnMgZmlsZQ0KLSAgICovDQotICBwcm90ZWN0ZWQgQnV0dG9uIGV4cG9ydFByZWY7DQotICAvKioNCi0gICAqIExhYmVsIGZvciBzdGF0dXMgaW1hZ2UNCi0gICAqLw0KLSAgcHJvdGVjdGVkIExhYmVsIHN0YXR1c0ltYWdlOw0KLSAgLyoqDQotICAgKiBMYWJlbCBmb3Igc3RhdHVzIGluZm8NCi0gICAqLw0KLSAgcHJvdGVjdGVkIExhYmVsIGluZm9MYWJlbDsNCi0NCi0gIC8qKg0KLSAgICogRGVmYXVsdCBjb25zdHJ1Y3RvciB0byBzdXBwb3J0IHByZWZlcmVuY2UgcGFnZXMgaW1wbGVtZW50ZWQgdXNpbmcgU1dUIGNvbnRyb2xzLg0KLSAgICovDQotDQotICBwdWJsaWMgQWJzdHJhY3RTQ0FUb29sc1ByZWZlcmVuY2VQYWdlKCkgew0KLQ0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBQYXJhbWV0ZXJpemVkIGNvbnN0cnVjdG9yIHRvIHN1cHBvcnQgcHJlZmVyZW5jZSBwYWdlcyBpbXBsZW1lbnRlZCB1c2luZyBmaWVsZCBlZGl0b3JzLg0KLSAgICoNCi0gICAqIEBwYXJhbSBzdHlsZSBsYXlvdXRpbmcgc3R5bGUgR1JJRCBvciBGTEFUDQotICAgKi8NCi0gIHB1YmxpYyBBYnN0cmFjdFNDQVRvb2xzUHJlZmVyZW5jZVBhZ2UoZmluYWwgaW50IHN0eWxlKSB7DQotICAgIHN1cGVyKHN0eWxlKTsNCi0gIH0NCi0NCi0gIEBPdmVycmlkZQ0KLSAgcHJvdGVjdGVkIHZvaWQgY29udHJpYnV0ZUJ1dHRvbnMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgew0KLSAgICBHcmlkTGF5b3V0IGxheW91dCA9IChHcmlkTGF5b3V0KSBwYXJlbnQuZ2V0TGF5b3V0KCk7DQotICAgIGxheW91dC5udW1Db2x1bW5zID0gbGF5b3V0Lm51bUNvbHVtbnMgKyAzOw0KLQ0KLSAgICB0aGlzLnN0YXR1c0ltYWdlID0gbmV3IExhYmVsKHBhcmVudCwgU1dULk5PTkUpOw0KLSAgICB0aGlzLnN0YXR1c0ltYWdlLnNldEltYWdlKHBhcmVudC5nZXRTaGVsbCgpLmdldERpc3BsYXkoKS5nZXRTeXN0ZW1JbWFnZShTV1QuSUNPTl9JTkZPUk1BVElPTikpOw0KLSAgICB0aGlzLnN0YXR1c0ltYWdlLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSkpOw0KLSAgICB0aGlzLnN0YXR1c0ltYWdlLnNldFZpc2libGUoZmFsc2UpOw0KLQ0KLSAgICB0aGlzLmluZm9MYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5Ob25lKTsNCi0gICAgdGhpcy5pbmZvTGFiZWwuc2V0VGV4dCgiT3B0aW9ucyBmaWxlIGV4cG9ydGVkIHN1Y2Nlc3NmdWxseSEhISIpOw0KLSAgICB0aGlzLmluZm9MYWJlbC5zZXRWaXNpYmxlKGZhbHNlKTsNCi0NCi0gICAgaW50IHdpZHRoSGludCA9IGNvbnZlcnRIb3Jpem9udGFsRExVc1RvUGl4ZWxzKElEaWFsb2dDb25zdGFudHMuQlVUVE9OX1dJRFRIKTsNCi0gICAgdGhpcy5leHBvcnRQcmVmID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5QVVNIKTsNCi0gICAgdGhpcy5leHBvcnRQcmVmLnNldFRleHQoIkV4cG9ydCBQcmVmZXJlbmNlcyIpOw0KLSAgICBEaWFsb2cuYXBwbHlEaWFsb2dGb250KHRoaXMuZXhwb3J0UHJlZik7DQotICAgIFBvaW50IG1pbkJ1dHRvblNpemUgPSB0aGlzLmV4cG9ydFByZWYuY29tcHV0ZVNpemUoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxULCB0cnVlKTsNCi0gICAgR3JpZERhdGEgZGF0YSA9IG5ldyBHcmlkRGF0YShHcmlkRGF0YS5IT1JJWk9OVEFMX0FMSUdOX0ZJTEwpOw0KLSAgICBkYXRhLndpZHRoSGludCA9IE1hdGgubWF4KHdpZHRoSGludCwgbWluQnV0dG9uU2l6ZS54KTsNCi0gICAgdGhpcy5leHBvcnRQcmVmLnNldExheW91dERhdGEoZGF0YSk7DQotICAgIHRoaXMuZXhwb3J0UHJlZi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsNCi0NCi0gICAgICBAT3ZlcnJpZGUNCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7DQotICAgICAgICBzYXZlUHJlZmVyZW5jZXMocGFyZW50KTsNCi0gICAgICB9DQotICAgIH0pOw0KLSAgICBzdXBlci5jb250cmlidXRlQnV0dG9ucyhwYXJlbnQpOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBFeHBvcnRzIGFsbCB0aGUgcHJlZmVyZW5jZXMgdG8gb3B0aW9ucyBmaWxlDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCBzYXZlUHJlZmVyZW5jZXMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgew0KLSAgICBzaG93U3RhdHVzKGZhbHNlKTsNCi0gICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOw0KLSAgICBGaWxlRGlhbG9nIGZpbGVEaWFsb2cgPSBuZXcgRmlsZURpYWxvZyhwYXJlbnQuZ2V0U2hlbGwoKSwgU1dULlNBVkUgfCBTV1QuU0hFRVQpOw0KLSAgICBmaWxlRGlhbG9nLnNldFRleHQoIkV4cG9ydCIpOw0KLSAgICBmaWxlRGlhbG9nLnNldEZpbHRlclBhdGgoU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmhvbWUiKSk7DQotICAgIGZpbGVEaWFsb2cuc2V0RmlsZU5hbWUoIlByZWZlcmVuY2Uub3B0Iik7DQotICAgIGZpbGVEaWFsb2cuc2V0RmlsdGVyRXh0ZW5zaW9ucyhuZXcgU3RyaW5nW10geyAiLm9wdCIgfSk7DQotICAgIFN0cmluZyBwYXRoID0gZmlsZURpYWxvZy5vcGVuKCk7DQotICAgIGlmIChwYXRoICE9IG51bGwpIHsNCi0gICAgICBGaWxlIG9wdGlvbnNGaWxlID0gbmV3IEZpbGUocGF0aCk7DQotICAgICAgdHJ5IHsNCi0gICAgICAgIGJvb2xlYW4gc3RhdHVzID0gb3B0aW9uc0ZpbGUuY3JlYXRlTmV3RmlsZSgpOw0KLSAgICAgICAgaWYgKCFzdGF0dXMpIHsNCi0gICAgICAgICAgc2V0RXJyb3JNZXNzYWdlKCJGaWxlIHdpdGggc2FtZSBuYW1lIGV4aXN0cyBpbiB0aGUgc2VsZWN0ZWQgZm9sZGVyISIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZSB7DQotICAgICAgICAgIFNDQVRvb2xzVUlVdGlsLmV4cG9ydFByb3BlcnRpZXMob3B0aW9uc0ZpbGUsIGdldFByZWZlcmVuY2VTdG9yZSgpLCBnZXRUb29sSWQoKSk7DQotICAgICAgICAgIHNob3dTdGF0dXModHJ1ZSk7DQotICAgICAgICB9DQotICAgICAgfQ0KLSAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQotICAgICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nRXhjZXB0aW9uKHRoaXMuZ2V0Q2xhc3MoKSwgZSwgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQotICAgICAgfQ0KLSAgICB9DQotICB9DQotDQotICAvKioNCi0gICAqIEVuYWJsZS9kaXNhYmxlIHRoZSBzdGF0dXMgbGFiZWxzDQotICAgKg0KLSAgICogQHBhcmFtIHN0YXR1cyB7QGxpbmsgQm9vbGVhbn0NCi0gICAqLw0KLSAgcHJpdmF0ZSB2b2lkIHNob3dTdGF0dXMoZmluYWwgYm9vbGVhbiBzdGF0dXMpIHsNCi0gICAgdGhpcy5pbmZvTGFiZWwuc2V0VmlzaWJsZShzdGF0dXMpOw0KLSAgICB0aGlzLnN0YXR1c0ltYWdlLnNldFZpc2libGUoc3RhdHVzKTsNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogSnVzdCByZXR1cm5pbmcNCi0gICAqLw0KLSAgQE92ZXJyaWRlDQotICBwdWJsaWMgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7DQotICAgIHJldHVybjsNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogUmV0dXJucyB0aGUgdG9vbCBpZCBmb3Igd2hpY2ggdGhlIHBhZ2UgaGFzIGJlZW4gY29udHJpYnV0ZWQNCi0gICAqDQotICAgKiBAcmV0dXJuIFN0aW5nDQotICAgKi8NCi0gIHB1YmxpYyBhYnN0cmFjdCBTdHJpbmcgZ2V0VG9vbElkKCk7DQotDQotfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS9wcmVmZXJlbmNlcy9TQ0FFeHBvcnRQcmVmZXJlbmNlTGlzdC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3ByZWZlcmVuY2VzL1NDQUV4cG9ydFByZWZlcmVuY2VMaXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwZWJmZTQuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3ByZWZlcmVuY2VzL1NDQUV4cG9ydFByZWZlcmVuY2VMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCi0gKiANCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCi0gKiANCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkucHJlZmVyZW5jZXM7DQotDQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnByZWZlcmVuY2VzLmludGVyZmFjZXMuSUV4cG9ydFByZWZlcmVuY2VzOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuU0NBVG9vbHNQcmVmZXJlbmNlQ29uc3RhbnRzOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7DQotDQotLyoqDQotICogVGhlIGxpc3Qgb2YgcHJlZmVyZW5jZXMgdGhhdCBhcmUgZXhwb3J0ZWQgZm9yIHRoZSB0b29sIFNDQSBhcyBvcHRpb25zIGZpbGUNCi0gKi8NCi1wdWJsaWMgY2xhc3MgU0NBRXhwb3J0UHJlZmVyZW5jZUxpc3QgaW1wbGVtZW50cyBJRXhwb3J0UHJlZmVyZW5jZXMgew0KLQ0KLSAgLyoqDQotICAgKiBQcml2YXRlIGNvbnN0cnVjdG9yDQotICAgKi8NCi0gIHB1YmxpYyBTQ0FFeHBvcnRQcmVmZXJlbmNlTGlzdCgpIHsNCi0gICAgLy8gTm90aGluZyBub3cNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICoge0Bpbmhlcml0RG9jfQ0KLSAgICovDQotICBAT3ZlcnJpZGUNCi0gIHB1YmxpYyBMaXN0PFN0cmluZz4ga2V5c1RvRXhwb3J0KCkgew0KLSAgICBTdHJpbmdbXSBwcmVmVG9TYXZlID0geyAvLyBOT1NPTkFSIG5vdCBzaWduaWZpY2FudA0KLSAgICAgICAgU0NBVG9vbHNQcmVmZXJlbmNlQ29uc3RhbnRzLlRFWFRfTE9HRklMRU5BTUUsDQotICAgICAgICBTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuREVCVUdfTU9ERSB9Ow0KLSAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChwcmVmVG9TYXZlKTsNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICoge0Bpbmhlcml0RG9jfQ0KLSAgICovDQotICBAT3ZlcnJpZGUNCi0gIHB1YmxpYyBJUHJlZmVyZW5jZVN0b3JlIGdldFByZWZlcmVuY2VTdG9yZSgpIHsNCi0gICAgcmV0dXJuIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOw0KLSAgfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvcHJlZmVyZW5jZXMvU0NBUHJlZmVyZW5jZVBhZ2UuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS9wcmVmZXJlbmNlcy9TQ0FQcmVmZXJlbmNlUGFnZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZmFjZGJjLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS9wcmVmZXJlbmNlcy9TQ0FQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDg0ICswLDAgQEAKLS8qKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KLSAqIA0KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KLSAqIA0KLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQotICogDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5wcmVmZXJlbmNlczsNCi0NCi0NCi1pbXBvcnQgamF2YS5pby5GaWxlOw0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCi1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7DQotaW1wb3J0IGphdmEudXRpbC5NYXA7DQotDQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy5tYW5hZ2VyLkxvZ0ZhY3RvcnkuTG9nZ2VyVHlwZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nLm1hbmFnZXIuTG9nbWFuYWdlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsLlNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50czsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UubGF5b3V0LkdyaWREYXRhRmFjdG9yeTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlRGlhbG9nOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUV2ZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLktleUxpc3RlbmVyOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoOw0KLQ0KLQ0KLS8qKg0KLSAqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBTQ0EgVG9vbHMgUHJlZmVyZW5jZSBwYWdlIFVJIHVzaW5nIFNXVCBjb250cm9scy4gVXNlciBjYW4gY29uZmlndXJlIHRoZSBsb2dnZXIgdHlwZSB1c2luZw0KLSAqIHRoaXMgcHJlZmVyZW5jZSBwYWdlLlRoZSBsb2dnZXIgdHlwZXMgYXZhaWxhYmxlIGFyZSAxKUVjbGlwc2UgQ29uc29sZSAyKUVycm9yIGxvZyAzKVByb2JsZW1zIGxvZyA0KUxvZyBmaWxlDQotICovDQotcHVibGljIGNsYXNzIFNDQVByZWZlcmVuY2VQYWdlIGV4dGVuZHMgQWJzdHJhY3RTQ0FUb29sc1ByZWZlcmVuY2VQYWdlIHsNCi0NCi0gIHByaXZhdGUgR3JvdXAgbG9nZ2VyVHlwZTsNCi0gIHByaXZhdGUgU3RyaW5nQnVpbGRlciBzY2FMb2dnZXJUeXBlOw0KLSAgcHJpdmF0ZSBMYWJlbCBsb2dGaWxlRGlyZWN0b3J5TGFiZWw7DQotICBwcml2YXRlIFRleHQgbG9nRmlsZURpcmVjdG9yeVRleHQ7DQotICBwcml2YXRlIEJ1dHRvbiBicm93c2U7DQotICBwcml2YXRlIExhYmVsIGxvZ0ZpbGVOYW1lTGFiZWw7DQotICBwcml2YXRlIFRleHQgbG9nRmlsZU5hbWVUZXh0Ow0KLSAgcHJpdmF0ZSBDb21wb3NpdGUgY29tcG9zaXRlOw0KLSAgcHJpdmF0ZSBDb21wb3NpdGUgY29tcG9zaXRlRm9yQ2hlY2tCb3g7DQotICBwcml2YXRlIEJ1dHRvbltdIGNoZWNrQm94QnV0dG9uczsNCi0gIHByaXZhdGUgQnV0dG9uIGRlYnVnTW9kZUJ1dHRvbjsNCi0gIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nPiBzZWxlY3RlZENoZWNrQm94Ow0KLSAgcHJpdmF0ZSBIYXNoU2V0PFN0cmluZz4gc2VsZWN0ZWRCdXR0b25zOw0KLSAgLyoqDQotICAgKiBFcnJvciBtZXNzYWdlDQotICAgKi8NCi0gIHByaXZhdGUgU3RyaW5nIGVycm9yTWVzc2FnZSA9ICJMb2cgRmlsZSBuYW1lIHNob3VsZCBlbmQgd2l0aCAubG9nIjsNCi0NCi0gIC8qKg0KLSAgICogSW5pdGlhbGl6ZXMgdGhpcyBwcmVmZXJlbmNlIHBhZ2UgZm9yIHRoZSBnaXZlbiB3b3JrYmVuY2guVGhpcyBtZXRob2QgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYXMgdGhlIHByZWZlcmVuY2UgcGFnZQ0KLSAgICogaXMgYmVpbmcgY3JlYXRlZCBhbmQgaW5pdGlhbGl6ZWQNCi0gICAqDQotICAgKiBAcGFyYW0gd29ya2JlbmNoIHRoZSB3b3JrYmVuY2gNCi0gICAqLw0KLSAgQE92ZXJyaWRlDQotICBwdWJsaWMgdm9pZCBpbml0KGZpbmFsIElXb3JrYmVuY2ggd29ya2JlbmNoKSB7DQotICAgIHNldFByZWZlcmVuY2VTdG9yZShvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwuQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7DQotICAgIHNldERlc2NyaXB0aW9uKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5QUkVGRVJFTkNFX1BBR0VfREVTQ1JJUFRJT04pOw0KLQ0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBldmVyeXRpbWUgdGhlIFNDQSBUb29scyBwcmVmZXJlbmNlIHBhZ2UgaXMgbG9hZGVkLiBBbGwgdGhlIFVJIGNvbnRyb2xzIGFyZSBjcmVhdGVkDQotICAgKiBpbnNpZGUgdGhpcyBtZXRob2QuIExpc3RlbmVycyBhcmUgYWRkZWQgdG8gdGhlIFVJIGNvbnRyb2xzLiBUaGUgVUkgY29udHJvbHMgYXJlIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCBhcHByb3JwcmlhdGUNCi0gICAqIHZhbHVlcy4NCi0gICAqDQotICAgKiBAcGFyYW0gcGFyZW50IFRoZSBjb21wb3NpdGUgb24gd2hpY2ggdGhlIFVJIGNvbnRyb2xzIGFyZSBjcmVhdGVkDQotICAgKiBAcmV0dXJuIHBhcmVudCBhZnRlciBhbGwgdGhlIFVJIGNvbnRyb2xzIGFyZSBjcmVhdGVkDQotICAgKi8NCi0gIEBPdmVycmlkZQ0KLSAgcHJvdGVjdGVkIENvbnRyb2wgY3JlYXRlQ29udGVudHMoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgew0KLSAgICBpbml0aWFsaXplTWFwKCk7DQotICAgIG5ldyBMYWJlbChwYXJlbnQsIFNXVC5OT05FKS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuTk9ORSwgU1dULk5PTkUsIHRydWUsIGZhbHNlLCA1LCAtMSkpOw0KLQ0KLSAgICB0aGlzLnNlbGVjdGVkQnV0dG9ucyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsNCi0gICAgLy8gY3JlYXRpbmcgdGhlIG1haW4gY29tcG9zaXRlIG9uIHdoaWNoIHRoZSBvdGhlciBjb250cm9scyBhcmUgbGFpZA0KLSAgICBDb21wb3NpdGUgbWFpbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTlVMTCk7DQotICAgIEdyaWRMYXlvdXQgbWFpbkNvbXBvc2l0ZUxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7DQotICAgIG1haW5Db21wb3NpdGVMYXlvdXQubnVtQ29sdW1ucyA9IDE7DQotICAgIG1haW5Db21wb3NpdGVMYXlvdXQubWFyZ2luSGVpZ2h0ID0gMDsNCi0gICAgbWFpbkNvbXBvc2l0ZUxheW91dC5tYXJnaW5XaWR0aCA9IDA7DQotICAgIG1haW5Db21wb3NpdGUuc2V0TGF5b3V0KG1haW5Db21wb3NpdGVMYXlvdXQpOw0KLSAgICAvLyBjcmVhdGluZyB0aGUgZ3JvdXAgZm9yIGNoZWNrIGJveCBidXR0b25zIGFuZCB0aGUgdGV4dCBib3hlcw0KLSAgICB0aGlzLmxvZ2dlclR5cGUgPSBuZXcgR3JvdXAobWFpbkNvbXBvc2l0ZSwgU1dULlNIQURPV19PVVQpOw0KLSAgICB0aGlzLmxvZ2dlclR5cGUuc2V0VGV4dCgiTG9nZ2VyIFR5cGVzIik7DQotDQotICAgIEdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoNSwgZmFsc2UpOw0KLSAgICB0aGlzLmxvZ2dlclR5cGUuc2V0TGF5b3V0KGxheW91dCk7DQotDQotICAgIEdyaWREYXRhRmFjdG9yeS5kZWZhdWx0c0Zvcih0aGlzLmxvZ2dlclR5cGUpLmdyYWIodHJ1ZSwgZmFsc2UpLnNwYW4oMiwgMSkuYXBwbHlUbyh0aGlzLmxvZ2dlclR5cGUpOw0KLSAgICBHcmlkRGF0YUZhY3RvcnkuZGVmYXVsdHNGb3IobWFpbkNvbXBvc2l0ZSkuZ3JhYih0cnVlLCB0cnVlKS5zcGFuKDIsIDEpLmFwcGx5VG8obWFpbkNvbXBvc2l0ZSk7DQotDQotICAgIG5ldyBMYWJlbCh0aGlzLmxvZ2dlclR5cGUsIFNXVC5OT05FKS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuTk9ORSwgU1dULk5PTkUsIHRydWUsIGZhbHNlLCA1LCAtMSkpOw0KLQ0KLSAgICAvLyBjcmVhdGluZyB0aGUgY29tcG9zaXRlIGluc2lkZSB0aGUgZ3JvdXAgZm9yIHRoZSBjaGVjayBib3ggYnV0dG9ucyBhbG9uZQ0KLQ0KLSAgICB0aGlzLmNoZWNrQm94QnV0dG9ucyA9IG5ldyBCdXR0b25bNF07DQotICAgIHRoaXMuY29tcG9zaXRlRm9yQ2hlY2tCb3ggPSBuZXcgQ29tcG9zaXRlKHRoaXMubG9nZ2VyVHlwZSwgU1dULk5PTkUpOw0KLSAgICBHcmlkTGF5b3V0IGdyaWRMYXlvdXRGb3JDaGVja0JveCA9IG5ldyBHcmlkTGF5b3V0KDUsIGZhbHNlKTsNCi0gICAgdGhpcy5jb21wb3NpdGVGb3JDaGVja0JveC5zZXRMYXlvdXQoZ3JpZExheW91dEZvckNoZWNrQm94KTsNCi0gICAgdGhpcy5jb21wb3NpdGVGb3JDaGVja0JveC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlKSk7DQotICAgIEdyaWREYXRhIGdyaWREYXRhRm9yQ2hlY2tCb3ggPSAoR3JpZERhdGEpIHRoaXMuY29tcG9zaXRlRm9yQ2hlY2tCb3guZ2V0TGF5b3V0RGF0YSgpOw0KLSAgICBncmlkRGF0YUZvckNoZWNrQm94LmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KLSAgICBncmlkTGF5b3V0Rm9yQ2hlY2tCb3guaG9yaXpvbnRhbFNwYWNpbmcgPSA4Ow0KLQ0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMuY2hlY2tCb3hCdXR0b25zLmxlbmd0aDsgaSsrKSB7DQotICAgICAgdGhpcy5jaGVja0JveEJ1dHRvbnNbaV0gPSBuZXcgQnV0dG9uKHRoaXMuY29tcG9zaXRlRm9yQ2hlY2tCb3gsIFNXVC5DSEVDSyk7DQotICAgICAgdGhpcy5jaGVja0JveEJ1dHRvbnNbaV0uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkhPUklaT05UQUwpKTsNCi0gICAgfQ0KLSAgICB0aGlzLmNoZWNrQm94QnV0dG9uc1swXS5zZXRUZXh0KFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5FQ0xJUFNFX0NPTlNPTEUpOw0KLSAgICB0aGlzLmNoZWNrQm94QnV0dG9uc1sxXS5zZXRUZXh0KFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5FUlJPUl9MT0cpOw0KLSAgICB0aGlzLmNoZWNrQm94QnV0dG9uc1syXS5zZXRUZXh0KFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9CTEVNU19MT0cpOw0KLSAgICB0aGlzLmNoZWNrQm94QnV0dG9uc1szXS5zZXRUZXh0KFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5MT0dfRklMRSk7DQotDQotICAgIG5ldyBMYWJlbCh0aGlzLmxvZ2dlclR5cGUsIFNXVC5OT05FKS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuTk9ORSwgU1dULk5PTkUsIHRydWUsIGZhbHNlLCA1LCAtMSkpOw0KLQ0KLSAgICAvLyBjcmVhdGluZyBhbm90aGVyIGNvbXBvc2l0ZSBpbnNpZGUgdGhlIGdyb3VwIGZvciB0aGUgdGV4dCBib3hlcw0KLQ0KLSAgICB0aGlzLmNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUodGhpcy5sb2dnZXJUeXBlLCBTV1QuTk9ORSk7DQotICAgIEdyaWRMYXlvdXQgZ3JpZExheW91dCA9IG5ldyBHcmlkTGF5b3V0KDMsIGZhbHNlKTsNCi0gICAgdGhpcy5jb21wb3NpdGUuc2V0TGF5b3V0KGdyaWRMYXlvdXQpOw0KLSAgICB0aGlzLmNvbXBvc2l0ZS5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlKSk7DQotICAgIEdyaWREYXRhIGdyaWREYXRhID0gKEdyaWREYXRhKSB0aGlzLmNvbXBvc2l0ZS5nZXRMYXlvdXREYXRhKCk7DQotICAgIGdyaWREYXRhLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOw0KLSAgICBncmlkTGF5b3V0Lmhvcml6b250YWxTcGFjaW5nID0gODsNCi0gICAgZ3JpZExheW91dC52ZXJ0aWNhbFNwYWNpbmcgPSAxNTsNCi0NCi0gICAgdGhpcy5sb2dGaWxlTmFtZUxhYmVsID0gbmV3IExhYmVsKHRoaXMuY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkxFRlQpOw0KLSAgICB0aGlzLmxvZ0ZpbGVOYW1lVGV4dCA9IG5ldyBUZXh0KHRoaXMuY29tcG9zaXRlLCBTV1QuU0lOR0xFIHwgU1dULkJPUkRFUik7DQotICAgIHRoaXMubG9nRmlsZU5hbWVMYWJlbC5zZXRUZXh0KCJMb2cgRmlsZSBuYW1lIik7DQotDQotICAgIHRoaXMubG9nRmlsZU5hbWVMYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuQkVHSU5OSU5HLCBTV1QuQ0VOVEVSLCBmYWxzZSwgZmFsc2UsIDEsIC0xKSk7DQotICAgIHRoaXMubG9nRmlsZU5hbWVUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMiwgLTEpKTsNCi0NCi0gICAgdGhpcy5sb2dGaWxlRGlyZWN0b3J5TGFiZWwgPSBuZXcgTGFiZWwodGhpcy5jb21wb3NpdGUsIFNXVC5TSU5HTEUpOw0KLSAgICB0aGlzLmxvZ0ZpbGVEaXJlY3RvcnlUZXh0ID0gbmV3IFRleHQodGhpcy5jb21wb3NpdGUsIFNXVC5TSU5HTEUgfCBTV1QuQk9SREVSKTsNCi0gICAgdGhpcy5icm93c2UgPSBuZXcgQnV0dG9uKHRoaXMuY29tcG9zaXRlLCBTV1QuUFVTSCk7DQotDQotICAgIHRoaXMubG9nRmlsZURpcmVjdG9yeUxhYmVsLnNldFRleHQoIkxvZyBGaWxlIERpcmVjdG9yeSIpOw0KLSAgICB0aGlzLmJyb3dzZS5zZXRUZXh0KCJCcm93c2UiKTsNCi0NCi0gICAgdGhpcy5sb2dGaWxlRGlyZWN0b3J5TGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkNFTlRFUiwgZmFsc2UsIGZhbHNlLCAxLCAtMSkpOw0KLSAgICB0aGlzLmxvZ0ZpbGVEaXJlY3RvcnlUZXh0LnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuQ0VOVEVSLCB0cnVlLCBmYWxzZSwgMSwgLTEpKTsNCi0gICAgdGhpcy5icm93c2Uuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkJFR0lOTklORywgU1dULkNFTlRFUiwgZmFsc2UsIGZhbHNlLCAxLCAtMSkpOw0KLQ0KLSAgICBHcm91cCBtb2RlR3JvdXAgPSBuZXcgR3JvdXAobWFpbkNvbXBvc2l0ZSwgU1dULlNIQURPV19PVVQpOw0KLSAgICBtb2RlR3JvdXAuc2V0VGV4dCgiRGVidWcgTW9kZSIpOw0KLQ0KLSAgICBsYXlvdXQgPSBuZXcgR3JpZExheW91dCg1LCBmYWxzZSk7DQotICAgIG1vZGVHcm91cC5zZXRMYXlvdXQobGF5b3V0KTsNCi0gICAgbW9kZUdyb3VwLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgZmFsc2UpKTsNCi0gICAgdGhpcy5kZWJ1Z01vZGVCdXR0b24gPSBuZXcgQnV0dG9uKG1vZGVHcm91cCwgU1dULkNIRUNLKTsNCi0gICAgdGhpcy5kZWJ1Z01vZGVCdXR0b24uc2V0VGV4dChTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuREVCVUdfTU9ERV9MQUJFTCk7DQotICAgIC8vIGluaXRpYWxpemluZyB0aGUgY29udHJvbHMNCi0gICAgaW5pdGlhbGl6ZVZhbHVlcygpOw0KLSAgICAvLyBhZGRpbmcgbGlzdGVuZXJzIHRvIHRoZSBjb250cm9scw0KLSAgICBhZGRMaXN0ZW5lcnMoKTsNCi0gICAgcmV0dXJuIHBhcmVudDsNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIE9rIGJ1dHRvbi4gUHJlZmVyZW5jZXMgYXJlIHN0b3JlZCBpbiB0aGUgcHJlZmVyZW5jZSBzdG9yZS4NCi0gICAqDQotICAgKiBAcmV0dXJuIHRydWUgYWZ0ZXIgc2F2aW5nIHRoZSBwcmVmZXJlbmNlcyB0byB0aGUgcHJlZmVyZW5jZSBzdG9yZQ0KLSAgICovDQotICBAT3ZlcnJpZGUNCi0gIHB1YmxpYyBib29sZWFuIHBlcmZvcm1PaygpIHsNCi0gICAgc3VwZXIucGVyZm9ybU9rKCk7DQotICAgIHNhdmVQcmVmZXJlbmNlcygpOw0KLSAgICByZXR1cm4gdHJ1ZTsNCi0gIH0NCi0NCi0NCi0gIC8qKg0KLSAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSBsb2cgZmlsZSBuYW1lIGVuZHMgd2l0aCAubG9nIGV4dGVuc2lvbiB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiB0aGUgIkxvZyBGaWxlIiBjaGVjayBib3gNCi0gICAqIGJ1dHRvbiAgYW5kIHNldHMgdGhlIGFwcHJvcmlhdGUgZXJyb3IgbWVzc2FnZS4gSXQgYWxzbyBkaXNhYmxlcyB0aGUgT2sgYW5kIEFwcGx5IGJ1dHRvbiB3aGVuZXZlciB0aGVyZSBpcyBhbiBlcnJvciBtZXNzYWdlIHNldC4NCi0gICAqLw0KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKCkgew0KLSAgICB0aGlzLmVycm9yTWVzc2FnZSA9IG51bGw7DQotICAgIGlmICh0aGlzLnNlbGVjdGVkQnV0dG9ucy5pc0VtcHR5KCkpIHsNCi0gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICJBdCBsZWFzdCBvbmUgbG9nZ2luZyBtZWNoYW5pc21zIHNob3VsZCBiZSBzZWxlY3RlZCI7DQotICAgIH0NCi0gICAgaWYgKHRoaXMuc2VsZWN0ZWRCdXR0b25zLmNvbnRhaW5zKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5MT0dfRklMRSkpIHsNCi0gICAgICB2YWxpZGF0ZWxvZ0ZpbGUoKTsNCi0gICAgfQ0KLQ0KLSAgICBpZiAodGhpcy5zZWxlY3RlZEJ1dHRvbnMuY29udGFpbnMoU0NBVG9vbHNQcmVmZXJlbmNlQ29uc3RhbnRzLkxPR19GSUxFKSAmJg0KLSAgICAgICAgIShuZXcgRmlsZSh0aGlzLmxvZ0ZpbGVEaXJlY3RvcnlUZXh0LmdldFRleHQoKSkpLmV4aXN0cygpKSB7DQotICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAiTG9nIEZpbGUgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0IjsNCi0gICAgfQ0KLSAgICBzZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvck1lc3NhZ2UpOw0KLSAgICBkaXNhYmxlT3JFbmFibGVPa0FuZEFwcGx5QnV0dG9uKCk7DQotICB9DQotDQotDQotICAvKioNCi0gICAqIFRoaXMgbWV0aG9kcyBhZGRzIHRoZSBhcHByb3ByaWF0ZSBsaXN0ZW5lcnMgdG8gdGhlIFVJIGNvbnRyb2xzIG9mIHRoaXMgcHJlZmVyZW5jZSBwYWdlIGFuZCBpdCBhbHNvIHJlYWN0cyB0byB0aGUNCi0gICAqIGNvcnJvc3BvbmRpbmcgZXZlbnRzLg0KLSAgICovDQotICBwcml2YXRlIHZvaWQgYWRkTGlzdGVuZXJzKCkgew0KLSAgICBhZGRLZXlMaXN0ZW5lclRvVGV4dEJveCh0aGlzLmxvZ0ZpbGVOYW1lVGV4dCk7DQotICAgIGFkZEtleUxpc3RlbmVyVG9UZXh0Qm94KHRoaXMubG9nRmlsZURpcmVjdG9yeVRleHQpOw0KLSAgICB0aGlzLmJyb3dzZS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsNCi0NCi0gICAgICBAT3ZlcnJpZGUNCi0gICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBldmVudCkgew0KLSAgICAgICAgRGlyZWN0b3J5RGlhbG9nIGRpcmVjdG9yeURpYWxvZyA9IG5ldyBEaXJlY3RvcnlEaWFsb2coU0NBUHJlZmVyZW5jZVBhZ2UudGhpcy5sb2dnZXJUeXBlLmdldFNoZWxsKCkpOw0KLSAgICAgICAgZGlyZWN0b3J5RGlhbG9nLnNldE1lc3NhZ2UoIlNlbGVjdCBhIGRpcmVjdG9yeSIpOw0KLSAgICAgICAgU3RyaW5nIHBhdGggPSBkaXJlY3RvcnlEaWFsb2cub3BlbigpOw0KLSAgICAgICAgaWYgKHBhdGggIT0gbnVsbCkgew0KLSAgICAgICAgICBTQ0FQcmVmZXJlbmNlUGFnZS50aGlzLmxvZ0ZpbGVEaXJlY3RvcnlUZXh0LnNldFRleHQocGF0aCk7DQotICAgICAgICB9DQotICAgICAgfQ0KLSAgICB9KTsNCi0NCi0gICAgU2VsZWN0aW9uQWRhcHRlciBzZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgew0KLQ0KLSAgICAgIEBPdmVycmlkZQ0KLSAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGV2ZW50KSB7DQotICAgICAgICBCdXR0b24gYiA9ICgoQnV0dG9uKSBldmVudC53aWRnZXQpOw0KLSAgICAgICAgaWYgKGIuZ2V0U2VsZWN0aW9uKCkpIHsNCi0gICAgICAgICAgU0NBUHJlZmVyZW5jZVBhZ2UudGhpcy5zZWxlY3RlZEJ1dHRvbnMuYWRkKGIuZ2V0VGV4dCgpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2Ugew0KLSAgICAgICAgICBpZiAoU0NBUHJlZmVyZW5jZVBhZ2UudGhpcy5zZWxlY3RlZEJ1dHRvbnMuY29udGFpbnMoYi5nZXRUZXh0KCkpKSB7DQotICAgICAgICAgICAgU0NBUHJlZmVyZW5jZVBhZ2UudGhpcy5zZWxlY3RlZEJ1dHRvbnMucmVtb3ZlKGIuZ2V0VGV4dCgpKTsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgZW5hYmxlT3JEaXNhYmxlVGV4dChTQ0FQcmVmZXJlbmNlUGFnZS50aGlzLnNlbGVjdGVkQnV0dG9ucyk7DQotICAgICAgICB2YWxpZGF0ZSgpOw0KLSAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgZm9yIChCdXR0b24gYiA6IHRoaXMuY2hlY2tCb3hCdXR0b25zKSB7DQotICAgICAgYi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihzZWxlY3Rpb25MaXN0ZW5lcik7DQotICAgIH0NCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIFVJIGNvbnRyb2xzIG9mIHRoaXMgcHJlZmVyZW5jZSBwYWdlLiBUaGUgZGVmYXVsdCBsb2cgZmlsZSBuYW1lIGlzDQotICAgKiAic2NhLmxvZyIgLHRoZSBkZWZhdWx0IGxvZyBmaWxlIGRpcmVjdG9yeSBpcyB1c2VyIGhvbWUgZGlyZWN0b3J5IGFuZCB0aGUgZGVmYXVsdCBjaGVjayBib3ggYnV0dG9uIHNlbGVjdGVkIGlzDQotICAgKiAiRXJyb3IgbG9nIg0KLSAgICovDQotICBwcml2YXRlIHZvaWQgc2V0RGVmYXVsdHNDb250cm9scygpIHsNCi0gICAgdGhpcy5zZWxlY3RlZEJ1dHRvbnMuY2xlYXIoKTsNCi0gICAgZm9yIChCdXR0b24gckJ1dHRvbiA6IHRoaXMuY2hlY2tCb3hCdXR0b25zKSB7DQotICAgICAgaWYgKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5FUlJPUl9MT0cuZXF1YWxzKHJCdXR0b24uZ2V0VGV4dCgpKSkgew0KLSAgICAgICAgckJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7DQotICAgICAgICB0aGlzLnNlbGVjdGVkQnV0dG9ucy5hZGQockJ1dHRvbi5nZXRUZXh0KCkpOw0KLSAgICAgIH0NCi0gICAgICBlbHNlIHsNCi0gICAgICAgIHJCdXR0b24uc2V0U2VsZWN0aW9uKGZhbHNlKTsNCi0gICAgICB9DQotICAgIH0NCi0NCi0gICAgdGhpcy5sb2dGaWxlTmFtZUxhYmVsLnNldEVuYWJsZWQoZmFsc2UpOw0KLSAgICB0aGlzLmxvZ0ZpbGVOYW1lVGV4dC5zZXRFbmFibGVkKGZhbHNlKTsNCi0gICAgdGhpcy5sb2dGaWxlRGlyZWN0b3J5TGFiZWwuc2V0RW5hYmxlZChmYWxzZSk7DQotICAgIHRoaXMubG9nRmlsZURpcmVjdG9yeVRleHQuc2V0RW5hYmxlZChmYWxzZSk7DQotICAgIHRoaXMuYnJvd3NlLnNldEVuYWJsZWQoZmFsc2UpOw0KLQ0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBTZXRzIHRoZSBjb250cm9scyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3JtIHRoZSBwcmVmZXJlbmNlLmluaSBmaWxlDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCBzZXRWYWx1ZXNUb0RlZmF1bHQoKSB7DQotICAgIHRoaXMubG9nRmlsZU5hbWVUZXh0LnNldFRleHQoZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0RGVmYXVsdFN0cmluZyhTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuVEVYVF9MT0dGSUxFTkFNRSkpOw0KLSAgICB0aGlzLmxvZ0ZpbGVEaXJlY3RvcnlUZXh0DQotICAgICAgICAuc2V0VGV4dChnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXREZWZhdWx0U3RyaW5nKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5URVhUX0xPR0ZJTEVESVJFQ1RPUlkpKTsNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3Mgb24gIlJlc3RvcmUgZGVmYXVsdHMiIGJ1dHRvbi5JdCBiYXNpY2FsbHkgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZXMNCi0gICAqIG9mIHRoZSBVSSBjb250cm9scy4NCi0gICAqLw0KLSAgQE92ZXJyaWRlDQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtRGVmYXVsdHMoKSB7DQotICAgIHNldERlZmF1bHRzQ29udHJvbHMoKTsNCi0gICAgc2V0VmFsdWVzVG9EZWZhdWx0KCk7DQotICAgIHZhbGlkYXRlKCk7DQotICB9DQotDQotDQotICAvKioNCi0gICAqIFRoaXMgbWV0aG9kIGdldHMgdGhlIHZhbHVlcyBvZiB0aGUgY2hlY2sgYm94IGJ1dHRvbnMgc2VsZWN0ZWQsIHRoZSBsb2cgZmlsZSBuYW1lIGFuZCB0aGUgbG9nIGZpbGUgZGlyZWN0b3J5IGFuZA0KLSAgICogc2F2ZSB0aGVtIGluIHRoZSBwcmVmZXJlbmNlIHN0b3JlDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCBzYXZlUHJlZmVyZW5jZXMoKSB7DQotICAgIHRoaXMuc2NhTG9nZ2VyVHlwZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7DQotICAgIGZvciAoTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPiBlbnRyeSA6IHRoaXMuc2VsZWN0ZWRDaGVja0JveC5lbnRyeVNldCgpKSB7DQotICAgICAgU3RyaW5nIGtleSA9IGVudHJ5LmdldEtleSgpOw0KLSAgICAgIFN0cmluZyB2YWx1ZSA9IGVudHJ5LmdldFZhbHVlKCk7DQotICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCdXR0b25zLmNvbnRhaW5zKHZhbHVlKSkgew0KLSAgICAgICAgdGhpcy5zY2FMb2dnZXJUeXBlID0gdGhpcy5zY2FMb2dnZXJUeXBlLmFwcGVuZChrZXkgKyAiOyIpOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgICB0aGlzLnNjYUxvZ2dlclR5cGUgPQ0KLSAgICAgICAgbmV3IFN0cmluZ0J1aWxkZXIodGhpcy5zY2FMb2dnZXJUeXBlLnN1YnN0cmluZygwLCB0aGlzLnNjYUxvZ2dlclR5cGUubGVuZ3RoKCkgLSAxKSk7DQotICAgIGdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5TQ0FfTE9HR0VSLCB0aGlzLnNjYUxvZ2dlclR5cGUudG9TdHJpbmcoKSk7DQotICAgIGdldFByZWZlcmVuY2VTdG9yZSgpLnNldFZhbHVlKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5URVhUX0xPR0ZJTEVOQU1FLCB0aGlzLmxvZ0ZpbGVOYW1lVGV4dC5nZXRUZXh0KCkpOw0KLSAgICBnZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZShTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuVEVYVF9MT0dGSUxFRElSRUNUT1JZLA0KLSAgICAgICAgdGhpcy5sb2dGaWxlRGlyZWN0b3J5VGV4dC5nZXRUZXh0KCkpOw0KLQ0KLSAgICBnZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZShTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuREVCVUdfTU9ERSwgdGhpcy5kZWJ1Z01vZGVCdXR0b24uZ2V0U2VsZWN0aW9uKCkpOw0KLSAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkuc2V0RGVidWdNb2RlKHRoaXMuZGVidWdNb2RlQnV0dG9uLmdldFNlbGVjdGlvbigpKTsNCi0gIH0NCi0NCi0NCi0gIC8qKg0KLSAgICogVGhpcyBtZXRob2QgZW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgdGV4dCBjb250cm9scyBkZXBlbmRpbmcgb24gdGhlIGNoZWNrIGJveGVzIHRoYXQgYXJlIHNlbGVjdGVkIHRoZSB0ZXh0IGNvbnRyb2xzDQotICAgKiBhcmUgZW5hYmxlZCB3aGVuIHVzZXIgY2xpY2tzIG9uICJMb2cgZmlsZSIgY2hlY2sgYm94IGJ1dHRvbi4NCi0gICAqDQotICAgKiBAcGFyYW0gc2VsZWN0ZWQgU2V0IG9mIGNoZWNrIGJveGVzIHRoYXQgYXJlIHNlbGVjdGVkDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCBlbmFibGVPckRpc2FibGVUZXh0KGZpbmFsIEhhc2hTZXQ8U3RyaW5nPiBzZWxlY3RlZCkgew0KLSAgICB0aGlzLmxvZ0ZpbGVEaXJlY3RvcnlUZXh0LnNldEVuYWJsZWQoZmFsc2UpOw0KLSAgICB0aGlzLmxvZ0ZpbGVEaXJlY3RvcnlMYWJlbC5zZXRFbmFibGVkKGZhbHNlKTsNCi0gICAgdGhpcy5sb2dGaWxlTmFtZVRleHQuc2V0RW5hYmxlZChmYWxzZSk7DQotICAgIHRoaXMubG9nRmlsZU5hbWVMYWJlbC5zZXRFbmFibGVkKGZhbHNlKTsNCi0gICAgdGhpcy5icm93c2Uuc2V0RW5hYmxlZChmYWxzZSk7DQotDQotDQotICAgIGlmIChzZWxlY3RlZC5jb250YWlucyhTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuTE9HX0ZJTEUpKSB7DQotICAgICAgdGhpcy5sb2dGaWxlRGlyZWN0b3J5VGV4dC5zZXRFbmFibGVkKHRydWUpOw0KLSAgICAgIHRoaXMubG9nRmlsZURpcmVjdG9yeUxhYmVsLnNldEVuYWJsZWQodHJ1ZSk7DQotICAgICAgdGhpcy5sb2dGaWxlTmFtZVRleHQuc2V0RW5hYmxlZCh0cnVlKTsNCi0gICAgICB0aGlzLmxvZ0ZpbGVOYW1lTGFiZWwuc2V0RW5hYmxlZCh0cnVlKTsNCi0gICAgICB0aGlzLmJyb3dzZS5zZXRFbmFibGVkKHRydWUpOw0KLSAgICB9DQotDQotICB9DQotDQotDQotICAvKioNCi0gICAqIFRoZSBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFVJIGNvbnRyb2xzLiBJdCBjaGVja3MgaWYgdGhlcmUgYXJlIGFueSB2YWx1ZXMgc3RvcmVkIGluIHByZWZlcmVuY2Ugc3RvcmUsIGlmIHllcyB0aGUgVUkNCi0gICAqIGNvbnRyb2xzIGFyZSBzZXQgdG8gdGhvc2UgcHJlc2VudCBpbiBwcmVmZXJlbmNlIHN0b3JlIGVsc2UgdGhleSBhcmUgc2V0IHRvIHRoZSBkZWZhbHQgdmFsdWVzDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplVmFsdWVzKCkgew0KLSAgICB0aGlzLmxvZ0ZpbGVOYW1lVGV4dC5zZXRUZXh0KGdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuVEVYVF9MT0dGSUxFTkFNRSkpOw0KLSAgICB0aGlzLmxvZ0ZpbGVEaXJlY3RvcnlUZXh0LnNldFRleHQoZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5URVhUX0xPR0ZJTEVESVJFQ1RPUlkpKTsNCi0NCi0gICAgU3RyaW5nIHNlbGVjdGVkTG9nZ2VycyA9IGdldFByZWZlcmVuY2VTdG9yZSgpLmdldFN0cmluZyhTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuU0NBX0xPR0dFUik7DQotICAgIGlmIChzZWxlY3RlZExvZ2dlcnMuaXNFbXB0eSgpKSB7DQotICAgICAgc2V0RGVmYXVsdHNDb250cm9scygpOw0KLSAgICB9DQotICAgIGVsc2Ugew0KLSAgICAgIFN0cmluZ1tdIGJ1dHRvbnMgPSAoc2VsZWN0ZWRMb2dnZXJzLnNwbGl0KCI7IikpOw0KLSAgICAgIGZvciAoU3RyaW5nIHMgOiBidXR0b25zKSB7DQotICAgICAgICB0aGlzLnNlbGVjdGVkQnV0dG9ucy5hZGQodGhpcy5zZWxlY3RlZENoZWNrQm94LmdldChzKSk7DQotICAgICAgfQ0KLSAgICB9DQotICAgIGluaXRpYWxpemVEZWJ1Z01vZGUoZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0U3RyaW5nKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5ERUJVR19NT0RFKSk7DQotICAgIGZvciAoQnV0dG9uIGIgOiB0aGlzLmNoZWNrQm94QnV0dG9ucykgew0KLSAgICAgIGlmICh0aGlzLnNlbGVjdGVkQnV0dG9ucy5jb250YWlucyhiLmdldFRleHQoKSkpIHsNCi0gICAgICAgIGIuc2V0U2VsZWN0aW9uKHRydWUpOw0KLSAgICAgIH0NCi0gICAgICBlbHNlIHsNCi0gICAgICAgIGIuc2V0U2VsZWN0aW9uKGZhbHNlKTsNCi0gICAgICB9DQotICAgIH0NCi0gICAgZW5hYmxlT3JEaXNhYmxlVGV4dCh0aGlzLnNlbGVjdGVkQnV0dG9ucyk7DQotICAgIHZhbGlkYXRlKCk7DQotICB9DQotDQotICAvKioNCi0gICAqIEluaXRpYWxpemVzIHRoZSBkZWJ1ZyBjaGVjayBib3ggYmFzZWQgb24gdGhlIGdpdmUgdmFsdWUNCi0gICAqDQotICAgKiBAcGFyYW0gdmFsdWUgU3RyaW5nDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCBpbml0aWFsaXplRGVidWdNb2RlKGZpbmFsIFN0cmluZyB2YWx1ZSkgew0KLSAgICBpZiAoInRydWUiLmVxdWFscyh2YWx1ZSkpIHsNCi0gICAgICB0aGlzLmRlYnVnTW9kZUJ1dHRvbi5zZXRTZWxlY3Rpb24odHJ1ZSk7DQotICAgICAgTG9nbWFuYWdlci5nZXRJbnN0YW5jZSgpLnNldERlYnVnTW9kZSh0cnVlKTsNCi0gICAgfQ0KLSAgICBlbHNlIHsNCi0gICAgICB0aGlzLmRlYnVnTW9kZUJ1dHRvbi5zZXRTZWxlY3Rpb24oZmFsc2UpOw0KLSAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5zZXREZWJ1Z01vZGUoZmFsc2UpOw0KLSAgICB9DQotICB9DQotDQotICAvKioNCi0gICAqIFRoaXMgbWV0aG9kIGRpc2FibGVzIHRoZSBPayBhbmQgQXBwbHkgYnV0dG9uIHdoZW5ldmVyIHRoZXJlIGlzIGFuIGVycm9yIG1lc3NhZ2Ugc2V0Lg0KLSAgICovDQotICBwcml2YXRlIHZvaWQgZGlzYWJsZU9yRW5hYmxlT2tBbmRBcHBseUJ1dHRvbigpIHsNCi0gICAgQnV0dG9uIG9rQnV0dG9uID0gbnVsbDsNCi0gICAgUHJlZmVyZW5jZURpYWxvZyBpUHJlZmVyZW5jZVBhZ2VDb250YWluZXIgPSAoUHJlZmVyZW5jZURpYWxvZykgZ2V0Q29udGFpbmVyKCk7DQotDQotICAgIENvbXBvc2l0ZSBidXR0b25zID0gKENvbXBvc2l0ZSkgaVByZWZlcmVuY2VQYWdlQ29udGFpbmVyLmJ1dHRvbkJhcjsNCi0gICAgQ29udHJvbFtdIGFsbGJ1dHRvbnMgPSBidXR0b25zLmdldENoaWxkcmVuKCk7DQotICAgIENvbXBvc2l0ZSBjb21wb3NpdGVGb3JCdXR0b25zID0gKENvbXBvc2l0ZSkgYWxsYnV0dG9uc1sxXTsNCi0gICAgZm9yIChDb250cm9sIGIgOiBjb21wb3NpdGVGb3JCdXR0b25zLmdldENoaWxkcmVuKCkpIHsNCi0gICAgICBpZiAoYiBpbnN0YW5jZW9mIEJ1dHRvbikgew0KLSAgICAgICAgQnV0dG9uIHByZXNlbnRCdXR0b24gPSAoQnV0dG9uKSBiOw0KLSAgICAgICAgaWYgKCJPSyIuZXF1YWxzKHByZXNlbnRCdXR0b24uZ2V0VGV4dCgpKSkgew0KLSAgICAgICAgICBva0J1dHRvbiA9IHByZXNlbnRCdXR0b247DQotICAgICAgICB9DQotICAgICAgfQ0KLQ0KLSAgICB9DQotDQotICAgIEJ1dHRvbiBhcHBseUJ1dHRvbiA9IGdldEFwcGx5QnV0dG9uKCk7DQotICAgIGlmICgob2tCdXR0b24gIT0gbnVsbCkgJiYgKGFwcGx5QnV0dG9uICE9IG51bGwpKSB7DQotICAgICAgaWYgKGdldEVycm9yTWVzc2FnZSgpICE9IG51bGwpIHsNCi0gICAgICAgIG9rQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOw0KLSAgICAgICAgYXBwbHlCdXR0b24uc2V0RW5hYmxlZChmYWxzZSk7DQotICAgICAgfQ0KLSAgICAgIGVsc2Ugew0KLSAgICAgICAgb2tCdXR0b24uc2V0RW5hYmxlZCh0cnVlKTsNCi0gICAgICAgIGFwcGx5QnV0dG9uLnNldEVuYWJsZWQodHJ1ZSk7DQotICAgICAgfQ0KLSAgICB9DQotICB9DQotDQotDQotICAvKioNCi0gICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSAiTG9nIEZpbGUiIGNoZWNrIGJveCBidXR0b24gaXMgc2VsZWN0ZWQuIFRoaXMgbWV0aG9kIHZhbGlkYXRlcyB0aGUgTG9nIEZpbGUNCi0gICAqIE5hbWUgYW5kIExvZyBGaWxlIERpcmVjdG9yeSB0ZXh0IGJveGVzIGFuZCBzZXRzIHRoZSBlcnJvciBtZXNzYWdlIHdoZW5ldmVyIGFwcGxpY2FibGUuDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCB2YWxpZGF0ZWxvZ0ZpbGUoKSB7DQotICAgIGlmICh0aGlzLmxvZ0ZpbGVOYW1lVGV4dC5nZXRUZXh0KCkuZW5kc1dpdGgoIi5sb2ciKSAmJiAobmV3IEZpbGUodGhpcy5sb2dGaWxlRGlyZWN0b3J5VGV4dC5nZXRUZXh0KCkpKS5leGlzdHMoKSkgew0KLSAgICAgIHNldEVycm9yTWVzc2FnZShudWxsKTsNCi0gICAgfQ0KLSAgICBlbHNlIHsNCi0gICAgICBpZiAoIXRoaXMubG9nRmlsZU5hbWVUZXh0LmdldFRleHQoKS5lbmRzV2l0aCgiLmxvZyIpKSB7DQotICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICJMb2cgRmlsZSBuYW1lIHNob3VsZCBlbmQgd2l0aCAubG9nIjsNCi0gICAgICAgIHNldEVycm9yTWVzc2FnZSh0aGlzLmVycm9yTWVzc2FnZSk7DQotICAgICAgfQ0KLSAgICB9DQotICB9DQotDQotDQotICBwcml2YXRlIHZvaWQgYWRkS2V5TGlzdGVuZXJUb1RleHRCb3goZmluYWwgVGV4dCB0KSB7DQotICAgIHQuYWRkS2V5TGlzdGVuZXIobmV3IEtleUxpc3RlbmVyKCkgew0KLQ0KLQ0KLSAgICAgIEBPdmVycmlkZQ0KLSAgICAgIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKGZpbmFsIEtleUV2ZW50IGUpIHsNCi0gICAgICAgIHZhbGlkYXRlKCk7DQotICAgICAgfQ0KLQ0KLSAgICAgIEBPdmVycmlkZQ0KLSAgICAgIHB1YmxpYyB2b2lkIGtleVByZXNzZWQoZmluYWwgS2V5RXZlbnQgZSkgew0KLSAgICAgICAgdmFsaWRhdGUoKTsNCi0gICAgICB9DQotICAgIH0pOw0KLSAgfQ0KLQ0KLSAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVNYXAoKSB7DQotICAgIHRoaXMuc2VsZWN0ZWRDaGVja0JveCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOw0KLSAgICB0aGlzLnNlbGVjdGVkQ2hlY2tCb3gucHV0KExvZ2dlclR5cGUuRUNMSVBTRV9DT05TT0xFLnRvU3RyaW5nKCksIFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5FQ0xJUFNFX0NPTlNPTEUpOw0KLSAgICB0aGlzLnNlbGVjdGVkQ2hlY2tCb3gucHV0KExvZ2dlclR5cGUuRVJST1JfTE9HLnRvU3RyaW5nKCksIFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5FUlJPUl9MT0cpOw0KLSAgICB0aGlzLnNlbGVjdGVkQ2hlY2tCb3gucHV0KExvZ2dlclR5cGUuUFJPQkxFTVNfTE9HLnRvU3RyaW5nKCksIFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9CTEVNU19MT0cpOw0KLSAgICB0aGlzLnNlbGVjdGVkQ2hlY2tCb3gucHV0KExvZ2dlclR5cGUuVEVYVF9GSUxFLnRvU3RyaW5nKCksIFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5MT0dfRklMRSk7DQotICB9DQotDQotICAvKioNCi0gICAqIHtAaW5oZXJpdERvY30NCi0gICAqLw0KLSAgQE92ZXJyaWRlDQotICBwdWJsaWMgU3RyaW5nIGdldFRvb2xJZCgpIHsNCi0gICAgcmV0dXJuIFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5TQ0FfVE9PTF9JRDsNCi0gIH0NCi19DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3ByZWZlcmVuY2VzL2ludGVyZmFjZXMvSUV4cG9ydFByZWZlcmVuY2VzLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvcHJlZmVyZW5jZXMvaW50ZXJmYWNlcy9JRXhwb3J0UHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVmMzM3NC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvcHJlZmVyZW5jZXMvaW50ZXJmYWNlcy9JRXhwb3J0UHJlZmVyZW5jZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KLSAqIA0KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KLSAqIA0KLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQotICogDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5wcmVmZXJlbmNlcy5pbnRlcmZhY2VzOw0KLQ0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCi0NCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOw0KLQ0KLS8qKg0KLSAqIFRoZSBjb250cmlidXRpb24gY2xhc3Mgb2YgdGhlIGV4dGVuc2lvbiBwb2ludCBvcmcuZWNsaXBzZS5hcHA0bWMudWkuZXhwb3J0T3B0aW9ucyBuZWVkIHRvIGltcGxlbWVudCB0aGUgYmVsb3cNCi0gKiBpbnRlcmZhY2UuIFRoZSBleHRlbnNpb24gcG9pbnQgZXhwZWN0IHRoZSBrZXlzIHRoYXQgYXJlIHRvIGJlIGV4cG9ydGVkIGFzIHBhcnQgb2YgdGhlIG9wdGlvbnMgZmlsZSBhbmQgdGhlIHByZWZlcmVuY2UNCi0gKiBzdG9yZSBmcm9tIHdoaWNoIHRoZSB2YWx1ZSBvZiB0aGUga2V5cyBhcmUgdG8gYmUgZmV0Y2hlZC4NCi0gKi8NCi1wdWJsaWMgaW50ZXJmYWNlIElFeHBvcnRQcmVmZXJlbmNlcyB7DQotDQotICAvKioNCi0gICAqIE1lbnRpb25zIGFsbCB0aGUgcHJlZmVyZW5jZXMgdG8gYmUgZXhwb3J0ZWQgdG8gdGhlIG9wdGlvbnMgZmlsZQ0KLSAgICoNCi0gICAqIEByZXR1cm4gTGlzdCBvZiBwcmVmZXJlbmNlcyB0byBiZSBleHBvcnRlZA0KLSAgICovDQotICBwdWJsaWMgTGlzdDxTdHJpbmc+IGtleXNUb0V4cG9ydCgpOw0KLQ0KLSAgLyoqDQotICAgKiBTcGVjaWZpZXMgdGhlIHByZWZlcmVuY2Ugc3RvcmUgZnJvbSB3aGljaCB0aGUgcHJlZmVyZW5jZXMgYXJlIHRvIGJlIGV4cG9ydGVkDQotICAgKg0KLSAgICogQHJldHVybiB7QGxpbmsgSVByZWZlcmVuY2VTdG9yZX0NCi0gICAqLw0KLSAgcHVibGljIElQcmVmZXJlbmNlU3RvcmUgZ2V0UHJlZmVyZW5jZVN0b3JlKCk7DQotfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL0FtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5ZjQyOQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL0FtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhCkBAIC0wLDAgKzEsNjMgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbDsKKworCisvKioKKyAqIENvbnN0YW50cyBjbGFzcyBmb3IgQW1hbHRoZWEgd2l6YXJkIHByZWZlcmVuY2VzCisgKi8KK3B1YmxpYyBjbGFzcyBBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMgeworCisgIC8qKgorICAgKiBQcm9qZWN0IHBhdGggaW4gdGhlIGZpbGUgc3lzdGVtCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX1BBVEggPSAicHJvamVjdFBhdGgiOworCisgIC8qKgorICAgKiBQcmVmZXJlbmNlIGtleSBmb3IgYnVpbGRfY21kcy5sb2cgZmlsZQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVJTERfQ01EU19MT0dfRklMRSA9ICJidWlsZENtZHNMb2dGaWxlIjsKKworICAvKioKKyAgICogUHJlZmVyZW5jZSBrZXkgZm9yIE9TIGxvY2sgZnVuY3Rpb24gZmlsZQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1NfTE9DS19GSUxFID0gImxvY2tJbmZvIjsKKyAgLyoqCisgICAqIFByZWZlcmVuY2Uga2V5IGZvciBUYXNrL1NjaGVkdWxpbmcgZmlsZQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFTS19TQ0hFRFVMSU5HX0ZJTEUgPSAidGFza0luZm8iOworCisgIC8qKgorICAgKiBQcmVmZXJlbmNlIGtleSBmb3IgUGF0aCB0byBvdXRwdXQgZGlyZWN0b3J5CisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRQVVRfRElSRUNUT1JZID0gIm91dHB1dFBhdGgiOworCisgIC8qKgorICAgKiBQcmVmZXJlbmNlIGtleSBmb3IgR2VuZXJhdGUgc3RydWN0IG1lbWJlcnMgb3B0aW9uLgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5BQkxFX1NUUlVDVF9NRU1CRVJfS0VZID0gImVuYWJsZVN0cnVjdE1lbWJlciI7CisKKyAgLyoqCisgICAqIFByZWZlcmVuY2Uga2V5IGZvciBQYXRoIHRvIGxsdm0gZXhlY3V0YWJsZSBvcHRpb24KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFTVF9QQVRIX0tFWSA9ICJhc3RQYXRoIjsKKyAgLyoqCisgICAqIFByZWZlcmVuY2Uga2V5IGZvciBoZWFkZXIgZGlyZWN0b3JpZXMgbGlzdCBvcHRpb24uCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRElSX0xJU1RfS0VZID0gImhkaXJMaXN0IjsKKworICAvKioKKyAgICogUHJlZmVyZW5jZSBrZXkgZm9yIGJ1aWxkIGNvbW1hbmQgbG9nIG9wdGlvbi4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJMT0dfS0VZID0gImJsb2ciOworCisgIC8qKgorICAqCisgICovCisgIHByaXZhdGUgQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzKCkgeworICAgIC8vIGRlZmF1bHQgY29uc3RydWN0b3IKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvQnV0dG9uSW5mby5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvQnV0dG9uSW5mby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNjdmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9CdXR0b25JbmZvLmphdmEKQEAgLTAsMCArMSw2NCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsOworCisKKy8qKgorICogQ2xhc3MgZm9yIHN0b3Jpbmcgc3d0IGJ1dHRvbiBpbmZvcm1hdGlvbi4KKyAqLworcHVibGljIGNsYXNzIEJ1dHRvbkluZm8geworCisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGJ1dHRvbk5hbWU7CisgIHByaXZhdGUgZmluYWwgU3RyaW5nIGJ1dHRvbklkOworICBwcml2YXRlIGZpbmFsIEJ1dHRvblR5cGUgYnV0dG9uVHlwZTsKKworICAvKioKKyAgICogQHBhcmFtIG5hbWUKKyAgICogQHBhcmFtIGlkCisgICAqLworICBwdWJsaWMgQnV0dG9uSW5mbyhmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIGlkLCBmaW5hbCBCdXR0b25UeXBlIGJ1dHRvblR5cGUpIHsKKyAgICB0aGlzLmJ1dHRvbk5hbWUgPSBuYW1lOworICAgIHRoaXMuYnV0dG9uSWQgPSBpZDsKKyAgICB0aGlzLmJ1dHRvblR5cGUgPSBidXR0b25UeXBlOworICB9CisKKworICAvKioKKyAgICogQHJldHVybiB0aGUgYnV0dG9uTmFtZQorICAgKi8KKyAgcHVibGljIFN0cmluZyBnZXRCdXR0b25OYW1lKCkgeworICAgIHJldHVybiB0aGlzLmJ1dHRvbk5hbWU7CisgIH0KKworCisgIC8qKgorICAgKiBAcmV0dXJuIHRoZSBidXR0b25JZAorICAgKi8KKyAgcHVibGljIFN0cmluZyBnZXRCdXR0b25JZCgpIHsKKyAgICByZXR1cm4gdGhpcy5idXR0b25JZDsKKyAgfQorCisKKyAgLyoqCisgICAqIEByZXR1cm4gdGhlIGJ1dHRvblR5cGUKKyAgICovCisgIHB1YmxpYyBCdXR0b25UeXBlIGdldEJ1dHRvblR5cGUoKSB7CisgICAgcmV0dXJuIHRoaXMuYnV0dG9uVHlwZTsKKyAgfQorCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoZmluYWwgT2JqZWN0IGJ1dHRvbkluZm8pIHsKKyAgICBpZiAoYnV0dG9uSW5mbyBpbnN0YW5jZW9mIEJ1dHRvbkluZm8pIHsKKyAgICAgIHJldHVybiB0aGlzLmJ1dHRvbk5hbWUuZXF1YWxzKCgoQnV0dG9uSW5mbykgYnV0dG9uSW5mbykuZ2V0QnV0dG9uTmFtZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisgICAgcmV0dXJuIHRoaXMuYnV0dG9uTmFtZS5oYXNoQ29kZSgpOworICB9Cit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9CdXR0b25UeXBlLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9CdXR0b25UeXBlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2YThlMQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL0J1dHRvblR5cGUuamF2YQpAQCAtMCwwICsxLDI3IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWw7CisKKworLyoqCisgKiBFbnVtIHJlcHJlc2VudGluZyBidXR0b24gdHlwZS4KKyAqLworcHVibGljIGVudW0gQnV0dG9uVHlwZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgICAgICogRm9yIEJyb3dzaW5nIGEgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgQlJPV1NFX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIEZvciBCcm93c2luZyBhIERpcmVjdG9yeS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgQlJPV1NFX0ZPTERFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgICAgICogRm9yIFJlbW92aW5nIGl0ZW1zLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBSRU1PVkUKKworfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvSUFtYWx0aGVhR2VuZXJhdG9yLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9JQW1hbHRoZWFHZW5lcmF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTBlNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvSUFtYWx0aGVhR2VuZXJhdG9yLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsOworCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBnZW5lcmF0b3IgaW50ZXJmYWNlIGNsYXNzIGZvciBBbWFsdGhlYSBnZW5lcmF0aW9uCisgKi8KK0BGdW5jdGlvbmFsSW50ZXJmYWNlCitwdWJsaWMgaW50ZXJmYWNlIElBbWFsdGhlYUdlbmVyYXRvciB7CisKKyAgLyoqCisgICAqIEZ1bmNpdG9uYWxpdHkgZm9yIGFtYWx0aGVhIGdlbmVyYXRpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0IEBQcm9wZXJ0aWVzCisgICAqCisgICAqIEBwYXJhbSBtb25pdG9yIElQcm9ncmVzc01vbml0b3IKKyAgICogQHBhcmFtIHByb3BlcnRpZXMgUHJvcGVydGllcworICAgKiBAcmV0dXJuIElTdGF0dXMKKyAgICovCisgIHB1YmxpYyBJU3RhdHVzIGV4ZWN1dGUoZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yLCBmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXMpOworCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9JT3B0aW9uc1Byb3ZpZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9JT3B0aW9uc1Byb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1ODgxMAotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL0lPcHRpb25zUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDIyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWw7CisKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworLyoqCisgKiBUaGlzIGlzIGFuIGludGVyZmFjZSB0byBoYW5kbGUgaW5wdXQvb3V0cHV0IFByb3BlcnRpZXMvT3B0aW9ucy4KKyAqLworcHVibGljIGludGVyZmFjZSBJT3B0aW9uc1Byb3ZpZGVyIHsKKworICAvKioKKyAgICogQHJldHVybiAtIENvbnRhaW5zIGFsbCBwcm9wZXJ0aWVzIChVSSBhbmQgVG9vbCBwcm9wZXJ0aWVzKQorICAgKi8KKyAgcHVibGljIFByb3BlcnRpZXMgZ2V0T3B0aW9ucygpOworCisKK30KKwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvTGFiZWxMaXN0QnV0dG9uQ3JlYXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvTGFiZWxMaXN0QnV0dG9uQ3JlYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4YjFjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9MYWJlbExpc3RCdXR0b25DcmVhdG9yLmphdmEKQEAgLTAsMCArMSwyMTQgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25BZGFwdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQnV0dG9uOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5GaWxlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxpc3Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKKworLyoqCisgKiBVdGlsaXR5IHRvIGNyZWF0ZSBsYWJlbCwgbGlzdCBhbmQgdGhlIGJ1dHRvbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBMYWJlbExpc3RCdXR0b25DcmVhdG9yIHsKKworICAvKioKKyAgICoge0BsaW5rIExhYmVsfQorICAgKi8KKyAgcHJpdmF0ZSBMYWJlbCBsYWJlbDsKKyAgLyoqCisgICAqIHtAbGluayBUZXh0fQorICAgKi8KKyAgcHJpdmF0ZSBMaXN0IGxpc3RCb3g7CisKKyAgcHJpdmF0ZSBmaW5hbCBqYXZhLnV0aWwuTGlzdDxCdXR0b24+IGJ1dHRvbnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIEJ1dHRvbkluZm8+IGJ1dHRvbkluZm9NYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgIC8qKgorICAgKiB0aGUgcHJvamVjdCBiYXNlIHBhdGgKKyAgICovCisgIHByaXZhdGUgU3RyaW5nIGJhc2VQYXRoOworCisKKyAgLyoqCisgICAqIEBwYXJhbSBwYXJlbnQgdGhlIHJvb3QgY29tcG9zaXRlIG9uIHdoaWNoIHRoZSBsYWJlbCAsbGlzdCBhbmQgYnV0dG9ucyBhcmUgY3JlYXRlZC4KKyAgICogQHBhcmFtIGxhYmVsTmFtZSB0aGUgbmFtZSBvZiB0aGUgbGFiZWwuCisgICAqIEBwYXJhbSBsaXN0Qm94SWQgdGhlIGxpc3QgaW5zdGFuY2UuCisgICAqIEBwYXJhbSBidXR0b25JbmZvTGlzdCBsaXN0IG9mIGJ1dHRvbmluZm8gaW5zdGFuY2VzCisgICAqLworICBwdWJsaWMgTGFiZWxMaXN0QnV0dG9uQ3JlYXRvcihmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBTdHJpbmcgbGFiZWxOYW1lLCBmaW5hbCBTdHJpbmcgbGlzdEJveElkLAorICAgICAgZmluYWwgamF2YS51dGlsLlNldDxCdXR0b25JbmZvPiBidXR0b25JbmZvTGlzdCkgeworICAgIGNyZWF0ZUNvbXBvbmVudChwYXJlbnQsIGxhYmVsTmFtZSwgbGlzdEJveElkLCBidXR0b25JbmZvTGlzdCk7CisgIH0KKworICAvKioKKyAgICogQHBhcmFtIHBhcmVudCBDb21wb3NpdGUgaW50byB3aGljaCB0aGlzIExhYmVsVGV4dEJ1dHRvbiBjb21wb3NpdGUgaXMgdG8gYmUgcGxhY2VkCisgICAqIEBwYXJhbSBsYWJlbE5hbWUgbGFiZWwncyB0ZXh0CisgICAqIEBwYXJhbSBsaXN0Qm94SWQgLSBsaXN0IEZpZWxkIElkCisgICAqIEBwYXJhbSBidXR0b25JbmZvTGlzdCBsaXN0IG9mIGJ1dHRvbmluZm8gaW5zdGFuY2VzCisgICAqLworICBwdWJsaWMgdm9pZCBjcmVhdGVDb21wb25lbnQoZmluYWwgQ29tcG9zaXRlIHBhcmVudCwgZmluYWwgU3RyaW5nIGxhYmVsTmFtZSwgZmluYWwgU3RyaW5nIGxpc3RCb3hJZCwKKyAgICAgIGZpbmFsIGphdmEudXRpbC5TZXQ8QnV0dG9uSW5mbz4gYnV0dG9uSW5mb0xpc3QpIHsKKyAgICAvLyBDcmVhdGUgTGFiZWwKKyAgICB0aGlzLmxhYmVsID0gbmV3IExhYmVsKHBhcmVudCwgU1dULkxFRlQpOworICAgIHRoaXMubGFiZWwuc2V0VGV4dChsYWJlbE5hbWUpOworICAgIHRoaXMubGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCBmYWxzZSwgZmFsc2UpKTsKKyAgICAvLyBDcmVhdGUgTGlzdCBGaWVsZAorICAgIHRoaXMubGlzdEJveCA9IG5ldyBMaXN0KHBhcmVudCwgU1dULkJPUkRFUik7CisgICAgdGhpcy5saXN0Qm94LnNldERhdGEoIm5hbWUiLCBsaXN0Qm94SWQpOworICAgIHRoaXMubGlzdEJveC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlKSk7CisKKworICAgIENvbXBvc2l0ZSBidXR0b25Db21wb3NpdGUgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworICAgIGJ1dHRvbkNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMSwgZmFsc2UpKTsKKyAgICBidXR0b25Db21wb3NpdGUuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCBmYWxzZSwgZmFsc2UsIDEsIC0xKSk7CisKKyAgICAvLyBDcmVhdGUgYnV0dG9ucworICAgIGZvciAoQnV0dG9uSW5mbyBidXR0b25JbmZvIDogYnV0dG9uSW5mb0xpc3QpIHsKKyAgICAgIEJ1dHRvbiBidXR0b24gPSBuZXcgQnV0dG9uKGJ1dHRvbkNvbXBvc2l0ZSwgU1dULlBVU0gpOworICAgICAgYnV0dG9uLnNldERhdGEoIm5hbWUiLCBidXR0b25JbmZvLmdldEJ1dHRvbklkKCkpOworICAgICAgYnV0dG9uLnNldFRleHQoYnV0dG9uSW5mby5nZXRCdXR0b25OYW1lKCkpOworICAgICAgYnV0dG9uLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuTk9ORSwgZmFsc2UsIGZhbHNlKSk7CisgICAgICB0aGlzLmJ1dHRvbnMuYWRkKGJ1dHRvbik7CisgICAgICB0aGlzLmJ1dHRvbkluZm9NYXAucHV0KGJ1dHRvbkluZm8uZ2V0QnV0dG9uTmFtZSgpLCBidXR0b25JbmZvKTsKKyAgICB9CisKKworICAgIEdyaWREYXRhIGxpc3REYXRhID0gKEdyaWREYXRhKSB0aGlzLmxpc3RCb3guZ2V0TGF5b3V0RGF0YSgpOworICAgIGxpc3REYXRhLmhlaWdodEhpbnQgPSB0aGlzLmxpc3RCb3guY29tcHV0ZVRyaW0oMCwgMCwgMCwgdGhpcy5saXN0Qm94LmdldEl0ZW1IZWlnaHQoKSAqIDQpLmhlaWdodDsKKworICB9CisKKyAgLyoqCisgICAqIEFkZHMgbGlzdGVuZXJzIHRvIHRoZSBidXR0b25zIG9mIHRoZSBsaXN0IGJveGVzLgorICAgKi8KKyAgcHVibGljIHZvaWQgYWRkTGlzdGVuZXJzKCkgeworICAgIGZvciAoQnV0dG9uIGIgOiB0aGlzLmJ1dHRvbnMpIHsKKyAgICAgIEJ1dHRvbkluZm8gYnV0dG9uSW5mbyA9IHRoaXMuYnV0dG9uSW5mb01hcC5nZXQoYi5nZXRUZXh0KCkpOworICAgICAgaWYgKGJ1dHRvbkluZm8uZ2V0QnV0dG9uVHlwZSgpLmVxdWFscyhCdXR0b25UeXBlLkJST1dTRV9GSUxFKSkgeworICAgICAgICBiLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgRmlsZURpYWxvZyBkaWFsb2cgPSBuZXcgRmlsZURpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpKTsKKyAgICAgICAgICAgIFN0cmluZyBmaWxlUGF0aCA9IGRpYWxvZy5vcGVuKCk7CisgICAgICAgICAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCkgeworICAgICAgICAgICAgICBMYWJlbExpc3RCdXR0b25DcmVhdG9yLnRoaXMubGlzdEJveC5hZGQoZmlsZVBhdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgICBlbHNlIGlmIChidXR0b25JbmZvLmdldEJ1dHRvblR5cGUoKS5lcXVhbHMoQnV0dG9uVHlwZS5CUk9XU0VfRk9MREVSKSkgeworICAgICAgICBiLmFkZFNlbGVjdGlvbkxpc3RlbmVyKG5ldyBTZWxlY3Rpb25BZGFwdGVyKCkgeworCisgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworICAgICAgICAgICAgRGlyZWN0b3J5RGlhbG9nIGRpYWxvZyA9IG5ldyBEaXJlY3RvcnlEaWFsb2coRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKSk7CisgICAgICAgICAgICBTdHJpbmcgZGlyZWN0b3J5UGF0aCA9IGRpYWxvZy5vcGVuKCk7CisgICAgICAgICAgICBpZiAoZGlyZWN0b3J5UGF0aCAhPSBudWxsKSB7CisgICAgICAgICAgICAgIExhYmVsTGlzdEJ1dHRvbkNyZWF0b3IudGhpcy5saXN0Qm94LmFkZChkaXJlY3RvcnlQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgZWxzZSBpZiAoYnV0dG9uSW5mby5nZXRCdXR0b25UeXBlKCkuZXF1YWxzKEJ1dHRvblR5cGUuUkVNT1ZFKSkgeworICAgICAgICB0aGlzLmxpc3RCb3gucmVtb3ZlKHRoaXMubGlzdEJveC5nZXRTZWxlY3Rpb25JbmRpY2VzKCkpOworICAgICAgfQorICAgIH0KKyAgfQorCisKKyAgLyoqCisgICAqIEBwYXJhbSBwYXRobmFtZQorICAgKi8KKyAgcHVibGljIHZvaWQgc2V0RmlsZVBhdGgoZmluYWwgU3RyaW5nIHBhdGhuYW1lKSB7CisgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMoKCkgLT4geworCisgICAgICBpZiAoKHRoaXMuYmFzZVBhdGggIT0gbnVsbCkgJiYgIXRoaXMuYmFzZVBhdGguaXNFbXB0eSgpKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgU3RyaW5nIHBhdGggPSBuZXcgRmlsZSh0aGlzLmJhc2VQYXRoKS5nZXRDYW5vbmljYWxQYXRoKCk7CisgICAgICAgICAgaWYgKHBhdGhuYW1lLmluZGV4T2YocGF0aCArIEZpbGUuc2VwYXJhdG9yQ2hhcikgIT0gLTEpIHsKKyAgICAgICAgICAgIHRoaXMubGlzdEJveC5hZGQocGF0aG5hbWUuc3Vic3RyaW5nKHRoaXMuYmFzZVBhdGgubGVuZ3RoKCkgLSAxKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHBhdGhuYW1lLmVxdWFsc0lnbm9yZUNhc2UocGF0aCkpIHsKKyAgICAgICAgICAgIHRoaXMubGlzdEJveC5hZGQoIiIpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMubGlzdEJveC5hZGQocGF0aG5hbWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgIHRoaXMubGlzdEJveC5hZGQocGF0aG5hbWUpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdGhpcy5saXN0Qm94LmFkZChwYXRobmFtZSk7CisgICAgICB9CisgICAgfSk7CisKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJuIHRoZSBsYWJlbE5hbWUKKyAgICovCisgIHB1YmxpYyBMYWJlbCBnZXRMYWJlbCgpIHsKKyAgICByZXR1cm4gdGhpcy5sYWJlbDsKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJuCisgICAqLworICBwdWJsaWMgamF2YS51dGlsLkxpc3Q8QnV0dG9uPiBnZXRCdXR0b25MaXN0KCkgeworICAgIHJldHVybiB0aGlzLmJ1dHRvbnM7CisgIH0KKworICAvKioKKyAgICogQHJldHVybgorICAgKi8KKyAgcHVibGljIE1hcDxTdHJpbmcsIEJ1dHRvbkluZm8+IGdldEJ1dHRvbkluZm9NYXAoKSB7CisgICAgcmV0dXJuIHRoaXMuYnV0dG9uSW5mb01hcDsKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJuCisgICAqLworICBwdWJsaWMgTGlzdCBnZXRMaXN0Qm94KCkgeworICAgIHJldHVybiB0aGlzLmxpc3RCb3g7CisgIH0KKworICAvKioKKyAgICogQHBhcmFtIHByb2plY3RMb2NhdGlvbiB0aGUgcHJvamVjdCBiYXNlIHBhdGggdG8gc2V0CisgICAqLworICBwdWJsaWMgdm9pZCBzZXRQcm9qZWN0UGF0aChmaW5hbCBTdHJpbmcgcHJvamVjdExvY2F0aW9uKSB7CisgICAgaWYgKHByb2plY3RMb2NhdGlvbi5zdWJzdHJpbmcocHJvamVjdExvY2F0aW9uLmxlbmd0aCgpIC0gMSkuZXF1YWxzKEZpbGUuc2VwYXJhdG9yKSkgeworICAgICAgdGhpcy5iYXNlUGF0aCA9IHByb2plY3RMb2NhdGlvbjsKKyAgICB9CisgICAgdGhpcy5iYXNlUGF0aCA9IHByb2plY3RMb2NhdGlvbiArIEZpbGUuc2VwYXJhdG9yOworICB9CisKKyAgLyoqCisgICAqIEByZXR1cm4gdGhlIHByb2plY3QgYmFzZSBwYXRoCisgICAqLworICBwdWJsaWMgU3RyaW5nIGdldFByb2plY3RQYXRoKCkgeworICAgIHJldHVybiB0aGlzLmJhc2VQYXRoOworICB9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL0xhYmVsVGV4dEJ1dHRvbkNyZWF0b3IuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL0xhYmVsVGV4dEJ1dHRvbkNyZWF0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTI1ZmMzCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvTGFiZWxUZXh0QnV0dG9uQ3JlYXRvci5qYXZhCkBAIC0wLDAgKzEsMzQ0IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWw7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OworCisKKy8qKgorICogVGhpcyBjbGFzcyBjcmVhdGVzIHRoZSBvZnRlbiB1c2VkIGNvbWJpbmF0aW9uIG9mIGxhYmVsLCB0ZXh0IGFuZCBidXR0b24KKyAqLworcHVibGljIGNsYXNzIExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IgeworCisgIC8qKgorICAgKiB7QGxpbmsgTGFiZWx9CisgICAqLworICBwcml2YXRlIExhYmVsIGxhYmVsOworICAvKioKKyAgICoge0BsaW5rIFRleHR9CisgICAqLworICBwcml2YXRlIFRleHQgdGV4dEZpZWxkOworICAvKioKKyAgICoge0BsaW5rIEJ1dHRvbn0KKyAgICovCisgIHByaXZhdGUgQnV0dG9uIGJ1dHRvbjsKKyAgLyoqCisgICAqIHRoZSBwcm9qZWN0IGJhc2UgcGF0aAorICAgKi8KKyAgcHJpdmF0ZSBTdHJpbmcgYmFzZVBhdGg7CisgIC8qKgorICAgKiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZ2l2ZW4gZmlsZQorICAgKi8KKyAgcHJpdmF0ZSBTdHJpbmcgYWJzb2x1dGVQYXRoID0gIiI7CisgIHByaXZhdGUgU3RyaW5nIG9wdGlvbmFsQnV0dG9uVGl0bGU7CisgIHByaXZhdGUgQnV0dG9uIG9wdGlvbmFsQnV0dG9uOworICBwcml2YXRlIGludCBvcHRpb25hbEJ1dHRvblN0eWxlOworICBwcml2YXRlIGZpbmFsIExpbmtlZEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IHRleHRIaXN0b3J5OworCisgIC8qKgorICAgKiBDb25zdHJ1Y3RvciB1c2VkIGZvciBMYWJlbFRleHRCdXR0b24gY29tcG9zaXRlLgorICAgKgorICAgKiBAcGFyYW0gcGFyZW50IC1QYXJlbnQgQ29tcG9zaXRlCisgICAqIEBwYXJhbSBsYWJlbE5hbWUgLSBMYWJlbCBOYW1lCisgICAqIEBwYXJhbSB0ZXh0RmllbGRJZCAtIFRleHQgRmllbGQgSWQKKyAgICogQHBhcmFtIGJ1dHRvbk5hbWUgLSBCdXR0b24gTmFtZQorICAgKiBAcGFyYW0gYnV0dG9uSWQgLSBCdXR0b24gSWQKKyAgICovCisgIHB1YmxpYyBMYWJlbFRleHRCdXR0b25DcmVhdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIFN0cmluZyBsYWJlbE5hbWUsIGZpbmFsIFN0cmluZyB0ZXh0RmllbGRJZCwKKyAgICAgIGZpbmFsIFN0cmluZyBidXR0b25OYW1lLCBmaW5hbCBTdHJpbmcgYnV0dG9uSWQpIHsKKyAgICBjcmVhdGVDb21wb25lbnQocGFyZW50LCBsYWJlbE5hbWUsIHRleHRGaWVsZElkLCBidXR0b25OYW1lLCBidXR0b25JZCk7CisgICAgdGhpcy50ZXh0SGlzdG9yeSA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKyAgfQorCisKKyAgLyoqCisgICAqIENvbnN0cnVjdG9yIHVzZWQgZm9yIExhYmVsVGV4dEJ1dHRvbiBjb21wb3NpdGUgd2l0aCBvcHRpb25hbCBidXR0b24KKyAgICoKKyAgICogQHBhcmFtIHBhcmVudCB7QGxpbmsgQ29tcG9zaXRlfQorICAgKiBAcGFyYW0gbGFiZWxOYW1lIExhYmVsIE5hbWUKKyAgICogQHBhcmFtIHRleHRGaWVsZElkIFRleHQgRmllbGQgaWQKKyAgICogQHBhcmFtIGJ1dHRvbk5hbWUgQnV0dG9uIG5hbWUKKyAgICogQHBhcmFtIGJ1dHRvbklkIEJ1dHRvbiBpZAorICAgKiBAcGFyYW0gb3B0QnV0dG9uU3R5bGUgT3B0aW9uYWwgYnV0dG9uIFN0eWxlCisgICAqIEBwYXJhbSBvcHRCdXR0b25UaXRsZSBPcHRpb25hbCBCdXR0b24gdGl0bGUKKyAgICovCisgIHB1YmxpYyBMYWJlbFRleHRCdXR0b25DcmVhdG9yKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIFN0cmluZyBsYWJlbE5hbWUsIGZpbmFsIFN0cmluZyB0ZXh0RmllbGRJZCwKKyAgICAgIGZpbmFsIFN0cmluZyBidXR0b25OYW1lLCBmaW5hbCBTdHJpbmcgYnV0dG9uSWQsIGZpbmFsIGludCBvcHRCdXR0b25TdHlsZSwgZmluYWwgU3RyaW5nIG9wdEJ1dHRvblRpdGxlKSB7CisgICAgdGhpcy5vcHRpb25hbEJ1dHRvblN0eWxlID0gb3B0QnV0dG9uU3R5bGU7CisgICAgdGhpcy5vcHRpb25hbEJ1dHRvblRpdGxlID0gb3B0QnV0dG9uVGl0bGU7CisgICAgY3JlYXRlQ29tcG9uZW50KHBhcmVudCwgbGFiZWxOYW1lLCB0ZXh0RmllbGRJZCwgYnV0dG9uTmFtZSwgYnV0dG9uSWQpOworICAgIHRoaXMudGV4dEhpc3RvcnkgPSBuZXcgTGlua2VkSGFzaE1hcDw+KCk7CisgIH0KKworCisgIC8qKgorICAgKiBAcmV0dXJuIGNoaWxkcmVuIGl0ZW1zLgorICAgKi8KKyAgcHVibGljIENvbnRyb2xbXSBnZXRDaGlsZHJlbigpIHsKKyAgICBMaXN0PENvbnRyb2w+IGNoaWxkcmVuID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgQ29udHJvbFtdIG1hbmRhdG9yeUNvbnRyb2xzID0gbmV3IENvbnRyb2xbXSB7IHRoaXMubGFiZWwsIHRoaXMudGV4dEZpZWxkLCB0aGlzLmJ1dHRvbiB9OworICAgIGNoaWxkcmVuLmFkZEFsbChBcnJheXMuYXNMaXN0KG1hbmRhdG9yeUNvbnRyb2xzKSk7CisgICAgLy8gQ2hlY2sgaWYgT3B0aW9uYWwgQnV0dG9uIGhhcyBiZWVuIHByb3ZpZGVkCisgICAgaWYgKGhhc09wdGlvbmFsQnV0dG9uKCkpIHsKKyAgICAgIGNoaWxkcmVuLmFkZCh0aGlzLm9wdGlvbmFsQnV0dG9uKTsKKyAgICB9CisgICAgcmV0dXJuIGNoaWxkcmVuLnRvQXJyYXkobmV3IENvbnRyb2xbY2hpbGRyZW4uc2l6ZSgpXSk7CisgIH0KKworICAvKioKKyAgICogQHBhcmFtIHBhcmVudCBDb21wb3NpdGUgaW50byB3aGljaCB0aGlzIExhYmVsVGV4dEJ1dHRvbiBjb21wb3NpdGUgaXMgdG8gYmUgcGxhY2VkCisgICAqIEBwYXJhbSBsYWJlbE5hbWUgbGFiZWwncyB0ZXh0CisgICAqIEBwYXJhbSB0ZXh0RmllbGRJZCAtIFRleHQgRmllbGQgSWQKKyAgICogQHBhcmFtIGJ1dHRvbk5hbWUgYnV0dG9uJ3MgdGV4dAorICAgKiBAcGFyYW0gYnV0dG9uSWQgLSBCdXR0b24gSWQKKyAgICovCisgIHB1YmxpYyB2b2lkIGNyZWF0ZUNvbXBvbmVudChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBTdHJpbmcgbGFiZWxOYW1lLCBmaW5hbCBTdHJpbmcgdGV4dEZpZWxkSWQsCisgICAgICBmaW5hbCBTdHJpbmcgYnV0dG9uTmFtZSwgZmluYWwgU3RyaW5nIGJ1dHRvbklkKSB7CisgICAgLy8gQ3JlYXRlIExhYmVsCisgICAgdGhpcy5sYWJlbCA9IG5ldyBMYWJlbChwYXJlbnQsIFNXVC5MRUZUKTsKKyAgICB0aGlzLmxhYmVsLnNldFRleHQobGFiZWxOYW1lKTsKKyAgICB0aGlzLmxhYmVsLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgZmFsc2UsIGZhbHNlKSk7CisgICAgLy8gQ3JlYXRlIFRleHQgRmllbGQKKyAgICB0aGlzLnRleHRGaWVsZCA9IG5ldyBUZXh0KHBhcmVudCwgU1dULkJPUkRFUik7CisgICAgdGhpcy50ZXh0RmllbGQuc2V0RGF0YSgibmFtZSIsIHRleHRGaWVsZElkKTsKKyAgICB0aGlzLnRleHRGaWVsZC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlKSk7CisgICAgdGhpcy50ZXh0RmllbGQuYWRkVmVyaWZ5TGlzdGVuZXIoZSAtPiB7CisgICAgICAvLyB0ZXh0IGZpZWxkIGNvbnRlbnQgYmVmb3JlIGNoYW5nZQorICAgICAgU3RyaW5nIGN1cnJlbnRUZXh0ID0gKChUZXh0KSBlLndpZGdldCkuZ2V0VGV4dCgpOworICAgICAgLy8gdGV4dCBmaWVsZCBjb250ZW50IGFmdGVyIGNoYW5nZQorICAgICAgU3RyaW5nIGNoYW5nZWRUZXh0ID0gY3VycmVudFRleHQuc3Vic3RyaW5nKDAsIGUuc3RhcnQpICsgZS50ZXh0ICsgY3VycmVudFRleHQuc3Vic3RyaW5nKGUuZW5kKTsKKyAgICAgIHZhbGlkYXRlVGV4dEVudHJ5KGNoYW5nZWRUZXh0KTsKKyAgICB9KTsKKworCisgICAgLy8gQ3JlYXRlIGJ1dHRvbgorICAgIHRoaXMuYnV0dG9uID0gbmV3IEJ1dHRvbihwYXJlbnQsIFNXVC5QVVNIKTsKKyAgICB0aGlzLmJ1dHRvbi5zZXREYXRhKCJuYW1lIiwgYnV0dG9uSWQpOworICAgIHRoaXMuYnV0dG9uLnNldFRleHQoYnV0dG9uTmFtZSk7CisgICAgdGhpcy5idXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkZJTEwsIFNXVC5GSUxMLCBmYWxzZSwgZmFsc2UsIDEsIC0xKSk7CisKKyAgICAvLyBDcmVhdGUgT3B0aW9uYWwgQnV0dG9uIGlmIG5lZWRlZAorICAgIGlmIChoYXNPcHRpb25hbEJ1dHRvbigpKSB7CisgICAgICAvLyBkZXBlbmRpbmcgb24gcGFnZSBpdCBjYW4gYmUgY2hlY2sgYm94IG9yIHB1c2ggYnV0dG9uCisgICAgICB0aGlzLm9wdGlvbmFsQnV0dG9uID0gbmV3IEJ1dHRvbihwYXJlbnQsIHRoaXMub3B0aW9uYWxCdXR0b25TdHlsZSk7CisgICAgICB0aGlzLm9wdGlvbmFsQnV0dG9uLnNldFRleHQodGhpcy5vcHRpb25hbEJ1dHRvblRpdGxlKTsKKyAgICAgIHRoaXMub3B0aW9uYWxCdXR0b24uc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoU1dULkxFRlQsIFNXVC5DRU5URVIsIGZhbHNlLCBmYWxzZSwgMywgMSkpOworICAgIH0KKyAgfQorCisKKyAgLyoqCisgICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGlzIExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IgY29tcG9uZW50IGhhcyB0aGUgb3B0aW9uYWwgTGFiZWwgKyBCdXR0b24sIGZhbHNlIG90aGVyd2lzZQorICAgKi8KKyAgcHJpdmF0ZSBib29sZWFuIGhhc09wdGlvbmFsQnV0dG9uKCkgeworICAgIHJldHVybiAhKCh0aGlzLm9wdGlvbmFsQnV0dG9uVGl0bGUgPT0gbnVsbCkgfHwgdGhpcy5vcHRpb25hbEJ1dHRvblRpdGxlLmlzRW1wdHkoKSk7CisgIH0KKworCisgIC8qKgorICAgKiBFbmFibGUgLyBEaXNhYmxlIHRoZSBjb250cm9sCisgICAqCisgICAqIEBwYXJhbSBlbmFibGVkIEluZGljYXRlcyBpZiB0aGUgY29udHJvbCBzaG91bGQgYmUgZW5hYmxlZCBvciBkaXNhYmxlZAorICAgKi8KKworICBwdWJsaWMgdm9pZCBzZXRFbmFibGVkKGZpbmFsIGJvb2xlYW4gZW5hYmxlZCkgeworICAgIGlmICh0aGlzLmxhYmVsICE9IG51bGwpIHsKKyAgICAgIHRoaXMubGFiZWwuc2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICB9CisgICAgaWYgKHRoaXMudGV4dEZpZWxkICE9IG51bGwpIHsKKyAgICAgIHRoaXMudGV4dEZpZWxkLnNldEVuYWJsZWQoZW5hYmxlZCk7CisgICAgfQorICAgIGlmICh0aGlzLmJ1dHRvbiAhPSBudWxsKSB7CisgICAgICB0aGlzLmJ1dHRvbi5zZXRFbmFibGVkKGVuYWJsZWQpOworICAgIH0KKyAgfQorCisgIC8qKgorICAgKiBtZXRob2QgdG8gcmV0YWluIHRoZSByZWxhdGl2ZSBwYXRoIHRvIHByb2plY3QgbGV2ZWwKKyAgICoKKyAgICogQHBhcmFtIHBhdGhuYW1lIDogc2V0IHBhdGggZnJvbSBVSQorICAgKi8KKyAgcHVibGljIHZvaWQgc2V0RmlsZVBhdGgoZmluYWwgU3RyaW5nIHBhdGhuYW1lKSB7CisKKyAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYygoKSAtPiB7CisKKyAgICAgIGlmICgodGhpcy5iYXNlUGF0aCAhPSBudWxsKSAmJiAhdGhpcy5iYXNlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBTdHJpbmcgcGF0aCA9IG5ldyBGaWxlKHRoaXMuYmFzZVBhdGgpLmdldENhbm9uaWNhbFBhdGgoKTsKKyAgICAgICAgICBpZiAocGF0aG5hbWUuaW5kZXhPZihwYXRoICsgRmlsZS5zZXBhcmF0b3JDaGFyKSAhPSAtMSkgeworICAgICAgICAgICAgdGhpcy50ZXh0RmllbGQuc2V0VGV4dChwYXRobmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlUGF0aC5sZW5ndGgoKSAtIDEpKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBpZiAocGF0aG5hbWUuZXF1YWxzSWdub3JlQ2FzZShwYXRoKSkgeworICAgICAgICAgICAgdGhpcy50ZXh0RmllbGQuc2V0VGV4dCgiIik7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGhpcy50ZXh0RmllbGQuc2V0VGV4dChwYXRobmFtZSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgdGhpcy50ZXh0RmllbGQuc2V0VGV4dChwYXRobmFtZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICB0aGlzLnRleHRGaWVsZC5zZXRUZXh0KHBhdGhuYW1lKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisKKyAgLyoqCisgICAqIFZhbGlkYXRlcyB0aGUgcHJvdmlkZWQgcGF0aCBpbnNpZGUgdGhpcyBMYWJlbFRleHRCdXR0b25DcmVhdG9yJ3MgdGV4dCBmaWVsZCBhbmQgdHJpZ2dlcnMgcmVzcGVjdGl2ZSBub3RpZmljYXRpb25zCisgICAqIHRvIGJlIGRpc3BsYXllZCBpbiB0aGlzIExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IncyBub3RpZmljYXRpb24gY29tcG9uZW50LgorICAgKgorICAgKiBAcGFyYW0gZmlsZVBhdGggdG8gYmUgdmFsaWRhdGVkCisgICAqLworICBwdWJsaWMgdm9pZCB2YWxpZGF0ZVRleHRFbnRyeShmaW5hbCBTdHJpbmcgZmlsZVBhdGgpIHsKKyAgICBpZiAoZmlsZVBhdGggIT0gbnVsbCkgeworICAgICAgU3RyaW5nIHRlbXBGaWxlUGF0aCA9IGZpbGVQYXRoLnRyaW0oKTsKKyAgICAgIGlmICghdGVtcEZpbGVQYXRoLmlzRW1wdHkoKSAmJgorICAgICAgICAgIChuZXcgRmlsZSh0ZW1wRmlsZVBhdGgpLmV4aXN0cygpIHx8IG5ldyBGaWxlKHRoaXMuYmFzZVBhdGggKyB0ZW1wRmlsZVBhdGgpLmV4aXN0cygpKSkgeworICAgICAgICBzZXRBYnNvbHV0ZVBhdGgodGVtcEZpbGVQYXRoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHRlbXBGaWxlUGF0aC5pc0VtcHR5KCkpIHsKKyAgICAgICAgdGhpcy5hYnNvbHV0ZVBhdGggPSAiIjsKKyAgICAgIH0KKyAgICB9CisgIH0KKworCisgIC8qKgorICAgKiBAcGFyYW0gZmlsZVBhdGgKKyAgICovCisgIHByaXZhdGUgdm9pZCBzZXRBYnNvbHV0ZVBhdGgoZmluYWwgU3RyaW5nIGZpbGVQYXRoKSB7CisgICAgaWYgKG5ldyBGaWxlKGZpbGVQYXRoKS5leGlzdHMoKSkgeworICAgICAgdGhpcy5hYnNvbHV0ZVBhdGggPSBmaWxlUGF0aDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAobmV3IEZpbGUoZmlsZVBhdGgpLmlzQWJzb2x1dGUoKSkgeworICAgICAgICB0aGlzLmFic29sdXRlUGF0aCA9IGZpbGVQYXRoOworICAgICAgfQorICAgICAgZWxzZSBpZiAobmV3IEZpbGUodGhpcy5iYXNlUGF0aCArIGZpbGVQYXRoKS5leGlzdHMoKSkgeworICAgICAgICB0aGlzLmFic29sdXRlUGF0aCA9IG5ldyBGaWxlKHRoaXMuYmFzZVBhdGggKyBmaWxlUGF0aCkuZ2V0QWJzb2x1dGVQYXRoKCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdGhpcy5hYnNvbHV0ZVBhdGggPSB0aGlzLmJhc2VQYXRoICsgZmlsZVBhdGg7CisgICAgICB9CisgICAgfQorICAgIHRoaXMudGV4dEhpc3RvcnkucHV0KHRoaXMubGFiZWwuZ2V0VGV4dCgpLCB0aGlzLmFic29sdXRlUGF0aCk7CisgIH0KKworCisgIC8qKgorICAgKiBAcmV0dXJuIHRoZSBsYWJlbE5hbWUKKyAgICovCisgIHB1YmxpYyBMYWJlbCBnZXRMYWJlbCgpIHsKKyAgICByZXR1cm4gdGhpcy5sYWJlbDsKKyAgfQorCisKKyAgLyoqCisgICAqIEByZXR1cm4gdGhlIHRleHRGaWVsZE5hbWUKKyAgICovCisKKyAgcHVibGljIFRleHQgZ2V0VGV4dEZpZWxkKCkgeworICAgIHJldHVybiB0aGlzLnRleHRGaWVsZDsKKyAgfQorCisKKyAgLyoqCisgICAqIEByZXR1cm4gdGhlIGJ1dHRvbk5hbWUKKyAgICovCisKKyAgcHVibGljIEJ1dHRvbiBnZXRCdXR0b24oKSB7CisgICAgcmV0dXJuIHRoaXMuYnV0dG9uOworICB9CisKKyAgLyoqCisgICAqIEByZXR1cm4gdGhlIE9wdGlvbmFsIEJ1dHRvbgorICAgKi8KKyAgcHVibGljIEJ1dHRvbiBnZXRPcHRpb25hbEJ1dHRvbigpIHsKKyAgICByZXR1cm4gdGhpcy5vcHRpb25hbEJ1dHRvbjsKKyAgfQorCisgIC8qKgorICAgKiBAcGFyYW0gcHJvamVjdExvY2F0aW9uIHRoZSBwcm9qZWN0IGJhc2UgcGF0aCB0byBzZXQKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldFByb2plY3RQYXRoKGZpbmFsIFN0cmluZyBwcm9qZWN0TG9jYXRpb24pIHsKKyAgICBpZiAocHJvamVjdExvY2F0aW9uLnN1YnN0cmluZyhwcm9qZWN0TG9jYXRpb24ubGVuZ3RoKCkgLSAxKS5lcXVhbHMoRmlsZS5zZXBhcmF0b3IpKSB7CisgICAgICB0aGlzLmJhc2VQYXRoID0gcHJvamVjdExvY2F0aW9uOworICAgIH0KKyAgICB0aGlzLmJhc2VQYXRoID0gcHJvamVjdExvY2F0aW9uICsgRmlsZS5zZXBhcmF0b3I7CisgIH0KKworICAvKioKKyAgICogQHJldHVybiB0aGUgcHJvamVjdCBiYXNlIHBhdGgKKyAgICovCisgIHB1YmxpYyBTdHJpbmcgZ2V0UHJvamVjdFBhdGgoKSB7CisgICAgcmV0dXJuIHRoaXMuYmFzZVBhdGg7CisgIH0KKworCisgIC8qKgorICAgKiBAcmV0dXJuIHRoZSBhYnNvbHV0ZVBhdGggb2YgdGhlIGZpbGUvZGlyZWN0b3J5IGdpdmVuIGluIHRleHQgZmllbGQKKyAgICovCisKKyAgcHVibGljIFN0cmluZyBnZXRBYnNvbHV0ZUZpbGVQYXRoKCkgeworICAgIHJldHVybiB0aGlzLmFic29sdXRlUGF0aDsKKyAgfQorCisKKyAgLyoqCisgICAqIEByZXR1cm4gdGhlIHRleHQgaGlzdG9yeQorICAgKi8KKyAgcHVibGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0VGV4dEhpc3RvcnkoKSB7CisgICAgcmV0dXJuIHRoaXMudGV4dEhpc3Rvcnk7CisgIH0KKworCisgIC8qKgorICAgKiBAcmV0dXJuIHRoZSBsb2NhdGlvbiBmb3IgdGhlIERpYWxvZyB0byBvcGVuIGluIHdoZW4gcHJlc3NpbmcgIkJyb3dzZSIgYnV0dG9uCisgICAqLworICBwdWJsaWMgU3RyaW5nIHByb3ZpZGVEaWFsb2dMb2NhdGlvbigpIHsKKyAgICBTdHJpbmcgbG9jYXRpb24gPSBnZXRQcm9qZWN0UGF0aCgpOworICAgIFN0cmluZyB0ZXh0RW50cnkgPSBnZXRUZXh0RmllbGQoKS5nZXRUZXh0KCk7CisKKyAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSh0ZXh0RW50cnkpOworICAgIC8vIGRpYWxvZyBwZXIgZGVmYXVsdCBzaGFsbCBvcGVuIGVpdGhlciBpbiBsb2NhdGlvbiBwcm92aWRlZCBpbiB0ZXh0IGZpZWxkIG9yIGluIHByb2plY3QgYmFzZSBwYXRoCisgICAgaWYgKCF0ZXh0RW50cnkuaXNFbXB0eSgpKSB7CisgICAgICAvLyB0cnkgdG8gc2V0IGxvY2F0aW9uIHRvIHByb3ZpZGVkIHBhdGggb2YgdGV4dCBmaWVsZAorICAgICAgaWYgKGZpbGUuZXhpc3RzKCkpIHsKKyAgICAgICAgLy8gYXMgaXMgKGZ1bGwgcGF0aCkKKyAgICAgICAgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgIGxvY2F0aW9uID0gZmlsZS5nZXRQYXRoKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgbG9jYXRpb24gPSBmaWxlLmdldFBhcmVudCgpOworICAgICAgICB9CisgICAgICB9CisgICAgICBlbHNlIGlmIChuZXcgRmlsZShnZXRQcm9qZWN0UGF0aCgpICsgdGV4dEVudHJ5KS5leGlzdHMoKSkgeworICAgICAgICAvLyBiYXNlIHBhdGggKyB0ZXh0IGZpZWxkIGVudHJ5IChmdWxsIHBhdGggPSBiYXNlIHBhdGggKyByZWxhdGl2ZSBwYXRoKQorICAgICAgICBsb2NhdGlvbiA9IG5ldyBGaWxlKGdldFByb2plY3RQYXRoKCkgKyB0ZXh0RW50cnkpLmdldFBhcmVudCgpOworICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbG9jYXRpb247CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvTm9TY3JvbGxGb3JtTGF5b3V0LmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9Ob1Njcm9sbEZvcm1MYXlvdXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmEyOTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvTm9TY3JvbGxGb3JtTGF5b3V0LmphdmEKQEAgLTAsMCArMSw0NiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsOworCitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmdyYXBoaWNzLlBvaW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5SZWN0YW5nbGU7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGF5b3V0OworCisvKioKKyAqIFRoaXMgbGF5b3V0IGlzIGludGVuZGVkIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSBib2R5IGNvbXBvc2l0ZSBvZiBhIEZvcm1QYWdlIHdpdGggYSBTY3JvbGxlZEZvcm0uIEl0IGVuc3VyZXMgdGhhdCB0aGUKKyAqIGJvZHkgY29tcG9zaXRlIHdpbGwgbmV2ZXIgZXhjZWVkIHRoZSBzaXplIG9mIHRoZSBmb3JtIHdpbmRvdyB0aGVyZWJ5IGluaGliaXRpbmcgdGhlIGZvcm0gZnJvbSBjcmVhdGluZyBzY3JvbGxiYXJzLgorICovCitwdWJsaWMgY2xhc3MgTm9TY3JvbGxGb3JtTGF5b3V0IGV4dGVuZHMgTGF5b3V0IHsKKworICAvKioKKyAgICogQWx3YXlzIHJldHVybiAxLDEuIEluZGljYXRpbmcgdG8gdGhlIHBhcmVudCBGb3JtIHRoYXQgdGhpcyBjb21wb3NpdGUgd2lsbCBzaHJpbmsgdG8gdGhlIGRlc2lyZWQgc2l6ZS4KKyAgICovCisgIEBPdmVycmlkZQorICBwcm90ZWN0ZWQgUG9pbnQgY29tcHV0ZVNpemUoZmluYWwgQ29tcG9zaXRlIGNvbXBvc2l0ZSwgZmluYWwgaW50IHdIaW50LCBmaW5hbCBpbnQgaEhpbnQsIGZpbmFsIGJvb2xlYW4gZmx1c2hDYWNoZSkgeworICAgIC8vIENvbXB1dGUgc2llIGZvciBQb2ludAorICAgIHJldHVybiBuZXcgUG9pbnQoMSwgMSk7CisgIH0KKworICAvKioKKyAgICogQWxsIGNoaWxkIGNvbXBvc2l0ZXMgd2lsbCBiZSBtYWRlIHRoZSBzaXplIG9mIHRoZSBmb3JtLgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHByb3RlY3RlZCB2b2lkIGxheW91dChmaW5hbCBDb21wb3NpdGUgY29tcG9zaXRlLCBmaW5hbCBib29sZWFuIGZsdXNoQ2FjaGUpIHsKKyAgICAvLyB8R2V0IHRoZSBjaGlsZHJlbiBmcm9tIHRoZSBjb21wb3NpdGUKKyAgICBDb250cm9sW10gY2hpbGRyZW4gPSBjb21wb3NpdGUuZ2V0Q2hpbGRyZW4oKTsKKyAgICAvLyBHZXQgY2xpZW50IGFyZWEgZm9yIGVhY2ggY2hpbGQgZWxlbWVudCBhbmQgc2V0IGJvdW5kcworICAgIGZvciAoQ29udHJvbCBlbGVtZW50IDogY2hpbGRyZW4pIHsKKyAgICAgIC8vIEdldCBjbGllbnQgYXJlYQorICAgICAgUmVjdGFuZ2xlIGJvdW5kcyA9IGNvbXBvc2l0ZS5nZXRDbGllbnRBcmVhKCk7CisgICAgICBpZiAoYm91bmRzICE9IG51bGwpIHsKKyAgICAgICAgLy8gU2V0IGJvdW5kcworICAgICAgICBlbGVtZW50LnNldEJvdW5kcyhib3VuZHMpOworICAgICAgfQorICAgIH0KKyAgfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL1NDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvU0NBVG9vbHNQcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyODM3NjYuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvU0NBVG9vbHNQcmVmZXJlbmNlQ29uc3RhbnRzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotLyoqDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQotICogDQotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQotICogDQotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICovDQotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWw7DQotDQotDQotLyoqDQotICogQ29uc3RhbnRzIGNsYXNzIHRvIGNvbnRhaW4gYWxsIHRoZSBjb25zdGFudHMgdXNlZCBpbiB1aSBmZWF0dXJlcw0KLSAqLw0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMgew0KLQ0KLSAgLyoqDQotICAgKiBQcml2YXRlIENvbnN0cnVjdG9yDQotICAgKi8NCi0gIHByaXZhdGUgU0NBVG9vbHNQcmVmZXJlbmNlQ29uc3RhbnRzKCkgew0KLSAgICAvLyBQcml2YXRlIGNvbnN0cnVjdG9yDQotICB9DQotDQotICAvKioNCi0gICAqIFNDQSBUb29sIGlkDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDQV9UT09MX0lEID0gIlNDQVRPT0xzIjsNCi0NCi0gIC8qKg0KLSAgICogZGVmYXVsdCBkaXJlY3Rvcnkgb2YgdGhlIGxvZyBmaWxlDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRElSRUNUT1JZID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmhvbWUiKTsNCi0NCi0gIC8qKg0KLSAgICogcHJlZmVyZW5jZSBuYW1lIG9mIHRoZSBsb2cgZmlsZQ0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUX0xPR0ZJTEVOQU1FID0gIkxPR19GSUxFX05BTUUiOw0KLQ0KLSAgLyoqDQotICAgKiBwcmVmZXJlbmNlIG5hbWUgb2YgdGhlIGxvZyBmaWxlIGRpcmVjdG9yeQ0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVhUX0xPR0ZJTEVESVJFQ1RPUlkgPSAiTE9HX0ZJTEVfRElSRUNUT1JZIjsNCi0NCi0gIC8qKg0KLSAgICogcHJlZmVyZW5jZSBuYW1lIG9mIHRoZSByYWRpbyBidXR0b25zDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNDQV9MT0dHRVIgPSAiU0NBX0xPR0dFUiI7DQotDQotICAvKioNCi0gICAqIHByZWZlcmVuY2UgcGFnZSBkZXNjcmlwdGlvbg0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQUkVGRVJFTkNFX1BBR0VfREVTQ1JJUFRJT04gPSAiR2VuZXJhbCBzZXR0aW5ncyBmb3IgbXVsdGljb3JlIHRvb2xzIjsNCi0NCi0gIC8qKg0KLSAgICogTG9nIEZpbGUgcmFkaW8gYnV0dG9uLg0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0dfRklMRSA9ICJMb2cgRmlsZSI7DQotDQotDQotICAvKioNCi0gICAqIEVycm9yIExvZyByYWRpbyBidXR0b24uDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVSUk9SX0xPRyA9ICJFcnJvciBMb2ciOw0KLQ0KLSAgLyoqDQotICAgKiBFY2xpcHNlIENvbnNvbGUgcmFkaW8gYnV0dG9uLg0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFQ0xJUFNFX0NPTlNPTEUgPSAiRWNsaXBzZSBDb25zb2xlIjsNCi0NCi0gIC8qKg0KLSAgICogUHJvYmxlbXMgTG9nIHJhZGlvIGJ1dHRvbi4NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPQkxFTVNfTE9HID0gIlByb2JsZW1zIExvZyI7DQotDQotICAvKioNCi0gICAqIERlYnVnIG1vZGUgY2hlY2sgYm94IGxhYmVsDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFQlVHX01PREVfTEFCRUwgPSAiRW5hYmxlL0Rpc2FibGUgZGVidWcgbW9kZSI7DQotICAvKioNCi0gICAqIERlYnVnIG1vZGUga2V5DQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFQlVHX01PREUgPSAiREVCVUdfTU9ERSI7DQotDQotICAvKioNCi0gICAqIE9QVCBleHBvcnQgZmFpbGVkIG1lc3NhZ2UNCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BUX0VYUE9SVF9GQUlMRUQgPSAiIjsNCi0gIC8qKg0KLSAgICogT1BUIGV4cG9ydCBzdWNjZXNzIG1lc3NhZ2UNCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BUX0VYUE9SVF9TVUNDRVNTID0gIlByZWZlcmVuY2VzIGFwcGVuZGVkIHRvIHRoZSBnaXZlbiBmaWxlIHN1Y2Nlc3NmdWxseSI7DQotICAvKioNCi0gICAqIE1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIHdoZW4gdGhlIGZpbGUgbmFtZSBvciB0aGUgdG9vbCBpZCBpcyBlbXB0eQ0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTVBUWV9GSUxFX09SX1RPT0xfSUQgPSAiVG9vbCBJRCBhbmQgSW5wdXQgZmlsZSBwYXRoIGNhbm5vdCBiZSBlbXB0eSBvciBudWxsIjsNCi0gIC8qKg0KLSAgICogTWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBmaWxlIHByb3ZpZGVkIGlzIGludmFsaWQNCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5WQUxJRF9FWFQgPQ0KLSAgICAgICJUaGUgaW5wdXQgZmlsZSBzaG91bGQgaGF2ZSAub3B0IGV4dGVuc2lvbi4gQ3JlYXRlIGFuIG9wdCBmaWxlIGFuZCB0cnkgYWdhaW4iOw0KLSAgLyoqDQotICAgKiBNZXNzYWdlIHRvIGJlIGRpc3BsYXllZCB3aGVuIHRoZSBmaWxlIHByb3ZpZGVkIGlzIGludmFsaWQNCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5WQUxJRF9GSUxFID0gIk5vIGZpbGUgZXhpc3RzIGluIHRoZSBwYXRoIHByb3ZpZGVkLiBDcmVhdGUgYW4gb3B0IGZpbGUgYW5kIHRyeSBhZ2FpbiI7DQotICAvKioNCi0gICAqIE1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIHdoZW4gdGhlIHRvb2QgaWQgcHJvdmlkZWQgaXMgaW52YWxpZA0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBJTlZBTElEX1RPT0xJRCA9ICJJbnZhbGlkIHRvb2wgaWQuIFBsZWFzZSBjaGVjayBhbmQgcmV0cnkiOw0KLSAgLyoqDQotICAgKiBPcHRpb25zIGZpbGUgZXh0ZW5zaW9uDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9QVElPTlNfRklMRV9FWFQgPSAiLm9wdCI7DQotDQotDQotfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL1NDQVRvb2xzVUlVdGlsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9TQ0FUb29sc1VJVXRpbC5qYXZhCmluZGV4IGQwYTI1YjkuLjkwZTRlZWMgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL1NDQVRvb2xzVUlVdGlsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3V0aWwvU0NBVG9vbHNVSVV0aWwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpAQCAtMTUsMjggKzE1LDE2IEBACiBwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbDsNCiANCiBpbXBvcnQgamF2YS5pby5GaWxlOw0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOw0KIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7DQotaW1wb3J0IGphdmEudXRpbC5NYXA7DQotaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOw0KLWltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOw0KIA0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcuZXhjZXB0aW9uLkFwcDRtY0xvZ2dlckV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nLm1hbmFnZXIuTG9nbWFuYWdlcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nLnV0aWwuU0NBTG9nQ29uc3RhbnRzOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLkFjdGl2YXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS5wcmVmZXJlbmNlcy5pbnRlcmZhY2VzLklFeHBvcnRQcmVmZXJlbmNlczsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsLnBhcnNlcnMuT3B0aW9uc0ZpbGVQYXJzZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQ29uZmlndXJhdGlvbkVsZW1lbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JRXh0ZW5zaW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSW52YWxpZFJlZ2lzdHJ5T2JqZWN0RXhjZXB0aW9uOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUHJvamVjdFNjb3BlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsNCitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOw0KIA0KIC8qKg0KICAqIFV0aWxpdGllcyBmb3IgYWxsIHRoZSBTQ0EgdWkgb3BlcmF0aW9ucw0KQEAgLTQ0LDIzMSArMzIsMTEyIEBACiBwdWJsaWMgZmluYWwgY2xhc3MgU0NBVG9vbHNVSVV0aWwgew0KIA0KICAgLyoqDQotICAgKiBNYXAgdGhhdCBjb250YWlucyBhbGwgdGhlIGtleXMgdGhhdCBhcmUgdG8gYmUgZXhwb3J0ZWQgZm9yIGEgZ2l2ZW4gdG9vbA0KLSAgICovDQotICBwcml2YXRlIHN0YXRpYyBIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBleHBvcnRLZXlMaXN0ID0gbnVsbDsNCi0NCi0gIHByaXZhdGUgc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBJUHJlZmVyZW5jZVN0b3JlPiBwcmVmZXJlbmNlU3RvcmVNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIElQcmVmZXJlbmNlU3RvcmU+KCk7DQotDQotICAvKioNCi0gICAqIEV4dGVuc2lvbiBwb2ludCBpZCBvZiB7QGNvZGUgcHJvZHVjdE5hbWVBbmRWZXJzaW9uRGVmaW5pdGlvbn0gZXh0ZW5zaW9uIHBvaW50DQotICAgKi8NCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRfUE9JTlRfSUQgPSAib3JnLmVjbGlwc2UuYXBwNG1jLnVpLmV4cG9ydE9wdGlvbnMiOw0KLQ0KLSAgLyoqDQogICAgKiBQcml2YXRlIGNvbnN0cnVjdG9yDQogICAgKi8NCiAgIHByaXZhdGUgU0NBVG9vbHNVSVV0aWwoKSB7DQogICAgIC8vIFByaXZhdGUgY29uc3RydWN0b3INCiAgIH0NCiANCi0gIC8qKg0KLSAgICogTG9hZHMgdGhlIGNvbnRyaWJ1dGVkIGtleXMgdGhhdCBhcmUgdG8gYmUgZXhwb3J0ZWQgYXMgb3B0aW9ucyBmaWxlDQotICAgKi8NCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgbG9hZEV4cG9ydEtleUNvbnRyaWJ1dGlvbnMoKSB7DQotICAgIHRyeSB7DQotICAgICAgaWYgKChleHBvcnRLZXlMaXN0ID09IG51bGwpKSB7DQotICAgICAgICBzeW5jaHJvbml6ZWQgKFNDQVRvb2xzVUlVdGlsLmNsYXNzKSB7DQotICAgICAgICAgIGV4cG9ydEtleUxpc3QgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8U3RyaW5nPj4oKTsNCi0gICAgICAgIH0NCi0gICAgICB9DQotICAgICAgSUV4dGVuc2lvbltdIGV4dGVuc2lvbnMgPSBQbGF0Zm9ybS5nZXRFeHRlbnNpb25SZWdpc3RyeSgpLmdldEV4dGVuc2lvblBvaW50KEVYVF9QT0lOVF9JRCkuZ2V0RXh0ZW5zaW9ucygpOw0KLSAgICAgIGZvciAoSUV4dGVuc2lvbiBleHRlbnNpb24gOiBleHRlbnNpb25zKSB7DQotICAgICAgICBJQ29uZmlndXJhdGlvbkVsZW1lbnRbXSBjb25maWdFbGVtZW50cyA9IGV4dGVuc2lvbi5nZXRDb25maWd1cmF0aW9uRWxlbWVudHMoKTsNCi0gICAgICAgIGZvciAoSUNvbmZpZ3VyYXRpb25FbGVtZW50IGNvbmZpZ0VsZW1lbnQgOiBjb25maWdFbGVtZW50cykgew0KLSAgICAgICAgICBTdHJpbmcgcHJlZmVyZW5jZUNsYXNzID0gY29uZmlnRWxlbWVudC5nZXRBdHRyaWJ1dGUoInByZWZlcmVuY2VzIik7DQotICAgICAgICAgIFN0cmluZyB0b29sSWQgPSBjb25maWdFbGVtZW50LmdldEF0dHJpYnV0ZSgidG9vbCIpOw0KLSAgICAgICAgICBleHBvcnRLZXlMaXN0LnB1dCh0b29sSWQsIGZldGNoS2V5c0Zyb21DbGFzcyhwcmVmZXJlbmNlQ2xhc3MsIGV4dGVuc2lvbiwgZXhwb3J0S2V5TGlzdC5nZXQodG9vbElkKSwgdG9vbElkKSk7DQotICAgICAgICB9DQotICAgICAgfQ0KLSAgICB9DQotICAgIGNhdGNoIChJbnZhbGlkUmVnaXN0cnlPYmplY3RFeGNlcHRpb24gZSkgew0KLSAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2dFeGNlcHRpb24oU0NBVG9vbHNVSVV0aWwuY2xhc3MsIGUsIFNDQUxvZ0NvbnN0YW50cy5QTFVHSU5fSUQpOw0KLSAgICB9DQotICB9DQogDQogICAvKioNCi0gICAqIEZldGNoZXMgdGhlIGtleXMgdG8gYmUgZXhwb3J0ZWQgZnJvbSB0aGUgY29udHJpYnV0ZWQgY2xhc3MgYW5kIHJldHVybnMgdGhlIGxpc3QNCisgICAqIG1ldGhvZCB0byBnZXQgdGhlIGFic29sdXRlIHBhdGggdG8gcHJvamVjdCBsZXZlbA0KICAgICoNCi0gICAqIEBwYXJhbSBwcmVmZXJlbmNlQ2xhc3MNCi0gICAqIEBwYXJhbSBleHRlbnNpb24gVGhlIGV4dGVuc2lvbiBmcm9tIHdoaWNoDQotICAgKiBAcGFyYW0ga2V5TGlzdCBUaGUga2V5IGxpc3QuIG51bGwgaW4gY2FzZSBpdHMgZW1wdHkNCi0gICAqIEByZXR1cm4gUmV0dXJucyB0aGUga2V5TGlzdCB0byBiZSBhZGRlZCB0byB0aGUgdG9vbA0KKyAgICogQHBhcmFtIHByb2plY3RQYXRoIC0gcHJvamVjdCBwYXRoDQorICAgKiBAcGFyYW0gYWJzb2x1dGVPclJlbGF0aXZlUGF0aCA6IHJlbGF0aXZlIHBhdGggb2YgdGhlIGZpbGUNCisgICAqIEByZXR1cm4gYWJzb2x1dGUgcGF0aCBvZiB0aGUgZmlsZQ0KICAgICovDQotICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikNCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8U3RyaW5nPiBmZXRjaEtleXNGcm9tQ2xhc3MoZmluYWwgU3RyaW5nIHByZWZlcmVuY2VDbGFzcywgZmluYWwgSUV4dGVuc2lvbiBleHRlbnNpb24sDQotICAgICAgZmluYWwgTGlzdDxTdHJpbmc+IGtleUxpc3QsIGZpbmFsIFN0cmluZyB0b29sSWQpIHsNCi0gICAgaWYgKHByZWZlcmVuY2VDbGFzcyAhPSBudWxsKSB7DQotICAgICAgQ2xhc3M8SUV4cG9ydFByZWZlcmVuY2VzPiBwcmVmZXJlbmNlOw0KLSAgICAgIHRyeSB7DQotICAgICAgICBwcmVmZXJlbmNlID0gKENsYXNzPElFeHBvcnRQcmVmZXJlbmNlcz4pIFBsYXRmb3JtLmdldEJ1bmRsZShleHRlbnNpb24uZ2V0Q29udHJpYnV0b3IoKS5nZXROYW1lKCkpDQotICAgICAgICAgICAgLmxvYWRDbGFzcyhwcmVmZXJlbmNlQ2xhc3MpOw0KLSAgICAgICAgSUV4cG9ydFByZWZlcmVuY2VzIHByZWZlcmVuY2VJbnN0YW5jZSA9IHByZWZlcmVuY2UubmV3SW5zdGFuY2UoKTsNCi0gICAgICAgIHByZWZlcmVuY2VTdG9yZU1hcC5wdXQodG9vbElkLCBwcmVmZXJlbmNlSW5zdGFuY2UuZ2V0UHJlZmVyZW5jZVN0b3JlKCkpOw0KLSAgICAgICAgaWYgKGtleUxpc3QgPT0gbnVsbCkgew0KLSAgICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBuZXdMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQotICAgICAgICAgIG5ld0xpc3QuYWRkQWxsKHByZWZlcmVuY2VJbnN0YW5jZS5rZXlzVG9FeHBvcnQoKSk7DQotICAgICAgICAgIHJldHVybiBuZXdMaXN0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAga2V5TGlzdC5hZGRBbGwocHJlZmVyZW5jZUluc3RhbmNlLmtleXNUb0V4cG9ydCgpKTsNCi0gICAgICB9DQotICAgICAgY2F0Y2ggKENsYXNzTm90Rm91bmRFeGNlcHRpb24gfCBJbnZhbGlkUmVnaXN0cnlPYmplY3RFeGNlcHRpb24gfCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uDQotICAgICAgICAgIHwgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7DQotICAgICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nRXhjZXB0aW9uKFNDQVRvb2xzVUlVdGlsLmNsYXNzLCBlLCBTQ0FMb2dDb25zdGFudHMuUExVR0lOX0lEKTsNCi0gICAgICB9DQotICAgIH0NCi0gICAgcmV0dXJuIGtleUxpc3Q7DQotICB9DQotDQotICAvKioNCi0gICAqIFVzZXMgdGhlIHByb3BlcnRpZXMgQVBJIHRvIGV4cG9ydCB0aGUgcHJlZmVyZW5jZXMgdG8gdGhlIG9wdGlvbnMgZmlsZQ0KLSAgICoNCi0gICAqIEBwYXJhbSBvcEZpbGUgVGhlIG9wdGlvbnMgZmlsZSB0byB3aGljaCB0aGUgcHJvcGVydGllcyBhcmUgdG8gYmUgZXhwb3J0ZWQNCi0gICAqIEBwYXJhbSBzdG9yZSB0aGUgZ2l2ZW4gcHJlZmVyZW5jZSBzdG9yZQ0KLSAgICogQHBhcmFtIHRvb2xJZCBUaGUgdG9vbCBmb3Igd2hpY2ggdGhlIHByZWZlcmVuY2VzIGFyZSB0byBiZSBleHBvcnRlZCB0byB0aGUgb3B0aW9ucyBmaWxlDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBleHBvcnRQcm9wZXJ0aWVzKGZpbmFsIEZpbGUgb3BGaWxlLCBmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBmaW5hbCBTdHJpbmcgdG9vbElkKSB7DQotICAgIExpc3Q8U3RyaW5nPiBrZXlzVG9FeHBvcnQgPSBnZXRLZXlzVG9FeHBvcnQodG9vbElkKTsNCi0gICAgSVByZWZlcmVuY2VTdG9yZSBwcmVmU3RvcmUgPSBzdG9yZTsNCi0gICAgaWYgKHByZWZTdG9yZSA9PSBudWxsKSB7DQotICAgICAgcHJlZlN0b3JlID0gcHJlZmVyZW5jZVN0b3JlTWFwLmdldCh0b29sSWQpOw0KLSAgICB9DQorICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQcm9qZWN0QWJzb2x1dGVGaWxlUGF0aChmaW5hbCBTdHJpbmcgcHJvamVjdFBhdGgsIGZpbmFsIFN0cmluZyBhYnNvbHV0ZU9yUmVsYXRpdmVQYXRoKSB7DQogICAgIHRyeSB7DQotICAgICAgdXBkYXRlQW5kU2F2ZVByb3BlcnRpZXMob3BGaWxlLCBrZXlzVG9FeHBvcnQsIHByZWZTdG9yZSk7DQorICAgICAgaWYgKChwcm9qZWN0UGF0aCAhPSBudWxsKSAmJiAoYWJzb2x1dGVPclJlbGF0aXZlUGF0aCAhPSBudWxsKSkgew0KKyAgICAgICAgLy8gZ2V0IGNhbm9uaWNhbCBwYXRoDQorICAgICAgICBTdHJpbmcgcGF0aCA9IG5ldyBGaWxlKHByb2plY3RQYXRoKS5nZXRDYW5vbmljYWxQYXRoKCk7DQorICAgICAgICBpZiAobmV3IEZpbGUoYWJzb2x1dGVPclJlbGF0aXZlUGF0aCkuaXNBYnNvbHV0ZSgpKSB7DQorICAgICAgICAgIHJldHVybiBhYnNvbHV0ZU9yUmVsYXRpdmVQYXRoOw0KKyAgICAgICAgfQ0KKyAgICAgICAgRmlsZSBwcm9qZWN0QWJzUGF0aCA9IG5ldyBGaWxlKHBhdGggKyBGaWxlLnNlcGFyYXRvciArIGFic29sdXRlT3JSZWxhdGl2ZVBhdGgpOw0KKyAgICAgICAgaWYgKHByb2plY3RBYnNQYXRoLmV4aXN0cygpKSB7DQorICAgICAgICAgIHJldHVybiBwcm9qZWN0QWJzUGF0aC5nZXRBYnNvbHV0ZVBhdGgoKTsNCisgICAgICAgIH0NCisgICAgICB9DQorICAgICAgcmV0dXJuIGFic29sdXRlT3JSZWxhdGl2ZVBhdGg7DQogICAgIH0NCiAgICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0gICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nRXhjZXB0aW9uKFNDQVRvb2xzVUlVdGlsLmNsYXNzLCBlLCBBY3RpdmF0b3IuUExVR0lOX0lEKTsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBTYXZlcyB0aGUgZ2l2ZW4gcHJvcGVydGllcyB0byB0aGUgZ2l2ZW4gZmlsZQ0KLSAgICoNCi0gICAqIEBwYXJhbSBwcm9wIHRoZSBwcm9wZXJ0aWVzIHRvIGJlIHNhdmVkDQotICAgKiBAcGFyYW0gb3BGaWxlIFRoZSBmaWxlIHRvIHdoaWNoIHRoZSBwcm9wZXJ0aWVzIGFyZSB0byBiZSBzYXZlZA0KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBleGNlcHRpb24gaW4gY2FzZSBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZw0KLSAgICovDQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNhdmVQcm9wZXJ0aWVzKGZpbmFsIFByb3BlcnRpZXMgcHJvcGVydGllcywgZmluYWwgRmlsZSBvcEZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQotICAgIEZpbGVPdXRwdXRTdHJlYW0gZnIgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvcEZpbGUpOw0KLSAgICBwcm9wZXJ0aWVzLnN0b3JlKGZyLCAiUHJvcGVydGllcyIpOw0KLSAgICBmci5jbG9zZSgpOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBSZXRyZWl2ZXMgdGhlIGtleXMgZm9yIHRoZSBnaXZlbiB0b29sIGlkDQotICAgKg0KLSAgICogQHBhcmFtIHRvb2xJZCBTdHJpbmcNCi0gICAqIEByZXR1cm4ge0BsaW5rIFN0cmluZ30NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0S2V5c1RvRXhwb3J0KGZpbmFsIFN0cmluZyB0b29sSWQpIHsNCi0gICAgaWYgKChleHBvcnRLZXlMaXN0ID09IG51bGwpKSB7DQotICAgICAgbG9hZEV4cG9ydEtleUNvbnRyaWJ1dGlvbnMoKTsNCi0gICAgfQ0KLSAgICByZXR1cm4gZXhwb3J0S2V5TGlzdC5nZXQodG9vbElkKTsNCi0gIH0NCi0NCi0NCi0gIC8qKg0KLSAgICogQXBwZW5kcyB0aGUgZ2l2ZW4gcHJlZmVyZW5jZXMgdG8gdGhlIHByb3ZpZGVkIGlucHV0IGZpbGUNCi0gICAqDQotICAgKiBAcGFyYW0gaW5wdXRPcHRGaWxlUGF0aCBUSGUgaW5wdXQgb3B0aW9ucyBmaWxlIHRvIHdoaWNoIHRoZSBwcmVmZXJlbmNlcyBhcmUgZXhwb3J0ZWQNCi0gICAqIEBwYXJhbSB0b29sSWQgVGhlIHRvb2wgZm9yIHdoaWNoIHRoZSBwcmVmZXJlbmNlcyBhcmUgdG8gYmUgZXhwb3J0ZWQNCi0gICAqIEB0aHJvd3MgSU9FeGNlcHRpb24gRXhjZXB0aW9uIGluIGNhc2Ugc29tZXRoaW5nIGdvZXMgd3JvbmcNCi0gICAqIEB0aHJvd3MgQXBwNG1jTG9nZ2VyRXhjZXB0aW9uIGlmIHRoZSB2YWxpZGF0aW9uIGZhaWxzDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBleHBvcnRQcm9wZXJ0aWVzVG9JbnB1dEZpbGUoZmluYWwgU3RyaW5nIGlucHV0T3B0RmlsZVBhdGgsIGZpbmFsIFN0cmluZyB0b29sSWQpDQotICAgICAgdGhyb3dzIElPRXhjZXB0aW9uLCBBcHA0bWNMb2dnZXJFeGNlcHRpb24gew0KLQ0KLSAgICBGaWxlIGlucHV0RmlsZSA9IG5ldyBGaWxlKGlucHV0T3B0RmlsZVBhdGgpOw0KLSAgICB2YWxpZGF0ZSh0b29sSWQsIGlucHV0T3B0RmlsZVBhdGgsIGlucHV0RmlsZSk7DQotICAgIExpc3Q8U3RyaW5nPiBrZXlzVG9FeHBvcnQgPSBnZXRLZXlzVG9FeHBvcnQodG9vbElkKTsNCi0gICAgaWYgKCFleHBvcnRLZXlMaXN0LmNvbnRhaW5zS2V5KHRvb2xJZCkpIHsNCi0gICAgICB0aHJvdyBuZXcgQXBwNG1jTG9nZ2VyRXhjZXB0aW9uKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5JTlZBTElEX1RPT0xJRCk7DQotICAgIH0NCi0gICAgSVByZWZlcmVuY2VTdG9yZSBpUHJlZmVyZW5jZVN0b3JlID0gcHJlZmVyZW5jZVN0b3JlTWFwLmdldCh0b29sSWQpOw0KLSAgICByZW1vdmVQcmVmZXJlbmNlc1ByZXNlbnRJbk9wdGlvbnNGaWxlKGtleXNUb0V4cG9ydCwgaW5wdXRPcHRGaWxlUGF0aCk7DQotICAgIHRyeSB7DQotICAgICAgdXBkYXRlQW5kU2F2ZVByb3BlcnRpZXMoaW5wdXRGaWxlLCBrZXlzVG9FeHBvcnQsIGlQcmVmZXJlbmNlU3RvcmUpOw0KLSAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2coU0NBVG9vbHNQcmVmZXJlbmNlQ29uc3RhbnRzLk9QVF9FWFBPUlRfU1VDQ0VTUyk7DQotICAgIH0NCi0gICAgY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0gICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nRXhjZXB0aW9uKFNDQVRvb2xzVUlVdGlsLmNsYXNzLCBlLCBBY3RpdmF0b3IuUExVR0lOX0lEKTsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBAcGFyYW0gaW5wdXRGaWxlDQotICAgKiBAcGFyYW0ga2V5c1RvRXhwb3J0DQotICAgKiBAcGFyYW0gaVByZWZlcmVuY2VTdG9yZQ0KLSAgICogQHRocm93cyBJT0V4Y2VwdGlvbg0KLSAgICogQHRocm93cyBBcHA0bWNMb2dnZXJFeGNlcHRpb24NCi0gICAqLw0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1cGRhdGVBbmRTYXZlUHJvcGVydGllcyhmaW5hbCBGaWxlIGlucHV0RmlsZSwgZmluYWwgTGlzdDxTdHJpbmc+IGtleXNUb0V4cG9ydCwNCi0gICAgICBmaW5hbCBJUHJlZmVyZW5jZVN0b3JlIGlQcmVmZXJlbmNlU3RvcmUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQXBwNG1jTG9nZ2VyRXhjZXB0aW9uIHsNCi0gICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsNCi0gICAgSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGlucHV0RmlsZSk7DQotICAgIHByb3BlcnRpZXMubG9hZChpbik7DQotICAgIGZvciAoU3RyaW5nIGtleSA6IGtleXNUb0V4cG9ydCkgew0KLSAgICAgIFN0cmluZyBwcmVmVmFsdWUgPSBpUHJlZmVyZW5jZVN0b3JlLmdldFN0cmluZyhrZXkpOw0KLSAgICAgIHByb3BlcnRpZXMuc2V0UHJvcGVydHkoa2V5LCBwcmVmVmFsdWUpOw0KLSAgICB9DQotICAgIHNhdmVQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGlucHV0RmlsZSk7DQotICB9DQotDQotICAvKioNCi0gICAqIFJlbW92ZXMgdGhlIGtleXMgdGhhdCBhcmUgYWxyZWFkeSBwYXJ0IG9mIHRoZSBvcHRpb25zIGZpbGUgZnJvbSB0aGUga2V5cyB0aGF0IGFyZSB0byBiZSBleHBvcnRlZC4gVGhpcyBtYWtlcyBzdXJlDQotICAgKiB0aGF0IG9ubHkgdGhlIGtleXMgdGhhdCBhcmUgbm90IHRoZXJlIGluIHRoZSBvcHRpb25zIGZpbGUgYXJlIHdyaXR0ZW4gb24gdG8gdGhlIGZpbGUNCi0gICAqDQotICAgKiBAcGFyYW0ga2V5c1RvRXhwb3J0IHtAbGluayBMaXN0fQ0KLSAgICovDQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHJlbW92ZVByZWZlcmVuY2VzUHJlc2VudEluT3B0aW9uc0ZpbGUoZmluYWwgTGlzdDxTdHJpbmc+IGtleXNUb0V4cG9ydCwgZmluYWwgU3RyaW5nIG9wdEZpbGVQYXRoKSB7DQotICAgIE1hcDw/LCA/PiBwcm9wZXJ0aWVzID0gbG9hZE9wdGlvbnNGaWxlKG9wdEZpbGVQYXRoKTsNCi0gICAgU2V0PD8+IGtleVNldCA9IHByb3BlcnRpZXMua2V5U2V0KCk7DQotICAgIGZvciAoT2JqZWN0IGtleSA6IGtleVNldCkgew0KLSAgICAgIGtleXNUb0V4cG9ydC5yZW1vdmUoa2V5KTsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBMb2FkcyB0aGUgZ2l2ZW4gaW5wdXQgb3B0aW9ucyBmaWxlIHRvIHRoZSBwcm9wZXJ0aWVzIG1hcA0KLSAgICoNCi0gICAqIEBwYXJhbSBvcHRGaWxlUGF0aCB0aGUgZ2l2ZW4gb3B0aW9ucyBmaWxlDQotICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHByb3BlcnRpZXMgdGhhdCBjb250YWlucyBhbGwgdGhlIGtleSBhbmQgdmFsdWVzDQotICAgKi8NCi0gIHByaXZhdGUgc3RhdGljIE1hcDw/LCA/PiBsb2FkT3B0aW9uc0ZpbGUoZmluYWwgU3RyaW5nIG9wdEZpbGVQYXRoKSB7DQotICAgIE9wdGlvbnNGaWxlUGFyc2VyIHBhcnNlciA9IG5ldyBPcHRpb25zRmlsZVBhcnNlcigpOw0KLSAgICByZXR1cm4gcGFyc2VyLmxvYWQob3B0RmlsZVBhdGgsIG51bGwpOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBWYWxpZGF0ZXMgdGhlIHBhcmFtZXRlcnMNCi0gICAqLw0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB2YWxpZGF0ZShmaW5hbCBTdHJpbmcgdG9vbElkLCBmaW5hbCBTdHJpbmcgaW5wdXRGaWxlUGF0aCwgZmluYWwgRmlsZSBpbnB1dEZpbGUpDQotICAgICAgdGhyb3dzIEFwcDRtY0xvZ2dlckV4Y2VwdGlvbiB7DQotICAgIGlmICgodG9vbElkID09IG51bGwpIHx8IHRvb2xJZC5pc0VtcHR5KCkgfHwgKGlucHV0RmlsZVBhdGggPT0gbnVsbCkgfHwgaW5wdXRGaWxlUGF0aC5pc0VtcHR5KCkpIHsNCi0gICAgICB0aHJvdyBuZXcgQXBwNG1jTG9nZ2VyRXhjZXB0aW9uKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5FTVBUWV9GSUxFX09SX1RPT0xfSUQpOw0KLSAgICB9DQotICAgIGlmICghaW5wdXRGaWxlLmV4aXN0cygpKSB7DQotICAgICAgdGhyb3cgbmV3IEFwcDRtY0xvZ2dlckV4Y2VwdGlvbihTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuSU5WQUxJRF9GSUxFKTsNCi0gICAgfQ0KLSAgICBlbHNlIGlmICghaW5wdXRGaWxlUGF0aC5lbmRzV2l0aChTQ0FUb29sc1ByZWZlcmVuY2VDb25zdGFudHMuT1BUSU9OU19GSUxFX0VYVCkpIHsNCi0gICAgICB0aHJvdyBuZXcgQXBwNG1jTG9nZ2VyRXhjZXB0aW9uKFNDQVRvb2xzUHJlZmVyZW5jZUNvbnN0YW50cy5JTlZBTElEX0VYVCk7DQorICAgICAgcmV0dXJuIGFic29sdXRlT3JSZWxhdGl2ZVBhdGg7DQogICAgIH0NCiAgIH0NCiANCiANCiAgIC8qKg0KLSAgICogQHJldHVybiB0aGUgZXhwb3J0S2V5TGlzdA0KKyAgICogQHBhcmFtIHByb2plY3RQYXRoIC0gUHJvamVjdCBwYXRoDQorICAgKiBAcGFyYW0gcGF0aCAtIEFic291bHRlL1JlbGF0aXZlIHBhdGgNCisgICAqIEBwYXJhbSBpc0ZpbGUgLSB0cnVlIGlmIGl0IGlzIGZpbGUgZWxzZSBmYWxzZShmb3IgZGlyZWN0b3J5KQ0KKyAgICogQHBhcmFtIGZpbGVFeHRlbnNpb24gLSBGaWxlIGV4dGVuc2lvbg0KKyAgICogQHJldHVybiB0cnVlIGlmIHZhbGlkIGVsc2UgZmFsc2UNCiAgICAqLw0KLSAgcHVibGljIHN0YXRpYyBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldEV4cG9ydEtleUxpc3QoKSB7DQotICAgIHJldHVybiBleHBvcnRLZXlMaXN0Ow0KKyAgcHVibGljIHN0YXRpYyBib29sZWFuIHZhbGlkYXRlUGF0aChmaW5hbCBTdHJpbmcgcHJvamVjdFBhdGgsIGZpbmFsIFN0cmluZyBwYXRoLCBmaW5hbCBib29sZWFuIGlzRmlsZSwNCisgICAgICBmaW5hbCBTdHJpbmcuLi4gZmlsZUV4dGVuc2lvbikgew0KKyAgICBpZiAoKHByb2plY3RQYXRoICE9IG51bGwpICYmICFwcm9qZWN0UGF0aC5pc0VtcHR5KCkpIHsNCisgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShnZXRQcm9qZWN0QWJzb2x1dGVGaWxlUGF0aChwcm9qZWN0UGF0aCwgcGF0aC50cmltKCkpKTsNCisgICAgICBTdHJpbmcgZXh0ZW5zaW9uID0gZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKS5zdWJzdHJpbmcoZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKS5sYXN0SW5kZXhPZignLicpICsgMSk7DQorICAgICAgaWYgKGlzRmlsZSAmJiAoZmlsZUV4dGVuc2lvbiAhPSBudWxsKSkgew0KKyAgICAgICAgcmV0dXJuIChmaWxlLmNhblJlYWQoKSAmJiBmaWxlLmlzRmlsZSgpICYmDQorICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChmaWxlRXh0ZW5zaW9uKS5zdHJlYW0oKS5hbnlNYXRjaChlIC0+IGUuZXF1YWxzSWdub3JlQ2FzZShleHRlbnNpb24pIHx8IGUuZXF1YWxzKCIqLioiKSkpOw0KKyAgICAgIH0NCisgICAgICByZXR1cm4gKGZpbGUuY2FuUmVhZCgpICYmIGZpbGUuaXNEaXJlY3RvcnkoKSk7DQorICAgIH0NCisgICAgcmV0dXJuIGZhbHNlOw0KICAgfQ0KIA0KLQ0KICAgLyoqDQotICAgKiBAcmV0dXJuIHRoZSBwcmVmZXJlbmNlU3RvcmVNYXANCisgICAqIEBwYXJhbSBwYXRoIC0gcGF0aA0KKyAgICogQHJldHVybiB0cnVlIGlmIGl0IGlzIGEgZHJpdmUgZWxzZSBmYWxzZQ0KICAgICovDQotICBwdWJsaWMgc3RhdGljIE1hcDxTdHJpbmcsIElQcmVmZXJlbmNlU3RvcmU+IGdldFByZWZlcmVuY2VTdG9yZU1hcCgpIHsNCi0gICAgcmV0dXJuIHByZWZlcmVuY2VTdG9yZU1hcDsNCisgIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RyaXZlKGZpbmFsIFN0cmluZyBwYXRoKSB7DQorICAgIFN0cmluZyByZWdleCA9ICJbYS16QS1aXTp8W2EtekEtWl06XFxcXCI7DQorICAgIHJldHVybiBwYXRoLm1hdGNoZXMocmVnZXgpOw0KICAgfQ0KKw0KKyAgLyoqDQorICAgKiBAcGFyYW0gcmVzb3VyY2UgcHJvamVjdCB3aG9zZSBwcmVmZXJlbmNlcyBoYXZlIHRvIGxvYWRlZC4NCisgICAqIEBwYXJhbSBwbHVnaW5JZCBwbHVnaW4gaWQNCisgICAqIEByZXR1cm4gSUVjbGlwc2VQcmVmZXJlbmNlcw0KKyAgICovDQorICBwdWJsaWMgc3RhdGljIElFY2xpcHNlUHJlZmVyZW5jZXMgbG9hZFByb2plY3RTY29wZVByZWZzKGZpbmFsIElQcm9qZWN0IHJlc291cmNlLCBmaW5hbCBTdHJpbmcgcGx1Z2luSWQpIHsNCisgICAgUHJvamVjdFNjb3BlIHByb2plY3RTY29wZSA9IG5ldyBQcm9qZWN0U2NvcGUocmVzb3VyY2UpOw0KKyAgICByZXR1cm4gcHJvamVjdFNjb3BlLmdldE5vZGUocGx1Z2luSWQpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBAcmV0dXJuIElQcm9qZWN0DQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgSVByb2plY3QgZ2V0Q3VycmVudFByb2plY3RSZXNvdXJjZSgpIHsNCisgICAgT2JqZWN0IGN1cnJlbnRQcm9qZWN0UmVzb3VyY2UgPSBnZXRTZWxlY3Rpb25PYmplY3QoKTsNCisgICAgaWYgKGN1cnJlbnRQcm9qZWN0UmVzb3VyY2UgIT0gbnVsbCkgew0KKyAgICAgIHJldHVybiAoKElSZXNvdXJjZSkgY3VycmVudFByb2plY3RSZXNvdXJjZSkuZ2V0UHJvamVjdCgpOw0KKyAgICB9DQorICAgIHJldHVybiBudWxsOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBAcmV0dXJuIHNlbGVjdGVkIGVsZW1lbnQNCisgICAqLw0KKyAgcHVibGljIHN0YXRpYyBPYmplY3QgZ2V0U2VsZWN0aW9uT2JqZWN0KCkgew0KKyAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2VsZWN0aW9uU2VydmljZSgpLmdldFNlbGVjdGlvbigpOw0KKyAgICBpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsNCisgICAgICByZXR1cm4gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsNCisgICAgfQ0KKyAgICByZXR1cm4gbnVsbDsNCisgIH0NCisNCisgIC8qKg0KKyAgICogQHJldHVybiB0aGUgcHJvamVjdCBmb2xkZXIgcGF0aCBvZiB0aGUgc2VsZWN0ZWQgaWZpbGUuDQorICAgKi8NCisgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEN1cnJlbnRTZWxlY3Rpb25Qcm9qZWN0UGF0aCgpIHsNCisgICAgSVByb2plY3QgY3VycmVudFNlbGVjdGlvblByb2plY3QgPSBnZXRDdXJyZW50UHJvamVjdFJlc291cmNlKCk7DQorICAgIGlmIChjdXJyZW50U2VsZWN0aW9uUHJvamVjdCAhPSBudWxsKSB7DQorICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3Rpb25Qcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOw0KKyAgICB9DQorICAgIHJldHVybiBudWxsOw0KKyAgfQ0KKw0KIH0NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9XaXphcmRDb25zdGFudHMuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS91dGlsL1dpemFyZENvbnN0YW50cy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMjhiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvdXRpbC9XaXphcmRDb25zdGFudHMuamF2YQpAQCAtMCwwICsxLDEyMyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsOworCisvKioKKyAqIFRoaXMgaXMgY29uc3RhbnRzIGNsYXNzIGZvciBjb21tb24gV2l6YXJkIGRpYWxvZyBmb3IgRWxmMkFtYWx0aGVhL1NDQTJBbWFsdGhlYQorICovCitwdWJsaWMgY2xhc3MgV2l6YXJkQ29uc3RhbnRzIHsKKworICAvKioKKyAgICogRXhwb3J0IE9wdGlvbnMgYnV0dG9uIG5hbWUKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUE9SVF9PUFRJT05TID0gIkV4cG9ydCBPcHRpb25zIjsKKyAgLyoqCisgICAqIERlZmF1bHQgZmlsZSBuYW1lIHVzZWQgZHVyaW5nIHRoZSBleHBvcnQgb3B0aW9ucyBidXR0b24KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFRkFVTFRfRVhfT1BUX0ZJTEVfTkFNRSA9ICJPcHRpb25zRXhwb3J0Lm9wdCI7CisKKyAgLyoqCisgICAqIEJyb3dzZSBidXR0b24gbmFtZQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlJPV1NFID0gIkJyb3dzZSI7CisgIC8qKgorICAgKiBPdXRwdXQKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE9VVFBVVCA9ICJPdXRwdXQiOworCisgIC8qKgorICAgKiBTVyBEYXRhIChMYWJlbHMvUnVubmFibGVzKQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1dfREFUQSA9ICJTVyBEYXRhIChMYWJlbHMvUnVubmFibGVzKSI7CisKKyAgLyoqCisgICAqIFNjaGVkdWxpbmcvT1MgRGF0YQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NIRURVTElOR19PU19EQVRBID0gIlNjaGVkdWxpbmcvT1MgRGF0YSI7CisgIC8qKgorICAgKiBPUyBsb2NrIGZ1bmN0aW9uIGZpbGUgKG9wdGlvbmFsKQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1NfTE9DS19GVU5DX0ZJTEUgPSAiT1MgbG9jayBmdW5jdGlvbiBmaWxlIChvcHRpb25hbCkiOworICAvKioKKyAgICogVGFzay9TY2hlZHVsaW5nIGZpbGUgKG9wdGlvbmFsKQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFTS19TQ0hFRF9GSUxFID0gIlRhc2svU2NoZWR1bGluZyBmaWxlIChvcHRpb25hbCkiOworCisgIC8qKgorICAgKiBQYXRoIHRvIG91dHB1dCBkaXJlY3RvcnkgKG9wdGlvbmFsKQorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1VUUFVUX0RJUkVDVE9SWV9QQVRIID0gIk91dHB1dCBkaXJlY3RvcnkgKG9wdGlvbmFsKSI7CisgIC8qKgorICAgKiBBbWFsdGhlYSBHZW5lcmF0aW9uCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBTUFMVEhFQV9HRU5FUkFUSU9OID0gIkFtYWx0aGVhIEdlbmVyYXRpb24iOworICAvKioKKyAgICogR3JvdXAgTmFtZSB1c2VkIGluIHNjYTJhbWFsdGhlYSB3aWRnZXQKKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdST1VQX1NDQTJBTUFMVEhFQSA9ICJTQ0EyQU1BTFRIRUEiOworICAvKioKKyAgICogR2VuZXJhdGUgc3RydWN0IG1lbWJlciBjaGVjayBib3ggdGV4dC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEdFTkVSQVRFX1NUUlVDVF9NRU1CRVIgPSAiR2VuZXJhdGUgU3RydWN0dXJlIG1lbWJlcnMiOworICAvKioKKyAgICogTExWTSBFeGVjdXRhYmxlIHBhdGggbGFiZWwgdGV4dAorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTExWTV9QQVRIX1RFWFQgPSAiTExWTSBFeGVjdXRhYmxlIGRpcmVjdG9yeSAob3B0aW9uYWwpIjsKKyAgLyoqCisgICAqIEhlYWRlciBkaXJlY3RvcmllcyBsYWJlbCB0ZXh0LgorICAgKi8KKyAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSEVBREVSX0RJUkVDVE9SSUVTID0gIkhlYWRlciBkaXJlY3RvcmllcyAob3B0aW9uYWwpIjsKKyAgLyoqCisgICAqIE5ldyBCdXR0b24gdGV4dC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIE5FV19CVVRUT04gPSAiTmV3IjsKKyAgLyoqCisgICAqIFJlbW92ZSBCdXR0b24gdGV4dC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTU9WRV9CVVRUT04gPSAiUmVtb3ZlIjsKKyAgLyoqCisgICAqIEJ1aWxkIGNtZCBmaWxlIGxhYmVsIHRleHQuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCVUlMRF9DTURfRklMRSA9ICJCdWlsZCBjb21tYW5kIGxvZyBmaWxlIChvcHRpb25hbCkiOworCisgIC8qKgorICAgKiBFcnJvciBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gdGhlIHBhdGggb2YgdGhlIGxsdm0gZXhlY3V0YWJsZSBpcyBub3QgZXhpc3RpbmcuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMTFZNX1BBVEhfRVJST1JfTUVTU0FHRSA9ICJQYXRoIHRvIHRoZSBsbHZtIGRvZXMgbm90IGV4aXN0IjsKKyAgCisgIC8qKgorICAgKiBFcnJvciBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gdGhlIHBhdGggb2YgdGhlIGxsdm0gZXhlY3V0YWJsZSBpcyBub3QgZXhpc3RpbmcuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMTFZNX1BBVEhfRElSX01FU1NBR0UgPSAiUGF0aCB0byB0aGUgbGx2bSBzaG91bGQgYmUgYSBkaXJlY3RvcnkiOworCisgIC8qKgorICAgKiBFcnJvciBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gdGhlIHBhdGggb2YgdGhlIGxsdm0gZXhlY3V0YWJsZSBpcyBlbXB0eS4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExMVk1fUEFUSF9FTVBUWV9FUlJPUl9NRVNTQUdFID0gIlBhdGggdG8gdGhlIGxsdm0gaXMgbWFuZGF0b3J5IjsKKyAgLyoqCisgICAqIEVycm9yIG1lc3NhZ2UgdG8gYmUgc2hvd24gd2hlbiB0aGUgcGF0aCBvZiB0aGUgYnVpbGQgY21kIGZpbGUgZG9lcyBub3QgZXhpdC4KKyAgICovCisgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJVSUxEX0NNRF9GSUxFX0VSUk9SX01FU1NBR0UgPSAiUGF0aCBvZiB0aGUgYnVpbGQgY29tbWFuZCBsb2cgZmlsZSBkb2VzIG5vdCBleGlzdCI7CisgIC8qKgorICAgKiBFcnJvciBtZXNzYWdlIHRvIGJlIHNob3duIHdoZW4gdGhlIHBhdGggb2YgdGhlIGJ1aWxkIGNtZCBmaWxlIGRvZXMgbm90IGVuZCB3aXRoIC5sb2cuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCVUlMRF9DTURfRklMRV9FWFRFTlNJT05fRVJST1JfTUVTU0FHRSA9CisgICAgICAiUGF0aCBvZiB0aGUgYnVpbGQgY29tbWFuZCBsb2cgZmlsZSBzaG91ZCBlbmQgd2l0aCAubG9nIGV4dGVuc2lvbiI7CisKKyAgLyoqCisgICAqIEVycm9yIG1lc3NhZ2UgdG8gYmUgc2hvd24gd2hlbiB0aGUgaGVhZGVyIGRpcmVjdG9yeSBwYXRocyBkbyBub3QgZXhpc3QuCisgICAqLworICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFERVJfTElTVF9FUlJPUl9NRVNTQUdFID0gIkF0IGxlYXN0IG9uZSBvZiB0aGUgaGVhZGVyIGRpcmVjdG9yeSBwYXRocyBkb2VzIG5vdCBleGlzdCI7CisKKworICAvKioKKyAgICogUHJpdmF0ZSBDb25zdHJ1Y3RvcgorICAgKi8KKyAgcHJpdmF0ZSBXaXphcmRDb25zdGFudHMoKSB7CisgICAgLy8gUHJpdmF0ZSBDb25zdHJ1Y3RvcgorICB9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aWRnZXQvYnVpbGRlci9PdXRwdXREZXRhaWxzV2lkZ2V0QnVpbGRlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldC9idWlsZGVyL091dHB1dERldGFpbHNXaWRnZXRCdWlsZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4ODk0YgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aWRnZXQvYnVpbGRlci9PdXRwdXREZXRhaWxzV2lkZ2V0QnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0LmJ1aWxkZXI7CisKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5BbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzLk91dHB1dERldGFpbHNXaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBVSSBlbGVtZW50cy9XaWRnZXRzIGZvciBPdXRwdXQgZGlyZWN0b3J5IHBhdGggZm9yIHRoZSBBbWFsdGhlYSBnZW5lcmF0aW9uCisgKi8KK3B1YmxpYyBjbGFzcyBPdXRwdXREZXRhaWxzV2lkZ2V0QnVpbGRlciBpbXBsZW1lbnRzIFdpZGdldEJ1aWxkZXIgeworCisgIHByaXZhdGUgZmluYWwgUHJvcGVydGllcyBwcm9wZXJ0aWVzOworCisgIC8qKgorICAgKiBAcGFyYW0gcHJvcGVydGllcyBQcm9wZXJ0aWVzCisgICAqLworICBwdWJsaWMgT3V0cHV0RGV0YWlsc1dpZGdldEJ1aWxkZXIoZmluYWwgUHJvcGVydGllcyBwcm9wZXJ0aWVzKSB7CisgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKKyAgfQorCisgIC8qKgorICAgKiB7QGluaGVyaXREb2N9CisgICAqLworICBAT3ZlcnJpZGUKKyAgcHVibGljIFdpZGdldCBidWlsZFdpZGdldChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisgICAgcmV0dXJuIG5ldyBPdXRwdXREZXRhaWxzV2lkZ2V0KHBhcmVudCwgdGhpcy5wcm9wZXJ0aWVzKTsKKyAgfQorCisgIC8qKgorICAgKiBAcGFyYW0gZW5hYmxlIC0gRW5hYmxlL0Rpc2FibGUgb3V0cHV0IGRpcmVjdG9yeSBwYXRoCisgICAqIEByZXR1cm4gT3V0cHV0RGV0YWlsc1dpZGdldEJ1aWxkZXIKKyAgICovCisgIHB1YmxpYyBPdXRwdXREZXRhaWxzV2lkZ2V0QnVpbGRlciBzZXRPdXRwdXREaXJlY3RvcnlQYXRoRW5hYmxlZChmaW5hbCBib29sZWFuIGVuYWJsZSkgeworICAgIHRoaXMucHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1VUUFVUX0RJUkVDVE9SWSwgQm9vbGVhbi50b1N0cmluZyhlbmFibGUpKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0L2J1aWxkZXIvU2NoZWR1bGluZ09zRGF0YVdpZGdldEJ1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aWRnZXQvYnVpbGRlci9TY2hlZHVsaW5nT3NEYXRhV2lkZ2V0QnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMGJkYWYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0L2J1aWxkZXIvU2NoZWR1bGluZ09zRGF0YVdpZGdldEJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLndpZGdldC5idWlsZGVyOworCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuV2l6YXJkQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0cy5TY2hlZHVsaW5nT3NEYXRhV2lkZ2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0cy5XaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisKKy8qKgorICogVGhpcyBpcyB0aGUgV2lkZ2V0QnVpbGRlciBjbGFzcyBmb3IgQFNjaGVkdWxpbmdPc0RhdGFXaWRnZXQuIFRoaXMgY3JlYXRlcyB0aGUgVUkgZWxlbWVudHMgYW5kIHByb3ZpZGVzIG9wdGlvbnMgdG8gc2V0CisgKiBkZWZhdWx0IHZhbHVlcyBmb3IgVUkgY29tcG9uZW50cy4KKyAqLworcHVibGljIGNsYXNzIFNjaGVkdWxpbmdPc0RhdGFXaWRnZXRCdWlsZGVyIGltcGxlbWVudHMgV2lkZ2V0QnVpbGRlciB7CisKKyAgcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXM7CisKKyAgLyoqCisgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMKKyAgICovCisgIHB1YmxpYyBTY2hlZHVsaW5nT3NEYXRhV2lkZ2V0QnVpbGRlcihmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXMpIHsKKyAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICB9CisKKworICAvKioKKyAgICoge0Bpbmhlcml0RG9jfQorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBXaWRnZXQgYnVpbGRXaWRnZXQoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworICAgIHJldHVybiBuZXcgU2NoZWR1bGluZ09zRGF0YVdpZGdldChwYXJlbnQsIHRoaXMucHJvcGVydGllcyk7CisgIH0KKworCisgIC8qKgorICAgKiBAcGFyYW0gZ2VuZXJhdGUgLSBFbmFibGUvRGlzYWJsZSBPUyBsb2NrIGZ1bmN0aW9uIGZpbGUgVGV4dCBmaWVsZAorICAgKiBAcmV0dXJuIFNjaGVkdWxpbmdPc0RhdGFXaWRnZXRCdWlsZGVyCisgICAqLworICBwdWJsaWMgU2NoZWR1bGluZ09zRGF0YVdpZGdldEJ1aWxkZXIgc2V0T3NMb2NrRnVuY3Rpb25GaWxlRW5hYmxlZChmaW5hbCBib29sZWFuIGdlbmVyYXRlKSB7CisgICAgdGhpcy5wcm9wZXJ0aWVzLnNldFByb3BlcnR5KFdpemFyZENvbnN0YW50cy5PU19MT0NLX0ZVTkNfRklMRSwgQm9vbGVhbi50b1N0cmluZyhnZW5lcmF0ZSkpOworICAgIHJldHVybiB0aGlzOworICB9CisKKworICAvKioKKyAgICogQHBhcmFtIGdlbmVyYXRlIC0gRW5hYmxlL0Rpc2FibGUgVGFzay9TY2hlZHVsaW5nIGZpbGUgVGV4dCBmaWVsZAorICAgKiBAcmV0dXJuIFNjaGVkdWxpbmdPc0RhdGFXaWRnZXRCdWlsZGVyCisgICAqLworICBwdWJsaWMgU2NoZWR1bGluZ09zRGF0YVdpZGdldEJ1aWxkZXIgc2V0VGFza1NjaGVkdWxpbmdGaWxlRW5hYmxlZChmaW5hbCBib29sZWFuIGdlbmVyYXRlKSB7CisgICAgdGhpcy5wcm9wZXJ0aWVzLnNldFByb3BlcnR5KFdpemFyZENvbnN0YW50cy5UQVNLX1NDSEVEX0ZJTEUsIEJvb2xlYW4udG9TdHJpbmcoZ2VuZXJhdGUpKTsKKyAgICByZXR1cm4gdGhpczsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldC9idWlsZGVyL1N3TW9kZWxXaWRnZXRCdWlsZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0L2J1aWxkZXIvU3dNb2RlbFdpZGdldEJ1aWxkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2YwNTZmCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldC9idWlsZGVyL1N3TW9kZWxXaWRnZXRCdWlsZGVyLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXQuYnVpbGRlcjsKKworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzLlN3TW9kZWxXaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7CisKKy8qKgorICogVGhpcyBpcyB0aGUgV2lkZ2V0QnVpbGRlciBjbGFzcyBmb3IgQFNXTW9kZWxXaWRnZXQuIFRoaXMgY3JlYXRlcyB0aGUgVUkgZWxlbWVudHMgYW5kIHByb3ZpZGVzIG9wdGlvbnMgdG8gc2V0IGRlZmF1bHQKKyAqIHZhbHVlcyBmb3IgVUkgY29tcG9uZW50cy4KKyAqLworcHVibGljIGNsYXNzIFN3TW9kZWxXaWRnZXRCdWlsZGVyIGltcGxlbWVudHMgV2lkZ2V0QnVpbGRlciB7CisKKyAgcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXM7CisgIHByaXZhdGUgZmluYWwgV2lkZ2V0QnVpbGRlciBzdWJXaWRnZXQ7CisKKworICAvKioKKyAgICogQHBhcmFtIHN1YldpZGdldCBXaWRnZXRCdWlsZGVyCisgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMKKyAgICovCisgIHB1YmxpYyBTd01vZGVsV2lkZ2V0QnVpbGRlcihmaW5hbCBXaWRnZXRCdWlsZGVyIHN1YldpZGdldCwgZmluYWwgUHJvcGVydGllcyBwcm9wZXJ0aWVzKSB7CisgICAgdGhpcy5zdWJXaWRnZXQgPSBzdWJXaWRnZXQ7CisgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKKyAgfQorCisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBXaWRnZXQgYnVpbGRXaWRnZXQoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworICAgIHJldHVybiBuZXcgU3dNb2RlbFdpZGdldChwYXJlbnQsIHRoaXMuc3ViV2lkZ2V0LCB0aGlzLnByb3BlcnRpZXMpOworICB9CisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aWRnZXQvYnVpbGRlci9XaWRnZXRCdWlsZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0L2J1aWxkZXIvV2lkZ2V0QnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MjBjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0L2J1aWxkZXIvV2lkZ2V0QnVpbGRlci5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0LmJ1aWxkZXI7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLndpZGdldHMuV2lkZ2V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKKworCisvKioKKyAqIFRoaXMgaXMgYW4gaW50ZXJmYWNlIGZvciBidWlsZGluZyB0aGUgV2lkZ2V0cyB0byBjcmVhdGUgVUkgY29tcG9uZW50cworICovCitARnVuY3Rpb25hbEludGVyZmFjZQorcHVibGljIGludGVyZmFjZSBXaWRnZXRCdWlsZGVyIHsKKworICAvKioKKyAgICogQHBhcmFtIHBhcmVudCAtIFBhcmVudCBDb21wb3NpdGUKKyAgICogQHJldHVybiAtIFdpZGdldAorICAgKi8KKyAgcHVibGljIFdpZGdldCBidWlsZFdpZGdldChmaW5hbCBDb21wb3NpdGUgcGFyZW50KTsKKworfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldHMvT3V0cHV0RGV0YWlsc1dpZGdldC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldHMvT3V0cHV0RGV0YWlsc1dpZGdldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4Y2M0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0cy9PdXRwdXREZXRhaWxzV2lkZ2V0LmphdmEKQEAgLTAsMCArMSwxMzEgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0czsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5MYWJlbFRleHRCdXR0b25DcmVhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5TQ0FUb29sc1VJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuV2l6YXJkQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UubGF5b3V0LkdyaWREYXRhRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXJlY3RvcnlEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKKworCisvKioKKyAqIFRoaXMgaXMgdGhlIGNsYXNzIGZvciBPdXRwdXQgZm9sZGVyIGxvY2F0aW9uIGluIGNvbW1vbiB3aXphcmQKKyAqLworcHVibGljIGNsYXNzIE91dHB1dERldGFpbHNXaWRnZXQgZXh0ZW5kcyBXaWRnZXQgeworCisKKyAgcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXM7CisgIHByaXZhdGUgTGFiZWxUZXh0QnV0dG9uQ3JlYXRvciBvdXRwdXREaXJlY3Rvcnk7CisKKyAgLyoqCisgICAqIEBwYXJhbSBwYXJlbnQgQ29tcG9zaXRlCisgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMKKyAgICovCisgIHB1YmxpYyBPdXRwdXREZXRhaWxzV2lkZ2V0KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIFByb3BlcnRpZXMgcHJvcGVydGllcykgeworICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisgICAgY3JlYXRlQ29tcG9uZW50KHBhcmVudCk7CisgIH0KKworCisgIC8qKgorICAgKiBAcGFyYW0gcGFyZW50CisgICAqLworICBwcml2YXRlIHZvaWQgY3JlYXRlQ29tcG9uZW50KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKyAgICBDb21wb3NpdGUgY29tcG9zaXRlRm9yR3JvdXAgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworICAgIGNvbXBvc2l0ZUZvckdyb3VwLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKKyAgICBHcmlkRGF0YUZhY3RvcnkuZGVmYXVsdHNGb3IoY29tcG9zaXRlRm9yR3JvdXApLmdyYWIodHJ1ZSwgZmFsc2UpLnNwYW4oMSwgMSkuYXBwbHlUbyhjb21wb3NpdGVGb3JHcm91cCk7CisKKyAgICBHcm91cCBncm91cCA9IG5ldyBHcm91cChjb21wb3NpdGVGb3JHcm91cCwgU1dULk5PTkUpOworICAgIGdyb3VwLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKKyAgICBncm91cC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIHRydWUpKTsKKyAgICBncm91cC5zZXRUZXh0KFdpemFyZENvbnN0YW50cy5PVVRQVVQpOworCisgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoZ3JvdXAsIFNXVC5OT05FKTsKKyAgICBjb21wb3NpdGUuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDMsIGZhbHNlKSk7CisgICAgR3JpZERhdGFGYWN0b3J5LmRlZmF1bHRzRm9yKGNvbXBvc2l0ZSkuZ3JhYih0cnVlLCBmYWxzZSkuc3BhbigzLCAxKS5hcHBseVRvKGNvbXBvc2l0ZSk7CisKKworICAgIHRoaXMub3V0cHV0RGlyZWN0b3J5ID0gbmV3IExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IoY29tcG9zaXRlLCBXaXphcmRDb25zdGFudHMuT1VUUFVUX0RJUkVDVE9SWV9QQVRILCAib3V0cHV0VGV4dEZpZWxkIiwKKyAgICAgICAgV2l6YXJkQ29uc3RhbnRzLkJST1dTRSwgIm91dHB1dEJyb3dzZUJ1dHRvbiIpOworICAgIHRoaXMub3V0cHV0RGlyZWN0b3J5LnNldFByb2plY3RQYXRoKHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuUFJPSkVDVF9QQVRIKSk7CisgICAgdGhpcy5vdXRwdXREaXJlY3RvcnkuZ2V0QnV0dG9uKCkuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworICAgICAgICBEaXJlY3RvcnlEaWFsb2cgZGlyZWN0b3J5RGlhbG9nID0gbmV3IERpcmVjdG9yeURpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpKTsKKyAgICAgICAgZGlyZWN0b3J5RGlhbG9nLnNldEZpbHRlclBhdGgoT3V0cHV0RGV0YWlsc1dpZGdldC50aGlzLm91dHB1dERpcmVjdG9yeS5wcm92aWRlRGlhbG9nTG9jYXRpb24oKSk7CisgICAgICAgIFN0cmluZyBvdXRwdXRQYXRoID0gZGlyZWN0b3J5RGlhbG9nLm9wZW4oKTsKKyAgICAgICAgaWYgKG91dHB1dFBhdGggIT0gbnVsbCkgeworICAgICAgICAgIE91dHB1dERldGFpbHNXaWRnZXQudGhpcy5vdXRwdXREaXJlY3Rvcnkuc2V0RmlsZVBhdGgob3V0cHV0UGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMub3V0cHV0RGlyZWN0b3J5LmdldFRleHRGaWVsZCgpLmFkZE1vZGlmeUxpc3RlbmVyKGV2ZW50IC0+IHsKKyAgICAgIHRoaXMucHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1VUUFVUX0RJUkVDVE9SWSwKKyAgICAgICAgICB0aGlzLm91dHB1dERpcmVjdG9yeS5nZXRBYnNvbHV0ZUZpbGVQYXRoKCkpOworICAgICAgc2V0Q2hhbmdlZCgpOworICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7CisKKyAgICB9KTsKKworICAgIGluaXRpYWxpemVPcHRpb25zKCk7CisgIH0KKworCisgIC8qKgorICAgKgorICAgKi8KKyAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVPcHRpb25zKCkgeworICAgIHRoaXMub3V0cHV0RGlyZWN0b3J5LnNldEZpbGVQYXRoKHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1VUUFVUX0RJUkVDVE9SWSwgIiIpKTsKKyAgfQorCisKKyAgLyoqCisgICAqIHtAaW5oZXJpdERvY30KKyAgICovCisgIEBPdmVycmlkZQorICBwdWJsaWMgUHJvcGVydGllcyBnZXRPcHRpb25zKCkgeworICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM7CisgIH0KKworCisgIC8qKgorICAgKiBAcmV0dXJuIC0gdmFsaWRhdGUgYW5kIHJldHVybiBTdGF0dXMKKyAgICovCisgIEBPdmVycmlkZQorICBwdWJsaWMgSVN0YXR1cyB2YWxpZGF0ZSgpIHsKKyAgICBTdHJpbmcgcHJvamVjdFBhdGggPSB0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLlBST0pFQ1RfUEFUSCk7CisgICAgU3RyaW5nIG91dHB1dFRleHQgPSB0aGlzLm91dHB1dERpcmVjdG9yeS5nZXRUZXh0RmllbGQoKS5nZXRUZXh0KCk7CisgICAgRmlsZSBhYnNvbHV0ZUZpbGUgPSBuZXcgRmlsZShTQ0FUb29sc1VJVXRpbC5nZXRQcm9qZWN0QWJzb2x1dGVGaWxlUGF0aChwcm9qZWN0UGF0aCwgb3V0cHV0VGV4dCkpLmdldEFic29sdXRlRmlsZSgpOworICAgIGlmICghb3V0cHV0VGV4dC5pc0VtcHR5KCkgJiYgIVNDQVRvb2xzVUlVdGlsLnZhbGlkYXRlUGF0aChwcm9qZWN0UGF0aCwgb3V0cHV0VGV4dCwgZmFsc2UsICIiKSkgeworICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQWN0aXZhdG9yLlBMVUdJTl9JRCwgIkludmFsaWQgb3V0cHV0IGRpcmVjdG9yeSBwYXRoIik7CisgICAgfQorICAgIGlmICghRmlsZXMuaXNXcml0YWJsZShQYXRocy5nZXQoYWJzb2x1dGVGaWxlLmdldEFic29sdXRlUGF0aCgpKSkgfHwgU0NBVG9vbHNVSVV0aWwuaXNEcml2ZShvdXRwdXRUZXh0KSkgeworICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQWN0aXZhdG9yLlBMVUdJTl9JRCwgIk91dHB1dCBQYXRoIGNhbm5vdCBiZSBhIGRyaXZlLiIpOworICAgIH0KKyAgICByZXR1cm4gU3RhdHVzLk9LX1NUQVRVUzsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0cy9TY2hlZHVsaW5nT3NEYXRhV2lkZ2V0LmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0cy9TY2hlZHVsaW5nT3NEYXRhV2lkZ2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkNTUyZQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aWRnZXRzL1NjaGVkdWxpbmdPc0RhdGFXaWRnZXQuamF2YQpAQCAtMCwwICsxLDE1NiBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzOworCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5MYWJlbFRleHRCdXR0b25DcmVhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5TQ0FUb29sc1VJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuV2l6YXJkQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UubGF5b3V0LkdyaWREYXRhRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuU2VsZWN0aW9uQWRhcHRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkV2ZW50OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7CisKKworLyoqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHRoZSBVSSBlbGVtZW50cyBmb3IgU2NoZWR1bGluZy9PUyBEYXRhIG1vZGVsIGluIEFtYWx0aGVhIGdlbmVyYXRpb24gd2l6YXJkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2hlZHVsaW5nT3NEYXRhV2lkZ2V0IGV4dGVuZHMgV2lkZ2V0IHsKKworICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ1NWID0gIiouY3N2IjsKKyAgcHJpdmF0ZSBMYWJlbFRleHRCdXR0b25DcmVhdG9yIG9zTG9ja0Z1bmNGaWxlOworICBwcml2YXRlIExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IgdGFza1NjaGVkRmlsZTsKKyAgcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXM7CisKKyAgLyoqCisgICAqIEBwYXJhbSBwYXJlbnQgLSBDb21wb3NpdGUKKyAgICogQHBhcmFtIG9wdGlvbnMgLSBQcm9wZXJ0aWVzCisgICAqLworICBwdWJsaWMgU2NoZWR1bGluZ09zRGF0YVdpZGdldChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBQcm9wZXJ0aWVzIG9wdGlvbnMpIHsKKyAgICB0aGlzLnByb3BlcnRpZXMgPSBvcHRpb25zOworICAgIGNyZWF0ZUNvbXBvbmVudChwYXJlbnQpOworICB9CisKKworICAvKioKKyAgICoKKyAgICovCisgIHByaXZhdGUgdm9pZCBjcmVhdGVDb21wb25lbnQoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworICAgIENvbXBvc2l0ZSBjb21wb3NpdGVGb3JHcm91cCA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisgICAgY29tcG9zaXRlRm9yR3JvdXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOworICAgIEdyaWREYXRhRmFjdG9yeS5kZWZhdWx0c0Zvcihjb21wb3NpdGVGb3JHcm91cCkuZ3JhYih0cnVlLCBmYWxzZSkuc3BhbigxLCAxKS5hcHBseVRvKGNvbXBvc2l0ZUZvckdyb3VwKTsKKworICAgIEdyb3VwIGdyb3VwID0gbmV3IEdyb3VwKGNvbXBvc2l0ZUZvckdyb3VwLCBTV1QuTk9ORSk7CisgICAgZ3JvdXAuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KCkpOworICAgIGdyb3VwLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSkpOworICAgIGdyb3VwLnNldFRleHQoV2l6YXJkQ29uc3RhbnRzLlNDSEVEVUxJTkdfT1NfREFUQSk7CisKKyAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gbmV3IENvbXBvc2l0ZShncm91cCwgU1dULk5PTkUpOworICAgIGNvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMywgZmFsc2UpKTsKKyAgICBHcmlkRGF0YUZhY3RvcnkuZGVmYXVsdHNGb3IoY29tcG9zaXRlKS5ncmFiKHRydWUsIGZhbHNlKS5zcGFuKDMsIDEpLmFwcGx5VG8oY29tcG9zaXRlKTsKKworICAgIHRoaXMub3NMb2NrRnVuY0ZpbGUgPSBuZXcgTGFiZWxUZXh0QnV0dG9uQ3JlYXRvcihjb21wb3NpdGUsIFdpemFyZENvbnN0YW50cy5PU19MT0NLX0ZVTkNfRklMRSwgIm9zTG9ja1RleHRGaWVsZCIsCisgICAgICAgIFdpemFyZENvbnN0YW50cy5CUk9XU0UsICJvc0xvY2tCcm93c2VCdXR0b24iKTsKKyAgICB0aGlzLm9zTG9ja0Z1bmNGaWxlLnNldFByb2plY3RQYXRoKHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuUFJPSkVDVF9QQVRIKSk7CisgICAgdGhpcy5vc0xvY2tGdW5jRmlsZS5nZXRCdXR0b24oKS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisgICAgICAgIEZpbGVEaWFsb2cgZmlsZURpYWxvZyA9IG5ldyBGaWxlRGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCkpOworICAgICAgICBmaWxlRGlhbG9nLnNldEZpbHRlckV4dGVuc2lvbnMobmV3IFN0cmluZ1tdIHsgQ1NWIH0pOworICAgICAgICBmaWxlRGlhbG9nLnNldEZpbHRlclBhdGgoU2NoZWR1bGluZ09zRGF0YVdpZGdldC50aGlzLm9zTG9ja0Z1bmNGaWxlLnByb3ZpZGVEaWFsb2dMb2NhdGlvbigpKTsKKyAgICAgICAgU3RyaW5nIG91dHNldFByb3BlcnR5UGF0aCA9IGZpbGVEaWFsb2cub3BlbigpOworICAgICAgICBpZiAob3V0c2V0UHJvcGVydHlQYXRoICE9IG51bGwpIHsKKyAgICAgICAgICBTY2hlZHVsaW5nT3NEYXRhV2lkZ2V0LnRoaXMub3NMb2NrRnVuY0ZpbGUuc2V0RmlsZVBhdGgob3V0c2V0UHJvcGVydHlQYXRoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgICAgU3RyaW5nW10gZXh0ZW5zaW9ucyA9IG5ldyBTdHJpbmdbXSB7IENTViB9OworICAgIHRoaXMudGFza1NjaGVkRmlsZSA9IG5ldyBMYWJlbFRleHRCdXR0b25DcmVhdG9yKGNvbXBvc2l0ZSwgV2l6YXJkQ29uc3RhbnRzLlRBU0tfU0NIRURfRklMRSwgInRhc2tTY2hlZFRleHRGaWVsZCIsCisgICAgICAgIFdpemFyZENvbnN0YW50cy5CUk9XU0UsICJ0YXNrU2NoZWRCcm93c2VCdXR0b24iKTsKKyAgICB0aGlzLnRhc2tTY2hlZEZpbGUuc2V0UHJvamVjdFBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpKTsKKyAgICB0aGlzLnRhc2tTY2hlZEZpbGUuZ2V0QnV0dG9uKCkuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworICAgICAgICBGaWxlRGlhbG9nIGZpbGVEaWFsb2cgPSBuZXcgRmlsZURpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpKTsKKyAgICAgICAgZmlsZURpYWxvZy5zZXRGaWx0ZXJFeHRlbnNpb25zKGV4dGVuc2lvbnMpOworICAgICAgICBmaWxlRGlhbG9nLnNldEZpbHRlclBhdGgoU2NoZWR1bGluZ09zRGF0YVdpZGdldC50aGlzLnRhc2tTY2hlZEZpbGUucHJvdmlkZURpYWxvZ0xvY2F0aW9uKCkpOworICAgICAgICBTdHJpbmcgb3V0c2V0UHJvcGVydHlQYXRoID0gZmlsZURpYWxvZy5vcGVuKCk7CisgICAgICAgIGlmIChvdXRzZXRQcm9wZXJ0eVBhdGggIT0gbnVsbCkgeworICAgICAgICAgIFNjaGVkdWxpbmdPc0RhdGFXaWRnZXQudGhpcy50YXNrU2NoZWRGaWxlLnNldEZpbGVQYXRoKG91dHNldFByb3BlcnR5UGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKworCisgICAgdGhpcy50YXNrU2NoZWRGaWxlLmdldFRleHRGaWVsZCgpLmFkZE1vZGlmeUxpc3RlbmVyKGUgLT4geworICAgICAgdGhpcy5wcm9wZXJ0aWVzLnNldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5UQVNLX1NDSEVEVUxJTkdfRklMRSwKKyAgICAgICAgICB0aGlzLnRhc2tTY2hlZEZpbGUuZ2V0QWJzb2x1dGVGaWxlUGF0aCgpKTsKKyAgICAgIHNldENoYW5nZWQoKTsKKyAgICAgIG5vdGlmeU9ic2VydmVycygpOworCisgICAgfSk7CisKKyAgICB0aGlzLm9zTG9ja0Z1bmNGaWxlLmdldFRleHRGaWVsZCgpLmFkZE1vZGlmeUxpc3RlbmVyKGV2ZW50IC0+IHsKKyAgICAgIHRoaXMucHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1NfTE9DS19GSUxFLCB0aGlzLm9zTG9ja0Z1bmNGaWxlLmdldEFic29sdXRlRmlsZVBhdGgoKSk7CisgICAgICBzZXRDaGFuZ2VkKCk7CisgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKyAgICB9KTsKKworICAgIGluaXRpYWxpemVPcHRpb25zKCk7CisgIH0KKworCisgIC8qKgorICAgKgorICAgKi8KKyAgcHJpdmF0ZSB2b2lkIGluaXRpYWxpemVPcHRpb25zKCkgeworICAgIHRoaXMub3NMb2NrRnVuY0ZpbGUuc2V0RmlsZVBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5PU19MT0NLX0ZJTEUsICIiKSk7CisgICAgdGhpcy50YXNrU2NoZWRGaWxlLnNldEZpbGVQYXRoKHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuVEFTS19TQ0hFRFVMSU5HX0ZJTEUsICIiKSk7CisgIH0KKworCisgIC8qKgorICAgKiB7QGluaGVyaXREb2N9CisgICAqLworICBAT3ZlcnJpZGUKKyAgcHVibGljIFByb3BlcnRpZXMgZ2V0T3B0aW9ucygpIHsKKyAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzOworICB9CisKKworICAvKioKKyAgICogQHJldHVybiAtIHZhbGlkYXRlIGFuZCByZXR1cm4gU3RhdHVzCisgICAqLworICBAT3ZlcnJpZGUKKyAgcHVibGljIElTdGF0dXMgdmFsaWRhdGUoKSB7CisgICAgU3RyaW5nIHByb2plY3RQYXRoID0gdGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpOworICAgIFN0cmluZyBvc0xvY2tGaWxlUGF0aCA9IHRoaXMub3NMb2NrRnVuY0ZpbGUuZ2V0VGV4dEZpZWxkKCkuZ2V0VGV4dCgpOworICAgIGlmICghb3NMb2NrRmlsZVBhdGguaXNFbXB0eSgpICYmICFTQ0FUb29sc1VJVXRpbC52YWxpZGF0ZVBhdGgocHJvamVjdFBhdGgsIG9zTG9ja0ZpbGVQYXRoLCB0cnVlLCAiY3N2IikpIHsKKyAgICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEFjdGl2YXRvci5QTFVHSU5fSUQsICJJbnZhbGlkIE9TIGxvY2sgZnVuY3Rpb24gZmlsZSIpOworICAgIH0KKyAgICBTdHJpbmcgdGFza1NjaGVkRmlsZVBhdGggPSB0aGlzLnRhc2tTY2hlZEZpbGUuZ2V0VGV4dEZpZWxkKCkuZ2V0VGV4dCgpOworICAgIGlmICghdGFza1NjaGVkRmlsZVBhdGguaXNFbXB0eSgpICYmICFTQ0FUb29sc1VJVXRpbC52YWxpZGF0ZVBhdGgocHJvamVjdFBhdGgsIHRhc2tTY2hlZEZpbGVQYXRoLCB0cnVlLCAiY3N2IikpIHsKKyAgICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEFjdGl2YXRvci5QTFVHSU5fSUQsICJJbnZhbGlkIFRhc2svU2NoZWR1bGluZyBmaWxlIik7CisgICAgfQorCisgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisgIH0KKworfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldHMvU3dNb2RlbFdpZGdldC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldHMvU3dNb2RlbFdpZGdldC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNDkxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2lkZ2V0cy9Td01vZGVsV2lkZ2V0LmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0czsKKworaW1wb3J0IGphdmEudXRpbC5PYnNlcnZlcjsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5XaXphcmRDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXQuYnVpbGRlci5XaWRnZXRCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UubGF5b3V0LkdyaWREYXRhRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Hcm91cDsKKworCisvKioKKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIFVJIGVsZW1lbnRzIGZvciBTVyBNb2RlbCBpbiBBbWFsdGhlYSBnZW5lcmF0aW9uIHdpemFyZAorICovCitwdWJsaWMgY2xhc3MgU3dNb2RlbFdpZGdldCBleHRlbmRzIFdpZGdldCB7CisKKyAgcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXM7CisgIHByaXZhdGUgV2lkZ2V0IG9wdGlvbmFsU3ViV2lkZ2V0OworCisgIC8qKgorICAgKiBAcGFyYW0gcGFyZW50IC0gQ29tcG9zaXRlCisgICAqIEBwYXJhbSBzdWJXaWRnZXQgLSBjb21wb25lbmV0IHNwZWNpZmljIHdpZGdldAorICAgKiBAcGFyYW0gb3B0aW9ucyAtIFByb3BlcnRpZXMKKyAgICovCisgIHB1YmxpYyBTd01vZGVsV2lkZ2V0KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIFdpZGdldEJ1aWxkZXIgc3ViV2lkZ2V0LCBmaW5hbCBQcm9wZXJ0aWVzIG9wdGlvbnMpIHsKKyAgICB0aGlzLnByb3BlcnRpZXMgPSBvcHRpb25zOworICAgIGNyZWF0ZUNvbXBvbmVudChwYXJlbnQsIHN1YldpZGdldCk7CisgIH0KKworCisgIC8qKgorICAgKgorICAgKi8KKyAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbXBvbmVudChmaW5hbCBDb21wb3NpdGUgcGFyZW50LCBmaW5hbCBXaWRnZXRCdWlsZGVyIHN1YldpZGdldCkgeworCisgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUZvckdyb3VwID0gbmV3IENvbXBvc2l0ZShwYXJlbnQsIFNXVC5OVUxMKTsKKyAgICBjb21wb3NpdGVGb3JHcm91cC5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoKSk7CisgICAgR3JpZERhdGFGYWN0b3J5LmRlZmF1bHRzRm9yKGNvbXBvc2l0ZUZvckdyb3VwKS5ncmFiKHRydWUsIGZhbHNlKS5zcGFuKDEsIDEpLmFwcGx5VG8oY29tcG9zaXRlRm9yR3JvdXApOworCisgICAgR3JvdXAgZ3JvdXAgPSBuZXcgR3JvdXAoY29tcG9zaXRlRm9yR3JvdXAsIFNXVC5OT05FKTsKKyAgICBHcmlkTGF5b3V0IGdycExheW91dCA9IG5ldyBHcmlkTGF5b3V0KDEsIGZhbHNlKTsKKyAgICBncm91cC5zZXRMYXlvdXQoZ3JwTGF5b3V0KTsKKyAgICBncm91cC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShTV1QuRklMTCwgU1dULkZJTEwsIHRydWUsIGZhbHNlKSk7CisgICAgZ3JvdXAuc2V0VGV4dChXaXphcmRDb25zdGFudHMuU1dfREFUQSk7CisKKyAgICAvLyBDcmVhdGUgb3B0aW9uYWwgc3ViV2lkZ2V0CisgICAgaWYgKHN1YldpZGdldCAhPSBudWxsKSB7CisgICAgICB0aGlzLm9wdGlvbmFsU3ViV2lkZ2V0ID0gc3ViV2lkZ2V0LmJ1aWxkV2lkZ2V0KGdyb3VwKTsKKyAgICB9CisKKyAgfQorCisKKyAgLyoqCisgICAqIHtAaW5oZXJpdERvY30KKyAgICovCisgIEBPdmVycmlkZQorICBwdWJsaWMgUHJvcGVydGllcyBnZXRPcHRpb25zKCkgeworICAgIGlmICh0aGlzLm9wdGlvbmFsU3ViV2lkZ2V0ICE9IG51bGwpIHsKKyAgICAgIFByb3BlcnRpZXMgb3B0aW9ucyA9IHRoaXMub3B0aW9uYWxTdWJXaWRnZXQuZ2V0T3B0aW9ucygpOworICAgICAgdGhpcy5wcm9wZXJ0aWVzLnB1dEFsbChvcHRpb25zKTsKKyAgICB9CisgICAgcmV0dXJuIHRoaXMucHJvcGVydGllczsKKyAgfQorCisKKyAgLyoqCisgICAqIEByZXR1cm4gLSB2YWxpZGF0ZSBhbmQgcmV0dXJuIFN0YXR1cworICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlKCkgeworICAgIGlmICh0aGlzLm9wdGlvbmFsU3ViV2lkZ2V0ICE9IG51bGwpIHsKKyAgICAgIElTdGF0dXMgdmFsaWRhdGUgPSB0aGlzLm9wdGlvbmFsU3ViV2lkZ2V0LnZhbGlkYXRlKCk7CisgICAgICBpZiAoIXZhbGlkYXRlLmlzT0soKSkgeworICAgICAgICByZXR1cm4gdmFsaWRhdGU7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFN0YXR1cy5PS19TVEFUVVM7CisgIH0KKworCisgIC8qKgorICAgKiB7QGluaGVyaXREb2N9CisgICAqLworICBAT3ZlcnJpZGUKKyAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGFkZE9ic2VydmVyKGZpbmFsIE9ic2VydmVyIG8pIHsKKyAgICBzdXBlci5hZGRPYnNlcnZlcihvKTsKKyAgICBpZiAodGhpcy5vcHRpb25hbFN1YldpZGdldCAhPSBudWxsKSB7CisgICAgICB0aGlzLm9wdGlvbmFsU3ViV2lkZ2V0LmFkZE9ic2VydmVyKG8pOworICAgIH0KKyAgfQorCisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aWRnZXRzL1dpZGdldC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpZGdldHMvV2lkZ2V0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ2NGNiZAotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aWRnZXRzL1dpZGdldC5qYXZhCkBAIC0wLDAgKzEsMjQgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0czsKKworaW1wb3J0IGphdmEudXRpbC5PYnNlcnZhYmxlOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsLklPcHRpb25zUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CisKKworLyoqCisgKiBUaGlzIGlzIGFuIGludGVyZmFjZSB0byBjcmVhdGUgVUkgY29tcG9uZW50cyBpbiBBbWFsdGhlYSBnZW5lcmF0aW9uIHdpemFyZAorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgV2lkZ2V0IGV4dGVuZHMgT2JzZXJ2YWJsZSBpbXBsZW1lbnRzIElPcHRpb25zUHJvdmlkZXIgeworCisgIC8qKgorICAgKiBAcmV0dXJuIHtAbGluayBJU3RhdHVzfQorICAgKi8KKyAgcHVibGljIGFic3RyYWN0IElTdGF0dXMgdmFsaWRhdGUoKTsKKworfQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpemFyZC9HZW5lcmF0ZUFtYWx0aGVhV2l6YXJkLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdWkvd2l6YXJkL0dlbmVyYXRlQW1hbHRoZWFXaXphcmQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTI0YmQyCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpemFyZC9HZW5lcmF0ZUFtYWx0aGVhV2l6YXJkLmphdmEKQEAgLTAsMCArMSwxMzYgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2l6YXJkOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk9ic2VydmFibGU7CitpbXBvcnQgamF2YS51dGlsLk9ic2VydmVyOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsLkFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuSUFtYWx0aGVhR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5JT3B0aW9uc1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5XaXphcmRDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmpvYnMuSm9iOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CisKKworLyoqCisgKiBUaGlzIGlzIGEgY29tbW9uIHdpemFyZCBjbGFzcyB0byBHZW5lcmF0ZSBBbWFsdGhlYQorICovCitwdWJsaWMgY2xhc3MgR2VuZXJhdGVBbWFsdGhlYVdpemFyZCBleHRlbmRzIFdpemFyZCBpbXBsZW1lbnRzIElPcHRpb25zUHJvdmlkZXIsIE9ic2VydmVyIHsKKworICBwcml2YXRlIGZpbmFsIExpc3Q8R2VuZXJhdGVBbWFsdGhlYVdpemFyZFBhZ2U+IHdpemFyZFBhZ2VzOworICBwcml2YXRlIGZpbmFsIElBbWFsdGhlYUdlbmVyYXRvciBhbWFsdGhlYUV4ZWN1dG9yOworICBwcml2YXRlIGZpbmFsIFByb3BlcnRpZXMgcHJvcGVydGllczsKKworICAvKioKKyAgICogQHBhcmFtIGFzTGlzdCAtIExpc3Q8R2VuZXJhdGVBbWFsdGhlYVdpemFyZFBhZ2U+CisgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIFByb3BlcnRpZXMKKyAgICogQHBhcmFtIGFtYWx0aGVhRXhlY3V0b3IgSUFtYWx0aGVhRXhlY3V0b3IgLSBmb3IgYW1hbHRoZWEgZ2VuZXJhdGlvbgorICAgKi8KKyAgcHVibGljIEdlbmVyYXRlQW1hbHRoZWFXaXphcmQoZmluYWwgTGlzdDxHZW5lcmF0ZUFtYWx0aGVhV2l6YXJkUGFnZT4gYXNMaXN0LCBmaW5hbCBQcm9wZXJ0aWVzIHByb3BlcnRpZXMsCisgICAgICBmaW5hbCBJQW1hbHRoZWFHZW5lcmF0b3IgYW1hbHRoZWFFeGVjdXRvcikgeworICAgIHNldE5lZWRzUHJvZ3Jlc3NNb25pdG9yKHRydWUpOworICAgIHRoaXMud2l6YXJkUGFnZXMgPSBhc0xpc3Q7CisgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKKyAgICB0aGlzLmFtYWx0aGVhRXhlY3V0b3IgPSBhbWFsdGhlYUV4ZWN1dG9yOworICAgIHNldFdpbmRvd1RpdGxlKCJHZW5lcmF0ZSBBbWFsdGhlYSIpOworICB9CisKKworICAvKioKKyAgICoge0Bpbmhlcml0RG9jfQorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIGFkZFBhZ2VzKCkgeworICAgIGZvciAoR2VuZXJhdGVBbWFsdGhlYVdpemFyZFBhZ2UgYW1hbHRoZWFXaXphcmRQYWdlIDogdGhpcy53aXphcmRQYWdlcykgeworICAgICAgYWRkUGFnZShhbWFsdGhlYVdpemFyZFBhZ2UpOworICAgIH0KKyAgfQorCisKKyAgLyoqCisgICAqIHtAaW5oZXJpdERvY30KKyAgICovCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtRmluaXNoKCkgeworICAgIEpvYiBqb2IgPSBuZXcgSm9iKCJBbWFsdGhlYSBHZW5lcmF0aW9uIikgeworCisgICAgICBAT3ZlcnJpZGUKKyAgICAgIHByb3RlY3RlZCBJU3RhdHVzIHJ1bihmaW5hbCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHsKKyAgICAgICAgSVN0YXR1cyBzdGF0dXMgPSBHZW5lcmF0ZUFtYWx0aGVhV2l6YXJkLnRoaXMuYW1hbHRoZWFFeGVjdXRvci5leGVjdXRlKG1vbml0b3IsIGdldE9wdGlvbnMoKSk7CisgICAgICAgIFN0cmluZyBvdXRwdXREaXJQcm9wZXJ0eSA9CisgICAgICAgICAgICBHZW5lcmF0ZUFtYWx0aGVhV2l6YXJkLnRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1VUUFVUX0RJUkVDVE9SWSwgIiIpOworICAgICAgICBTdHJpbmcgb3VwdXREaXJQYXRoID0KKyAgICAgICAgICAgICgob3V0cHV0RGlyUHJvcGVydHkgIT0gbnVsbCkgJiYgIW91dHB1dERpclByb3BlcnR5LmlzRW1wdHkoKSkgPyAiIGluICIgKyBvdXRwdXREaXJQcm9wZXJ0eSArICIuIiA6ICIuIjsKKyAgICAgICAgb3BlblJlc3VsdERpYWxvZyhzdGF0dXMsIG91cHV0RGlyUGF0aCk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICB9CisgICAgfTsKKyAgICBqb2Iuc2NoZWR1bGUoKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisKKyAgcHJpdmF0ZSB2b2lkIG9wZW5SZXN1bHREaWFsb2coZmluYWwgSVN0YXR1cyBzdGF0dXMsIGZpbmFsIFN0cmluZyBvdXB1dERpclBhdGgpIHsKKyAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5hc3luY0V4ZWMoKCkgLT4geworCisgICAgICBpZiAoc3RhdHVzLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB7CisgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkluZm9ybWF0aW9uKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIFdpemFyZENvbnN0YW50cy5BTUFMVEhFQV9HRU5FUkFUSU9OLAorICAgICAgICAgICAgIkFtYWx0aGVhIG1vZGVsIHN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQiICsgb3VwdXREaXJQYXRoICsKKyAgICAgICAgICAgICAgICAiXG5cbldhcm5pbmdzIGhhdmUgYmVlbiBmb3VuZCAtIFBsZWFzZSBjaGVjayBsb2cgZmlsZXMgZm9yIG1vcmUgZGV0YWlscy4iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKHN0YXR1cy5nZXRTZXZlcml0eSgpID09IElTdGF0dXMuT0spIHsKKyAgICAgICAgTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oRGlzcGxheS5nZXREZWZhdWx0KCkuZ2V0QWN0aXZlU2hlbGwoKSwgV2l6YXJkQ29uc3RhbnRzLkFNQUxUSEVBX0dFTkVSQVRJT04sCisgICAgICAgICAgICAiQW1hbHRoZWEgbW9kZWwgc3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCIgKyBvdXB1dERpclBhdGgpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKERpc3BsYXkuZ2V0RGVmYXVsdCgpLmdldEFjdGl2ZVNoZWxsKCksIFdpemFyZENvbnN0YW50cy5BTUFMVEhFQV9HRU5FUkFUSU9OLAorICAgICAgICAgICAgIkFtbGF0aGVhIG1vZGVsIGdlbmVyYXRpb24gZmFpbGVkLiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgZGV0YWlscy4iKTsKKyAgICAgIH0KKyAgICB9KTsKKyAgfQorCisgIC8qKgorICAgKiB7QGluaGVyaXREb2N9CisgICAqLworICBAT3ZlcnJpZGUKKyAgcHVibGljIFByb3BlcnRpZXMgZ2V0T3B0aW9ucygpIHsKKyAgICBmb3IgKEdlbmVyYXRlQW1hbHRoZWFXaXphcmRQYWdlIGFtYWx0aGVhV2l6YXJkUGFnZSA6IHRoaXMud2l6YXJkUGFnZXMpIHsKKyAgICAgIHRoaXMucHJvcGVydGllcy5wdXRBbGwoYW1hbHRoZWFXaXphcmRQYWdlLmdldE9wdGlvbnMoKSk7CisgICAgfQorICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM7CisgIH0KKworCisgIEBPdmVycmlkZQorICBwdWJsaWMgYm9vbGVhbiBjYW5GaW5pc2goKSB7CisgICAgZm9yIChHZW5lcmF0ZUFtYWx0aGVhV2l6YXJkUGFnZSBhbWFsdGhlYVdpemFyZFBhZ2UgOiB0aGlzLndpemFyZFBhZ2VzKSB7CisgICAgICBpZiAoIWFtYWx0aGVhV2l6YXJkUGFnZS5pc1BhZ2VDb21wbGV0ZSgpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGdldENvbnRhaW5lcigpLmdldEN1cnJlbnRQYWdlKCkuZ2V0TmV4dFBhZ2UoKSA9PSBudWxsOworICB9CisKKworICAvKioKKyAgICoge0Bpbmhlcml0RG9jfQorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHVwZGF0ZShmaW5hbCBPYnNlcnZhYmxlIG8sIGZpbmFsIE9iamVjdCBhcmcpIHsKKyAgICBmb3IgKEdlbmVyYXRlQW1hbHRoZWFXaXphcmRQYWdlIGFtYWx0aGVhV2l6YXJkUGFnZSA6IHRoaXMud2l6YXJkUGFnZXMpIHsKKyAgICAgIGFtYWx0aGVhV2l6YXJkUGFnZS5zZXRQYWdlQ29tcGxldGUoYW1hbHRoZWFXaXphcmRQYWdlLmlzUGFnZUNvbXBsZXRlKCkpOworICAgIH0KKyAgfQorCisKK30KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aXphcmQvR2VuZXJhdGVBbWFsdGhlYVdpemFyZFBhZ2UuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91aS93aXphcmQvR2VuZXJhdGVBbWFsdGhlYVdpemFyZFBhZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTYwYjNkCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3VpL3dpemFyZC9HZW5lcmF0ZUFtYWx0aGVhV2l6YXJkUGFnZS5qYXZhCkBAIC0wLDAgKzEsMTE3IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLndpemFyZDsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk9ic2VydmFibGU7CitpbXBvcnQgamF2YS51dGlsLk9ic2VydmVyOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsLklPcHRpb25zUHJvdmlkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsLk5vU2Nyb2xsRm9ybUxheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLndpZGdldC5idWlsZGVyLldpZGdldEJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5sYXlvdXQuR3JpZERhdGFGYWN0b3J5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpemFyZC5XaXphcmRQYWdlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TY3JvbGxlZENvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CisKKy8qKgorICogVGhpcyBpcyBhIGNvbW1vbiBXaXphcmRQYWdlIGNsYXNzIGZvciBBbWFsdGhlYSBnZW5lcmF0aW9uCisgKi8KK3B1YmxpYyBjbGFzcyBHZW5lcmF0ZUFtYWx0aGVhV2l6YXJkUGFnZSBleHRlbmRzIFdpemFyZFBhZ2UgaW1wbGVtZW50cyBJT3B0aW9uc1Byb3ZpZGVyLCBPYnNlcnZlciB7CisKKyAgZmluYWwgTGlzdDxXaWRnZXRCdWlsZGVyPiBidWlsZGVyczsKKyAgZmluYWwgTGlzdDxXaWRnZXQ+IHdpZGdldHM7CisgIGZpbmFsIFByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOworCisgIC8qKgorICAgKiBAcGFyYW0gdGl0bGUgLSBQYWdlIFRpdGxlCisgICAqIEBwYXJhbSB3aWRnZXRCdWlsZGVycyAtIExpc3Qgb2YgQFdpZGdldEJ1aWxkZXIgZm9yIHRoaXMgcGFnZQorICAgKi8KKyAgcHVibGljIEdlbmVyYXRlQW1hbHRoZWFXaXphcmRQYWdlKGZpbmFsIFN0cmluZyB0aXRsZSwgZmluYWwgTGlzdDxXaWRnZXRCdWlsZGVyPiB3aWRnZXRCdWlsZGVycykgeworICAgIHN1cGVyKCJBTUFMVEhFQSBHZW5lcmF0aW9uIiwgdGl0bGUsIG51bGwpOworICAgIHRoaXMuYnVpbGRlcnMgPSB3aWRnZXRCdWlsZGVyczsKKyAgICB0aGlzLndpZGdldHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKyAgfQorCisKKyAgLyoqCisgICAqIHtAaW5oZXJpdERvY30KKyAgICovCisgIEBPdmVycmlkZQorICBwdWJsaWMgdm9pZCBjcmVhdGVDb250cm9sKGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQpIHsKKyAgICBDb21wb3NpdGUgcm9vdENvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisgICAgcm9vdENvbXBvc2l0ZS5zZXRMYXlvdXQobmV3IE5vU2Nyb2xsRm9ybUxheW91dCgpKTsKKworICAgIFNjcm9sbGVkQ29tcG9zaXRlIHNjcm9sbGVkQ29tcG9zaXRlID0KKyAgICAgICAgbmV3IFNjcm9sbGVkQ29tcG9zaXRlKHJvb3RDb21wb3NpdGUsIFNXVC5CT1JERVIgfCBTV1QuVl9TQ1JPTEwgfCBTV1QuSF9TQ1JPTEwpOworICAgIHNjcm9sbGVkQ29tcG9zaXRlCisgICAgICAgIC5zZXRMYXlvdXREYXRhKEdyaWREYXRhRmFjdG9yeS5maWxsRGVmYXVsdHMoKS5ncmFiKHRydWUsIHRydWUpLmhpbnQoU1dULkRFRkFVTFQsIFNXVC5ERUZBVUxUKS5jcmVhdGUoKSk7CisgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0RXhwYW5kSG9yaXpvbnRhbCh0cnVlKTsKKyAgICBzY3JvbGxlZENvbXBvc2l0ZS5zZXRFeHBhbmRWZXJ0aWNhbCh0cnVlKTsKKyAgICBDb21wb3NpdGUgbWFpbkNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUoc2Nyb2xsZWRDb21wb3NpdGUsIFNXVC5GSUxMKTsKKyAgICBtYWluQ29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgpKTsKKworICAgIHRoaXMuYnVpbGRlcnMuc3RyZWFtKCkuZm9yRWFjaChidWlsZGVyIC0+IHsKKyAgICAgIFdpZGdldCB3aWRnZXQgPSBidWlsZGVyLmJ1aWxkV2lkZ2V0KG1haW5Db21wb3NpdGUpOworICAgICAgdGhpcy53aWRnZXRzLmFkZCh3aWRnZXQpOworICAgICAgd2lkZ2V0LmFkZE9ic2VydmVyKHRoaXMpOworICAgIH0pOworCisgICAgc2Nyb2xsZWRDb21wb3NpdGUuc2V0Q29udGVudChtYWluQ29tcG9zaXRlKTsKKyAgICBzZXRDb250cm9sKHJvb3RDb21wb3NpdGUpOworICAgIHNldFBhZ2VDb21wbGV0ZShmYWxzZSk7CisgIH0KKworCisgIC8qKgorICAgKiB7QGluaGVyaXREb2N9CisgICAqLworICBAT3ZlcnJpZGUKKyAgcHVibGljIFByb3BlcnRpZXMgZ2V0T3B0aW9ucygpIHsKKyAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYygoKSAtPiB0aGlzLndpZGdldHMuc3RyZWFtKCkuZm9yRWFjaCh3IC0+IHRoaXMucHJvcHMucHV0QWxsKHcuZ2V0T3B0aW9ucygpKSkpOworICAgIHJldHVybiB0aGlzLnByb3BzOworICB9CisKKworICAvKioKKyAgICoge0Bpbmhlcml0RG9jfQorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBib29sZWFuIGlzUGFnZUNvbXBsZXRlKCkgeworICAgIGZvciAoV2lkZ2V0IHdpZCA6IHRoaXMud2lkZ2V0cykgeworICAgICAgSVN0YXR1cyB2YWxpZGF0ZSA9IHdpZC52YWxpZGF0ZSgpOworICAgICAgaWYgKHZhbGlkYXRlLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5FUlJPUikgeworICAgICAgICBzZXRFcnJvck1lc3NhZ2UodmFsaWRhdGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgICAgZWxzZSBpZiAoKHZhbGlkYXRlLmdldFNldmVyaXR5KCkgPT0gSVN0YXR1cy5XQVJOSU5HKSB8fCAodmFsaWRhdGUuZ2V0U2V2ZXJpdHkoKSA9PSBJU3RhdHVzLklORk8pKSB7CisgICAgICAgIHNldEVycm9yTWVzc2FnZShudWxsKTsKKyAgICAgICAgc2V0TWVzc2FnZSh2YWxpZGF0ZS5nZXRNZXNzYWdlKCksIHZhbGlkYXRlLmdldFNldmVyaXR5KCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgICAgc2V0RXJyb3JNZXNzYWdlKG51bGwpOworICAgIHNldE1lc3NhZ2UobnVsbCk7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworCisgIC8qKgorICAgKiB7QGluaGVyaXREb2N9CisgICAqLworICBAT3ZlcnJpZGUKKyAgcHVibGljIHZvaWQgdXBkYXRlKGZpbmFsIE9ic2VydmFibGUgbywgZmluYWwgT2JqZWN0IGFyZykgeworICAgIHNldFBhZ2VDb21wbGV0ZShpc1BhZ2VDb21wbGV0ZSgpKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL3RhcmdldC8NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDk1ZDA0Y2EuLmY1YThlMzkgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yLDE4ICsyLDE5IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogVXRpbAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsO3NpbmdsZXRvbjo9dHJ1ZQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDAuOS44LnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsLkFjdGl2YXRvcgogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmc7YnVuZGxlLXZlcnNpb249IjEuMC4wIiwKKyBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcsCiAgb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLAogIG9yZy5lY2xpcHNlLmpmYWNlLAogIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbAorIG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbCwKKyBvcmcuZWNsaXBzZS5lcXVpbm94LnByZWZlcmVuY2VzCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsLnBhcnNlcnMsCi0gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsLnByZWZlcmVuY2VzLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC51dGlsLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC53b3Jrc3BhY2VzCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvYmluLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9iaW4vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZGIyZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9iaW4vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS9vcmcvCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2NTZmNi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIg0KLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4NCi0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gIDxwYXJlbnQ+DQotICAgIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvYXJ0aWZhY3RJZD4NCi0gICAgPHZlcnNpb24+MS4wLjAucXVhbGlmaWVyPC92ZXJzaW9uPg0KLSAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L3JlbGF0aXZlUGF0aD4NCi0gIDwvcGFyZW50Pg0KLSAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLQ0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL0FjdGl2YXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9BY3RpdmF0b3IuamF2YQppbmRleCA0OWI1OTJjLi4wMDZmYjY2IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL0FjdGl2YXRvci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3V0aWwvQWN0aXZhdG9yLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3V0aWwvQXBwNG1jVG9vbENvbnN0YW50cy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9BcHA0bWNUb29sQ29uc3RhbnRzLmphdmEKaW5kZXggOTY0MjAwYy4uZTE4NGRhNyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9BcHA0bWNUb29sQ29uc3RhbnRzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9BcHA0bWNUb29sQ29uc3RhbnRzLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3V0aWwvcGFyc2Vycy9PcHRpb25zRmlsZVBhcnNlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9wYXJzZXJzL09wdGlvbnNGaWxlUGFyc2VyLmphdmEKaW5kZXggY2UxNDBmNi4uNzg5Y2JjYSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9wYXJzZXJzL09wdGlvbnNGaWxlUGFyc2VyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9wYXJzZXJzL09wdGlvbnNGaWxlUGFyc2VyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3V0aWwvcHJlZmVyZW5jZXMvRGVmYXVsdFNDQVRvb2xzUHJlZmVyZW5jZXMuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3V0aWwvcHJlZmVyZW5jZXMvRGVmYXVsdFNDQVRvb2xzUHJlZmVyZW5jZXMuamF2YQppbmRleCBmOGUxOTM3Li40N2IwZjdiIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3ByZWZlcmVuY2VzL0RlZmF1bHRTQ0FUb29sc1ByZWZlcmVuY2VzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC9wcmVmZXJlbmNlcy9EZWZhdWx0U0NBVG9vbHNQcmVmZXJlbmNlcy5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3V0aWwvU0NBVG9vbHNEaXJlY3RvcnlUeXBlLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3V0aWwvU0NBVG9vbHNEaXJlY3RvcnlUeXBlLmphdmEKaW5kZXggODMzNDE4My4uNDc5ZDY3NSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC91dGlsL1NDQVRvb2xzRGlyZWN0b3J5VHlwZS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3V0aWwvdXRpbC9TQ0FUb29sc0RpcmVjdG9yeVR5cGUuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC91dGlsL1NDQVV0aWxzLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3V0aWwvU0NBVXRpbHMuamF2YQppbmRleCBhYjgyZjMwLi4zYTg2M2JmIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3V0aWwvU0NBVXRpbHMuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3V0aWwvU0NBVXRpbHMuamF2YQpAQCAtMSwyMSArMSwxNSBAQAogLyoqDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQotICogDQotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQotICogDQotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlDQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogICovDQogcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwudXRpbDsNCiANCiBpbXBvcnQgamF2YS5pby5GaWxlOw0KIA0KKy8qKg0KKyAqIFV0aWx0eSBjbGFzcw0KKyAqLw0KIHB1YmxpYyBjbGFzcyBTQ0FVdGlscyB7DQogDQogDQpAQCAtMzYsMTEgKzMwLDEwIEBACiAgICAgICBmaW5hbCBTdHJpbmcgY29tcG9uZW50RGlyZWN0b3J5TmFtZSkgew0KICAgICBGaWxlIHNjYURpcjsNCiAgICAgaWYgKChjb21wb25lbnREaXJlY3RvcnlOYW1lICE9IG51bGwpICYmICFjb21wb25lbnREaXJlY3RvcnlOYW1lLmlzRW1wdHkoKSkgew0KLSAgICAgIHNjYURpciA9IG5ldyBGaWxlKHByb2plY3RQYXRoICsgRmlsZS5zZXBhcmF0b3IgKyBkaXJUeXBlICsgRmlsZS5zZXBhcmF0b3IgKw0KLSAgICAgICAgICBjb21wb25lbnREaXJlY3RvcnlOYW1lKTsNCisgICAgICBzY2FEaXIgPSBuZXcgRmlsZShwcm9qZWN0UGF0aCArIEZpbGUuc2VwYXJhdG9yICsgZGlyVHlwZSArIEZpbGUuc2VwYXJhdG9yICsgY29tcG9uZW50RGlyZWN0b3J5TmFtZSk7DQogICAgIH0NCiAgICAgZWxzZSB7DQotICAgICAgc2NhRGlyID0gbmV3IEZpbGUocHJvamVjdFBhdGggKyBGaWxlLnNlcGFyYXRvciArIGRpclR5cGUgKyBGaWxlLnNlcGFyYXRvciApOw0KKyAgICAgIHNjYURpciA9IG5ldyBGaWxlKHByb2plY3RQYXRoICsgRmlsZS5zZXBhcmF0b3IgKyBkaXJUeXBlICsgRmlsZS5zZXBhcmF0b3IpOw0KICAgICB9DQogICAgIGlmIChzY2FEaXIuZXhpc3RzKCkpIHsNCiAgICAgICByZXR1cm4gc2NhRGlyLmdldEFic29sdXRlUGF0aCgpOw0KQEAgLTQ5LDQgKzQyLDUgQEAKICAgICByZXR1cm4gc2NhRGlyLmdldEFic29sdXRlUGF0aCgpOw0KICAgfQ0KIA0KKw0KIH0NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3dvcmtzcGFjZXMvV29ya3NwYWNlT3BlcmF0aW9ucy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EvdXRpbC93b3Jrc3BhY2VzL1dvcmtzcGFjZU9wZXJhdGlvbnMuamF2YQppbmRleCBlM2ZkMzU1Li4xOWQ0ZDVhIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EudXRpbC9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYS91dGlsL3dvcmtzcGFjZXMvV29ya3NwYWNlT3BlcmF0aW9ucy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhL3V0aWwvd29ya3NwYWNlcy9Xb3Jrc3BhY2VPcGVyYXRpb25zLmphdmEKQEAgLTEsNyArMSw3IEBACiANCiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vdGFyZ2V0Lw0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL1RyYXZlcnNlQVNUTWFpbi5jcHAgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9UcmF2ZXJzZUFTVE1haW4uY3BwCmluZGV4IDBlYmFhNWUuLmFlMDM1NTEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL1RyYXZlcnNlQVNUTWFpbi5jcHAKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvVHJhdmVyc2VBU1RNYWluLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvYWxnb3JpdGhtcy9UcmF2ZXJzZUFTVENsYXNzQWN0aW9uLmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RDbGFzc0FjdGlvbi5jcHAKaW5kZXggZjA5NTVkYy4uYzY0MGQ1MSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvYWxnb3JpdGhtcy9UcmF2ZXJzZUFTVENsYXNzQWN0aW9uLmNwcAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9hbGdvcml0aG1zL1RyYXZlcnNlQVNUQ2xhc3NBY3Rpb24uY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCkBAIC0xOTQ2LDcgKzE5NDYsNyBAQAogCXN0ZDo6c3RyaW5nIGZpbGUgPSBmaWxlTmFtZS5zdWJzdHIoZm91bmQgKyAxKTsNCiAJZm91bmQgPSBmaWxlLmZpbmRfbGFzdF9vZigiLiIpOw0KIAlmaWxlID0gZmlsZS5yZXBsYWNlKGZvdW5kLCAxLCAiXyIpOw0KLQl2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUuYXBwZW5kKCIuIikuYXBwZW5kKGZpbGUpLmFwcGVuZCgiLlBMQVQ0TUNfQ1MiKTsNCisJdmFyaWFibGVOYW1lID0gdmFyaWFibGVOYW1lLmFwcGVuZCgiLiIpLmFwcGVuZChmaWxlKS5hcHBlbmQoIi5BUFA0TUNfQ1MiKTsNCiAJcmV0dXJuIHZhcmlhYmxlTmFtZTsNCiB9DQogDQpAQCAtMTk4MSw3ICsxOTgxLDcgQEAKIAllbHNlIHsNCiAJCWZ1bmN0aW9uTmFtZSA9IGN1cnJlbnRBbmFseXplZEZ1bmN0aW9uLT5nZXRGdW5jdGlvbkVudHJ5KCktPmdldEZ1bmN0aW9uTmFtZSgpOw0KIAl9DQotCXZhcmlhYmxlTmFtZSA9IHZhcmlhYmxlTmFtZS5hcHBlbmQoIi4iKS5hcHBlbmQoZmlsZSkuYXBwZW5kKCIuIikuYXBwZW5kKGZ1bmN0aW9uTmFtZSkuYXBwZW5kKCIuIikuYXBwZW5kKHN0ZDo6dG9fc3RyaW5nKGNvdW50KSkuYXBwZW5kKCIuUExBVDRNQ19GUyIpOw0KKwl2YXJpYWJsZU5hbWUgPSB2YXJpYWJsZU5hbWUuYXBwZW5kKCIuIikuYXBwZW5kKGZpbGUpLmFwcGVuZCgiLiIpLmFwcGVuZChmdW5jdGlvbk5hbWUpLmFwcGVuZCgiLiIpLmFwcGVuZChzdGQ6OnRvX3N0cmluZyhjb3VudCkpLmFwcGVuZCgiLkFQUDRNQ19GUyIpOw0KIAlyZXR1cm4gdmFyaWFibGVOYW1lOw0KIH0NCiANCkBAIC0xOTkwLDcgKzE5OTAsNyBAQAogCXN0ZDo6c3RyaW5nIGZpbGUgPSBmaWxlTmFtZS5zdWJzdHIoZm91bmQgKyAxKTsNCiAJZm91bmQgPSBmaWxlLmZpbmRfbGFzdF9vZigiLiIpOw0KIAlmaWxlID0gZmlsZS5yZXBsYWNlKGZvdW5kLCAxLCAiXyIpOw0KLQlzdHJpbmcgbmFtZSA9IGZ1bmN0aW9uTmFtZS5hcHBlbmQoIi4iKS5hcHBlbmQoZmlsZSkuYXBwZW5kKCIuUExBVDRNQ19DUyIpOw0KKwlzdHJpbmcgbmFtZSA9IGZ1bmN0aW9uTmFtZS5hcHBlbmQoIi4iKS5hcHBlbmQoZmlsZSkuYXBwZW5kKCIuQVBQNE1DX0NTIik7DQogCXJldHVybiBuYW1lOw0KIH0NCiANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9hbGdvcml0aG1zL1RyYXZlcnNlQVNUQ2xhc3NBY3Rpb24uaCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RDbGFzc0FjdGlvbi5oCmluZGV4IDAwMmYxOTYuLjBmOTc4MWEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RDbGFzc0FjdGlvbi5oCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RDbGFzc0FjdGlvbi5oCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9hbGdvcml0aG1zL1RyYXZlcnNlQVNUV29ya2VyLmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RXb3JrZXIuY3BwCmluZGV4IGIzZTlmMzMuLmYwMzQxOTkgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RXb3JrZXIuY3BwCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RXb3JrZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogDQogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9hbGdvcml0aG1zL1RyYXZlcnNlQVNUV29ya2VyLmggYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9hbGdvcml0aG1zL1RyYXZlcnNlQVNUV29ya2VyLmgKaW5kZXggYWVkYzk5NS4uM2U2NTI4NyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvYWxnb3JpdGhtcy9UcmF2ZXJzZUFTVFdvcmtlci5oCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2FsZ29yaXRobXMvVHJhdmVyc2VBU1RXb3JrZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQmFzaWNCbG9jay5jcHAgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9CYXNpY0Jsb2NrLmNwcAppbmRleCAzODJlN2Y5Li4yYzE2YWY1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9CYXNpY0Jsb2NrLmNwcAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9CYXNpY0Jsb2NrLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQmFzaWNCbG9jay5oIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQmFzaWNCbG9jay5oCmluZGV4IGFkZTNlN2YuLjBjMzlhNTUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0Jhc2ljQmxvY2suaAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9CYXNpY0Jsb2NrLmgKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0NhbGxFbnRyeS5jcHAgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DYWxsRW50cnkuY3BwCmluZGV4IGJiODZmODEuLjNkZjg2ZWEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0NhbGxFbnRyeS5jcHAKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQ2FsbEVudHJ5LmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQ2FsbEVudHJ5LmggYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DYWxsRW50cnkuaAppbmRleCA3ZjQwYWU1Li40MjI4ZjNjIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DYWxsRW50cnkuaAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DYWxsRW50cnkuaApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQ2xpZW50RGF0YUZvclRocmVhZC5jcHAgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DbGllbnREYXRhRm9yVGhyZWFkLmNwcAppbmRleCAyYjhiYjNlLi5kZjc0ZGMxIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DbGllbnREYXRhRm9yVGhyZWFkLmNwcAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DbGllbnREYXRhRm9yVGhyZWFkLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQ2xpZW50RGF0YUZvclRocmVhZC5oIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvQ2xpZW50RGF0YUZvclRocmVhZC5oCmluZGV4IDY4MmYxZDkuLjgzMjRiYmIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0NsaWVudERhdGFGb3JUaHJlYWQuaAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9DbGllbnREYXRhRm9yVGhyZWFkLmgKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0Z1bmN0aW9uQW5kQ2FsbGVlcy5jcHAgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkFuZENhbGxlZXMuY3BwCmluZGV4IGU3MWU0MGQuLjMzOWRhN2MgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0Z1bmN0aW9uQW5kQ2FsbGVlcy5jcHAKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvRnVuY3Rpb25BbmRDYWxsZWVzLmNwcApAQCAtMSw3ICsxLDcgQEAKIA0KIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvRnVuY3Rpb25BbmRDYWxsZWVzLmggYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkFuZENhbGxlZXMuaAppbmRleCAxYjFjMmZhLi5mYzE0MzRkIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkFuZENhbGxlZXMuaAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkFuZENhbGxlZXMuaApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvRnVuY3Rpb25FbnRyeS5jcHAgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkVudHJ5LmNwcAppbmRleCA0YmY2NDc4Li5iOWViMzYzIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkVudHJ5LmNwcAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkVudHJ5LmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvRnVuY3Rpb25FbnRyeS5oIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvRnVuY3Rpb25FbnRyeS5oCmluZGV4IDQwMDg1MmYuLjQwY2E1ZTYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0Z1bmN0aW9uRW50cnkuaAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvbkVudHJ5LmgKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0Z1bmN0aW9uUGFyYW1ldGVyLmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0Z1bmN0aW9uUGFyYW1ldGVyLmNwcAppbmRleCA2MTZjOTY5Li4xN2U4Njk2IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvblBhcmFtZXRlci5jcHAKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvRnVuY3Rpb25QYXJhbWV0ZXIuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvblBhcmFtZXRlci5oIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvRnVuY3Rpb25QYXJhbWV0ZXIuaAppbmRleCAxZmM0MzYzLi5kMDdjNjU5IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9GdW5jdGlvblBhcmFtZXRlci5oCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0Z1bmN0aW9uUGFyYW1ldGVyLmgKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0dsb2JhbFZhcmlhYmxlLmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0dsb2JhbFZhcmlhYmxlLmNwcAppbmRleCAyZGQwOWY4Li4xODlhYjVjIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9HbG9iYWxWYXJpYWJsZS5jcHAKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvR2xvYmFsVmFyaWFibGUuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9HbG9iYWxWYXJpYWJsZS5oIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvR2xvYmFsVmFyaWFibGUuaAppbmRleCA3ZjlmZGRhLi4xYjE1MTRjIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9HbG9iYWxWYXJpYWJsZS5oCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0dsb2JhbFZhcmlhYmxlLmgKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0dsb2JhbFZhcmlhYmxlQWNjZXNzLmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0dsb2JhbFZhcmlhYmxlQWNjZXNzLmNwcAppbmRleCBkY2JmYjdjLi5iOTNlMTU1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9HbG9iYWxWYXJpYWJsZUFjY2Vzcy5jcHAKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvR2xvYmFsVmFyaWFibGVBY2Nlc3MuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9HbG9iYWxWYXJpYWJsZUFjY2Vzcy5oIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvR2xvYmFsVmFyaWFibGVBY2Nlc3MuaAppbmRleCAyOWM1YmE5Li41MTBkOWM2IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9HbG9iYWxWYXJpYWJsZUFjY2Vzcy5oCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL0dsb2JhbFZhcmlhYmxlQWNjZXNzLmgKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL1RyYXZlcnNlQVNURGF0YVN0cnVjdHVyZS5jcHAgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9UcmF2ZXJzZUFTVERhdGFTdHJ1Y3R1cmUuY3BwCmluZGV4IGFmNjA3OGIuLjA0NzdjMDUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL1RyYXZlcnNlQVNURGF0YVN0cnVjdHVyZS5jcHAKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvVHJhdmVyc2VBU1REYXRhU3RydWN0dXJlLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvVHJhdmVyc2VBU1REYXRhU3RydWN0dXJlLmggYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9UcmF2ZXJzZUFTVERhdGFTdHJ1Y3R1cmUuaAppbmRleCBhNTc1NDllLi4yNDIxNzllIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9UcmF2ZXJzZUFTVERhdGFTdHJ1Y3R1cmUuaAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9UcmF2ZXJzZUFTVERhdGFTdHJ1Y3R1cmUuaApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvVHJhdmVyc2luZ0RhdGEuY3BwIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvVHJhdmVyc2luZ0RhdGEuY3BwCmluZGV4IDllMDBjYWYuLjA3ZGY2YWYgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL1RyYXZlcnNpbmdEYXRhLmNwcAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9UcmF2ZXJzaW5nRGF0YS5jcHAKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL1RyYXZlcnNpbmdEYXRhLmggYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9kYXRhX3N0cnVjdHVyZS9UcmF2ZXJzaW5nRGF0YS5oCmluZGV4IGY2ZTlmYjcuLjdhMTc3NzIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2RhdGFfc3RydWN0dXJlL1RyYXZlcnNpbmdEYXRhLmgKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvZGF0YV9zdHJ1Y3R1cmUvVHJhdmVyc2luZ0RhdGEuaApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvaGVscGVycy9IZWxwZXJzLmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2hlbHBlcnMvSGVscGVycy5jcHAKaW5kZXggZGU4NjhlNC4uZjk0MTA0OCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvaGVscGVycy9IZWxwZXJzLmNwcAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9oZWxwZXJzL0hlbHBlcnMuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCkBAIC00MjUsOCArNDI1LDggQEAKIA0KIA0KIGJvb2wgaXNWYXJpYWJsZVN0YXRpYyhzdGQ6OnN0cmluZyB2YXJpYWJsZU5hbWUpew0KLQkJc3RkOjpzaXplX3QgcG9zID0gdmFyaWFibGVOYW1lLmZpbmQoIlBMQVQ0TUNfQ1MiKTsNCi0JCXN0ZDo6c2l6ZV90IHBvczEgPSB2YXJpYWJsZU5hbWUuZmluZCgiUExBVDRNQ19GUyIpOw0KKwkJc3RkOjpzaXplX3QgcG9zID0gdmFyaWFibGVOYW1lLmZpbmQoIkFQUDRNQ19DUyIpOw0KKwkJc3RkOjpzaXplX3QgcG9zMSA9IHZhcmlhYmxlTmFtZS5maW5kKCJBUFA0TUNfRlMiKTsNCiAJCWlmIChwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgcG9zMSAhPSBzdGQ6OnN0cmluZzo6bnBvcyl7DQogCQkJcmV0dXJuIHRydWU7DQogCQl9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvaGVscGVycy9IZWxwZXJzLmggYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9oZWxwZXJzL0hlbHBlcnMuaAppbmRleCA3OGNiZDhjLi5mMjM3M2RjIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9oZWxwZXJzL0hlbHBlcnMuaAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9oZWxwZXJzL0hlbHBlcnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvaGVscGVycy9UcmF2ZXJzZUFTVE1haW5IZWxwZXJzLmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2hlbHBlcnMvVHJhdmVyc2VBU1RNYWluSGVscGVycy5jcHAKaW5kZXggY2NhZWMzNC4uOTc4MzdkNiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2EvaGVscGVycy9UcmF2ZXJzZUFTVE1haW5IZWxwZXJzLmNwcAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9oZWxwZXJzL1RyYXZlcnNlQVNUTWFpbkhlbHBlcnMuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9oZWxwZXJzL1RyYXZlcnNlQVNUTWFpbkhlbHBlcnMuaCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2hlbHBlcnMvVHJhdmVyc2VBU1RNYWluSGVscGVycy5oCmluZGV4IGYxZmRlZTQuLmQ1NjQzZmEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2hlbHBlcnMvVHJhdmVyc2VBU1RNYWluSGVscGVycy5oCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL2hlbHBlcnMvVHJhdmVyc2VBU1RNYWluSGVscGVycy5oCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9vdXRwdXQvT3V0cHV0LmNwcCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL291dHB1dC9PdXRwdXQuY3BwCmluZGV4IDQ3YzkwYzIuLmNjOGIwNzIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL291dHB1dC9PdXRwdXQuY3BwCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL291dHB1dC9PdXRwdXQuY3BwCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9vdXRwdXQvT3V0cHV0LmggYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuY19zb3VyY2VzL3NjYS9vdXRwdXQvT3V0cHV0LmgKaW5kZXggYjFmODYyZi4uYWM0MWZhNiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmNfc291cmNlcy9zY2Evb3V0cHV0L091dHB1dC5oCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5jX3NvdXJjZXMvc2NhL291dHB1dC9PdXRwdXQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmRvY3UvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5kb2N1Ly5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDY0MzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmRvY3UvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmRvY3UvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZG9jdS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhZjhlOGNhLi4xYzA0NTI1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZG9jdS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZG9jdS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw1ICsyLDUgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCiBCdW5kbGUtTmFtZTogU0NBMkFNQUxUSEVBIERvY3VtZW50YXRpb24NCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmRvY3U7c2luZ2xldG9uOj10cnVlDQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcg0KK0J1bmRsZS1WZXJzaW9uOiAwLjkuOC5xdWFsaWZpZXINCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZw0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5kb2N1L3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZG9jdS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzViYjkxLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5kb2N1L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmRvY3U8L2FydGlmYWN0SWQ+DQotICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+DQotDQotICANCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDY2NzAxYzEuLjk0ZTViZjIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNyArMiw3IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQogQnVuZGxlLU5hbWU6IEV4cG9ydGVyDQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlcg0KLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXINCitCdW5kbGUtVmVyc2lvbjogMC45LjgucXVhbGlmaWVyDQogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci5BY3RpdmF0b3INCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZw0KIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsDQpAQCAtMTAsMTQgKzEwLDE0IEBACiAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsDQogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIsDQogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbiwNCi0gb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLnNwaGlueCwNCiAgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLA0KICBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcsDQotIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubW9kZWwudXRpbHM7YnVuZGxlLXZlcnNpb249IjEuMC4wIiwNCisgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscywNCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlcg0KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44DQogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkNCiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlciwNCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci5sb2NrcywNCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci51dGlsDQorQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyDQogDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL2Jpbi8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL2Jpbi8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjFkYjJlLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9iaW4vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS9vcmcvCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTFiZGExLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIg0KLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4NCi0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gIDxwYXJlbnQ+DQotICAgIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvYXJ0aWZhY3RJZD4NCi0gICAgPHZlcnNpb24+MS4wLjAucXVhbGlmaWVyPC92ZXJzaW9uPg0KLSAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L3JlbGF0aXZlUGF0aD4NCi0gIDwvcGFyZW50Pg0KLSAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlcjwvYXJ0aWZhY3RJZD4NCi0gIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4NCi0NCi0gIA0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvQWN0aXZhdG9yLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvQWN0aXZhdG9yLmphdmEKaW5kZXggNTI4NzZjNC4uZDk4OGRmNSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL0FjdGl2YXRvci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9BY3RpdmF0b3IuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL0NvbXBvbmVudE1vZGVsVHJhbnNmb3JtZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9Db21wb25lbnRNb2RlbFRyYW5zZm9ybWVyLmphdmEKaW5kZXggOGM1YzkzYS4uYjAyMjkwNSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL0NvbXBvbmVudE1vZGVsVHJhbnNmb3JtZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvQ29tcG9uZW50TW9kZWxUcmFuc2Zvcm1lci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCkBAIC05Myw3ICs5Myw3IEBACiAgIHB1YmxpYyB2b2lkIGFkZFRhc2tUb0NvbXBvbmVudChmaW5hbCBGdW5jdGlvbiB0YXNrLCBmaW5hbCBQcm9jZXNzIHByb2Nlc3MpIHsNCiAgICAgU3RyaW5nIGZjID0gdGFzay5nZXRDb250YWluZXIoKS5nZXROYW1lKCk7DQogICAgIGlmICgoZmMgIT0gbnVsbCkgJiYgKHRoaXMuZGF0YVN0b3JlLmdldENvbXBvbmVudE1hcCgpLmdldChmYykgIT0gbnVsbCkpIHsNCi0gICAgICB0aGlzLmRhdGFTdG9yZS5nZXRDb21wb25lbnRNYXAoKS5nZXQoZmMpLmdldFRhc2tzKCkuYWRkKHByb2Nlc3MpOw0KKyAgICAgIHRoaXMuZGF0YVN0b3JlLmdldENvbXBvbmVudE1hcCgpLmdldChmYykuZ2V0UHJvY2Vzc2VzKCkuYWRkKHByb2Nlc3MpOw0KICAgICB9DQogICB9DQogfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9Pc01vZGVsVHJhbnNmb3JtZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9Pc01vZGVsVHJhbnNmb3JtZXIuamF2YQppbmRleCBkNmVkYTQ3Li43MjI4MTgyIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvT3NNb2RlbFRyYW5zZm9ybWVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL09zTW9kZWxUcmFuc2Zvcm1lci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvU0NBVG9BbWFsdGhlYUV4cG9ydGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvU0NBVG9BbWFsdGhlYUV4cG9ydGVyLmphdmEKaW5kZXggOWZhY2U4Ny4uNmY1ZWQ4NSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL1NDQVRvQW1hbHRoZWFFeHBvcnRlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9TQ0FUb0FtYWx0aGVhRXhwb3J0ZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL1N3TW9kZWxUcmFuc2Zvcm1lci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL1N3TW9kZWxUcmFuc2Zvcm1lci5qYXZhCmluZGV4IDg2MzRiOWIuLjFiNDFhYjMgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9Td01vZGVsVHJhbnNmb3JtZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvU3dNb2RlbFRyYW5zZm9ybWVyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KQEAgLTE2LDI0ICsxNiwyNSBAQAogDQogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTGlua2VkSGFzaFNldDsNCiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQogaW1wb3J0IGphdmEudXRpbC5TZXQ7DQogaW1wb3J0IGphdmEudXRpbC5zdHJlYW0uQ29sbGVjdG9yczsNCiANCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFjdGl2aXR5R3JhcGg7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5BbWFsdGhlYTsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkFtYWx0aGVhRmFjdG9yeTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkNhbGxHcmFwaDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkNhbGxTZXF1ZW5jZTsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLkdyb3VwOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuSVNSOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuTGFiZWxBY2Nlc3NFbnVtOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuUnVubmFibGU7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5SdW5uYWJsZUNhbGw7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5TV01vZGVsOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU2VtYXBob3JlOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU2VtYXBob3JlQWNjZXNzOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuU2VtYXBob3JlQWNjZXNzRW51bTsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlN0cmluZ09iamVjdDsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLmFtYWx0aGVhLm1vZGVsLlRhc2s7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbC5UYXNrUnVubmFibGVDYWxsOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcubWFuYWdlci5Mb2dGYWN0b3J5LlNldmVyaXR5Ow0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcudXRpbC5Mb2dVdGlsOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyLmxvY2tzLkxvY2tGdW5jdGlvbi5Mb2NrVHlwZTsNCkBAIC01MSw3ICs1Miw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuZW1mLmNvbW1vbi51dGlsLkVMaXN0Ow0KIA0KIC8qKg0KLSAqIFRoaXMgY2xhc3MgdHJhbnNmb3JtcyBhbGwgU3dNb2RlbCByZWxhdGVkIHBhcnQgYW5kIHN1Ym1vZGVscyB0byB0aGUgQU1BTFRIRUEgbW9kZWwNCisgKiBUaGlzIGNsYXNzIHRyYW5zZm9ybXMgYWxsIFN3TW9kZWwgcmVsYXRlZCBwYXJ0IGFuZCBzdWItbW9kZWxzIHRvIHRoZSBBTUFMVEhFQSBtb2RlbA0KICAqLw0KIHB1YmxpYyBjbGFzcyBTd01vZGVsVHJhbnNmb3JtZXIgew0KIA0KQEAgLTExMiw2ICsxMTMsNyBAQAogICAgICAgICBMb2dVdGlsLmxvZ0V4Y2VwdGlvbihMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBlLmdldENsYXNzKCksIGUsIEFjdGl2YXRvci5QTFVHSU5fSUQpOw0KICAgICAgIH0NCiAgICAgfQ0KKyAgICANCiAgIH0NCiANCiANCkBAIC0xNzQsNyArMTc2LDcgQEAKICAgICovDQogICBwcml2YXRlIFNldDxGdW5jdGlvbj4gZ2V0QWxsZnVuY3Rpb25zKGZpbmFsIFNDQVJlc291cmNlIHJlc291cmNlKSB7DQogICAgIEVMaXN0PENvbnRhaW5lcj4gY29udGFpbmVycyA9ICgoUHJvamVjdCkgcmVzb3VyY2UuZ2V0Q29udGVudHMoKS5nZXQoMCkpLmdldENvbnRhaW5lcnMoKTsNCi0gICAgU2V0PEZ1bmN0aW9uPiBhbGxGdW5jdGlvbnMgPSBuZXcgSGFzaFNldDxGdW5jdGlvbj4oKTsNCisgICAgU2V0PEZ1bmN0aW9uPiBhbGxGdW5jdGlvbnMgPSBuZXcgTGlua2VkSGFzaFNldDxGdW5jdGlvbj4oKTsNCiAgICAgZm9yIChDb250YWluZXIgYyA6IGNvbnRhaW5lcnMpIHsNCiAgICAgICBhbGxGdW5jdGlvbnMuYWRkQWxsKGMuZ2V0RnVuY3Rpb25zKCkpOw0KICAgICB9DQpAQCAtMTg3LDExICsxODksMTEgQEAKICAgcHJpdmF0ZSB2b2lkIHRyYW5zZm9ybUlTUkludGVybmFscyhmaW5hbCBGdW5jdGlvbiBmdW5jdGlvbikgew0KICAgICBTdHJpbmcgbmFtZSA9IGZ1bmN0aW9uLmdldE5hbWUoKTsNCiAgICAgSVNSIGlzciA9IHRoaXMuZGF0YS5nZXRJc3JNYXAoKS5nZXQobmFtZSk7DQotICAgIENhbGxHcmFwaCBjYWxsR3JhcGggPSBBbWFsdGhlYUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhbGxHcmFwaCgpOw0KLSAgICBDYWxsU2VxdWVuY2UgY2FsbFNlcXVlbmNlID0gQW1hbHRoZWFGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYWxsU2VxdWVuY2UoKTsNCi0NCi0gICAgdHJhbnNmb3JtU3RhdGVtZW50cyhmdW5jdGlvbiwgY2FsbEdyYXBoLCBjYWxsU2VxdWVuY2UpOw0KLSAgICBpc3Iuc2V0Q2FsbEdyYXBoKGNhbGxHcmFwaCk7DQorICAgIEFjdGl2aXR5R3JhcGggYWN0aXZpdHlHcmFwaCA9IEFtYWx0aGVhRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlQWN0aXZpdHlHcmFwaCgpOw0KKyAgICBHcm91cCBncm91cCA9IEFtYWx0aGVhRmFjdG9yeS5lSU5TVEFOQ0UuY3JlYXRlR3JvdXAoKTsNCisgICAgZ3JvdXAuc2V0T3JkZXJlZCh0cnVlKTsNCisgICAgdHJhbnNmb3JtU3RhdGVtZW50cyhmdW5jdGlvbiwgYWN0aXZpdHlHcmFwaCwgZ3JvdXApOw0KKyAgICBpc3Iuc2V0QWN0aXZpdHlHcmFwaChhY3Rpdml0eUdyYXBoKTsNCiAgIH0NCiANCiAgIC8qKg0KQEAgLTIwMCwyMiArMjAyLDIyIEBACiAgICAqIEBwYXJhbSBjYWxsR3JhcGgNCiAgICAqIEBwYXJhbSBjYWxsU2VxdWVuY2UNCiAgICAqLw0KLSAgcHJpdmF0ZSB2b2lkIHRyYW5zZm9ybVN0YXRlbWVudHMoZmluYWwgRnVuY3Rpb24gZnVuY3Rpb24sIGZpbmFsIENhbGxHcmFwaCBjYWxsR3JhcGgsDQotICAgICAgZmluYWwgQ2FsbFNlcXVlbmNlIGNhbGxTZXF1ZW5jZSkgew0KKyAgcHJpdmF0ZSB2b2lkIHRyYW5zZm9ybVN0YXRlbWVudHMoZmluYWwgRnVuY3Rpb24gZnVuY3Rpb24sIGZpbmFsIEFjdGl2aXR5R3JhcGggYWN0aXZpdHlHcmFwaCwNCisgICAgICBmaW5hbCBHcm91cCBncm91cCkgew0KICAgICBFTGlzdDxTdG10Q2FsbD4gc3RtdHNlcSA9IGZ1bmN0aW9uLmdldFN0bXRzZXEoKTsNCiAgICAgZm9yIChTdG10Q2FsbCBzdG10Q2FsbCA6IHN0bXRzZXEpIHsNCiAgICAgICBpZiAoc3RtdENhbGwgaW5zdGFuY2VvZiBGdW5jdGlvbkNhbGwpIHsNCiAgICAgICAgIEZ1bmN0aW9uQ2FsbCBmYyA9IChGdW5jdGlvbkNhbGwpIHN0bXRDYWxsOw0KICAgICAgICAgUnVubmFibGUgcnVubmFibGUgPSB0aGlzLmRhdGEuZ2V0UnVubmFibGVNYXAoKS5nZXQoZmMuZ2V0Q2FsbHMoKS5nZXROYW1lKCkpOw0KICAgICAgICAgaWYgKHJ1bm5hYmxlICE9IG51bGwpIHsNCi0gICAgICAgICAgVGFza1J1bm5hYmxlQ2FsbCB0YXNrUnVubmFibGVDYWxsID0gQW1hbHRoZWFGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVUYXNrUnVubmFibGVDYWxsKCk7DQotICAgICAgICAgIHRhc2tSdW5uYWJsZUNhbGwuc2V0UnVubmFibGUocnVubmFibGUpOw0KLSAgICAgICAgICBjYWxsU2VxdWVuY2UuZ2V0Q2FsbHMoKS5hZGQodGFza1J1bm5hYmxlQ2FsbCk7DQotICAgICAgICAgIEN1c3RvbVByb3BlcnRpZXNBZGRlci5hZGRTb3VyY2VMaW5lSW5mb3JtYXRpb24odGFza1J1bm5hYmxlQ2FsbCwgZmMuZ2V0U3JjbGluZSgpLCBmYy5nZXRTcmNjb2woKSk7DQorICAgICAgICAgIFJ1bm5hYmxlQ2FsbCBydW5uYWJsZUNhbGw9QW1hbHRoZWFGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVSdW5uYWJsZUNhbGwoKTsNCisgICAgICAgICAgcnVubmFibGVDYWxsLnNldFJ1bm5hYmxlKHJ1bm5hYmxlKTsNCisgICAgICAgICAgZ3JvdXAuZ2V0SXRlbXMoKS5hZGQocnVubmFibGVDYWxsKTsNCisgICAgICAgICAgQ3VzdG9tUHJvcGVydGllc0FkZGVyLmFkZFNvdXJjZUxpbmVJbmZvcm1hdGlvbihydW5uYWJsZUNhbGwsIGZjLmdldFNyY2xpbmUoKSwgZmMuZ2V0U3JjY29sKCkpOw0KICAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgfQ0KLSAgICBjYWxsR3JhcGguZ2V0R3JhcGhFbnRyaWVzKCkuYWRkKGNhbGxTZXF1ZW5jZSk7DQorICAgIGFjdGl2aXR5R3JhcGguZ2V0SXRlbXMoKS5hZGQoZ3JvdXApOw0KICAgfQ0KIA0KICAgLyoqDQpAQCAtMjI1LDEwICsyMjcsMTEgQEAKICAgICBTdHJpbmcgbmFtZSA9IGZ1bmN0aW9uLmdldE5hbWUoKTsNCiAgICAgVGFzayB0YXNrID0gdGhpcy5kYXRhLmdldFRhc2tNYXAoKS5nZXQobmFtZSk7DQogDQotICAgIENhbGxHcmFwaCBjYWxsR3JhcGggPSBBbWFsdGhlYUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUNhbGxHcmFwaCgpOw0KLSAgICBDYWxsU2VxdWVuY2UgY2FsbFNlcXVlbmNlID0gQW1hbHRoZWFGYWN0b3J5LmVJTlNUQU5DRS5jcmVhdGVDYWxsU2VxdWVuY2UoKTsNCi0gICAgdHJhbnNmb3JtU3RhdGVtZW50cyhmdW5jdGlvbiwgY2FsbEdyYXBoLCBjYWxsU2VxdWVuY2UpOw0KLSAgICB0YXNrLnNldENhbGxHcmFwaChjYWxsR3JhcGgpOw0KKyAgICBBY3Rpdml0eUdyYXBoIGFjdGl2aXR5R3JhcGggPSBBbWFsdGhlYUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUFjdGl2aXR5R3JhcGgoKTsNCisgICAgR3JvdXAgZ3JvdXAgPSBBbWFsdGhlYUZhY3RvcnkuZUlOU1RBTkNFLmNyZWF0ZUdyb3VwKCk7DQorICAgIGdyb3VwLnNldE9yZGVyZWQodHJ1ZSk7DQorICAgIHRyYW5zZm9ybVN0YXRlbWVudHMoZnVuY3Rpb24sIGFjdGl2aXR5R3JhcGgsIGdyb3VwKTsNCisgICAgdGFzay5zZXRBY3Rpdml0eUdyYXBoKGFjdGl2aXR5R3JhcGgpOw0KICAgfQ0KIA0KICAgLyoqDQpAQCAtNDMzLDUgKzQzNiw1IEBACiAgICAgdGhpcy5jb21wb25lbnRUcmFuc2Zvcm1lci5hZGRUYXNrVG9Db21wb25lbnQoZnVuY3Rpb24sIGlzcik7DQogICAgIGlzcnMuYWRkKGlzcik7DQogICB9DQotDQorICANCiB9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL1N3TW9kZWxUeXBlRGVmVHJhbnNmb3JtZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9Td01vZGVsVHlwZURlZlRyYW5zZm9ybWVyLmphdmEKaW5kZXggYTYxM2VjNi4uY2JjNTQ2MyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL1N3TW9kZWxUeXBlRGVmVHJhbnNmb3JtZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvU3dNb2RlbFR5cGVEZWZUcmFuc2Zvcm1lci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvVHJhbnNmb3JtZXJEYXRhU3RvcmUuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9UcmFuc2Zvcm1lckRhdGFTdG9yZS5qYXZhCmluZGV4IDk4MGY3YmYuLmFmNmM5YjUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9UcmFuc2Zvcm1lckRhdGFTdG9yZS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9UcmFuc2Zvcm1lckRhdGFTdG9yZS5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvbG9ja3MvTG9ja0RlZmluaXRpb24uamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9sb2Nrcy9Mb2NrRGVmaW5pdGlvbi5qYXZhCmluZGV4IDU0MjEzOTMuLjYzMDMyNTIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9sb2Nrcy9Mb2NrRGVmaW5pdGlvbi5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9sb2Nrcy9Mb2NrRGVmaW5pdGlvbi5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvbG9ja3MvTG9ja0Z1bmN0aW9uLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvbG9ja3MvTG9ja0Z1bmN0aW9uLmphdmEKaW5kZXggNWViZjVmZS4uMWI5OWI2NSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL2xvY2tzL0xvY2tGdW5jdGlvbi5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci9sb2Nrcy9Mb2NrRnVuY3Rpb24uamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL3V0aWwvQ3VzdG9tUHJvcGVydGllc0FkZGVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvdXRpbC9DdXN0b21Qcm9wZXJ0aWVzQWRkZXIuamF2YQppbmRleCAyM2Y5NmE1Li41MzVhOWYyIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvdXRpbC9DdXN0b21Qcm9wZXJ0aWVzQWRkZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvdXRpbC9DdXN0b21Qcm9wZXJ0aWVzQWRkZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL3V0aWwvTExWTUxvZ1V0aWwuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9leHBvcnRlci91dGlsL0xMVk1Mb2dVdGlsLmphdmEKaW5kZXggYWQ1NzAzMy4uMDU5ZTkzNyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmV4cG9ydGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2V4cG9ydGVyL3V0aWwvTExWTUxvZ1V0aWwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZXhwb3J0ZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvZXhwb3J0ZXIvdXRpbC9MTFZNTG9nVXRpbC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDY0MzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL3RhcmdldC8NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL01FVEEtSU5GL01BTklGRVNULk1GIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA3YzY1MjEzLi40MmEwMDdhIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsMTYgKzIsMTcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiBMb2FkZXItU2VyaWFsaXplcgogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAwLjkuOC5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbiwKICBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIsCiAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIKKyBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIuc2VyaWFsaXplcgogQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIuQWN0aXZhdG9yCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL2Jpbi8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci9iaW4vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZGIyZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL2Jpbi8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL29yZy8KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ2MDc2YS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlcjwvYXJ0aWZhY3RJZD4NCi0gIDxwYWNrYWdpbmc+ZWNsaXBzZS1wbHVnaW48L3BhY2thZ2luZz4NCi0NCi0gIA0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL2xvYWRlci9BY3RpdmF0b3IuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvbG9hZGVyL0FjdGl2YXRvci5qYXZhCmluZGV4IGYwMGJmMjIuLmU5NjQ3Y2IgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvbG9hZGVyL0FjdGl2YXRvci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvbG9hZGVyL0FjdGl2YXRvci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL2xvYWRlci9TQ0FJUkxvYWRlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9sb2FkZXIvU0NBSVJMb2FkZXIuamF2YQppbmRleCAwMzA4OTdlLi41NjZhOWVhIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL2xvYWRlci9TQ0FJUkxvYWRlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvbG9hZGVyL1NDQUlSTG9hZGVyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvbG9hZGVyL3V0aWxzL0xvYWRlclNlcmlhbGl6YXRpb25VdGlscy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9sb2FkZXIvdXRpbHMvTG9hZGVyU2VyaWFsaXphdGlvblV0aWxzLmphdmEKaW5kZXggN2YwOTA3OC4uY2E1Zjk5ZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9sb2FkZXIvdXRpbHMvTG9hZGVyU2VyaWFsaXphdGlvblV0aWxzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9sb2FkZXIvdXRpbHMvTG9hZGVyU2VyaWFsaXphdGlvblV0aWxzLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2VyaWFsaXplci9TQ0FJUlNlcmlhbGl6ZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2VyaWFsaXplci9TQ0FJUlNlcmlhbGl6ZXIuamF2YQppbmRleCBkNDEzNmVkLi4zMjU2MzhkIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIubG9hZGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NlcmlhbGl6ZXIvU0NBSVJTZXJpYWxpemVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLmxvYWRlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zZXJpYWxpemVyL1NDQUlSU2VyaWFsaXplci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvLmNsYXNzcGF0aCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci8uY2xhc3NwYXRoCmluZGV4IGVkMmJjMTIuLjgxMDY1YmQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci8uY2xhc3NwYXRoCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci8uY2xhc3NwYXRoCkBAIC0xLDcgKzEsMTEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQogPGNsYXNzcGF0aD4NCiAJPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+DQotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUi9vcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGUvSmF2YVNFLTEuNiIvPg0KKwk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIvb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlL0phdmFTRS0xLjgiPg0KKwkJPGF0dHJpYnV0ZXM+DQorCQkJPGF0dHJpYnV0ZSBuYW1lPSJtb2R1bGUiIHZhbHVlPSJ0cnVlIi8+DQorCQk8L2F0dHJpYnV0ZXM+DQorCTwvY2xhc3NwYXRoZW50cnk+DQogCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPg0KIAk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4NCiA8L2NsYXNzcGF0aD4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGQ2NDM3Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL3RhcmdldC8NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOGU3NjM4MC4uYzA4N2QzYSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiwxNCArMiwxNSBAQAogQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KIEJ1bmRsZS1OYW1lOiAlcGx1Z2luTmFtZQ0KIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXI7c2luZ2xldG9uOj10cnVlDQotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcg0KK0J1bmRsZS1WZXJzaW9uOiAwLjkuOC5xdWFsaWZpZXINCiBCdW5kbGUtQ2xhc3NQYXRoOiAuDQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcNCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4NCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuNg0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44DQogRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIuc2NhaXIsDQogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIuc2NhaXIuaW1wbCwNCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5zY2Fpci51dGlsDQogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwNCiAgb3JnLmVjbGlwc2UuZW1mLmVjb3JlO3Zpc2liaWxpdHk6PXJlZXhwb3J0DQogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkNCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXINCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvYmluLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvYmluLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMWRiMmUuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL2Jpbi8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL29yZy8KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNzc2YzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLQ0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvQWNjZXNzVHlwZUVudW0uamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9BY2Nlc3NUeXBlRW51bS5qYXZhCmluZGV4IGRlOTJkYzYuLjczMTZjNTIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9BY2Nlc3NUeXBlRW51bS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9BY2Nlc3NUeXBlRW51bS5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9DYWxsR3JhcGguamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9DYWxsR3JhcGguamF2YQppbmRleCAzZjc0NTM5Li5mZTZlNWRmIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvQ2FsbEdyYXBoLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0NhbGxHcmFwaC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9Db250YWluZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9Db250YWluZXIuamF2YQppbmRleCBmOTJjZDJiLi5lMDRjMjQ2IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvQ29udGFpbmVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0NvbnRhaW5lci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9FRnVuY3Rpb25UeXBlRW51bS5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0VGdW5jdGlvblR5cGVFbnVtLmphdmEKaW5kZXggMjVjNzJlYy4uZmMwNTY1ZCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0VGdW5jdGlvblR5cGVFbnVtLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0VGdW5jdGlvblR5cGVFbnVtLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0VUeXBlQ2F0ZWdvcnkuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9FVHlwZUNhdGVnb3J5LmphdmEKaW5kZXggNjViNDdkNy4uNmM3N2I4NiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0VUeXBlQ2F0ZWdvcnkuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvRVR5cGVDYXRlZ29yeS5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9GdW5jdGlvbi5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0Z1bmN0aW9uLmphdmEKaW5kZXggOGYyODNlZi4uNmYyZjNmMyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0Z1bmN0aW9uLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0Z1bmN0aW9uLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0Z1bmN0aW9uQ2FsbC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0Z1bmN0aW9uQ2FsbC5qYXZhCmluZGV4IDgwYjNkMTQuLmIyNmY2YjcgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9GdW5jdGlvbkNhbGwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvRnVuY3Rpb25DYWxsLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0lJZGVudGlmaWFibGUuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9JSWRlbnRpZmlhYmxlLmphdmEKaW5kZXggMmYxOTJiMC4uZjMyNmRjOCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0lJZGVudGlmaWFibGUuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvSUlkZW50aWZpYWJsZS5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9JZGVudGlmaWFibGVFbGVtZW50LmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvSWRlbnRpZmlhYmxlRWxlbWVudC5qYXZhCmluZGV4IGNhMzgwNGIuLmY0OTgwNGUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9JZGVudGlmaWFibGVFbGVtZW50LmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0lkZW50aWZpYWJsZUVsZW1lbnQuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvTGFiZWwuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9MYWJlbC5qYXZhCmluZGV4IDk2ZTUwNWIuLmJmZWQ1MDAgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9MYWJlbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9MYWJlbC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9MYWJlbEFjY2Vzcy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0xhYmVsQWNjZXNzLmphdmEKaW5kZXggYjFkMGFiNi4uZDgxMGQ2ZCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0xhYmVsQWNjZXNzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL0xhYmVsQWNjZXNzLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1Byb2plY3QuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9Qcm9qZWN0LmphdmEKaW5kZXggMjhmN2JjMi4uMTYwMTQ3OCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1Byb2plY3QuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvUHJvamVjdC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9TdG10Q2FsbC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1N0bXRDYWxsLmphdmEKaW5kZXggNmY4ZjZmNS4uZWE2Njk0MCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1N0bXRDYWxsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1N0bXRDYWxsLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1R5cGVEZWYuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9UeXBlRGVmLmphdmEKaW5kZXggZTQxN2FkZS4uN2MyM2Y2NSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1R5cGVEZWYuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvVHlwZURlZi5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9UeXBlRGVmTWVtYmVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvVHlwZURlZk1lbWJlci5qYXZhCmluZGV4IGY5ZWM1YjAuLmNlYmMwZjkgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9UeXBlRGVmTWVtYmVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL1R5cGVEZWZNZW1iZXIuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9DYWxsR3JhcGhJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9DYWxsR3JhcGhJbXBsLmphdmEKaW5kZXggZWVlMDMwZi4uZWNhMDVkOSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvQ2FsbEdyYXBoSW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0NhbGxHcmFwaEltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9Db250YWluZXJJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9Db250YWluZXJJbXBsLmphdmEKaW5kZXggODlmNjYyOS4uYzFmNjRlZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvQ29udGFpbmVySW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0NvbnRhaW5lckltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9GdW5jdGlvbkNhbGxJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9GdW5jdGlvbkNhbGxJbXBsLmphdmEKaW5kZXggODllYjljMS4uMTA5ZWFjOSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvRnVuY3Rpb25DYWxsSW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0Z1bmN0aW9uQ2FsbEltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9GdW5jdGlvbkltcGwuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0Z1bmN0aW9uSW1wbC5qYXZhCmluZGV4IGMyYTk2MTUuLjRkMGE1ZjcgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0Z1bmN0aW9uSW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0Z1bmN0aW9uSW1wbC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0lkZW50aWZpYWJsZUVsZW1lbnRJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9JZGVudGlmaWFibGVFbGVtZW50SW1wbC5qYXZhCmluZGV4IDA0YmM5ZWEuLjgzYTJlNWUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0lkZW50aWZpYWJsZUVsZW1lbnRJbXBsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvSWRlbnRpZmlhYmxlRWxlbWVudEltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9MYWJlbEFjY2Vzc0ltcGwuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0xhYmVsQWNjZXNzSW1wbC5qYXZhCmluZGV4IDY3OGIxODQuLjJhOWZlZGQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0xhYmVsQWNjZXNzSW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0xhYmVsQWNjZXNzSW1wbC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL0xhYmVsSW1wbC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvTGFiZWxJbXBsLmphdmEKaW5kZXggY2VjMzYzZS4uYzk3Yzc5ZCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvTGFiZWxJbXBsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvTGFiZWxJbXBsLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvUHJvamVjdEltcGwuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL1Byb2plY3RJbXBsLmphdmEKaW5kZXggM2Q1MjIxMC4uZTEzZTRjNyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvUHJvamVjdEltcGwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9Qcm9qZWN0SW1wbC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL1N0bXRDYWxsSW1wbC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvU3RtdENhbGxJbXBsLmphdmEKaW5kZXggNWIyM2QyYS4uNjZmNDQ2MyAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvU3RtdENhbGxJbXBsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvU3RtdENhbGxJbXBsLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvVHlwZURlZkltcGwuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL1R5cGVEZWZJbXBsLmphdmEKaW5kZXggM2RmYzgzYi4uYjA3OTBjMSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvVHlwZURlZkltcGwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9UeXBlRGVmSW1wbC5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqICBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiAgQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL1R5cGVEZWZNZW1iZXJJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9UeXBlRGVmTWVtYmVySW1wbC5qYXZhCmluZGV4IDg4MGRlMzQuLjc2ZWJjYjMgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL1R5cGVEZWZNZW1iZXJJbXBsLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvVHlwZURlZk1lbWJlckltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9zY2FpckZhY3RvcnlJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9zY2FpckZhY3RvcnlJbXBsLmphdmEKaW5kZXggYmI1ODlmYi4uMTU0MTlmZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvc2NhaXJGYWN0b3J5SW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL3NjYWlyRmFjdG9yeUltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9zY2FpclBhY2thZ2VJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvaW1wbC9zY2FpclBhY2thZ2VJbXBsLmphdmEKaW5kZXggMGJmNTAzOC4uOGMxZGIxMiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL2ltcGwvc2NhaXJQYWNrYWdlSW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9pbXBsL3NjYWlyUGFja2FnZUltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvc2NhaXJGYWN0b3J5LmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvc2NhaXJGYWN0b3J5LmphdmEKaW5kZXggYWIxZTc3Ny4uODI3ZjgzNSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL3NjYWlyRmFjdG9yeS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9zY2FpckZhY3RvcnkuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvc2NhaXJQYWNrYWdlLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvc2NhaXJQYWNrYWdlLmphdmEKaW5kZXggMzlhYTk5NC4uNTYzY2E3ZSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL3NjYWlyUGFja2FnZS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci9zY2FpclBhY2thZ2UuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvdXRpbC9zY2FpckFkYXB0ZXJGYWN0b3J5LmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvdXRpbC9zY2FpckFkYXB0ZXJGYWN0b3J5LmphdmEKaW5kZXggNmE5YWFkMS4uNmU3ZTZiMCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL3V0aWwvc2NhaXJBZGFwdGVyRmFjdG9yeS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci91dGlsL3NjYWlyQWRhcHRlckZhY3RvcnkuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiAgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvdXRpbC9zY2FpclN3aXRjaC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2lyL3NjYWlyL3V0aWwvc2NhaXJTd2l0Y2guamF2YQppbmRleCA2Y2Y4ZGU4Li4wYTIzMDUzIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuaXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvaXIvc2NhaXIvdXRpbC9zY2FpclN3aXRjaC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9pci9zY2Fpci91dGlsL3NjYWlyU3dpdGNoLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDY0MzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhZTQxYTY0Li5iNTJkMDE3IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiBMTFZNCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0KLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiAwLjkuOC5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCiBFY2xpcHNlLUJ1bmRsZVNoYXBlOiBkaXIKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pLApAQCAtMTAsNyArMTAsNiBAQAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbiwKICBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5hbWFsdGhlYS5tb2RlbCwKLSBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEuc3BoaW54LAogIG9yZy5lY2xpcHNlLnNwaGlueC5lbWYsCiAgb3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEubG9hZGVyLApAQCAtMjIsMTEgKzIxLDEzIEBACiAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCiAgb3JnLmVjbGlwc2UuamZhY2UsCiAgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsO2J1bmRsZS12ZXJzaW9uPSIxLjAuMCIsCi0gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlcgorIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZywKKyBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwsCisgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5zY2hlZHVsaW5nLmxvYWRlciwKKyBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44CiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtLmhlYWRsZXNzLAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS5zcmNmaWxlcy5zdXBwb3J0LAogIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS5zdGFydGVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0uQWN0aXZhdG9yCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vYmluLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9iaW4vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZGIyZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9iaW4vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS9vcmcvCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzdkNWRmOC4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIg0KLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4NCi0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gIDxwYXJlbnQ+DQotICAgIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvYXJ0aWZhY3RJZD4NCi0gICAgPHZlcnNpb24+MS4wLjAucXVhbGlmaWVyPC92ZXJzaW9uPg0KLSAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L3JlbGF0aXZlUGF0aD4NCi0gIDwvcGFyZW50Pg0KLSAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLSAgDQotCTxidWlsZD4NCi0JCTxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+DQotCQk8cmVzb3VyY2VzPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQkJPHJlc291cmNlPg0KLQkJCQk8ZGlyZWN0b3J5PnNyYzwvZGlyZWN0b3J5Pg0KLQkJCQk8ZXhjbHVkZXM+DQotCQkJCQk8ZXhjbHVkZT4qKi8qLmphdmE8L2V4Y2x1ZGU+DQotCQkJCTwvZXhjbHVkZXM+DQotCQkJPC9yZXNvdXJjZT4NCi0JCTwvcmVzb3VyY2VzPg0KLQkJPHBsdWdpbnM+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGFydGlmYWN0SWQ+bWF2ZW4tY2xlYW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4yLjQuMTwvdmVyc2lvbj4NCi0JCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQk8ZmlsZXNldHM+DQotCQkJCQkJPGZpbGVzZXQ+DQotCQkJCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCQkJCTxpbmNsdWRlcz4NCi0JCQkJCQkJCTxpbmNsdWRlPioqPC9pbmNsdWRlPg0KLQkJCQkJCQk8L2luY2x1ZGVzPg0KLQkJCQkJCTwvZmlsZXNldD4NCi0JCQkJCTwvZmlsZXNldHM+DQotCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQk8L3BsdWdpbj4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+YnVpbGQtaGVscGVyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+MS43PC92ZXJzaW9uPg0KLQkJCQk8ZXhlY3V0aW9ucz4NCi0JCQkJCTxleGVjdXRpb24+DQotCQkJCQkJPGlkPmFkZC1zb3VyY2U8L2lkPg0KLQkJCQkJCTxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmFkZC1zb3VyY2U8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPHNvdXJjZXM+DQotCQkJCQkJCQk8c291cmNlPnh0ZW5kLWdlbjwvc291cmNlPg0KLQkJCQkJCQk8L3NvdXJjZXM+DQotCQkJCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQkJPC9leGVjdXRpb24+DQotCQkJCTwvZXhlY3V0aW9ucz4NCi0JCQk8L3BsdWdpbj4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS54dGVuZDwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+eHRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4yLjcuMzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxnb2Fscz4NCi0JCQkJCQkJPGdvYWw+Y29tcGlsZTwvZ29hbD4NCi0JCQkJCQk8L2dvYWxzPg0KLQkJCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJCQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5Pg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQk8L3BsdWdpbnM+DQotCTwvYnVpbGQ+DQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vQWN0aXZhdG9yLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL0FjdGl2YXRvci5qYXZhCmluZGV4IGQ0ZWVhNDUuLjUzMmI1MDUgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vQWN0aXZhdG9yLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9BY3RpdmF0b3IuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9oZWFkbGVzcy9DbWRMaW5lQXJndW1lbnRQYXJzZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vaGVhZGxlc3MvQ21kTGluZUFyZ3VtZW50UGFyc2VyLmphdmEKaW5kZXggZjk2NTY0OC4uYTNhZTNhMCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9oZWFkbGVzcy9DbWRMaW5lQXJndW1lbnRQYXJzZXIuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL2hlYWRsZXNzL0NtZExpbmVBcmd1bWVudFBhcnNlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL2hlYWRsZXNzL0dlbmVyYXRlQW1hbHRoZWFNb2RlbEZyb21MTFZNLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL2hlYWRsZXNzL0dlbmVyYXRlQW1hbHRoZWFNb2RlbEZyb21MTFZNLmphdmEKaW5kZXggYTA4NjlkNy4uNjU2ZmNmNCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9oZWFkbGVzcy9HZW5lcmF0ZUFtYWx0aGVhTW9kZWxGcm9tTExWTS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vaGVhZGxlc3MvR2VuZXJhdGVBbWFsdGhlYU1vZGVsRnJvbUxMVk0uamF2YQpAQCAtMSwyNSArMSwxOSBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQotICogDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKg0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KLSAqIA0KKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wDQorICoNCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KLSAqIA0KKyAqDQogICogQ29udHJpYnV0b3JzOg0KICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqLw0KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtLmhlYWRsZXNzOw0KIA0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOw0KLWltcG9ydCBqYXZhLnV0aWwuTWFwOw0KLQ0KIGltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuYW1hbHRoZWEubW9kZWwuQW1hbHRoZWE7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EuYW1hbHRoZWEuc2VyaWFsaXplci5BTUFMVEhFQVJlc291cmNlU2VyaWFsaXplcjsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nLm1hbmFnZXIuTG9nRmFjdG9yeS5TZXZlcml0eTsNCkBAIC00NCwyNTQgKzM4LDI3MCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyLlNDQUlSTW9kZWxFbnJpY2htZW50VXRpbHM7DQogaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi5TQ0FSZXNvdXJjZTsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5VdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzLmNvbnN0YW50cy5TQ0EyQW1hbHRoZWFDb25zdGFudHM7DQorDQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOw0KKw0KIGltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuVVJJOw0KIA0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOw0KIA0KIA0KIC8qKg0KICAqLw0KIHB1YmxpYyBjbGFzcyBHZW5lcmF0ZUFtYWx0aGVhTW9kZWxGcm9tTExWTSB7DQorICAgIHByaXZhdGUgZmluYWwgU0NBMkFNQUxUSEVBU3RhcnRlclByb3BlcnRpZXMgc2NhMmFtUHJvcGVydGllczsNCiANCi0gIHByaXZhdGUgZmluYWwgU0NBMkFNQUxUSEVBU3RhcnRlclByb3BlcnRpZXMgc2NhMmFtUHJvcGVydGllczsNCi0NCi0gIC8qKg0KLSAgICogR2VuZXJhdGVzIGFtYWx0aGVhIG1vZGVsIGZyb20gdGhlIGdpdmVuIHByb3BlcnRpZXMuIFRoZSBnaXZlbiBwcm9wZXJ0aWVzIGFyZSB1c2VkIHRvIHBvcHVsYXRlIHRoZSBhc3QgbW9kZWwgYW5kDQotICAgKiBmcm9tIHRoZSBhc3QgbW9kZWwgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4gVGhlIGludGVybWRlZGlhdGUgcmVwcmVzZW50YXRpb24gaXMgaW50dXJuIHVzZWQgdG8gZ2VuZXJhdGUgdGhlDQotICAgKiBhbWFsdGhlYSBtb2RlbA0KLSAgICoNCi0gICAqIEBwYXJhbSBsbHZtUHJvcGVydGllcyB7QGxpbmsgTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzfQ0KLSAgICovDQotICBwdWJsaWMgR2VuZXJhdGVBbWFsdGhlYU1vZGVsRnJvbUxMVk0oZmluYWwgU0NBMkFNQUxUSEVBU3RhcnRlclByb3BlcnRpZXMgbGx2bVByb3BlcnRpZXMpIHsNCi0gICAgc3VwZXIoKTsNCi0gICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzID0gbGx2bVByb3BlcnRpZXM7DQotICB9DQotDQotICAvKioNCi0gICAqIEBwYXJhbSBsbHZtUHJvcGVydGllcyBMTFZNIHByb3BlcnRpZXMNCi0gICAqIEBwYXJhbSBmY2JjSW5GbyBnaXZlbiBGQyBCQyBpbmZvcw0KLSAgICovDQotICBwdWJsaWMgR2VuZXJhdGVBbWFsdGhlYU1vZGVsRnJvbUxMVk0oZmluYWwgU0NBMkFNQUxUSEVBU3RhcnRlclByb3BlcnRpZXMgbGx2bVByb3BlcnRpZXMsDQotICAgICAgZmluYWwgTWFwPFN0cmluZywgTWFwLkVudHJ5PFN0cmluZywgU3RyaW5nPj4gZmNiY0luRm8pIHsNCi0gICAgdGhpcyhsbHZtUHJvcGVydGllcyk7DQotICB9DQotDQotDQotICAvKioNCi0gICAqIEBwYXJhbSBwcm9qZWN0RGlyIFRoZSBwcm9qZWN0IGRpciBQVkVSDQotICAgKiBAcGFyYW0gb3V0RGlyIFRoZSBvdXRwdXQgZGlyZWN0b3J5IHdoZXJlIHRoZSBhbWFsdGhlYSBtb2RlbCByZXByZXNlbnRhdGlvbiBpcyBiZWluZyBnZW5lcmF0aW9uDQotICAgKiBAcGFyYW0gYXN0UGFyc2VyIFRoZSBhc3QgcGFyc2VyIGxvY2F0aW9uDQotICAgKiBAcGFyYW0gdGFza0luZm9GaWxlIFRhc2sgaW5mbyBmaWxlDQotICAgKiBAcGFyYW0gaERpckxpc3QgSCBmaWxlcyBkaXJlY3RvcnkNCi0gICAqIEBwYXJhbSBidWlsZExvZ0ZpbGUgQnVpbGQgbG9nIGZpbGUNCi0gICAqIEBwYXJhbSBsb2NraW5mb0ZpbGUgTG9jayBJbmZvcm1hdGlvbg0KLSAgICogQHBhcmFtIGlzU3RydWN0TWVtYmVyRW5hYmxlZCBib29sZWFuIGdpdmluZyB0aGUgaW5mb3JtYXRpb24gaWYgdGhlIHN0cnVjdCBtZW1iZXJzIHNob3VsZCBiZSBwcmVzZW50IGluIHRoZSBtb2RlbCBvcg0KLSAgICogICAgICAgICAgbm90DQotICAgKiBAcGFyYW0gY29tcG9uZW50TW9kZWxGY0JjIGJvb2xlYW4gdmFsdWUgd2hpY2ggdGVsbHMgd2hldGhlciB0aGUgY29tcG9uZW50IG1vZGVsIGlzIGZjL2JjIGJhc2VkIG9yIGMvaCBmaWxlIGJhc2VkLg0KLSAgICovDQotICBwdWJsaWMgR2VuZXJhdGVBbWFsdGhlYU1vZGVsRnJvbUxMVk0oZmluYWwgU3RyaW5nIHByb2plY3REaXIsIGZpbmFsIFN0cmluZyBvdXREaXIsIGZpbmFsIFN0cmluZyBhc3RQYXJzZXIsDQotICAgICAgZmluYWwgU3RyaW5nIHRhc2tJbmZvRmlsZSwgZmluYWwgU3RyaW5nIGhEaXJMaXN0LCBmaW5hbCBTdHJpbmcgYnVpbGRMb2dGaWxlLCBmaW5hbCBTdHJpbmcgbG9ja2luZm9GaWxlLGZpbmFsIGJvb2xlYW4gaXNTdHJ1Y3RNZW1iZXJFbmFibGVkKSB7DQotICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcyA9IG5ldyBTQ0EyQU1BTFRIRUFTdGFydGVyUHJvcGVydGllcyhhc3RQYXJzZXIsIG91dERpciwgdGFza0luZm9GaWxlLCA4LCBwcm9qZWN0RGlyLCBoRGlyTGlzdCwNCi0gICAgICAgIGJ1aWxkTG9nRmlsZSwgbG9ja2luZm9GaWxlLCBpc1N0cnVjdE1lbWJlckVuYWJsZWQpOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElPRXhjZXB0aW9uDQotICAgKiBAdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIEludGVycnVwdGVkRXhjZXB0aW9uDQotICAgKiBAcmV0dXJuIGludCBzdGF0dXMgb2YgdGhlIGFtYWx0aGVhIG1vZGVsIGdlbmVyYXRpb24NCi0gICAqLw0KLSAgcHVibGljIGludCBydW4oKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsNCi0gICAgaW50IHJldHVybkNvZGUgPSAwOw0KLSAgICBsb25nIHN0YXJ0VGltZSA9IDA7DQotICAgIHRyeSB7DQotICAgICAgdmFsaWRhdGVDb25zb2xpZGF0ZWRMTFZNT3B0aW9ucygpOw0KLSAgICB9DQotICAgIGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgew0KLSAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2dFeGNlcHRpb24oZ2V0Q2xhc3MoKSwgZSwgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQotICAgICAgTG9nVXRpbC5sb2coTExWTUxvZ1V0aWwuTE9HX01TR19JRCwgU2V2ZXJpdHkuRVJST1IsDQotICAgICAgICAgICJBYm9ydGluZyB0aGUgYW1hbHRoZWEgZ2VuZXJhdGlvbiwgc2VlIGV4Y2VwdGlvbiBsb2c6ICIgKyBlLmdldE1lc3NhZ2UoKSwgdGhpcy5nZXRDbGFzcygpLA0KLSAgICAgICAgICBBY3RpdmF0b3IuUExVR0lOX0lEKTsNCi0gICAgICByZXR1cm5Db2RlID0gMTsNCi0gICAgICByZXR1cm4gcmV0dXJuQ29kZTsNCisgICAgLyoqDQorICAgICAqIEdlbmVyYXRlcyBhbWFsdGhlYSBtb2RlbCBmcm9tIHRoZSBnaXZlbiBwcm9wZXJ0aWVzLiBUaGUgZ2l2ZW4gcHJvcGVydGllcyBhcmUgdXNlZCB0byBwb3B1bGF0ZSB0aGUgYXN0IG1vZGVsIGFuZA0KKyAgICAgKiBmcm9tIHRoZSBhc3QgbW9kZWwgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbi4gVGhlIGludGVybWRlZGlhdGUgcmVwcmVzZW50YXRpb24gaXMgaW50dXJuIHVzZWQgdG8gZ2VuZXJhdGUgdGhlDQorICAgICAqIGFtYWx0aGVhIG1vZGVsDQorICAgICAqDQorICAgICAqIEBwYXJhbSBsbHZtUHJvcGVydGllcyB7QGxpbmsgTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzfQ0KKyAgICAgKi8NCisgICAgcHVibGljIEdlbmVyYXRlQW1hbHRoZWFNb2RlbEZyb21MTFZNKA0KKyAgICAgICAgZmluYWwgU0NBMkFNQUxUSEVBU3RhcnRlclByb3BlcnRpZXMgbGx2bVByb3BlcnRpZXMpIHsNCisgICAgICAgIHN1cGVyKCk7DQorICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMgPSBsbHZtUHJvcGVydGllczsNCiAgICAgfQ0KIA0KLSAgICB0cnkgew0KLSAgICAgIGlmIChyZXR1cm5Db2RlID09IDApIHsNCi0gICAgICAgIGFwcGx5RmFsbEJhY2tTdHJhdGVneSgpOw0KLSAgICAgICAgcGFyc2VCbG9nQW5kSERpckxpc3RPcHRpb25zKCk7DQorICAgIC8qKg0KKyAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uIElPRXhjZXB0aW9uDQorICAgICAqIEB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gSW50ZXJydXB0ZWRFeGNlcHRpb24NCisgICAgICogQHJldHVybiBpbnQgc3RhdHVzIG9mIHRoZSBhbWFsdGhlYSBtb2RlbCBnZW5lcmF0aW9uDQorICAgICAqLw0KKyAgICBwdWJsaWMgSVN0YXR1cyBydW4oKSB0aHJvd3MgSU9FeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsNCisgICAgICAgIElTdGF0dXMgc3RhdHVzID0gU3RhdHVzLk9LX1NUQVRVUzsNCisgICAgICAgIGxvbmcgc3RhcnRUaW1lID0gMDsNCiANCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgdmFsaWRhdGVDb25zb2xpZGF0ZWRMTFZNT3B0aW9ucygpOw0KKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkNCisgICAgICAgICAgICAgICAgICAgICAgLmxvZ0V4Y2VwdGlvbihnZXRDbGFzcygpLCBlLCBBY3RpdmF0b3IuUExVR0lOX0lEKTsNCisgICAgICAgICAgICBMb2dVdGlsLmxvZyhMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBTZXZlcml0eS5FUlJPUiwNCisgICAgICAgICAgICAgICAgIkFib3J0aW5nIHRoZSBhbWFsdGhlYSBnZW5lcmF0aW9uLCBzZWUgZXhjZXB0aW9uIGxvZzogIiArDQorICAgICAgICAgICAgICAgIGUuZ2V0TWVzc2FnZSgpLCB0aGlzLmdldENsYXNzKCksIEFjdGl2YXRvci5QTFVHSU5fSUQpOw0KKyAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1cy5DQU5DRUxfU1RBVFVTOw0KKyAgICAgICAgfQ0KIA0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBpZiAoc3RhdHVzID09IFN0YXR1cy5PS19TVEFUVVMpIHsNCisgICAgICAgICAgICAgICAgYXBwbHlGYWxsQmFja1N0cmF0ZWd5KCk7DQorICAgICAgICAgICAgICAgIHBhcnNlQmxvZ0FuZEhEaXJMaXN0T3B0aW9ucygpOw0KIA0KLSAgICAgICAgc3RhcnRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7DQotICAgICAgICBMb2dVdGlsLmxvZyhMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBTZXZlcml0eS5JTkZPLA0KLSAgICAgICAgICAgICJTdGFydGluZyBzY2EyYW1hbHRoZWEgZXhwb3J0Li4uIFtzdGFydCB0aW1lICIgKyBzdGFydFRpbWUgKyAiXSIsIHRoaXMuZ2V0Q2xhc3MoKSwgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQorICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOw0KKyAgICAgICAgICAgICAgICBMb2dVdGlsLmxvZyhMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBTZXZlcml0eS5JTkZPLA0KKyAgICAgICAgICAgICAgICAgICAgIlN0YXJ0aW5nIHNjYTJhbWFsdGhlYSBleHBvcnQuLi4gW3N0YXJ0IHRpbWUgIiArIHN0YXJ0VGltZSArDQorICAgICAgICAgICAgICAgICAgICAiXSIsIHRoaXMuZ2V0Q2xhc3MoKSwgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQogDQotICAgICAgICBHZW5lcmF0ZVRyYXZlcnNlQXN0T3V0cHV0IGxsdm1TdGFydGVyID0NCi0gICAgICAgICAgICBuZXcgR2VuZXJhdGVUcmF2ZXJzZUFzdE91dHB1dCh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzKCkpOw0KKyAgICAgICAgICAgICAgICBHZW5lcmF0ZVRyYXZlcnNlQXN0T3V0cHV0IGxsdm1TdGFydGVyID0gbmV3IEdlbmVyYXRlVHJhdmVyc2VBc3RPdXRwdXQodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldExsdm1TdGFydGVyUHJvcGVydGllcygpKTsNCiANCi0gICAgICAgIGxsdm1TdGFydGVyLnJ1blRyYXZlcnNlQXN0KCk7DQotICAgICAgfQ0KLSAgICB9DQotICAgIGNhdGNoIChFeGNlcHRpb24gcG9zc2libGVFeGNlcHRpb24pIHsNCi0gICAgICBMb2dVdGlsLmxvZ0V4Y2VwdGlvbihMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBwb3NzaWJsZUV4Y2VwdGlvbi5nZXRDbGFzcygpLCBwb3NzaWJsZUV4Y2VwdGlvbiwNCi0gICAgICAgICAgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQotICAgICAgcG9zc2libGVFeGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7DQotICAgICAgcmV0dXJuQ29kZSA9IDE7DQorICAgICAgICAgICAgICAgIGxsdm1TdGFydGVyLnJ1blRyYXZlcnNlQXN0KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIHBvc3NpYmxlRXhjZXB0aW9uKSB7DQorICAgICAgICAgICAgTG9nVXRpbC5sb2dFeGNlcHRpb24oTExWTUxvZ1V0aWwuTE9HX01TR19JRCwNCisgICAgICAgICAgICAgICAgcG9zc2libGVFeGNlcHRpb24uZ2V0Q2xhc3MoKSwgcG9zc2libGVFeGNlcHRpb24sDQorICAgICAgICAgICAgICAgIEFjdGl2YXRvci5QTFVHSU5fSUQpOw0KKyAgICAgICAgICAgIHBvc3NpYmxlRXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOw0KKyAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1cy5DQU5DRUxfU1RBVFVTOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgaWYgKChzdGF0dXMgPT0gU3RhdHVzLk9LX1NUQVRVUykgJiYNCisgICAgICAgICAgICAgICAgKFV0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuZ2V0Q3VycmVudFJ1bm5pbmdQcm9jZXNzKCkuZXhpdFZhbHVlKCkgPT0gMCkpIHsNCisgICAgICAgICAgICBMb2dVdGlsLmxvZyhMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBTZXZlcml0eS5JTkZPLA0KKyAgICAgICAgICAgICAgICAiVHJhbnNmb3JtaW5nIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24gdG8gYW1hbHRoZWEgbW9kZWwiLA0KKyAgICAgICAgICAgICAgICB0aGlzLmdldENsYXNzKCksIEFjdGl2YXRvci5QTFVHSU5fSUQpOw0KKw0KKyAgICAgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgICAgIGNvbnZlcnRYTUxUb0FtYWx0aGVhTW9kZWwoKTsNCisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gcG9zc2libGVFeGNlcHRpb24pIHsNCisgICAgICAgICAgICAgICAgTG9nVXRpbC5sb2dFeGNlcHRpb24oTExWTUxvZ1V0aWwuTE9HX01TR19JRCwNCisgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlRXhjZXB0aW9uLmdldENsYXNzKCksIHBvc3NpYmxlRXhjZXB0aW9uLA0KKyAgICAgICAgICAgICAgICAgICAgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQorICAgICAgICAgICAgICAgIHN0YXR1cyA9IFN0YXR1cy5DQU5DRUxfU1RBVFVTOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBsb25nIGR1cmF0aW9uID0gKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnRUaW1lKSAvIDEwMDA7IC8vIGluIHNlY29uZHMNCisgICAgICAgICAgICBMb2dVdGlsLmxvZyhMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBTZXZlcml0eS5JTkZPLA0KKyAgICAgICAgICAgICAgICAiRXhwb3J0IG9mIEFNQUxUSEVBIG1vZGVsIGNvbXBsZXRlZC4gW2R1cmF0aW9uPSIgKyBkdXJhdGlvbiArDQorICAgICAgICAgICAgICAgICIgc2Vjb25kc10iLCB0aGlzLmdldENsYXNzKCksIEFjdGl2YXRvci5QTFVHSU5fSUQpOw0KKw0KKyAgICAgICAgICAgIFdvcmtzcGFjZU9wZXJhdGlvbnMucmVmcmVzaFdvcmtzcGFjZSh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0UHJvamVjdFBhdGgoKSwNCisgICAgICAgICAgICAgICAgIl9iaW4vc2NhMmFtYWx0aGVhIik7DQorICAgICAgICAgICAgV29ya3NwYWNlT3BlcmF0aW9ucy5yZWZyZXNoV29ya3NwYWNlKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRQcm9qZWN0UGF0aCgpLA0KKyAgICAgICAgICAgICAgICAiX2xvZy9zY2EyYW1hbHRoZWEiKTsNCisgICAgICAgICAgICBXb3Jrc3BhY2VPcGVyYXRpb25zLnJlZnJlc2hXb3Jrc3BhY2UodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFByb2plY3RQYXRoKCksDQorICAgICAgICAgICAgICAgICJfZ2VuL3NjYTJhbWFsdGhlYSIpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBzdGF0dXMgPSBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsNCisgICAgICAgICAgICBMb2dVdGlsLmxvZyhMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBTZXZlcml0eS5JTkZPLA0KKyAgICAgICAgICAgICAgICAiQU1BTFRIRUEgbW9kZWwgZ2VuZXJhdGlvbiBhYm9ydGVkLiIsIHRoaXMuZ2V0Q2xhc3MoKSwNCisgICAgICAgICAgICAgICAgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQorICAgICAgICB9DQorDQorICAgICAgICByZXR1cm4gc3RhdHVzOw0KICAgICB9DQogDQotICAgIGlmICgocmV0dXJuQ29kZSA9PSAwKSAmJiAoVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZy5nZXRDdXJyZW50UnVubmluZ1Byb2Nlc3MoKS5leGl0VmFsdWUoKSA9PSAwKSkgew0KLSAgICAgIExvZ1V0aWwubG9nKExMVk1Mb2dVdGlsLkxPR19NU0dfSUQsIFNldmVyaXR5LklORk8sDQotICAgICAgICAgICJUcmFuc2Zvcm1pbmcgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiB0byBhbWFsdGhlYSBtb2RlbCIsIHRoaXMuZ2V0Q2xhc3MoKSwgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQotICAgICAgdHJ5IHsNCi0gICAgICAgIGNvbnZlcnRYTUxUb0FtYWx0aGVhTW9kZWwoKTsNCi0gICAgICB9DQotICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBwb3NzaWJsZUV4Y2VwdGlvbikgew0KLSAgICAgICAgTG9nVXRpbC5sb2dFeGNlcHRpb24oTExWTUxvZ1V0aWwuTE9HX01TR19JRCwgcG9zc2libGVFeGNlcHRpb24uZ2V0Q2xhc3MoKSwgcG9zc2libGVFeGNlcHRpb24sDQotICAgICAgICAgICAgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQotICAgICAgICByZXR1cm5Db2RlID0gMTsNCi0gICAgICB9DQotICAgICAgbG9uZyBkdXJhdGlvbiA9IChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0VGltZSkgLyAxMDAwOyAvLyBpbiBzZWNvbmRzDQotICAgICAgTG9nVXRpbC5sb2coTExWTUxvZ1V0aWwuTE9HX01TR19JRCwgU2V2ZXJpdHkuSU5GTywNCi0gICAgICAgICAgIkV4cG9ydCBvZiBBTUFMVEhFQSBtb2RlbCBjb21wbGV0ZWQuIFtkdXJhdGlvbj0iICsgZHVyYXRpb24gKyAiIHNlY29uZHNdIiwgdGhpcy5nZXRDbGFzcygpLA0KLSAgICAgICAgICBBY3RpdmF0b3IuUExVR0lOX0lEKTsNCisgICAgLyoqDQorICAgICAqIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIGEgZ2l2ZW4gcGF0aCBvZiB0aGUgcHJvcGVydGllcyBkb2VzIG5vdCBleGlzdA0KKyAgICAgKi8NCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlQ29uc29saWRhdGVkTExWTU9wdGlvbnMoKQ0KKyAgICAgICAgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7DQorICAgICAgICBpZiAoIW5ldyBGaWxlKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRQcm9qZWN0UGF0aCgpKS5leGlzdHMoKSkgew0KKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oDQorICAgICAgICAgICAgICAgICJUaGUgcHJvamVjdCBwYXRoIHByb3ZpZGVkIGlzIG5vdCB2YWxpZDogIiArDQorICAgICAgICAgICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRQcm9qZWN0UGF0aCgpKTsNCisgICAgICAgIH0NCiANCi0gICAgICBXb3Jrc3BhY2VPcGVyYXRpb25zLnJlZnJlc2hXb3Jrc3BhY2UodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGNQcm9qZWN0UGF0aCgpLCAiX2Jpbi9zY2EyYW1hbHRoZWEiKTsNCi0gICAgICBXb3Jrc3BhY2VPcGVyYXRpb25zLnJlZnJlc2hXb3Jrc3BhY2UodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGNQcm9qZWN0UGF0aCgpLCAiX2xvZy9zY2EyYW1hbHRoZWEiKTsNCi0gICAgICBXb3Jrc3BhY2VPcGVyYXRpb25zLnJlZnJlc2hXb3Jrc3BhY2UodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGNQcm9qZWN0UGF0aCgpLCAiX2dlbi9zY2EyYW1hbHRoZWEiKTsNCi0gICAgfQ0KLSAgICBlbHNlIHsNCi0gICAgICByZXR1cm5Db2RlID0gMTsNCi0gICAgICBMb2dVdGlsLmxvZyhMTFZNTG9nVXRpbC5MT0dfTVNHX0lELCBTZXZlcml0eS5JTkZPLCAiQU1BTFRIRUEgbW9kZWwgZ2VuZXJhdGlvbiBhYm9ydGVkLiIsIHRoaXMuZ2V0Q2xhc3MoKSwNCi0gICAgICAgICAgQWN0aXZhdG9yLlBMVUdJTl9JRCk7DQotICAgIH0NCi0gICAgcmV0dXJuIHJldHVybkNvZGU7DQotICB9DQorICAgICAgICBpZiAoKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRUcmF2ZXJzZUFzdEZpbGUoKSAhPSBudWxsKSAmJg0KKyAgICAgICAgICAgICAgICAhdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRyYXZlcnNlQXN0RmlsZSgpLmlzRW1wdHkoKSAmJg0KKyAgICAgICAgICAgICAgICAhbmV3IEZpbGUodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRyYXZlcnNlQXN0RmlsZSgpKS5leGlzdHMoKSkgew0KKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oDQorICAgICAgICAgICAgICAgICJUaGUgdHJhdmVyc2UgYXN0IHBhdGggcHJvdmlkZWQgaXMgbm90IHZhbGlkOiAiICsNCisgICAgICAgICAgICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRyYXZlcnNlQXN0RmlsZSgpKTsNCisgICAgICAgIH0NCiANCi0gIC8qKg0KLSAgICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgYSBnaXZlbiBwYXRoIG9mIHRoZSBwcm9wZXJ0aWVzIGRvZXMgbm90IGV4aXN0DQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCB2YWxpZGF0ZUNvbnNvbGlkYXRlZExMVk1PcHRpb25zKCkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7DQotICAgIGlmICghbmV3IEZpbGUodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGNQcm9qZWN0UGF0aCgpKS5leGlzdHMoKSkgew0KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oDQotICAgICAgICAgICJUaGUgcHJvamVjdCBwYXRoIHByb3ZpZGVkIGlzIG5vdCB2YWxpZDogIiArIHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRjUHJvamVjdFBhdGgoKSk7DQorICAgICAgICBpZiAoKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkgIT0gbnVsbCkgJiYNCisgICAgICAgICAgICAgICAgIXRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkuaXNFbXB0eSgpKSB7DQorICAgICAgICAgICAgY2hlY2tGaWxlUGF0aEV4aXN0cyh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0T3V0UHV0UGF0aCgpLA0KKyAgICAgICAgICAgICAgICAib3V0cHV0IHBhdGgiKTsNCisgICAgICAgIH0NCisNCisgICAgICAgIGNoZWNrRmlsZVBhdGhFeGlzdHModGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRhc2tMaXN0RmlsZSgpLA0KKyAgICAgICAgICAgICJ0YXNrbGlzdCBmaWxlIHBhdGgiKTsNCisgICAgICAgIGNoZWNrRmlsZVBhdGhFeGlzdHModGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldEJ1aWxkTG9nRmlsZSgpLA0KKyAgICAgICAgICAgICJidWlsZCBsb2cgZmlsZSBwYXRoIik7DQorDQorICAgICAgICBpZiAoKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRoRGlyRmlsZVBhdGgoKSAhPSBudWxsKSAmJg0KKyAgICAgICAgICAgICAgICAhdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGhEaXJGaWxlUGF0aCgpLmlzRW1wdHkoKSkgew0KKyAgICAgICAgICAgIFN0cmluZ1tdIHBhdGhzID0gdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGhEaXJGaWxlUGF0aCgpLnNwbGl0KCI7Iik7DQorDQorICAgICAgICAgICAgZm9yIChTdHJpbmcgcyA6IHBhdGhzKSB7DQorICAgICAgICAgICAgICAgIGNoZWNrRmlsZVBhdGhFeGlzdHMocywgImggZGlyIHBhdGgiKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBjaGVja0ZpbGVQYXRoRXhpc3RzKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRMb2NraW5mb0ZpbGUoKSwNCisgICAgICAgICAgICAibG9jayBpbmZvIGZpbGUgcGF0aCIpOw0KICAgICB9DQogDQotICAgIGlmICgodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRyYXZlcnNlQXN0RmlsZSgpICE9IG51bGwpICYmICF0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0VHJhdmVyc2VBc3RGaWxlKCkuaXNFbXB0eSgpICYmDQotICAgICAgICAhbmV3IEZpbGUodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRyYXZlcnNlQXN0RmlsZSgpKS5leGlzdHMoKSkgew0KLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oDQotICAgICAgICAgICJUaGUgdHJhdmVyc2UgYXN0IHBhdGggcHJvdmlkZWQgaXMgbm90IHZhbGlkOiAiICsgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRyYXZlcnNlQXN0RmlsZSgpKTsNCisgICAgLyoqDQorICAgICAqIEBwYXJhbSBmaWxlUGF0aCB0byBiZSBjaGVja2VkDQorICAgICAqIEBwYXJhbSBmaWxlUGF0aE5hbWUgZGVzY3JpcHRpb24NCisgICAgICovDQorICAgIHByaXZhdGUgdm9pZCBjaGVja0ZpbGVQYXRoRXhpc3RzKGZpbmFsIFN0cmluZyBmaWxlUGF0aCwNCisgICAgICAgIGZpbmFsIFN0cmluZyBmaWxlUGF0aE5hbWUpIHsNCisgICAgICAgIGlmICgoZmlsZVBhdGggIT0gbnVsbCkgJiYgIWZpbGVQYXRoLmlzRW1wdHkoKSAmJg0KKyAgICAgICAgICAgICAgICAhbmV3IEZpbGUoZmlsZVBhdGgpLmV4aXN0cygpKSB7DQorICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiVGhlICIgKyBmaWxlUGF0aE5hbWUgKw0KKyAgICAgICAgICAgICAgICAiIHByb3ZpZGVkIGlzIG5vdCB2YWxpZDogIiArIGZpbGVQYXRoKTsNCisgICAgICAgIH0NCiAgICAgfQ0KIA0KLSAgICBpZiAoKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkgIT0gbnVsbCkgJiYgIXRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkuaXNFbXB0eSgpICYmDQotICAgICAgICAhdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldE91dFB1dFBhdGgoKQ0KLSAgICAgICAgICAgIC5lcXVhbHMoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldERlZmF1bHRTdHJpbmcoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLk9VVFBVVF9QQVRIKSkpIHsNCi0gICAgICBjaGVja0ZpbGVQYXRoRXhpc3RzKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCksICJvdXRwdXQgcGF0aCIpOw0KKyAgICBwcml2YXRlIHZvaWQgY29udmVydFhNTFRvQW1hbHRoZWFNb2RlbCgpIHsNCisgICAgICAgIE9TQ29uZk1vZGVsIG9zQ29uZk1vZGVsID0gbnVsbDsNCisgICAgICAgIFVSSSBjcmVhdGVVUkkgPSBVUkkuY3JlYXRlRmlsZVVSSSh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzKCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0R2VuRGlyZWN0b3J5KCkgKw0KKyAgICAgICAgICAgICAgICAiL1hNTENhbGx0cmVlLnhtbCIpOw0KKyAgICAgICAgU0NBUmVzb3VyY2UgcmVzb3VyY2UgPSBuZXcgU0NBSVJMb2FkZXIoKS5sb2FkKGNyZWF0ZVVSSSk7DQorDQorICAgICAgICBpZiAoKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRUYXNrTGlzdEZpbGUoKSAhPSBudWxsKSAmJg0KKyAgICAgICAgICAgICAgICAhdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFRhc2tMaXN0RmlsZSgpLmlzRW1wdHkoKSkgew0KKyAgICAgICAgICAgIFNjaGVkdWxpbmdJbmZvcm1hdGlvbkxvYWRlciBzY2hlZEluZm9Mb2FkZXIgPSBuZXcgU2NoZWR1bGluZ0luZm9ybWF0aW9uTG9hZGVyKCk7DQorICAgICAgICAgICAgb3NDb25mTW9kZWwgPSBzY2hlZEluZm9Mb2FkZXIuZ2V0VGFza3NJbmZvcm1hdGlvbih0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0VGFza0xpc3RGaWxlKCkpOw0KKw0KKyAgICAgICAgICAgIGlmIChvc0NvbmZNb2RlbCAhPSBudWxsKSB7DQorICAgICAgICAgICAgICAgIFNDQUlSTW9kZWxFbnJpY2htZW50VXRpbHMubWFya1Rhc2tzSXNyc1J1bm5hYmxlc0luTW9kZWwocmVzb3VyY2UsDQorICAgICAgICAgICAgICAgICAgICBvc0NvbmZNb2RlbC5nZXRUYXNrSVNSSW5mb0FzTWFwKCkpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIExvY2tEZWZpbml0aW9uIGxvY2tEZWZpbml0aW9uID0gbnVsbDsNCisNCisgICAgICAgIGlmICgodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldExvY2tpbmZvRmlsZSgpICE9IG51bGwpICYmDQorICAgICAgICAgICAgICAgICF0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TG9ja2luZm9GaWxlKCkuaXNFbXB0eSgpKSB7DQorICAgICAgICAgICAgbG9ja0RlZmluaXRpb24gPSBuZXcgTG9ja0RlZmluaXRpb24odGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldExvY2tpbmZvRmlsZSgpKTsNCisgICAgICAgICAgICBsb2NrRGVmaW5pdGlvbi5yZWFkTG9ja0RlZmluaXRpb25Gcm9tRmlsZSgpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgQW1hbHRoZWEgYW1hbHRoZWFNb2RlbCA9IG5ldyBTQ0FUb0FtYWx0aGVhRXhwb3J0ZXIoKS5hbWFsdGhlYVRyYW5zZm9ybWF0aW9uKHJlc291cmNlLA0KKyAgICAgICAgICAgICAgICBsb2NrRGVmaW5pdGlvbiwgb3NDb25mTW9kZWwpOw0KKw0KKyAgICAgICAgTWFuaXB1bGF0ZUFtYWx0aGVhLm1hcmtJbmlUYXNrc0luQW1hbHRoZWFNb2RlbChhbWFsdGhlYU1vZGVsLA0KKyAgICAgICAgICAgIG9zQ29uZk1vZGVsKTsNCisNCisgICAgICAgIE1hbmlwdWxhdGVBbWFsdGhlYSBtYW5pcHVsYXRvckNhbGxlciA9IG5ldyBNYW5pcHVsYXRlQW1hbHRoZWEoKTsNCisgICAgICAgIG1hbmlwdWxhdG9yQ2FsbGVyLm1hbmlwdWxhdGVzKHRoaXMuc2NhMmFtUHJvcGVydGllcywgYW1hbHRoZWFNb2RlbCk7DQorDQorICAgICAgICBBTUFMVEhFQVJlc291cmNlU2VyaWFsaXplciBhbVJlc1NlcmlhbGl6ZXIgPSBuZXcgQU1BTFRIRUFSZXNvdXJjZVNlcmlhbGl6ZXIoKTsNCisgICAgICAgIGFtUmVzU2VyaWFsaXplci5zYXZlQW1hbHRoZWFNb2RlbCh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0QmluRGlyZWN0b3J5KCkgKw0KKyAgICAgICAgICAgICIvYW1hbHRoZWFNb2RlbEZyb21MTFZNIiwgYW1hbHRoZWFNb2RlbCk7DQogICAgIH0NCiANCi0gICAgY2hlY2tGaWxlUGF0aEV4aXN0cyh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0VGFza0xpc3RGaWxlKCksICJ0YXNrbGlzdCBmaWxlIHBhdGgiKTsNCi0gICAgY2hlY2tGaWxlUGF0aEV4aXN0cyh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0QnVpbGRMb2dGaWxlKCksICJidWlsZCBsb2cgZmlsZSBwYXRoIik7DQotDQotICAgIGlmICgodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGhEaXJGaWxlUGF0aCgpICE9IG51bGwpICYmICF0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0aERpckZpbGVQYXRoKCkuaXNFbXB0eSgpKSB7DQotICAgICAgU3RyaW5nW10gcGF0aHMgPSB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0aERpckZpbGVQYXRoKCkuc3BsaXQoIjsiKTsNCi0gICAgICBmb3IgKFN0cmluZyBzIDogcGF0aHMpIHsNCi0gICAgICAgIGNoZWNrRmlsZVBhdGhFeGlzdHMocywgImggZGlyIHBhdGgiKTsNCi0gICAgICB9DQorICAgIC8qKg0KKyAgICAgKiBNZXRob2QgdGhhdCBwcm92aWRlcyB0aGUgZmFsbCBiYWNrIHN0cmF0ZWd5IGlmIHRoZSB1c2VyIGhhcyBub3QgcHJvdmlkZWQgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzDQorICAgICAqLw0KKyAgICBwcml2YXRlIHZvaWQgYXBwbHlGYWxsQmFja1N0cmF0ZWd5KCkgew0KKyAgICAgICAgaWYgKCh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0T3V0UHV0UGF0aCgpID09IG51bGwpIHx8DQorICAgICAgICAgICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkuaXNFbXB0eSgpKSB7DQorICAgICAgICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLnNldEJpbkRpcmVjdG9yeShTQ0FVdGlscy5nZXRTQ0FSb290RGlyZWN0b3J5KA0KKyAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldFByb2plY3RQYXRoKCksDQorICAgICAgICAgICAgICAgICAgICBTQ0FUb29sc0RpcmVjdG9yeVR5cGUuU0NBX0JJTiwNCisgICAgICAgICAgICAgICAgICAgIEFwcDRtY1Rvb2xDb25zdGFudHMuU0NBMkFNQUxUSEVBX1RPT0xfSUQudG9Mb3dlckNhc2UoDQorICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxlLmdldERlZmF1bHQoKSkpKTsNCisgICAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzKCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0R2VuRGlyZWN0b3J5KFNDQVV0aWxzLmdldFNDQVJvb3REaXJlY3RvcnkoDQorICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0UHJvamVjdFBhdGgoKSwNCisgICAgICAgICAgICAgICAgICAgIFNDQVRvb2xzRGlyZWN0b3J5VHlwZS5TQ0FfR0VOLA0KKyAgICAgICAgICAgICAgICAgICAgQXBwNG1jVG9vbENvbnN0YW50cy5TQ0EyQU1BTFRIRUFfVE9PTF9JRC50b0xvd2VyQ2FzZSgNCisgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbGUuZ2V0RGVmYXVsdCgpKSkpOw0KKyAgICAgICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRMbHZtU3RhcnRlclByb3BlcnRpZXMoKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRMb2dEaXJlY290cnkoU0NBVXRpbHMuZ2V0U0NBUm9vdERpcmVjdG9yeSgNCisgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRQcm9qZWN0UGF0aCgpLA0KKyAgICAgICAgICAgICAgICAgICAgU0NBVG9vbHNEaXJlY3RvcnlUeXBlLlNDQV9MT0csDQorICAgICAgICAgICAgICAgICAgICBBcHA0bWNUb29sQ29uc3RhbnRzLlNDQTJBTUFMVEhFQV9UT09MX0lELnRvTG93ZXJDYXNlKA0KKyAgICAgICAgICAgICAgICAgICAgICAgIExvY2FsZS5nZXREZWZhdWx0KCkpKSk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5zZXRCaW5EaXJlY3RvcnkodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldE91dFB1dFBhdGgoKSk7DQorICAgICAgICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldExsdm1TdGFydGVyUHJvcGVydGllcygpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldEdlbkRpcmVjdG9yeSh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0T3V0UHV0UGF0aCgpKTsNCisgICAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzKCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TG9nRGlyZWNvdHJ5KHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkpOw0KKyAgICAgICAgfQ0KICAgICB9DQogDQotICAgIGNoZWNrRmlsZVBhdGhFeGlzdHModGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldExvY2tpbmZvRmlsZSgpLCAibG9jayBpbmZvIGZpbGUgcGF0aCIpOw0KLSAgfQ0KKyAgICAvKioNCisgICAgICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB1c2VyIGhhcyBwcm92aWRlZCB0aGUgYnVpbGRfY21kLmxvZyBmaWxlIGFuZCB0aGUgaGVhZGVyIGRpcmVjdG9yaWVzLiBJZiBzbyBpdCByZWFkcyB0aGVtDQorICAgICAqIGFuZCBnZW5lcmF0ZXMgdGhlIGNsaXN0IGFuZCBobGlzdC4NCisgICAgICovDQorICAgIHByaXZhdGUgdm9pZCBwYXJzZUJsb2dBbmRIRGlyTGlzdE9wdGlvbnMoKSB7DQorICAgICAgICBMaXN0PFN0cmluZz4gaGRMaXN0Ow0KKyAgICAgICAgTGlzdDxTdHJpbmc+IGNMaXN0Ow0KIA0KLSAgLyoqDQotICAgKiBAcGFyYW0gZmlsZVBhdGggdG8gYmUgY2hlY2tlZA0KLSAgICogQHBhcmFtIGZpbGVQYXRoTmFtZSBkZXNjcmlwdGlvbg0KLSAgICovDQotICBwcml2YXRlIHZvaWQgY2hlY2tGaWxlUGF0aEV4aXN0cyhmaW5hbCBTdHJpbmcgZmlsZVBhdGgsIGZpbmFsIFN0cmluZyBmaWxlUGF0aE5hbWUpIHsNCi0gICAgaWYgKChmaWxlUGF0aCAhPSBudWxsKSAmJiAhZmlsZVBhdGguaXNFbXB0eSgpICYmICFuZXcgRmlsZShmaWxlUGF0aCkuZXhpc3RzKCkpIHsNCi0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJUaGUgIiArIGZpbGVQYXRoTmFtZSArICIgcHJvdmlkZWQgaXMgbm90IHZhbGlkOiAiICsgZmlsZVBhdGgpOw0KKyAgICAgICAgaWYgKCh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0QnVpbGRMb2dGaWxlKCkgIT0gbnVsbCkgJiYNCisgICAgICAgICAgICAgICAgIXRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRCdWlsZExvZ0ZpbGUoKS5pc0VtcHR5KCkpIHsNCisgICAgICAgICAgICBCdWlsZENvbW1hbmRMb2dGaWxlUGFyc2VyIGNMaXN0UHJvdmlkZXIgPSBuZXcgQnVpbGRDb21tYW5kTG9nRmlsZVBhcnNlcih0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0QnVpbGRMb2dGaWxlKCksDQorICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0UHJvamVjdFBhdGgoKSk7DQorICAgICAgICAgICAgY0xpc3QgPSBjTGlzdFByb3ZpZGVyLmdlbmVyYXRlU291cmNlRmlsZUxpc3QoKTsNCisgICAgICAgICAgICBoZExpc3QgPSBjTGlzdFByb3ZpZGVyLmdlbmVyYXRlSGFzaERlZmluZUxpc3QoKTsNCisNCisgICAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuc2V0Y0ZpbGVzTGlzdChjTGlzdCk7DQorICAgICAgICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLnNldEhhc2hEZWZpbmVMaXN0KGhkTGlzdCk7DQorICAgICAgICB9DQorDQorICAgICAgICBMaXN0PFN0cmluZz4gaExpc3Q7DQorDQorICAgICAgICBpZiAoKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRoRGlyRmlsZVBhdGgoKSAhPSBudWxsKSAmJg0KKyAgICAgICAgICAgICAgICAhdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGhEaXJGaWxlUGF0aCgpLmlzRW1wdHkoKSkgew0KKyAgICAgICAgICAgIFN0cmluZyBoRmlsZVBhdGhMaXN0ID0gdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGhEaXJGaWxlUGF0aCgpOw0KKyAgICAgICAgICAgIC8vIGNyZWF0ZSBoIGZpbGUgbGlzdA0KKyAgICAgICAgICAgIGhMaXN0ID0gbmV3IFBhdGhzVG9MaXN0Q29udmVydGVyKGhGaWxlUGF0aExpc3QsICIuaCIpLmdlbmVyYXRlU291cmNlRmlsZUxpc3QoKTsNCisgICAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuc2V0aEZpbGVzTGlzdChoTGlzdCk7DQorICAgICAgICB9DQogICAgIH0NCi0gIH0NCi0NCi0gIHByaXZhdGUgdm9pZCBjb252ZXJ0WE1MVG9BbWFsdGhlYU1vZGVsKCkgew0KLQkgIE9TQ29uZk1vZGVsIG9zQ29uZk1vZGVsID0gbnVsbDsNCi0gICAgVVJJIGNyZWF0ZVVSSSA9DQotICAgICAgICBVUkkuY3JlYXRlRmlsZVVSSSh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzKCkuZ2V0R2VuRGlyZWN0b3J5KCkgKyAiL1hNTENhbGx0cmVlLnhtbCIpOw0KLSAgICBTQ0FSZXNvdXJjZSByZXNvdXJjZSA9IG5ldyBTQ0FJUkxvYWRlcigpLmxvYWQoY3JlYXRlVVJJKTsNCi0gICAgaWYgKCh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0VGFza0xpc3RGaWxlKCkgIT0gbnVsbCkgJiYgIXRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRUYXNrTGlzdEZpbGUoKS5pc0VtcHR5KCkpIHsNCi0gICAgIFNjaGVkdWxpbmdJbmZvcm1hdGlvbkxvYWRlciBzY2hlZEluZm9Mb2FkZXIgPSBuZXcgU2NoZWR1bGluZ0luZm9ybWF0aW9uTG9hZGVyKCk7DQotICAgICAgb3NDb25mTW9kZWwgPSBzY2hlZEluZm9Mb2FkZXIuZ2V0VGFza3NJbmZvcm1hdGlvbih0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0VGFza0xpc3RGaWxlKCkpOw0KLSAgICAgIGlmIChvc0NvbmZNb2RlbCAhPSBudWxsKSB7DQotICAgICAgICAgIFNDQUlSTW9kZWxFbnJpY2htZW50VXRpbHMubWFya1Rhc2tzSXNyc1J1bm5hYmxlc0luTW9kZWwocmVzb3VyY2UsIG9zQ29uZk1vZGVsLmdldFRhc2tJU1JJbmZvQXNNYXAoKSk7DQotICAgICAgfQ0KLSAgfQ0KLQ0KLSAgICBMb2NrRGVmaW5pdGlvbiBsb2NrRGVmaW5pdGlvbj1udWxsOw0KLSAgICBpZiAoKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRMb2NraW5mb0ZpbGUoKSAhPSBudWxsKSAmJiAhdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldExvY2tpbmZvRmlsZSgpLmlzRW1wdHkoKSkgew0KLSAgICBsb2NrRGVmaW5pdGlvbiA9IG5ldyBMb2NrRGVmaW5pdGlvbih0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TG9ja2luZm9GaWxlKCkpOw0KLSAgICBsb2NrRGVmaW5pdGlvbi5yZWFkTG9ja0RlZmluaXRpb25Gcm9tRmlsZSgpOw0KLSAgICB9DQotIA0KLSAgICAJQW1hbHRoZWEgYW1hbHRoZWFNb2RlbCA9IG5ldyBTQ0FUb0FtYWx0aGVhRXhwb3J0ZXIoKS5hbWFsdGhlYVRyYW5zZm9ybWF0aW9uKHJlc291cmNlLCBsb2NrRGVmaW5pdGlvbiwgb3NDb25mTW9kZWwpOw0KLQ0KLSAgICBNYW5pcHVsYXRlQW1hbHRoZWEubWFya0luaVRhc2tzSW5BbWFsdGhlYU1vZGVsKGFtYWx0aGVhTW9kZWwsIG9zQ29uZk1vZGVsKTsNCi0NCi0gICAgTWFuaXB1bGF0ZUFtYWx0aGVhIG1hbmlwdWxhdG9yQ2FsbGVyID0gbmV3IE1hbmlwdWxhdGVBbWFsdGhlYSgpOw0KLSAgICBtYW5pcHVsYXRvckNhbGxlci5tYW5pcHVsYXRlcyh0aGlzLnNjYTJhbVByb3BlcnRpZXMsIGFtYWx0aGVhTW9kZWwpOw0KLQ0KLSAgICBBTUFMVEhFQVJlc291cmNlU2VyaWFsaXplciBhbVJlc1NlcmlhbGl6ZXIgPSBuZXcgQU1BTFRIRUFSZXNvdXJjZVNlcmlhbGl6ZXIoKTsNCi0gICAgYW1SZXNTZXJpYWxpemVyLnNhdmVBbWFsdGhlYU1vZGVsKHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRCaW5EaXJlY3RvcnkoKSArICIvYW1hbHRoZWFNb2RlbEZyb21MTFZNIiwNCi0gICAgICAgIGFtYWx0aGVhTW9kZWwpOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBNZXRob2QgdGhhdCBwcm92aWRlcyB0aGUgZmFsbCBiYWNrIHN0cmF0ZWd5IGlmIHRoZSB1c2VyIGhhcyBub3QgcHJvdmlkZWQgdGhlIG5lY2Vzc2FyeSBwYXJhbWV0ZXJzDQotICAgKi8NCi0gIHByaXZhdGUgdm9pZCBhcHBseUZhbGxCYWNrU3RyYXRlZ3koKSB7DQotICAgICAgaWYgKCh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0T3V0UHV0UGF0aCgpID09IG51bGwpIHx8IHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkuaXNFbXB0eSgpIHx8DQotICAgICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkNCi0gICAgICAgICAgICAgIC5lcXVhbHMoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldERlZmF1bHRTdHJpbmcoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLk9VVFBVVF9QQVRIKSkpIHsNCi0gICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5zZXRCaW5EaXJlY3RvcnkoU0NBVXRpbHMuZ2V0U0NBUm9vdERpcmVjdG9yeSgNCi0gICAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0Y1Byb2plY3RQYXRoKCksIFNDQVRvb2xzRGlyZWN0b3J5VHlwZS5TQ0FfQklOLA0KLSAgICAgICAgICAgIEFwcDRtY1Rvb2xDb25zdGFudHMuU0NBMkFNQUxUSEVBX1RPT0xfSUQudG9Mb3dlckNhc2UoTG9jYWxlLmdldERlZmF1bHQoKSkpKTsNCi0gICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRMbHZtU3RhcnRlclByb3BlcnRpZXMoKQ0KLSAgICAgICAgICAgIC5zZXRHZW5EaXJlY3RvcnkoU0NBVXRpbHMuZ2V0U0NBUm9vdERpcmVjdG9yeSh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0Y1Byb2plY3RQYXRoKCksDQotICAgICAgICAgICAgICAgIFNDQVRvb2xzRGlyZWN0b3J5VHlwZS5TQ0FfR0VOLA0KLSAgICAgICAgICAgICAgICBBcHA0bWNUb29sQ29uc3RhbnRzLlNDQTJBTUFMVEhFQV9UT09MX0lELnRvTG93ZXJDYXNlKExvY2FsZS5nZXREZWZhdWx0KCkpKSk7DQotICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzKCkNCi0gICAgICAgICAgICAuc2V0TG9nRGlyZWNvdHJ5KFNDQVV0aWxzLmdldFNDQVJvb3REaXJlY3RvcnkodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldGNQcm9qZWN0UGF0aCgpLA0KLSAgICAgICAgICAgICAgICBTQ0FUb29sc0RpcmVjdG9yeVR5cGUuU0NBX0xPRywNCi0gICAgICAgICAgICAgICAgQXBwNG1jVG9vbENvbnN0YW50cy5TQ0EyQU1BTFRIRUFfVE9PTF9JRC50b0xvd2VyQ2FzZShMb2NhbGUuZ2V0RGVmYXVsdCgpKSkpOw0KLSAgICAgIH0NCi0gICAgICBlbHNlIHsNCi0gICAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5zZXRCaW5EaXJlY3RvcnkodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldE91dFB1dFBhdGgoKSk7DQotICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0TGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzKCkuc2V0R2VuRGlyZWN0b3J5KHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRPdXRQdXRQYXRoKCkpOw0KLSAgICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldExsdm1TdGFydGVyUHJvcGVydGllcygpLnNldExvZ0RpcmVjb3RyeSh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0T3V0UHV0UGF0aCgpKTsNCi0gICAgICB9DQotICB9DQotDQotICAvKioNCi0gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdXNlciBoYXMgcHJvdmlkZWQgdGhlIGJ1aWxkX2NtZC5sb2cgZmlsZSBhbmQgdGhlIGhlYWRlciBkaXJlY3Rvcmllcy4gSWYgc28gaXQgcmVhZHMgdGhlbQ0KLSAgICogYW5kIGdlbmVyYXRlcyB0aGUgY2xpc3QgYW5kIGhsaXN0IGFuZCBpZiBub3QgaXQgdXNlcyB0aGUgTURGIHRvIGdldCB0aGUgY2xpc3QgYW5kIGhsaXN0Lg0KLSAgICovDQotICBwcml2YXRlIHZvaWQgcGFyc2VCbG9nQW5kSERpckxpc3RPcHRpb25zKCkgew0KLSAgICBMaXN0PFN0cmluZz4gaGRMaXN0Ow0KLSAgICBMaXN0PFN0cmluZz4gY0xpc3Q7DQotDQotICAgIGlmICgodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldEJ1aWxkTG9nRmlsZSgpICE9IG51bGwpICYmICF0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0QnVpbGRMb2dGaWxlKCkuaXNFbXB0eSgpKSB7DQotICAgICAgQnVpbGRDb21tYW5kTG9nRmlsZVBhcnNlciBjTGlzdFByb3ZpZGVyID0gbmV3IEJ1aWxkQ29tbWFuZExvZ0ZpbGVQYXJzZXIodGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLmdldEJ1aWxkTG9nRmlsZSgpLA0KLSAgICAgICAgICB0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0Y1Byb2plY3RQYXRoKCkpOw0KLSAgICAgIGNMaXN0ID0gY0xpc3RQcm92aWRlci5nZW5lcmF0ZVNvdXJjZUZpbGVMaXN0KCk7DQotICAgICAgaGRMaXN0ID0gY0xpc3RQcm92aWRlci5nZW5lcmF0ZUhhc2hEZWZpbmVMaXN0KCk7DQotDQotICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLnNldGNGaWxlc0xpc3QoY0xpc3QpOw0KLSAgICAgIHRoaXMuc2NhMmFtUHJvcGVydGllcy5zZXRIYXNoRGVmaW5lTGlzdChoZExpc3QpOw0KLSAgICB9DQotICAgIExpc3Q8U3RyaW5nPiBoTGlzdDsNCi0gICAgaWYgKCh0aGlzLnNjYTJhbVByb3BlcnRpZXMuZ2V0aERpckZpbGVQYXRoKCkgIT0gbnVsbCkgJiYgIXRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRoRGlyRmlsZVBhdGgoKS5pc0VtcHR5KCkpIHsNCi0gICAgICBTdHJpbmcgaEZpbGVQYXRoTGlzdCA9IHRoaXMuc2NhMmFtUHJvcGVydGllcy5nZXRoRGlyRmlsZVBhdGgoKTsNCi0gICAgICAvLyBjcmVhdGUgaCBmaWxlIGxpc3QNCi0gICAgICBoTGlzdCA9IG5ldyBQYXRoc1RvTGlzdENvbnZlcnRlcihoRmlsZVBhdGhMaXN0LCAiLmgiKS5nZW5lcmF0ZVNvdXJjZUZpbGVMaXN0KCk7DQotICAgICAgdGhpcy5zY2EyYW1Qcm9wZXJ0aWVzLnNldGhGaWxlc0xpc3QoaExpc3QpOw0KLSAgICB9DQotICB9DQotDQogfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vaGVhZGxlc3MvU0NBMkFNQUxUSEVBQ21kTGF1bmNoZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vaGVhZGxlc3MvU0NBMkFNQUxUSEVBQ21kTGF1bmNoZXIuamF2YQppbmRleCBhNjQxMmYyLi4xYTMxZmExIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL2hlYWRsZXNzL1NDQTJBTUFMVEhFQUNtZExhdW5jaGVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9oZWFkbGVzcy9TQ0EyQU1BTFRIRUFDbWRMYXVuY2hlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL2hlYWRsZXNzL1NDQTJBTUFMVEhFQVN0YXJ0ZXJQcm9wZXJ0aWVzLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL2hlYWRsZXNzL1NDQTJBTUFMVEhFQVN0YXJ0ZXJQcm9wZXJ0aWVzLmphdmEKaW5kZXggYTNkYThmZS4uMDIzNDgzOSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9oZWFkbGVzcy9TQ0EyQU1BTFRIRUFTdGFydGVyUHJvcGVydGllcy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vaGVhZGxlc3MvU0NBMkFNQUxUSEVBU3RhcnRlclByb3BlcnRpZXMuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpAQCAtMTQsNTYgKzE0LDY0IEBACiAgKi8NCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS5oZWFkbGVzczsNCiANCitpbXBvcnQgamF2YS5pby5GaWxlOw0KIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCiANCiBpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtLnN0YXJ0ZXIuTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzOw0KIA0KK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLkpvaW5lcjsNCisNCiANCiAvKioNCi0gKiBUaGVzZSBjbGFzcyBjb250YWlucyBvbmx5IHRoZSBkYXRhIG9mIGFsbCBhb3B0aW9ucyBuZWVkZWQgZm9yIHJ1bm5pbmcgdGhlIFNDQTJBTUFMVEhFQSB0b29sDQorICogVGhlc2UgY2xhc3MgY29udGFpbnMgb25seSB0aGUgZGF0YSBvZiBhbGwgb3B0aW9ucyBuZWVkZWQgZm9yIHJ1bm5pbmcgdGhlIFNDQTJBTUFMVEhFQSB0b29sDQogICovDQogcHVibGljIGNsYXNzIFNDQTJBTUFMVEhFQVN0YXJ0ZXJQcm9wZXJ0aWVzIHsNCiANCisgIHByaXZhdGUgU3RyaW5nIHByb2plY3RQYXRoOw0KICAgcHJpdmF0ZSBTdHJpbmcgb3V0UHV0UGF0aDsNCiAgIHByaXZhdGUgU3RyaW5nIGJpbkRpcmVjdG9yeTsNCi0NCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHRhc2tMaXN0RmlsZTsNCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGNQcm9qZWN0UGF0aDsNCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGhEaXJGaWxlUGF0aDsNCi0NCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGJ1aWxkTG9nRmlsZTsNCisgIHByaXZhdGUgU3RyaW5nIHRhc2tMaXN0RmlsZTsNCisgIHByaXZhdGUgU3RyaW5nIGhEaXJGaWxlUGF0aDsNCisgIHByaXZhdGUgU3RyaW5nIGJ1aWxkTG9nRmlsZTsNCiAgIHByaXZhdGUgU3RyaW5nIGxvY2tpbmZvRmlsZTsNCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc1N0cnVjdE1lbWJlckVuYWJsZWQ7DQorICBwcml2YXRlIGJvb2xlYW4gaXNTdHJ1Y3RNZW1iZXJFbmFibGVkOw0KIA0KLSAgcHJpdmF0ZSBmaW5hbCBMTFZNU3RhcnRlclByb3BlcnRpZXMgbGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzOw0KKyAgcHJpdmF0ZSBMTFZNU3RhcnRlclByb3BlcnRpZXMgbGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzID0gbmV3IExMVk1TdGFydGVyUHJvcGVydGllcygpOw0KIA0KICAgLyoqDQogICAgKg0KICAgICovDQogICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NLX0RFRklOSVRJT05fRklMRSA9ICJkZWZhdWx0X2Jzd19sb2NrX2Z1bmN0aW9ucy5jc3YiOw0KIA0KKw0KKyAgcHVibGljIFNDQTJBTUFMVEhFQVN0YXJ0ZXJQcm9wZXJ0aWVzKCkgew0KKyAgICAvLyBubyAtYXJnIGNvbnN0cnVjdG9yDQorICB9DQorDQogICAvKioNCiAgICAqIEBwYXJhbSB0cmF2ZXJzZUFzdFBhdGgge0BsaW5rIFN0cmluZ30NCiAgICAqIEBwYXJhbSBvdXRQdXRQYXRoIHtAbGluayBTdHJpbmd9DQogICAgKiBAcGFyYW0gdGFza0xpc3RGaWxlIHtAbGluayBTdHJpbmd9DQogICAgKiBAcGFyYW0gbnVtYmVyT2ZUaHJlYWRzIHtAbGluayBJbnRlZ2VyfQ0KLSAgICogQHBhcmFtIGNQcm9qZWN0UGF0aCB7QGxpbmsgU3RyaW5nfQ0KKyAgICogQHBhcmFtIHByb2plY3RQYXRoIHtAbGluayBTdHJpbmd9DQogICAgKiBAcGFyYW0gaERpckZpbGVQYXRoIHtAbGluayBTdHJpbmd9DQogICAgKiBAcGFyYW0gYnVpbGRMb2dGaWxlIHtAbGluayBTdHJpbmd9DQogICAgKiBAcGFyYW0gbG9ja2luZm9GaWxlIHtAbGluayBTdHJpbmd9DQogICAgKiBAcGFyYW0gaXNTdHJ1Y3RNZW1iZXJFbmFibGVkIHtAbGluayBCb29sZWFufQ0KICAgICovDQorDQorDQogICBwdWJsaWMgU0NBMkFNQUxUSEVBU3RhcnRlclByb3BlcnRpZXMoZmluYWwgU3RyaW5nIHRyYXZlcnNlQXN0UGF0aCwgZmluYWwgU3RyaW5nIG91dFB1dFBhdGgsIGZpbmFsIFN0cmluZyB0YXNrTGlzdEZpbGUsDQotICAgICAgZmluYWwgaW50IG51bWJlck9mVGhyZWFkcywgZmluYWwgU3RyaW5nIGNQcm9qZWN0UGF0aCwgZmluYWwgU3RyaW5nIGhEaXJGaWxlUGF0aCwgZmluYWwgU3RyaW5nIGJ1aWxkTG9nRmlsZSwNCisgICAgICBmaW5hbCBpbnQgbnVtYmVyT2ZUaHJlYWRzLCBmaW5hbCBTdHJpbmcgcHJvamVjdFBhdGgsIGZpbmFsIFN0cmluZyBoRGlyRmlsZVBhdGgsIGZpbmFsIFN0cmluZyBidWlsZExvZ0ZpbGUsDQogICAgICAgZmluYWwgU3RyaW5nIGxvY2tpbmZvRmlsZSwgZmluYWwgYm9vbGVhbiBpc1N0cnVjdE1lbWJlckVuYWJsZWQpIHsNCiANCi0gICAgdGhpcy5sbHZtU3RhcnRlclByb3BlcnRpZXMgPSBuZXcgTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzKHRyYXZlcnNlQXN0UGF0aCwgb3V0UHV0UGF0aCwgbnVtYmVyT2ZUaHJlYWRzLCBjUHJvamVjdFBhdGgsDQorICAgIHRoaXMubGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzID0gbmV3IExMVk1TdGFydGVyUHJvcGVydGllcyh0cmF2ZXJzZUFzdFBhdGgsIG91dFB1dFBhdGgsIG51bWJlck9mVGhyZWFkcywgcHJvamVjdFBhdGgsDQogICAgICAgICBudWxsLCBudWxsLCBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKSwgbmV3IEFycmF5TGlzdDxTdHJpbmc+KCksIG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpKTsNCiANCiAgICAgdGhpcy50YXNrTGlzdEZpbGUgPSB0YXNrTGlzdEZpbGU7DQogICAgIHRoaXMub3V0UHV0UGF0aCA9IG91dFB1dFBhdGg7DQotICAgIHRoaXMuY1Byb2plY3RQYXRoID0gY1Byb2plY3RQYXRoOw0KKyAgICB0aGlzLnByb2plY3RQYXRoID0gcHJvamVjdFBhdGg7DQogICAgIHRoaXMuaERpckZpbGVQYXRoID0gaERpckZpbGVQYXRoOw0KICAgICB0aGlzLmJ1aWxkTG9nRmlsZSA9IGJ1aWxkTG9nRmlsZTsNCiAgICAgdGhpcy5sb2NraW5mb0ZpbGUgPSBsb2NraW5mb0ZpbGU7DQpAQCAtNzgsMTcgKzg2LDM5IEBACiAgIH0NCiANCiANCi0NCi0NCisgIC8qKg0KKyAgICogQHBhcmFtIHByb2plY3RQYXRoIHRoZSBjUHJvamVjdFBhdGggdG8gc2V0DQorICAgKi8NCisgIHB1YmxpYyB2b2lkIHNldFByb2plY3RQYXRoKGZpbmFsIFN0cmluZyBwcm9qZWN0UGF0aCkgew0KKyAgICB0aGlzLnByb2plY3RQYXRoID0gcHJvamVjdFBhdGg7DQorICAgIHRoaXMubGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzLnNldFByb2plY3RQYXRoKHByb2plY3RQYXRoKTsNCisgIH0NCiANCiAgIC8qKg0KICAgICogQHBhcmFtIG91dFB1dFBhdGggdGhlIG91dFB1dFBhdGggdG8gc2V0DQogICAgKi8NCiAgIHB1YmxpYyB2b2lkIHNldE91dFB1dFBhdGgoZmluYWwgU3RyaW5nIG91dFB1dFBhdGgpIHsNCi0gICAgdGhpcy5vdXRQdXRQYXRoID0gb3V0UHV0UGF0aDsNCisgICAgaWYgKChvdXRQdXRQYXRoID09IG51bGwpIHx8IG91dFB1dFBhdGguaXNFbXB0eSgpIHx8IG5ldyBGaWxlKG91dFB1dFBhdGgpLmlzQWJzb2x1dGUoKSkgew0KKyAgICAgIHRoaXMub3V0UHV0UGF0aCA9IG91dFB1dFBhdGg7DQorICAgIH0NCisgICAgZWxzZSB7DQorICAgICAgdGhpcy5vdXRQdXRQYXRoID0gdGhpcy5wcm9qZWN0UGF0aCArIG91dFB1dFBhdGg7DQorICAgIH0NCiAgICAgdGhpcy5sbHZtU3RhcnRlclByb3BlcnRpZXMuc2V0T3V0UHV0UGF0aChvdXRQdXRQYXRoKTsNCiAgIH0NCiANCisgIC8qKg0KKyAgICogQHBhcmFtIGJ1aWxkTG9nRmlsZSB0aGUgYnVpbGQgY29tbWFuZCBsb2cgZmlsZSBwYXRoDQorICAgKi8NCisgIHB1YmxpYyB2b2lkIHNldEJ1aWxkTG9nRmlsZShmaW5hbCBTdHJpbmcgYnVpbGRMb2dGaWxlKSB7DQorICAgIGlmICgoYnVpbGRMb2dGaWxlID09IG51bGwpIHx8IGJ1aWxkTG9nRmlsZS5pc0VtcHR5KCkgfHwgbmV3IEZpbGUoYnVpbGRMb2dGaWxlKS5pc0Fic29sdXRlKCkpIHsNCisgICAgICB0aGlzLmJ1aWxkTG9nRmlsZSA9IGJ1aWxkTG9nRmlsZTsNCisgICAgfQ0KKyAgICBlbHNlIHsNCisgICAgICB0aGlzLmJ1aWxkTG9nRmlsZSA9IHRoaXMucHJvamVjdFBhdGggKyBidWlsZExvZ0ZpbGU7DQorICAgIH0NCisgIH0NCisNCiANCiAgIC8qKg0KICAgICogQHBhcmFtIGNGaWxlc0xpc3QgdGhlIGNGaWxlc0xpc3QgdG8gc2V0DQpAQCAtMTA1LDYgKzEzNSw0MyBAQAogICAgIHRoaXMubGx2bVN0YXJ0ZXJQcm9wZXJ0aWVzLnNldGhGaWxlc0xpc3QoaEZpbGVzTGlzdCk7DQogICB9DQogDQorICAvKioNCisgICAqIEBwYXJhbSBoRGlyRmlsZVBhdGggdGhlIGhlYWRlciBkaXJlY3Rvcmllcy4NCisgICAqLw0KKyAgcHVibGljIHZvaWQgc2V0SERpckZpbGVQYXRoKGZpbmFsIFN0cmluZyBoRGlyRmlsZVBhdGgpIHsNCisgICAgTGlzdDxTdHJpbmc+IGhkaXJMaXN0ID0gbmV3IEFycmF5TGlzdDw+KCk7DQorICAgIGlmICgoaERpckZpbGVQYXRoICE9IG51bGwpICYmICFoRGlyRmlsZVBhdGguaXNFbXB0eSgpKSB7DQorICAgICAgZm9yIChTdHJpbmcgcyA6IGhEaXJGaWxlUGF0aC5zcGxpdChGaWxlLnBhdGhTZXBhcmF0b3IpKSB7DQorICAgICAgICBpZiAobmV3IEZpbGUocykuaXNBYnNvbHV0ZSgpKSB7DQorICAgICAgICAgIGhkaXJMaXN0LmFkZChzKTsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2Ugew0KKyAgICAgICAgICBoZGlyTGlzdC5hZGQodGhpcy5wcm9qZWN0UGF0aCArIHMpOw0KKyAgICAgICAgfQ0KKyAgICAgIH0NCisgICAgfQ0KKyAgICB0aGlzLmhEaXJGaWxlUGF0aCA9IEpvaW5lci5vbihGaWxlLnBhdGhTZXBhcmF0b3IpLmpvaW4oaGRpckxpc3QpOw0KKyAgfQ0KKw0KKyAgLyoqDQorICAgKiBAcGFyYW0gdGFza0xpc3RGaWxlIHRoZSB0YXNrTGlzdEZpbGUgdG8gc2V0DQorICAgKi8NCisgIHB1YmxpYyB2b2lkIHNldFRhc2tMaXN0RmlsZShmaW5hbCBTdHJpbmcgdGFza0xpc3RGaWxlKSB7DQorICAgIGlmICgodGFza0xpc3RGaWxlID09IG51bGwpIHx8IHRhc2tMaXN0RmlsZS5pc0VtcHR5KCkgfHwgbmV3IEZpbGUodGFza0xpc3RGaWxlKS5pc0Fic29sdXRlKCkpIHsNCisgICAgICB0aGlzLnRhc2tMaXN0RmlsZSA9IHRhc2tMaXN0RmlsZTsNCisgICAgfQ0KKyAgICBlbHNlIHsNCisgICAgICB0aGlzLnRhc2tMaXN0RmlsZSA9IHRoaXMucHJvamVjdFBhdGggKyB0YXNrTGlzdEZpbGU7DQorICAgIH0NCisgIH0NCisNCisgIC8qKg0KKyAgICogQHBhcmFtIGlzU3RydWN0TWVtYmVyRW5hYmxlZCBlbmFibGUgc3RydWN0dXJlIG1lbWJlcnMgb3B0aW9uLg0KKyAgICovDQorICBwdWJsaWMgdm9pZCBzZXRJc1N0cnVjdE1lbWJlckVuYWJsZWQoZmluYWwgYm9vbGVhbiBpc1N0cnVjdE1lbWJlckVuYWJsZWQpIHsNCisgICAgdGhpcy5pc1N0cnVjdE1lbWJlckVuYWJsZWQgPSBpc1N0cnVjdE1lbWJlckVuYWJsZWQ7DQorICB9DQorDQogDQogICAvKioNCiAgICAqIEByZXR1cm4gdGhlIGxpc3Qgb2YgQyBmaWxlcyBjb250YWluZWQgaW4gdGhlIHByb2plY3Qgb3IgdmFyaWFudA0KQEAgLTEzOCw4ICsyMDUsOCBAQAogICAvKioNCiAgICAqIEByZXR1cm4gdGhlIGNQcm9qZWN0UGF0aA0KICAgICovDQotICBwdWJsaWMgU3RyaW5nIGdldGNQcm9qZWN0UGF0aCgpIHsNCi0gICAgcmV0dXJuIHRoaXMuY1Byb2plY3RQYXRoOw0KKyAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0UGF0aCgpIHsNCisgICAgcmV0dXJuIHRoaXMucHJvamVjdFBhdGg7DQogICB9DQogDQogICAvKioNCkBAIC0xODMsNyArMjUwLDEyIEBACiAgICAqIEBwYXJhbSBsb2NraW5mb0ZpbGUgdGhlIGxvY2tpbmZvRmlsZSB0byBzZXQNCiAgICAqLw0KICAgcHVibGljIHZvaWQgc2V0TG9ja2luZm9GaWxlKGZpbmFsIFN0cmluZyBsb2NraW5mb0ZpbGUpIHsNCi0gICAgdGhpcy5sb2NraW5mb0ZpbGUgPSBsb2NraW5mb0ZpbGU7DQorICAgIGlmICgobG9ja2luZm9GaWxlID09IG51bGwpIHx8IGxvY2tpbmZvRmlsZS5pc0VtcHR5KCkgfHwgbmV3IEZpbGUobG9ja2luZm9GaWxlKS5pc0Fic29sdXRlKCkpIHsNCisgICAgICB0aGlzLmxvY2tpbmZvRmlsZSA9IGxvY2tpbmZvRmlsZTsNCisgICAgfQ0KKyAgICBlbHNlIHsNCisgICAgICB0aGlzLmxvY2tpbmZvRmlsZSA9IHRoaXMucHJvamVjdFBhdGggKyBsb2NraW5mb0ZpbGU7DQorICAgIH0NCiAgIH0NCiANCiANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL3NyY2ZpbGVzL3N1cHBvcnQvQnVpbGRDb21tYW5kTG9nRmlsZVBhcnNlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zcmNmaWxlcy9zdXBwb3J0L0J1aWxkQ29tbWFuZExvZ0ZpbGVQYXJzZXIuamF2YQppbmRleCBkMmE5N2I5Li40MjY0YzQ1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL3NyY2ZpbGVzL3N1cHBvcnQvQnVpbGRDb21tYW5kTG9nRmlsZVBhcnNlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vc3JjZmlsZXMvc3VwcG9ydC9CdWlsZENvbW1hbmRMb2dGaWxlUGFyc2VyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vc3JjZmlsZXMvc3VwcG9ydC9JU291cmNlRmlsZUxpc3RQcm92aWRlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zcmNmaWxlcy9zdXBwb3J0L0lTb3VyY2VGaWxlTGlzdFByb3ZpZGVyLmphdmEKaW5kZXggOTFhODFhYy4uNWFjNDA3NSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zcmNmaWxlcy9zdXBwb3J0L0lTb3VyY2VGaWxlTGlzdFByb3ZpZGVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zcmNmaWxlcy9zdXBwb3J0L0lTb3VyY2VGaWxlTGlzdFByb3ZpZGVyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vc3JjZmlsZXMvc3VwcG9ydC9QYXRoc1RvTGlzdENvbnZlcnRlci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zcmNmaWxlcy9zdXBwb3J0L1BhdGhzVG9MaXN0Q29udmVydGVyLmphdmEKaW5kZXggNWY3ODdmOC4uYmUwZGU2OSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zcmNmaWxlcy9zdXBwb3J0L1BhdGhzVG9MaXN0Q29udmVydGVyLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zcmNmaWxlcy9zdXBwb3J0L1BhdGhzVG9MaXN0Q29udmVydGVyLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vc3RhcnRlci9HZW5lcmF0ZVRyYXZlcnNlQXN0T3V0cHV0LmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL3N0YXJ0ZXIvR2VuZXJhdGVUcmF2ZXJzZUFzdE91dHB1dC5qYXZhCmluZGV4IDY2MzlmMDcuLjc2OTUyOGEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vc3RhcnRlci9HZW5lcmF0ZVRyYXZlcnNlQXN0T3V0cHV0LmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zdGFydGVyL0dlbmVyYXRlVHJhdmVyc2VBc3RPdXRwdXQuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpAQCAtNzQsOCArNzQsOCBAQAogICAgICAgY21kTGlzdC5hZGQoIi1uPSIgKyBwcm9wZXJ0aWVzLmdldE51bWJlck9mVGhyZWFkcygpKTsNCiAgICAgfQ0KIA0KLSAgICBpZiAocHJvcGVydGllcy5nZXRjUHJvamVjdFBhdGgoKSAhPSBudWxsKSB7DQotICAgICAgY21kTGlzdC5hZGQoIi1wZGlyPSIgKyBwcm9wZXJ0aWVzLmdldGNQcm9qZWN0UGF0aCgpKTsNCisgICAgaWYgKHByb3BlcnRpZXMuZ2V0UHJvamVjdFBhdGgoKSAhPSBudWxsKSB7DQorICAgICAgY21kTGlzdC5hZGQoIi1wZGlyPSIgKyBwcm9wZXJ0aWVzLmdldFByb2plY3RQYXRoKCkpOw0KICAgICB9DQogICAgIGlmIChwcm9wZXJ0aWVzLmdldGhGaWxlc1BhdGgoKSAhPSBudWxsKSB7DQogICAgICAgY21kTGlzdC5hZGQoIi1oZGlyPSIgKyBwcm9wZXJ0aWVzLmdldGhGaWxlc1BhdGgoKSk7DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zdGFydGVyL0xMVk1TdGFydGVyUHJvcGVydGllcy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zdGFydGVyL0xMVk1TdGFydGVyUHJvcGVydGllcy5qYXZhCmluZGV4IGRmYzk3NTEuLjI3NjJmYmQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vc3RhcnRlci9MTFZNU3RhcnRlclByb3BlcnRpZXMuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL3N0YXJ0ZXIvTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzLmphdmEKQEAgLTEsMTMgKzEsMTMgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KLSAqIA0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICoNCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCi0gKiANCisgKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMA0KKyAqDQogICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCi0gKiANCisgKg0KICAqIENvbnRyaWJ1dG9yczoNCiAgKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCkBAIC0yMiwxODggKzIyLDIwMiBAQAogICogVGhpcyBjbGFzcyBjb250YWlucyBvbmx5IHRoZSBvcHRpb25zIG5lZWRlZCBmb3IgcnVubmluZyB0aGUgbGx2bSBwYXJ0IEMtQ29kZSBleGVjdXRhYmxlDQogICovDQogcHVibGljIGNsYXNzIExMVk1TdGFydGVyUHJvcGVydGllcyB7DQorICAgIC8qKg0KKyAgICAgKg0KKyAgICAgKi8NCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBVkVSU0VfQVNUX0ZJTEUgPSAic2NhLmV4ZSI7DQogDQotICBwcml2YXRlIFN0cmluZyB0cmF2ZXJzZUFzdEZpbGU7DQotICBwcml2YXRlIFN0cmluZyBvdXRQdXRQYXRoOw0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2VuRGlyZWN0b3J5Ow0KLSAgcHJpdmF0ZSBTdHJpbmcgbG9nRGlyZWN0b3J5Ow0KLSAgcHJpdmF0ZSBmaW5hbCBpbnQgbnVtYmVyT2ZUaHJlYWRzOw0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY1Byb2plY3RQYXRoOw0KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY0ZpbGVzUGF0aDsNCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGhGaWxlc1BhdGg7DQotICBwcml2YXRlIExpc3Q8U3RyaW5nPiBjRmlsZXNMaXN0Ow0KLSAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gaEZpbGVzTGlzdDsNCi0gIHByaXZhdGUgTGlzdDxTdHJpbmc+IGhhc2hEZWZpbmVMaXN0Ow0KKyAgICAvKioNCisgICAgKg0KKyAgICAqLw0KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBMSUJfQ0xBTkdfRExMID0gImxpYmNsYW5nLmRsbCI7DQorICAgIHByaXZhdGUgU3RyaW5nIHByb2plY3RQYXRoOw0KKyAgICBwcml2YXRlIFN0cmluZyB0cmF2ZXJzZUFzdEZpbGU7DQorICAgIHByaXZhdGUgU3RyaW5nIG91dFB1dFBhdGg7DQorICAgIHByaXZhdGUgU3RyaW5nIGdlbkRpcmVjdG9yeTsNCisgICAgcHJpdmF0ZSBTdHJpbmcgbG9nRGlyZWN0b3J5Ow0KKyAgICBwcml2YXRlIGludCBudW1iZXJPZlRocmVhZHM7DQorICAgIHByaXZhdGUgU3RyaW5nIGNGaWxlc1BhdGg7DQorICAgIHByaXZhdGUgU3RyaW5nIGhGaWxlc1BhdGg7DQorICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGNGaWxlc0xpc3Q7DQorICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGhGaWxlc0xpc3Q7DQorICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGhhc2hEZWZpbmVMaXN0Ow0KIA0KLSAgLyoqDQotICAgKg0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFWRVJTRV9BU1RfRklMRSA9ICJzY2EuZXhlIjsNCi0gIC8qKg0KLSAgKg0KLSAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIExJQl9DTEFOR19ETEwgPSAibGliY2xhbmcuZGxsIjsNCi0NCi0gIC8qKg0KLSAgICogQHBhcmFtIHRyYXZlcnNlQXN0UGF0aCB7QGxpbmsgU3RyaW5nfQ0KLSAgICogQHBhcmFtIG91dFB1dFBhdGgge0BsaW5rIFN0cmluZ30NCi0gICAqIEBwYXJhbSBudW1iZXJPZlRocmVhZHMge0BsaW5rIEludGVnZXJ9DQotICAgKiBAcGFyYW0gY1Byb2plY3RQYXRoIHtAbGluayBTdHJpbmd9DQotICAgKiBAcGFyYW0gY0ZpbGVQYXRoIHtAbGluayBTdHJpbmd9DQotICAgKiBAcGFyYW0gaEZpbGVQYXRoIHtAbGluayBTdHJpbmd9DQotICAgKiBAcGFyYW0gY0ZpbGVzTGlzdCB7QGxpbmsgTGlzdH0NCi0gICAqIEBwYXJhbSBoRmlsZXNMaXN0IHtAbGluayBMaXN0fQ0KLSAgICogQHBhcmFtIGhhc2hEZWZpbmVMaXN0IHtAbGluayBMaXN0fQ0KLSAgICovDQotICBwdWJsaWMgTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzKGZpbmFsIFN0cmluZyB0cmF2ZXJzZUFzdFBhdGgsIGZpbmFsIFN0cmluZyBvdXRQdXRQYXRoLCBmaW5hbCBpbnQgbnVtYmVyT2ZUaHJlYWRzLA0KLSAgICAgIGZpbmFsIFN0cmluZyBjUHJvamVjdFBhdGgsIGZpbmFsIFN0cmluZyBjRmlsZVBhdGgsIGZpbmFsIFN0cmluZyBoRmlsZVBhdGgsIGZpbmFsIExpc3Q8U3RyaW5nPiBjRmlsZXNMaXN0LA0KLSAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBoRmlsZXNMaXN0LCBmaW5hbCBMaXN0PFN0cmluZz4gaGFzaERlZmluZUxpc3QpIHsNCi0NCi0gICAgdGhpcy50cmF2ZXJzZUFzdEZpbGUgPSB0cmF2ZXJzZUFzdFBhdGg7DQotICAgIGlmICgodGhpcy50cmF2ZXJzZUFzdEZpbGUgIT0gbnVsbCkgJiYgIXRoaXMudHJhdmVyc2VBc3RGaWxlLmlzRW1wdHkoKSkgew0KLSAgICAgIHRoaXMudHJhdmVyc2VBc3RGaWxlID0gdHJhdmVyc2VBc3RQYXRoICsgIi8iICsgTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzLlRSQVZFUlNFX0FTVF9GSUxFOw0KKyAgICAvKioNCisgICAgICogTm8gYXJnIGNvbnN0cnVjdG9yDQorICAgICAqLw0KKyAgICBwdWJsaWMgTExWTVN0YXJ0ZXJQcm9wZXJ0aWVzKCkgew0KKyAgICAgICAgLy8gbm8gYXJnIGNvbnN0cnVjdG9yDQogICAgIH0NCiANCi0gICAgdGhpcy5vdXRQdXRQYXRoID0gb3V0UHV0UGF0aDsNCi0gICAgdGhpcy5udW1iZXJPZlRocmVhZHMgPSBudW1iZXJPZlRocmVhZHM7DQotICAgIHRoaXMuY1Byb2plY3RQYXRoID0gY1Byb2plY3RQYXRoOw0KLSAgICB0aGlzLmNGaWxlc1BhdGggPSBjRmlsZVBhdGg7DQotICAgIHRoaXMuaEZpbGVzUGF0aCA9IGhGaWxlUGF0aDsNCi0gICAgdGhpcy5jRmlsZXNMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGNGaWxlc0xpc3QpOw0KLSAgICB0aGlzLmhGaWxlc0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oaEZpbGVzTGlzdCk7DQotICAgIHRoaXMuaGFzaERlZmluZUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oaGFzaERlZmluZUxpc3QpOw0KLSAgfQ0KKyAgICAvKioNCisgICAgICogQHBhcmFtIHRyYXZlcnNlQXN0UGF0aCB7QGxpbmsgU3RyaW5nfQ0KKyAgICAgKiBAcGFyYW0gb3V0UHV0UGF0aCB7QGxpbmsgU3RyaW5nfQ0KKyAgICAgKiBAcGFyYW0gbnVtYmVyT2ZUaHJlYWRzIHtAbGluayBJbnRlZ2VyfQ0KKyAgICAgKiBAcGFyYW0gcHJvamVjdFBhdGgge0BsaW5rIFN0cmluZ30NCisgICAgICogQHBhcmFtIGNGaWxlUGF0aCB7QGxpbmsgU3RyaW5nfQ0KKyAgICAgKiBAcGFyYW0gaEZpbGVQYXRoIHtAbGluayBTdHJpbmd9DQorICAgICAqIEBwYXJhbSBjRmlsZXNMaXN0IHtAbGluayBMaXN0fQ0KKyAgICAgKiBAcGFyYW0gaEZpbGVzTGlzdCB7QGxpbmsgTGlzdH0NCisgICAgICogQHBhcmFtIGhhc2hEZWZpbmVMaXN0IHtAbGluayBMaXN0fQ0KKyAgICAgKi8NCisgICAgcHVibGljIExMVk1TdGFydGVyUHJvcGVydGllcyhmaW5hbCBTdHJpbmcgdHJhdmVyc2VBc3RQYXRoLA0KKyAgICAgICAgZmluYWwgU3RyaW5nIG91dFB1dFBhdGgsIGZpbmFsIGludCBudW1iZXJPZlRocmVhZHMsDQorICAgICAgICBmaW5hbCBTdHJpbmcgcHJvamVjdFBhdGgsIGZpbmFsIFN0cmluZyBjRmlsZVBhdGgsDQorICAgICAgICBmaW5hbCBTdHJpbmcgaEZpbGVQYXRoLCBmaW5hbCBMaXN0PFN0cmluZz4gY0ZpbGVzTGlzdCwNCisgICAgICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBoRmlsZXNMaXN0LCBmaW5hbCBMaXN0PFN0cmluZz4gaGFzaERlZmluZUxpc3QpIHsNCisgICAgICAgIHRoaXMudHJhdmVyc2VBc3RGaWxlID0gdHJhdmVyc2VBc3RQYXRoOw0KIA0KLSAgLyoqDQotICAgKiBAcGFyYW0gdHJhdmVyc2VBc3RGaWxlIHRoZSB0cmF2ZXJzZUFzdEZpbGUgdG8gc2V0DQotICAgKi8NCi0gIHB1YmxpYyB2b2lkIHNldFRyYXZlcnNlQXN0RmlsZShmaW5hbCBTdHJpbmcgdHJhdmVyc2VBc3RGaWxlKSB7DQotICAgIHRoaXMudHJhdmVyc2VBc3RGaWxlID0gdHJhdmVyc2VBc3RGaWxlOw0KLSAgfQ0KKyAgICAgICAgaWYgKCh0aGlzLnRyYXZlcnNlQXN0RmlsZSAhPSBudWxsKSAmJiAhdGhpcy50cmF2ZXJzZUFzdEZpbGUuaXNFbXB0eSgpKSB7DQorICAgICAgICAgICAgdGhpcy50cmF2ZXJzZUFzdEZpbGUgPSB0cmF2ZXJzZUFzdFBhdGggKyAiLyIgKw0KKyAgICAgICAgICAgICAgICBMTFZNU3RhcnRlclByb3BlcnRpZXMuVFJBVkVSU0VfQVNUX0ZJTEU7DQorICAgICAgICB9DQogDQorICAgICAgICB0aGlzLm91dFB1dFBhdGggPSBvdXRQdXRQYXRoOw0KKyAgICAgICAgdGhpcy5udW1iZXJPZlRocmVhZHMgPSBudW1iZXJPZlRocmVhZHM7DQorICAgICAgICB0aGlzLnByb2plY3RQYXRoID0gcHJvamVjdFBhdGg7DQorICAgICAgICB0aGlzLmNGaWxlc1BhdGggPSBjRmlsZVBhdGg7DQorICAgICAgICB0aGlzLmhGaWxlc1BhdGggPSBoRmlsZVBhdGg7DQorICAgICAgICB0aGlzLmNGaWxlc0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oY0ZpbGVzTGlzdCk7DQorICAgICAgICB0aGlzLmhGaWxlc0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oaEZpbGVzTGlzdCk7DQorICAgICAgICB0aGlzLmhhc2hEZWZpbmVMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGhhc2hEZWZpbmVMaXN0KTsNCisgICAgfQ0KIA0KLSAgLyoqDQotICAgKiBAcGFyYW0gb3V0UHV0UGF0aCB0aGUgb3V0UHV0UGF0aCB0byBzZXQNCi0gICAqLw0KLSAgcHVibGljIHZvaWQgc2V0T3V0UHV0UGF0aChmaW5hbCBTdHJpbmcgb3V0UHV0UGF0aCkgew0KLSAgICB0aGlzLm91dFB1dFBhdGggPSBvdXRQdXRQYXRoOw0KLSAgfQ0KKyAgICAvKioNCisgICAgICogQHBhcmFtIHRyYXZlcnNlQXN0RmlsZSB0aGUgdHJhdmVyc2VBc3RGaWxlIHRvIHNldA0KKyAgICAgKi8NCisgICAgcHVibGljIHZvaWQgc2V0VHJhdmVyc2VBc3RGaWxlKGZpbmFsIFN0cmluZyB0cmF2ZXJzZUFzdEZpbGUpIHsNCisgICAgICAgIHRoaXMudHJhdmVyc2VBc3RGaWxlID0gdHJhdmVyc2VBc3RGaWxlOw0KIA0KKyAgICAgICAgaWYgKCh0aGlzLnRyYXZlcnNlQXN0RmlsZSAhPSBudWxsKSAmJiAhdGhpcy50cmF2ZXJzZUFzdEZpbGUuaXNFbXB0eSgpKSB7DQorICAgICAgICAgICAgdGhpcy50cmF2ZXJzZUFzdEZpbGUgPSB0aGlzLnRyYXZlcnNlQXN0RmlsZSArICIvIiArDQorICAgICAgICAgICAgICAgIExMVk1TdGFydGVyUHJvcGVydGllcy5UUkFWRVJTRV9BU1RfRklMRTsNCisgICAgICAgIH0NCisgICAgfQ0KIA0KLSAgLyoqDQotICAgKiBAcGFyYW0gY0ZpbGVzTGlzdCB0aGUgY0ZpbGVzTGlzdCB0byBzZXQNCi0gICAqLw0KLSAgcHVibGljIHZvaWQgc2V0Y0ZpbGVzTGlzdChmaW5hbCBMaXN0PFN0cmluZz4gY0ZpbGVzTGlzdCkgew0KLSAgICB0aGlzLmNGaWxlc0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oY0ZpbGVzTGlzdCk7DQotICB9DQorICAgIC8qKg0KKyAgICAgKiBAcGFyYW0gb3V0UHV0UGF0aCB0aGUgb3V0UHV0UGF0aCB0byBzZXQNCisgICAgICovDQorICAgIHB1YmxpYyB2b2lkIHNldE91dFB1dFBhdGgoZmluYWwgU3RyaW5nIG91dFB1dFBhdGgpIHsNCisgICAgICAgIHRoaXMub3V0UHV0UGF0aCA9IG91dFB1dFBhdGg7DQorICAgIH0NCiANCisgICAgLyoqDQorICAgICAqIEBwYXJhbSBjRmlsZXNMaXN0IHRoZSBjRmlsZXNMaXN0IHRvIHNldA0KKyAgICAgKi8NCisgICAgcHVibGljIHZvaWQgc2V0Y0ZpbGVzTGlzdChmaW5hbCBMaXN0PFN0cmluZz4gY0ZpbGVzTGlzdCkgew0KKyAgICAgICAgdGhpcy5jRmlsZXNMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGNGaWxlc0xpc3QpOw0KKyAgICB9DQogDQotICAvKioNCi0gICAqIEBwYXJhbSBoRmlsZXNMaXN0IHRoZSBoRmlsZXNMaXN0IHRvIHNldA0KLSAgICovDQotICBwdWJsaWMgdm9pZCBzZXRoRmlsZXNMaXN0KGZpbmFsIExpc3Q8U3RyaW5nPiBoRmlsZXNMaXN0KSB7DQotICAgIHRoaXMuaEZpbGVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihoRmlsZXNMaXN0KTsNCi0gIH0NCisgICAgLyoqDQorICAgICAqIEBwYXJhbSBoRmlsZXNMaXN0IHRoZSBoRmlsZXNMaXN0IHRvIHNldA0KKyAgICAgKi8NCisgICAgcHVibGljIHZvaWQgc2V0aEZpbGVzTGlzdChmaW5hbCBMaXN0PFN0cmluZz4gaEZpbGVzTGlzdCkgew0KKyAgICAgICAgdGhpcy5oRmlsZXNMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGhGaWxlc0xpc3QpOw0KKyAgICB9DQogDQorICAgIC8qKg0KKyAgICAgKiBAcGFyYW0gaGFzaERlZmluZUxpc3QgdGhlIGhhc2hEZWZpbmVMaXN0IHRvIHNldA0KKyAgICAgKi8NCisgICAgcHVibGljIHZvaWQgc2V0SGFzaERlZmluZUxpc3QoZmluYWwgTGlzdDxTdHJpbmc+IGhhc2hEZWZpbmVMaXN0KSB7DQorICAgICAgICB0aGlzLmhhc2hEZWZpbmVMaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KGhhc2hEZWZpbmVMaXN0KTsNCisgICAgfQ0KIA0KLSAgLyoqDQotICAgKiBAcGFyYW0gaGFzaERlZmluZUxpc3QgdGhlIGhhc2hEZWZpbmVMaXN0IHRvIHNldA0KLSAgICovDQotICBwdWJsaWMgdm9pZCBzZXRIYXNoRGVmaW5lTGlzdChmaW5hbCBMaXN0PFN0cmluZz4gaGFzaERlZmluZUxpc3QpIHsNCi0gICAgdGhpcy5oYXNoRGVmaW5lTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPihoYXNoRGVmaW5lTGlzdCk7DQotICB9DQorICAgIC8qKg0KKyAgICAgKiBAcGFyYW0gcHJvamVjdFBhdGggdGhlIHByb2plY3RQYXRoIHRvIHNldA0KKyAgICAgKi8NCisgICAgcHVibGljIHZvaWQgc2V0UHJvamVjdFBhdGgoZmluYWwgU3RyaW5nIHByb2plY3RQYXRoKSB7DQorICAgICAgICB0aGlzLnByb2plY3RQYXRoID0gcHJvamVjdFBhdGg7DQorICAgIH0NCiANCi0gIC8qKg0KLSAgICogQHJldHVybiB0aGUgY1Byb2plY3RQYXRoDQotICAgKi8NCi0gIHB1YmxpYyBTdHJpbmcgZ2V0Y1Byb2plY3RQYXRoKCkgew0KLSAgICByZXR1cm4gdGhpcy5jUHJvamVjdFBhdGg7DQotICB9DQorICAgIC8qKg0KKyAgICAgKiBAcmV0dXJuIExMVk1TdGFydGVyUHJvcGVydGllcw0KKyAgICAgKi8NCisgICAgcHVibGljIFN0cmluZyBnZXRQcm9qZWN0UGF0aCgpIHsNCisgICAgICAgIHJldHVybiB0aGlzLnByb2plY3RQYXRoOw0KKyAgICB9DQogDQotICAvKioNCi0gICAqIEByZXR1cm4gdGhlIGNGaWxlc1BhdGgNCi0gICAqLw0KLSAgcHVibGljIFN0cmluZyBnZXRjRmlsZXNQYXRoKCkgew0KLSAgICByZXR1cm4gdGhpcy5jRmlsZXNQYXRoOw0KLSAgfQ0KKyAgICAvKioNCisgICAgICogQHJldHVybiB0aGUgY0ZpbGVzUGF0aA0KKyAgICAgKi8NCisgICAgcHVibGljIFN0cmluZyBnZXRjRmlsZXNQYXRoKCkgew0KKyAgICAgICAgcmV0dXJuIHRoaXMuY0ZpbGVzUGF0aDsNCisgICAgfQ0KIA0KLSAgLyoqDQotICAgKiBAcmV0dXJuIHRoZSB0cmF2ZXJzZUFzdEZpbGUNCi0gICAqLw0KLSAgcHVibGljIFN0cmluZyBnZXRUcmF2ZXJzZUFzdEZpbGUoKSB7DQotICAgIHJldHVybiB0aGlzLnRyYXZlcnNlQXN0RmlsZTsNCi0gIH0NCisgICAgLyoqDQorICAgICAqIEByZXR1cm4gdGhlIHRyYXZlcnNlQXN0RmlsZQ0KKyAgICAgKi8NCisgICAgcHVibGljIFN0cmluZyBnZXRUcmF2ZXJzZUFzdEZpbGUoKSB7DQorICAgICAgICByZXR1cm4gdGhpcy50cmF2ZXJzZUFzdEZpbGU7DQorICAgIH0NCiANCi0gIC8qKg0KLSAgICogQHJldHVybiB0aGUgb3V0UHV0UGF0aA0KLSAgICovDQotICBwdWJsaWMgU3RyaW5nIGdldE91dFB1dFBhdGgoKSB7DQotICAgIHJldHVybiB0aGlzLm91dFB1dFBhdGg7DQotICB9DQorICAgIC8qKg0KKyAgICAgKiBAcmV0dXJuIHRoZSBvdXRQdXRQYXRoDQorICAgICAqLw0KKyAgICBwdWJsaWMgU3RyaW5nIGdldE91dFB1dFBhdGgoKSB7DQorICAgICAgICByZXR1cm4gdGhpcy5vdXRQdXRQYXRoOw0KKyAgICB9DQogDQotICAvKioNCi0gICAqIEByZXR1cm4gdGhlIG51bWJlck9mVGhyZWFkcw0KLSAgICovDQotICBwdWJsaWMgaW50IGdldE51bWJlck9mVGhyZWFkcygpIHsNCi0gICAgcmV0dXJuIHRoaXMubnVtYmVyT2ZUaHJlYWRzOw0KLSAgfQ0KKyAgICAvKioNCisgICAgICogQHJldHVybiB0aGUgbnVtYmVyT2ZUaHJlYWRzDQorICAgICAqLw0KKyAgICBwdWJsaWMgaW50IGdldE51bWJlck9mVGhyZWFkcygpIHsNCisgICAgICAgIHJldHVybiB0aGlzLm51bWJlck9mVGhyZWFkczsNCisgICAgfQ0KIA0KLSAgLyoqDQotICAgKiBAcmV0dXJuIHRoZSBoRmlsZXNQYXRoDQotICAgKi8NCi0gIHB1YmxpYyBTdHJpbmcgZ2V0aEZpbGVzUGF0aCgpIHsNCi0gICAgcmV0dXJuIHRoaXMuaEZpbGVzUGF0aDsNCi0gIH0NCisgICAgLyoqDQorICAgICAqIEByZXR1cm4gdGhlIGhGaWxlc1BhdGgNCisgICAgICovDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0aEZpbGVzUGF0aCgpIHsNCisgICAgICAgIHJldHVybiB0aGlzLmhGaWxlc1BhdGg7DQorICAgIH0NCiANCi0gIC8qKg0KLSAgICogQHJldHVybiB0aGUgY0ZpbGVzTGlzdA0KLSAgICovDQotICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldGNGaWxlc0xpc3QoKSB7DQotICAgIHJldHVybiB0aGlzLmNGaWxlc0xpc3Q7DQotICB9DQorICAgIC8qKg0KKyAgICAgKiBAcmV0dXJuIHRoZSBjRmlsZXNMaXN0DQorICAgICAqLw0KKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldGNGaWxlc0xpc3QoKSB7DQorICAgICAgICByZXR1cm4gdGhpcy5jRmlsZXNMaXN0Ow0KKyAgICB9DQogDQotICAvKioNCi0gICAqIEByZXR1cm4gdGhlIGhGaWxlc0xpc3QNCi0gICAqLw0KLSAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRoRmlsZXNMaXN0KCkgew0KLSAgICByZXR1cm4gdGhpcy5oRmlsZXNMaXN0Ow0KLSAgfQ0KKyAgICAvKioNCisgICAgICogQHJldHVybiB0aGUgaEZpbGVzTGlzdA0KKyAgICAgKi8NCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRoRmlsZXNMaXN0KCkgew0KKyAgICAgICAgcmV0dXJuIHRoaXMuaEZpbGVzTGlzdDsNCisgICAgfQ0KIA0KLSAgLyoqDQotICAgKiBAcmV0dXJuIHRoZSBoYXNoRGVmaW5lTGlzdA0KLSAgICovDQotICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldEhhc2hEZWZpbmVMaXN0KCkgew0KLSAgICByZXR1cm4gdGhpcy5oYXNoRGVmaW5lTGlzdDsNCi0gIH0NCisgICAgLyoqDQorICAgICAqIEByZXR1cm4gdGhlIGhhc2hEZWZpbmVMaXN0DQorICAgICAqLw0KKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldEhhc2hEZWZpbmVMaXN0KCkgew0KKyAgICAgICAgcmV0dXJuIHRoaXMuaGFzaERlZmluZUxpc3Q7DQorICAgIH0NCiANCi0gIC8qKg0KLSAgICogQHJldHVybiB0aGUgZ2VuRGlyZWN0b3J5DQotICAgKi8NCi0gIHB1YmxpYyBTdHJpbmcgZ2V0R2VuRGlyZWN0b3J5KCkgew0KLSAgICByZXR1cm4gdGhpcy5nZW5EaXJlY3Rvcnk7DQotICB9DQorICAgIC8qKg0KKyAgICAgKiBAcmV0dXJuIHRoZSBnZW5EaXJlY3RvcnkNCisgICAgICovDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0R2VuRGlyZWN0b3J5KCkgew0KKyAgICAgICAgcmV0dXJuIHRoaXMuZ2VuRGlyZWN0b3J5Ow0KKyAgICB9DQogDQorICAgIC8qKg0KKyAgICAgKiBAcGFyYW0gZ2VuRGlyZWN0b3J5IHRoZSBnZW5EaXJlY3RvcnkgdG8gc2V0DQorICAgICAqLw0KKyAgICBwdWJsaWMgdm9pZCBzZXRHZW5EaXJlY3RvcnkoZmluYWwgU3RyaW5nIGdlbkRpcmVjdG9yeSkgew0KKyAgICAgICAgdGhpcy5nZW5EaXJlY3RvcnkgPSBnZW5EaXJlY3Rvcnk7DQorICAgIH0NCiANCi0gIC8qKg0KLSAgICogQHBhcmFtIGdlbkRpcmVjdG9yeSB0aGUgZ2VuRGlyZWN0b3J5IHRvIHNldA0KLSAgICovDQotICBwdWJsaWMgdm9pZCBzZXRHZW5EaXJlY3RvcnkoZmluYWwgU3RyaW5nIGdlbkRpcmVjdG9yeSkgew0KLSAgICB0aGlzLmdlbkRpcmVjdG9yeSA9IGdlbkRpcmVjdG9yeTsNCi0gIH0NCisgICAgLyoqDQorICAgICAqIEByZXR1cm4gdGhlIGxvZ0RpcmVjb3RyeQ0KKyAgICAgKi8NCisgICAgcHVibGljIFN0cmluZyBnZXRMb2dEaXJlY290cnkoKSB7DQorICAgICAgICByZXR1cm4gdGhpcy5sb2dEaXJlY3Rvcnk7DQorICAgIH0NCiANCi0NCi0gIC8qKg0KLSAgICogQHJldHVybiB0aGUgbG9nRGlyZWNvdHJ5DQotICAgKi8NCi0gIHB1YmxpYyBTdHJpbmcgZ2V0TG9nRGlyZWNvdHJ5KCkgew0KLSAgICByZXR1cm4gdGhpcy5sb2dEaXJlY3Rvcnk7DQotICB9DQotDQotDQotICAvKioNCi0gICAqIEBwYXJhbSBsb2dEaXJlY290cnkgdGhlIGxvZ0RpcmVjb3RyeSB0byBzZXQNCi0gICAqLw0KLSAgcHVibGljIHZvaWQgc2V0TG9nRGlyZWNvdHJ5KGZpbmFsIFN0cmluZyBsb2dEaXJlY290cnkpIHsNCi0gICAgdGhpcy5sb2dEaXJlY3RvcnkgPSBsb2dEaXJlY290cnk7DQotICB9DQorICAgIC8qKg0KKyAgICAgKiBAcGFyYW0gbG9nRGlyZWNvdHJ5IHRoZSBsb2dEaXJlY290cnkgdG8gc2V0DQorICAgICAqLw0KKyAgICBwdWJsaWMgdm9pZCBzZXRMb2dEaXJlY290cnkoZmluYWwgU3RyaW5nIGxvZ0RpcmVjb3RyeSkgew0KKyAgICAgICAgdGhpcy5sb2dEaXJlY3RvcnkgPSBsb2dEaXJlY290cnk7DQorICAgIH0NCiB9DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zdGFydGVyL1Byb2Nlc3NFeGVjdXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS9zdGFydGVyL1Byb2Nlc3NFeGVjdXRvci5qYXZhCmluZGV4IGZiNWQ0ZTkuLmRkZDU2MzEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vc3RhcnRlci9Qcm9jZXNzRXhlY3V0b3IuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL3N0YXJ0ZXIvUHJvY2Vzc0V4ZWN1dG9yLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vdXRpbC9MTFZNQ29uc3RhbnRzLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL3V0aWwvTExWTUNvbnN0YW50cy5qYXZhCmluZGV4IGU5Y2EzNWYuLjAzOTY5MzEgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vdXRpbC9MTFZNQ29uc3RhbnRzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS91dGlsL0xMVk1Db25zdGFudHMuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS91dGlsL01hbmlwdWxhdGVBbWFsdGhlYS5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvbGx2bS91dGlsL01hbmlwdWxhdGVBbWFsdGhlYS5qYXZhCmluZGV4IDIyOTkzY2UuLjkyNzljMGQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL2xsdm0vdXRpbC9NYW5pcHVsYXRlQW1hbHRoZWEuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9sbHZtL3V0aWwvTWFuaXB1bGF0ZUFtYWx0aGVhLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkNjQzNy4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vdGFyZ2V0Lw0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDNjMjZkOWYuLmVlODQ5MTIgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNjYWlybW9kZWxlbnJpY2hlci9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw3ICsyLDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiBTY2Fpcm1vZGVsZW5yaWNoZXIKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMC45LjgucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZwogUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKICBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmlyLApAQCAtMTEsMyArMTEsNCBAQAogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIKK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvYmluLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyL2Jpbi8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjFkYjJlLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvYmluLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vb3JnLwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNjYWlybW9kZWxlbnJpY2hlci9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNjYWlybW9kZWxlbnJpY2hlci9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjN2U3NjViLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCINCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+DQotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICA8cGFyZW50Pg0KLSAgICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L2FydGlmYWN0SWQ+DQotICAgIDx2ZXJzaW9uPjEuMC4wLnF1YWxpZmllcjwvdmVyc2lvbj4NCi0gICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9yZWxhdGl2ZVBhdGg+DQotICA8L3BhcmVudD4NCi0gIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NjYWlybW9kZWxlbnJpY2hlci9TQ0FJUk1vZGVsRW5yaWNobWVudFV0aWxzLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2NhaXJtb2RlbGVucmljaGVyL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NjYWlybW9kZWxlbnJpY2hlci9TQ0FJUk1vZGVsRW5yaWNobWVudFV0aWxzLmphdmEKaW5kZXggNWU0MzJlNy4uNmNlYmJmMiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNjYWlybW9kZWxlbnJpY2hlci9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zY2Fpcm1vZGVsZW5yaWNoZXIvU0NBSVJNb2RlbEVucmljaG1lbnRVdGlscy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvc2NhaXJtb2RlbGVucmljaGVyL1NDQUlSTW9kZWxFbnJpY2htZW50VXRpbHMuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDY0MzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS90YXJnZXQvDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBmNjRlMmI4Li5kYmUzZDI4IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMiw4ICsyLDkgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCiBCdW5kbGUtTmFtZTogU2VyaWFsaXphdGlvbg0KIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbg0KLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXINCitCdW5kbGUtVmVyc2lvbjogMC45LjgucXVhbGlmaWVyDQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcNCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOA0KIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5lbWYuZWNvcmUueG1pO2J1bmRsZS12ZXJzaW9uPSIyLjEwLjIiDQogRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbg0KK0F1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vYmluLy5naXRpZ25vcmUgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9iaW4vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZGIyZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9iaW4vLmdpdGlnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS9vcmcvCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ4MzViNi4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdCB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy94c2QvbWF2ZW4tNC4wLjAueHNkIiB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIg0KLSAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4NCi0gIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gIDxwYXJlbnQ+DQotICAgIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvYXJ0aWZhY3RJZD4NCi0gICAgPHZlcnNpb24+MS4wLjAucXVhbGlmaWVyPC92ZXJzaW9uPg0KLSAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L3JlbGF0aXZlUGF0aD4NCi0gIDwvcGFyZW50Pg0KLSAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLQk8YnVpbGQ+DQotCQk8c291cmNlRGlyZWN0b3J5PnNyYzwvc291cmNlRGlyZWN0b3J5Pg0KLQkJPHJlc291cmNlcz4NCi0JCQk8cmVzb3VyY2U+DQotCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCTxleGNsdWRlcz4NCi0JCQkJCTxleGNsdWRlPioqLyouamF2YTwvZXhjbHVkZT4NCi0JCQkJPC9leGNsdWRlcz4NCi0JCQk8L3Jlc291cmNlPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT5zcmM8L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQk8L3Jlc291cmNlcz4NCi0JCTxwbHVnaW5zPg0KLQkJCTxwbHVnaW4+DQotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNsZWFuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi40LjE8L3ZlcnNpb24+DQotCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJPGZpbGVzZXRzPg0KLQkJCQkJCTxmaWxlc2V0Pg0KLQkJCQkJCQk8ZGlyZWN0b3J5Pnh0ZW5kLWdlbjwvZGlyZWN0b3J5Pg0KLQkJCQkJCQk8aW5jbHVkZXM+DQotCQkJCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4NCi0JCQkJCQkJPC9pbmNsdWRlcz4NCi0JCQkJCQk8L2ZpbGVzZXQ+DQotCQkJCQk8L2ZpbGVzZXRzPg0KLQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotCQkJCTx2ZXJzaW9uPjEuNzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxpZD5hZGQtc291cmNlPC9pZD4NCi0JCQkJCQk8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotCQkJCQkJPGdvYWxzPg0KLQkJCQkJCQk8Z29hbD5hZGQtc291cmNlPC9nb2FsPg0KLQkJCQkJCTwvZ29hbHM+DQotCQkJCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQkJCTxzb3VyY2VzPg0KLQkJCQkJCQkJPHNvdXJjZT54dGVuZC1nZW48L3NvdXJjZT4NCi0JCQkJCQkJPC9zb3VyY2VzPg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UueHRlbmQ8L2dyb3VwSWQ+DQotCQkJCTxhcnRpZmFjdElkPnh0ZW5kLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+Mi43LjM8L3ZlcnNpb24+DQotCQkJCTxleGVjdXRpb25zPg0KLQkJCQkJPGV4ZWN1dGlvbj4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmNvbXBpbGU8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPG91dHB1dERpcmVjdG9yeT54dGVuZC1nZW48L291dHB1dERpcmVjdG9yeT4NCi0JCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQotCQkJCQk8L2V4ZWN1dGlvbj4NCi0JCQkJPC9leGVjdXRpb25zPg0KLQkJCTwvcGx1Z2luPg0KLQkJPC9wbHVnaW5zPg0KLQk8L2J1aWxkPg0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zZXJpYWxpemF0aW9uL1NDQVJlc291cmNlLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zZXJpYWxpemF0aW9uL1NDQVJlc291cmNlLmphdmEKaW5kZXggOGY1NmRlMS4uYzA4YTZhZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvc2VyaWFsaXphdGlvbi9TQ0FSZXNvdXJjZS5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NlcmlhbGl6YXRpb24vU0NBUmVzb3VyY2UuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvc2VyaWFsaXphdGlvbi9TQ0FSZXNvdXJjZUZhY3RvcnkuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NlcmlhbGl6YXRpb24vU0NBUmVzb3VyY2VGYWN0b3J5LmphdmEKaW5kZXggMDlkNzRhNC4uOThlNmM4NCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvc2VyaWFsaXphdGlvbi9TQ0FSZXNvdXJjZUZhY3RvcnkuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zZXJpYWxpemF0aW9uL1NDQVJlc291cmNlRmFjdG9yeS5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zZXJpYWxpemF0aW9uL1NDQVhNTEhhbmRsZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NlcmlhbGl6YXRpb24vU0NBWE1MSGFuZGxlci5qYXZhCmluZGV4IGVkOTliMmUuLmUzNDliOTQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NlcmlhbGl6YXRpb24vU0NBWE1MSGFuZGxlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NlcmlhbGl6YXRpb24vU0NBWE1MSGFuZGxlci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zZXJpYWxpemF0aW9uL1NDQVhNTExvYWRJbXBsLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zZXJpYWxpemF0aW9uL1NDQVhNTExvYWRJbXBsLmphdmEKaW5kZXggYWIzNjRiYi4uNDRiYmFiZCAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvc2VyaWFsaXphdGlvbi9TQ0FYTUxMb2FkSW1wbC5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NlcmlhbGl6YXRpb24vU0NBWE1MTG9hZEltcGwuamF2YQpAQCAtMSw2ICsxLDYgQEAKIC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQogICogDQogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KICAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvc2VyaWFsaXphdGlvbi9TQ0FYTUxTYXZlSW1wbC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnNlcmlhbGl6YXRpb24vc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvc2VyaWFsaXphdGlvbi9TQ0FYTUxTYXZlSW1wbC5qYXZhCmluZGV4IGE0YTdmZjMuLjcwMmFlNjcgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zZXJpYWxpemF0aW9uL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3NlcmlhbGl6YXRpb24vU0NBWE1MU2F2ZUltcGwuamF2YQorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbi9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS9zZXJpYWxpemF0aW9uL1NDQVhNTFNhdmVJbXBsLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS8uZ2l0aWdub3JlIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDY0MzcuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vdGFyZ2V0Lw0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhODE1ZjljLi40ZDA1MTg3IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0xLDggKzEsOCBAQAogTWFuaWZlc3QtVmVyc2lvbjogMS4wCiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogVWkKK0J1bmRsZS1OYW1lOiBTQ0EiQU1BTFRIRUEgVWkKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWk7c2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogMC45LjgucXVhbGlmaWVyCiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLkFjdGl2YXRvcgogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcKIFJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKQEAgLTE4LDggKzE4LDEwIEBACiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscywKICBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwsCiAgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aSwKLSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmc7YnVuZGxlLXZlcnNpb249IjEuMC4wIgorIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZywKKyBvcmcuZWNsaXBzZS5jb3JlLmpvYnMsCisgb3JnLmVjbGlwc2UuZXF1aW5veC5wcmVmZXJlbmNlcwogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjgKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS5oYW5kbGVycywKLSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLnV0aWwKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLmhhbmRsZXJzCitBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9iaW4vLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9iaW4vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZGIyZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvYmluLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vb3JnLwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3BsdWdpbi54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvcGx1Z2luLnhtbAppbmRleCBkOWUwNmVjLi44YTZhNGNjIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvcGx1Z2luLnhtbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvcGx1Z2luLnhtbApAQCAtMzAsOSArMzAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgPGluc3RhbmNlb2YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3QiPg0KICAgICAgICAgICAgICAgICAgICAgIDwvaW5zdGFuY2VvZj4NCi0gICAgICAgICAgICAgICAgICAgICA8aW5zdGFuY2VvZg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZSI+DQotICAgICAgICAgICAgICAgICAgICAgPC9pbnN0YW5jZW9mPg0KICAgICAgICAgICAgICAgICAgICAgIDwvb3I+DQogICAgICAgICAgICAgICAgICAgPC9pdGVyYXRlPg0KICAgICAgICAgICAgICAgIDwvb3I+DQpAQCAtNjYsMjIgKzYzLDUgQEAKICAgICAgICAgICAgICAgIDwvd2l0aD4NCiAgICAgICAgICA8L2FjdGl2ZVdoZW4+DQogICAgICAgPC9oYW5kbGVyPg0KLSAgICAgICA8L2V4dGVuc2lvbj4NCi0gIDxleHRlbnNpb24NCi0gICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS51aS5wcmVmZXJlbmNlUGFnZXMiPg0KLSAgICAgPHBhZ2UNCi0gICAgICAgICAgIGNsYXNzPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLnByZWZlcmVuY2VzLlNDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZSINCi0gICAgICAgICAgIGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLnByZWZlcmVuY2VQYWdlIg0KLSAgICAgICAgICAgbmFtZT0iU0NBMkFtYWx0aGVhIg0KLSAgICAgICAgICAgY2F0ZWdvcnk9IlNDQSBUb29scyI+DQotICAgICA8L3BhZ2U+DQotICA8L2V4dGVuc2lvbj4NCi0gIDxleHRlbnNpb24NCi0gICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLmV4cG9ydE9wdGlvbnMiPg0KLSAgICAgPGV4cG9ydGVyDQotICAgICAgICAgICBuYW1lPSJTQ0FUb0FtYWx0aGVhIg0KLSAgICAgICAgICAgcHJlZmVyZW5jZXM9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkucHJlZmVyZW5jZXMuU0NBVG9BbWFsdGhlYUV4cG9ydFByZWZlcmVuY2VMaXN0Ig0KLSAgICAgICAgICAgdG9vbD0iU0NBMkFtYWx0aGVhIj4NCi0gICAgIDwvZXhwb3J0ZXI+DQotICA8L2V4dGVuc2lvbj4KKyAgICAgICA8L2V4dGVuc2lvbj4KIDwvcGx1Z2luPg0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9wb20ueG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyMjQ2Y2EuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTxwcm9qZWN0IHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiIHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiDQotICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiPg0KLSAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgPHBhcmVudD4NCi0gICAgPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9hcnRpZmFjdElkPg0KLSAgICA8dmVyc2lvbj4xLjAuMC5xdWFsaWZpZXI8L3ZlcnNpb24+DQotICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZDwvcmVsYXRpdmVQYXRoPg0KLSAgPC9wYXJlbnQ+DQotICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpPC9hcnRpZmFjdElkPg0KLSAgPHBhY2thZ2luZz5lY2xpcHNlLXBsdWdpbjwvcGFja2FnaW5nPg0KLQ0KLSAgDQotCTxidWlsZD4NCi0JCTxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+DQotCQk8cmVzb3VyY2VzPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQkJPHJlc291cmNlPg0KLQkJCQk8ZGlyZWN0b3J5PnNyYzwvZGlyZWN0b3J5Pg0KLQkJCQk8ZXhjbHVkZXM+DQotCQkJCQk8ZXhjbHVkZT4qKi8qLmphdmE8L2V4Y2x1ZGU+DQotCQkJCTwvZXhjbHVkZXM+DQotCQkJPC9yZXNvdXJjZT4NCi0JCTwvcmVzb3VyY2VzPg0KLQkJPHBsdWdpbnM+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGFydGlmYWN0SWQ+bWF2ZW4tY2xlYW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4yLjQuMTwvdmVyc2lvbj4NCi0JCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQk8ZmlsZXNldHM+DQotCQkJCQkJPGZpbGVzZXQ+DQotCQkJCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCQkJCTxpbmNsdWRlcz4NCi0JCQkJCQkJCTxpbmNsdWRlPioqPC9pbmNsdWRlPg0KLQkJCQkJCQk8L2luY2x1ZGVzPg0KLQkJCQkJCTwvZmlsZXNldD4NCi0JCQkJCTwvZmlsZXNldHM+DQotCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQk8L3BsdWdpbj4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+YnVpbGQtaGVscGVyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+MS43PC92ZXJzaW9uPg0KLQkJCQk8ZXhlY3V0aW9ucz4NCi0JCQkJCTxleGVjdXRpb24+DQotCQkJCQkJPGlkPmFkZC1zb3VyY2U8L2lkPg0KLQkJCQkJCTxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmFkZC1zb3VyY2U8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPHNvdXJjZXM+DQotCQkJCQkJCQk8c291cmNlPnh0ZW5kLWdlbjwvc291cmNlPg0KLQkJCQkJCQk8L3NvdXJjZXM+DQotCQkJCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQkJPC9leGVjdXRpb24+DQotCQkJCTwvZXhlY3V0aW9ucz4NCi0JCQk8L3BsdWdpbj4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS54dGVuZDwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+eHRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4yLjcuMzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxnb2Fscz4NCi0JCQkJCQkJPGdvYWw+Y29tcGlsZTwvZ29hbD4NCi0JCQkJCQk8L2dvYWxzPg0KLQkJCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJCQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5Pg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQk8L3BsdWdpbnM+DQotCTwvYnVpbGQ+DQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS9BY3RpdmF0b3IuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS9BY3RpdmF0b3IuamF2YQppbmRleCBmYTg0YjI3Li5jZTQ4NjFkIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvQWN0aXZhdG9yLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL0FjdGl2YXRvci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvaGFuZGxlcnMvU0NBVG9BbWFsdGhlYUhhbmRsZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS9oYW5kbGVycy9TQ0FUb0FtYWx0aGVhSGFuZGxlci5qYXZhCmluZGV4IGQyZGRjMTUuLjFhNGQ5NGQgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS9oYW5kbGVycy9TQ0FUb0FtYWx0aGVhSGFuZGxlci5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS9oYW5kbGVycy9TQ0FUb0FtYWx0aGVhSGFuZGxlci5qYXZhCkBAIC0xLDQwOCArMSw5NSBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQotICogDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKg0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KLSAqIA0KKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wDQorICoNCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KLSAqIA0KKyAqDQogICogQ29udHJpYnV0b3JzOg0KICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqLw0KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS5oYW5kbGVyczsNCiANCi1pbXBvcnQgamF2YS51dGlsLlRpbWVyOw0KLWltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuU0NBVG9vbHNVSVV0aWw7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0LmJ1aWxkZXIuT3V0cHV0RGV0YWlsc1dpZGdldEJ1aWxkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0LmJ1aWxkZXIuU2NoZWR1bGluZ09zRGF0YVdpZGdldEJ1aWxkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0LmJ1aWxkZXIuU3dNb2RlbFdpZGdldEJ1aWxkZXI7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2l6YXJkLkdlbmVyYXRlQW1hbHRoZWFXaXphcmQ7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2l6YXJkLkdlbmVyYXRlQW1hbHRoZWFXaXphcmRQYWdlOw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwuQXBwNG1jVG9vbENvbnN0YW50czsNCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS53aXphcmQuU0NBMkFtYWx0aGVhRXhlY3V0b3I7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkud2l6YXJkLlNDQTJBbWFsdGhlYVdpZGdldEJ1aWxkZXI7DQogDQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy5tYW5hZ2VyLkxvZ21hbmFnZXI7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bS5oZWFkbGVzcy5HZW5lcmF0ZUFtYWx0aGVhTW9kZWxGcm9tTExWTTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS5BY3RpdmF0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZzsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5jb25zdGFudHMuU0NBMkFtYWx0aGVhQ29uc3RhbnRzOw0KIGltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmNvbW1hbmRzLkFic3RyYWN0SGFuZGxlcjsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FdmVudDsNCiBpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5jb21tYW5kcy5FeGVjdXRpb25FeGNlcHRpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuaW50ZXJuYWwucmVzb3VyY2VzLlJlc291cmNlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdWJNb25pdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuTWVzc2FnZURpYWxvZzsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVHJlZVNlbGVjdGlvbjsNCitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQoraW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOw0KKw0KK2ltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aXphcmQuV2l6YXJkRGlhbG9nOw0KKw0KIGltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaGFuZGxlcnMuSGFuZGxlclV0aWw7DQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOw0KIA0KIA0KIC8qKg0KICAqLw0KLUBTdXBwcmVzc1dhcm5pbmdzKCJyZXN0cmljdGlvbiIpDQogcHVibGljIGNsYXNzIFNDQVRvQW1hbHRoZWFIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIHsNCi0NCi0gIHByaXZhdGUgU3RyaW5nIGNGaWxlUGF0aCA9ICIiOw0KLSAgcHJpdmF0ZSBTdHJpbmcgdHJhdmVyc2VBU1RQYXRoID0gIiI7DQotICBwcml2YXRlIFN0cmluZyBvdXRQdXRQYXRoID0gIiI7DQotICBwcml2YXRlIFN0cmluZyB0YXNrTGlzdEZpbGUgPSAiIjsNCi0gIHByaXZhdGUgU3RyaW5nIGhlYWRlclRleHRGaWxlUGF0aCA9ICIiOw0KLSAgcHJpdmF0ZSBTdHJpbmcgYnVpbGRDbWRMb2dGaWxlUGF0aCA9ICIiOw0KLSAgcHJpdmF0ZSBTdHJpbmcgbG9ja2Z1bmN0aW9uRmlsZSA9ICIiOw0KLSAgcHJpdmF0ZSBib29sZWFuIGlzU3RydWN0TWVtYmVyRW5hYmxlZCA9IGZhbHNlOw0KLSAgcHJpdmF0ZSB2b2xhdGlsZSBCb29sZWFuIGlzR2VuZXJhdGlvbkRvbmUgPSBCb29sZWFuLkZBTFNFOw0KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbXV0ZXggPSBuZXcgT2JqZWN0KCk7DQotICBwcml2YXRlIEpvYiBjdXJyZW50Sm9iID0gbnVsbDsNCi0gIHByaXZhdGUgYm9vbGVhbiBjb25maXJtYXRpb24gPSB0cnVlOw0KLSAgcHJpdmF0ZSBTaGVsbCBjdXJyZW50U2hlbGw7DQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgaW5mb01lc3NhZ2U7DQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgY29uZmlybWF0aW9uTWVzc2FnZTsNCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyB0aXRsZTsNCi0gIHByaXZhdGUgc3RhdGljIGludCB0aW1lckRlbGF5Ow0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IHRpbWVyUGVyaW9kOw0KLQ0KLSAgLyoqDQotICAgKiBTZXRzIHRoZSB0aW1lciBkZWxheSBmb3IgdGhlIHRpbWVyDQotICAgKg0KLSAgICogQHBhcmFtIHRpbWVyRGVsYXkgdGltZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUaW1lckRlbGF5KGZpbmFsIGludCB0aW1lckRlbGF5KSB7DQotICAgIFNDQVRvQW1hbHRoZWFIYW5kbGVyLnRpbWVyRGVsYXkgPSB0aW1lckRlbGF5Ow0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBSZXR1cm5zIHRoZSB0aW1lciBkZWxheSB0aGF0IHdhcyBzZXQuDQotICAgKg0KLSAgICogQHJldHVybiB0aW1lciBkZWxheS4NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2V0VGltZXJEZWxheSgpIHsNCi0gICAgcmV0dXJuIFNDQVRvQW1hbHRoZWFIYW5kbGVyLnRpbWVyRGVsYXk7DQotICB9DQotDQotICAvKioNCi0gICAqIFNldHMgdGhlIHRpbWUgcGVyaW9kIGFmdGVyIHdoaWNoIHRoZSB0aW1lciB0YXNrIHdvdWxkIGJlIGV4ZWN1dGVkLg0KLSAgICoNCi0gICAqIEBwYXJhbSB0aW1lclBlcmlvZCB0aW1lIHBlcmlvZCBpbiBtaWxsaXNlb25kcy4NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFRpbWVyUGVyaW9kKGZpbmFsIGludCB0aW1lclBlcmlvZCkgew0KLSAgICBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aW1lclBlcmlvZCA9IHRpbWVyUGVyaW9kOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBSZXR1cm5zIHRoZSB0aW1lIHBlcmlvZCB0aGF0IHdhcyBzZXQuDQotICAgKg0KLSAgICogQHJldHVybiB0aW1lciBwZXJpb2QuDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFRpbWVyUGVyaW9kKCkgew0KLSAgICByZXR1cm4gU0NBVG9BbWFsdGhlYUhhbmRsZXIudGltZXJQZXJpb2Q7DQotICB9DQotDQotDQotICBAT3ZlcnJpZGUNCi0gIHB1YmxpYyBPYmplY3QgZXhlY3V0ZShmaW5hbCBFeGVjdXRpb25FdmVudCBldmVudCkgdGhyb3dzIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7DQotDQotICAgIElQcmVmZXJlbmNlU3RvcmUgcHJlZmVyZW5jZVN0b3JlID0gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOw0KLSAgICB0aGlzLmN1cnJlbnRTaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsNCi0gICAgaWYgKGV2ZW50ICE9IG51bGwpIHsNCi0gICAgICBJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IEhhbmRsZXJVdGlsLmdldEN1cnJlbnRTZWxlY3Rpb24oZXZlbnQpOw0KLSAgICAgIGlmICgoKFRyZWVTZWxlY3Rpb24pIHNlbGVjdGlvbikuZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBSZXNvdXJjZSkgew0KLSAgICAgICAgUmVzb3VyY2UgcmVzb3VyY2UgPSAoUmVzb3VyY2UpICgoVHJlZVNlbGVjdGlvbikgc2VsZWN0aW9uKS5nZXRGaXJzdEVsZW1lbnQoKTsNCi0gICAgICAgIHRoaXMuY0ZpbGVQYXRoID0gcmVzb3VyY2UuZ2V0TG9jYXRpb24oKS50b1N0cmluZygpOw0KLSAgICAgICAgdGhpcy5pc1N0cnVjdE1lbWJlckVuYWJsZWQgPSBwcmVmZXJlbmNlU3RvcmUuZ2V0Qm9vbGVhbihTQ0EyQW1hbHRoZWFDb25zdGFudHMuRU5BQkxFX1NUUlVDVF9NRU1CRVIpOw0KLSAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICB0aGlzLnRyYXZlcnNlQVNUUGF0aCA9IHByZWZlcmVuY2VTdG9yZS5nZXRTdHJpbmcoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLkFTVF9QQVRIKTsNCi0gICAgdGhpcy50YXNrTGlzdEZpbGUgPSBwcmVmZXJlbmNlU3RvcmUuZ2V0U3RyaW5nKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5UQVNLX0lORk8pOw0KLSAgICB0aGlzLmhlYWRlclRleHRGaWxlUGF0aCA9IHByZWZlcmVuY2VTdG9yZS5nZXRTdHJpbmcoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLkhESVJfTElTVCk7DQotICAgIHRoaXMuYnVpbGRDbWRMb2dGaWxlUGF0aCA9IHByZWZlcmVuY2VTdG9yZS5nZXRTdHJpbmcoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLkJMT0cpOw0KLSAgICB0aGlzLmxvY2tmdW5jdGlvbkZpbGUgPSBwcmVmZXJlbmNlU3RvcmUuZ2V0U3RyaW5nKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5MT0NLX0lORk8pOw0KLSAgICBpZiAocHJlZmVyZW5jZVN0b3JlLmdldEJvb2xlYW4oU0NBMkFtYWx0aGVhQ29uc3RhbnRzLkVOQUJMRV9PUFRJT05BTF9GSUVMRFMpKSB7DQotICAgICAgdGhpcy5vdXRQdXRQYXRoID0gcHJlZmVyZW5jZVN0b3JlLmdldFN0cmluZyhTQ0EyQW1hbHRoZWFDb25zdGFudHMuT1VUUFVUX1BBVEgpOw0KLSAgICB9DQotICAgIGVsc2Ugew0KLSAgICAgIHRoaXMub3V0UHV0UGF0aCA9IHByZWZlcmVuY2VTdG9yZS5nZXREZWZhdWx0U3RyaW5nKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5PVVRQVVRfUEFUSCk7DQotDQotICAgIH0NCi0NCi0gICAgaWYodGhpcy50cmF2ZXJzZUFTVFBhdGguaXNFbXB0eSgpKXsNCi0gICAgCU1lc3NhZ2VEaWFsb2cub3BlbkVycm9yKHRoaXMuY3VycmVudFNoZWxsLCAiRXJyb3IgQW1hbHRoZWEgbW9kZWwgZ2VuZXJhdGlvbiIsICJQYXRoIHRvIExMVk0gZXhlY3V0YWJsZSBpcyBub3QgY29uZmlndXJlZCBpbiBzY2EyQW1hbHRoZWEgcHJlZmVyZW5jZXMiKTsNCi0gICAgfQ0KLSAgICBlbHNlew0KLSAgICBpZiAoVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZy5nZXRDdXJyZW50UnVubmluZ1Byb2Nlc3MoKSA9PSBudWxsKSB7DQotICAgICAgY3JlYXRlQW5kRXhlY3V0ZUpvYkZvck1vZGVsR2VuZXJhdGlvbigpOw0KLSAgICB9DQotICAgIGVsc2Ugew0KLSAgICAgIFN0cmluZyBpbmZvcm1hdGlvbiA9ICJUaGUgZ2VuZXJhdGlvbiBvZiAyIG1vZGVscyBhdCB0aGUgc2FtZSB0aW1lIGlzIG5vdCBhbGxvd2VkIjsNCi0gICAgICB0aGlzLmN1cnJlbnRTaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsNCi0gICAgICBNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbih0aGlzLmN1cnJlbnRTaGVsbCwgIk9wZXJhdGlvbiBub3QgYWxsb3dlZCIsIGluZm9ybWF0aW9uKTsNCi0gICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nKGluZm9ybWF0aW9uKTsNCi0gICAgfQ0KLSAgICB9DQotDQotICAgIHJldHVybiBudWxsOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKg0KLSAgICovDQotICBwcml2YXRlIHZvaWQgY3JlYXRlQW5kRXhlY3V0ZUpvYkZvck1vZGVsR2VuZXJhdGlvbigpIHsNCi0gICAgSm9iIGpvYiA9IG5ldyBKb2IoIkFNQUxUSEVBIG1vZGVsIGdlbmVyYXRpb24iKSB7DQotDQotICAgICAgQE92ZXJyaWRlDQotICAgICAgcHVibGljIElTdGF0dXMgcnVuKGZpbmFsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgew0KLSAgICAgICAgZmluYWwgU3ViTW9uaXRvciBzdWJNb25pdG9yID0gU3ViTW9uaXRvci5jb252ZXJ0KG1vbml0b3IsIDYwMCk7DQotICAgICAgICBUaHJlYWQgcHJvZ3Jlc3NNb25pdG9yT2JzZXJ2ZXJUaHJlYWQgPSBudWxsOw0KLSAgICAgICAgYm9vbGVhbiBpc1BvcHVwVG9CZURpc3BsYXllZCA9IGZhbHNlOw0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgcHJvZ3Jlc3NNb25pdG9yT2JzZXJ2ZXJUaHJlYWQgPSBjcmVhdGVJbmZpbml0ZVByb2dyZXNzTW9uaXRvcihzdWJNb25pdG9yKTsNCi0gICAgICAgICAgcHJvZ3Jlc3NNb25pdG9yT2JzZXJ2ZXJUaHJlYWQuc3RhcnQoKTsNCi0gICAgICAgICAgR2VuZXJhdGVBbWFsdGhlYU1vZGVsRnJvbUxMVk0gZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRlQW1hbHRoZWFNb2RlbEZyb21MTFZNKA0KLSAgICAgICAgICAgICAgU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5jRmlsZVBhdGgsIFNDQVRvQW1hbHRoZWFIYW5kbGVyLnRoaXMub3V0UHV0UGF0aCwNCi0gICAgICAgICAgICAgIFNDQVRvQW1hbHRoZWFIYW5kbGVyLnRoaXMudHJhdmVyc2VBU1RQYXRoLCBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLnRhc2tMaXN0RmlsZSwNCi0gICAgICAgICAgICAgIFNDQVRvQW1hbHRoZWFIYW5kbGVyLnRoaXMuaGVhZGVyVGV4dEZpbGVQYXRoLCBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLmJ1aWxkQ21kTG9nRmlsZVBhdGgsDQotICAgICAgICAgICAgICBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLmxvY2tmdW5jdGlvbkZpbGUsDQotICAgICAgICAgICAgICBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLmlzU3RydWN0TWVtYmVyRW5hYmxlZCk7DQotICAgICAgICAgIHNldEluZm9NZXNzYWdlKCJUaGUgdGltZSByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGUgQW1hbHRoZWEgbW9kZWwgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgUFZFUi4iKTsNCi0gICAgICAgICAgc2V0VGl0bGUoIkluZm9ybWF0aW9uLUFtYWx0aGVhIE1vZGVsIEdlbmVyYXRpb24iKTsNCi0gICAgICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IEluZm9Qb3BVcCgpKTsNCi0gICAgICAgICAgc3RhcnRUaW1lcigpOw0KLSAgICAgICAgICBpbnQgcmV0dXJuY29kZSA9IGdlbmVyYXRvci5ydW4oKTsNCi0gICAgICAgICAgc3luY2hyb25pemVkIChTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLm11dGV4KSB7DQotICAgICAgICAgICAgU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5pc0dlbmVyYXRpb25Eb25lID0gdHJ1ZTsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICAvLyBjaGVjayB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHByb2Nlc3MgYW5kIHNob3cgYSBpbmZvcm1hdGlvbiBwb3B1cA0KLSAgICAgICAgICBpZiAoKHJldHVybmNvZGUgIT0gMCkgfHwgKFV0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuZ2V0Q3VycmVudFJ1bm5pbmdQcm9jZXNzKCkuZXhpdFZhbHVlKCkgIT0gMCkpIHsNCi0gICAgICAgICAgICBpZiAoU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5jb25maXJtYXRpb24pIHsNCi0gICAgICAgICAgICAgIHNldEluZm9NZXNzYWdlKCJUaGVyZSB3YXMgc29tZSBlcnJvciB3aGlsZSBwYXJzaW5nIGMgZmlsZXMgb3Igd2hlbiBnZW5lcmF0aW5nIHRoZSBBTUFMVEhFQSBtb2RlbC4iKTsNCi0gICAgICAgICAgICAgIHNldFRpdGxlKCJFcnJvciIpOw0KLSAgICAgICAgICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IEluZm9Qb3BVcCgpKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgZWxzZSB7DQotICAgICAgICAgICAgICBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLmNvbmZpcm1hdGlvbiA9IHRydWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIFV0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuc2V0Q3VycmVudFJ1bm5pbmdQcm9jZXNzKG51bGwpOw0KLSAgICAgICAgICB9DQotICAgICAgICAgIGVsc2Ugew0KLSAgICAgICAgICAgIGlzUG9wdXBUb0JlRGlzcGxheWVkID0gdHJ1ZTsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2dFeGNlcHRpb24odGhpcy5nZXRDbGFzcygpLCBlLCBBY3RpdmF0b3IuUExVR0lOX0lEKTsNCi0NCi0gICAgICAgICAgaWYgKHByb2dyZXNzTW9uaXRvck9ic2VydmVyVGhyZWFkICE9IG51bGwpIHsNCi0gICAgICAgICAgICB3YWl0Rm9yVGhyZWFkKHByb2dyZXNzTW9uaXRvck9ic2VydmVyVGhyZWFkKTsNCi0gICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICBzdWJNb25pdG9yLmRvbmUoKTsNCi0gICAgICAgICAgcmV0dXJuIFN0YXR1cy5DQU5DRUxfU1RBVFVTOw0KLSAgICAgICAgfQ0KLSAgICAgICAgd2FpdEZvclRocmVhZChwcm9ncmVzc01vbml0b3JPYnNlcnZlclRocmVhZCk7DQotICAgICAgICBzdWJNb25pdG9yLmRvbmUoKTsNCi0gICAgICAgIGlmIChpc1BvcHVwVG9CZURpc3BsYXllZCkgew0KLSAgICAgICAgICBzZXRJbmZvTWVzc2FnZSgiQW1hdGhlYSBtb2RlbCBnZW5lcmF0aW9uIGNvbXBsZXRlZCIpOw0KLSAgICAgICAgICBzZXRUaXRsZSgiQW1hdGhlYSBtb2RlbCBnZW5lcmF0ZWQiKTsNCi0gICAgICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IEluZm9Qb3BVcCgpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIEFjdGl2YXRvci5QTFVHSU5fSUQsICJBTUFMVEhFQSBtb2RlbCBnZW5lcmF0aW9uIGNvbXBsZXRlZCIpOw0KLSAgICAgIH0NCi0NCi0NCi0gICAgICAvKioNCi0gICAgICAgKiBAcGFyYW0gdA0KLSAgICAgICAqLw0KLSAgICAgIHByaXZhdGUgdm9pZCB3YWl0Rm9yVGhyZWFkKGZpbmFsIFRocmVhZCB0KSB7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICBpZiAodCAhPSBudWxsKSB7DQotICAgICAgICAgICAgdC5qb2luKCk7DQotICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2coZS5nZXRNZXNzYWdlKCkpOw0KLSAgICAgICAgfQ0KLSAgICAgIH0NCi0gICAgfTsNCi0gICAgdGhpcy5jdXJyZW50Sm9iID0gam9iOw0KLSAgICBqb2Iuc2NoZWR1bGUoKTsNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogQHBhcmFtIHN1Yk1vbml0b3INCi0gICAqLw0KLSAgcHJpdmF0ZSBUaHJlYWQgY3JlYXRlSW5maW5pdGVQcm9ncmVzc01vbml0b3IoZmluYWwgU3ViTW9uaXRvciBzdWJNb25pdG9yKSB7DQotICAgIHJldHVybiBuZXcgSW5maW5pdGVQcm9ncmVzc01vbml0b3JPYnNlcnZlcihzdWJNb25pdG9yKTsNCi0gIH0NCi0NCi0gIGNsYXNzIEluZmluaXRlUHJvZ3Jlc3NNb25pdG9yT2JzZXJ2ZXIgZXh0ZW5kcyBUaHJlYWQgew0KLQ0KLSAgICBwcml2YXRlIFN0cmluZyBtZXNzYWdlID0gIlRlcm1pbmF0aW5nIEFNQUxUSEVBIG1vZGVsIGdlbmVyYXRpb24gam9iIjsNCi0gICAgcHJpdmF0ZSBmaW5hbCBTdWJNb25pdG9yIHN1Yk1vbml0b3I7DQotDQotICAgIC8qKg0KLSAgICAgKiBAcGFyYW0gc3ViTW9uaXRvciBtb25pdG9yIHdoaWNoIHdpbGwgYmUgb2JzZXJ2ZWQNCi0gICAgICovDQotICAgIHB1YmxpYyBJbmZpbml0ZVByb2dyZXNzTW9uaXRvck9ic2VydmVyKGZpbmFsIFN1Yk1vbml0b3Igc3ViTW9uaXRvcikgew0KLSAgICAgIHN1cGVyKCk7DQotICAgICAgdGhpcy5zdWJNb25pdG9yID0gc3ViTW9uaXRvcjsNCi0gICAgfQ0KLQ0KICAgICBAT3ZlcnJpZGUNCi0gICAgcHVibGljIHZvaWQgcnVuKCkgew0KKyAgICBwdWJsaWMgT2JqZWN0IGV4ZWN1dGUoZmluYWwgRXhlY3V0aW9uRXZlbnQgZXZlbnQpIHRocm93cyBFeGVjdXRpb25FeGNlcHRpb24gew0KKyAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gZ2V0UHJvcGVydGllcygpOw0KKyAgICAgICAgU0NBMkFtYWx0aGVhV2lkZ2V0QnVpbGRlciBzY2EyQW1hbHRoZWFXaWRnZXRCdWlsZGVyID0gbmV3IFNDQTJBbWFsdGhlYVdpZGdldEJ1aWxkZXIocHJvcGVydGllcyk7DQorICAgICAgICBTd01vZGVsV2lkZ2V0QnVpbGRlciBzd01vZGVsV2lkZ2V0QnVpbGRlciA9IG5ldyBTd01vZGVsV2lkZ2V0QnVpbGRlcihzY2EyQW1hbHRoZWFXaWRnZXRCdWlsZGVyLA0KKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzKTsNCisgICAgICAgIFNjaGVkdWxpbmdPc0RhdGFXaWRnZXRCdWlsZGVyIHNjaGVkdWxpbmdPc0RhdGFXaWRnZXRCdWlsZGVyID0gbmV3IFNjaGVkdWxpbmdPc0RhdGFXaWRnZXRCdWlsZGVyKHByb3BlcnRpZXMpOw0KKyAgICAgICAgT3V0cHV0RGV0YWlsc1dpZGdldEJ1aWxkZXIgb3V0cHV0RGV0YWlsc1dpZGdldEJ1aWxkZXIgPSBuZXcgT3V0cHV0RGV0YWlsc1dpZGdldEJ1aWxkZXIocHJvcGVydGllcyk7DQorICAgICAgICBHZW5lcmF0ZUFtYWx0aGVhV2l6YXJkUGFnZSBzY2FBbWFsdGhlYVdpemFyZFBhZ2UgPSBuZXcgR2VuZXJhdGVBbWFsdGhlYVdpemFyZFBhZ2UoIlNDQTJBbWFsdGhlYSBDb25maWd1cmF0aW9uIHBhZ2UiLA0KKyAgICAgICAgICAgICAgICBBcnJheXMuYXNMaXN0KHN3TW9kZWxXaWRnZXRCdWlsZGVyLA0KKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGluZ09zRGF0YVdpZGdldEJ1aWxkZXIsIG91dHB1dERldGFpbHNXaWRnZXRCdWlsZGVyKSk7DQorICAgICAgICBHZW5lcmF0ZUFtYWx0aGVhV2l6YXJkIGdlbmVyYXRlQW1hbHRoZWFXaXphcmQgPSBuZXcgR2VuZXJhdGVBbWFsdGhlYVdpemFyZChBcnJheXMuYXNMaXN0KA0KKyAgICAgICAgICAgICAgICAgICAgc2NhQW1hbHRoZWFXaXphcmRQYWdlKSwgcHJvcGVydGllcywNCisgICAgICAgICAgICAgICAgbmV3IFNDQTJBbWFsdGhlYUV4ZWN1dG9yKCkpOw0KKyAgICAgICAgV2l6YXJkRGlhbG9nIHdpemFyZERpYWxvZyA9IG5ldyBXaXphcmREaWFsb2coRGlzcGxheS5nZXRDdXJyZW50KCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QWN0aXZlU2hlbGwoKSwNCisgICAgICAgICAgICAgICAgZ2VuZXJhdGVBbWFsdGhlYVdpemFyZCk7DQorICAgICAgICB3aXphcmREaWFsb2cuc2V0TWluaW11bVBhZ2VTaXplKDgwMCwgNjAwKTsNCiANCi0gICAgICB0aGlzLm1lc3NhZ2UgPSBydW5Mb2dhcml0aG1pY1dhaXRPblByb2dyZXNzTW9uaXRvcigpOw0KLQ0KLSAgICAgIHRlcm1pbmF0ZU1vbml0b3JJbjEwU2Vjb25kZXMoKTsNCi0NCi0gICAgICBVdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLnNldEN1cnJlbnRSdW5uaW5nUHJvY2VzcyhudWxsKTsNCi0gICAgICBVdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLnNldE1vZGVsR2VuZXJhdGlvbmNhbmNlbGxlZChmYWxzZSk7DQotICAgICAgU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5pc0dlbmVyYXRpb25Eb25lID0gZmFsc2U7DQorICAgICAgICByZXR1cm4gd2l6YXJkRGlhbG9nLm9wZW4oKTsNCiAgICAgfQ0KIA0KLSAgICAvKioNCi0gICAgICogQHBhcmFtIHN1Yk1vbml0b3INCi0gICAgICogQHBhcmFtIG1lc3NhZ2UNCi0gICAgICogQHJldHVybg0KLSAgICAgKi8NCi0gICAgcHJpdmF0ZSBTdHJpbmcgcnVuTG9nYXJpdGhtaWNXYWl0T25Qcm9ncmVzc01vbml0b3IoKSB7DQotICAgICAgU3RyaW5nIG1lc3NhZ2VUb1JlbmFtZUpvYiA9ICJUZXJtaW5hdGluZyBBTUFMVEhFQSBtb2RlbCBnZW5lcmF0aW9uIGpvYiI7DQotICAgICAgYm9vbGVhbiBpc1Byb2Nlc3NDb21wbGV0ZWQgPSBmYWxzZTsNCi0gICAgICBpbnQgYWR2YW5jZW1lbnRDb3VudGVyID0gMDsNCisgICAgcHJpdmF0ZSBQcm9wZXJ0aWVzIGdldFByb3BlcnRpZXMoKSB7DQorICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBuZXcgUHJvcGVydGllcygpOw0KKyAgICAgICAgSVByb2plY3Qgc2VsZWN0ZWRQcm9qZWN0ID0gU0NBVG9vbHNVSVV0aWwuZ2V0Q3VycmVudFByb2plY3RSZXNvdXJjZSgpOw0KKyAgICAgICAgSUVjbGlwc2VQcmVmZXJlbmNlcyBwcm9qZWN0cHJlZmVyZW5jZXMgPSBTQ0FUb29sc1VJVXRpbC5sb2FkUHJvamVjdFNjb3BlUHJlZnMoc2VsZWN0ZWRQcm9qZWN0LA0KKyAgICAgICAgICAgICAgICBBcHA0bWNUb29sQ29uc3RhbnRzLlNDQTJBTUFMVEhFQV9UT09MX0lEKTsNCisgICAgICAgIHByb3BlcnRpZXMuc2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLlBST0pFQ1RfUEFUSCwNCisgICAgICAgICAgICBTQ0FUb29sc1VJVXRpbC5nZXRDdXJyZW50U2VsZWN0aW9uUHJvamVjdFBhdGgoKSk7DQorICAgICAgICBwcm9wZXJ0aWVzLnNldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5FTkFCTEVfU1RSVUNUX01FTUJFUl9LRVksDQorICAgICAgICAgICAgcHJvamVjdHByZWZlcmVuY2VzLmdldCgNCisgICAgICAgICAgICAgICAgQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLkVOQUJMRV9TVFJVQ1RfTUVNQkVSX0tFWSwNCisgICAgICAgICAgICAgICAgQm9vbGVhbi5GQUxTRS50b1N0cmluZygpKSk7DQorICAgICAgICBwcm9wZXJ0aWVzLnNldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5BU1RfUEFUSF9LRVksDQorICAgICAgICAgICAgcHJvamVjdHByZWZlcmVuY2VzLmdldChBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuQVNUX1BBVEhfS0VZLCAiIikpOw0KKyAgICAgICAgcHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuSERJUl9MSVNUX0tFWSwNCisgICAgICAgICAgICBwcm9qZWN0cHJlZmVyZW5jZXMuZ2V0KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5IRElSX0xJU1RfS0VZLCAiIikpOw0KKyAgICAgICAgcHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuQkxPR19LRVksDQorICAgICAgICAgICAgcHJvamVjdHByZWZlcmVuY2VzLmdldChBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuQkxPR19LRVksICIiKSk7DQorICAgICAgICBwcm9wZXJ0aWVzLnNldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5PU19MT0NLX0ZJTEUsDQorICAgICAgICAgICAgcHJvamVjdHByZWZlcmVuY2VzLmdldChBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1NfTE9DS19GSUxFLCAiIikpOw0KKyAgICAgICAgcHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuVEFTS19TQ0hFRFVMSU5HX0ZJTEUsDQorICAgICAgICAgICAgcHJvamVjdHByZWZlcmVuY2VzLmdldCgNCisgICAgICAgICAgICAgICAgQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLlRBU0tfU0NIRURVTElOR19GSUxFLCAiIikpOw0KKyAgICAgICAgcHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1VUUFVUX0RJUkVDVE9SWSwNCisgICAgICAgICAgICBwcm9qZWN0cHJlZmVyZW5jZXMuZ2V0KA0KKyAgICAgICAgICAgICAgICBBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuT1VUUFVUX0RJUkVDVE9SWSwgIiIpKTsNCiANCi0gICAgICB3aGlsZSAoIWlzUHJvY2Vzc0NvbXBsZXRlZCkgew0KLSAgICAgICAgaWYgKHRoaXMuc3ViTW9uaXRvci5pc0NhbmNlbGVkKCkpIHsNCi0gICAgICAgICAgc3luY2hyb25pemVkIChTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLm11dGV4KSB7DQotICAgICAgICAgICAgU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5pc0dlbmVyYXRpb25Eb25lID0gdHJ1ZTsNCi0gICAgICAgICAgfQ0KLSAgICAgICAgICBQcm9jZXNzIHAgPSBVdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLmdldEN1cnJlbnRSdW5uaW5nUHJvY2VzcygpOw0KLSAgICAgICAgICBwLmRlc3Ryb3lGb3JjaWJseSgpOw0KLQ0KLSAgICAgICAgICBVdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLnNldEN1cnJlbnRSdW5uaW5nUHJvY2VzcyhudWxsKTsNCi0gICAgICAgICAgVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZy5zZXRNb2RlbEdlbmVyYXRpb25jYW5jZWxsZWQodHJ1ZSk7DQotDQotICAgICAgICAgIG1lc3NhZ2VUb1JlbmFtZUpvYiA9ICJDYW5jZWxsaW5nIHRoZSBtb2RlbCBnZW5lcmF0aW9uIGpvYiI7DQotICAgICAgICB9DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICB0aGlzLnN1Yk1vbml0b3Iud29ya2VkKDEpOw0KLSAgICAgICAgICBhZHZhbmNlbWVudENvdW50ZXIrKzsNCi0gICAgICAgICAgaWYgKChhZHZhbmNlbWVudENvdW50ZXIgJSAzMDApID09IDApIHsNCi0gICAgICAgICAgICBhZHZhbmNlbWVudENvdW50ZXIgPSAxOw0KLSAgICAgICAgICAgIHRoaXMuc3ViTW9uaXRvci5zZXRXb3JrUmVtYWluaW5nKDYwMCk7DQotICAgICAgICAgIH0NCi0gICAgICAgICAgVGhyZWFkLnNsZWVwKDEwMDApOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgTG9nbWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvZyhlLmdldE1lc3NhZ2UoKSk7DQotICAgICAgICB9DQotICAgICAgICBzeW5jaHJvbml6ZWQgKFNDQVRvQW1hbHRoZWFIYW5kbGVyLnRoaXMubXV0ZXgpIHsNCi0gICAgICAgICAgaXNQcm9jZXNzQ29tcGxldGVkID0gU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5pc0dlbmVyYXRpb25Eb25lOw0KLSAgICAgICAgfQ0KLSAgICAgIH0NCi0gICAgICByZXR1cm4gbWVzc2FnZVRvUmVuYW1lSm9iOw0KKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7DQogICAgIH0NCi0NCi0gICAgLyoqDQotICAgICAqIEBwYXJhbSBzdWJNb25pdG9yDQotICAgICAqIEBwYXJhbSBtZXNzYWdlDQotICAgICAqLw0KLSAgICBwcml2YXRlIHZvaWQgdGVybWluYXRlTW9uaXRvckluMTBTZWNvbmRlcygpIHsNCi0gICAgICBpbnQgbnVtYmVyT2ZTZWNvbmRVbnRpbEVuZCA9IDEwOw0KLSAgICAgIHRoaXMuc3ViTW9uaXRvci5zZXRXb3JrUmVtYWluaW5nKG51bWJlck9mU2Vjb25kVW50aWxFbmQpOw0KLSAgICAgIHRoaXMuc3ViTW9uaXRvci5zZXRUYXNrTmFtZSh0aGlzLm1lc3NhZ2UpOw0KLSAgICAgIFNDQVRvQW1hbHRoZWFIYW5kbGVyLnRoaXMuY3VycmVudEpvYi5zZXROYW1lKHRoaXMubWVzc2FnZSk7DQotICAgICAgd2hpbGUgKG51bWJlck9mU2Vjb25kVW50aWxFbmQgPiAwKSB7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICB0aGlzLnN1Yk1vbml0b3Iud29ya2VkKDEpOw0KLSAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7DQotICAgICAgICB9DQotICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nKGUuZ2V0TWVzc2FnZSgpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIC0tbnVtYmVyT2ZTZWNvbmRVbnRpbEVuZDsNCi0gICAgICB9DQotICAgIH0NCi0NCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogSW5uZXIgY2xhc3MgdG8gc2hvdyBhIGNvbmZpcm1hdGlvbiBwb3AgdXAuDQotICAgKg0KLSAgICovDQotICBjbGFzcyBDb25maXJtYXRpb25Qb3BVcCBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsNCi0NCi0gICAgQE92ZXJyaWRlDQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsNCi0gICAgICBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aGlzLmNvbmZpcm1hdGlvbiA9DQotICAgICAgICAgIE1lc3NhZ2VEaWFsb2cub3BlbkNvbmZpcm0oU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5jdXJyZW50U2hlbGwsIHRpdGxlLCBjb25maXJtYXRpb25NZXNzYWdlKTsNCi0NCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiBJbm5lciBjbGFzcyB0byBzaG93IGEgaW5mb3JtYXRpb24gcG9wIHVwLg0KLSAgICovDQotICBjbGFzcyBJbmZvUG9wVXAgaW1wbGVtZW50cyBSdW5uYWJsZSB7DQotDQotICAgIEBPdmVycmlkZQ0KLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7DQotICAgICAgTWVzc2FnZURpYWxvZy5vcGVuSW5mb3JtYXRpb24oU0NBVG9BbWFsdGhlYUhhbmRsZXIudGhpcy5jdXJyZW50U2hlbGwsIHRpdGxlLCBpbmZvTWVzc2FnZSk7DQotDQotICAgIH0NCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogVGhpcyBtZXRob2Qgc3RhcnRzIHRoZSB0aW1lci5UaGUgdGltZXIgaXMgc2NlZHVsZWQgdG8gcnVuIGFmdGVyIGV2ZXJ5IDE1bWlucy5FdmVyeSB0aW1lIHRoZSB0aW1lciBydW5zIGl0IGNoZWNrcyBpZg0KLSAgICogdGhlIGVjbGlwc2Ugam9iIGlzIHN0aWxsIGFsaXZlLiBJZiBzbyBpdCBwb3BzIHVwIGEgY29uZmlybWF0aW9uIGRpYWxvZyBhc2tpbmcgaWYgdGhlIHVzZXIgd2lzaGVzIHRvIGNvbnRpbnVlLiBJZg0KLSAgICogdGhlIHVzZXIgd2lzaGVzIHRvIGNvbnRpbnVlIHRoZSB0aW1lciBrZWVwcyBydW5uaW5nIGFuZCBrZWVwcyBzaG93aW5nIHRoZSBwb3B1cCBhZnRlciBldmVyeSAxNSBtaW5zIGFuZCBpZiB0aGUgdXNlcg0KLSAgICogd2lzaGVzIHRvIGFib3J0IHRoZW4gaXQgY2FuY2VscyB0aGUgZWNsaXBzZSBqb2IsIGNhbmNlbHMgdGhlIHRpbWVyIGFuZCBraWxscyB0aGUgc2NhLmV4ZSBwcm9jZXNzLklmIHRoZSBlY2xpcHNlIGpvYg0KLSAgICogaXMgbm90IGFsaXZlIGl0IGNhbmNlbHMgdGhlIHRpbWVyLg0KLSAgICovDQotICBwcml2YXRlIHZvaWQgc3RhcnRUaW1lcigpIHsNCi0gICAgaWYgKGdldFRpbWVyRGVsYXkoKSA9PSAwKSB7DQotICAgICAgc2V0VGltZXJEZWxheSg0MCAqIDYwICogMTAwMCk7DQotICAgIH0NCi0gICAgaWYgKGdldFRpbWVyUGVyaW9kKCkgPT0gMCkgew0KLSAgICAgIHNldFRpbWVyUGVyaW9kKDQwICogNjAgKiAxMDAwKTsNCi0gICAgfQ0KLSAgICBKb2IgZWNsaXBzZUpvYiA9IEpvYi5nZXRKb2JNYW5hZ2VyKCkuY3VycmVudEpvYigpOw0KLSAgICBUaW1lciB0ID0gbmV3IFRpbWVyKCk7DQotICAgIHQuc2NoZWR1bGVBdEZpeGVkUmF0ZShuZXcgVGltZXJUYXNrKCkgew0KLQ0KLSAgICAgIEBPdmVycmlkZQ0KLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsNCi0gICAgICAgIGlmICgoZWNsaXBzZUpvYi5nZXRUaHJlYWQoKSAhPSBudWxsKSAmJiBlY2xpcHNlSm9iLmdldFRocmVhZCgpLmlzQWxpdmUoKSkgew0KLSAgICAgICAgICBzZXRDb25maXJtYXRpb25NZXNzYWdlKA0KLSAgICAgICAgICAgICAgIlRoZSBhbWFsdGhlYSBtb2RlbCBnZW5lcmF0aW9uIGpvYiBpcyBzdGlsbCBydW5uaW5nLkl0IG1pZ2h0IHRha2Ugc29tZSBtb3JlIHRpbWUuIERvIHlvdSB3aXNoIHRvIGNvbnRpbnVlPyBQcmVzcyBPayB0byBjb250aW51ZSBvciBjYW5jZWwgdG8gYWJvcnQiKTsNCi0gICAgICAgICAgc2V0VGl0bGUoIkFtYWx0aGVhIEpvYiBzdGF0dXMiKTsNCi0gICAgICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IENvbmZpcm1hdGlvblBvcFVwKCkpOw0KLSAgICAgICAgICBpZiAoIVNDQVRvQW1hbHRoZWFIYW5kbGVyLnRoaXMuY29uZmlybWF0aW9uKSB7DQotICAgICAgICAgICAgdC5jYW5jZWwoKTsNCi0gICAgICAgICAgICBlY2xpcHNlSm9iLmNhbmNlbCgpOw0KLSAgICAgICAgICAgIFByb2Nlc3MgcCA9IFV0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuZ2V0Q3VycmVudFJ1bm5pbmdQcm9jZXNzKCk7DQotICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCkgew0KLSAgICAgICAgICAgICAgcC5kZXN0cm95Rm9yY2libHkoKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2Ugew0KLSAgICAgICAgICB0LmNhbmNlbCgpOw0KLSAgICAgICAgfQ0KLSAgICAgIH0NCi0gICAgfSwgZ2V0VGltZXJEZWxheSgpLCBnZXRUaW1lclBlcmlvZCgpKTsNCi0gIH0NCi0NCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgc2V0SW5mb01lc3NhZ2UoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsNCi0gICAgU0NBVG9BbWFsdGhlYUhhbmRsZXIuaW5mb01lc3NhZ2UgPSBtZXNzYWdlOw0KLSAgfQ0KLQ0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZXRUaXRsZShmaW5hbCBTdHJpbmcgbWVzc2FnZSkgew0KLSAgICBTQ0FUb0FtYWx0aGVhSGFuZGxlci50aXRsZSA9IG1lc3NhZ2U7DQotICB9DQotDQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldENvbmZpcm1hdGlvbk1lc3NhZ2UoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsNCi0gICAgU0NBVG9BbWFsdGhlYUhhbmRsZXIuY29uZmlybWF0aW9uTWVzc2FnZSA9IG1lc3NhZ2U7DQotICB9DQogfQ0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS9wcmVmZXJlbmNlcy9TQ0FUb0FtYWx0aGVhRXhwb3J0UHJlZmVyZW5jZUxpc3QuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS9wcmVmZXJlbmNlcy9TQ0FUb0FtYWx0aGVhRXhwb3J0UHJlZmVyZW5jZUxpc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhODFhZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvcHJlZmVyZW5jZXMvU0NBVG9BbWFsdGhlYUV4cG9ydFByZWZlcmVuY2VMaXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioNCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCi0gKiANCi0gKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQotICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCi0gKiB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8NCi0gKiANCi0gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KLSAqIA0KLSAqIENvbnRyaWJ1dG9yczoNCi0gKiAgICAgUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24NCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKi8NCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkucHJlZmVyZW5jZXM7DQotDQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnByZWZlcmVuY2VzLmludGVyZmFjZXMuSUV4cG9ydFByZWZlcmVuY2VzOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzLmNvbnN0YW50cy5TQ0EyQW1hbHRoZWFDb25zdGFudHM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsNCi0NCi0vKioNCi0gKi8NCi1wdWJsaWMgY2xhc3MgU0NBVG9BbWFsdGhlYUV4cG9ydFByZWZlcmVuY2VMaXN0IGltcGxlbWVudHMgSUV4cG9ydFByZWZlcmVuY2VzIHsNCi0NCi0NCi0gIC8qKg0KLSAgICogVGhlIHByaXZhdGUgY29uc3RydWN0b3INCi0gICAqLw0KLSAgcHVibGljIFNDQVRvQW1hbHRoZWFFeHBvcnRQcmVmZXJlbmNlTGlzdCgpIHsNCi0gICAgLy8gZW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3Rvcg0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiB7QGluaGVyaXREb2N9DQotICAgKi8NCi0gIEBPdmVycmlkZQ0KLSAgcHVibGljIExpc3Q8U3RyaW5nPiBrZXlzVG9FeHBvcnQoKSB7DQotICAgIFN0cmluZ1tdIHByZWZUb1NhdmUgPSB7IC8vIE5PU09OQVIgbm90IHNpZ25pZmljYW50DQotICAgICAgICBTQ0EyQW1hbHRoZWFDb25zdGFudHMuRU5BQkxFX1NUUlVDVF9NRU1CRVIsDQotICAgICAgICBTQ0EyQW1hbHRoZWFDb25zdGFudHMuRU5BQkxFX09QVElPTkFMX0ZJRUxEUywNCi0gICAgICAgIFNDQTJBbWFsdGhlYUNvbnN0YW50cy5BU1RfUEFUSCwNCi0gICAgICAgIFNDQTJBbWFsdGhlYUNvbnN0YW50cy5PVVRQVVRfUEFUSCwNCi0gICAgICAgIFNDQTJBbWFsdGhlYUNvbnN0YW50cy5UQVNLX0lORk8sDQotICAgICAgICBTQ0EyQW1hbHRoZWFDb25zdGFudHMuQkxPRywNCi0gICAgICAgIFNDQTJBbWFsdGhlYUNvbnN0YW50cy5IRElSX0xJU1QsDQotICAgICAgICBTQ0EyQW1hbHRoZWFDb25zdGFudHMuTE9DS19JTkZPIH07DQotICAgIHJldHVybiBBcnJheXMuYXNMaXN0KHByZWZUb1NhdmUpOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiB7QGluaGVyaXREb2N9DQotICAgKi8NCi0gIEBPdmVycmlkZQ0KLSAgcHVibGljIElQcmVmZXJlbmNlU3RvcmUgZ2V0UHJlZmVyZW5jZVN0b3JlKCkgew0KLSAgICByZXR1cm4gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5BY3RpdmF0b3IuZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOw0KLSAgfQ0KLX0NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvcHJlZmVyZW5jZXMvU0NBVG9BbWFsdGhlYVByZWZlcmVuY2VQYWdlLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvcHJlZmVyZW5jZXMvU0NBVG9BbWFsdGhlYVByZWZlcmVuY2VQYWdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhNTdhNWMuLjAwMDAwMDAKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL3ByZWZlcmVuY2VzL1NDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLS8qKg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqIENvcHlyaWdodCAoYykgMjAxNyBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KLSAqIA0KLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCi0gKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KLSAqIA0KLSAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wDQotICogDQotICogQ29udHJpYnV0b3JzOg0KLSAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KLSAqLw0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS5wcmVmZXJlbmNlczsNCi0NCi0NCi1pbXBvcnQgamF2YS5pby5GaWxlOw0KLQ0KLWltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnByZWZlcmVuY2VzLkFic3RyYWN0U0NBVG9vbHNQcmVmZXJlbmNlUGFnZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsLkFwcDRtY1Rvb2xDb25zdGFudHM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkudXRpbC5TQ0FUb0FtYWx0aGVhUHJlZmVyZW5jZVBhZ2VDb25zdGFudHM7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuY29uc3RhbnRzLlNDQTJBbWFsdGhlYUNvbnN0YW50czsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5sYXlvdXQuR3JpZERhdGFGYWN0b3J5Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLkJvb2xlYW5GaWVsZEVkaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5EaXJlY3RvcnlGaWVsZEVkaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWVsZEVkaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5GaWxlRmllbGRFZGl0b3I7DQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuUGF0aEVkaXRvcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5QcmVmZXJlbmNlRGlhbG9nOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsNCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudXRpbC5Qcm9wZXJ0eUNoYW5nZUV2ZW50Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLkZvY3VzRXZlbnQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ldmVudHMuRm9jdXNMaXN0ZW5lcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlFdmVudDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5LZXlMaXN0ZW5lcjsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0Ow0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsNCi1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuR3JvdXA7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7DQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2g7DQotDQotLyoqDQotICovDQotcHVibGljIGNsYXNzIFNDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZSBleHRlbmRzIEFic3RyYWN0U0NBVG9vbHNQcmVmZXJlbmNlUGFnZSB7DQotDQotDQotICBwcml2YXRlIERpcmVjdG9yeUZpZWxkRWRpdG9yIGxsdm1FeGVjdXRhYmxlRWRpdG9yOw0KLSAgcHJpdmF0ZSBEaXJlY3RvcnlGaWVsZEVkaXRvciBvdXRwdXRQYXRoRWRpdG9yOw0KLSAgcHJpdmF0ZSBGaWxlRmllbGRFZGl0b3IgdGFza0luZm9FZGl0b3I7DQotICBwcml2YXRlIFBhdGhFZGl0b3IgaGVhZGVyVGV4dEZpbGVFZGl0b3I7DQotICBwcml2YXRlIEZpbGVGaWVsZEVkaXRvciBidWlsZENtZExvZ0ZpbGVFZGl0b3I7DQotICBwcml2YXRlIEJvb2xlYW5GaWVsZEVkaXRvciBlbmFibGU7DQotICBwcml2YXRlIEJvb2xlYW5GaWVsZEVkaXRvciBzdHJ1Y3RNZW1iZXJSZW1vdmVyOw0KLSAgcHJpdmF0ZSBHcm91cCBvcHRpb25hbDsNCi0gIHByaXZhdGUgR3JvdXAgY29uZmlndXJlOw0KLSAgcHJpdmF0ZSBHcm91cCBtYW5kYXRvcnk7DQotICBwcml2YXRlIEZpbGVGaWVsZEVkaXRvciBsb2NrRnVuY3Rpb25zRWRpdG9yOw0KLQ0KLSAgLyoqDQotICAgKiBVc2luZyBHUklEIGxheW91dA0KLSAgICovDQotICBwdWJsaWMgU0NBVG9BbWFsdGhlYVByZWZlcmVuY2VQYWdlKCkgew0KLSAgICBzdXBlcigxKTsNCi0NCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogY3JlYXRpbmcgVUkgY29udHJvbHMgZm9yIHNjYTJBbWFsdGhlYSBwcmVmZXJlbmNlIHBhZ2UNCi0gICAqLw0KLQ0KLSAgQE92ZXJyaWRlDQotICBwdWJsaWMgdm9pZCBjcmVhdGVGaWVsZEVkaXRvcnMoKSB7DQotDQotCXRoaXMubWFuZGF0b3J5PW5ldyBHcm91cChnZXRGaWVsZEVkaXRvclBhcmVudCgpLCBTV1QuU0hBRE9XX09VVCk7DQotICAgIHRoaXMuY29uZmlndXJlID0gbmV3IEdyb3VwKGdldEZpZWxkRWRpdG9yUGFyZW50KCksIFNXVC5TSEFET1dfT1VUKTsNCi0gICAgdGhpcy5vcHRpb25hbCA9IG5ldyBHcm91cChnZXRGaWVsZEVkaXRvclBhcmVudCgpLCBTV1QuU0hBRE9XX09VVCk7DQotDQotICAgIHRoaXMubWFuZGF0b3J5LnNldFRleHQoIk1BTkRBVE9SWSBDT05GSUdVUkFUSU9OIik7DQotICAgIHRoaXMub3B0aW9uYWwuc2V0VGV4dCgiT1BUSU9OQUwgQ09ORklHVVJBVElPTiIpOw0KLSAgICB0aGlzLmNvbmZpZ3VyZS5zZXRUZXh0KCJFRElUIE9QVElPTkFMIENPTkZJR1VSQVRJT04iKTsNCi0gICAgR3JpZExheW91dCBsYXlvdXQgPSBuZXcgR3JpZExheW91dCgxLCBmYWxzZSk7DQotDQotICAgIHRoaXMubWFuZGF0b3J5LnNldExheW91dChsYXlvdXQpOw0KLSAgICB0aGlzLmNvbmZpZ3VyZS5zZXRMYXlvdXQobGF5b3V0KTsNCi0gICAgdGhpcy5vcHRpb25hbC5zZXRMYXlvdXQobGF5b3V0KTsNCi0NCi0gICAgR3JpZERhdGFGYWN0b3J5LmRlZmF1bHRzRm9yKHRoaXMubWFuZGF0b3J5KS5ncmFiKHRydWUsIGZhbHNlKS5zcGFuKDIsIDEpLmFwcGx5VG8odGhpcy5tYW5kYXRvcnkpOw0KLSAgICBHcmlkRGF0YUZhY3RvcnkuZGVmYXVsdHNGb3IodGhpcy5jb25maWd1cmUpLmdyYWIodHJ1ZSwgZmFsc2UpLnNwYW4oMiwgMSkuYXBwbHlUbyh0aGlzLmNvbmZpZ3VyZSk7DQotICAgIEdyaWREYXRhRmFjdG9yeS5kZWZhdWx0c0Zvcih0aGlzLm9wdGlvbmFsKS5ncmFiKHRydWUsIGZhbHNlKS5zcGFuKDIsIDEpLmFwcGx5VG8odGhpcy5vcHRpb25hbCk7DQotDQotDQotICAgIHRoaXMubGx2bUV4ZWN1dGFibGVFZGl0b3IgPQ0KLSAgICAgICAgbmV3IERpcmVjdG9yeUZpZWxkRWRpdG9yKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5BU1RfUEFUSCwgIiZQYXRoIHRvIHRoZSBMTFZNIEV4ZWN1dGFibGUiLCB0aGlzLm1hbmRhdG9yeSk7DQotICAgIGFkZEZpZWxkKHRoaXMubGx2bUV4ZWN1dGFibGVFZGl0b3IpOw0KLSAgICB0aGlzLmxsdm1FeGVjdXRhYmxlRWRpdG9yLnNldEZpbHRlclBhdGgobmV3IEZpbGUoZ2V0UHJvamVjdFBhdGgoKSkpOw0KLQ0KLQ0KLSAgICB0aGlzLm91dHB1dFBhdGhFZGl0b3IgPQ0KLSAgICAgICAgbmV3IERpcmVjdG9yeUZpZWxkRWRpdG9yKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5PVVRQVVRfUEFUSCwgIiZPdXRwdXQgRGlyZWN0b3J5IFBhdGg6IiwgdGhpcy5vcHRpb25hbCk7DQotICAgIHRoaXMub3V0cHV0UGF0aEVkaXRvci5nZXRUZXh0Q29udHJvbCh0aGlzLm9wdGlvbmFsKQ0KLSAgICAgICAgLnNldFRvb2xUaXBUZXh0KFNDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZUNvbnN0YW50cy5PVVRQVVRfUEFUSF9ERUZBVUxUX01FU1NBR0UpOw0KLSAgICBhZGRGaWVsZCh0aGlzLm91dHB1dFBhdGhFZGl0b3IpOw0KLSAgICB0aGlzLm91dHB1dFBhdGhFZGl0b3Iuc2V0RmlsdGVyUGF0aChuZXcgRmlsZShnZXRQcm9qZWN0UGF0aCgpKSk7DQotDQotDQotICAgIHRoaXMudGFza0luZm9FZGl0b3IgPSBuZXcgRmlsZUZpZWxkRWRpdG9yKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5UQVNLX0lORk8sICImVGFzayBJbmZvcm1hdGlvbiBmaWxlIiwgdGhpcy5vcHRpb25hbCk7DQotICAgIHRoaXMudGFza0luZm9FZGl0b3IuZ2V0VGV4dENvbnRyb2wodGhpcy5vcHRpb25hbCkNCi0gICAgICAgIC5zZXRUb29sVGlwVGV4dChTQ0FUb0FtYWx0aGVhUHJlZmVyZW5jZVBhZ2VDb25zdGFudHMuVEFTS19JTkZPX0ZJTEVfREVGQVVMVF9NRUFBU0dFKTsNCi0gICAgYWRkRmllbGQodGhpcy50YXNrSW5mb0VkaXRvcik7DQotICAgIHRoaXMudGFza0luZm9FZGl0b3Iuc2V0RmlsdGVyUGF0aChuZXcgRmlsZShnZXRQcm9qZWN0UGF0aCgpKSk7DQotDQotDQotICAgIHRoaXMuc3RydWN0TWVtYmVyUmVtb3ZlciA9DQotICAgICAgICBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5FTkFCTEVfU1RSVUNUX01FTUJFUiwgIiZFbmFibGUgU3RydWN0dXJlIG1lbWJlciIsIHRoaXMuY29uZmlndXJlKTsNCi0gICAgYWRkRmllbGQodGhpcy5zdHJ1Y3RNZW1iZXJSZW1vdmVyKTsNCi0NCi0gICAgdGhpcy5lbmFibGUgPSBuZXcgQm9vbGVhbkZpZWxkRWRpdG9yKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5FTkFCTEVfT1BUSU9OQUxfRklFTERTLCAiJkNvbmZpZ3VyZSBvcHRpb25hbCBmaWVsZHMiLA0KLSAgICAgICAgdGhpcy5jb25maWd1cmUpOw0KLSAgICBhZGRGaWVsZCh0aGlzLmVuYWJsZSk7DQotDQotICAgIHRoaXMuaGVhZGVyVGV4dEZpbGVFZGl0b3IgPSBuZXcgUGF0aEVkaXRvcihTQ0EyQW1hbHRoZWFDb25zdGFudHMuSERJUl9MSVNULCAiJkhlYWRlciBkaXJlY3RvcmllcyIsDQotICAgICAgICAiQ2hvb3NlIGEgaGVhZGVyIGRpcmVjdG9yeSIsIHRoaXMub3B0aW9uYWwpOw0KLSAgICB0aGlzLmhlYWRlclRleHRGaWxlRWRpdG9yLmdldExpc3RDb250cm9sKHRoaXMub3B0aW9uYWwpDQotICAgICAgICAuc2V0VG9vbFRpcFRleHQoU0NBVG9BbWFsdGhlYVByZWZlcmVuY2VQYWdlQ29uc3RhbnRzLkhFQURFUl9URVhUX0ZJTEVfREVGQVVMVF9NRVNTQUdFKTsNCi0gICAgYWRkRmllbGQodGhpcy5oZWFkZXJUZXh0RmlsZUVkaXRvcik7DQotDQotDQotICAgIHRoaXMuYnVpbGRDbWRMb2dGaWxlRWRpdG9yID0NCi0gICAgICAgIG5ldyBGaWxlRmllbGRFZGl0b3IoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLkJMT0csICImQnVpbGQgY29tbWFuZCBsb2cgZmlsZSIsIHRoaXMub3B0aW9uYWwpOw0KLSAgICB0aGlzLmJ1aWxkQ21kTG9nRmlsZUVkaXRvci5nZXRUZXh0Q29udHJvbCh0aGlzLm9wdGlvbmFsKQ0KLSAgICAgICAgLnNldFRvb2xUaXBUZXh0KFNDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZUNvbnN0YW50cy5CVUlMRF9MT0dfRklMRV9ERUZBVUxUX01FU1NBR0UpOw0KLSAgICBhZGRGaWVsZCh0aGlzLmJ1aWxkQ21kTG9nRmlsZUVkaXRvcik7DQotICAgIHRoaXMuYnVpbGRDbWRMb2dGaWxlRWRpdG9yLnNldEZpbHRlclBhdGgobmV3IEZpbGUoZ2V0UHJvamVjdFBhdGgoKSkpOw0KLQ0KLSAgICB0aGlzLmxvY2tGdW5jdGlvbnNFZGl0b3IgPQ0KLSAgICAgICAgbmV3IEZpbGVGaWVsZEVkaXRvcihTQ0EyQW1hbHRoZWFDb25zdGFudHMuTE9DS19JTkZPLCAiJiBMb2NrIEZ1bmN0aW9uIGZpbGUiLCB0aGlzLm9wdGlvbmFsKTsNCi0gICAgdGhpcy5sb2NrRnVuY3Rpb25zRWRpdG9yLmdldFRleHRDb250cm9sKHRoaXMub3B0aW9uYWwpDQotICAgICAgICAuc2V0VG9vbFRpcFRleHQoU0NBVG9BbWFsdGhlYVByZWZlcmVuY2VQYWdlQ29uc3RhbnRzLkxPQ0tfRlVOQ1RJT05TX0RFRkFVTFRfTUVTU0FHRSk7DQotICAgIGFkZEZpZWxkKHRoaXMubG9ja0Z1bmN0aW9uc0VkaXRvcik7DQotICAgYWRkTGlzdGVuZXJzKCk7DQotICAgdmFsaWRhdGUoKTsNCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogU2V0dGluZyB0aGUgcHJlZmVyZW5jZSBzdG9yZQ0KLSAgICoNCi0gICAqIEBwYXJhbSB3b3JrYmVuY2ggdGhlIHdvcmtCZW5jaA0KLSAgICovDQotDQotICBAT3ZlcnJpZGUNCi0gIHB1YmxpYyB2b2lkIGluaXQoZmluYWwgSVdvcmtiZW5jaCB3b3JrYmVuY2gpIHsNCi0gICAgc2V0UHJlZmVyZW5jZVN0b3JlKG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuQWN0aXZhdG9yLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKSk7DQotICAgIHNldERlc2NyaXB0aW9uKCJTb3VyY2UgQ29kZSB0byBBbWFsdGhlYSBQcmVmZXJlbmNlIFNldHRpbmdzIik7DQotDQotICB9DQotDQotDQotICAvKioNCi0gICAqIEVuYWJsZSBvciBkaXNhYmxlIHRoZSBmaWVsZCBlZGl0b3JzIGJhc2VkIG9uICJFRElUIE9QVElPTkFMIENPTkZJR1VSQVRJT04iIGNoZWNrIGJveA0KLSAgICovDQotICBAT3ZlcnJpZGUNCi0gIHByb3RlY3RlZCB2b2lkIGNoZWNrU3RhdGUoKSB7DQotICAgIHN1cGVyLmNoZWNrU3RhdGUoKTsNCi0gICAgc2V0VmFsaWQodHJ1ZSk7DQotDQotICAgIGlmICh0aGlzLmVuYWJsZS5nZXRCb29sZWFuVmFsdWUoKSkgew0KLSAgICAgIHRoaXMub3V0cHV0UGF0aEVkaXRvci5zZXRFbmFibGVkKHRydWUsIHRoaXMub3B0aW9uYWwpOw0KLSAgICAgIHRoaXMub3V0cHV0UGF0aEVkaXRvci5nZXRUZXh0Q29udHJvbCh0aGlzLm9wdGlvbmFsKS5zZXRFZGl0YWJsZShmYWxzZSk7DQotDQotICAgICAgdGhpcy5idWlsZENtZExvZ0ZpbGVFZGl0b3Iuc2V0RW5hYmxlZCh0cnVlLCB0aGlzLm9wdGlvbmFsKTsNCi0gICAgICB0aGlzLmJ1aWxkQ21kTG9nRmlsZUVkaXRvci5nZXRUZXh0Q29udHJvbCh0aGlzLm9wdGlvbmFsKS5zZXRFZGl0YWJsZShmYWxzZSk7DQotICAgICAgdGhpcy5oZWFkZXJUZXh0RmlsZUVkaXRvci5zZXRFbmFibGVkKHRydWUsIHRoaXMub3B0aW9uYWwpOw0KLQ0KLQ0KLSAgICAgIHRoaXMudGFza0luZm9FZGl0b3Iuc2V0RW5hYmxlZCh0cnVlLCB0aGlzLm9wdGlvbmFsKTsNCi0NCi0gICAgICB0aGlzLnRhc2tJbmZvRWRpdG9yLmdldFRleHRDb250cm9sKHRoaXMub3B0aW9uYWwpLnNldEVkaXRhYmxlKGZhbHNlKTsNCi0NCi0gICAgICB0aGlzLmxvY2tGdW5jdGlvbnNFZGl0b3Iuc2V0RW5hYmxlZCh0cnVlLCB0aGlzLm9wdGlvbmFsKTsNCi0gICAgICB0aGlzLmxvY2tGdW5jdGlvbnNFZGl0b3IuZ2V0VGV4dENvbnRyb2wodGhpcy5vcHRpb25hbCkuc2V0RWRpdGFibGUoZmFsc2UpOw0KLSAgICAgIGNsZWFyT3B0aW9uYWxGaWVsZHMoKTsNCi0gICAgfQ0KLSAgICBlbHNlIHsNCi0gICAgICB0aGlzLm91dHB1dFBhdGhFZGl0b3Iuc2V0RW5hYmxlZChmYWxzZSwgdGhpcy5vcHRpb25hbCk7DQotICAgICAgdGhpcy5vdXRwdXRQYXRoRWRpdG9yLnNldFN0cmluZ1ZhbHVlKGdldFByZWZlcmVuY2VTdG9yZSgpLmdldERlZmF1bHRTdHJpbmcoU0NBMkFtYWx0aGVhQ29uc3RhbnRzLk9VVFBVVF9QQVRIKSk7DQotICAgICAgICAgICAgDQotICAgICAgdGhpcy5idWlsZENtZExvZ0ZpbGVFZGl0b3Iuc2V0RW5hYmxlZChmYWxzZSwgdGhpcy5vcHRpb25hbCk7DQotICAgICAgdGhpcy5idWlsZENtZExvZ0ZpbGVFZGl0b3Iuc2V0U3RyaW5nVmFsdWUoZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0RGVmYXVsdFN0cmluZyhTQ0EyQW1hbHRoZWFDb25zdGFudHMuQkxPRykpOw0KLSAgICAgIHRoaXMuaGVhZGVyVGV4dEZpbGVFZGl0b3Iuc2V0RW5hYmxlZChmYWxzZSwgdGhpcy5vcHRpb25hbCk7DQotDQotICAgICAgdGhpcy5oZWFkZXJUZXh0RmlsZUVkaXRvci5nZXRMaXN0Q29udHJvbCh0aGlzLm9wdGlvbmFsKS5yZW1vdmVBbGwoKTsNCi0gICAgICB0aGlzLmhlYWRlclRleHRGaWxlRWRpdG9yLmdldExpc3RDb250cm9sKHRoaXMub3B0aW9uYWwpDQotICAgICAgICAgIC5hZGQoZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0RGVmYXVsdFN0cmluZyhTQ0EyQW1hbHRoZWFDb25zdGFudHMuSERJUl9MSVNUKSwgMCk7DQotDQotICAgICAgdGhpcy5oZWFkZXJUZXh0RmlsZUVkaXRvci5nZXRMaXN0Q29udHJvbCh0aGlzLm9wdGlvbmFsKS5kZXNlbGVjdCgwKTsNCi0gICAgICB0aGlzLnRhc2tJbmZvRWRpdG9yLnNldEVuYWJsZWQoZmFsc2UsIHRoaXMub3B0aW9uYWwpOw0KLSAgICAgIHRoaXMudGFza0luZm9FZGl0b3Iuc2V0U3RyaW5nVmFsdWUoZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0RGVmYXVsdFN0cmluZyhTQ0EyQW1hbHRoZWFDb25zdGFudHMuVEFTS19JTkZPKSk7DQotDQotICAgICAgdGhpcy5sb2NrRnVuY3Rpb25zRWRpdG9yLnNldEVuYWJsZWQoZmFsc2UsIHRoaXMub3B0aW9uYWwpOw0KLSAgICAgIHRoaXMubG9ja0Z1bmN0aW9uc0VkaXRvci5zZXRTdHJpbmdWYWx1ZShnZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXREZWZhdWx0U3RyaW5nKFNDQTJBbWFsdGhlYUNvbnN0YW50cy5MT0NLX0lORk8pKTsNCi0gICAgICBzZXRFcnJvck1lc3NhZ2UobnVsbCk7DQotICAgIH0NCi0NCi0gICAgQ29udHJvbFtdIGNvbnRyb2wgPSB0aGlzLmhlYWRlclRleHRGaWxlRWRpdG9yLmdldEJ1dHRvbkJveENvbnRyb2wodGhpcy5vcHRpb25hbCkuZ2V0Q2hpbGRyZW4oKTsNCi0gICAgZm9yIChDb250cm9sIGMgOiBjb250cm9sKSB7DQotICAgICAgaWYgKGMgaW5zdGFuY2VvZiBCdXR0b24pIHsNCi0gICAgICAgIEJ1dHRvbiBiID0gKEJ1dHRvbikgYzsNCi0gICAgICAgIGlmIChiLmdldFRleHQoKS5lcXVhbHMoSkZhY2VSZXNvdXJjZXMuZ2V0U3RyaW5nKCJMaXN0RWRpdG9yLnVwIikpIHx8DQotICAgICAgICAgICAgYi5nZXRUZXh0KCkuZXF1YWxzKEpGYWNlUmVzb3VyY2VzLmdldFN0cmluZygiTGlzdEVkaXRvci5kb3duIikpKSB7DQotICAgICAgICAgIGIuc2V0VmlzaWJsZShmYWxzZSk7DQotICAgICAgICB9DQotICAgICAgICBlbHNlIHsNCi0gICAgICAgICAgYi5zZXRWaXNpYmxlKHRydWUpOw0KLSAgICAgICAgfQ0KLSAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBHcmlkRGF0YSBncmlkRGF0YSA9IChHcmlkRGF0YSkgdGhpcy5oZWFkZXJUZXh0RmlsZUVkaXRvci5nZXRMYWJlbENvbnRyb2wodGhpcy5vcHRpb25hbCkuZ2V0TGF5b3V0RGF0YSgpOw0KLSAgICBncmlkRGF0YS5ob3Jpem9udGFsU3BhbiA9IDE7DQotICAgIEdyaWREYXRhIGdyaWREYXRhVGV4dCA9IChHcmlkRGF0YSkgdGhpcy5oZWFkZXJUZXh0RmlsZUVkaXRvci5nZXRMaXN0Q29udHJvbCh0aGlzLm9wdGlvbmFsKS5nZXRMYXlvdXREYXRhKCk7DQotICAgIGdyaWREYXRhVGV4dC5ob3Jpem9udGFsU3BhbiA9IDE7DQotICAgIEdyaWREYXRhIGdyaWREYXRhQnV0dG9uID0gKEdyaWREYXRhKSB0aGlzLmhlYWRlclRleHRGaWxlRWRpdG9yLmdldEJ1dHRvbkJveENvbnRyb2wodGhpcy5vcHRpb25hbCkuZ2V0TGF5b3V0RGF0YSgpOw0KLSAgICBncmlkRGF0YUJ1dHRvbi5ob3Jpem9udGFsU3BhbiA9IDE7DQotICAgIHZhbGlkYXRlKCk7DQotICB9DQotDQotICAvKioNCi0gICAqIENhbGxlZCB3aGVuIHRoZSBwcm9wZXJ0eSBvZiBhbnkgb2YgdGhlIGZpZWxkIGVkaXRvcnMgY2hhbmdlcw0KLSAgICovDQotICBAT3ZlcnJpZGUNCi0gIHB1YmxpYyB2b2lkIHByb3BlcnR5Q2hhbmdlKGZpbmFsIFByb3BlcnR5Q2hhbmdlRXZlbnQgZXZlbnQpIHsNCi0gICAgc3VwZXIucHJvcGVydHlDaGFuZ2UoZXZlbnQpOw0KLSAgICBpZiAoZXZlbnQuZ2V0UHJvcGVydHkoKS5lcXVhbHMoRmllbGRFZGl0b3IuVkFMVUUpKSB7DQotICAgICAgY2hlY2tTdGF0ZSgpOyAgICAgDQotICAgIH0NCi0gIH0NCi0NCi0gIC8qKg0KLSAgICogSnVzdCByZXR1cm4gdHJ1ZSB3aGVuIHVzZXIgcHJlc3MgT0sNCi0gICAqLw0KLQ0KLSAgQE92ZXJyaWRlDQotICBwdWJsaWMgYm9vbGVhbiBwZXJmb3JtT2soKSB7DQotCSAgaWYoZ2V0RXJyb3JNZXNzYWdlKCkhPW51bGwpew0KLQkgICAgTWVzc2FnZURpYWxvZy5vcGVuRXJyb3IoZ2V0U2hlbGwoKSwgIkVycm9yIGluIENvbmZpZ3VyYXRpb24iLCBnZXRFcnJvck1lc3NhZ2UoKSk7DQotCSAgICByZXR1cm4gZmFsc2U7DQotCSAgfQ0KLSAgICBzdXBlci5wZXJmb3JtT2soKTsNCi0gICAgcmV0dXJuIHRydWU7DQotDQotICB9DQotICBAT3ZlcnJpZGUgDQotICBwcm90ZWN0ZWQgdm9pZCBwZXJmb3JtQXBwbHkoKSB7DQotICAgICAgcGVyZm9ybU9rKCk7DQotICB9DQotDQotICAvKioNCi0gICAqIGNsZWFyIHRoZSBPcHRpb25hbCBmaWVsZHMNCi0gICAqLw0KLQ0KLSAgcHJpdmF0ZSB2b2lkIGNsZWFyT3B0aW9uYWxGaWVsZHMoKSB7DQotICAgIGlmICh0aGlzLm91dHB1dFBhdGhFZGl0b3IuZ2V0U3RyaW5nVmFsdWUoKQ0KLSAgICAgICAgLmVxdWFscyhTQ0EyQW1hbHRoZWFDb25zdGFudHMuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0RGVmYXVsdFN0cmluZyhTQ0EyQW1hbHRoZWFDb25zdGFudHMuT1VUUFVUX1BBVEgpKSkgew0KLSAgICAgIHRoaXMub3V0cHV0UGF0aEVkaXRvci5zZXRTdHJpbmdWYWx1ZSgiIik7DQotICAgIH0NCi0gIH0NCi0NCi0gIHByaXZhdGUgU3RyaW5nIGdldFByb2plY3RQYXRoKCkgew0KLSAgICBJUHJvamVjdFtdIHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3RzKCk7DQotICAgIGlmICgocHJvamVjdCAhPSBudWxsKSAmJiAocHJvamVjdC5sZW5ndGggIT0gMCkpIHsNCi0gICAgICByZXR1cm4gcHJvamVjdFswXS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCk7DQotICAgIH0NCi0gICAgcmV0dXJuICIiOw0KLSAgfQ0KLQ0KLSAgLyoqDQotICAgKiB7QGluaGVyaXREb2N9DQotICAgKi8NCi0gIEBPdmVycmlkZQ0KLSAgcHVibGljIFN0cmluZyBnZXRUb29sSWQoKSB7DQotICAgIHJldHVybiBBcHA0bWNUb29sQ29uc3RhbnRzLlNDQTJBTUFMVEhFQV9UT09MX0lEOw0KLSAgfQ0KLQ0KLSAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlKCl7CSAgDQotCSAgaWYodGhpcy5sbHZtRXhlY3V0YWJsZUVkaXRvci5nZXRTdHJpbmdWYWx1ZSgpLmlzRW1wdHkoKSl7DQotCQkgIHNldEVycm9yTWVzc2FnZSgiUGF0aCB0byB0aGUgTExWTSBleGVjdXRhYmxlIGlzIG1hbmRhdG9yeSBhbmQgY2Fubm90IGJlIGVtcHR5Iik7DQotCSAgfQ0KLQkgIGVsc2UgaWYoIW5ldyBGaWxlKHRoaXMubGx2bUV4ZWN1dGFibGVFZGl0b3IuZ2V0U3RyaW5nVmFsdWUoKSkuZXhpc3RzKCkpew0KLQkJICBzZXRFcnJvck1lc3NhZ2UoIlBhdGggdG8gdGhlIExMVk0gZXhlY3V0YWJsZSBkb2VzIG5vdCBleGlzdCIpOw0KLQkgIH0NCi0JICBlbHNlIGlmICghdGhpcy50YXNrSW5mb0VkaXRvci5nZXRTdHJpbmdWYWx1ZSgpLmlzRW1wdHkoKSAmJiAhdGhpcy50YXNrSW5mb0VkaXRvci5nZXRTdHJpbmdWYWx1ZSgpLmVuZHNXaXRoKCIuY3N2Iikpew0KLQkJCSAgc2V0RXJyb3JNZXNzYWdlKCJUYXNrIEluZm9ybWF0aW9uIGZpbGUgc2hvdWxkIGhhdmUgYSAuY3N2IGV4dGVuc2lvbiIpOw0KLQkJICB9DQotICAgICAgZWxzZSBpZighdGhpcy50YXNrSW5mb0VkaXRvci5nZXRTdHJpbmdWYWx1ZSgpLmlzRW1wdHkoKSAmJiAhbmV3IEZpbGUodGhpcy50YXNrSW5mb0VkaXRvci5nZXRTdHJpbmdWYWx1ZSgpKS5leGlzdHMoKSl7DQotCQkJICBzZXRFcnJvck1lc3NhZ2UoIlRhc2sgSW5mb3JtYXRpb24gZmlsZSBkb2VzIG5vdCBleGlzdCIpOw0KLQkJICB9DQotCSAgZWxzZXsNCi0JCQlzZXRFcnJvck1lc3NhZ2UobnVsbCk7DQotCQkgIH0NCi0JICBkaXNhYmxlT3JFbmFibGVPa0FuZEFwcGx5QnV0dG9uKCk7DQotCSAgfQ0KLSAgDQotICBwcml2YXRlIHZvaWQgYWRkTGlzdGVuZXJzKCkgew0KLQkgICAgIGFkZEZvY3VzTGlzdGVuZXJUb1RleHRCb3godGhpcy5vdXRwdXRQYXRoRWRpdG9yLmdldFRleHRDb250cm9sKHRoaXMub3B0aW9uYWwpKTsNCi0JICAgICBhZGRLZXlMaXN0ZW5lclRvVGV4dEJveCh0aGlzLm91dHB1dFBhdGhFZGl0b3IuZ2V0VGV4dENvbnRyb2wodGhpcy5vcHRpb25hbCkpOw0KLQkgICAgIGFkZEZvY3VzTGlzdGVuZXJUb1RleHRCb3godGhpcy5sbHZtRXhlY3V0YWJsZUVkaXRvci5nZXRUZXh0Q29udHJvbCh0aGlzLm1hbmRhdG9yeSkpOw0KLQkgICAgIGFkZEtleUxpc3RlbmVyVG9UZXh0Qm94KHRoaXMubGx2bUV4ZWN1dGFibGVFZGl0b3IuZ2V0VGV4dENvbnRyb2wodGhpcy5tYW5kYXRvcnkpKTsNCi0JICAgICBhZGRGb2N1c0xpc3RlbmVyVG9UZXh0Qm94KHRoaXMudGFza0luZm9FZGl0b3IuZ2V0VGV4dENvbnRyb2wodGhpcy5vcHRpb25hbCkpOw0KLQkgICAgIGFkZEtleUxpc3RlbmVyVG9UZXh0Qm94KHRoaXMudGFza0luZm9FZGl0b3IuZ2V0VGV4dENvbnRyb2wodGhpcy5vcHRpb25hbCkpOw0KLQkgICAgIGFkZEZvY3VzTGlzdGVuZXJUb1RleHRCb3godGhpcy5idWlsZENtZExvZ0ZpbGVFZGl0b3IuZ2V0VGV4dENvbnRyb2wodGhpcy5vcHRpb25hbCkpOw0KLQkgICAgIGFkZEtleUxpc3RlbmVyVG9UZXh0Qm94KHRoaXMuYnVpbGRDbWRMb2dGaWxlRWRpdG9yLmdldFRleHRDb250cm9sKHRoaXMub3B0aW9uYWwpKTsNCi0JICAgICBhZGRGb2N1c0xpc3RlbmVyVG9UZXh0Qm94KHRoaXMubG9ja0Z1bmN0aW9uc0VkaXRvci5nZXRUZXh0Q29udHJvbCh0aGlzLm9wdGlvbmFsKSk7DQotCSAgICAgYWRkS2V5TGlzdGVuZXJUb1RleHRCb3godGhpcy5sb2NrRnVuY3Rpb25zRWRpdG9yLmdldFRleHRDb250cm9sKHRoaXMub3B0aW9uYWwpKTsNCi0JICB9DQotICANCi0gIHByaXZhdGUgdm9pZCBhZGRGb2N1c0xpc3RlbmVyVG9UZXh0Qm94KGZpbmFsIFRleHQgdCkgew0KLQkgICAgdC5hZGRGb2N1c0xpc3RlbmVyKG5ldyBGb2N1c0xpc3RlbmVyKCkgew0KLQkgICAgICBAT3ZlcnJpZGUNCi0JICAgICAgcHVibGljIHZvaWQgZm9jdXNMb3N0KGZpbmFsIEZvY3VzRXZlbnQgZSkgew0KLQkgICAgICAgIHZhbGlkYXRlKCk7DQotCSAgICAgIH0NCi0JICAgICAgQE92ZXJyaWRlDQotCSAgICAgIHB1YmxpYyB2b2lkIGZvY3VzR2FpbmVkKGZpbmFsIEZvY3VzRXZlbnQgZSkgew0KLQkgICAgICAgIHZhbGlkYXRlKCk7DQotCSAgICAgIH0NCi0JICAgIH0pOw0KLQkgIH0NCi0NCi0JICBwcml2YXRlIHZvaWQgYWRkS2V5TGlzdGVuZXJUb1RleHRCb3goZmluYWwgVGV4dCB0KSB7DQotCSAgICB0LmFkZEtleUxpc3RlbmVyKG5ldyBLZXlMaXN0ZW5lcigpIHsNCi0JICAgICAgQE92ZXJyaWRlDQotCSAgICAgIHB1YmxpYyB2b2lkIGtleVJlbGVhc2VkKGZpbmFsIEtleUV2ZW50IGUpIHsNCi0JICAgICAgICB2YWxpZGF0ZSgpOw0KLQkgICAgICB9DQotCSAgICAgIEBPdmVycmlkZQ0KLQkgICAgICBwdWJsaWMgdm9pZCBrZXlQcmVzc2VkKGZpbmFsIEtleUV2ZW50IGUpIHsNCi0JICAgICAgICB2YWxpZGF0ZSgpOw0KLQkgICAgICB9DQotCSAgICB9KTsNCi0JICB9DQotCSAgDQotCSAgcHJpdmF0ZSB2b2lkIGRpc2FibGVPckVuYWJsZU9rQW5kQXBwbHlCdXR0b24oKSB7DQotCQkgICAgQnV0dG9uIG9rQnV0dG9uID0gbnVsbDsNCi0JCSAgICBQcmVmZXJlbmNlRGlhbG9nIGlQcmVmZXJlbmNlUGFnZUNvbnRhaW5lciA9IChQcmVmZXJlbmNlRGlhbG9nKSBnZXRDb250YWluZXIoKTsNCi0NCi0JCSAgICBDb21wb3NpdGUgYnV0dG9ucyA9IChDb21wb3NpdGUpIGlQcmVmZXJlbmNlUGFnZUNvbnRhaW5lci5idXR0b25CYXI7DQotCQkgICAgQ29udHJvbFtdIGFsbGJ1dHRvbnMgPSBidXR0b25zLmdldENoaWxkcmVuKCk7DQotCQkgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUZvckJ1dHRvbnMgPSAoQ29tcG9zaXRlKSBhbGxidXR0b25zWzFdOw0KLQkJICAgIGZvciAoQ29udHJvbCBiIDogY29tcG9zaXRlRm9yQnV0dG9ucy5nZXRDaGlsZHJlbigpKSB7DQotCQkgICAgICBpZiAoYiBpbnN0YW5jZW9mIEJ1dHRvbikgew0KLQkJICAgICAgICBCdXR0b24gcHJlc2VudEJ1dHRvbiA9IChCdXR0b24pIGI7DQotCQkgICAgICAgIGlmICgiT0siLmVxdWFscyhwcmVzZW50QnV0dG9uLmdldFRleHQoKSkpIHsNCi0JCSAgICAgICAgICBva0J1dHRvbiA9IHByZXNlbnRCdXR0b247DQotCQkgICAgICAgIH0NCi0JCSAgICAgIH0NCi0JCSAgICB9DQotCQkgICAgQnV0dG9uIGFwcGx5QnV0dG9uID0gZ2V0QXBwbHlCdXR0b24oKTsNCi0JCSAgICBpZiAoKG9rQnV0dG9uICE9IG51bGwpICYmIChhcHBseUJ1dHRvbiAhPSBudWxsKSkgew0KLQkJICAgICAgaWYgKGdldEVycm9yTWVzc2FnZSgpICE9IG51bGwpIHsNCi0JCSAgICAJICBzZXRWYWxpZChmYWxzZSk7DQotCQkgICAgICAgIG9rQnV0dG9uLnNldEVuYWJsZWQoZmFsc2UpOw0KLQkJICAgICAgICBhcHBseUJ1dHRvbi5zZXRFbmFibGVkKGZhbHNlKTsNCi0JCSAgICAgIH0NCi0JCSAgICAgIGVsc2Ugew0KLQkJICAgIAkgIHNldFZhbGlkKHRydWUpOw0KLQkJICAgICAgICBva0J1dHRvbi5zZXRFbmFibGVkKHRydWUpOw0KLQkJICAgICAgICBhcHBseUJ1dHRvbi5zZXRFbmFibGVkKHRydWUpOw0KLQkJICAgICAgfQ0KLQkJICAgIH0NCi0JCSAgfQ0KLX0NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvdXRpbC9TQ0FUb0FtYWx0aGVhUHJlZmVyZW5jZVBhZ2VDb25zdGFudHMuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS91dGlsL1NDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZUNvbnN0YW50cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NThlZGExLi4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS91dGlsL1NDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZUNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQotICogDQotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZQ0KLSAqIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wDQotICogd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvDQotICogDQotICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjANCi0gKiANCi0gKiBDb250cmlidXRvcnM6DQotICogICAgIFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICovDQotcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLnV0aWw7DQotDQotDQotLyoqDQotICogVGhpcyBjbGFzcyBkZWZpbmVzIGNvbnN0YW50cyB3aGljaCBhcmUgdXNlZCBpbiBTQ0FUb0FtYWx0aGVhUHJlZmVyZW5jZVBhZ2UgaW1wbGVtZW50YXRpb24uDQotICovDQotcHVibGljIGZpbmFsIGNsYXNzIFNDQVRvQW1hbHRoZWFQcmVmZXJlbmNlUGFnZUNvbnN0YW50cyB7DQotDQotICAvKioNCi0gICAqIFByaXZhdGUgQ29uc3RydWN0b3INCi0gICAqLw0KLSAgcHJpdmF0ZSBTQ0FUb0FtYWx0aGVhUHJlZmVyZW5jZVBhZ2VDb25zdGFudHMoKSB7DQotICAgIC8vIFByaXZhdGUgY29uc3RydWN0b3INCi0gIH0NCi0NCi0NCi0gIC8qKg0KLSAgICogVG9vbCBUaXAgbWVzc2FnZSBmb3IgdGhlIE91dHB1dCBEaXJlY3RvcnkgUGF0aCBmaWVsZC4NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1VUUFVUX1BBVEhfREVGQVVMVF9NRVNTQUdFID0NCi0gICAgICAiQnkgRGVmYXVsdCBhbGwgdGhlIG91dHB1dCBmaWxlcyB3aWxsIGJlIHByZXNlbnQgaW4gc2NhMmFtYWx0aGVhIGRpcmVjdG9yeSB3aGljaCBpcyBwcmVzZW50IGluc2lkZSB0aGUgKFByb2plY3QgZGlyZWN0b3J5KS9fYmluL3NjYTJhbWx0aGVhIjsNCi0NCi0NCi0gIC8qKg0KLSAgICogVG9vbCBUaXAgbWVzc2FnZSBmb3IgdGhlIFRhc2sgSW5mb3JtYXRpb24gRmlsZSBmaWVsZC4NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFTS19JTkZPX0ZJTEVfREVGQVVMVF9NRUFBU0dFID0gIkJ5IGRlZmF1bHQgYWxsIGZ1bmN0aW9ucyBhcmUgdHJlYXRlZCBhcyBydW5uYWJsZXMiOw0KLQ0KLSAgLyoqDQotICAgKiBUb29sIFRpcCBtZXNzYWdlIGZvciB0aGUgQnVpbGQgQ29tbWFuZCBMb2cgRmlsZSBmaWVsZC4NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQlVJTERfTE9HX0ZJTEVfREVGQVVMVF9NRVNTQUdFID0gIkJ5IGRlZmF1bHQgdGhlIGMgZmlsZXMgZnJvbSBwcm9qZWN0IGRpcmVjdG9yeSBhcmUgdXNlZCI7DQotDQotDQotICAvKioNCi0gICAqIFRvb2wgVGlwIG1lc3NhZ2UgZm9yIHRoZSBIZWFkZXIgRGlyZWN0b3JpZXMgZmllbGQuDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEhFQURFUl9URVhUX0ZJTEVfREVGQVVMVF9NRVNTQUdFID0NCi0gICAgICAiQnkgZGVmYXVsdCB0aGUgaGVhZGVyIGZpbGVzIGZyb20gdGhlIHByb2plY3QgZGlyZWN0b3J5IGFyZSB1c2VkIjsNCi0NCi0gIC8qKg0KLSAgICogVG9vbCBUaXAgbWVzc2FnZSBmb3IgdGhlIExvY2sgRnVuY3Rpb24gRmlsZSBmaWVsZC4NCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DS19GVU5DVElPTlNfREVGQVVMVF9NRVNTQUdFID0gIkJ5IGRlZmF1bHQgYW4gaW50ZXJuYWwgIGxvY2sgZnVuY3Rpb24gZmlsZSB3aWxsIGJlIHVzZWQiOw0KLQ0KLSAgLyoqDQotICAgKiBDb25maWd1cmUgb3B0aW9uYWwgZmllbGRzIGNoZWNrIGJveCB0ZXh0DQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR1VSRSA9ICJDb25maWd1cmUgb3B0aW9uYWwgZmllbGRzIjsNCi0NCi0gIC8qKg0KLSAgICogQnJvd3NlIGJ1dHRvbiB0ZXh0Lg0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBCUk9XU0UgPSAiQnJvd3NlLi4uIjsNCi0NCi19DQpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL3dpemFyZC9TQ0EyQW1hbHRoZWFFeGVjdXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL3dpemFyZC9TQ0EyQW1hbHRoZWFFeGVjdXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5YjhmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQTJBbWFsdGhlYUV4ZWN1dG9yLmphdmEKQEAgLTAsMCArMSwxMjMgQEAKKy8qKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwIFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgMi4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLworICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEVQTC0yLjAgQ29udHJpYnV0b3JzOiBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkud2l6YXJkOworCitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EubG9nZ2luZy5tYW5hZ2VyLkxvZ21hbmFnZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS51dGlsLkFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuSUFtYWx0aGVhR2VuZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5TQ0FUb29sc1VJVXRpbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwuQXBwNG1jVG9vbENvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmxsdm0uaGVhZGxlc3MuR2VuZXJhdGVBbWFsdGhlYU1vZGVsRnJvbUxMVk07CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5sbHZtLmhlYWRsZXNzLlNDQTJBTUFMVEhFQVN0YXJ0ZXJQcm9wZXJ0aWVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkuQWN0aXZhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzLmNvbnN0YW50cy5TQ0EyQW1hbHRoZWFDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CitpbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5CYWNraW5nU3RvcmVFeGNlcHRpb247CisKKy8qKgorICogVGhlIHNjYTJBbWFsdGhlYSBleGVjdXRpb24gc3RhcnRzIHdpdGggdGhpcyBjbGFzcy4KKyAqLworcHVibGljIGNsYXNzIFNDQTJBbWFsdGhlYUV4ZWN1dG9yIGltcGxlbWVudHMgSUFtYWx0aGVhR2VuZXJhdG9yIHsKKworICBwcml2YXRlIFByb3BlcnRpZXMgcHJvcGVydGllczsKKworCisgIEBPdmVycmlkZQorICBwdWJsaWMgSVN0YXR1cyBleGVjdXRlKGZpbmFsIElQcm9ncmVzc01vbml0b3IgaVByb2dyZXNzTW9uaXRvciwgZmluYWwgUHJvcGVydGllcyBwcm9wZXJ0aWVzKSB7CisgICAgSVN0YXR1cyBzdGF0dXMgPSBTdGF0dXMuT0tfU1RBVFVTOworICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisgICAgc3RvcmVVc2VyU2VsZWN0aW9uVG9Qcm9qZWN0UHJlZmVyZW5jZXMoKTsKKyAgICBTQ0FQcm9ncmVzc01vbml0b3Igc2NhUHJvZ3Jlc3NNb25pdG9yID0gbmV3IFNDQVByb2dyZXNzTW9uaXRvcihKb2IuZ2V0Sm9iTWFuYWdlcigpLmN1cnJlbnRKb2IoKSk7CisgICAgVGhyZWFkIHByb2dyZXNzTW9uaXRvck9ic2VydmVyVGhyZWFkID0gc2NhUHJvZ3Jlc3NNb25pdG9yLmNyZWF0ZUluZmluaXRlUHJvZ3Jlc3NNb25pdG9yKGlQcm9ncmVzc01vbml0b3IpOworICAgIHRyeSB7CisgICAgICBwcm9ncmVzc01vbml0b3JPYnNlcnZlclRocmVhZC5zdGFydCgpOworICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IFNDQVBvcHVwKEFwcDRtY1Rvb2xDb25zdGFudHMuU0NBMkFNQUxUSEVBX1RPT0xfSUQsCisgICAgICAgICAgU0NBMkFtYWx0aGVhQ29uc3RhbnRzLkFNQUxUSEVBX0dFTkVSQVRJT05fX1BST0pFQ1RfU0laRV9NRVNTQUdFLCBNZXNzYWdlRGlhbG9nLklORk9STUFUSU9OKSk7CisgICAgICBTQ0EyQU1BTFRIRUFTdGFydGVyUHJvcGVydGllcyBzY2EyQW1hbHRoZWFTdGFydGVyUHJvcGVydGllcyA9IG5ldyBTQ0EyQU1BTFRIRUFTdGFydGVyUHJvcGVydGllcygpOworICAgICAgc2NhMkFtYWx0aGVhU3RhcnRlclByb3BlcnRpZXMKKyAgICAgICAgICAuc2V0UHJvamVjdFBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpKTsKKyAgICAgIHNjYTJBbWFsdGhlYVN0YXJ0ZXJQcm9wZXJ0aWVzCisgICAgICAgICAgLnNldE91dFB1dFBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5PVVRQVVRfRElSRUNUT1JZKSk7CisgICAgICBzY2EyQW1hbHRoZWFTdGFydGVyUHJvcGVydGllcy5nZXRMbHZtU3RhcnRlclByb3BlcnRpZXMoKQorICAgICAgICAgIC5zZXRUcmF2ZXJzZUFzdEZpbGUodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5BU1RfUEFUSF9LRVkpKTsKKyAgICAgIHNjYTJBbWFsdGhlYVN0YXJ0ZXJQcm9wZXJ0aWVzCisgICAgICAgICAgLnNldFRhc2tMaXN0RmlsZSh0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLlRBU0tfU0NIRURVTElOR19GSUxFKSk7CisgICAgICBzY2EyQW1hbHRoZWFTdGFydGVyUHJvcGVydGllcworICAgICAgICAgIC5zZXRIRGlyRmlsZVBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5IRElSX0xJU1RfS0VZKSk7CisgICAgICBzY2EyQW1hbHRoZWFTdGFydGVyUHJvcGVydGllcworICAgICAgICAgIC5zZXRCdWlsZExvZ0ZpbGUodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5CVUlMRF9DTURTX0xPR19GSUxFKSk7CisgICAgICBzY2EyQW1hbHRoZWFTdGFydGVyUHJvcGVydGllcworICAgICAgICAgIC5zZXRMb2NraW5mb0ZpbGUodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5PU19MT0NLX0ZJTEUpKTsKKyAgICAgIHNjYTJBbWFsdGhlYVN0YXJ0ZXJQcm9wZXJ0aWVzLnNldElzU3RydWN0TWVtYmVyRW5hYmxlZCgKKyAgICAgICAgICBCb29sZWFuLnBhcnNlQm9vbGVhbih0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLkVOQUJMRV9TVFJVQ1RfTUVNQkVSX0tFWSkpKTsKKworICAgICAgR2VuZXJhdGVBbWFsdGhlYU1vZGVsRnJvbUxMVk0gZ2VuZXJhdG9yID0gbmV3IEdlbmVyYXRlQW1hbHRoZWFNb2RlbEZyb21MTFZNKHNjYTJBbWFsdGhlYVN0YXJ0ZXJQcm9wZXJ0aWVzKTsKKyAgICAgIFNDQTJBbWFsdGhlYVRpbWVyIHNjYVRpbWVyID0gbmV3IFNDQTJBbWFsdGhlYVRpbWVyKCk7CisgICAgICBzY2FUaW1lci5zdGFydFRpbWVyKCk7CisgICAgICBzdGF0dXMgPSBnZW5lcmF0b3IucnVuKCk7CisgICAgICBzY2FQcm9ncmVzc01vbml0b3Iuc2V0R2VuZXJhdGlvbkRvbmUodHJ1ZSk7CisKKyAgICAgIGlmICgoVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZy5nZXRDdXJyZW50UnVubmluZ1Byb2Nlc3MoKS5leGl0VmFsdWUoKSAhPSAwKSAmJgorICAgICAgICAgICFVdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLmlzTW9kZWxHZW5lcmF0aW9uY2FuY2VsbGVkKCkpIHsKKyAgICAgICAgRGlzcGxheS5nZXREZWZhdWx0KCkuc3luY0V4ZWMobmV3IFNDQVBvcHVwKEFwcDRtY1Rvb2xDb25zdGFudHMuU0NBMkFNQUxUSEVBX1RPT0xfSUQsCisgICAgICAgICAgICBTQ0EyQW1hbHRoZWFDb25zdGFudHMuUEFSU0lOR19FUlJPUiwgTWVzc2FnZURpYWxvZy5JTkZPUk1BVElPTikpOworICAgICAgICByZXR1cm4gU3RhdHVzLkNBTkNFTF9TVEFUVVM7CisgICAgICB9CisgICAgfQorICAgIGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgTG9nbWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvZ0V4Y2VwdGlvbih0aGlzLmdldENsYXNzKCksIGUsIEFjdGl2YXRvci5QTFVHSU5fSUQpOworICAgICAgaWYgKHByb2dyZXNzTW9uaXRvck9ic2VydmVyVGhyZWFkICE9IG51bGwpIHsKKyAgICAgICAgd2FpdEZvclRocmVhZChwcm9ncmVzc01vbml0b3JPYnNlcnZlclRocmVhZCk7CisgICAgICB9CisgICAgICBzY2FQcm9ncmVzc01vbml0b3IuZ2V0U3ViTW9uaXRvcigpLmRvbmUoKTsKKyAgICAgIHJldHVybiBTdGF0dXMuQ0FOQ0VMX1NUQVRVUzsKKyAgICB9CisKKyAgICB3YWl0Rm9yVGhyZWFkKHByb2dyZXNzTW9uaXRvck9ic2VydmVyVGhyZWFkKTsKKyAgICBzY2FQcm9ncmVzc01vbml0b3IuZ2V0U3ViTW9uaXRvcigpLmRvbmUoKTsKKyAgICBVdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLnNldEN1cnJlbnRSdW5uaW5nUHJvY2VzcyhudWxsKTsKKyAgICByZXR1cm4gc3RhdHVzOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHN0b3JlVXNlclNlbGVjdGlvblRvUHJvamVjdFByZWZlcmVuY2VzKCkgeworICAgIERpc3BsYXkuZ2V0RGVmYXVsdCgpLnN5bmNFeGVjKCgpIC0+IHsKKyAgICAgIElFY2xpcHNlUHJlZmVyZW5jZXMgcHJvamVjdFByZWZlcmVuY2VzID0gU0NBVG9vbHNVSVV0aWwKKyAgICAgICAgICAubG9hZFByb2plY3RTY29wZVByZWZzKFNDQVRvb2xzVUlVdGlsLmdldEN1cnJlbnRQcm9qZWN0UmVzb3VyY2UoKSwgQXBwNG1jVG9vbENvbnN0YW50cy5TQ0EyQU1BTFRIRUFfVE9PTF9JRCk7CisgICAgICB0cnkgeworICAgICAgICBwcm9qZWN0UHJlZmVyZW5jZXMuY2xlYXIoKTsKKyAgICAgICAgZm9yIChNYXAuRW50cnk8T2JqZWN0LCBPYmplY3Q+IGUgOiB0aGlzLnByb3BlcnRpZXMuZW50cnlTZXQoKSkgeworICAgICAgICAgIHByb2plY3RQcmVmZXJlbmNlcy5wdXQoZS5nZXRLZXkoKS50b1N0cmluZygpLCBlLmdldFZhbHVlKCkudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgcHJvamVjdFByZWZlcmVuY2VzLmZsdXNoKCk7CisgICAgICB9CisgICAgICBjYXRjaCAoQmFja2luZ1N0b3JlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgTG9nbWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvZ0V4Y2VwdGlvbih0aGlzLmdldENsYXNzKCksIGUsIEFjdGl2YXRvci5QTFVHSU5fSUQpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgcHJpdmF0ZSB2b2lkIHdhaXRGb3JUaHJlYWQoZmluYWwgVGhyZWFkIHRocmVhZCkgeworICAgIHRyeSB7CisgICAgICBpZiAodGhyZWFkICE9IG51bGwpIHsKKyAgICAgICAgdGhyZWFkLmpvaW4oKTsKKyAgICAgIH0KKyAgICB9CisgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2coZS5nZXRNZXNzYWdlKCkpOworICAgIH0KKyAgfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQTJBbWFsdGhlYVRpbWVyLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQTJBbWFsdGhlYVRpbWVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjNzM0MQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS93aXphcmQvU0NBMkFtYWx0aGVhVGltZXIuamF2YQpAQCAtMCwwICsxLDcwIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLndpemFyZDsKKworaW1wb3J0IGphdmEudXRpbC5UaW1lcjsKK2ltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51dGlsLkFwcDRtY1Rvb2xDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5VdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuY29uc3RhbnRzLlNDQTJBbWFsdGhlYUNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIFNDQTJBbWFsdGhlYVRpbWVyIHsKKworICBjbGFzcyBTQ0EyQW1hbHRoZWFUaW1lclRhc2sgZXh0ZW5kcyBUaW1lclRhc2sgeworCisgICAgcHJpdmF0ZSBmaW5hbCBUaW1lciB0aW1lcjsKKyAgICBwcml2YXRlIGZpbmFsIEpvYiBlY2xpcHNlSm9iOworCisgICAgcHVibGljIFNDQTJBbWFsdGhlYVRpbWVyVGFzayhmaW5hbCBUaW1lciB0aW1lckluc3RhbmNlLCBmaW5hbCBKb2IgZWNsaXBzZUpvYikgeworICAgICAgdGhpcy50aW1lciA9IHRpbWVySW5zdGFuY2U7CisgICAgICB0aGlzLmVjbGlwc2VKb2IgPSBlY2xpcHNlSm9iOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgIGlmICgodGhpcy5lY2xpcHNlSm9iLmdldFRocmVhZCgpICE9IG51bGwpICYmIHRoaXMuZWNsaXBzZUpvYi5nZXRUaHJlYWQoKS5pc0FsaXZlKCkpIHsKKyAgICAgICAgU0NBUG9wdXAgc2NhUG9wdXAgPSBuZXcgU0NBUG9wdXAoQXBwNG1jVG9vbENvbnN0YW50cy5TQ0EyQU1BTFRIRUFfVE9PTF9JRCwKKyAgICAgICAgICAgIFNDQTJBbWFsdGhlYUNvbnN0YW50cy5BTUFMVEhFQV9HRU5FUkFUSU9OX1RPT19MT05HLCBNZXNzYWdlRGlhbG9nLkNPTkZJUk0pOworICAgICAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYyhzY2FQb3B1cCk7CisgICAgICAgIGludCBjb25maXJtYXRpb25TdGF0dXMgPSBzY2FQb3B1cC5nZXREaWFsb2dTdGF0dXMoKSA/IDAgOiAxOworICAgICAgICBpZiAoY29uZmlybWF0aW9uU3RhdHVzID09IDEpIHsKKyAgICAgICAgICB0aGlzLnRpbWVyLmNhbmNlbCgpOworICAgICAgICAgIFByb2Nlc3MgcCA9IFV0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuZ2V0Q3VycmVudFJ1bm5pbmdQcm9jZXNzKCk7CisgICAgICAgICAgaWYgKHAgIT0gbnVsbCkgeworICAgICAgICAgICAgcC5kZXN0cm95Rm9yY2libHkoKTsKKyAgICAgICAgICAgIFV0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuc2V0TW9kZWxHZW5lcmF0aW9uY2FuY2VsbGVkKHRydWUpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHRoaXMudGltZXIuY2FuY2VsKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIFRoaXMgbWV0aG9kIHN0YXJ0cyB0aGUgdGltZXIuVGhlIHRpbWVyIGlzIHNjZWR1bGVkIHRvIHJ1biBhZnRlciBldmVyeSA0MG1pbnMuRXZlcnkgdGltZSB0aGUgdGltZXIgcnVucyBpdCBjaGVja3MgaWYKKyAgICogdGhlIGVjbGlwc2Ugam9iIGlzIHN0aWxsIGFsaXZlLiBJZiBzbyBpdCBwb3BzIHVwIGEgY29uZmlybWF0aW9uIGRpYWxvZyBhc2tpbmcgaWYgdGhlIHVzZXIgd2lzaGVzIHRvIGNvbnRpbnVlLiBJZgorICAgKiB0aGUgdXNlciB3aXNoZXMgdG8gY29udGludWUgdGhlIHRpbWVyIGtlZXBzIHJ1bm5pbmcgYW5kIGtlZXBzIHNob3dpbmcgdGhlIHBvcHVwIGFmdGVyIGV2ZXJ5IDQwIG1pbnMgYW5kIGlmIHRoZSB1c2VyCisgICAqIHdpc2hlcyB0byBhYm9ydCB0aGVuIGl0IGNhbmNlbHMgdGhlIHRpbWVyIGFuZCBraWxscyB0aGUgc2NhLmV4ZSBwcm9jZXNzLklmIHRoZSBlY2xpcHNlIGpvYiBpcyBub3QgYWxpdmUgaXQgY2FuY2VscworICAgKiB0aGUgdGltZXIuCisgICAqLworICBwdWJsaWMgdm9pZCBzdGFydFRpbWVyKCkgeworICAgIGludCB0aW1lckRlbGF5ID0gNDAgKiA2MCAqIDEwMDA7CisgICAgaW50IHRpbWVyUGVyaW9kID0gNDAgKiA2MCAqIDEwMDA7CisgICAgSm9iIGVjbGlwc2VKb2IgPSBKb2IuZ2V0Sm9iTWFuYWdlcigpLmN1cnJlbnRKb2IoKTsKKyAgICBUaW1lciB0ID0gbmV3IFRpbWVyKCk7CisgICAgdC5zY2hlZHVsZUF0Rml4ZWRSYXRlKG5ldyBTQ0EyQW1hbHRoZWFUaW1lclRhc2sodCwgZWNsaXBzZUpvYiksIHRpbWVyRGVsYXksIHRpbWVyUGVyaW9kKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQTJBbWFsdGhlYVdpZGdldC5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL3dpemFyZC9TQ0EyQW1hbHRoZWFXaWRnZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmE2ZjJjCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL3dpemFyZC9TQ0EyQW1hbHRoZWFXaWRnZXQuamF2YQpAQCAtMCwwICsxLDI4NyBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS53aXphcmQ7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpLnV0aWwuQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5CdXR0b25JbmZvOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5CdXR0b25UeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5MYWJlbExpc3RCdXR0b25DcmVhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5MYWJlbFRleHRCdXR0b25DcmVhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkudXRpbC5XaXphcmRDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXRzLldpZGdldDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLkFjdGl2YXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmxheW91dC5HcmlkRGF0YUZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmV2ZW50cy5TZWxlY3Rpb25FdmVudDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpcmVjdG9yeURpYWxvZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OworaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLkpvaW5lcjsKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlNwbGl0dGVyOworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuTGlzdHM7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSB0byBjcmVhdGUgVUkgY29udHJvbHMgZm9yIFNDQTJBbWFsdGhlYSB3aWRnZXQuCisgKi8KK3B1YmxpYyBjbGFzcyBTQ0EyQW1hbHRoZWFXaWRnZXQgZXh0ZW5kcyBXaWRnZXQgeworCisgIHByaXZhdGUgTGFiZWxUZXh0QnV0dG9uQ3JlYXRvciBhc3RQYXRoOworICBwcml2YXRlIExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IgYnVpbGRDbW1hbmRsb2dQYXRoOworICBwcml2YXRlIGZpbmFsIFByb3BlcnRpZXMgcHJvcGVydGllczsKKyAgcHJpdmF0ZSBCdXR0b24gZ2VuZXJhdGVTdHJ1Y3RNZW1iZXI7CisgIHByaXZhdGUgTGFiZWxMaXN0QnV0dG9uQ3JlYXRvciBoZWFkZXJMaXN0OworCisgIC8qKgorICAgKiBAcGFyYW0gcGFyZW50IENvbXBvc2l0ZSBpbnN0YW5jZQorICAgKiBAcGFyYW0gcHJvcGVydGllcyBQcm9wZXJ0aWVzIGluc3RhbmNlCisgICAqLworICBwdWJsaWMgU0NBMkFtYWx0aGVhV2lkZ2V0KGZpbmFsIENvbXBvc2l0ZSBwYXJlbnQsIGZpbmFsIFByb3BlcnRpZXMgcHJvcGVydGllcykgeworICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisgICAgY3JlYXRlQ29tcG9uZW50KHBhcmVudCk7CisgIH0KKworICAvKioKKyAgICogVGhlIG1ldGhvZHMgY3JlYXRlcyB0aGUgVUkgZWxlbWVudHMgdXNpbmcgdGhlIFNXVCBXaWRnZXRzLiBUaGUgVUkgY29uc2lzdHMgb2YgYSlDaGVjay1ib3ggZm9yIGVuYWJsaW5nIHN0cnVjdAorICAgKiBtZW1iZXJzIGIpUGF0aCB0byBMTFZNIEV4ZWN1dGFibGUgdGV4dCBib3ggYylIZWFkZXIgRGlyZWN0b3JpZXMgZClCdWlsZCBjbWQgbG9nIGZpbGUgdGV4dCBib3guCisgICAqCisgICAqIEBwYXJhbSBwYXJlbnQgQ29tcG9zaXRlIGluc3RhbmNlLgorICAgKi8KKyAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUNvbXBvbmVudChmaW5hbCBDb21wb3NpdGUgcGFyZW50KSB7CisgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUZvckNoZWNrQm94ZXMgPSBuZXcgQ29tcG9zaXRlKHBhcmVudCwgU1dULk5PTkUpOworICAgIGNvbXBvc2l0ZUZvckNoZWNrQm94ZXMuc2V0TGF5b3V0KG5ldyBHcmlkTGF5b3V0KDEsIHRydWUpKTsKKworICAgIHRoaXMuZ2VuZXJhdGVTdHJ1Y3RNZW1iZXIgPSBuZXcgQnV0dG9uKGNvbXBvc2l0ZUZvckNoZWNrQm94ZXMsIFNXVC5DSEVDSyk7CisgICAgdGhpcy5nZW5lcmF0ZVN0cnVjdE1lbWJlci5zZXRUZXh0KFdpemFyZENvbnN0YW50cy5HRU5FUkFURV9TVFJVQ1RfTUVNQkVSKTsKKyAgICB0aGlzLmdlbmVyYXRlU3RydWN0TWVtYmVyLnNldExheW91dERhdGEobmV3IEdyaWREYXRhKFNXVC5DRU5URVIsIFNXVC5OT05FLCB0cnVlLCBmYWxzZSkpOworCisgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IG5ldyBDb21wb3NpdGUocGFyZW50LCBTV1QuTk9ORSk7CisgICAgR3JpZERhdGFGYWN0b3J5LmRlZmF1bHRzRm9yKGNvbXBvc2l0ZSkuZ3JhYih0cnVlLCBmYWxzZSkuc3BhbigzLCAxKS5hcHBseVRvKGNvbXBvc2l0ZSk7CisgICAgY29tcG9zaXRlLnNldExheW91dChuZXcgR3JpZExheW91dCgzLCBmYWxzZSkpOworCisgICAgdGhpcy5hc3RQYXRoID0gbmV3IExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IoY29tcG9zaXRlLCBXaXphcmRDb25zdGFudHMuTExWTV9QQVRIX1RFWFQsICJhc3RfcGF0aCIsCisgICAgICAgIFdpemFyZENvbnN0YW50cy5CUk9XU0UsICJhc3RfcGF0aF9icm93c2UiKTsKKyAgICB0aGlzLmFzdFBhdGguc2V0UHJvamVjdFBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpKTsKKworICAgIHRoaXMuYnVpbGRDbW1hbmRsb2dQYXRoID0gbmV3IExhYmVsVGV4dEJ1dHRvbkNyZWF0b3IoY29tcG9zaXRlLCBXaXphcmRDb25zdGFudHMuQlVJTERfQ01EX0ZJTEUsICJidWlsZF9jbWRfbG9nIiwKKyAgICAgICAgV2l6YXJkQ29uc3RhbnRzLkJST1dTRSwgImJ1aWxkX2NtZF9sb2dfYnJvd3NlIik7CisgICAgdGhpcy5idWlsZENtbWFuZGxvZ1BhdGguc2V0UHJvamVjdFBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpKTsKKworICAgIGphdmEudXRpbC5TZXQ8QnV0dG9uSW5mbz4gYnV0dG9uSW5mb0xpc3QgPSBuZXcgSGFzaFNldDxCdXR0b25JbmZvPigpOworICAgIEJ1dHRvbkluZm8gbmV3QnV0dG9uID0gbmV3IEJ1dHRvbkluZm8oV2l6YXJkQ29uc3RhbnRzLk5FV19CVVRUT04sICJuZXciLCBCdXR0b25UeXBlLkJST1dTRV9GT0xERVIpOworICAgIEJ1dHRvbkluZm8gcmVtb3ZlQnV0dG9uID0gbmV3IEJ1dHRvbkluZm8oV2l6YXJkQ29uc3RhbnRzLlJFTU9WRV9CVVRUT04sICJyZW1vdmUiLCBCdXR0b25UeXBlLlJFTU9WRSk7CisgICAgYnV0dG9uSW5mb0xpc3QuYWRkKG5ld0J1dHRvbik7CisgICAgYnV0dG9uSW5mb0xpc3QuYWRkKHJlbW92ZUJ1dHRvbik7CisKKyAgICB0aGlzLmhlYWRlckxpc3QgPSBuZXcgTGFiZWxMaXN0QnV0dG9uQ3JlYXRvcihjb21wb3NpdGUsIFdpemFyZENvbnN0YW50cy5IRUFERVJfRElSRUNUT1JJRVMsCisgICAgICAgICJoZWFkZXJfZGlyZWN0b3JpZXNfbGlzdCIsIGJ1dHRvbkluZm9MaXN0KTsKKyAgICB0aGlzLmhlYWRlckxpc3Quc2V0UHJvamVjdFBhdGgodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpKTsKKworICAgIGFkZExpc3RlbmVycygpOworICAgIGluaXRpYWxpc2VPcHRpb25zKCk7CisgIH0KKworCisgIC8qKgorICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBwcm9wZXJ0aWVzIGluc3RhbmNlLgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBQcm9wZXJ0aWVzIGdldE9wdGlvbnMoKSB7CisgICAgcmV0dXJuIHRoaXMucHJvcGVydGllczsKKyAgfQorCisKKyAgLyoqCisgICAqIFRoaXMgbWV0aG9kIGJhc2ljYWxseSB2YWxpZGF0ZXMgdGhlIHZhbHVlcyBpbiB0aGUgVUkgZWxlbWVudHMgYW5kIHNldCBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlLgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBJU3RhdHVzIHZhbGlkYXRlKCkgeworICAgIGlmICh0aGlzLmFzdFBhdGguZ2V0VGV4dEZpZWxkKCkuZ2V0VGV4dCgpLmlzRW1wdHkoKSkgeworICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQWN0aXZhdG9yLlBMVUdJTl9JRCwgV2l6YXJkQ29uc3RhbnRzLkxMVk1fUEFUSF9FTVBUWV9FUlJPUl9NRVNTQUdFKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXRoaXMuYXN0UGF0aC5nZXRUZXh0RmllbGQoKS5nZXRUZXh0KCkuaXNFbXB0eSgpICYmCisgICAgICAgICFuZXcgRmlsZSh0aGlzLmFzdFBhdGguZ2V0VGV4dEZpZWxkKCkuZ2V0VGV4dCgpKS5leGlzdHMoKSAmJgorICAgICAgICAhbmV3IEZpbGUodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpICsKKyAgICAgICAgICAgIHRoaXMuYXN0UGF0aC5nZXRUZXh0RmllbGQoKS5nZXRUZXh0KCkpLmV4aXN0cygpKSB7CisgICAgICByZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLkVSUk9SLCBBY3RpdmF0b3IuUExVR0lOX0lELCBXaXphcmRDb25zdGFudHMuTExWTV9QQVRIX0VSUk9SX01FU1NBR0UpOworICAgIH0KKyAgICBlbHNlIGlmKG5ldyBGaWxlKHRoaXMuYXN0UGF0aC5nZXRUZXh0RmllbGQoKS5nZXRUZXh0KCkpLmlzRmlsZSgpfHxuZXcgRmlsZSh0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLlBST0pFQ1RfUEFUSCkgKworICAgICAgICAgICAgdGhpcy5hc3RQYXRoLmdldFRleHRGaWVsZCgpLmdldFRleHQoKSkuaXNGaWxlKCkpIHsKKyAgICAJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUixBY3RpdmF0b3IuUExVR0lOX0lELFdpemFyZENvbnN0YW50cy5MTFZNX1BBVEhfRElSX01FU1NBR0UpOworICAgIH0KKyAgICBlbHNlIGlmICghdGhpcy5idWlsZENtbWFuZGxvZ1BhdGguZ2V0VGV4dEZpZWxkKCkuZ2V0VGV4dCgpLmlzRW1wdHkoKSAmJgorICAgICAgICAhbmV3IEZpbGUodGhpcy5idWlsZENtbWFuZGxvZ1BhdGguZ2V0VGV4dEZpZWxkKCkuZ2V0VGV4dCgpKS5leGlzdHMoKSAmJgorICAgICAgICAhbmV3IEZpbGUodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5QUk9KRUNUX1BBVEgpICsKKyAgICAgICAgICAgIHRoaXMuYnVpbGRDbW1hbmRsb2dQYXRoLmdldFRleHRGaWVsZCgpLmdldFRleHQoKSkuZXhpc3RzKCkpIHsKKyAgICAgIHJldHVybiBuZXcgU3RhdHVzKElTdGF0dXMuRVJST1IsIEFjdGl2YXRvci5QTFVHSU5fSUQsIFdpemFyZENvbnN0YW50cy5CVUlMRF9DTURfRklMRV9FUlJPUl9NRVNTQUdFKTsKKyAgICB9CisgICAgZWxzZSBpZiAoIXRoaXMuYnVpbGRDbW1hbmRsb2dQYXRoLmdldFRleHRGaWVsZCgpLmdldFRleHQoKS5pc0VtcHR5KCkgJiYKKyAgICAgICAgKCEodGhpcy5idWlsZENtbWFuZGxvZ1BhdGguZ2V0VGV4dEZpZWxkKCkuZ2V0VGV4dCgpLmVuZHNXaXRoKCIubG9nIikpKSkgeworICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQWN0aXZhdG9yLlBMVUdJTl9JRCwgV2l6YXJkQ29uc3RhbnRzLkJVSUxEX0NNRF9GSUxFX0VYVEVOU0lPTl9FUlJPUl9NRVNTQUdFKTsKKyAgICB9CisgICAgZWxzZSBpZiAodGhpcy5oZWFkZXJMaXN0LmdldExpc3RCb3goKS5nZXRJdGVtQ291bnQoKSA+IDApIHsKKyAgICAgIGZvciAoU3RyaW5nIGhEaXIgOiB0aGlzLmhlYWRlckxpc3QuZ2V0TGlzdEJveCgpLmdldEl0ZW1zKCkpIHsKKyAgICAgICAgaWYgKCFuZXcgRmlsZShoRGlyKS5leGlzdHMoKSAmJgorICAgICAgICAgICAgIW5ldyBGaWxlKHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuUFJPSkVDVF9QQVRIKSArIGhEaXIpLmV4aXN0cygpKSB7CisgICAgICAgICAgcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgQWN0aXZhdG9yLlBMVUdJTl9JRCwgV2l6YXJkQ29uc3RhbnRzLkhFQURFUl9MSVNUX0VSUk9SX01FU1NBR0UpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBTdGF0dXMuT0tfU1RBVFVTOworCisgIH0KKworCisgIC8qKgorICAgKiBUaGlzIG1ldGhvZCBhZGRzIHRoZSBsaXN0ZW5lcnMgdG8gdGhlIFVJIGVsZW1ldHMgb2YgdGhpcyB3aWRnZXQuCisgICAqLworICBwcml2YXRlIHZvaWQgYWRkTGlzdGVuZXJzKCkgeworICAgIHRoaXMuZ2VuZXJhdGVTdHJ1Y3RNZW1iZXIuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworICAgICAgICBTQ0EyQW1hbHRoZWFXaWRnZXQudGhpcy5wcm9wZXJ0aWVzLnNldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5FTkFCTEVfU1RSVUNUX01FTUJFUl9LRVksCisgICAgICAgICAgICBCb29sZWFuLnRvU3RyaW5nKFNDQTJBbWFsdGhlYVdpZGdldC50aGlzLmdlbmVyYXRlU3RydWN0TWVtYmVyLmdldFNlbGVjdGlvbigpKSk7CisgICAgICB9CisgICAgfSk7CisKKyAgICB0aGlzLmFzdFBhdGguZ2V0QnV0dG9uKCkuYWRkU2VsZWN0aW9uTGlzdGVuZXIobmV3IFNlbGVjdGlvbkFkYXB0ZXIoKSB7CisKKyAgICAgIEBPdmVycmlkZQorICAgICAgcHVibGljIHZvaWQgd2lkZ2V0U2VsZWN0ZWQoZmluYWwgU2VsZWN0aW9uRXZlbnQgZSkgeworICAgICAgICBEaXJlY3RvcnlEaWFsb2cgZGlhbG9nID0gbmV3IERpcmVjdG9yeURpYWxvZyhEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRBY3RpdmVTaGVsbCgpKTsKKyAgICAgICAgZGlhbG9nLnNldEZpbHRlclBhdGgoU0NBMkFtYWx0aGVhV2lkZ2V0LnRoaXMuYXN0UGF0aC5wcm92aWRlRGlhbG9nTG9jYXRpb24oKSk7CisgICAgICAgIFN0cmluZyBhc3RfZGlyX1BhdGggPSBkaWFsb2cub3BlbigpOworICAgICAgICBpZiAoYXN0X2Rpcl9QYXRoICE9IG51bGwpIHsKKyAgICAgICAgICBTQ0EyQW1hbHRoZWFXaWRnZXQudGhpcy5hc3RQYXRoLnNldEZpbGVQYXRoKGFzdF9kaXJfUGF0aCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9KTsKKworICAgIHRoaXMuYXN0UGF0aC5nZXRUZXh0RmllbGQoKS5hZGRNb2RpZnlMaXN0ZW5lcihldmVudCAtPiB7CisgICAgICB0aGlzLnByb3BlcnRpZXMuc2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLkFTVF9QQVRIX0tFWSwKKyAgICAgICAgICB0aGlzLmFzdFBhdGguZ2V0QWJzb2x1dGVGaWxlUGF0aCgpKTsKKyAgICAgIHNldENoYW5nZWQoKTsKKyAgICAgIG5vdGlmeU9ic2VydmVycygpOworCisgICAgfSk7CisKKyAgICB0aGlzLmJ1aWxkQ21tYW5kbG9nUGF0aC5nZXRCdXR0b24oKS5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKworICAgICAgQE92ZXJyaWRlCisgICAgICBwdWJsaWMgdm9pZCB3aWRnZXRTZWxlY3RlZChmaW5hbCBTZWxlY3Rpb25FdmVudCBlKSB7CisgICAgICAgIEZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2coRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKSk7CisgICAgICAgIGRpYWxvZy5zZXRGaWx0ZXJQYXRoKFNDQTJBbWFsdGhlYVdpZGdldC50aGlzLmJ1aWxkQ21tYW5kbG9nUGF0aC5wcm92aWRlRGlhbG9nTG9jYXRpb24oKSk7CisgICAgICAgIFN0cmluZyBidWlsZF9jbWRfZmlsZV9wYXRoID0gZGlhbG9nLm9wZW4oKTsKKyAgICAgICAgaWYgKGJ1aWxkX2NtZF9maWxlX3BhdGggIT0gbnVsbCkgeworICAgICAgICAgIFNDQTJBbWFsdGhlYVdpZGdldC50aGlzLmJ1aWxkQ21tYW5kbG9nUGF0aC5zZXRGaWxlUGF0aChidWlsZF9jbWRfZmlsZV9wYXRoKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgICAgdGhpcy5idWlsZENtbWFuZGxvZ1BhdGguZ2V0VGV4dEZpZWxkKCkuYWRkTW9kaWZ5TGlzdGVuZXIoZXZlbnQgLT4geworICAgICAgdGhpcy5wcm9wZXJ0aWVzLnNldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5CVUlMRF9DTURTX0xPR19GSUxFLAorICAgICAgICAgIHRoaXMuYnVpbGRDbW1hbmRsb2dQYXRoLmdldEFic29sdXRlRmlsZVBhdGgoKSk7CisgICAgICBzZXRDaGFuZ2VkKCk7CisgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKworICAgIH0pOworCisgICAgZm9yIChCdXR0b24gYiA6IHRoaXMuaGVhZGVyTGlzdC5nZXRCdXR0b25MaXN0KCkpIHsKKyAgICAgIEJ1dHRvbkluZm8gYnV0dG9uSW5mbyA9IHRoaXMuaGVhZGVyTGlzdC5nZXRCdXR0b25JbmZvTWFwKCkuZ2V0KGIuZ2V0VGV4dCgpKTsKKyAgICAgIGlmIChidXR0b25JbmZvLmdldEJ1dHRvblR5cGUoKS5lcXVhbHMoQnV0dG9uVHlwZS5CUk9XU0VfRklMRSkpIHsKKyAgICAgICAgYi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgIEZpbGVEaWFsb2cgZGlhbG9nID0gbmV3IEZpbGVEaWFsb2coRGlzcGxheS5nZXRDdXJyZW50KCkuZ2V0QWN0aXZlU2hlbGwoKSk7CisgICAgICAgICAgICBTdHJpbmcgZmlsZVBhdGggPSBkaWFsb2cub3BlbigpOworICAgICAgICAgICAgaWYgKGZpbGVQYXRoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgU0NBMkFtYWx0aGVhV2lkZ2V0LnRoaXMuaGVhZGVyTGlzdC5zZXRGaWxlUGF0aChmaWxlUGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRDaGFuZ2VkKCk7CisgICAgICAgICAgICBub3RpZnlPYnNlcnZlcnMoKTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfQorICAgICAgZWxzZSBpZiAoYnV0dG9uSW5mby5nZXRCdXR0b25UeXBlKCkuZXF1YWxzKEJ1dHRvblR5cGUuQlJPV1NFX0ZPTERFUikpIHsKKyAgICAgICAgYi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgIERpcmVjdG9yeURpYWxvZyBkaWFsb2cgPSBuZXcgRGlyZWN0b3J5RGlhbG9nKERpc3BsYXkuZ2V0Q3VycmVudCgpLmdldEFjdGl2ZVNoZWxsKCkpOworICAgICAgICAgICAgU3RyaW5nIGRpcmVjdG9yeVBhdGggPSBkaWFsb2cub3BlbigpOworICAgICAgICAgICAgaWYgKGRpcmVjdG9yeVBhdGggIT0gbnVsbCkgeworICAgICAgICAgICAgICBTQ0EyQW1hbHRoZWFXaWRnZXQudGhpcy5oZWFkZXJMaXN0LnNldEZpbGVQYXRoKGRpcmVjdG9yeVBhdGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0Q2hhbmdlZCgpOworICAgICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzKCk7CisgICAgICAgICAgICBTQ0EyQW1hbHRoZWFXaWRnZXQudGhpcy5wcm9wZXJ0aWVzLnNldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5IRElSX0xJU1RfS0VZLAorICAgICAgICAgICAgICAgIEpvaW5lci5vbihGaWxlLnBhdGhTZXBhcmF0b3IpLmpvaW4oZ2V0SGVhZGVyRGlyTGlzdCgpKSk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGJ1dHRvbkluZm8uZ2V0QnV0dG9uVHlwZSgpLmVxdWFscyhCdXR0b25UeXBlLlJFTU9WRSkpIHsKKyAgICAgICAgYi5hZGRTZWxlY3Rpb25MaXN0ZW5lcihuZXcgU2VsZWN0aW9uQWRhcHRlcigpIHsKKworICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgIHB1YmxpYyB2b2lkIHdpZGdldFNlbGVjdGVkKGZpbmFsIFNlbGVjdGlvbkV2ZW50IGUpIHsKKyAgICAgICAgICAgIFNDQTJBbWFsdGhlYVdpZGdldC50aGlzLmhlYWRlckxpc3QuZ2V0TGlzdEJveCgpCisgICAgICAgICAgICAgICAgLnJlbW92ZShTQ0EyQW1hbHRoZWFXaWRnZXQudGhpcy5oZWFkZXJMaXN0LmdldExpc3RCb3goKS5nZXRTZWxlY3Rpb25JbmRpY2VzKCkpOworICAgICAgICAgICAgU0NBMkFtYWx0aGVhV2lkZ2V0LnRoaXMucHJvcGVydGllcy5zZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuSERJUl9MSVNUX0tFWSwKKyAgICAgICAgICAgICAgICBKb2luZXIub24oRmlsZS5wYXRoU2VwYXJhdG9yKS5qb2luKGdldEhlYWRlckRpckxpc3QoKSkpOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgLyoqCisgICAqIEByZXR1cm4gdGhlIGhlYWRlckRpckxpc3QKKyAgICovCisgIHB1YmxpYyBqYXZhLnV0aWwuTGlzdDxTdHJpbmc+IGdldEhlYWRlckRpckxpc3QoKSB7CisgICAgamF2YS51dGlsLkxpc3Q8U3RyaW5nPiBsaXN0ID0gTGlzdHMubmV3QXJyYXlMaXN0KCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmhlYWRlckxpc3QuZ2V0TGlzdEJveCgpLmdldEl0ZW1Db3VudCgpOyBpKyspIHsKKyAgICAgIGxpc3QuYWRkKHRoaXMuaGVhZGVyTGlzdC5nZXRMaXN0Qm94KCkuZ2V0SXRlbShpKSk7CisgICAgfQorICAgIHJldHVybiBsaXN0OworICB9CisKKworICAvKioKKyAgICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgdGhlIFVJIGVsZW1lbnRzIHRvIHRoZSB2YWx1ZXMgcHJvdmlkZWQgaW4gdGhlIHByb3BlcnRpZXMgaW5zdGFuY2UuCisgICAqLworICBwcml2YXRlIHZvaWQgaW5pdGlhbGlzZU9wdGlvbnMoKSB7CisgICAgdGhpcy5nZW5lcmF0ZVN0cnVjdE1lbWJlci5zZXRTZWxlY3Rpb24oCisgICAgICAgIEJvb2xlYW4ucGFyc2VCb29sZWFuKHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuRU5BQkxFX1NUUlVDVF9NRU1CRVJfS0VZKSkpOworICAgIGlmICh0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLkFTVF9QQVRIX0tFWSkgIT0gbnVsbCkgeworICAgICAgdGhpcy5hc3RQYXRoLmdldFRleHRGaWVsZCgpCisgICAgICAgICAgLnNldFRleHQodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5BU1RfUEFUSF9LRVkpKTsKKyAgICB9CisgICAgaWYgKCh0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLkhESVJfTElTVF9LRVkpICE9IG51bGwpICYmCisgICAgICAgICF0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLkhESVJfTElTVF9LRVkpLmlzRW1wdHkoKSkgeworICAgICAgdGhpcy5oZWFkZXJMaXN0LmdldExpc3RCb3goKQorICAgICAgICAgIC5zZXRJdGVtcyhTcGxpdHRlci5vbihGaWxlLnBhdGhTZXBhcmF0b3IpCisgICAgICAgICAgICAgIC5zcGxpdFRvTGlzdCh0aGlzLnByb3BlcnRpZXMuZ2V0UHJvcGVydHkoQW1hbHRoZWFXaXphcmRQcmVmZXJlbmNlQ29uc3RhbnRzLkhESVJfTElTVF9LRVkpKQorICAgICAgICAgICAgICAudG9BcnJheShuZXcgU3RyaW5nW10ge30pKTsKKyAgICB9CisgICAgaWYgKHRoaXMucHJvcGVydGllcy5nZXRQcm9wZXJ0eShBbWFsdGhlYVdpemFyZFByZWZlcmVuY2VDb25zdGFudHMuQkxPR19LRVkpICE9IG51bGwpIHsKKyAgICAgIHRoaXMuYnVpbGRDbW1hbmRsb2dQYXRoLmdldFRleHRGaWVsZCgpLnNldFRleHQodGhpcy5wcm9wZXJ0aWVzLmdldFByb3BlcnR5KEFtYWx0aGVhV2l6YXJkUHJlZmVyZW5jZUNvbnN0YW50cy5CTE9HX0tFWSkpOworICAgIH0KKworICB9Cit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQTJBbWFsdGhlYVdpZGdldEJ1aWxkZXIuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS93aXphcmQvU0NBMkFtYWx0aGVhV2lkZ2V0QnVpbGRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YTNhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQTJBbWFsdGhlYVdpZGdldEJ1aWxkZXIuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLndpemFyZDsKKworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS51aS53aWRnZXQuYnVpbGRlci5XaWRnZXRCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkud2lkZ2V0cy5XaWRnZXQ7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOworCisKKy8qKgorICogVGhpcyBpcyBhIFdpZGdldCBCdWlsZGVyIGNsYXNzIGZvciBAU0NBMkFtYWx0aGVhV2lkZ2V0LiBUaGlzIGNsYXNzIGludGVybmFsbHkgdXNlcyBTQ0EyQW1hbHRoZWFXaWdldCB0byBjcmVhdGUgdGhlIFVJCisgKiBlbGVtZW50cy4KKyAqLworcHVibGljIGNsYXNzIFNDQTJBbWFsdGhlYVdpZGdldEJ1aWxkZXIgaW1wbGVtZW50cyBXaWRnZXRCdWlsZGVyIHsKKworICBwcml2YXRlIGZpbmFsIFByb3BlcnRpZXMgcHJvcGVydGllczsKKworICAvKioKKyAgICogQHBhcmFtIHByb3BlcnRpZXMgUHJvcGVydGllcyBpbnN0YW5jZS4KKyAgICovCisgIHB1YmxpYyBTQ0EyQW1hbHRoZWFXaWRnZXRCdWlsZGVyKGZpbmFsIFByb3BlcnRpZXMgcHJvcGVydGllcykgeworICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7CisgIH0KKworICAvKioKKyAgICogQnVpbGRzIHRoZSBTQ0EyQW1hbHRoZWEgV2lkZ2V0LgorICAgKi8KKyAgQE92ZXJyaWRlCisgIHB1YmxpYyBXaWRnZXQgYnVpbGRXaWRnZXQoZmluYWwgQ29tcG9zaXRlIHBhcmVudCkgeworICAgIHJldHVybiBuZXcgU0NBMkFtYWx0aGVhV2lkZ2V0KHBhcmVudCwgdGhpcy5wcm9wZXJ0aWVzKTsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQVBvcHVwLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQVBvcHVwLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0YTBhNQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91aS93aXphcmQvU0NBUG9wdXAuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZQorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLTIuMC8KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBFUEwtMi4wIENvbnRyaWJ1dG9yczogUm9iZXJ0IEJvc2NoIEdtYkggLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpLndpemFyZDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EudWkubWVzc2FnZWRpYWxvZy5BcHA0bWNNZXNzZ2VEaWFsb2c7CitpbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOworCisvKioKKyAqIFRoaXMgY2xhc3MgdG8gYmUgdXNlZCBieSBTQ0EyQW1hbHRoZWEgdG8gc2hvdyBhbnkga2luZCBvZiBtZXNzYWdlIGRpYWxvZy4KKyAqLworcHVibGljIGNsYXNzIFNDQVBvcHVwIGltcGxlbWVudHMgUnVubmFibGUgeworCisgIHByaXZhdGUgU2hlbGwgY3VycmVudFNoZWxsOworICBwcml2YXRlIGZpbmFsIFN0cmluZyB0aXRsZTsKKyAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKKyAgcHJpdmF0ZSBmaW5hbCBpbnQgZGlhbG9nVHlwZTsKKyAgcHJpdmF0ZSBib29sZWFuIGRpYWxvZ1N0YXR1czsKKworICAvKioKKyAgICogQHBhcmFtIHRpdGxlIHRoZSB0aXRsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2UgZGlhbG9nCisgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZSBkaWFsb2cuCisgICAqIEBwYXJhbSBkaWFsb2dUeXBlIHRoZSB0eXBlIG9mIGRhaWxvZyBFZyBpbmZvcm1hdGlvbixjb25maXJtYXRpb24gZXRjCisgICAqLworICBwdWJsaWMgU0NBUG9wdXAoZmluYWwgU3RyaW5nIHRpdGxlLCBmaW5hbCBTdHJpbmcgbWVzc2FnZSwgZmluYWwgaW50IGRpYWxvZ1R5cGUpIHsKKyAgICBEaXNwbGF5LmdldERlZmF1bHQoKS5zeW5jRXhlYygoKSAtPiB7CisgICAgICBTQ0FQb3B1cC50aGlzLmN1cnJlbnRTaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKKyAgICB9KTsKKyAgICB0aGlzLnRpdGxlID0gdGl0bGU7CisgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICB0aGlzLmRpYWxvZ1R5cGUgPSBkaWFsb2dUeXBlOworICB9CisKKyAgQE92ZXJyaWRlCisgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICBBcHA0bWNNZXNzZ2VEaWFsb2cgY29uZmlybWF0aW9uTWVzc2FnZURpYWxvZyA9CisgICAgICAgIG5ldyBBcHA0bWNNZXNzZ2VEaWFsb2codGhpcy5kaWFsb2dUeXBlLCBTQ0FQb3B1cC50aGlzLmN1cnJlbnRTaGVsbCwgdGhpcy50aXRsZSwgbnVsbCwgdGhpcy5tZXNzYWdlKTsKKyAgICB0aGlzLmRpYWxvZ1N0YXR1cyA9IChjb25maXJtYXRpb25NZXNzYWdlRGlhbG9nLm9wZW4oKSA9PSAwKTsKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJuIHRoZSBzdGF0dXMgcmV0dXJuaW5nIGlmIHRoZSBkaWFsb2cgd2FzIG9wZW4gb3Igbm90LgorICAgKi8KKyAgcHVibGljIGJvb2xlYW4gZ2V0RGlhbG9nU3RhdHVzKCkgeworICAgIHJldHVybiB0aGlzLmRpYWxvZ1N0YXR1czsKKyAgfQorCit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudWkvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdWkvd2l6YXJkL1NDQVByb2dyZXNzTW9uaXRvci5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL3dpemFyZC9TQ0FQcm9ncmVzc01vbml0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGMyM2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVpL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3VpL3dpemFyZC9TQ0FQcm9ncmVzc01vbml0b3IuamF2YQpAQCAtMCwwICsxLDE0NSBAQAorLyoqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC0yLjAvCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMCBDb250cmlidXRvcnM6IFJvYmVydCBCb3NjaCBHbWJIIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aS53aXphcmQ7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmxvZ2dpbmcubWFuYWdlci5Mb2dtYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3ViTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuam9icy5Kb2I7CisKKy8qKgorICogVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3Igc2hvd2luZyB0aGUgcHJvZ3Jlc3MgbW9uaXRvciBmb3Igc2NhMkFtYWx0aGVhLgorICovCitwdWJsaWMgY2xhc3MgU0NBUHJvZ3Jlc3NNb25pdG9yIHsKKworICBwcml2YXRlIFN1Yk1vbml0b3Igc3ViTW9uaXRvcjsKKworICBwcml2YXRlIGJvb2xlYW4gaXNHZW5lcmF0aW9uRG9uZSA9IGZhbHNlOworCisgIHByaXZhdGUgZmluYWwgT2JqZWN0IG11dGV4ID0gbmV3IE9iamVjdCgpOworCisgIHByaXZhdGUgZmluYWwgSm9iIGVjbGlwc2VKb2I7CisKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRPVEFMX1BST0JBQkxFX0VYRUNVVElPTl9USU1FID0gNjAwOworCisgIC8qKgorICAgKiBAcGFyYW0gZWNsaXBzZUpvYiBFY2xpcGUgam9iIGluc3RhbmNlCisgICAqLworICBwdWJsaWMgU0NBUHJvZ3Jlc3NNb25pdG9yKGZpbmFsIEpvYiBlY2xpcHNlSm9iKSB7CisgICAgdGhpcy5lY2xpcHNlSm9iID0gZWNsaXBzZUpvYjsKKyAgfQorCisKKyAgY2xhc3MgSW5maW5pdGVQcm9ncmVzc01vbml0b3JPYnNlcnZlciBleHRlbmRzIFRocmVhZCB7CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gc3ViTW9uaXRvciBtb25pdG9yIHdoaWNoIHdpbGwgYmUgb2JzZXJ2ZWQKKyAgICAgKi8KKyAgICBwdWJsaWMgSW5maW5pdGVQcm9ncmVzc01vbml0b3JPYnNlcnZlcihmaW5hbCBTdWJNb25pdG9yIHN1Yk1vbml0b3IpIHsKKyAgICAgIHN1cGVyKCk7CisgICAgICBTQ0FQcm9ncmVzc01vbml0b3IudGhpcy5zdWJNb25pdG9yID0gc3ViTW9uaXRvcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICBydW5Mb2dhcml0aG1pY1dhaXRPblByb2dyZXNzTW9uaXRvcigpOworICAgICAgdGVybWluYXRlTW9uaXRvcigpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEBwYXJhbSBzdWJNb25pdG9yCisgICAgICogQHBhcmFtIGpvYk5hbWUKKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgcnVuTG9nYXJpdGhtaWNXYWl0T25Qcm9ncmVzc01vbml0b3IoKSB7CisgICAgICBib29sZWFuIGlzUHJvY2Vzc0NvbXBsZXRlZCA9IGZhbHNlOworICAgICAgaW50IGFkdmFuY2VtZW50Q291bnRlciA9IDA7CisKKyAgICAgIHdoaWxlICghaXNQcm9jZXNzQ29tcGxldGVkKSB7CisgICAgICAgIGlmIChTQ0FQcm9ncmVzc01vbml0b3IudGhpcy5zdWJNb25pdG9yLmlzQ2FuY2VsZWQoKSkgeworICAgICAgICAgIHN5bmNocm9uaXplZCAoU0NBUHJvZ3Jlc3NNb25pdG9yLnRoaXMubXV0ZXgpIHsKKyAgICAgICAgICAgIFNDQVByb2dyZXNzTW9uaXRvci50aGlzLmlzR2VuZXJhdGlvbkRvbmUgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgICBQcm9jZXNzIHAgPSBVdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLmdldEN1cnJlbnRSdW5uaW5nUHJvY2VzcygpOworICAgICAgICAgIHAuZGVzdHJveUZvcmNpYmx5KCk7CisgICAgICAgICAgVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZy5zZXRNb2RlbEdlbmVyYXRpb25jYW5jZWxsZWQodHJ1ZSk7CisKKyAgICAgICAgICBTQ0FQcm9ncmVzc01vbml0b3IudGhpcy5lY2xpcHNlSm9iLnNldE5hbWUoIkNhbmNlbGxpbmcgdGhlIG1vZGVsIGdlbmVyYXRpb24gam9iIik7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBTQ0FQcm9ncmVzc01vbml0b3IudGhpcy5zdWJNb25pdG9yLndvcmtlZCgxKTsKKyAgICAgICAgICBhZHZhbmNlbWVudENvdW50ZXIrKzsKKyAgICAgICAgICBpZiAoKGFkdmFuY2VtZW50Q291bnRlciAlIChUT1RBTF9QUk9CQUJMRV9FWEVDVVRJT05fVElNRSAvIDIpKSA9PSAwKSB7IC8vIGhhbGYgdGltZQorICAgICAgICAgICAgYWR2YW5jZW1lbnRDb3VudGVyID0gMTsKKyAgICAgICAgICAgIFNDQVByb2dyZXNzTW9uaXRvci50aGlzLnN1Yk1vbml0b3Iuc2V0V29ya1JlbWFpbmluZyhUT1RBTF9QUk9CQUJMRV9FWEVDVVRJT05fVElNRSk7CisgICAgICAgICAgfQorICAgICAgICAgIFRocmVhZC5zbGVlcCgxMDAwKTsKKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgIExvZ21hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2coZS5nZXRNZXNzYWdlKCkpOworICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJydXB0KCk7CisgICAgICAgIH0KKyAgICAgICAgc3luY2hyb25pemVkIChTQ0FQcm9ncmVzc01vbml0b3IudGhpcy5tdXRleCkgeworICAgICAgICAgIGlzUHJvY2Vzc0NvbXBsZXRlZCA9IFNDQVByb2dyZXNzTW9uaXRvci50aGlzLmlzR2VuZXJhdGlvbkRvbmU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gc3ViTW9uaXRvcgorICAgICAqIEBwYXJhbSBqb2JOYW1lCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHRlcm1pbmF0ZU1vbml0b3IoKSB7CisgICAgICBpbnQgbnVtYmVyT2ZTZWNvbmRVbnRpbEVuZCA9IDM7CisgICAgICBTQ0FQcm9ncmVzc01vbml0b3IudGhpcy5zdWJNb25pdG9yLnNldFdvcmtSZW1haW5pbmcobnVtYmVyT2ZTZWNvbmRVbnRpbEVuZCk7CisgICAgICB3aGlsZSAobnVtYmVyT2ZTZWNvbmRVbnRpbEVuZCA+IDApIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICBTQ0FQcm9ncmVzc01vbml0b3IudGhpcy5zdWJNb25pdG9yLndvcmtlZCgxKTsKKyAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICBMb2dtYW5hZ2VyLmdldEluc3RhbmNlKCkubG9nKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmludGVycnVwdCgpOworICAgICAgICB9CisgICAgICAgIC0tbnVtYmVyT2ZTZWNvbmRVbnRpbEVuZDsKKyAgICAgIH0KKyAgICAgIFV0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuc2V0TW9kZWxHZW5lcmF0aW9uY2FuY2VsbGVkKGZhbHNlKTsKKyAgICB9CisgIH0KKworICAvKioKKyAgICogQHBhcmFtIG1vbml0b3IgSXByb2dyZXNzIG1vbml0b3IKKyAgICogQHJldHVybiBUaHJlYWQgaW5zdGFuY2UKKyAgICovCisgIHB1YmxpYyBUaHJlYWQgY3JlYXRlSW5maW5pdGVQcm9ncmVzc01vbml0b3IoZmluYWwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisgICAgdGhpcy5zdWJNb25pdG9yID0gU3ViTW9uaXRvci5jb252ZXJ0KG1vbml0b3IsIFRPVEFMX1BST0JBQkxFX0VYRUNVVElPTl9USU1FKTsKKyAgICByZXR1cm4gbmV3IEluZmluaXRlUHJvZ3Jlc3NNb25pdG9yT2JzZXJ2ZXIodGhpcy5zdWJNb25pdG9yKTsKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJuIFN1Yk1vbml0b3IgaW5zdGFuY2UKKyAgICovCisgIHB1YmxpYyBTdWJNb25pdG9yIGdldFN1Yk1vbml0b3IoKSB7CisgICAgcmV0dXJuIHRoaXMuc3ViTW9uaXRvcjsKKyAgfQorCisgIC8qKgorICAgKiBAcmV0dXJuIHRoZSBpc0dlbmVyYXRpb25Eb25lCisgICAqLworICBwdWJsaWMgYm9vbGVhbiBpc0dlbmVyYXRpb25Eb25lKCkgeworICAgIHJldHVybiB0aGlzLmlzR2VuZXJhdGlvbkRvbmU7CisgIH0KKworCisgIC8qKgorICAgKiBAcGFyYW0gaXNHZW5lcmF0aW9uRG9uZSB0aGUgaXNHZW5lcmF0aW9uRG9uZSB0byBzZXQKKyAgICovCisgIHB1YmxpYyB2b2lkIHNldEdlbmVyYXRpb25Eb25lKGZpbmFsIGJvb2xlYW4gaXNHZW5lcmF0aW9uRG9uZSkgeworICAgIHN5bmNocm9uaXplZCAoU0NBUHJvZ3Jlc3NNb25pdG9yLnRoaXMubXV0ZXgpIHsKKyAgICAgIHRoaXMuaXNHZW5lcmF0aW9uRG9uZSA9IGlzR2VuZXJhdGlvbkRvbmU7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy8uZ2l0aWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGQ2NDM3Li4wMDAwMDAwCi0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotL3RhcmdldC8NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggN2E4NTA4NC4uOWE5MzU5ZSAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMSwxNCArMSwxNCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wDQotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KLUJ1bmRsZS1OYW1lOiBVdGlscw0KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMNCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyDQotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5BY3RpdmF0b3INCi1CdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZw0KK01hbmlmZXN0LVZlcnNpb246IDEuMAorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgorQnVuZGxlLU5hbWU6IFNDQTJBTUFMVEhFQSBVdGlscworQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscworQnVuZGxlLVZlcnNpb246IDAuOS44LnF1YWxpZmllcgorQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5BY3RpdmF0b3IKK0J1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnCiBSZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UudWksDQotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZQ0KLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMS44DQotQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkNCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscywNCi0gb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5jb25zdGFudHMNCi0NCisgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTEuOAorQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzLAorIG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuY29uc3RhbnRzCisKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9iaW4vLmdpdGlnbm9yZSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9iaW4vLmdpdGlnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YxZGIyZS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvYmluLy5naXRpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0vb3JnLwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzL3BvbS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjczYjQ0NS4uMDAwMDAwMAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHByb2plY3QgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcveHNkL21hdmVuLTQuMC4wLnhzZCIgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCINCi0gICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+DQotICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICA8cGFyZW50Pg0KLSAgICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQ8L2FydGlmYWN0SWQ+DQotICAgIDx2ZXJzaW9uPjEuMC4wLnF1YWxpZmllcjwvdmVyc2lvbj4NCi0gICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLmJ1aWxkPC9yZWxhdGl2ZVBhdGg+DQotICA8L3BhcmVudD4NCi0gIDxncm91cElkPnNjYTJhbWFsdGhlYTwvZ3JvdXBJZD4NCi0gIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHM8L2FydGlmYWN0SWQ+DQotICA8cGFja2FnaW5nPmVjbGlwc2UtcGx1Z2luPC9wYWNrYWdpbmc+DQotDQotCTxidWlsZD4NCi0JCTxzb3VyY2VEaXJlY3Rvcnk+c3JjPC9zb3VyY2VEaXJlY3Rvcnk+DQotCQk8cmVzb3VyY2VzPg0KLQkJCTxyZXNvdXJjZT4NCi0JCQkJPGRpcmVjdG9yeT54dGVuZC1nZW48L2RpcmVjdG9yeT4NCi0JCQkJPGV4Y2x1ZGVzPg0KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPg0KLQkJCQk8L2V4Y2x1ZGVzPg0KLQkJCTwvcmVzb3VyY2U+DQotCQkJPHJlc291cmNlPg0KLQkJCQk8ZGlyZWN0b3J5PnNyYzwvZGlyZWN0b3J5Pg0KLQkJCQk8ZXhjbHVkZXM+DQotCQkJCQk8ZXhjbHVkZT4qKi8qLmphdmE8L2V4Y2x1ZGU+DQotCQkJCTwvZXhjbHVkZXM+DQotCQkJPC9yZXNvdXJjZT4NCi0JCTwvcmVzb3VyY2VzPg0KLQkJPHBsdWdpbnM+DQotCQkJPHBsdWdpbj4NCi0JCQkJPGFydGlmYWN0SWQ+bWF2ZW4tY2xlYW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4yLjQuMTwvdmVyc2lvbj4NCi0JCQkJPGNvbmZpZ3VyYXRpb24+DQotCQkJCQk8ZmlsZXNldHM+DQotCQkJCQkJPGZpbGVzZXQ+DQotCQkJCQkJCTxkaXJlY3Rvcnk+eHRlbmQtZ2VuPC9kaXJlY3Rvcnk+DQotCQkJCQkJCTxpbmNsdWRlcz4NCi0JCQkJCQkJCTxpbmNsdWRlPioqPC9pbmNsdWRlPg0KLQkJCQkJCQk8L2luY2x1ZGVzPg0KLQkJCQkJCTwvZmlsZXNldD4NCi0JCQkJCTwvZmlsZXNldHM+DQotCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQk8L3BsdWdpbj4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+YnVpbGQtaGVscGVyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0JCQkJPHZlcnNpb24+MS43PC92ZXJzaW9uPg0KLQkJCQk8ZXhlY3V0aW9ucz4NCi0JCQkJCTxleGVjdXRpb24+DQotCQkJCQkJPGlkPmFkZC1zb3VyY2U8L2lkPg0KLQkJCQkJCTxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4NCi0JCQkJCQk8Z29hbHM+DQotCQkJCQkJCTxnb2FsPmFkZC1zb3VyY2U8L2dvYWw+DQotCQkJCQkJPC9nb2Fscz4NCi0JCQkJCQk8Y29uZmlndXJhdGlvbj4NCi0JCQkJCQkJPHNvdXJjZXM+DQotCQkJCQkJCQk8c291cmNlPnh0ZW5kLWdlbjwvc291cmNlPg0KLQkJCQkJCQk8L3NvdXJjZXM+DQotCQkJCQkJPC9jb25maWd1cmF0aW9uPg0KLQkJCQkJPC9leGVjdXRpb24+DQotCQkJCTwvZXhlY3V0aW9ucz4NCi0JCQk8L3BsdWdpbj4NCi0JCQk8cGx1Z2luPg0KLQkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS54dGVuZDwvZ3JvdXBJZD4NCi0JCQkJPGFydGlmYWN0SWQ+eHRlbmQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLQkJCQk8dmVyc2lvbj4yLjcuMzwvdmVyc2lvbj4NCi0JCQkJPGV4ZWN1dGlvbnM+DQotCQkJCQk8ZXhlY3V0aW9uPg0KLQkJCQkJCTxnb2Fscz4NCi0JCQkJCQkJPGdvYWw+Y29tcGlsZTwvZ29hbD4NCi0JCQkJCQk8L2dvYWxzPg0KLQkJCQkJCTxjb25maWd1cmF0aW9uPg0KLQkJCQkJCQk8b3V0cHV0RGlyZWN0b3J5Pnh0ZW5kLWdlbjwvb3V0cHV0RGlyZWN0b3J5Pg0KLQkJCQkJCTwvY29uZmlndXJhdGlvbj4NCi0JCQkJCTwvZXhlY3V0aW9uPg0KLQkJCQk8L2V4ZWN1dGlvbnM+DQotCQkJPC9wbHVnaW4+DQotCQk8L3BsdWdpbnM+DQotCTwvYnVpbGQ+DQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91dGlscy9BY3RpdmF0b3IuamF2YSBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91dGlscy9BY3RpdmF0b3IuamF2YQppbmRleCA3MDEwNWZjLi5hYWQ2YzU1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdXRpbHMvQWN0aXZhdG9yLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3V0aWxzL0FjdGl2YXRvci5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCiAgKiANCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlDQogICogYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSAyLjANCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdXRpbHMvVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZy5qYXZhIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3V0aWxzL1V0aWxpdHlGb3JQcm9jZXNzSGFuZGxpbmcuamF2YQppbmRleCA2NDM2NzA4Li42ZWNiZGMwIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdXRpbHMvVXRpbGl0eUZvclByb2Nlc3NIYW5kbGluZy5qYXZhCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91dGlscy9VdGlsaXR5Rm9yUHJvY2Vzc0hhbmRsaW5nLmphdmEKQEAgLTEsNiArMSw2IEBACiAvKioNCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTcgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKiBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMCBSb2JlcnQgQm9zY2ggR21iSCBhbmQgb3RoZXJzLg0KICAqIA0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91dGlscy9jb25zdGFudHMvU0NBMkFtYWx0aGVhQ29uc3RhbnRzLmphdmEgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMvc3JjL29yZy9lY2xpcHNlL2FwcDRtYy9zY2EyYW1hbHRoZWEvdXRpbHMvY29uc3RhbnRzL1NDQTJBbWFsdGhlYUNvbnN0YW50cy5qYXZhCmluZGV4IGMwZWU3NTQuLjBkY2I0N2UgMTAwNjQ0Ci0tLSBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy9zcmMvb3JnL2VjbGlwc2UvYXBwNG1jL3NjYTJhbWFsdGhlYS91dGlscy9jb25zdGFudHMvU0NBMkFtYWx0aGVhQ29uc3RhbnRzLmphdmEKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcGx1Z2lucy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnV0aWxzL3NyYy9vcmcvZWNsaXBzZS9hcHA0bWMvc2NhMmFtYWx0aGVhL3V0aWxzL2NvbnN0YW50cy9TQ0EyQW1hbHRoZWFDb25zdGFudHMuamF2YQpAQCAtMSw5OCArMSw0OCBAQAogLyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQotICogQ29weXJpZ2h0IChjKSAyMDE3IFJvYmVydCBCb3NjaCBHbWJIIGFuZCBvdGhlcnMuDQotICogDQorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgUm9iZXJ0IEJvc2NoIEdtYkggYW5kIG90aGVycy4NCisgKg0KICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUNCiAgKiBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIDIuMA0KLSAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wLw0KLSAqIA0KKyAqIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtMi4wDQorICoNCiAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KLSAqIA0KKyAqDQogICogQ29udHJpYnV0b3JzOg0KICAqICAgICBSb2JlcnQgQm9zY2ggR21iSCAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqLw0KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscy5jb25zdGFudHM7DQogDQotaW1wb3J0IG9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXRpbHMuQWN0aXZhdG9yOw0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7DQogDQogLyoqDQogICogQ29uc3RhbnRzIGZvciBhbGwgdGhlIFNDQTJBbWFsdGhlYSBvcGVyYXRpb25zDQogICovDQogcHVibGljIGZpbmFsIGNsYXNzIFNDQTJBbWFsdGhlYUNvbnN0YW50cyB7DQorICAgIC8qKg0KKyAgICAgKiBJbmkgVGFzayBjeWNsZSBjb25zdGFudA0KKyAgICAgKi8NCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JX1RBU0tfQ1lDTEUgPSAiT05DRSI7DQogDQotICAvKioNCi0gICAqIEFkZGVkIHByaXZhdGUgY29uc3RydWN0b3IgdG8gaGlkZSB0aGUgaW1wbGljaXQgcHVibGljIG9uZQ0KLSAgICovDQotICBwcml2YXRlIFNDQTJBbWFsdGhlYUNvbnN0YW50cygpIHsNCi0gICAgLy8gZW1wdHkgY29uc3RydWN0b3INCi0gIH0NCisgICAgLyoqDQorICAgICAqIFBhcnNpbmcgRXJyb3IgY29uc3RhbnQNCisgICAgICovDQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFBBUlNJTkdfRVJST1IgPSAiVGhlcmUgd2FzIHNvbWUgZXJyb3Igd2hpbGUgcGFyc2luZyBjIGZpbGVzIG9yIHdoZW4gZ2VuZXJhdGluZyB0aGUgQU1BTFRIRUEgbW9kZWwuIjsNCiANCi0gIC8qKg0KLSAgKg0KLSAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFRBU0tfSU5GTyA9ICJ0YXNrSW5mbyI7DQotICAvKioNCi0gICoNCi0gICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPVVRQVVRfUEFUSCA9ICJvdXRwdXRQYXRoIjsNCi0gIC8qKg0KLSAgKg0KLSAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFTVF9QQVRIID0gImFzdFBhdGgiOw0KLSAgLyoqDQotICAqDQotICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DS19JTkZPID0gImxvY2tJbmZvIjsNCi0gIC8qKg0KLSAgKg0KLSAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJMT0cgPSAiYmxvZyI7DQotICAvKioNCi0gICoNCi0gICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRElSX0xJU1QgPSAiaGRpckxpc3QiOw0KKyAgICAvKioNCisgICAgICogQW1hbHRoZWEgZ2VuZXJhdGlvbiB0YWtpbmcgdG9vIGxvbmcgbWVzc2FnZS4NCisgICAgICovDQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFNQUxUSEVBX0dFTkVSQVRJT05fVE9PX0xPTkcgPSAiVGhlIGFtYWx0aGVhIG1vZGVsIGdlbmVyYXRpb24gam9iIGlzIHN0aWxsIHJ1bm5pbmcuSXQgbWlnaHQgdGFrZSBzb21lIG1vcmUgdGltZS4gRG8geW91IHdpc2ggdG8gY29udGludWU/IFByZXNzIE9rIHRvIGNvbnRpbnVlIG9yIGNhbmNlbCB0byBhYm9ydCI7DQogDQorICAgIC8qKg0KKyAgICAgKiBBbWFsdGhlYSBnZW5lcmF0aW9uIHRpbWUgZGVwZW5kcyBvbiB0aGUgc2l6ZSBvZiB0aGUgUHJvamVjdCBlcnJvci4NCisgICAgICovDQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFNQUxUSEVBX0dFTkVSQVRJT05fX1BST0pFQ1RfU0laRV9NRVNTQUdFID0gIlRoZSB0aW1lIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoZSBBbWFsdGhlYSBtb2RlbCBkZXBlbmRzIG9uIHRoZSBzaXplIG9mIHRoZSBQcm9qZWN0LiI7DQogDQotICAvKioNCi0gICAqDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERFQlVHX01PREUgPSAiZGVidWdNb2RlIjsNCi0NCi0gIC8qKg0KLSAgICogUHJlZmVyZW5jZSBuYW1lIGZvciB0aGUgIkRpc2FibGUgc3RydWN0IG1lbWJlciIgb3B0aW9uDQotICAgKi8NCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOQUJMRV9TVFJVQ1RfTUVNQkVSID0gImVuYWJsZVN0cnVjdE1lbWJlciI7DQotDQotICAvKioNCi0gICAqIFByZWZlcmVuY2UgbmFtZSBmb3IgIkNvbXBvbmVudCBtb2RlbCBiYXNlZCBvbiBmYyBiYyINCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09NUE9ORU5UX01PREVMX0ZDX0JDID0gImNvbXBvbmVudE1vZGVsRmNCYyI7DQotDQotDQotICAvKioNCi0gICAqIFByZWZlcmVuY2UgbmFtZSBmb3IgIkNvbmZpZ3VyZSBvcHRpb25hbCBmaWVsZHMiIG9wdGlvbg0KLSAgICovDQotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTkFCTEVfT1BUSU9OQUxfRklFTERTID0gImVuYWJsZU9wdGlvbmFsRmllbGRzIjsNCi0NCi0gIC8qKg0KLSAgICoNCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgT1BUX0ZJTEVfUEFUSCA9ICJvcHRGaWxlIjsNCi0NCi0gIC8qKg0KLSAgICoNCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5JX1RBU0tfQ1lDTEUgPSAiT05DRSI7DQotDQotICAvKioNCi0gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHByZWZlcmVuY2Ugc3RvcmUgb2YgdGhlIHNjYTJBbWFsdGhlYSBjb21wb25lbnQuDQotICAgKg0KLSAgICogQHJldHVybiBJUHJlZmVyZW5jZVN0b3JlIHByZWZlcmVuY2Ugc3RvcmUNCi0gICAqLw0KLSAgcHVibGljIHN0YXRpYyBJUHJlZmVyZW5jZVN0b3JlIGdldFByZWZlcmVuY2VTdG9yZSgpIHsNCi0gICAgcmV0dXJuIEFjdGl2YXRvci5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7DQotICB9DQotDQorICAgIC8qKg0KKyAgICAgKiBBZGRlZCBwcml2YXRlIGNvbnN0cnVjdG9yIHRvIGhpZGUgdGhlIGltcGxpY2l0IHB1YmxpYyBvbmUNCisgICAgICovDQorICAgIHByaXZhdGUgU0NBMkFtYWx0aGVhQ29uc3RhbnRzKCkgew0KKyAgICAgICAgLy8gZW1wdHkgY29uc3RydWN0b3INCisgICAgfQ0KIH0NCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL3BvbS50eWNobyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BsdWdpbnMvcG9tLnR5Y2hvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjBhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9wbHVnaW5zL3BvbS50eWNobwpAQCAtMCwwICsxLDE1IEBACitvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLmFtYWx0aGVhLmxvYWRlcgorb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5hbWFsdGhlYS5tb2RlbC51dGlscworb3JnLmVjbGlwc2UuYXBwNG1jLnNjYS5sb2dnaW5nCitvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnNjaGVkdWxpbmcubG9hZGVyCitvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnVpCitvcmcuZWNsaXBzZS5hcHA0bWMuc2NhLnV0aWwKK29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZG9jdQorb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5leHBvcnRlcgorb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pcgorb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5pci5sb2FkZXIKK29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEubGx2bQorb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5zY2Fpcm1vZGVsZW5yaWNoZXIKK29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuc2VyaWFsaXphdGlvbgorb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51aQorb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51dGlscwpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM0NGFhYgotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3BvbS54bWwKQEAgLTAsMCArMSwxNDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICA8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+CisgIDxhcnRpZmFjdElkPnBhcmVudDwvYXJ0aWZhY3RJZD4KKyAgPHZlcnNpb24+MC45LjgtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAKKyAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgCisgIDxuYW1lPlNDQTJBTUFMVEhFQTwvbmFtZT4KKyAKKyAgPHByb3BlcnRpZXM+CisgICAgPHR5Y2hvLnZlcnNpb24+MS42LjA8L3R5Y2hvLnZlcnNpb24+CisgICAgCisgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+CisgICAgPHByb2plY3QucmVwb3J0aW5nLm91dHB1dEVuY29kaW5nPlVURi04PC9wcm9qZWN0LnJlcG9ydGluZy5vdXRwdXRFbmNvZGluZz4KKyAgPC9wcm9wZXJ0aWVzPgorIAorCTxwbHVnaW5SZXBvc2l0b3JpZXM+CisJCTxwbHVnaW5SZXBvc2l0b3J5PgorCQkJPGlkPmNiaTwvaWQ+CisJCQk8dXJsPmh0dHBzOi8vcmVwby5lY2xpcHNlLm9yZy9jb250ZW50L3JlcG9zaXRvcmllcy9jYmktcmVsZWFzZXMvPC91cmw+CisJCQk8cmVsZWFzZXM+CisJCQkJPGVuYWJsZWQ+dHJ1ZTwvZW5hYmxlZD4KKwkJCTwvcmVsZWFzZXM+CisJCQk8c25hcHNob3RzPgorCQkJCTxlbmFibGVkPmZhbHNlPC9lbmFibGVkPgorCQkJPC9zbmFwc2hvdHM+CisJCTwvcGx1Z2luUmVwb3NpdG9yeT4KKwk8L3BsdWdpblJlcG9zaXRvcmllcz4KKworICA8bW9kdWxlcz4KKyAgCQk8bW9kdWxlPnBsdWdpbnM8L21vZHVsZT4KKwkJPG1vZHVsZT5mZWF0dXJlczwvbW9kdWxlPgorCQk8bW9kdWxlPnJlbGVuZzwvbW9kdWxlPgorICA8L21vZHVsZXM+CisgIAorICAJPGJ1aWxkPgorCQk8cGx1Z2lucz4KKwkJCTxwbHVnaW4+CisJCQkJPGdyb3VwSWQ+b3JnLmVjbGlwc2UudHljaG88L2dyb3VwSWQ+CisJCQkJPGFydGlmYWN0SWQ+dHljaG8tbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+CisJCQkJPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKwkJCTwvcGx1Z2luPgorCisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnR5Y2hvLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4ke3R5Y2hvLnZlcnNpb259PC92ZXJzaW9uPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8dmVyYm9zZT50cnVlPC92ZXJib3NlPgorCQkJCQk8c291cmNlPjEuODwvc291cmNlPgorCQkJCQk8dGFyZ2V0PjEuODwvdGFyZ2V0PgorCQkJCTwvY29uZmlndXJhdGlvbj4KKwkJCTwvcGx1Z2luPgorCisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLnR5Y2hvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnRhcmdldC1wbGF0Zm9ybS1jb25maWd1cmF0aW9uPC9hcnRpZmFjdElkPgorCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+CisJCQkJPGNvbmZpZ3VyYXRpb24+CisJCQkJCTxlbnZpcm9ubWVudHM+CisJCQkJCQk8ZW52aXJvbm1lbnQ+CisJCQkJCQkJPG9zPmxpbnV4PC9vcz4KKwkJCQkJCQk8d3M+Z3RrPC93cz4KKwkJCQkJCQk8YXJjaD54ODZfNjQ8L2FyY2g+CisJCQkJCQk8L2Vudmlyb25tZW50PgorCQkJCQkJPGVudmlyb25tZW50PgorCQkJCQkJCTxvcz53aW4zMjwvb3M+CisJCQkJCQkJPHdzPndpbjMyPC93cz4KKwkJCQkJCQk8YXJjaD54ODZfNjQ8L2FyY2g+CisJCQkJCQk8L2Vudmlyb25tZW50PgorCQkJCQkJPGVudmlyb25tZW50PgorCQkJCQkJCTxvcz5tYWNvc3g8L29zPgorCQkJCQkJCTx3cz5jb2NvYTwvd3M+CisJCQkJCQkJPGFyY2g+eDg2XzY0PC9hcmNoPgorCQkJCQkJPC9lbnZpcm9ubWVudD4KKwkJCQkJPC9lbnZpcm9ubWVudHM+CisKKwkJCQkJPHRhcmdldD4KKwkJCQkJCTxhcnRpZmFjdD4KKwkJCQkJCQk8Z3JvdXBJZD5zY2EyYW1hbHRoZWE8L2dyb3VwSWQ+CisJCQkJCQkJPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS50YXJnZXQ8L2FydGlmYWN0SWQ+CisJCQkJCQkJPHZlcnNpb24+MC45LjgtU05BUFNIT1Q8L3ZlcnNpb24+CisJCQkJCQk8L2FydGlmYWN0PgorCQkJCQk8L3RhcmdldD4KKwkJCQkJPHRhcmdldERlZmluaXRpb25JbmNsdWRlU291cmNlPmhvbm9yPC90YXJnZXREZWZpbml0aW9uSW5jbHVkZVNvdXJjZT4KKwkJCQk8L2NvbmZpZ3VyYXRpb24+CisJCQk8L3BsdWdpbj4KKwkJCQorCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD50eWNoby1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+JHt0eWNoby52ZXJzaW9ufTwvdmVyc2lvbj4KKwkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJPCEtLSBhcmdMaW5lPiR7dHljaG8udGVzdEFyZ0xpbmV9PC9hcmdMaW5lPiAtLT4KKwkJCQkJPGZvcmtNb2RlPm5ldmVyPC9mb3JrTW9kZT4KKwkJCQkJPGluY2x1ZGVzPgorCQkJCQkJPGluY2x1ZGU+KiovKlRlc3QuKjwvaW5jbHVkZT4KKwkJCQkJPC9pbmNsdWRlcz4KKwkJCQk8L2NvbmZpZ3VyYXRpb24+CisJCQk8L3BsdWdpbj4KKworCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuZWNsaXBzZS50eWNobzwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD50eWNoby1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTx2ZXJzaW9uPiR7dHljaG8udmVyc2lvbn08L3ZlcnNpb24+CisKKwkJCQk8ZXhlY3V0aW9ucz4KKwkJCQkJPGV4ZWN1dGlvbj4KKwkJCQkJCTxpZD5wbHVnaW4tc291cmNlPC9pZD4KKwkJCQkJCTxnb2Fscz4KKwkJCQkJCQk8Z29hbD5wbHVnaW4tc291cmNlPC9nb2FsPgorCQkJCQkJPC9nb2Fscz4KKwkJCQkJPC9leGVjdXRpb24+CisJCQkJPC9leGVjdXRpb25zPgorCQkJPC9wbHVnaW4+CisJCTwvcGx1Z2lucz4KKwk8L2J1aWxkPgorCisJPHByb2ZpbGVzPgorCQk8cHJvZmlsZT4KKwkJCTxpZD5zaWduPC9pZD4KKwkJCTxidWlsZD4KKwkJCQk8cGx1Z2lucz4KKwkJCQkJPHBsdWdpbj4KKwkJCQkJCTxncm91cElkPm9yZy5lY2xpcHNlLmNiaS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorCQkJCQkJPGFydGlmYWN0SWQ+ZWNsaXBzZS1qYXJzaWduZXItcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCQkJPHZlcnNpb24+MS4xLjM8L3ZlcnNpb24+CisJCQkJCQk8ZXhlY3V0aW9ucz4KKwkJCQkJCQk8ZXhlY3V0aW9uPgorCQkJCQkJCQk8aWQ+c2lnbjwvaWQ+CisJCQkJCQkJCTxwaGFzZT5wYWNrYWdlPC9waGFzZT4KKwkJCQkJCQkJPGdvYWxzPgorCQkJCQkJCQkJPGdvYWw+c2lnbjwvZ29hbD4KKwkJCQkJCQkJPC9nb2Fscz4KKwkJCQkJCQk8L2V4ZWN1dGlvbj4KKwkJCQkJCTwvZXhlY3V0aW9ucz4KKwkJCQkJPC9wbHVnaW4+CisJCQkJPC9wbHVnaW5zPgorCQkJPC9idWlsZD4KKwkJPC9wcm9maWxlPgorCTwvcHJvZmlsZXM+ICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvbW9kZWwtdHJhbnNmb3JtYXRpb24vYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnRyYW5zZm9ybWF0aW9uLmJ1aWxkLy5wcm9qZWN0IGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudGFyZ2V0Ly5wcm9qZWN0CnNpbWlsYXJpdHkgaW5kZXggNzYlCmNvcHkgZnJvbSBlY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC8ucHJvamVjdApjb3B5IHRvIGVjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC8ucHJvamVjdAppbmRleCBlNTE1NWU0Li43NGI2ZGZiIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL21vZGVsLXRyYW5zZm9ybWF0aW9uL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy50cmFuc2Zvcm1hdGlvbi5idWlsZC8ucHJvamVjdAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS50YXJnZXQvLnByb2plY3QKQEAgLTEsNiArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMudHJhbnNmb3JtYXRpb24uYnVpbGQ8L25hbWU+CisJPG5hbWU+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS50YXJnZXQ8L25hbWU+CiAJPGNvbW1lbnQ+PC9jb21tZW50PgogCTxwcm9qZWN0cz4KIAk8L3Byb2plY3RzPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZC9hYm91dC5odG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudGFyZ2V0L2Fib3V0Lmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvYWJvdXQuaHRtbApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudGFyZ2V0L2Fib3V0Lmh0bWwKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuYnVpbGQvZXBsLTIuMC5odG1sIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudGFyZ2V0L2VwbC0yLjAuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5idWlsZC9lcGwtMi4wLmh0bWwKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC9lcGwtMi4wLmh0bWwKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC50YXJnZXQgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS50YXJnZXQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS50YXJnZXQudGFyZ2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1YmM0MzUKLS0tIC9kZXYvbnVsbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS50YXJnZXQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS50YXJnZXQudGFyZ2V0CkBAIC0wLDAgKzEsNTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPD9wZGU/PgorPCEtLSBnZW5lcmF0ZWQgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vZWNsaXBzZS1jYmkvdGFyZ2V0cGxhdGZvcm0tZHNsIC0tPgorPHRhcmdldCBuYW1lPSJTQ0EyQU1BTFRIRUEgVGFyZ2V0IiBzZXF1ZW5jZU51bWJlcj0iMTU4OTc4NTY3NCI+CisgIDxsb2NhdGlvbnM+CisgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9InRydWUiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0iZmFsc2UiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uuc2RrLmlkZSIgdmVyc2lvbj0iNC4xNC4wLkkyMDE5MTIxMC0wNjEwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLmVjb3JlLnhjb3JlLmxpYi5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIxLjUuMC52MjAxOTA0MDEtMDg1NiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLmVtZi5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi4yMC4wLnYyMDE5MTAyOC0wOTA1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLnRyYW5zYWN0aW9uLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjEuMTIuMC4yMDE4MDUxNDA4MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5lbWYudmFsaWRhdGlvbi5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIxLjEyLjEuMjAxODEyMDcwOTExIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UuZW1mLndvcmtzcGFjZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIxLjEyLjAuMjAxODA1MTQwODI0Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRleHQucnVudGltZS5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjIwLjAudjIwMTkxMjAyLTEyNTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54dGV4dC5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi4yMC4wLnYyMDE5MTIwMi0xMjU2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi4yMC4wLnYyMDE5MTIwMi0xMjU2Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2UueHRleHQueGJhc2UubGliLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjIuMjAuMC52MjAxOTEyMDItMDkxMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLnh0ZW5kLnNkay5mZWF0dXJlLmdyb3VwIiB2ZXJzaW9uPSIyLjIwLjAudjIwMTkxMjAyLTEyNTYiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS54cGFuZC5zZGsuZmVhdHVyZS5ncm91cCIgdmVyc2lvbj0iMi4yLjAudjIwMTYwNTI2MDMxNSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5jbGkiIHZlcnNpb249IjEuMi4wLnYyMDE0MDQyNzAyMjAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubGFuZyIgdmVyc2lvbj0iMi42LjAudjIwMTQwNDI3MDIyMCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUubG9nNGoiIHZlcnNpb249IjEuMi4xNS52MjAxMDEyMDcwODE1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS54ZXJjZXMiIHZlcnNpb249IjIuOS4wLnYyMDExMDEyMTE2MTciLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnhhbGFuIiB2ZXJzaW9uPSIyLjcuMS52MjAxMDA1MDgwNDAwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS54bWwucmVzb2x2ZXIiIHZlcnNpb249IjEuMi4wLnYyMDEwMDUwODA0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnhtbC5zZXJpYWxpemVyIiB2ZXJzaW9uPSIyLjcuMS52MjAxMDA1MDgwNDAwIi8+CisgICAgICA8dW5pdCBpZD0iamF2YXgueG1sIiB2ZXJzaW9uPSIxLjMuNC52MjAxMDA1MDgwNDAwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmpkb20iIHZlcnNpb249IjEuMS4xLnYyMDExMDExNTE0MDAiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmd1YXZhIiB2ZXJzaW9uPSIyNy4xLjAudjIwMTkwNTE3LTE5NDYiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmluamVjdCIgdmVyc2lvbj0iMy4wLjAudjIwMTYwNTE3MjEwMCIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE5LTEyIi8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0idHJ1ZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5hcHA0bWMucGxhdGZvcm0uc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuOS44LjIwMjAwNDMwMTQxMCIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9hcHA0bWMvdXBkYXRlc2l0ZXMvcmVsZWFzZXMvMC45LjgiLz4KKyAgICA8L2xvY2F0aW9uPgorICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJ0cnVlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9ImZhbHNlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5tYXRoIiB2ZXJzaW9uPSIyLjEuMC52MjAxMTA1MjEwNjUyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLm1hdGgzIiB2ZXJzaW9uPSIzLjUuMC52MjAxOTA2MTEtMTAyMyIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDE5MTEyNjIyMzI0Mi9yZXBvc2l0b3J5Ii8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0idHJ1ZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5zcGhpbnguc2RrLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjAuMTEuMi4yMDE4MDIyMzA4MDUiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvc3BoaW54L3VwZGF0ZXMvMC4xMS54Ii8+CisgICAgPC9sb2NhdGlvbj4KKyAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0idHJ1ZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJmYWxzZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KKyAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5saWNlbnNlLmZlYXR1cmUuZ3JvdXAiIHZlcnNpb249IjIuMC4yLnYyMDE4MTAxNi0yMjEwIi8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2NiaS91cGRhdGVzL2xpY2Vuc2UiLz4KKyAgICA8L2xvY2F0aW9uPgorICA8L2xvY2F0aW9ucz4KKzwvdGFyZ2V0PgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudGFyZ2V0L29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudGFyZ2V0LnRwZCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC50cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRlYzQwOQotLS0gL2Rldi9udWxsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnRhcmdldC50cGQKQEAgLTAsMCArMSw0NiBAQAordGFyZ2V0ICJTQ0EyQU1BTFRIRUEgVGFyZ2V0IgorCit3aXRoIHNvdXJjZSBhbGxFbnZpcm9ubWVudHMKKworbG9jYXRpb24gImh0dHA6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDE5LTEyIiB7CisJb3JnLmVjbGlwc2Uuc2RrLmlkZQorCW9yZy5lY2xpcHNlLmVtZi5lY29yZS54Y29yZS5saWIuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi5zZGsuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi50cmFuc2FjdGlvbi5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UuZW1mLnZhbGlkYXRpb24uZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLmVtZi53b3Jrc3BhY2UuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnJ1bnRpbWUuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnNkay5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UueHRleHQueGJhc2UuZmVhdHVyZS5ncm91cAorCW9yZy5lY2xpcHNlLnh0ZXh0LnhiYXNlLmxpYi5mZWF0dXJlLmdyb3VwCisJb3JnLmVjbGlwc2UueHRlbmQuc2RrLmZlYXR1cmUuZ3JvdXAKKwlvcmcuZWNsaXBzZS54cGFuZC5zZGsuZmVhdHVyZS5ncm91cAorCW9yZy5hcGFjaGUuY29tbW9ucy5jbGkKKwlvcmcuYXBhY2hlLmNvbW1vbnMubGFuZworCW9yZy5hcGFjaGUubG9nNGoKKwlvcmcuYXBhY2hlLnhlcmNlcworCW9yZy5hcGFjaGUueGFsYW4KKwlvcmcuYXBhY2hlLnhtbC5yZXNvbHZlcgorCW9yZy5hcGFjaGUueG1sLnNlcmlhbGl6ZXIKKwlqYXZheC54bWwKKwlvcmcuamRvbQorCWNvbS5nb29nbGUuZ3VhdmEKKwljb20uZ29vZ2xlLmluamVjdAorfQorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2FwcDRtYy91cGRhdGVzaXRlcy9yZWxlYXNlcy8wLjkuOCIgeworCW9yZy5lY2xpcHNlLmFwcDRtYy5wbGF0Zm9ybS5zZGsuZmVhdHVyZS5ncm91cAorfQorCitsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMTkxMTI2MjIzMjQyL3JlcG9zaXRvcnkiIHsKKwlvcmcuYXBhY2hlLmNvbW1vbnMubWF0aAorCW9yZy5hcGFjaGUuY29tbW9ucy5tYXRoMworfQorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3NwaGlueC91cGRhdGVzLzAuMTEueCIgeworCW9yZy5lY2xpcHNlLnNwaGlueC5zZGsuZmVhdHVyZS5ncm91cAorfQorCitsb2NhdGlvbiAiaHR0cDovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2NiaS91cGRhdGVzL2xpY2Vuc2UiIHsKKwlvcmcuZWNsaXBzZS5saWNlbnNlLmZlYXR1cmUuZ3JvdXAKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvLnByb2plY3QgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlLy5wcm9qZWN0CnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGVjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS8ucHJvamVjdApyZW5hbWUgdG8gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS8ucHJvamVjdAppbmRleCA3YTM1NGU0Li43MTUzOWI1IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvLnByb2plY3QKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS8ucHJvamVjdApAQCAtMSwxNyArMSwxNyBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08cHJvamVjdERlc2NyaXB0aW9uPg0KLQk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGU8L25hbWU+DQotCTxjb21tZW50PjwvY29tbWVudD4NCi0JPHByb2plY3RzPg0KLQk8L3Byb2plY3RzPg0KLQk8YnVpbGRTcGVjPg0KLQkJPGJ1aWxkQ29tbWFuZD4NCi0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuVXBkYXRlU2l0ZUJ1aWxkZXI8L25hbWU+DQotCQkJPGFyZ3VtZW50cz4NCi0JCQk8L2FyZ3VtZW50cz4NCi0JCTwvYnVpbGRDb21tYW5kPg0KLQk8L2J1aWxkU3BlYz4NCi0JPG5hdHVyZXM+DQotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5VcGRhdGVTaXRlTmF0dXJlPC9uYXR1cmU+DQotCTwvbmF0dXJlcz4NCi08L3Byb2plY3REZXNjcmlwdGlvbj4NCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPHByb2plY3REZXNjcmlwdGlvbj4KKwk8bmFtZT5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGU8L25hbWU+CisJPGNvbW1lbnQ+PC9jb21tZW50PgorCTxwcm9qZWN0cz4KKwk8L3Byb2plY3RzPgorCTxidWlsZFNwZWM+CisJCTxidWlsZENvbW1hbmQ+CisJCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuVXBkYXRlU2l0ZUJ1aWxkZXI8L25hbWU+CisJCQk8YXJndW1lbnRzPgorCQkJPC9hcmd1bWVudHM+CisJCTwvYnVpbGRDb21tYW5kPgorCTwvYnVpbGRTcGVjPgorCTxuYXR1cmVzPgorCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5VcGRhdGVTaXRlTmF0dXJlPC9uYXR1cmU+CisJPC9uYXR1cmVzPgorPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvYWJvdXQuaHRtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvYWJvdXQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2Fib3V0Lmh0bWwKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9jYXRlZ29yeS54bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2NhdGVnb3J5LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTA2OTk4Ci0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9jYXRlZ29yeS54bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzxzaXRlPgorICAgPGZlYXR1cmUgaWQ9Im9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEuZmVhdHVyZSI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0iU0NBMkFNQUxUSEVBIi8+CisgICA8L2ZlYXR1cmU+CisgICA8ZmVhdHVyZSBpZD0ib3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS5mZWF0dXJlLnNkayI+CisgICAgICA8Y2F0ZWdvcnkgbmFtZT0iU0NBMkFNQUxUSEVBIi8+CisgICA8L2ZlYXR1cmU+CisgICA8Y2F0ZWdvcnktZGVmIG5hbWU9IlNDQTJBTUFMVEhFQSIgbGFiZWw9IlNDQTJBTUFMVEhFQSIvPgorPC9zaXRlPgpkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2VwbC0yLjAuaHRtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvZXBsLTIuMC5odG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvZXBsLTIuMC5odG1sCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2VwbC0yLjAuaHRtbApkaWZmIC0tZ2l0IGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2luZGV4Lmh0bWwgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2luZGV4Lmh0bWwKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2luZGV4Lmh0bWwKcmVuYW1lIHRvIGVjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvaW5kZXguaHRtbAppbmRleCA0ODVjNjc2Li5lOTZmZDEwIDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvaW5kZXguaHRtbAorKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL2luZGV4Lmh0bWwKQEAgLTEsNjAgKzEsNjAgQEAKLTxodG1sPg0KLTxoZWFkPg0KLTx0aXRsZT5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGU8L3RpdGxlPg0KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4NCi08c3R5bGU+QGltcG9ydCB1cmwoIndlYi9zaXRlLmNzcyIpOzwvc3R5bGU+DQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLQl2YXIgcmV0dXJudmFsID0gMDsNCi0JdmFyIHN0eWxlc2hlZXQsIHhtbEZpbGUsIGNhY2hlLCBkb2M7DQotCWZ1bmN0aW9uIGluaXQoKXsNCi0JCS8vIE5TQ1AgNy4xKyAvIE1vemlsbGEgMS40LjErIC8gU2FmYXJpDQotCQkvLyBVc2UgdGhlIHN0YW5kYXJkIERPTSBMZXZlbCAyIHRlY2huaXF1ZSwgaWYgaXQgaXMgc3VwcG9ydGVkDQotCQlpZiAoZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQpIHsNCi0JCQl4bWxGaWxlID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoIiIsICIiLCBudWxsKTsNCi0JCQlzdHlsZXNoZWV0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoIiIsICIiLCBudWxsKTsNCi0JCQlpZiAoeG1sRmlsZS5sb2FkKXsNCi0JCQkJeG1sRmlsZS5sb2FkKCJzaXRlLnhtbCIpOw0KLQkJCQlzdHlsZXNoZWV0LmxvYWQoIndlYi9zaXRlLnhzbCIpOw0KLQkJCX0gZWxzZSB7DQotCQkJCWFsZXJ0KCJEb2N1bWVudCBjb3VsZCBub3QgYmUgbG9hZGVkIGJ5IGJyb3dzZXIuIik7DQotCQkJfQ0KLQkJCXhtbEZpbGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHRyYW5zZm9ybSwgZmFsc2UpOw0KLQkJCXN0eWxlc2hlZXQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHRyYW5zZm9ybSwgZmFsc2UpOw0KLQkJfQ0KLQkJLy9JRSA2LjArIHNvbHV0aW9uDQotCQllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgew0KLQkJCXhtbEZpbGUgPSBuZXcgQWN0aXZlWE9iamVjdCgibXN4bWwyLkRPTURvY3VtZW50LjMuMCIpOw0KLQkJCXhtbEZpbGUuYXN5bmMgPSBmYWxzZTsNCi0JCQl4bWxGaWxlLmxvYWQoInNpdGUueG1sIik7DQotCQkJc3R5bGVzaGVldCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJtc3htbDIuRnJlZVRocmVhZGVkRE9NRG9jdW1lbnQuMy4wIik7DQotCQkJc3R5bGVzaGVldC5hc3luYyA9IGZhbHNlOw0KLQkJCXN0eWxlc2hlZXQubG9hZCgid2ViL3NpdGUueHNsIik7DQotCQkJY2FjaGUgPSBuZXcgQWN0aXZlWE9iamVjdCgibXN4bWwyLlhTTFRlbXBsYXRlLjMuMCIpOw0KLQkJCWNhY2hlLnN0eWxlc2hlZXQgPSBzdHlsZXNoZWV0Ow0KLQkJCXRyYW5zZm9ybURhdGEoKTsNCi0JCX0NCi0JfQ0KLQkvLyBzZXBhcmF0ZSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiBmb3IgSUUgNi4wKw0KLQlmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKCl7DQotCQl2YXIgcHJvY2Vzc29yID0gY2FjaGUuY3JlYXRlUHJvY2Vzc29yKCk7DQotCQlwcm9jZXNzb3IuaW5wdXQgPSB4bWxGaWxlOw0KLQkJcHJvY2Vzc29yLnRyYW5zZm9ybSgpOw0KLQkJZGF0YS5pbm5lckhUTUwgPSBwcm9jZXNzb3Iub3V0cHV0Ow0KLQl9DQotCS8vIHNlcGFyYXRlIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIGZvciBOU0NQIDcuMSsgYW5kIE1vemlsbGEgMS40LjErIA0KLQlmdW5jdGlvbiB0cmFuc2Zvcm0oKXsNCi0JCXJldHVybnZhbCs9MTsNCi0JCWlmIChyZXR1cm52YWw9PTIpew0KLQkJCXZhciBwcm9jZXNzb3IgPSBuZXcgWFNMVFByb2Nlc3NvcigpOw0KLQkJCXByb2Nlc3Nvci5pbXBvcnRTdHlsZXNoZWV0KHN0eWxlc2hlZXQpOyANCi0JCQlkb2MgPSBwcm9jZXNzb3IudHJhbnNmb3JtVG9Eb2N1bWVudCh4bWxGaWxlKTsNCi0JCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGF0YSIpLmlubmVySFRNTCA9IGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MOw0KLQkJfQ0KLQl9DQotPC9zY3JpcHQ+DQotPC9oZWFkPg0KLTxib2R5IG9ubG9hZD0iaW5pdCgpOyI+DQotPCEtLVtpbnNlcnQgc3RhdGljIEhUTUwgaGVyZV0tLT4NCi08ZGl2IGlkPSJkYXRhIj48IS0tIHRoaXMgaXMgd2hlcmUgdGhlIHRyYW5zZm9ybWVkIGRhdGEgZ29lcyAtLT48L2Rpdj4NCi08L2JvZHk+DQotPC9odG1sPg0KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KKzxzdHlsZT5AaW1wb3J0IHVybCgid2ViL3NpdGUuY3NzIik7PC9zdHlsZT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwl2YXIgcmV0dXJudmFsID0gMDsKKwl2YXIgc3R5bGVzaGVldCwgeG1sRmlsZSwgY2FjaGUsIGRvYzsKKwlmdW5jdGlvbiBpbml0KCl7CisJCS8vIE5TQ1AgNy4xKyAvIE1vemlsbGEgMS40LjErIC8gU2FmYXJpCisJCS8vIFVzZSB0aGUgc3RhbmRhcmQgRE9NIExldmVsIDIgdGVjaG5pcXVlLCBpZiBpdCBpcyBzdXBwb3J0ZWQKKwkJaWYgKGRvY3VtZW50LmltcGxlbWVudGF0aW9uICYmIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50KSB7CisJCQl4bWxGaWxlID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoIiIsICIiLCBudWxsKTsKKwkJCXN0eWxlc2hlZXQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVEb2N1bWVudCgiIiwgIiIsIG51bGwpOworCQkJaWYgKHhtbEZpbGUubG9hZCl7CisJCQkJeG1sRmlsZS5sb2FkKCJzaXRlLnhtbCIpOworCQkJCXN0eWxlc2hlZXQubG9hZCgid2ViL3NpdGUueHNsIik7CisJCQl9IGVsc2UgeworCQkJCWFsZXJ0KCJEb2N1bWVudCBjb3VsZCBub3QgYmUgbG9hZGVkIGJ5IGJyb3dzZXIuIik7CisJCQl9CisJCQl4bWxGaWxlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCB0cmFuc2Zvcm0sIGZhbHNlKTsKKwkJCXN0eWxlc2hlZXQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIHRyYW5zZm9ybSwgZmFsc2UpOworCQl9CisJCS8vSUUgNi4wKyBzb2x1dGlvbgorCQllbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkgeworCQkJeG1sRmlsZSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJtc3htbDIuRE9NRG9jdW1lbnQuMy4wIik7CisJCQl4bWxGaWxlLmFzeW5jID0gZmFsc2U7CisJCQl4bWxGaWxlLmxvYWQoInNpdGUueG1sIik7CisJCQlzdHlsZXNoZWV0ID0gbmV3IEFjdGl2ZVhPYmplY3QoIm1zeG1sMi5GcmVlVGhyZWFkZWRET01Eb2N1bWVudC4zLjAiKTsKKwkJCXN0eWxlc2hlZXQuYXN5bmMgPSBmYWxzZTsKKwkJCXN0eWxlc2hlZXQubG9hZCgid2ViL3NpdGUueHNsIik7CisJCQljYWNoZSA9IG5ldyBBY3RpdmVYT2JqZWN0KCJtc3htbDIuWFNMVGVtcGxhdGUuMy4wIik7CisJCQljYWNoZS5zdHlsZXNoZWV0ID0gc3R5bGVzaGVldDsKKwkJCXRyYW5zZm9ybURhdGEoKTsKKwkJfQorCX0KKwkvLyBzZXBhcmF0ZSB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbiBmb3IgSUUgNi4wKworCWZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoKXsKKwkJdmFyIHByb2Nlc3NvciA9IGNhY2hlLmNyZWF0ZVByb2Nlc3NvcigpOworCQlwcm9jZXNzb3IuaW5wdXQgPSB4bWxGaWxlOworCQlwcm9jZXNzb3IudHJhbnNmb3JtKCk7CisJCWRhdGEuaW5uZXJIVE1MID0gcHJvY2Vzc29yLm91dHB1dDsKKwl9CisJLy8gc2VwYXJhdGUgdHJhbnNmb3JtYXRpb24gZnVuY3Rpb24gZm9yIE5TQ1AgNy4xKyBhbmQgTW96aWxsYSAxLjQuMSsgCisJZnVuY3Rpb24gdHJhbnNmb3JtKCl7CisJCXJldHVybnZhbCs9MTsKKwkJaWYgKHJldHVybnZhbD09Mil7CisJCQl2YXIgcHJvY2Vzc29yID0gbmV3IFhTTFRQcm9jZXNzb3IoKTsKKwkJCXByb2Nlc3Nvci5pbXBvcnRTdHlsZXNoZWV0KHN0eWxlc2hlZXQpOyAKKwkJCWRvYyA9IHByb2Nlc3Nvci50cmFuc2Zvcm1Ub0RvY3VtZW50KHhtbEZpbGUpOworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRhdGEiKS5pbm5lckhUTUwgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTDsKKwkJfQorCX0KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJpbml0KCk7Ij4KKzwhLS1baW5zZXJ0IHN0YXRpYyBIVE1MIGhlcmVdLS0+Cis8ZGl2IGlkPSJkYXRhIj48IS0tIHRoaXMgaXMgd2hlcmUgdGhlIHRyYW5zZm9ybWVkIGRhdGEgZ29lcyAtLT48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcG9tLnhtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE4ZmExCi0tLSAvZGV2L251bGwKKysrIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS9wb20ueG1sCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPgorCisgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKworICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGU8L2FydGlmYWN0SWQ+CisKKyAgPHBhY2thZ2luZz5lY2xpcHNlLXJlcG9zaXRvcnk8L3BhY2thZ2luZz4KKworICA8cGFyZW50PgorICAJPGdyb3VwSWQ+c2NhMmFtYWx0aGVhPC9ncm91cElkPgorICAJPGFydGlmYWN0SWQ+cGFyZW50PC9hcnRpZmFjdElkPgorCTx2ZXJzaW9uPjAuOS44LVNOQVBTSE9UPC92ZXJzaW9uPgorICAJPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgIDwvcGFyZW50PgorPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvZW1mLWdyYXBoaWNhbC12aWV3ZXIvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLmVtZnV0aWxzLnAycmVwby9zaXRlVGVtcGxhdGUvaW5kZXguaHRtbCBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvc2l0ZVRlbXBsYXRlL2luZGV4Lmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBlY2xpcHNlLXRvb2xzL2VtZi1ncmFwaGljYWwtdmlld2VyL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5lbWZ1dGlscy5wMnJlcG8vc2l0ZVRlbXBsYXRlL2luZGV4Lmh0bWwKY29weSB0byBlY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3NpdGVUZW1wbGF0ZS9pbmRleC5odG1sCmRpZmYgLS1naXQgYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvd2ViL3NpdGUuY3NzIGIvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS93ZWIvc2l0ZS5jc3MKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3dlYi9zaXRlLmNzcwpyZW5hbWUgdG8gZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvcmVsZW5nL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS93ZWIvc2l0ZS5jc3MKaW5kZXggNDI1MTM0ZS4uNjJjNmY5ZiAxMDA2NDQKLS0tIGEvZWNsaXBzZS10b29scy9zY2EyYW1hbHRoZWEvYnVpbGQvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3dlYi9zaXRlLmNzcworKysgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3dlYi9zaXRlLmNzcwpAQCAtMSwxMiArMSwxMiBAQAotPFNUWUxFIHR5cGU9InRleHQvY3NzIj4NCi10ZC5zcGFjZXIge3BhZGRpbmctYm90dG9tOiAxMHB4OyBwYWRkaW5nLXRvcDogMTBweDt9DQotLnRpdGxlIHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGNvbG9yOiAjOTlBQUNDO30NCi0uYm9keVRleHQgeyBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiMwMDAwMDA7ICB9DQotLnN1Yi1oZWFkZXIgeyBmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiA5cHQ7IGNvbG9yOiB3aGl0ZTt9DQotLmxvZy10ZXh0IHtmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogbGlnaHRlcjsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOmJsYWNrO30NCi0uYmlnLWhlYWRlciB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBib2xkOyBmb250LXNpemU6IDlwdDsgY29sb3I6IHdoaXRlOyBib3JkZXItdG9wOjEwcHggc29saWQgd2hpdGU7fQ0KLS5saWdodC1yb3cge2JhY2tncm91bmQ6I0ZGRkZGRn0NCi0uZGFyay1yb3cge2JhY2tncm91bmQ6I0VFRUVGRn0NCi0uaGVhZGVyIHtiYWNrZ3JvdW5kOiM5OUFBRER9DQotI2luZGVudCB7d29yZC13cmFwIDogYnJlYWstd29yZDt3aWR0aCA6MzAwcHg7dGV4dC1pbmRlbnQ6MTBweDt9DQotPC9TVFlMRT4NCis8U1RZTEUgdHlwZT0idGV4dC9jc3MiPgordGQuc3BhY2VyIHtwYWRkaW5nLWJvdHRvbTogMTBweDsgcGFkZGluZy10b3A6IDEwcHg7fQorLnRpdGxlIHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGNvbG9yOiAjOTlBQUNDO30KKy5ib2R5VGV4dCB7IGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOyBmb250LXNpemU6IDlwdDsgY29sb3I6IzAwMDAwMDsgIH0KKy5zdWItaGVhZGVyIHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogd2hpdGU7fQorLmxvZy10ZXh0IHtmb250LWZhbWlseTogc2Fucy1zZXJpZjsgZm9udC1zdHlsZTogbm9ybWFsOyBmb250LXdlaWdodDogbGlnaHRlcjsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOmJsYWNrO30KKy5iaWctaGVhZGVyIHsgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IGZvbnQtc3R5bGU6IG5vcm1hbDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogOXB0OyBjb2xvcjogd2hpdGU7IGJvcmRlci10b3A6MTBweCBzb2xpZCB3aGl0ZTt9CisubGlnaHQtcm93IHtiYWNrZ3JvdW5kOiNGRkZGRkZ9CisuZGFyay1yb3cge2JhY2tncm91bmQ6I0VFRUVGRn0KKy5oZWFkZXIge2JhY2tncm91bmQ6Izk5QUFERH0KKyNpbmRlbnQge3dvcmQtd3JhcCA6IGJyZWFrLXdvcmQ7d2lkdGggOjMwMHB4O3RleHQtaW5kZW50OjEwcHg7fQorPC9TVFlMRT4KZGlmZiAtLWdpdCBhL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL2J1aWxkL29yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZS93ZWIvc2l0ZS54c2wgYi9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3dlYi9zaXRlLnhzbApzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBlY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvd2ViL3NpdGUueHNsCnJlbmFtZSB0byBlY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9yZWxlbmcvb3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlL3dlYi9zaXRlLnhzbAppbmRleCA0YTJkMDk1Li41NTgyYjc0IDEwMDY0NAotLS0gYS9lY2xpcHNlLXRvb2xzL3NjYTJhbWFsdGhlYS9idWlsZC9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvd2ViL3NpdGUueHNsCisrKyBiL2VjbGlwc2UtdG9vbHMvc2NhMmFtYWx0aGVhL3JlbGVuZy9vcmcuZWNsaXBzZS5hcHA0bWMuc2NhMmFtYWx0aGVhLnVwZGF0ZXNpdGUvd2ViL3NpdGUueHNsCkBAIC0xLDIxNCArMSwyMTQgQEAKLTx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uID0gJzEuMCcgeG1sbnM6eHNsPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0nIHhtbG5zOm1zeHNsPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnhzbHQiPg0KLTx4c2w6b3V0cHV0IG1ldGhvZD0iaHRtbCIgZW5jb2Rpbmc9IlVURi04Ii8+DQotPHhzbDprZXkgbmFtZT0iY2F0IiBtYXRjaD0iY2F0ZWdvcnkiIHVzZT0iQG5hbWUiLz4NCi08eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4NCi08eHNsOmZvci1lYWNoIHNlbGVjdD0ic2l0ZSI+DQotCTxodG1sPg0KLQk8aGVhZD4NCi0JPHRpdGxlPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZTwvdGl0bGU+DQotCTxzdHlsZT5AaW1wb3J0IHVybCgid2ViL3NpdGUuY3NzIik7PC9zdHlsZT4NCi0JPC9oZWFkPg0KLQk8Ym9keT4NCi0JPGgxIGNsYXNzPSJ0aXRsZSI+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlPC9oMT4NCi0JPHAgY2xhc3M9ImJvZHlUZXh0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iLz48L3A+DQotCTx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjIiPg0KLQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iY2F0ZWdvcnktZGVmIj4NCi0JCTx4c2w6c29ydCBzZWxlY3Q9IkBsYWJlbCIgb3JkZXI9ImFzY2VuZGluZyIgY2FzZS1vcmRlcj0idXBwZXItZmlyc3QiLz4NCi0JCTx4c2w6c29ydCBzZWxlY3Q9IkBuYW1lIiBvcmRlcj0iYXNjZW5kaW5nIiBjYXNlLW9yZGVyPSJ1cHBlci1maXJzdCIvPg0KLQk8eHNsOmlmIHRlc3Q9ImNvdW50KGtleSgnY2F0JyxAbmFtZSkpICE9IDAiPg0KLQkJCTx0ciBjbGFzcz0iaGVhZGVyIj4NCi0JCQkJPHRkIGNsYXNzPSJzdWItaGVhZGVyIiB3aWR0aD0iMzAlIj4NCi0JCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmFtZSIvPg0KLQkJCQk8L3RkPg0KLQkJCQk8dGQgY2xhc3M9InN1Yi1oZWFkZXIiIHdpZHRoPSI3MCUiPg0KLQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBsYWJlbCIvPg0KLQkJCQk8L3RkPg0KLQkJCTwvdHI+DQotCQkJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImtleSgnY2F0JyxAbmFtZSkiPg0KLQkJCTx4c2w6c29ydCBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AdmVyc2lvbiIgb3JkZXI9ImFzY2VuZGluZyIvPg0KLQkJCTx4c2w6c29ydCBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AaWQiIG9yZGVyPSJhc2NlbmRpbmciIGNhc2Utb3JkZXI9InVwcGVyLWZpcnN0Ii8+DQotCQkJPHRyPg0KLQkJCQk8eHNsOmNob29zZT4NCi0JCQkJPHhzbDp3aGVuIHRlc3Q9Iihwb3NpdGlvbigpIG1vZCAyID0gMSkiPg0KLQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmRhcmstcm93PC94c2w6YXR0cmlidXRlPg0KLQkJCQk8L3hzbDp3aGVuPg0KLQkJCQk8eHNsOm90aGVyd2lzZT4NCi0JCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj5saWdodC1yb3c8L3hzbDphdHRyaWJ1dGU+DQotCQkJCTwveHNsOm90aGVyd2lzZT4NCi0JCQkJPC94c2w6Y2hvb3NlPg0KLQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij4NCi0JCQkJCQk8eHNsOmNob29zZT4NCi0JCQkJCQk8eHNsOndoZW4gdGVzdD0iYW5jZXN0b3I6OmZlYXR1cmUvL0BsYWJlbCI+DQotCQkJCQkJCTxhIGhyZWY9InthbmNlc3Rvcjo6ZmVhdHVyZS8vQHVybH0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQGxhYmVsIi8+PC9hPg0KLQkJCQkJCQk8YnIvPg0KLQkJCQkJCQk8ZGl2IGlkPSJpbmRlbnQiPg0KLQkJCQkJCQkoPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AaWQiLz4gLSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iYW5jZXN0b3I6OmZlYXR1cmUvL0B2ZXJzaW9uIi8+KQ0KLQkJCQkJCQk8L2Rpdj4NCi0JCQkJCQk8L3hzbDp3aGVuPg0KLQkJCQkJCTx4c2w6b3RoZXJ3aXNlPg0KLQkJCQkJCTxhIGhyZWY9InthbmNlc3Rvcjo6ZmVhdHVyZS8vQHVybH0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQGlkIi8+IC0gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AdmVyc2lvbiIvPjwvYT4NCi0JCQkJCQk8L3hzbDpvdGhlcndpc2U+DQotCQkJCQkJPC94c2w6Y2hvb3NlPg0KLQkJCQkJCTxiciAvPg0KLQkJCQk8L3RkPg0KLQkJCQk8dGQ+DQotCQkJCQk8dGFibGU+DQotCQkJCQkJPHhzbDppZiB0ZXN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQG9zIj4NCi0JCQkJCQkJPHRyPjx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPk9wZXJhdGluZyBTeXN0ZW1zOjwvdGQ+DQotCQkJCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQG9zIi8+PC90ZD4NCi0JCQkJCQkJPC90cj4NCi0JCQkJCQk8L3hzbDppZj4NCi0JCQkJCQk8eHNsOmlmIHRlc3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9Ad3MiPg0KLQkJCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+V2luZG93cyBTeXN0ZW1zOjwvdGQ+DQotCQkJCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQHdzIi8+PC90ZD4NCi0JCQkJCQkJPC90cj4NCi0JCQkJCQk8L3hzbDppZj4NCi0JCQkJCQk8eHNsOmlmIHRlc3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AbmwiPg0KLQkJCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+TGFuZ3VhZ2VzOjwvdGQ+DQotCQkJCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQG5sIi8+PC90ZD4NCi0JCQkJCQkJPC90cj4NCi0JCQkJCQk8L3hzbDppZj4NCi0JCQkJCQk8eHNsOmlmIHRlc3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AYXJjaCI+DQotCQkJCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5BcmNoaXRlY3R1cmU6PC90ZD4NCi0JCQkJCQkJPHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AYXJjaCIvPjwvdGQ+DQotCQkJCQkJCTwvdHI+DQotCQkJCQkJPC94c2w6aWY+DQotCQkJCQk8L3RhYmxlPg0KLQkJCQk8L3RkPg0KLQkJCTwvdHI+DQotCQkJPC94c2w6Zm9yLWVhY2g+DQotCQkJPHRyPjx0ZCBjbGFzcz0ic3BhY2VyIj48YnIvPjwvdGQ+PHRkIGNsYXNzPSJzcGFjZXIiPjxici8+PC90ZD48L3RyPg0KLQkJPC94c2w6aWY+DQotCTwveHNsOmZvci1lYWNoPg0KLQk8eHNsOmlmIHRlc3Q9ImNvdW50KGZlYXR1cmUpICAmZ3Q7IGNvdW50KGZlYXR1cmUvY2F0ZWdvcnkpIj4NCi0JPHRyIGNsYXNzPSJoZWFkZXIiPg0KLQkJPHRkIGNsYXNzPSJzdWItaGVhZGVyIiBjb2xzcGFuPSIyIj4NCi0JCVVuY2F0ZWdvcml6ZWQNCi0JCTwvdGQ+DQotCTwvdHI+DQotCTwveHNsOmlmPg0KLQk8eHNsOmNob29zZT4NCi0JPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnbXN4c2w6bm9kZS1zZXQnKSI+DQotCSAgIDx4c2w6dmFyaWFibGUgbmFtZT0icnRmLW5vZGVzIj4NCi0JCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJmZWF0dXJlW25vdChjYXRlZ29yeSldIj4NCi0JCQk8eHNsOnNvcnQgc2VsZWN0PSJAaWQiIG9yZGVyPSJhc2NlbmRpbmciIGNhc2Utb3JkZXI9InVwcGVyLWZpcnN0Ii8+DQotCQkJPHhzbDpzb3J0IHNlbGVjdD0iQHZlcnNpb24iIG9yZGVyPSJhc2NlbmRpbmciIC8+DQotCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9Ii4iLz4NCi0JCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSIuIiAvPg0KLQkJPC94c2w6Zm9yLWVhY2g+DQotCSAgIDwveHNsOnZhcmlhYmxlPg0KLQkgICA8eHNsOnZhcmlhYmxlIG5hbWU9Im15Tm9kZVNldCIgc2VsZWN0PSJtc3hzbDpub2RlLXNldCgkcnRmLW5vZGVzKS8qIi8+DQotCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSIkbXlOb2RlU2V0Ij4NCi0JPHRyPg0KLQkJPHhzbDpjaG9vc2U+DQotCQk8eHNsOndoZW4gdGVzdD0icG9zaXRpb24oKSBtb2QgMiA9IDEiPg0KLQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmRhcmstcm93PC94c2w6YXR0cmlidXRlPg0KLQkJPC94c2w6d2hlbj4NCi0JCTx4c2w6b3RoZXJ3aXNlPg0KLQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmxpZ2h0LXJvdzwveHNsOmF0dHJpYnV0ZT4NCi0JCTwveHNsOm90aGVyd2lzZT4NCi0JCTwveHNsOmNob29zZT4NCi0JCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPg0KLQkJCTx4c2w6Y2hvb3NlPg0KLQkJCTx4c2w6d2hlbiB0ZXN0PSJAbGFiZWwiPg0KLQkJCQk8YSBocmVmPSJ7QHVybH0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGFiZWwiLz48L2E+DQotCQkJCTxiciAvPg0KLQkJCQk8ZGl2IGlkPSJpbmRlbnQiPg0KLQkJCQkoPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpZCIvPiAtIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmVyc2lvbiIvPikNCi0JCQkJPC9kaXY+DQotCQkJPC94c2w6d2hlbj4NCi0JCQk8eHNsOm90aGVyd2lzZT4NCi0JCQkJPGEgaHJlZj0ie0B1cmx9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGlkIi8+IC0gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2ZXJzaW9uIi8+PC9hPg0KLQkJCTwveHNsOm90aGVyd2lzZT4NCi0JCQk8L3hzbDpjaG9vc2U+DQotCQkJPGJyIC8+PGJyIC8+DQotCQk8L3RkPg0KLQkJPHRkPg0KLQkJCTx0YWJsZT4NCi0JCQkJPHhzbDppZiB0ZXN0PSJAb3MiPg0KLQkJCQkJPHRyPjx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPk9wZXJhdGluZyBTeXN0ZW1zOjwvdGQ+DQotCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG9zIi8+PC90ZD4NCi0JCQkJCTwvdHI+DQotCQkJCTwveHNsOmlmPg0KLQkJCQk8eHNsOmlmIHRlc3Q9IkB3cyI+DQotCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+V2luZG93cyBTeXN0ZW1zOjwvdGQ+DQotCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHdzIi8+PC90ZD4NCi0JCQkJCTwvdHI+DQotCQkJCTwveHNsOmlmPg0KLQkJCQk8eHNsOmlmIHRlc3Q9IkBubCI+DQotCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+TGFuZ3VhZ2VzOjwvdGQ+DQotCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5sIi8+PC90ZD4NCi0JCQkJCTwvdHI+DQotCQkJCTwveHNsOmlmPg0KLQkJCQk8eHNsOmlmIHRlc3Q9IkBhcmNoIj4NCi0JCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5BcmNoaXRlY3R1cmU6PC90ZD4NCi0JCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAYXJjaCIvPjwvdGQ+DQotCQkJCQk8L3RyPg0KLQkJCQk8L3hzbDppZj4NCi0JCQk8L3RhYmxlPg0KLQkJPC90ZD4NCi0JPC90cj4NCi0JPC94c2w6Zm9yLWVhY2g+DQotCTwveHNsOndoZW4+DQotCTx4c2w6b3RoZXJ3aXNlPg0KLQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iZmVhdHVyZVtub3QoY2F0ZWdvcnkpXSI+DQotCTx4c2w6c29ydCBzZWxlY3Q9IkBpZCIgb3JkZXI9ImFzY2VuZGluZyIgY2FzZS1vcmRlcj0idXBwZXItZmlyc3QiLz4NCi0JPHhzbDpzb3J0IHNlbGVjdD0iQHZlcnNpb24iIG9yZGVyPSJhc2NlbmRpbmciIC8+DQotCTx0cj4NCi0JCTx4c2w6Y2hvb3NlPg0KLQkJPHhzbDp3aGVuIHRlc3Q9ImNvdW50KHByZWNlZGluZy1zaWJsaW5nOjpmZWF0dXJlW25vdChjYXRlZ29yeSldKSBtb2QgMiA9IDEiPg0KLQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmRhcmstcm93PC94c2w6YXR0cmlidXRlPg0KLQkJPC94c2w6d2hlbj4NCi0JCTx4c2w6b3RoZXJ3aXNlPg0KLQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmxpZ2h0LXJvdzwveHNsOmF0dHJpYnV0ZT4NCi0JCTwveHNsOm90aGVyd2lzZT4NCi0JCTwveHNsOmNob29zZT4NCi0JCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPg0KLQkJCTx4c2w6Y2hvb3NlPg0KLQkJCTx4c2w6d2hlbiB0ZXN0PSJAbGFiZWwiPg0KLQkJCQk8YSBocmVmPSJ7QHVybH0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGFiZWwiLz48L2E+DQotCQkJCTxiciAvPg0KLQkJCQk8ZGl2IGlkPSJpbmRlbnQiPg0KLQkJCQkoPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpZCIvPiAtIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmVyc2lvbiIvPikNCi0JCQkJPC9kaXY+DQotCQkJPC94c2w6d2hlbj4NCi0JCQk8eHNsOm90aGVyd2lzZT4NCi0JCQkJPGEgaHJlZj0ie0B1cmx9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGlkIi8+IC0gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2ZXJzaW9uIi8+PC9hPg0KLQkJCTwveHNsOm90aGVyd2lzZT4NCi0JCQk8L3hzbDpjaG9vc2U+DQotCQkJPGJyIC8+PGJyIC8+DQotCQk8L3RkPg0KLQkJPHRkPg0KLQkJCTx0YWJsZT4NCi0JCQkJPHhzbDppZiB0ZXN0PSJAb3MiPg0KLQkJCQkJPHRyPjx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPk9wZXJhdGluZyBTeXN0ZW1zOjwvdGQ+DQotCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG9zIi8+PC90ZD4NCi0JCQkJCTwvdHI+DQotCQkJCTwveHNsOmlmPg0KLQkJCQk8eHNsOmlmIHRlc3Q9IkB3cyI+DQotCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+V2luZG93cyBTeXN0ZW1zOjwvdGQ+DQotCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHdzIi8+PC90ZD4NCi0JCQkJCTwvdHI+DQotCQkJCTwveHNsOmlmPg0KLQkJCQk8eHNsOmlmIHRlc3Q9IkBubCI+DQotCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+TGFuZ3VhZ2VzOjwvdGQ+DQotCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5sIi8+PC90ZD4NCi0JCQkJCTwvdHI+DQotCQkJCTwveHNsOmlmPg0KLQkJCQk8eHNsOmlmIHRlc3Q9IkBhcmNoIj4NCi0JCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5BcmNoaXRlY3R1cmU6PC90ZD4NCi0JCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAYXJjaCIvPjwvdGQ+DQotCQkJCQk8L3RyPg0KLQkJCQk8L3hzbDppZj4NCi0JCQk8L3RhYmxlPg0KLQkJPC90ZD4NCi0JPC90cj4NCi0JPC94c2w6Zm9yLWVhY2g+DQotCTwveHNsOm90aGVyd2lzZT4NCi0JPC94c2w6Y2hvb3NlPg0KLQk8L3RhYmxlPg0KLQk8L2JvZHk+DQotCTwvaHRtbD4NCi08L3hzbDpmb3ItZWFjaD4NCi08L3hzbDp0ZW1wbGF0ZT4NCi08L3hzbDpzdHlsZXNoZWV0Pg0KKzx4c2w6c3R5bGVzaGVldCB2ZXJzaW9uID0gJzEuMCcgeG1sbnM6eHNsPSdodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0nIHhtbG5zOm1zeHNsPSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnhzbHQiPgorPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiBlbmNvZGluZz0iVVRGLTgiLz4KKzx4c2w6a2V5IG5hbWU9ImNhdCIgbWF0Y2g9ImNhdGVnb3J5IiB1c2U9IkBuYW1lIi8+Cis8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KKzx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJzaXRlIj4KKwk8aHRtbD4KKwk8aGVhZD4KKwk8dGl0bGU+b3JnLmVjbGlwc2UuYXBwNG1jLnNjYTJhbWFsdGhlYS51cGRhdGVzaXRlPC90aXRsZT4KKwk8c3R5bGU+QGltcG9ydCB1cmwoIndlYi9zaXRlLmNzcyIpOzwvc3R5bGU+CisJPC9oZWFkPgorCTxib2R5PgorCTxoMSBjbGFzcz0idGl0bGUiPm9yZy5lY2xpcHNlLmFwcDRtYy5zY2EyYW1hbHRoZWEudXBkYXRlc2l0ZTwvaDE+CisJPHAgY2xhc3M9ImJvZHlUZXh0Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iZGVzY3JpcHRpb24iLz48L3A+CisJPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMiI+CisJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9ImNhdGVnb3J5LWRlZiI+CisJCTx4c2w6c29ydCBzZWxlY3Q9IkBsYWJlbCIgb3JkZXI9ImFzY2VuZGluZyIgY2FzZS1vcmRlcj0idXBwZXItZmlyc3QiLz4KKwkJPHhzbDpzb3J0IHNlbGVjdD0iQG5hbWUiIG9yZGVyPSJhc2NlbmRpbmciIGNhc2Utb3JkZXI9InVwcGVyLWZpcnN0Ii8+CisJPHhzbDppZiB0ZXN0PSJjb3VudChrZXkoJ2NhdCcsQG5hbWUpKSAhPSAwIj4KKwkJCTx0ciBjbGFzcz0iaGVhZGVyIj4KKwkJCQk8dGQgY2xhc3M9InN1Yi1oZWFkZXIiIHdpZHRoPSIzMCUiPgorCQkJCQk8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG5hbWUiLz4KKwkJCQk8L3RkPgorCQkJCTx0ZCBjbGFzcz0ic3ViLWhlYWRlciIgd2lkdGg9IjcwJSI+CisJCQkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGFiZWwiLz4KKwkJCQk8L3RkPgorCQkJPC90cj4KKwkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJrZXkoJ2NhdCcsQG5hbWUpIj4KKwkJCTx4c2w6c29ydCBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AdmVyc2lvbiIgb3JkZXI9ImFzY2VuZGluZyIvPgorCQkJPHhzbDpzb3J0IHNlbGVjdD0iYW5jZXN0b3I6OmZlYXR1cmUvL0BpZCIgb3JkZXI9ImFzY2VuZGluZyIgY2FzZS1vcmRlcj0idXBwZXItZmlyc3QiLz4KKwkJCTx0cj4KKwkJCQk8eHNsOmNob29zZT4KKwkJCQk8eHNsOndoZW4gdGVzdD0iKHBvc2l0aW9uKCkgbW9kIDIgPSAxKSI+CisJCQkJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj5kYXJrLXJvdzwveHNsOmF0dHJpYnV0ZT4KKwkJCQk8L3hzbDp3aGVuPgorCQkJCTx4c2w6b3RoZXJ3aXNlPgorCQkJCQk8eHNsOmF0dHJpYnV0ZSBuYW1lPSJjbGFzcyI+bGlnaHQtcm93PC94c2w6YXR0cmlidXRlPgorCQkJCTwveHNsOm90aGVyd2lzZT4KKwkJCQk8L3hzbDpjaG9vc2U+CisJCQkJPHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+CisJCQkJCQk8eHNsOmNob29zZT4KKwkJCQkJCTx4c2w6d2hlbiB0ZXN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQGxhYmVsIj4KKwkJCQkJCQk8YSBocmVmPSJ7YW5jZXN0b3I6OmZlYXR1cmUvL0B1cmx9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iYW5jZXN0b3I6OmZlYXR1cmUvL0BsYWJlbCIvPjwvYT4KKwkJCQkJCQk8YnIvPgorCQkJCQkJCTxkaXYgaWQ9ImluZGVudCI+CisJCQkJCQkJKDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQGlkIi8+IC0gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AdmVyc2lvbiIvPikKKwkJCQkJCQk8L2Rpdj4KKwkJCQkJCTwveHNsOndoZW4+CisJCQkJCQk8eHNsOm90aGVyd2lzZT4KKwkJCQkJCTxhIGhyZWY9InthbmNlc3Rvcjo6ZmVhdHVyZS8vQHVybH0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQGlkIi8+IC0gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AdmVyc2lvbiIvPjwvYT4KKwkJCQkJCTwveHNsOm90aGVyd2lzZT4KKwkJCQkJCTwveHNsOmNob29zZT4KKwkJCQkJCTxiciAvPgorCQkJCTwvdGQ+CisJCQkJPHRkPgorCQkJCQk8dGFibGU+CisJCQkJCQk8eHNsOmlmIHRlc3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9Ab3MiPgorCQkJCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5PcGVyYXRpbmcgU3lzdGVtczo8L3RkPgorCQkJCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQG9zIi8+PC90ZD4KKwkJCQkJCQk8L3RyPgorCQkJCQkJPC94c2w6aWY+CisJCQkJCQk8eHNsOmlmIHRlc3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9Ad3MiPgorCQkJCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5XaW5kb3dzIFN5c3RlbXM6PC90ZD4KKwkJCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iYW5jZXN0b3I6OmZlYXR1cmUvL0B3cyIvPjwvdGQ+CisJCQkJCQkJPC90cj4KKwkJCQkJCTwveHNsOmlmPgorCQkJCQkJPHhzbDppZiB0ZXN0PSJhbmNlc3Rvcjo6ZmVhdHVyZS8vQG5sIj4KKwkJCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+TGFuZ3VhZ2VzOjwvdGQ+CisJCQkJCQkJPHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AbmwiLz48L3RkPgorCQkJCQkJCTwvdHI+CisJCQkJCQk8L3hzbDppZj4KKwkJCQkJCTx4c2w6aWYgdGVzdD0iYW5jZXN0b3I6OmZlYXR1cmUvL0BhcmNoIj4KKwkJCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+QXJjaGl0ZWN0dXJlOjwvdGQ+CisJCQkJCQkJPHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImFuY2VzdG9yOjpmZWF0dXJlLy9AYXJjaCIvPjwvdGQ+CisJCQkJCQkJPC90cj4KKwkJCQkJCTwveHNsOmlmPgorCQkJCQk8L3RhYmxlPgorCQkJCTwvdGQ+CisJCQk8L3RyPgorCQkJPC94c2w6Zm9yLWVhY2g+CisJCQk8dHI+PHRkIGNsYXNzPSJzcGFjZXIiPjxici8+PC90ZD48dGQgY2xhc3M9InNwYWNlciI+PGJyLz48L3RkPjwvdHI+CisJCTwveHNsOmlmPgorCTwveHNsOmZvci1lYWNoPgorCTx4c2w6aWYgdGVzdD0iY291bnQoZmVhdHVyZSkgICZndDsgY291bnQoZmVhdHVyZS9jYXRlZ29yeSkiPgorCTx0ciBjbGFzcz0iaGVhZGVyIj4KKwkJPHRkIGNsYXNzPSJzdWItaGVhZGVyIiBjb2xzcGFuPSIyIj4KKwkJVW5jYXRlZ29yaXplZAorCQk8L3RkPgorCTwvdHI+CisJPC94c2w6aWY+CisJPHhzbDpjaG9vc2U+CisJPHhzbDp3aGVuIHRlc3Q9ImZ1bmN0aW9uLWF2YWlsYWJsZSgnbXN4c2w6bm9kZS1zZXQnKSI+CisJICAgPHhzbDp2YXJpYWJsZSBuYW1lPSJydGYtbm9kZXMiPgorCQk8eHNsOmZvci1lYWNoIHNlbGVjdD0iZmVhdHVyZVtub3QoY2F0ZWdvcnkpXSI+CisJCQk8eHNsOnNvcnQgc2VsZWN0PSJAaWQiIG9yZGVyPSJhc2NlbmRpbmciIGNhc2Utb3JkZXI9InVwcGVyLWZpcnN0Ii8+CisJCQk8eHNsOnNvcnQgc2VsZWN0PSJAdmVyc2lvbiIgb3JkZXI9ImFzY2VuZGluZyIgLz4KKwkJCTx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIuIi8+CisJCQk8eHNsOmNvcHktb2Ygc2VsZWN0PSIuIiAvPgorCQk8L3hzbDpmb3ItZWFjaD4KKwkgICA8L3hzbDp2YXJpYWJsZT4KKwkgICA8eHNsOnZhcmlhYmxlIG5hbWU9Im15Tm9kZVNldCIgc2VsZWN0PSJtc3hzbDpub2RlLXNldCgkcnRmLW5vZGVzKS8qIi8+CisJPHhzbDpmb3ItZWFjaCBzZWxlY3Q9IiRteU5vZGVTZXQiPgorCTx0cj4KKwkJPHhzbDpjaG9vc2U+CisJCTx4c2w6d2hlbiB0ZXN0PSJwb3NpdGlvbigpIG1vZCAyID0gMSI+CisJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj5kYXJrLXJvdzwveHNsOmF0dHJpYnV0ZT4KKwkJPC94c2w6d2hlbj4KKwkJPHhzbDpvdGhlcndpc2U+CisJCTx4c2w6YXR0cmlidXRlIG5hbWU9ImNsYXNzIj5saWdodC1yb3c8L3hzbDphdHRyaWJ1dGU+CisJCTwveHNsOm90aGVyd2lzZT4KKwkJPC94c2w6Y2hvb3NlPgorCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij4KKwkJCTx4c2w6Y2hvb3NlPgorCQkJPHhzbDp3aGVuIHRlc3Q9IkBsYWJlbCI+CisJCQkJPGEgaHJlZj0ie0B1cmx9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGxhYmVsIi8+PC9hPgorCQkJCTxiciAvPgorCQkJCTxkaXYgaWQ9ImluZGVudCI+CisJCQkJKDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAaWQiLz4gLSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZlcnNpb24iLz4pCisJCQkJPC9kaXY+CisJCQk8L3hzbDp3aGVuPgorCQkJPHhzbDpvdGhlcndpc2U+CisJCQkJPGEgaHJlZj0ie0B1cmx9Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQGlkIi8+IC0gPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB2ZXJzaW9uIi8+PC9hPgorCQkJPC94c2w6b3RoZXJ3aXNlPgorCQkJPC94c2w6Y2hvb3NlPgorCQkJPGJyIC8+PGJyIC8+CisJCTwvdGQ+CisJCTx0ZD4KKwkJCTx0YWJsZT4KKwkJCQk8eHNsOmlmIHRlc3Q9IkBvcyI+CisJCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5PcGVyYXRpbmcgU3lzdGVtczo8L3RkPgorCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQG9zIi8+PC90ZD4KKwkJCQkJPC90cj4KKwkJCQk8L3hzbDppZj4KKwkJCQk8eHNsOmlmIHRlc3Q9IkB3cyI+CisJCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5XaW5kb3dzIFN5c3RlbXM6PC90ZD4KKwkJCQkJPHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkB3cyIvPjwvdGQ+CisJCQkJCTwvdHI+CisJCQkJPC94c2w6aWY+CisJCQkJPHhzbDppZiB0ZXN0PSJAbmwiPgorCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+TGFuZ3VhZ2VzOjwvdGQ+CisJCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbmwiLz48L3RkPgorCQkJCQk8L3RyPgorCQkJCTwveHNsOmlmPgorCQkJCTx4c2w6aWYgdGVzdD0iQGFyY2giPgorCQkJCQk8dHI+PHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+QXJjaGl0ZWN0dXJlOjwvdGQ+CisJCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAYXJjaCIvPjwvdGQ+CisJCQkJCTwvdHI+CisJCQkJPC94c2w6aWY+CisJCQk8L3RhYmxlPgorCQk8L3RkPgorCTwvdHI+CisJPC94c2w6Zm9yLWVhY2g+CisJPC94c2w6d2hlbj4KKwk8eHNsOm90aGVyd2lzZT4KKwk8eHNsOmZvci1lYWNoIHNlbGVjdD0iZmVhdHVyZVtub3QoY2F0ZWdvcnkpXSI+CisJPHhzbDpzb3J0IHNlbGVjdD0iQGlkIiBvcmRlcj0iYXNjZW5kaW5nIiBjYXNlLW9yZGVyPSJ1cHBlci1maXJzdCIvPgorCTx4c2w6c29ydCBzZWxlY3Q9IkB2ZXJzaW9uIiBvcmRlcj0iYXNjZW5kaW5nIiAvPgorCTx0cj4KKwkJPHhzbDpjaG9vc2U+CisJCTx4c2w6d2hlbiB0ZXN0PSJjb3VudChwcmVjZWRpbmctc2libGluZzo6ZmVhdHVyZVtub3QoY2F0ZWdvcnkpXSkgbW9kIDIgPSAxIj4KKwkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmRhcmstcm93PC94c2w6YXR0cmlidXRlPgorCQk8L3hzbDp3aGVuPgorCQk8eHNsOm90aGVyd2lzZT4KKwkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iY2xhc3MiPmxpZ2h0LXJvdzwveHNsOmF0dHJpYnV0ZT4KKwkJPC94c2w6b3RoZXJ3aXNlPgorCQk8L3hzbDpjaG9vc2U+CisJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPgorCQkJPHhzbDpjaG9vc2U+CisJCQk8eHNsOndoZW4gdGVzdD0iQGxhYmVsIj4KKwkJCQk8YSBocmVmPSJ7QHVybH0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAbGFiZWwiLz48L2E+CisJCQkJPGJyIC8+CisJCQkJPGRpdiBpZD0iaW5kZW50Ij4KKwkJCQkoPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBpZCIvPiAtIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAdmVyc2lvbiIvPikKKwkJCQk8L2Rpdj4KKwkJCTwveHNsOndoZW4+CisJCQk8eHNsOm90aGVyd2lzZT4KKwkJCQk8YSBocmVmPSJ7QHVybH0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAaWQiLz4gLSA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHZlcnNpb24iLz48L2E+CisJCQk8L3hzbDpvdGhlcndpc2U+CisJCQk8L3hzbDpjaG9vc2U+CisJCQk8YnIgLz48YnIgLz4KKwkJPC90ZD4KKwkJPHRkPgorCQkJPHRhYmxlPgorCQkJCTx4c2w6aWYgdGVzdD0iQG9zIj4KKwkJCQkJPHRyPjx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPk9wZXJhdGluZyBTeXN0ZW1zOjwvdGQ+CisJCQkJCTx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJAb3MiLz48L3RkPgorCQkJCQk8L3RyPgorCQkJCTwveHNsOmlmPgorCQkJCTx4c2w6aWYgdGVzdD0iQHdzIj4KKwkJCQkJPHRyPjx0ZCBjbGFzcz0ibG9nLXRleHQiIGlkPSJpbmRlbnQiPldpbmRvd3MgU3lzdGVtczo8L3RkPgorCQkJCQk8dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij48eHNsOnZhbHVlLW9mIHNlbGVjdD0iQHdzIi8+PC90ZD4KKwkJCQkJPC90cj4KKwkJCQk8L3hzbDppZj4KKwkJCQk8eHNsOmlmIHRlc3Q9IkBubCI+CisJCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5MYW5ndWFnZXM6PC90ZD4KKwkJCQkJPHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBubCIvPjwvdGQ+CisJCQkJCTwvdHI+CisJCQkJPC94c2w6aWY+CisJCQkJPHhzbDppZiB0ZXN0PSJAYXJjaCI+CisJCQkJCTx0cj48dGQgY2xhc3M9ImxvZy10ZXh0IiBpZD0iaW5kZW50Ij5BcmNoaXRlY3R1cmU6PC90ZD4KKwkJCQkJPHRkIGNsYXNzPSJsb2ctdGV4dCIgaWQ9ImluZGVudCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9IkBhcmNoIi8+PC90ZD4KKwkJCQkJPC90cj4KKwkJCQk8L3hzbDppZj4KKwkJCTwvdGFibGU+CisJCTwvdGQ+CisJPC90cj4KKwk8L3hzbDpmb3ItZWFjaD4KKwk8L3hzbDpvdGhlcndpc2U+CisJPC94c2w6Y2hvb3NlPgorCTwvdGFibGU+CisJPC9ib2R5PgorCTwvaHRtbD4KKzwveHNsOmZvci1lYWNoPgorPC94c2w6dGVtcGxhdGU+Cis8L3hzbDpzdHlsZXNoZWV0Pgo=