LyoKICogS29yZWFuIHJlc291cmNlcyBmb3IgVHdhaW4KICoKICogQ29weXJpZ2h0IDIwMDYgQ29kZVdlYXZlcnMsIEFyaWMgU3Rld2FydAogKiBDb3B5cmlnaHQgMjAwNiwyMDA3IFl1blNvbmcgSHdhbmcKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqLwoKI2luY2x1ZGUgInJlc291cmNlLmgiCgpMQU5HVUFHRSBMQU5HX0tPUkVBTiwgU1VCTEFOR19ERUZBVUxUCgpJRERfQ0FNRVJBVUkgRElBTE9HIERJU0NBUkRBQkxFICAwLCAwLCAzNzIsIDI3MwpTVFlMRSBEU19NT0RBTEZSQU1FIHwgRFNfU0VURk9SRUdST1VORCB8IERTX0NFTlRFUiB8IFdTX1BPUFVQIHwgV1NfVklTSUJMRSB8IAogICAgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlUKQ0FQVElPTiAixKu43rbzwMcgx8q4pyIKRk9OVCA5LCAiTVMgU2hlbGwgRGxnIgpCRUdJTgoJQ09OVFJPTCAgICAgICAgICJMaXN0MSIsSURDX0xJU1QxLCJTeXNMaXN0VmlldzMyIiwgTFZTX0lDT04gfCBXU19CT1JERVIgfApXU19UQUJTVE9QLDcsNywzNTgsMjI5CiAgICBERUZQVVNIQlVUVE9OICAgIryxxcO1yCCwzcC7ILrSt6+/wLHiIixJRENfSU1QT1JULDE1MiwyNTIsNzIsMTQKICAgIFBVU0hCVVRUT04gICAgICAiILnMuK4gurix4iIsSURDX0ZFVENILDcsMjUyLDY0LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIrjwtc4gutK3r7/AseIiLElEQ19JTVBPUlRBTEwsODAsMjUyLDY0LDE0CiAgICBDT05UUk9MICAgICAgICAgIrTryK2788DaIMH2s6rEobHiIixJRENfU0tJUCwiQnV0dG9uIiwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUCwyMzAsMjUyLDc2LDE0CiAgICBQVVNIQlVUVE9OICAgICAgIrOqsKGx4iIsSURDX0VYSVQsMzE1LDI1Miw1MCwxNApFTkQKCklERF9ESUFMT0cxIERJQUxPRyBESVNDQVJEQUJMRSAwLCAwLCAxODYsIDQ2ClNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VIHwgV1NfVklTSUJMRSB8IERTX0NFTlRFUiB8IERTX1NFVEZPUkVHUk9VTkQKQ0FQVElPTiAiv8Wx4rTCIMHfIgpGT05UIDksICJNUyBTaGVsbCBEbGciCkJFR0lOCiAgICBMVEVYVCAgICK/xbHitMIgwd8uLi7A4b3DuLggseK02biuvcq9w7/AIixJRENfU1RBVElDLDUsMTksMTc2LDgsIFNTX0NFTlRFUgpFTkQKCklERF9DT05ORUNUSU5HIERJQUxPRyBESVNDQVJEQUJMRSAgMCwgMCwgMjgwLCAxMTYKU1RZTEUgRFNfTU9EQUxGUkFNRSB8IFdTX1BPUFVQIHwgV1NfQ0FQVElPTiB8IFdTX1NZU01FTlV8IFdTX1ZJU0lCTEUgfCBEU19DRU5URVIKQ0FQVElPTiAixKu43rbzx8+w7SC/rLDhwd8iCkZPTlQgOSwgIk1TIFNoZWxsIERsZyIKQkVHSU4KICAgIENPTlRST0wgICAgICAgICAiIixJRENfQklUTUFQLCJTdGF0aWMiLFNTX0JJVE1BUHxTU19DRU5URVJJTUFHRSw0LDQsMTEwLDExMAogICAgTFRFWFQgICAgICAgICAgICLEq7jetvPHz7DtIL+ssOHB3y4uLiDA4b3DuLggseK02biuvcq9w7/AIixJRENfU1RBVElDLDEyOCw1OCwKICAgICAgICAgICAgICAgICAgICAxMTYsOApFTkQK