LyoKICogUG9saXNoIHJlc291cmNlIGZpbGUgZm9yIE1TIEFDTQogKgogKiBDb3B5cmlnaHQgMjAwMCBFcmljIFBvdWVjaAogKiBDb3B5cmlnaHQgMjAwNCBQaW90ciBDYWJhbgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCiAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwogKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EKICovCgojaW5jbHVkZSAid2luZWFjbS5oIgoKTEFOR1VBR0UgTEFOR19QT0xJU0gsIFNVQkxBTkdfREVGQVVMVAoKRExHX0FDTUZPUk1BVENIT09TRV9JRCBESUFMT0cgRElTQ0FSREFCTEUgIDEwLCAyMCwgMjM1LCAxMDAKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIld5YvNyIGS/d2nqa3UiCkZPTlQgOCwgIk1TIFNoZWxsIERsZyIKQkVHSU4KCiAgICBMVEVYVCAgICAgICAgICAgIiZOYXp3YToiLCAtMSwgNSwgNSwgMTE1LCA4LCBOT1QgV1NfR1JPVVAKCiAgICBDT01CT0JPWCAgICAgICAgSUREX0FDTUZPUk1BVENIT09TRV9DTUJfQ1VTVE9NLCA1LCAxNSwgMTE1LCA2MCwKICAgICAgICAgICAgICAgICAgICBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX1NPUlQgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAoKICAgIFBVU0hCVVRUT04gICAgICAiJlphcGlzeiBqYWtvLi4uIiwgSUREX0FDTUZPUk1BVENIT09TRV9CVE5fU0VUTkFNRSwgMTI1LCAxNCwgNTAsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIiZVc3XxIiwgSUREX0FDTUZPUk1BVENIT09TRV9CVE5fREVMTkFNRSwgMTgwLCAxNCwgNTAsIDE0CgogICAgTFRFWFQgICAgICAgICAgICImRm9ybWF0OiIsIC0xLCA1LCA0MSwgNDQsIDgsIE5PVCBXU19HUk9VUAoKICAgIENPTUJPQk9YICAgICAgICBJRERfQUNNRk9STUFUQ0hPT1NFX0NNQl9GT1JNQVRUQUcsIDUwLCAzOSwgMTgwLCA2MCwKICAgICAgICAgICAgICAgICAgICBDQlNfRFJPUERPV05MSVNUIHwgQ0JTX1NPUlQgfCBXU19WU0NST0xMIHwgV1NfVEFCU1RPUAoKICAgIExURVhUICAgICAgICAgICAiJkF0cnlidXR5OiIsIC0xLCA1LCA1OSwgNDQsIDgsIE5PVCBXU19HUk9VUAoKI2lmIDAKICAgIENPTUJPQk9YICAgICAgICBJRERfQUNNRk9STUFUQ0hPT1NFX0NNQl9GT1JNQVQsIDUwLCA1NywgMTgwLCA2MCwKICAgICAgICAgICAgICAgICAgICBDQlNfRFJPUERPV05MSVNUIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgfAogICAgICAgICAgICAgICAgICAgIENCU19PV05FUkRSQVdGSVhFRCB8IENCU19IQVNTVFJJTkdTCiNlbHNlCiAgICBDT01CT0JPWCAgICAgICAgSUREX0FDTUZPUk1BVENIT09TRV9DTUJfRk9STUFULCA1MCwgNTcsIDE4MCwgNjAsCiAgICAgICAgICAgICAgICAgICAgQ0JTX0RST1BET1dOTElTVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QCiNlbmRpZgogICAgREVGUFVTSEJVVFRPTiAgICJPSyIsIElET0ssIDUzLCA4MCwgNDAsIDE0CiAgICBQVVNIQlVUVE9OICAgICAgIkFudWx1aiIsIElEQ0FOQ0VMLCA5NywgODAsIDQwLCAxNAogICAgUFVTSEJVVFRPTiAgICAgICImUG9tb2MiLCBJRERfQUNNRk9STUFUQ0hPT1NFX0JUTl9IRUxQLCAxNDEsIDgwLCA0MCwgMTQKCkVORAo=