LyoKICogSGVscCBWaWV3ZXIKICoKICogQ29weXJpZ2h0IDE5OTYgVWxyaWNoIFNjaG1pZAogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgpNQUlOX01FTlUgTUVOVSBMQU5HVUFHRSBMQU5HX1NMT1ZBSywgU1VCTEFOR19ERUZBVUxUCnsKIFBPUFVQICImU/pib3IiIHsKICAgTUVOVUlURU0gIiZPdHZvcmmdLi4uIiwgTU5JRF9GSUxFX09QRU4KICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImVGxh6GmdIiwgTU5JRF9GSUxFX1BSSU5UCiAgIE1FTlVJVEVNICImTmFzdGF2ZW5pZSB0bGHoZS4uLiIsIE1OSURfRklMRV9TRVRVUAogICBNRU5VSVRFTSAiVSZrb27oaZ0iLCBNTklEX0ZJTEVfRVhJVAogfQogUE9QVVAgIiZVcHJhdmmdIiB7CiAgIE1FTlVJVEVNICJLb3DtJnJvdmGdLi4uIiwgTU5JRF9FRElUX0NPUFlETEcKICAgTUVOVUlURU0gU0VQQVJBVE9SCiAgIE1FTlVJVEVNICImU2tvbWVudG92YZ0uLi4iLCBNTklEX0VESVRfQU5OT1RBVEUKIH0KIFBPUFVQICImWuFsb55rYSIgewogICBNRU5VSVRFTSAiJkRlZmlub3ZhnS4uLiIsIE1OSURfQktNS19ERUZJTkUKIH0KIFBPUFVQICImUG9tb2MiIHsKICAgTUVOVUlURU0gIlBvbW9jICZuYSBwb21vY2kiLCBNTklEX0hFTFBfSEVMUE9OCiAgIE1FTlVJVEVNICJWnmR5IG5hICZ2cmNodSIsIE1OSURfSEVMUF9IRUxQVE9QCiAgIE1FTlVJVEVNIFNFUEFSQVRPUgogICBNRU5VSVRFTSAiJkluZm8uLi4iLCBNTklEX0hFTFBfQUJPVVQKI2lmZGVmIFdJTkVMSUIKICAgTUVOVUlURU0gIk8mIFdJTkUiLCBNTklEX0hFTFBfV0lORQojZW5kaWYKIH0KfQoKLyogU3RyaW5ncyAqLwpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSBMQU5HVUFHRSBMQU5HX1NMT1ZBSywgU1VCTEFOR19ERUZBVUxUCnsKU1RJRF9XSU5FX0hFTFAsICAgICAgICAgICAgICJXSU5FIFBvbW9jIgpTVElEX1dIRVJST1IsICAgICAgICAgICAgICAgIkNIWUJBIgpTVElEX1dBUk5JTkcsICAgICAgICAgICAgICAgIlZBUk9WQU5JRSIKU1RJRF9JTkZPLCAgICAgICAgICAgICAgICAgICJJbmZvcm3hY2llIgpTVElEX05PVF9JTVBMRU1FTlRFRCwgICAgICAgIk5laW1wbGVtZW50b3ZhbukiClNUSURfSExQRklMRV9FUlJPUl9zLCAgICAgICAiQ2h5YmEgcG/oYXMg6O10YW5pYSBz+mJvcnUgYCVzJyIKU1RJRF9DT05URU5UUywgICAgICAgICAgICAgICImT2JzYWgiClNUSURfU0VBUkNILCAgICAgICAgICAgICAgICAiJki+YWRhnSIKU1RJRF9CQUNLLCAgICAgICAgICAgICAgICAgICImU3DknSIKU1RJRF9ISVNUT1JZLCAgICAgICAgICAgICAgICImSGlzdPNyaWEiClNUSURfVE9QSUNTLAkJICAgICImVG9waWNzIgpTVElEX0FMTF9GSUxFUywgICAgICAgICAgICAgIlaaZXRreSBz+mJvcnkgKCouKikiClNUSURfSEVMUF9GSUxFU19ITFAsICAgICAgICAiU/pib3J5IHBvbW9jaSAoKi5obHApIgpTVElEX0ZJTEVfTk9UX0ZPVU5EX3MgICAgICAgIkNhbm5vdCBmaW5kICclcycuIERvIHlvdSB3YW50IHRvIGZpbmQgdGhpcyBmaWxlIHlvdXJzZWxmPyIKfQo=