LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKiBDb3B5cmlnaHQgMjAwMiBTeWx2YWluIFBldHJlb2xsZSA8c3BldHJlb2xsZUB5YWhvby5mcj4KICogQ29weXJpZ2h0IDIwMDMsIDIwMDQgSm9z6SBNYW51ZWwgRmVycmVyIE9ydGl6CiAqCiAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KCi8qIE1lbnUgKi8KCk1BSU5fTUVOVSBNRU5VIExBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImQXJjaGl2byIgewogIE1FTlVJVEVNICJBJmJyaXIuLi4iLCBNTklEX0ZJTEVfT1BFTgogIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImSW1wcmltaXIiLCBNTklEX0ZJTEVfUFJJTlQKICBNRU5VSVRFTSAiJkNvbmZpZ3VyYWNp824gaW1wcmVzb3JhLi4uIiwgTU5JRF9GSUxFX1NFVFVQCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogIE1FTlVJVEVNICImU2FsaXIiLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIiZFZGl0YXIiIHsKICAgTUVOVUlURU0gIiZDb3BpYXIuLi4iLCBNTklEX0VESVRfQ09QWURMRwogICBNRU5VSVRFTSBTRVBBUkFUT1IKICAgTUVOVUlURU0gIiZBbm90YXIuLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICImTWFyY2Fkb3IiIHsKICAgTUVOVUlURU0gIiZEZWZpbmlyLi4uIiwgTU5JRF9CS01LX0RFRklORQogfQogUE9QVVAgIkEmeXVkYSIgewogICBNRU5VSVRFTSAiJkF5dWRhIHNvYnJlIGxhIGF5dWRhIiwgTU5JRF9IRUxQX0hFTFBPTgogICBNRU5VSVRFTSAiJlNpZW1wcmUgdmlzaWJsZSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm8uLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIiZBY2VyY2EgZGUgV0lORSIsIE1OSURfSEVMUF9XSU5FCiNlbmRpZgogfQp9CgovKiBTdHJpbmdzICovClNUUklOR1RBQkxFIERJU0NBUkRBQkxFIExBTkdVQUdFIExBTkdfU1BBTklTSCwgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsIAkiQXl1ZGEgZGUgV0lORSIKU1RJRF9XSEVSUk9SLCAJCSJFUlJPUiIKU1RJRF9XQVJOSU5HLCAgCQkiQURWRVJURU5DSUEiClNUSURfSU5GTywgIAkJIkluZm9ybWFjafNuIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgCSJB+m4gbm8gaW1wbGVtZW50YWRvIgpTVElEX0hMUEZJTEVfRVJST1JfcywgCSJFcnJvciBhbCBsZWVyIGVsIGFyY2hpdm8gZGUgYXl1ZGEgYCVzJyIKU1RJRF9DT05URU5UUywgCQkiJs1uZGljZSIKU1RJRF9TRUFSQ0gsIAkJIiZCdXNjYXIiClNUSURfQkFDSywgCQkiJkFudGVyaW9yIgpTVElEX0hJU1RPUlksIAkJIiZIaXN0b3JpYWwiClNUSURfVE9QSUNTLAkJIiZUZW1hcyIKU1RJRF9BTExfRklMRVMsIAkiVG9kb3MgbG9zIGFyY2hpdm9zICgqLiopIgpTVElEX0hFTFBfRklMRVNfSExQLCAJIkFyY2hpdm9zIGRlIGF5dWRhICgqLmhscCkiCn0K