I2lmbmRlZiBfX0xQQV9JTk5FUl9IX18NCiNkZWZpbmUgX19MUEFfSU5ORVJfSF9fDQoNCiNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPg0KI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+DQoNCiNpbmNsdWRlICJscGFfYXBpLmgiDQoNCiNpbmNsdWRlICJjanNvbi5oIg0KI2luY2x1ZGUgIm1kNS5oIg0KI2luY2x1ZGUgImVycm5vLmgiDQoNCiNkZWZpbmUgTUFYX0lNRUlfTEVOIDE3DQojZGVmaW5lIE1BWF9UUkFOU0lEX0xFTiA0MQ0KDQojZGVmaW5lIENTSU1fUkVRX0xFTiA2MDAgDQojZGVmaW5lIENTSU1fUkVTUF9MRU4gNjAwIA0KI2RlZmluZSBBUERVX1JFUV9MRU4gNTIwIC8vdGFnMTArMjU1KjIrMDANCiNkZWZpbmUgQVBEVV9SRVNQX0xFTiA1MjAgLy8weEZGKjIrc3cxK3N3Mj01MTQNCiNkZWZpbmUgQVBEVV9CWVRFX0xFTiAyNjEgLy9jc2lt0K3S6dW7t7W72NfutPOzpLbIMjU1IEFQRFVfUkVTUF9MRU4vMisxDQojZGVmaW5lIE1JTl9BUERVX0xFTiAxNiAvLzgwRTI5MTAwMDRURzAxWFgNCg0KI2RlZmluZSBTTURQX0hUVFBfTUFYX0xFTiAweDIwMDAwIC8vMTI4Sw0KI2RlZmluZSBUUklHX0hUVFBfTUFYX0xFTiAweDIwMDAgLy84Sw0KI2RlZmluZSBIVFRQX0NIVU5LRURfRkxBRyAweDdGRkZGRkZGDQoNCg0KDQoNCiNkZWZpbmUgSUNDSURfTEVOIDIwDQoNCi8vI2RlZmluZSBDU0lNX0FQRFVfTEVOIDUxMSAgLy9jc2lt0K3S6dW7t7W72NfutPOzpLbIMjU1DQoNCiNpZm5kZWYgQk9PTA0KI2RlZmluZSBCT09MIAkgIAl1bnNpZ25lZCBjaGFyDQojZW5kaWYNCiNpZm5kZWYgVFJVRQ0KI2RlZmluZQlUUlVFCTENCiNlbmRpZg0KI2lmbmRlZiBGQUxTRQ0KI2RlZmluZQlGQUxTRQkwDQojZW5kaWYNCg0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICAgIGludCBzb2NrX2ZkOw0KICAgIFNTTF9DVFggKnNzbF9jdDsNCiAgICBTU0wgKnNzbDsNCiANCiAgICAvL3VybCC94s72s/bAtLXE0MXPog0KICAgIGNoYXIgKmhvc3Q7DQogICAgY2hhciAqcGF0aDsNCiAgICBpbnQgcG9ydDsNCn0gaHR0cHNfY29udGV4dF90Ow0KDQovL2h0dHBzDQppbnQgaHR0cHNfaW5pdChodHRwc19jb250ZXh0X3QgKmNvbnRleHQpOw0KaW50IGh0dHBzX3VuaW5pdChodHRwc19jb250ZXh0X3QgKmNvbnRleHQpOw0KaW50IGh0dHBzX3JlYWQoaHR0cHNfY29udGV4dF90ICpjb250ZXh0LHZvaWQqIGJ1ZmYsaW50IGxlbik7DQppbnQgaHR0cHNfd3JpdGUoaHR0cHNfY29udGV4dF90ICpjb250ZXh0LGNvbnN0IHZvaWQqIGJ1ZmYsaW50IGxlbik7DQppbnQgaHR0cHNfZ2V0X3N0YXR1c19jb2RlKGh0dHBzX2NvbnRleHRfdCAqY29udGV4dCwgaW50ICpjb250ZW50X2xlbik7DQppbnQgaHR0cHNfcmVhZF9jb250ZW50KGh0dHBzX2NvbnRleHRfdCAqY29udGV4dCxjaGFyICpyZXNwX2NvbnRldCxpbnQgbWF4X2xlbik7DQoNCi8vZXMxMGINCmNoYXIgKkdldEVVSUNDQ2hhbGxlbmdlKHZvaWQpOw0KY2hhciAqR2V0RVVJQ0NJbmZvKEJPT0wgZmxhZyk7DQpjaGFyICpBdXRoZW50aWNhdGVTZXJ2ZXIoY2hhciAqc2lnbmQxSGV4LCBjaGFyICpzaWduYXR1cmUxSGV4LCBjaGFyICpjaVBLSWRIZXgsIGNoYXIgKmNlcnRpZmljYXRlSGV4LCBjaGFyICptYXRjaGluZ0lkLCBjaGFyICppbWVpSGV4KTsNCmNoYXIgKlByZXBhcmVEb3dubG9hZChjaGFyICp0cmFuc0lkICxjaGFyICpzaWduZWQySGV4LGNoYXIgKnNpZ25hdHVyZTJIZXgsY2hhciAqY2VydGlIZXgsY2hhciAqY29uZmlybUNvZGUpOw0KY2hhciAqTG9hZEJvdW5kUHJvZmlsZVBhY2thZ2UoY2hhciAqIGJwcEhleCk7DQoNCg0KLy9lczEwYw0KY2hhciAqRW5hYmxlUHJvZmlsZShjaGFyICppY2NpZEhleCk7DQpjaGFyICpFVUlDQ01lbW9yeVJlc2V0KHZvaWQpOw0KY2hhciAqR2V0UHJvZmlsZXNJbmZvKGNoYXIgKmljY2lkSGV4KTsNCmNoYXIgKkRpc2FibGVQcm9maWxlKGNoYXIgKmljY2lkSGV4KTsNCmNoYXIgKkRlbGV0ZVByb2ZpbGUgIChjaGFyICppY2NpZEhleCk7DQpjaGFyICpHZXRFSUQodm9pZCk7DQoNCi8vZXM5Kw0KY2hhciAqSW5pdGlhdGVBdXRoZW50aWNhdGlvbihjaGFyICpldWljY0NoYWxsZW5nZSwgY2hhciAqZXVpY2NJbmZvMSwgY2hhciAqc21kcEFkZHJlc3MpOw0KY2hhciAqQXV0aGVudGljYXRlQ2xpZW50KGNoYXIgKnRyYW5zYWN0aW9uSWQsY2hhciAqYXV0aFNlclJlc3BIZXgpOw0KY2hhciAqR2V0Qm91bmRQcm9maWxlUGFja2FnZSAoY2hhciAqdHJhbnNhY3Rpb25JZCwgY2hhciAqcHJlZGxSZXNwSGV4KTsNCmNoYXIgKkhhbmRsZU5vdGlmaWNhdGlvbihjaGFyICpwbmZIZXgpOw0KDQovL2NoYW5uZWwNCmNoYXIgKk9wZW5Mb2dpY2FsQ2hhbm5lbCh2b2lkKTsNCmludCBDbG9zZUxvZ2ljYWxDaGFubmVsKGludCBjaGFuX2lkKTsNCg0KDQovL2VkY29kZQ0KY2hhciAqbHBhX3Rsdl9nZXRfdmFsX2J5X3RhZyh1bnNpZ25lZCBjaGFyICphcGR1X2J5dGUsIGludCBhcGR1X2xlbiwgdW5zaWduZWQgaW50IHRhZyk7DQpjaGFyICpscGFfdGFnX2FwZHVfZnJvbV9hdHJlc3AoY2hhciAqYXRyZXNfYXBkdSwgdW5zaWduZWQgaW50IHRhZyk7DQpjaGFyICpscGFfZ2V0X2FwZHVfZnJvbV9hdHJlc3AoY2hhciAqYXRyZXNfYXBkdSk7DQppbnQgbHBhX2NzaW1fcmVzcF9jb2RlKGNoYXIgKmF0cmVzX2FwZHUsIGludCAqc2Vjb25kX2xlbik7DQppbnQgbHBhX2NzaW1fcmVzcF9ub3JtYWwoY2hhciAqYXRyZXNfYXBkdSk7DQoNCmludCBzdHJpbmcyYnl0ZXMoY29uc3QgY2hhciogcFNyYywgdW5zaWduZWQgY2hhciogcERzdCwgaW50IG5TcmNMZW5ndGgpOw0KaW50IGJ5dGVzMnN0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyKiBwU3JjLCBjaGFyKiBwRHN0LCBpbnQgblNyY0xlbmd0aCk7DQoNCmNoYXIgKmxwYV9iYXNlNjRfZW5jb2RlKGNvbnN0IGNoYXIqZGF0YSwgaW50IGRhdGFfbGVuKTsNCnVuc2lnbmVkIGNoYXIgKmxwYV9iYXNlNjRfZGVjb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IGxlbiwgaW50ICpvdXRfbGVuKTsNCg0Kdm9pZCBscGFfdHJhbnNfaWNjaWQoY2hhciAqaWNjaWQsIGludCBsZW4pOw0KDQojZW5kaWYNCg==