LyoKICogbGludXgvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYzI0MTBfdWRjLmgKICogU2Ftc3VuZyBvbi1jaGlwIGZ1bGwgc3BlZWQgVVNCIGRldmljZSBjb250cm9sbGVycwogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBIZXJiZXJ0IFD2dHpsIC0gQXJuYXVkIFBhdGFyZAogKglBZGRpdGlvbmFsIGNsZWFudXBzIGJ5IEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KICoKICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICovCgojaWZuZGVmIF9TM0MyNDEwX1VEQ19ICiNkZWZpbmUgX1MzQzI0MTBfVURDX0gKCnN0cnVjdCBzM2MyNDEwX2VwIHsKCXN0cnVjdCBsaXN0X2hlYWQJCXF1ZXVlOwoJdW5zaWduZWQgbG9uZwkJCWxhc3RfaW87CS8qIGppZmZpZXMgdGltZXN0YW1wICovCglzdHJ1Y3QgdXNiX2dhZGdldAkJKmdhZGdldDsKCXN0cnVjdCBzM2MyNDEwX3VkYwkJKmRldjsKCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYzsKCXN0cnVjdCB1c2JfZXAJCQllcDsKCXU4CQkJCW51bTsKCgl1bnNpZ25lZCBzaG9ydAkJCWZpZm9fc2l6ZTsKCXU4CQkJCWJFbmRwb2ludEFkZHJlc3M7Cgl1OAkJCQlibUF0dHJpYnV0ZXM7CgoJdW5zaWduZWQJCQloYWx0ZWQgOiAxOwoJdW5zaWduZWQJCQlhbHJlYWR5X3NlZW4gOiAxOwoJdW5zaWduZWQJCQlzZXR1cF9zdGFnZSA6IDE7Cn07CgoKLyogV2FybmluZyA6IGVwMCBoYXMgYSBmaWZvIG9mIDE2IGJ5dGVzICovCi8qIERvbid0IHRyeSB0byBzZXQgMzIgb3IgNjQgICAgICAgICAgICAqLwovKiBhbHNvIHRlc3R1c2IgMTQgZmFpbHMgIHdpdCAxNiBidXQgaXMgKi8KLyogZmluZSB3aXRoIDggICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRVAwX0ZJRk9fU0laRQkJIDgKI2RlZmluZSBFUF9GSUZPX1NJWkUJCTY0CiNkZWZpbmUgREVGQVVMVF9QT1dFUl9TVEFURQkweDAwCgojZGVmaW5lIFMzQzI0NDBfRVBfRklGT19TSVpFCTEyOAoKc3RhdGljIGNvbnN0IGNoYXIgZXAwbmFtZSBbXSA9ICJlcDAiOwoKc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGVwX25hbWVbXSA9IHsKCWVwMG5hbWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldmVyeW9uZSBoYXMgZXAwICovCgkvKiBzM2MyNDEwIGZvdXIgYmlkaXJlY3Rpb25hbCBidWxrIGVuZHBvaW50cyAqLwoJImVwMS1idWxrIiwgImVwMi1idWxrIiwgImVwMy1idWxrIiwgImVwNC1idWxrIiwKfTsKCiNkZWZpbmUgUzNDMjQxMF9FTkRQT0lOVFMgICAgICAgQVJSQVlfU0laRShlcF9uYW1lKQoKc3RydWN0IHMzYzI0MTBfcmVxdWVzdCB7CglzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZTsJCS8qIGVwJ3MgcmVxdWVzdHMgKi8KCXN0cnVjdCB1c2JfcmVxdWVzdAkJcmVxOwp9OwoKZW51bSBlcDBfc3RhdGUgewogICAgICAgIEVQMF9JRExFLAogICAgICAgIEVQMF9JTl9EQVRBX1BIQVNFLAogICAgICAgIEVQMF9PVVRfREFUQV9QSEFTRSwKICAgICAgICBFUDBfRU5EX1hGRVIsCiAgICAgICAgRVAwX1NUQUxMLAp9OwoKc3RhdGljIGNvbnN0IGNoYXIgKmVwMHN0YXRlc1tdPSB7CiAgICAgICAgIkVQMF9JRExFIiwKICAgICAgICAiRVAwX0lOX0RBVEFfUEhBU0UiLAogICAgICAgICJFUDBfT1VUX0RBVEFfUEhBU0UiLAogICAgICAgICJFUDBfRU5EX1hGRVIiLAogICAgICAgICJFUDBfU1RBTEwiLAp9OwoKc3RydWN0IHMzYzI0MTBfdWRjIHsKCXNwaW5sb2NrX3QJCQlsb2NrOwoKCXN0cnVjdCBzM2MyNDEwX2VwCQllcFtTM0MyNDEwX0VORFBPSU5UU107CglpbnQJCQkJYWRkcmVzczsKCXN0cnVjdCB1c2JfZ2FkZ2V0CQlnYWRnZXQ7CglzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIJKmRyaXZlcjsKCXN0cnVjdCBzM2MyNDEwX3JlcXVlc3QJCWZpZm9fcmVxOwoJdTgJCQkJZmlmb19idWZbRVBfRklGT19TSVpFXTsKCXUxNgkJCQlkZXZzdGF0dXM7CgoJdTMyCQkJCXBvcnRfc3RhdHVzOwoJaW50CQkJCWVwMHN0YXRlOwoKCXVuc2lnbmVkCQkJZ290X2lycSA6IDE7CgoJdW5zaWduZWQJCQlyZXFfc3RkIDogMTsKCXVuc2lnbmVkCQkJcmVxX2NvbmZpZyA6IDE7Cgl1bnNpZ25lZAkJCXJlcV9wZW5kaW5nIDogMTsKCXU4CQkJCXZidXM7CglzdHJ1Y3QgZGVudHJ5CQkJKnJlZ3NfaW5mbzsKfTsKCiNlbmRpZgo=