LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCiAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCiAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKICoKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgojaW5jbHVkZSAiZ2xvYmFscy5ocmMiCiNpbmNsdWRlICJmbGR0ZGxnLmhyYyIKI2luY2x1ZGUgImhlbHBpZC5oIgpUYWJQYWdlIFRQX0ZMRF9EQgp7CglIZWxwSUQgPSBISURfRkxEX0RCIDsKCVNWTG9vayA9IFRSVUUgOwoJSGlkZSA9IFRSVUUgOwoJU2l6ZSA9IE1BUF9BUFBGT05UICggMjYwLCAxODUgKSA7CglGaXhlZFRleHQgRlRfREJUWVBFCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA2LCAzICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDc2LCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5UeXBlIiA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUxpc3RCb3ggTEJfREJUWVBFCgl7CgkJSGVscElEID0gInN3Okxpc3RCb3g6VFBfRkxEX0RCOkxCX0RCVFlQRSIgOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggNiwgMTQgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNzYsIDEwNCApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJU29ydCA9IFRSVUUgOwoJCUF1dG9IU2Nyb2xsID0gVFJVRSA7CgkJLyoJCVN0cmluZ0xpc3QgPQoJCXsKCQkJPCAiQmVsaWViaWdlciBEYXRlbnNhdHoiIDsgPiA7CgkJCTwgIkRhdGVuc2F0em51bW1lciIgOyA+IDsKCQkJPCAiTuRjaHN0ZXIgRGF0ZW5zYXR6IiA7ID4gOwoJCQk8ICJTZXJpZW5icmllZmZlbGQiIDsgPiA7CgkJCTwgIkRhdGVuYmFua25hbWUiIDsgPiA7CgkJfTsqLwoJfTsKCUZpeGVkVGV4dCBGVF9EQkNPTkRJVElPTgoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggNiwgMTI2ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDc2LCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5Db25kaXRpb24iIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJRWRpdCBFRF9EQkNPTkRJVElPTgoJewoJCUhlbHBJRCA9ICJzdzpFZGl0OlRQX0ZMRF9EQjpFRF9EQkNPTkRJVElPTiIgOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggNiwgMTM3ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDc2LCAxMiApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUZpeGVkVGV4dCBGVF9EQlNFVE5VTUJFUgoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggNiwgMTU2ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDc2LCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIlJlY29yZCBudW1iZXIiIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJRWRpdCBFRF9EQlNFVE5VTUJFUgoJewoJCUhlbHBJRCA9ICJzdzpFZGl0OlRQX0ZMRF9EQjpFRF9EQlNFVE5VTUJFUiIgOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggNiwgMTY3ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDc2LCAxMiApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUZpeGVkVGV4dCBGVF9EQlNFTEVDVElPTgoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggODgsIDMgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMTY2LCA4ICkgOwoJCUxlZnQgPSBUUlVFIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJEYXRhYmFzZSBzfmVsZWN0aW9uIiA7Cgl9OwoJQ29udHJvbCBUTEJfREJMSVNUCgl7CgkJQm9yZGVyID0gVFJVRSA7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA4OCwgMTQgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMTYwLCAxMDQgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJfTsKCUZpeGVkVGV4dCBGVF9BREREQgoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggODgsIDEyMykgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDEwNSwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJBZGQgZGF0YWJhc2UgZmlsZSIgOwoJfTsKCVB1c2hCdXR0b24gUEJfQUREREIKCXsKCQlIZWxwSUQgPSAic3c6UHVzaEJ1dHRvbjpUUF9GTERfREI6UEJfQUREREIiIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDE5OCwgMTIxKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAsIDE0ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIkJyb3dzZS4uLiIgOwoJfTsKCglSYWRpb0J1dHRvbiBSQl9EQk9XTkZPUk1BVAoJewoJCUhlbHBJRCA9ICJzdzpSYWRpb0J1dHRvbjpUUF9GTERfREI6UkJfREJPV05GT1JNQVQiIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDk0LCAxNTMgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMTUwLCAxMCApIDsKCQlDaGVjayA9IFRSVUUgOwoJCVRleHQgWyBlbi1VUyBdID0gIkZyb20gZGF0YWJhc2UiIDsKCX07CglSYWRpb0J1dHRvbiBSQl9EQkZPUk1BVAoJewoJCUhlbHBJRCA9ICJzdzpSYWRpb0J1dHRvbjpUUF9GTERfREI6UkJfREJGT1JNQVQiIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDk0LCAxNjYgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMTAwLCAxMCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJVc2VyLWRlZmluZWQiIDsKCX07CglMaXN0Qm94IExCX0RCTlVNRk9STUFUCgl7CgkJSGVscElEID0gInN3Okxpc3RCb3g6VFBfRkxEX0RCOkxCX0RCTlVNRk9STUFUIiA7CgkJQm9yZGVyID0gVFJVRSA7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxOTUsIDE2NCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA1MywgNjAgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCUF1dG9IU2Nyb2xsID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCX07CglMaXN0Qm94IExCX0RCRk9STUFUCgl7CgkJSGVscElEID0gInN3Okxpc3RCb3g6VFBfRkxEX0RCOkxCX0RCRk9STUFUIiA7CgkJQm9yZGVyID0gVFJVRSA7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxOTUsIDE2MyApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA1MywgNjAgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCUF1dG9IU2Nyb2xsID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCQlTb3J0ID0gRkFMU0UgOwoJCUhpZGUgPSBUUlVFIDsKCX07CglGaXhlZExpbmUgRkxfREJGT1JNQVQKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDg4LCAxNDEgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMTY2LCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIkZvcm1hdCIgOwoJfTsKCUZpeGVkTGluZSBGTF9EQkZPUk1BVF9WRVJUCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA4NywgMTUyICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDQsIDI4ICkgOwoJCVZlcnQgPSBUUlVFOwoJfTsKCVRleHQgWyBlbi1VUyBdID0gIkRhdGFiYXNlIiA7Cn07CgovLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEVPRgo=