IwojIENvcHlyaWdodCAoYykgMjAwMCwgR2HrbCBSb3VhbGxhbmQgPGdhZWwucm91YWxsYW5kQGluYW1lLmNvbT4KIyBBbGwgcmlnaHRzIHJlc2VydmVkLgojCiMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiMgYXJlIG1ldDoKIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAojICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgojIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwojICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgojCiMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCiMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KIyBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCiMgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCiMgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAojIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQojIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgojCiMgICAgICAkSWQkCiMKIyBTeXNjYWxscyBjYXRlZ29yaWVzCiMgc3ludGF4OiBzeXNjYWxsIGNhdG1hc2sKIwojIG1vc3RseSBidWlsdCBmcm9tIG90aGVyIGFyY2hzL29zIHN5c2NhbGxlbnQuaAoKIyBmaWxlIGNhbGxzCmFjY2VzcwlURgphY2N0CVRGCmFjbAlURgpjaGRpcglURgpjaG1vZAlURgpjaG93bglURgpjaHJvb3QJVEYKY3JlYXQJVEYKY2xvc2UgCVRGCmNoZmxhZ3MJVEYKZnN0YXQ2NAlURgpmc3RhdAlURgpmY2hkaXIJVEYKZmNoZmxhZ3MJVEYKbGNob3duCVRGCmxpbmsJVEYKbHN0YXQJVEYKbHN0YXQ2NAlURgpseHN0YXQJVEYKbWtkaXIJVEYKbWtub2QJVEYKbW91bnQJVEYKb2xkbHN0YXQJVEYKb2xkc3RhdAlURgpvbGR1bW91bnQJVEYKb3BlbglURgpvdXRpbWUJVEYKcGF0aGNvbmYJVEYKcHJlYWQJVEYKcHdyaXRlCVRGCnJlYWRsaW5rCVRGCnJlbmFtZQlURgpybWRpcglURgpzZW5kZmlsZQlURgpzdGF0CVRGCnN0YXQ2NAlURgpzdGF0ZnMJVEYKc3RhdHZmcwlURgpzd2Fwb24JVEYKc3ltbGluawlURgp0cnVuY2F0ZQlURgp1bW91bnQJVEYKdW5saW5rCVRGCnVubW91bnQJVEYKdXNlbGliCVRGCnV0aW1lCVRGCnV0aW1lcwlURgp4bWtub2QJVEYKeHN0YXQJVEYKCiMgZmlsZS9wcm9jZXNzIGNhbGxzCmV4ZWMJVEZ8VFAKZXhlY3YJVEZ8VFAKZXhlY3ZlCVRGfFRQCgojIElQQyBjYWxscwptc2djdGwJVEkKbXNnZ2V0CVRJCm1zZ3JjdglUSQptc2dzbmQJVEkKbXNnc3lzCVRJCnNlbWN0bAlUSQpzZW1nZXQJVEkKc2Vtb3AJVEkKc2Vtc3lzCVRJCnNobWF0CVRJCnNobWN0bAlUSQpzaG1kdAlUSQpzaG1nZXQJVEkKc2htc3lzCVRJCgojIG5ldHdvcmsgY2FsbHMKYWNjZXB0CVROCmJpbmQJVE4KY29ubmVjdAlUTgpnZXRtc2cJVE4KZ2V0cGVlcm5hbWUJVE4KZ2V0cG1zZwlUTgpnZXRzb2NrbmFtZQlUTgpnZXRzb2Nrb3B0CVROCmxpc3RlbglUTgpwb2xsCVROCnB1dG1zZwlUTgpwdXRwbXNnCVROCnJlY3YJVE4KcmVjdmZyb20JVE4KcmVjdm1zZwlUTgpzZW5kCVROCnNlbmRtc2cJVE4Kc2VuZHRvCVROCnNldHNvY2tvcHQJVE4Kc2h1dGRvd24JVE4Kc29ja2V0CVROCnNvY2tldHBhaXIJVE4KCiMgcHJvY2VzcyBjYWxscwpfZXhpdAlUUApjbG9uZQlUUApmb3JrCVRQCmZvcmsxCVRQCm93YWl0CVRQCm93YWl0MwlUUAp2Zm9yawlUUAp3YWl0CVRQCndhaXQ0CVRQCndhaXRpZAlUUAp3YWl0cGlkCVRQCndhaXRzeXMJVFAKCiMgc2lnbmFsIGNhbGxzCmtpbGwJVFMKa2lsbHBnCVRTCmtzaWdxdWV1ZQlUUwpwYXVzZQlUUwpydF9zaWdhY3Rpb24JVFMKcnRfc2lncGVuZGluZwlUUwpydF9zaWdwcm9jbWFzawlUUwpydF9zaWdxdWV1ZWluZm8JVFMKcnRfc2lncmV0dXJuCVRTCnJ0X3NpZ3N1c3BlbmQJVFMKcnRfc2lndGltZWR3YWl0CVRTCnNpZ2FjdGlvbglUUwpzaWdhbHRzdGFjawlUUwpzaWdibG9jawlUUwpzaWdjbGVhbnVwCVRTCnNpZ2ZpbGxzZXQJVFMKc2lnZ2V0bWFzawlUUwpzaWdob2xkCVRTCnNpZ2lnbm9yZQlUUwpzaWduYWwJVFMKc2lncGF1c2UJVFMKc2lncGVuZGluZwlUUwpzaWdwb2xsCVRTCnNpZ3Byb2NtYXNrCVRTCnNpZ3JlbHNlCVRTCnNpZ3JldHVybglUUwpzaWdzZW5kc2V0CVRTCnNpZ3NldAlUUwpzaWdzZXRtYXNrCVRTCnNpZ3N0YWNrCVRTCnNpZ3N1c3BlbmQJVFMKc2lndGltZWR3YWl0CVRTCnNpZ3ZlYwlUUwo=