LyoKICogUnVzc2lhbiBMYW5ndWFnZSBTdXBwb3J0CiAqCiAqIENvcHlyaWdodCAyMDA5IFZsYWRpbWlyIFBhbmtyYXRvdgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAicmVzb3VyY2UuaCIKCkxBTkdVQUdFIExBTkdfUlVTU0lBTiwgU1VCTEFOR19ERUZBVUxUCgpJRE1fREVCVUdfUE9QVVAgTUVOVQpCRUdJTgogICAgUE9QVVAgIiIKICAgIEJFR0lOCiAgICAgICAgTUVOVUlURU0gIibO8uvg5OrgIiwgSURfREVCVUcKICAgIEVORApFTkQKCklERF9DUkFTSF9ETEcgRElBTE9HRVggMTAwLCAxMDAsIDI3MywgMTc1ClNUWUxFIERTX1NFVEZPTlQgfCBEU19NT0RBTEZSQU1FIHwgRFNfRklYRURTWVMgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIs746OHq4CDv8O7j8ODs7PsiCkZPTlQgOCwgIlRhaG9tYSIKQkVHSU4KICAgIExURVhUICAgICAgICAgICAiIixJRENfU1RBVElDX0JHLDAsMCwyNzMsNTIsV1NfQk9SREVSLDAKICAgIExURVhUICAgICAgICAgICAiwiDv8O7j8ODs7OUgJXMg7uHt4PDz5uXt4CDx5fD8uOft4P8g7vjo4ergIOgg7u3gIOTu6+bt4CDh+/L8IFwKICAgICAgICAgICAgICAgICAgICDn4Orw+/LgLiDP8Ojt7vHo7CDo5+Lo7eXt6P8g5+Ag7eXz5O7h8fLi7i4iLAogICAgICAgICAgICAgICAgICAgIElEQ19TVEFUSUNfVFhUMSwyNywxMCwyMjQsMzAKICAgIExURVhUICAgICAgICAgICAizvjo4ergIOzu4+vgIOH78vwg4vvn4uDt4CDv8O7h6+Xs7ukg4iDv8O7j8ODs7OUg6OvoIO3l5O7w4OHu8uru6SDiIFdpbmUuIFwKICAgICAgICAgICAgICAgICAgICDC+yDs7ubl8uUg7+7x5fLo8vwgaHR0cDovL2FwcGRiLndpbmVocS5vcmcg6CDv7ujx6uDy/CDx7uLl8vsg7iDn4O/z8erlIFwKICAgICAgICAgICAgICAgICAgICD98u7pIO/w7uPw4Ozs+y5cblxuXAogICAgICAgICAgICAgICAgICAgIMXx6+gg/fLgIO/w7uHr5ezgIO3lIO/w6PHz8vHy4vPl8iDv7uQgV2luZG93cyDoIOX5uCDt5SDh++vgIOfg8OXj6PHy8Ojw7uLg7eAsIFwKICAgICAgICAgICAgICAgICAgICDi+yDs7ubl8uUg8e7u4fno8vwg7iDt5ekg7eAgaHR0cDovL2J1Z3Mud2luZWhxLm9yZy4iLElEQ19TVEFUSUNfVFhUMiwyNyw2MCwyMjQsMTAwCiAgICBERUZQVVNIQlVUVE9OICAgIsfg6vD78vwiLCBJRE9LLCAyMDUsIDE1MSwgNjAsIDE2LCBXU19UQUJTVE9QCkVORAoKU1RSSU5HVEFCTEUKQkVHSU4KICAgIElEU19BVVRPX0NBUFRJT04gICAgICLO+Ojh6uAgV2luZSIKICAgIElEU19JTlZBTElEX1BBUkFNUyAgICLC7fPy8OXt7ejlIO746OHq6CAtIO/u6/P35e37IO3l4uXw7fvlIO/g8ODs5fLw+yIKICAgIElEU19VTklERU5USUZJRUQgICAgICIo7eXu7/Dl5OXr5e3uKSIKRU5ECg==