I2lmbmRlZiBCT09TVF9TTUFSVF9QVFJfREVUQUlMX0FUT01JQ19DT1VOVF9HQ0NfSFBQX0lOQ0xVREVECiNkZWZpbmUgQk9PU1RfU01BUlRfUFRSX0RFVEFJTF9BVE9NSUNfQ09VTlRfR0NDX0hQUF9JTkNMVURFRAoKLy8KLy8gIGJvb3N0L2RldGFpbC9hdG9taWNfY291bnRfZ2NjLmhwcAovLwovLyAgYXRvbWljX2NvdW50IGZvciBHTlUgbGlic3RkYysrIHYzCi8vCi8vICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9wb3J0aW5nL1RocmVhZC1zYWZldHkuaHRtbAovLwovLyAgQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyIFBldGVyIERpbW92IGFuZCBNdWx0aSBNZWRpYSBMdGQuCi8vICBDb3B5cmlnaHQgKGMpIDIwMDIgTGFycyBHdWxsaWsgQmr4bm5lcyA8bGFyc2JqQGx5eC5vcmc+Ci8vICBDb3B5cmlnaHQgMjAwMy0yMDA1IFBldGVyIERpbW92Ci8vCi8vICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKLy8gIGFjY29tcGFueWluZyBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0Ci8vICBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi8vCgojaWYgX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXyA+PSA0MDIKIyBpbmNsdWRlIDxleHQvYXRvbWljaXR5Lmg+IAojZWxzZSAKIyBpbmNsdWRlIDxiaXRzL2F0b21pY2l0eS5oPgojZW5kaWYKCm5hbWVzcGFjZSBib29zdAp7CgpuYW1lc3BhY2UgZGV0YWlsCnsKCiNpZiBkZWZpbmVkKF9fR0xJQkNYWF9fKSAvLyBnKysgMy40KwoKdXNpbmcgX19nbnVfY3h4OjpfX2F0b21pY19hZGQ7CnVzaW5nIF9fZ251X2N4eDo6X19leGNoYW5nZV9hbmRfYWRkOwoKI2VuZGlmCgpjbGFzcyBhdG9taWNfY291bnQKewpwdWJsaWM6CgogICAgZXhwbGljaXQgYXRvbWljX2NvdW50KCBsb25nIHYgKSA6IHZhbHVlXyggdiApIHt9CgogICAgbG9uZyBvcGVyYXRvcisrKCkKICAgIHsKICAgICAgICByZXR1cm4gX19leGNoYW5nZV9hbmRfYWRkKCAmdmFsdWVfLCArMSApICsgMTsKICAgIH0KCiAgICBsb25nIG9wZXJhdG9yLS0oKQogICAgewogICAgICAgIHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoICZ2YWx1ZV8sIC0xICkgLSAxOwogICAgfQoKICAgIG9wZXJhdG9yIGxvbmcoKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoICZ2YWx1ZV8sIDAgKTsKICAgIH0KCnByaXZhdGU6CgogICAgYXRvbWljX2NvdW50KGF0b21pY19jb3VudCBjb25zdCAmKTsKICAgIGF0b21pY19jb3VudCAmIG9wZXJhdG9yPShhdG9taWNfY291bnQgY29uc3QgJik7CgogICAgbXV0YWJsZSBfQXRvbWljX3dvcmQgdmFsdWVfOwp9OwoKfSAvLyBuYW1lc3BhY2UgZGV0YWlsCgp9IC8vIG5hbWVzcGFjZSBib29zdAoKI2VuZGlmIC8vICNpZm5kZWYgQk9PU1RfU01BUlRfUFRSX0RFVEFJTF9BVE9NSUNfQ09VTlRfR0NDX0hQUF9JTkNMVURFRAo=