LyoKICogKGMpIENvcHlyaWdodCAxOTkzLCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAqIENvcHlyaWdodCCpIDIwMTIgTGluYXJvIExpbWl0ZWQKICoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGdsbWFyazIgT3BlbkdMIChFUykgMi4wIGJlbmNobWFyay4KICoKICogZ2xtYXJrMiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZQogKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCiAqIHZlcnNpb24uCiAqCiAqIGdsbWFyazIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCiAqIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZQogKiBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCiAqIGdsbWFyazIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAqCiAqIEF1dGhvcnM6CiAqICBKZXNzZSBCYXJrZXIKICovCiNpZm5kZWYgTEFNUF9IXwojZGVmaW5lIExBTVBfSF8KCiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlICJ2ZWMuaCIKI2luY2x1ZGUgInN0YWNrLmgiCiNpbmNsdWRlICJnbC1oZWFkZXJzLmgiCiNpbmNsdWRlICJwcm9ncmFtLmgiCgpjbGFzcyBMYW1wCnsKcHVibGljOgogICAgTGFtcCgpOwogICAgfkxhbXAoKTsKCiAgICB2b2lkIGluaXQoKTsKICAgIGJvb2wgdmFsaWQoKSBjb25zdCB7IHJldHVybiB2YWxpZF87IH0KICAgIHZvaWQgZHJhdyhMaWJNYXRyaXg6OlN0YWNrNCYgbW9kZWx2aWV3LCBMaWJNYXRyaXg6OlN0YWNrNCYgcHJvamVjdGlvbiwKICAgICAgICAgICAgICBjb25zdCBMaWJNYXRyaXg6OnZlYzQqIGxpZ2h0UG9zaXRpb25zKTsKcHJpdmF0ZTogICAgCiAgICBQcm9ncmFtIGxpdFByb2dyYW1fOwogICAgUHJvZ3JhbSB1bmxpdFByb2dyYW1fOwogICAgc3RkOjpzdHJpbmcgbGl0VmVydGV4U2hhZGVyXzsKICAgIHN0ZDo6c3RyaW5nIGxpdEZyYWdtZW50U2hhZGVyXzsKICAgIHN0ZDo6c3RyaW5nIHVubGl0VmVydGV4U2hhZGVyXzsKICAgIHN0ZDo6c3RyaW5nIHVubGl0RnJhZ21lbnRTaGFkZXJfOwogICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIG1vZGVsdmlld05hbWVfOwogICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIHByb2plY3Rpb25OYW1lXzsKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBsaWdodDBQb3NpdGlvbk5hbWVfOwogICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nIGxpZ2h0MVBvc2l0aW9uTmFtZV87CiAgICBzdGF0aWMgY29uc3Qgc3RkOjpzdHJpbmcgbGlnaHQyUG9zaXRpb25OYW1lXzsKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyB2ZXJ0ZXhBdHRyaWJOYW1lXzsKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBub3JtYWxBdHRyaWJOYW1lXzsKICAgIHN0YXRpYyBjb25zdCBzdGQ6OnN0cmluZyBub3JtYWxNYXRyaXhOYW1lXzsKICAgIHN0ZDo6dmVjdG9yPExpYk1hdHJpeDo6dmVjMz4gdmVydGV4RGF0YV87CiAgICBzdGQ6OnZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4gaW5kZXhEYXRhXzsKICAgIHVuc2lnbmVkIGludCBidWZmZXJPYmplY3RzX1syXTsKICAgIGJvb2wgdmFsaWRfOwp9OwoKI2VuZGlmIC8vIExBTVBfSF8K