LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKI2luY2x1ZGUgImdsb2JhbHMuaHJjIgojaW5jbHVkZSAiZmxkdGRsZy5ocmMiCiNpbmNsdWRlICJoZWxwaWQuaCIKVGFiUGFnZSBUUF9GTERfREIKewoJSGVscElEID0gSElEX0ZMRF9EQiA7CglTVkxvb2sgPSBUUlVFIDsKCUhpZGUgPSBUUlVFIDsKCVNpemUgPSBNQVBfQVBQRk9OVCAoIDI2MCAsIDE4NSApIDsKCUZpeGVkVGV4dCBGVF9EQlRZUEUKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDYgLCAzICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDc2ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+VHlwZSIgOwoJCUxlZnQgPSBUUlVFIDsKCX07CglMaXN0Qm94IExCX0RCVFlQRQoJewoJICAgIEhlbHBJRCA9ICJzdzpMaXN0Qm94OlRQX0ZMRF9EQjpMQl9EQlRZUEUiOwoJCUJvcmRlciA9IFRSVUUgOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggNiAsIDE0ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDc2ICwgMTA0ICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlTb3J0ID0gVFJVRSA7CgkJQXV0b0hTY3JvbGwgPSBUUlVFIDsKCQkvKiAgICAgICAgU3RyaW5nTGlzdCA9CgkJewoJCQk8ICJCZWxpZWJpZ2VyIERhdGVuc2F0eiIgOyA+IDsKCQkJPCAiRGF0ZW5zYXR6bnVtbWVyIiA7ID4gOwoJCQk8ICJO5GNoc3RlciBEYXRlbnNhdHoiIDsgPiA7CgkJCTwgIlNlcmllbmJyaWVmZmVsZCIgOyA+IDsKCQkJPCAiRGF0ZW5iYW5rbmFtZSIgOyA+IDsKCQl9OyovCgl9OwoJRml4ZWRUZXh0IEZUX0RCQ09ORElUSU9OCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA2ICwgMTI2ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDc2ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+Q29uZGl0aW9uIiA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUVkaXQgRURfREJDT05ESVRJT04KCXsKCSAgICBIZWxwSUQgPSAic3c6RWRpdDpUUF9GTERfREI6RURfREJDT05ESVRJT04iOwoJCUJvcmRlciA9IFRSVUUgOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggNiAsIDEzNyApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA3NiAsIDEyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJRml4ZWRUZXh0IEZUX0RCU0VUTlVNQkVSCgl7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCA2ICwgMTU2ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDc2ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJSZWNvcmQgbnVtYmVyIiA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUVkaXQgRURfREJTRVROVU1CRVIKCXsKCSAgICBIZWxwSUQgPSAic3c6RWRpdDpUUF9GTERfREI6RURfREJTRVROVU1CRVIiOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggNiAsIDE2NyApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA3NiAsIDEyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJRml4ZWRUZXh0IEZUX0RCU0VMRUNUSU9OCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA4OCAsIDMgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggMTY2ICwgOCApIDsKCQlMZWZ0ID0gVFJVRSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiRGF0YWJhc2Ugc35lbGVjdGlvbiIgOwoJfTsKCUNvbnRyb2wgVExCX0RCTElTVAoJewoJCUJvcmRlciA9IFRSVUUgOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggODggLCAxNCApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCAxNjAgLCAxMDQgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJfTsKICAgIEZpeGVkVGV4dCBGVF9BREREQgogICAgewogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggODggLCAxMjMpIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCAxMDUgLCA4ICkgOwogICAgICAgIFRleHQgWyBlbi1VUyBdID0gIkFkZCBkYXRhYmFzZSBmaWxlIiA7CiAgICB9OwogICAgUHVzaEJ1dHRvbiBQQl9BREREQgogICAgewogICAgICAgIEhlbHBJRCA9ICJzdzpQdXNoQnV0dG9uOlRQX0ZMRF9EQjpQQl9BREREQiI7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCAxOTggLCAxMjEpIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA1MCAsIDE0ICkgOwogICAgICAgIFRleHQgWyBlbi1VUyBdID0gIkJyb3dzZS4uLiIgOwogICAgfTsKCglSYWRpb0J1dHRvbiBSQl9EQk9XTkZPUk1BVAoJewoJICAgIEhlbHBJRCA9ICJzdzpSYWRpb0J1dHRvbjpUUF9GTERfREI6UkJfREJPV05GT1JNQVQiOwoJCVBvcyA9IE1BUF9BUFBGT05UICggOTQgLCAxNTMgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggMTUwICwgMTAgKSA7CgkJQ2hlY2sgPSBUUlVFIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJGcm9tIGRhdGFiYXNlIiA7Cgl9OwoJUmFkaW9CdXR0b24gUkJfREJGT1JNQVQKCXsKCSAgICBIZWxwSUQgPSAic3c6UmFkaW9CdXR0b246VFBfRkxEX0RCOlJCX0RCRk9STUFUIjsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDk0ICwgMTY2ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDEwMCAsIDEwICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIlVzZXItZGVmaW5lZCIgOwoJfTsKCUxpc3RCb3ggTEJfREJOVU1GT1JNQVQKCXsKCSAgICBIZWxwSUQgPSAic3c6TGlzdEJveDpUUF9GTERfREI6TEJfREJOVU1GT1JNQVQiOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTk1ICwgMTY0ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDUzICwgNjAgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCUF1dG9IU2Nyb2xsID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCX07CglMaXN0Qm94IExCX0RCRk9STUFUCgl7CgkgICAgSGVscElEID0gInN3Okxpc3RCb3g6VFBfRkxEX0RCOkxCX0RCRk9STUFUIjsKCQlCb3JkZXIgPSBUUlVFIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDE5NSAsIDE2MyApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA1MyAsIDYwICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlBdXRvSFNjcm9sbCA9IFRSVUUgOwoJCURyb3BEb3duID0gVFJVRSA7CgkJU29ydCA9IEZBTFNFIDsKCQlIaWRlID0gVFJVRSA7Cgl9OwogICAgRml4ZWRMaW5lIEZMX0RCRk9STUFUCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA4OCAsIDE0MSApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCAxNjYgLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIkZvcm1hdCIgOwoJfTsKICAgIEZpeGVkTGluZSBGTF9EQkZPUk1BVF9WRVJUCgl7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCA4NyAsIDE1MiApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA0ICwgMjggKSA7CiAgICAgICAgVmVydCA9IFRSVUU7Cgl9OwoJVGV4dCBbIGVuLVVTIF0gPSAiRGF0YWJhc2UiIDsKfTsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCg==