LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIAogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCiAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQogKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCiAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAqIAogKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKiAKICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICogdW5kZXIgdGhlIExpY2Vuc2UuCiAqIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgoKI2luY2x1ZGUgIm1pc2MuaHJjIgojaW5jbHVkZSAiZG9jZm5vdGUuaHJjIgojaW5jbHVkZSAiaGVscGlkLmgiCiNpbmNsdWRlICJjbWRpZC5oIgojaW5jbHVkZSAiZnJtdWkuaHJjIgpUYWJEaWFsb2cgRExHX0RPQ19GT09UTk9URQp7CglPdXRwdXRTaXplID0gVFJVRSA7CglTVkxvb2sgPSBUUlVFIDsKCVRleHQgWyBlbi1VUyBdID0gIkZvb3Rub3Rlcy9FbmRub3RlcyBTZXR0aW5ncyIgOwoJTW92ZWFibGUgPSBUUlVFIDsKCVRhYkNvbnRyb2wgMQoJewoJCU91dHB1dFNpemUgPSBUUlVFIDsKCQlQYWdlTGlzdCA9CgkJewoJCQlQYWdlSXRlbQoJCQl7CgkJCQlJZGVudGlmaWVyID0gVFBfRk9PVE5PVEVPUFRJT04gOwoJCQkJUGFnZVJlc0lEID0gVFBfRk9PVE5PVEVPUFRJT04gOwoJCQkJVGV4dCBbIGVuLVVTIF0gPSAiRm9vdG5vdGVzIiA7CgkJCX07CgkJCVBhZ2VJdGVtCgkJCXsKCQkJCUlkZW50aWZpZXIgPSBUUF9FTkROT1RFT1BUSU9OIDsKCQkJCVBhZ2VSZXNJRCA9IFRQX0VORE5PVEVPUFRJT04gOwoJCQkJVGV4dCBbIGVuLVVTIF0gPSAiRW5kbm90ZXMiIDsKCQkJfTsKCQl9OwoJfTsKfTsKVGFiUGFnZSBUUF9GT09UTk9URU9QVElPTgp7CglTVkxvb2sgPSBUUlVFIDsKCUhpZGUgPSBUUlVFOwoJSGVscElEID0gSElEX0ZPT1ROT1RFX09QVElPTlMgOwoJUG9zID0gTUFQX0FQUEZPTlQgKCAwICwgMCApIDsKCVNpemUgPSBNQVBfQVBQRk9OVCAoIDI2MCAsIDE4NSApIDsKICAgIEZpeGVkTGluZSBGTF9OVU0KCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDYgLCAzICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDI0OCAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiQXV0b051bWJlcmluZyIgOwoJCUdyb3VwID0gVFJVRSA7Cgl9OwoJRml4ZWRUZXh0IEZUX05VTVRZUEUKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDEyICwgMTYgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTEgLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIk51bX5iZXJpbmciOwoJfTsKCUxpc3RCb3ggTEJfTlVNVklFVwoJewoJICAgIEhlbHBJRCA9ICJzdzpMaXN0Qm94OlRQX0ZPT1ROT1RFT1BUSU9OOkxCX05VTVZJRVciOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggNjUgLCAxNCApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA1OSAsIDcyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlHcm91cCA9IFRSVUUgOwoJCURyb3BEb3duID0gVFJVRSA7Cgl9OwoJRml4ZWRUZXh0IEZUX09GRlNFVAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTMwICwgMTYgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCA4ICkgOwoJCUxlZnQgPSBUUlVFIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+U3RhcnQgYXQiIDsKCX07CglOdW1lcmljRmllbGQgRkxEX09GRlNFVAoJewoJICAgIEhlbHBJRCA9ICJzdzpOdW1lcmljRmllbGQ6VFBfRk9PVE5PVEVPUFRJT046RkxEX09GRlNFVCI7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxODkgLCAxNCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAzMCAsIDEyICkgOwoJCVNwaW4gPSBUUlVFIDsKCQlNaW5pbXVtID0gMSA7CgkJRmlyc3QgPSAxIDsKCQlMYXN0ID0gOTk5OSA7CgkJTWF4aW11bSA9IDk5OTkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlCb3JkZXIgPSBUUlVFIDsKCX07CglGaXhlZFRleHQgRlRfTlVNQ09VTlQKCXsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDEyICwgMzEgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTEgLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5Db3VudGluZyI7Cgl9OwoJTGlzdEJveCBMQl9OVU1DT1VOVAoJewoJICAgIEhlbHBJRCA9ICJzdzpMaXN0Qm94OlRQX0ZPT1ROT1RFT1BUSU9OOkxCX05VTUNPVU5UIjsKCQlCb3JkZXIgPSBUUlVFIDsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDY1ICwgMjkgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTkgLCA1MCApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJR3JvdXAgPSBUUlVFIDsKCQlEcm9wRG93biA9IFRSVUUgOwoJCUN1clBvcyA9IDAgOwoJCVN0cmluZ0xpc3QgWyBlbi1VUyBdID0KCQl7CgkJCTwgIlBlciBwYWdlIiA7ID4gOwoJCQk8ICJQZXIgY2hhcHRlciIgOyA+IDsKCQkJPCAiUGVyIGRvY3VtZW50IiA7ID4gOwoJCX07Cgl9OwoJRml4ZWRUZXh0IEZUX1BSRUZJWAoJewogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTIgLCA0NiApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA0OCAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAifkJlZm9yZSIgOwoJCUxlZnQgPSBUUlVFIDsKCX07CglFZGl0IEVEX1BSRUZJWAoJewoJICAgIEhlbHBJRCA9ICJzdzpFZGl0OlRQX0ZPT1ROT1RFT1BUSU9OOkVEX1BSRUZJWCI7CgkJQm9yZGVyID0gVFJVRSA7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCA2NSAsIDQ0ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDU5ICwgMTIgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCUxlZnQgPSBUUlVFIDsKCQlNYXhUZXh0TGVuZ3RoID0gNTAgOwoJfTsKCUZpeGVkVGV4dCBGVF9TVUZGSVgKCXsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDEzMCAsIDQ2ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDQ4ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+QWZ0ZXIiIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJRWRpdCBFRF9TVUZGSVgKCXsKCSAgICBIZWxwSUQgPSAic3c6RWRpdDpUUF9GT09UTk9URU9QVElPTjpFRF9TVUZGSVgiOwoJCUJvcmRlciA9IFRSVUUgOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTg5ICwgNDQgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTkgLCAxMiApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJTGVmdCA9IFRSVUUgOwoJCU1heFRleHRMZW5ndGggPSA1MCA7Cgl9OwoJRml4ZWRUZXh0IEZUX1BPUwoJewogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTIgLCA2MyApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAzNiAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiUG9zaXRpb24iIDsKCX07CglSYWRpb0J1dHRvbiBSQl9QT1NfUEFHRQoJewoJICAgIEhlbHBJRCA9ICJzdzpSYWRpb0J1dHRvbjpUUF9GT09UTk9URU9QVElPTjpSQl9QT1NfUEFHRSI7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCA2NSAsIDYyICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDE1MCAsIDEwICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5FbmQgb2YgcGFnZSIgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlHcm91cCA9IFRSVUUgOwoJfTsKCVJhZGlvQnV0dG9uIFJCX1BPU19DSEFQVEVSCgl7CgkgICAgSGVscElEID0gInN3OlJhZGlvQnV0dG9uOlRQX0ZPT1ROT1RFT1BUSU9OOlJCX1BPU19DSEFQVEVSIjsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDY1ICwgNzUgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMTUwICwgMTAgKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiRW5+ZCBvZiBkb2N1bWVudCIgOwoJfTsKICAgIEZpeGVkTGluZSBGTF9URU1QTAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggNiAsIDg5ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDEwMyAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiU3R5bGVzIiA7Cgl9OwoJRml4ZWRUZXh0IEZUX1BBUkFfVEVNUEwKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDEyICwgMTAyICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDM1ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJQYX5yYWdyYXBoIiA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUxpc3RCb3ggTEJfUEFSQV9URU1QTAoJewoJICAgIEhlbHBJRCA9ICJzdzpMaXN0Qm94OlRQX0ZPT1ROT1RFT1BUSU9OOkxCX1BBUkFfVEVNUEwiOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggNDggLCAxMDAgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggNTggLCA4MCApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCQlDdXJQb3MgPSAwIDsKCQlTb3J0ID0gVFJVRSA7Cgl9OwoJRml4ZWRUZXh0IEZUX1BBR0VfVEVNUEwKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDEyICwgMTE4ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDM1ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+UGFnZSIgOwoJCUxlZnQgPSBUUlVFIDsKCX07CglMaXN0Qm94IExCX1BBR0VfVEVNUEwKCXsKCSAgICBIZWxwSUQgPSAic3c6TGlzdEJveDpUUF9GT09UTk9URU9QVElPTjpMQl9QQUdFX1RFTVBMIjsKCQlCb3JkZXIgPSBUUlVFIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDQ4ICwgMTE2KSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggNTggLCA4MCApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCX07CiAgICBGaXhlZExpbmUgRkxfQ0hBUl9URU1QTAoJewogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTEzICwgODkgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggMTQxICwgOCApIDsKCgkJVGV4dCBbIGVuLVVTIF0gPSAiQ2hhcmFjdGVyIFN0eWxlcyI7Cgl9OwoJRml4ZWRUZXh0IEZUX0FOQ0hSX0NIQVJGTVQKCXsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDExNyAsIDEwMiApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA2NyAsIDggKSA7CgkJTGVmdCA9IFRSVUUgOwoJCVRleHQgWyBlbi1VUyBdID0gIlRlfnh0IGFyZWEiIDsKCX07CglMaXN0Qm94IExCX0FOQ0hSX0NIQVJGTVQKCXsKCSAgICBIZWxwSUQgPSAic3c6TGlzdEJveDpUUF9GT09UTk9URU9QVElPTjpMQl9BTkNIUl9DSEFSRk1UIjsKCQlCb3JkZXIgPSBUUlVFIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDE4NiAsIDEwMCApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA2NSAsIDcyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlEcm9wRG93biA9IFRSVUUgOwoJCVNvcnQgPSBUUlVFIDsKCX07CglGaXhlZFRleHQgRlRfVEVYVF9DSEFSRk1UCgl7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCAxMTcgLCAxMTggKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggNjcgLCA4ICkgOwoJCUxlZnQgPSBUUlVFIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+Rm9vdG5vdGUgYXJlYSIgOwoJfTsKCUxpc3RCb3ggTEJfVEVYVF9DSEFSRk1UCgl7CgkgICAgSGVscElEID0gInN3Okxpc3RCb3g6VFBfRk9PVE5PVEVPUFRJT046TEJfVEVYVF9DSEFSRk1UIjsKCQlCb3JkZXIgPSBUUlVFIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDE4NiAsIDExNiApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA2NSAsIDcyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlEcm9wRG93biA9IFRSVUUgOwoJCVNvcnQgPSBUUlVFIDsKCX07CiAgICBGaXhlZExpbmUgRkxfQ09OVAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggNiAsIDEzNCApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCAyNDggLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIkNvbnRpbnVhdGlvbiBub3RpY2UiIDsKCX07CglGaXhlZFRleHQgRlRfQ09OVAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCAxNDggKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggNzMgLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIkVuZCB+b2YgZm9vdG5vdGUiIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJRWRpdCBFRF9DT05UCgl7CgkgICAgSGVscElEID0gInN3OkVkaXQ6VFBfRk9PVE5PVEVPUFRJT046RURfQ09OVCI7CgkJQm9yZGVyID0gVFJVRSA7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCA4OCwgMTQ1ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDE2MCAsIDEyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlMZWZ0ID0gVFJVRSA7CgkJTWF4VGV4dExlbmd0aCA9IDMwIDsKCX07CglGaXhlZFRleHQgRlRfQ09OVF9GUk9NCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxMiAsIDE2MyApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA3MyAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiU3Rhcn50IG9mIG5leHQgcGFnZSIgOwoJCUxlZnQgPSBUUlVFIDsKCX07CglFZGl0IEVEX0NPTlRfRlJPTQoJewoJICAgIEhlbHBJRCA9ICJzdzpFZGl0OlRQX0ZPT1ROT1RFT1BUSU9OOkVEX0NPTlRfRlJPTSI7CgkJQm9yZGVyID0gVFJVRSA7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCA4OCAsIDE2MSApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCAxNjAgLCAxMiApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJTGVmdCA9IFRSVUUgOwoJCU1heFRleHRMZW5ndGggPSAzMCA7Cgl9Owp9OwpUYWJQYWdlIFRQX0VORE5PVEVPUFRJT04KewoJU1ZMb29rID0gVFJVRSA7CglIaWRlID0gVFJVRTsKCUhlbHBJRCA9IEhJRF9FTkROT1RFX09QVElPTlMgOwoJUG9zID0gTUFQX0FQUEZPTlQgKCAwICwgMCApIDsKCVNpemUgPSBNQVBfQVBQRk9OVCAoIDI2MCAsIDE4NSApIDsKICAgIEZpeGVkTGluZSBGTF9OVU0KCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDYgLCAyICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDI0OCAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiQXV0b051bWJlcmluZyIgOwoJCUdyb3VwID0gVFJVRSA7Cgl9OwoJRml4ZWRUZXh0IEZUX05VTVRZUEUKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDEyICwgMTYgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTEgLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5OdW1iZXJpbmciOwoJfTsKCUxpc3RCb3ggTEJfTlVNVklFVwoJewoJICAgIEhlbHBJRCA9ICJzdzpMaXN0Qm94OlRQX0VORE5PVEVPUFRJT046TEJfTlVNVklFVyI7CgkJQm9yZGVyID0gVFJVRSA7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA2NSAsIDE0ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDU5ICwgNzIgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCUdyb3VwID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCQlDdXJQb3MgPSAwIDsKCQlTdHJpbmdMaXN0ID0KCQl7CgkJCSJBLCBCLCBDIiA7CgkJCSJhLCBiLCBjIiA7CgkJCSJJLCBJSSwgSUlJIiA7CgkJCSJpLCBpaSwgaWlpIiA7CgkJCSIxLCAyLCAzIiA7CgkJCSJBLCAuLiwgQUEsIC4uLCBBQUEiIDsKCQkJImEsIC4uLCBhYSwgLi4sIGFhYSIgOwoJCX07Cgl9OwoJRml4ZWRUZXh0IEZUX09GRlNFVAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTMwICwgMTYgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTAgLCA4ICkgOwoJCUxlZnQgPSBUUlVFIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+U3RhcnQgYXQiIDsKCX07CglOdW1lcmljRmllbGQgRkxEX09GRlNFVAoJewoJICAgIEhlbHBJRCA9ICJzdzpOdW1lcmljRmllbGQ6VFBfRU5ETk9URU9QVElPTjpGTERfT0ZGU0VUIjsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDE4OSAsIDE0ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDMwICwgMTIgKSA7CgkJU3BpbiA9IFRSVUUgOwoJCU1pbmltdW0gPSAxIDsKCQlGaXJzdCA9IDEgOwoJCUxhc3QgPSA5OTk5IDsKCQlNYXhpbXVtID0gOTk5OSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCUJvcmRlciA9IFRSVUUgOwoJfTsKCUZpeGVkVGV4dCBGVF9OVU1DT1VOVAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggODIgLCAxNCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAzNiAsIDggKSA7CgkJSGlkZSA9IFRSVUU7Cgl9OwoJTGlzdEJveCBMQl9OVU1DT1VOVAoJewoJICAgIEhlbHBJRCA9ICJzdzpMaXN0Qm94OlRQX0VORE5PVEVPUFRJT046TEJfTlVNQ09VTlQiOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCAyNyApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA2MiAsIDcyICkgOwoJCUhpZGUgPSBUUlVFOwoJfTsKCUZpeGVkVGV4dCBGVF9QUkVGSVgKCXsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDEyICwgMzIgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNDggLCA4ICkgOwoKCQlUZXh0IFsgZW4tVVMgXSA9ICJ+QmVmb3JlIiA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUVkaXQgRURfUFJFRklYCgl7CgkgICAgSGVscElEID0gInN3OkVkaXQ6VFBfRU5ETk9URU9QVElPTjpFRF9QUkVGSVgiOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggNjUgLCAzMCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA1OSAsIDEyICkgOwoJCUJvcmRlciA9IFRSVUUgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlMZWZ0ID0gVFJVRSA7CgkJTWF4VGV4dExlbmd0aCA9IDUwIDsKCX07CglGaXhlZFRleHQgRlRfU1VGRklYCgl7CiAgICAgICAgUG9zID0gTUFQX0FQUEZPTlQgKCAxMzAgLCAzMiApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA0OCAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAifkFmdGVyIiA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUVkaXQgRURfU1VGRklYCgl7CgkgICAgSGVscElEID0gInN3OkVkaXQ6VFBfRU5ETk9URU9QVElPTjpFRF9TVUZGSVgiOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTg5ICwgMzAgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTkgLCAxMiApIDsKCQlCb3JkZXIgPSBUUlVFIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJTGVmdCA9IFRSVUUgOwoJCU1heFRleHRMZW5ndGggPSA1MCA7Cgl9OwoJRml4ZWRUZXh0IEZUX1BPUwoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggODIgLCAxNCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAzNiAsIDggKSA7CgkJSGlkZSA9IFRSVUU7Cgl9OwoJUmFkaW9CdXR0b24gUkJfUE9TX1BBR0UKCXsKCSAgICBIZWxwSUQgPSAic3c6UmFkaW9CdXR0b246VFBfRU5ETk9URU9QVElPTjpSQl9QT1NfUEFHRSI7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCAxMiAsIDEwNCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCA2MCAsIDEwICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIkVuZCB+b2YgcGFnZSIgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlHcm91cCA9IFRSVUUgOwoJfTsKCVJhZGlvQnV0dG9uIFJCX1BPU19DSEFQVEVSCgl7CgkgICAgSGVscElEID0gInN3OlJhZGlvQnV0dG9uOlRQX0VORE5PVEVPUFRJT046UkJfUE9TX0NIQVBURVIiOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCAxMTggKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNjAgLCAxMCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJFbmQgb2YgfmRvY3VtZW50IiA7Cgl9OwogICAgRml4ZWRMaW5lIEZMX1RFTVBMCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA2ICwgNDYgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggMTE1ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJTdHlsZXMiIDsKCX07CglGaXhlZFRleHQgRlRfUEFSQV9URU1QTAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTIgLCA1OCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAzOCAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiUGF+cmFncmFwaCIgOwoJCUxlZnQgPSBUUlVFIDsKCX07CglMaXN0Qm94IExCX1BBUkFfVEVNUEwKCXsKCSAgICBIZWxwSUQgPSAic3c6TGlzdEJveDpUUF9FTkROT1RFT1BUSU9OOkxCX1BBUkFfVEVNUEwiOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggNTEgLCA1NiApIDsKICAgICAgICBTaXplID0gTUFQX0FQUEZPTlQgKCA2NyAsIDcyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlEcm9wRG93biA9IFRSVUUgOwoJCUN1clBvcyA9IDAgOwoJCVNvcnQgPSBUUlVFIDsKCX07CglGaXhlZFRleHQgRlRfUEFHRV9URU1QTAoJewogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTIgLCA3NCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAzOCAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiflBhZ2UiIDsKCQlMZWZ0ID0gVFJVRSA7Cgl9OwoJTGlzdEJveCBMQl9QQUdFX1RFTVBMCgl7CgkgICAgSGVscElEID0gInN3Okxpc3RCb3g6VFBfRU5ETk9URU9QVElPTjpMQl9QQUdFX1RFTVBMIjsKCQlCb3JkZXIgPSBUUlVFIDsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDUxICwgNzIgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggNjcgLCA3MiApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCX07CiAgICBGaXhlZExpbmUgRkxfQ0hBUl9URU1QTAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTI1ICwgNDYgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggMTI5ICwgOCApIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJDaGFyYWN0ZXIgU3R5bGVzIjsKCX07CglGaXhlZFRleHQgRlRfQU5DSFJfQ0hBUkZNVAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggMTI5ICwgNTggKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggNTUgLCA4ICkgOwoJCUxlZnQgPSBUUlVFIDsKCQlUZXh0IFsgZW4tVVMgXSA9ICJUZX54dCBhcmVhIiA7Cgl9OwoJTGlzdEJveCBMQl9BTkNIUl9DSEFSRk1UCgl7CgkgICAgSGVscElEID0gInN3Okxpc3RCb3g6VFBfRU5ETk9URU9QVElPTjpMQl9BTkNIUl9DSEFSRk1UIjsKCQlCb3JkZXIgPSBUUlVFIDsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDE4NiAsIDU2ICkgOwogICAgICAgIFNpemUgPSBNQVBfQVBQRk9OVCAoIDY1ICwgNzIgKSA7CgkJVGFiU3RvcCA9IFRSVUUgOwoJCURyb3BEb3duID0gVFJVRSA7CgkJU29ydCA9IFRSVUUgOwoJfTsKCUZpeGVkVGV4dCBGVF9URVhUX0NIQVJGTVQKCXsKICAgICAgICBQb3MgPSBNQVBfQVBQRk9OVCAoIDEyOSAsIDc0ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDU1ICwgOCApIDsKCQlMZWZ0ID0gVFJVRSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAifkVuZG5vdGUgYXJlYSIgOwoJfTsKCUxpc3RCb3ggTEJfVEVYVF9DSEFSRk1UCgl7CgkgICAgSGVscElEID0gInN3Okxpc3RCb3g6VFBfRU5ETk9URU9QVElPTjpMQl9URVhUX0NIQVJGTVQiOwoJCUJvcmRlciA9IFRSVUUgOwogICAgICAgIFBvcyA9IE1BUF9BUFBGT05UICggMTg2ICwgNzIgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggNjUgLCA3MiApIDsKCQlUYWJTdG9wID0gVFJVRSA7CgkJRHJvcERvd24gPSBUUlVFIDsKCQlTb3J0ID0gVFJVRSA7Cgl9OwogICAgRml4ZWRMaW5lIEZMX0NPTlQKCXsKCQlQb3MgPSBNQVBfQVBQRk9OVCAoIDgwICwgOTEgKSA7CiAgICAgICAgU2l6ZSA9IE1BUF9BUFBGT05UICggMTc0ICwgOCApIDsKCQkvKiAjIyMgQUNIVFVORzogTmV1ZXIgVGV4dCBpbiBSZXNvdXJjZT8gSGlud2Vpc3RleHQgbWVocnNlaXRpZ2UgRnXfbm90ZW4gOiBIaW53ZWlzdGV4dCBtZWhyc2VpdGlnZSBGdZhub3RlbiAqLwoJCVRleHQgWyBlbi1VUyBdID0gIkNvbnRpbnVhdGlvbiBub3RpY2UiIDsKCX07CglGaXhlZFRleHQgRlRfQ09OVAoJewoJCVBvcyA9IE1BUF9BUFBGT05UICggODYgLCAxMDMgKSA7CgkJU2l6ZSA9IE1BUF9BUFBGT05UICggMzggLCA4ICkgOwoJCVRleHQgWyBlbi1VUyBdID0gIn5Gb2xsb3dpbmcgcGFnZSIgOwoJCUxlZnQgPSBUUlVFIDsKCX07CglFZGl0IEVEX0NPTlQKCXsKCSAgICBIZWxwSUQgPSAic3c6RWRpdDpUUF9FTkROT1RFT1BUSU9OOkVEX0NPTlQiOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTM3ICwgMTAxICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDExNCAsIDEyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlMZWZ0ID0gVFJVRSA7CgkJTWF4VGV4dExlbmd0aCA9IDMwIDsKCX07CglGaXhlZFRleHQgRlRfQ09OVF9GUk9NCgl7CgkJUG9zID0gTUFQX0FQUEZPTlQgKCA4NiAsIDExOCApIDsKCQlTaXplID0gTUFQX0FQUEZPTlQgKCAzOCAsIDggKSA7CgkJVGV4dCBbIGVuLVVTIF0gPSAiflN0YXJ0IiA7CgkJTGVmdCA9IFRSVUUgOwoJfTsKCUVkaXQgRURfQ09OVF9GUk9NCgl7CgkgICAgSGVscElEID0gInN3OkVkaXQ6VFBfRU5ETk9URU9QVElPTjpFRF9DT05UX0ZST00iOwoJCUJvcmRlciA9IFRSVUUgOwoJCVBvcyA9IE1BUF9BUFBGT05UICggMTM3ICwgMTE2ICkgOwoJCVNpemUgPSBNQVBfQVBQRk9OVCAoIDExNCAsIDEyICkgOwoJCVRhYlN0b3AgPSBUUlVFIDsKCQlMZWZ0ID0gVFJVRSA7CgkJTWF4VGV4dExlbmd0aCA9IDMwIDsKCX07Cn07Cg==