LyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqLwoKCiNpZm5kZWYgX0FQUl9BVURJT19WMl9IXwojZGVmaW5lIF9BUFJfQVVESU9fVjJfSF8KCiNpbmNsdWRlIDxpcGMvYXByLmg+CiNpbmNsdWRlIDxsaW51eC9tc21fYXVkaW8uaD4KCi8qIHNpemUgb2YgaGVhZGVyIG5lZWRlZCBmb3IgcGFzc2luZyBkYXRhIG91dCBvZiBiYW5kICovCiNkZWZpbmUgQVBSX0NNRF9PQl9IRFJfU1ogIDEyCgovKiBzaXplIG9mIGhlYWRlciBuZWVkZWQgZm9yIGdldHRpbmcgZGF0YSAqLwojZGVmaW5lIEFQUl9DTURfR0VUX0hEUl9TWiAxNgoKc3RydWN0IHBhcmFtX291dGJhbmQgewoJc2l6ZV90ICAgICAgIHNpemU7Cgl2b2lkICAgICAgICAqa3ZhZGRyOwoJcGh5c19hZGRyX3QgIHBhZGRyOwp9OwoKI2RlZmluZSBBRFNQX0FETV9WRVJTSU9OICAgIDB4MDAwNzAwMDAKCiNkZWZpbmUgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICAgIDB4MDAwMTAzMjIKI2RlZmluZSBBRE1fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgMHgwMDAxMDMyMwojZGVmaW5lIEFETV9DTURfU0hBUkVEX01FTV9VTk1BUF9SRUdJT05TIDB4MDAwMTAzMjQKCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfTUFQX1JPVVRJTkdTX1Y1IDB4MDAwMTAzMjUKI2RlZmluZSBBRE1fQ01EX1NUUkVBTV9ERVZJQ0VfTUFQX1JPVVRJTkdTX1Y1IDB4MDAwMTAzM0QKLyogRW51bWVyYXRpb24gZm9yIGFuIGF1ZGlvIFJ4IG1hdHJpeCBJRC4qLwojZGVmaW5lIEFETV9NQVRSSVhfSURfQVVESU9fUlggICAgICAgICAgICAgIDAKCiNkZWZpbmUgQURNX01BVFJJWF9JRF9BVURJT19UWCAgICAgICAgICAgICAgMQoKI2RlZmluZSBBRE1fTUFUUklYX0lEX0NPTVBSRVNTRURfQVVESU9fUlggICAyCgojZGVmaW5lIEFETV9NQVRSSVhfSURfQ09NUFJFU1NFRF9BVURJT19UWCAgIDMKCiNkZWZpbmUgQURNX01BVFJJWF9JRF9MSVNURU5fVFggICAgICAgICAgICAgNAovKiBFbnVtZXJhdGlvbiBmb3IgYW4gYXVkaW8gVHggbWF0cml4IElELiovCiNkZWZpbmUgQURNX01BVFJJWF9JRF9BVURJT1ggICAgICAgICAgICAgIDEKCiNkZWZpbmUgQURNX01BWF9DT1BQUyA1CgovKiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzIHdpdGggbXNtX2F1ZGlvX2NhbGlicmF0aW9uICovCiNkZWZpbmUgU1BfVjJfTlVNX01BWF9TUEtSIDIKCi8qIFNlc3Npb24gbWFwIG5vZGUgc3RydWN0dXJlLgogKiBJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgYXJlIG51bV9jb3BwcwogKiBlbnRyaWVzIG9mIENPUFAgSURzLiBUaGUgQ09QUCBJRHMgYXJlIDE2IGJpdHMsIHNvCiAqIHRoZXJlIG1pZ2h0IGJlIGEgcGFkZGluZyAxNi1iaXQgZmllbGQgaWYgbnVtX2NvcHBzCiAqIGlzIG9kZC4KICovCnN0cnVjdCBhZG1fc2Vzc2lvbl9tYXBfbm9kZV92NSB7Cgl1MTYgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwoJLyogSGFuZGxlIG9mIHRoZSBBU00gc2Vzc2lvbiB0byBiZSByb3V0ZWQuIFN1cHBvcnRlZCB2YWx1ZXM6IDEKCSAqIHRvIDguCgkgKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NvcHBzOwoJLyogTnVtYmVyIG9mIENPUFBzIHRvIHdoaWNoIHRoaXMgc2Vzc2lvbiBpcyB0byBiZSByb3V0ZWQuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIDwgbnVtX2NvcHBzIDw9IEFETV9NQVhfQ09QUFMuCgkgKi8KfSBfX3BhY2tlZDsKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRF9NQVRSSVhfTUFQX1JPVVRJTkdTX1Y1IGNvbW1hbmQuCiAqCUltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUgbnVtX3Nlc3Npb25zIG9mIHRoZSBzZXNzaW9uIG1hcAogKglub2RlIHBheWxvYWQgKGFkbV9zZXNzaW9uX21hcF9ub2RlX3Y1KS4KICovCgpzdHJ1Y3QgYWRtX2NtZF9tYXRyaXhfbWFwX3JvdXRpbmdzX3Y1IHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCgl1MzIgICAgICAgICAgICAgICAgICBtYXRyaXhfaWQ7CgkvKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbWF0cml4IElEIGlzIEF1ZGlvIFJ4ICgwKSBvciBBdWRpbyBUeAoJICogKDEpLiBVc2UgdGhlIEFETV9NQVRSSVhfSURfQVVESU9fUlggb3IgQURNX01BVFJJWF9JRF9BVURJT1gKCSAqIG1hY3JvcyB0byBzZXQgdGhpcyBmaWVsZC4KCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgbnVtX3Nlc3Npb25zOwoJLyogTnVtYmVyIG9mIHNlc3Npb25zIGJlaW5nIHVwZGF0ZWQgYnkgdGhpcyBjb21tYW5kIChvcHRpb25hbCkuICovCn0gX19wYWNrZWQ7CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MuIFRYIG1vZHVsZQogKiBhbmQgc2V0cyB1cCB0aGUgZGV2aWNlIHNlc3Npb246IE1hdHJpeCAtPiBDT1BQIC0+IEFGRSBvbiB0aGUgUlgKICogYW5kIEFGRSAtPiBDT1BQIC0+IE1hdHJpeCBvbiB0aGUgVFguIFRoaXMgZW5hYmxlcyBQQ00gZGF0YSB0bwogKiBiZSB0cmFuc2ZlcnJlZCB0by9mcm9tIHRoZSBlbmRwb2ludCAoQUZFUG9ydElEKS4KICoKICogQHJldHVybgogKiAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNSB3aXRoIHRoZSByZXN1bHRpbmcgc3RhdHVzIGFuZCBDT1BQIElELgogKi8KI2RlZmluZSBBRE1fQ01EX0RFVklDRV9PUEVOX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzI2CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MgdGhlCiAqCXdheSBhcyBBRE1fQ01EX0RFVklDRV9PUEVOX1Y1IGJ1dCBzdXBwb3J0cyBtdWx0aXBsZSBlbmRwb2ludDIKICoJY2hhbm5lbHMuCiAqCiAqCUByZXR1cm4KICoJI0FETV9DTURSU1BfREVWSUNFX09QRU5fVjYgd2l0aCB0aGUgcmVzdWx0aW5nIHN0YXR1cyBhbmQKICoJQ09QUCBJRC4KICovCiNkZWZpbmUgQURNX0NNRF9ERVZJQ0VfT1BFTl9WNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzU2CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MgdGhlCioJd2F5IGFzIEFETV9DTURfREVWSUNFX09QRU5fVjggYnV0IHN1cHBvcnRzIGFueSBudW1iZXIgY2hhbm5lbAoqCW9mIGNvbmZpZ3VyYXRpb24uCioKKglAcmV0dXJuCioJI0FETV9DTURSU1BfREVWSUNFX09QRU5fVjggd2l0aCB0aGUgcmVzdWx0aW5nIHN0YXR1cyBhbmQKKglDT1BQIElELgoqLwojZGVmaW5lIEFETV9DTURfREVWSUNFX09QRU5fVjggICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDM2QQoKCi8qIERlZmluaXRpb24gZm9yIGEgbG93IGxhdGVuY3kgc3RyZWFtIHNlc3Npb24uICovCiNkZWZpbmUgQURNX0xPV19MQVRFTkNZX0RFVklDRV9TRVNTSU9OCQkJMHgyMDAwCgovKiBEZWZpbml0aW9uIGZvciBhIHVsdHJhIGxvdyBsYXRlbmN5IHN0cmVhbSBzZXNzaW9uLiAqLwojZGVmaW5lIEFETV9VTFRSQV9MT1dfTEFURU5DWV9ERVZJQ0VfU0VTU0lPTgkJMHg0MDAwCgovKiBEZWZpbml0aW9uIGZvciBhIHVsdHJhIGxvdyBsYXRlbmN5IHdpdGggUG9zdCBQcm9jZXNzaW5nIHN0cmVhbSBzZXNzaW9uLiAqLwojZGVmaW5lIEFETV9VTExfUE9TVF9QUk9DRVNTSU5HX0RFVklDRV9TRVNTSU9OCQkweDgwMDAKCi8qIERlZmluaXRpb24gZm9yIGEgbGVnYWN5IGRldmljZSBzZXNzaW9uLiAqLwojZGVmaW5lIEFETV9MRUdBQ1lfREVWSUNFX1NFU1NJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKCi8qIEluZGljYXRlcyB0aGF0IGVuZHBvaW50X2lkXzIgaXMgdG8gYmUgaWdub3JlZC4qLwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX0VORF9QT0lOVF9JRF8yX0lHTk9SRQkJCQkweEZGRkYKCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05fUlhfUEFUSF9DT1BQCQkgMQoKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9NT0RFX09GX09QRVJBVElPTlhfUEFUSF9MSVZFX0NPUFAJCSAyCgojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX01PREVfT0ZfT1BFUkFUSU9OWF9QQVRIX05PTl9MSVZFX0NPUFAJIDMKCi8qIEluZGljYXRlcyB0aGF0IGFuIGF1ZGlvIENPUFAgaXMgdG8gc2VuZC9yZWNlaXZlIGEgbW9ubyBQQ00KICogc3RyZWFtIHRvL2Zyb20KICoJRU5EX1BPSU5UX0lEXzEuCiAqLwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX0NIQU5ORUxfQ09ORklHX01PTk8JCTEKCi8qIEluZGljYXRlcyB0aGF0IGFuIGF1ZGlvIENPUFAgaXMgdG8gc2VuZC9yZWNlaXZlIGEKICoJc3RlcmVvIFBDTSBzdHJlYW0gdG8vZnJvbSBFTkRfUE9JTlRfSURfMS4KICovCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fQ0hBTk5FTF9DT05GSUdfU1RFUkVPCQkyCgovKiBTYW1wbGUgcmF0ZSBpcyA4MDAwIEh6LiovCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fU0FNUExFX1JBVEVfOEsgODAwMAoKLyogU2FtcGxlIHJhdGUgaXMgMTYwMDAgSHouKi8KI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9TQU1QTEVfUkFURV8xNksgMTYwMDAKCi8qIFNhbXBsZSByYXRlIGlzIDQ4MDAwIEh6LiovCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fU0FNUExFX1JBVEVfNDhLIDQ4MDAwCgovKiBEZWZpbml0aW9uIGZvciBhIENPUFAgbGl2ZSBpbnB1dCBmbGFnIGJpdG1hc2suKi8KI2RlZmluZSBBRE1fQklUX01BU0tfQ09QUF9MSVZFX0lOUFVUX0ZMQUcgKDB4MDAwMVUpCgovKiBEZWZpbml0aW9uIGZvciBhIENPUFAgbGl2ZSBzaGlmdCB2YWx1ZSBiaXRtYXNrLiovCiNkZWZpbmUgQURNX1NISUZUX0NPUFBfTElWRV9JTlBVVF9GTEFHCSAwCgovKiBEZWZpbml0aW9uIGZvciB0aGUgQ09QUCBJRCBiaXRtYXNrLiovCiNkZWZpbmUgQURNX0JJVF9NQVNLX0NPUFBfSUQgICgweDAwMDBGRkZGVUwpCgovKiBEZWZpbml0aW9uIGZvciB0aGUgQ09QUCBJRCBzaGlmdCB2YWx1ZS4qLwojZGVmaW5lIEFETV9TSElGVF9DT1BQX0lECTAKCi8qIERlZmluaXRpb24gZm9yIHRoZSBzZXJ2aWNlIElEIGJpdG1hc2suKi8KI2RlZmluZSBBRE1fQklUX01BU0tfU0VSVklDRV9JRCAgKDB4MDBGRjAwMDBVTCkKCi8qIERlZmluaXRpb24gZm9yIHRoZSBzZXJ2aWNlIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQURNX1NISUZUX1NFUlZJQ0VfSUQJMTYKCi8qIERlZmluaXRpb24gZm9yIHRoZSBkb21haW4gSUQgYml0bWFzay4qLwojZGVmaW5lIEFETV9CSVRfTUFTS19ET01BSU5fSUQgICAgKDB4RkYwMDAwMDBVTCkKCi8qIERlZmluaXRpb24gZm9yIHRoZSBkb21haW4gSUQgc2hpZnQgdmFsdWUuKi8KI2RlZmluZSBBRE1fU0hJRlRfRE9NQUlOX0lECTI0CgovKiBBRE0gZGV2aWNlIG9wZW4gY29tbWFuZCBwYXlsb2FkIG9mIHRoZQogKiAjQURNX0NNRF9ERVZJQ0VfT1BFTl9WNSBjb21tYW5kLgogKi8Kc3RydWN0IGFkbV9jbWRfZGV2aWNlX29wZW5fdjUgewoJc3RydWN0IGFwcl9oZHIJCWhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIGZsYWdzOwovKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkCiAqIHRvIHplcm8uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIG1vZGVfb2Zfb3BlcmF0aW9uOwovKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgQ09QUCBtdXN0IGJlIG9wZW5lZCBvbiB0aGUgVHggb3IgUngKICogcGF0aC4gVXNlIHRoZSBBRE1fQ01EX0NPUFBfT1BFTl9NT0RFX09GX09QRVJBVElPTl8qIG1hY3JvcyBmb3IKICogc3VwcG9ydGVkIHZhbHVlcyBhbmQgaW50ZXJwcmV0YXRpb24uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMHgxIC0tIFJ4IHBhdGggQ09QUAogKiAtIDB4MiAtLSBUeCBwYXRoIGxpdmUgQ09QUAogKiAtIDB4MyAtLSBUeCBwYXRoIG5vbmxpdmUgQ09QUAogKiBMaXZlIGNvbm5lY3Rpb25zIGNhdXNlIHNhbXBsZSBkaXNjYXJkaW5nIGluIHRoZSBUeCBkZXZpY2UKICogbWF0cml4IGlmIHRoZSBkZXN0aW5hdGlvbiBvdXRwdXQgcG9ydHMgZG8gbm90IHB1bGwgdGhlbQogKiBmYXN0IGVub3VnaC4gTm9ubGl2ZSBjb25uZWN0aW9ucyBxdWV1ZSB0aGUgc2FtcGxlcwogKiBpbmRlZmluaXRlbHkuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkXzE7Ci8qIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGVuZHBvaW50IElEIG9mIHRoZSBhdWRpbyBwYXRoLgogKiBJZiB0aGUgSUQgaXMgYSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2ssIGl0IHJlY2VpdmVzIG5lYXIKICogc2FtcGxlcy4JU3VwcG9ydGVkIHZhbHVlczogQW55IHBzZXVkb3BvcnQsIEFGRSBSeCBwb3J0LAogKiBvciBBRkUgVHggcG9ydCBGb3IgYSBsaXN0IG9mIHZhbGlkIElEcywgcmVmZXIgdG8KICogQHhoeXBlcnJlZntRNCxbUTRdfS4KICogUTQgPSBIZXhhZ29uIE11bHRpbWVkaWE6IEFGRSBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBlbmRwb2ludF9pZF8yOwovKiBMb2dpY2FsIGFuZCBwaHlzaWNhbCBlbmRwb2ludCBJRCAyIGZvciBhIHZvaWNlIHByb2Nlc3NvcgogKiBUeCBibG9jay4KICogVGhpcyBpcyBub3QgYXBwbGljYWJsZSB0byBhdWRpbyBDT1BQLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIEFGRSBSeCBwb3J0CiAqIC0gMHhGRkZGIC0tIEVuZHBvaW50IDIgaXMgdW5hdmFpbGFibGUgYW5kIHRoZSB2b2ljZQogKiBwcm9jZXNzb3IgVHgKICogYmxvY2sgaWdub3JlcyB0aGlzIGVuZHBvaW50CiAqIFdoZW4gdGhlIHZvaWNlIHByb2Nlc3NvciBUeCBibG9jayBpcyBjcmVhdGVkIG9uIHRoZSBhdWRpbwogKiByZWNvcmQgcGF0aCwKICogaXQgY2FuIHJlY2VpdmUgZmFyLWVuZCBzYW1wbGVzIGZyb20gYW4gQUZFIFJ4IHBvcnQgaWYgdGhlCiAqIHZvaWNlIGNhbGwKICogaXMgYWN0aXZlLiBUaGUgSUQgb2YgdGhlIEFGRSBwb3J0IGlzIHByb3ZpZGVkIGluIHRoaXMKICogZmllbGQuCiAqIEZvciBhIGxpc3Qgb2YgdmFsaWQgSURzLCByZWZlciBAeGh5cGVycmVme1E0LFtRNF19LgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICB0b3BvbG9neV9pZDsKLyogQXVkaW8gQ09QUCB0b3BvbG9neSBJRDsgMzItYml0IEdVSUQuICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZGV2X251bV9jaGFubmVsOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgdGhlIGF1ZGlvIENPUFAgc2VuZHMgdG8vcmVjZWl2ZXMgZnJvbQogKiB0aGUgZW5kcG9pbnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOC4KICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2ssCiAqIHdoZXJlIGNoYW5uZWwKICogY29uZmlndXJhdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIHRvcG9sb2d5IElELgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCAoaW4gYml0cykgdGhhdCB0aGUgYXVkaW8gQ09QUCBzZW5kcyB0by9yZWNlaXZlcwogKiBmcm9tIHRoZQogKiBlbmRwb2ludC4gVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzaW5nCiAqIFR4IGJsb2NrLAogKiB3aGVyZSB0aGUgUENNIHdpZHRoIGlzIDE2IGJpdHMuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIGF0IHdoaWNoIHRoZSBhdWRpbyBDT1BQL3ZvaWNlIHByb2Nlc3NvcgogKiBUeCBibG9jawogKiBpbnRlcmZhY2VzIHdpdGggdGhlIGVuZHBvaW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciB2b2ljZSBwcm9jZXNzb3IgVHg6IDgwMDAsIDE2MDAwLAogKiA0ODAwMCBIegogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBhdWRpbyBDT1BQOiA+MCBhbmQgPD0xOTIga0h6CiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgIGRldl9jaGFubmVsX21hcHBpbmdbOF07Ci8qIEFycmF5IG9mIGNoYW5uZWwgbWFwcGluZyBvZiBidWZmZXJzIHRoYXQgdGhlIGF1ZGlvIENPUFAKICogc2VuZHMgdG8gdGhlIGVuZHBvaW50LiBDaGFubmVsW2ldIG1hcHBpbmcgZGVzY3JpYmVzIGNoYW5uZWwKICogSSBpbnNpZGUgdGhlIGJ1ZmZlciwgd2hlcmUgMCA8IGkgPCBkZXZfbnVtX2NoYW5uZWwuCiAqIFRoaXMgdmFsdWUgaXMgcmVsZXZhbnQgb25seSBmb3IgYW4gYXVkaW8gUnggQ09QUC4KICogRm9yIHRoZSB2b2ljZSBwcm9jZXNzb3IgYmxvY2sgYW5kIFR4IGF1ZGlvIGJsb2NrLCB0aGlzIGZpZWxkCiAqIGlzIHNldCB0byB6ZXJvIGFuZCBpcyBpZ25vcmVkLgogKi8KfSBfX3BhY2tlZDsKCi8qICBBRE0gZGV2aWNlIG9wZW4gY29tbWFuZCBwYXlsb2FkIG9mIHRoZQogKiAgI0FETV9DTURfREVWSUNFX09QRU5fVjYgY29tbWFuZC4KICovCnN0cnVjdCBhZG1fY21kX2RldmljZV9vcGVuX3Y2IHsKCXN0cnVjdCBhcHJfaGRyCQloZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBmbGFnczsKLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZAogKiB0byB6ZXJvLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBtb2RlX29mX29wZXJhdGlvbjsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIENPUFAgbXVzdCBiZSBvcGVuZWQgb24gdGhlIFR4IG9yIFJ4CiAqIHBhdGguIFVzZSB0aGUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05fKiBtYWNyb3MgZm9yCiAqIHN1cHBvcnRlZCB2YWx1ZXMgYW5kIGludGVycHJldGF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDB4MSAtLSBSeCBwYXRoIENPUFAKICogLSAweDIgLS0gVHggcGF0aCBsaXZlIENPUFAKICogLSAweDMgLS0gVHggcGF0aCBub25saXZlIENPUFAKICogTGl2ZSBjb25uZWN0aW9ucyBjYXVzZSBzYW1wbGUgZGlzY2FyZGluZyBpbiB0aGUgVHggZGV2aWNlCiAqIG1hdHJpeCBpZiB0aGUgZGVzdGluYXRpb24gb3V0cHV0IHBvcnRzIGRvIG5vdCBwdWxsIHRoZW0KICogZmFzdCBlbm91Z2guIE5vbmxpdmUgY29ubmVjdGlvbnMgcXVldWUgdGhlIHNhbXBsZXMKICogaW5kZWZpbml0ZWx5LgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBlbmRwb2ludF9pZF8xOwovKiBMb2dpY2FsIGFuZCBwaHlzaWNhbCBlbmRwb2ludCBJRCBvZiB0aGUgYXVkaW8gcGF0aC4KICogSWYgdGhlIElEIGlzIGEgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrLCBpdCByZWNlaXZlcyBuZWFyCiAqIHNhbXBsZXMuCVN1cHBvcnRlZCB2YWx1ZXM6IEFueSBwc2V1ZG9wb3J0LCBBRkUgUnggcG9ydCwKICogb3IgQUZFIFR4IHBvcnQgRm9yIGEgbGlzdCBvZiB2YWxpZCBJRHMsIHJlZmVyIHRvCiAqIEB4aHlwZXJyZWZ7UTQsW1E0XX0uCiAqIFE0ID0gSGV4YWdvbiBNdWx0aW1lZGlhOiBBRkUgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5kcG9pbnRfaWRfMjsKLyogTG9naWNhbCBhbmQgcGh5c2ljYWwgZW5kcG9pbnQgSUQgMiBmb3IgYSB2b2ljZSBwcm9jZXNzb3IKICogVHggYmxvY2suCiAqIFRoaXMgaXMgbm90IGFwcGxpY2FibGUgdG8gYXVkaW8gQ09QUC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSBBRkUgUnggcG9ydAogKiAtIDB4RkZGRiAtLSBFbmRwb2ludCAyIGlzIHVuYXZhaWxhYmxlIGFuZCB0aGUgdm9pY2UKICogcHJvY2Vzc29yIFR4CiAqIGJsb2NrIGlnbm9yZXMgdGhpcyBlbmRwb2ludAogKiBXaGVuIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2sgaXMgY3JlYXRlZCBvbiB0aGUgYXVkaW8KICogcmVjb3JkIHBhdGgsCiAqIGl0IGNhbiByZWNlaXZlIGZhci1lbmQgc2FtcGxlcyBmcm9tIGFuIEFGRSBSeCBwb3J0IGlmIHRoZQogKiB2b2ljZSBjYWxsCiAqIGlzIGFjdGl2ZS4gVGhlIElEIG9mIHRoZSBBRkUgcG9ydCBpcyBwcm92aWRlZCBpbiB0aGlzCiAqIGZpZWxkLgogKiBGb3IgYSBsaXN0IG9mIHZhbGlkIElEcywgcmVmZXIgQHhoeXBlcnJlZntRNCxbUTRdfS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgdG9wb2xvZ3lfaWQ7Ci8qIEF1ZGlvIENPUFAgdG9wb2xvZ3kgSUQ7IDMyLWJpdCBHVUlELiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGRldl9udW1fY2hhbm5lbDsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIHRoZSBhdWRpbyBDT1BQIHNlbmRzIHRvL3JlY2VpdmVzIGZyb20KICogdGhlIGVuZHBvaW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDguCiAqIFRoZSB2YWx1ZSBpcyBpZ25vcmVkIGZvciB0aGUgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrLAogKiB3aGVyZSBjaGFubmVsCiAqIGNvbmZpZ3VyYXRpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSB0b3BvbG9neSBJRC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggKGluIGJpdHMpIHRoYXQgdGhlIGF1ZGlvIENPUFAgc2VuZHMgdG8vcmVjZWl2ZXMKICogZnJvbSB0aGUKICogZW5kcG9pbnQuIFRoZSB2YWx1ZSBpcyBpZ25vcmVkIGZvciB0aGUgdm9pY2UgcHJvY2Vzc2luZwogKiBUeCBibG9jaywKICogd2hlcmUgdGhlIFBDTSB3aWR0aCBpcyAxNiBiaXRzLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogU2FtcGxpbmcgcmF0ZSBhdCB3aGljaCB0aGUgYXVkaW8gQ09QUC92b2ljZSBwcm9jZXNzb3IKICogVHggYmxvY2sKICogaW50ZXJmYWNlcyB3aXRoIHRoZSBlbmRwb2ludC4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3Igdm9pY2UgcHJvY2Vzc29yIFR4OiA4MDAwLCAxNjAwMCwKICogNDgwMDAgSHoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYXVkaW8gQ09QUDogPjAgYW5kIDw9MTkyIGtIegogKi8KCgl1OCAgICAgICAgICAgICAgICAgICBkZXZfY2hhbm5lbF9tYXBwaW5nWzhdOwovKiBBcnJheSBvZiBjaGFubmVsIG1hcHBpbmcgb2YgYnVmZmVycyB0aGF0IHRoZSBhdWRpbyBDT1BQCiAqIHNlbmRzIHRvIHRoZSBlbmRwb2ludC4gQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsCiAqIEkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlIDAgPCBpIDwgZGV2X251bV9jaGFubmVsLgogKiBUaGlzIHZhbHVlIGlzIHJlbGV2YW50IG9ubHkgZm9yIGFuIGF1ZGlvIFJ4IENPUFAuCiAqIEZvciB0aGUgdm9pY2UgcHJvY2Vzc29yIGJsb2NrIGFuZCBUeCBhdWRpbyBibG9jaywgdGhpcyBmaWVsZAogKiBpcyBzZXQgdG8gemVybyBhbmQgaXMgaWdub3JlZC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZGV2X251bV9jaGFubmVsX2VpZDI7Ci8qIE51bWJlciBvZiBjaGFubmVscyB0aGUgdm9pY2UgcHJvY2Vzc29yIGJsb2NrIHNlbmRzCiAqIHRvL3JlY2VpdmVzIGZyb20gdGhlIGVuZHBvaW50Mi4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4LgogKiBUaGUgdmFsdWUgaXMgaWdub3JlZCBmb3IgYXVkaW8gQ09QUCBvciBpZiBlbmRwb2ludF9pZF8yIGlzCiAqIHNldCB0byAweEZGRkYuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aF9laWQyOwovKiBCaXQgd2lkdGggKGluIGJpdHMpIHRoYXQgdGhlIHZvaWNlIHByb2Nlc3NvciBzZW5kcwogKiB0by9yZWNlaXZlcyBmcm9tIHRoZSBlbmRwb2ludDIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2IGFuZCAyNC4KICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIGF1ZGlvIENPUFAgb3IgaWYgZW5kcG9pbnRfaWRfMiBpcwogKiBzZXQgdG8gMHhGRkZGLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZV9laWQyOwovKiBTYW1wbGluZyByYXRlIGF0IHdoaWNoIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2sKICogaW50ZXJmYWNlcyB3aXRoIHRoZSBlbmRwb2ludDIuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIFR4IHZvaWNlIHByb2Nlc3NvcjogPjAgYW5kIDw9Mzg0IGtIegogKiBUaGUgdmFsdWUgaXMgaWdub3JlZCBmb3IgYXVkaW8gQ09QUCBvciBpZiBlbmRwb2ludF9pZF8yIGlzCiAqIHNldCB0byAweEZGRkYuCiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgIGRldl9jaGFubmVsX21hcHBpbmdfZWlkMls4XTsKLyogQXJyYXkgb2YgY2hhbm5lbCBtYXBwaW5nIG9mIGJ1ZmZlcnMgdGhhdCB0aGUgdm9pY2UgcHJvY2Vzc29yCiAqIHNlbmRzIHRvIHRoZSBlbmRwb2ludC4gQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsCiAqIEkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlIDAgPCBpIDwgZGV2X251bV9jaGFubmVsLgogKiBUaGlzIHZhbHVlIGlzIHJlbGV2YW50IG9ubHkgZm9yIHRoZSBUeCB2b2ljZSBwcm9jZXNzb3IuCiAqIFRoZSB2YWx1ZXMgYXJlIGlnbm9yZWQgZm9yIGF1ZGlvIENPUFAgb3IgaWYgZW5kcG9pbnRfaWRfMiBpcwogKiBzZXQgdG8gMHhGRkZGLgogKi8KfSBfX3BhY2tlZDsKCgovKiBBRE0gZGV2aWNlIG9wZW4gZW5kcG9pbnQgcGF5bG9hZCB0aGUKICogICAjQURNX0NNRF9ERVZJQ0VfT1BFTl9WOCBjb21tYW5kLgogKi8Kc3RydWN0IGFkbV9kZXZpY2VfZW5kcG9pbnRfcGF5bG9hZCB7Cgl1MTYgICAgICAgICAgICAgICAgICBkZXZfbnVtX2NoYW5uZWw7Ci8qIE51bWJlciBvZiBjaGFubmVscyB0aGUgYXVkaW8gQ09QUCBzZW5kcyB0by9yZWNlaXZlcyBmcm9tCiAqIHRoZSBlbmRwb2ludC4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAzMi4KICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2ssCiAqIHdoZXJlIGNoYW5uZWwKICogY29uZmlndXJhdGlvbiBpcyBkZXJpdmVkIGZyb20gdGhlIHRvcG9sb2d5IElELgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCAoaW4gYml0cykgdGhhdCB0aGUgYXVkaW8gQ09QUCBzZW5kcyB0by9yZWNlaXZlcwogKiBmcm9tIHRoZQogKiBlbmRwb2ludC4gVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIHRoZSB2b2ljZSBwcm9jZXNzaW5nCiAqIFR4IGJsb2NrLAogKiB3aGVyZSB0aGUgUENNIHdpZHRoIGlzIDE2IGJpdHMuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIGF0IHdoaWNoIHRoZSBhdWRpbyBDT1BQL3ZvaWNlIHByb2Nlc3NvcgogKiBUeCBibG9jawogKiBpbnRlcmZhY2VzIHdpdGggdGhlIGVuZHBvaW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciB2b2ljZSBwcm9jZXNzb3IgVHg6IDgwMDAsIDE2MDAwLAogKiA0ODAwMCBIegogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBhdWRpbyBDT1BQOiA+MCBhbmQgPD0xOTIga0h6CiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgICBkZXZfY2hhbm5lbF9tYXBwaW5nWzMyXTsKfSBfX3BhY2tlZDsKCi8qICBBRE0gZGV2aWNlIG9wZW4gY29tbWFuZCBwYXlsb2FkIG9mIHRoZQogKiAgICNBRE1fQ01EX0RFVklDRV9PUEVOX1Y4IGNvbW1hbmQuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9kZXZpY2Vfb3Blbl92OCB7CglzdHJ1Y3QgYXByX2hkciAgICAgICBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBmbGFnczsKLyogQml0IHdpZHRoIE5hdGl2ZSBtb2RlIGVuYWJsZWQgOiAxMXRoIGJpdCBvZiBmbGFnIHBhcmFtZXRlcgoqICBJZiAxMXRoIGJpdCBvZiBmbGFnIGlzIHNldCB0aGVuIHRoYXQgbWVhbnMgbWF0cml4IG1peGVyIHdpbGwgYmUKKiAgcnVubmluZyBpbiBuYXRpdmUgbW9kZSBmb3IgYml0IHdpZHRoIGZvciB0aGlzIGRldmljZSBzZXNzaW9uLgoqCiogIENoYW5uZWwgTmF0aXZlIG1vZGUgZW5hYmxlZCA6IDEydGggYml0IG9mIGZsYWcgcGFyYW1ldGVyCiogIElmIDEydGggYml0IG9mIGZsYWcgaXMgc2V0IHRoZW4gdGhhdCBtZWFucyBtYXRyaXggbWl4ZXIgd2lsbCBiZQoqICBydW5uaW5nIGluIG5hdGl2ZSBtb2RlIGZvciBjaGFubmVsIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZGV2aWNlIHNlc3Npb24uCiogIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIDAuCiovCgl1MTYgICAgICAgICAgICAgICAgICBtb2RlX29mX29wZXJhdGlvbjsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIENPUFAgbXVzdCBiZSBvcGVuZWQgb24gdGhlIFR4IG9yIFJ4CiAqIHBhdGguIFVzZSB0aGUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05fKiBtYWNyb3MgZm9yCiAqIHN1cHBvcnRlZCB2YWx1ZXMgYW5kIGludGVycHJldGF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDB4MSAtLSBSeCBwYXRoIENPUFAKICogLSAweDIgLS0gVHggcGF0aCBsaXZlIENPUFAKICogLSAweDMgLS0gVHggcGF0aCBub25saXZlIENPUFAKICogTGl2ZSBjb25uZWN0aW9ucyBjYXVzZSBzYW1wbGUgZGlzY2FyZGluZyBpbiB0aGUgVHggZGV2aWNlCiAqIG1hdHJpeCBpZiB0aGUgZGVzdGluYXRpb24gb3V0cHV0IHBvcnRzIGRvIG5vdCBwdWxsIHRoZW0KICogZmFzdCBlbm91Z2guIE5vbmxpdmUgY29ubmVjdGlvbnMgcXVldWUgdGhlIHNhbXBsZXMKICogaW5kZWZpbml0ZWx5LgogKi8KCXUzMiAgICAgICAgICAgICAgICAgIHRvcG9sb2d5X2lkOwovKiBBdWRpbyBDT1BQIHRvcG9sb2d5IElEOyAzMi1iaXQgR1VJRC4gKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5kcG9pbnRfaWRfMTsKLyogTG9naWNhbCBhbmQgcGh5c2ljYWwgZW5kcG9pbnQgSUQgb2YgdGhlIGF1ZGlvIHBhdGguCiAqIElmIHRoZSBJRCBpcyBhIHZvaWNlIHByb2Nlc3NvciBUeCBibG9jaywgaXQgcmVjZWl2ZXMgbmVhcgogKiBzYW1wbGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBbnkgcHNldWRvcG9ydCwgQUZFIFJ4IHBvcnQsCiAqIG9yIEFGRSBUeCBwb3J0IEZvciBhIGxpc3Qgb2YgdmFsaWQgSURzLCByZWZlciB0bwogKiBAeGh5cGVycmVme1E0LFtRNF19LgogKiBRNCA9IEhleGFnb24gTXVsdGltZWRpYTogQUZFIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkXzI7Ci8qIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGVuZHBvaW50IElEIDIgZm9yIGEgdm9pY2UgcHJvY2Vzc29yCiAqIFR4IGJsb2NrLgogKiBUaGlzIGlzIG5vdCBhcHBsaWNhYmxlIHRvIGF1ZGlvIENPUFAuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gQUZFIFJ4IHBvcnQKICogLSAweEZGRkYgLS0gRW5kcG9pbnQgMiBpcyB1bmF2YWlsYWJsZSBhbmQgdGhlIHZvaWNlCiAqIHByb2Nlc3NvciBUeAogKiBibG9jayBpZ25vcmVzIHRoaXMgZW5kcG9pbnQKICogV2hlbiB0aGUgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrIGlzIGNyZWF0ZWQgb24gdGhlIGF1ZGlvCiAqIHJlY29yZCBwYXRoLAogKiBpdCBjYW4gcmVjZWl2ZSBmYXItZW5kIHNhbXBsZXMgZnJvbSBhbiBBRkUgUnggcG9ydCBpZiB0aGUKICogdm9pY2UgY2FsbAogKiBpcyBhY3RpdmUuIFRoZSBJRCBvZiB0aGUgQUZFIHBvcnQgaXMgcHJvdmlkZWQgaW4gdGhpcwogKiBmaWVsZC4KICogRm9yIGEgbGlzdCBvZiB2YWxpZCBJRHMsIHJlZmVyIEB4aHlwZXJyZWZ7UTQsW1E0XX0uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkXzM7Ci8qCiAqIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGVuZHBvaW50IElEIG9mIHRoZSBhdWRpbyBwYXRoLgogKiBUaGlzIGluZGljYXRlZCBhZmUgcnggcG9ydCBpbiBBRE0gbG9vcGJhY2sgdXNlIGNhc2VzLgogKiBJbiBhbGwgb3RoZXIgdXNlIGNhc2VzIHRoaXMgc2hvdWxkIGJlIHNldCB0byAweGZmZmYKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgovKgogKglUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBjbGllbnQgdG8gY2xvc2UgYSBDT1BQIGFuZCBkaXNjb25uZWN0CiAqCXRoZSBkZXZpY2Ugc2Vzc2lvbi4KICovCiNkZWZpbmUgQURNX0NNRF9ERVZJQ0VfQ0xPU0VfVjUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDMyNwoKLyogU2V0cyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIHRvIGEgQ09QUC4gKi8KI2RlZmluZSBBRE1fQ01EX1NFVF9QUF9QQVJBTVNfVjUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzI4CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfU0VUX1BQX1BBUkFNU19WNSBjb21tYW5kLgogKglJZiB0aGUgZGF0YV9wYXlsb2FkX2FkZHJfbHN3IGFuZCBkYXRhX3BheWxvYWRfYWRkcl9tc3cgZWxlbWVudAogKglhcmUgTlVMTCwgYSBzZXJpZXMgb2YgYWRtX3BhcmFtX2RhdGFzdHJ1Y3R1cmVzIGltbWVkaWF0ZWx5CiAqCWZvbGxvd3MsIHdob3NlIHRvdGFsIHNpemUgaXMgZGF0YV9wYXlsb2FkX3NpemUgYnl0ZXMuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMgkJcGF5bG9hZF9hZGRyX2xzdzsKLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCXUzMgkJcGF5bG9hZF9hZGRyX21zdzsKLyogTVNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwovKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBBRE1fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogY29tbWFuZAogKgogKiBJZiBtZW1fbWFwX2hhbmRsZSBpcyB6ZXJvIGltcGxpZXMgdGhlIG1lc3NhZ2UgaXMgaW4KICogdGhlIHBheWxvYWQKICovCgoJdTMyCQlwYXlsb2FkX3NpemU7Ci8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgYWNjb21wYW55aW5nIHRoaXMKICogbWVzc2FnZSBvcgogKiBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlIHBhcmFtZXRlcgogKiBwYXlsb2FkLgogKi8KfSBfX3BhY2tlZDsKCi8qICBQYXlsb2FkIGZvcm1hdCBmb3IgQ09QUCBwYXJhbWV0ZXIgZGF0YS4KICogSW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgc3RydWN0dXJlIGFyZSBwYXJhbV9zaXplIGJ5dGVzCiAqIG9mIHBhcmFtZXRlcgogKiBkYXRhLgogKi8Kc3RydWN0IGFkbV9wYXJhbV9kYXRhX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIG1vZHVsZV9pZDsKCS8qIFVuaXF1ZSBJRCBvZiB0aGUgbW9kdWxlLiAqLwoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgSUQgb2YgdGhlIHBhcmFtZXRlci4gKi8KCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX3NpemU7CgkvKiBEYXRhIHNpemUgb2YgdGhlIHBhcmFtX2lkL21vZHVsZV9pZCBjb21iaW5hdGlvbi4KCSAqIFRoaXMgdmFsdWUgaXMgYQoJICogbXVsdGlwbGUgb2YgNCBieXRlcy4KCSAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cy4KCSAqIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KCSAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9SRUdJU1RFUl9QUF9FVkVOVFMgMHgwMDAxMzIxMwojZGVmaW5lIEFTTV9TVFJFQU1fUFBfRVZFTlQgMHgwMDAxMzIxNAojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX1JFR0lTVEVSX0lFQ182MTkzN19GTVRfVVBEQVRFIDB4MTMzMzMKI2RlZmluZSBBU01fSUVDXzYxOTM3X01FRElBX0ZNVF9FVkVOVCAweDEzMzM0CgojZGVmaW5lIERTUF9TVFJFQU1fQ01EICJBRFNQIFN0cmVhbSBDbWQiCiNkZWZpbmUgRFNQX1NUUkVBTV9DQUxMQkFDSyAiQURTUCBTdHJlYW0gQ2FsbGJhY2sgRXZlbnQiCiNkZWZpbmUgRFNQX1NUUkVBTV9DQUxMQkFDS19RVUVVRV9TSVpFIDEwMjQKCnN0cnVjdCBkc3Bfc3RyZWFtX2NhbGxiYWNrX2xpc3QgewoJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwoJc3RydWN0IG1zbV9hZHNwX2V2ZW50X2RhdGEgZXZlbnQ7Cn07CgpzdHJ1Y3QgZHNwX3N0cmVhbV9jYWxsYmFja19wcnRkIHsKCXVpbnQxNl90IGV2ZW50X2NvdW50OwoJc3RydWN0IGxpc3RfaGVhZCBldmVudF9xdWV1ZTsKCXNwaW5sb2NrX3QgcHJ0ZF9zcGluX2xvY2s7Cn07CgovKiBzZXQgY3VzdG9taXplZCBtaXhpbmcgb24gbWF0cml4IG1peGVyICovCiNkZWZpbmUgQURNX0NNRF9TRVRfUFNQRF9NVE1YX1NUUlRSX1BBUkFNU19WNSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzNDQKc3RydWN0IGFkbV9jbWRfc2V0X3BzcGRfbXRteF9zdHJ0cl9wYXJhbXNfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQlwYXlsb2FkX2FkZHJfbHN3OwoJLyogTVNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQlwYXlsb2FkX2FkZHJfbXN3OwoJLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICovCgkvKiBjb21tYW5kLiBJZiBtZW1fbWFwX2hhbmRsZSBpcyB6ZXJvIGltcGxpZXMgdGhlIG1lc3NhZ2UgaXMgaW4gKi8KCS8qIHRoZSBwYXlsb2FkICovCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwoJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUgcGF5bG9hZCBhY2NvbXBhbnlpbmcgdGhpcyAqLwoJLyogbWVzc2FnZSBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlICovCgkvKiBwYXJhbWV0ZXIgcGF5bG9hZC4gKi8KCXUzMgkJcGF5bG9hZF9zaXplOwoJdTE2CQlkaXJlY3Rpb247Cgl1MTYJCXNlc3Npb25pZDsKCXUxNgkJZGV2aWNlaWQ7Cgl1MTYJCXJlc2VydmVkOwp9IF9fcGFja2VkOwoKLyogRGVmaW5lZCBzcGVjaWZpY2FsbHkgZm9yIGluLWJhbmQgdXNlLCBpbmNsdWRlcyBwYXJhbXMgKi8Kc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc19pbmJhbmRfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyICAgICAgICAgICAgIHBheWxvYWRfYWRkcl9sc3c7CgkvKiBNU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgl1MzIgICAgICAgICAgICAgcGF5bG9hZF9hZGRyX21zdzsKCS8qIE1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IEFETV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAqLwoJLyogY29tbWFuZC4gSWYgbWVtX21hcF9oYW5kbGUgaXMgemVybyBpbXBsaWVzIHRoZSBtZXNzYWdlIGlzIGluICovCgkvKiB0aGUgcGF5bG9hZCAqLwoJdTMyICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUgcGF5bG9hZCBhY2NvbXBhbnlpbmcgdGhpcyAqLwoJLyogbWVzc2FnZSBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlICovCgkvKiBwYXJhbWV0ZXIgcGF5bG9hZC4gKi8KCXUzMiAgICAgICAgICAgICBwYXlsb2FkX3NpemU7CgkvKiBQYXJhbWV0ZXJzIHBhc3NlZCBmb3IgaW4gYmFuZCBwYXlsb2FkICovCglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgICAgICAgIHBhcmFtczsKfSBfX3BhY2tlZDsKCi8qIFJldHVybnMgdGhlIHN0YXR1cyBhbmQgQ09QUCBJRCB0byBhbiAjQURNX0NNRF9ERVZJQ0VfT1BFTl9WNSBjb21tYW5kLgogKi8KI2RlZmluZSBBRE1fQ01EUlNQX0RFVklDRV9PUEVOX1Y1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzMjkKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNSBtZXNzYWdlLAogKgl3aGljaCByZXR1cm5zIHRoZQogKglzdGF0dXMgYW5kIENPUFAgSUQgdG8gYW4gI0FETV9DTURfREVWSUNFX09QRU5fVjUgY29tbWFuZC4KICovCnN0cnVjdCBhZG1fY21kX3JzcF9kZXZpY2Vfb3Blbl92NSB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuKi8KCgl1MTYgICAgICAgICAgICAgICAgICBjb3BwX2lkOwoJLyogQ09QUCBJRDogIFN1cHBvcnRlZCB2YWx1ZXM6IDAgPD0gY29wcF9pZCA8IEFETV9NQVhfQ09QUFMqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogUmVzZXJ2ZWQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogUmV0dXJucyB0aGUgc3RhdHVzIGFuZCBDT1BQIElEIHRvIGFuICNBRE1fQ01EX0RFVklDRV9PUEVOX1Y2IGNvbW1hbmQuICovCiNkZWZpbmUgQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzU3CgovKiBSZXR1cm5zIHRoZSBzdGF0dXMgYW5kIENPUFAgSUQgdG8gYW4gI0FETV9DTURfREVWSUNFX09QRU5fVjggY29tbWFuZC4gKi8KI2RlZmluZSBBRE1fQ01EUlNQX0RFVklDRV9PUEVOX1Y4ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzNkIKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNiBtZXNzYWdlLAogKgl3aGljaCByZXR1cm5zIHRoZQogKglzdGF0dXMgYW5kIENPUFAgSUQgdG8gYW4gI0FETV9DTURfREVWSUNFX09QRU5fVjYgY29tbWFuZAogKglpcyB0aGUgZXhhY3Qgc2FtZSBhcyBBRE1fQ01EUlNQX0RFVklDRV9PUEVOX1Y1LgogKi8KCi8qIFRoaXMgY29tbWFuZCBhbGxvd3MgYSBxdWVyeSBvZiBvbmUgQ09QUCBwYXJhbWV0ZXIuICovCiNkZWZpbmUgQURNX0NNRF9HRVRfUFBfUEFSQU1TX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzJBCgovKiAgUGF5bG9hZCBhbiAjQURNX0NNRF9HRVRfUFBfUEFSQU1TX1Y1IGNvbW1hbmQuICovCnN0cnVjdCBhZG1fY21kX2dldF9wcF9wYXJhbXNfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbHN3OwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoKCXUzMiAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKCS8qIE1TVyBvZiBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuKi8KCgkvKiBJZiB0aGUgbWVtX21hcF9oYW5kbGUgaXMgbm9uIHplcm8sCgkgKiBvbiBBQ0ssIHRoZSBQYXJhbURhdGEgcGF5bG9hZHMgYmVnaW4gYXQKCSAqIHRoZSBhZGRyZXNzIHNwZWNpZmllZCAob3V0LW9mLWJhbmQpLgoJICovCgoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7CgkvKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZAoJICogYnkgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQuCgkgKiBJZiB0aGUgbWVtX21hcF9oYW5kbGUgaXMgMCwgaXQgaW1wbGllcyB0aGF0CgkgKiB0aGUgQUNLJ3MgcGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIFBhcmFtRGF0YSAoaW4tYmFuZCkuCgkgKi8KCgl1MzIgICAgICAgICAgICAgICAgICBtb2R1bGVfaWQ7CgkvKiBVbmlxdWUgSUQgb2YgdGhlIG1vZHVsZS4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKCS8qIFVuaXF1ZSBJRCBvZiB0aGUgcGFyYW1ldGVyLiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX21heF9zaXplOwoJLyogTWF4aW11bSBkYXRhIHNpemUgb2YgdGhlIHBhcmFtZXRlcgoJICpJRC9tb2R1bGUgSUQgY29tYmluYXRpb24uIFRoaXMKCSAqIGZpZWxkIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KCSAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cy4KCSAqIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KCSAqLwp9IF9fcGFja2VkOwoKLyogUmV0dXJucyBwYXJhbWV0ZXIgdmFsdWVzCiAqCWluIHJlc3BvbnNlIHRvIGFuICNBRE1fQ01EX0dFVF9QUF9QQVJBTVNfVjUgY29tbWFuZC4KICovCiNkZWZpbmUgQURNX0NNRFJTUF9HRVRfUFBfUEFSQU1TX1Y1CQkweDAwMDEwMzJCCgovKiBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRFJTUF9HRVRfUFBfUEFSQU1TX1Y1IG1lc3NhZ2UsCiAqIHdoaWNoIHJldHVybnMgcGFyYW1ldGVyIHZhbHVlcyBpbiByZXNwb25zZQogKiB0byBhbiAjQURNX0NNRF9HRVRfUFBfUEFSQU1TX1Y1IGNvbW1hbmQuCiAqIEltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzCiAqIHN0cnVjdHVyZSBpcyB0aGUgYWRtX3BhcmFtX2RhdGFfdjUKICogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIHByZS9wb3N0cHJvY2Vzc2luZwogKiBwYXJhbWV0ZXIgZGF0YS4gRm9yIGFuIGluLWJhbmQKICogc2NlbmFyaW8sIHRoZSB2YXJpYWJsZSBwYXlsb2FkIGRlcGVuZHMKICogb24gdGhlIHNpemUgb2YgdGhlIHBhcmFtZXRlci4KICovCnN0cnVjdCBhZG1fY21kX3JzcF9nZXRfcHBfcGFyYW1zX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKCS8qIFN0YXR1cyBtZXNzYWdlIChlcnJvciBjb2RlKS4qLwp9IF9fcGFja2VkOwoKLyogU3RydWN0dXJlIGZvciBob2xkaW5nIHNvZnQgc3RlcHBpbmcgdm9sdW1lIHBhcmFtZXRlcnMuICovCgovKgogKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1NPRlRfVk9MX1NURVBQSU5HX1BBUkFNRVRFUlMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKc3RydWN0IGF1ZHByb2Nfc29mdHZvbHVtZV9wYXJhbXMgewoJdTMyIHBlcmlvZDsKCXUzMiBzdGVwOwoJdTMyIHJhbXBpbmdjdXJ2ZTsKfSBfX3BhY2tlZDsKCi8qCiAqIElEIG9mIHRoZSBNZWRpYSBGb3JtYXQgQ29udmVydGVyIChNRkMpIG1vZHVsZS4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAjQVVEUFJPQ19QQVJBTV9JRF9NRkNfT1VUUFVUX01FRElBX0ZPUk1BVAogKiAjQVVEUFJPQ19DSE1JWEVSX1BBUkFNX0lEX0NPRUZGCiAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX01GQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOTEyCgovKiBJRCBvZiB0aGUgT3V0cHV0IE1lZGlhIEZvcm1hdCBwYXJhbWV0ZXJzIHVzZWQgYnkgQVVEUFJPQ19NT0RVTEVfSURfTUZDLgogKgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX01GQ19PVVRQVVRfTUVESUFfRk9STUFUICAgICAgICAgICAgMHgwMDAxMDkxMwoKLyogUGFyYW0gSUQgb2YgQ2hhbm5lbCBNaXhlciB1c2VkIGJ5IEFVRFBST0NfTU9EVUxFX0lEX01GQyAqLwojZGVmaW5lIEFVRFBST0NfQ0hNSVhFUl9QQVJBTV9JRF9DT0VGRiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzQyCgoKc3RydWN0IGF1ZHByb2NfbWZjX291dHB1dF9tZWRpYV9mbXQgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKCXVpbnQzMl90IHNhbXBsaW5nX3JhdGU7Cgl1aW50MTZfdCBiaXRzX3Blcl9zYW1wbGU7Cgl1aW50MTZfdCBudW1fY2hhbm5lbHM7Cgl1aW50MTZfdCBjaGFubmVsX3R5cGVbOF07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXVkcHJvY192b2x1bWVfY3RybF9tYXN0ZXJfZ2FpbiB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHBhcmFtczsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBkYXRhOwoJLyogTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdC4gKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbWFzdGVyX2dhaW47CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXVkcHJvY19zb2Z0X3N0ZXBfdm9sdW1lX3BhcmFtcyB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHBhcmFtczsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBkYXRhOwovKgogKiBQZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwCiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBwZXJpb2Q7Ci8qCiAqIFN0ZXAgaW4gbWljcm9zZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwMDAwCiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBzdGVwOwovKgogKiBSYW1waW5nIGN1cnZlIHR5cGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FVRFBST0NfUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9MSU5FQVIKICogLSAjQVVEUFJPQ19QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0VYUAogKiAtICNBVURQUk9DX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTE9HCiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICByYW1waW5nX2N1cnZlOwp9IF9fcGFja2VkOwoKc3RydWN0IGF1ZHByb2NfZW5hYmxlX3BhcmFtX3QgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc19pbmJhbmRfdjUgcHBfcGFyYW1zOwoJLyoKCSAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBBdWRpbyBwcm9jZXNzaW5nIG1vZHVsZSBpcyBlbmFibGVkLgoJICogVGhpcyBwYXJhbWV0ZXIgaXMgZ2VuZXJpYy9jb21tb24gcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZSBvcgoJICogZGV0ZXJtaW5lIHRoZSBzdGF0ZSBvZiBhbnkgYXVkaW8gcHJvY2Vzc2luZyBtb2R1bGUuCgoJICogQHZhbHVlcyAwIDogRGlzYWJsZSAxOiBFbmFibGUKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBlbmFibGU7Cn07CgovKgogKiBBbGxvd3MgYSBjbGllbnQgdG8gY29udHJvbCB0aGUgZ2FpbnMgb24gdmFyaW91cyBzZXNzaW9uLXRvLUNPUFAgcGF0aHMuCiAqLwojZGVmaW5lIEFETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfVjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzJDCgovKiBJbmRpY2F0ZXMgdGhhdCB0aGUgdGFyZ2V0IGdhaW4gaW4gdGhlCiAqCWN1cnJlbnQgYWRtX3Nlc3Npb25fY29wcF9nYWluX3Y1CiAqCXN0cnVjdHVyZSBpcyB0byBiZSBhcHBsaWVkIHRvIGFsbAogKgl0aGUgc2Vzc2lvbi10by1DT1BQIHBhdGhzIHRoYXQgZXhpc3QgZm9yCiAqCXRoZSBzcGVjaWZpZWQgc2Vzc2lvbi4KICovCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfUkFNUF9HQUlOU19DT1BQX0lEX0FMTF9DT05ORUNURURfQ09QUFMgICAgIDB4RkZGRgoKLyogSW5kaWNhdGVzIHRoYXQgdGhlIHRhcmdldCBnYWluIGlzCiAqIHRvIGJlIGltbWVkaWF0ZWx5IGFwcGxpZWQgdG8gdGhlCiAqIHNwZWNpZmllZCBzZXNzaW9uLXRvLUNPUFAgcGF0aCwKICogd2l0aG91dCBhIHJhbXBpbmcgZmFzaGlvbi4KICovCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfUkFNUF9HQUlOU19SQU1QX0RVUkFUSU9OX0lNTUVESUFURSAgICAgICAgIDB4MDAwMAoKLyogRW51bWVyYXRpb24gZm9yIGEgbGluZWFyIHJhbXBpbmcgY3VydmUuKi8KI2RlZmluZSBBRE1fQ01EX01BVFJJWF9SQU1QX0dBSU5TX1JBTVBfQ1VSVkVfTElORUFSICAgICAgICAgICAgICAgMHgwMDAwCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfVjUgY29tbWFuZC4KICogSW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgc3RydWN0dXJlIGFyZSBudW1fZ2FpbnMgb2YgdGhlCiAqIGFkbV9zZXNzaW9uX2NvcHBfZ2Fpbl92NXN0cnVjdHVyZS4KICovCnN0cnVjdCBhZG1fY21kX21hdHJpeF9yYW1wX2dhaW5zX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIG1hdHJpeF9pZDsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1hdHJpeCBJRCBpcyBBdWRpbyBSeCAoMCkgb3IgQXVkaW8gVHggKDEpLgogKiBVc2UgdGhlIEFETV9NQVRSSVhfSURfQVVESU9fUlggb3IgIEFETV9NQVRSSVhfSURfQVVESU9YCiAqIG1hY3JvcyB0byBzZXQgdGhpcyBmaWVsZC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2dhaW5zOwoJLyogTnVtYmVyIG9mIGdhaW5zIGJlaW5nIGFwcGxpZWQuICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfZm9yX2FsaWduOwoJLyogUmVzZXJ2ZWQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogIFNlc3Npb24tdG8tQ09QUCBwYXRoIGdhaW4gc3RydWN0dXJlLCB1c2VkIGJ5IHRoZQogKgkjQURNX0NNRF9NQVRSSVhfUkFNUF9HQUlOU19WNSBjb21tYW5kLgogKglUaGlzIHN0cnVjdHVyZSBzcGVjaWZpZXMgdGhlIHRhcmdldAogKglnYWluIChwZXIgY2hhbm5lbCkgdGhhdCBtdXN0IGJlIGFwcGxpZWQKICoJdG8gYSBwYXJ0aWN1bGFyIHNlc3Npb24tdG8tQ09QUCBwYXRoIGluCiAqCXRoZSBhdWRpbyBtYXRyaXguIFRoZSBzdHJ1Y3R1cmUgY2FuCiAqCWFsc28gYmUgdXNlZCB0byBhcHBseSB0aGUgZ2FpbiBnbG9iYWxseQogKgl0byBhbGwgc2Vzc2lvbi10by1DT1BQIHBhdGhzIHRoYXQKICoJZXhpc3QgZm9yIHRoZSBnaXZlbiBzZXNzaW9uLgogKglUaGUgYURTUCB1c2VzIGRldmljZSBjaGFubmVsIG1hcHBpbmcgdG8KICoJZGV0ZXJtaW5lIHdoaWNoIGNoYW5uZWwgZ2FpbnMgdG8KICoJdXNlIGZyb20gdGhpcyBjb21tYW5kLiBGb3IgZXhhbXBsZSwKICoJaWYgdGhlIGRldmljZSBpcyBjb25maWd1cmVkIGFzIHN0ZXJlbywKICoJdGhlIGFEU1AgdXNlcyBvbmx5IHRhcmdldF9nYWluX2NoXzEgYW5kCiAqCXRhcmdldF9nYWluX2NoXzIsIGFuZCBpdCBpZ25vcmVzCiAqCXRoZSBvdGhlcnMuCiAqLwpzdHJ1Y3QgYWRtX3Nlc3Npb25fY29wcF9nYWluX3Y1IHsKCXUxNiAgICAgICAgICAgICAgICAgIHNlc3Npb25faWQ7Ci8qIEhhbmRsZSBvZiB0aGUgQVNNIHNlc3Npb24uCiAqCVN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgY29wcF9pZDsKLyogSGFuZGxlIG9mIHRoZSBDT1BQLiBHYWluIHdpbGwgYmUgYXBwbGllZCBvbiB0aGUgU2Vzc2lvbiBJRAogKiBDT1BQIElEIHBhdGguCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJhbXBfZHVyYXRpb247Ci8qIER1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpIG9mIHRoZSByYW1wIG92ZXIKICogd2hpY2ggdGFyZ2V0IGdhaW5zIGFyZQogKiB0byBiZSBhcHBsaWVkLiBVc2UKICogI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfUkFNUF9EVVJBVElPTl9JTU1FRElBVEUKICogdG8gaW5kaWNhdGUgdGhhdCBnYWluIG11c3QgYmUgYXBwbGllZCBpbW1lZGlhdGVseS4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgc3RlcF9kdXJhdGlvbjsKLyogRHVyYXRpb24gKGluIG1pbGxpc2Vjb25kcykgb2YgZWFjaCBzdGVwIGluIHRoZSByYW1wLgogKiBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIHJhbXBfZHVyYXRpb24gaXMgZXF1YWwgdG8KICogI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfUkFNUF9EVVJBVElPTl9JTU1FRElBVEUuCiAqIFN1cHBvcnRlZCB2YWx1ZTogMQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByYW1wX2N1cnZlOwovKiBUeXBlIG9mIHJhbXBpbmcgY3VydmUuCiAqIFN1cHBvcnRlZCB2YWx1ZTogI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfUkFNUF9DVVJWRV9MSU5FQVIKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfZm9yX2FsaWduOwoJLyogUmVzZXJ2ZWQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF8xOwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDEgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF8yOwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDIgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF8zOwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDMgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF80OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDQgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF81OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDUgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF82OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDYgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF83OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDcgaW4gUTEzIGZvcm1hdDsgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0YXJnZXRfZ2Fpbl9jaF84OwoJLyogVGFyZ2V0IGxpbmVhciBnYWluIGZvciBjaGFubmVsIDggaW4gUTEzIGZvcm1hdDsgKi8KfSBfX3BhY2tlZDsKCi8qIEFsbG93cyB0byBzZXQgbXV0ZS91bm11dGUgb24gdmFyaW91cyBzZXNzaW9uLXRvLUNPUFAgcGF0aHMuCiAqCUZvciBldmVyeSBzZXNzaW9uLXRvLUNPUFAgcGF0aCAoc3RyZWFtLWRldmljZSBpbnRlcmNvbm5lY3Rpb24pLAogKgltdXRlL3VubXV0ZSBjYW4gYmUgc2V0IGluZGl2aWR1YWxseSBvbiB0aGUgb3V0cHV0IGNoYW5uZWxzLgogKi8KI2RlZmluZSBBRE1fQ01EX01BVFJJWF9NVVRFX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzJECgovKiBJbmRpY2F0ZXMgdGhhdCBtdXRlL3VubXV0ZSBpbiB0aGUKICoJY3VycmVudCBhZG1fc2Vzc2lvbl9jb3BwX211dGVfdjVzdHJ1Y3R1cmUKICoJaXMgdG8gYmUgYXBwbGllZCB0byBhbGwgdGhlIHNlc3Npb24tdG8tQ09QUAogKglwYXRocyB0aGF0IGV4aXN0IGZvciB0aGUgc3BlY2lmaWVkIHNlc3Npb24uCiAqLwojZGVmaW5lIEFETV9DTURfTUFUUklYX01VVEVfQ09QUF9JRF9BTExfQ09OTkVDVEVEX0NPUFBTICAgICAweEZGRkYKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRF9NQVRSSVhfTVVURV9WNSBjb21tYW5kKi8Kc3RydWN0IGFkbV9jbWRfbWF0cml4X211dGVfdjUgewoJdTMyICAgICAgICAgICAgICAgICAgbWF0cml4X2lkOwovKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbWF0cml4IElEIGlzIEF1ZGlvIFJ4ICgwKSBvciBBdWRpbyBUeCAoMSkuCiAqIFVzZSB0aGUgQURNX01BVFJJWF9JRF9BVURJT19SWCBvciAgQURNX01BVFJJWF9JRF9BVURJT1gKICogbWFjcm9zIHRvIHNldCB0aGlzIGZpZWxkLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwovKiBIYW5kbGUgb2YgdGhlIEFTTSBzZXNzaW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDguCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNvcHBfaWQ7Ci8qIEhhbmRsZSBvZiB0aGUgQ09QUC4KICogVXNlIEFETV9DTURfTUFUUklYX01VVEVfQ09QUF9JRF9BTExfQ09OTkVDVEVEX0NPUFBTCiAqIHRvIGluZGljYXRlIHRoYXQgbXV0ZS91bm11dGUgbXVzdCBiZSBhcHBsaWVkIHRvCiAqIGFsbCB0aGUgQ09QUHMgY29ubmVjdGVkIHRvIHNlc3Npb25faWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMHhGRkZGIC0tIEFwcGx5IG11dGUvdW5tdXRlIHRvIGFsbCBjb25uZWN0ZWQgQ09QUHMKICogLSBPdGhlciB2YWx1ZXMgLS0gVmFsaWQgQ09QUCBJRAogKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF8xOwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDEgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfMjsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCAyIGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgbXV0ZV9mbGFnX2NoXzM7CgkvKiBNdXRlIGZsYWcgZm9yIGNoYW5uZWwgMyBpcyBzZXQgdG8gdW5tdXRlICgwKSBvciBtdXRlICgxKS4gKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF80OwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDQgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfNTsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCA1IGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgbXV0ZV9mbGFnX2NoXzY7CgkvKiBNdXRlIGZsYWcgZm9yIGNoYW5uZWwgNiBpcyBzZXQgdG8gdW5tdXRlICgwKSBvciBtdXRlICgxKS4gKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF83OwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDcgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfODsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCA4IGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgcmFtcF9kdXJhdGlvbjsKLyogUGVyaW9kIChpbiBtaWxsaXNlY29uZHMpIG92ZXIgd2hpY2ggdGhlIHNvZnQgbXV0ZS91bm11dGUgd2lsbCBiZQogKiBhcHBsaWVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIChEZWZhdWx0KSB0byAweEZGRkYKICogVGhlIGRlZmF1bHQgb2YgMCBtZWFucyBtdXRlL3VubXV0ZSB3aWxsIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgcmVzZXJ2ZWRfZm9yX2FsaWduOwoJLyogQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FBQ19TVEVSRU9fTUlYX0NPRUZGX1NFTEVDVElPTl9GTEFHX1YyICgweDAwMDEwREQ4KQoKc3RydWN0IGFzbV9hYWNfc3RlcmVvX21peF9jb2VmZl9zZWxlY3Rpb25fcGFyYW1fdjIgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICAgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7Cgl1MzIgICAgICAgICAgICAgICAgICAgICBwYXJhbV9zaXplOwoJdTMyICAgICAgICAgICAgICAgICAgICAgYWFjX3N0ZXJlb19taXhfY29lZmZfZmxhZzsKfSBfX3BhY2tlZDsKCi8qIEFsbG93cyBhIGNsaWVudCB0byBjb25uZWN0IHRoZSBkZXNpcmVkIHN0cmVhbSB0bwogKiB0aGUgZGVzaXJlZCBBRkUgcG9ydCB0aHJvdWdoIHRoZSBzdHJlYW0gcm91dGVyCiAqCiAqIFRoaXMgY29tbWFuZCBhbGxvd3MgdGhlIGNsaWVudCB0byBjb25uZWN0IHNwZWNpZmllZCBzZXNzaW9uIHRvCiAqIHNwZWNpZmllZCBBRkUgcG9ydC4gVGhpcyBpcyB1c2VkIGZvciBjb21wcmVzc2VkIHN0cmVhbXMgb25seQogKiBvcGVuZWQgdXNpbmcgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgb3IKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9DT01QUkVTU0VEIGNvbW1hbmQuCiAqCiAqIEBwcmVyZXF1aXNpdGVzCiAqIFNlc3Npb24gSUQgYW5kIEFGRSBQb3J0IElEIG11c3QgYmUgdmFsaWQuCiAqICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgb3IKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9DT01QUkVTU0VECiAqIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBvbiB0aGlzIHNlc3Npb24uCiAqLwoKI2RlZmluZSBBRE1fQ01EX0NPTk5FQ1RfQUZFX1BPUlRfVjUJMHgwMDAxMDMyRQojZGVmaW5lIEFETV9DTURfRElTQ09OTkVDVF9BRkVfUE9SVF9WNQkweDAwMDEwMzJGCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgUnggc3RyZWFtIHJvdXRlciBJRC4qLwojZGVmaW5lIEFETV9TVFJUUl9JRF9SWCAgICAgICAgICAgICAgICAgICAgMAovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIFR4IHN0cmVhbSByb3V0ZXIgSUQuKi8KI2RlZmluZSBBRE1fU1RSVFJfSURYICAgICAgICAgICAgICAgICAgICAxCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfQ09OTkVDVF9BRkVfUE9SVF9WNSBjb21tYW5kLiovCnN0cnVjdCBhZG1fY21kX2Nvbm5lY3RfYWZlX3BvcnRfdjUgewoJc3RydWN0IGFwcl9oZHIgICAgIGhkcjsKCXU4ICAgICAgICAgICAgICAgICAgbW9kZTsKLyogSUQgb2YgdGhlIHN0cmVhbSByb3V0ZXIgKFJYL1RYKS4gVXNlIHRoZQogKiBBRE1fU1RSVFJfSURfUlggb3IgQURNX1NUUlRSX0lEWCBtYWNyb3MKICogdG8gc2V0IHRoaXMgZmllbGQuCiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9pZDsKCS8qIFNlc3Npb24gSUQgb2YgdGhlIHN0cmVhbSB0byBjb25uZWN0ICovCgoJdTE2ICAgICAgICAgICAgICAgICBhZmVfcG9ydF9pZDsKCS8qIFBvcnQgSUQgb2YgdGhlIEFGRSBwb3J0IHRvIGNvbm5lY3QgdG8uKi8KCXUzMiAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOdW1iZXIgb2YgZGV2aWNlIGNoYW5uZWxzCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIoQXVkaW8gU2FtcGxlIFBhY2tldCksCiAqIDggKEhCUiBBdWRpbyBTdHJlYW0gU2FtcGxlIFBhY2tldCkKICovCgoJdTMyICAgICAgICAgICAgICAgICBzYW1wbGluZ19yYXRlOwovKiBEZXZpY2Ugc2FtcGxpbmcgcmF0ZQogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBbnkKICovCn0gX19wYWNrZWQ7CgoKLyogYWRzcF9hZG1fYXBpLmggKi8KCgovKiBQb3J0IElELiBVcGRhdGUgYWZlX2dldF9wb3J0X2luZGV4CiAqIHdoZW4gYSBuZXcgcG9ydCBpcyBhZGRlZCBoZXJlLgogKi8KI2RlZmluZSBQUklNQVJZX0kyU19SWCAwCiNkZWZpbmUgUFJJTUFSWV9JMlNfVFggMQojZGVmaW5lIFNFQ09OREFSWV9JMlNfUlggNAojZGVmaW5lIFNFQ09OREFSWV9JMlNfVFggNQojZGVmaW5lIE1JMlNfUlggNgojZGVmaW5lIE1JMlNfVFggNwojZGVmaW5lIEhETUlfUlggOAojZGVmaW5lIFJTVkRfMiA5CiNkZWZpbmUgUlNWRF8zIDEwCiNkZWZpbmUgRElHSV9NSUNfVFggMTEKI2RlZmluZSBWT0lDRTJfUExBWUJBQ0tfVFggMHg4MDAyCiNkZWZpbmUgVk9JQ0VfUkVDT1JEX1JYIDB4ODAwMwojZGVmaW5lIFZPSUNFX1JFQ09SRF9UWCAweDgwMDQKI2RlZmluZSBWT0lDRV9QTEFZQkFDS19UWCAweDgwMDUKCi8qIFNsaW1idXMgTXVsdGkgY2hhbm5lbCBwb3J0IGlkIHBvb2wgICovCiNkZWZpbmUgU0xJTUJVU18wX1JYCQkweDQwMDAKI2RlZmluZSBTTElNQlVTXzBfVFgJCTB4NDAwMQojZGVmaW5lIFNMSU1CVVNfMV9SWAkJMHg0MDAyCiNkZWZpbmUgU0xJTUJVU18xX1RYCQkweDQwMDMKI2RlZmluZSBTTElNQlVTXzJfUlgJCTB4NDAwNAojZGVmaW5lIFNMSU1CVVNfMl9UWAkJMHg0MDA1CiNkZWZpbmUgU0xJTUJVU18zX1JYCQkweDQwMDYKI2RlZmluZSBTTElNQlVTXzNfVFgJCTB4NDAwNwojZGVmaW5lIFNMSU1CVVNfNF9SWAkJMHg0MDA4CiNkZWZpbmUgU0xJTUJVU180X1RYCQkweDQwMDkKI2RlZmluZSBTTElNQlVTXzVfUlgJCTB4NDAwYQojZGVmaW5lIFNMSU1CVVNfNV9UWAkJMHg0MDBiCiNkZWZpbmUgU0xJTUJVU182X1JYCQkweDQwMGMKI2RlZmluZSBTTElNQlVTXzZfVFgJCTB4NDAwZAojZGVmaW5lIFNMSU1CVVNfN19SWAkJMHg0MDBlCiNkZWZpbmUgU0xJTUJVU183X1RYCQkweDQwMGYKI2RlZmluZSBTTElNQlVTXzhfUlgJCTB4NDAxMAojZGVmaW5lIFNMSU1CVVNfOF9UWAkJMHg0MDExCiNkZWZpbmUgU0xJTUJVU19QT1JUX0xBU1QJU0xJTUJVU184X1RYCiNkZWZpbmUgSU5UX0JUX1NDT19SWCAweDMwMDAKI2RlZmluZSBJTlRfQlRfU0NPX1RYIDB4MzAwMQojZGVmaW5lIElOVF9CVF9BMkRQX1JYIDB4MzAwMgojZGVmaW5lIElOVF9GTV9SWCAweDMwMDQKI2RlZmluZSBJTlRfRk1fVFggMHgzMDA1CiNkZWZpbmUgUlRfUFJPWFlfUE9SVF8wMDFfUlgJMHgyMDAwCiNkZWZpbmUgUlRfUFJPWFlfUE9SVF8wMDFfVFgJMHgyMDAxCiNkZWZpbmUgQUZFX0xPT1BCQUNLX1RYCTB4NjAwMQojZGVmaW5lIERJU1BMQVlfUE9SVF9SWAkweDYwMjAKCiNkZWZpbmUgQUZFX1BPUlRfSU5WQUxJRCAweEZGRkYKI2RlZmluZSBTTElNQlVTX0lOVkFMSUQgQUZFX1BPUlRfSU5WQUxJRAoKI2RlZmluZSBBRkVfUE9SVF9DTURfU1RBUlQgMHgwMDAxMDBjYQoKI2RlZmluZSBBRkVfRVZFTlRfUlRQT1JUX1NUQVJUIDAKI2RlZmluZSBBRkVfRVZFTlRfUlRQT1JUX1NUT1AgMQojZGVmaW5lIEFGRV9FVkVOVF9SVFBPUlRfTE9XX1dNIDIKI2RlZmluZSBBRkVfRVZFTlRfUlRQT1JUX0hJX1dNIDMKCiNkZWZpbmUgQURTUF9BRkVfVkVSU0lPTiAgICAweDAwMjAwMDAwCgovKiBTaXplIG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgdGhlIGF1ZGlvIGludGVyZmFjZS4gKi8KI2RlZmluZSAgQUZFX1BPUlRfSURfQVVESU9fSUZfUE9SVF9SQU5HRV9TSVpFCTB4RgoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIGludGVybmFsIEJULUZNIHBvcnRzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX0ZNX1JBTkdFX1NJWkUJMHg2CgovKiBTaXplIG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgU0xJTWJ1czxzdXA+JnJlZzsKICogPC9zdXA+IG11bHRpY2hhbm5lbAogKiBwb3J0cy4KICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TSVpFCTB4QQoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHJlYWwtdGltZSBwcm94eSBwb3J0cy4gKi8KI2RlZmluZSAgQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TSVpFCTB4MgoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHBzZXVkb3BvcnRzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU0laRQkweDUKCi8qIFN0YXJ0IG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgdGhlIGF1ZGlvIGludGVyZmFjZS4gKi8KI2RlZmluZSAgQUZFX1BPUlRfSURfQVVESU9fSUZfUE9SVF9SQU5HRV9TVEFSVAkweDEwMDAKCi8qIEVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHRoZSBhdWRpbyBpbnRlcmZhY2UuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX0FVRElPX0lGX1BPUlRfUkFOR0VfRU5EIFwKCShBRkVfUE9SVF9JRF9BVURJT19JRl9QT1JUX1JBTkdFX1NUQVJUICtcCglBRkVfUE9SVF9JRF9BVURJT19JRl9QT1JUX1JBTkdFX1NJWkUgLSAxKQoKLyogU3RhcnQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciByZWFsLXRpbWUgcHJveHkgcG9ydHMuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQJMHgyMDAwCgovKiBFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciByZWFsLXRpbWUgcHJveHkgcG9ydHMuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5EIFwKCShBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NUQVJUICtcCglBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NJWkUtMSkKCi8qIFN0YXJ0IG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgaW50ZXJuYWwgQlQtRk0gZGV2aWNlcy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9GTV9SQU5HRV9TVEFSVAkweDMwMDAKCi8qIEVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIGludGVybmFsIEJULUZNIGRldmljZXMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5URVJOQUxfQlRfRk1fUkFOR0VfRU5EIFwKCShBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9GTV9SQU5HRV9TVEFSVCArXAoJQUZFX1BPUlRfSURfSU5URVJOQUxfQlRfRk1fUkFOR0VfU0laRS0xKQoKLyoJU3RhcnQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBTTElNYnVzIGRldmljZXMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TVEFSVAkweDQwMDAKCi8qCUVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIFNMSU1idXMgZGV2aWNlcy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX1JBTkdFX0VORCBcCgkoQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TVEFSVCArXAoJQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9TSVpFLTEpCgovKiBTdGFydCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHBzZXVkb3BvcnRzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU1RBUlQJMHg4MDAxCgovKiBFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBwc2V1ZG9wb3J0cy4gICovCiNkZWZpbmUgQUZFX1BPUlRfSURfUFNFVURPUE9SVF9SQU5HRV9FTkQgXAoJKEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU1RBUlQgK1wKCUFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfU0laRS0xKQoKLyogU3RhcnQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBURE0gZGV2aWNlcy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVAkweDkwMDAKCi8qIEVuZCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIFRETSBkZXZpY2VzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX0VORCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQrMHg1MC0xKQoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIFRETSBwb3J0cy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TSVpFIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9FTkQgLSBcCglBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCsxKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX01JMlNfUlggICAgICAgICAweDEwMDAKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX01JMlNfVFggICAgICAgICAweDEwMDEKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfTUkyU19SWCAgICAgICAweDEwMDIKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfTUkyU19UWCAgICAgICAweDEwMDMKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9NSTJTX1JYICAgICAgICAweDEwMDQKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9NSTJTX1RYICAgICAgICAweDEwMDUKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX01JMlNfUlggICAgICAweDEwMDYKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX01JMlNfVFggICAgICAweDEwMDcKI2RlZmluZSBBVURJT19QT1JUX0lEX0kyU19SWCAgICAgICAgICAgICAgICAweDEwMDgKI2RlZmluZSBBRkVfUE9SVF9JRF9ESUdJVEFMX01JQ19UWCAgICAgICAgICAweDEwMDkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1BDTV9SWCAgICAgICAgICAweDEwMEEKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1BDTV9UWCAgICAgICAgICAweDEwMEIKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfUENNX1JYICAgICAgICAweDEwMEMKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfUENNX1RYICAgICAgICAweDEwMEQKI2RlZmluZSBBRkVfUE9SVF9JRF9NVUxUSUNIQU5fSERNSV9SWCAgICAgICAweDEwMEUKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfTUkyU19SWF9TRDEgICAweDEwMTAKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9QQ01fUlggICAgICAgICAweDEwMTIKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9QQ01fVFggICAgICAgICAweDEwMTMKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1BDTV9SWCAgICAgICAweDEwMTQKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1BDTV9UWCAgICAgICAweDEwMTUKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX01JMlNfUlggICAgICAgICAweDEwMTYKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX01JMlNfVFggICAgICAgICAweDEwMTcKLyogSUQgb2YgdGhlIHNlbmFyeSBNSTJTIFJ4IHBvcnQuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VOQVJZX01JMlNfUlggICAgICAgICAgMHgxMDE4Ci8qIElEIG9mIHRoZSBzZW5hcnkgTUkyUyBUeCBwb3J0LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NFTkFSWV9NSTJTX1RYICAgICAgICAgIDB4MTAxOQoKLyogSUQgb2YgdGhlIEludGVybmFsIDAgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMF9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMkUKLyogSUQgb2YgdGhlIEludGVybmFsIDAgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMF9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMkYKLyogSUQgb2YgdGhlIEludGVybmFsIDEgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMV9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzAKLyogSUQgb2YgdGhlIEludGVybmFsIDEgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMV9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzEKLyogSUQgb2YgdGhlIEludGVybmFsIDIgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMl9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzIKLyogSUQgb2YgdGhlIEludGVybmFsIDIgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UMl9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzMKLyogSUQgb2YgdGhlIEludGVybmFsIDMgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UM19NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzQKLyogSUQgb2YgdGhlIEludGVybmFsIDMgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UM19NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzUKLyogSUQgb2YgdGhlIEludGVybmFsIDQgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNF9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzYKLyogSUQgb2YgdGhlIEludGVybmFsIDQgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNF9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzcKLyogSUQgb2YgdGhlIEludGVybmFsIDUgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNV9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwMzgKLyogSUQgb2YgdGhlIEludGVybmFsIDUgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNV9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwMzkKLyogSUQgb2YgdGhlIEludGVybmFsIDYgTUkyUyBSeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNl9NSTJTX1JYICAgICAgICAgICAgICAgICAweDEwM0EKLyogSUQgb2YgdGhlIEludGVybmFsIDYgTUkyUyBUeCBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5UNl9NSTJTX1RYICAgICAgICAgICAgICAgICAweDEwM0IKCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9QQ01fUlggICAgICAgMHgxMDNDCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9QQ01fVFggICAgICAgMHgxMDNECgojZGVmaW5lIEFGRV9QT1JUX0lEX1NQRElGX1JYICAgICAgICAgICAgICAgIDB4NTAwMAojZGVmaW5lICBBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUXzAwMV9SWCAgIDB4MjAwMAojZGVmaW5lICBBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUXzAwMV9UWCAgIDB4MjAwMQojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX1NDT19SWCAgICAgIDB4MzAwMAojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX1NDT19UWCAgICAgIDB4MzAwMQojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX0EyRFBfUlggICAgIDB4MzAwMgojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0ZNX1JYICAgICAgICAgIDB4MzAwNAojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0ZNX1RYICAgICAgICAgIDB4MzAwNQovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCAwLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8wX1JYICAgICAgMHg0MDAwCi8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDAuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzBfVFggICAgICAweDQwMDEKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgMS4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fMV9SWCAgICAgIDB4NDAwMgovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCAxLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8xX1RYICAgICAgMHg0MDAzCi8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDIuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzJfUlggICAgICAweDQwMDQKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgMi4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fMl9UWCAgICAgIDB4NDAwNQovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCAzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8zX1JYICAgICAgMHg0MDA2Ci8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzNfVFggICAgICAweDQwMDcKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgNC4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fNF9SWCAgICAgIDB4NDAwOAovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCA0LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl80X1RYICAgICAgMHg0MDA5Ci8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDUuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzVfUlggICAgICAweDQwMGEKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgNS4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fNV9UWCAgICAgIDB4NDAwYgovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCA2LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl82X1JYICAgICAgMHg0MDBjCi8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDYuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzZfVFggICAgICAweDQwMGQKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgNy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fN19SWCAgICAgIDB4NDAwZQovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCA3LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl83X1RYICAgICAgMHg0MDBmCi8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDguICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzhfUlggICAgICAweDQwMTAKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgOC4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fOF9UWCAgICAgIDB4NDAxMQovKiBBRkUgUnggcG9ydCBmb3IgYXVkaW8gb3ZlciBEaXNwbGF5IHBvcnQgKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9IRE1JX09WRVJfRFBfUlggICAgICAgICAgICAgIDB4NjAyMAovKlVTQiBBRkUgcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1VTQl9SWCAgICAgICAgICAgICAgICAgICAgICAgMHg3MDAwCiNkZWZpbmUgQUZFX1BPUlRfSURfVVNCX1RYICAgICAgICAgICAgICAgICAgICAgICAweDcwMDEKCi8qIEdlbmVyaWMgcHNldWRvcG9ydCAxLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfMDEgICAgICAweDgwMDEKLyogR2VuZXJpYyBwc2V1ZG9wb3J0IDIuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfUFNFVURPUE9SVF8wMiAgICAgIDB4ODAwMgoKLyogQHhyZWZsYWJlbHtoZHI6QWZlUG9ydElkUHJpbWFyeUF1eFBjbVR4fQogKiBQcmltYXJ5IEF1eCBQQ00gVHggcG9ydCBJRC4KICovCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9QQ01fVFggICAgICAweDEwMEIKLyogUHNldWRvcG9ydCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB2b2ljZSBSeCBwYXRoLgogKiBGb3IgcmVjb3JkaW5nLCB0aGUgdm9pY2UgUnggcGF0aCBzYW1wbGVzIGFyZSB3cml0dGVuIHRvIHRoaXMKICogcG9ydCBhbmQgY29uc3VtZWQgYnkgdGhlIGF1ZGlvIHBhdGguCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9JRF9WT0lDRV9SRUNPUkRfUlgJMHg4MDAzCgovKiBQc2V1ZG9wb3J0IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHZvaWNlIFR4IHBhdGguCiAqIEZvciByZWNvcmRpbmcsIHRoZSB2b2ljZSBUeCBwYXRoIHNhbXBsZXMgYXJlIHdyaXR0ZW4gdG8gdGhpcwogKiBwb3J0IGFuZCBjb25zdW1lZCBieSB0aGUgYXVkaW8gcGF0aC4KICovCgojZGVmaW5lIEFGRV9QT1JUX0lEX1ZPSUNFX1JFQ09SRF9UWAkweDgwMDQKLyogUHNldWRvcG9ydCB0aGF0IGNvcnJlc3BvbmRzIHRvIGluLWNhbGwgdm9pY2UgZGVsaXZlcnkgc2FtcGxlcy4KICogRHVyaW5nIGluLWNhbGwgYXVkaW8gZGVsaXZlcnksIHRoZSBhdWRpbyBwYXRoIGRlbGl2ZXJzIHNhbXBsZXMKICogdG8gdGhpcyBwb3J0IGZyb20gd2hlcmUgdGhlIHZvaWNlIHBhdGggZGVsaXZlcnMgdGhlbSBvbiB0aGUKICogUnggcGF0aC4KICovCiNkZWZpbmUgQUZFX1BPUlRfSURfVk9JQ0UyX1BMQVlCQUNLX1RYICAweDgwMDIKI2RlZmluZSBBRkVfUE9SVF9JRF9WT0lDRV9QTEFZQkFDS19UWCAgIDB4ODAwNQoKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDAwKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF8yIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMyBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF81IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNiBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgwMSkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFhfMiBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzMgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFhfNSBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzYgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgxMCkKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfMiBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF8zIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfNSBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF82IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4MTEpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzIgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfMyBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzUgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfNiBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4MjApCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzIgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzMgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzUgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzYgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDIxKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8yIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8zIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF81IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF82IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDMwKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF8yIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMyBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF81IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNiBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgzMSkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFhfMiBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzMgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFhfNSBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzYgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4NDApCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfMSBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYXzIgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgwNCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWF8zIFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfNCBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYXzUgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgwQSkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWF82IFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfNyBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDQxKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzEgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWF8yIFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFhfMyBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzQgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWF81IFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFhfNiBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzcgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5WQUxJRCAgICAgICAgICAgICAweEZGRkYKCiNkZWZpbmUgQUFDX0VOQ19NT0RFX0FBQ19MQyAweDAyCiNkZWZpbmUgQUFDX0VOQ19NT0RFX0FBQ19QIDB4MDUKI2RlZmluZSBBQUNfRU5DX01PREVfRUFBQ19QIDB4MUQKCiNkZWZpbmUgQUZFX1BTRVVET1BPUlRfQ01EX1NUQVJUIDB4MDAwMTAwY2YKc3RydWN0IGFmZV9wc2V1ZG9wb3J0X3N0YXJ0X2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTE2IHBvcnRfaWQ7CQkvKiBQc2V1ZG8gUG9ydCAxID0gMHg4MDAwICovCgkJCQkvKiBQc2V1ZG8gUG9ydCAyID0gMHg4MDAxICovCgkJCQkvKiBQc2V1ZG8gUG9ydCAzID0gMHg4MDAyICovCgl1MTYgdGltaW5nOwkJLyogRlRSVCA9IDAgLCBBVlRpbWVyID0gMSwgKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BTRVVET1BPUlRfQ01EX1NUT1AgMHgwMDAxMDBkMApzdHJ1Y3QgYWZlX3BzZXVkb3BvcnRfc3RvcF9jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiBwb3J0X2lkOwkJLyogUHNldWRvIFBvcnQgMSA9IDB4ODAwMCAqLwoJCQkJLyogUHNldWRvIFBvcnQgMiA9IDB4ODAwMSAqLwoJCQkJLyogUHNldWRvIFBvcnQgMyA9IDB4ODAwMiAqLwoJdTE2IHJlc2VydmVkOwp9IF9fcGFja2VkOwoKCiNkZWZpbmUgQUZFX01PRFVMRV9TSURFVE9ORV9JSVJfRklMVEVSCTB4MDAwMTAyMDIKI2RlZmluZSBBRkVfUEFSQU1fSURfRU5BQkxFCTB4MDAwMTAyMDMKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0VOQUJMRQogKiBwYXJhbWV0ZXIsIHdoaWNoIGVuYWJsZXMgb3IKICogZGlzYWJsZXMgYW55IG1vZHVsZS4KICogVGhlIGZpeGVkIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgZm91ciBieXRlcy4KICovCgpzdHJ1Y3QgYWZlX21vZF9lbmFibGVfcGFyYW0gewoJdTE2ICAgICAgICAgICAgICAgICAgZW5hYmxlOwoJLyogRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSBtb2R1bGUuICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgovKiBJRCBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FGRV9NT0RVTEVfU0lERVRPTkVfSUlSX0ZJTFRFUiBtb2R1bGUuCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9TSURFVE9ORV9JSVJfRklMVEVSX0NPTkZJRwkweDAwMDEwMjA0CiNkZWZpbmUgTUFYX1NJREVUT05FX0lJUl9EQVRBX1NJWkUgMjI0CiNkZWZpbmUgTUFYX05PX0lJUl9GSUxURVJfU1RBR0UgICAgMTAKCnN0cnVjdCBhZmVfc2lkZXRvbmVfaWlyX2ZpbHRlcl9jb25maWdfcGFyYW1zIHsKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9iaXF1YWRfc3RhZ2VzOwovKiBOdW1iZXIgb2Ygc3RhZ2VzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBNaW5pbXVtIG9mIDUgYW5kIG1heGltdW0gb2YgMTAKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcHJlZ2FpbjsKLyogUHJlZ2FpbiBmb3IgdGhlIGNvbXBlbnNhdGluZyBmaWx0ZXIgcmVzcG9uc2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEFueSBudW1iZXIgaW4gUTEzIGZvcm1hdAogKi8KCXVpbnQ4X3QgICBpaXJfY29uZmlnW01BWF9TSURFVE9ORV9JSVJfREFUQV9TSVpFXTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX01PRFVMRV9MT09QQkFDSwkweDAwMDEwMjA1CiNkZWZpbmUgQUZFX1BBUkFNX0lEX0xPT1BCQUNLX0dBSU5fUEVSX1BBVEgJMHgwMDAxMDIwNgoKLyogUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9MT09QQkFDS19HQUlOX1BFUl9QQVRIIHBhcmFtZXRlciwKICogd2hpY2ggZ2V0cy9zZXRzIGxvb3BiYWNrIGdhaW4gb2YgYSBwb3J0IHRvIGFuIFJ4IHBvcnQuCiAqIFRoZSBUeCBwb3J0IElEIG9mIHRoZSBsb29wYmFjayBpcyBwYXJ0IG9mIHRoZSBzZXRfcGFyYW0gY29tbWFuZC4KICovCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU1fVjIgY29tbWFuZCdzCiAqIGNvbmZpZ3VyYXRpb24vY2FsaWJyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBBRkUgcG9ydC4KICovCnN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHsKCXUxNiBwb3J0X2lkOwovKiBQb3J0IGludGVyZmFjZSBhbmQgZGlyZWN0aW9uIChSeCBvciBUeCkgdG8gc3RhcnQuICovCgoJdTE2IHBheWxvYWRfc2l6ZTsKLyogQWN0dWFsIHNpemUgb2YgdGhlIHBheWxvYWQgaW4gYnl0ZXMuCiAqIFRoaXMgaXMgdXNlZCBmb3IgcGFyc2luZyB0aGUgcGFyYW1ldGVyIHBheWxvYWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiBwYXlsb2FkX2FkZHJlc3NfbHN3OwovKiBMU1cgb2YgNjQgYml0IFBheWxvYWQgYWRkcmVzcy4KICogQWRkcmVzcyBzaG91bGQgYmUgMzItYnl0ZSwKICogNGtieXRlIGFsaWduZWQgYW5kIG11c3QgYmUgY29udGlndW91cyBtZW1vcnkuCiAqLwoKdTMyIHBheWxvYWRfYWRkcmVzc19tc3c7Ci8qIE1TVyBvZiA2NCBiaXQgUGF5bG9hZCBhZGRyZXNzLgogKiBJbiBjYXNlIG9mIDMyLWJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsCiAqIHRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KICogSW4gY2FzZSBvZiAzNi1iaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLAogKiBiaXQtNCB0byBiaXQtMzEgbXVzdCBiZSBzZXQgdG8gemVyby4KICogQWRkcmVzcyBzaG91bGQgYmUgMzItYnl0ZSwgNGtieXRlIGFsaWduZWQKICogYW5kIG11c3QgYmUgY29udGlndW91cyBtZW1vcnkuCiAqLwoKdTMyIG1lbV9tYXBfaGFuZGxlOwovKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieQogKiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kcy4KICogU3VwcG9ydGVkIFZhbHVlczoKICogLSBOVUxMIC0tIE1lc3NhZ2UuIFRoZSBwYXJhbWV0ZXIgZGF0YSBpcyBpbi1iYW5kLgogKiAtIE5vbi1OVUxMIC0tIFRoZSBwYXJhbWV0ZXIgZGF0YSBpcyBPdXQtYmFuZC5Qb2ludGVyIHRvCiAqIHRoZSBwaHlzaWNhbCBhZGRyZXNzCiAqIGluIHNoYXJlZCBtZW1vcnkgb2YgdGhlIHBheWxvYWQgZGF0YS4KICogQW4gb3B0aW9uYWwgZmllbGQgaXMgYXZhaWxhYmxlIGlmIHBhcmFtZXRlcgogKiBkYXRhIGlzIGluLWJhbmQ6CiAqIGFmZV9wYXJhbV9kYXRhX3YyIHBhcmFtX2RhdGFbLi4uXS4KICogRm9yIGRldGFpbGVkIHBheWxvYWQgY29udGVudCwgc2VlIHRoZQogKiBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHN0cnVjdHVyZS4KICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QT1JUX0NNRF9TRVRfUEFSQU1fVjIJMHgwMDAxMDBFRgoKc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgewoJdTMyIG1vZHVsZV9pZDsKLyogSUQgb2YgdGhlIG1vZHVsZSB0byBiZSBjb25maWd1cmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBWYWxpZCBtb2R1bGUgSUQKICovCgp1MzIgcGFyYW1faWQ7Ci8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgc3VwcG9ydGVkIHBhcmFtZXRlcnMKICogZm9yIHRoZSBtb2R1bGUgSUQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFZhbGlkIHBhcmFtZXRlciBJRAogKi8KCnUxNiBwYXJhbV9zaXplOwovKiBBY3R1YWwgc2l6ZSBvZiB0aGUgZGF0YSBmb3IgdGhlCiAqIG1vZHVsZV9pZC9wYXJhbV9pZCBwYWlyLiBUaGUgc2l6ZSBpcyBhCiAqIG11bHRpcGxlIG9mIGZvdXIgYnl0ZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUxNiByZXNlcnZlZDsKLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLgogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfbG9vcGJhY2tfZ2Fpbl9wZXJfcGF0aF9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgIHBkYXRhOwoJdTE2ICAgICAgICAgICAgICAgICAgcnhfcG9ydF9pZDsKLyogUnggcG9ydCBvZiB0aGUgbG9vcGJhY2suICovCgp1MTYgICAgICAgICAgICAgICAgICBnYWluOwovKiBMb29wYmFjayBnYWluIHBlciBwYXRoIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBbnkgbnVtYmVyIGluIFExMyBmb3JtYXQKICovCn0gX19wYWNrZWQ7CgovKiBQYXJhbWV0ZXIgSUQgdXNlZCB0byBjb25maWd1cmUgYW5kIGVuYWJsZS9kaXNhYmxlIHRoZQogKiBsb29wYmFjayBwYXRoLiBUaGUgZGlmZmVyZW5jZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGV4aXN0aW5nCiAqIEFQSSwgQUZFX1BPUlRfQ01EX0xPT1BCQUNLLCBpcyB0aGF0IGl0IGFsbG93cyBSeCBwb3J0IHRvIGJlCiAqIGNvbmZpZ3VyZWQgYXMgc291cmNlIHBvcnQgaW4gbG9vcGJhY2sgcGF0aC4gUG9ydC1pZCBpbgogKiBBRkVfUE9SVF9DTURfU0VUX1BBUkFNIGNtZCBpcyB0aGUgc291cmNlIHBvcnQgd2hpY2ggY2FuIGJlCiAqIFR4IG9yIFJ4IHBvcnQuIEluIGFkZGl0aW9uLCB3ZSBjYW4gY29uZmlndXJlIHRoZSB0eXBlIG9mCiAqIHJvdXRpbmcgbW9kZSB0byBoYW5kbGUgZGlmZmVyZW50IHVzZSBjYXNlcy4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0xPT1BCQUNLX0NPTkZJRwkweDAwMDEwMjBCCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0xPT1BCQUNLX0NPTkZJRwkweDEKCmVudW0gYWZlX2xvb3BiYWNrX3JvdXRpbmdfbW9kZSB7CglMQl9NT0RFX0RFRkFVTFQgPSAxLAoJLyogUmVndWxhciBsb29wYmFjayBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiBwb3J0ICovCglMQl9NT0RFX1NJREVUT05FLAoJLyogU2lkZXRvbmUgZmVlZCBmcm9tIFR4IHNvdXJjZSB0byBSeCBkZXN0aW5hdGlvbiBwb3J0ICovCglMQl9NT0RFX0VDX1JFRl9WT0lDRV9BVURJTywKCS8qIEVjaG8gY2FuY2VsbGVyIHJlZmVyZW5jZSwgdm9pY2UgKyBhdWRpbyArIERUTUYgKi8KCUxCX01PREVfRUNfUkVGX1ZPSUNFCgkvKiBFY2hvIGNhbmNlbGxlciByZWZlcmVuY2UsIHZvaWNlIGFsb25lICovCn0gX19wYWNrZWQ7CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9MT09QQkFDS19DT05GSUcgLAogKiB3aGljaCBlbmFibGVzL2Rpc2FibGVzIG9uZSBBRkUgbG9vcGJhY2suCiAqLwpzdHJ1Y3QgYWZlX2xvb3BiYWNrX2NmZ192MSB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgIHBkYXRhOwoJdTMyCQlsb29wYmFja19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgUk1DIG1vZHVsZQogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9MT09QQkFDS19DT05GSUcKICovCgl1MTYgICAgICAgICAgICAgICAgICBkc3RfcG9ydF9pZDsKCS8qIERlc3RpbmF0aW9uIFBvcnQgSWQuICovCgl1MTYgICAgICAgICAgICAgICAgICByb3V0aW5nX21vZGU7Ci8qIFNwZWNpZmllcyBkYXRhIHBhdGggdHlwZSBmcm9tIHNyYyB0byBkZXN0IHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqICNMQl9NT0RFX0RFRkFVTFQKICogI0xCX01PREVfU0lERVRPTkUKICogI0xCX01PREVfRUNfUkVGX1ZPSUNFX0FVRElPCiAqICNMQl9NT0RFX0VDX1JFRl9WT0lDRV9BCiAqICNMQl9NT0RFX0VDX1JFRl9WT0lDRQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBlbmFibGU7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRvIGVuYWJsZSAoMSkgb3IKICogZGlzYWJsZSAoMCkgYW4gQUZFIGxvb3BiYWNrLgogKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgMzItYml0IGFsaWdubWVudC4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byAwLgogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xvb3BiYWNrX3NpZGV0b25lX2dhaW4gewoJdTE2ICAgICAgICAgICAgICAgICAgcnhfcG9ydF9pZDsKCXUxNiAgICAgICAgICAgICAgICAgIGdhaW47Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgbG9vcGJhY2tfY2ZnX2RhdGEgewoJdTMyICAgICAgICAgICAgICAgICAgbG9vcGJhY2tfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIFJNQyBtb2R1bGUKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fTE9PUEJBQ0tfQ09ORklHCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgZHN0X3BvcnRfaWQ7CgkvKiBEZXN0aW5hdGlvbiBQb3J0IElkLiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcm91dGluZ19tb2RlOwovKiBTcGVjaWZpZXMgZGF0YSBwYXRoIHR5cGUgZnJvbSBzcmMgdG8gZGVzdCBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAjTEJfTU9ERV9ERUZBVUxUCiAqICNMQl9NT0RFX1NJREVUT05FCiAqICNMQl9NT0RFX0VDX1JFRl9WT0lDRV9BVURJTwogKiAjTEJfTU9ERV9FQ19SRUZfVk9JQ0VfQQogKiAjTEJfTU9ERV9FQ19SRUZfVk9JQ0UKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5hYmxlOwovKiBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgKDEpIG9yCiAqIGRpc2FibGUgKDApIGFuIEFGRSBsb29wYmFjay4KICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIDMyLWJpdCBhbGlnbm1lbnQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3N0X2xvb3BiYWNrX2NmZ192MSB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgICAgICAgICAgICAgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgIGdhaW5fcGRhdGE7CglzdHJ1Y3QgYWZlX2xvb3BiYWNrX3NpZGV0b25lX2dhaW4gZ2Fpbl9kYXRhOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgIGNmZ19wZGF0YTsKCXN0cnVjdCBsb29wYmFja19jZmdfZGF0YSAgICAgICAgICBjZmdfZGF0YTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfbG9vcGJhY2tfaWlyX2NmZ192MiB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgICAgICAgICAgICAgICAgICAgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgICAgICAgIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgICAgICAgIHN0X2lpcl9lbmFibGVfcGRhdGE7CglzdHJ1Y3QgYWZlX21vZF9lbmFibGVfcGFyYW0gICAgICAgICAgICAgc3RfaWlyX21vZGVfZW5hYmxlX2RhdGE7CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICAgICAgICAgc3RfaWlyX2ZpbHRlcl9jb25maWdfcGRhdGE7CglzdHJ1Y3QgYWZlX3NpZGV0b25lX2lpcl9maWx0ZXJfY29uZmlnX3BhcmFtcyBzdF9paXJfZmlsdGVyX2NvbmZpZ19kYXRhOwp9IF9fcGFja2VkOwojZGVmaW5lIEFGRV9NT0RVTEVfU1BFQUtFUl9QUk9URUNUSU9OCTB4MDAwMTAyMDkKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BLUl9QUk9UX0NPTkZJRwkweDAwMDEwMjBhCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NQS1JfUFJPVF9DT05GSUcJMHgxCiNkZWZpbmUgQUZFX1NQS1JfUFJPVF9FWENVUlNJT05GX0xFTgk1MTIKc3RydWN0IGFmZV9zcGtyX3Byb3RfY2ZnX3BhcmFtX3YxIHsKCXUzMiAgICAgICBzcGtyX3Byb3RfbWlub3JfdmVyc2lvbjsKLyoKICogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUKICogc3BlYWtlciBwcm90ZWN0aW9uIG1vZHVsZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9TUEtSX1BST1RfQ09ORklHCiAqLwoKaW50MTZfdCAgICAgICAgd2luX3NpemU7Ci8qIEFuYWx5c2lzIGFuZCBzeW50aGVzaXMgd2luZG93IHNpemUgKG5XaW5TaXplKS4KICogU3VwcG9ydGVkIHZhbHVlczogMTAyNCwgNTEyLCAyNTYgc2FtcGxlcwogKi8KCmludDE2X3QgICAgICAgIG1hcmdpbjsKLyogQWxsb3dhYmxlIG1hcmdpbiBmb3IgZXhjdXJzaW9uIHByZWRpY3Rpb24sCiAqIGluIEwxNlExNSBmb3JtYXQuIFRoaXMgaXMgYQogKiBjb250cm9sIHBhcmFtZXRlciB0byBhbGxvdwogKiBmb3Igb3ZlcmVzdGltYXRpb24gb2YgcGVhayBleGN1cnNpb24uCiAqLwoKaW50MTZfdCAgICAgICAgc3Brcl9leGNfbGltaXQ7Ci8qIFNwZWFrZXIgZXhjdXJzaW9uIGxpbWl0LCBpbiBMMTZRMTUgZm9ybWF0LiovCgppbnQxNl90ICAgICAgICBzcGtyX3Jlc29uYW5jZV9mcmVxOwovKiBSZXNvbmFuY2UgZnJlcXVlbmN5IG9mIHRoZSBzcGVha2VyOyB1c2VkCiAqIHRvIGRlZmluZSBhIGZyZXF1ZW5jeSByYW5nZQogKiBmb3Igc2lnbmFsIG1vZGlmaWNhdGlvbi4KICoKICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAyMDAwIEh6CiAqLwoKaW50MTZfdCAgICAgICAgbGltaHJlc2g7Ci8qIFRocmVzaG9sZCBvZiB0aGUgaGFyZCBsaW1pdGVyOyB1c2VkIHRvCiAqIHByZXZlbnQgb3ZlcnNob290aW5nIGJleW9uZCBhCiAqIHNpZ25hbCBsZXZlbCB0aGF0IHdhcyBzZXQgYnkgdGhlIGxpbWl0ZXIKICogcHJpb3IgdG8gc3BlYWtlciBwcm90ZWN0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDMyNzY3CiAqLwoKaW50MTZfdCAgICAgICAgaHBmX2N1dF9vZmZfZnJlcTsKLyogSGlnaCBwYXNzIGZpbHRlciBjdXRvZmYgZnJlcXVlbmN5LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMDAsIDIwMCwgMzAwIEh6CiAqLwoKaW50MTZfdCAgICAgICAgaHBmX2VuYWJsZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGhpZ2ggcGFzcyBmaWx0ZXIKICogaXMgZW5hYmxlZCAoMCkgb3IgZGlzYWJsZWQgKDEpLgogKi8KCmludDE2X3QgICAgICAgIHJlc2VydmVkOwovKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgppbnQzMl90ICAgICAgICBhbXBfZ2FpbjsKLyogQW1wbGlmaWVyIGdhaW4gaW4gTDMyUTE1IGZvcm1hdC4KICogVGhpcyBpcyB0aGUgUk1TIHZvbHRhZ2UgYXQgdGhlCiAqIGxvdWRzcGVha2VyIHdoZW4gYSAwZEJGUyB0b25lCiAqIGlzIHBsYXllZCBpbiB0aGUgZGlnaXRhbCBkb21haW4uCiAqLwoKaW50MTZfdCAgICAgICAgZXhjdXJzaW9uZltBRkVfU1BLUl9QUk9UX0VYQ1VSU0lPTkZfTEVOXTsKLyogQXJyYXkgb2YgdGhlIGV4Y3Vyc2lvbiB0cmFuc2ZlciBmdW5jdGlvbi4KICogVGhlIHBlYWsgZXhjdXJzaW9uIG9mIHRoZQogKiBsb3Vkc3BlYWtlciBkaWFwaHJhZ20gaXMKICogbWVhc3VyZWQgaW4gbWlsbGltZXRlcnMgZm9yIDEgVnJtcyBTaW5lCiAqIHRvbmUgYXQgYWxsIEZGVCBiaW4gZnJlcXVlbmNpZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFExNSBmb3JtYXQKICovCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBRkVfU0VSVklDRV9DTURfUkVHSVNURVJfUlRfUE9SVF9EUklWRVIJMHgwMDAxMDBFMAoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfU0VSVklDRV9DTURfUkVHSVNURVJfUlRfUE9SVF9EUklWRVIKICogY29tbWFuZCwgd2hpY2ggcmVnaXN0ZXJzIGEgcmVhbC10aW1lIHBvcnQgZHJpdmVyCiAqIHdpdGggdGhlIEFGRSBzZXJ2aWNlLgogKi8Kc3RydWN0IGFmZV9zZXJ2aWNlX2NtZF9yZWdpc3Rlcl9ydF9wb3J0X2RyaXZlciB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IElEIHdpdGggd2hpY2ggdGhlIHJlYWwtdGltZSBkcml2ZXIgZXhjaGFuZ2VzIGRhdGEKICogKHJlZ2lzdGVycyBmb3IgZXZlbnRzKS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfU0VSVklDRV9DTURfVU5SRUdJU1RFUl9SVF9QT1JUX0RSSVZFUgkweDAwMDEwMEUxCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9TRVJWSUNFX0NNRF9VTlJFR0lTVEVSX1JUX1BPUlRfRFJJVkVSCiAqIGNvbW1hbmQsIHdoaWNoIHVucmVnaXN0ZXJzIGEgcmVhbC10aW1lIHBvcnQgZHJpdmVyIGZyb20KICogdGhlIEFGRSBzZXJ2aWNlLgogKi8Kc3RydWN0IGFmZV9zZXJ2aWNlX2NtZF91bnJlZ2lzdGVyX3J0X3BvcnRfZHJpdmVyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFBvcnQgSUQgZnJvbSB3aGljaCB0aGUgcmVhbC10aW1lCiAqIGRyaXZlciB1bnJlZ2lzdGVycyBmb3IgZXZlbnRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TVEFSVCB0bwogKiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9FTkQKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uCSovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9FVkVOVF9SVF9QUk9YWV9QT1JUX1NUQVRVUwkweDAwMDEwMTA1CiNkZWZpbmUgQUZFX0VWRU5UWVBFX1JUX1BST1hZX1BPUlRfU1RBUlQJMAojZGVmaW5lIEFGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX1NUT1AJMQojZGVmaW5lIEFGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX0xPV19XQVRFUl9NQVJLCTIKI2RlZmluZSBBRkVfRVZFTlRZUEVfUlRfUFJPWFlfUE9SVF9ISUdIX1dBVEVSX01BUksJMwojZGVmaW5lIEFGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX0lOVkFMSUQJMHhGRkZGCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9FVkVOVF9SVF9QUk9YWV9QT1JUX1NUQVRVUwogKiBtZXNzYWdlLCB3aGljaCBzZW5kcyBhbiBldmVudCBmcm9tIHRoZSBBRkUgc2VydmljZQogKiB0byBhIHJlZ2lzdGVyZWQgY2xpZW50LgogKi8Kc3RydWN0IGFmZV9ldmVudF9ydF9wcm94eV9wb3J0X3N0YXR1cyB7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IElEIHRvIHdoaWNoIHRoZSBldmVudCBpcyBzZW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TVEFSVCB0bwogKiAjQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9FTkQKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZXZlbnR5cGU7Ci8qIFR5cGUgb2YgZXZlbnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX1NUQVJUCiAqIC0gI0FGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX1NUT1AKICogLSAjQUZFX0VWRU5UWVBFX1JUX1BST1hZX1BPUlRfTE9XX1dBVEVSX01BUksKICogLSAjQUZFX0VWRU5UWVBFX1JUX1BST1hZX1BPUlRfSElHSF9XQVRFUl9NQVJLCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9EQVRBX0NNRF9SVF9QUk9YWV9QT1JUX1dSSVRFX1YyIDB4MDAwMTAwRUQKCnN0cnVjdCBhZmVfcG9ydF9kYXRhX2NtZF9ydF9wcm94eV9wb3J0X3dyaXRlX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFR4IChtaWMpIHByb3h5IHBvcnQgSUQgd2l0aCB3aGljaCB0aGUgcmVhbC10aW1lCiAqIGRyaXZlciBleGNoYW5nZXMgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9hZGRyZXNzX2xzdzsKLyogTFNXIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZQogKiBkYXRhIGZyb20gdGhlIHJlYWwtdGltZSBzb3VyY2UKICogZGV2aWNlIG9uIGEgY2xpZW50LgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBidWZmZXJfYWRkcmVzc19tc3c7Ci8qIE1TVyBBZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUKICogZGF0YSBmcm9tIHRoZSByZWFsLXRpbWUgc291cmNlCiAqIGRldmljZSBvbiBhIGNsaWVudC4KICovCgoJdTMyCQkJCQltZW1fbWFwX2hhbmRsZTsKLyogQSBtZW1vcnkgbWFwIGhhbmRsZSBlbmNhcHN1bGF0aW5nIHNoYXJlZCBtZW1vcnkKICogYXR0cmlidXRlcyBpcyByZXR1cm5lZCBpZgogKiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUwogKiBjb21tYW5kIGlzIHN1Y2Nlc3NmdWwuCiAqIFN1cHBvcnRlZCBWYWx1ZXM6CiAqIC0gQW55IDMyIGJpdCB2YWx1ZQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhdmFpbGFibGVfYnl0ZXM7Ci8qIE51bWJlciBvZiB2YWxpZCBieXRlcyBhdmFpbGFibGUKICogaW4gdGhlIGJ1ZmZlciAoaW5jbHVkaW5nIGFsbAogKiBjaGFubmVsczogbnVtYmVyIG9mIGJ5dGVzIHBlcgogKiBjaGFubmVsID0gYXZhaWxhYmxlQnl0ZXN1bUNoYW5uZWxzKS4KICogU3VwcG9ydGVkIHZhbHVlczogPiAwCiAqCiAqIFRoaXMgZmllbGQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZnJhbWUKICogc2l6ZSBzcGVjaWZpZWQgaW4gdGhlICNBRkVfUE9SVF9BVURJT19JRl9DT05GSUcKICogY29tbWFuZCB0aGF0IHdhcyBzZW50IHRvIGNvbmZpZ3VyZSB0aGlzCiAqIHBvcnQuCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9EQVRBX0NNRF9SVF9QUk9YWV9QT1JUX1JFQURfVjIJMHgwMDAxMDBFRQoKLyogIFBheWxvYWQgb2YgdGhlCiAqICNBRkVfUE9SVF9EQVRBX0NNRF9SVF9QUk9YWV9QT1JUX1JFQURfVjIgY29tbWFuZCwgd2hpY2gKICogZGVsaXZlcnMgYW4gZW1wdHkgYnVmZmVyIHRvIHRoZSBBRkUgc2VydmljZS4gT24KICogYWNrbm93bGVkZ21lbnQsIGRhdGEgaXMgZmlsbGVkIGluIHRoZSBidWZmZXIuCiAqLwpzdHJ1Y3QgYWZlX3BvcnRfZGF0YV9jbWRfcnRfcHJveHlfcG9ydF9yZWFkX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiAgICAgICAgICAgICAgICAgIHBvcnRfaWQ7Ci8qIFJ4IHByb3h5IHBvcnQgSUQgd2l0aCB3aGljaCB0aGUgcmVhbC10aW1lCiAqIGRyaXZlciBleGNoYW5nZXMgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqIChUaGlzIG11c3QgYmUgYW4gUnggKHNwZWFrZXIpIHBvcnQuKQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBidWZmZXJfYWRkcmVzc19sc3c7Ci8qIExTVyBBZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSBzZW50IGZyb20gdGhlIEFGRQogKiBzZXJ2aWNlIHRvIGEgcmVhbC10aW1lIHNpbmsgZGV2aWNlIG9uIHRoZSBjbGllbnQuCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBidWZmZXJfYWRkcmVzc19tc3c7Ci8qIE1TVyBBZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSBzZW50IGZyb20gdGhlIEFGRQogKiBzZXJ2aWNlIHRvIGEgcmVhbC10aW1lIHNpbmsgZGV2aWNlIG9uIHRoZSBjbGllbnQuCiAqLwoKCQl1MzIJCQkJbWVtX21hcF9oYW5kbGU7Ci8qIEEgbWVtb3J5IG1hcCBoYW5kbGUgZW5jYXBzdWxhdGluZyBzaGFyZWQgbWVtb3J5IGF0dHJpYnV0ZXMgaXMKICogcmV0dXJuZWQgaWYgQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZCBpcwogKiBzdWNjZXNzZnVsLgogKiBTdXBwb3J0ZWQgVmFsdWVzOgogKiAtIEFueSAzMiBiaXQgdmFsdWUKICovCgoJdTMyICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX2J5dGVzOwovKiBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIgKGluY2x1ZGluZyBhbGwKICogY2hhbm5lbHMpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICogVGhpcyBmaWVsZCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBmcmFtZSBzaXplIHNwZWNpZmllZCBpbiB0aGUKICogI0FGRV9QT1JUX0FVRElPX0lGX0NPTkZJRyBjb21tYW5kIHRoYXQgd2FzIHNlbnQgdG8gY29uZmlndXJlCiAqIHRoaXMgcG9ydC4KICovCn0gX19wYWNrZWQ7CgovKiBUaGlzIG1vZHVsZSBJRCBpcyByZWxhdGVkIHRvIGRldmljZSBjb25maWd1cmluZyBsaWtlIEkyUyxQQ00sCiAqIEhETUksIFNMSU1CdXMgZXRjLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBmb2xsb3dpbmcgcGFyYW1ldGVyIGlkcy4KICogLSAjQUZFX1BBUkFNX0lEX0kyU19DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX1BDTV9DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX0RJR0lfTUlDX0NPTkZJRwogKiAtICNBRkVfUEFSQU1fSURfSERNSV9DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX0lOVEVSTkFMX0JUX0ZNX0NPTkZJRwogKiAtICNBRkVfUEFSQU1fSURfU0xJTUJVU19DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX1JUX1BST1hZX0NPTkZJRwogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFICAgIDB4MDAwMTAyMEMKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV84SyAgICAgICAgICAgODAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SyAgICAgICAgICAxNjAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SyAgICAgICAgICA0ODAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SyAgICAgICAgICA5NjAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzE3NlA0SyAgICAgICAxNzY0MDAKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV8xOTJLICAgICAgICAgMTkyMDAwCiNkZWZpbmUgQUZFX1BPUlRfU0FNUExFX1JBVEVfMzUyUDhLICAgICAgIDM1MjgwMAojZGVmaW5lIEFGRV9MSU5FQVJfUENNX0RBVEEJCQkJMHgwCiNkZWZpbmUgQUZFX05PTl9MSU5FQVJfREFUQQkJCQkweDEKI2RlZmluZSBBRkVfTElORUFSX1BDTV9EQVRBX1BBQ0tFRF82MDk1OCAweDIKI2RlZmluZSBBRkVfTk9OX0xJTkVBUl9EQVRBX1BBQ0tFRF82MDk1OCAweDMKI2RlZmluZSBBRkVfR0VORVJJQ19DT01QUkVTU0VEICAgICAgICAgICAweDgKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgSTJTIGludGVyZmFjZSAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9JMlNfQ09ORklHCTB4MDAwMTAyMEQKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fSTJTX0NPTkZJRwkweDEKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIEkyUyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8KICogc2VyaWFsIGRhdGEgd2lyZSBudW1iZXIgMS0zIChTRDMpLgogKi8KI2RlZmluZSBBRkVfUE9SVF9JMlNfU0QwICAgICAgICAgICAgICAgICAgICAgMHgxCiNkZWZpbmUgQUZFX1BPUlRfSTJTX1NEMSAgICAgICAgICAgICAgICAgICAgIDB4MgojZGVmaW5lIEFGRV9QT1JUX0kyU19TRDIgICAgICAgICAgICAgICAgICAgICAweDMKI2RlZmluZSBBRkVfUE9SVF9JMlNfU0QzICAgICAgICAgICAgICAgICAgICAgMHg0CiNkZWZpbmUgQUZFX1BPUlRfSTJTX1FVQUQwMSAgICAgICAgICAgICAgICAgIDB4NQojZGVmaW5lIEFGRV9QT1JUX0kyU19RVUFEMjMgICAgICAgICAgICAgICAgICAweDYKI2RlZmluZSBBRkVfUE9SVF9JMlNfNkNIUyAgICAgICAgICAgICAgICAgICAgMHg3CiNkZWZpbmUgQUZFX1BPUlRfSTJTXzhDSFMgICAgICAgICAgICAgICAgICAgIDB4OAojZGVmaW5lIEFGRV9QT1JUX0kyU19NT05PICAgICAgICAgICAgICAgICAgICAweDAKI2RlZmluZSBBRkVfUE9SVF9JMlNfU1RFUkVPICAgICAgICAgICAgICAgICAgMHgxCiNkZWZpbmUgQUZFX1BPUlRfQ09ORklHX0kyU19XU19TUkNfRVhURVJOQUwgIDB4MAojZGVmaW5lIEFGRV9QT1JUX0NPTkZJR19JMlNfV1NfU1JDX0lOVEVSTkFMICAweDEKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0kyU19DT05GSUcKICogY29tbWFuZCdzIChJMlMgY29uZmlndXJhdGlvbgogKiBwYXJhbWV0ZXIpLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9pMnNfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIGkyc19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgSTJTCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX0kyU19DT05GSUcKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbW9kZTsKLyogSTJTIGxpbmVzIGFuZCBtdWx0aWNoYW5uZWwgb3BlcmF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9JMlNfU0QwCiAqIC0gI0FGRV9QT1JUX0kyU19TRDEKICogLSAjQUZFX1BPUlRfSTJTX1NEMgogKiAtICNBRkVfUE9SVF9JMlNfU0QzCiAqIC0gI0FGRV9QT1JUX0kyU19RVUFEMDEKICogLSAjQUZFX1BPUlRfSTJTX1FVQUQyMwogKiAtICNBRkVfUE9SVF9JMlNfNkNIUwogKiAtICNBRkVfUE9SVF9JMlNfOENIUwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBtb25vX3N0ZXJlbzsKLyogU3BlY2lmaWVzIG1vbm8gb3Igc3RlcmVvLiBUaGlzIGFwcGxpZXMgb25seSB3aGVuCiAqIGEgc2luZ2xlIEkyUyBsaW5lIGlzIHVzZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX0kyU19NT05PCiAqIC0gI0FGRV9QT1JUX0kyU19TVEVSRU8KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgd3Nfc3JjOwovKiBXb3JkIHNlbGVjdCBzb3VyY2U6IGludGVybmFsIG9yIGV4dGVybmFsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9DT05GSUdfSTJTX1dTX1NSQ19FWFRFUk5BTAogKiAtICNBRkVfUE9SVF9DT05GSUdfSTJTX1dTX1NSQ19JTlRFUk5BTAogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTZLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV85NksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTkySwogKi8KCgl1MTYJCQkJCWRhdGFfZm9ybWF0OwovKiBkYXRhIGZvcm1hdAogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNMSU5FQVJfUENNX0RBVEEKICogLSAjTk9OX0xJTkVBUl9EQVRBCiAqIC0gI0xJTkVBUl9QQ01fREFUQV9QQUNLRURfSU5fNjA5NTgKICogLSAjTk9OX0xJTkVBUl9EQVRBX1BBQ0tFRF9JTl82MDk1OAogKi8KCQl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KfSBfX3BhY2tlZDsKCi8qCiAqIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgUENNIGludGVyZmFjZQogKi8KCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NQRElGX0NPTkZJRyAweDEKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fU1BESUZfQ0hfU1RBVFVTX0NPTkZJRyAweDEKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fU1BESUZfQ0xLX0NPTkZJRyAweDEKI2RlZmluZSBBRkVfQ0hfU1RBVFVTX0EgMQojZGVmaW5lIEFGRV9DSF9TVEFUVVNfQiAyCgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUERJRl9DT05GSUcgMHgwMDAxMDI0NAojZGVmaW5lIEFGRV9QQVJBTV9JRF9DSF9TVEFUVVNfQ09ORklHIDB4MDAwMTAyNDUKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BESUZfQ0xLX0NPTkZJRyAweDAwMDEwMjQ2CgojZGVmaW5lIEFGRV9QT1JUX0NMS19ST09UX0xQQVBMTCAweDMKI2RlZmluZSBBRkVfUE9SVF9DTEtfUk9PVF9MUEFRNlBMTCAgIDB4NAoKc3RydWN0IGFmZV9wYXJhbV9pZF9zcGRpZl9jZmcgewovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBTUERJRgogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9TUERJRl9DT05GSUcKICovCgl1MzIJc3BkaWZfY2ZnX21pbm9yX3ZlcnNpb247CgovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yMl8wNUsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzJLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ0XzFLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV85NksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTc2XzRLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksKICovCgl1MzIJc2FtcGxlX3JhdGU7CgovKiBkYXRhIGZvcm1hdAogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfTElORUFSX1BDTV9EQVRBCiAqIC0gI0FGRV9OT05fTElORUFSX0RBVEEKICovCgl1MTYJZGF0YV9mb3JtYXQ7Ci8qIE51bWJlciBvZiBjaGFubmVscyBzdXBwb3J0ZWQgYnkgdGhlIHBvcnQKICogLSBQQ00gLSAxLCBDb21wcmVzc2VkIENhc2UgLSAyCiAqLwoJdTE2CW51bV9jaGFubmVsczsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCXUxNgliaXRfd2lkdGg7Ci8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCXUxNglyZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2hfc3RhdHVzX2NmZyB7Cgl1MzIgY2hfc3RhdHVzX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIGNoYW5uZWwKICogc3RhdHVzIGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgc3VwcG9ydGVkIHZlcnNpb24gaXMgMQogKi8KCgl1MzIgc3RhdHVzX3R5cGU7Ci8qIEluZGljYXRlIGlmIHRoZSBjaGFubmVsIHN0YXR1cyBpcyBmb3IgY2hhbm5lbCBBIG9yIEIKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX0NIX1NUQVRVU19BCiAqIC0gI0FGRV9DSF9TVEFUVVNfQgogKi8KCgl1OCBzdGF0dXNfYml0c1syNF07Ci8qIENoYW5uZWwgc3RhdHVzIC0gMTkyIGJpdHMgZm9yIGNoYW5uZWwKICogQnl0ZSBvcmRlcmluZyBhcyBkZWZpbmVkIGJ5IElFQzYwOTU4LTMKICovCgoJdTggc3RhdHVzX21hc2tbMjRdOwovKiBDaGFubmVsIHN0YXR1cyB3aXRoIG1hc2sgYml0cyAxIHdpbGwgYmUgYXBwbGllZC4KICogQnl0ZSBvcmRlcmluZyBhcyBkZWZpbmVkIGJ5IElFQzYwOTU4LTMKICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NwZGlmX2Nsa19jZmcgewoJdTMyIGNsa19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiBTUERJRgogKiBpbnRlcmZhY2UgY2xvY2sgY29uZmlndXJhdGlvbi4gQ3VycmVudCBzdXBwb3J0ZWQgdmVyc2lvbgogKiBpcyAxCiAqLwoKCXUzMiBjbGtfdmFsdWU7Ci8qIFNwZWNpZmllcyB0aGUgY2xvY2sgZnJlcXVlbmN5IGluIEh6IHRvIHNldAogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAwIC0gRGlzYWJsZSB0aGUgY2xvY2sKICogMiAoYnlwaGFzZSkgKiAzMiAoNjA5NTggc3ViZnJhbWUgc2l6ZSkgKiBzYW1wbGluZyByYXRlICogMgogKiAoY2hhbm5lbHMgQSBhbmQgQikKICovCgoJdTMyIGNsa19yb290OwovKiBTcGVjaWZpZXMgU1BESUYgcm9vdCBjbGsgc291cmNlCiAqIFN1cHBvcnRlZCBWYWx1ZXM6CiAqIC0gI0FGRV9QT1JUX0NMS19ST09UX0xQQVBMTAogKiAtICNBRkVfUE9SVF9DTEtfUk9PVF9MUEFRNlBMTAogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BkaWZfY2xrX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgICAgICAgICAgICAgICBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiAgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICAgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NwZGlmX2Nsa19jZmcgY2xrX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BkaWZfY2hzdGF0dXNfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICAgICAgICAgICAgIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyICBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgICBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2hfc3RhdHVzX2NmZyBjaF9zdGF0dXM7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwZGlmX3BvcnRfY29uZmlnIHsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2ZnICAgICAgICAgICAgY2ZnOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zcGRpZl9jaF9zdGF0dXNfY2ZnICBjaF9zdGF0dXM7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9QQ01fQ09ORklHICAgICAgICAweDAwMDEwMjBFCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1BDTV9DT05GSUcJMHgxCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgYXV4aWxpYXJ5IFBDTSBzeW5jaHJvbml6YXRpb24gc2lnbmFsCiAqIHByb3ZpZGVkIGJ5IGFuIGV4dGVybmFsIHNvdXJjZS4KICovCgojZGVmaW5lIEFGRV9QT1JUX1BDTV9TWU5DX1NSQ19FWFRFUk5BTCAweDAKLyoJRW51bWVyYXRpb24gZm9yIHRoZSBhdXhpbGlhcnkgUENNIHN5bmNocm9uaXphdGlvbiBzaWduYWwKICogcHJvdmlkZWQgYnkgYW4gaW50ZXJuYWwgc291cmNlLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fU1lOQ19TUkNfSU5URVJOQUwgIDB4MQovKglFbnVtZXJhdGlvbiBmb3IgdGhlIFBDTSBjb25maWd1cmF0aW9uIGF1eF9tb2RlIHBhcmFtZXRlciwKICogd2hpY2ggY29uZmlndXJlcyB0aGUgYXV4aWxpYXJ5IFBDTSBpbnRlcmZhY2UgdG8gdXNlCiAqIHNob3J0IHN5bmNocm9uaXphdGlvbi4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0FVWF9NT0RFX1BDTSAgMHgwCi8qCiAqIEVudW1lcmF0aW9uIGZvciB0aGUgUENNIGNvbmZpZ3VyYXRpb24gYXV4X21vZGUgcGFyYW1ldGVyLAogKiB3aGljaCBjb25maWd1cmVzIHRoZSBhdXhpbGlhcnkgUENNIGludGVyZmFjZSB0byB1c2UgbG9uZwogKiBzeW5jaHJvbml6YXRpb24uCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9BVVhfTU9ERV9BVVggICAgMHgxCi8qCiAqIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBmcmFtZSB0byA4LgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfOCAgMHgwCi8qCiAqIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBmcmFtZSB0byAxNi4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzE2ICAgMHgxCgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gZnJhbWUgdG8gMzIuKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMzIgMHgyCgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gZnJhbWUgdG8gNjQuKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfNjQgICAweDMKCi8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBmcmFtZSB0byAxMjguKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMTI4IDB4NAoKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIGZyYW1lIHRvIDI1Ni4qLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8yNTYgMHg1CgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24KICogcXVhbnR5cGUgcGFyYW1ldGVyIHRvIEEtbGF3IHdpdGggbm8gcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0FMQVdfTk9QQURESU5HIDB4MAoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIHF1YW50eXBlCiAqIHBhcmFtZXRlciB0byBtdS1sYXcgd2l0aCBubyBwYWRkaW5nLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fTVVMQVdfTk9QQURESU5HIDB4MQovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gcXVhbnR5cGUKICogcGFyYW1ldGVyIHRvIGxpbmVhciB3aXRoIG5vIHBhZGRpbmcuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9MSU5FQVJfTk9QQURESU5HIDB4MgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gcXVhbnR5cGUKICogcGFyYW1ldGVyIHRvIEEtbGF3IHdpdGggcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0FMQVdfUEFERElORyAgMHgzCi8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBxdWFudHlwZQogKiBwYXJhbWV0ZXIgdG8gbXUtbGF3IHdpdGggcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX01VTEFXX1BBRERJTkcgMHg0Ci8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBxdWFudHlwZQogKiBwYXJhbWV0ZXIgdG8gbGluZWFyIHdpdGggcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0xJTkVBUl9QQURESU5HIDB4NQovKglFbnVtZXJhdGlvbiBmb3IgZGlzYWJsaW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbgogKiBjdHJsX2RhdGFfb3V0X2VuYWJsZSBwYXJhbWV0ZXIuCiAqIFRoZSBQQ00gYmxvY2sgaXMgdGhlIG9ubHkgbWFzdGVyLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQ1RSTF9EQVRBX09FX0RJU0FCTEUgMHgwCi8qCiAqIEVudW1lcmF0aW9uIGZvciBlbmFibGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24KICogY3RybF9kYXRhX291dF9lbmFibGUgcGFyYW1ldGVyLiBUaGUgUENNIGJsb2NrIHNoYXJlcwogKiB0aGUgc2lnbmFsIHdpdGggb3RoZXIgbWFzdGVycy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0NUUkxfREFUQV9PRV9FTkFCTEUgIDB4MQoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfUENNX0NPTkZJRyBjb21tYW5kJ3MKICogKFBDTSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcikuCiAqLwoKc3RydWN0IGFmZV9wYXJhbV9pZF9wY21fY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIHBjbV9jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQVVYIFBDTQogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9QQ01fQ09ORklHCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGF1eF9tb2RlOwovKiBQQ00gc3luY2hyb25pemF0aW9uIHNldHRpbmcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1BDTV9BVVhfTU9ERV9QQ00KICogLSAjQUZFX1BPUlRfUENNX0FVWF9NT0RFX0FVWAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBzeW5jX3NyYzsKLyogU3luY2hyb25pemF0aW9uIHNvdXJjZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfUENNX1NZTkNfU1JDX0VYVEVSTkFMCiAqIC0gI0FGRV9QT1JUX1BDTV9TWU5DX1NSQ19JTlRFUk5BTAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBmcmFtZV9zZXR0aW5nOwovKiBOdW1iZXIgb2YgYml0cyBwZXIgZnJhbWUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV84CiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8xNgogKiAtICNBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMzIKICogLSAjQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzY0CiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8xMjgKICogLSAjQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzI1NgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBxdWFudHlwZTsKLyogUENNIHF1YW50aXphdGlvbiB0eXBlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9QQ01fQUxBV19OT1BBRERJTkcKICogLSAjQUZFX1BPUlRfUENNX01VTEFXX05PUEFERElORwogKiAtICNBRkVfUE9SVF9QQ01fTElORUFSX05PUEFERElORwogKiAtICNBRkVfUE9SVF9QQ01fQUxBV19QQURESU5HCiAqIC0gI0FGRV9QT1JUX1BDTV9NVUxBV19QQURESU5HCiAqIC0gI0FGRV9QT1JUX1BDTV9MSU5FQVJfUEFERElORwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBjdHJsX2RhdGFfb3V0X2VuYWJsZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFBDTSBibG9jayBzaGFyZXMgdGhlIGRhdGEtb3V0CiAqIHNpZ25hbCB0byB0aGUgZHJpdmUgd2l0aCBvdGhlciBtYXN0ZXJzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9QQ01fQ1RSTF9EQVRBX09FX0RJU0FCTEUKICogLSAjQUZFX1BPUlRfUENNX0NUUkxfREFUQV9PRV9FTkFCTEUKICovCgkJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA0CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHNsb3RfbnVtYmVyX21hcHBpbmdbNF07Ci8qIFNwZWNpZmllcyB0aGUgc2xvdCBudW1iZXIgZm9yIHRoZSBlYWNoIGNoYW5uZWwgaW4KICogbXVsdGkgY2hhbm5lbCBzY2VuYXJpby4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAzMgogKi8KfSBfX3BhY2tlZDsKCi8qCiAqIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgRElHSSBNSUMgaW50ZXJmYWNlCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9ESUdJX01JQ19DT05GSUcJMHgwMDAxMDIwRgovKiAgVGhpcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBuZXcKICogICBhZGRpdGlvbnMgdG8gdGhlIGNvbmZpZyBpbnRlcmZhY2UgaW4gZnV0dXJlIGluIGJhY2t3YXJkCiAqICAgY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9ESUdJX01JQ19DT05GSUcgMHgxCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgZGlnaXRhbCBtaWMgY29uZmlndXJhdGlvbgogKiBjaGFubmVsX21vZGUgcGFyYW1ldGVyIHRvIGxlZnQgMC4KICovCgojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfTEVGVDAgIDB4MQoKLypFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgZGlnaXRhbCBtaWMgY29uZmlndXJhdGlvbgogKiBjaGFubmVsX21vZGUgcGFyYW1ldGVyIHRvIHJpZ2h0IDAuCiAqLwoKCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9SSUdIVDAgIDB4MgoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byBsZWZ0IDEuCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9ESUdJX01JQ19NT0RFX0xFRlQxICAweDMKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBkaWdpdGFsIG1pYyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8gcmlnaHQgMS4KICovCgojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfUklHSFQxIDB4NAoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byBzdGVyZW8gMC4KICovCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9TVEVSRU8wICAweDUKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBkaWdpdGFsIG1pYyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8gc3RlcmVvIDEuCiAqLwoKCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9TVEVSRU8xICAgIDB4NgoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byBxdWFkLgogKi8KCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9RVUFEICAgICAweDcKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0RJR0lfTUlDX0NPTkZJRyBjb21tYW5kJ3MKICogKERJR0kgTUlDIGNvbmZpZ3VyYXRpb24KICogcGFyYW1ldGVyKS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfZGlnaV9taWNfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIGRpZ2lfbWljX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBESUdJIE1pYwogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9ESUdJX01JQ19DT05GSUcKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgY2hhbm5lbF9tb2RlOwovKiBEaWdpdGFsIG1pYyBhbmQgbXVsdGljaGFubmVsIG9wZXJhdGlvbi4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9MRUZUMAogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX1JJR0hUMAogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX0xFRlQxCiAqIC0gI0FGRV9QT1JUX0RJR0lfTUlDX01PREVfUklHSFQxCiAqIC0gI0FGRV9QT1JUX0RJR0lfTUlDX01PREVfU1RFUkVPMAogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX1NURVJFTzEKICogLSAjQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9RVUFECiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLCiAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBIRE1JIGludGVyZmFjZSAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9IRE1JX0NPTkZJRyAgICAgMHgwMDAxMDIxMAoKLyogVGhpcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBuZXcKICogYWRkaXRpb25zIHRvIHRoZSBjb25maWcgaW50ZXJmYWNlIGluIGZ1dHVyZSBpbiBiYWNrd2FyZAogKiBjb21wYXRpYmxlIG1hbm5lci4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0hETUlfQ09ORklHIDB4MQoKLyogUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9IRE1JX0NPTkZJRyBjb21tYW5kLAogKiB3aGljaCBjb25maWd1cmVzIGEgbXVsdGljaGFubmVsIEhETUkgYXVkaW8gaW50ZXJmYWNlLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9oZG1pX211bHRpX2NoYW5fYXVkaW9fY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIGhkbWlfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEhETUkKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fSERNSV9DT05GSUcKICovCgp1MTYgICAgICAgICAgICAgICAgICBkYXRhdHlwZTsKLyogZGF0YSB0eXBlCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0xJTkVBUl9QQ01fREFUQQogKiAtICNOT05fTElORUFSX0RBVEEKICogLSAjTElORUFSX1BDTV9EQVRBX1BBQ0tFRF9JTl82MDk1OAogKiAtICNOT05fTElORUFSX0RBVEFfUEFDS0VEX0lOXzYwOTU4CiAqLwoKdTE2ICAgICAgICAgICAgICAgICAgY2hhbm5lbF9hbGxvY2F0aW9uOwovKiBIRE1JIGNoYW5uZWwgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgcHJvZ3JhbW1pbmcgYW4gSERNSQogKiBmcmFtZS4gVGhlIGRlZmF1bHQgaXMgMCAoU3RlcmVvKS4KICoKICogVGhpcyBpbmZvcm1hdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBIRE1JIHN0YW5kYXJkLCBDRUEgODYxLUQKICogKHJlZmVyIHRvIEB4aHlwZXJyZWZ7UzEsW1MxXX0pLiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIGlzIGFsc28KICogaW5mZXJyZWQgZnJvbSB0aGlzIHBhcmFtZXRlci4KICovCgoKdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCiAqIC0gMjIwNTAsIDQ0MTAwLCAxNzY0MDAgZm9yIGNvbXByZXNzZWQgc3RyZWFtcwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgkJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgovKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIEJUIG9yIEZNKFJJVkEpIGludGVyZmFjZSAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9JTlRFUk5BTF9CVF9GTV9DT05GSUcgIDB4MDAwMTAyMTEKCi8qIFRoaXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgbmV3CiAqIGFkZGl0aW9ucyB0byB0aGUgY29uZmlnIGludGVyZmFjZSBpbiBmdXR1cmUgaW4gYmFja3dhcmQKICogY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9JTlRFUk5BTF9CVF9GTV9DT05GSUcJMHgxCgovKiBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0lOVEVSTkFMX0JUX0ZNX0NPTkZJRwogKiBjb21tYW5kJ3MgQlQgdm9pY2UvQlQgYXVkaW8vRk0gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2ludGVybmFsX2J0X2ZtX2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBidF9mbV9jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQlQgYW5kIEZNCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX0lOVEVSTkFMX0JUX0ZNX0NPTkZJRwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAyCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2CiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SyAob25seSBmb3IgQlRTQ08pCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SyAob25seSBmb3IgQlRTQ08pCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SyAoRk0gYW5kIEEyRFApCiAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBTTElNQlVTIGludGVyZmFjZSB1c2luZwogKiBzaGFyZWQgY2hhbm5lbCBhcHByb2FjaC4KICovCgoKI2RlZmluZSBBRkVfUEFSQU1fSURfU0xJTUJVU19DT05GSUcgICAgMHgwMDAxMDIxMgoKLyogVGhpcyB2ZXJzaW9uIGluZm9ybWF0aW9uIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSBuZXcKICogYWRkaXRpb25zIHRvIHRoZSBjb25maWcgaW50ZXJmYWNlIGluIGZ1dHVyZSBpbiBiYWNrd2FyZAogKiBjb21wYXRpYmxlIG1hbm5lci4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NMSU1CVVNfQ09ORklHIDB4MQoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgU0xJTWJ1cyBkZXZpY2UgSUQgMS4gKi8KI2RlZmluZSBBRkVfU0xJTUJVU19ERVZJQ0VfMSAgICAgICAgICAgMHgwCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyBTTElNYnVzIGRldmljZSBJRCAyLiAqLwojZGVmaW5lIEFGRV9TTElNQlVTX0RFVklDRV8yICAgICAgICAgIDB4MQoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFNMSU1idXMgZGF0YSBmb3JtYXRzLiAqLwojZGVmaW5lIEFGRV9TQl9EQVRBX0ZPUk1BVF9OT1RfSU5ESUNBVEVEIDB4MAoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN0cmVhbXMgcGVyCiAqIGRldmljZS4KICovCgojZGVmaW5lIEFGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVAkweDgKCiNkZWZpbmUgQUZFX1BPUlRfTUFYX0FVRElPX0NIQU5fQ05UX1YyCTB4MjAKCi8qIFBheWxvYWQgb2YgdGhlICNBRkVfUE9SVF9DTURfU0xJTUJVU19DT05GSUcgY29tbWFuZCdzIFNMSU1idXMKICogcG9ydCBjb25maWd1cmF0aW9uIHBhcmFtZXRlci4KICovCgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NsaW1idXNfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIHNiX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBTTElNQlVTCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX1NMSU1CVVNfQ09ORklHCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHNsaW1idXNfZGV2X2lkOwovKiBTTElNYnVzIGhhcmR3YXJlIGRldmljZSBJRCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gaGFuZGxlCiAqIG11bHRpcGxlIFNMSU1idXMgaGFyZHdhcmUgYmxvY2tzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtICNBRkVfU0xJTUJVU19ERVZJQ0VfMSAtICNBRkVfU0xJTUJVU19ERVZJQ0VfMgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0OwovKiBEYXRhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIFNMSU1idXMgaGFyZHdhcmUuIFRoZSBkZWZhdWx0IGlzCiAqIDAgKCNBRkVfU0JfREFUQV9GT1JNQVRfTk9UX0lORElDQVRFRCksIHdoaWNoIGluZGljYXRlcyB0aGUKICogaGFyZHdhcmUgZG9lcyBub3QgcGVyZm9ybSBhbnkgZm9ybWF0IGNvbnZlcnNpb25zIGJlZm9yZSB0aGUgZGF0YQogKiB0cmFuc2Zlci4KICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvICNBRkVfUE9SVF9NQVhfQVVESU9fQ0hBTl9DTlQKICovCgoJdTggIHNoYXJlZF9jaF9tYXBwaW5nW0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVF07Ci8qIE1hcHBpbmcgb2Ygc2hhcmVkIGNoYW5uZWwgSURzICgxMjggdG8gMjU1KSB0byB3aGljaCB0aGUKICogbWFzdGVyIHBvcnQgaXMgdG8gYmUgY29ubmVjdGVkLgogKiBTaGFyZWRfY2hhbm5lbF9tYXBwaW5nW2ldIHJlcHJlc2VudHMgdGhlIHNoYXJlZCBjaGFubmVsIGFzc2lnbmVkCiAqIGZvciBhdWRpbyBjaGFubmVsIGkgaW4gbXVsdGljaGFubmVsIGF1ZGlvIGRhdGEuCiAqLwoKCXUzMiAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksKICovCn0gX19wYWNrZWQ7CgoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5IEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX1BBUkFNUyB0byBjb25maWd1cmUKICogVVNCIGF1ZGlvIGRldmljZSBwYXJhbWV0ZXIuIEl0IHNob3VsZCBiZSB1c2VkIHdpdGgKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX1BBUkFNUyAgICAweDAwMDEwMkE1CgoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIHRvIHNldCB0aGUgZW5kaWFubmVzcyB2YWx1ZSBmb3IgdGhlCiAqIFVTQiBhdWRpbyBkZXZpY2UuIEl0IHNob3VsZCBiZSB1c2VkIHdpdGgKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX0xQQ01fRk1UIDB4MDAwMTAyQUEKCi8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVVNCIGF1ZGlvICBjb25maWd1cmF0aW9uICovCiNkZWZpbmUgQUZFX0FQSV9NSU5JT1JfVkVSU0lPTl9VU0JfQVVESU9fQ09ORklHIDB4MQoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIHRvIHNldCB0aGUgbGF0ZW5jeSBtb2RlIG9mIHRoZQogKiBVU0IgYXVkaW8gZGV2aWNlLgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfUE9SVF9MQVRFTkNZX01PREVfQ09ORklHICAweDAwMDEwMkIzCgovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIFVTQiBhdWRpbyBsYXRlbmN5IG1vZGUgKi8KI2RlZmluZSBBRkVfQVBJX01JTk9SX1ZFUlNJT05fVVNCX0FVRElPX0xBVEVOQ1lfTU9ERSAweDEKCi8qIFN1cHBvcnRlZCBBRkUgcG9ydCBsYXRlbmN5IG1vZGVzICovCiNkZWZpbmUgQUZFX1BPUlRfREVGQVVMVF9MQVRFTkNZX01PREUgICAgIDB4MAojZGVmaW5lIEFGRV9QT1JUX0xPV19MQVRFTkNZX01PREUgICAgICAgICAweDEKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fREVWX1BBUkFNUyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19kZXZfcGFyYW1zIHsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBVU0IgYXVkaW8gZGV2aWNlIHBhcmFtZXRlci4KICogU3VwcG9ydGVkIHZhbHVlczogQUZFX0FQSV9NSU5JT1JfVkVSU0lPTl9VU0JfQVVESU9fQ09ORklHCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2ZnX21pbm9yX3ZlcnNpb247Ci8qIFRva2VuIG9mIGFjdHVhbCBlbmQgVVNCIGFkdWlvIGRldmljZSAqLwoJdTMyICAgICAgICAgICAgICAgICAgZGV2X3Rva2VuOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9pZF91c2JfYXVkaW9fZGV2X2xwY21fZm10IHsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBVU0IgYXVkaW8gZGV2aWNlIHBhcmFtZXRlci4KICogU3VwcG9ydGVkIHZhbHVlczogQUZFX0FQSV9NSU5JT1JfVkVSU0lPTl9VU0JfQVVESU9fQ09ORklHCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2ZnX21pbm9yX3ZlcnNpb247Ci8qIEVuZGlhbm5lc3Mgb2YgYWN0dWFsIGVuZCBVU0IgYXVkaW8gZGV2aWNlICovCgl1MzIgICAgICAgICAgICAgICAgICBlbmRpYW47Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19kZXZfbGF0ZW5jeV9tb2RlIHsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBVU0IgYXVkaW8gZGV2aWNlIHBhcmFtZXRlci4KICogU3VwcG9ydGVkIHZhbHVlczogQUZFX0FQSV9NSU5PUl9WRVJTSU9OX1VTQl9BVURJT19MQVRFTkNZX01PREUKICovCgl1MzIgICAgICAgICAgICAgICAgICBtaW5vcl92ZXJzaW9uOwovKiBsYXRlbmN5IG1vZGUgZm9yIHRoZSBVU0IgYXVkaW8gZGV2aWNlICovCgl1MzIgICAgICAgICAgICAgICAgICBtb2RlOwp9IF9fcGFja2VkOwoKCgovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHVzZWQgYnkgQUZFX1BBUkFNX0lEX1VTQl9BVURJT19DT05GSUcgdG8gY29uZmlndXJlCiAqIFVTQiBhdWRpbyBpbnRlcmZhY2UuIEl0IHNob3VsZCBiZSB1c2VkIHdpdGggQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fQ09ORklHICAgIDB4MDAwMTAyQTQKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fQ09ORklHIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfdXNiX2F1ZGlvX2NmZyB7Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVVNCIGF1ZGlvIGRldmljZSBjb25maWd1cmF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBRkVfQVBJX01JTklPUl9WRVJTSU9OX1VTQl9BVURJT19DT05GSUcKICovCgl1MzIgICAgICAgICAgICAgICAgICBjZmdfbWlub3JfdmVyc2lvbjsKLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzExMDI1CiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMTJLCiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMTZLCiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMjIwNTAKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV8yNEsKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV8zMksKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV80NFAxSwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksKICovCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogTnVtYmVyIG9mIGNoYW5uZWxzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIGFuZCAyCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBEYXRhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIFVTQi4gVGhlIHN1cHBvcnRlZCB2YWx1ZSBpcwogKiAwICgjQUZFX1VTQl9BVURJT19EQVRBX0ZPUk1BVF9MSU5FQVJfUENNKS4KICovCgl1MTYgICAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdDsKLyogdGhpcyBmaWVsZCBtdXN0IGJlIDAgKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBkZXZpY2UgdG9rZW4gb2YgYWN0dWFsIGVuZCBVU0IgYWR1aW8gZGV2aWNlICovCgl1MzIgICAgICAgICAgICAgICAgICBkZXZfdG9rZW47Ci8qIGVuZGlhbm5lc3Mgb2YgdGhpcyBpbnRlcmZhY2UgKi8KCXUzMiAgICAgICAgICAgICAgICAgIGVuZGlhbjsKLyogc2VydmljZSBpbnRlcnZhbCAqLwoJdTMyICAgICAgICAgICAgICAgICAgc2VydmljZV9pbnRlcnZhbDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfdXNiX2F1ZGlvX2Rldl9wYXJhbV9jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgcGRhdGE7Cgl1bmlvbiB7CgkJc3RydWN0IGFmZV9wYXJhbV9pZF91c2JfYXVkaW9fZGV2X3BhcmFtcyB1c2JfZGV2OwoJCXN0cnVjdCBhZmVfcGFyYW1faWRfdXNiX2F1ZGlvX2Rldl9scGNtX2ZtdCBscGNtX2ZtdDsKCQlzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19kZXZfbGF0ZW5jeV9tb2RlIGxhdGVuY3lfY29uZmlnOwoJfTsKfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgUmVhbCBUaW1lIFByb3h5IGludGVyZmFjZS4gKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfUlRfUFJPWFlfQ09ORklHIDB4MDAwMTAyMTMKCi8qIFRoaXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgbmV3CiAqIGFkZGl0aW9ucyB0byB0aGUgY29uZmlnIGludGVyZmFjZSBpbiBmdXR1cmUgaW4gYmFja3dhcmQKICogY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9SVF9QUk9YWV9DT05GSUcgMHgxCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9SVF9QUk9YWV9DT05GSUcKICogY29tbWFuZCAocmVhbC10aW1lIHByb3h5IHBvcnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIpLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9ydF9wcm94eV9wb3J0X2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBydF9wcm94eV9jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiBydC1wcm94eQogKiBjb25maWcgaW50ZXJmYWNlLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBpbnRlcmxlYXZlZDsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdGhlIEFGRQogKiBpbnRlcmZhY2UgYW5kIHJlYWwtdGltZSBwb3J0IGlzIGludGVybGVhdmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDAgLS0gTm9uLWludGVybGVhdmVkIChzYW1wbGVzIGZyb20gZWFjaAogKiBjaGFubmVsIGFyZSBjb250aWd1b3VzIGluIHRoZSBidWZmZXIpIC0gMSAtLSBJbnRlcmxlYXZlZAogKiAoY29ycmVzcG9uZGluZyBzYW1wbGVzIGZyb20gZWFjaCBpbnB1dCBjaGFubmVsIGFyZSBpbnRlcmxlYXZlZAogKiB3aXRoaW4gdGhlIGJ1ZmZlcikKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIGZyYW1lX3NpemU7Ci8qIFNpemUgb2YgdGhlIGZyYW1lcyB0aGF0IGFyZSB1c2VkIGZvciBQQ00gZXhjaGFuZ2VzIHdpdGggdGhpcwogKiBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAsIGluIGJ5dGVzCiAqIEZvciBleGFtcGxlLCA1IG1zIGJ1ZmZlcnMgb2YgMTYgYml0cyBhbmQgMTYga0h6IHN0ZXJlbyBzYW1wbGVzCiAqIGlzIDUgbXMgKiAxNiBzYW1wbGVzL21zICogMiBieXRlcy9zYW1wbGUgKiAyIGNoYW5uZWxzID0gMzIwCiAqIGJ5dGVzLgogKi8KCXUxNiAgICAgICAgICAgICAgICAgIGppdHRlcl9hbGxvd2FuY2U7Ci8qIENvbmZpZ3VyZXMgdGhlIGFtb3VudCBvZiBqaXR0ZXIgdGhhdCB0aGUgcG9ydCB3aWxsIGFsbG93LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICogRm9yIGV4YW1wbGUsIGlmICsvLTEwIG1zIG9mIGppdHRlciBpcyBhbnRpY2lwYXRlZCBpbiB0aGUgdGltaW5nCiAqIG9mIHNlbmRpbmcgZnJhbWVzIHRvIHRoZSBwb3J0LCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaXMgMTYga0h6CiAqIG1vbm8gd2l0aCAxNi1iaXQgc2FtcGxlcywgdGhpcyBmaWVsZCBpcyAxMCBtcyAqIDE2IHNhbXBsZXMvbXMgKiAyCiAqIGJ5dGVzL3NhbXBsZSA9IDMyMC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbG93X3dhdGVyX21hcms7Ci8qIExvdyB3YXRlcm1hcmsgaW4gYnl0ZXMgKGluY2x1ZGluZyBhbGwgY2hhbm5lbHMpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRG8gbm90IHNlbmQgYW55IGxvdyB3YXRlcm1hcmsgZXZlbnRzCiAqIC0gPiAwIC0tIExvdyB3YXRlcm1hcmsgZm9yIHRyaWdnZXJpbmcgYW4gZXZlbnQKICogSWYgdGhlIG51bWJlciBvZiBieXRlcyBpbiBhbiBpbnRlcm5hbCBjaXJjdWxhciBidWZmZXIgaXMgbG93ZXIKICogdGhhbiB0aGlzIGxvd193YXRlcl9tYXJrIHBhcmFtZXRlciwgYSBMT1dfV0FURVJfTUFSSyBldmVudCBpcwogKiBzZW50IHRvIGFwcGxpY2F0aW9ucyAodmlhIHRoZSAjQUZFX0VWRU5UX1JUX1BST1hZX1BPUlRfU1RBVFVTCiAqIGV2ZW50KS4KICogVXNlIG9mIHdhdGVybWFyayBldmVudHMgaXMgb3B0aW9uYWwgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgaGlnaF93YXRlcl9tYXJrOwovKiBIaWdoIHdhdGVybWFyayBpbiBieXRlcyAoaW5jbHVkaW5nIGFsbCBjaGFubmVscykuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBEbyBub3Qgc2VuZCBhbnkgaGlnaCB3YXRlcm1hcmsgZXZlbnRzCiAqIC0gPiAwIC0tIEhpZ2ggd2F0ZXJtYXJrIGZvciB0cmlnZ2VyaW5nIGFuIGV2ZW50CiAqIElmIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gaW50ZXJuYWwgY2lyY3VsYXIgYnVmZmVyIGV4Y2VlZHMKICogVE9UQUxfQ0lSQ19CVUZfU0laRSBtaW51cyBoaWdoX3dhdGVyX21hcmssIGEgaGlnaCB3YXRlcm1hcmsgZXZlbnQKICogaXMgc2VudCB0byBhcHBsaWNhdGlvbnMgKHZpYSB0aGUgI0FGRV9FVkVOVF9SVF9QUk9YWV9QT1JUX1NUQVRVUwogKiBldmVudCkuCiAqIFRoZSB1c2Ugb2Ygd2F0ZXJtYXJrIGV2ZW50cyBpcyBvcHRpb25hbCBhbmQgZm9yIGRlYnVnZ2luZwogKiBwdXJwb3Nlcy4KICovCgoKCXUzMgkJCQkJc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gI0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIEZvciAzMiBiaXQgYWxpZ25tZW50LiAqLwp9IF9fcGFja2VkOwoKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgdGhlIFBzZXVkb3BvcnQgaW50ZXJmYWNlICovCgojZGVmaW5lIEFGRV9QQVJBTV9JRF9QU0VVRE9fUE9SVF9DT05GSUcJMHgwMDAxMDIxOQoKLyogVmVyc2lvbiBpbmZvcm1hdGlvbiB1c2VkIHRvIGhhbmRsZSBmdXR1cmUgYWRkaXRpb25zIHRvIHRoZSBjb25maWd1cmF0aW9uCiAqIGludGVyZmFjZSAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fUFNFVURPX1BPUlRfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSB0aW1pbmdfbW9kZSBwYXJhbWV0ZXIgdG8gZmFzdGVyIHRoYW4gcmVhbAogKiB0aW1lLgogKi8KI2RlZmluZSBBRkVfUFNFVURPUE9SVF9USU1JTkdfTU9ERV9GVFJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSB0aW1pbmdfbW9kZSBwYXJhbWV0ZXIgdG8gcmVhbCB0aW1lIHVzaW5nCiAqIHRpbWVycy4KICovCiNkZWZpbmUgQUZFX1BTRVVET1BPUlRfVElNSU5HX01PREVfVElNRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfUFNFVURPX1BPUlRfQ09ORklHIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfcHNldWRvX3BvcnRfY2ZnIHsKCXUzMiAgICAgICAgICAgICAgICAgIHBzZXVkX3BvcnRfY2ZnX21pbm9yX3ZlcnNpb247CgkvKgoJICogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgcHNldWRvcG9ydAoJICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCgkgKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7CgkvKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZSBhdCB2YWx1ZXMgMTYsIDI0ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwoJLyogTnVtYmVyIG9mIGNoYW5uZWxzIGF0IHZhbHVlcyAgMSB0byA4ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQ7CgkvKiBOb24tbGluZWFyIGRhdGEgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGUgcHNldWRvcG9ydCAoZm9yIGZ1dHVyZSB1c2UpLgoJICogQXQgdmFsdWVzICNBRkVfTElORUFSX1BDTV9EQVRBCgkgKi8KCgl1MTYgICAgICAgICAgICAgICAgICB0aW1pbmdfbW9kZTsKCS8qIEluZGljYXRlcyB3aGV0aGVyIHRoZSBwc2V1ZG9wb3J0IHN5bmNocm9uaXplcyB0byB0aGUgY2xvY2sgb3IKCSAqIG9wZXJhdGVzIGZhc3RlciB0aGFuIHJlYWwgdGltZS4KCSAqIGF0IHZhbHVlcwoJICogLSAjQUZFX1BTRVVET1BPUlRfVElNSU5HX01PREVfRlRSVAoJICogLSAjQUZFX1BTRVVET1BPUlRfVElNSU5HX01PREVfVElNRVIgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKCS8qIFNhbXBsZSByYXRlIGF0IHdoaWNoIHRoZSBwc2V1ZG9wb3J0IHdpbGwgcnVuLgoJICogYXQgdmFsdWVzCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzJLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTkySyBAdGFibGVidWxsZXRlbmQKCSAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfVERNX0NPTkZJRwkJMHgwMDAxMDI5RAoKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fVERNX0NPTkZJRyAgICAgICAgICAgICAgMQoKI2RlZmluZSBBRkVfUE9SVF9URE1fU0hPUlRfU1lOQ19CSVRfTU9ERSAgICAgICAgMAojZGVmaW5lIEFGRV9QT1JUX1RETV9MT05HX1NZTkNfTU9ERSAgICAgICAgICAgICAxCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NIT1JUX1NZTkNfU0xPVF9NT0RFICAgICAgIDIKCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NZTkNfU1JDX0VYVEVSTkFMICAgICAgICAgIDAKI2RlZmluZSBBRkVfUE9SVF9URE1fU1lOQ19TUkNfSU5URVJOQUwgICAgICAgICAgMQoKI2RlZmluZSBBRkVfUE9SVF9URE1fQ1RSTF9EQVRBX09FX0RJU0FCTEUgICAgICAgMAojZGVmaW5lIEFGRV9QT1JUX1RETV9DVFJMX0RBVEFfT0VfRU5BQkxFICAgICAgICAxCgojZGVmaW5lIEFGRV9QT1JUX1RETV9TWU5DX05PUk1BTCAgICAgICAgICAgICAgICAwCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NZTkNfSU5WRVJUICAgICAgICAgICAgICAgIDEKCiNkZWZpbmUgQUZFX1BPUlRfVERNX0RBVEFfREVMQVlfMF9CQ0xLX0NZQ0xFICAgIDAKI2RlZmluZSBBRkVfUE9SVF9URE1fREFUQV9ERUxBWV8xX0JDTEtfQ1lDTEUgICAgMQojZGVmaW5lIEFGRV9QT1JUX1RETV9EQVRBX0RFTEFZXzJfQkNMS19DWUNMRSAgICAyCgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfVERNX0NPTkZJRyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3RkbV9jZmcgewoJdTMyCXRkbV9jZmdfbWlub3JfdmVyc2lvbjsKCS8qIDwgTWlub3IgdmVyc2lvbiB1c2VkIHRvIHRyYWNrIFRETSBjb25maWd1cmF0aW9uLgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX1RETV9DT05GSUcKCSAqLwoKCXUzMgludW1fY2hhbm5lbHM7CgkvKiA8IE51bWJlciBvZiBlbmFibGVkIHNsb3RzIGZvciBURE0gZnJhbWUuCgkgKiBAdmFsdWVzIDEgdG8gOAoJICovCgoJdTMyCXNhbXBsZV9yYXRlOwoJLyogPCBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMjRLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8zMksKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTc2UDRLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8zNTJQOEsgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MzIJYml0X3dpZHRoOwoJLyogPCBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KCSAqIEB2YWx1ZXMgMTYsIDI0CgkgKi8KCgl1MTYJZGF0YV9mb3JtYXQ7CgkvKiA8IERhdGEgZm9ybWF0OiBsaW5lYXIgLGNvbXByZXNzZWQsIGdlbmVyaWMgY29tcHJlc3NzZWQKCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9MSU5FQVJfUENNX0RBVEEKCSAqIC0gI0FGRV9OT05fTElORUFSX0RBVEEKCSAqIC0gI0FGRV9HRU5FUklDX0NPTVBSRVNTRUQKCSAqLwoKCXUxNglzeW5jX21vZGU7CgkvKiA8IFRETSBzeW5jaHJvbml6YXRpb24gc2V0dGluZy4KCSAqIEB2YWx1ZXMgKHNob3J0LCBsb25nLCBzbG90KSBzeW5jIG1vZGUKCSAqIC0gI0FGRV9QT1JUX1RETV9TSE9SVF9TWU5DX0JJVF9NT0RFCgkgKiAtICNBRkVfUE9SVF9URE1fTE9OR19TWU5DX01PREUKCSAqIC0gI0FGRV9QT1JUX1RETV9TSE9SVF9TWU5DX1NMT1RfTU9ERSBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNglzeW5jX3NyYzsKCS8qIDwgU3luY2hyb25pemF0aW9uIHNvdXJjZS4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX1RETV9TWU5DX1NSQ19FWFRFUk5BTAoJICogLSAjQUZFX1BPUlRfVERNX1NZTkNfU1JDX0lOVEVSTkFMIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTE2CW5zbG90c19wZXJfZnJhbWU7CgkvKiA8IE51bWJlciBvZiBzbG90cyBwZXIgZnJhbWUuIFR5cGljYWwgOiAxLCAyLCA0LCA4LCAxNiwgMzIuCgkgKiBAdmFsdWVzIDEgLSAzMgoJICovCgoJdTE2CWN0cmxfZGF0YV9vdXRfZW5hYmxlOwoJLyogPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgVERNIGJsb2NrIHNoYXJlcyB0aGUgZGF0YS1vdXQgc2lnbmFsIHRvIHRoZQoJICogZHJpdmUgd2l0aCBvdGhlciBtYXN0ZXJzLgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfVERNX0NUUkxfREFUQV9PRV9ESVNBQkxFCgkgKiAtICNBRkVfUE9SVF9URE1fQ1RSTF9EQVRBX09FX0VOQUJMRSBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNgljdHJsX2ludmVydF9zeW5jX3B1bHNlOwoJLyogPCBTcGVjaWZpZXMgd2hldGhlciB0byBpbnZlcnQgdGhlIHN5bmMgb3Igbm90LgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfVERNX1NZTkNfTk9STUFMCgkgKiAtICNBRkVfUE9SVF9URE1fU1lOQ19JTlZFUlQgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MTYJY3RybF9zeW5jX2RhdGFfZGVsYXk7CgkvKiA8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGJpdCBjbG9jayB0byBkZWxheSBkYXRhIHdpdGggcmVzcGVjdCB0bwoJICogc3luYyBlZGdlLgoJICogQHZhbHVlcwoJICogLSAjQUZFX1BPUlRfVERNX0RBVEFfREVMQVlfMF9CQ0xLX0NZQ0xFCgkgKiAtICNBRkVfUE9SVF9URE1fREFUQV9ERUxBWV8xX0JDTEtfQ1lDTEUKCSAqIC0gI0FGRV9QT1JUX1RETV9EQVRBX0RFTEFZXzJfQkNMS19DWUNMRSBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNglzbG90X3dpZHRoOwoJLyogPCBTbG90IHdpZHRoIG9mIHRoZSBzbG90IGluIGEgVERNIGZyYW1lLiAgKHNsb3Rfd2lkdGggPj0gYml0X3dpZHRoKQoJICogaGF2ZSB0byBiZSBzYXRpc2ZpZWQuCgkgKiBAdmFsdWVzIDE2LCAyNCwgMzIKCSAqLwoKCXUzMglzbG90X21hc2s7CgkvKiA8IFBvc2l0aW9uIG9mIGFjdGl2ZSBzbG90cy4gIFdoZW4gdGhhdCBiaXQgaXMgc2V0LAoJICogdGhhdCBwYXJpY3VsYXIgc2xvdCBpcyBhY3RpdmUuCgkgKiBOdW1iZXIgb2YgYWN0aXZlIHNsb3RzIGNhbiBiZSBpbmZlcnJlZCBieSBudW1iZXIgb2YKCSAqIGJpdHMgc2V0IGluIHRoZSBtYXNrLiAgT25seSA4IGluZGl2aWR1YWwgYml0cyBjYW4gYmUgZW5hYmxlZC4KCSAqIEJpdHMgMC4uMzEgY29ycmVzcG9uZGluZyB0byBzbG90IDAuLjMxCgkgKiBAdmFsdWVzIDEgdG8gMl4zMiAtIDEKCSAqLwp9IF9fcGFja2VkOwoKLyogSUQgb2YgVGltZSBEaXZzaW9uIE11bHRpcGxleGluZyAoVERNKSBtb2R1bGUsCiAqIHdoaWNoIGlzIHVzZWQgZm9yIGNvbmZpZ3VyaW5nIHRoZSBBRkUgVERNLgogKgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQUZFX1BPUlRfVERNX1NMT1RfQ09ORklHCiAqCiAqIFRvIGNvbmZpZ3VyZSB0aGUgVERNIGludGVyZmFjZSwgdGhlIGNsaWVudCBtdXN0IHVzZSB0aGUKICogI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU0gY29tbWFuZCwgYW5kIGZpbGwgdGhlIG1vZHVsZSBJRCB3aXRoIHRoZQogKiByZXNwZWN0aXZlIHBhcmFtZXRlciBJRHMgYXMgbGlzdGVkIGFib3ZlLgogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9URE0JCTB4MDAwMTAyOEEKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCBieSAjQUZFX01PRFVMRV9URE0gdG8gY29uZmlndXJlCiAqIHRoZSBURE0gc2xvdCBtYXBwaW5nLiAjQUZFX1BPUlRfQ01EX1NFVF9QQVJBTSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIElELgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfUE9SVF9TTE9UX01BUFBJTkdfQ09ORklHCTB4MDAwMTAyOTcKCi8qIFZlcnNpb24gaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUgZnV0dXJlIGFkZGl0aW9ucyB0byBzbG90IG1hcHBpbmcKICogY29uZmlndXJhdGlvbiAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fU0xPVF9NQVBQSU5HX0NPTkZJRwkweDEKCi8qKiBWZXJzaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gaGFuZGxlIGZ1dHVyZSBhZGRpdGlvbnMgdG8gc2xvdCBtYXBwaW5nCioJY29uZmlndXJhdGlvbiBzdXBwb3J0IDMyIGNoYW5uZWxzLgoqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9TTE9UX01BUFBJTkdfQ09ORklHX1YyCTB4MgovKiBEYXRhIGFsaWduIHR5cGUgICovCiNkZWZpbmUgQUZFX1NMT1RfTUFQUElOR19EQVRBX0FMSUdOX01TQgkJMAojZGVmaW5lIEFGRV9TTE9UX01BUFBJTkdfREFUQV9BTElHTl9MU0IJCTEKCiNkZWZpbmUgQUZFX1NMT1RfTUFQUElOR19PRkZTRVRfSU5WQUxJRAkJMHhGRkZGCgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfUE9SVF9TTE9UX01BUFBJTkdfQ09ORklHCiAqIGNvbW1hbmQncyBURE0gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3Nsb3RfbWFwcGluZ19jZmcgewoJdTMyCW1pbm9yX3ZlcnNpb247CgkvKiA8IE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVERNIHNsb3QgY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9URE1fU0xPVF9DT05GSUcKCSAqLwoKCXUxNgludW1fY2hhbm5lbDsKCS8qIDwgbnVtYmVyIG9mIGNoYW5uZWwgb2YgdGhlIGF1ZGlvIHNhbXBsZS4KCSAqIEB2YWx1ZXMgMSwgMiwgNCwgNiwgOCBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNgliaXR3aWR0aDsKCS8qIDwgU2xvdCBiaXQgd2lkdGggZm9yIGVhY2ggY2hhbm5lbAoJICogQHZhbHVlcyAxNiwgMjQsIDMyCgkgKi8KCgl1MzIJZGF0YV9hbGlnbl90eXBlOwoJLyogPCBpbmRpY2F0ZSBob3cgZGF0YSBwYWNrZWQgZnJvbSBzbG90X29mZnNldCBmb3IgMzIgc2xvdCBiaXQgd2lkdGgKCSAqIGluIGNhc2Ugb2Ygc2FtcGxlIGJpdCB3aWR0aCBpcyAyNC4KCSAqIEB2YWx1ZXMKCSAqICNBRkVfU0xPVF9NQVBQSU5HX0RBVEFfQUxJR05fTVNCCgkgKiAjQUZFX1NMT1RfTUFQUElOR19EQVRBX0FMSUdOX0xTQgoJICovCgoJdTE2CW9mZnNldFtBRkVfUE9SVF9NQVhfQVVESU9fQ0hBTl9DTlRdOwoJLyogPCBBcnJheSBvZiB0aGUgc2xvdCBtYXBwaW5nIHN0YXJ0IG9mZnNldCBpbiBieXRlcyBmb3IgdGhpcyBmcmFtZS4KCSAqIFRoZSBieXRlcyBpcyBjb3VudGVkIGZyb20gMC4gVGhlIDAgaXMgbWFwcGVkIHRvIHRoZSAxc3QgYnl0ZQoJICogaW4gb3Igb3V0IG9mIHRoZSBkaWdpdGFsIHNlcmlhbCBkYXRhIGxpbmUgdGhpcyBzdWItZnJhbWUgYmVsb25nIHRvLgoJICogc2xvdF9vZmZzZXRbXSBzZXR0aW5nIGlzIHBlci1jaGFubmVsIGJhc2VkLgoJICogVGhlIG1heCBudW0gb2YgY2hhbm5lbCBzdXBwb3J0ZWQgaXMgOC4KCSAqIFRoZSB2YWxpZCBvZmZzZXQgdmFsdWUgbXVzdCBhbHdheXMgYmUgY29udGludWx5IHBsYWNlZCBpbiBmcm9tCgkgKiBpbmRleCAwLgoJICogU2V0IG9mZnNldCBhcyBBRkVfU0xPVF9NQVBQSU5HX09GRlNFVF9JTlZBTElEIGZvciBub3QgdXNlZCBhcnJheXMuCgkgKiBJZiAic2xvdF9iaXR3aWR0aF9wZXJfY2hhbm5lbCIgaXMgMzIgYW5kICJzYW1wbGVfYml0d2lkdGgiIGlzIDI0LAoJICogImRhdGFfYWxpZ25fdHlwZSIgaXMgdXNlZCB0byBpbmRpY2F0ZSBob3cgMjQgYml0IHNhbXBsZSBkYXRhIGluCgkgKiBhbGlnbmluZyB3aXRoIDMyIGJpdCBzbG90IHdpZHRoIHBlci1jaGFubmVsLgoJICogQHZhbHVlcywgaW4gYnl0ZQoJICovCn0gX19wYWNrZWQ7CgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfUE9SVF9TTE9UX01BUFBJTkdfQ09ORklHX1YyCiogIGNvbW1hbmQncyBURE0gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiovCnN0cnVjdCBhZmVfcGFyYW1faWRfc2xvdF9tYXBwaW5nX2NmZ192MiB7Cgl1MzIJbWlub3JfdmVyc2lvbjsKCS8qKjwgTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBURE0gc2xvdCBjb25maWd1cmF0aW9uLgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX1RETV9TTE9UX0NPTkZJRwoJICovCgoJdTE2CW51bV9jaGFubmVsOwoJLyoqPCBudW1iZXIgb2YgY2hhbm5lbCBvZiB0aGUgYXVkaW8gc2FtcGxlLgoJKiBAdmFsdWVzIDEsIDIsIDQsIDYsIDgsIDE2LCAzMiBAdGFibGVidWxsZXRlbmQKCSovCgoJdTE2CWJpdHdpZHRoOwoJLyoqPCBTbG90IGJpdCB3aWR0aCBmb3IgZWFjaCBjaGFubmVsCgkqIEB2YWx1ZXMgMTYsIDI0LCAzMgoJKi8KCgl1MzIJZGF0YV9hbGlnbl90eXBlOwoJLyoqPCBpbmRpY2F0ZSBob3cgZGF0YSBwYWNrZWQgZnJvbSBzbG90X29mZnNldCBmb3IgMzIgc2xvdCBiaXQgd2lkdGgKCSogaW4gY2FzZSBvZiBzYW1wbGUgYml0IHdpZHRoIGlzIDI0LgoJKiBAdmFsdWVzCgkqICNBRkVfU0xPVF9NQVBQSU5HX0RBVEFfQUxJR05fTVNCCgkqICNBRkVfU0xPVF9NQVBQSU5HX0RBVEFfQUxJR05fTFNCCgkqLwoKCXUxNglvZmZzZXRbQUZFX1BPUlRfTUFYX0FVRElPX0NIQU5fQ05UX1YyXTsKCS8qKjwgQXJyYXkgb2YgdGhlIHNsb3QgbWFwcGluZyBzdGFydCBvZmZzZXQgaW4gYnl0ZXMgZm9yIHRoaXMgZnJhbWUuCgkqIFRoZSBieXRlcyBpcyBjb3VudGVkIGZyb20gMC4gVGhlIDAgaXMgbWFwcGVkIHRvIHRoZSAxc3QgYnl0ZQoJKiBpbiBvciBvdXQgb2YgdGhlIGRpZ2l0YWwgc2VyaWFsIGRhdGEgbGluZSB0aGlzIHN1Yi1mcmFtZSBiZWxvbmcgdG8uCgkqIHNsb3Rfb2Zmc2V0W10gc2V0dGluZyBpcyBwZXItY2hhbm5lbCBiYXNlZC4KCSogVGhlIG1heCBudW0gb2YgY2hhbm5lbCBzdXBwb3J0ZWQgaXMgOC4KCSogVGhlIHZhbGlkIG9mZnNldCB2YWx1ZSBtdXN0IGFsd2F5cyBiZSBjb250aW51bHkgcGxhY2VkIGluCgkqIGZyb20gaW5kZXggMC4KCSogU2V0IG9mZnNldCBhcyBBRkVfU0xPVF9NQVBQSU5HX09GRlNFVF9JTlZBTElEIGZvciBub3QgdXNlZCBhcnJheXMuCgkqIElmICJzbG90X2JpdHdpZHRoX3Blcl9jaGFubmVsIiBpcyAzMiBhbmQgInNhbXBsZV9iaXR3aWR0aCIgaXMgMjQsCgkqICJkYXRhX2FsaWduX3R5cGUiIGlzIHVzZWQgdG8gaW5kaWNhdGUgaG93IDI0IGJpdCBzYW1wbGUgZGF0YSBpbgoJKiBhbGlnbmluZyB3aXRoIDMyIGJpdCBzbG90IHdpZHRoIHBlci1jaGFubmVsLgoJKiBAdmFsdWVzLCBpbiBieXRlCgkqLwp9IF9fcGFja2VkOwoKLyoqIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCBieSAjQUZFX01PRFVMRV9URE0gdG8gY29uZmlndXJlCiAgICB0aGUgY3VzdG9tZXIgVERNIGhlYWRlci4gI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU0gY2FuIHVzZSB0aGlzIHBhcmFtZXRlciBJRC4KKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfQ1VTVE9NX1RETV9IRUFERVJfQ09ORklHCQkweDAwMDEwMjk4CgovKiBWZXJzaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gaGFuZGxlIGZ1dHVyZSBhZGRpdGlvbnMgdG8gY3VzdG9tIFRETSBoZWFkZXIKICogY29uZmlndXJhdGlvbiAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fQ1VTVE9NX1RETV9IRUFERVJfQ09ORklHCTB4MQoKI2RlZmluZSBBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9JTlZBTElECQkweDAKI2RlZmluZSBBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9ERUZBVUxUCQkweDEKI2RlZmluZSBBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9FTlRFUlRBSU5NRU5UX01PU1QJMHgyCgojZGVmaW5lIEFGRV9DVVNUT01fVERNX0hFQURFUl9NQVhfQ05UCTB4OAoKLyogUGF5bG9hZCBvZiB0aGUgQUZFX1BBUkFNX0lEX0NVU1RPTV9URE1fSEVBREVSX0NPTkZJRyBwYXJhbWV0ZXIgSUQgKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9jdXN0b21fdGRtX2hlYWRlcl9jZmcgewoJdTMyCW1pbm9yX3ZlcnNpb247CgkvKiA8IE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgY3VzdG9tIFRETSBoZWFkZXIgY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9DVVNUT01fVERNX0hFQURFUl9DT05GSUcKCSAqLwoKCXUxNglzdGFydF9vZmZzZXQ7CgkvKiA8IHRoZSBzbG90IG1hcHBpbmcgc3RhcnQgb2Zmc2V0IGluIGJ5dGVzIGZyb20gdGhpcyBzdWItZnJhbWUKCSAqIFRoZSBieXRlcyBpcyBjb3VudGVkIGZyb20gMC4gVGhlIDAgaXMgbWFwcGVkIHRvIHRoZSAxc3QgYnl0ZSBpbiBvcgoJICogb3V0IG9mIHRoZSBkaWdpdGFsIHNlcmlhbCBkYXRhIGxpbmUgdGhpcyBzdWItZnJhbWUgYmVsb25nIHRvLgoJICogQHZhbHVlcywgaW4gYnl0ZSwKCSAqIHN1cHBvcnRlZCB2YWx1ZXMgYXJlIDAsIDQsIDgKCSAqLwoKCXUxNgloZWFkZXJfd2lkdGg7CgkvKiA8IHRoZSBoZWFkZXIgd2lkdGggcGVyLWZyYW1lIGZvbGxvd2VkLgoJICogMiBieXRlcyBmb3IgTU9TVC9URE0gY2FzZQoJICogQHZhbHVlcywgaW4gYnl0ZQoJICogc3VwcG9ydGVkIHZhbHVlIGlzIDIKCSAqLwoKCXUxNgloZWFkZXJfdHlwZTsKCS8qIDwgSW5kaWNhdGUgd2hhdCBraW5kIG9mIGN1c3RvbSBURE0gaGVhZGVyIGl0IGlzLgoJICogQHZhbHVlcyAjQUZFX0NVU1RPTV9URE1fSEVBREVSX1RZUEVfSU5WQUxJRCA9IDAKCSAqICNBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9ERUZBVUxUID0gMSAgKGZvciBBQU4gY2hhbm5lbCBwZXIgTU9TVCkKCSAqICNBRkVfQ1VTVE9NX1RETV9IRUFERVJfVFlQRV9FTlRFUlRBSU5NRU5UX01PU1QgPSAyCgkgKiAoZm9yIGVudGVydGFpbm1lbnQgY2hhbm5lbCwgd2hpY2ggd2lsbCBvdmVyd3JpdGUKCSAqIEFGRV9BUElfVkVSU0lPTl9URE1fU0FEX0hFQURFUl9UWVBFX0RFRkFVTFQgcGVyIE1PU1QpCgkgKi8KCgl1MTYJbnVtX2ZyYW1lX3JlcGVhdDsKCS8qIDwgbnVtIG9mIGhlYWRlciBmb2xsb3dlZC4KCSAqIEB2YWx1ZXMsIHN1cHBvcnRlZCB2YWx1ZSBpcyA4CgkgKi8KCXUxNgloZWFkZXJbQUZFX0NVU1RPTV9URE1fSEVBREVSX01BWF9DTlRdOwoJLyogPCBTQUQgaGVhZGVyIGZvciBNT1NUL1RETSBjYXNlIGlzIGZvbGxvd2VkIGFzIHBheWxvYWQgYXMgYmVsb3cuCgkgKiBUaGUgc2l6ZSBvZiBmb2xsb3dlZCBTQUQgaGVhZGVyIGluIGJ5dGVzIGlzIG51bV9vZl9mcmFtZV9yZXBlYXQgKgoJICogaGVhZGVyX3dpZHRoX3Blcl9mcmFtZSwgd2hpY2ggaXMgMiAqIDggPSAxNiBieXRlcyBoZXJlLgoJICogdGhlIHN1cHBvcnRlZCBwYXlsb2FkIGZvcm1hdCBpcyBpbiB1aW50MTZfdCBhcyBiZWxvdwoJICogdWludDE2X3QgaGVhZGVyMDsgU3luY0hpIDB4M0MgSW5mb1s0XSAtIENvZGVjVHlwZSAtPiAweDNDMDAKCSAqIHVpbnQxNl90IGhlYWRlcjE7IFN5bmNMbyAweEIyIEluZm9bNV0gLSBTYW1wbGVXaWR0aCAtPiAweEIyMTgKCSAqIHVpbnQxNl90IGhlYWRlcjI7IERUQ1AgSW5mbyAgICAgSW5mb1s2XSAtIHVudXNlZCAtPiAweDAKCSAqIHVpbnQxNl90IGhlYWRlcjM7IEV4dGVuc2lvbiBJbmZvWzddIC0gQVNBRC1WYWx1ZSAtPiAweEMwCgkgKiB1aW50MTZfdCBoZWFkZXI0OyBSZXNlcnZlZCBJbmZvWzBdIC0gTnVtIG9mIGJ5dGVzIGZvbGxvd2luZyAgLT4gMHg3CgkgKiB1aW50MTZfdCBoZWFkZXI1OyBSZXNlcnZlZCBJbmZvWzFdIC0gTWVkaWEgVHlwZSAtPiAweDAKCSAqIHVpbnQxNl90IGhlYWRlcjY7IFJlc2VydmVkIEluZm9bMl0gLSBCaXRyYXRlW2ticHNdIC0gSGlnaCBCeXRlIC0+IDB4MAoJICogdWludDE2X3QgaGVhZGVyNzsgUmVzZXJ2ZWQgSW5mb1szXSAtIEJpdHJhdGVba2Jwc10gLSBMb3cgIEJ5dGUgLT4gMHgwCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc2xvdF9tYXBwaW5nX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyCXBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIJcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3Nsb3RfbWFwcGluZ19jZmcJc2xvdF9tYXBwaW5nOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zbG90X21hcHBpbmdfY29uZmlnX2NvbW1hbmRfdjIgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIJcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MglwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc2xvdF9tYXBwaW5nX2NmZ192MglzbG90X21hcHBpbmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2N1c3RvbV90ZG1faGVhZGVyX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyCXBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIJcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2N1c3RvbV90ZG1faGVhZGVyX2NmZwljdXN0b21fdGRtX2hlYWRlcjsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfdGRtX3BvcnRfY29uZmlnIHsKCXN0cnVjdCBhZmVfcGFyYW1faWRfdGRtX2NmZwkJCQl0ZG07CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3Nsb3RfbWFwcGluZ19jZmcJCXNsb3RfbWFwcGluZzsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc2xvdF9tYXBwaW5nX2NmZ192MgkJc2xvdF9tYXBwaW5nX3YyOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9jdXN0b21fdGRtX2hlYWRlcl9jZmcJY3VzdG9tX3RkbV9oZWFkZXI7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9ERVZJQ0VfSFdfREVMQVkgICAgIDB4MDAwMTAyNDMKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fREVWSUNFX0hXX0RFTEFZICAweDEKCnN0cnVjdCBhZmVfcGFyYW1faWRfZGV2aWNlX2h3X2RlbGF5X2NmZyB7Cgl1aW50MzJfdCAgICBkZXZpY2VfaHdfZGVsYXlfbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90ICAgIGRlbGF5X2luX3VzOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfU0VUX1RPUE9MT0dZICAgIDB4MDAwMTAyNUEKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fVE9QT0xPR1lfVjEgMHgxCgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NldF90b3BvbG9neV9jZmcgewoJLyoKCSAqIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgYWZlIHRvcG9sb2d5IGlkIGNvbmZpZ3VyYXRpb24uCgkgKiBAdmFsdWVzICNBRkVfQVBJX1ZFUlNJT05fVE9QT0xPR1lfVjEKCSAqLwoJdTMyCQltaW5vcl92ZXJzaW9uOwoJLyoKCSAqIElkIG9mIHRoZSB0b3BvbG9neSBmb3IgdGhlIGFmZSBzZXNzaW9uLgoJICogQHZhbHVlcyBBbnkgdmFsaWQgQUZFIHRvcG9sb2d5IElECgkgKi8KCXUzMgkJdG9wb2xvZ3lfaWQ7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIE1BWF9BQlJfTEVWRUxTIDUKCnN0cnVjdCBhZmVfYml0X3JhdGVfbGV2ZWxfbWFwX3QgewoJLyoKCSAqIEtleSB2YWx1ZSBwYWlyIGZvciBsaW5rIHF1YWxpdHkgbGV2ZWwgdG8gYml0cmF0ZQoJICogbWFwcGluZyBpbiBBRkUKCSAqLwoJdWludDMyX3QgbGlua19xdWFsaXR5X2xldmVsOwoJdWludDMyX3QgYml0cmF0ZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcXVhbGl0eV9sZXZlbF90b19iaXRyYXRlX2luZm8gewoJLyoKCSAqIE51bWJlciBvZiBxdWFsaXR5IGxldmVscyBiZWluZyBtYXBwZWQuCgkgKiBUaGlzIHdpbGwgYmUgZXF1YWwgdG8gdGhlIHNpemUgb2YgbWFwcGluZyB0YWJsZS4KCSAqLwoJdWludDMyX3QgbnVtX2xldmVsczsKCS8qCgkgKiBRdWFsaXR5IGxldmVsIHRvIGJpdHJhdGUgbWFwcGluZyB0YWJsZQoJICovCglzdHJ1Y3QgYWZlX2JpdF9yYXRlX2xldmVsX21hcF90IGJpdF9yYXRlX2xldmVsX21hcFtNQVhfQUJSX0xFVkVMU107Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2ltY19kZWNfZW5jX2luZm8gewoJLyoKCSAqIERlY29kZXIgdG8gZW5jb2RlciBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbi4KCSAqIFRyYW5zbWl0ID0gMCAvIFJlY2VpdmUgPSAxCgkgKi8KCXVpbnQzMl90IGRpcmVjdGlvbjsKCS8qCgkgKiBFbmFibGUgLyBkaXNhYmxlIElNQyBiZXR3ZWVuIGRlY29kZXIgYW5kIGVuY29kZXIKCSAqLwoJdWludDMyX3QgZW5hYmxlOwoJLyoKCSAqIFB1cnBvc2Ugb2YgSU1DIGJlaW5nIHNldCB1cCBiZXR3ZWVuIGRlY29kZXIgYW5kIGVuY29kZXIuCgkgKiBQYXJhbSBJRCBkZWZpbmVkIGZvciBsaW5rIHF1YWxpdHkgZmVlZGJhY2sgaW4gTFBBU1Mgd2lsbAoJICogYmUgdGhlIGRlZmF1bHQgdmFsdWUgc2VudCBhcyBwdXJwb3NlLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqIEFGRV9FTkNERUNfUFVSUE9TRV9JRF9CVF9JTkZPCgkgKi8KCXVpbnQzMl90IHB1cnBvc2U7CgkvKgoJICogVW5pcXVlIGNvbW11bmljYXRpb24gaW5zdGFuY2UgSUQuCgkgKiBEYXRhIHR5cGUgYTJkcF9hYnJfaW5zdGFuY2UgdXNlZCB0byBzZXQgaW5zdGFuY2UgSUQuCgkgKiBwdXJwb3NlIGFuZCBjb21tX2luc3RhbmNlIHRvZ2V0aGVyIGZvcm0gdGhlIGFjdHVhbCBrZXkKCSAqIHVzZWQgaW4gSU1DIHJlZ2lzdHJhdGlvbiwgd2hpY2ggbXVzdCBiZSB0aGUgc2FtZSBmb3IKCSAqIGVuY29kZXIgYW5kIGRlY29kZXIgZm9yIHdoaWNoIElNQyBpcyBiZWluZyBzZXQgdXAuCgkgKi8KCXVpbnQzMl90IGNvbW1faW5zdGFuY2U7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2Ficl9kZWNfY2ZnX3QgewoJc3RydWN0IGFmZV9pbWNfZGVjX2VuY19pbmZvIGltY19pbmZvOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9hYnJfZW5jX2NmZ190IHsKCS8qCgkgKiBMaW5rIHF1YWxpdHkgbGV2ZWwgdG8gYml0cmF0ZSBtYXBwaW5nIGluZm8gc2VudCB0byBEU1AuCgkgKi8KCXN0cnVjdCBhZmVfcXVhbGl0eV9sZXZlbF90b19iaXRyYXRlX2luZm8gbWFwcGluZ19pbmZvOwoJLyoKCSAqIEluZm9ybWF0aW9uIHRvIHNldCB1cCBJTUMgYmV0d2VlbiBkZWNvZGVyIGFuZCBlbmNvZGVyLgoJICovCglzdHJ1Y3QgYWZlX2ltY19kZWNfZW5jX2luZm8gaW1jX2luZm87Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9BUFRYX1NZTkNfTU9ERSAgMHgwMDAxMzIwNQoKc3RydWN0IGFmZV9wYXJhbV9pZF9hcHR4X3N5bmNfbW9kZSB7CgkvKgoJICogc3luYyBtb2RlOiAweDAgPSBzdGVyZW8gc3luYyBtb2RlIChkZWZhdWx0KQoJICogICAgICAgICAgICAweDAxID0gZHVhbCBtb25vIHN5bmMgbW9kZQoJICogICAgICAgICAgICAweDAyID0gZHVhbCBtb25vIHdpdGggbm8gc3luYyBvbiBlaXRoZXIgTCBvciBSCgkgKi8KCXVpbnQzMl90ICAgICBzeW5jX21vZGU7Cn0gX19wYWNrZWQ7CgovKgogKiBHZW5lcmljIGVuY29kZXIgbW9kdWxlIElELgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqICNBVlNfRU5DT0RFUl9QQVJBTV9JRF9FTkNfRk1UX0lEIChjYW5ub3QgYmUgc2V0IHJ1biB0aW1lKQogKiAjQVZTX0VOQ09ERVJfUEFSQU1fSURfRU5DX0NGR19CTEsgKG1heSBiZSBzZXQgcnVuIHRpbWUpCiAqICNBVlNfRU5DT0RFUl9QQVJBTV9JRF9FTkNfQklUUkFURSAobWF5IGJlIHNldCBydW4gdGltZSkKICogI0FWU19FTkNPREVSX1BBUkFNX0lEX1BBQ0tFVElaRVJfSUQgKGNhbm5vdCBiZSBzZXQgcnVuIHRpbWUpCiAqIE9wY29kZSAtIEFWU19NT0RVTEVfSURfRU5DT0RFUgogKiBBRkUgQ29tbWFuZCBBRkVfUE9SVF9DTURfU0VUX1BBUkFNX1YyIHN1cHBvcnRzIHRoaXMgbW9kdWxlIElELgogKi8KI2RlZmluZSBBRkVfTU9EVUxFX0lEX0VOQ09ERVIgICAgICAgIDB4MDAwMTMyMjkKCi8qIE1hY3JvIGZvciBkZWZpbmluZyB0aGUgcGFja2V0aXplciBJRDogQ09QLiAqLwojZGVmaW5lIEFGRV9NT0RVTEVfSURfUEFDS0VUSVpFUl9DT1AgMHgwMDAxMzIyQQoKLyoKICogUGFja2V0aXplciB0eXBlIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0VOQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX1BBQ0tFVElaRVJfSUQgMHgwMDAxMzIyRQoKLyoKICogRW5jb2RlciBjb25maWcgYmxvY2sgIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0VOQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBtYXkgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX0VOQ19DRkdfQkxLIDB4MDAwMTMyMkMKCi8qCiAqIEVuY29kZXIgZm9ybWF0IElEIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0VOQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX0VOQ19GTVRfSUQgICAgICAgICAweDAwMDEzMjJCCgovKgogKiBFbmNvZGVyIHNjcmFtYmxlciBwYXJhbWV0ZXIgZm9yIHRoZSAjQVZTX01PRFVMRV9JRF9FTkNPREVSIG1vZHVsZS4KICogVGhpcyBwYXJhbWV0ZXIgY2Fubm90IGJlIHNldCBydW50aW1lLgogKi8KI2RlZmluZSBBRkVfRU5DT0RFUl9QQVJBTV9JRF9FTkFCTEVfU0NSQU1CTElORyAgICAgICAgIDB4MDAwMTMyM0MKCi8qCiAqIExpbmsgcXVhbGl0eSBsZXZlbCB0byBiaXRyYXRlIG1hcHBpbmcgaW5mbyBzZW50IHRvIEFGRSBFbmNvZGVyLgogKiBUaGlzIHBhcmFtZXRlciBtYXkgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX0JJVF9SQVRFX0xFVkVMX01BUCAgICAgICAgMHgwMDAxMzJFMQoKLyoKICogUGFyYW1ldGVyIHRvIHNldCB1cCBJbnRlciBNb2R1bGUgQ29tbXVuaWNhdGlvbiAoSU1DKSBiZXR3ZWVuCiAqIEFGRSBEZWNvZGVyIGFuZCBFbmNvZGVyLgogKiBUaGlzIHBhcmFtZXRlciBtYXkgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNERUNfUEFSQU1fSURfREVDX1RPX0VOQ19DT01NVU5JQ0FUSU9OICAgICAgICAweDAwMDEzMjNECgovKgogKiBQdXJwb3NlIG9mIElNQyBzZXQgdXAgYmV0d2VlbiBlbmNvZGVyIGFuZCBkZWNvZGVyLgogKiBDb21tdW5pY2F0aW9uIGluc3RhbmNlIGFuZCBwdXJwb3NlIHRvZ2V0aGVyIGZvcm0gdGhlCiAqIGFjdHVhbCBrZXkgdXNlZCBmb3IgSU1DIHJlZ2lzdHJhdGlvbi4KICovCiNkZWZpbmUgQUZFX0VOQ0RFQ19QVVJQT1NFX0lEX0JUX0lORk8gICAgICAgIDB4MDAwMTMyRTIKCiNkZWZpbmUgQUZFX01PRFVMRV9JRF9ERUNPREVSICAgICAgICAweDAwMDEzMjMxCgovKgogKiBNYWNybyBmb3IgZGVmaW5pbmcgdGhlIGRlcGFja2V0aXplciBJRDogQ09QLgogKi8KI2RlZmluZSBBRkVfTU9EVUxFX0lEX0RFUEFDS0VUSVpFUl9DT1AgICAgICAgIDB4MDAwMTMyMzMKCi8qCiAqIERlcGFja2V0aXplciB0eXBlIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0RFQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9ERUNPREVSX1BBUkFNX0lEX0RFUEFDS0VUSVpFUl9JRCAgICAgICAgMHgwMDAxMzIzNQoKI2RlZmluZSBDQVBJX1YyX1BBUkFNX0lEX0FQVFhfRU5DX1NXSVRDSF9UT19NT05PICAgIDB4MDAwMTMzMkEKCnN0cnVjdCBhcHR4X2NoYW5uZWxfbW9kZV9wYXJhbV90IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7Cgl1MzIgY2hhbm5lbF9tb2RlOwp9IF9fcGFja2VkOwovKgogKiBEYXRhIGZvcm1hdCB0byBzZW5kIGNvbXByZXNzZWQgZGF0YQogKiBpcyB0cmFuc21pdHRlZC9yZWNlaXZlZCBvdmVyIFNsaW1idXMgbGluZXMuCiAqLwojZGVmaW5lIEFGRV9TQl9EQVRBX0ZPUk1BVF9HRU5FUklDX0NPTVBSRVNTRUQgICAgMHgzCgovKgogKiBJRCBmb3IgQUZFIHBvcnQgbW9kdWxlLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgcG9ydCBwcm9wZXJ0aWVzLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogI0FGRV9QQVJBTV9JRF9QT1JUX01FRElBX1RZUEUKICogVG8gY29uZmlndXJlIHRoZSBwb3J0IHByb3BlcnR5LCB0aGUgY2xpZW50IG11c3QgdXNlIHRoZQogKiAjQUZFX1BPUlRfQ01EX1NFVF9QQVJBTV9WMiBjb21tYW5kLAogKiBhbmQgZmlsbCB0aGUgbW9kdWxlIElEIHdpdGggdGhlIHJlc3BlY3RpdmUgcGFyYW1ldGVyIElEcyBhcyBsaXN0ZWQgYWJvdmUuCiAqIEBhcHJfaGRyX2ZpZWxkcwogKiBPcGNvZGUgLS0gQUZFX01PRFVMRV9QT1JUCiAqLwojZGVmaW5lIEFGRV9NT0RVTEVfUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDJhNgoKLyoKICogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5ICNBRkVfTU9EVUxFX1BPUlQgdG8gc2V0IHRoZSBwb3J0IG1lZGlhIHR5cGUuCiAqIHBhcmFtZXRlciBJRCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIHVzaW5nI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU1fVjIgY29tbWFuZC4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1BPUlRfTUVESUFfVFlQRSAgICAgICAgICAgICAgMHgwMDAxMDJhNwoKLyoKICogTWFjcm9zIGZvciBkZWZpbmluZyB0aGUgImRhdGFfZm9ybWF0IiBmaWVsZCBpbiB0aGUKICogI0FGRV9QQVJBTV9JRF9QT1JUX01FRElBX1RZUEUKICovCiNkZWZpbmUgQUZFX1BPUlRfREFUQV9GT1JNQVRfUENNICAgICAgICAgICAgICAgICAgMHgwCiNkZWZpbmUgQUZFX1BPUlRfREFUQV9GT1JNQVRfR0VORVJJQ19DT01QUkVTU0VEICAgMHgxCgovKgogKiBNYWNybyBmb3IgZGVmaW5pbmcgdGhlICJtaW5vcl92ZXJzaW9uIiBmaWVsZCBpbiB0aGUKICogI0FGRV9QQVJBTV9JRF9QT1JUX01FRElBX1RZUEUKICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1BPUlRfTUVESUFfVFlQRSAgICAgICAgICAgMHgxCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MAoKLyoKICogTWVkaWEgZm9ybWF0IElEIGZvciBTQkMgZW5jb2RlIGNvbmZpZ3VyYXRpb24uCiAqIEBwYXIgU0JDIGVuY29kZSBjb25maWd1cmF0aW9uIChhc21fc2JjX2VuY19jZmdfdCkKICogQHRhYmxle3dlYWtfX2FzbV9fc2JjX19lbmNfX2NmZ19fdH0KICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEJGMgoKLyogU0JDIGNoYW5uZWwgTW9ubyBtb2RlLiovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX01PTk8gICAgICAgICAgICAgICAgICAgICAxCgovKiBTQkMgY2hhbm5lbCBTdGVyZW8gbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1NCQ19DSEFOTkVMX01PREVfU1RFUkVPICAgICAgICAgICAgICAgICAgIDIKCi8qIFNCQyBjaGFubmVsIER1YWwgTW9ubyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9EVUFMX01PTk8gICAgICAgICAgICAgICAgOAoKLyogU0JDIGNoYW5uZWwgSm9pbnQgU3RlcmVvIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX0pPSU5UX1NURVJFTyAgICAgICAgICAgICA5CgovKiBTQkMgYml0IGFsbG9jYXRpb24gbWV0aG9kID0gbG91ZG5lc3MuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQUxMT0NBVElPTl9NRVRIT0RfTE9VRE5FU1MgICAgICAgICAgICAwCgovKiBTQkMgYml0IGFsbG9jYXRpb24gbWV0aG9kID0gU05SLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfU0JDX0FMTE9DQVRJT05fTUVUSE9EX1NOUiAgICAgICAgICAgICAgICAgMQoKCi8qCiAqIFBheWxvYWQgb2YgdGhlIFNCQyBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbiB0aGUKICogI0FTTV9NRURJQV9GTVRfU0JDIG1lZGlhIGZvcm1hdC4KICovCnN0cnVjdCBhc21fc2JjX2VuY19jZmdfdCB7CgkvKgoJICogTnVtYmVyIG9mIHN1YmJhbmRzLgoJICogQHZhbHVlcyA0LCA4CgkgKi8KCXVpbnQzMl90ICAgIG51bV9zdWJiYW5kczsKCgkvKgoJICogU2l6ZSBvZiB0aGUgZW5jb2RlZCBibG9jayBpbiBzYW1wbGVzLgoJICogQHZhbHVlcyA0LCA4LCAxMiwgMTYKCSAqLwoJdWludDMyX3QgICAgYmxrX2xlbjsKCgkvKgoJICogTW9kZSB1c2VkIHRvIGFsbG9jYXRlIGJpdHMgYmV0d2VlbiBjaGFubmVscy4KCSAqIEB2YWx1ZXMKCSAqIDAgKE5hdGl2ZSBtb2RlKQoJICogI0FTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9NT05PCgkgKiAjQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX1NURVJFTwoJICogI0FTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9EVUFMX01PTk8KCSAqICNBU01fTUVESUFfRk1UX1NCQ19DSEFOTkVMX01PREVfSk9JTlRfU1RFUkVPCgkgKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBudW1iZXIKCSAqIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KCSAqIElmIHBvc3Rwcm9jZXNzaW5nIG91dHB1dHMgb25lLWNoYW5uZWwgZGF0YSwgTW9ubyBtb2RlIGlzIHVzZWQuIElmCgkgKiBwb3N0cHJvY2Vzc2luZyBvdXRwdXRzIHR3by1jaGFubmVsIGRhdGEsIFN0ZXJlbyBtb2RlIGlzIHVzZWQuCgkgKiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCgkgKi8KCXVpbnQzMl90ICAgIGNoYW5uZWxfbW9kZTsKCgkvKgoJICogRW5jb2RlciBiaXQgYWxsb2NhdGlvbiBtZXRob2QuCgkgKiBAdmFsdWVzCgkgKiAjQVNNX01FRElBX0ZNVF9TQkNfQUxMT0NBVElPTl9NRVRIT0RfTE9VRE5FU1MKCSAqICNBU01fTUVESUFfRk1UX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9TTlIgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQzMl90ICAgIGFsbG9jX21ldGhvZDsKCgkvKgoJICogTnVtYmVyIG9mIGVuY29kZWQgYml0cyBwZXIgc2Vjb25kLgoJICogQHZhbHVlcwoJICogTW9ubyBjaGFubmVsIC0tIE1heGltdW0gb2YgMzIwIGticHMKCSAqIFN0ZXJlbyBjaGFubmVsIC0tIE1heGltdW0gb2YgNTEyIGticHMgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQzMl90ICAgIGJpdF9yYXRlOwoKCS8qCgkgKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kLgoJICogQHZhbHVlcyAwIChOYXRpdmUgbW9kZSksIDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwJm5ic3A7SHoKCSAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlCgkgKiBzYW1wbGluZyByYXRlIGF0IHRoZSBpbnB1dC4KCSAqIFRoZSBzYW1wbGluZyByYXRlIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCgkgKi8KCXVpbnQzMl90ICAgIHNhbXBsZV9yYXRlOwp9OwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfTEMgICAgICAgICAgICAyCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUiAgICAgICAgICAgNQojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0FPVF9QUyAgICAgICAgICAgIDI5CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURUUyAgMAojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX1JBVyAgIDMKCnN0cnVjdCBhc21fYWFjX2VuY19jZmdfdjJfdCB7CgoJLyogRW5jb2RpbmcgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuKi8KCXVpbnQzMl90ICAgICBiaXRfcmF0ZTsKCgkvKgoJICogRW5jb2RpbmcgbW9kZS4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6CgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX0xDCgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUgoJICogI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9QUwoJICovCgl1aW50MzJfdCAgICAgZW5jX21vZGU7CgoJLyoKCSAqIEFBQyBmb3JtYXQgZmxhZy4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6CgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURUUwoJICogI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX1JBVwoJICovCgl1aW50MTZfdCAgICAgYWFjX2ZtdF9mbGFnOwoKCS8qCgkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gZW5jb2RlLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqIDAgLSBOYXRpdmUgbW9kZQoJICogMSAtIE1vbm8KCSAqIDIgLSBTdGVyZW8KCSAqIE90aGVyIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZC4KCSAqIEBub3RlMWhhbmcgVGhlIGVBQUMrIGVuY29kZXIgbW9kZSBzdXBwb3J0cyBvbmx5IHN0ZXJlby4KCSAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlCgkgKiBudW1iZXIgb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgoJICogVGhlIG51bWJlciBvZiBjaGFubmVscyBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgoJICovCgl1aW50MTZfdCAgICAgY2hhbm5lbF9jZmc7CgoJLyoKCSAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDAgLS0gTmF0aXZlIG1vZGUgLSBGb3Igb3RoZXIgdmFsdWVzLAoJICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKCSAqIHNhbXBsaW5nIHJhdGUgYXQgdGhlIGlucHV0LgoJICogVGhlIHNhbXBsaW5nIHJhdGUgbXVzdCBub3QgY2hhbmdlIGR1cmluZyBlbmNvZGluZy4KCSAqLwoJdWludDMyX3QgICAgIHNhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKLyogRk1UIElEIGZvciBhcHQtWCBDbGFzc2ljICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BUFRYIDB4MDAwMTMxZmYKCi8qIEZNVCBJRCBmb3IgYXB0LVggSEQgKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FQVFhfSEQgMHgwMDAxMzIwMAoKI2RlZmluZSBQQ01fQ0hBTk5FTF9MICAgICAgICAgMQojZGVmaW5lIFBDTV9DSEFOTkVMX1IgICAgICAgICAyCiNkZWZpbmUgUENNX0NIQU5ORUxfQyAgICAgICAgIDMKCnN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCB7Cgl1aW50MzJfdCAgICBzYW1wbGVfcmF0ZTsKCS8qIE1vbm8gb3Igc3RlcmVvICovCgl1aW50MTZfdCAgICBudW1fY2hhbm5lbHM7Cgl1aW50MTZfdCAgICByZXNlcnZlZDsKCS8qIG51bV9jaCA9PSAxLCB0aGVuIFBDTV9DSEFOTkVMX0MsCgkgKiBudW1fY2ggPT0gMiwgdGhlbiB7UENNX0NIQU5ORUxfTCwgUENNX0NIQU5ORUxfUn0KCSAqLwoJdWludDhfdCAgICAgY2hhbm5lbF9tYXBwaW5nWzhdOwoJdWludDMyX3QgICAgY3VzdG9tX3NpemU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FwdHhfdjJfZW5jX2NmZ19leHRfdCB7CgkvKgoJICogc3luYyBtb2RlOiAweDAgPSBzdGVyZW8gc3luYyBtb2RlIChkZWZhdWx0KQoJICogICAgICAgICAgICAweDAxID0gZHVhbCBtb25vIHN5bmMgbW9kZQoJICogICAgICAgICAgICAweDAyID0gZHVhbCBtb25vIHdpdGggbm8gc3luYyBvbiBlaXRoZXIgTCBvciBSCgkgKi8KCXVpbnQzMl90ICAgICBzeW5jX21vZGU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FwdHhfZW5jX2NmZ190IHsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCBjdXN0b21fY2ZnOwoJc3RydWN0IGFzbV9hcHR4X3YyX2VuY19jZmdfZXh0X3QgYXB0eF92Ml9jZmc7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQ0VMVCAweDAwMDEzMjIxCnN0cnVjdCBhc21fY2VsdF9zcGVjaWZpY19lbmNfY2ZnX3QgewoJLyoKCSAqIEJpdCByYXRlIHVzZWQgZm9yIGVuY29kaW5nLgoJICogVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdXBwZXIgdGhyZXNob2xkCgkgKiBmb3IgYnl0ZXMgcGVyIGZyYW1lIGlmIHZicl9mbGFnIGlzIDEuCgkgKiBPciBlbHNlLCB0aGlzIHdpbGwgYmUgdXNlZCBhcyBhIHJlZ3VsYXIgY29uc3RhbnQKCSAqIGJpdCByYXRlIGZvciBlbmNvZGVyIG91dHB1dC4KCSAqIEBSYW5nZSA6IDMyMDAwIHRvIDE1MzYwMDAKCSAqIEBEZWZhdWx0OiAxMjgKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBiaXRfcmF0ZTsKCS8qCgkgKiBGcmFtZSBzaXplIHVzZWQgZm9yIGVuY29kaW5nLgoJICogQFJhbmdlIDogNjQsIDEyOCwgMjU2LCA1MTIKCSAqIEBEZWZhdWx0OiAyNTYKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBmcmFtZV9zaXplOwoJLyoKCSAqIGNvbXBsZXhpdHkgb2YgYWxnb3JpdGhtLgoJICogQFJhbmdlIDogMC0xMAoJICogQERlZmF1bHQ6IDMKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBjb21wbGV4aXR5OwoJLyoKCSAqIFN3aXRjaCB2YXJpYWJsZSBmb3IgcHJlZGljdGlvbiBmZWF0dXJlLgoJICogVXNlZCB0byBjaG9vc2UgYmV0d2VlbiB0aGUgbGV2ZWwgb2YgaW50ZXJmcmFtZQoJICogcHJlZGljdGlvbnMgYWxsb3dlZCB3aGlsZSBlbmNvZGluZy4KCSAqIEBSYW5nZToKCSAqIDA6IEluZGVwZW5kZW50IEZyYW1lcy4KCSAqIDE6IFNob3J0IFRlcm0gaW50ZXJmcmFtZSBwcmVkaWN0aW9uIGFsbG93ZWQuCgkgKiAyOiBMb25nIHRlcm0gcHJlZGljdGlvbiBhbGxvd2VkLgoJICogQERlZmF1bHQ6IDIKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uX21vZGU7CgkvKgoJICogVmFyaWFibGUgQml0IFJhdGUgZmxhZy4KCSAqIEBEZWZhdWx0OiAwCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgdmJyX2ZsYWc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2NlbHRfZW5jX2NmZ190IHsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCAgY3VzdG9tX2NvbmZpZzsKCXN0cnVjdCBhc21fY2VsdF9zcGVjaWZpY19lbmNfY2ZnX3QgIGNlbHRfc3BlY2lmaWNfY29uZmlnOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0xEQUMgMHgwMDAxMzIyNApzdHJ1Y3QgYXNtX2xkYWNfc3BlY2lmaWNfZW5jX2NmZ190IHsKCS8qCgkgKiBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBlbmNvZGVyIG91dHB1dAoJICogYnl0ZXMgcGVyIGZyYW1lIChpLmUuIGJ5dGVzIHBlciBwYWNrZXQpLgoJICogQml0IHJhdGUgYWxzbyBjb25maWd1cmVzIHRoZSBFUU1JRC4KCSAqIFRoZSBtaW4gYml0IHJhdGUgMzAzMDAwIGJwcyBpcyBjYWxjdWxhdGVkIGZvcgoJICogNDQuMSBrSHogYW5kIDg4LjIgS0h6IHNhbXBsaW5nIGZyZXF1ZW5jaWVzIHdpdGgKCSAqIE1vYmlsZSB1c2UgUXVhbGl0eS4KCSAqIFRoZSBtYXggYml0IHJhdGUgb2YgOTkwMDAwIGJwcyBpcyBjYWxjdWxhdGVkIGZvcgoJICogOTZrSHogYW5kIDQ4IEtIeiB3aXRoIEhpZ2ggUXVhbGl0eQoJICogQFJhbmdlKGluIGJpdHMgcGVyIHNlY29uZCkKCSAqIDMwMzAwMCBmb3IgTW9iaWxlIHVzZSBRdWFsaXR5CgkgKiA2MDYwMDAgZm9yIHN0YW5kYXJkIFF1YWxpdHkKCSAqIDkwOTAwMCBmb3IgSGlnaCBRdWFsaXR5CgkgKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgYml0X3JhdGU7CgkvKgoJICogVGhlIGNoYW5uZWwgc2V0dGluZyBpbmZvcm1hdGlvbiBmb3IgTERBQyBzcGVjaWZpY2F0aW9uCgkgKiBvZiBCbHVldG9vdGggQTJEUCB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IFNSQyBhbmQgU05LCgkgKiBkZXZpY2VzIGluIEJsdWV0b290aCB0cmFuc21pc3Npb24uCgkgKiBAUmFuZ2U6CgkgKiAwIGZvciBuYXRpdmUgbW9kZQoJICogNCBmb3IgbW9ubwoJICogMiBmb3IgZHVhbCBjaGFubmVsCgkgKiAxIGZvciBzdGVyZW8KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21vZGU7CgkvKgoJICogTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKS4KCSAqIFRoZSBtaW5pbXVtIE1UVSB0aGF0IGEgTDJDQVAgaW1wbGVtZW50YXRpb24gZm9yIExEQUMgc2hhbGwKCSAqIHN1cHBvcnQgaXMgNjc5IGJ5dGVzLCBiZWNhdXNlIExEQUMgaXMgb3B0aW1pemVkIHdpdGggMi1ESDUKCSAqIHBhY2tldCBhcyBpdHMgdGFyZ2V0LgoJICogQFJhbmdlIDogNjc5CgkgKiBARGVmYXVsdDogNjc5IGZvciBMREFDQlRfTVRVXzJESDUKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBtdHU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2xkYWNfZW5jX2NmZ190IHsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCAgY3VzdG9tX2NvbmZpZzsKCXN0cnVjdCBhc21fbGRhY19zcGVjaWZpY19lbmNfY2ZnX3QgIGxkYWNfc3BlY2lmaWNfY29uZmlnOwoJc3RydWN0IGFmZV9hYnJfZW5jX2NmZ190IGFicl9jb25maWc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2VuY19mbXRfaWRfcGFyYW1fdCB7CgkvKgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqICAjQVNNX01FRElBX0ZNVF9TQkMKCSAqICAjQVNNX01FRElBX0ZNVF9BQUNfVjIKCSAqIEFueSBPcGVuRFNQIHN1cHBvcnRlZCB2YWx1ZXMKCSAqLwoJdWludDMyX3QgICAgZm10X2lkOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wb3J0X21lZGlhX3R5cGVfdCB7CgkvKgoJICogTWlub3IgdmVyc2lvbgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX1BPUlRfTUVESUFfVFlQRS4KCSAqLwoJdWludDMyX3QgICAgbWlub3JfdmVyc2lvbjsKCgkvKgoJICogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KCSAqIEB2YWx1ZXMKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzExXzAyNUsKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xMksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yMl8wNUsKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yNEsKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8zMksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV80NF8xSwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzg4XzJLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTc2XzRLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTkySwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzM1Ml84SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzM4NEsKCSAqLwoJdWludDMyX3QgICAgc2FtcGxlX3JhdGU7CgoJLyoKCSAqIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgoJICogQHZhbHVlcyAxNiwgMjQKCSAqLwoJdWludDE2X3QgICAgYml0X3dpZHRoOwoKCS8qCgkgKiBOdW1iZXIgb2YgY2hhbm5lbHMuCgkgKiBAdmFsdWVzIDEgdG8gI0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVAoJICovCgl1aW50MTZfdCAgICBudW1fY2hhbm5lbHM7CgoJLyoKCSAqIERhdGEgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGlzIHBvcnQuCgkgKiBJZiB0aGUgcG9ydCBtZWRpYSB0eXBlIGFuZCBkZXZpY2UgbWVkaWEgdHlwZSBhcmUgZGlmZmVyZW50LAoJICogaXQgc2lnbmlmaWVzIGEgZW5jb2RpbmcvZGVjb2RpbmcgdXNlIGNhc2UKCSAqIEB2YWx1ZXMKCSAqICNBRkVfUE9SVF9EQVRBX0ZPUk1BVF9QQ00KCSAqICNBRkVfUE9SVF9EQVRBX0ZPUk1BVF9HRU5FUklDX0NPTVBSRVNTRUQKCSAqLwoJdWludDE2X3QgICBkYXRhX2Zvcm1hdDsKCgkvKlRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4qLwoJdWludDE2X3QgICByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnVuaW9uIGFmZV9lbmNfY29uZmlnX2RhdGEgewoJc3RydWN0IGFzbV9zYmNfZW5jX2NmZ190IHNiY19jb25maWc7CglzdHJ1Y3QgYXNtX2FhY19lbmNfY2ZnX3YyX3QgYWFjX2NvbmZpZzsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCAgY3VzdG9tX2NvbmZpZzsKCXN0cnVjdCBhc21fY2VsdF9lbmNfY2ZnX3QgIGNlbHRfY29uZmlnOwoJc3RydWN0IGFzbV9hcHR4X2VuY19jZmdfdCAgYXB0eF9jb25maWc7CglzdHJ1Y3QgYXNtX2xkYWNfZW5jX2NmZ190ICBsZGFjX2NvbmZpZzsKfTsKCnN0cnVjdCBhZmVfZW5jX2NvbmZpZyB7Cgl1MzIgZm9ybWF0OwoJdTMyIHNjcmFtYmxlcl9tb2RlOwoJdTMyIG1vbm9fbW9kZTsKCXVuaW9uIGFmZV9lbmNfY29uZmlnX2RhdGEgZGF0YTsKfTsKCnN0cnVjdCBhZmVfZGVjX2NvbmZpZyB7Cgl1MzIgZm9ybWF0OwoJc3RydWN0IGFmZV9hYnJfZGVjX2NmZ190IGFicl9kZWNfY2ZnOwp9OwoKc3RydWN0IGFmZV9lbmNfY2ZnX2Jsa19wYXJhbV90IHsKCXVpbnQzMl90IGVuY19jZmdfYmxrX3NpemU7CgkvKgoJICpTaXplIG9mIHRoZSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gYmxvY2sgdGhhdCBmb2xsb3dzIHRoaXMgbWVtYmVyCgkgKi8KCXVuaW9uIGFmZV9lbmNfY29uZmlnX2RhdGEgZW5jX2Jsa19jb25maWc7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfRU5DT0RFUl9QQVJBTV9JRF9QQUNLRVRJWkVSX0lEIHBhcmFtZXRlci4KICovCnN0cnVjdCBhdnNfZW5jX3BhY2tldGl6ZXJfaWRfcGFyYW1fdCB7CgkvKgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqICNBVlNfTU9EVUxFX0lEX1BBQ0tFVElaRVJfQ09QCgkgKiBBbnkgT3BlbkRTUCBzdXBwb3J0ZWQgdmFsdWVzCgkgKi8KCXVpbnQzMl90IGVuY19wYWNrZXRpemVyX2lkOwp9OwoKLyoKICogUGF5bG9hZCBvZiB0aGUgQVZTX0VOQ09ERVJfUEFSQU1fSURfRU5BQkxFX1NDUkFNQkxJTkcgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGF2c19lbmNfc2V0X3NjcmFtYmxlcl9wYXJhbV90IHsKCS8qCgkgKiAgU3VwcG9ydGVkIHZhbHVlczoKCSAqICAxIDogZW5hYmxlIHNjcmFtYmxlcgoJICogIDAgOiBkaXNhYmxlIHNjcmFtYmxlcgoJICovCgl1aW50MzJfdCBlbmFibGVfc2NyYW1ibGVyOwp9OwoKLyoKICogUGF5bG9hZCBvZiB0aGUgQ0FQSV9WMl9QQVJBTV9JRF9BUFRYX0VOQ19TV0lUQ0hfVE9fTU9OTyBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX2VuY19zZXRfY2hhbm5lbF9tb2RlX3BhcmFtX3QgewoJLyoKCSogIFN1cHBvcnRlZCB2YWx1ZXM6CgkqICAxIDogbW9ubwoJKiAgMiA6IGR1YWxfbW9ubwoJKi8KCXUzMiBjaGFubmVsX21vZGU7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfRU5DT0RFUl9QQVJBTV9JRF9CSVRfUkFURV9MRVZFTF9NQVAgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGFmZV9lbmNfbGV2ZWxfdG9fYml0cmF0ZV9tYXBfcGFyYW1fdCB7CgkvKgoJICogUGFyYW1ldGVyIGZvciBtYXBwaW5nIGxpbmsgcXVhbGl0eSBsZXZlbCB0byBiaXRyYXRlLgoJICovCglzdHJ1Y3QgYWZlX3F1YWxpdHlfbGV2ZWxfdG9fYml0cmF0ZV9pbmZvIG1hcHBpbmdfdGFibGU7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfRU5DREVDX1BBUkFNX0lEX0RFQ19UT19FTkNfQ09NTVVOSUNBVElPTiBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX2VuY19kZWNfaW1jX2luZm9fcGFyYW1fdCB7CgkvKgoJICogUGFyYW1ldGVyIHRvIHNldCB1cCBJbnRlciBNb2R1bGUgQ29tbXVuaWNhdGlvbiAoSU1DKSBiZXR3ZWVuCgkgKiBBRkUgRGVjb2RlciBhbmQgRW5jb2Rlci4KCSAqLwoJc3RydWN0IGFmZV9pbWNfZGVjX2VuY19pbmZvIGltY19pbmZvOwp9OwoKLyoKICogUGF5bG9hZCBvZiB0aGUgQVZTX0RFQ09ERVJfUEFSQU1fSURfREVQQUNLRVRJWkVSX0lEIHBhcmFtZXRlci4KICovCnN0cnVjdCBhdnNfZGVjX2RlcGFja2V0aXplcl9pZF9wYXJhbV90IHsKCS8qCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOgoJICogI0FWU19NT0RVTEVfSURfREVQQUNLRVRJWkVSX0NPUAoJICogQW55IE9wZW5EU1Agc3VwcG9ydGVkIHZhbHVlcwoJICovCgl1aW50MzJfdCBkZWNfZGVwYWNrZXRpemVyX2lkOwp9OwoKdW5pb24gYWZlX3BvcnRfY29uZmlnIHsKCXN0cnVjdCBhZmVfcGFyYW1faWRfcGNtX2NmZyAgICAgICAgICAgICAgIHBjbTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfaTJzX2NmZyAgICAgICAgICAgICAgIGkyczsKCXN0cnVjdCBhZmVfcGFyYW1faWRfaGRtaV9tdWx0aV9jaGFuX2F1ZGlvX2NmZyBoZG1pX211bHRpX2NoOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zbGltYnVzX2NmZyAgICAgICAgICAgc2xpbV9zY2g7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3J0X3Byb3h5X3BvcnRfY2ZnICAgICBydHByb3h5OwoJc3RydWN0IGFmZV9wYXJhbV9pZF9pbnRlcm5hbF9idF9mbV9jZmcgICAgaW50X2J0X2ZtOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9wc2V1ZG9fcG9ydF9jZmcgICAgICAgcHNldWRvX3BvcnQ7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2RldmljZV9od19kZWxheV9jZmcgICBod19kZWxheTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2ZnICAgICAgICAgICAgIHNwZGlmOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zZXRfdG9wb2xvZ3lfY2ZnICAgICAgdG9wb2xvZ3k7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3RkbV9jZmcgICAgICAgICAgICAgICB0ZG07CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19jZmcgICAgICAgICB1c2JfYXVkaW87CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2FwdHhfc3luY19tb2RlICAgICAgICBzeW5jX21vZGVfcGFyYW07CglzdHJ1Y3QgYWZlX2VuY19mbXRfaWRfcGFyYW1fdCAgICAgICAgICAgICBlbmNfZm10OwoJc3RydWN0IGFmZV9wb3J0X21lZGlhX3R5cGVfdCAgICAgICAgICAgICAgbWVkaWFfdHlwZTsKCXN0cnVjdCBhZmVfZW5jX2NmZ19ibGtfcGFyYW1fdCAgICAgICAgICAgIGVuY19ibGtfcGFyYW07CglzdHJ1Y3QgYXZzX2VuY19wYWNrZXRpemVyX2lkX3BhcmFtX3QgICAgICBlbmNfcGt0X2lkX3BhcmFtOwoJc3RydWN0IGF2c19lbmNfc2V0X3NjcmFtYmxlcl9wYXJhbV90ICAgICAgZW5jX3NldF9zY3JhbWJsZXJfcGFyYW07CglzdHJ1Y3QgYXZzX2RlY19kZXBhY2tldGl6ZXJfaWRfcGFyYW1fdCAgICBkZWNfZGVwa3RfaWRfcGFyYW07CglzdHJ1Y3QgYWZlX2VuY19sZXZlbF90b19iaXRyYXRlX21hcF9wYXJhbV90ICAgIG1hcF9wYXJhbTsKCXN0cnVjdCBhZmVfZW5jX2RlY19pbWNfaW5mb19wYXJhbV90ICAgICAgIGltY19pbmZvX3BhcmFtOwoJc3RydWN0IGFmZV9lbmNfc2V0X2NoYW5uZWxfbW9kZV9wYXJhbV90ICAgY2hhbm5lbF9tb2RlX3BhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9hdWRpb2lmX2NvbmZpZ19jb21tYW5kX25vX3BheWxvYWQgewoJc3RydWN0IGFwcl9oZHIJCQloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfYXVkaW9pZl9jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkcgkJCWhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgcGRhdGE7Cgl1bmlvbiBhZmVfcG9ydF9jb25maWcgICAgICAgICAgICBwb3J0Owp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9DTURfREVWSUNFX1NUQVJUIDB4MDAwMTAwRTUKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BPUlRfQ01EX0RFVklDRV9TVEFSVC4qLwpzdHJ1Y3QgYWZlX3BvcnRfY21kX2RldmljZV9zdGFydCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IGludGVyZmFjZSBhbmQgZGlyZWN0aW9uIChSeCBvciBUeCkgdG8gc3RhcnQuIEFuIGV2ZW4KICogbnVtYmVyIHJlcHJlc2VudHMgdGhlIFJ4IGRpcmVjdGlvbiwgYW5kIGFuIG9kZCBudW1iZXIgcmVwcmVzZW50cwogKiB0aGUgVHggZGlyZWN0aW9uLgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciAzMi1iaXQgYWxpZ25tZW50LiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIDAuKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QT1JUX0NNRF9ERVZJQ0VfU1RPUCAgMHgwMDAxMDBFNgoKLyogUGF5bG9hZCBvZiB0aGUgI0FGRV9QT1JUX0NNRF9ERVZJQ0VfU1RPUC4gKi8Kc3RydWN0IGFmZV9wb3J0X2NtZF9kZXZpY2Vfc3RvcCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IGludGVyZmFjZSBhbmQgZGlyZWN0aW9uIChSeCBvciBUeCkgdG8gc3RhcnQuIEFuIGV2ZW4KICogbnVtYmVyIHJlcHJlc2VudHMgdGhlIFJ4IGRpcmVjdGlvbiwgYW5kIGFuIG9kZCBudW1iZXIgcmVwcmVzZW50cwogKiB0aGUgVHggZGlyZWN0aW9uLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIDMyLWJpdCBhbGlnbm1lbnQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4qLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAweDAwMDEwMEVBCgovKiAgTWVtb3J5IG1hcCByZWdpb25zIGNvbW1hbmQgcGF5bG9hZCB1c2VkIGJ5IHRoZQogKiAjQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgLgogKiBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgY2xpZW50cyB0byBtYXAgbXVsdGlwbGUgc2hhcmVkIG1lbW9yeQogKiByZWdpb25zIGluIGEgc2luZ2xlIGNvbW1hbmQuIEZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUKICogbnVtX3JlZ2lvbnMgb2YgYWZlX3NlcnZpY2Vfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZC4KICovCnN0cnVjdCBhZmVfc2VydmljZV9jbWRfc2hhcmVkX21lbV9tYXBfcmVnaW9ucyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CnUxNiAgICAgICAgICAgICAgICAgIG1lbV9wb29sX2lkOwovKiBUeXBlIG9mIG1lbW9yeSBvbiB3aGljaCB0aGlzIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRFNQX01FTU9SWV9NQVBfRUJJX1BPT0wKICogLSAjQURTUF9NRU1PUllfTUFQX1NNSV9QT09MCiAqIC0gI0FEU1BfTUVNT1JZX01BUF9TSE1FTThfNEtfUE9PTAogKiAtIE90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQKICoKICogVGhlIG1lbW9yeSBwb29sIElEIGltcGxpY2l0bHkgZGVmaW5lcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZQogKiBtZW1vcnkuIENoYXJhY3RlcmlzdGljcyBtYXkgaW5jbHVkZSBhbGlnbm1lbnQgdHlwZSwgcGVybWlzc2lvbnMsCiAqIGV0Yy4KICoKICogQURTUF9NRU1PUllfTUFQX0VCSV9QT09MIGlzIEV4dGVybmFsIEJ1ZmZlciBJbnRlcmZhY2UgdHlwZSBtZW1vcnkKICogQURTUF9NRU1PUllfTUFQX1NNSV9QT09MIGlzIFNoYXJlZCBNZW1vcnkgSW50ZXJmYWNlIHR5cGUgbWVtb3J5CiAqIEFEU1BfTUVNT1JZX01BUF9TSE1FTThfNEtfUE9PTCBpcyBzaGFyZWQgbWVtb3J5LCBieXRlCiAqIGFkZHJlc3NhYmxlLCBhbmQgNCBLQiBhbGlnbmVkLgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX3JlZ2lvbnM7Ci8qIE51bWJlciBvZiByZWdpb25zIHRvIG1hcC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSBBbnkgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8KICovCgoJdTMyICAgICAgICAgICAgICAgICAgcHJvcGVydHlfZmxhZzsKLyogQ29uZmlndXJlcyBvbmUgY29tbW9uIHByb3BlcnR5IGZvciBhbGwgdGhlIHJlZ2lvbnMgaW4gdGhlCiAqIHBheWxvYWQuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gMHgwMDAwMDAwMCB0byAweDAwMDAwMDAxCiAqCiAqIGIwIC0gYml0IDAgaW5kaWNhdGVzIHBoeXNpY2FsIG9yIHZpcnR1YWwgbWFwcGluZyAwIFNoYXJlZCBtZW1vcnkKICogYWRkcmVzcyBwcm92aWRlZCBpbiBhZmVfc2VydmljZV9zaGFyZWRfbWFwX3JlZ2lvbl9wYXlsb2FkaXMgYQogKiBwaHlzaWNhbCBhZGRyZXNzLiBUaGUgc2hhcmVkIG1lbW9yeSBuZWVkcyB0byBiZSBtYXBwZWQoIGhhcmR3YXJlCiAqIFRMQiBlbnRyeSkgYW5kIGEgc29mdHdhcmUgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgZm9yIGludGVybmFsCiAqIGJvb2sga2VlcGluZy4KICoKICogMSBTaGFyZWQgbWVtb3J5IGFkZHJlc3MgcHJvdmlkZWQgaW4KICogYWZlX3NlcnZpY2Vfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZGlzIGEgdmlydHVhbCBhZGRyZXNzLiBUaGUKICogc2hhcmVkIG1lbW9yeSBtdXN0IG5vdCBiZSBtYXBwZWQgKHNpbmNlIGhhcmR3YXJlIFRMQiBlbnRyeSBpcwogKiBhbHJlYWR5IGF2YWlsYWJsZSkgYnV0IGEgc29mdHdhcmUgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgZm9yCiAqIGludGVybmFsIGJvb2sga2VlcGluZy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHR3byBzZXJ2aWNlcyB3aXRoIGluCiAqIEFEU1AgaXMgY29tbXVuaWNhdGluZyB2aWEgQVBSLiBUaGV5IGNhbiBub3cgZGlyZWN0bHkgY29tbXVuaWNhdGUKICogdmlhIHRoZSBWaXJ0dWFsIGFkZHJlc3MgaW5zdGVhZCBvZiBQaHlzaWNhbCBhZGRyZXNzLiBUaGUgdmlydHVhbAogKiByZWdpb25zIG11c3QgYmUgY29udGlndW91cy4gbnVtX3JlZ2lvbnMgbXVzdCBiZSAxIGluIHRoaXMgY2FzZS4KICoKICogYjMxLWIxIC0gcmVzZXJ2ZWQgYml0cy4gbXVzdCBiZSBzZXQgdG8gemVybwogKi8KCgp9IF9fcGFja2VkOwovKiAgTWFwIHJlZ2lvbiBwYXlsb2FkIHVzZWQgYnkgdGhlCiAqIGFmZV9zZXJ2aWNlX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWRzdHJ1Y3R1cmUuCiAqLwpzdHJ1Y3QgYWZlX3NlcnZpY2Vfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCB7Cgl1MzIgICAgICAgICAgICAgICAgICBzaG1fYWRkcl9sc3c7Ci8qIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgb2Ygc3RhcnRpbmcgYWRkcmVzcyBpbiB0aGUgbWVtb3J5CiAqIHJlZ2lvbiB0byBtYXAuIEl0IG11c3QgYmUgY29udGlndW91cyBtZW1vcnksIGFuZCBpdCBtdXN0IGJlIDQgS0IKICogYWxpZ25lZC4KICogU3VwcG9ydGVkIHZhbHVlczogLSBBbnkgMzIgYml0IHZhbHVlCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBzaG1fYWRkcl9tc3c7Ci8qIG1vc3Qgc2lnbmlmaWNhbnQgd29yZCBvZiBzdGFydG5nIGFkZHJlc3MgaW4gdGhlIG1lbW9yeSByZWdpb24KICogdG8gbWFwLiBGb3IgMzIgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgdGhpcyBmaWVsZCBtdXN0IGJlIHNldAogKiB0byB6ZXJvLiBGb3IgMzYgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYml0MzEgdG8gYml0IDQgbXVzdCBiZQogKiBzZXQgdG8gemVybwogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIEZvciAzMiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCB0aGlzIGZpZWxkCiAqIG11c3QgYmUgc2V0IHRvIHplcm8uIC0gRm9yIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdDMxIHRvCiAqIGJpdCA0IG11c3QgYmUgc2V0IHRvIHplcm8gLSBGb3IgNjQgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYW55CiAqIDMyIGJpdCB2YWx1ZQogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgbWVtX3NpemVfYnl0ZXM7Ci8qIE51bWJlciBvZiBieXRlcyBpbiB0aGUgcmVnaW9uLiBUaGUgYURTUCB3aWxsIGFsd2F5cyBtYXAgdGhlCiAqIHJlZ2lvbnMgYXMgdmlydHVhbCBjb250aWd1b3VzIG1lbW9yeSwgYnV0IHRoZSBtZW1vcnkgc2l6ZSBtdXN0IGJlCiAqIGluIG11bHRpcGxlcyBvZiA0IEtCIHRvIGF2b2lkIGdhcHMgaW4gdGhlIHZpcnR1YWxseSBjb250aWd1b3VzCiAqIG1hcHBlZCBtZW1vcnkuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gbXVsdGlwbGVzIG9mIDRLQgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9TRVJWSUNFX0NNRFJTUF9TSEFSRURfTUVNX01BUF9SRUdJT05TIDB4MDAwMTAwRUIKc3RydWN0IGFmZV9zZXJ2aWNlX2NtZHJzcF9zaGFyZWRfbWVtX21hcF9yZWdpb25zIHsKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBBIG1lbW9yeSBtYXAgaGFuZGxlIGVuY2Fwc3VsYXRpbmcgc2hhcmVkIG1lbW9yeSBhdHRyaWJ1dGVzIGlzCiAqIHJldHVybmVkIGlmZiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kIGlzCiAqIHN1Y2Nlc3NmdWwuIEluIHRoZSBjYXNlIG9mIGZhaWx1cmUgLCBhIGdlbmVyaWMgQVBSIGVycm9yIHJlc3BvbnNlCiAqIGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnQuCiAqCiAqIFN1cHBvcnRlZCBWYWx1ZXM6IC0gQW55IDMyIGJpdCB2YWx1ZQogKi8KCn0gX19wYWNrZWQ7CiNkZWZpbmUgQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fVU5NQVBfUkVHSU9OUyAweDAwMDEwMEVDCi8qIE1lbW9yeSB1bm1hcCByZWdpb25zIGNvbW1hbmQgcGF5bG9hZCB1c2VkIGJ5IHRoZQogKiAjQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fVU5NQVBfUkVHSU9OUwogKgogKiBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgY2xpZW50cyB0byB1bm1hcCBtdWx0aXBsZSBzaGFyZWQgbWVtb3J5CiAqIHJlZ2lvbnMgaW4gYSBzaW5nbGUgY29tbWFuZC4KICovCgoKc3RydWN0IGFmZV9zZXJ2aWNlX2NtZF9zaGFyZWRfbWVtX3VubWFwX3JlZ2lvbnMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwp1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogbWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkKICogQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZHMKICoKICogU3VwcG9ydGVkIFZhbHVlczoKICogLSBBbnkgMzIgYml0IHZhbHVlCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSAgQUZFX1BPUlRfQ01EX0dFVF9QQVJBTV9WMiAweDAwMDEwMEYwCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QT1JUX0NNRF9HRVRfUEFSQU1fVjIgY29tbWFuZCwKICogd2hpY2ggcXVlcmllcyBmb3Igb25lIHBvc3QvcHJlcHJvY2Vzc2luZyBwYXJhbWV0ZXIgb2YgYQogKiBzdHJlYW0uCiAqLwpzdHJ1Y3QgYWZlX3BvcnRfY21kX2dldF9wYXJhbV92MiB7Cgl1MTYgcG9ydF9pZDsKLyogUG9ydCBpbnRlcmZhY2UgYW5kIGRpcmVjdGlvbiAoUnggb3IgVHgpIHRvIHN0YXJ0LiAqLwoKCXUxNiBwYXlsb2FkX3NpemU7Ci8qIE1heGltdW0gZGF0YSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgSUQvbW9kdWxlIElEIGNvbWJpbmF0aW9uLgogKiBUaGlzIGlzIGEgbXVsdGlwbGUgb2YgZm91ciBieXRlcwogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgoJdTMyIHBheWxvYWRfYWRkcmVzc19sc3c7Ci8qIExTVyBvZiA2NCBiaXQgUGF5bG9hZCBhZGRyZXNzLiBBZGRyZXNzIHNob3VsZCBiZSAzMi1ieXRlLAogKiA0a2J5dGUgYWxpZ25lZCBhbmQgbXVzdCBiZSBjb250aWcgbWVtb3J5LgogKi8KCgoJdTMyIHBheWxvYWRfYWRkcmVzc19tc3c7Ci8qIE1TVyBvZiA2NCBiaXQgUGF5bG9hZCBhZGRyZXNzLiBJbiBjYXNlIG9mIDMyLWJpdCBzaGFyZWQKICogbWVtb3J5IGFkZHJlc3MsIHRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gSW4gY2FzZSBvZiAzNi1iaXQKICogc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQtNCB0byBiaXQtMzEgbXVzdCBiZSBzZXQgdG8gemVyby4KICogQWRkcmVzcyBzaG91bGQgYmUgMzItYnl0ZSwgNGtieXRlIGFsaWduZWQgYW5kIG11c3QgYmUgY29udGlndW91cwogKiBtZW1vcnkuCiAqLwoKCXUzMiBtZW1fbWFwX2hhbmRsZTsKLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkKICogQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZHMuCiAqIFN1cHBvcnRlZCBWYWx1ZXM6IC0gTlVMTCAtLSBNZXNzYWdlLiBUaGUgcGFyYW1ldGVyIGRhdGEgaXMKICogaW4tYmFuZC4gLSBOb24tTlVMTCAtLSBUaGUgcGFyYW1ldGVyIGRhdGEgaXMgT3V0LWJhbmQuUG9pbnRlciB0bwogKiAtIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGluIHNoYXJlZCBtZW1vcnkgb2YgdGhlIHBheWxvYWQgZGF0YS4KICogRm9yIGRldGFpbGVkIHBheWxvYWQgY29udGVudCwgc2VlIHRoZSBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyCiAqIHN0cnVjdHVyZQogKi8KCgoJdTMyIG1vZHVsZV9pZDsKLyogSUQgb2YgdGhlIG1vZHVsZSB0byBiZSBxdWVyaWVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBWYWxpZCBtb2R1bGUgSUQKICovCgoJdTMyIHBhcmFtX2lkOwovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHRvIGJlIHF1ZXJpZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFZhbGlkIHBhcmFtZXRlciBJRAogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BPUlRfQ01EUlNQX0dFVF9QQVJBTV9WMiAweDAwMDEwMTA2CgovKiBQYXlsb2FkIG9mIHRoZSAjQUZFX1BPUlRfQ01EUlNQX0dFVF9QQVJBTV9WMiBtZXNzYWdlLCB3aGljaAogKiByZXNwb25kcyB0byBhbiAjQUZFX1BPUlRfQ01EX0dFVF9QQVJBTV9WMiBjb21tYW5kLgogKgogKiBJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIHBhcmFtZXRlcnMgc3RydWN0dXJlCiAqIChhZmVfcG9ydF9wYXJhbV9kYXRhKSBjb250YWluaW5nIHRoZSByZXNwb25zZShhY2tub3dsZWRnbWVudCkKICogcGFyYW1ldGVyIHBheWxvYWQuIFRoaXMgcGF5bG9hZCBpcyBpbmNsdWRlZCBmb3IgYW4gaW4tYmFuZAogKiBzY2VuYXJpby4gRm9yIGFuIGFkZHJlc3Mvc2hhcmVkIG1lbW9yeS1iYXNlZCBzZXQgcGFyYW1ldGVyLCB0aGlzCiAqIHBheWxvYWQgaXMgbm90IG5lZWRlZC4KICovCgoKc3RydWN0IGFmZV9wb3J0X2NtZHJzcF9nZXRfcGFyYW1fdjIgewoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfTFBBU1NfQ09SRV9TSEFSRURfQ0xPQ0tfQ09ORklHCTB4MDAwMTAyOEMKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fTFBBU1NfQ09SRV9TSEFSRURfQ0xLX0NPTkZJRwkweDEKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9MUEFTU19DT1JFX1NIQVJFRF9DTE9DS19DT05GSUcgcGFyYW1ldGVyIHVzZWQgYnkKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9scGFzc19jb3JlX3NoYXJlZF9jbGtfY2ZnIHsKCXUzMglscGFzc19jb3JlX3NoYXJlZF9jbGtfY2ZnX21pbm9yX3ZlcnNpb247Ci8qCiAqIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgbHBhc3MgY29yZSBzaGFyZWQgY2xvY2sgY29uZmlndXJhdGlvbgogKiBTdXBwb3J0ZWQgdmFsdWU6IEFGRV9BUElfVkVSU0lPTl9MUEFTU19DT1JFX1NIQVJFRF9DTEtfQ09ORklHCiAqLwoJdTMyCWVuYWJsZTsKLyoKICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGxwYXNzIGNvcmUgc2hhcmVkIGNsb2NrIGlzCiAqIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgwKS4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xwYXNzX2NvcmVfc2hhcmVkX2Nsa19jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkcgkJICAgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfbHBhc3NfY29yZV9zaGFyZWRfY2xrX2NmZyBjbGtfY2ZnOwp9IF9fcGFja2VkOwoKLyogYWRzcF9hZmVfc2VydmljZV9jb21tYW5kcy5oICovCgojZGVmaW5lIEFEU1BfTUVNT1JZX01BUF9FQklfUE9PTCAgICAgIDAKCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX1NNSV9QT09MICAgICAgMQojZGVmaW5lIEFEU1BfTUVNT1JZX01BUF9JTUVNX1BPT0wgICAgICAyCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX1NITUVNOF80S19QT09MICAgICAgMwoKLyogRGVmaW5pdGlvbiBvZiB2aXJ0dWFsIG1lbW9yeSBmbGFnICovCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX1ZJUlRVQUxfTUVNT1JZIDEKCi8qIERlZmluaXRpb24gb2YgcGh5c2ljYWwgbWVtb3J5IGZsYWcgKi8KI2RlZmluZSBBRFNQX01FTU9SWV9NQVBfUEhZU0lDQUxfTUVNT1JZIDAKCiNkZWZpbmUgTlVMTF9QT1BQX1RPUE9MT0dZCQkJCTB4MDAwMTBDNjgKI2RlZmluZSBOVUxMX0NPUFBfVE9QT0xPR1kJCQkJMHgwMDAxMDMxMgojZGVmaW5lIERFRkFVTFRfQ09QUF9UT1BPTE9HWQkJCQkweDAwMDEwMzE0CiNkZWZpbmUgREVGQVVMVF9QT1BQX1RPUE9MT0dZCQkJCTB4MDAwMTBCRTQKI2RlZmluZSBDT01QUkVTU0VEX1BBU1NUSFJPVUdIX0RFRkFVTFRfVE9QT0xPR1kgICAgICAgICAweDAwMDEwNzZCCiNkZWZpbmUgQ09NUFJFU1NFRF9QQVNTVEhST1VHSF9OT05FX1RPUE9MT0dZICAgICAgICAgICAgMHgwMDAxMDc3NAojZGVmaW5lIFZQTV9UWF9TTV9FQ05TX0NPUFBfVE9QT0xPR1kJCQkweDAwMDEwRjcxCiNkZWZpbmUgVlBNX1RYX1NNX0VDTlNfVjJfQ09QUF9UT1BPTE9HWQkJCTB4MDAwMTBGODkKI2RlZmluZSBWUE1fVFhfRE1fRkxVRU5DRV9DT1BQX1RPUE9MT0dZCQkJMHgwMDAxMEY3MgojZGVmaW5lIFZQTV9UWF9RTUlDX0ZMVUVOQ0VfQ09QUF9UT1BPTE9HWQkJMHgwMDAxMEY3NQojZGVmaW5lIFZQTV9UWF9ETV9SRkVDTlNfQ09QUF9UT1BPTE9HWQkJCTB4MDAwMTBGODYKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9UT1BPTE9HWV9JRF9EVFNfSFBYCQkweDEwMDE1MDAyCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fVE9QT0xPR1lfSURfQVVESU9TUEhFUkUJMHgxMDAyODAwMAoKLyogTWVtb3J5IG1hcCByZWdpb25zIGNvbW1hbmQgcGF5bG9hZCB1c2VkIGJ5IHRoZQogKiAjQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICwjQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TCiAqIGNvbW1hbmRzLgogKgogKiBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgY2xpZW50cyB0byBtYXAgbXVsdGlwbGUgc2hhcmVkIG1lbW9yeQogKiByZWdpb25zIGluIGEgc2luZ2xlIGNvbW1hbmQuIEZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUKICogbnVtX3JlZ2lvbnMgb2YgYXZzX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWQuCiAqLwoKCnN0cnVjdCBhdnNfY21kX3NoYXJlZF9tZW1fbWFwX3JlZ2lvbnMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTE2ICAgICAgICAgICAgICAgICAgbWVtX3Bvb2xfaWQ7Ci8qIFR5cGUgb2YgbWVtb3J5IG9uIHdoaWNoIHRoaXMgbWVtb3J5IHJlZ2lvbiBpcyBtYXBwZWQuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gI0FEU1BfTUVNT1JZX01BUF9FQklfUE9PTCAtCiAqICNBRFNQX01FTU9SWV9NQVBfU01JX1BPT0wgLSAjQURTUF9NRU1PUllfTUFQX0lNRU1fUE9PTAogKiAodW5zdXBwb3J0ZWQpIC0gI0FEU1BfTUVNT1JZX01BUF9TSE1FTThfNEtfUE9PTCAtIE90aGVyIHZhbHVlcwogKiBhcmUgcmVzZXJ2ZWQKICoKICogVGhlIG1lbW9yeSBJRCBpbXBsaWNpdGx5IGRlZmluZXMgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUKICogbWVtb3J5LiBDaGFyYWN0ZXJpc3RpY3MgbWF5IGluY2x1ZGUgYWxpZ25tZW50IHR5cGUsIHBlcm1pc3Npb25zLAogKiBldGMuCiAqCiAqIFNITUVNOF80SyBpcyBzaGFyZWQgbWVtb3J5LCBieXRlIGFkZHJlc3NhYmxlLCBhbmQgNCBLQiBhbGlnbmVkLgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX3JlZ2lvbnM7CgkvKiBOdW1iZXIgb2YgcmVnaW9ucyB0byBtYXAuKi8KCgl1MzIgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9mbGFnOwovKiBDb25maWd1cmVzIG9uZSBjb21tb24gcHJvcGVydHkgZm9yIGFsbCB0aGUgcmVnaW9ucyBpbiB0aGUKICogcGF5bG9hZC4gTm8gdHdvIHJlZ2lvbnMgaW4gdGhlIHNhbWUgbWVtb3J5IG1hcCByZWdpb25zIGNtZCBjYW4KICogaGF2ZSBkaWZmZXJudCBwcm9wZXJ0eS4gU3VwcG9ydGVkIHZhbHVlczogLSAweDAwMDAwMDAwIHRvCiAqIDB4MDAwMDAwMDEKICoKICogYjAgLSBiaXQgMCBpbmRpY2F0ZXMgcGh5c2ljYWwgb3IgdmlydHVhbCBtYXBwaW5nIDAgc2hhcmVkIG1lbW9yeQogKiBhZGRyZXNzIHByb3ZpZGVkIGluIGF2c19zaGFyZWRfbWFwX3JlZ2lvbnNfcGF5bG9hZCBpcyBwaHlzaWNhbAogKiBhZGRyZXNzLiBUaGUgc2hhcmVkIG1lbW9yeSBuZWVkcyB0byBiZSBtYXBwZWQoIGhhcmR3YXJlIFRMQgogKiBlbnRyeSkKICoKICogYW5kIGEgc29mdHdhcmUgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgZm9yIGludGVybmFsIGJvb2sga2VlcGluZy4KICoKICogMSBTaGFyZWQgbWVtb3J5IGFkZHJlc3MgcHJvdmlkZWQgaW4gTWF5UGF5bG9hZFt1c1JlZ2lvbnNdIGlzCiAqIHZpcnR1YWwgYWRkcmVzcy4gVGhlIHNoYXJlZCBtZW1vcnkgbXVzdCBub3QgYmUgbWFwcGVkIChzaW5jZQogKiBoYXJkd2FyZSBUTEIgZW50cnkgaXMgYWxyZWFkeSBhdmFpbGFibGUpIGJ1dCBhIHNvZnR3YXJlIGVudHJ5CiAqIG5lZWRzIHRvIGJlIGFkZGVkIGZvciBpbnRlcm5hbCBib29rIGtlZXBpbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bAogKiBpZiB0d28gc2VydmljZXMgd2l0aCBpbiBBRFNQIGlzIGNvbW11bmljYXRpbmcgdmlhIEFQUi4gVGhleSBjYW4KICogbm93IGRpcmVjdGx5IGNvbW11bmljYXRlIHZpYSB0aGUgVmlydHVhbCBhZGRyZXNzIGluc3RlYWQgb2YKICogUGh5c2ljYWwgYWRkcmVzcy4gVGhlIHZpcnR1YWwgcmVnaW9ucyBtdXN0IGJlIGNvbnRpZ3VvdXMuCiAqCiAqIGIzMS1iMSAtIHJlc2VydmVkIGJpdHMuIG11c3QgYmUgc2V0IHRvIHplcm8KICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGF2c19zaGFyZWRfbWFwX3JlZ2lvbl9wYXlsb2FkIHsKCXUzMiAgICAgICAgICAgICAgICAgIHNobV9hZGRyX2xzdzsKLyogbGVhc3Qgc2lnbmlmaWNhbnQgd29yZCBvZiBzaGFyZWQgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQogKiByZWdpb24gdG8gbWFwLiBJdCBtdXN0IGJlIGNvbnRpZ3VvdXMgbWVtb3J5LCBhbmQgaXQgbXVzdCBiZSA0IEtCCiAqIGFsaWduZWQuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNobV9hZGRyX21zdzsKLyogbW9zdCBzaWduaWZpY2FudCB3b3JkIG9mIHNoYXJlZCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CiAqIHJlZ2lvbiB0byBtYXAuIEZvciAzMiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCB0aGlzIGZpZWxkIG11c3QKICogdGJlIHNldCB0byB6ZXJvLiBGb3IgMzYgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYml0MzEgdG8gYml0IDQKICogbXVzdCBiZSBzZXQgdG8gemVybwogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBtZW1fc2l6ZV9ieXRlczsKLyogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSByZWdpb24uCiAqCiAqIFRoZSBhRFNQIHdpbGwgYWx3YXlzIG1hcCB0aGUgcmVnaW9ucyBhcyB2aXJ0dWFsIGNvbnRpZ3VvdXMKICogbWVtb3J5LCBidXQgdGhlIG1lbW9yeSBzaXplIG11c3QgYmUgaW4gbXVsdGlwbGVzIG9mIDQgS0IgdG8gYXZvaWQKICogZ2FwcyBpbiB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWFwcGVkIG1lbW9yeS4KICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGF2c19jbWRfc2hhcmVkX21lbV91bm1hcF9yZWdpb25zIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogLCBBRE1fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMsIGNvbW1hbmRzCiAqLwoKfSBfX3BhY2tlZDsKCi8qIE1lbW9yeSBtYXAgY29tbWFuZCByZXNwb25zZSBwYXlsb2FkIHVzZWQgYnkgdGhlCiAqICNBU01fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogLCNBRE1fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICovCgoKc3RydWN0IGF2c19jbWRyc3Bfc2hhcmVkX21lbV9tYXBfcmVnaW9ucyB7Cgl1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogQSBtZW1vcnkgbWFwIGhhbmRsZSBlbmNhcHN1bGF0aW5nIHNoYXJlZCBtZW1vcnkgYXR0cmlidXRlcyBpcwogKiByZXR1cm5lZAogKi8KCn0gX19wYWNrZWQ7CgovKmFkc3BfYXVkaW9fbWVtbWFwX2FwaS5oKi8KCi8qIEFTTSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyAqLwpzdHJ1Y3QgYXNtX3dtYV9jZmcgewoJdTE2IGZvcm1hdF90YWc7Cgl1MTYgY2hfY2ZnOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIGF2Z19ieXRlc19wZXJfc2VjOwoJdTE2IGJsb2NrX2FsaWduOwoJdTE2IHZhbGlkX2JpdHNfcGVyX3NhbXBsZTsKCXUzMiBjaF9tYXNrOwoJdTE2IGVuY29kZV9vcHQ7Cgl1MTYgYWR2X2VuY29kZV9vcHQ7Cgl1MzIgYWR2X2VuY29kZV9vcHQyOwoJdTMyIGRyY19wZWFrX3JlZjsKCXUzMiBkcmNfcGVha190YXJnZXQ7Cgl1MzIgZHJjX2F2ZV9yZWY7Cgl1MzIgZHJjX2F2ZV90YXJnZXQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX3dtYXByb19jZmcgewoJdTE2IGZvcm1hdF90YWc7Cgl1MTYgY2hfY2ZnOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIGF2Z19ieXRlc19wZXJfc2VjOwoJdTE2IGJsb2NrX2FsaWduOwoJdTE2IHZhbGlkX2JpdHNfcGVyX3NhbXBsZTsKCXUzMiBjaF9tYXNrOwoJdTE2IGVuY29kZV9vcHQ7Cgl1MTYgYWR2X2VuY29kZV9vcHQ7Cgl1MzIgYWR2X2VuY29kZV9vcHQyOwoJdTMyIGRyY19wZWFrX3JlZjsKCXUzMiBkcmNfcGVha190YXJnZXQ7Cgl1MzIgZHJjX2F2ZV9yZWY7Cgl1MzIgZHJjX2F2ZV90YXJnZXQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FhY19jZmcgewoJdTE2IGZvcm1hdDsKCXUxNiBhb3Q7Cgl1MTYgZXBfY29uZmlnOwoJdTE2IHNlY3Rpb25fZGF0YV9yZXNpbGllbmNlOwoJdTE2IHNjYWxlZmFjdG9yX2RhdGFfcmVzaWxpZW5jZTsKCXUxNiBzcGVjdHJhbF9kYXRhX3Jlc2lsaWVuY2U7Cgl1MTYgY2hfY2ZnOwoJdTE2IHJlc2VydmVkOwoJdTMyIHNhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9hbXJ3YnBsdXNfY2ZnIHsKCXUzMiAgc2l6ZV9ieXRlczsKCXUzMiAgdmVyc2lvbjsKCXUzMiAgbnVtX2NoYW5uZWxzOwoJdTMyICBhbXJfYmFuZF9tb2RlOwoJdTMyICBhbXJfZHR4X21vZGU7Cgl1MzIgIGFtcl9mcmFtZV9mbXQ7Cgl1MzIgIGFtcl9sc2ZfaWR4Owp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9mbGFjX2NmZyB7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgZXh0X3NhbXBsZV9yYXRlOwoJdTMyIG1pbl9mcmFtZV9zaXplOwoJdTMyIG1heF9mcmFtZV9zaXplOwoJdTE2IHN0cmVhbV9pbmZvX3ByZXNlbnQ7Cgl1MTYgbWluX2Jsa19zaXplOwoJdTE2IG1heF9ibGtfc2l6ZTsKCXUxNiBjaF9jZmc7Cgl1MTYgc2FtcGxlX3NpemU7Cgl1MTYgbWQ1X3N1bTsKfTsKCnN0cnVjdCBhc21fYWxhY19jZmcgewoJdTMyIGZyYW1lX2xlbmd0aDsKCXU4IGNvbXBhdGlibGVfdmVyc2lvbjsKCXU4IGJpdF9kZXB0aDsKCXU4IHBiOwoJdTggbWI7Cgl1OCBrYjsKCXU4IG51bV9jaGFubmVsczsKCXUxNiBtYXhfcnVuOwoJdTMyIG1heF9mcmFtZV9ieXRlczsKCXUzMiBhdmdfYml0X3JhdGU7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgY2hhbm5lbF9sYXlvdXRfdGFnOwp9OwoKc3RydWN0IGFzbV9nNzExX2RlY19jZmcgewoJdTMyIHNhbXBsZV9yYXRlOwp9OwoKc3RydWN0IGFzbV92b3JiaXNfY2ZnIHsKCXUzMiBiaXRfc3RyZWFtX2ZtdDsKfTsKCnN0cnVjdCBhc21fYXBlX2NmZyB7Cgl1MTYgY29tcGF0aWJsZV92ZXJzaW9uOwoJdTE2IGNvbXByZXNzaW9uX2xldmVsOwoJdTMyIGZvcm1hdF9mbGFnczsKCXUzMiBibG9ja3NfcGVyX2ZyYW1lOwoJdTMyIGZpbmFsX2ZyYW1lX2Jsb2NrczsKCXUzMiB0b3RhbF9mcmFtZXM7Cgl1MTYgYml0c19wZXJfc2FtcGxlOwoJdTE2IG51bV9jaGFubmVsczsKCXUzMiBzYW1wbGVfcmF0ZTsKCXUzMiBzZWVrX3RhYmxlX3ByZXNlbnQ7Cn07CgpzdHJ1Y3QgYXNtX2RzZF9jZmcgewoJdTE2IG51bV92ZXJzaW9uOwoJdTE2IGlzX2JpdHdpc2VfYmlnX2VuZGlhbjsKCXUxNiBkc2RfY2hhbm5lbF9ibG9ja19zaXplOwoJdTE2IG51bV9jaGFubmVsczsKCXU4ICBjaGFubmVsX21hcHBpbmdbOF07Cgl1MzIgZHNkX2RhdGFfcmF0ZTsKfTsKCnN0cnVjdCBhc21fc29mdHBhdXNlX3BhcmFtcyB7Cgl1MzIgZW5hYmxlOwoJdTMyIHBlcmlvZDsKCXUzMiBzdGVwOwoJdTMyIHJhbXBpbmdjdXJ2ZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fc29mdHZvbHVtZV9wYXJhbXMgewoJdTMyIHBlcmlvZDsKCXUzMiBzdGVwOwoJdTMyIHJhbXBpbmdjdXJ2ZTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX0VORF9QT0lOVF9ERVZJQ0VfTUFUUklYICAgICAwCgojZGVmaW5lIFBDTV9DSEFOTkVMX05VTEwgMAoKLyogRnJvbnQgbGVmdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0ZMICAgIDEKCi8qIEZyb250IHJpZ2h0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfRlIgICAgMgoKLyogRnJvbnQgY2VudGVyIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfRkMgICAgMwoKLyogTGVmdCBzdXJyb3VuZCBjaGFubmVsLiovCiNkZWZpbmUgUENNX0NIQU5ORUxfTFMgICA0CgovKiBSaWdodCBzdXJyb3VuZCBjaGFubmVsLiovCiNkZWZpbmUgUENNX0NIQU5ORUxfUlMgICA1CgovKiBMb3cgZnJlcXVlbmN5IGVmZmVjdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0xGRSAgNgoKLyogQ2VudGVyIHN1cnJvdW5kIGNoYW5uZWw7IFJlYXIgY2VudGVyIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfQ1MgICA3CgovKiBMZWZ0IGJhY2sgY2hhbm5lbDsgUmVhciBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfTEIgICA4CgovKiBSaWdodCBiYWNrIGNoYW5uZWw7IFJlYXIgcmlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9SQiAgIDkKCi8qIFRvcCBzdXJyb3VuZCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMUyAgIDEwCgovKiBDZW50ZXIgdmVydGljYWwgaGVpZ2h0IGNoYW5uZWwuKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9DVkggIDExCgovKiBNb25vIHN1cnJvdW5kIGNoYW5uZWwuKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9NUyAgIDEyCgovKiBGcm9udCBsZWZ0IG9mIGNlbnRlci4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9GTEMgIDEzCgovKiBGcm9udCByaWdodCBvZiBjZW50ZXIuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfRlJDICAxNAoKLyogUmVhciBsZWZ0IG9mIGNlbnRlci4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9STEMgIDE1CgovKiBSZWFyIHJpZ2h0IG9mIGNlbnRlci4gVXBkYXRlIFBDTV9NQVhfQ0hNQVBfSUQgd2hlbgogKiB0aGlzIGxpc3QgaXMgZXh0ZW5kZWQuCiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1JSQyAgMTYKCi8qIFNlY29uZCBsb3cgZnJlcXVlbmN5IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfTEZFMiAxNwoKLyogU2lkZSBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfU0wgICAxOAoKLyogU2lkZSByaWdodCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1NSICAgMTkKCi8qIFRvcCBmcm9udCBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfVEZMICAyMAoKLyogTGVmdCB2ZXJ0aWNhbCBoZWlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9MVkggIDIwCgovKiBUb3AgZnJvbnQgcmlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9URlIgIDIxCgovKiBSaWdodCB2ZXJ0aWNhbCBoZWlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9SVkggIDIxCgovKiBUb3AgY2VudGVyIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfVEMgICAyMgoKLyogVG9wIGJhY2sgbGVmdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1RCTCAgMjMKCi8qIFRvcCBiYWNrIHJpZ2h0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfVEJSICAyNAoKLyogVG9wIHNpZGUgbGVmdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1RTTCAgMjUKCi8qIFRvcCBzaWRlIHJpZ2h0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfVFNSICAyNgoKLyogVG9wIGJhY2sgY2VudGVyIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfVEJDICAyNwoKLyogQm90dG9tIGZyb250IGNlbnRlciBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0JGQyAgMjgKCi8qIEJvdHRvbSBmcm9udCBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfQkZMICAyOQoKLyogQm90dG9tIGZyb250IHJpZ2h0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfQkZSICAzMAoKLyogTGVmdCB3aWRlIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfTFcgICAzMQoKLyogUmlnaHQgd2lkZSBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1JXICAgMzIKCi8qIExlZnQgc2lkZSBkaXJlY3QgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9MU0QgIDMzCgoKLyogUmlnaHQgc2lkZSBkaXJlY3QgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9SU0QgIDM0CgojZGVmaW5lIFBDTV9NQVhfQ0hNQVBfSUQgUENNX0NIQU5ORUxfUlJDCgojZGVmaW5lIFBDTV9GT1JNQVRfTUFYX05VTV9DSEFOTkVMICA4CgovKiBVc2VkIGZvciBBRE1fQ01EX0RFVklDRV9PUEVOX1Y4ICovCiNkZWZpbmUgUENNX0ZPUk1BVF9NQVhfTlVNX0NIQU5ORUxfVjggIDMyCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjIgMHgwMDAxMERBNQoKI2RlZmluZSBBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YzIDB4MDAwMTBEREMKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNCAweDAwMDEzMjBDCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjUgMHgwMDAxMzIyMgoKI2RlZmluZSBBU01fTUVESUFfRk1UX0VWUkNCX0ZTIDB4MDAwMTBCRUYKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9FVlJDV0JfRlMgMHgwMDAxMEJGMAoKI2RlZmluZSBBU01fTUVESUFfRk1UX0dFTkVSSUNfQ09NUFJFU1NFRCAgMHgwMDAxMzIxMgoKI2RlZmluZSBBU01fTUFYX0VRX0JBTkRTIDEyCgojZGVmaW5lIEFTTV9EQVRBX0NNRF9NRURJQV9GTVRfVVBEQVRFX1YyIDB4MDAwMTBEOTgKCnN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiB7CnUzMiAgICAgICAgICAgICAgICAgICAgZm10X2Jsa19zaXplOwoJLyogTWVkaWEgZm9ybWF0IGJsb2NrIHNpemUgaW4gYnl0ZXMuKi8KfSAgX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2dlbmVyaWNfY29tcHJlc3NlZF9mbXRfYmxrX3QgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CgoJLyoKCSAqIENoYW5uZWwgbWFwcGluZyBhcnJheSBvZiBiaXRzdHJlYW0gb3V0cHV0LgoJICogQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlCgkgKiBpIDwgbnVtX2NoYW5uZWxzLiBBbGwgdmFsaWQgdXNlZCBjaGFubmVscyBtdXN0IGJlCgkgKiBwcmVzZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgoJICovCgl1aW50OF90IGNoYW5uZWxfbWFwcGluZ1s4XTsKCgkvKgoJICogTnVtYmVyIG9mIGNoYW5uZWxzIG9mIHRoZSBpbmNvbWluZyBiaXRzdHJlYW0uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAxLDIsMyw0LDUsNiw3LDgKCSAqLwoJdWludDE2X3QgbnVtX2NoYW5uZWxzOwoKCS8qCgkgKiBOb21pbmFsIGJpdHMgcGVyIHNhbXBsZSB2YWx1ZSBvZiB0aGUgaW5jb21pbmcgYml0c3RyZWFtLgoJICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDMyCgkgKi8KCXVpbnQxNl90IGJpdHNfcGVyX3NhbXBsZTsKCgkvKgoJICogTm9taW5hbCBzYW1wbGluZyByYXRlIG9mIHRoZSBpbmNvbWluZyBiaXRzdHJlYW0uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiA4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwLCAyNDAwMCwgMzIwMDAsCgkgKiAgICAgICAgICAgICAgICAgICA0NDEwMCwgNDgwMDAsIDg4MjAwLCA5NjAwMCwgMTc2NDAwLCAxOTIwMDAsCgkgKiAgICAgICAgICAgICAgICAgICAzNTI4MDAsIDM4NDAwMAoJICovCgl1aW50MzJfdCBzYW1wbGluZ19yYXRlOwoKfSBfX3BhY2tlZDsKCgovKiBDb21tYW5kIHRvIHNlbmQgc2FtcGxlIHJhdGUgJiBjaGFubmVscyBmb3IgSUVDNjE5MzcgKGNvbXByZXNzZWQpIG9yIElFQzYwOTU4CiAqIChwY20pIHN0cmVhbXMuIEJvdGggYXVkaW8gc3RhbmRhcmRzIHVzZSB0aGUgc2FtZSBmb3JtYXQgYW5kIGFyZSB1c2VkIGZvcgogKiBIRE1JIG9yIFNQRElGLgogKi8KI2RlZmluZSBBU01fREFUQV9DTURfSUVDXzYwOTU4X01FRElBX0ZNVCAgICAgICAgMHgwMDAxMzIxRQoKc3RydWN0IGFzbV9pZWNfY29tcHJlc3NlZF9mbXRfYmxrX3QgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoKCS8qCgkgKiBOb21pbmFsIHNhbXBsaW5nIHJhdGUgb2YgdGhlIGluY29taW5nIGJpdHN0cmVhbS4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwKCSAqICAgICAgICAgICAgICAgICAgIDQ0MTAwLCA0ODAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMCwKCSAqICAgICAgICAgICAgICAgICAgIDM1MjgwMCwgMzg0MDAwCgkgKi8KCXVpbnQzMl90IHNhbXBsaW5nX3JhdGU7CgoJLyoKCSAqIE51bWJlciBvZiBjaGFubmVscyBvZiB0aGUgaW5jb21pbmcgYml0c3RyZWFtLgoJICogU3VwcG9ydGVkIHZhbHVlczogMSwyLDMsNCw1LDYsNyw4CgkgKi8KCXVpbnQzMl90IG51bV9jaGFubmVsczsKCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CgoJdTE2ICBudW1fY2hhbm5lbHM7CgkvKiBOdW1iZXIgb2YgY2hhbm5lbHMuIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOCAqLwoJdTE2ICBiaXRzX3Blcl9zYW1wbGU7Ci8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcGVyIGNoYW5uZWwuICogU3VwcG9ydGVkIHZhbHVlczoKICogMTYsIDI0ICogV2hlbiB1c2VkIGZvciBwbGF5YmFjaywgdGhlIGNsaWVudCBtdXN0IHNlbmQgMjQtYml0CiAqIHNhbXBsZXMgcGFja2VkIGluIDMyLWJpdCB3b3Jkcy4gVGhlIDI0LWJpdCBzYW1wbGVzIG11c3QgYmUgcGxhY2VkCiAqIGluIHRoZSBtb3N0IHNpZ25pZmljYW50IDI0IGJpdHMgb2YgdGhlIDMyLWJpdCB3b3JkLiBXaGVuIHVzZWQgZm9yCiAqIHJlY29yZGluZywgdGhlIGFEU1Agc2VuZHMgMjQtYml0IHNhbXBsZXMgcGFja2VkIGluIDMyLWJpdCB3b3Jkcy4KICogVGhlIDI0LWJpdCBzYW1wbGVzIGFyZSBwbGFjZWQgaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyBvZgogKiB0aGUgMzItYml0IHdvcmQuCiAqLwoKCgl1MzIgIHNhbXBsZV9yYXRlOwovKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kIChpbiBIZXJ0eikuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAKICovCgoJdTE2ICBpc19zaWduZWQ7CgkvKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoZSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpLiAqLwoKCXUxNiAgcmVzZXJ2ZWQ7CgkvKiByZXNlcnZlZCBmaWVsZCBmb3IgMzIgYml0IGFsaWdubWVudC4gbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCgl1OCAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKLyogQ2hhbm5lbCBhcnJheSBvZiBzaXplIDguCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI1BDTV9DSEFOTkVMX0wKICogLSAjUENNX0NIQU5ORUxfUgogKiAtICNQQ01fQ0hBTk5FTF9DCiAqIC0gI1BDTV9DSEFOTkVMX0xTCiAqIC0gI1BDTV9DSEFOTkVMX1JTCiAqIC0gI1BDTV9DSEFOTkVMX0xGRQogKiAtICNQQ01fQ0hBTk5FTF9DUwogKiAtICNQQ01fQ0hBTk5FTF9MQgogKiAtICNQQ01fQ0hBTk5FTF9SQgogKiAtICNQQ01fQ0hBTk5FTFMKICogLSAjUENNX0NIQU5ORUxfQ1ZICiAqIC0gI1BDTV9DSEFOTkVMX01TCiAqIC0gI1BDTV9DSEFOTkVMX0ZMQwogKiAtICNQQ01fQ0hBTk5FTF9GUkMKICogLSAjUENNX0NIQU5ORUxfUkxDCiAqIC0gI1BDTV9DSEFOTkVMX1JSQwogKgogKiBDaGFubmVsW2ldIG1hcHBpbmcgZGVzY3JpYmVzIGNoYW5uZWwgSS4gRWFjaCBlbGVtZW50IGkgb2YgdGhlCiAqIGFycmF5IGRlc2NyaWJlcyBjaGFubmVsIEkgaW5zaWRlIHRoZSBidWZmZXIgd2hlcmUgMCBAbGUgSSA8CiAqIG51bV9jaGFubmVscy4gQW4gdW51c2VkIGNoYW5uZWwgaXMgc2V0IHRvIHplcm8uCiAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3YzIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyoKICogTnVtYmVyIG9mIGNoYW5uZWxzCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOAogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qCiAqIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcGVyIGNoYW5uZWwKICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKgogKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAsIDk2MDAwLDE5MjAwMCBIegogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICBpc19zaWduZWQ7Ci8qIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBQQ00gc2FtcGxlcyBhcmUgc2lnbmVkICgxKSAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNhbXBsZV93b3JkX3NpemU7Ci8qCiAqIFNpemUgaW4gYml0cyBvZiB0aGUgd29yZCB0aGF0IGhvbGRzIGEgc2FtcGxlIG9mIGEgY2hhbm5lbC4KICogU3VwcG9ydGVkIHZhbHVlczogMTIsMjQsMzIKICovCgoJdWludDhfdCAgICAgICAgICAgICAgICAgY2hhbm5lbF9tYXBwaW5nWzhdOwovKgogKiBFYWNoIGVsZW1lbnQsIGksIGluIHRoZSBhcnJheSBkZXNjcmliZXMgY2hhbm5lbCBpIGluc2lkZSB0aGUgYnVmZmVyIHdoZXJlCiAqIDAgPD0gaSA8IG51bV9jaGFubmVscy4gVW51c2VkIGNoYW5uZWxzIGFyZSBzZXQgdG8gMC4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjQgewoJdWludDE2X3QgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKgogKiBOdW1iZXIgb2YgY2hhbm5lbHMKICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyoKICogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbAogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQsIDMyCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKgogKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAsIDk2MDAwLDE5MjAwMCBIegogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICBpc19zaWduZWQ7Ci8qIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBQQ00gc2FtcGxlcyBhcmUgc2lnbmVkICgxKSAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNhbXBsZV93b3JkX3NpemU7Ci8qCiAqIFNpemUgaW4gYml0cyBvZiB0aGUgd29yZCB0aGF0IGhvbGRzIGEgc2FtcGxlIG9mIGEgY2hhbm5lbC4KICogU3VwcG9ydGVkIHZhbHVlczogMTIsMjQsMzIKICovCgoJdWludDhfdCAgICAgICAgICAgICAgICAgY2hhbm5lbF9tYXBwaW5nWzhdOwovKgogKiBFYWNoIGVsZW1lbnQsIGksIGluIHRoZSBhcnJheSBkZXNjcmliZXMgY2hhbm5lbCBpIGluc2lkZSB0aGUgYnVmZmVyIHdoZXJlCiAqIDAgPD0gaSA8IG51bV9jaGFubmVscy4gVW51c2VkIGNoYW5uZWxzIGFyZSBzZXQgdG8gMC4KICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBlbmRpYW5uZXNzOwovKgogKiBGbGFnIHRvIGluZGljYXRlIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBwY20gc2FtcGxlCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgLSBMaXR0bGUgZW5kaWFuIChhbGwgb3RoZXIgZm9ybWF0cykKICogICAgICAgICAgICAgICAgICAgMSAtIEJpZyBlbmRpYW4gKEFJRkYpCiAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgbW9kZTsKLyoKICogTW9kZSB0byBwcm92aWRlIGFkZGl0aW9uYWwgaW5mbyBhYm91dCB0aGUgcGNtIGlucHV0IGRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgLSBEZWZhdWx0IFFGcyAoUTE1IGZvciAxNmIsIFEyMyBmb3IgcGFja2VkIDI0YiwKICogICAgICAgICAgICAgICAgICAgICAgIFEzMSBmb3IgdW5wYWNrZWQgMjRiIG9yIDMyYikKICogICAgICAgICAgICAgICAgICAxNSAtIGZvciAxNiBiaXQKICogICAgICAgICAgICAgICAgICAyMyAtIGZvciAyNGIgcGFja2VkIG9yIDguMjQgZm9ybWF0CiAqICAgICAgICAgICAgICAgICAgMzEgLSBmb3IgMjRiIHVucGFja2VkIG9yIDMyYml0CiAqLwp9IF9fcGFja2VkOwoKCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZm10X2Jsa192NSB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qCiAqIE51bWJlciBvZiBjaGFubmVscwogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDMyCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyoKICogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbAogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQsIDMyCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKgogKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAsIDk2MDAwLDE5MjAwMCBIegogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICBpc19zaWduZWQ7Ci8qIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhhdCBQQ00gc2FtcGxlcyBhcmUgc2lnbmVkICgxKSAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNhbXBsZV93b3JkX3NpemU7Ci8qCiAqIFNpemUgaW4gYml0cyBvZiB0aGUgd29yZCB0aGF0IGhvbGRzIGEgc2FtcGxlIG9mIGEgY2hhbm5lbC4KICogU3VwcG9ydGVkIHZhbHVlczogMTIsMjQsMzIKICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBlbmRpYW5uZXNzOwovKgogKiBGbGFnIHRvIGluZGljYXRlIHRoZSBlbmRpYW5uZXNzIG9mIHRoZSBwY20gc2FtcGxlCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgLSBMaXR0bGUgZW5kaWFuIChhbGwgb3RoZXIgZm9ybWF0cykKICogICAgICAgICAgICAgICAgICAgMSAtIEJpZyBlbmRpYW4gKEFJRkYpCiAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgbW9kZTsKLyoKICogTW9kZSB0byBwcm92aWRlIGFkZGl0aW9uYWwgaW5mbyBhYm91dCB0aGUgcGNtIGlucHV0IGRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgLSBEZWZhdWx0IFFGcyAoUTE1IGZvciAxNmIsIFEyMyBmb3IgcGFja2VkIDI0YiwKICogICAgICAgICAgICAgICAgICAgICAgIFEzMSBmb3IgdW5wYWNrZWQgMjRiIG9yIDMyYikKICogICAgICAgICAgICAgICAgICAxNSAtIGZvciAxNiBiaXQKICogICAgICAgICAgICAgICAgICAyMyAtIGZvciAyNGIgcGFja2VkIG9yIDguMjQgZm9ybWF0CiAqICAgICAgICAgICAgICAgICAgMzEgLSBmb3IgMjRiIHVucGFja2VkIG9yIDMyYml0CiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFwcGluZ1szMl07Ci8qCiAqIEVhY2ggZWxlbWVudCwgaSwgaW4gdGhlIGFycmF5IGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIgd2hlcmUKICogMCA8PSBpIDwgbnVtX2NoYW5uZWxzLiBVbnVzZWQgY2hhbm5lbHMgYXJlIHNldCB0byAwLgogKi8KfSBfX3BhY2tlZDsKLyoKICogUGF5bG9hZCBvZiB0aGUgbXVsdGljaGFubmVsIFBDTSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW4KICogdGhlIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjMgbWVkaWEgZm9ybWF0LgogKi8Kc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3BhcmFtX3YzIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRfYmxrOwoJc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3YzIHBhcmFtOwp9IF9fcGFja2VkOwoKLyoKICogUGF5bG9hZCBvZiB0aGUgbXVsdGljaGFubmVsIFBDTSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW4KICogdGhlIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjQgbWVkaWEgZm9ybWF0LgogKi8Kc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3BhcmFtX3Y0IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRfYmxrOwoJc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3Y0IHBhcmFtOwp9IF9fcGFja2VkOwoKLyoKICogUGF5bG9hZCBvZiB0aGUgbXVsdGljaGFubmVsIFBDTSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW4KICogdGhlIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjUgbWVkaWEgZm9ybWF0LgogKi8Kc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3BhcmFtX3Y1IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRfYmxrOwoJc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9mbXRfYmxrX3Y1IHBhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gewoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBJRCBvZiB0aGUgcGFyYW1ldGVyLiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHBhcmFtX3NpemU7Ci8qIERhdGEgc2l6ZSBvZiB0aGlzIHBhcmFtZXRlciwgaW4gYnl0ZXMuIFRoZSBzaXplIGlzIGEgbXVsdGlwbGUKICogb2YgNCBieXRlcy4KICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBmcmFtZXNfcGVyX2J1ZjsKLyogTnVtYmVyIG9mIGVuY29kZWQgZnJhbWVzIHRvIHBhY2sgaW50byBlYWNoIGJ1ZmZlci4KICoKICogQG5vdGUxaGFuZyBUaGlzIGlzIG9ubHkgZ3VpZGFuY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBhRFNQLiBUaGUKICogbnVtYmVyIG9mIGVuY29kZWQgZnJhbWVzIHB1dCBpbnRvIGVhY2ggYnVmZmVyIChzcGVjaWZpZWQgYnkgdGhlCiAqIGNsaWVudCkgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoaXMgbnVtYmVyLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBlbmNfY2ZnX2Jsa19zaXplOwovKiBTaXplIGluIGJ5dGVzIG9mIHRoZSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gYmxvY2sgdGhhdCBmb2xsb3dzCiAqIHRoaXMgbWVtYmVyLgogKi8KCn0gX19wYWNrZWQ7CgovKiBAYnJpZWYgRG9sYnkgRGlnaXRhbCBQbHVzIGVuZCBwb2ludCBjb25maWd1cmF0aW9uIHN0cnVjdHVyZQogKi8Kc3RydWN0IGFzbV9kZWNfZGRwX2VuZHBfcGFyYW1fdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCWludCBlbmRwX3BhcmFtX3ZhbHVlOwp9IF9fcGFja2VkOwoKLyoKICogUGF5bG9hZCBvZiB0aGUgbXVsdGljaGFubmVsIFBDTSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNSBtZWRpYSBmb3JtYXQuCiAqLwpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2VuY19jZmdfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MiBlbmNibGs7Cgl1aW50MTZfdCBudW1fY2hhbm5lbHM7Ci8qCiAqIE51bWJlciBvZiBQQ00gY2hhbm5lbHMuCiAqIEB2YWx1ZXMKICogLSAwIC0tIE5hdGl2ZSBtb2RlCiAqIC0gMSAtLSA4IGNoYW5uZWxzCiAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlIG51bWJlcgogKiBvZiBjaGFubmVscyBhdCB0aGUgaW5wdXQuCiAqLwoJdWludDE2X3QgIGJpdHNfcGVyX3NhbXBsZTsKLyoKICogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbC4KICogQHZhbHVlcyAxNiwgMjQKICovCgl1aW50MzJfdCAgc2FtcGxlX3JhdGU7Ci8qCiAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCiAqIEB2YWx1ZXMgMCwgODAwMCB0byA0ODAwMCBIegogKiBBIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHRoZSBuYXRpdmUgc2FtcGxpbmcgcmF0ZS4gRW5jb2RpbmcgaXMKICogcGVyZm9ybWVkIGF0IHRoZSBpbnB1dCBzYW1wbGluZyByYXRlLgogKi8KCXVpbnQxNl90ICBpc19zaWduZWQ7Ci8qCiAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpLiBDdXJyZW50bHksIG9ubHkKICogc2lnbmVkIFBDTSBzYW1wbGVzIGFyZSBzdXBwb3J0ZWQuCiAqLwoJdWludDE2X3QgICAgc2FtcGxlX3dvcmRfc2l6ZTsKLyoKICogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgd29yZCB0aGF0IGhvbGRzIGEgc2FtcGxlIG9mIGEgY2hhbm5lbC4KICogQHZhbHVlcyAxNiwgMjQsIDMyCiAqIDE2LWJpdCBzYW1wbGVzIGFyZSBhbHdheXMgcGxhY2VkIGluIDE2LWJpdCB3b3JkczoKICogc2FtcGxlX3dvcmRfc2l6ZSA9IDEuCiAqIDI0LWJpdCBzYW1wbGVzIGNhbiBiZSBwbGFjZWQgaW4gMzItYml0IHdvcmRzIG9yIGluIGNvbnNlY3V0aXZlCiAqIDI0LWJpdCB3b3Jkcy4KICogLSBJZiBzYW1wbGVfd29yZF9zaXplID0gMzIsIDI0LWJpdCBzYW1wbGVzIGFyZSBwbGFjZWQgaW4gdGhlCiAqIG1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyBvZiBhIDMyLWJpdCB3b3JkLgogKiAtIElmIHNhbXBsZV93b3JkX3NpemUgPSAyNCwgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbgogKiAyNC1iaXQgd29yZHMuIEB0YWJsZWJ1bGxldGVuZAogKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIGVuZGlhbm5lc3M7Ci8qCiAqIEZsYWcgdG8gaW5kaWNhdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIHBjbSBzYW1wbGUKICogU3VwcG9ydGVkIHZhbHVlczogMCAtIExpdHRsZSBlbmRpYW4gKGFsbCBvdGhlciBmb3JtYXRzKQogKiAgICAgICAgICAgICAgICAgICAxIC0gQmlnIGVuZGlhbiAoQUlGRikKICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBtb2RlOwovKgogKiBNb2RlIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvIGFib3V0IHRoZSBwY20gaW5wdXQgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogMCAtIERlZmF1bHQgUUZzIChRMTUgZm9yIDE2YiwgUTIzIGZvciBwYWNrZWQgMjRiLAogKiAgICAgICAgICAgICAgICAgICAgICAgUTMxIGZvciB1bnBhY2tlZCAyNGIgb3IgMzJiKQogKiAgICAgICAgICAgICAgICAgIDE1IC0gZm9yIDE2IGJpdAogKiAgICAgICAgICAgICAgICAgIDIzIC0gZm9yIDI0YiBwYWNrZWQgb3IgOC4yNCBmb3JtYXQKICovCgl1aW50OF90ICAgY2hhbm5lbF9tYXBwaW5nW1BDTV9GT1JNQVRfTUFYX05VTV9DSEFOTkVMX1Y4XTsKLyoKICogQ2hhbm5lbCBtYXBwaW5nIGFycmF5IGV4cGVjdGVkIGF0IHRoZSBlbmNvZGVyIG91dHB1dC4KICogQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlCiAqIDAgQGxlIGkgPCBudW1fY2hhbm5lbHMuIEFsbCB2YWxpZCB1c2VkIGNoYW5uZWxzIG11c3QgYmUgcHJlc2VudCBhdAogKiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS4KICogSWYgTmF0aXZlIG1vZGUgaXMgc2V0IGZvciB0aGUgY2hhbm5lbHMsIHRoaXMgZmllbGQgaXMgaWdub3JlZC4KICogQHZhbHVlcyBTZWUgU2VjdGlvbiBAeHJlZntkb3g6UGNtQ2hhbm5lbERlZnN9CiAqLwp9IF9fcGFja2VkOwoKLyoKICogUGF5bG9hZCBvZiB0aGUgbXVsdGljaGFubmVsIFBDTSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNCBtZWRpYSBmb3JtYXQuCiAqLwoKc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9lbmNfY2ZnX3Y0IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIgZW5jYmxrOwoJdWludDE2X3QgbnVtX2NoYW5uZWxzOwoJLyoKCSAqIE51bWJlciBvZiBQQ00gY2hhbm5lbHMuCgkgKiBAdmFsdWVzCgkgKiAtIDAgLS0gTmF0aXZlIG1vZGUKCSAqIC0gMSAtLSA4IGNoYW5uZWxzCgkgKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBudW1iZXIKCSAqIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KCSAqLwoJdWludDE2X3QgIGJpdHNfcGVyX3NhbXBsZTsKCS8qCgkgKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsLgoJICogQHZhbHVlcyAxNiwgMjQKCSAqLwoJdWludDMyX3QgIHNhbXBsZV9yYXRlOwoJLyoKCSAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCgkgKiBAdmFsdWVzIDAsIDgwMDAgdG8gNDgwMDAgSHoKCSAqIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhlIG5hdGl2ZSBzYW1wbGluZyByYXRlLiBFbmNvZGluZyBpcwoJICogcGVyZm9ybWVkIGF0IHRoZSBpbnB1dCBzYW1wbGluZyByYXRlLgoJICovCgl1aW50MTZfdCAgaXNfc2lnbmVkOwoJLyoKCSAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpLiBDdXJyZW50bHksIG9ubHkKCSAqIHNpZ25lZCBQQ00gc2FtcGxlcyBhcmUgc3VwcG9ydGVkLgoJICovCgl1aW50MTZfdCAgICBzYW1wbGVfd29yZF9zaXplOwoJLyoKCSAqIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHdvcmQgdGhhdCBob2xkcyBhIHNhbXBsZSBvZiBhIGNoYW5uZWwuCgkgKiBAdmFsdWVzIDE2LCAyNCwgMzIKCSAqIDE2LWJpdCBzYW1wbGVzIGFyZSBhbHdheXMgcGxhY2VkIGluIDE2LWJpdCB3b3JkczoKCSAqIHNhbXBsZV93b3JkX3NpemUgPSAxLgoJICogMjQtYml0IHNhbXBsZXMgY2FuIGJlIHBsYWNlZCBpbiAzMi1iaXQgd29yZHMgb3IgaW4gY29uc2VjdXRpdmUKCSAqIDI0LWJpdCB3b3Jkcy4KCSAqIC0gSWYgc2FtcGxlX3dvcmRfc2l6ZSA9IDMyLCAyNC1iaXQgc2FtcGxlcyBhcmUgcGxhY2VkIGluIHRoZQoJICogbW9zdCBzaWduaWZpY2FudCAyNCBiaXRzIG9mIGEgMzItYml0IHdvcmQuCgkgKiAtIElmIHNhbXBsZV93b3JkX3NpemUgPSAyNCwgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbgoJICogMjQtYml0IHdvcmRzLiBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDhfdCAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKCS8qCgkgKiBDaGFubmVsIG1hcHBpbmcgYXJyYXkgZXhwZWN0ZWQgYXQgdGhlIGVuY29kZXIgb3V0cHV0LgoJICogIENoYW5uZWxbaV0gbWFwcGluZyBkZXNjcmliZXMgY2hhbm5lbCBpIGluc2lkZSB0aGUgYnVmZmVyLCB3aGVyZQoJICogIDAgQGxlIGkgPCBudW1fY2hhbm5lbHMuIEFsbCB2YWxpZCB1c2VkIGNoYW5uZWxzIG11c3QgYmUgcHJlc2VudCBhdAoJICogIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgoJICogSWYgTmF0aXZlIG1vZGUgaXMgc2V0IGZvciB0aGUgY2hhbm5lbHMsIHRoaXMgZmllbGQgaXMgaWdub3JlZC4KCSAqIEB2YWx1ZXMgU2VlIFNlY3Rpb24gQHhyZWZ7ZG94OlBjbUNoYW5uZWxEZWZzfQoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBlbmRpYW5uZXNzOwoJLyoKCSAqIEZsYWcgdG8gaW5kaWNhdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIHBjbSBzYW1wbGUKCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgLSBMaXR0bGUgZW5kaWFuIChhbGwgb3RoZXIgZm9ybWF0cykKCSAqICAgICAgICAgICAgICAgICAgIDEgLSBCaWcgZW5kaWFuIChBSUZGKQoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBtb2RlOwoJLyoKCSAqIE1vZGUgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGluZm8gYWJvdXQgdGhlIHBjbSBpbnB1dCBkYXRhLgoJICogU3VwcG9ydGVkIHZhbHVlczogMCAtIERlZmF1bHQgUUZzIChRMTUgZm9yIDE2YiwgUTIzIGZvciBwYWNrZWQgMjRiLAoJICogICAgICAgICAgICAgICAgICAgICAgIFEzMSBmb3IgdW5wYWNrZWQgMjRiIG9yIDMyYikKCSAqICAgICAgICAgICAgICAgICAgMTUgLSBmb3IgMTYgYml0CgkgKiAgICAgICAgICAgICAgICAgIDIzIC0gZm9yIDI0YiBwYWNrZWQgb3IgOC4yNCBmb3JtYXQKCSAqICAgICAgICAgICAgICAgICAgMzEgLSBmb3IgMjRiIHVucGFja2VkIG9yIDMyYml0CgkgKi8KfSBfX3BhY2tlZDsKCi8qCiAqIFBheWxvYWQgb2YgdGhlIG11bHRpY2hhbm5lbCBQQ00gZW5jb2RlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgaW4KICogdGhlIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjMgbWVkaWEgZm9ybWF0LgogKi8KCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZW5jX2NmZ192MyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyIGVuY2JsazsKCXVpbnQxNl90IG51bV9jaGFubmVsczsKCS8qCgkgKiBOdW1iZXIgb2YgUENNIGNoYW5uZWxzLgoJICogQHZhbHVlcwoJICogLSAwIC0tIE5hdGl2ZSBtb2RlCgkgKiAtIDEgLS0gOCBjaGFubmVscwoJICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgbnVtYmVyCgkgKiBvZiBjaGFubmVscyBhdCB0aGUgaW5wdXQuCgkgKi8KCXVpbnQxNl90ICBiaXRzX3Blcl9zYW1wbGU7CgkvKgoJICogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbC4KCSAqIEB2YWx1ZXMgMTYsIDI0CgkgKi8KCXVpbnQzMl90ICBzYW1wbGVfcmF0ZTsKCS8qCgkgKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kLgoJICogQHZhbHVlcyAwLCA4MDAwIHRvIDQ4MDAwIEh6CgkgKiBBIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHRoZSBuYXRpdmUgc2FtcGxpbmcgcmF0ZS4gRW5jb2RpbmcgaXMKCSAqIHBlcmZvcm1lZCBhdCB0aGUgaW5wdXQgc2FtcGxpbmcgcmF0ZS4KCSAqLwoJdWludDE2X3QgIGlzX3NpZ25lZDsKCS8qCgkgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHRoZSBQQ00gc2FtcGxlcyBhcmUgc2lnbmVkICgxKS4gQ3VycmVudGx5LCBvbmx5CgkgKiBzaWduZWQgUENNIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4KCSAqLwoJdWludDE2X3QgICAgc2FtcGxlX3dvcmRfc2l6ZTsKCS8qCgkgKiBUaGUgc2l6ZSBpbiBiaXRzIG9mIHRoZSB3b3JkIHRoYXQgaG9sZHMgYSBzYW1wbGUgb2YgYSBjaGFubmVsLgoJICogQHZhbHVlcyAxNiwgMjQsIDMyCgkgKiAxNi1iaXQgc2FtcGxlcyBhcmUgYWx3YXlzIHBsYWNlZCBpbiAxNi1iaXQgd29yZHM6CgkgKiBzYW1wbGVfd29yZF9zaXplID0gMS4KCSAqIDI0LWJpdCBzYW1wbGVzIGNhbiBiZSBwbGFjZWQgaW4gMzItYml0IHdvcmRzIG9yIGluIGNvbnNlY3V0aXZlCgkgKiAyNC1iaXQgd29yZHMuCgkgKiAtIElmIHNhbXBsZV93b3JkX3NpemUgPSAzMiwgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbiB0aGUKCSAqIG1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyBvZiBhIDMyLWJpdCB3b3JkLgoJICogLSBJZiBzYW1wbGVfd29yZF9zaXplID0gMjQsIDI0LWJpdCBzYW1wbGVzIGFyZSBwbGFjZWQgaW4KCSAqIDI0LWJpdCB3b3Jkcy4gQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQ4X3QgICBjaGFubmVsX21hcHBpbmdbOF07CgkvKgoJICogQ2hhbm5lbCBtYXBwaW5nIGFycmF5IGV4cGVjdGVkIGF0IHRoZSBlbmNvZGVyIG91dHB1dC4KCSAqICBDaGFubmVsW2ldIG1hcHBpbmcgZGVzY3JpYmVzIGNoYW5uZWwgaSBpbnNpZGUgdGhlIGJ1ZmZlciwgd2hlcmUKCSAqICAwIEBsZSBpIDwgbnVtX2NoYW5uZWxzLiBBbGwgdmFsaWQgdXNlZCBjaGFubmVscyBtdXN0IGJlIHByZXNlbnQgYXQKCSAqICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheS4KCSAqIElmIE5hdGl2ZSBtb2RlIGlzIHNldCBmb3IgdGhlIGNoYW5uZWxzLCB0aGlzIGZpZWxkIGlzIGlnbm9yZWQuCgkgKiBAdmFsdWVzIFNlZSBTZWN0aW9uIEB4cmVme2RveDpQY21DaGFubmVsRGVmc30KCSAqLwp9OwoKLyogQGJyaWVmIE11bHRpY2hhbm5lbCBQQ00gZW5jb2RlciBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSB1c2VkCiAqIGluIHRoZSAjQVNNX1BBUkFNX0lEX0VOQ0RFQ19FTkNfQ0ZHX0JMS19WMiBjb21tYW5kLgogKi8KCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZW5jX2NmZ192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7Cgl1aW50MTZfdCAgbnVtX2NoYW5uZWxzOwovKjwgTnVtYmVyIG9mIFBDTSBjaGFubmVscy4KICoKICogU3VwcG9ydGVkIHZhbHVlczogLSAwIC0tIE5hdGl2ZSBtb2RlIC0gMSAtLSA4IE5hdGl2ZSBtb2RlCiAqIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlIG51bWJlciBvZgogKiBjaGFubmVscyBhdCB0aGUgaW5wdXQuCiAqLwoKCXVpbnQxNl90ICBiaXRzX3Blcl9zYW1wbGU7Ci8qPCBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgoJdWludDMyX3QgIHNhbXBsZV9yYXRlOwovKjwgTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZCAoaW4gSGVydHopLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwLCA4MDAwIHRvIDQ4MDAwIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhlCiAqIG5hdGl2ZSBzYW1wbGluZyByYXRlLiBFbmNvZGluZyBpcyBwZXJmb3JtZWQgYXQgdGhlIGlucHV0IHNhbXBsaW5nCiAqIHJhdGUuCiAqLwoKCXVpbnQxNl90ICBpc19zaWduZWQ7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgc2FtcGxlcyBhcmUgc2lnbmVkICgxKS4gQ3VycmVudGx5LAogKiBvbmx5IHNpZ25lZCBzYW1wbGVzIGFyZSBzdXBwb3J0ZWQuCiAqLwoKCXVpbnQxNl90ICByZXNlcnZlZDsKLyo8IHJlc2VydmVkIGZpZWxkIGZvciAzMiBiaXQgYWxpZ25tZW50LiBtdXN0IGJlIHNldCB0byB6ZXJvLiovCgoKCXVpbnQ4X3QgICBjaGFubmVsX21hcHBpbmdbOF07Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTVAzIDB4MDAwMTBCRTkKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19WMiAweDAwMDEwREE2CgovKiBAeHJlZmxhYmVsCiAqIHtoZHI6QXNtTWVkaWFGbXREb2xieUFhY30gTWVkaWEgZm9ybWF0IElEIGZvciB0aGUKICogRG9sYnkgQUFDIGRlY29kZXIuIFRoaXMgZm9ybWF0IElEIGlzIGJlIHVzZWQgaWYgdGhlIGNsaWVudCB3YW50cwogKiB0byB1c2UgdGhlIERvbGJ5IEFBQyBkZWNvZGVyIHRvIGRlY29kZSBNUEVHMiBhbmQgTVBFRzQgQUFDCiAqIGNvbnRlbnRzLgogKi8KCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9ET0xCWV9BQUMgMHgwMDAxMEQ4NgoKLyogRW51bWVyYXRpb24gZm9yIHRoZSBhdWRpbyBkYXRhIHRyYW5zcG9ydCBzdHJlYW0gQUFDIGZvcm1hdC4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19BRFRTIDAKCi8qIEVudW1lcmF0aW9uIGZvciBsb3cgb3ZlcmhlYWQgYXVkaW8gc3RyZWFtIEFBQyBmb3JtYXQuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfTE9BUyAgICAgICAgICAgICAgICAgICAgICAxCgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIGF1ZGlvIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0CiAqIEFBQyBmb3JtYXQuCiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0FESUYgICAyCgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIHJhdyBBQUMgZm9ybWF0LiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX1JBVyAgICAzCgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIEFBQyBMQVRNIGZvcm1hdC4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19MQVRNICAgNAoKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfTEMgICAgICAgICAgICAgMgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0FPVF9TQlIgICAgICAgICAgICA1CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfQU9UX1BTICAgICAgICAgICAgIDI5CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfQU9UX0JTQUMgICAgICAgICAgIDIyCgpzdHJ1Y3QgYXNtX2FhY19mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRfYmxrOwoKCQl1MTYgICAgICAgICAgYWFjX2ZtdF9mbGFnOwovKiBCaXRzdHJlYW0gZm9ybWF0IG9wdGlvbi4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURUUwogKiAtICNBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19MT0FTCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0FESUYKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfUkFXCiAqLwoKCXUxNiAgICAgICAgICBhdWRpb19vYmp5cGU7Ci8qIEF1ZGlvIE9iamVjdCBUeXBlIChBT1QpIHByZXNlbnQgaW4gdGhlIEFBQyBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9MQwogKiAtICNBU01fTUVESUFfRk1UX0FBQ19BT1RfU0JSCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9CU0FDCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9QUwogKiAtIE90aGVyd2lzZSAtLSBOb3Qgc3VwcG9ydGVkCiAqLwoKCXUxNiAgICAgICAgICBjaGFubmVsX2NvbmZpZzsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIHByZXNlbnQgaW4gdGhlIEFBQyBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMSAtLSBNb25vCiAqIC0gMiAtLSBTdGVyZW8KICogLSA2IC0tIDUuMSBjb250ZW50CiAqLwoKCXUxNiAgICAgICAgICB0b3RhbF9zaXplX29mX1BDRV9iaXRzOwovKiBncmVhdGVyIG9yIGVxdWFsIHRvIHplcm8uICogLUluIGNhc2Ugb2YgUkFXIGZvcm1hdHMgYW5kCiAqIGNoYW5uZWwgY29uZmlnID0gMCAoUENFKSwgY2xpZW50IGNhbiBzZW5kICogdGhlIGJpdCBzdHJlYW0KICogY29udGFpbmluZyBQQ0UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgc3RydWN0dXJlICogKGluLWJhbmQpLgogKiAtVGhpcyBudW1iZXIgZG9lcyBub3QgaW5jbHVkZSBiaXRzIGluY2x1ZGVkIGZvciAzMiBiaXQgYWxpZ25tZW50LgogKiAtSWYgemVybywgdGhlbiB0aGUgUENFIGluZm8gaXMgYXNzdW1lZCB0byBiZSBhdmFpbGFibGUgaW4gdGhlCiAqIGF1ZGlvIC1iaXQgc3RyZWFtICYgbm90IGluLWJhbmQuCiAqLwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZCAoaW4gSGVydHopLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA4MDAwLCAxMTAyNSwgMTIwMDAsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLAogKiA0NDEwMCwgNDgwMDAKICoKICogVGhpcyBmaWVsZCBtdXN0IGJlIGVxdWFsIHRvIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgQUFDLUxDCiAqIGRlY29kZXIncyBvdXRwdXQuIC0gRm9yIE1QNCBvciAzR1AgY29udGFpbmVycywgdGhpcyBpcyBpbmRpY2F0ZWQKICogYnkgdGhlIHNhbXBsaW5nRnJlcXVlbmN5SW5kZXggZmllbGQgaW4gdGhlIEF1ZGlvU3BlY2lmaWNDb25maWcKICogZWxlbWVudC4gLSBGb3IgQURUUyBmb3JtYXQsIHRoaXMgaXMgaW5kaWNhdGVkIGJ5IHRoZQogKiBzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4IGluIHRoZSBBRFRTIGZpeGVkIGhlYWRlci4gLSBGb3IgQURJRgogKiBmb3JtYXQsIHRoaXMgaXMgaW5kaWNhdGVkIGJ5IHRoZSBzYW1wbGluZ0ZyZXF1ZW5jeUluZGV4IGluIHRoZQogKiBwcm9ncmFtX2NvbmZpZ19lbGVtZW50IHByZXNlbnQgaW4gdGhlIEFESUYgaGVhZGVyLgogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FhY19lbmNfY2ZnX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCgl1MzIgICAgICAgICAgYml0X3JhdGU7CgkvKiBFbmNvZGluZyByYXRlIGluIGJpdHMgcGVyIHNlY29uZC4gKi8KCXUzMiAgICAgICAgICBlbmNfbW9kZTsKLyogRW5jb2RpbmcgbW9kZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX0xDCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9TQlIKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1BTCiAqLwoJdTE2ICAgICAgICAgIGFhY19mbXRfZmxhZzsKLyogQUFDIGZvcm1hdCBmbGFnLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19BRFRTCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX1JBVwogKi8KCXUxNiAgICAgICAgICBjaGFubmVsX2NmZzsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIHRvIGVuY29kZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIE5hdGl2ZSBtb2RlCiAqIC0gMSAtLSBNb25vCiAqIC0gMiAtLSBTdGVyZW8KICogLSBPdGhlciB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAqIEBub3RlMWhhbmcgVGhlIGVBQUMrIGVuY29kZXIgbW9kZSBzdXBwb3J0cyBvbmx5IHN0ZXJlby4KICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKICogbnVtYmVyIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KICogVGhlIG51bWJlciBvZiBjaGFubmVscyBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgogKi8KCgl1MzIgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gMCAtLSBOYXRpdmUgbW9kZSAtIEZvciBvdGhlciB2YWx1ZXMsCiAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlCiAqIHNhbXBsaW5nIHJhdGUgYXQgdGhlIGlucHV0LgogKiBUaGUgc2FtcGxpbmcgcmF0ZSBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfRzcxMV9BTEFXX0ZTIDB4MDAwMTBCRjcKI2RlZmluZSBBU01fTUVESUFfRk1UX0c3MTFfTUxBV19GUyAweDAwMDEwQzJFCgpzdHJ1Y3QgYXNtX2c3MTFfZW5jX2NmZ192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyIGVuY2JsazsKCgl1MzIgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qCiAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDgwMDAsIDE2MDAwIEh6CiAqLwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fdm9yYmlzX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCXUzMiAgICAgICAgICBiaXRfc3RyZWFtX2ZtdDsKLyogQml0IHN0cmVhbSBmb3JtYXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBSYXcgYml0c3RyZWFtCiAqIC0gMSAtLSBUcmFuc2NvZGVkIGJpdHN0cmVhbQogKgogKiBUcmFuc2NvZGVkIGJpdHN0cmVhbSBjb250YWluaW5nIHRoZSBzaXplIG9mIHRoZSBmcmFtZSBhcyB0aGUgZmlyc3QKICogd29yZCBpbiBlYWNoIGZyYW1lLgogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2ZsYWNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoKCXUxNiBpc19zdHJlYW1faW5mb19wcmVzZW50OwovKiBTcGVjaWZpZXMgd2hldGhlciBzdHJlYW0gaW5mb3JtYXRpb24gaXMgcHJlc2VudCBpbiB0aGUgRkxBQyBmb3JtYXQKICogYmxvY2suCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBTdHJlYW0gaW5mb3JtYXRpb24gaXMgbm90IHByZXNlbnQgaW4gdGhpcyBtZXNzYWdlCiAqIC0gMSAtLSBTdHJlYW0gaW5mb3JtYXRpb24gaXMgcHJlc2VudCBpbiB0aGlzIG1lc3NhZ2UKICoKICogV2hlbiBzZXQgdG8gMSwgdGhlIEZMQUMgYml0c3RyZWFtIHdhcyBzdWNjZXNzZnVsbHkgcGFyc2VkIGJ5IHRoZQogKiBjbGllbnQsIGFuZCBvdGhlciBmaWVsZHMgaW4gdGhlIEZMQUMgZm9ybWF0IGJsb2NrIGNhbiBiZSByZWFkIGJ5IHRoZQogKiBkZWNvZGVyIHRvIGdldCBtZXRhZGF0YSBzdHJlYW0gaW5mb3JtYXRpb24uCiAqLwoKCXUxNiBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscyBmb3IgZGVjb2RpbmcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gMgogKi8KCgl1MTYgbWluX2Jsa19zaXplOwovKiBNaW5pbXVtIGJsb2NrIHNpemUgKGluIHNhbXBsZXMpIHVzZWQgaW4gdGhlIHN0cmVhbS4gSXQgbXVzdCBiZSBsZXNzCiAqIHRoYW4gb3IgZXF1YWwgdG8gbWF4X2Jsa19zaXplLgogKi8KCgl1MTYgbWF4X2Jsa19zaXplOwovKiBNYXhpbXVtIGJsb2NrIHNpemUgKGluIHNhbXBsZXMpIHVzZWQgaW4gdGhlIHN0cmVhbS4gSWYgdGhlCiAqIG1pbmltdW0gYmxvY2sgc2l6ZSBlcXVhbHMgdGhlIG1heGltdW0gYmxvY2sgc2l6ZSwgYSBmaXhlZCBibG9jawogKiBzaXplIHN0cmVhbSBpcyBpbXBsaWVkLgogKi8KCgl1MTYgbWQ1X3N1bVs4XTsKLyogTUQ1IHNpZ25hdHVyZSBhcnJheSBvZiB0aGUgdW5lbmNvZGVkIGF1ZGlvIGRhdGEuIFRoaXMgYWxsb3dzIHRoZQogKiBkZWNvZGVyIHRvIGRldGVybWluZSBpZiBhbiBlcnJvciBleGlzdHMgaW4gdGhlIGF1ZGlvIGRhdGEsIGV2ZW4gd2hlbgogKiB0aGUgZXJyb3IgZG9lcyBub3QgcmVzdWx0IGluIGFuIGludmFsaWQgYml0c3RyZWFtLgogKi8KCgl1MzIgc2FtcGxlX3JhdGU7Ci8qIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDgwMDAgdG8gNDgwMDAgSHoKICovCgoJdTMyIG1pbl9mcmFtZV9zaXplOwovKiBNaW5pbXVtIGZyYW1lIHNpemUgdXNlZCBpbiB0aGUgc3RyZWFtLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtID4gMCBieXRlcwogKiAtIDAgLS0gVGhlIHZhbHVlIGlzIHVua25vd24KICovCgoJdTMyIG1heF9mcmFtZV9zaXplOwovKiBNYXhpbXVtIGZyYW1lIHNpemUgdXNlZCBpbiB0aGUgc3RyZWFtLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtLSA+IDAgYnl0ZXMKICogLS0gMCAuIFRoZSB2YWx1ZSBpcyB1bmtub3duCiAqLwoKCXUxNiBzYW1wbGVfc2l6ZTsKLyogQml0cyBwZXIgc2FtcGxlLlN1cHBvcnRlZCB2YWx1ZXM6IDgsIDE2ICovCgoJdTE2IHJlc2VydmVkOwovKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVybwogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FsYWNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoKCXUzMiBmcmFtZV9sZW5ndGg7Cgl1OCBjb21wYXRpYmxlX3ZlcnNpb247Cgl1OCBiaXRfZGVwdGg7Cgl1OCBwYjsKCXU4IG1iOwoJdTgga2I7Cgl1OCBudW1fY2hhbm5lbHM7Cgl1MTYgbWF4X3J1bjsKCXUzMiBtYXhfZnJhbWVfYnl0ZXM7Cgl1MzIgYXZnX2JpdF9yYXRlOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIGNoYW5uZWxfbGF5b3V0X3RhZzsKCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2c3MTFfZGVjX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCXUzMiBzYW1wbGVfcmF0ZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYXBlX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCgl1MTYgY29tcGF0aWJsZV92ZXJzaW9uOwoJdTE2IGNvbXByZXNzaW9uX2xldmVsOwoJdTMyIGZvcm1hdF9mbGFnczsKCXUzMiBibG9ja3NfcGVyX2ZyYW1lOwoJdTMyIGZpbmFsX2ZyYW1lX2Jsb2NrczsKCXUzMiB0b3RhbF9mcmFtZXM7Cgl1MTYgYml0c19wZXJfc2FtcGxlOwoJdTE2IG51bV9jaGFubmVsczsKCXUzMiBzYW1wbGVfcmF0ZTsKCXUzMiBzZWVrX3RhYmxlX3ByZXNlbnQ7Cgp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9kc2RfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoKCXUxNiBudW1fdmVyc2lvbjsKCXUxNiBpc19iaXR3aXNlX2JpZ19lbmRpYW47Cgl1MTYgZHNkX2NoYW5uZWxfYmxvY2tfc2l6ZTsKCXUxNiBudW1fY2hhbm5lbHM7Cgl1OCAgY2hhbm5lbF9tYXBwaW5nWzhdOwoJdTMyIGRzZF9kYXRhX3JhdGU7Cgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTICAgICAgICAgICAgICAgICAgMHgwMDAxMEJFQgoKLyogRW51bWVyYXRpb24gZm9yIDQuNzUga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01SNDc1ICAgICAgICAgICAgICAgIDAKCi8qIEVudW1lcmF0aW9uIGZvciA1LjE1IGticHMgQU1SLU5CIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV9NUjUxNSAgICAgICAgICAgICAgICAxCgovKiBFbnVtZXJhdGlvbiBmb3IgNS45MCBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTU1SNTkgICAgICAgICAgICAgICAgMgoKLyogRW51bWVyYXRpb24gZm9yIDYuNzAga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01NUjY3ICAgICAgICAgICAgICAgIDMKCi8qIEVudW1lcmF0aW9uIGZvciA3LjQwIGticHMgQU1SLU5CIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV9NTVI3NCAgICAgICAgICAgICAgICA0CgovKiBFbnVtZXJhdGlvbiBmb3IgNy45NSBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTU1SNzk1ICAgICAgICAgICAgICAgNQoKLyogRW51bWVyYXRpb24gZm9yIDEwLjIwIGticHMgQU1SLU5CIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV9NTVIxMDIgICAgICAgICAgICAgICA2CgovKiBFbnVtZXJhdGlvbiBmb3IgMTIuMjAga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01NUjEyMiAgICAgICAgICAgICAgIDcKCi8qIEVudW1lcmF0aW9uIGZvciBBTVItTkIgRGlzY29udGludW91cyBUcmFuc21pc3Npb24gbW9kZSBvZmYuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9PRkYgICAgICAgICAgICAgICAgICAgICAwCgovKiBFbnVtZXJhdGlvbiBmb3IgQU1SLU5CIERUWCBtb2RlIFZBRDEuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9WQUQxICAgICAgICAgICAgICAgICAgICAxCgovKiBFbnVtZXJhdGlvbiBmb3IgQU1SLU5CIERUWCBtb2RlIFZBRDIuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9WQUQyICAgICAgICAgICAgICAgICAgICAyCgovKiBFbnVtZXJhdGlvbiBmb3IgQU1SLU5CIERUWCBtb2RlIGF1dG8uICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9BVVRPICAgICAgICAgICAgICAgICAgICAzCgpzdHJ1Y3QgYXNtX2Ftcm5iX2VuY19jZmcgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIJZW5jYmxrOwoKCXUxNiAgICAgICAgICBlbmNfbW9kZTsKLyogQU1SLU5CIGVuY29kaW5nIHJhdGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIFVzZSB0aGUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV8qCiAqIG1hY3JvcwogKi8KCgl1MTYgICAgICAgICAgZHR4X21vZGU7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIERUWCBtb2RlIGlzIGRpc2FibGVkIG9yIGVuYWJsZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlNfRFRYX01PREVfT0ZGCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlNfRFRYX01PREVfVkFEMQogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GUyAgICAgICAgICAgICAgICAgIDB4MDAwMTBCRUMKCi8qIEVudW1lcmF0aW9uIGZvciA2LjYga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SNjYgICAgICAgICAgICAgICAgIDAKCi8qIEVudW1lcmF0aW9uIGZvciA4Ljg1IGticHMgQU1SLVdCIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV9NUjg4NSAgICAgICAgICAgICAgICAxCgovKiBFbnVtZXJhdGlvbiBmb3IgMTIuNjUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SMTI2NSAgICAgICAgICAgICAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciAxNC4yNSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIxNDI1ICAgICAgICAgICAgICAgMwoKLyogRW51bWVyYXRpb24gZm9yIDE1Ljg1IGticHMgQU1SLVdCIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV9NUjE1ODUgICAgICAgICAgICAgICA0CgovKiBFbnVtZXJhdGlvbiBmb3IgMTguMjUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SMTgyNSAgICAgICAgICAgICAgIDUKCi8qIEVudW1lcmF0aW9uIGZvciAxOS44NSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIxOTg1ICAgICAgICAgICAgICAgNgoKLyogRW51bWVyYXRpb24gZm9yIDIzLjA1IGticHMgQU1SLVdCIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV9NUjIzMDUgICAgICAgICAgICAgICA3CgovKiBFbnVtZXJhdGlvbiBmb3IgMjMuODUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SMjM4NSAgICAgICAgICAgICAgIDgKCnN0cnVjdCBhc21fYW1yd2JfZW5jX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7CgoJdTE2ICAgICAgICAgIGVuY19tb2RlOwovKiBBTVItV0IgZW5jb2RpbmcgcmF0ZS4KICogU3V1cHBvcnRlZCB2YWx1ZXM6CiAqIFVzZSB0aGUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV8qCiAqIG1hY3JvcwogKi8KCgl1MTYgICAgICAgICAgZHR4X21vZGU7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIERUWCBtb2RlIGlzIGRpc2FibGVkIG9yIGVuYWJsZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlNfRFRYX01PREVfT0ZGCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlNfRFRYX01PREVfVkFEMQogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WMTNLX0ZTICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBCRUQKCi8qIEVudW1lcmF0aW9uIGZvciAxNC40IGticHMgVjEzSyBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjE0NDAgICAgICAgICAgICAgICAgMAoKLyogRW51bWVyYXRpb24gZm9yIDEyLjIga2JwcyBWMTNLIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTIyMCAgICAgICAgICAgICAgICAxCgovKiBFbnVtZXJhdGlvbiBmb3IgMTEuMiBrYnBzIFYxM0sgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVIxMTIwICAgICAgICAgICAgICAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciA5LjAga2JwcyBWMTNLIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SOTAgICAgICAgICAgICAgICAgICAzCgovKiBFbnVtZXJhdGlvbiBmb3IgNy4yIGticHMgVjEzSyBlRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVI3MjAgICAgICAgICAgICAgICAgIDQKCi8qIEVudW1lcmF0aW9uIGZvciAxLzggdm9jb2RlciByYXRlLiovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WT0NfT05FX0VJR0hUSF9SQVRFICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciAxLzQgdm9jb2RlciByYXRlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVk9DX09ORV9GT1VSVEhfUkFURSAgICAgICAyCgovKiBFbnVtZXJhdGlvbiBmb3IgMS8yIHZvY29kZXIgcmF0ZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1ZPQ19IQUxGX1JBVEUgICAgICAgICAgICAgMwoKLyogRW51bWVyYXRpb24gZm9yIGZ1bGwgdm9jb2RlciByYXRlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVk9DX0ZVTExfUkFURSAgICAgICAgICAgICA0CgpzdHJ1Y3QgYXNtX3YxM2tfZW5jX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7CgkJdTE2ICAgICAgICAgIG1heF9yYXRlOwovKiBNYXhpbXVtIGFsbG93ZWQgZW5jb2RlciBmcmFtZSByYXRlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRUlHSFRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfT05FX0ZPVVJUSF9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0hBTEZfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19GVUxMX1JBVEUKICovCgoJdTE2ICAgICAgICAgIG1pbl9yYXRlOwovKiBNaW5pbXVtIGFsbG93ZWQgZW5jb2RlciBmcmFtZSByYXRlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRUlHSFRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfT05FX0ZPVVJUSF9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0hBTEZfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19GVUxMX1JBVEUKICovCgoJdTE2ICAgICAgICAgIHJlZHVjZWRfcmF0ZV9jbWQ7Ci8qIFJlZHVjZWQgcmF0ZSBjb21tYW5kLCB1c2VkIHRvIGNoYW5nZQogKiB0aGUgYXZlcmFnZSBiaXRyYXRlIG9mIHRoZSBWMTNLCiAqIHZvY29kZXIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjE0NDAgKERlZmF1bHQpCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjEyMjAKICogLSAjQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTEyMAogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVI5MAogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVI3MjAKICovCgoJdTE2ICAgICAgICAgIHJhdGVfbW9kX2NtZDsKLyogUmF0ZSBtb2R1bGF0aW9uIGNvbW1hbmQuIERlZmF1bHQgPSAwLgogKi0gSWYgYml0IDA9MSwgcmF0ZSBjb250cm9sIGlzIGVuYWJsZWQuCiAqLSBJZiBiaXQgMT0xLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgZnVsbCByYXRlCiAqCQkJZnJhbWVzIGlzIGxpbWl0ZWQgd2l0aCBudW1iZXJzIHN1cHBsaWVkIGluCiAqCQkJYml0cyAyIHRvIDEwLgogKi0gSWYgYml0IDE9MCwgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG5vbi1mdWxsIHJhdGUgZnJhbWVzCiAqCQkJaW4gYmV0d2VlbiB0d28gZnVsbCByYXRlIGZyYW1lcyBpcyBmb3JjZWQgdG8KICogdGhlIG51bWJlciBzdXBwbGllZCBpbiBiaXRzIDIgdG8gMTAuIEluIGJvdGggY2FzZXMsIGlmIG5lY2Vzc2FyeSwKICogaGFsZiByYXRlIGlzIHVzZWQgdG8gc3Vic3RpdHV0ZSBmdWxsIHJhdGUuIC0gQml0cyAxNSB0byAxMCBhcmUKICogcmVzZXJ2ZWQgYW5kIG11c3QgYWxsIGJlIHNldCB0byB6ZXJvLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfRVZSQ19GUyAgICAgICAgICAgICAgICAgICAweDAwMDEwQkVFCgovKiAgRVZSQyBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHVzZWQgaW4gdGhlCiAqICNBU01fUEFSQU1fSURfRU5DREVDX0VOQ19DRkdfQkxLX1YyIGNvbW1hbmQuCiAqLwpzdHJ1Y3QgYXNtX2V2cmNfZW5jX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7Cgl1MTYgICAgICAgICAgbWF4X3JhdGU7Ci8qIE1heGltdW0gYWxsb3dlZCBlbmNvZGVyIGZyYW1lIHJhdGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9FSUdIVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRk9VUlRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfSEFMRl9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0ZVTExfUkFURQogKi8KCgl1MTYgICAgICAgICAgbWluX3JhdGU7Ci8qIE1pbmltdW0gYWxsb3dlZCBlbmNvZGVyIGZyYW1lIHJhdGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9FSUdIVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRk9VUlRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfSEFMRl9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0ZVTExfUkFURQogKi8KCgl1MTYgICAgICAgICAgcmF0ZV9tb2RfY21kOwovKiBSYXRlIG1vZHVsYXRpb24gY29tbWFuZC4gRGVmYXVsdDogMC4KICogLSBJZiBiaXQgMD0xLCByYXRlIGNvbnRyb2wgaXMgZW5hYmxlZC4KICogLSBJZiBiaXQgMT0xLCB0aGUgbWF4aW11bSBudW1iZXIgb2YgY29uc2VjdXRpdmUgZnVsbCByYXRlIGZyYW1lcwogKiBpcyBsaW1pdGVkIHdpdGggbnVtYmVycyBzdXBwbGllZCBpbiBiaXRzIDIgdG8gMTAuCiAqCiAqIC0gSWYgYml0IDE9MCwgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG5vbi1mdWxsIHJhdGUgZnJhbWVzIGluCiAqIGJldHdlZW4gdHdvIGZ1bGwgcmF0ZSBmcmFtZXMgaXMgZm9yY2VkIHRvIHRoZSBudW1iZXIgc3VwcGxpZWQgaW4KICogYml0cyAyIHRvIDEwLiBJbiBib3RoIGNhc2VzLCBpZiBuZWNlc3NhcnksIGhhbGYgcmF0ZSBpcyB1c2VkIHRvCiAqIHN1YnN0aXR1dGUgZnVsbCByYXRlLgogKgogKiAtIEJpdHMgMTUgdG8gMTAgYXJlIHJlc2VydmVkIGFuZCBtdXN0IGFsbCBiZSBzZXQgdG8gemVyby4KICovCgoJdTE2ICAgICAgICAgIHJlc2VydmVkOwoJLyogUmVzZXJ2ZWQuIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX1dNQV9WMTBQUk9fVjIgICAgICAgICAgICAgICAgMHgwMDAxMERBNwoKc3RydWN0IGFzbV93bWFwcm92MTBfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoKCXUxNiAgICAgICAgICBmbXRhZzsKLyogV01BIGZvcm1hdCB0eXBlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDB4MTYyIC0tIFdNQSA5IFBybwogKiAtIDB4MTYzIC0tIFdNQSA5IFBybyBMb3NzbGVzcwogKiAtIDB4MTY2IC0tIFdNQSAxMCBQcm8KICogLSAweDE2NyAtLSBXTUEgMTAgUHJvIExvc3NsZXNzCiAqLwoKCXUxNiAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscyBlbmNvZGVkIGluIHRoZSBpbnB1dCBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOAogKi8KCgl1MzIgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQgKGluIEhlcnR6KS4KICogU3VwcG9ydGVkIHZhbHVlczogMTEwMjUsIDE2MDAwLCAyMjA1MCwgMzIwMDAsIDQ0MTAwLCA0ODAwMCwKICogODgyMDAsIDk2MDAwCiAqLwoKCXUzMiAgICAgICAgICBhdmdfYnl0ZXNfcGVyX3NlYzsKLyogQml0cmF0ZSBleHByZXNzZWQgYXMgdGhlIGF2ZXJhZ2UgYnl0ZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA5NjAwMAogKi8KCgl1MTYgICAgICAgICAgYmxrX2FsaWduOwovKiBTaXplIG9mIHRoZSBiaXRzdHJlYW0gcGFja2V0IHNpemUgaW4gYnl0ZXMuIFdNQSBQcm8gZmlsZXMKICogaGF2ZSBhIHBheWxvYWQgb2Ygb25lIGJsb2NrIHBlciBiaXRzdHJlYW0gcGFja2V0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBAbGUgMTMzNzYKICovCgoJdTE2ICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBpbiB0aGUgZW5jb2RlZCBXTUEgc3RyZWFtLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgoJdTMyICAgICAgICAgIGNoYW5uZWxfbWFzazsKLyogQml0LXBhY2tlZCBkb3VibGUgd29yZCAoMzItYml0cykgdGhhdCBpbmRpY2F0ZXMgdGhlCiAqIHJlY29tbWVuZGVkIHNwZWFrZXIgcG9zaXRpb25zIGZvciBlYWNoIHNvdXJjZSBjaGFubmVsLgogKi8KCgl1MTYgICAgICAgICAgZW5jX29wdGlvbnM7Ci8qIEJpdC1wYWNrZWQgd29yZCB3aXRoIHZhbHVlcyB0aGF0IGluZGljYXRlIHdoZXRoZXIgY2VydGFpbgogKiBmZWF0dXJlcyBvZiB0aGUgYml0c3RyZWFtIGFyZSB1c2VkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDB4MDAwMSAtLSBFTkNPUFQzX1BVUkVfTE9TU0xFU1MgLSAweDAwMDYgLS0KICogRU5DT1BUM19GUk1fU0laRV9NT0QgLSAweDAwMzggLS0gRU5DT1BUM19TVUJGUk1fRElWIC0gMHgwMDQwIC0tCiAqIEVOQ09QVDNfV1JJVEVfRlJBTUVTSVpFX0lOX0hEUiAtIDB4MDA4MCAtLQogKiBFTkNPUFQzX0dFTkVSQVRFX0RSQ19QQVJBTVMgLSAweDAxMDAgLS0gRU5DT1BUM19SVE1CSVRTCiAqLwoKCgl1MTYgICAgICAgICAgdXNBZHZhbmNlZEVuY29kZU9wdDsKCS8qIEFkdmFuY2VkIGVuY29kaW5nIG9wdGlvbi4gICovCgoJdTMyICAgICAgICAgIGFkdmFuY2VkX2VuY19vcHRpb25zMjsKCS8qIEFkdmFuY2VkIGVuY29kaW5nIG9wdGlvbiAyLiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9XTUFfVjlfVjIgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBEQTgKc3RydWN0IGFzbV93bWFzdGR2OV9mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7Cgl1MTYgICAgICAgICAgZm10YWc7Ci8qIFdNQSBmb3JtYXQgdGFnLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAweDE2MSAoV01BIDkgc3RhbmRhcmQpCiAqLwoKCXUxNiAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscyBpbiB0aGUgc3RyZWFtLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxLCAyCiAqLwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZCAoaW4gSGVydHopLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA0ODAwMAogKi8KCgl1MzIgICAgICAgICAgYXZnX2J5dGVzX3Blcl9zZWM7CgkvKiBCaXRyYXRlIGV4cHJlc3NlZCBhcyB0aGUgYXZlcmFnZSBieXRlcyBwZXIgc2Vjb25kLiAqLwoKCXUxNiAgICAgICAgICBibGtfYWxpZ247Ci8qIEJsb2NrIGFsaWduLiBBbGwgV01BIGZpbGVzIHdpdGggYSBtYXhpbXVtIHBhY2tldCBzaXplIG9mCiAqIDEzMzc2IGFyZSBzdXBwb3J0ZWQuCiAqLwoKCgl1MTYgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIGluIHRoZSBvdXRwdXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2CiAqLwoKCXUzMiAgICAgICAgICBjaGFubmVsX21hc2s7Ci8qIENoYW5uZWwgbWFzay4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAzIC0tIFN0ZXJlbyAoZnJvbnQgbGVmdC9mcm9udCByaWdodCkKICogLSA0IC0tIE1vbm8gKGNlbnRlcikKICovCgoJdTE2ICAgICAgICAgIGVuY19vcHRpb25zOwoJLyogT3B0aW9ucyB1c2VkIGR1cmluZyBlbmNvZGluZy4gKi8KCgl1MTYgICAgICAgICAgcmVzZXJ2ZWQ7Cgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX1dNQV9WOCAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEQ5MQoKc3RydWN0IGFzbV93bWFzdGR2OF9lbmNfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCXUzMiAgICAgICAgICBiaXRfcmF0ZTsKCS8qIEVuY29kaW5nIHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLiAqLwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICoKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIE5hdGl2ZSBtb2RlCiAqIC0gT3RoZXIgU3VwcG9ydGVkIHZhbHVlcyBhcmUgMjIwNTAsIDMyMDAwLCA0NDEwMCwgYW5kIDQ4MDAwLgogKgogKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZQogKiBzYW1wbGluZyByYXRlIGF0IHRoZSBpbnB1dC4KICogVGhlIHNhbXBsaW5nIHJhdGUgbXVzdCBub3QgY2hhbmdlIGR1cmluZyBlbmNvZGluZy4KICovCgoJdTE2ICAgICAgICAgIGNoYW5uZWxfY2ZnOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gZW5jb2RlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gTmF0aXZlIG1vZGUKICogLSAxIC0tIE1vbm8KICogLSAyIC0tIFN0ZXJlbwogKiAtIE90aGVyIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZC4KICoKICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKICogbnVtYmVyIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KICogVGhlIG51bWJlciBvZiBjaGFubmVscyBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgogKi8KCgl1MTYgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZC4gQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KCX0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SX1dCX1BMVVNfVjIgICAgICAgICAgICAgICAweDAwMDEwREE5CgpzdHJ1Y3QgYXNtX2FtcndicGx1c19mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7Cgl1MzIgICAgICAgICAgYW1yX2ZyYW1lX2ZtdDsKLyogQU1SIGZyYW1lIGZvcm1hdC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSA2IC0tIFRyYW5zcG9ydCBJbnRlcmZhY2UgRm9ybWF0IChUSUYpCiAqIC0gQW55IG90aGVyIHZhbHVlIC0tIEZpbGUgc3RvcmFnZSBmb3JtYXQgKEZTRikKICoKICogVElGIHN0cmVhbSBjb250YWlucyAyLWJ5dGUgaGVhZGVyIGZvciBlYWNoIGZyYW1lIHdpdGhpbiB0aGUKICogc3VwZXJmcmFtZS4gRlNGIHN0cmVhbSBjb250YWlucyBvbmUgMi1ieXRlIGhlYWRlciBwZXIgc3VwZXJmcmFtZS4KICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0FDMyAgICAgICAgICAgICAgICAgICAgMHgwMDAxMERFRQojZGVmaW5lIEFTTV9NRURJQV9GTVRfRUFDMyAgICAgICAgICAgICAgICAgICAweDAwMDEwREVGCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9EVFMgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBEODgKI2RlZmluZSBBU01fTUVESUFfRk1UX01QMiAgICAgICAgICAgICAgICAgICAgMHgwMDAxMERFOQojZGVmaW5lIEFTTV9NRURJQV9GTVRfRkxBQyAgICAgICAgICAgICAgICAgICAweDAwMDEwQzE2CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTEFDICAgICAgICAgICAgICAgICAgIDB4MDAwMTJGMzEKI2RlZmluZSBBU01fTUVESUFfRk1UX1ZPUkJJUyAgICAgICAgICAgICAgICAgMHgwMDAxMEMxNQojZGVmaW5lIEFTTV9NRURJQV9GTVRfQVBFICAgICAgICAgICAgICAgICAgICAweDAwMDEyRjMyCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9EU0QgICAgICAgICAgICAgICAgICAgIDB4MDAwMTJGM0UKI2RlZmluZSBBU01fTUVESUFfRk1UX1RSVUVIRCAgICAgICAgICAgICAgICAgMHgwMDAxMzIxNQovKiAweDAgaXMgdXNlZCBmb3IgZm9tYXQgSUQgc2luY2UgQURTUCBkeW5hbWljYWxseSBkZXRlcm1pbmVzIHRoZQogKiBmb3JtYXQgZW5jYXBzdWxhdGVkIGluIHRoZSBJRUM2MTkzNyAoY29tcHJlc3NlZCkgb3IgSUVDNjA5NTgKICogKHBjbSkgcGFja2V0cy4KICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9JRUMgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKCi8qIE1lZGlhIGZvcm1hdCBJRCBmb3IgYWRhcHRpdmUgdHJhbnNmb3JtIGFjb3VzdGljIGNvZGluZy4gVGhpcwogKiBJRCBpcyB1c2VkIGJ5IHRoZSAjQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9DT01QUkVTU0VEIGNvbW1hbmQKICogb25seS4KICovCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQVRSQUMgICAgICAgICAgICAgICAgICAweDAwMDEwRDg5CgovKiBNZWRpYSBmb3JtYXQgSUQgZm9yIG1ldGFkYXRhLWVuaGFuY2VkIGF1ZGlvIHRyYW5zbWlzc2lvbi4KICogVGhpcyBJRCBpcyB1c2VkIGJ5IHRoZSAjQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9DT01QUkVTU0VECiAqIGNvbW1hbmQgb25seS4KICovCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTUFUICAgICAgICAgICAgICAgICAgICAweDAwMDEwRDhBCgovKiAgYWRzcF9tZWRpYV9mbXQuaCAqLwoKI2RlZmluZSBBU01fREFUQV9DTURfV1JJVEVfVjIgMHgwMDAxMERBQgoKc3RydWN0IGFzbV9kYXRhX2NtZF93cml0ZV92MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICBidWZfYWRkcl9sc3c7Ci8qIFRoZSA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IHNob3VsZCBiZSBhIHZhbGlkLCBtYXBwZWQgYWRkcmVzcy4KICogNjQgYml0IGFkZHJlc3Mgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMKICovCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbXN3OwovKiBUaGUgNjQgYml0IGFkZHJlc3MgbXN3LWxzdyBzaG91bGQgYmUgYSB2YWxpZCwgbWFwcGVkIGFkZHJlc3MuCiAqIDY0IGJpdCBhZGRyZXNzIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDMyIGJ5dGVzLgogKiAtQWRkcmVzcyBvZiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUgZGVjb2RlZC4KICogVGhlIGJ1ZmZlciBzaG91bGQgYmUgYWxpZ25lZCB0byBhIDMyIGJ5dGUgYm91bmRhcnkuCiAqIC1JbiB0aGUgY2FzZSBvZiAzMiBiaXQgU2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBtc3cgZmllbGQgbXVzdAogKiAtYmUgc2V0IHRvIHplcm8uCiAqIC1JbiB0aGUgY2FzZSBvZiAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQgMzEgdG8gYml0IDQKICogLW9mIG1zdyBtdXN0IGJlIHNldCB0byB6ZXJvLgogKi8KCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBEU1AgdGhyb3VnaAogKiBBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZAogKi8KCXUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9zaXplOwovKiBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIgZm9yIGRlY29kaW5nLiBUaGUKICogZmlyc3QgYnl0ZSBzdGFydHMgYXQgYnVmX2FkZHIuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNlcV9pZDsKCS8qIE9wdGlvbmFsIGJ1ZmZlciBzZXF1ZW5jZSBJRC4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgc2Vzc2lvbiB0aW1lIGluIG1pY3Jvc2Vjb25kcyBvZiB0aGUKICogZmlyc3QgYnVmZmVyIHNhbXBsZS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX21zdzsKLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlCiAqIGZpcnN0IGJ1ZmZlciBzYW1wbGUuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGZsYWdzOwovKiBCaXRmaWVsZCBvZiBmbGFncy4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDMxOgogKiAtIDEgLS0gVmFsaWQgdGltZXN0YW1wLgogKiAtIDAgLS0gSW52YWxpZCB0aW1lc3RhbXAuCiAqIC0gVXNlICNBU01fQklUX01BU0tJTUVTVEFNUF9WQUxJRF9GTEFHIGFzIHRoZSBiaXRtYXNrIGFuZAogKiAjQVNNX1NISUZUSU1FU1RBTVBfVkFMSURfRkxBRyBhcyB0aGUgc2hpZnQgdmFsdWUgdG8gc2V0IHRoaXMgYml0LgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzA6CiAqIC0gMSAtLSBMYXN0IGJ1ZmZlci4KICogLSAwIC0tIE5vdCB0aGUgbGFzdCBidWZmZXIuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCAyOToKICogLSAxIC0tIENvbnRpbnVlIHRoZSB0aW1lc3RhbXAgZnJvbSB0aGUgcHJldmlvdXMgYnVmZmVyLgogKiAtIDAgLS0gVGltZXN0YW1wIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBub3QgcmVsYXRlZAogKiB0byB0aGUgdGltZXN0YW1wIG9mIHRoZSBwcmV2aW91cyBidWZmZXIuCiAqIC0gVXNlICNBU01fQklUX01BU0tTX0NPTlRJTlVFX0ZMQUcgYW5kICNBU01fU0hJRlRTX0NPTlRJTlVFX0ZMQUcKICogdG8gc2V0IHRoaXMgYml0LgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgNDoKICogLSAxIC0tIEVuZCBvZiB0aGUgZnJhbWUuCiAqIC0gMCAtLSBOb3QgdGhlIGVuZCBvZiBmcmFtZSwgb3IgdGhpcyBpbmZvcm1hdGlvbiBpcyBub3Qga25vd24uCiAqIC0gVXNlICNBU01fQklUX01BU0tfRU9GX0ZMQUcgYXMgdGhlIGJpdG1hc2sgYW5kICNBU01fU0hJRlRfRU9GX0ZMQUcKICogYXMgdGhlIHNoaWZ0IHZhbHVlIHRvIHNldCB0aGlzIGJpdC4KICoKICogQWxsIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkIGFuZCBtdXN0IGJlIHNldCB0byAwLgogKgogKiBJZiBiaXQgMzE9MCBhbmQgYml0IDI5PTE6IFRoZSB0aW1lc3RhbXAgb2YgdGhlIGZpcnN0IHNhbXBsZSBpbgogKiB0aGlzIGJ1ZmZlciBjb250aW51ZXMgZnJvbSB0aGUgdGltZXN0YW1wIG9mIHRoZSBsYXN0IHNhbXBsZSBpbgogKiB0aGUgcHJldmlvdXMgYnVmZmVyLiBJZiB0aGVyZSBpcyBubyBwcmV2aW91cyBidWZmZXIgKGkuZS4sIHRoaXMKICogaXMgdGhlIGZpcnN0IGJ1ZmZlciBzZW50IGFmdGVyIG9wZW5pbmcgdGhlIHN0cmVhbSBvciBhZnRlciBhCiAqIGZsdXNoIG9wZXJhdGlvbiksIG9yIGlmIHRoZSBwcmV2aW91cyBidWZmZXIgZG9lcyBub3QgaGF2ZSBhIHZhbGlkCiAqIHRpbWVzdGFtcCwgdGhlIHNhbXBsZXMgaW4gdGhlIGN1cnJlbnQgYnVmZmVyIGFsc28gZG8gbm90IGhhdmUgYQogKiB2YWxpZCB0aW1lc3RhbXAuIFRoZXkgYXJlIHBsYXllZCBvdXQgYXMgc29vbiBhcyBwb3NzaWJsZS4KICoKICoKICogSWYgYml0IDMxPTAgYW5kIGJpdCAyOT0wOiBObyB0aW1lc3RhbXAgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZQogKiBmaXJzdCBzYW1wbGUgaW4gdGhpcyBidWZmZXIuIFRoZSBzYW1wbGVzIGFyZSBwbGF5ZWQgb3V0IGFzIHNvb24KICogYXMgcG9zc2libGUuCiAqCiAqCiAqIElmIGJpdCAzMT0xIGFuZCBiaXQgMjkgaXMgaWdub3JlZDogVGhlIHRpbWVzdGFtcCBzcGVjaWZpZWQgaW4KICogdGhpcyBwYXlsb2FkIGlzIGhvbm9yZWQuCiAqCiAqCiAqIElmIGJpdCAzMD0wOiBOb3QgdGhlIGxhc3QgYnVmZmVyIGluIHRoZSBzdHJlYW0uIFRoaXMgaXMgdXNlZnVsCiAqIGluIHJlbW92aW5nIHRyYWlsaW5nIHNhbXBsZXMuCiAqCiAqCiAqIEZvciBiaXQgNDogVGhlIGNsaWVudCBjYW4gc2V0IHRoaXMgZmxhZyBmb3IgZXZlcnkgYnVmZmVyIHNlbnQgaW4KICogd2hpY2ggdGhlIGxhc3QgYnl0ZSBpcyB0aGUgZW5kIG9mIGEgZnJhbWUuIElmIHRoaXMgZmxhZyBpcyBzZXQsCiAqIHRoZSBidWZmZXIgY2FuIGNvbnRhaW4gZGF0YSBmcm9tIG11bHRpcGxlIGZyYW1lcywgYnV0IGl0IHNob3VsZAogKiBhbHdheXMgZW5kIGF0IGEgZnJhbWUgYm91bmRhcnkuIFJlc3RyaWN0aW9ucyBhbGxvdyB0aGUgYURTUCB0bwogKiBkZXRlY3QgYW4gZW5kIG9mIGZyYW1lIHdpdGhvdXQgcmVxdWlyaW5nIGFkZGl0aW9uYWwgcHJvY2Vzc2luZy4KICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fREFUQV9DTURfUkVBRF9WMiAweDAwMDEwREFDCgpzdHJ1Y3QgYXNtX2RhdGFfY21kX3JlYWRfdjIgewoJc3RydWN0IGFwcl9oZHIgICAgICAgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbHN3OwovKiB0aGUgNjQgYml0IGFkZHJlc3MgbXN3LWxzdyBzaG91bGQgYmUgYSB2YWxpZCBtYXBwZWQgYWRkcmVzcwogKiBhbmQgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMKICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9hZGRyX21zdzsKLyogdGhlIDY0IGJpdCBhZGRyZXNzIG1zdy1sc3cgc2hvdWxkIGJlIGEgdmFsaWQgbWFwcGVkIGFkZHJlc3MKICogYW5kIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDMyIGJ5dGVzLgogKiAtIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB3aGVyZSB0aGUgRFNQIHB1dHMgdGhlIGVuY29kZWQgZGF0YSwKICogcG90ZW50aWFsbHksIGF0IGFuIG9mZnNldCBzcGVjaWZpZWQgYnkgdGhlIHVPZmZzZXQgZmllbGQgaW4KICogQVNNX0RBVEFfRVZFTlRfUkVBRF9ET05FIHN0cnVjdHVyZS4gVGhlIGJ1ZmZlciBzaG91bGQgYmUgYWxpZ25lZAogKiB0byBhIDMyIGJ5dGUgYm91bmRhcnkuCiAqIC0gSW4gdGhlIGNhc2Ugb2YgMzIgYml0IFNoYXJlZCBtZW1vcnkgYWRkcmVzcywgbXN3IGZpZWxkIG11c3QKICogLSBiZSBzZXQgdG8gemVyby4KICogLSBJbiB0aGUgY2FzZSBvZiAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQgMzEgdG8gYml0CiAqIC0gNCBvZiBtc3cgbXVzdCBiZSBzZXQgdG8gemVyby4KICovCgl1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogbWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgRFNQIHRocm91Z2gKICogQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9zaXplOwovKiBOdW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGZvciB0aGUgYURTUCB0byB3cml0ZS4gVGhlIGFEU1AKICogc3RhcnRzIHdyaXRpbmcgZnJvbSBidWZfYWRkci4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2VxX2lkOwoJLyogT3B0aW9uYWwgYnVmZmVyIHNlcXVlbmNlIElELiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fREFUQV9DTURfRU9TICAgICAgICAgICAgICAgMHgwMDAxMEJEQgojZGVmaW5lIEFTTV9EQVRBX0VWRU5UX1JFTkRFUkVEX0VPUyAgICAweDAwMDEwQzFDCiNkZWZpbmUgQVNNX0RBVEFfRVZFTlRfRU9TICAgICAgICAgICAgIDB4MDAwMTBCREQKCiNkZWZpbmUgQVNNX0RBVEFfRVZFTlRfV1JJVEVfRE9ORV9WMiAweDAwMDEwRDk5CnN0cnVjdCBhc21fZGF0YV9ldmVudF93cml0ZV9kb25lX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9hZGRyX2xzdzsKCS8qIGxzdyBvZiB0aGUgNjQgYml0IGFkZHJlc3MgKi8KCXUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9hZGRyX21zdzsKCS8qIG1zdyBvZiB0aGUgNjQgYml0IGFkZHJlc3MuIGFkZHJlc3MgZ2l2ZW4gYnkgdGhlIGNsaWVudCBpbgoJICogQVNNX0RBVEFfQ01EX1dSSVRFX1YyIGNvbW1hbmQuCgkgKi8KCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyogbWVtb3J5IG1hcCBoYW5kbGUgaW4gdGhlIEFTTV9EQVRBX0NNRF9XUklURV9WMiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlCiAqIHJlZmVyZW5jZWQgYnVmZmVyIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb25zdW1lZC4KICogU3VwcG9ydGVkIHZhbHVlczogUmVmZXIgdG8gQHhoeXBlcnJlZntRMyxbUTNdfQogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX0RBVEFfRVZFTlRfUkVBRF9ET05FX1YyIDB4MDAwMTBEOUEKCi8qIERlZmluaXRpb24gb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGZsYWcgYml0bWFzay4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19GUkFNRV9NRVRBREFUQV9GTEFHICgweDQwMDAwMDAwVUwpCgovKiBEZWZpbml0aW9uIG9mIHRoZSBmcmFtZSBtZXRhZGF0YSBmbGFnIHNoaWZ0IHZhbHVlLiAqLwojZGVmaW5lIEFTTV9TSElGVF9GUkFNRV9NRVRBREFUQV9GTEFHIDMwCgpzdHJ1Y3QgYXNtX2RhdGFfZXZlbnRfcmVhZF9kb25lX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBSZWZlciB0byBAeGh5cGVycmVme1EzLFtRM119CiAqLwoKdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbHN3OwovKiA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IGlzIGEgdmFsaWQsIG1hcHBlZCBhZGRyZXNzLiA2NCBiaXQKICogYWRkcmVzcyBpcyBhIG11bHRpcGxlIG9mIDMyIGJ5dGVzLgogKi8KCnUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9hZGRyX21zdzsKLyogNjQgYml0IGFkZHJlc3MgbXN3LWxzdyBpcyBhIHZhbGlkLCBtYXBwZWQgYWRkcmVzcy4gNjQgYml0CiAqIGFkZHJlc3MgaXMgYSBtdWx0aXBsZSBvZiAzMiBieXRlcy4KICoKICogLVNhbWUgYWRkcmVzcyBwcm92aWRlZCBieSB0aGUgY2xpZW50IGluIEFTTV9EQVRBX0NNRF9SRUFEX1YyCiAqIC1JbiB0aGUgY2FzZSBvZiAzMiBiaXQgU2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBtc3cgZmllbGQgaXMgc2V0IHRvCiAqIHplcm8uCiAqIC1JbiB0aGUgY2FzZSBvZiAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQgMzEgdG8gYml0IDQKICogLW9mIG1zdyBpcyBzZXQgdG8gemVyby4KICovCgp1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogbWVtb3J5IG1hcCBoYW5kbGUgaW4gdGhlIEFTTV9EQVRBX0NNRF9SRUFEX1YyICAqLwoKdTMyICAgICAgICAgICAgICAgICAgZW5jX2ZyYW1lc290YWxfc2l6ZTsKLyogVG90YWwgc2l6ZSBvZiB0aGUgZW5jb2RlZCBmcmFtZXMgaW4gYnl0ZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4wCiAqLwoKdTMyICAgICAgICAgICAgICAgICAgb2Zmc2V0OwovKiBPZmZzZXQgKGZyb20gYnVmX2FkZHIpIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBmaXJzdCBlbmNvZGVkCiAqIGZyYW1lLiBBbGwgZW5jb2RlZCBmcmFtZXMgYXJlIGNvbnNlY3V0aXZlLCBzdGFydGluZyBmcm9tIHRoaXMKICogb2Zmc2V0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgp1MzIgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgc2Vzc2lvbiB0aW1lIGluIG1pY3Jvc2Vjb25kcyBvZgogKiB0aGUgZmlyc3Qgc2FtcGxlIGluIHRoZSBidWZmZXIuIElmIEJpdCA1IG9mIG1vZGVfZmxhZ3MgZmxhZyBvZgogKiBBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURfVjIgaXMgMSB0aGVuIHRoZSA2NCBiaXQgdGltZXN0YW1wIGlzCiAqIGFic29sdXRlIGNhcHR1cmUgdGltZSBvdGhlcndpc2UgaXQgaXMgcmVsYXRpdmUgc2Vzc2lvbiB0aW1lLiBUaGUKICogYWJzb2x1dGUgdGltZXN0YW1wIGRvZXNuJ3QgcmVzZXQgdW5sZXNzIHRoZSBzeXN0ZW0gaXMgcmVzZXQuCiAqLwoKCnUzMiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9tc3c7Ci8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzIG9mCiAqIHRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIGJ1ZmZlci4KICovCgoKdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci8qIEJpdGZpZWxkIG9mIGZsYWdzLiBCaXQgMzAgaW5kaWNhdGVzIHdoZXRoZXIgZnJhbWUgbWV0YWRhdGEgaXMKICogcHJlc2VudC4gSWYgZnJhbWUgbWV0YWRhdGEgaXMgcHJlc2VudCwgbnVtX2ZyYW1lcyBjb25zZWN1dGl2ZQogKiBpbnN0YW5jZXMgb2YgQHhoeXBlcnJlZntoZHI6RnJhbWVNZXRhRGF0YSxGcmFtZSBtZXRhZGF0YX0gc3RhcnQKICogYXQgdGhlIGJ1ZmZlciBhZGRyZXNzLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzE6CiAqIC0gMSAtLSBUaW1lc3RhbXAgaXMgdmFsaWQuCiAqIC0gMCAtLSBUaW1lc3RhbXAgaXMgaW52YWxpZC4KICogLSBVc2UgI0FTTV9CSVRfTUFTS0lNRVNUQU1QX1ZBTElEX0ZMQUcgYW5kCiAqICNBU01fU0hJRlRJTUVTVEFNUF9WQUxJRF9GTEFHIHRvIHNldCB0aGlzIGJpdC4KICoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDMwOgogKiAtIDEgLS0gRnJhbWUgbWV0YWRhdGEgaXMgcHJlc2VudC4KICogLSAwIC0tIEZyYW1lIG1ldGFkYXRhIGlzIGFic2VudC4KICogLSBVc2UgI0FTTV9CSVRfTUFTS19GUkFNRV9NRVRBREFUQV9GTEFHIGFuZAogKiAjQVNNX1NISUZUX0ZSQU1FX01FVEFEQVRBX0ZMQUcgdG8gc2V0IHRoaXMgYml0LgogKgogKiBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQ7IHRoZSBhRFNQIHNldHMgdGhlbSB0byAwLgogKi8KCnUzMiAgICAgICAgICAgICAgICAgIG51bV9mcmFtZXM7Ci8qIE51bWJlciBvZiBlbmNvZGVkIGZyYW1lcyBpbiB0aGUgYnVmZmVyLiAqLwoKdTMyICAgICAgICAgICAgICAgICAgc2VxX2lkOwovKiBPcHRpb25hbCBidWZmZXIgc2VxdWVuY2UgSUQuCSovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2RhdGFfcmVhZF9idWZfbWV0YWRhdGFfdjIgewoJdTMyICAgICAgICAgIG9mZnNldDsKLyogT2Zmc2V0IGZyb20gYnVmX2FkZHIgaW4gI0FTTV9EQVRBX0VWRU5UX1JFQURfRE9ORV9QQVlMT0FEIHRvCiAqIHRoZSBmcmFtZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBtZXRhZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogPiAwCiAqLwoKdTMyICAgICAgICAgIGZybV9zaXplOwovKiBTaXplIG9mIHRoZSBlbmNvZGVkIGZyYW1lIGluIGJ5dGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgp1MzIgICAgICAgICAgbnVtX2VuY29kZWRfcGNtX3NhbXBsZXM7Ci8qIE51bWJlciBvZiBlbmNvZGVkIFBDTSBzYW1wbGVzIChwZXIgY2hhbm5lbCkgaW4gdGhlIGZyYW1lCiAqIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1ldGFkYXRhLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgp1MzIgICAgICAgICAgdGltZXN0YW1wX2xzdzsKLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlCiAqIGZpcnN0IHNhbXBsZSBmb3IgdGhpcyBmcmFtZS4KICogSWYgQml0IDUgb2YgbW9kZV9mbGFncyBmbGFnIG9mIEFTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9WMiBpcyAxCiAqIHRoZW4gdGhlIDY0IGJpdCB0aW1lc3RhbXAgaXMgYWJzb2x1dGUgY2FwdHVyZSB0aW1lIG90aGVyd2lzZSBpdAogKiBpcyByZWxhdGl2ZSBzZXNzaW9uIHRpbWUuIFRoZSBhYnNvbHV0ZSB0aW1lc3RhbXAgZG9lc24ndCByZXNldAogKiB1bmxlc3MgdGhlIHN5c3RlbSBpcyByZXNldC4KICovCgoKdTMyICAgICAgICAgIHRpbWVzdGFtcF9tc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzIG9mIHRoZQogKiBmaXJzdCBzYW1wbGUgZm9yIHRoaXMgZnJhbWUuCiAqLwoKdTMyICAgICAgICAgIGZsYWdzOwovKiBGcmFtZSBmbGFncy4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDMxOgogKiAtIDEgLS0gVGltZSBzdGFtcCBpcyB2YWxpZAogKiAtIDAgLS0gVGltZSBzdGFtcCBpcyBub3QgdmFsaWQKICogLSBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQ7IHRoZSBhRFNQIHNldHMgdGhlbSB0byAwLgogKi8KfSBfX3BhY2tlZDsKCi8qIE5vdGlmaWVzIHRoZSBjbGllbnQgb2YgYSBjaGFuZ2UgaW4gdGhlIGRhdGEgc2FtcGxpbmcgcmF0ZSBvcgogKiBDaGFubmVsIG1vZGUuIFRoaXMgZXZlbnQgaXMgcmFpc2VkIGJ5IHRoZSBkZWNvZGVyIHNlcnZpY2UuIFRoZQogKiBldmVudCBpcyBlbmFibGVkIHRocm91Z2ggdGhlIG1vZGUgZmxhZ3Mgb2YKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fV1JJVEVfVjIgb3IKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fUkVBRFdSSVRFX1YyLiAtIFRoZSBkZWNvZGVyIGRldGVjdHMgYSBjaGFuZ2UKICogaW4gdGhlIG91dHB1dCBzYW1wbGluZyBmcmVxdWVuY3kgb3IgdGhlIG51bWJlci9wb3NpdGlvbmluZyBvZgogKiBvdXRwdXQgY2hhbm5lbHMsIG9yIGlmIGl0IGlzIHRoZSBmaXJzdCBmcmFtZSBkZWNvZGVkLlRoZSBuZXcKICogc2FtcGxpbmcgZnJlcXVlbmN5IG9yIHRoZSBuZXcgY2hhbm5lbCBjb25maWd1cmF0aW9uIGlzCiAqIGNvbW11bmljYXRlZCBiYWNrIHRvIHRoZSBjbGllbnQgYXN5bmNocm9ub3VzbHkuCiAqLwoKI2RlZmluZSBBU01fREFUQV9FVkVOVF9TUl9DTV9DSEFOR0VfTk9USUZZIDB4MDAwMTBDNjUKCi8qICBQYXlsb2FkIG9mIHRoZSAjQVNNX0RBVEFfRVZFTlRfU1JfQ01fQ0hBTkdFX05PVElGWSBldmVudC4KICogVGhpcyBldmVudCBpcyByYWlzZWQgd2hlbiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGJvdGggdHJ1ZToKICogLSBUaGUgZXZlbnQgaXMgZW5hYmxlZCB0aHJvdWdoIHRoZSBtb2RlX2ZsYWdzIG9mCiAqICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX1YyIG9yCiAqICNBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURXUklURV9WMi4gLSBUaGUgZGVjb2RlciBkZXRlY3RzIGEgY2hhbmdlCiAqIGluIGVpdGhlciB0aGUgb3V0cHV0IHNhbXBsaW5nIGZyZXF1ZW5jeSBvciB0aGUgbnVtYmVyL3Bvc2l0aW9uaW5nCiAqIG9mIG91dHB1dCBjaGFubmVscywgb3IgaWYgaXQgaXMgdGhlIGZpcnN0IGZyYW1lIGRlY29kZWQuCiAqIFRoaXMgZXZlbnQgaXMgbm90IHJhaXNlZCAoZXZlbiBpZiBlbmFibGVkKSBpZiB0aGUgZGVjb2RlciBpcwogKiBNSURJLCBiZWNhdXNlCiAqLwoKCnN0cnVjdCBhc21fZGF0YV9ldmVudF9zcl9jbV9jaGFuZ2Vfbm90aWZ5IHsKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBOZXcgc2FtcGxpbmcgcmF0ZSAoaW4gSGVydHopIGFmdGVyIGRldGVjdGluZyBhIGNoYW5nZSBpbiB0aGUKICogYml0c3RyZWFtLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAyMDAwIHRvIDQ4MDAwCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTmV3IG51bWJlciBvZiBjaGFubmVscyBhZnRlciBkZXRlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlCiAqIGJpdHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIDAuKi8KCgl1OCAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbOF07Cgp9IF9fcGFja2VkOwoKLyogTm90aWZpZXMgdGhlIGNsaWVudCBvZiBhIGRhdGEgc2FtcGxpbmcgcmF0ZSBvciBjaGFubmVsIG1vZGUKICogY2hhbmdlLiBUaGlzIGV2ZW50IGlzIHJhaXNlZCBieSB0aGUgZW5jb2RlciBzZXJ2aWNlLgogKiBUaGlzIGV2ZW50IGlzIHJhaXNlZCB3aGVuIDoKICogLSBOYXRpdmUgbW9kZSBlbmNvZGluZyB3YXMgcmVxdWVzdGVkIGluIHRoZSBlbmNvZGVyCiAqIGNvbmZpZ3VyYXRpb24gKGkuZS4sIHRoZSBjaGFubmVsIG51bWJlciB3YXMgMCksIHRoZSBzYW1wbGUgcmF0ZQogKiB3YXMgMCwgb3IgYm90aCB3ZXJlIDAuCiAqCiAqIC0gVGhlIGlucHV0IGRhdGEgZnJhbWUgYXQgdGhlIGVuY29kZXIgaXMgdGhlIGZpcnN0IG9uZSwgb3IgdGhlCiAqIHNhbXBsaW5nIHJhdGUvY2hhbm5lbCBtb2RlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBwcmV2aW91cyBpbnB1dAogKiBkYXRhIGZyYW1lLgogKgogKi8KI2RlZmluZSBBU01fREFUQV9FVkVOVF9FTkNfU1JfQ01fQ0hBTkdFX05PVElGWSAweDAwMDEwQkRFCgpzdHJ1Y3QgYXNtX2RhdGFfZXZlbnRfZW5jX3NyX2NtX2NoYW5nZV9ub3RpZnkgewoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIE5ldyBzYW1wbGluZyByYXRlIChpbiBIZXJ0eikgYWZ0ZXIgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZQogKiBpbnB1dCBkYXRhLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAyMDAwIHRvIDQ4MDAwCiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE5ldyBudW1iZXIgb2YgY2hhbm5lbHMgYWZ0ZXIgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZSBpbnB1dAogKiBkYXRhLiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDgKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyogTmV3IGJpdHMgcGVyIHNhbXBsZSBhZnRlciBkZXRlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlIGlucHV0CiAqIGRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCgoJdTggICAgICAgICAgICAgICAgICAgY2hhbm5lbF9tYXBwaW5nWzhdOwoKfSBfX3BhY2tlZDsKI2RlZmluZSBBU01fREFUQV9DTURfSUVDXzYwOTU4X0ZSQU1FX1JBVEUgMHgwMDAxMEQ4NwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fREFUQV9DTURfSUVDXzYwOTU4X0ZSQU1FX1JBVEUgY29tbWFuZCwKICogd2hpY2ggaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgSUVDIDYwOTU4IGZyYW1lIHJhdGUgb2YgYSBnaXZlbgogKiBwYWNrZXRpemVkIGF1ZGlvIHN0cmVhbS4KICovCgpzdHJ1Y3QgYXNtX2RhdGFfY21kX2llY182MDk1OF9mcmFtZV9yYXRlIHsKCXUzMiAgICAgICAgICAgICAgICAgIGZyYW1lX3JhdGU7Ci8qIElFQyA2MDk1OCBmcmFtZSByYXRlIG9mIHRoZSBpbmNvbWluZyBJRUMgNjE5MzcgcGFja2V0aXplZCBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEFueSB2YWxpZCBmcmFtZSByYXRlCiAqLwp9IF9fcGFja2VkOwoKLyogYWRzcF9hc21fZGF0YV9jb21tYW5kcy5oKi8KLyogRGVmaW5pdGlvbiBvZiB0aGUgc3RyZWFtIElEIGJpdG1hc2suKi8KI2RlZmluZSBBU01fQklUX01BU0tfU1RSRUFNX0lEICAgICAgICAgICAgICAgICAoMHgwMDAwMDBGRlVMKQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgc3RyZWFtIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQVNNX1NISUZUX1NUUkVBTV9JRCAgICAgICAgICAgICAgICAgICAgMAoKLyogRGVmaW5pdGlvbiBvZiB0aGUgc2Vzc2lvbiBJRCBiaXRtYXNrLiovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX1NFU1NJT05fSUQgICAgICAgICAgICAgICAgKDB4MDAwMEZGMDBVTCkKCi8qIERlZmluaXRpb24gb2YgdGhlIHNlc3Npb24gSUQgc2hpZnQgdmFsdWUuKi8KI2RlZmluZSBBU01fU0hJRlRfU0VTU0lPTl9JRCAgICAgICAgICAgICAgICAgICA4CgovKiBEZWZpbml0aW9uIG9mIHRoZSBzZXJ2aWNlIElEIGJpdG1hc2suKi8KI2RlZmluZSBBU01fQklUX01BU0tfU0VSVklDRV9JRCAgICAgICAgICAgICAgICAoMHgwMEZGMDAwMFVMKQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgc2VydmljZSBJRCBzaGlmdCB2YWx1ZS4qLwojZGVmaW5lIEFTTV9TSElGVF9TRVJWSUNFX0lEICAgICAgICAgICAgICAgICAgIDE2CgovKiBEZWZpbml0aW9uIG9mIHRoZSBkb21haW4gSUQgYml0bWFzay4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19ET01BSU5fSUQgICAgICAgICAgICAgICAgKDB4RkYwMDAwMDBVTCkKCi8qIERlZmluaXRpb24gb2YgdGhlIGRvbWFpbiBJRCBzaGlmdCB2YWx1ZS4qLwojZGVmaW5lIEFTTV9TSElGVF9ET01BSU5fSUQgICAgICAgICAgICAgICAgICAgIDI0CgojZGVmaW5lIEFTTV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAgICAgICAgICAgICAgIDB4MDAwMTBEOTIKI2RlZmluZSBBU01fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgICAgIDB4MDAwMTBEOTMKI2RlZmluZSBBU01fQ01EX1NIQVJFRF9NRU1fVU5NQVBfUkVHSU9OUyAgICAgICAgICAgICAgMHgwMDAxMEQ5NAoKLyogYWRzcF9hc21fc2VydmljZV9jb21tYW5kcy5oICovCgojZGVmaW5lIEFTTV9NQVhfU0VTU0lPTl9JRCAgKDE1KQoKLyogTWF4aW11bSBudW1iZXIgb2Ygc2Vzc2lvbnMuKi8KI2RlZmluZSBBU01fTUFYX05VTV9TRVNTSU9OUyAgICAgICAgICAgICAgICBBU01fTUFYX1NFU1NJT05fSUQKCi8qIE1heGltdW0gbnVtYmVyIG9mIHN0cmVhbXMgcGVyIHNlc3Npb24uKi8KI2RlZmluZSBBU01fTUFYX1NUUkVBTVNfUEVSX1NFU1NJT04gKDgpCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1JVTl9WMiAgICAgICAgICAgICAgICAgICAweDAwMDEwREFBCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fSU1NRURJQVRFICAwCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fQVRfQUJTT0xVVEVJTUUgMQojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRJTUVfUlVOX0FUX1JFTEFUSVZFSU1FIDIKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9XSVRIX0RFTEFZICAgICAzCgojZGVmaW5lIEFTTV9CSVRfTUFTS19SVU5fU1RBUlRJTUUgICAgICAgICAgICAgICAgICgweDAwMDAwMDAzVUwpCgovKiBCaXQgc2hpZnQgdmFsdWUgdXNlZCB0byBzcGVjaWZ5IHRoZSBzdGFydCB0aW1lIGZvciB0aGUKICogQVNNX1NFU1NJT05fQ01EX1JVTl9WMiBjb21tYW5kLgogKi8KI2RlZmluZSBBU01fU0hJRlRfUlVOX1NUQVJUSU1FIDAKc3RydWN0IGFzbV9zZXNzaW9uX2NtZF9ydW5fdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJ1biBpbW1lZGlhdGVseSBvciBhdCBhIHNwZWNpZmljCiAqIHJlbmRlcmluZyB0aW1lIG9yIHdpdGggYSBzcGVjaWZpZWQgZGVsYXkuIFJ1biB3aXRoIGRlbGF5IGlzCiAqIHVzZWZ1bCBmb3IgZGVsYXlpbmcgaW4gY2FzZSBvZiBBU00gbG9vcGJhY2sgb3BlbmVkIHRocm91Z2gKICogQVNNX1NUUkVBTV9DTURfT1BFTl9MT09QQkFDS19WMi4gVXNlICNBU01fQklUX01BU0tfUlVOX1NUQVJUSU1FCiAqIGFuZCAjQVNNX1NISUZUX1JVTl9TVEFSVElNRSB0byBzZXQgdGhpcyAyLWJpdCBmbGFnLgogKgogKgogKkJpdHMgMCBhbmQgMSBjYW4gdGFrZSBvbmUgb2YgZm91ciBwb3NzaWJsZSB2YWx1ZXM6CiAqCiAqLSAjQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fSU1NRURJQVRFCiAqLSAjQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fQVRfQUJTT0xVVEVJTUUKICotICNBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9BVF9SRUxBVElWRUlNRQogKi0gI0FTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRJTUVfUlVOX1dJVEhfREVMQVkKICoKICpBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byB6ZXJvLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICB0aW1lX2xzdzsKLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgdGltZSBpbiBtaWNyb3NlY29uZHMgdXNlZCB0byBhbGlnbiB0aGUKICogc2Vzc2lvbiBvcmlnaW4gdGltZS4gV2hlbiBiaXRzIDAtMSBvZiBmbGFncyBpcwogKiBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUX1JVTl9XSVRIX0RFTEFZLCB0aW1lIGxzdyBpcyB0aGUgbHN3IG9mCiAqIHRoZSBkZWxheSBpbiB1cy4gRm9yIEFTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRfUlVOX1dJVEhfREVMQVksCiAqIG1heGltdW0gdmFsdWUgb2YgdGhlIDY0IGJpdCBkZWxheSBpcyAxNTAgbXMuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHRpbWVfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSB0aW1lIGluIG1pY3Jvc2Vjb25kcyB1c2VkIHRvIGFsaWduIHRoZQogKiBzZXNzaW9uIG9yaWdpbiB0aW1lLiBXaGVuIGJpdHMgMC0xIG9mIGZsYWdzIGlzCiAqIEFTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRfUlVOX1dJVEhfREVMQVksIHRpbWUgbXN3IGlzIHRoZSBtc3cgb2YKICogdGhlIGRlbGF5IGluIHVzLiBGb3IgQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVF9SVU5fV0lUSF9ERUxBWSwKICogbWF4aW11bSB2YWx1ZSBvZiB0aGUgNjQgYml0IGRlbGF5IGlzIDE1MCBtcy4KICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUEFVU0UgMHgwMDAxMEJEMwojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9TVVNQRU5EIDB4MDAwMTBERUMKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfR0VUX1NFU1NJT05USU1FX1YzIDB4MDAwMTBEOUQKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUkVHSVNURVJfRk9SX1JYX1VOREVSRkxPV19FVkVOVFMgMHgwMDAxMEJENQoKc3RydWN0IGFzbV9zZXNzaW9uX2NtZF9yZ3N0cl9yeF91bmRlcmZsb3cgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTE2ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIGEgY2xpZW50IGlzIHRvIHJlY2VpdmUgZXZlbnRzIHdoZW4gYW4gUngKICogc2Vzc2lvbiB1bmRlcmZsb3dzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRG8gbm90IHNlbmQgdW5kZXJmbG93IGV2ZW50cwogKiAtIDEgLS0gU2VuZCB1bmRlcmZsb3cgZXZlbnRzCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZC4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9SRUdJU1RFUl9GT1JYX09WRVJGTE9XX0VWRU5UUyAweDAwMDEwQkQ2CgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX3JlZ3hfb3ZlcmZsb3cgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTE2ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIGEgY2xpZW50IGlzIHRvIHJlY2VpdmUgZXZlbnRzIHdoZW4gYSBUeAogKiBzZXNzaW9uIG92ZXJmbG93cy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIERvIG5vdCBzZW5kIG92ZXJmbG93IGV2ZW50cwogKiAtIDEgLS0gU2VuZCBvdmVyZmxvdyBldmVudHMKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZC4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0VWRU5UX1JYX1VOREVSRkxPVyAgICAgICAgMHgwMDAxMEMxNwojZGVmaW5lIEFTTV9TRVNTSU9OX0VWRU5UWF9PVkVSRkxPVyAgICAgICAgICAgMHgwMDAxMEMxOAojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRFJTUF9HRVRfU0VTU0lPTlRJTUVfVjMgMHgwMDAxMEQ5RQoKc3RydWN0IGFzbV9zZXNzaW9uX2NtZHJzcF9nZXRfc2Vzc2lvbnRpbWVfdjMgewoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwoJLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpLgoJICogU3VwcG9ydGVkIHZhbHVlczogUmVmZXIgdG8gQHhoeXBlcnJlZntRMyxbUTNdfQoJICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2Vzc2lvbnRpbWVfbHN3OwoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgY3VycmVudCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzLiovCgoJdTMyICAgICAgICAgICAgICAgICAgc2Vzc2lvbnRpbWVfbXN3OwoJLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgY3VycmVudCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzLiovCgoJdTMyICAgICAgICAgICAgICAgICAgYWJzb2x1dGV0aW1lX2xzdzsKLyogTG93ZXIgMzIgYml0cyBpbiBtaWNybyBzZWNvbmRzIG9mIHRoZSBhYnNvbHV0ZSB0aW1lIGF0IHdoaWNoCiAqIHRoZSAqIHNhbXBsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhYm92ZSBzZXNzaW9uIHRpbWUgZ2V0cwogKiByZW5kZXJlZCAqIHRvIGhhcmR3YXJlLiBUaGlzIGFic29sdXRlIHRpbWUgbWF5IGJlIHNsaWdodGx5IGluIHRoZQogKiBmdXR1cmUgb3IgcGFzdC4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGFic29sdXRldGltZV9tc3c7Ci8qIFVwcGVyIDMyIGJpdHMgaW4gbWljcm8gc2Vjb25kcyBvZiB0aGUgYWJzb2x1dGUgdGltZSBhdCB3aGljaAogKiB0aGUgKiBzYW1wbGUgY29ycmVzcG9uZGluZyB0byB0aGUgYWJvdmUgc2Vzc2lvbiB0aW1lIGdldHMKICogcmVuZGVyZWQgdG8gKiBoYXJkd2FyZS4gVGhpcyBhYnNvbHV0ZSB0aW1lIG1heSBiZSBzbGlnaHRseSBpbiB0aGUKICogZnV0dXJlIG9yIHBhc3QuCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX0FESlVTVF9TRVNTSU9OX0NMT0NLX1YyICAgICAweDAwMDEwRDlGCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX2FkanVzdF9zZXNzaW9uX2Nsb2NrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKdTMyICAgICAgICAgICAgICAgICAgYWRqdXN0aW1lX2xzdzsKLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgc2lnbmVkIDY0LWJpdCBxdWFudGl0eSB0aGF0IHNwZWNpZmllcyB0aGUKICogYWRqdXN0bWVudCB0aW1lIGluIG1pY3Jvc2Vjb25kcyB0byB0aGUgc2Vzc2lvbiBjbG9jay4KICoKICogUG9zaXRpdmUgdmFsdWVzIGluZGljYXRlIGFkdmFuY2VtZW50IG9mIHRoZSBzZXNzaW9uIGNsb2NrLgogKiBOZWdhdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgZGVsYXkgb2YgdGhlIHNlc3Npb24gY2xvY2suCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBhZGp1c3RpbWVfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBzaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzCiAqIHRoZSBhZGp1c3RtZW50IHRpbWUgaW4gbWljcm9zZWNvbmRzIHRvIHRoZSBzZXNzaW9uIGNsb2NrLgogKiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgYWR2YW5jZW1lbnQgb2YgdGhlIHNlc3Npb24gY2xvY2suCiAqIE5lZ2F0aXZlIHZhbHVlcyBpbmRpY2F0ZSBkZWxheSBvZiB0aGUgc2Vzc2lvbiBjbG9jay4KICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU0VTU0lPTl9DTURSU1BfQURKVVNUX1NFU1NJT05fQ0xPQ0tfVjIgICAgMHgwMDAxMERBMAoKc3RydWN0IGFzbV9zZXNzaW9uX2NtZHJzcF9hZGp1c3Rfc2Vzc2lvbl9jbG9ja192MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7Ci8qIFN0YXR1cyBtZXNzYWdlIChlcnJvciBjb2RlKS4KICogU3VwcG9ydGVkIHZhbHVlczogUmVmZXIgdG8gQHhoeXBlcnJlZntRMyxbUTNdfQogKiBBbiBlcnJvciBtZWFucyB0aGUgc2Vzc2lvbiBjbG9jayBpcyBub3QgYWRqdXN0ZWQuIEluIHRoaXMgY2FzZSwKICogdGhlIG5leHQgdHdvIGZpZWxkcyBhcmUgaXJyZWxldmFudC4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGFjdHVhbF9hZGp1c3RpbWVfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBzaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzCiAqIHRoZSBhY3R1YWwgYWRqdXN0bWVudCBpbiBtaWNyb3NlY29uZHMgcGVyZm9ybWVkIGJ5IHRoZSBhRFNQLgogKiBBIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBhZHZhbmNlbWVudCBvZiB0aGUgc2Vzc2lvbiBjbG9jay4gQQogKiBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgZGVsYXkgb2YgdGhlIHNlc3Npb24gY2xvY2suCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBhY3R1YWxfYWRqdXN0aW1lX21zdzsKLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgc2lnbmVkIDY0LWJpdCBxdWFudGl0eSB0aGF0IHNwZWNpZmllcwogKiB0aGUgYWN0dWFsIGFkanVzdG1lbnQgaW4gbWljcm9zZWNvbmRzIHBlcmZvcm1lZCBieSB0aGUgYURTUC4KICogQSBwb3NpdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgYWR2YW5jZW1lbnQgb2YgdGhlIHNlc3Npb24gY2xvY2suIEEKICogbmVnYXRpdmUgdmFsdWUgaW5kaWNhdGVzIGRlbGF5IG9mIHRoZSBzZXNzaW9uIGNsb2NrLgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgY21kX2xhdGVuY3lfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSB1bnNpZ25lZCA2NC1iaXQgcXVhbnRpdHkgdGhhdCBzcGVjaWZpZXMKICogdGhlIGFtb3VudCBvZiB0aW1lIGluIG1pY3Jvc2Vjb25kcyB0YWtlbiB0byBwZXJmb3JtIHRoZSBzZXNzaW9uCiAqIGNsb2NrIGFkanVzdG1lbnQuCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBjbWRfbGF0ZW5jeV9tc3c7Ci8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIHVuc2lnbmVkIDY0LWJpdCBxdWFudGl0eSB0aGF0IHNwZWNpZmllcwogKiB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWljcm9zZWNvbmRzIHRha2VuIHRvIHBlcmZvcm0gdGhlIHNlc3Npb24KICogY2xvY2sgYWRqdXN0bWVudC4KICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfR0VUX1BBVEhfREVMQVlfVjIJIDB4MDAwMTBEQUYKI2RlZmluZSBBU01fU0VTU0lPTl9DTURSU1BfR0VUX1BBVEhfREVMQVlfVjIgMHgwMDAxMERCMAoKc3RydWN0IGFzbV9zZXNzaW9uX2NtZHJzcF9nZXRfcGF0aF9kZWxheV92MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7Ci8qIFN0YXR1cyBtZXNzYWdlIChlcnJvciBjb2RlKS4gV2hldGhlciB0aGlzIGdldCBkZWxheSBvcGVyYXRpb24KICogaXMgc3VjY2Vzc2Z1bCBvciBub3QuIERlbGF5IHZhbHVlIGlzIHZhbGlkIG9ubHkgaWYgc3RhdHVzIGlzCiAqIHN1Y2Nlc3MuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFJlZmVyIHRvIEB4aHlwZXJyZWZ7UTUsW1E1XX0KICovCgoJdTMyICAgICAgICAgICAgICAgICAgYXVkaW9fZGVsYXlfbHN3OwoJLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgYURTUCBkZWxheSBpbiBtaWNyb3NlY29uZHMuICovCgoJdTMyICAgICAgICAgICAgICAgICAgYXVkaW9fZGVsYXlfbXN3OwoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgYURTUCBkZWxheSAgaW4gbWljcm9zZWNvbmRzLiAqLwoKfSBfX3BhY2tlZDsKCi8qIGFkc3BfYXNtX3Nlc3Npb25fY29tbWFuZC5oKi8KI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX1YzICAgICAgIDB4MDAwMTBEQjMKCiNkZWZpbmUgQVNNX0xPV19MQVRFTkNZX1NUUkVBTV9TRVNTSU9OCQkJCTB4MTAwMDAwMDAKCiNkZWZpbmUgQVNNX1VMVFJBX0xPV19MQVRFTkNZX1NUUkVBTV9TRVNTSU9OCQkJMHgyMDAwMDAwMAoKI2RlZmluZSBBU01fVUxMX1BPU1RfUFJPQ0VTU0lOR19TVFJFQU1fU0VTU0lPTgkJCTB4NDAwMDAwMDAKCiNkZWZpbmUgQVNNX0xFR0FDWV9TVFJFQU1fU0VTU0lPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAoKCnN0cnVjdCBhc21fc3RyZWFtX2NtZF9vcGVuX3dyaXRlX3YzIHsKCXN0cnVjdCBhcHJfaGRyCQkJaGRyOwoJdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MgdGhhdCBjb25maWd1cmUgdGhlIHN0cmVhbSB0byBub3RpZnkgdGhlIGNsaWVudAogKiB3aGVuZXZlciBpdCBkZXRlY3RzIGFuIFNSL0NNIGNoYW5nZSBhdCB0aGUgaW5wdXQgdG8gaXRzIFBPUFAuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdHMgMCB0byAxOgogKiAtIFJlc2VydmVkOyBjbGllbnRzIG11c3Qgc2V0IHRoZW0gdG8gemVyby4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDI6CiAqIC0gMCAtLSBTUi9DTSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGV2ZW50IGlzIGRpc2FibGVkLgogKiAtIDEgLS0gU1IvQ00gY2hhbmdlIG5vdGlmaWNhdGlvbiBldmVudCBpcyBlbmFibGVkLgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLX1NSX0NNX0NIQU5HRV9OT1RJRllfRkxBRyBhbmQKICogI0FTTV9TSElGVF9TUl9DTV9DSEFOR0VfTk9USUZZX0ZMQUcgdG8gc2V0IG9yIGdldCB0aGlzIGJpdC4KICoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDMxOgogKiAtIDAgLS0gU3RyZWFtIHRvIGJlIG9wZW5lZCBpbiBvbi1HYXBsZXNzIG1vZGUuCiAqIC0gMSAtLSBTdHJlYW0gdG8gYmUgb3BlbmVkIGluIEdhcGxlc3MgbW9kZS4gSW4gR2FwbGVzcyBtb2RlLAogKiBzdWNjZXNzaXZlIHN0cmVhbXMgbXVzdCBiZSBvcGVuZWQgd2l0aCBzYW1lIHNlc3Npb24gSUQgYnV0CiAqIGRpZmZlcmVudCBzdHJlYW0gSURzLgogKgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLX0dBUExFU1NfTU9ERV9GTEFHIGFuZAogKiAjQVNNX1NISUZUX0dBUExFU1NfTU9ERV9GTEFHIHRvIHNldCBvciBnZXQgdGhpcyBiaXQuCiAqCiAqCiAqIEBub3RlMWhhbmcgTUlESSBhbmQgRFRNRiBzdHJlYW1zIGNhbm5vdCBiZSBvcGVuZWQgaW4gR2FwbGVzcyBtb2RlLgogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgICAgc2lua19lbmRwb2ludHlwZTsKLyo8IFNpbmsgcG9pbnQgdHlwZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIERldmljZSBtYXRyaXgKICogLSBPdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkLgogKgogKiBUaGUgZGV2aWNlIG1hdHJpeCBpcyB0aGUgZ2F0ZXdheSB0byB0aGUgaGFyZHdhcmUgcG9ydHMuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qPCBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHByb2Nlc3NlZCBieSBBU00gbW9kdWxlcy4KICogU3VwcG9ydGVkIHZhbHVlczogMTYgYW5kIDI0IGJpdHMgcGVyIHNhbXBsZQogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgcG9zdHByb2NvcG9faWQ7Ci8qPCBTcGVjaWZpZXMgdGhlIHRvcG9sb2d5IChvcmRlciBvZiBwcm9jZXNzaW5nKSBvZgogKiBwb3N0cHJvY2Vzc2luZyBhbGdvcml0aG1zLiA8aT5Ob25lPC9pPiBtZWFucyBubyBwb3N0cHJvY2Vzc2luZy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9ERUZBVUxUCiAqIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfTUNIX1BFQUtfVk9MCiAqIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfTk9ORQogKgogKiBUaGlzIGZpZWxkIGNhbiBhbHNvIGJlIGVuYWJsZWQgdGhyb3VnaCBTZXRQYXJhbXMgZmxhZ3MuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBkZWNfZm10X2lkOwovKjwgQ29uZmlndXJhdGlvbiBJRCBvZiB0aGUgZGVjb2RlciBtZWRpYSBmb3JtYXQuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjIKICogLSAjQVNNX01FRElBX0ZNVF9BRFBDTQogKiAtICNBU01fTUVESUFfRk1UX01QMwogKiAtICNBU01fTUVESUFfRk1UX0FBQ19WMgogKiAtICNBU01fTUVESUFfRk1UX0RPTEJZX0FBQwogKiAtICNBU01fTUVESUFfRk1UX0FNUk5CX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1SV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJfV0JfUExVU19WMgogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9TQkMKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjEwUFJPX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfV01BX1Y5X1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQUMzCiAqIC0gI0FTTV9NRURJQV9GTVRfRUFDMwogKiAtICNBU01fTUVESUFfRk1UX0c3MTFfQUxBV19GUwogKiAtICNBU01fTUVESUFfRk1UX0c3MTFfTUxBV19GUwogKiAtICNBU01fTUVESUFfRk1UX0c3MjlBX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRlJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9WT1JCSVMKICogLSAjQVNNX01FRElBX0ZNVF9GTEFDCiAqIC0gI0FTTV9NRURJQV9GTVRfQUxBQwogKiAtICNBU01fTUVESUFfRk1UX0FQRQogKiAtICNBU01fTUVESUFfRk1UX0VYQU1QTEUKICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fUFVMTF9NT0RFX1dSSVRFICAgIDB4MDAwMTBERDkKCi8qIEJpdG1hc2sgZm9yIHRoZSBzdHJlYW1fcGVyZl9tb2RlIHN1YmZpZWxkLiAqLwojZGVmaW5lIEFTTV9CSVRfTUFTS19TVFJFQU1fUEVSRl9GTEFHX1BVTExfTU9ERV9XUklURSAweEUwMDAwMDAwVUwKCi8qIEJpdG1hc2sgZm9yIHRoZSBzdHJlYW1fcGVyZl9tb2RlIHN1YmZpZWxkLiAqLwojZGVmaW5lIEFTTV9TSElGVF9TVFJFQU1fUEVSRl9GTEFHX1BVTExfTU9ERV9XUklURSAyOQoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1BVU0hfTU9ERV9SRUFEICAweDAwMDEwRERBCgojZGVmaW5lIEFTTV9CSVRfTUFTS19TVFJFQU1fUEVSRl9GTEFHX1BVU0hfTU9ERV9SRUFEIDB4RTAwMDAwMDBVTAoKI2RlZmluZSBBU01fU0hJRlRfU1RSRUFNX1BFUkZfRkxBR19QVVNIX01PREVfUkVBRCAyOQoKI2RlZmluZSBBU01fREFUQV9FVkVOVF9XQVRFUk1BUksgMHgwMDAxMEREQgoKc3RydWN0IGFzbV9zaGFyZWRfcG9zaXRpb25fYnVmZmVyIHsKCXZvbGF0aWxlIHVpbnQzMl90ICAgICAgICAgICAgICAgZnJhbWVfY291bnRlcjsKLyogQ291bnRlciB1c2VkIHRvIGhhbmRsZSBpbnRlcnByb2Nlc3NvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzLgogKiBXaGVuIGZyYW1lX2NvdW50ZXIgaXMgMDogcmVhZF9pbmRleCwgd2FsbF9jbG9ja191c19sc3csIGFuZAogKiB3YWxsX2Nsb2NrX3VzX21zdyBhcmUgaW52YWxpZC4KICogU3VwcG9ydGVkIHZhbHVlczogPj0gMC4KICovCgoJdm9sYXRpbGUgdWludDMyX3QgICAgICAgICAgICAgICBpbmRleDsKLyogSW5kZXggaW4gYnl0ZXMgZnJvbSB3aGVyZSB0aGUgYURTUCBpcyByZWFkaW5nL3dyaXRpbmcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gY2lyY3VsYXIgYnVmZmVyIHNpemUgLSAxCiAqLwoKCXZvbGF0aWxlIHVpbnQzMl90ICAgICAgICAgICAgICAgd2FsbF9jbG9ja191c19sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCB3YWxsIGNsb2NrIHRpbWUgaW4gbWljcm9zZWNvbmRzIHdoZW4gdGhlCiAqIHJlYWQgaW5kZXggd2FzIHVwZGF0ZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID49IDAKICovCgoJdm9sYXRpbGUgdWludDMyX3QgICAgICAgICAgICAgICB3YWxsX2Nsb2NrX3VzX21zdzsKLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQgYml0IHdhbGwgY2xvY2sgdGltZSBpbiBtaWNyb3NlY29uZHMgd2hlbiB0aGUKICogcmVhZCBpbmRleCB3YXMgdXBkYXRlZAogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+PSAwCiAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9zaGFyZWRfd2F0ZXJtYXJrX2xldmVsIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHdhdGVybWFya19sZXZlbF9ieXRlczsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fc3RyZWFtX2NtZF9vcGVuX3NoYXJlZF9pbyB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgICBoZHI7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICBtb2RlX2ZsYWdzOwoJdWludDE2X3QgICAgICAgICAgICAgICAgZW5kcG9pbnRfdHlwZTsKCXVpbnQxNl90ICAgICAgICAgICAgICAgIHRvcG9fYml0c19wZXJfc2FtcGxlOwoJdWludDMyX3QgICAgICAgICAgICAgICAgdG9wb19pZDsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIGZtdF9pZDsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9wb3NfYnVmX3BoeV9hZGRyX2xzdzsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9wb3NfYnVmX3BoeV9hZGRyX21zdzsKCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNoYXJlZF9wb3NfYnVmX21lbV9wb29sX2lkOwoJdWludDE2X3QgICAgICAgICAgICAgICAgc2hhcmVkX3Bvc19idWZfbnVtX3JlZ2lvbnM7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICBzaGFyZWRfcG9zX2J1Zl9wcm9wZXJ0eV9mbGFnOwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX3N0YXJ0X3BoeV9hZGRyX2xzdzsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9jaXJjX2J1Zl9zdGFydF9waHlfYWRkcl9tc3c7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICBzaGFyZWRfY2lyY19idWZfc2l6ZTsKCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNoYXJlZF9jaXJjX2J1Zl9tZW1fcG9vbF9pZDsKCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNoYXJlZF9jaXJjX2J1Zl9udW1fcmVnaW9uczsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9jaXJjX2J1Zl9wcm9wZXJ0eV9mbGFnOwoJdWludDMyX3QgICAgICAgICAgICAgICAgbnVtX3dhdGVybWFya19sZXZlbHM7CglzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjMgICAgICAgICBmbXQ7CglzdHJ1Y3QgYXZzX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWQgICAgICAgICAgICBtYXBfcmVnaW9uX3Bvc19idWY7CglzdHJ1Y3QgYXZzX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWQgICAgICAgICAgICBtYXBfcmVnaW9uX2NpcmNfYnVmOwoJc3RydWN0IGFzbV9zaGFyZWRfd2F0ZXJtYXJrX2xldmVsIHdhdGVybWFya1swXTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEX1YzICAgICAgICAgICAgICAgICAweDAwMDEwREI0CgovKiBEZWZpbml0aW9uIG9mIHRoZSB0aW1lc3RhbXAgdHlwZSBmbGFnIGJpdG1hc2sgKi8KI2RlZmluZSBBU01fQklUX01BU0tJTUVTVEFNUFlQRV9GTEFHICAgICAgICAoMHgwMDAwMDAyMFVMKQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgdGltZXN0YW1wIHR5cGUgZmxhZyBzaGlmdCB2YWx1ZS4gKi8KI2RlZmluZSBBU01fU0hJRlRJTUVTVEFNUFlQRV9GTEFHIDUKCi8qIFJlbGF0aXZlIHRpbWVzdGFtcCBpcyBpZGVudGlmaWVkIGJ5IHRoaXMgdmFsdWUuKi8KI2RlZmluZSBBU01fUkVMQVRJVkVJTUVTVEFNUCAgICAgIDAKCi8qIEFic29sdXRlIHRpbWVzdGFtcCBpcyBpZGVudGlmaWVkIGJ5IHRoaXMgdmFsdWUuKi8KI2RlZmluZSBBU01fQUJTT0xVVEVJTUVTVEFNUCAgICAgIDEKCi8qIEJpdCB2YWx1ZSBmb3IgTG93IExhdGVuY3kgVHggc3RyZWFtIHN1YmZpZWxkICovCiNkZWZpbmUgQVNNX0xPV19MQVRFTkNZX1RYX1NUUkVBTV9TRVNTSU9OCQkJMQoKLyogQml0IHNoaWZ0IGZvciB0aGUgc3RyZWFtX3BlcmZfbW9kZSBzdWJmaWVsZC4gKi8KI2RlZmluZSBBU01fU0hJRlRfU1RSRUFNX1BFUkZfTU9ERV9GTEFHX0lOX09QRU5fUkVBRCAgICAgICAgICAgICAgMjkKCnN0cnVjdCBhc21fc3RyZWFtX2NtZF9vcGVuX3JlYWRfdjMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgICBtb2RlX2ZsYWdzOwovKiBNb2RlIGZsYWdzIHRoYXQgaW5kaWNhdGUgd2hldGhlciBtZXRhIGluZm9ybWF0aW9uIHBlciBlbmNvZGVkCiAqIGZyYW1lIGlzIHRvIGJlIHByb3ZpZGVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgNDoKICoKICogLSAwIC0tIFJldHVybiBkYXRhIGJ1ZmZlciBjb250YWlucyBhbGwgZW5jb2RlZCBmcmFtZXMgb25seTsgaXQKICogZG9lcyBub3QgY29udGFpbiBmcmFtZSBtZXRhZGF0YS4KICoKICogLSAxIC0tIFJldHVybiBkYXRhIGJ1ZmZlciBjb250YWlucyBhbiBhcnJheSBvZiBtZXRhZGF0YSBhbmQKICogZW5jb2RlZCBmcmFtZXMuCiAqCiAqIC0gVXNlICNBU01fQklUX01BU0tfTUVUQV9JTkZPX0ZMQUcgYXMgdGhlIGJpdG1hc2sgYW5kCiAqICNBU01fU0hJRlRfTUVUQV9JTkZPX0ZMQUcgYXMgdGhlIHNoaWZ0IHZhbHVlIGZvciB0aGlzIGJpdC4KICoKICoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDU6CiAqCiAqIC0gQVNNX1JFTEFUSVZFSU1FU1RBTVAgLS0gQVNNX0RBVEFfRVZFTlRfUkVBRF9ET05FX1YyIHdpbGwgaGF2ZQogKiAtIHJlbGF0aXZlIHRpbWUtc3RhbXAuCiAqIC0gQVNNX0FCU09MVVRFSU1FU1RBTVAgLS0gQVNNX0RBVEFfRVZFTlRfUkVBRF9ET05FX1YyIHdpbGwKICogLSBoYXZlIGFic29sdXRlIHRpbWUtc3RhbXAuCiAqCiAqIC0gVXNlICNBU01fQklUX01BU0tJTUVTVEFNUFlQRV9GTEFHIGFzIHRoZSBiaXRtYXNrIGFuZAogKiAjQVNNX1NISUZUSU1FU1RBTVBZUEVfRkxBRyBhcyB0aGUgc2hpZnQgdmFsdWUgZm9yIHRoaXMgYml0LgogKgogKiBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byB6ZXJvLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIHNyY19lbmRwb2ludHlwZTsKLyogU3BlY2lmaWVzIHRoZSBlbmRwb2ludCBwcm92aWRpbmcgdGhlIGlucHV0IHNhbXBsZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBEZXZpY2UgbWF0cml4CiAqIC0gQWxsIG90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byB6ZXJvLgogKiBPdGhlcndpc2UsIGFuIGVycm9yIGlzIHJldHVybmVkLgogKiBUaGUgZGV2aWNlIG1hdHJpeCBpcyB0aGUgZ2F0ZXdheSBmcm9tIHRoZSB0dW5uZWxlZCBUeCBwb3J0cy4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgICBwcmVwcm9jb3BvX2lkOwovKiBTcGVjaWZpZXMgdGhlIHRvcG9sb2d5IChvcmRlciBvZiBwcm9jZXNzaW5nKSBvZiBwcmVwcm9jZXNzaW5nCiAqIGFsZ29yaXRobXMuIDxpPk5vbmU8L2k+IG1lYW5zIG5vIHByZXByb2Nlc3NpbmcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9TVFJFQU1fUFJFUFJPQ09QT19JRF9ERUZBVUxUCiAqIC0gI0FTTV9TVFJFQU1fUFJFUFJPQ09QT19JRF9OT05FCiAqCiAqIFRoaXMgZmllbGQgY2FuIGFsc28gYmUgZW5hYmxlZCB0aHJvdWdoIFNldFBhcmFtcyBmbGFncy4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgICBlbmNfY2ZnX2lkOwovKiBNZWRpYSBjb25maWd1cmF0aW9uIElEIGZvciBlbmNvZGVkIG91dHB1dC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19WMgogKiAtICNBU01fTUVESUFfRk1UX0FNUk5CX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1SV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9WMTNLX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ19GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNCX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ1dCX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfU0JDCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9BTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9NTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcyOUFfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FWEFNUExFCiAqIC0gI0FTTV9NRURJQV9GTVRfV01BX1Y4CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHByb2Nlc3NlZCBieSBBU00gbW9kdWxlcy4KICogU3VwcG9ydGVkIHZhbHVlczogMTYgYW5kIDI0IGJpdHMgcGVyIHNhbXBsZQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9QT1BQX09VVFBVVF9TUl9OQVRJVkVfUkFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIG1heGltdW0gc2FtcGxpbmcgcmF0ZSBhdCB0aGUgUE9QUCBvdXRwdXQuKi8KI2RlZmluZSBBU01fUE9QUF9PVVRQVVRfU1JfTUFYX1JBVEUgICAgICAgICAgICAgNDgwMDAKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEV1JJVEVfVjIgICAgICAgIDB4MDAwMTBEOEQKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURXUklURV9WMiAgICAgICAgMHgwMDAxMEQ4RAoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fcmVhZHdyaXRlX3YyIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgICAgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgICBtb2RlX2ZsYWdzOwovKiBNb2RlIGZsYWdzLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMjoKICogLSAwIC0tIFNSL0NNIGNoYW5nZSBub3RpZmljYXRpb24gZXZlbnQgaXMgZGlzYWJsZWQuCiAqIC0gMSAtLSBTUi9DTSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGV2ZW50IGlzIGVuYWJsZWQuIFVzZQogKiAjQVNNX0JJVF9NQVNLX1NSX0NNX0NIQU5HRV9OT1RJRllfRkxBRyBhbmQKICogI0FTTV9TSElGVF9TUl9DTV9DSEFOR0VfTk9USUZZX0ZMQUcgdG8gc2V0IG9yCiAqIGdldHRpbmcgdGhpcyBmbGFnLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgNDoKICogLSAwIC0tIFJldHVybiByZWFkIGRhdGEgYnVmZmVyIGNvbnRhaW5zIGFsbCBlbmNvZGVkIGZyYW1lcyBvbmx5OyBpdAogKiBkb2VzIG5vdCBjb250YWluIGZyYW1lIG1ldGFkYXRhLgogKiAtIDEgLS0gUmV0dXJuIHJlYWQgZGF0YSBidWZmZXIgY29udGFpbnMgYW4gYXJyYXkgb2YgbWV0YWRhdGEgYW5kCiAqIGVuY29kZWQgZnJhbWVzLgogKgogKiBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byB6ZXJvLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIHBvc3Rwcm9jb3BvX2lkOwovKiBTcGVjaWZpZXMgdGhlIHRvcG9sb2d5IChvcmRlciBvZiBwcm9jZXNzaW5nKSBvZiBwb3N0cHJvY2Vzc2luZwogKiBhbGdvcml0aG1zLiA8aT5Ob25lPC9pPiBtZWFucyBubyBwb3N0cHJvY2Vzc2luZy4KICoKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9ERUZBVUxUCiAqIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfTUNIX1BFQUtfVk9MCiAqIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfTk9ORQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIGRlY19mbXRfaWQ7Ci8qIFNwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgaW5wdXQgZGF0YS4gUENNIGluZGljYXRlcyB0aGF0CiAqIG5vIGRlY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkLCBlLmcuLCB0aGlzIGlzIGFuIE5UIGVuY29kZXIKICogc2Vzc2lvbi4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX0FEUENNCiAqIC0gI0FTTV9NRURJQV9GTVRfTVAzCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfRE9MQllfQUFDCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9TQkMKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjEwUFJPX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfV01BX1Y5X1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1SX1dCX1BMVVNfVjIKICogLSAjQVNNX01FRElBX0ZNVF9BQzMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX0FMQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX01MQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzI5QV9GUwogKiAtICNBU01fTUVESUFfRk1UX0VYQU1QTEUKICovCgoJdTMyICAgICAgICAgICAgICAgICAgICBlbmNfY2ZnX2lkOwovKiBTcGVjaWZpZXMgdGhlIG1lZGlhIHR5cGUgZm9yIHRoZSBvdXRwdXQgb2YgdGhlIHN0cmVhbS4gUENNCiAqIGluZGljYXRlcyB0aGF0IG5vIGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkLCBlLmcuLCB0aGlzIGlzIGFuIE5UCiAqIGRlY29kZXIgc2Vzc2lvbi4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19WMgogKiAtICNBU01fTUVESUFfRk1UX0FNUk5CX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1SV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9WMTNLX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ19GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNCX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ1dCX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfU0JDCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9BTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9NTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcyOUFfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FWEFNUExFCiAqIC0gI0FTTV9NRURJQV9GTVRfV01BX1Y4CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHByb2Nlc3NlZCBieSBBU00gbW9kdWxlcy4KICogU3VwcG9ydGVkIHZhbHVlczogMTYgYW5kIDI0IGJpdHMgcGVyIHNhbXBsZQogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX0xPT1BCQUNLX1YyIDB4MDAwMTBEOEUKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fbG9vcGJhY2tfdjIgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MuCiAqIEJpdCAwLTMxOiByZXNlcnZlZDsgY2xpZW50IHNob3VsZCBzZXQgdGhlc2UgYml0cyB0byAwCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgICBzcmNfZW5kcG9pbnR5cGU7CgkvKiBFbmRwb2ludCB0eXBlLiAwID0gVHggTWF0cml4ICovCgl1MTYgICAgICAgICAgICAgICAgICAgIHNpbmtfZW5kcG9pbnR5cGU7CgkvKiBFbmRwb2ludCB0eXBlLiAwID0gUnggTWF0cml4ICovCgl1MzIgICAgICAgICAgICAgICAgICAgIHBvc3Rwcm9jb3BvX2lkOwovKiBQb3N0cHJvY2Vzc29yIHRvcG9sb2d5IElELiBTcGVjaWZpZXMgdGhlIHRvcG9sb2d5IG9mCiAqIHBvc3Rwcm9jZXNzaW5nIGFsZ29yaXRobXMuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBUaGUgbnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwcm9jZXNzZWQgYnkgQVNNIG1vZHVsZXMKICogU3VwcG9ydGVkIHZhbHVlczogMTYgYW5kIDI0IGJpdHMgcGVyIHNhbXBsZQogKi8KCXUxNiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1RSQU5TQ09ERV9MT09QQkFDSyAgICAweDAwMDEwREJBCgovKiBCaXRtYXNrIGZvciB0aGUgc3RyZWFtJ3MgUGVyZm9ybWFuY2UgbW9kZS4gKi8KI2RlZmluZSBBU01fQklUX01BU0tfU1RSRUFNX1BFUkZfTU9ERV9GTEFHX0lOX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLIFwKCSgweDcwMDAwMDAwVUwpCgovKiBCaXQgc2hpZnQgZm9yIHRoZSBzdHJlYW0ncyBQZXJmb3JtYW5jZSBtb2RlLiAqLwojZGVmaW5lIEFTTV9TSElGVF9TVFJFQU1fUEVSRl9NT0RFX0ZMQUdfSU5fT1BFTl9UUkFOU0NPREVfTE9PUEJBQ0sgICAgMjgKCi8qIEJpdG1hc2sgZm9yIHRoZSBkZWNvZGVyIGNvbnZlcnRlciBlbmFibGUgZmxhZy4gKi8KI2RlZmluZSBBU01fQklUX01BU0tfREVDT0RFUl9DT05WRVJURVJfRkxBRyAgICAoMHgwMDAwMDA3OFVMKQoKLyogU2hpZnQgdmFsdWUgZm9yIHRoZSBkZWNvZGVyIGNvbnZlcnRlciBlbmFibGUgZmxhZy4gKi8KI2RlZmluZSBBU01fU0hJRlRfREVDT0RFUl9DT05WRVJURVJfRkxBRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMKCi8qIENvbnZlcnRlciBtb2RlIGlzIE5vbmUgKERlZmF1bHQpLiAqLwojZGVmaW5lIEFTTV9DT05WRVJURVJfTU9ERV9OT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAoKLyogQ29udmVydGVyIG1vZGUgaXMgRERQLXRvLURELiAqLwojZGVmaW5lIEFTTV9ERFBfRERfQ09OVkVSVEVSX01PREUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoKLyogIElkZW50aWZpZXMgYSBzcGVjaWFsIGNvbnZlcnRlciBtb2RlIHdoZXJlIHNvdXJjZSBhbmQgc2luayBmb3JtYXRzCiAqICBhcmUgdGhlIHNhbWUgYnV0IHBvc3Rwcm9jZXNzaW5nIG11c3QgYXBwbGllZC4gVGhlcmVmb3JlLCBEZWNvZGUKICogIEByYXJyb3cgUmUtZW5jb2RlIGlzIG5lY2Vzc2FyeS4KICovCiNkZWZpbmUgQVNNX1BPU1RfUFJPQ0VTU19DT05WRVJURVJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCgoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fdHJhbnNjb2RlX2xvb3BiYWNrX3QgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Ci8qIE1vZGUgRmxhZ3Mgc3BlY2lmaWVzIHRoZSBwZXJmb3JtYW5jZSBtb2RlIGluIHdoaWNoIHRoaXMgc3RyZWFtCiAqIGlzIHRvIGJlIG9wZW5lZC4KICogU3VwcG9ydGVkIHZhbHVlc3tmb3IgYml0cyAzMCB0byAyOH0oc3RyZWFtX3BlcmZfbW9kZSBmbGFnKQogKgogKiAjQVNNX0xFR0FDWV9TVFJFQU1fU0VTU0lPTiAtLSBUaGlzIG1vZGUgZW5zdXJlcyBiYWNrd2FyZAogKiAgICAgICBjb21wYXRpYmlsaXR5IHRvIHRoZSBvcmlnaW5hbCBiZWhhdmlvcgogKiAgICAgICBvZiBBU01fU1RSRUFNX0NNRF9PUEVOX1RSQU5TQ09ERV9MT09QQkFDSwogKgogKiAjQVNNX0xPV19MQVRFTkNZX1NUUkVBTV9TRVNTSU9OIC0tIE9wZW5zIGEgbG9vcGJhY2sgc2Vzc2lvbiBieSB1c2luZwogKiAgc2hvcnRlbmVkIGJ1ZmZlcnMgaW4gbG93IGxhdGVuY3kgUE9QUAogKiAgLSBSZWNvbW1lbmRhdGlvbjogRG8gbm90IGVuYWJsZSBoaWdoIGxhdGVuY3kgYWxnb3JpdGhtcy4gVGhleSBtaWdodAogKiAgICBuZWdhdGUgdGhlIGJlbmVmaXRzIG9mIG9wZW5pbmcgYSBsb3cgbGF0ZW5jeSBzdHJlYW0sIGFuZCB0aGV5CiAqICAgIG1pZ2h0IGFsc28gc3VmZmVyIHF1YWxpdHkgZGVncmFkYXRpb24gZnJvbSB1bmV4cGVjdGVkIGppdHRlci4KICogIC0gVGhpcyBMb3cgTGF0ZW5jeSBtb2RlIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBQQ00gSW4gYW5kIFBDTSBPdXQKICogICAgbG9vcGJhY2tzLiBBbiBlcnJvciBpcyByZXR1cm5lZCBpZiBMb3cgTGF0ZW5jeSBtb2RlIGlzIG9wZW5lZCBmb3IKICogICAgb3RoZXIgdHJhbnNjb2RlIGxvb3BiYWNrIG1vZGVzLgogKiAgLSBUbyBjb25maWd1cmUgdGhpcyBzdWJmaWVsZCwgdXNlCiAqICAgICBBU01fQklUX01BU0tfU1RSRUFNX1BFUkZfTU9ERV9GTEFHX0lOX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLIGFuZAogKiAgICAgQVNNX1NISUZUX1NUUkVBTV9QRVJGX01PREVfRkxBR19JTl9PUEVOX1RSQU5TQ09ERV9MT09QQkFDSy4KICoKICogU3VwcG9ydGVkIHZhbHVlc3tmb3IgYml0cyA2IHRvIDN9IChkZWNvZGVyLWNvbnZlcnRlciBjb21wYXRpYmlsaXR5KQogKiAjQVNNX0NPTlZFUlRFUl9NT0RFX05PTkUgKDB4MCkgLS0gRGVmYXVsdAogKiAjQVNNX0REUF9ERF9DT05WRVJURVJfTU9ERSAoMHgxKQogKiAjQVNNX1BPU1RfUFJPQ0VTU19DT05WRVJURVJfTU9ERSAoMHgyKQogKiAweDMtMHhGIC0tIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCiAqIC0gVXNlICNBU01fQklUX01BU0tfREVDT0RFUl9DT05WRVJURVJfRkxBRyBhbmQKICogICAgICAgIEFTTV9TSElGVF9ERUNPREVSX0NPTlZFUlRFUl9GTEFHIHRvIHNldCB0aGlzIGJpdAogKiBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byAwLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIHNyY19mb3JtYXRfaWQ7Ci8qIFNwZWNpZmllcyB0aGUgbWVkaWEgZm9ybWF0IG9mIHRoZSBpbnB1dCBhdWRpbyBzdHJlYW0uCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YzCiAqIC0gI0FTTV9NRURJQV9GTVRfRFRTCiAqIC0gI0FTTV9NRURJQV9GTVRfRUFDM19ERUMKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzCiAqIC0gI0FTTV9NRURJQV9GTVRfQUMzX0RFQwogKiAtICNBU01fTUVESUFfRk1UX0FDMwogKi8KCXUzMiAgICAgICAgICAgICAgICAgICAgc2lua19mb3JtYXRfaWQ7Ci8qIFNwZWNpZmllcyB0aGUgbWVkaWEgZm9ybWF0IG9mIHRoZSBvdXRwdXQgc3RyZWFtLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzCiAqIC0gI0FTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjIKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMwogKiAtICNBU01fTUVESUFfRk1UX0RUUyAobm90IHN1cHBvcnRlZCBpbiBMb3cgTGF0ZW5jeSBtb2RlKQogKiAtICNBU01fTUVESUFfRk1UX0VBQzNfREVDIChub3Qgc3VwcG9ydGVkIGluIExvdyBMYXRlbmN5IG1vZGUpCiAqIC0gI0FTTV9NRURJQV9GTVRfRUFDMyAobm90IHN1cHBvcnRlZCBpbiBMb3cgTGF0ZW5jeSBtb2RlKQogKiAtICNBU01fTUVESUFfRk1UX0FDM19ERUMgKG5vdCBzdXBwb3J0ZWQgaW4gTG93IExhdGVuY3kgbW9kZSkKICogLSAjQVNNX01FRElBX0ZNVF9BQzMgKG5vdCBzdXBwb3J0ZWQgaW4gTG93IExhdGVuY3kgbW9kZSkKICovCgoJdTMyICAgICAgICAgICAgICAgICAgICBhdWRwcm9jX3RvcG9faWQ7Ci8qIFBvc3Rwcm9jZXNzaW5nIHRvcG9sb2d5IElELCB3aGljaCBzcGVjaWZpZXMgdGhlIHRvcG9sb2d5IChvcmRlciBvZgogKiAgICAgICAgcHJvY2Vzc2luZykgb2YgcG9zdHByb2Nlc3NpbmcgYWxnb3JpdGhtcy4KICoKICogU3VwcG9ydGVkIHZhbHVlcwogKiAgICAtICNBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfREVGQVVMVAogKiAgICAtICNBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfUEVBS01FVEVSCiAqICAgIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NfVE9QT19JRF9NQ0hfUEVBS19WT0wKICogICAgLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ19UT1BPX0lEX05PTkUKICogIFRvcG9sb2dpZXMgY2FuIGJlIGFkZGVkIHRocm91Z2ggI0FTTV9DTURfQUREX1RPUE9MT0dJRVMuCiAqICBUaGlzIGZpZWxkIGlzIGlnbm9yZWQgZm9yIHRoZSBDb252ZXJ0ZXIgbW9kZSwgaW4gd2hpY2ggbm8KICogIHBvc3Rwcm9jZXNzaW5nIGlzIHBlcmZvcm1lZC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBzcmNfZW5kcG9pbnRfdHlwZTsKLyogU3BlY2lmaWVzIHRoZSBzb3VyY2UgZW5kcG9pbnQgdGhhdCBwcm92aWRlcyB0aGUgaW5wdXQgc2FtcGxlcy4KICoKICogU3VwcG9ydGVkIHZhbHVlcwogKiAgLSAwIC0tIFR4IGRldmljZSBtYXRyaXggb3Igc3RyZWFtIHJvdXRlciAoZ2F0ZXdheSB0byB0aGUgaGFyZHdhcmUKICogICAgcG9ydHMpCiAqICAtIEFsbCBvdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkCiAqICBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gMC4gT3RoZXJ3aXNlLCBhbiBlcnJvciBpcyByZXR1cm5lZC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBzaW5rX2VuZHBvaW50X3R5cGU7Ci8qICBTcGVjaWZpZXMgdGhlIHNpbmsgZW5kcG9pbnQgdHlwZS4KICoKICogIFN1cHBvcnRlZCB2YWx1ZXMKICogIC0gMCAtLSBSeCBkZXZpY2UgbWF0cml4IG9yIHN0cmVhbSByb3V0ZXIgKGdhdGV3YXkgdG8gdGhlIGhhcmR3YXJlCiAqICAgIHBvcnRzKQogKiAgLSBBbGwgb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZAogKiAgIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byAwLiBPdGhlcndpc2UsIGFuIGVycm9yIGlzIHJldHVybmVkLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyogICBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHByb2Nlc3NlZCBieSB0aGUgQVNNIG1vZHVsZXMuCiAqICAgU3VwcG9ydGVkIHZhbHVlcyAxNiwgMjQKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogICBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIDAuCiAqLwp9IF9fcGFja2VkOwoKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfQ0xPU0UgICAgICAgICAgICAgMHgwMDAxMEJDRAojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX0ZMVVNIICAgICAgICAgICAgIDB4MDAwMTBCQ0UKCgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX0ZMVVNIX1JFQURCVUZTICAgMHgwMDAxMEMwOQojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX1NFVF9QUF9QQVJBTVNfVjIgMHgwMDAxMERBMQoKc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbHN3OwovKiBMU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiBTdXBwb3J0ZWQgdmFsdWVzOiBhbnkuICovCgl1MzIgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9tc3c7Ci8qIE1TVyBvZiBQYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuIFN1cHBvcnRlZCB2YWx1ZXM6IGFueS4KICogLSBNdXN0IGJlIHNldCB0byB6ZXJvIGZvciBpbi1iYW5kIGRhdGEuCiAqIC0gSW4gdGhlIGNhc2Ugb2YgMzIgYml0IFNoYXJlZCBtZW1vcnkgYWRkcmVzcywgbXN3ICBmaWVsZCBtdXN0IGJlCiAqIC0gc2V0IHRvIHplcm8uCiAqIC0gSW4gdGhlIGNhc2Ugb2YgMzYgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYml0IDMxIHRvIGJpdCA0IG9mCiAqIG1zdwogKgogKiAtIG11c3QgYmUgc2V0IHRvIHplcm8uCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7Ci8qIFN1cHBvcnRlZCBWYWx1ZXM6IEFueS4KICogbWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgRFNQIHRocm91Z2gKICogQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TCiAqIGNvbW1hbmQuCiAqIGlmIG1taGFuZGxlIGlzIE5VTEwsIHRoZSBQYXJhbURhdGEgcGF5bG9hZHMgYXJlIHdpdGhpbiB0aGUKICogbWVzc2FnZSBwYXlsb2FkIChpbi1iYW5kKS4KICogSWYgbW1oYW5kbGUgaXMgbm9uLU5VTEwsIHRoZSBQYXJhbURhdGEgcGF5bG9hZHMgYmVnaW4gYXQgdGhlCiAqIGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZSBhZGRyZXNzIG1zdyBhbmQgbHN3IChvdXQtb2YtYmFuZCkuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9zaXplOwovKiBTaXplIGluIGJ5dGVzIG9mIHRoZSB2YXJpYWJsZSBwYXlsb2FkIGFjY29tcGFueWluZyB0aGUKICogbWVzc2FnZSwgb3IgaW4gc2hhcmVkIG1lbW9yeS4gVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBwYXJzaW5nIHRoZQogKiBwYXJhbWV0ZXIgcGF5bG9hZC4KICovCn0gX19wYWNrZWQ7CgoKc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBtb2R1bGVfaWQ7CgkvKiBVbmlxdWUgbW9kdWxlIElELiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHBhcmFtX2lkOwoJLyogVW5pcXVlIHBhcmFtZXRlciBJRC4gKi8KCgl1MTYgICAgICAgICAgICAgICAgICBwYXJhbV9zaXplOwovKiBEYXRhIHNpemUgb2YgdGhlIHBhcmFtX2lkL21vZHVsZV9pZCBjb21iaW5hdGlvbi4gVGhpcyBpcwogKiBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cy4gVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0bwogKiB6ZXJvLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX0dFVF9QUF9QQVJBTVNfVjIJCTB4MDAwMTBEQTIKCnN0cnVjdCBhc21fc3RyZWFtX2NtZF9nZXRfcHBfcGFyYW1zX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX2xzdzsKCS8qIExTVyBvZiB0aGUgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiAqLwoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbXN3OwovKiBNU1cgb2YgdGhlIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4KICogLSBTaXplIG9mIHRoZSBzaGFyZWQgbWVtb3J5LCBpZiBzcGVjaWZpZWQsIHNoYWxsIGJlIGxhcmdlIGVub3VnaAogKiB0byBjb250YWluIHRoZSB3aG9sZSBQYXJhbURhdGEgcGF5bG9hZCwgaW5jbHVkaW5nIE1vZHVsZSBJRCwKICogUGFyYW0gSUQsIFBhcmFtIFNpemUsIGFuZCBQYXJhbSBWYWx1ZXMKICogLSBNdXN0IGJlIHNldCB0byB6ZXJvIGZvciBpbi1iYW5kIGRhdGEKICogLSBJbiB0aGUgY2FzZSBvZiAzMiBiaXQgU2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBtc3cgZmllbGQgbXVzdCBiZQogKiBzZXQgdG8gemVyby4KICogLSBJbiB0aGUgY2FzZSBvZiAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQgMzEgdG8gYml0IDQgb2YKICogbXN3IG11c3QgYmUgc2V0IHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBTdXBwb3J0ZWQgVmFsdWVzOiBBbnkuCiAqIG1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IERTUCB0aHJvdWdoIEFTTV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUwogKiBjb21tYW5kLgogKiBpZiBtbWhhbmRsZSBpcyBOVUxMLCB0aGUgUGFyYW1EYXRhIHBheWxvYWRzIGluIHRoZSBBQ0sgYXJlIHdpdGhpbiB0aGUKICogbWVzc2FnZSBwYXlsb2FkIChpbi1iYW5kKS4KICogSWYgbW1oYW5kbGUgaXMgbm9uLU5VTEwsIHRoZSBQYXJhbURhdGEgcGF5bG9hZHMgaW4gdGhlIEFDSyBiZWdpbiBhdCB0aGUKICogYWRkcmVzcyBzcGVjaWZpZWQgaW4gdGhlIGFkZHJlc3MgbXN3IGFuZCBsc3cuCiAqIChvdXQtb2YtYmFuZCkuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIG1vZHVsZV9pZDsKLyogVW5pcXVlIG1vZHVsZSBJRC4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKLyogVW5pcXVlIHBhcmFtZXRlciBJRC4gKi8KCgl1MTYgICAgICAgICAgICAgICAgICBwYXJhbV9tYXhfc2l6ZTsKLyogTWF4aW11bSBkYXRhIHNpemUgb2YgdGhlIG1vZHVsZV9pZC9wYXJhbV9pZCBjb21iaW5hdGlvbi4gVGhpcwogKiBpcyBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuCiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIENsaWVudHMgbXVzdCBzZXQgdGhpcwogKiBmaWVsZCB0byB6ZXJvLgogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSAweDAwMDEwQzEwCgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU1fVjIgICAgIDB4MDAwMTMyMTgKCnN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtX3YyIHsKCXUxNiAgICAgICAgICAgICAgICAgIHNlcnZpY2VfaWQ7CgkvKiAwIC0gQVNNX0VOQ09ERVJfU1ZDOyAxIC0gQVNNX0RFQ09ERVJfU1ZDICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBJRCBvZiB0aGUgcGFyYW1ldGVyLiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHBhcmFtX3NpemU7CgkvKgoJICogRGF0YSBzaXplIG9mIHRoaXMgcGFyYW1ldGVyLCBpbiBieXRlcy4gVGhlIHNpemUgaXMgYSBtdWx0aXBsZQoJICogb2YgNCBieXRlcy4KCSAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9SRUdJU1RFUl9FTkNERUNfRVZFTlRTICAweDAwMDEzMjE5CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX0VOQ0RFQ19FVkVOVFMgICAgICAgICAgIDB4MDAwMTMyMUEKCiNkZWZpbmUgQVZTX1BBUkFNX0lEX1JUSUNfU0hBUkVEX01FTU9SWV9BRERSICAgMHgwMDAxMzIzNwoKc3RydWN0IGF2c19ydGljX3NoYXJlZF9tZW1fYWRkciB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbV92MiAgZW5jZGVjOwoJdTMyICAgICAgICAgICAgICAgICBzaG1fYnVmX2FkZHJfbHN3OwoJLyogTG93ZXIgMzIgYml0IG9mIHRoZSBSVElDIHNoYXJlZCBtZW1vcnkgKi8KCgl1MzIgICAgICAgICAgICAgICAgIHNobV9idWZfYWRkcl9tc3c7CgkvKiBVcHBlciAzMiBiaXQgb2YgdGhlIFJUSUMgc2hhcmVkIG1lbW9yeSAqLwoKCXUzMiAgICAgICAgICAgICAgICAgYnVmX3NpemU7CgkvKiBTaXplIG9mIGJ1ZmZlciAqLwoKCXUxNiAgICAgICAgICAgICAgICAgc2htX2J1Zl9tZW1fcG9vbF9pZDsKCS8qIEFEU1BfTUVNT1JZX01BUF9TSE1FTThfNEtfUE9PTCAqLwoKCXUxNiAgICAgICAgICAgICAgICAgc2htX2J1Zl9udW1fcmVnaW9uczsKCS8qIG51bWJlciBvZiByZWdpb25zIHRvIG1hcCAqLwoKCXUzMiAgICAgICAgICAgICAgICAgc2htX2J1Zl9mbGFnOwoJLyogYnVmZmVyIHByb3BlcnR5IGZsYWcgKi8KCglzdHJ1Y3QgYXZzX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWQgbWFwX3JlZ2lvbjsKCS8qIG1lbW9yeSBtYXAgcmVnaW9uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVZTX1BBUkFNX0lEX1JUSUNfRVZFTlRfQUNLICAgICAgICAgICAweDAwMDEzMjM4CgpzdHJ1Y3QgYXZzX3BhcmFtX3J0aWNfZXZlbnRfYWNrIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtX3YyICBlbmNkZWM7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9QQVJBTV9JRF9FTkNERUNfQklUUkFURSAgICAgMHgwMDAxMEMxMwoKc3RydWN0IGFzbV9iaXRyYXRlX3BhcmFtIHsKCXUzMiAgICAgICAgICAgICAgICAgIGJpdHJhdGU7Ci8qIE1heGltdW0gc3VwcG9ydGVkIGJpdHJhdGUuIE9ubHkgdGhlIEFBQyBlbmNvZGVyIGlzIHN1cHBvcnRlZC4qLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0VOQ0RFQ19FTkNfQ0ZHX0JMS19WMiAweDAwMDEwREEzCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FBQ19TQlJfUFNfRkxBRwkJIDB4MDAwMTBDNjMKCi8qIEZsYWcgdG8gdHVybiBvZmYgYm90aCBTQlIgYW5kIFBTIHByb2Nlc3NpbmcsIGlmIHRoZXkgYXJlCiAqIHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbS4KICovCgojZGVmaW5lIEFTTV9BQUNfU0JSX09GRl9QU19PRkYgKDIpCgovKiBGbGFnIHRvIHR1cm4gb24gU0JSIGJ1dCB0dXJuIG9mZiBQUyBwcm9jZXNzaW5nLGlmIHRoZXkgYXJlCiAqIHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbS4KICovCgojZGVmaW5lIEFTTV9BQUNfU0JSX09OX1BTX09GRiAgKDEpCgovKiBGbGFnIHRvIHR1cm4gb24gYm90aCBTQlIgYW5kIFBTIHByb2Nlc3NpbmcsIGlmIHRoZXkgYXJlCiAqIHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbSAoZGVmYXVsdCBiZWhhdmlvcikuCiAqLwoKCiNkZWZpbmUgQVNNX0FBQ19TQlJfT05fUFNfT04gICAoMCkKCi8qIFN0cnVjdHVyZSBmb3IgYW4gQUFDIFNCUiBQUyBwcm9jZXNzaW5nIGZsYWcuICovCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9BQUNfU0JSX1BTX0ZMQUcgcGFyYW1ldGVyIGluIHRoZQogKiAjQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSBjb21tYW5kLgogKi8Kc3RydWN0IGFzbV9hYWNfc2JyX3BzX2ZsYWdfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIJZW5jYmxrOwoKCXUzMiAgICAgICAgICAgICAgICAgIHNicl9wc19mbGFnOwovKiBDb250cm9sIHBhcmFtZXRlciB0byBlbmFibGUgb3IgZGlzYWJsZSBTQlIvUFMgcHJvY2Vzc2luZyBpbgogKiB0aGUgQUFDIGJpdHN0cmVhbS4gVXNlIHRoZSBmb2xsb3dpbmcgbWFjcm9zIHRvIHNldCB0aGlzIGZpZWxkOgogKiAtICNBU01fQUFDX1NCUl9PRkZfUFNfT0ZGIC0tIFR1cm4gb2ZmIGJvdGggU0JSIGFuZCBQUwogKiBwcm9jZXNzaW5nLCBpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBiaXRzdHJlYW0uCiAqIC0gI0FTTV9BQUNfU0JSX09OX1BTX09GRiAtLSBUdXJuIG9uIFNCUiBwcm9jZXNzaW5nLCBidXQgbm90IFBTCiAqIHByb2Nlc3NpbmcsIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbS4KICogLSAjQVNNX0FBQ19TQlJfT05fUFNfT04gLS0gVHVybiBvbiBib3RoIFNCUiBhbmQgUFMgcHJvY2Vzc2luZywKICogaWYgdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtIChkZWZhdWx0IGJlaGF2aW9yKS4KICogLSBBbGwgb3RoZXIgdmFsdWVzIGFyZSBpbnZhbGlkLgogKiBDaGFuZ2VzIGFyZSBhcHBsaWVkIHRvIHRoZSBuZXh0IGRlY29kZWQgZnJhbWUuCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fUEFSQU1fSURfQUFDX0RVQUxfTU9OT19NQVBQSU5HICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBDNjQKCi8qCUZpcnN0IHNpbmdsZSBjaGFubmVsIGVsZW1lbnQgaW4gYSBkdWFsIG1vbm8gYml0c3RyZWFtLiovCiNkZWZpbmUgQVNNX0FBQ19EVUFMX01PTk9fTUFQX1NDRV8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpCgovKglTZWNvbmQgc2luZ2xlIGNoYW5uZWwgZWxlbWVudCBpbiBhIGR1YWwgbW9ubyBiaXRzdHJlYW0uKi8KI2RlZmluZSBBU01fQUFDX0RVQUxfTU9OT19NQVBfU0NFXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMikKCi8qIFN0cnVjdHVyZSBmb3IgQUFDIGRlY29kZXIgZHVhbCBtb25vIGNoYW5uZWwgbWFwcGluZy4gKi8KCgpzdHJ1Y3QgYXNtX2FhY19kdWFsX21vbm9fbWFwcGluZ19wYXJhbSB7CglzdHJ1Y3QgYXByX2hkcgkJCQkJCQloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbQllbmNkZWM7Cgl1MTYgICAgbGVmdF9jaGFubmVsX3NjZTsKCXUxNiAgICByaWdodF9jaGFubmVsX3NjZTsKCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EUlNQX0dFVF9QUF9QQVJBTVNfVjIgMHgwMDAxMERBNAoKc3RydWN0IGFzbV9zdHJlYW1fY21kcnNwX2dldF9wcF9wYXJhbXNfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fUEFSQU1fSURfQUMzX0tBUkFPS0VfTU9ERSAweDAwMDEwRDczCgovKiBFbnVtZXJhdGlvbiBmb3IgYm90aCB2b2NhbHMgaW4gYSBrYXJhb2tlIHN0cmVhbS4qLwojZGVmaW5lIEFDM19LQVJBT0tFX01PREVfTk9fVk9DQUwgICAgICgwKQoKLyogRW51bWVyYXRpb24gZm9yIG9ubHkgdGhlIGxlZnQgdm9jYWwgaW4gYSBrYXJhb2tlIHN0cmVhbS4qLwojZGVmaW5lIEFDM19LQVJBT0tFX01PREVfTEVGVF9WT0NBTCAgICgxKQoKLyogRW51bWVyYXRpb24gZm9yIG9ubHkgdGhlIHJpZ2h0IHZvY2FsIGluIGEga2FyYW9rZSBzdHJlYW0uKi8KI2RlZmluZSBBQzNfS0FSQU9LRV9NT0RFX1JJR0hUX1ZPQ0FMICgyKQoKLyogRW51bWVyYXRpb24gZm9yIGJvdGggdm9jYWwgY2hhbm5lbHMgaW4gYSBrYXJhb2tlIHN0cmVhbS4qLwojZGVmaW5lIEFDM19LQVJBT0tFX01PREVfQk9USF9WT0NBTCAgICAgICAgICAgICAoMykKI2RlZmluZSBBU01fUEFSQU1fSURfQUMzX0RSQ19NT0RFICAgICAgICAgICAgICAgMHgwMDAxMEQ3NAovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIEN1c3RvbSBBbmFsb2cgbW9kZS4qLwojZGVmaW5lIEFDM19EUkNfTU9ERV9DVVNUT01fQU5BTE9HICAgICAgICAgICAgICAoMCkKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgQ3VzdG9tIERpZ2l0YWwgbW9kZS4qLwojZGVmaW5lIEFDM19EUkNfTU9ERV9DVVNUT01fRElHSVRBTCAgICAgICAgICAgICAoMSkKLyogRW51bWVyYXRpb24gZm9yIHRoZSBMaW5lIE91dCBtb2RlIChsaWdodCBjb21wcmVzc2lvbikuKi8KI2RlZmluZSBBQzNfRFJDX01PREVfTElORV9PVVQgICgyKQoKLyogRW51bWVyYXRpb24gZm9yIHRoZSBSRiByZW1vZHVsYXRpb24gbW9kZSAoaGVhdnkgY29tcHJlc3Npb24pLiovCiNkZWZpbmUgQUMzX0RSQ19NT0RFX1JGX1JFTU9EICAgICAgICAgICAgICAgICAgICAgICAgICgzKQojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQzNfRFVBTF9NT05PX01PREUgICAgICAgICAgICAgICAweDAwMDEwRDc1CgovKiBFbnVtZXJhdGlvbiBmb3IgcGxheWluZyBkdWFsIG1vbm8gaW4gc3RlcmVvIG1vZGUuKi8KI2RlZmluZSBBQzNfRFVBTF9NT05PX01PREVfU1RFUkVPICAgICAgICAgICAgICAgICAgICAgKDApCgovKiBFbnVtZXJhdGlvbiBmb3IgcGxheWluZyBsZWZ0IG1vbm8uKi8KI2RlZmluZSBBQzNfRFVBTF9NT05PX01PREVfTEVGVF9NT05PICAgICAgICAgICAgICAgICAgKDEpCgovKiBFbnVtZXJhdGlvbiBmb3IgcGxheWluZyByaWdodCBtb25vLiovCiNkZWZpbmUgQUMzX0RVQUxfTU9OT19NT0RFX1JJR0hUX01PTk8gICAgICAgICAgICAgICAgICgyKQoKLyogRW51bWVyYXRpb24gZm9yIG1peGluZyBib3RoIGR1YWwgbW9ubyBjaGFubmVscyBhbmQgcGxheWluZyB0aGVtLiovCiNkZWZpbmUgQUMzX0RVQUxfTU9OT19NT0RFX01JWEVEX01PTk8gICAgICAgICgzKQojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQzNfU1RFUkVPX0RPV05NSVhfTU9ERSAweDAwMDEwRDc2CgovKiBFbnVtZXJhdGlvbiBmb3IgdXNpbmcgdGhlIERvd25taXggbW9kZSBpbmRpY2F0ZWQgaW4gdGhlIGJpdHN0cmVhbS4gKi8KCiNkZWZpbmUgQUMzX1NURVJFT19ET1dOTUlYX01PREVfQVVUT19ERVRFQ1QgICgwKQoKLyogRW51bWVyYXRpb24gZm9yIFN1cnJvdW5kIENvbXBhdGlibGUgbW9kZSAocHJlc2VydmVzIHRoZQogKiBzdXJyb3VuZCBpbmZvcm1hdGlvbikuCiAqLwoKI2RlZmluZSBBQzNfU1RFUkVPX0RPV05NSVhfTU9ERV9MVF9SVCAgICAgICAgKDEpCi8qIEVudW1lcmF0aW9uIGZvciBNb25vIENvbXBhdGlibGUgbW9kZSAoaWYgdGhlIG91dHB1dCBpcyB0byBiZQogKiBmdXJ0aGVyIGRvd25taXhlZCB0byBtb25vKS4KICovCgojZGVmaW5lIEFDM19TVEVSRU9fRE9XTk1JWF9NT0RFX0xPX1JPICgyKQoKLyogSUQgb2YgdGhlIEFDMyBQQ00gc2NhbGUgZmFjdG9yIHBhcmFtZXRlciBpbiB0aGUKICogI0FTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU0gY29tbWFuZC4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19QQ01fU0NBTEVGQUNUT1IgMHgwMDAxMEQ3OAoKLyogSUQgb2YgdGhlIEFDMyBEUkMgYm9vc3Qgc2NhbGUgZmFjdG9yIHBhcmFtZXRlciBpbiB0aGUKICogI0FTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU0gY29tbWFuZC4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19EUkNfQk9PU1RfU0NBTEVGQUNUT1IgMHgwMDAxMEQ3OQoKLyogSUQgb2YgdGhlIEFDMyBEUkMgY3V0IHNjYWxlIGZhY3RvciBwYXJhbWV0ZXIgaW4gdGhlCiAqICNBU01fU1RSRUFNX0NNRF9TRVRfRU5DREVDX1BBUkFNIGNvbW1hbmQuCiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQzNfRFJDX0NVVF9TQ0FMRUZBQ1RPUiAweDAwMDEwRDdBCgovKiBTdHJ1Y3R1cmUgZm9yIEFDMyBHZW5lcmljIFBhcmFtZXRlci4gKi8KCi8qICBQYXlsb2FkIG9mIHRoZSBBQzMgcGFyYW1ldGVycyBpbiB0aGUKICogI0FTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU0gY29tbWFuZC4KICovCnN0cnVjdCBhc21fYWMzX2dlbmVyaWNfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIJZW5jYmxrOwoJdTMyICAgICAgICAgICAgICAgICAgZ2VuZXJpY19wYXJhbWV0ZXI7Ci8qIEFDMyBnZW5lcmljIHBhcmFtZXRlci4gU2VsZWN0IGZyb20gb25lIG9mIHRoZSBmb2xsb3dpbmcKICogcG9zc2libGUgdmFsdWVzLgogKgogKiBGb3IgI0FTTV9QQVJBTV9JRF9BQzNfS0FSQU9LRV9NT0RFLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZToKICogLSBBQzNfS0FSQU9LRV9NT0RFX05PX1ZPQ0FMCiAqIC0gQUMzX0tBUkFPS0VfTU9ERV9MRUZUX1ZPQ0FMCiAqIC0gQUMzX0tBUkFPS0VfTU9ERV9SSUdIVF9WT0NBTAogKiAtIEFDM19LQVJBT0tFX01PREVfQk9USF9WT0NBTAogKgogKiBGb3IgI0FTTV9QQVJBTV9JRF9BQzNfRFJDX01PREUsIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogKiAtIEFDM19EUkNfTU9ERV9DVVNUT01fQU5BTE9HCiAqIC0gQUMzX0RSQ19NT0RFX0NVU1RPTV9ESUdJVEFMCiAqIC0gQUMzX0RSQ19NT0RFX0xJTkVfT1VUCiAqIC0gQUMzX0RSQ19NT0RFX1JGX1JFTU9ECiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19EVUFMX01PTk9fTU9ERSwgc3VwcG9ydGVkIHZhbHVlcyBhcmU6CiAqIC0gQUMzX0RVQUxfTU9OT19NT0RFX1NURVJFTwogKiAtIEFDM19EVUFMX01PTk9fTU9ERV9MRUZUX01PTk8KICogLSBBQzNfRFVBTF9NT05PX01PREVfUklHSFRfTU9OTwogKiAtIEFDM19EVUFMX01PTk9fTU9ERV9NSVhFRF9NT05PCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19TVEVSRU9fRE9XTk1JWF9NT0RFLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZToKICogLSBBQzNfU1RFUkVPX0RPV05NSVhfTU9ERV9BVVRPX0RFVEVDVAogKiAtIEFDM19TVEVSRU9fRE9XTk1JWF9NT0RFX0xUX1JUCiAqIC0gQUMzX1NURVJFT19ET1dOTUlYX01PREVfTE9fUk8KICoKICogRm9yICNBU01fUEFSQU1fSURfQUMzX1BDTV9TQ0FMRUZBQ1RPUiwgc3VwcG9ydGVkIHZhbHVlcyBhcmUKICogMCB0byAxIGluIFEzMSBmb3JtYXQuCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19EUkNfQk9PU1RfU0NBTEVGQUNUT1IsIHN1cHBvcnRlZCB2YWx1ZXMgYXJlCiAqIDAgdG8gMSBpbiBRMzEgZm9ybWF0LgogKgogKiBGb3IgI0FTTV9QQVJBTV9JRF9BQzNfRFJDX0NVVF9TQ0FMRUZBQ1RPUiwgc3VwcG9ydGVkIHZhbHVlcyBhcmUKICogMCB0byAxIGluIFEzMSBmb3JtYXQuCiAqLwp9IF9fcGFja2VkOwoKLyogRW51bWVyYXRpb24gZm9yIFJhdyBtb2RlIChubyBkb3dubWl4aW5nKSwgd2hpY2ggc3BlY2lmaWVzCiAqIHRoYXQgYWxsIGNoYW5uZWxzIGluIHRoZSBiaXRzdHJlYW0gYXJlIHRvIGJlIHBsYXllZCBvdXQgYXMgaXMKICogd2l0aG91dCBhbnkgZG93bm1peGluZy4gKERlZmF1bHQpCiAqLwoKI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLX1JBVyAoLTEpCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgY2hhbm5lbCBtYXNrIHRvIDAuIFRoZSA3LjEgbW9kZQogKiAoSG9tZSBUaGVhdGVyKSBpcyBhc3NpZ25lZC4KICovCgoKI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLX1pFUk8gMHgwMDAwCgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBvbmUgY2hhbm5lbCAoSG9tZSBUaGVhdGVyLCBtb25vKS4KICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzFfQyAweDAwMDQKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHR3byBjaGFubmVscyAoSG9tZSBUaGVhdGVyLCBzdGVyZW8pLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS18yX0xfUiAweDAwMDMKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHRocmVlIGNoYW5uZWxzIChIb21lIFRoZWF0ZXIpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzNfTF9DX1IgMHgwMDA3CgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciB0d28gY2hhbm5lbHMgKHN0ZXJlbykuCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS18yX0JsX0JyICAweDAwMzAKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGZvdXIgY2hhbm5lbHMuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgYmFjayBsZWZ0CiAqIC0gU3BlYWtlciBiYWNrIHJpZ2h0CiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNF9MX1JfQmxfQnIgMHgwMDMzCgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBmb3VyIGNoYW5uZWxzIChIb21lIFRoZWF0ZXIpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgYmFjayBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS180X0xfUl9DX0JjX0hUIDB4MDEwNwovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBmaXZlIGNoYW5uZWxzLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgYmFjayBsZWZ0CiAqIC0gU3BlYWtlciBiYWNrIHJpZ2h0CiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNV9MX0NfUl9CbF9CciAgMHgwMDM3CgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBmaXZlIGNoYW5uZWxzICg1IG1vZGUsIEhvbWUgVGhlYXRlcikuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBzaWRlIGxlZnQKICogLSBTcGVha2VyIHNpZGUgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181X0xfQ19SX1NsX1NyX0hUICAgMHgwNjA3Ci8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNpeCBjaGFubmVscyAoNS4xIG1vZGUpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgbG93IGZyZXF1ZW5jeQogKiAtIFNwZWFrZXIgYmFjayBsZWZ0CiAqIC0gU3BlYWtlciBiYWNrIHJpZ2h0CiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNURPVDFfTF9DX1JfQmxfQnJfU0xGICAweDAwM0YKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2l4IGNoYW5uZWxzICg1LjEgbW9kZSwgSG9tZSBUaGVhdGVyKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGxvdyBmcmVxdWVuY3kKICogLSBTcGVha2VyIHNpZGUgbGVmdAogKiAtIFNwZWFrZXIgc2lkZSByaWdodAogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzVET1QxX0xfQ19SX1NsX1NyX1NMRl9IVCAgMHgwNjBGCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNpeCBjaGFubmVscyAoNS4xIG1vZGUsIG5vIExGRSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICogLSBTcGVha2VyIGJhY2sgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNURPVDFfTF9DX1JfQmxfQnJfQmMgIDB4MDEzNwovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBzaXggY2hhbm5lbHMgKDUuMSBtb2RlLCBIb21lIFRoZWF0ZXIsCiAqIG5vIExGRSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGNlbnRlcgogKiAtIFNwZWFrZXIgc2lkZSBsZWZ0CiAqIC0gU3BlYWtlciBzaWRlIHJpZ2h0CiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNURPVDFfTF9DX1JfU2xfU3JfQmNfSFQgICAweDA3MDcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNldmVuIGNoYW5uZWxzICg2LjEgbW9kZSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBsb3cgZnJlcXVlbmN5CiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICogLSBTcGVha2VyIGJhY2sgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNkRPVDFfTF9DX1JfQmxfQnJfQmNfU0xGICAgMHgwMTNGCgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBzZXZlbiBjaGFubmVscyAoNi4xIG1vZGUsIEhvbWUKICogVGhlYXRlcikuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBsb3cgZnJlcXVlbmN5CiAqIC0gU3BlYWtlciBiYWNrIGNlbnRlcgogKiAtIFNwZWFrZXIgc2lkZSBsZWZ0CiAqIC0gU3BlYWtlciBzaWRlIHJpZ2h0CiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNkRPVDFfTF9DX1JfU2xfU3JfQmNfU0xGX0hUIDB4MDcwRgoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2V2ZW4gY2hhbm5lbHMgKDYuMSBtb2RlLCBubyBMRkUpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgYmFjayBsZWZ0CiAqIC0gU3BlYWtlciBiYWNrIHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0IG9mIGNlbnRlcgogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQgb2YgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNkRPVDFfTF9DX1JfQmxfQnJfU0ZMT0NfU0ZST0MgICAweDAwRjcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNldmVuIGNoYW5uZWxzICg2LjEgbW9kZSwgSG9tZQogKiBUaGVhdGVyLCBubyBMRkUpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgc2lkZSBsZWZ0CiAqIC0gU3BlYWtlciBzaWRlIHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0IG9mIGNlbnRlcgogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQgb2YgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNkRPVDFfTF9DX1JfU2xfU3JfU0ZMT0NfU0ZST0NfSFQgMHgwNjM3CgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBlaWdodCBjaGFubmVscyAoNy4xIG1vZGUpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgYmFjayBsZWZ0CiAqIC0gU3BlYWtlciBiYWNrIHJpZ2h0CiAqIC0gU3BlYWtlciBsb3cgZnJlcXVlbmN5CiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0IG9mIGNlbnRlcgogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQgb2YgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfN0RPVDFfTF9DX1JfQmxfQnJfU0xGX1NGTE9DX1NGUk9DIFwKCQkJCQkweDAwRkYKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGVpZ2h0IGNoYW5uZWxzICg3LjEgbW9kZSwgSG9tZSBUaGVhdGVyKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIHNpZGUgbGVmdAogKiAtIFNwZWFrZXIgc2lkZSByaWdodAogKiAtIFNwZWFrZXIgbG93IGZyZXF1ZW5jeQogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdCBvZiBjZW50ZXIKICogLSBTcGVha2VyIGZyb250IHJpZ2h0IG9mIGNlbnRlcgogKgogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzdET1QxX0xfQ19SX1NsX1NyX1NMRl9TRkxPQ19TRlJPQ19IVCBcCgkJCQkJMHgwNjNGCgojZGVmaW5lIEFTTV9QQVJBTV9JRF9ERUNfT1VUUFVUX0NIQU5fTUFQICAweDAwMDEwRDgyCgovKiBNYXhpbXVtIG51bWJlciBvZiBkZWNvZGVyIG91dHB1dCBjaGFubmVscy4gKi8KI2RlZmluZSBNQVhfQ0hBTl9NQVBfQ0hBTk5FTFMgIDE2CgovKiBTdHJ1Y3R1cmUgZm9yIGRlY29kZXIgb3V0cHV0IGNoYW5uZWwgbWFwcGluZy4gKi8KCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfREVDX09VVFBVVF9DSEFOX01BUCBwYXJhbWV0ZXIgaW4gdGhlCiAqICNBU01fU1RSRUFNX0NNRF9TRVRfRU5DREVDX1BBUkFNIGNvbW1hbmQuCiAqLwpzdHJ1Y3QgYXNtX2RlY19vdXRfY2hhbl9tYXBfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXUzMiAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOdW1iZXIgb2YgZGVjb2RlciBvdXRwdXQgY2hhbm5lbHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gI01BWF9DSEFOX01BUF9DSEFOTkVMUwogKgogKiBBIHZhbHVlIG9mIDAgaW5kaWNhdGVzIG5hdGl2ZSBjaGFubmVsIG1hcHBpbmcsIHdoaWNoIGlzIHZhbGlkCiAqIG9ubHkgZm9yIE5UIG1vZGUuIFRoaXMgbWVhbnMgdGhlIG91dHB1dCBvZiB0aGUgZGVjb2RlciBpcyB0byBiZQogKiBwcmVzZXJ2ZWQgYXMgaXMuCiAqLwoJdTggICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbTUFYX0NIQU5fTUFQX0NIQU5ORUxTXTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9DT01QUkVTU0VEICAweDAwMDEwRDg0CgovKiBCaXRtYXNrIGZvciB0aGUgSUVDIDYxOTM3IGVuYWJsZSBmbGFnLiovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX0lFQ182MTkzN19TVFJFQU1fRkxBRyAgICgweDAwMDAwMDAxVUwpCgovKiBTaGlmdCB2YWx1ZSBmb3IgdGhlIElFQyA2MTkzNyBlbmFibGUgZmxhZy4qLwojZGVmaW5lIEFTTV9TSElGVF9JRUNfNjE5MzdfU1RSRUFNX0ZMQUcgIDAKCi8qIEJpdG1hc2sgZm9yIHRoZSBJRUMgNjA5NTggZW5hYmxlIGZsYWcuKi8KI2RlZmluZSBBU01fQklUX01BU0tfSUVDXzYwOTU4X1NUUkVBTV9GTEFHICAgKDB4MDAwMDAwMDJVTCkKCi8qIFNoaWZ0IHZhbHVlIGZvciB0aGUgSUVDIDYwOTU4IGVuYWJsZSBmbGFnLiovCiNkZWZpbmUgQVNNX1NISUZUX0lFQ182MDk1OF9TVFJFQU1fRkxBRyAgIDEKCi8qIFBheWxvYWQgZm9ybWF0IGZvciBvcGVuIHdyaXRlIGNvbXByZXNzZWQgY29tbWFuZCAqLwoKLyogUGF5bG9hZCBmb3JtYXQgZm9yIHRoZSAjQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9DT01QUkVTU0VECiAqIGNvbW1hbmQsIHdoaWNoIG9wZW5zIGEgc3RyZWFtIGZvciBhIGdpdmVuIHNlc3Npb24gSUQgYW5kIHN0cmVhbSBJRAogKiB0byBiZSByZW5kZXJlZCBpbiB0aGUgY29tcHJlc3NlZCBmb3JtYXQuCiAqLwoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fd3JpdGVfY29tcHJlc3NlZCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICAgIGZsYWdzOwovKiBNb2RlIGZsYWdzIHRoYXQgY29uZmlndXJlIHRoZSBzdHJlYW0gZm9yIGEgc3BlY2lmaWMgZm9ybWF0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIEJpdCAwIC0tIElFQyA2MTkzNyBjb21wYXRpYmlsaXR5CiAqICAgLSAwIC0tIFN0cmVhbSBpcyBub3QgaW4gSUVDIDYxOTM3IGZvcm1hdAogKiAgIC0gMSAtLSBTdHJlYW0gaXMgaW4gSUVDIDYxOTM3IGZvcm1hdAogKiAtIEJpdCAxIC0tIElFQyA2MDk1OCBjb21wYXRpYmlsaXR5CiAqICAgLSAwIC0tIFN0cmVhbSBpcyBub3QgaW4gSUVDIDYwOTU4IGZvcm1hdAogKiAgIC0gMSAtLSBTdHJlYW0gaXMgaW4gSUVDIDYwOTU4IGZvcm1hdAogKiAtIEJpdHMgMiB0byAzMSAtLSAwIChSZXNlcnZlZCkKICoKICogRm9yIHRoZSBzYW1lIHN0cmVhbSwgYml0IDAgY2Fubm90IGJlIHNldCB0byAwIGFuZCBiaXQgMSBjYW5ub3QKICogYmUgc2V0IHRvIDEuIEEgY29tcHJlc3NlZCBzdHJlYW0gY29ubm90IGhhdmUgSUVDIDYwOTU4CiAqIHBhY2tldGl6YXRpb24gYXBwbGllZCB3aXRob3V0IElFQyA2MTkzNyBwYWNrZXRpemF0aW9uLgogKiBAbm90ZTFoYW5nIEN1cnJlbnRseSwgSUVDIDYwOTU4IHBhY2tldGl6ZWQgaW5wdXQgc3RyZWFtcyBhcmUgbm90CiAqIHN1cHBvcnRlZC4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgICAgZm10X2lkOwovKiBTcGVjaWZpZXMgdGhlIG1lZGlhIHR5cGUgb2YgdGhlIEhETUkgc3RyZWFtIHRvIGJlIG9wZW5lZC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BQzMKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzCiAqIC0gI0FTTV9NRURJQV9GTVRfRFRTCiAqIC0gI0FTTV9NRURJQV9GTVRfQVRSQUMKICogLSAjQVNNX01FRElBX0ZNVF9NQVQKICoKICogQG5vdGUxaGFuZyBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIGEgdmFsaWQgbWVkaWEgdHlwZSBldmVuIGlmCiAqIElFQyA2MTkzNyBwYWNrZXRpemF0aW9uIGlzIG5vdCBwZXJmb3JtZWQgYnkgdGhlIGFEU1AuCiAqLwoKfSBfX3BhY2tlZDsKCgovKiBJbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBzYW1wbGVzIHBlciBjaGFubmVsIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUKICogYmVnaW5uaW5nIG9mIHRoZSBzdHJlYW0uCiAqLwojZGVmaW5lIEFTTV9EQVRBX0NNRF9SRU1PVkVfSU5JVElBTF9TSUxFTkNFIDB4MDAwMTBENjcKCi8qIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGNoYW5uZWwgdG8gYmUgcmVtb3ZlZCBmcm9tCiAqIHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KICovCiNkZWZpbmUgQVNNX0RBVEFfQ01EX1JFTU9WRV9UUkFJTElOR19TSUxFTkNFIDB4MDAwMTBENjgKCnN0cnVjdCBhc21fZGF0YV9jbWRfcmVtb3ZlX3NpbGVuY2UgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyCW51bV9zYW1wbGVzX3RvX3JlbW92ZTsKCS8qIDwgTnVtYmVyIG9mIHNhbXBsZXMgcGVyIGNoYW5uZWwgdG8gYmUgcmVtb3ZlZC4KCSAqIEB2YWx1ZXMgMCB0byAoMkBzc2NyezMyfS0xKQoJICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9DT01QUkVTU0VEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEQ5NQoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fcmVhZF9jb21wcmVzc2VkIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgbW9kZV9mbGFnczsKLyogTW9kZSBmbGFncyB0aGF0IGluZGljYXRlIHdoZXRoZXIgbWV0YSBpbmZvcm1hdGlvbiBwZXIgZW5jb2RlZAogKiBmcmFtZSBpcyB0byBiZSBwcm92aWRlZC4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDQ6CiAqIC0gMCAtLSBSZXR1cm4gZGF0YSBidWZmZXIgY29udGFpbnMgYWxsIGVuY29kZWQgZnJhbWVzIG9ubHk7IGl0IGRvZXMKICogICAgICBub3QgY29udGFpbiBmcmFtZSBtZXRhZGF0YS4KICogLSAxIC0tIFJldHVybiBkYXRhIGJ1ZmZlciBjb250YWlucyBhbiBhcnJheSBvZiBtZXRhZGF0YSBhbmQgZW5jb2RlZAogKiAgICAgIGZyYW1lcy4KICogLSBVc2UgI0FTTV9CSVRfTUFTS19NRVRBX0lORk9fRkxBRyB0byBzZXQgdGhlIGJpdG1hc2sgYW5kCiAqICNBU01fU0hJRlRfTUVUQV9JTkZPX0ZMQUcgdG8gc2V0IHRoZSBzaGlmdCB2YWx1ZSBmb3IgdGhpcyBiaXQuCiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgZnJhbWVzX3Blcl9idWY7Ci8qIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IG5lZWQgdG8gYmUgcmV0dXJuZWQgcGVyCiAqIHJlYWQgYnVmZmVyCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IHNob3VsZCBiZSBncmVhdGVyIHRoYW4gMAogKi8KCn0gX19wYWNrZWQ7CgovKiBhZHNwX2FzbV9zdHJlYW1fY29tbWFuZHMuaCovCgoKLyogYWRzcF9hc21fYXBpLmggKG5vIGNoYW5nZXMpKi8KI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DT1BPX0lEX0RFRkFVTFQgXAoJCQkJCQkJCTB4MDAwMTBCRTQKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DT1BPX0lEX1BFQUtNRVRFUiBcCgkJCQkJCQkJMHgwMDAxMEQ4MwojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfTk9ORSBcCgkJCQkJCQkJMHgwMDAxMEM2OAojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfTUNIX1BFQUtfVk9MIFwKCQkJCQkJCQkweDAwMDEwRDhCCiNkZWZpbmUgQVNNX1NUUkVBTV9QUkVQUk9DT1BPX0lEX0RFRkFVTFQgXAoJCQlBU01fU1RSRUFNX1BPU1RQUk9DT1BPX0lEX0RFRkFVTFQKI2RlZmluZSBBU01fU1RSRUFNX1BSRVBST0NPUE9fSURfTk9ORSBcCgkJCUFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfTk9ORQojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9OT05FX0FVRElPX0NPUFAgXAoJCQkweDAwMDEwMzEyCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX1NQRUFLRVJfTU9OT19BVURJT19DT1BQIFwKCQkJCQkJCQkweDAwMDEwMzEzCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX1NQRUFLRVJfU1RFUkVPX0FVRElPX0NPUFAgXAoJCQkJCQkJCTB4MDAwMTAzMTQKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9TVEVSRU9fSUlSX0FVRElPX0NPUFBcCgkJCQkJCQkJMHgwMDAxMDcwNAojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX01PTk9fQVVESU9fQ09QUF9NQkRSQ1YyXAoJCQkJCQkJCTB4MDAwMTA3MEQKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9TVEVSRU9fQVVESU9fQ09QUF9NQkRSQ1YyXAoJCQkJCQkJCTB4MDAwMTA3MEUKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9TVEVSRU9fSUlSX0FVRElPX0NPUFBfTUJEUkNWMlwKCQkJCQkJCQkweDAwMDEwNzBGCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX1NQRUFLRVJfU1RFUkVPX0FVRElPX0NPUFBfTUJEUkNfVjMgXAoJCQkJCQkJCTB4MTEwMDAwMDAKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9NQ0hfUEVBS19WT0wgXAoJCQkJCQkJCTB4MDAwMTAzMUIKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfTUlDX01PTk9fQVVESU9fQ09QUCAgMHgwMDAxMDMxNQojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9NSUNfU1RFUkVPX0FVRElPX0NPUFAgMHgwMDAxMDMxNgojZGVmaW5lIEFVRFBST0NfQ09QUE9QT0xPR1lfSURfTUNIQU5fSUlSX0FVRElPICAgICAgICAgICAweDAwMDEwNzE1CiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX0RFRkFVTFRfQVVESU9fQ09QUCAgIDB4MDAwMTBCRTMKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfUEVBS01FVEVSX0FVRElPX0NPUFAgMHgwMDAxMDMxNwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX0FJRyAgIDB4MDAwMTA3MTYKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FJR19FTkFCTEUJCTB4MDAwMTA3MTcKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FJR19DT05GSUcJCTB4MDAwMTA3MTgKCnN0cnVjdCBBdWRpb19BaWdQYXJhbSB7Cgl1aW50MTZfdAltb2RlOwovKjwgTW9kZSB3b3JkIGZvciBlbmFibGluZyBBSUcvU0lHIG1vZGUgLgogKiBCeXRlIG9mZnNldDogMAogKi8KCWludDE2X3QJCXN0YXRpY0dhaW5MMTZRMTI7Ci8qPCBTdGF0aWMgaW5wdXQgZ2FpbiB3aGVuIGFpZ01vZGUgaXMgc2V0IHRvIDEuCiAqIEJ5dGUgb2Zmc2V0OiAyCiAqLwoJaW50MTZfdAkJaW5pdGlhbEdhaW5EQkwxNlE3OwovKjxJbml0aWFsIHZhbHVlIHRoYXQgdGhlIGFkYXB0aXZlIGdhaW4gdXBkYXRlIHN0YXJ0cyBmcm9tIGRCCiAqIFE3IEJ5dGUgb2Zmc2V0OiA0CiAqLwoJaW50MTZfdAkJaWRlYWxSTVNEQkwxNlE3OwovKjxBdmVyYWdlIFJNUyBsZXZlbCB0aGF0IEFJRyBhdHRlbXB0cyB0byBhY2hpZXZlIFE4LjcKICogQnl0ZSBvZmZzZXQ6IDYKICovCglpbnQzMl90CQlub2lzZUdhdGVMMzI7Ci8qVGhyZXNob2xkIGJlbG93IHdoaWNoIHNpZ25hbCBpcyBjb25zaWRlcmVkIGFzIG5vaXNlIGFuZCBBSUcKICogQnl0ZSBvZmZzZXQ6IDgKICovCglpbnQzMl90CQltaW5HYWluTDMyUTE1OwovKk1pbmltdW0gZ2FpbiB0aGF0IGNhbiBiZSBwcm92aWRlZCBieSBBSUcgUTE2LjE1CiAqIEJ5dGUgb2Zmc2V0OiAxMgogKi8KCWludDMyX3QJCW1heEdhaW5MMzJRMTU7Ci8qTWF4aW11bSBnYWluIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IEFJRyBRMTYuMTUKICogQnl0ZSBvZmZzZXQ6IDE2CiAqLwoJdWludDMyX3QJCWdhaW5BdFJ0VUwzMlEzMTsKLypBdHRhY2svcmVsZWFzZSB0aW1lIGZvciBBSUcgdXBkYXRlIFExLjMxCiAqIEJ5dGUgb2Zmc2V0OiAyMAogKi8KCXVpbnQzMl90CQlsb25nR2FpbkF0UnRVTDMyUTMxOwovKkxvbmcgYXR0YWNrL3JlbGVhc2UgdGltZSB3aGlsZSB1cGRhdGluZyBnYWluIGZvcgogKiBub2lzZS9zaWxlbmNlIFExLjMxIEJ5dGUgb2Zmc2V0OiAyNAogKi8KCgl1aW50MzJfdAkJcm1zVGF2VUwzMlEzMjsKLyogUk1TIHNtb290aGluZyB0aW1lIGNvbnN0YW50IHVzZWQgZm9yIGxvbmctdGVybSBSTVMgZXN0aW1hdGUKICogUTAuMzIgQnl0ZSBvZmZzZXQ6IDI4CiAqLwoKCXVpbnQzMl90CQlnYWluVXBkYXRlU3RhcnRUaW1Nc1VMMzJRMDsKLyogVGhlIHdhaXRpbmcgdGltZSBiZWZvcmUgd2hpY2ggQUlHIHN0YXJ0cyB0byBhcHBseSBhZGFwdGl2ZQogKiBnYWluIHVwZGF0ZSBRMzIuMCBCeXRlIG9mZnNldDogMzIKICovCgp9IF9fcGFja2VkOwoKCiNkZWZpbmUgQURNX01PRFVMRV9JRF9FQU5TICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBDNEEKI2RlZmluZSBBRE1fUEFSQU1fSURfRUFOU19FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEM0QgojZGVmaW5lIEFETV9QQVJBTV9JRF9FQU5TX1BBUkFNUyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQzRDCgpzdHJ1Y3QgYWRtX2VhbnNfZW5hYmxlIHsKCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGVuYWJsZV9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgRUFOUyBpcyBkaXNhYmxlZCAoMCkgb3IgZW5hYmxlZAogKiAobm9uemVybykuCiAqIFRoaXMgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIHNhbXBsaW5nIHJhdGVzIG9mIDgsIDEyLCAxNiwgMjQsIDMyLAogKiBhbmQgNDgga0h6LiBJdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBzYW1wbGluZyByYXRlcyBvZiAxMS4wMjUsCiAqIDIyLjA1LCBvciA0NC4xIGtIei4KICovCgp9IF9fcGFja2VkOwoKCnN0cnVjdCBhZG1fZWFuc19wYXJhbXMgewoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX21vZGU7Ci8qPCBNb2RlIHdvcmQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBzdWJtb2R1bGVzLgogKiBCeXRlIG9mZnNldDogMAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfaW5wdXRfZ2FpbjsKLyo8IFEyLjEzIGlucHV0IGdhaW4gdG8gdGhlIEVBTlMgbW9kdWxlLgogKiBCeXRlIG9mZnNldDogMgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfb3V0cHV0X2dhaW47Ci8qPCBRMi4xMyBvdXRwdXQgZ2FpbiB0byB0aGUgRUFOUyBtb2R1bGUuCiAqIEJ5dGUgb2Zmc2V0OiA0CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc2FyZ2V0X25zOwovKjwgVGFyZ2V0IG5vaXNlIHN1cHByZXNzaW9uIGxldmVsIGluIGRCLgogKiBCeXRlIG9mZnNldDogNgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfc19hbHBoYTsKLyo8IFEzLjEyIG92ZXItc3VidHJhY3Rpb24gZmFjdG9yIGZvciBzdGF0aW9uYXJ5IG5vaXNlCiAqIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogOAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbl9hbHBoYTsKLyogPCBRMy4xMiBvdmVyLXN1YnRyYWN0aW9uIGZhY3RvciBmb3Igbm9uc3RhdGlvbmFyeSBub2lzZQogKiBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDEwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19uX2FscGhhbWF4OwovKjwgUTMuMTIgbWF4aW11bSBvdmVyLXN1YnRyYWN0aW9uIGZhY3RvciBmb3Igbm9uc3RhdGlvbmFyeQogKiBub2lzZSBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDEyCiAqLwoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX2VfYWxwaGE7Ci8qPCBRMTUgc2NhbGluZyBmYWN0b3IgZm9yIGV4Y2VzcyBub2lzZSBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDE0CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19uc19zbnJtYXg7Ci8qPCBVcHBlciBib3VuZGFyeSBpbiBkQiBmb3IgU05SIGVzdGltYXRpb24uCiAqIEJ5dGUgb2Zmc2V0OiAxNgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfc25zX2Jsb2NrOwovKjwgUXVhcnRlciBibG9jayBzaXplIGZvciBzdGF0aW9uYXJ5IG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMTgKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25zX2k7Ci8qPCBJbml0aWFsaXphdGlvbiBibG9jayBzaXplIGZvciBub2lzZSBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDIwCiAqLwoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25wX3NjYWxlOwovKjwgUG93ZXIgc2NhbGUgZmFjdG9yIGZvciBub25zdGF0aW9uYXJ5IG5vaXNlIHVwZGF0ZS4KICogQnl0ZSBvZmZzZXQ6IDIyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19uX2xhbWJkYTsKLyo8IFNtb290aGluZyBmYWN0b3IgZm9yIGhpZ2hlciBsZXZlbCBub25zdGF0aW9uYXJ5IG5vaXNlCiAqIHVwZGF0ZS4KICogQnl0ZSBvZmZzZXQ6IDI0CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19uX2xhbWJkYWY7Ci8qPCBNZWRpdW0gYXZlcmFnaW5nIGZhY3RvciBmb3Igbm9pc2UgdXBkYXRlLgogKiBCeXRlIG9mZnNldDogMjYKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX2dzX2JpYXM7Ci8qPCBCaWFzIGZhY3RvciBpbiBkQiBmb3IgZ2FpbiBjYWxjdWxhdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDI4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19nc19tYXg7Ci8qPCBTTlIgbG93ZXIgYm91bmRhcnkgaW4gZEIgZm9yIGFnZ3Jlc3NpdmUgZ2FpbiBjYWxjdWxhdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDMwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19zX2FscGhhX2hiOwovKjwgUTMuMTIgb3Zlci1zdWJ0cmFjdGlvbiBmYWN0b3IgZm9yIGhpZ2gtYmFuZCBzdGF0aW9uYXJ5CiAqIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMzIKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fYWxwaGFtYXhfaGI7Ci8qPCBRMy4xMiBtYXhpbXVtIG92ZXItc3VidHJhY3Rpb24gZmFjdG9yIGZvciBoaWdoLWJhbmQKICogbm9uc3RhdGlvbmFyeSBub2lzZSBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDM0CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19lX2FscGhhX2hiOwovKjwgUTE1IHNjYWxpbmcgZmFjdG9yIGZvciBoaWdoLWJhbmQgZXhjZXNzIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMzYKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fbGFtYmRhMDsKLyo8IFNtb290aGluZyBmYWN0b3IgZm9yIG5vbnN0YXRpb25hcnkgbm9pc2UgdXBkYXRlIGR1cmluZwogKiBzcGVlY2ggYWN0aXZpdHkuCiAqIEJ5dGUgb2Zmc2V0OiAzOAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaDsKLyo8IFRocmVzaG9sZCBmb3IgZ2VuZXJhdGluZyBhIGJpbmFyeSBWQUQgZGVjaXNpb24uCiAqIEJ5dGUgb2Zmc2V0OiA0MAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHB3cl9zY2FsZTsKLyo8IEluZGlyZWN0IGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBub2lzZSBsZXZlbCBlc3RpbWF0ZS4KICogQnl0ZSBvZmZzZXQ6IDQyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZ292ZXJfbWF4OwovKjwgQXZvaWRzIG1pZC1zcGVlY2ggY2xpcHBpbmcgYW5kIHJlbGlhYmx5IGRldGVjdHMgd2VhayBzcGVlY2gKICogYnVyc3RzIGF0IHRoZSBlbmQgb2Ygc3BlZWNoIGFjdGl2aXR5LgogKiBCeXRlIG9mZnNldDogNDQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYV9zbnI7Ci8qPCBDb250cm9scyByZXNwb25zaXZlbmVzcyBvZiB0aGUgVkFELgogKiBCeXRlIG9mZnNldDogNDYKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBzbnJfZGlmZl9tYXg7Ci8qPCBNYXhpbXVtIFNOUiBkaWZmZXJlbmNlLiBEZWNyZWFzaW5nIHRoaXMgcGFyYW1ldGVyIHZhbHVlIG1heQogKiBoZWxwIGluIG1ha2luZyBjb3JyZWN0IGRlY2lzaW9ucyBkdXJpbmcgYWJydXB0IGNoYW5nZXM7IGhvd2V2ZXIsCiAqIGRlY3JlYXNpbmcgdG9vIG11Y2ggbWF5IGluY3JlYXNlIGZhbHNlIGFsYXJtcyBkdXJpbmcgbG9uZwogKiBwYXVzZXMvc2lsZW5jZXMuCiAqIEJ5dGUgb2Zmc2V0OiA0OAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHNucl9kaWZmX21pbjsKLyo8IE1pbmltdW0gU05SIGRpZmZlcmVuY2UuIERlY3JlYXNpbmcgdGhpcyBwYXJhbWV0ZXIgdmFsdWUgbWF5CiAqIGhlbHAgaW4gbWFraW5nIGNvcnJlY3QgZGVjaXNpb25zIGR1cmluZyBhYnJ1cHQgY2hhbmdlczsgaG93ZXZlciwKICogZGVjcmVhc2luZyB0b28gbXVjaCBtYXkgaW5jcmVhc2UgZmFsc2UgYWxhcm1zIGR1cmluZyBsb25nCiAqIHBhdXNlcy9zaWxlbmNlcy4KICogQnl0ZSBvZmZzZXQ6IDUwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9sZW5ndGg7Ci8qPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgZnJhbWVzIGZvciB3aGljaCBhIG5vaXNlIGxldmVsCiAqIGVzdGltYXRlIGlzIHNldCB0byBhIGZpeGVkIHZhbHVlLgogKiBCeXRlIG9mZnNldDogNTIKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfdmFsOwovKjwgRGVmaW5lcyB0aGUgdXBwZXIgbGltaXQgb2YgdGhlIG5vaXNlIGxldmVsLgogKiBCeXRlIG9mZnNldDogNTQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2JvdW5kOwovKjwgRGVmaW5lcyB0aGUgaW5pdGlhbCBib3VuZGluZyB2YWx1ZSBmb3IgdGhlIG5vaXNlIGxldmVsCiAqIGVzdGltYXRlLiBUaGlzIGlzIHVzZWQgZHVyaW5nIHRoZSBpbml0aWFsIHNlZ21lbnQgZGVmaW5lZCBieSB0aGUKICogaW5pdF9sZW5ndGggcGFyYW1ldGVyLgogKiBCeXRlIG9mZnNldDogNTYKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICByZXNldF9ib3VuZDsKLyo8IFJlc2V0IGJvdW5kYXJ5IGZvciBub2lzZSB0cmFja2luZy4KICogQnl0ZSBvZmZzZXQ6IDU4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgYXZhcl9zY2FsZTsKLyo8IERlZmluZXMgdGhlIGJpYXMgZmFjdG9yIGluIG5vaXNlIGVzdGltYXRpb24uCiAqIEJ5dGUgb2Zmc2V0OiA2MAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yl9uYzsKLyo8IERlZmluZXMgdGhlIHdpbmRvdyBsZW5ndGggZm9yIG5vaXNlIGVzdGltYXRpb24uCiAqIEJ5dGUgb2Zmc2V0OiA2MgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHNwb3dfbWluOwovKjwgRGVmaW5lcyB0aGUgbWluaW11bSBzaWduYWwgcG93ZXIgcmVxdWlyZWQgdG8gdXBkYXRlIHRoZQogKiBib3VuZGFyaWVzIGZvciB0aGUgbm9pc2UgZmxvb3IgZXN0aW1hdGUuCiAqIEJ5dGUgb2Zmc2V0OiA2NAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZ3NfZmFzdDsKLyo8IEZhc3Qgc21vb3RoaW5nIGZhY3RvciBmb3IgcG9zdHByb2Nlc3NvciBnYWluLgogKiBCeXRlIG9mZnNldDogNjYKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX2dzX21lZDsKLyo8IE1lZGl1bSBzbW9vdGhpbmcgZmFjdG9yIGZvciBwb3N0cHJvY2Vzc29yIGdhaW4uCiAqIEJ5dGUgb2Zmc2V0OiA2OAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZ3Nfc2xvdzsKLyo8IFNsb3cgc21vb3RoaW5nIGZhY3RvciBmb3IgcG9zdHByb2Nlc3NvciBnYWluLgogKiBCeXRlIG9mZnNldDogNzAKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX3N3Yl9zYWxwaGE7Ci8qPCBRMy4xMiBzdXBlciB3aWRlYmFuZCBhZ2dyZXNzaXZlbmVzcyBmYWN0b3IgZm9yIHN0YXRpb25hcnkKICogbm9pc2Ugc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiA3MgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfc3diX25hbHBoYTsKLyo8IFEzLjEyIHN1cGVyIHdpZGViYW5kIGFnZ3Jlc3NpdmVuZXNzIGZhY3RvciBmb3IKICogbm9uc3RhdGlvbmFyeSBub2lzZSBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDc0CiAqLwp9IF9fcGFja2VkOwojZGVmaW5lIEFETV9NT0RVTEVfSURYX01JQ19HQUlOX0NUUkwgICAweDAwMDEwQzM1CgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMKICogSUQgb2YgdGhlIFR4IG1pYyBnYWluIGNvbnRyb2wgcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEWF9NSUNfR0FJTl9DVFJMIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRteF9taWNfZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEWF9NSUNfR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRFhfTUlDX0dBSU4gICAgICAgMHgwMDAxMEMzNgoKLyogU3RydWN0dXJlIGZvciBhIFR4IG1pYyBnYWluIHBhcmFtZXRlciBmb3IgdGhlIG1pYyBnYWluCiAqIGNvbnRyb2wgbW9kdWxlLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRFhfTUlDX0dBSU4gcGFyYW1ldGVyIGluIHRoZQogKiBUeCBNaWMgR2FpbiBDb250cm9sIG1vZHVsZS4KICovCnN0cnVjdCBhZG14X21pY19nYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgdHhfbWljX2dhaW47CgkvKjwgTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdC4gKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFkbV9zZXRfbWljX2dhaW5fcGFyYW1zIHsKCXN0cnVjdCBhZG1fY21kX3NldF9wcF9wYXJhbXNfdjUgcGFyYW1zOwoJc3RydWN0IGFkbV9wYXJhbV9kYXRhX3Y1IGRhdGE7CglzdHJ1Y3QgYWRteF9taWNfZ2FpbiBtaWNfZ2Fpbl9kYXRhOwp9IF9fcGFja2VkOwoKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCgovKiBAaW5ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzCiAqIElEIG9mIHRoZSBSeCBDb2RlYyBHYWluIENvbnRyb2wgbW9kdWxlLgogKgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRDoKICogLSAjQURNX1BBUkFNX0lEX1JYX0NPREVDX0dBSU4KICovCiNkZWZpbmUgQURNX01PRFVMRV9JRF9SWF9DT0RFQ19HQUlOX0NUUkwgICAgICAgMHgwMDAxMEMzNwoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzCiAqIElEIG9mIHRoZSBSeCBjb2RlYyBnYWluIGNvbnRyb2wgcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX1JYX0NPREVDX0dBSU5fQ1RSTCBtb2R1bGUuCiAqCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FkbV9yeF9jb2RlY19nYWlufQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURfUlhfQ09ERUNfR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9SWF9DT0RFQ19HQUlOICAgMHgwMDAxMEMzOAoKLyogU3RydWN0dXJlIGZvciB0aGUgUnggY29tbW9uIGNvZGVjIGdhaW4gY29udHJvbCBtb2R1bGUuICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfUlhfQ09ERUNfR0FJTiBwYXJhbWV0ZXIKICogaW4gdGhlIFJ4IENvZGVjIEdhaW4gQ29udHJvbCBtb2R1bGUuCiAqLwoKCnN0cnVjdCBhZG1fcnhfY29kZWNfZ2FpbiB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJ4X2NvZGVjX2dhaW47CgkvKiBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0LiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCgovKiBAaW5ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzCiAqIElEIG9mIHRoZSBIUEYgVHVuaW5nIEZpbHRlciBtb2R1bGUgb24gdGhlIFR4IHBhdGguCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9FTkFCTEVfQ09ORklHCiAqIC0gI0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfUFJFX0dBSU4KICogLSAjQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9DT05GSUdfUEFSQU1TCiAqLwojZGVmaW5lIEFETV9NT0RVTEVfSURfSFBGX0lJUlhfRklMVEVSICAgIDB4MDAwMTBDM0QKCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwovKiBJRCBvZiB0aGUgVHggSFBGIElJUiBmaWx0ZXIgZW5hYmxlIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRF9IUEZfSUlSWF9GSUxURVIgbW9kdWxlLgogKiBAcGFyc3BhY2UgTWVzc2FnZSBwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX2hwZnhfaWlyX2ZpbHRlcl9lbmFibGVfY2ZnfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0VOQUJMRV9DT05GSUcudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0VOQUJMRV9DT05GSUcgICAweDAwMDEwQzNFCgovKiBJRCBvZiB0aGUgVHggSFBGIElJUiBmaWx0ZXIgcHJlZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfSFBGX0lJUlhfRklMVEVSIG1vZHVsZS4KICogQHBhcnNwYWNlIE1lc3NhZ2UgcGF5bG9hZAogKiBAc3RydWN0dXJle2FkbV9ocGZ4X2lpcl9maWx0ZXJfcHJlX2dhaW59CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfUFJFX0dBSU4udGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX1BSRV9HQUlOICAgMHgwMDAxMEMzRgoKLyogSUQgb2YgdGhlIFR4IEhQRiBJSVIgZmlsdGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRF9IUEZfSUlSWF9GSUxURVIgbW9kdWxlLgogKiBAcGFyc3BhY2UgTWVzc2FnZSBwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX2hwZnhfaWlyX2ZpbHRlcl9jZmdfcGFyYW1zfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0NPTkZJR19QQQogKiBSQU1TLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9DT05GSUdfUEFSQU1TICAweDAwMDEwQzQwCgovKiBTdHJ1Y3R1cmUgZm9yIGVuYWJsaW5nIGEgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yCiAqIHRoZSBIUEYgSUlSIHR1bmluZyBmaWx0ZXIgbW9kdWxlIG9uIHRoZSBUeCBwYXRoLgogKi8KCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9FTkFCTEVfQ09ORklHCiAqIHBhcmFtZXRlciBpbiB0aGUgVHggcGF0aCBIUEYgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwpzdHJ1Y3QgYWRtX2hwZnhfaWlyX2ZpbHRlcl9lbmFibGVfY2ZnIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBIUEYgdHVuaW5nIGZpbHRlciBpcyBkaXNhYmxlZCAoMCkgb3IKICogZW5hYmxlZCAobm9uemVybykuCiAqLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIHByZWdhaW4gcGFyYW1ldGVyIGZvciB0aGUgSFBGCiAqIElJUiB0dW5pbmcgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX1BSRV9HQUlOIHBhcmFtZXRlcgogKiBpbiB0aGUgVHggcGF0aCBIUEYgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwpzdHJ1Y3QgYWRtX2hwZnhfaWlyX2ZpbHRlcl9wcmVfZ2FpbiB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHByZV9nYWluOwoJLyogTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdC4gKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IgdGhlCiAqIEhQRiBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUgb24gdGhlIFR4IHBhdGguCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9DT05GSUdfUEFSQU1TCiAqIHBhcmFtZXRlcnMgaW4gdGhlIFR4IHBhdGggSFBGIFR1bmluZyBGaWx0ZXIgbW9kdWxlLiBcbgogKiBcbgogKiBUaGlzIHN0cnVjdHVyZSBpcyBmb2xsb3dlZCBieSB0dW5pbmcgZmlsdGVyIGNvZWZmaWNpZW50cyBhcyBmb2xsb3dzOiBcbgogKiAtIFNlcXVlbmNlIG9mIGludDMyX3QgRmlsdGVyQ29lZmZzLgogKiBFYWNoIGJhbmQgaGFzIGZpdmUgY29lZmZpY2llbnRzLCBlYWNoIGluIGludDMyX3QgZm9ybWF0IGluIHRoZSBvcmRlciBvZgogKiBiMCwgYjEsIGIyLCBhMSwgYTIuCiAqIC0gU2VxdWVuY2Ugb2YgaW50MTZfdCBOdW1TaGlmdEZhY3Rvci4KICogT25lIGludDE2X3QgcGVyIGJhbmQuIFRoZSBudW1lcmF0b3Igc2hpZnQgZmFjdG9yIGlzIHJlbGF0ZWQgdG8gdGhlIFEKICogZmFjdG9yIG9mIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgogKiAtIFNlcXVlbmNlIG9mIHVpbnQxNl90IFBhblNldHRpbmcuCiAqIE9uZSB1aW50MTZfdCBmb3IgZWFjaCBiYW5kIHRvIGluZGljYXRlIGFwcGxpY2F0aW9uIG9mIHRoZSBmaWx0ZXIgdG8KICogbGVmdCAoMCksIHJpZ2h0ICgxKSwgb3IgYm90aCAoMikgY2hhbm5lbHMuCiAqLwpzdHJ1Y3QgYWRtX2hwZnhfaWlyX2ZpbHRlcl9jZmdfcGFyYW1zIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbnVtX2JpcXVhZF9zdGFnZXM7Ci8qPCBOdW1iZXIgb2YgYmFuZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMjAKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfbW9kdWxlX2lkcyAqLwoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfbW9kdWxlX2lkcyAqLwovKiBJRCBvZiB0aGUgVHggcGF0aCBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqCVRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICoJLSAjQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0VOQUJMRV9DT05GSUcKICovCiNkZWZpbmUgQURNX01PRFVMRV9JRFhfSUlSX0ZJTFRFUiAweDAwMDEwQzQxCgovKiBJRCBvZiB0aGUgUnggcGF0aCBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUgZm9yIHRoZSBsZWZ0IGNoYW5uZWwuCiAqCVRoZSBwYXJhbWV0ZXIgSURzIG9mIHRoZSBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUKICoJKCNBU01fTU9EVUxFX0lEX0lJUlVOSU5HX0ZJTFRFUikgYXJlIHVzZWQgZm9yIHRoZSBsZWZ0IElJUiBSeCB0dW5pbmcKICoJZmlsdGVyLgogKgogKiBQYW4gcGFyYW1ldGVycyBhcmUgbm90IHJlcXVpcmVkIGZvciB0aGlzIHBlci1jaGFubmVsIElJUiBmaWx0ZXI7IHRoZSBwYW4KICogcGFyYW1ldGVycyBhcmUgaWdub3JlZCBieSB0aGlzIG1vZHVsZS4KICovCiNkZWZpbmUgQURNX01PRFVMRV9JRF9MRUZUX0lJUlVOSU5HX0ZJTFRFUiAgICAgIDB4MDAwMTA3MDUKCi8qIElEIG9mIHRoZSB0aGUgUnggcGF0aCBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUgZm9yIHRoZSByaWdodAogKiBjaGFubmVsLgogKiBUaGUgcGFyYW1ldGVyIElEcyBvZiB0aGUgSUlSIHR1bmluZyBmaWx0ZXIgbW9kdWxlCiAqICgjQVNNX01PRFVMRV9JRF9JSVJVTklOR19GSUxURVIpIGFyZSB1c2VkIGZvciB0aGUgcmlnaHQgSUlSIFJ4CiAqIHR1bmluZyBmaWx0ZXIuCiAqCiAqIFBhbiBwYXJhbWV0ZXJzIGFyZSBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcGVyLWNoYW5uZWwgSUlSIGZpbHRlcjsKICogdGhlIHBhbiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGJ5IHRoaXMgbW9kdWxlLgogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEX1JJR0hUX0lJUlVOSU5HX0ZJTFRFUiAgICAweDAwMDEwNzA2CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KCi8qIElEIG9mIHRoZSBUeCBJSVIgZmlsdGVyIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURYX0lJUl9GSUxURVIgbW9kdWxlLgogKiBAcGFyc3BhY2UgTWVzc2FnZSBwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRteF9paXJfZmlsdGVyX2VuYWJsZV9jZmd9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRFhfSUlSX0ZJTFRFUl9FTkFCTEVfQ09ORklHLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0VOQUJMRV9DT05GSUcgICAweDAwMDEwQzQyCgovKiBJRCBvZiB0aGUgVHggSUlSIGZpbHRlciBwcmVnYWluIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRFhfSUlSX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG14X2lpcl9maWx0ZXJfcHJlX2dhaW59CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRFhfSUlSX0ZJTFRFUl9QUkVfR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRFhfSUlSX0ZJTFRFUl9QUkVfR0FJTiAgICAweDAwMDEwQzQzCgovKiBJRCBvZiB0aGUgVHggSUlSIGZpbHRlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURYX0lJUl9GSUxURVIgbW9kdWxlLgogKiBAcGFyc3BhY2UgTWVzc2FnZSBwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRteF9paXJfZmlsdGVyX2NmZ19wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRFhfSUlSX0ZJTFRFUl9DT05GSUdfUEFSQU1TLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0NPTkZJR19QQVJBTVMgICAgIDB4MDAwMTBDNDQKCi8qIFN0cnVjdHVyZSBmb3IgZW5hYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUKICogSUlSIGZpbHRlciBtb2R1bGUgb24gdGhlIFR4IHBhdGguCiAqLwoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfRU5BQkxFX0NPTkZJRwogKiBwYXJhbWV0ZXIgaW4gdGhlIFR4IFBhdGggSUlSIFR1bmluZyBGaWx0ZXIgbW9kdWxlLgogKi8KCnN0cnVjdCBhZG14X2lpcl9maWx0ZXJfZW5hYmxlX2NmZyB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGVuYWJsZV9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIElJUiB0dW5pbmcgZmlsdGVyIGlzIGRpc2FibGVkICgwKSBvcgogKiBlbmFibGVkIChub256ZXJvKS4KICovCgp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIHByZWdhaW4gcGFyYW1ldGVyIGZvciB0aGUKICogSUlSIGZpbHRlciBtb2R1bGUgb24gdGhlIFR4IHBhdGguCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX1BSRV9HQUlOCiAqIHBhcmFtZXRlciBpbiB0aGUgVHggUGF0aCBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwoKc3RydWN0IGFkbXhfaWlyX2ZpbHRlcl9wcmVfZ2FpbiB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHByZV9nYWluOwoJLyo8IExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUKICogSUlSIGZpbHRlciBtb2R1bGUgb24gdGhlIFR4IHBhdGguCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0NPTkZJR19QQVJBTVMKICogcGFyYW1ldGVyIGluIHRoZSBUeCBQYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4gXG4KICoJXG4KICogVGhpcyBzdHJ1Y3R1cmUgaXMgZm9sbG93ZWQgYnkgdGhlIEhQRiBJSVIgZmlsdGVyIGNvZWZmaWNpZW50cyBvbgogKiB0aGUgVHggcGF0aCBhcyBmb2xsb3dzOiBcbgogKiAtIFNlcXVlbmNlIG9mIGludDMyX3QgdWxGaWx0ZXJDb2VmZnMuIEVhY2ggYmFuZCBoYXMgZml2ZQogKiBjb2VmZmljaWVudHMsIGVhY2ggaW4gaW50MzJfdCBmb3JtYXQgaW4gdGhlIG9yZGVyIG9mIGIwLCBiMSwgYjIsCiAqIGExLCBhMi4KICogLSBTZXF1ZW5jZSBvZiBpbnQxNl90IHNOdW1TaGlmdEZhY3Rvci4gT25lIGludDE2X3QgcGVyIGJhbmQuIFRoZQogKiBudW1lcmF0b3Igc2hpZnQgZmFjdG9yIGlzIHJlbGF0ZWQgdG8gdGhlIFEgZmFjdG9yIG9mIHRoZSBmaWx0ZXIKICogY29lZmZpY2llbnRzLgogKiAtIFNlcXVlbmNlIG9mIHVpbnQxNl90IHVzUGFuU2V0dGluZy4gT25lIHVpbnQxNl90IGZvciBlYWNoIGJhbmQKICogdG8gaW5kaWNhdGUgaWYgdGhlIGZpbHRlciBpcyBhcHBsaWVkIHRvIGxlZnQgKDApLCByaWdodCAoMSksIG9yCiAqIGJvdGggKDIpIGNoYW5uZWxzLgogKi8Kc3RydWN0IGFkbXhfaWlyX2ZpbHRlcl9jZmdfcGFyYW1zIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbnVtX2JpcXVhZF9zdGFnZXM7Ci8qPCBOdW1iZXIgb2YgYmFuZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMjAKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfbW9kdWxlX2lkcyAqLwoKLyogQGluZ3JvdXAgYXVkaW9fcHBfbW9kdWxlX2lkcwogKglJRCBvZiB0aGUgUUVuc2VtYmxlIG1vZHVsZS4KICoJVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKgktICNBRE1fUEFSQU1fSURfUUVOU0VNQkxFX0VOQUJMRQogKgktICNBRE1fUEFSQU1fSURfUUVOU0VNQkxFX0JBQ0tHQUlOCiAqCS0gI0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfU0VUX05FV19BTkdMRQogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEX1FFTlNFTUJMRSAgICAweDAwMDEwQzU5CgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KLyogSUQgb2YgdGhlIFFFbnNlbWJsZSBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX1FFTlNFTUJMRSBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FkbV9xZW5zZW1ibGVfZW5hYmxlfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURfUUVOU0VNQkxFX0VOQUJMRS50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9RRU5TRU1CTEVfRU5BQkxFICAgMHgwMDAxMEM2MAoKLyogSUQgb2YgdGhlIFFFbnNlbWJsZSBiYWNrIGdhaW4gcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX1FFTlNFTUJMRSBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FkbV9xZW5zZW1ibGVfcGFyYW1fYmFja2dhaW59CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfQkFDS0dBSU4udGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURfUUVOU0VNQkxFX0JBQ0tHQUlOICAgMHgwMDAxMEM2MQoKLyogSUQgb2YgdGhlIFFFbnNlbWJsZSBuZXcgYW5nbGUgcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX1FFTlNFTUJMRSBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FkbV9xZW5zZW1ibGVfcGFyYW1fc2V0X25ld19hbmdsZX0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9TRVRfTkVXX0FOR0xFLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9TRVRfTkVXX0FOR0xFICAgIDB4MDAwMTBDNjIKCi8qIFN0cnVjdHVyZSBmb3IgZW5hYmxpbmcgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUKICogUUVuc2VtYmxlIG1vZHVsZS4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfUUVOU0VNQkxFX0VOQUJMRQogKiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUgUUVuc2VtYmxlIG1vZHVsZS4KICovCnN0cnVjdCBhZG1fcWVuc2VtYmxlX2VuYWJsZSB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGVuYWJsZV9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFFFbnNlbWJsZSBtb2R1bGUgaXMgZGlzYWJsZWQgKDApIG9yIGVuYWJsZWQKICogKG5vbnplcm8pLgogKi8KfSBfX3BhY2tlZDsKCgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBiYWNrZ3JvdW5kIGdhaW4gZm9yIHRoZSBRRW5zZW1ibGUgbW9kdWxlLiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9CQUNLR0FJTgogKiBwYXJhbWV0ZXIgdXNlZCBieQogKiB0aGUgUUVuc2VtYmxlIG1vZHVsZS4KICovCnN0cnVjdCBhZG1fcWVuc2VtYmxlX3BhcmFtX2JhY2tnYWluIHsKCWludDE2X3QgICAgICAgICAgICAgICAgICBiYWNrX2dhaW47Ci8qPCBMaW5lYXIgZ2FpbiBpbiBRMTUgZm9ybWF0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDMyNzY3CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwovKiBTdHJ1Y3R1cmUgZm9yIHNldHRpbmcgYSBuZXcgYW5nbGUgZm9yIHRoZSBRRW5zZW1ibGUgbW9kdWxlLiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9TRVRfTkVXX0FOR0xFCiAqIHBhcmFtZXRlciB1c2VkCiAqIGJ5IHRoZSBRRW5zZW1ibGUgbW9kdWxlLgogKi8Kc3RydWN0IGFkbV9xZW5zZW1ibGVfcGFyYW1fc2V0X25ld19hbmdsZSB7CglpbnQxNl90ICAgICAgICAgICAgICAgICAgICBuZXdfYW5nbGU7Ci8qPCBOZXcgYW5nbGUgaW4gZGVncmVlcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAzNTkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgdGltZV9tczsKLyo8IFRyYW5zaXRpb24gdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gc2V0IHRoZSBuZXcgYW5nbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMzI3NjcKICovCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBRE1fQ01EX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUCQkJCTB4MDAwMTAzNDkKI2RlZmluZSBBRE1fQ01EUlNQX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUCQkJMHgwMDAxMDM1MAojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRU5BQkxFCQkJCQkweDAwMDEwOTA0CiAvKgogICogUGF5bG9hZCBvZiB0aGUgQURNX0NNRF9HRVRfUFBfVE9QT19NT0RVTEVfTElTVCBjb21tYW5kLgogICovCnN0cnVjdCBhZG1fY21kX2dldF9wcF90b3BvX21vZHVsZV9saXN0X3QgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbHN3OwoJLyoKCSAqIFVwcGVyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuCgkgKgoJICoKCSAqIFRoZSBzaXplIG9mIHRoZSBzaGFyZWQgbWVtb3J5LCBpZiBzcGVjaWZpZWQsIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvCgkgKiBjb250YWluIHRoZSBlbnRpcmUgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCwgaW5jbHVkaW5nIHRoZSBtb2R1bGUgSUQsCgkgKiBwYXJhbWV0ZXIgSUQsIHBhcmFtZXRlciBzaXplLCBhbmQgcGFyYW1ldGVyIHZhbHVlcy4KCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9tc3c7CgkvKgoJICogIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhbiBhZGRyZXNzLgoJICoKCSAqIFRoaXMgbWVtb3J5IG1hcCBoYW5kbGUgaXMgcmV0dXJuZWQgYnkgdGhlIGFEU1AgdGhyb3VnaCB0aGUKCSAqICNBRE1fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZC4KCSAqCgkgKiBAdmFsdWVzCgkgKiAtIE5vbi1OVUxMIC0tIE9uIGFja25vd2xlZGdtZW50LCB0aGUgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZHMgYmVnaW4gYXQKCSAqIHRoZSBhZGRyZXNzIHNwZWNpZmllZCAob3V0LW9mLWJhbmQpCgkgKiAtIE5VTEwgLS0gVGhlIGFja25vd2xlZGdtZW50J3MgcGF5bG9hZCBjb250YWlucyB0aGUgcGFyYW1ldGVyIGRhdGEKCSAqIChpbi1iYW5kKSBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKCS8qCgkgKiBNYXhpbXVtIGRhdGEgc2l6ZSBvZiB0aGUgbGlzdCBvZiBtb2R1bGVzLiBUaGlzCgkgKiBmaWVsZCBpcyBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcGFyYW1fbWF4X3NpemU7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwp9IF9fcGFja2VkOwoKLyoKICogUGF5bG9hZCBvZiB0aGUgQURNX0NNRFJTUF9HRVRfUFBfVE9QT19NT0RVTEVfTElTVCBtZXNzYWdlLCB3aGljaCByZXR1cm5zCiAqIG1vZHVsZSBpZHMgaW4gcmVzcG9uc2UgdG8gYW4gQURNX0NNRF9HRVRfUFBfVE9QT19NT0RVTEVfTElTVCBjb21tYW5kLgogKiBJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIGFja25vd2xlZGdtZW50IDxiPm1vZHVsZSBpZAogKiBkYXRhIHZhcmlhYmxlIHBheWxvYWQ8L2I+IGNvbnRhaW5pbmcgdGhlIHByZS9wb3N0cHJvY2Vzc2luZyBtb2R1bGUgaWQKICogdmFsdWVzLiBGb3IgYW4gaW4tYmFuZCBzY2VuYXJpbywgdGhlIHZhcmlhYmxlIHBheWxvYWQgZGVwZW5kcyBvbiB0aGUgc2l6ZQogKiBvZiB0aGUgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGFkbV9jbWRfcnNwX2dldF9wcF90b3BvX21vZHVsZV9saXN0X3QgewoJLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpLiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBzdGF0dXM7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXVkcHJvY190b3BvbG9neV9tb2R1bGVfaWRfaW5mb190IHsKCXVpbnQzMl90CW51bV9tb2R1bGVzOwp9IF9fcGFja2VkOwoKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfbW9kdWxlX2lkcyAqLwoKLyogQGluZ3JvdXAgYXVkaW9fcHBfbW9kdWxlX2lkcwogKiBJRCBvZiB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlIHByZS9wb3N0cHJvY2Vzc2luZyBibG9jay4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAtICNBU01fUEFSQU1fSURfVk9MX0NUUkxfTUFTVEVSX0dBSU4KICogLSAjQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9HQUlOCiAqIC0gI0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NVVRFX0NPTkZJRwogKiAtICNBU01fUEFSQU1fSURfU09GVF9WT0xfU1RFUFBJTkdfUEFSQU1FVEVSUwogKiAtICNBU01fUEFSQU1fSURfU09GVF9QQVVTRV9QQVJBTUVURVJTCiAqIC0gI0FTTV9QQVJBTV9JRF9NVUxUSUNIQU5ORUxfR0FJTgogKiAtICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX01VVEUKICovCiNkZWZpbmUgQVNNX01PRFVMRV9JRF9WT0xfQ1RSTCAgIDB4MDAwMTBCRkUKI2RlZmluZSBBU01fTU9EVUxFX0lEX1ZPTF9DVFJMMiAgMHgwMDAxMDkxMAojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX1ZPTF9DVFJMIEFTTV9NT0RVTEVfSURfVk9MX0NUUkwKCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwovKiBJRCBvZiB0aGUgbWFzdGVyIGdhaW4gcGFyYW1ldGVyIHVzZWQgYnkgdGhlICNBU01fTU9EVUxFX0lEX1ZPTF9DVFJMCiAqIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX3ZvbHVtZV9jdHJsX21hc3Rlcl9nYWlufQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BU01fUEFSQU1fSURfVk9MX0NUUkxfTUFTVEVSX0dBSU4udGV4fQogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfVk9MX0NUUkxfTUFTVEVSX0dBSU4gICAgMHgwMDAxMEJGRgojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfVk9MX0NUUkxfTUFTVEVSX0dBSU4gQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01BU1RFUl9HQUlOCgovKiBJRCBvZiB0aGUgbGVmdC9yaWdodCBjaGFubmVsIGdhaW4gcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX1ZPTF9DVFJMIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX3ZvbHVtZV9jdHJsX2xyX2NoYW5fZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9HQUlOLnRleH0KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX0xSX0NIQU5ORUxfR0FJTiAgICAgMHgwMDAxMEMwMAoKLyogSUQgb2YgdGhlIG11dGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwgbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthc21fdm9sdW1lX2N0cmxfbXV0ZV9jb25maWd9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NVVRFX0NPTkZJRy50ZXh9CiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NVVRFX0NPTkZJRyAgIDB4MDAwMTBDMDEKCi8qIElEIG9mIHRoZSBzb2Z0IHN0ZXBwaW5nIHZvbHVtZSBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX1ZPTF9DVFJMIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX3NvZnRfc3RlcF92b2x1bWVfcGFyYW1zfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BU01fUEFSQU1fSURfU09GVF9WT0xfU1RFUFBJTkdfUEFSQU1FVAogKiBFUlMudGV4fQogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfU09GVF9WT0xfU1RFUFBJTkdfUEFSQU1FVEVSUyAgMHgwMDAxMEMyOQojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfU09GVF9WT0xfU1RFUFBJTkdfUEFSQU1FVEVSU1wKCQkJQVNNX1BBUkFNX0lEX1NPRlRfVk9MX1NURVBQSU5HX1BBUkFNRVRFUlMKCi8qIElEIG9mIHRoZSBzb2Z0IHBhdXNlIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwKICogbW9kdWxlLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfU09GVF9QQVVTRV9QQVJBTUVURVJTICAgMHgwMDAxMEQ2QQoKLyogSUQgb2YgdGhlIG11bHRpcGxlLWNoYW5uZWwgdm9sdW1lIGNvbnRyb2wgcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9WT0xfQ1RSTCBtb2R1bGUuCiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9NVUxUSUNIQU5ORUxfR0FJTiAgMHgwMDAxMDcxMwoKLyogSUQgb2YgdGhlIG11bHRpcGxlLWNoYW5uZWwgbXV0ZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwgbW9kdWxlLgogKi8KCiNkZWZpbmUgQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9NVVRFICAweDAwMDEwNzE0CgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBtYXN0ZXIgZ2FpbiBwYXJhbWV0ZXIgZm9yIGEgdm9sdW1lIGNvbnRyb2wKICogbW9kdWxlLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTgogKiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLgogKi8KCgoKc3RydWN0IGFzbV92b2x1bWVfY3RybF9tYXN0ZXJfZ2FpbiB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbWFzdGVyX2dhaW47CgkvKiBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0LiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KfSBfX3BhY2tlZDsKCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX2xyX2NoYW5fZ2FpbiB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGxfY2hhbl9nYWluOwoJLyo8IExpbmVhciBnYWluIGluIFExMyBmb3JtYXQgZm9yIHRoZSBsZWZ0IGNoYW5uZWwuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByX2NoYW5fZ2FpbjsKCS8qPCBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0IGZvciB0aGUgcmlnaHQgY2hhbm5lbC4qLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIG11dGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIGEKICogdm9sdW1lIGNvbnRyb2wgbW9kdWxlLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NVVRFX0NPTkZJRwogKiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLgogKi8KCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX211dGVfY29uZmlnIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBtdXRlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBtdXRlIGlzIGRpc2FibGVkICgwKSBvciBlbmFibGVkIChub256ZXJvKS4qLwoKfSBfX3BhY2tlZDsKCi8qCiAqIFN1cHBvcnRlZCBwYXJhbWV0ZXJzIGZvciBhIHNvZnQgc3RlcHBpbmcgbGluZWFyIHJhbXBpbmcgY3VydmUuCiAqLwojZGVmaW5lIEFTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0xJTkVBUiAgMAoKLyoKICogRXhwb25lbnRpYWwgcmFtcGluZyBjdXJ2ZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfRVhQICAgIDEKCi8qCiAqIExvZ2FyaXRobWljIHJhbXBpbmcgY3VydmUuCiAqLwojZGVmaW5lIEFTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0xPRyAgICAyCgovKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgc29mdCBzdGVwcGluZyB2b2x1bWUgcGFyYW1ldGVycy4gKi8KCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTCiAqIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLgogKi8Kc3RydWN0IGFzbV9zb2Z0X3N0ZXBfdm9sdW1lX3BhcmFtcyB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcGVyaW9kOwovKjwgUGVyaW9kIGluIG1pbGxpc2Vjb25kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAxNTAwMAogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHN0ZXA7Ci8qPCBTdGVwIGluIG1pY3Jvc2Vjb25kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAxNTAwMDAwMAogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHJhbXBpbmdfY3VydmU7Ci8qPCBSYW1waW5nIGN1cnZlIHR5cGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0xJTkVBUgogKiAtICNBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9FWFAKICogLSAjQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTE9HCiAqLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBzb2Z0IHBhdXNlIHBhcmFtZXRlcnMuICovCgoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9TT0ZUX1BBVVNFX1BBUkFNRVRFUlMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCnN0cnVjdCBhc21fc29mdF9wYXVzZV9wYXJhbXMgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGVuYWJsZV9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgc29mdCBwYXVzZSBpcyBkaXNhYmxlZCAoMCkgb3IgZW5hYmxlZAogKiAobm9uemVybykuCiAqLwoKCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBwZXJpb2Q7Ci8qPCBQZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgc3RlcDsKLyo8IFN0ZXAgaW4gbWljcm9zZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwMDAwCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcmFtcGluZ19jdXJ2ZTsKLyo8IFJhbXBpbmcgY3VydmUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0xJTkVBUgogKiAtICNBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9FWFAKICogLSAjQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTE9HCiAqLwp9IF9fcGFja2VkOwoKCi8qIE1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzLiovCiNkZWZpbmUgVk9MVU1FX0NPTlRST0xfTUFYX0NIQU5ORUxTICAgICAgICAgICAgICAgICAgICAgICA4CgovKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgb25lIGNoYW5uZWwgdHlwZSAtIGdhaW4gcGFpci4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9HQUlOIGNoYW5uZWwKICogdHlwZS9nYWluIHBhaXJzIHVzZWQgYnkgdGhlIFZvbHVtZSBDb250cm9sIG1vZHVsZS4gXG4gXG4gVGhpcwogKiBzdHJ1Y3R1cmUgaW1tZWRpYXRlbHkgZm9sbG93cyB0aGUKICogYXNtX3ZvbHVtZV9jdHJsX211bHRpY2hhbm5lbF9nYWluIHN0cnVjdHVyZS4KICovCgoKc3RydWN0IGFzbV92b2x1bWVfY3RybF9jaGFubmVsdHlwZV9nYWluX3BhaXIgewoJdWludDhfdCAgICAgICAgICAgICAgICAgICBjaGFubmVsdHlwZTsKCS8qCgkgKiBDaGFubmVsIHR5cGUgZm9yIHdoaWNoIHRoZSBnYWluIHNldHRpbmcgaXMgdG8gYmUgYXBwbGllZC4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6CgkgKiAtICNQQ01fQ0hBTk5FTF9MCgkgKiAtICNQQ01fQ0hBTk5FTF9SCgkgKiAtICNQQ01fQ0hBTk5FTF9DCgkgKiAtICNQQ01fQ0hBTk5FTF9MUwoJICogLSAjUENNX0NIQU5ORUxfUlMKCSAqIC0gI1BDTV9DSEFOTkVMX0xGRQoJICogLSAjUENNX0NIQU5ORUxfQ1MKCSAqIC0gI1BDTV9DSEFOTkVMX0xCCgkgKiAtICNQQ01fQ0hBTk5FTF9SQgoJICogLSAjUENNX0NIQU5ORUxTCgkgKiAtICNQQ01fQ0hBTk5FTF9DVkgKCSAqIC0gI1BDTV9DSEFOTkVMX01TCgkgKiAtICNQQ01fQ0hBTk5FTF9GTEMKCSAqIC0gI1BDTV9DSEFOTkVMX0ZSQwoJICogLSAjUENNX0NIQU5ORUxfUkxDCgkgKiAtICNQQ01fQ0hBTk5FTF9SUkMKCSAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwoJLyogQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCgoJdWludDhfdCAgICAgICAgICAgICAgICAgICByZXNlcnZlZDI7CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMzsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZ2FpbjsKCS8qCgkgKiBHYWluIHZhbHVlIGZvciB0aGlzIGNoYW5uZWwgaW4gUTI4IGZvcm1hdC4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IEFueQoJICovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgbXVsdGljaGFubmVsIGdhaW4gY29tbWFuZCAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX0dBSU4KICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfbXVsdGljaGFubmVsX2dhaW4gewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKCS8qCgkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgZm9yIHdoaWNoIGdhaW4gdmFsdWVzIGFyZSBwcm92aWRlZC4gQW55CgkgKiBjaGFubmVscyBwcmVzZW50IGluIHRoZSBkYXRhIGZvciB3aGljaCBnYWluIGlzIG5vdCBwcm92aWRlZCBhcmUKCSAqIHNldCB0byB1bml0eSBnYWluLgoJICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CgkgKi8KCglzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX2NoYW5uZWx0eXBlX2dhaW5fcGFpcgoJCWdhaW5fZGF0YVtWT0xVTUVfQ09OVFJPTF9NQVhfQ0hBTk5FTFNdOwoJLyogQXJyYXkgb2YgY2hhbm5lbCB0eXBlL2dhaW4gcGFpcnMuKi8KfSBfX3BhY2tlZDsKCgovKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgb25lIGNoYW5uZWwgdHlwZSAtIG11dGUgcGFpci4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9NVVRFIGNoYW5uZWwKICogdHlwZS9tdXRlIHNldHRpbmcgcGFpcnMgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLiBcbiBcbgogKiBUaGlzIHN0cnVjdHVyZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZQogKiBhc21fdm9sdW1lX2N0cmxfbXVsdGljaGFubmVsX211dGUgc3RydWN0dXJlLgogKi8KCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX2NoYW5uZWx5cGVfbXV0ZV9wYWlyIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdWludDhfdCAgICAgICAgICAgICAgICAgICBjaGFubmVseXBlOwovKjwgQ2hhbm5lbCB0eXBlIGZvciB3aGljaCB0aGUgbXV0ZSBzZXR0aW5nIGlzIHRvIGJlIGFwcGxpZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI1BDTV9DSEFOTkVMX0wKICogLSAjUENNX0NIQU5ORUxfUgogKiAtICNQQ01fQ0hBTk5FTF9DCiAqIC0gI1BDTV9DSEFOTkVMX0xTCiAqIC0gI1BDTV9DSEFOTkVMX1JTCiAqIC0gI1BDTV9DSEFOTkVMX0xGRQogKiAtICNQQ01fQ0hBTk5FTF9DUwogKiAtICNQQ01fQ0hBTk5FTF9MQgogKiAtICNQQ01fQ0hBTk5FTF9SQgogKiAtICNQQ01fQ0hBTk5FTFMKICogLSAjUENNX0NIQU5ORUxfQ1ZICiAqIC0gI1BDTV9DSEFOTkVMX01TCiAqIC0gI1BDTV9DSEFOTkVMX0ZMQwogKiAtICNQQ01fQ0hBTk5FTF9GUkMKICogLSAjUENNX0NIQU5ORUxfUkxDCiAqIC0gI1BDTV9DSEFOTkVMX1JSQwogKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMzsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG11dGU7Ci8qPCBNdXRlIHNldHRpbmcgZm9yIHRoaXMgY2hhbm5lbC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwID0gVW5tdXRlCiAqIC0gTm9uemVybyA9IE11dGUKICovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgbXVsdGljaGFubmVsIG11dGUgY29tbWFuZCAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9NVVRFCiAqIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLgogKi8KCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX211bHRpY2hhbm5lbF9tdXRlIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qPCBOdW1iZXIgb2YgY2hhbm5lbHMgZm9yIHdoaWNoIG11dGUgY29uZmlndXJhdGlvbiBpcwogKiBwcm92aWRlZC4gQW55IGNoYW5uZWxzIHByZXNlbnQgaW4gdGhlIGRhdGEgZm9yIHdoaWNoIG11dGUKICogY29uZmlndXJhdGlvbiBpcyBub3QgcHJvdmlkZWQgYXJlIHNldCB0byB1bm11dGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOAogKi8KCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfY2hhbm5lbHlwZV9tdXRlX3BhaXIKCQkJCW11dGVfZGF0YVtWT0xVTUVfQ09OVFJPTF9NQVhfQ0hBTk5FTFNdOwoJLyo8IEFycmF5IG9mIGNoYW5uZWwgdHlwZS9tdXRlIHNldHRpbmcgcGFpcnMuKi8KfSBfX3BhY2tlZDsKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCgovKiBhdWRpb19wcF9tb2R1bGVfaWRzCiAqIElEIG9mIHRoZSBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9FTkFCTEVfQ09ORklHCiAqIC0gI0FTTV9QQVJBTV9JRF9JSVJVTklOR19GSUxURVJfUFJFX0dBSU4KICogLSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9DT05GSUdfUEFSQU1TCiAqLwojZGVmaW5lIEFTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSICAgMHgwMDAxMEMwMgoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBJSVIgdHVuaW5nIGZpbHRlciBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX0lJUlVOSU5HX0ZJTFRFUiBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FzbV9paXJ1bmluZ19maWx0ZXJfZW5hYmxlfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0VOQUJMRV9DTwogKiBORklHLnRleH0KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9FTkFCTEVfQ09ORklHICAgMHgwMDAxMEMwMwoKLyogSUQgb2YgdGhlIElJUiB0dW5pbmcgZmlsdGVyIHByZWdhaW4gcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX0lJUlVOSU5HX0ZJTFRFUiBtb2R1bGUuCiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9JSVJVTklOR19GSUxURVJfUFJFX0dBSU4gIDB4MDAwMTBDMDQKCi8qIElEIG9mIHRoZSBJSVIgdHVuaW5nIGZpbHRlciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSIG1vZHVsZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9DT05GSUdfUEFSQU1TICAweDAwMDEwQzA1CgovKiBTdHJ1Y3R1cmUgZm9yIGFuIGVuYWJsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IgYW4KICogSUlSIHR1bmluZyBmaWx0ZXIgbW9kdWxlLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9JSVJVTklOR19GSUxURVJfRU5BQkxFX0NPTkZJRwogKiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUgSUlSIFR1bmluZyBGaWx0ZXIgbW9kdWxlLgogKi8Kc3RydWN0IGFzbV9paXJ1bmluZ19maWx0ZXJfZW5hYmxlIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgSUlSIHR1bmluZyBmaWx0ZXIgaXMgZGlzYWJsZWQgKDApIG9yCiAqIGVuYWJsZWQgKDEpLgogKi8KfSBfX3BhY2tlZDsKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIHByZWdhaW4gcGFyYW1ldGVyIGZvciBhbiBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUuICovCgoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9JSVJVTklOR19GSUxURVJfUFJFX0dBSU4KICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwpzdHJ1Y3QgYXNtX2lpcnVuaW5nX2ZpbHRlcl9wcmVnYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcHJlZ2FpbjsKCS8qPCBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0LiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciBhbiBJSVIgdHVuaW5nIGZpbHRlcgogKiBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9DT05GSUdfUEFSQU1TCiAqIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgSUlSIFR1bmluZyBGaWx0ZXIgbW9kdWxlLiBcbgogKiBcbgogKiBUaGlzIHN0cnVjdHVyZSBpcyBmb2xsb3dlZCBieSB0aGUgSUlSIGZpbHRlciBjb2VmZmljaWVudHM6IFxuCiAqIC0gU2VxdWVuY2Ugb2YgaW50MzJfdCBGaWx0ZXJDb2VmZnMgXG4KICogRml2ZSBjb2VmZmljaWVudHMgZm9yIGVhY2ggYmFuZC4gRWFjaCBjb2VmZmljaWVudCBpcyBpbiBpbnQzMl90IGZvcm1hdCwgaW4KICogdGhlIG9yZGVyIG9mIGIwLCBiMSwgYjIsIGExLCBhMi4KICogLSBTZXF1ZW5jZSBvZiBpbnQxNl90IE51bVNoaWZ0RmFjdG9yIFxuCiAqIE9uZSBpbnQxNl90IHBlciBiYW5kLiBUaGUgbnVtZXJhdG9yIHNoaWZ0IGZhY3RvciBpcyByZWxhdGVkIHRvIHRoZSBRCiAqIGZhY3RvciBvZiB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cy4KICogLSBTZXF1ZW5jZSBvZiB1aW50MTZfdCBQYW5TZXR0aW5nIFxuCiAqIE9uZSB1aW50MTZfdCBwZXIgYmFuZCwgaW5kaWNhdGluZyBpZiB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8gbGVmdCAoMCksCiAqIHJpZ2h0ICgxKSwgb3IgYm90aCAoMikgY2hhbm5lbHMuCiAqLwpzdHJ1Y3QgYXNtX2lpcl9maWx0ZXJfY29uZmlnX3BhcmFtcyB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIG51bV9iaXF1YWRfc3RhZ2VzOwovKjwgTnVtYmVyIG9mIGJhbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDIwCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCi8qIGF1ZGlvX3BwX21vZHVsZV9pZHMKICogSUQgb2YgdGhlIE11bHRpYmFuZCBEeW5hbWljIFJhbmdlIENvbnRyb2wgKE1CRFJDKSBtb2R1bGUgb24gdGhlIFR4L1J4CiAqIHBhdGhzLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FTTV9QQVJBTV9JRF9NQkRSQ19FTkFCTEUKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVMKICovCiNkZWZpbmUgQVNNX01PRFVMRV9JRF9NQkRSQyAgIDB4MDAwMTBDMDYKCi8qIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwovKiBJRCBvZiB0aGUgTUJEUkMgZW5hYmxlIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSAjQVNNX01PRFVMRV9JRF9NQkRSQyBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FzbV9tYmRyY19lbmFibGV9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9NQkRSQ19FTkFCTEUudGV4fQogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfTUJEUkNfRU5BQkxFICAgMHgwMDAxMEMwNwoKLyogSUQgb2YgdGhlIE1CRFJDIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9NQkRSQyBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FzbV9tYmRyY19jb25maWdfcGFyYW1zfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUy50ZXh9CiAqCiAqIEBwYXJzcGFjZSBTdWItYmFuZCBEUkMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiAqIEBzdHJ1Y3R1cmV7YXNtX3N1YmJhbmRfZHJjX2NvbmZpZ19wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TX3N1YmJhbmRfRFJDLnRleH0KICoKICogQGtlZXB7Nn0KICogVG8gb2J0YWluIGxlZ2FjeSBBRFJDIGZyb20gTUJEUkMsIHVzZSB0aGUgY2FsaWJyYXRpb24gdG9vbCB0bzoKICoKICogLSBFbmFibGUgTUJEUkMgKEVuYWJsZUZsYWcgPSBUUlVFKQogKiAtIFNldCBudW1iZXIgb2YgYmFuZHMgdG8gMSAodWlOdW1CYW5kcyA9IDEpCiAqIC0gRW5hYmxlIHRoZSBmaXJzdCBNQkRSQyBiYW5kIChEcmNNb2RlWzBdID0gRFJDX0VOQUJMRUQgPSAxKQogKiAtIENsZWFyIHRoZSBmaXJzdCBiYW5kIG11dGUgZmxhZyAoTXV0ZUZsYWdbMF0gPSAwKQogKiAtIFNldCB0aGUgZmlyc3QgYmFuZCBtYWtldXAgZ2FpbiB0byB1bml0eSAoY29tcE1ha2VVcEdhaW5bMF0gPSAweDIwMDApCiAqIC0gVXNlIHRoZSBsZWdhY3kgQURSQyBwYXJhbWV0ZXJzIHRvIGNhbGlicmF0ZSB0aGUgcmVzdCBvZiB0aGUgTUJEUkMKICogcGFyYW1ldGVycy4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVMgIDB4MDAwMTBDMDgKCi8qIGVuZF9hZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwoKLyogYXVkaW9fcHBfbW9kdWxlX2lkcwogKiBJRCBvZiB0aGUgTU1CRFJDIG1vZHVsZSB2ZXJzaW9uIDIgcHJlL3Bvc3Rwcm9jZXNzaW5nIGJsb2NrLgogKiBUaGlzIG1vZHVsZSBkaWZmZXJzIGZyb20gdGhlIG9yaWdpbmFsIE1CRFJDICgjQVNNX01PRFVMRV9JRF9NQkRSQykgaW4KICogdGhlIGxlbmd0aCBvZiB0aGUgZmlsdGVycyB1c2VkIGluIGVhY2ggc3ViLWJhbmQuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEOgogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNU19JTVBST1ZFRF9GSUxUQkFOS19WMgogKi8KI2RlZmluZSBBU01fTU9EVUxFX0lEX01CRFJDVjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA3MEIKCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwovKiBJRCBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX01CRFJDVjIgbW9kdWxlIGZvciB0aGUgaW1wcm92ZWQgZmlsdGVyIHN0cnVjdHVyZQogKiBvZiB0aGUgTUJEUkMgdjIgcHJlL3Bvc3Rwcm9jZXNzaW5nIGJsb2NrLgogKiBUaGUgdXBkYXRlIHRvIHRoaXMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZnJvbSB0aGUgb3JpZ2luYWwKICogTUJEUkMgaXMgdGhlIG51bWJlciBvZiBmaWx0ZXIgY29lZmZpY2llbnRzIGluIHRoZSBmaWx0ZXIKICogc3RydWN0dXJlLiBUaGUgc2VxdWVuY2UgZm9yIGlzIGFzIGZvbGxvd3M6CiAqIC0gMSBiYW5kID0gMCBGSVIgY29lZmZpY2llbnQgKyAxIG11dGUgZmxhZyArIHVpbnQxNl90IHBhZGRpbmcKICogLSAyIGJhbmRzID0gMTQxIEZJUiBjb2VmZmljaWVudHMgKyAyIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gMyBiYW5kcyA9IDE0MSs4MSBGSVIgY29lZmZpY2llbnRzICsgMyBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKiAtIDQgYmFuZHMgPSAxNDErODErNjEgRklSIGNvZWZmaWNpZW50cyArIDQgbXV0ZSBmbGFncyArIHVpbnQxNl90CiAqIHBhZGRpbmcKICogLSA1IGJhbmRzID0gMTQxKzgxKzYxKzYxIEZJUiBjb2VmZmljaWVudHMgKyA1IG11dGUgZmxhZ3MgKwogKiB1aW50MTZfdCBwYWRkaW5nCiAqCVRoaXMgYmxvY2sgdXNlcyB0aGUgc2FtZSBwYXJhbWV0ZXIgc3RydWN0dXJlIGFzCiAqCSNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUy4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVNfSU1QUk9WRURfRklMVEJBTktfVjIgXAoJCQkJCQkJCTB4MDAwMTA3MEMKCiNkZWZpbmUgQVNNX01PRFVMRV9JRF9NQkRSQ1YzCQkJCQkweDAwMDEwOTBCCi8qCiAqIElEIG9mIHRoZSBNTUJEUkMgbW9kdWxlIHZlcnNpb24gMyBwcmUvcG9zdHByb2Nlc3NpbmcgYmxvY2suCiAqIFRoaXMgbW9kdWxlIGRpZmZlcnMgZnJvbSBNQkRSQ3YyICgjQVNNX01PRFVMRV9JRF9NQkRSQ1YyKSBpbgogKiB0aGF0IGl0IHN1cHBvcnRzIGJvdGggMTYtIGFuZCAyNC1iaXQgZGF0YS4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSUQ6CiAqIC0gI0FTTV9QQVJBTV9JRF9NQkRSQ19FTkFCTEUKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVMKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVNfVjMKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0ZJTFRFUl9YT1ZFUl9GUkVRUwogKi8KCi8qIFN0cnVjdHVyZSBmb3IgdGhlIGVuYWJsZSBwYXJhbWV0ZXIgZm9yIGFuIE1CRFJDIG1vZHVsZS4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX01CRFJDX0VOQUJMRSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogTUJEUkMgbW9kdWxlLgogKi8Kc3RydWN0IGFzbV9tYmRyY19lbmFibGUgewoJdWludDMyX3QgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyo8IFNwZWNpZmllcyB3aGV0aGVyIE1CRFJDIGlzIGRpc2FibGVkICgwKSBvciBlbmFibGVkIChub256ZXJvKS4qLwp9IF9fcGFja2VkOwoKLyogU3RydWN0dXJlIGZvciB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBhbiBNQkRSQyBtb2R1bGUuICovCgoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TCiAqIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgTUJEUkMgbW9kdWxlLiBcbiBcbiBGb2xsb3dpbmcgdGhpcwogKiBzdHJ1Y3R1cmUgaXMgdGhlIHBheWxvYWQgZm9yIHN1Yi1iYW5kIERSQyBjb25maWd1cmF0aW9uCiAqIHBhcmFtZXRlcnMgKGFzbV9zdWJiYW5kX2RyY19jb25maWdfcGFyYW1zKS4gVGhpcyBzdWItYmFuZAogKiBzdHJ1Y3R1cmUgbXVzdCBiZSByZXBlYXRlZCBmb3IgZWFjaCBiYW5kLgogKi8KCgpzdHJ1Y3QgYXNtX21iZHJjX2NvbmZpZ19wYXJhbXMgewoJdWludDE2X3QgICAgICAgICAgICAgICAgICBudW1fYmFuZHM7Ci8qPCBOdW1iZXIgb2YgYmFuZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gNQogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGxpbWl0ZXJocmVzaG9sZDsKLyo8IFRocmVzaG9sZCBpbiBkZWNpYmVscyBmb3IgdGhlIGxpbWl0ZXIgb3V0cHV0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtNzIgdG8gMTggXG4KICogUmVjb21tZW5kZWQgdmFsdWU6IDM5OTQgKC0wLjIyIGRiIGluIFEzLjEyIGZvcm1hdCkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBsaW1pdGVyX21ha2V1cF9nYWluOwovKjwgTWFrZXVwIGdhaW4gaW4gZGVjaWJlbHMgZm9yIHRoZSBsaW1pdGVyIG91dHB1dC4KICogU3VwcG9ydGVkIHZhbHVlczogLTQyIHRvIDQyIFxuCiAqIFJlY29tbWVuZGVkIHZhbHVlOiAyNTYgKDAgZEIgaW4gUTcuOCBmb3JtYXQpCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgbGltaXRlcl9nYzsKLyo8IExpbWl0ZXIgZ2FpbiByZWNvdmVyeSBjb2VmZmljaWVudC4KICogU3VwcG9ydGVkIHZhbHVlczogMC41IHRvIDAuOTkgXG4KICogUmVjb21tZW5kZWQgdmFsdWU6IDMyNDQwICgwLjk5IGluIFExNSBmb3JtYXQpCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgbGltaXRlcl9kZWxheTsKLyo8IExpbWl0ZXIgZGVsYXkgaW4gc2FtcGxlcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAxMCBcbgogKiBSZWNvbW1lbmRlZCB2YWx1ZTogMjYyICgwLjAwOCBzYW1wbGVzIGluIFExNSBmb3JtYXQpCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgbGltaXRlcl9tYXhfd2FpdDsKLyo8IE1heGltdW0gbGltaXRlciB3YWl0aW5nIHRpbWUgaW4gc2FtcGxlcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAxMCBcbgogKiBSZWNvbW1lbmRlZCB2YWx1ZTogMjYyICgwLjAwOCBzYW1wbGVzIGluIFExNSBmb3JtYXQpCiAqLwp9IF9fcGFja2VkOwoKLyogRFJDIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIGZvciBlYWNoIHN1Yi1iYW5kIG9mIGFuIE1CRFJDIG1vZHVsZS4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVMgRFJDCiAqIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgZWFjaCBzdWItYmFuZCBpbiB0aGUgTUJEUkMgbW9kdWxlLgogKiBBZnRlciB0aGlzIERSQyBzdHJ1Y3R1cmUgaXMgY29uZmlndXJlZCBmb3IgdmFsaWQgYmFuZHMsIHRoZSBuZXh0CiAqIE1CRFJDIHNldHBhcmFtcyBleHBlY3RzIHRoZSBzZXF1ZW5jZSBvZiBzdWItYmFuZCBNQkRSQyBmaWx0ZXIKICogY29lZmZpY2llbnRzICh0aGUgbGVuZ3RoIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBiYW5kcykgcGx1cyB0aGUKICogbXV0ZSBmbGFnIGZvciB0aGF0IGJhbmQgcGx1cyB1aW50MTZfdCBwYWRkaW5nLgogKgogKiBAa2VlcHsxMH0KICogVGhlIGZpbHRlciBjb2VmZmljaWVudCBhbmQgbXV0ZSBmbGFnIGFyZSBvZiB0eXBlIGludDE2X3Q6CiAqIC0gRklSIGNvZWZmaWNpZW50ID0gaW50MTZfdCBmaXJGaWx0ZXIKICogLSBNdXRlIGZsYWcgPSBpbnQxNl90IGZNdXRlRmxhZwogKgogKiBUaGUgc2VxdWVuY2UgaXMgYXMgZm9sbG93czoKICogLSAxIGJhbmQgPSAwIEZJUiBjb2VmZmljaWVudCArIDEgbXV0ZSBmbGFnICsgdWludDE2X3QgcGFkZGluZwogKiAtIDIgYmFuZHMgPSA5NyBGSVIgY29lZmZpY2llbnRzICsgMiBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKiAtIDMgYmFuZHMgPSA5NyszMyBGSVIgY29lZmZpY2llbnRzICsgMyBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKiAtIDQgYmFuZHMgPSA5NyszMyszMyBGSVIgY29lZmZpY2llbnRzICsgNCBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKiAtIDUgYmFuZHMgPSA5NyszMyszMyszMyBGSVIgY29lZmZpY2llbnRzICsgNSBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKgogKiBGb3IgaW1wcm92ZWQgZmlsdGVyYmFuaywgdGhlIHNlcXVlbmNlIGlzIGFzIGZvbGxvd3M6CiAqIC0gMSBiYW5kID0gMCBGSVIgY29lZmZpY2llbnQgKyAxIG11dGUgZmxhZyArIHVpbnQxNl90IHBhZGRpbmcKICogLSAyIGJhbmRzID0gMTQxIEZJUiBjb2VmZmljaWVudHMgKyAyIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gMyBiYW5kcyA9IDE0MSs4MSBGSVIgY29lZmZpY2llbnRzICsgMyBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKiAtIDQgYmFuZHMgPSAxNDErODErNjEgRklSIGNvZWZmaWNpZW50cyArIDQgbXV0ZSBmbGFncyArIHVpbnQxNl90IHBhZGRpbmcKICogLSA1IGJhbmRzID0gMTQxKzgxKzYxKzYxIEZJUiBjb2VmZmljaWVudHMgKyA1IG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqLwpzdHJ1Y3QgYXNtX3N1YmJhbmRfZHJjX2NvbmZpZ19wYXJhbXMgewoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBkcmNfc3RlcmVvX2xpbmtlZF9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgYWxsIHN0ZXJlbyBjaGFubmVscyBoYXZlIHRoZSBzYW1lIGFwcGxpZWQKICogZHluYW1pY3MgKDEpIG9yIGlmIHRoZXkgcHJvY2VzcyB0aGVpciBkeW5hbWljcyBpbmRlcGVuZGVudGx5ICgwKS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIE5vdCBsaW5rZWQKICogLSAxIC0tIExpbmtlZAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGRyY19tb2RlOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgRFJDIG1vZGUgaXMgYnlwYXNzZWQgZm9yIHN1Yi1iYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIERpc2FibGVkCiAqIC0gMSAtLSBFbmFibGVkCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZHJjX2Rvd25fc2FtcGxlX2xldmVsOwovKjwgRFJDIGRvd24gc2FtcGxlIGxldmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBAZ2UgMQogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGRyY19kZWxheTsKLyo8IERSQyBkZWxheSBpbiBzYW1wbGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDEyMDAKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICBkcmNfcm1zaW1lX2F2Z19jb25zdDsKLyo8IFJNUyBzaWduYWwgZW5lcmd5IHRpbWUtYXZlcmFnaW5nIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDJeMTYtMQogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGRyY19tYWtldXBfZ2FpbjsKLyo8IERSQyBtYWtldXAgZ2FpbiBpbiBkZWNpYmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMjU4IHRvIDY0OTE3CiAqLwoJLyogRG93biBleHBhbmRlciBzZXR0aW5ncyAqLwoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBkb3duX2V4cGRyaHJlc2hvbGQ7Ci8qPCBEb3duIGV4cGFuZGVyIHRocmVzaG9sZC4KICogU3VwcG9ydGVkIFE3IGZvcm1hdCB2YWx1ZXM6IDEzMjAgdG8gdXBfY21wc3JocmVzaG9sZAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJfc2xvcGU7Ci8qPCBEb3duIGV4cGFuZGVyIHNsb3BlLgogKiBTdXBwb3J0ZWQgUTggZm9ybWF0IHZhbHVlczogLTMyNzY4IHRvIDAuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZG93bl9leHBkcl9hdHRhY2s7Ci8qPCBEb3duIGV4cGFuZGVyIGF0dGFjayBjb25zdGFudC4KICogU3VwcG9ydGVkIFEzMSBmb3JtYXQgdmFsdWVzOiAxOTY4NDQgdG8gMl4zMS4KICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkb3duX2V4cGRyX3JlbGVhc2U7Ci8qPCBEb3duIGV4cGFuZGVyIHJlbGVhc2UgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODUgdG8gMl4zMQogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJfaHlzdGVyZXNpczsKLyo8IERvd24gZXhwYW5kZXIgaHlzdGVyZXNpcyBjb25zdGFudC4KICogU3VwcG9ydGVkIFExNCBmb3JtYXQgdmFsdWVzOiAxIHRvIDMyNjkwCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCgoJaW50MzJfdCAgICAgICAgICAgICAgICAgICBkb3duX2V4cGRyX21pbl9nYWluX2RiOwovKjwgRG93biBleHBhbmRlciBtaW5pbXVtIGdhaW4uCiAqIFN1cHBvcnRlZCBRMjMgZm9ybWF0IHZhbHVlczogLTgwNTMwNjM2OCB0byAwLgogKi8KCgkvKiBVcCBjb21wcmVzc29yIHNldHRpbmdzICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICB1cF9jbXBzcmhyZXNob2xkOwovKjwgVXAgY29tcHJlc3NvciB0aHJlc2hvbGQuCiAqIFN1cHBvcnRlZCBRNyBmb3JtYXQgdmFsdWVzOiBkb3duX2V4cGRyaHJlc2hvbGQgdG8KICogZG93bl9jbXBzcmhyZXNob2xkLgogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHVwX2NtcHNyX3Nsb3BlOwovKjwgVXAgY29tcHJlc3NvciBzbG9wZS4KICogU3VwcG9ydGVkIFExNiBmb3JtYXQgdmFsdWVzOiAwIHRvIDY0ODgxLgogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHVwX2NtcHNyX2F0dGFjazsKLyo8IFVwIGNvbXByZXNzb3IgYXR0YWNrIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTMxIGZvcm1hdCB2YWx1ZXM6IDE5Njg0NCB0byAyXjMxLgogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHVwX2NtcHNyX3JlbGVhc2U7Ci8qPCBVcCBjb21wcmVzc29yIHJlbGVhc2UgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODUgdG8gMl4zMS4KICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICB1cF9jbXBzcl9oeXN0ZXJlc2lzOwovKjwgVXAgY29tcHJlc3NvciBoeXN0ZXJlc2lzIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTE0IGZvcm1hdCB2YWx1ZXM6IDEgdG8gMzI2OTAuCiAqLwoKCS8qIERvd24gY29tcHJlc3NvciBzZXR0aW5ncyAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZG93bl9jbXBzcmhyZXNob2xkOwovKjwgRG93biBjb21wcmVzc29yIHRocmVzaG9sZC4KICogU3VwcG9ydGVkIFE3IGZvcm1hdCB2YWx1ZXM6IHVwX2NtcHNyaHJlc2hvbGQgdG8gMTE1NjAuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgZG93bl9jbXBzcl9zbG9wZTsKLyo8IERvd24gY29tcHJlc3NvciBzbG9wZS4KICogU3VwcG9ydGVkIFExNiBmb3JtYXQgdmFsdWVzOiAwIHRvIDY0ODgxLgogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkMTsKLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZG93bl9jbXBzcl9hdHRhY2s7Ci8qPCBEb3duIGNvbXByZXNzb3IgYXR0YWNrIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTMxIGZvcm1hdCB2YWx1ZXM6IDE5Njg0NCB0byAyXjMxLgogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRvd25fY21wc3JfcmVsZWFzZTsKLyo8IERvd24gY29tcHJlc3NvciByZWxlYXNlIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTMxIGZvcm1hdCB2YWx1ZXM6IDE5Njg1IHRvIDJeMzEuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgZG93bl9jbXBzcl9oeXN0ZXJlc2lzOwovKjwgRG93biBjb21wcmVzc29yIGh5c3RlcmVzaXMgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMTQgdmFsdWVzOiAxIHRvIDMyNjkwLgogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsKLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NT0RVTEVfSURfRVFVQUxJWkVSICAgICAgICAgICAgMHgwMDAxMEMyNwojZGVmaW5lIEFTTV9QQVJBTV9JRF9FUVVBTElaRVJfUEFSQU1FVEVSUyAgMHgwMDAxMEMyOAoKI2RlZmluZSBBU01fTUFYX0VRX0JBTkRTIDEyCgpzdHJ1Y3QgYXNtX2VxX3Blcl9iYW5kX3BhcmFtcyB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGJhbmRfaWR4OwovKjwgQmFuZCBpbmRleC4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAxMQogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGZpbHRlcnlwZTsKLyo8IFR5cGUgb2YgZmlsdGVyLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fUEFSQU1fRVFZUEVfTk9ORQogKiAtICNBU01fUEFSQU1fRVFfQkFTU19CT09TVAogKiAtICNBU01fUEFSQU1fRVFfQkFTU19DVVQKICogLSAjQVNNX1BBUkFNX0VRUkVCTEVfQk9PU1QKICogLSAjQVNNX1BBUkFNX0VRUkVCTEVfQ1VUCiAqIC0gI0FTTV9QQVJBTV9FUV9CQU5EX0JPT1NUCiAqIC0gI0FTTV9QQVJBTV9FUV9CQU5EX0NVVAogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGNlbnRlcl9mcmVxX2h6OwoJLyo8IEZpbHRlciBiYW5kIGNlbnRlciBmcmVxdWVuY3kgaW4gSGVydHouICovCgoJaW50MzJfdCAgICAgICAgICAgICAgICAgICBmaWx0ZXJfZ2FpbjsKLyo8IEZpbHRlciBiYW5kIGluaXRpYWwgZ2Fpbi4KICogU3VwcG9ydGVkIHZhbHVlczogKzEyIHRvIC0xMiBkQiBpbiAxIGRCIGluY3JlbWVudHMKICovCgoJaW50MzJfdCAgICAgICAgICAgICAgICAgICBxX2ZhY3RvcjsKLyo8IEZpbHRlciBiYW5kIHF1YWxpdHkgZmFjdG9yIGV4cHJlc3NlZCBhcyBhIFE4IG51bWJlciwgaS5lLiwgYQogKiBmaXhlZC1wb2ludCBudW1iZXIgd2l0aCBxIGZhY3RvciBvZiA4LiBGb3IgZXhhbXBsZSwgMzAwMC8oMl44KS4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2VxX3BhcmFtcyB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCQl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGVuYWJsZV9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGVxdWFsaXplciBtb2R1bGUgaXMgZGlzYWJsZWQgKDApIG9yIGVuYWJsZWQKICogKG5vbnplcm8pLgogKi8KCgkJdWludDMyX3QgICAgICAgICAgICAgICAgICBudW1fYmFuZHM7Ci8qPCBOdW1iZXIgb2YgYmFuZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gMTIKICovCglzdHJ1Y3QgYXNtX2VxX3Blcl9iYW5kX3BhcmFtcyBlcV9iYW5kc1tBU01fTUFYX0VRX0JBTkRTXTsKCn0gX19wYWNrZWQ7CgovKglObyBlcXVhbGl6ZXIgZWZmZWN0LiovCiNkZWZpbmUgQVNNX1BBUkFNX0VRWVBFX05PTkUgICAgICAwCgovKglCYXNzIGJvb3N0IGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFfQkFTU19CT09TVCAgICAgMQoKLypCYXNzIGN1dCBlcXVhbGl6ZXIgZWZmZWN0LiovCiNkZWZpbmUgQVNNX1BBUkFNX0VRX0JBU1NfQ1VUICAgICAgIDIKCi8qCVRyZWJsZSBib29zdCBlcXVhbGl6ZXIgZWZmZWN0ICovCiNkZWZpbmUgQVNNX1BBUkFNX0VRUkVCTEVfQk9PU1QgICAzCgovKglUcmVibGUgY3V0IGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFSRUJMRV9DVVQgICAgIDQKCi8qCUJhbmQgYm9vc3QgZXF1YWxpemVyIGVmZmVjdC4qLwojZGVmaW5lIEFTTV9QQVJBTV9FUV9CQU5EX0JPT1NUICAgICA1CgovKglCYW5kIGN1dCBlcXVhbGl6ZXIgZWZmZWN0LiovCiNkZWZpbmUgQVNNX1BBUkFNX0VRX0JBTkRfQ1VUICAgICAgIDYKCi8qIEdldCAmIHNldCBwYXJhbXMgKi8KI2RlZmluZSBWU1NfSUNPTU1PTl9DTURfU0VUX1BBUkFNX1YyCTB4MDAwMTEzM0QKI2RlZmluZSBWU1NfSUNPTU1PTl9DTURfR0VUX1BBUkFNX1YyCTB4MDAwMTEzM0UKI2RlZmluZSBWU1NfSUNPTU1PTl9SU1BfR0VUX1BBUkFNCTB4MDAwMTEwMDgKCiNkZWZpbmUgVlNTX01BWF9BVkNTX05VTV9TRVJWSUNFUwkyNQoKLyogSUQgb2YgdGhlIEJhc3MgQm9vc3QgbW9kdWxlLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqICAtICNBVURQUk9DX1BBUkFNX0lEX0JBU1NfQk9PU1RfRU5BQkxFCiAqICAtICNBVURQUk9DX1BBUkFNX0lEX0JBU1NfQk9PU1RfTU9ERQogKiAgLSAjQVVEUFJPQ19QQVJBTV9JRF9CQVNTX0JPT1NUX1NUUkVOR1RICiAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX0JBU1NfQk9PU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTEKLyogSUQgb2YgdGhlIEJhc3MgQm9vc3QgZW5hYmxlIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX0JBU1NfQk9PU1QuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTIKLyogSUQgb2YgdGhlIEJhc3MgQm9vc3QgbW9kZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9CQVNTX0JPT1NULgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0JBU1NfQk9PU1RfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEEzCi8qIElEIG9mIHRoZSBCYXNzIEJvb3N0IHN0cmVuZ3RoIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX0JBU1NfQk9PU1QuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9TVFJFTkdUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTQKCi8qIElEIG9mIHRoZSBQQkUgbW9kdWxlLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUEJFX0VOQUJMRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1BCRV9QQVJBTV9DT05GSUcKICovCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfUEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEMyQQovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVC4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9QQkVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEMyQgovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBtb2RlIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX0JBU1NfQk9PU1QuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUEJFX1BBUkFNX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBDNDkKCi8qIElEIG9mIHRoZSBWaXJ0dWFsaXplciBtb2R1bGUuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZQogKiBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9WSVJUVUFMSVpFUl9FTkFCTEUKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9WSVJUVUFMSVpFUl9TVFJFTkdUSAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX09VVF9UWVBFCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfR0FJTl9BREpVU1QKICovCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfVklSVFVBTElaRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBNQovKiBJRCBvZiB0aGUgVmlydHVhbGl6ZXIgZW5hYmxlIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1ZJUlRVQUxJWkVSLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEE2Ci8qIElEIG9mIHRoZSBWaXJ0dWFsaXplciBzdHJlbmd0aCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9WSVJUVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9WSVJUVUFMSVpFUl9TVFJFTkdUSCAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBNwovKiBJRCBvZiB0aGUgVmlydHVhbGl6ZXIgb3V0IHR5cGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfVklSVFVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfT1VUX1RZUEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTgKLyogSUQgb2YgdGhlIFZpcnR1YWxpemVyIG91dCB0eXBlIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1ZJUlRVQUxJWkVSLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX0dBSU5fQURKVVNUICAgICAgICAgICAgICAgICAweDAwMDEwOEE5CgovKiBJRCBvZiB0aGUgUmV2ZXJiIG1vZHVsZS4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZwogKiBwYXJhbWV0ZXIgSURzOgogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9FTkFCTEUKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfTU9ERQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9QUkVTRVQKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfV0VUX01JWAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9HQUlOX0FESlVTVAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ST09NX0xFVkVMCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JPT01fSEZfTEVWRUwKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfREVDQVlfVElNRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUNBWV9IRl9SQVRJTwogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9SRUZMRUNUSU9OU19MRVZFTAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9SRUZMRUNUSU9OU19ERUxBWQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9MRVZFTAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUxBWQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ESUZGVVNJT04KICogLSAjQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfREVOU0lUWQogKi8KI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QUEKLyogSUQgb2YgdGhlIFJldmVyYiBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9FTkFCTEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QUIKLyogSUQgb2YgdGhlIFJldmVyYiBtb2RlIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEFDCi8qIElEIG9mIHRoZSBSZXZlcmIgcHJlc2V0IHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUFJFU0VUICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEFECi8qIElEIG9mIHRoZSBSZXZlcmIgd2V0IG1peCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX1dFVF9NSVggICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBRQovKiBJRCBvZiB0aGUgUmV2ZXJiIGdhaW4gYWRqdXN0IHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfR0FJTl9BREpVU1QgICAgICAgICAgICAgICAweDAwMDEwOEFGCi8qIElEIG9mIHRoZSBSZXZlcmIgcm9vbSBsZXZlbCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JPT01fTEVWRUwgICAgICAgICAgICAgICAgMHgwMDAxMDhCMAovKiBJRCBvZiB0aGUgUmV2ZXJiIHJvb20gaGYgbGV2ZWwgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ST09NX0hGX0xFVkVMICAgICAgICAgICAgIDB4MDAwMTA4QjEKLyogSUQgb2YgdGhlIFJldmVyYiBkZWNheSB0aW1lIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfREVDQVlfVElNRSAgICAgICAgICAgICAgICAweDAwMDEwOEIyCi8qIElEIG9mIHRoZSBSZXZlcmIgZGVjYXkgaGYgcmF0aW8gcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUNBWV9IRl9SQVRJTyAgICAgICAgICAgIDB4MDAwMTA4QjMKLyogSUQgb2YgdGhlIFJldmVyYiByZWZsZWN0aW9ucyBsZXZlbCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JFRkxFQ1RJT05TX0xFVkVMICAgICAgICAgMHgwMDAxMDhCNAovKiBJRCBvZiB0aGUgUmV2ZXJiIHJlZmxlY3Rpb25zIGRlbGF5IHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUkVGTEVDVElPTlNfREVMQVkgICAgICAgICAweDAwMDEwOEI1Ci8qIElEIG9mIHRoZSBSZXZlcmIgbGV2ZWwgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEI2Ci8qIElEIG9mIHRoZSBSZXZlcmIgZGVsYXkgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUxBWSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEI3Ci8qIElEIG9mIHRoZSBSZXZlcmIgZGlmZnVzaW9uIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfRElGRlVTSU9OICAgICAgICAgICAgICAgICAgMHgwMDAxMDhCOAovKiBJRCBvZiB0aGUgUmV2ZXJiIGRlbnNpdHkgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERU5TSVRZICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEI5CgovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgbW9kdWxlLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUKICogZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfRU5BQkxFCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfQ09ORklHCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfTlVNX0JBTkRTCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfQkFORF9MRVZFTFMKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0xFVkVMX1JBTkdFCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfQkFORF9GUkVRUwogKiAtICNBVURQUk9DX1BBUkFNX0lEX0VRX1NJTkdMRV9CQU5EX0ZSRVFfUkFOR0UKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9TSU5HTEVfQkFORF9GUkVRCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfQkFORF9JTkRFWAogKiAtICNBVURQUk9DX1BBUkFNX0lEX0VRX1BSRVNFVF9JRAogKiAtICNBVURQUk9DX1BBUkFNX0lEX0VRX05VTV9QUkVTRVRTCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfR0VUX1BSRVNFVF9OQU1FCiAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEJBCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEJCCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBjb25maWcgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEJDCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBudW1iZXIgb2YgYmFuZHMgcGFyYW1ldGVyIHVzZWQKICogYnkgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuIFRoaXMgcGFyYW0gSUQgaXMKICogdXNlZCBmb3IgZ2V0IHBhcmFtIG9ubHkuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfTlVNX0JBTkRTICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEJECi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBiYW5kIGxldmVscyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcwogKiB1c2VkIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0xFVkVMUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkUKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGJhbmQgbGV2ZWwgcmFuZ2UgcGFyYW1ldGVyIHVzZWQKICogYnkgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuIFRoaXMgcGFyYW0gSUQgaXMKICogdXNlZCBmb3IgZ2V0IHBhcmFtIG9ubHkuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfQkFORF9MRVZFTF9SQU5HRSAgICAgICAgICAgICAgICAgICAweDAwMDEwOEJGCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBiYW5kIGZyZXF1ZW5jaWVzIHBhcmFtZXRlciB1c2VkCiAqIGJ5IEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElEIGlzCiAqIHVzZWQgZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX0JBTkRfRlJFUVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhDMAovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgc2luZ2xlIGJhbmQgZnJlcXVlbmN5IHJhbmdlCiAqIHBhcmFtZXRlciB1c2VkIGJ5IEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLgogKiAgVGhpcyBwYXJhbSBJRCBpcyB1c2VkIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9TSU5HTEVfQkFORF9GUkVRX1JBTkdFICAgICAgICAgICAgIDB4MDAwMTA4QzEKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIHNpbmdsZSBiYW5kIGZyZXF1ZW5jeSBwYXJhbWV0ZXIKICogdXNlZCBieSBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRAogKiBpcyB1c2VkIGZvciBzZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9TSU5HTEVfQkFORF9GUkVRICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QzIKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGJhbmQgaW5kZXggcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfQkFORF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEMzCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBwcmVzZXQgaWQgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuIFRoaXMgcGFyYW0gSUQgaXMgdXNlZAogKiBmb3IgZ2V0IHBhcmFtIG9ubHkuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfUFJFU0VUX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEM0Ci8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBudW1iZXIgb2YgcHJlc2V0cyBwYXJhbWV0ZXIgdXNlZAogKiBieSBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcyB1c2VkCiAqIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9OVU1fUFJFU0VUUyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QzUKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIHByZXNldCBuYW1lIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElEIGlzIHVzZWQKICogZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX1BSRVNFVF9OQU1FICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhDNgoKLyogU2V0IFE2IHRvcG9sb2dpZXMgKi8KI2RlZmluZSBBU01fQ01EX0FERF9UT1BPTE9HSUVTCQkJCTB4MDAwMTBEQkUKI2RlZmluZSBBRE1fQ01EX0FERF9UT1BPTE9HSUVTCQkJCTB4MDAwMTAzMzUKI2RlZmluZSBBRkVfQ01EX0FERF9UT1BPTE9HSUVTCQkJCTB4MDAwMTAwZjgKLyogc3RydWN0dXJlIHVzZWQgZm9yIGJvdGggaW9jdGxzICovCnN0cnVjdCBjbWRfc2V0X3RvcG9sb2dpZXMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyCQlwYXlsb2FkX2FkZHJfbHN3OwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQlwYXlsb2FkX2FkZHJfbXN3OwoJLyogTVNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQltZW1fbWFwX2hhbmRsZTsKCS8qIE1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IG1lbSBtYXAgY29tbWFuZCAqLwoJdTMyCQlwYXlsb2FkX3NpemU7CgkvKiBTaXplIGluIGJ5dGVzIG9mIHRoZSB2YXJpYWJsZSBwYXlsb2FkIGluIHNoYXJlZCBtZW1vcnkgKi8KfSBfX3BhY2tlZDsKCi8qIFRoaXMgbW9kdWxlIHJlcHJlc2VudHMgdGhlIFJ4IHByb2Nlc3Npbmcgb2YgRmVlZGJhY2sgc3BlYWtlciBwcm90ZWN0aW9uLgogKiBJdCBjb250YWlucyB0aGUgZXhjdXJzaW9uIGNvbnRyb2wsIHRoZXJtYWwgcHJvdGVjdGlvbiwKICogYW5hbG9nIGNsaXAgbWFuYWdlciBmZWF0dXJlcyBpbiBpdC4KICogVGhpcyBtb2R1bGUgaWQgd2lsbCBzdXBwb3J0IGZvbGxvd2luZyBwYXJhbSBpZHMuCiAqIC0gQUZFX1BBUkFNX0lEX0ZCU1BfTU9ERV9SWF9DRkcKICovCgojZGVmaW5lIEFGRV9NT0RVTEVfRkJfU1BLUl9QUk9UX1JYIDB4MDAwMTAyMUMKI2RlZmluZSBBRkVfTU9EVUxFX0ZCX1NQS1JfUFJPVF9WMl9SWCAweDAwMDEwMjVGCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQX1JYX0xJTUlURVJfVEggMHgwMDAxMDJCMQojZGVmaW5lIEFGRV9QQVJBTV9JRF9GQlNQX01PREVfUlhfQ0ZHIDB4MDAwMTAyMUQKI2RlZmluZSBBRkVfUEFSQU1fSURfRkJTUF9QVE9ORV9SQU1QX0NGRyAweDAwMDEwMjYwCgpzdHJ1Y3QgYXNtX2Zic3BfbW9kZV9yeF9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IG1vZGU7Cn0gX19wYWNrZWQ7CgovKiBUaGlzIG1vZHVsZSByZXByZXNlbnRzIHRoZSBWSSBwcm9jZXNzaW5nIG9mIGZlZWRiYWNrIHNwZWFrZXIgcHJvdGVjdGlvbi4KICogSXQgd2lsbCByZWNlaXZlIFZzZW5zIGFuZCBJc2VucyBmcm9tIGNvZGVjIGFuZCBnZW5lcmF0ZXMgbmVjZXNzYXJ5CiAqIHBhcmFtZXRlcnMgbmVlZGVkIGJ5IFJ4IHByb2Nlc3NpbmcuCiAqIFRoaXMgbW9kdWxlIGlkIHdpbGwgc3VwcG9ydCBmb2xsb3dpbmcgcGFyYW0gaWRzLgogKiAtIEFGRV9QQVJBTV9JRF9TUEtSX0NBTElCX1ZJX1BST0NfQ0ZHCiAqIC0gQUZFX1BBUkFNX0lEX0NBTElCX1JFU19DRkcKICogLSBBRkVfUEFSQU1fSURfRkVFREJBQ0tfUEFUSF9DRkcKICovCgojZGVmaW5lIEFGRV9NT0RVTEVfRkJfU1BLUl9QUk9UX1ZJX1BST0MgMHgwMDAxMDIyNgojZGVmaW5lIEFGRV9NT0RVTEVfRkJfU1BLUl9QUk9UX1ZJX1BST0NfVjIgMHgwMDAxMDI2QQoKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BLUl9DQUxJQl9WSV9QUk9DX0NGRyAweDAwMDEwMjJBCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQS1JfQ0FMSUJfVklfUFJPQ19DRkdfVjIgIDB4MDAwMTAyNkIKCnN0cnVjdCBhc21fc3Brcl9jYWxpYl92aV9wcm9jX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3Qgb3BlcmF0aW9uX21vZGU7Cgl1aW50MzJfdCByMF90MF9zZWxlY3Rpb25fZmxhZ1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJaW50MzJfdCByMF9jYWxpX3EyNFtTUF9WMl9OVU1fTUFYX1NQS1JdOwoJaW50MTZfdAl0MF9jYWxpX3E2W1NQX1YyX05VTV9NQVhfU1BLUl07Cgl1aW50MzJfdCBxdWlja19jYWxpYl9mbGFnOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0FMSUJfUkVTX0NGRyAweDAwMDEwMjJCCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NBTElCX1JFU19DRkdfVjIgMHgwMDAxMDI2RQoKc3RydWN0IGFzbV9jYWxpYl9yZXNfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247CglpbnQzMl90CXIwX2NhbGlfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07Cgl1aW50MzJfdCB0aF92aV9jYV9zdGF0ZTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0ZFRURCQUNLX1BBVEhfQ0ZHIDB4MDAwMTAyMkMKI2RlZmluZSBBRkVfTU9EVUxFX0ZFRURCQUNLIDB4MDAwMTAyNTcKCnN0cnVjdCBhc21fZmVlZGJhY2tfcGF0aF9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCWludDMyX3QJZHN0X3BvcnRpZDsKCWludDMyX3QJbnVtX2NoYW5uZWxzOwoJaW50MzJfdAljaGFuX2luZm9bNF07Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9NT0RFX1ZJX1BST0NfQ0ZHIDB4MDAwMTAyMjcKCnN0cnVjdCBhc21fbW9kZV92aV9wcm9jX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3QgY2FsX21vZGU7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9NT0RVTEVfU1BFQUtFUl9QUk9URUNUSU9OX1YyX1RIX1ZJCTB4MDAwMTAyNkEKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BfVjJfVEhfVklfTU9ERV9DRkcJMHgwMDAxMDI2QgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9USF9WSV9GVE1fQ0ZHCTB4MDAwMTAyOUYKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BfVjJfVEhfVklfRlRNX1BBUkFNUwkweDAwMDEwMkEwCgpzdHJ1Y3QgYWZlX3NwX3RoX3ZpX21vZGVfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBvcGVyYXRpb25fbW9kZTsKCS8qCgkgKiBPcGVyYXRpb24gbW9kZSBvZiB0aGVybWFsIFZJIG1vZHVsZS4KCSAqICAgMCAtLSBOb3JtYWwgUnVubmluZyBtb2RlCgkgKiAgIDEgLS0gQ2FsaWJyYXRpb24gbW9kZQoJICogICAyIC0tIEZUTSBtb2RlCgkgKi8KCXVpbnQzMl90IHIwdDBfc2VsZWN0aW9uX2ZsYWdbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBTcGVjaWZpZXMgd2hpY2ggc2V0IG9mIFIwLCBUMCB2YWx1ZXMgdGhlIGFsZ29yaXRobSB3aWxsIHVzZS4KCSAqIFRoaXMgZmllbGQgaXMgdmFsaWQgb25seSBpbiBOb3JtYWwgbW9kZSAob3BlcmF0aW9uX21vZGUgPSAwKS4KCSAqIDAgLS0gVXNlIGNhbGlicmF0ZWQgUjAsIFQwIHZhbHVlCgkgKiAxIC0tIFVzZSBzYWZlIFIwLCBUMCB2YWx1ZQoJICovCglpbnQzMl90IHIwX2NhbGlfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogQ2FsaWJyYXRpb24gcG9pbnQgcmVzaXN0YW5jZSBwZXIgZGV2aWNlLiBUaGlzIGZpZWxkIGlzIHZhbGlkCgkgKiBvbmx5IGluIE5vcm1hbCBtb2RlIChvcGVyYXRpb25fbW9kZSA9IDApLgoJICogdmFsdWVzIDMzNTU0NDMyIHRvIDEwNzM3NDE4MjQgT2htcyAoaW4gUTI0IGZvcm1hdCkKCSAqLwoJaW50MTZfdCB0MF9jYWxpX3E2W1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogQ2FsaWJyYXRpb24gcG9pbnQgdGVtcGVyYXR1cmUgcGVyIGRldmljZS4gVGhpcyBmaWVsZCBpcyB2YWxpZAoJICogaW4gYm90aCBOb3JtYWwgbW9kZSBhbmQgQ2FsaWJyYXRpb24gbW9kZS4KCSAqIHZhbHVlcyAtMTkyMCB0byA1MTIwIGRlZ3JlZXMgQyAoaW4gUTYgZm9ybWF0KQoJICovCgl1aW50MzJfdCBxdWlja19jYWxpYl9mbGFnOwoJLyoKCSAqIEluZGljYXRlcyB3aGV0aGVyIGNhbGlicmF0aW9uIGlzIHRvIGJlIGRvbmUgaW4gcXVpY2sgbW9kZSBvciBub3QuCgkgKiBUaGlzIGZpZWxkIGlzIHZhbGlkIG9ubHkgaW4gQ2FsaWJyYXRpb24gbW9kZSAob3BlcmF0aW9uX21vZGUgPSAxKS4KCSAqIDAgLS0gRGlzYWJsZWQKCSAqIDEgLS0gRW5hYmxlZAoJICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX3RoX3ZpX2Z0bV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IHdhaXRfdGltZV9tc1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIFdhaXQgdGltZSB0byBoZWF0IHVwIHNwZWFrZXIgYmVmb3JlIGNvbGxlY3Rpbmcgc3RhdGlzdGljcwoJICogZm9yIGZ0bSBtb2RlIGluIG1zLgoJICogdmFsdWVzIDAgdG8gNDI5NDk2NzI5NSBtcwoJICovCgl1aW50MzJfdCBmdG1fdGltZV9tc1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIGR1cmF0aW9uIGZvciB3aGljaCBGVE0gc3RhdGlzdGljcyBhcmUgY29sbGVjdGVkIGluIG1zLgoJICogdmFsdWVzIDAgdG8gMjAwMCBtcwoJICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX3RoX3ZpX2Z0bV9wYXJhbXMgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCWludDMyX3QgZGNfcmVzX3EyNFtTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIERDIHJlc2lzdGFuY2UgdmFsdWUgaW4gcTI0IGZvcm1hdAoJICogdmFsdWVzIDAgdG8gMjE0NzQ4MzY0NyBPaG1zIChpbiBRMjQgZm9ybWF0KQoJICovCglpbnQzMl90IHRlbXBfcTIyW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogdGVtcGVyYXR1cmUgdmFsdWUgaW4gcTIyIGZvcm1hdAoJICogdmFsdWVzIC0xMjU4MjkxMjAgdG8gMjE0NzQ4MzY0NyBkZWdDIChpbiBRMjIgZm9ybWF0KQoJICovCgl1aW50MzJfdCBzdGF0dXNbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBGVE0gcGFja2V0IHN0YXR1cwoJICogMCAtIEluY29ycmVjdCBvcGVyYXRpb24gbW9kZS5UaGlzIHN0YXR1cyBpcyByZXR1cm5lZAoJICogICAgIHdoZW4gR0VUX1BBUkFNIGlzIGNhbGxlZCBpbiBub24gRlRNIE1vZGUKCSAqIDEgLSBJbmFjdGl2ZSBtb2RlIC0tIFBvcnQgaXMgbm90IHlldCBzdGFydGVkLgoJICogMiAtIFdhaXQgc3RhdGUuIHdhaXRfdGltZV9tcyBoYXMgbm90IHlldCBlbGFwc2VkCgkgKiAzIC0gSW4gcHJvZ3Jlc3Mgc3RhdGUuIGZ0bV90aW1lX21zIGhhcyBub3QgeWV0IGVsYXBzZWQuCgkgKiA0IC0gU3VjY2Vzcy4KCSAqIDUgLSBGYWlsZWQuCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfdGhfdmlfZ2V0X3BhcmFtIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfZ2V0X3BhcmFtX3YyIGdldF9wYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9zcF90aF92aV9mdG1fcGFyYW1zIHBhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcF90aF92aV9nZXRfcGFyYW1fcmVzcCB7Cgl1aW50MzJfdCBzdGF0dXM7CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfc3BfdGhfdmlfZnRtX3BhcmFtcyBwYXJhbTsKfSBfX3BhY2tlZDsKCgojZGVmaW5lIEFGRV9NT0RVTEVfU1BFQUtFUl9QUk9URUNUSU9OX1YyX0VYX1ZJCTB4MDAwMTAyNkYKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BfVjJfRVhfVklfTU9ERV9DRkcJMHgwMDAxMDJBMQojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9FWF9WSV9GVE1fQ0ZHCTB4MDAwMTAyQTIKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BfVjJfRVhfVklfRlRNX1BBUkFNUwkweDAwMDEwMkEzCgpzdHJ1Y3QgYWZlX3NwX2V4X3ZpX21vZGVfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBvcGVyYXRpb25fbW9kZTsKCS8qCgkgKiBPcGVyYXRpb24gbW9kZSBvZiBFeGN1cnNpb24gVkkgbW9kdWxlLgoJICogMCAtIE5vcm1hbCBSdW5uaW5nIG1vZGUKCSAqIDIgLSBGVE0gbW9kZQoJICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2Z0bV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IHdhaXRfdGltZV9tc1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIFdhaXQgdGltZSB0byBoZWF0IHVwIHNwZWFrZXIgYmVmb3JlIGNvbGxlY3Rpbmcgc3RhdGlzdGljcwoJICogZm9yIGZ0bSBtb2RlIGluIG1zLgoJICogdmFsdWVzIDAgdG8gNDI5NDk2NzI5NSBtcwoJICovCgl1aW50MzJfdCBmdG1fdGltZV9tc1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIGR1cmF0aW9uIGZvciB3aGljaCBGVE0gc3RhdGlzdGljcyBhcmUgY29sbGVjdGVkIGluIG1zLgoJICogdmFsdWVzIDAgdG8gMjAwMCBtcwoJICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2Z0bV9wYXJhbXMgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCWludDMyX3QgZnJlcV9xMjBbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBSZXNvbmFuY2UgZnJlcXVlbmN5IGluIHEyMCBmb3JtYXQKCSAqIHZhbHVlcyAwIHRvIDIxNDc0ODM2NDcgSHogKGluIFEyMCBmb3JtYXQpCgkgKi8KCWludDMyX3QgcmVzaXNfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogTWVjaGFuaWNhbCByZXNpc3RhbmNlIGluIHEyNCBmb3JtYXQKCSAqIHZhbHVlcyAwIHRvIDIxNDc0ODM2NDcgT2htcyAoaW4gUTI0IGZvcm1hdCkKCSAqLwoJaW50MzJfdCBxbWN0X3EyNFtTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIE1lY2hhbmljYWwgUWZhY3RvciBpbiBxMjQgZm9ybWF0CgkgKiB2YWx1ZXMgMCB0byAyMTQ3NDgzNjQ3IChpbiBRMjQgZm9ybWF0KQoJICovCgl1aW50MzJfdCBzdGF0dXNbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBGVE0gcGFja2V0IHN0YXR1cwoJICogMCAtIEluY29ycmVjdCBvcGVyYXRpb24gbW9kZS5UaGlzIHN0YXR1cyBpcyByZXR1cm5lZAoJICogICAgICB3aGVuIEdFVF9QQVJBTSBpcyBjYWxsZWQgaW4gbm9uIEZUTSBNb2RlLgoJICogMSAtIEluYWN0aXZlIG1vZGUgLS0gUG9ydCBpcyBub3QgeWV0IHN0YXJ0ZWQuCgkgKiAyIC0gV2FpdCBzdGF0ZS4gd2FpdF90aW1lX21zIGhhcyBub3QgeWV0IGVsYXBzZWQKCSAqIDMgLSBJbiBwcm9ncmVzcyBzdGF0ZS4gZnRtX3RpbWVfbXMgaGFzIG5vdCB5ZXQgZWxhcHNlZC4KCSAqIDQgLSBTdWNjZXNzLgoJICogNSAtIEZhaWxlZC4KCSAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcF9leF92aV9nZXRfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9nZXRfcGFyYW1fdjIgZ2V0X3BhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2Z0bV9wYXJhbXMgcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2dldF9wYXJhbV9yZXNwIHsKCXVpbnQzMl90IHN0YXR1czsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9zcF9leF92aV9mdG1fcGFyYW1zIHBhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcF9yeF9saW1pdGVyX3RoX3BhcmFtIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBsaW1fdGhyX3Blcl9jYWxpYl9xMjdbU1BfVjJfTlVNX01BWF9TUEtSXTsKfSBfX3BhY2tlZDsKCnVuaW9uIGFmZV9zcGtyX3Byb3RfY29uZmlnIHsKCXN0cnVjdCBhc21fZmJzcF9tb2RlX3J4X2NmZyBtb2RlX3J4X2NmZzsKCXN0cnVjdCBhc21fc3Brcl9jYWxpYl92aV9wcm9jX2NmZyB2aV9wcm9jX2NmZzsKCXN0cnVjdCBhc21fZmVlZGJhY2tfcGF0aF9jZmcgZmVlZGJhY2tfcGF0aF9jZmc7CglzdHJ1Y3QgYXNtX21vZGVfdmlfcHJvY19jZmcgbW9kZV92aV9wcm9jX2NmZzsKCXN0cnVjdCBhZmVfc3BfdGhfdmlfbW9kZV9jZmcgdGhfdmlfbW9kZV9jZmc7CglzdHJ1Y3QgYWZlX3NwX3RoX3ZpX2Z0bV9jZmcgdGhfdmlfZnRtX2NmZzsKCXN0cnVjdCBhZmVfc3BfZXhfdmlfbW9kZV9jZmcgZXhfdmlfbW9kZV9jZmc7CglzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2Z0bV9jZmcgZXhfdmlfZnRtX2NmZzsKCXN0cnVjdCBhZmVfc3BfcnhfbGltaXRlcl90aF9wYXJhbSBsaW1pdGVyX3RoX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3Brcl9wcm90X2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7Cgl1bmlvbiBhZmVfc3Brcl9wcm90X2NvbmZpZyBwcm90X2NvbmZpZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3Brcl9wcm90X2dldF92aV9jYWxpYiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX2dldF9wYXJhbV92MiBnZXRfcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhc21fY2FsaWJfcmVzX2NmZyByZXNfY2ZnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcGtyX3Byb3RfY2FsaWJfZ2V0X3Jlc3AgewoJdWludDMyX3Qgc3RhdHVzOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYXNtX2NhbGliX3Jlc19jZmcgcmVzX2NmZzsKfSBfX3BhY2tlZDsKCgovKiBTUlMgVFJVTUVESUEgc3RhcnQgKi8KLyogdG9wb2xvZ3kgKi8KI2RlZmluZSBTUlNfVFJVTUVESUFfVE9QT0xPR1lfSUQJCQkweDAwMDEwRDkwCi8qIG1vZHVsZSAqLwojZGVmaW5lIFNSU19UUlVNRURJQV9NT0RVTEVfSUQJCQkJMHgxMDAwNTAxMAovKiBwYXJhbWV0ZXJzICovCiNkZWZpbmUgU1JTX1RSVU1FRElBX1BBUkFNUwkJCQkweDEwMDA1MDExCiNkZWZpbmUgU1JTX1RSVU1FRElBX1BBUkFNU19XT1dIRAkJCTB4MTAwMDUwMTIKI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TX0NTSFAJCQkweDEwMDA1MDEzCiNkZWZpbmUgU1JTX1RSVU1FRElBX1BBUkFNU19IUEYJCQkJMHgxMDAwNTAxNAojZGVmaW5lIFNSU19UUlVNRURJQV9QQVJBTVNfQUVRCQkJCTB4MTAwMDUwMTUKI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TX0hMCQkJCTB4MTAwMDUwMTYKI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TX0dFUQkJCQkweDEwMDA1MDE3CgojZGVmaW5lIFNSU19JRF9HTE9CQUwJMHgwMDAwMDAwMQojZGVmaW5lIFNSU19JRF9XT1dIRAkweDAwMDAwMDAyCiNkZWZpbmUgU1JTX0lEX0NTSFAJMHgwMDAwMDAwMwojZGVmaW5lIFNSU19JRF9IUEYJMHgwMDAwMDAwNAojZGVmaW5lIFNSU19JRF9BRVEJMHgwMDAwMDAwNQojZGVmaW5lIFNSU19JRF9ITAkJMHgwMDAwMDAwNgojZGVmaW5lIFNSU19JRF9HRVEJMHgwMDAwMDAwNwoKI2RlZmluZSBTUlNfQ01EX1VQTE9BRAkJMHg3RkZGMDAwMAojZGVmaW5lIFNSU19QQVJBTV9PRkZTRVRfTUFTSwkweDNGRkYwMDAwCiNkZWZpbmUgU1JTX1BBUkFNX1ZBTFVFX01BU0sJMHgwMDAwRkZGRgoKc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfR0xPQkFMIHsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2MTsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2MjsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2MzsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2NDsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2NTsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2NjsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2NzsKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICB2ODsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICB2OTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX1dPV0hEIHsKCXVpbnQzMl90CQkJCXYxOwoJdWludDE2X3QJCQkJdjI7Cgl1aW50MTZfdAkJCQl2MzsKCXVpbnQxNl90CQkJCXY0OwoJdWludDE2X3QJCQkJdjU7Cgl1aW50MTZfdAkJCQl2NjsKCXVpbnQxNl90CQkJCXY3OwoJdWludDE2X3QJCQkJdjg7Cgl1aW50MTZfdAkJCQl2X19fX0ExOwoJdWludDMyX3QJCQkJdjk7Cgl1aW50MTZfdAkJCQl2MTA7Cgl1aW50MTZfdAkJCQl2MTE7Cgl1aW50MzJfdAkJCQl2MTJbMTZdOwoJdWludDMyX3QJdjEzWzE2XTsKCXVpbnQzMl90CXYxNFsxNl07Cgl1aW50MzJfdAl2MTVbMTZdOwoJdWludDMyX3QJdjE2OwoJdWludDE2X3QJdjE3OwoJdWludDE2X3QJdjE4Owp9IF9fcGFja2VkOwoKc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfQ1NIUCB7Cgl1aW50MzJfdAkJdjE7Cgl1aW50MTZfdAkJdjI7Cgl1aW50MTZfdAkJdjM7Cgl1aW50MTZfdAkJdjQ7Cgl1aW50MTZfdAkJdjU7Cgl1aW50MTZfdAkJdjY7Cgl1aW50MTZfdAkJdl9fX19BMTsKCXVpbnQzMl90CQl2NzsKCXVpbnQxNl90CQl2ODsKCXVpbnQxNl90CQl2OTsKCXVpbnQzMl90CQl2MTBbMTZdOwp9IF9fcGFja2VkOwoKc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfSFBGIHsKCXVpbnQzMl90CQl2MTsKCXVpbnQzMl90CQl2MlsyNl07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19BRVEgewoJdWludDMyX3QJCXYxOwoJdWludDE2X3QJCXYyOwoJdWludDE2X3QJCXYzOwoJdWludDE2X3QJCXY0OwoJdWludDE2X3QJCXZfX19fQTE7Cgl1aW50MzJfdAl2NVs3NF07Cgl1aW50MzJfdAl2Nls3NF07Cgl1aW50MTZfdAl2N1syMDQ4XTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0hMIHsKCXVpbnQxNl90CQl2MTsKCXVpbnQxNl90CQl2MjsKCXVpbnQxNl90CQl2MzsKCXVpbnQxNl90CQl2X19fX0ExOwoJaW50MzJfdAkJCXY0OwoJdWludDMyX3QJCXY1OwoJdWludDE2X3QJCXY2OwoJdWludDE2X3QJCXZfX19fQTI7Cgl1aW50MzJfdAkJdjc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19HRVEgewoJaW50MTZfdAkJdjFbMTBdOwp9IF9fcGFja2VkOwpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtcyB7CglzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19HTE9CQUwJZ2xvYmFsOwoJc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfV09XSEQJd293aGQ7CglzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19DU0hQCQljc2hwOwoJc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfSFBGCQlocGY7CglzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19BRVEJCWFlcTsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0hMCQlobDsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0dFUQkJZ2VxOwp9IF9fcGFja2VkOwovKiBTUlMgVHJ1TWVkaWEgZW5kICovCgojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRU5BQkxFCQkweDAwMDEwOTA0CiNkZWZpbmUgQVNNX1NUUkVBTV9QT1NUUFJPQ19UT1BPX0lEX1NBX1BMVVMgMHgxMDAwRkZGRgovKiBEVFMgRWFnbGUgKi8KI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9EVFNfSFBYX1BSRU1JWCAweDAwMDEwNzdDCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfRFRTX0hQWF9QT1NUTUlYIDB4MDAwMTA3N0IKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfRFRTX0hQWCAweDAwMDEwREVECiNkZWZpbmUgQVNNX1NUUkVBTV9QT1NUUFJPQ19UT1BPX0lEX0hQWF9QTFVTICAweDEwMDE1MDAwCiNkZWZpbmUgQVNNX1NUUkVBTV9QT1NUUFJPQ19UT1BPX0lEX0hQWF9NQVNURVIgIDB4MTAwMTUwMDEKc3RydWN0IGFzbV9kdHNfZWFnbGVfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2R0c19lYWdsZV9wYXJhbV9nZXQgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX2dldF9wcF9wYXJhbXNfdjIgcGFyYW07Cn0gX19wYWNrZWQ7CgovKiBPcGNvZGUgdG8gc2V0IEJUIGFkZHJlc3MgYW5kIGxpY2Vuc2UgZm9yIGFwdHggZGVjb2RlciAqLwojZGVmaW5lIEFQVFhfREVDT0RFUl9CVF9BRERSRVNTIDB4MDAwMTMyMDEKI2RlZmluZSBBUFRYX0NMQVNTSUNfREVDX0xJQ0VOU0VfSUQgMHgwMDAxMzIwMgoKc3RydWN0IGFwdHhfZGVjX2J0X2FkZHJfY2ZnIHsKCXVpbnQzMl90IGxhcDsKCXVpbnQzMl90IHVhcDsKCXVpbnQzMl90IG5hcDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhcHR4X2RlY19idF9kZXZfYWRkciB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSBlbmNkZWM7CglzdHJ1Y3QgYXB0eF9kZWNfYnRfYWRkcl9jZmcgYnRfYWRkcl9jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FwdHhfZGVjX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCXUzMiAgICAgc2FtcGxlX3JhdGU7Ci8qIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDQ0MTAwIGFuZCA0ODAwMCBIegogKi8KfSBfX3BhY2tlZDsKCi8qIFE2Q29yZSBTcGVjaWZpYyAqLwojZGVmaW5lIEFWQ1NfQ01EX0dFVF9GV0tfVkVSU0lPTiAoMHgwMDAxMjkyQykKI2RlZmluZSBBVkNTX0NNRFJTUF9HRVRfRldLX1ZFUlNJT04gKDB4MDAwMTI5MkQpCgojZGVmaW5lIEFWQ1NfU0VSVklDRV9JRF9BTEwgKDB4RkZGRkZGRkYpCiNkZWZpbmUgQVZDU19TRVJWSUNFX0lEX0FGRSAoMHg0KQojZGVmaW5lIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQ1ZQX1YJKDB4QikKI2RlZmluZSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FGRV9WICgweDQpCgpzdHJ1Y3QgYXZjc19nZXRfZndrX3ZlcnNpb24gewoJLyoKCSAqIEluZGljYXRlcyB0aGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgQVZTIGJ1aWxkLgoJICogVGhpcyB2YWx1ZSBpcyBpbmNyZW1lbnRlZCBvbiBjaGlwc2V0IGZhbWlseSBib3VuZGFyaWVzLgoJICovCgl1aW50MzJfdCBidWlsZF9tYWpvcl92ZXJzaW9uOwoKCS8qCgkgKiBNaW5vciB2ZXJzaW9uIG9mIHRoZSBBVlMgYnVpbGQuCgkgKiBUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIG1haW5saW5lIHRvIHdoaWNoIHRoZSBBVlMgYnVpbGQgYmVsb25ncy4KCSAqLwoJdWludDMyX3QgYnVpbGRfbWlub3JfdmVyc2lvbjsKCgkvKiBJbmRpY2F0ZXMgdGhlIEFWUyBicmFuY2ggdmVyc2lvbiB0byB3aGljaCB0aGUgaW1hZ2UgYmVsb25ncy4gKi8KCXVpbnQzMl90IGJ1aWxkX2JyYW5jaF92ZXJzaW9uOwoKCS8qIEluZGljYXRlcyB0aGUgQVZTIHN1Yi1icmFuY2ggb3IgY3VzdG9tZXIgcHJvZHVjdCBsaW5lIGluZm9ybWF0aW9uLiAqLwoJdWludDMyX3QgYnVpbGRfc3ViYnJhbmNoX3ZlcnNpb247CgoJLyogTnVtYmVyIG9mIHN1cHBvcnRlZCBBVlMgc2VydmljZXMgaW4gdGhlIGN1cnJlbnQgYnVpbGQuICovCgl1aW50MzJfdCBudW1fc2VydmljZXM7Cn07CgpzdHJ1Y3QgYXZzX3N2Y19hcGlfaW5mbyB7CgkvKgoJICogQVBSVjIgc2VydmljZSBJRHMgZm9yIHRoZSBpbmRpdmlkdWFsIHN0YXRpYyBzZXJ2aWNlcy4KCSAqCgkgKgkgQHZhbHVlcwoJICoJIC0gQVBSVjJfSURTX1NFUlZJQ0VfSURfQURTUF9DT1JFX1YKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQUZFX1YKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQVNNX1YKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQURNX1YKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfTVZNX1YKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQ1ZTX1YKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQ1ZQX1YKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfTFNNX1YKCSAqLwoJdWludDMyX3Qgc2VydmljZV9pZDsKCgkvKgoJICogSW5kaWNhdGVzIHRoZSBBUEkgdmVyc2lvbiBvZiB0aGUgc2VydmljZS4KCSAqCgkgKiBFYWNoIG5ldyBBUEkgdXBkYXRlIHRoYXQgd2FycmFudHMgYSBjaGFuZ2Ugb24gdGhlIEhMT1Mgc2lkZSB0cmlnZ2VycwoJICogYW4gaW5jcmVtZW50IGluIHRoZSB2ZXJzaW9uLgoJICovCgl1aW50MzJfdCBhcGlfdmVyc2lvbjsKCgkvKgoJICogSW5kaWNhdGVzIHRoZSBBUEkgaW5jcmVtZW50cyBvbiBhIHN1Yi1icmFuY2ggKG5vdCBvbiB0aGUgbWFpbmxpbmUpLgoJICoKCSAqIEFQSSBicmFuY2ggdmVyc2lvbiBudW1iZXJzIGNhbiBpbmNyZW1lbnQgaW5kZXBlbmRlbnRseSBvbiBkaWZmZXJlbnQKCSAqIHN1Yi1icmFuY2hlcy4KCSAqLwoJdWludDMyX3QgYXBpX2JyYW5jaF92ZXJzaW9uOwp9OwoKc3RydWN0IGF2Y3NfZndrX3Zlcl9pbmZvIHsKCXN0cnVjdCBhdmNzX2dldF9md2tfdmVyc2lvbiBhdmNzX2Z3a192ZXJzaW9uOwoJc3RydWN0IGF2c19zdmNfYXBpX2luZm8gc2VydmljZXNbMF07Cn0gX19wYWNrZWQ7CgovKiBMU00gU3BlY2lmaWMgKi8KI2RlZmluZSBWV19GRUFUX0RJTQkJCQkJKDM5KQoKI2RlZmluZSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FTTV9WCQkJKDB4NykKI2RlZmluZSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FETV9WCQkJKDB4OCkKI2RlZmluZSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0xTTV9WCQkJKDB4RCkKI2RlZmluZSBBUFJWMl9JRFNfRE9NQUlOX0lEX0FEU1BfVgkJCSgweDQpCiNkZWZpbmUgQVBSVjJfSURTX0RPTUFJTl9JRF9BUFBTX1YJCQkoMHg1KQoKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUwkJKDB4MDAwMTJBN0YpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMJKDB4MDAwMTJBODApCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1NIQVJFRF9NRU1fVU5NQVBfUkVHSU9OUwkoMHgwMDAxMkE4MSkKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfT1BFTl9UWAkJCQkoMHgwMDAxMkE4MikKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfQ0xPU0VfVFgJCQkoMHgwMDAxMkE4OCkKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfU0VUX1BBUkFNUwkJCSgweDAwMDEyQTgzKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9TRVRfUEFSQU1TX1YyCQkJKDB4MDAwMTJBOEYpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1JFR0lTVEVSX1NPVU5EX01PREVMCQkoMHgwMDAxMkE4NCkKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfREVSRUdJU1RFUl9TT1VORF9NT0RFTAkJKDB4MDAwMTJBODUpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1NUQVJUCQkJCSgweDAwMDEyQTg2KQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9TVE9QCQkJCSgweDAwMDEyQTg3KQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9FT0IJCQkJKDB4MDAwMTJBODkpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1JFQUQJCQkJKDB4MDAwMTJBOEEpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX09QRU5fVFhfVjIJCQkoMHgwMDAxMkE4QikKI2RlZmluZSBMU01fQ01EX0FERF9UT1BPTE9HSUVTCQkJCSgweDAwMDEyQThDKQoKI2RlZmluZSBMU01fU0VTU0lPTl9FVkVOVF9ERVRFQ1RJT05fU1RBVFVTCQkoMHgwMDAxMkIwMCkKI2RlZmluZSBMU01fU0VTU0lPTl9FVkVOVF9ERVRFQ1RJT05fU1RBVFVTX1YyCQkoMHgwMDAxMkIwMSkKI2RlZmluZSBMU01fREFUQV9FVkVOVF9SRUFEX0RPTkUJCQkoMHgwMDAxMkIwMikKI2RlZmluZSBMU01fREFUQV9FVkVOVF9TVEFUVVMJCQkJKDB4MDAwMTJCMDMpCiNkZWZpbmUgTFNNX1NFU1NJT05fRVZFTlRfREVURUNUSU9OX1NUQVRVU19WMwkJKDB4MDAwMTJCMDQpCgojZGVmaW5lIExTTV9NT0RVTEVfSURfVk9JQ0VfV0FLRVVQCQkJKDB4MDAwMTJDMDApCiNkZWZpbmUgTFNNX1BBUkFNX0lEX0VORFBPSU5UX0RFVEVDVF9USFJFU0hPTEQJCSgweDAwMDEyQzAxKQojZGVmaW5lIExTTV9QQVJBTV9JRF9PUEVSQVRJT05fTU9ERQkJCSgweDAwMDEyQzAyKQojZGVmaW5lIExTTV9QQVJBTV9JRF9HQUlOCQkJCSgweDAwMDEyQzAzKQojZGVmaW5lIExTTV9QQVJBTV9JRF9DT05ORUNUX1RPX1BPUlQJCQkoMHgwMDAxMkMwNCkKI2RlZmluZSBMU01fUEFSQU1fSURfRkVBVFVSRV9DT01QRU5TQVRJT05fREFUQQkJKDB4MDAwMTJDMDcpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX01JTl9DT05GSURFTkNFX0xFVkVMUwkJKDB4MDAwMTJDMDcpCiNkZWZpbmUgTFNNX01PRFVMRV9JRF9MQUIJCQkJKDB4MDAwMTJDMDgpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX0xBQl9FTkFCTEUJCQkJKDB4MDAwMTJDMDkpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX0xBQl9DT05GSUcJCQkJKDB4MDAwMTJDMEEpCiNkZWZpbmUgTFNNX01PRFVMRV9JRF9GUkFNRVdPUksJCQkJKDB4MDAwMTJDMEUpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX1NXTUFEX0NGRwkJCQkoMHgwMDAxMkMxOCkKI2RlZmluZSBMU01fUEFSQU1fSURfU1dNQURfTU9ERUwJCQkoMHgwMDAxMkMxOSkKI2RlZmluZSBMU01fUEFSQU1fSURfU1dNQURfRU5BQkxFCQkJKDB4MDAwMTJDMUEpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX1BPTExJTkdfRU5BQkxFCQkJKDB4MDAwMTJDMUIpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX01FRElBX0ZNVAkJCQkoMHgwMDAxMkMxRSkKI2RlZmluZSBMU01fUEFSQU1fSURfRldLX01PREVfQ09ORklHCQkJKDB4MDAwMTJDMjcpCgovKiBIVyBNQUQgc3BlY2lmaWMgKi8KI2RlZmluZSBBRkVfTU9EVUxFX0hXX01BRAkJCQkoMHgwMDAxMDIzMCkKI2RlZmluZSBBRkVfUEFSQU1fSURfSFdfTUFEX0NGRwkJCQkoMHgwMDAxMDIzMSkKI2RlZmluZSBBRkVfUEFSQU1fSURfSFdfTUFEX0NUUkwJCQkoMHgwMDAxMDIzMikKI2RlZmluZSBBRkVfUEFSQU1fSURfU0xJTUJVU19TTEFWRV9QT1JUX0NGRwkJKDB4MDAwMTAyMzMpCgovKiBTVyBNQUQgc3BlY2lmaWMgKi8KI2RlZmluZSBBRkVfTU9EVUxFX1NXX01BRAkJCQkoMHgwMDAxMDIyRCkKI2RlZmluZSBBRkVfUEFSQU1fSURfU1dfTUFEX0NGRwkJCQkoMHgwMDAxMDIyRSkKI2RlZmluZSBBRkVfUEFSQU1fSURfU1ZNX01PREVMCQkJCSgweDAwMDEwMjJGKQoKLyogQ29tbWFuZHMvUGFyYW1zIHRvIHBhc3MgdGhlIGNvZGVjL3NsaW1idXMgZGF0YSB0byBEU1AgKi8KI2RlZmluZSBBRkVfU1ZDX0NNRF9TRVRfUEFSQU0JCQkJKDB4MDAwMTAwZjMpCiNkZWZpbmUgQUZFX01PRFVMRV9DRENfREVWX0NGRwkJCQkoMHgwMDAxMDIzNCkKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0RDX1NMSU1CVVNfU0xBVkVfQ0ZHCQkoMHgwMDAxMDIzNSkKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0RDX1JFR19DRkcJCQkoMHgwMDAxMDIzNikKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0RDX1JFR19DRkdfSU5JVAkJCSgweDAwMDEwMjM3KQojZGVmaW5lIEFGRV9QQVJBTV9JRF9DRENfUkVHX1BBR0VfQ0ZHICAgICAgICAgICAgICAgICAgICgweDAwMDEwMjk2KQoKI2RlZmluZSBBRkVfTUFYX0NEQ19SRUdJU1RFUlNfVE9fQ09ORklHCQkJKDIwKQoKLyogQUFOQyBQb3J0IENvbmZpZyBTcGVjaWZpYyAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9BQU5DX1BPUlRfQ09ORklHCQkJKDB4MDAwMTAyMTUpCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0FBTkNfUE9SVF9DT05GSUcJCSgweDEpCiNkZWZpbmUgQUFOQ19UWF9NSUNfVU5VU0VECQkJCSgwKQojZGVmaW5lIEFBTkNfVFhfVk9JQ0VfTUlDCQkJCSgxKQojZGVmaW5lIEFBTkNfVFhfRVJST1JfTUlDCQkJCSgyKQojZGVmaW5lIEFBTkNfVFhfTk9JU0VfTUlDCQkJCSgzKQojZGVmaW5lIEFGRV9QT1JUX01BWF9DSEFOTkVMX0NOVAkJCSg4KQojZGVmaW5lIEFGRV9NT0RVTEVfQUFOQwkJCQkJKDB4MDAwMTAyMTQpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NEQ19BQU5DX1ZFUlNJT04JCQkoMHgwMDAxMDIzQSkKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fQ0RDX0FBTkNfVkVSU0lPTgkJKDB4MSkKI2RlZmluZSBBQU5DX0hXX0JMT0NLX1ZFUlNJT05fMQkJCQkoMSkKI2RlZmluZSBBQU5DX0hXX0JMT0NLX1ZFUlNJT05fMgkJCQkoMikKCi8qQ2xpcCBiYW5rIHNlbGVjdGlvbiovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0NMSVBfQkFOS19TRUxfQ0ZHIDB4MQojZGVmaW5lIEFGRV9DTElQX01BWF9CQU5LUwkJNAojZGVmaW5lIEFGRV9QQVJBTV9JRF9DTElQX0JBTktfU0VMX0NGRyAweDAwMDEwMjQyCgpzdHJ1Y3QgYWZlX3BhcmFtX2FhbmNfcG9ydF9jZmcgewoJLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgbW9kdWxlJ3MKCSAqIHNvdXJjZSBwb3J0IGNvbmZpZ3VyYXRpb24uCgkgKi8KCXVpbnQzMl90IGFhbmNfcG9ydF9jZmdfbWlub3JfdmVyc2lvbjsKCgkvKiBTYW1wbGluZyByYXRlIG9mIHRoZSBzb3VyY2UgVHggcG9ydC4gOGsgLSAxOTJrKi8KCXVpbnQzMl90IHR4X3BvcnRfc2FtcGxlX3JhdGU7CgoJLyogQ2hhbm5lbCBtYXBwaW5nIGZvciB0aGUgVHggcG9ydCBzaWduYWwgY2FycnlpbmcgTm9pc2UgKFgpLAoJICogRXJyb3IgKEUpLCBhbmQgVm9pY2UgKFYpIHNpZ25hbHMuCgkgKi8KCXVpbnQ4X3QgdHhfcG9ydF9jaGFubmVsX21hcFtBRkVfUE9SVF9NQVhfQ0hBTk5FTF9DTlRdOwoKCS8qIE51bWJlciBvZiBjaGFubmVscyBvbiB0aGUgc291cmNlIFR4IHBvcnQuICovCgl1aW50MTZfdCB0eF9wb3J0X251bV9jaGFubmVsczsKCgkvKiBQb3J0IElEIG9mIHRoZSBSeCBwYXRoIHJlZmVyZW5jZSBzaWduYWwuICovCgl1aW50MTZfdCByeF9wYXRoX3JlZl9wb3J0X2lkOwoKCS8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHJlZmVyZW5jZSBwb3J0LiA4ayAtIDE5MmsqLwoJdWludDMyX3QgcmVmX3BvcnRfc2FtcGxlX3JhdGU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2NkY19hYW5jX3ZlcnNpb24gewoJLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgbW9kdWxlJ3MKCSAqIGh3IHZlcnNpb24KCSAqLwoJdWludDMyX3QgY2RjX2FhbmNfbWlub3JfdmVyc2lvbjsKCgkvKiBIVyB2ZXJzaW9uLiAqLwoJdWludDMyX3QgYWFuY19od192ZXJzaW9uOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9pZF9jbGlwX2Jhbmtfc2VsIHsKCS8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZSdzCgkgKiBodyB2ZXJzaW9uCgkgKi8KCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247CgoJLyogTnVtYmVyIG9mIGJhbmtzIHRvIGJlIHJlYWQgKi8KCXVpbnQzMl90IG51bV9iYW5rczsKCgl1aW50MzJfdCBiYW5rX21hcFtBRkVfQ0xJUF9NQVhfQkFOS1NdOwp9IF9fcGFja2VkOwoKLyogRVJST1IgQ09ERVMgKi8KLyogU3VjY2Vzcy4gVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgd2l0aCBubyBlcnJvcnMuICovCiNkZWZpbmUgQURTUF9FT0sgICAgICAgICAgMHgwMDAwMDAwMAovKiBHZW5lcmFsIGZhaWx1cmUuICovCiNkZWZpbmUgQURTUF9FRkFJTEVEICAgICAgMHgwMDAwMDAwMQovKiBCYWQgb3BlcmF0aW9uIHBhcmFtZXRlci4gKi8KI2RlZmluZSBBRFNQX0VCQURQQVJBTSAgICAweDAwMDAwMDAyCi8qIFVuc3VwcG9ydGVkIHJvdXRpbmUgb3Igb3BlcmF0aW9uLiAqLwojZGVmaW5lIEFEU1BfRVVOU1VQUE9SVEVEIDB4MDAwMDAwMDMKLyogVW5zdXBwb3J0ZWQgdmVyc2lvbi4gKi8KI2RlZmluZSBBRFNQX0VWRVJTSU9OICAgICAweDAwMDAwMDA0Ci8qIFVuZXhwZWN0ZWQgcHJvYmxlbSBlbmNvdW50ZXJlZC4gKi8KI2RlZmluZSBBRFNQX0VVTkVYUEVDVEVEICAweDAwMDAwMDA1Ci8qIFVuaGFuZGxlZCBwcm9ibGVtIG9jY3VycmVkLiAqLwojZGVmaW5lIEFEU1BfRVBBTklDICAgICAgIDB4MDAwMDAwMDYKLyogVW5hYmxlIHRvIGFsbG9jYXRlIHJlc291cmNlLiAqLwojZGVmaW5lIEFEU1BfRU5PUkVTT1VSQ0UgIDB4MDAwMDAwMDcKLyogSW52YWxpZCBoYW5kbGUuICovCiNkZWZpbmUgQURTUF9FSEFORExFICAgICAgMHgwMDAwMDAwOAovKiBPcGVyYXRpb24gaXMgYWxyZWFkeSBwcm9jZXNzZWQuICovCiNkZWZpbmUgQURTUF9FQUxSRUFEWSAgICAgMHgwMDAwMDAwOQovKiBPcGVyYXRpb24gaXMgbm90IHJlYWR5IHRvIGJlIHByb2Nlc3NlZC4gKi8KI2RlZmluZSBBRFNQX0VOT1RSRUFEWSAgICAweDAwMDAwMDBBCi8qIE9wZXJhdGlvbiBpcyBwZW5kaW5nIGNvbXBsZXRpb24uICovCiNkZWZpbmUgQURTUF9FUEVORElORyAgICAgMHgwMDAwMDAwQgovKiBPcGVyYXRpb24gY291bGQgbm90IGJlIGFjY2VwdGVkIG9yIHByb2Nlc3NlZC4gKi8KI2RlZmluZSBBRFNQX0VCVVNZICAgICAgICAweDAwMDAwMDBDCi8qIE9wZXJhdGlvbiBhYm9ydGVkIGR1ZSB0byBhbiBlcnJvci4gKi8KI2RlZmluZSBBRFNQX0VBQk9SVEVEICAgICAweDAwMDAwMDBECi8qIE9wZXJhdGlvbiBwcmVlbXB0ZWQgYnkgYSBoaWdoZXIgcHJpb3JpdHkuICovCiNkZWZpbmUgQURTUF9FUFJFRU1QVEVEICAgMHgwMDAwMDAwRQovKiBPcGVyYXRpb24gcmVxdWVzdHMgaW50ZXJ2ZW50aW9uIHRvIGNvbXBsZXRlLiAqLwojZGVmaW5lIEFEU1BfRUNPTlRJTlVFICAgIDB4MDAwMDAwMEYKLyogT3BlcmF0aW9uIHJlcXVlc3RzIGltbWVkaWF0ZSBpbnRlcnZlbnRpb24gdG8gY29tcGxldGUuICovCiNkZWZpbmUgQURTUF9FSU1NRURJQVRFICAgMHgwMDAwMDAxMAovKiBPcGVyYXRpb24gaXMgbm90IGltcGxlbWVudGVkLiAqLwojZGVmaW5lIEFEU1BfRU5PVElNUEwgICAgIDB4MDAwMDAwMTEKLyogT3BlcmF0aW9uIG5lZWRzIG1vcmUgZGF0YSBvciByZXNvdXJjZXMuICovCiNkZWZpbmUgQURTUF9FTkVFRE1PUkUgICAgMHgwMDAwMDAxMgovKiBPcGVyYXRpb24gZG9lcyBub3QgaGF2ZSBtZW1vcnkuICovCiNkZWZpbmUgQURTUF9FTk9NRU1PUlkgICAgMHgwMDAwMDAxNAovKiBJdGVtIGRvZXMgbm90IGV4aXN0LiAqLwojZGVmaW5lIEFEU1BfRU5PVEVYSVNUICAgIDB4MDAwMDAwMTUKLyogTWF4IGNvdW50IGZvciBhZHNwIGVycm9yIGNvZGUgc2VudCB0byBITE9TKi8KI2RlZmluZSBBRFNQX0VSUl9NQVggICAgICAoQURTUF9FTk9URVhJU1QgKyAxKQovKiBPcGVyYXRpb24gaXMgZmluaXNoZWQuICovCiNkZWZpbmUgQURTUF9FVEVSTUlOQVRFRCAgICAweDAwMDExMTc0CgovKmJoYXJhdGgsIGFkc3BfZXJyb3JfY29kZXMuaCAqLwoKLyogTFBBU1MgY2xvY2sgZm9yIEkyUyBJbnRlcmZhY2UgKi8KCi8qIFN1cHBvcnRlZCBPU1IgY2xvY2sgdmFsdWVzICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS18xMl9QMjg4X01IWgkJMHhCQjgwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzExX1AyODk2X01IWgkJMHhBQzQ0MDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzlfUDYwMF9NSFoJCTB4OTI3QzAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS184X1AxOTJfTUhaCQkweDdEMDAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfNl9QMTQ0X01IWgkJMHg1REMwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzRfUDA5Nl9NSFoJCTB4M0U4MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS18zX1AwNzJfTUhaCQkweDJFRTAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfMl9QMDQ4X01IWgkJMHgxRjQwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzFfUDUzNl9NSFoJCTB4MTc3MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS18xX1AwMjRfTUhaCQkgMHhGQTAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfNzY4X2tIWgkJIDB4QkI4MDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzUxMl9rSFoJCSAweDdEMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS19ESVNBQkxFCQkgICAgIDB4MAoKLyogU3VwcG9ydGVkIEJpdCBjbG9jayB2YWx1ZXMgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xMl9QMjg4X01IWgkweEJCODAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzExX1AyODk2X01IWgkweEFDNDQwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzhfUDE5Ml9NSFoJCTB4N0QwMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfNl9QMTQ0X01IWgkJMHg1REMwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS180X1AwOTZfTUhaCQkweDNFODAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzNfUDA3Ml9NSFoJCTB4MkVFMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfMl9QODIyNF9NSFoJCTB4MmIxMTAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfMl9QMDQ4X01IWgkJMHgxRjQwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xX1A1MzZfTUhaCQkweDE3NzAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzFfUDQxMTJfTUhaCQkweDE1ODg4MAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzFfUDAyNF9NSFoJCSAweEZBMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfNzY4X0tIWgkJIDB4QkI4MDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS181MTJfS0haCQkgMHg3RDAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzI1Nl9LSFoJCSAweDNFODAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfRElTQUJMRQkJICAgICAweDAKCi8qIFN1cHBvcnRlZCBMUEFTUyBDTEsgc291cmNlcyAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19TUkNfRVhURVJOQUwgMAojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19TUkNfSU5URVJOQUwgMQoKLyogU3VwcG9ydGVkIExQQVNTIENMSyByb290Ki8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfUk9PVF9ERUZBVUxUIDAKCmVudW0gYWZlX2xwYXNzX2Nsa19tb2RlIHsKCVE2QUZFX0xQQVNTX01PREVfQk9USF9JTlZBTElELAoJUTZBRkVfTFBBU1NfTU9ERV9DTEsxX1ZBTElELAoJUTZBRkVfTFBBU1NfTU9ERV9DTEsyX1ZBTElELAoJUTZBRkVfTFBBU1NfTU9ERV9CT1RIX1ZBTElELAp9IF9fcGFja2VkOwoKLyogQ2xvY2sgSUQgRW51bWVyYXRpb24gRGVmaW5lLiAqLwovKiBDbG9jayBJRCBmb3IgUHJpbWFyeSBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9QUklfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMAovKiBDbG9jayBJRCBmb3IgUHJpbWFyeSBJMlMgRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9QUklfTUkyU19FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMQovKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IEkyUyBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAyCi8qIENsb2NrIElEIGZvciBTZWNvbmRhcnkgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VDX01JMlNfRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDMKLyogQ2xvY2sgSUQgZm9yIFRlcnRpYXJ5IEkyUyBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1RFUl9NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTA0Ci8qIENsb2NrIElEIGZvciBUZXJ0aWFyeSBJMlMgRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfTUkyU19FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwNQovKiBDbG9jayBJRCBmb3IgUXVhcnRuZXJ5IEkyUyBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVQURfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTA2Ci8qIENsb2NrIElEIGZvciBRdWFydG5lcnkgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVBRF9NSTJTX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDcKLyogQ2xvY2sgSUQgZm9yIFNwZWFrZXIgSTJTIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU1BFQUtFUl9JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDgKLyogQ2xvY2sgSUQgZm9yIFNwZWFrZXIgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU1BFQUtFUl9JMlNfRUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDkKLyogQ2xvY2sgSUQgZm9yIFNwZWFrZXIgSTJTIE9TUiAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TUEVBS0VSX0kyU19PU1IgICAgICAgICAgICAgICAgICAgICAgICAweDEwQQoKLyogQ2xvY2sgSUQgZm9yIFFVSU5BUlkgIEkyUyBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSV9NSTJTX0lCSVQJCQkweDEwQgovKiBDbG9jayBJRCBmb3IgUVVJTkFSWSAgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVJX01JMlNfRUJJVAkJCTB4MTBDCi8qIENsb2NrIElEIGZvciBTRU5BUlkgIEkyUyBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFTl9NSTJTX0lCSVQJCQkweDEwRAovKiBDbG9jayBJRCBmb3IgU0VOQVJZICBJMlMgRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TRU5fTUkyU19FQklUCQkJMHgxMEUKLyogQ2xvY2sgSUQgZm9yIElOVDAgSTJTIElCSVQgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVDBfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAweDEwRgovKiBDbG9jayBJRCBmb3IgSU5UMSBJMlMgSUJJVCAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5UMV9NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTEwCi8qIENsb2NrIElEIGZvciBJTlQyIEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQyX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMTEKLyogQ2xvY2sgSUQgZm9yIElOVDMgSTJTIElCSVQgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVDNfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAweDExMgovKiBDbG9jayBJRCBmb3IgSU5UNCBJMlMgSUJJVCAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5UNF9NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTEzCi8qIENsb2NrIElEIGZvciBJTlQ1IEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQ1X01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMTQKLyogQ2xvY2sgSUQgZm9yIElOVDYgSTJTIElCSVQgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVDZfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAweDExNQoKLyogQ2xvY2sgSUQgZm9yIFFVSU5BUlkgTUkyUyBPU1IgQ0xLICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUlfTUkyU19PU1IgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMTYKCi8qIENsb2NrIElEIGZvciBQcmltYXJ5IFBDTSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1BSSV9QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAwCi8qIENsb2NrIElEIGZvciBQcmltYXJ5IFBDTSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1BSSV9QQ01fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCi8qIENsb2NrIElEIGZvciBTZWNvbmRhcnkgUENNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VDX1BDTV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDIKLyogQ2xvY2sgSUQgZm9yIFNlY29uZGFyeSBQQ00gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TRUNfUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMwovKiBDbG9jayBJRCBmb3IgVGVydGlhcnkgUENNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfVEVSX1BDTV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDQKLyogQ2xvY2sgSUQgZm9yIFRlcnRpYXJ5IFBDTSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1RFUl9QQ01fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA1Ci8qIENsb2NrIElEIGZvciBRdWFydGVyeSBQQ00gSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUFEX1BDTV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwNgovKiBDbG9jayBJRCBmb3IgUXVhcnRlcnkgUENNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVBRF9QQ01fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDcKLyogQ2xvY2sgSUQgZm9yIFF1aW5hcnkgUENNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVJTl9QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDgKLyogQ2xvY2sgSUQgZm9yIFF1aW5hcnkgUENNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVJTl9QQ01fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDkKLyogQ2xvY2sgSUQgZm9yIFFVSU5BUlkgUENNIE9TUiAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVJX1BDTV9PU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMEEKCi8qKiBDbG9jayBJRCBmb3IgUHJpbWFyeSBURE0gSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9QUklfVERNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMAovKiogQ2xvY2sgSUQgZm9yIFByaW1hcnkgVERNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUFJJX1RETV9FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDEKLyoqIENsb2NrIElEIGZvciBTZWNvbmRhcnkgVERNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VDX1RETV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDIKLyoqIENsb2NrIElEIGZvciBTZWNvbmRhcnkgVERNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VDX1RETV9FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDMKLyoqIENsb2NrIElEIGZvciBUZXJ0aWFyeSBURE0gSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfVERNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwNAovKiogQ2xvY2sgSUQgZm9yIFRlcnRpYXJ5IFRETSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1RFUl9URE1fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA1Ci8qKiBDbG9jayBJRCBmb3IgUXVhcnRlcnkgVERNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVBRF9URE1fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDYKLyoqIENsb2NrIElEIGZvciBRdWFydGVyeSBURE0gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUFEX1RETV9FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwNwovKiogQ2xvY2sgSUQgZm9yIFF1aW5hcnkgVERNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVJTl9URE1fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDgKLyoqIENsb2NrIElEIGZvciBRdWluYXJ5IFRETSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fVERNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA5Ci8qKiBDbG9jayBJRCBmb3IgUXVpbmFyeSBURE0gT1NSICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fVERNX09TUiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBBCgovKiBDbG9jayBJRCBmb3IgTUNMSzEgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfTUNMS18xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDAKLyogQ2xvY2sgSUQgZm9yIE1DTEsyICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX01DTEtfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAxCi8qIENsb2NrIElEIGZvciBNQ0xLMyAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9NQ0xLXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMgovKiBDbG9jayBJRCBmb3IgTUNMSzQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfTUNMS180ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDQKLyogQ2xvY2sgSUQgZm9yIEludGVybmFsIERpZ2l0YWwgQ29kZWMgQ29yZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlRFUk5BTF9ESUdJVEFMX0NPREVDX0NPUkUgICAgICAgICAgICAweDMwMwovKiBDbG9jayBJRCBmb3IgSU5UIE1DTEswICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVF9NQ0xLXzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA1Ci8qIENsb2NrIElEIGZvciBJTlQgTUNMSzEgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5UX01DTEtfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDYKLyoKICogQ2xvY2sgSUQgZm9yIHNvdW5kd2lyZSBOUEwuCiAqIFRoaXMgaXMgdGhlIGNsb2NrIHRvIGJlIHVzZWQgdG8gZW5hYmxlIE5QTCBjbG9jayBmb3IgIGludGVybmFsIFNvdW5kd2lyZS4KICovCiNkZWZpbmUgQUZFX0NMT0NLX1NFVF9DTE9DS19JRF9TV1JfTlBMX0NMSyAgICAgICAgICAgICAgICAgICAgICAgICAweDMwNwoKLyogQ2xvY2sgSUQgZm9yIEFIQiBIRE1JIGlucHV0ICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0FIQl9IRE1JX0lOUFVUICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwCgovKiBDbG9jayBJRCBmb3IgU1BESUYgY29yZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TUERJRl9DT1JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDUwMAoKCi8qIENsb2NrIGF0dHJpYnV0ZSBmb3IgaW52YWxpZCB1c2UgKHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSkgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0lOVkFMSUQJCTB4MAovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIG5vIGNvdXBsZSBjYXNlICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9DT1VQTEVfTk8JCTB4MQovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIGRpdmlkZW5kIGNvdXBsZSBjYXNlICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9DT1VQTEVfRElWSURFTkQJMHgyCi8qIENsb2NrIGF0dHJpYnV0ZSBmb3IgZGl2aXNvciBjb3VwbGUgY2FzZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX0RJVklTT1IJMHgzCi8qIENsb2NrIGF0dHJpYnV0ZSBmb3IgaW52ZXJ0IGFuZCBubyBjb3VwbGUgY2FzZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfSU5WRVJUX0NPVVBMRV9OTwkweDQKLyogQ2xvY2sgc2V0IEFQSSB2ZXJzaW9uICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0NPTkZJR19BUElfVkVSU0lPTgkJMHgxCgpzdHJ1Y3QgYWZlX2Nsa19zZXQgewoJLyoKCSAqIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgY2xvY2sgc2V0LgoJICoJQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX0NMT0NLX1NFVAoJICovCgl1aW50MzJfdCBjbGtfc2V0X21pbm9yX3ZlcnNpb247CgoJLyoKCSAqIENsb2NrIElECgkgKglAdmFsdWVzCgkgKgktIDB4MTAwIHRvIDB4MTBBIC0gTVNNODk5NgoJICoJLSAweDIwMCB0byAweDIwNyAtIE1TTTg5OTYKCSAqCS0gMHgzMDAgdG8gMHgzMDIgLSBNU004OTk2IEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MzJfdCBjbGtfaWQ7CgoJLyoKCSAqIENsb2NrIGZyZXF1ZW5jeSAgKGluIEhlcnR6KSB0byBiZSBzZXQuCgkgKglAdmFsdWVzCgkgKgktID49IDAgZm9yIGNsb2NrIGZyZXF1ZW5jeSB0byBzZXQgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQzMl90IGNsa19mcmVxX2luX2h6OwoKCS8qIFVzZSB0byBzcGVjaWZpYyBkaXZpZGVyIGZvciB0d28gY2xvY2tzIGlmIG5lZWRlZC4KCSAqCVNldCB0byBRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0NPVVBMRV9OTyBmb3Igbm8gZGl2aWRlcgoJICoJcmVsYXRpb24gY2xvY2tzCgkgKglAdmFsdWVzCgkgKgktICNRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0NPVVBMRV9OTwoJICoJLSAjUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9DT1VQTEVfRElWSURFTkQKCSAqCS0gI1E2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX0RJVklTT1IgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQxNl90IGNsa19hdHRyaTsKCgkvKgoJICogU3BlY2lmaWVzIHRoZSByb290IGNsb2NrIHNvdXJjZS4KCSAqCUN1cnJlbnRseSwgb25seSBRNkFGRV9MUEFTU19DTEtfUk9PVF9ERUZBVUxUIGlzIHZhbGlkCgkgKglAdmFsdWVzCgkgKgktIDAgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQxNl90IGNsa19yb290OwoKCS8qCgkgKiBmb3IgZW5hYmxlIGFuZCBkaXNhYmxlIGNsb2NrLgoJICoJImNsa19mcmVxX2luX2h6IiwgImNsa19hdHRyaSIsIGFuZCAiY2xrX3Jvb3QiCgkgKglhcmUgaWdub3JlZCBpbiBkaXNhYmxlIGNsb2NrIGNhc2UuCgkgKglAdmFsdWVzoAoJICoJLSAwIC0tIERpc2FibGVkCgkgKgktIDEgLS0gRW5hYmxlZCAgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQzMl90IGVuYWJsZTsKfTsKCnN0cnVjdCBhZmVfY2xrX2NmZyB7Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEkyUwogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9JMlNfQ09ORklHCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgaTJzX2NmZ19taW5vcl92ZXJzaW9uOwoKLyogY2xrIHZhbHVlIDEgaW4gTUh6LiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2xrX3ZhbDE7CgovKiBjbGsgdmFsdWUgMiBpbiBNSHouICovCgl1MzIgICAgICAgICAgICAgICAgICBjbGtfdmFsMjsKCi8qIGNsa19zcmMKICogI1E2QUZFX0xQQVNTX0NMS19TUkNfRVhURVJOQUwKICogI1E2QUZFX0xQQVNTX0NMS19TUkNfSU5URVJOQUwKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgY2xrX3NyYzsKCi8qIGNsa19yb290IC0wIGZvciBkZWZhdWx0ICovCgl1MTYgICAgICAgICAgICAgICAgICBjbGtfcm9vdDsKCi8qIGNsa19zZXRfbW9kZQogKiAjUTZBRkVfTFBBU1NfTU9ERV9CT1RIX0lOVkFMSUQKICogI1E2QUZFX0xQQVNTX01PREVfQ0xLMV9WQUxJRAogKiAjUTZBRkVfTFBBU1NfTU9ERV9DTEsyX1ZBTElECiAqICNRNkFGRV9MUEFTU19NT0RFX0JPVEhfVkFMSUQKICovCgl1MTYgICAgICAgICAgICAgICAgICBjbGtfc2V0X21vZGU7CgovKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIEkyUyBjbGsgKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwp9IF9fcGFja2VkOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBJMlMgY2xrICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0xQQUlGX0NMS19DT05GSUcJMHgwMDAxMDIzOAojZGVmaW5lIEFGRV9NT0RVTEVfQ0xPQ0tfU0VUCQkweDAwMDEwMjhGCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NMT0NLX1NFVAkJMHgwMDAxMDI5MAoKc3RydWN0IGFmZV9scGFzc19jbGtfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIJCQkgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXN0cnVjdCBhZmVfY2xrX2NmZyBjbGtfY2ZnOwp9IF9fcGFja2VkOwoKZW51bSBhZmVfbHBhc3NfZGlnaXRhbF9jbGtfc3JjIHsKCVE2QUZFX0xQQVNTX0RJR0lUQUxfUk9PVF9JTlZBTElELAoJUTZBRkVfTFBBU1NfRElHSVRBTF9ST09UX1BSSV9NSTJTX09TUiwKCVE2QUZFX0xQQVNTX0RJR0lUQUxfUk9PVF9TRUNfTUkyU19PU1IsCglRNkFGRV9MUEFTU19ESUdJVEFMX1JPT1RfVEVSX01JMlNfT1NSLAoJUTZBRkVfTFBBU1NfRElHSVRBTF9ST09UX1FVQURfTUkyU19PU1IsCglRNkFGRV9MUEFTU19ESUdJVEFMX1JPT1RfQ0RDX1JPT1RfQ0xLLAp9IF9fcGFja2VkOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBpbnRlcm5hbCBjbGsgKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfSU5URVJOQUxfRElHSUFUTF9DRENfQ0xLX0NPTkZJRwkweDAwMDEwMjM5CgpzdHJ1Y3QgYWZlX2RpZ2l0YWxfY2xrX2NmZyB7Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEkyUwogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9JMlNfQ09ORklHCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgaTJzX2NmZ19taW5vcl92ZXJzaW9uOwoKLyogY2xrIHZhbHVlIGluIE1Iei4gKi8KCXUzMiAgICAgICAgICAgICAgICAgIGNsa192YWw7CgovKglJTlZBTElECiAqCVBSSV9NSTJTX09TUgogKglTRUNfTUkyU19PU1IKICoJVEVSX01JMlNfT1NSCiAqCVFVQURfTUkyU19PU1IKICoJRElHVF9DRENfUk9PVAogKi8KCXUxNiAgICAgICAgICAgICAgICAgIGNsa19yb290OwoKLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgoKc3RydWN0IGFmZV9scGFzc19kaWdpdGFsX2Nsa19jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkcgkJCSBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgIHBkYXRhOwoJc3RydWN0IGFmZV9kaWdpdGFsX2Nsa19jZmcgY2xrX2NmZzsKfSBfX3BhY2tlZDsKCi8qCiAqIE9wY29kZSBmb3IgQUZFIHRvIHN0YXJ0IERUTUYuCiAqLwojZGVmaW5lIEFGRV9QT1JUU19DTURfRFRNRl9DVEwJMHgwMDAxMDEwMgoKLyoqIERUTUYgcGF5bG9hZC4qLwpzdHJ1Y3QgYWZlX2R0bWZfZ2VuZXJhdGlvbl9jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCgkvKgoJICogRHVyYXRpb24gb2YgdGhlIERUTUYgdG9uZSBpbiBtcy4KCSAqIC0xICAgICAgLT4gY29udGludW91cywKCSAqICAwICAgICAgLT4gZGlzYWJsZQoJICovCglpbnQ2NF90ICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uX2luX21zOwoKCS8qCgkgKiBUaGUgRFRNRiBoaWdoIHRvbmUgZnJlcXVlbmN5LgoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGhpZ2hfZnJlcTsKCgkvKgoJICogVGhlIERUTUYgbG93IHRvbmUgZnJlcXVlbmN5LgoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGxvd19mcmVxOwoKCS8qCgkgKiBUaGUgRFRNRiB2b2x1bWUgc2V0dGluZwoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGdhaW47CgoJLyoKCSAqIFRoZSBudW1iZXIgb2YgcG9ydHMgdG8gZW5hYmxlL2Rpc2FibGUgb24uCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbnVtX3BvcnRzOwoKCS8qCgkgKiBUaGUgRGVzdGluYXRpb24gcG9ydHMgLSBhcnJheSAgLgoJICogRm9yIERUTUYgb24gbXVsdGlwbGUgcG9ydHMsIHBvcnRJZHMgbmVlZHMgdG8KCSAqIGJlIHBvcHVsYXRlZCBudW1Qb3J0cyB0aW1lcy4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBwb3J0X2lkczsKCgkvKgoJICogdmFyaWFibGUgZm9yIDMyIGJpdCBhbGlnbm1lbnQgb2YgQVBSIHBhY2tldC4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCmVudW0gYWZlX2NvbmZpZ190eXBlIHsKCUFGRV9TTElNQlVTX1NMQVZFX1BPUlRfQ09ORklHLAoJQUZFX1NMSU1CVVNfU0xBVkVfQ09ORklHLAoJQUZFX0NEQ19SRUdJU1RFUlNfQ09ORklHLAoJQUZFX0FBTkNfVkVSU0lPTiwKCUFGRV9DRENfQ0xJUF9SRUdJU1RFUlNfQ09ORklHLAoJQUZFX0NMSVBfQkFOS19TRUwsCglBRkVfQ0RDX1JFR0lTVEVSX1BBR0VfQ09ORklHLAoJQUZFX01BWF9DT05GSUdfVFlQRVMsCn07CgpzdHJ1Y3QgYWZlX3BhcmFtX3NsaW1idXNfc2xhdmVfcG9ydF9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQxNl90IHNsaW1idXNfZGV2X2lkOwoJdWludDE2X3Qgc2xhdmVfZGV2X3BnZF9sYTsKCXVpbnQxNl90IHNsYXZlX2Rldl9pbnRmZGV2X2xhOwoJdWludDE2X3QgYml0X3dpZHRoOwoJdWludDE2X3QgZGF0YV9mb3JtYXQ7Cgl1aW50MTZfdCBudW1fY2hhbm5lbHM7Cgl1aW50MTZfdCBzbGF2ZV9wb3J0X21hcHBpbmdbQUZFX1BPUlRfTUFYX0FVRElPX0NIQU5fQ05UXTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1fY2RjX3NsaW1idXNfc2xhdmVfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBkZXZpY2VfZW51bV9hZGRyX2xzdzsKCXVpbnQzMl90IGRldmljZV9lbnVtX2FkZHJfbXN3OwoJdWludDE2X3QgdHhfc2xhdmVfcG9ydF9vZmZzZXQ7Cgl1aW50MTZfdCByeF9zbGF2ZV9wb3J0X29mZnNldDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IHJlZ19sb2dpY2FsX2FkZHI7Cgl1aW50MzJfdCByZWdfZmllbGRfdHlwZTsKCXVpbnQzMl90IHJlZ19maWVsZF9iaXRfbWFzazsKCXVpbnQxNl90IHJlZ19iaXRfd2lkdGg7Cgl1aW50MTZfdCByZWdfb2Zmc2V0X3NjYWxlOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fQ0RDX1JFR19QQUdFX0NGRyAgIDEKCmVudW0gewoJQUZFX0NEQ19SRUdfUEFHRV9BU1NJR05fUFJPQ19JRF8wID0gMCwKCUFGRV9DRENfUkVHX1BBR0VfQVNTSUdOX1BST0NfSURfMSwKCUFGRV9DRENfUkVHX1BBR0VfQVNTSUdOX1BST0NfSURfMiwKCUFGRV9DRENfUkVHX1BBR0VfQVNTSUdOX1BST0NfSURfMywKfTsKCnN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19wYWdlX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3QgZW5hYmxlOwoJdWludDMyX3QgcHJvY19pZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmdfZGF0YSB7Cgl1aW50MzJfdCBudW1fcmVnaXN0ZXJzOwoJc3RydWN0IGFmZV9wYXJhbV9jZGNfcmVnX2NmZyAqcmVnX2RhdGE7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3N2Y19jbWRfc2V0X3BhcmFtIHsKCXVpbnQzMl90IHBheWxvYWRfc2l6ZTsKCXVpbnQzMl90IHBheWxvYWRfYWRkcmVzc19sc3c7Cgl1aW50MzJfdCBwYXlsb2FkX2FkZHJlc3NfbXN3OwoJdWludDMyX3QgbWVtX21hcF9oYW5kbGU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3N2Y19wYXJhbV9kYXRhIHsKCXVpbnQzMl90IG1vZHVsZV9pZDsKCXVpbnQzMl90IHBhcmFtX2lkOwoJdWludDE2X3QgcGFyYW1fc2l6ZTsKCXVpbnQxNl90IHJlc2VydmVkOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9od19tYWRfY3RybCB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDE2X3QgbWFkX3R5cGU7Cgl1aW50MTZfdCBtYWRfZW5hYmxlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9jbWRfaHdfbWFkX2N0cmwgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faHdfbWFkX2N0cmwgcGF5bG9hZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfY21kX2h3X21hZF9zbGltYnVzX3NsYXZlX3BvcnRfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX3NsaW1idXNfc2xhdmVfcG9ydF9jZmcgc2JfcG9ydF9jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2NtZF9zd19tYWRfZW5hYmxlIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfY2ZnX3BheWxvYWQgewoJc3RydWN0IGFmZV9zdmNfcGFyYW1fZGF0YSAgICAgY29tbW9uOwoJc3RydWN0IGFmZV9wYXJhbV9jZGNfcmVnX2NmZyAgcmVnX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfbHBhc3NfY2xrX2NvbmZpZ19jb21tYW5kX3YyIHsKCXN0cnVjdCBhcHJfaGRyCQkJaGRyOwoJc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbQlwYXJhbTsKCXN0cnVjdCBhZmVfc3ZjX3BhcmFtX2RhdGEJcGRhdGE7CglzdHJ1Y3QgYWZlX2Nsa19zZXQJCWNsa19jZmc7Cn0gX19wYWNrZWQ7CgovKgogKiByZWdfZGF0YSdzIHNpemUgY2FuIGJlIHVwIHRvIEFGRV9NQVhfQ0RDX1JFR0lTVEVSU19UT19DT05GSUcKICovCnN0cnVjdCBhZmVfc3ZjX2NtZF9jZGNfcmVnX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3N2Y19jbWRfc2V0X3BhcmFtIHBhcmFtOwoJc3RydWN0IGFmZV9wYXJhbV9jZGNfcmVnX2NmZ19wYXlsb2FkIHJlZ19kYXRhWzBdOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfY21kX2luaXRfY2RjX3JlZ19jZmcgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIGluaXQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3N2Y19jbWRfc2Jfc2xhdmVfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3NsaW1idXNfc2xhdmVfY2ZnIHNiX3NsYXZlX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3ZjX2NtZF9jZGNfcmVnX3BhZ2VfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19wYWdlX2NmZyBjZGNfcmVnX3BhZ2VfY2ZnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfY21kX2NkY19hYW5jX3ZlcnNpb24gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9jZGNfYWFuY192ZXJzaW9uIHZlcnNpb247Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9hYW5jX3BhcmFtIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7Cgl1bmlvbiB7CgkJc3RydWN0IGFmZV9wYXJhbV9hYW5jX3BvcnRfY2ZnIGFhbmNfcG9ydF9jZmc7CgkJc3RydWN0IGFmZV9tb2RfZW5hYmxlX3BhcmFtICAgIG1vZF9lbmFibGU7Cgl9IF9fcGFja2VkIGRhdGE7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9hYW5jX2FjZGJfdGFibGUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07Cn0gX19wYWNrZWQ7CgovKiBEb2xieSBEQVAgdG9wb2xvZ3kgKi8KI2RlZmluZSBET0xCWV9BRE1fQ09QUF9UT1BPTE9HWV9JRAkweDAwMDEwMzNCCiNkZWZpbmUgRFMyX0FETV9DT1BQX1RPUE9MT0dZX0lECTB4MTMwMTAzM0IKCi8qIFJNUyB2YWx1ZSBmcm9tIERTUCAqLwojZGVmaW5lIFJNU19NT0RVTEVJRF9BUFBJX1BBU1NUSFJVICAweDEwMDA5MDExCiNkZWZpbmUgUk1TX1BBUkFNX0ZJUlNUX1NBTVBMRSAweDEwMDA5MDEyCiNkZWZpbmUgUk1TX1BBWUxPQURfTEVOIDQKCi8qIEN1c3RvbWl6ZWQgbWl4aW5nIGluIG1hdGl4IG1peGVyICovCiNkZWZpbmUgTVRNWF9NT0RVTEVfSURfREVGQVVMVF9DSE1JWEVSICAweDAwMDEwMzQxCiNkZWZpbmUgREVGQVVMVF9DSE1JWEVSX1BBUkFNX0lEX0NPRUZGICAweDAwMDEwMzQyCiNkZWZpbmUgQ1VTVE9NX1NURVJFT19QQVlMT0FEX1NJWkUJOQojZGVmaW5lIENVU1RPTV9TVEVSRU9fQ01EX1BBUkFNX1NJWkUJMjQKI2RlZmluZSBDVVNUT01fU1RFUkVPX05VTV9PVVRfQ0gJMHgwMDAyCiNkZWZpbmUgQ1VTVE9NX1NURVJFT19OVU1fSU5fQ0gJCTB4MDAwMgojZGVmaW5lIENVU1RPTV9TVEVSRU9fSU5ERVhfUEFSQU0JMHgwMDAyCiNkZWZpbmUgUTE0X0dBSU5fWkVST19QT0lOVF9GSVZFCTB4MjAwMAojZGVmaW5lIFExNF9HQUlOX1VOSVRZCQkJMHg0MDAwCgpzdHJ1Y3QgYWZlX3N2Y19jbWRfc2V0X2NsaXBfYmFua19zZWxlY3Rpb24gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9jbGlwX2Jhbmtfc2VsIGJhbmtfc2VsOwp9IF9fcGFja2VkOwoKLyogVWx0cmFzb3VuZCBzdXBwb3J0ZWQgZm9ybWF0cyAqLwojZGVmaW5lIFVTX1BPSU5UX0VQT1NfRk9STUFUX1YyIDB4MDAwMTI3MkQKI2RlZmluZSBVU19SQVdfRk9STUFUX1YyICAgICAgICAweDAwMDEyNzJDCiNkZWZpbmUgVVNfUFJPWF9GT1JNQVRfVjQgICAgICAgMHgwMDAxMjczQgojZGVmaW5lIFVTX1JBV19TWU5DX0ZPUk1BVCAgICAgIDB4MDAwMTI3MkYKI2RlZmluZSBVU19HRVNfU1lOQ19GT1JNQVQgICAgICAweDAwMDEyNzMwCgojZGVmaW5lIEFGRV9NT0RVTEVfR1JPVVBfREVWSUNFCTB4MDAwMTAyNTQKI2RlZmluZSBBRkVfUEFSQU1fSURfR1JPVVBfREVWSUNFX0NGRwkweDAwMDEwMjU1CiNkZWZpbmUgQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9FTkFCTEUgMHgwMDAxMDI1NgojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX01JMlNfUlgJMHgxMTAyCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfQ0ZHCiAqIHBhcmFtZXRlciwgd2hpY2ggY29uZmlndXJlcyBtYXggb2YgOCBBRkUgcG9ydHMKICogaW50byBhIGdyb3VwLgogKiBUaGUgZml4ZWQgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBzaXh0ZWVuIGJ5dGVzLgogKi8Kc3RydWN0IGFmZV9ncm91cF9kZXZpY2VfZ3JvdXBfY2ZnIHsKCXUzMiBtaW5vcl92ZXJzaW9uOwoJdTE2IGdyb3VwX2lkOwoJdTE2IG51bV9jaGFubmVsczsKCXUxNiBwb3J0X2lkWzhdOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1BSSU1BUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfUFJJTUFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9TRUNPTkRBUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9TRUNPTkRBUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9URVJUSUFSWV9URE1fUlggXAoJKEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfVEVSVElBUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1FVQVRFUk5BUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfUVVBVEVSTkFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9RVUlOQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1FVSU5BUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MTAwKQoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5ICNBRkVfTU9EVUxFX0dST1VQX0RFVklDRSB0byBjb25maWd1cmUgdGhlCiAqIGdyb3VwIGRldmljZS4gI0FGRV9TVkNfQ01EX1NFVF9QQVJBTSBjYW4gdXNlIHRoaXMgcGFyYW1ldGVyIElELgogKgogKiBSZXF1aXJlbWVudHM6CiAqIC0gQ29uZmlndXJlIHRoZSBncm91cCBiZWZvcmUgdGhlIG1lbWJlciBwb3J0cyBpbiB0aGUgZ3JvdXAgYXJlCiAqIGNvbmZpZ3VyZWQgYW5kIHN0YXJ0ZWQuCiAqIC0gRW5hYmxlIHRoZSBncm91cCBvbmx5IGFmdGVyIGl0IGlzIGNvbmZpZ3VyZWQuCiAqIC0gU3RvcCBhbGwgbWVtYmVyIHBvcnRzIGluIHRoZSBncm91cCBiZWZvcmUgZGlzYWJsaW5nIHRoZSBncm91cC4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9URE1fQ09ORklHCTB4MDAwMTAyOUUKCi8qIFZlcnNpb24gaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUgZnV0dXJlIGFkZGl0aW9ucyB0bwogKiBBRkVfUEFSQU1fSURfR1JPVVBfREVWSUNFX1RETV9DT05GSUcgcHJvY2Vzc2luZyAoZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fR1JPVVBfREVWSUNFX1RETV9DT05GSUcJMHgxCgovKiBOdW1iZXIgb2YgQUZFIHBvcnRzIGluIGdyb3VwIGRldmljZSAgKi8KI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX05VTV9QT1JUUwkJCQkJOAoKLyogUGF5bG9hZCBvZiB0aGUgQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9URE1fQ09ORklHIHBhcmFtZXRlciBJRAogKiB1c2VkIGJ5IEFGRV9NT0RVTEVfR1JPVVBfREVWSUNFLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9ncm91cF9kZXZpY2VfdGRtX2NmZyB7Cgl1MzIJZ3JvdXBfZGV2aWNlX2NmZ19taW5vcl92ZXJzaW9uOwoJLyogTWlub3IgdmVyc2lvbiB1c2VkIHRvIHRyYWNrIGdyb3VwIGRldmljZSBjb25maWd1cmF0aW9uLgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX0dST1VQX0RFVklDRV9URE1fQ09ORklHCgkgKi8KCgl1MTYJZ3JvdXBfaWQ7CgkvKiBJRCBmb3IgdGhlIGdyb3VwIGRldmljZS4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfUFJJTUFSWV9URE1fUlgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfUFJJTUFSWV9URE1fVFgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX1RETV9SWAoJICogLSAjQUZFX0dST1VQX0RFVklDRV9JRF9TRUNPTkRBUllfVERNX1RYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1RFUlRJQVJZX1RETV9SWAoJICogLSAjQUZFX0dST1VQX0RFVklDRV9JRF9URVJUSUFSWV9URE1fVFgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfUVVBVEVSTkFSWV9URE1fUlgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfUVVBVEVSTkFSWV9URE1fVFgKCSAqLwoKCXUxNglyZXNlcnZlZDsKCS8qIDAgKi8KCgl1MTYJcG9ydF9pZFtBRkVfR1JPVVBfREVWSUNFX05VTV9QT1JUU107CgkvKiBBcnJheSBvZiBtZW1iZXIgcG9ydCBJRHMgb2YgdGhpcyBncm91cC4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF80CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF81CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF82CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF83CgoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFgKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzEKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzMKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzQKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzYKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzcKCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzEKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfMgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzQKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfNQoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF82CgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzcKCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzEKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfMgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzQKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfNQoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF82CgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzcKCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlgKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfMgoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzMKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF80CgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfNQoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzYKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF83CgoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfMQoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNAoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF82CgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNwoKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF80CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF81CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF82CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF83CgoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFgKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzEKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzMKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzQKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzYKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzcKCSAqIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTMyCW51bV9jaGFubmVsczsKCS8qIE51bWJlciBvZiBlbmFibGVkIHNsb3RzIGZvciBURE0gZnJhbWUuCgkgKiBAdmFsdWVzIDEgdG8gOAoJICovCgoJdTMyCXNhbXBsZV9yYXRlOwoJLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzI0SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzJLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MzIJYml0X3dpZHRoOwoJLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCgkgKiBAdmFsdWVzIDE2LCAyNCwgKDMyKQoJICovCgoJdTE2CW5zbG90c19wZXJfZnJhbWU7CgkvKiBOdW1iZXIgb2Ygc2xvdHMgcGVyIGZyYW1lLiBUeXBpY2FsIDogMSwgMiwgNCwgOCwgMTYsIDMyLgoJICogQHZhbHVlcyAxIC0gMzIKCSAqLwoKCXUxNglzbG90X3dpZHRoOwoJLyogU2xvdCB3aWR0aCBvZiB0aGUgc2xvdCBpbiBhIFRETSBmcmFtZS4gIChzbG90X3dpZHRoID49IGJpdF93aWR0aCkKCSAqIGhhdmUgdG8gYmUgc2F0aXNmaWVkLgoJICogQHZhbHVlcyAxNiwgMjQsIDMyCgkgKi8KCgl1MzIJc2xvdF9tYXNrOwoJLyogUG9zaXRpb24gb2YgYWN0aXZlIHNsb3RzLiAgV2hlbiB0aGF0IGJpdCBpcyBzZXQsIHRoYXQgcGFyaWN1bGFyCgkgKiBzbG90IGlzIGFjdGl2ZS4KCSAqIE51bWJlciBvZiBhY3RpdmUgc2xvdHMgY2FuIGJlIGluZmVycmVkIGJ5IG51bWJlciBvZiBiaXRzIHNldCBpbgoJICogdGhlIG1hc2suICBPbmx5IDggaW5kaXZpZHVhbCBiaXRzIGNhbiBiZSBlbmFibGVkLgoJICogQml0cyAwLi4zMSBjb3JyZXNwb25kaW5nIHRvIHNsb3QgMC4uMzEKCSAqIEB2YWx1ZXMgMSB0byAyXjMyIC0xCgkgKi8KfSBfX3BhY2tlZDsKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9FTkFCTEUKICogcGFyYW1ldGVyLCB3aGljaCBlbmFibGVzIG9yCiAqIGRpc2FibGVzIGFueSBtb2R1bGUuCiAqIFRoZSBmaXhlZCBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGlzIGZvdXIgYnl0ZXMuCiAqLwoKc3RydWN0IGFmZV9ncm91cF9kZXZpY2VfZW5hYmxlIHsKCXUxNiBncm91cF9pZDsKCS8qIHZhbGlkIHZhbHVlIGlzIEFGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX01JMlNfUlggKi8KCXUxNiBlbmFibGU7CgkvKiBFbmFibGVzICgxKSBvciBkaXNhYmxlcyAoMCkgdGhlIG1vZHVsZS4gKi8KfSBfX3BhY2tlZDsKCnVuaW9uIGFmZV9wb3J0X2dyb3VwX2NvbmZpZyB7CglzdHJ1Y3QgYWZlX2dyb3VwX2RldmljZV9ncm91cF9jZmcgZ3JvdXBfY2ZnOwoJc3RydWN0IGFmZV9ncm91cF9kZXZpY2VfZW5hYmxlIGdyb3VwX2VuYWJsZTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfZ3JvdXBfZGV2aWNlX3RkbV9jZmcgdGRtX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcG9ydF9ncm91cF9jcmVhdGUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJdW5pb24gYWZlX3BvcnRfZ3JvdXBfY29uZmlnIGRhdGE7Cn0gX19wYWNrZWQ7CgovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHVzZWQgYnkgI0FGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRSB0byBzcGVjaWZ5CiAqIHRoZSB0aW1pbmcgc3RhdGlzdGljcyBvZiB0aGUgY29ycmVzcG9uZGluZyBkZXZpY2UgaW50ZXJmYWNlLgogKiBDbGllbnQgY2FuIHBlcmlvZGljYWxseSBxdWVyeSBmb3IgdGhlIGRldmljZSB0aW1lIHN0YXRpc3RpY3MgdG8gaGVscCBhZGp1c3QKICogdGhlIFBMTCBiYXNlZCBvbiB0aGUgZHJpZnQgdmFsdWUuIFRoZSBnZXQgcGFyYW0gY29tbWFuZCBtdXN0IGJlIHNlbnQgdG8KICogQUZFIHBvcnQgSUQgY29ycmVzcG9uZGluZyB0byBkZXZpY2UgaW50ZXJmYWNlCgogKiBUaGlzIHBhcmFtZXRlciBJRCBzdXBwb3J0cyBmb2xsb3dpbmcgZ2V0IHBhcmFtIGNvbW1hbmRzOgogKiAjQUZFX1BPUlRfQ01EX0dFVF9QQVJBTV9WMiBhbmQKICogI0FGRV9QT1JUX0NNRF9HRVRfUEFSQU1fVjMuCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9ERVZfVElNSU5HX1NUQVRTICAgICAgICAgICAweDAwMDEwMkFECgovKiBWZXJzaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gaGFuZGxlIGZ1dHVyZSBhZGRpdGlvbnMgdG8gQUZFIGRldmljZQogKiBpbnRlcmZhY2UgdGltaW5nIHN0YXRpc3RpY3MgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0RFVl9USU1JTkdfU1RBVFMgICAgICAgIDB4MQoKLyogRW51bWVyYXRpb24gZm9yIHNwZWNpZnlpbmcgYSBzaW5rKFJ4KSBkZXZpY2UgKi8KI2RlZmluZSBBRkVfU0lOS19ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCgovKiBFbnVtZXJhdGlvbiBmb3Igc3BlY2lmeWluZyBhIHNvdXJjZShUeCkgZGV2aWNlICovCiNkZWZpbmUgQUZFX1NPVVJDRV9ERVZJQ0UgICAgICAgICAgICAgICAgICAgICAgIDB4MQoKLyogRW51bWVyYXRpb24gZm9yIHNwZWNpZnlpbmcgdGhlIGRyaWZ0IHJlZmVyZW5jZSBpcyBvZiB0eXBlIEFWIFRpbWVyICovCiNkZWZpbmUgQUZFX1JFRl9USU1FUl9UWVBFX0FWVElNRVIgICAgICAgICAgICAgIDB4MAoKLyogTWVzc2FnZSBwYXlsb2FkIHN0cnVjdHVyZSBmb3IgdGhlCiAqIEFGRV9QQVJBTV9JRF9ERVZfVElNSU5HX1NUQVRTIHBhcmFtZXRlci4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfZGV2X3RpbWluZ19zdGF0cyB7CgkvKiBNaW5vciB2ZXJzaW9uIHVzZWQgdG8gdHJhY2sgdGhlIHZlcnNpb24gb2YgZGV2aWNlIGludGVyZmFjZSB0aW1pbmcKCSAqIHN0YXRpc3RpY3MuIEN1cnJlbnRseSwgdGhlIHN1cHBvcnRlZCB2ZXJzaW9uIGlzIDEuCgkgKiBAdmFsdWVzICNBRkVfQVBJX1ZFUlNJT05fREVWX1RJTUlOR19TVEFUUwoJICovCgl1MzIgICAgICAgbWlub3JfdmVyc2lvbjsKCgkvKiBJbmRpY2F0ZXMgdGhlIGRldmljZSBpbnRlcmZhY2UgZGlyZWN0aW9uIGFzIGVpdGhlcgoJICogc291cmNlIChUeCkgb3Igc2luayAoUngpLgoJICogQHZhbHVlcwoJICogI0FGRV9TSU5LX0RFVklDRQoJICogI0FGRV9TT1VSQ0VfREVWSUNFCgkgKi8KCXUxNiAgICAgICAgZGV2aWNlX2RpcmVjdGlvbjsKCgkvKiBSZWZlcmVuY2UgdGltZXIgZm9yIGRyaWZ0IGFjY3VtdWxhdGlvbiBhbmQgdGltZSBzdGFtcCBpbmZvcm1hdGlvbi4KCSAqIEB2YWx1ZXMKCSAqICNBRkVfUkVGX1RJTUVSX1RZUEVfQVZUSU1FUiBAdGFibGVidWxsZXRlbmQKCSAqLwoJdTE2ICAgICAgICByZWZlcmVuY2VfdGltZXI7CgoJLyoKCSAqIEZsYWcgdG8gaW5kaWNhdGUgaWYgcmVzeW5jIGlzIHJlcXVpcmVkIG9uIHRoZSBjbGllbnQgc2lkZSBmb3IKCSAqIGRyaWZ0IGNvcnJlY3Rpb24uIEZsYWcgaXMgc2V0IHRvIFRSVUUgZm9yIHRoZSBmaXJzdCBnZXRfcGFyYW0KCSAqIHJlc3BvbnNlIGFmdGVyIGRldmljZSBpbnRlcmZhY2Ugc3RhcnRzLiBUaGlzIGZsYWcgdmFsdWUgY2FuIGJlCgkgKiB1c2VkIGJ5IGNsaWVudCB0byBpZGVudGlmeSBpZiBkZXZpY2UgaW50ZXJmYWNlIHJlc3RhcnQgaGFzCgkgKiBoYXBwZW5lZCBhbmQgaWYgYW55IHJlLXN5bmMgaXMgcmVxdWlyZWQgYXQgdGhlaXIgZW5kIGZvciBkcmlmdAoJICogY29ycmVjdGlvbi4KCSAqIEB2YWx1ZXMKCSAqIDA6IEZBTFNFIChSZXN5bmMgbm90IHJlcXVpcmVkKQoJICogMTogVFJVRSAoUmVzeW5jIHJlcXVpcmVkKSBAdGFibGVidWxsZXRlbmQKCSAqLwoJdTMyICAgICAgICByZXN5bmNfZmxhZzsKCgkvKiBBY2N1bXVsYXRlZCBkcmlmdCB2YWx1ZSBpbiBtaWNyb3NlY29uZHMuIFRoaXMgdmFsdWUgaXMgdXBkYXRlZAoJICogZXZlcnkgMTAwdGggbXMuCgkgKiBQb3NpdGl2ZSBkcmlmdCB2YWx1ZSBpbmRpY2F0ZXMgQVYgdGltZXIgaXMgcnVubmluZyBmYXN0ZXIgdGhhbiBkZXZpY2UKCSAqIE5lZ2F0aXZlIGRyaWZ0IHZhbHVlIGluZGljYXRlcyBBViB0aW1lciBpcyBydW5uaW5nIHNsb3dlciB0aGFuIGRldmljZQoJICogQHZhbHVlcyBBbnkgdmFsaWQgaW50MzIgbnVtYmVyCgkgKi8KCXMzMiAgICAgICAgIGFjY19kcmlmdF92YWx1ZTsKCgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgYWJzb2x1dGUgdGltZXN0YW1wIG9mIHJlZmVyZW5jZQoJICogdGltZXIgaW4gbWljcm9zZWNvbmRzLgoKCSAqIFRoaXMgdGltZXN0YW1wIGNvcnJlc3BvbmRzIHRvIHRoZSB0aW1lIHdoZW4gdGhlIGRyaWZ0IHZhbHVlcwoJICogYXJlIGFjY3VtbGF0ZWQgZm9yIGV2ZXJ5IDEwMHRoIG1zLgoJICogQHZhbHVlcyBBbnkgdmFsaWQgdWludDMyIG51bWJlcgoJICovCgl1MzIgICAgICAgIHJlZl90aW1lcl9hYnNfdHNfbHN3OwoKCS8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBhYnNvbHV0ZSB0aW1lc3RhbXAgb2YgcmVmZXJlbmNlCgkgKiB0aW1lciBpbiBtaWNyb3NlY29uZHMuCgkgKiBUaGlzIHRpbWVzdGFtcCBjb3JyZXNwb25kcyB0byB0aGUgdGltZSB3aGVuIHRoZSBkcmlmdCB2YWx1ZXMKCSAqIGFyZSBhY2N1bWxhdGVkIGZvciBldmVyeSAxMDB0aCBtcy4KCSAqIEB2YWx1ZXMgQW55IHZhbGlkIHVpbnQzMiBudW1iZXIKCSAqLwoJdTMyICAgICAgICByZWZfdGltZXJfYWJzX3RzX21zdzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfYXZfZGV2X2RyaWZ0X2dldF9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX2dldF9wYXJhbV92MiBnZXRfcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfZGV2X3RpbWluZ19zdGF0cyB0aW1pbmdfc3RhdHM7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2F2X2Rldl9kcmlmdF9nZXRfcGFyYW1fcmVzcCB7Cgl1aW50MzJfdCBzdGF0dXM7CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfZGV2X3RpbWluZ19zdGF0cyB0aW1pbmdfc3RhdHM7Cn0gX19wYWNrZWQ7CgovKiBDb21tYW5kIGZvciBNYXRyaXggb3IgU3RyZWFtIFJvdXRlciAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9TRVRfTVRNWF9TVFJUUl9QQVJBTVNfVjIgICAgMHgwMDAxMERDRQovKiBNb2R1bGUgZm9yIEFWU1lOQyAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyAgICAweDAwMDEwREM2CgovKiBQYXJhbWV0ZXIgdXNlZCBieSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9NT0RVTEVfSURfQVZTWU5DIHRvIHNwZWNpZnkgdGhlCiAqIHJlbmRlciB3aW5kb3cgc3RhcnQgdmFsdWUuIFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBhIFNldAogKiBjb21tYW5kIChub3QgYSBHZXQgY29tbWFuZCkgaW4gdGhlIFJ4IGRpcmVjdGlvbgogKiAoI0FTTV9TRVNTSU9OX0NNRF9TRVRfTVRNWF9TVFJUUl9QQVJBTVNfVjIpLgogKiBSZW5kZXIgd2luZG93IHN0YXJ0IGlzIGEgdmFsdWUgKHNlc3Npb24gdGltZSBtaW51cyB0aW1lc3RhbXAsIG9yIFNULVRTKQogKiBiZWxvdyB3aGljaCBmcmFtZXMgYXJlIGhlbGQsIGFuZCBhZnRlciB3aGljaCBmcmFtZXMgYXJlIGltbWVkaWF0ZWx5CiAqIHJlbmRlcmVkLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9XSU5ET1dfU1RBUlRfVjIgMHgwMDAxMEREMQoKLyogUGFyYW1ldGVyIHVzZWQgYnkgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyB0byBzcGVjaWZ5IHRoZQogKiByZW5kZXIgd2luZG93IGVuZCB2YWx1ZS4gVGhpcyBwYXJhbWV0ZXIgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIGEgU2V0CiAqIGNvbW1hbmQgKG5vdCBhIEdldCBjb21tYW5kKSBpbiB0aGUgUnggZGlyZWN0aW9uCiAqICgjQVNNX1NFU1NJT05fQ01EX1NFVF9NVE1YX1NUUlRSX1BBUkFNU19WMikuIFJlbmRlciB3aW5kb3cgZW5kIGlzIGEgdmFsdWUKICogKHNlc3Npb24gdGltZSBtaW51cyB0aW1lc3RhbXApIGFib3ZlIHdoaWNoIGZyYW1lcyBhcmUgZHJvcHBlZCwgYW5kIGJlbG93CiAqIHdoaWNoIGZyYW1lcyBhcmUgaW1tZWRpYXRlbHkgcmVuZGVyZWQuCiAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fUkVOREVSX1dJTkRPV19FTkRfVjIgICAweDAwMDEwREQyCgovKiBHZW5lcmljIHBheWxvYWQgb2YgdGhlIHdpbmRvdyBwYXJhbWV0ZXJzIGluIHRoZQogKiAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9NT0RVTEVfSURfQVZTWU5DIG1vZHVsZS4KICogVGhpcyBwYXlsb2FkIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBhIFNldCBjb21tYW5kCiAqIChub3QgYSBHZXQgY29tbWFuZCkgb24gdGhlIFJ4IHBhdGguCiAqLwpzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV93aW5kb3dfdjJfdCB7Cgl1MzIgICAgd2luZG93X2xzdzsKCS8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIHJlbmRlciB3aW5kb3cgc3RhcnQgdmFsdWUuICovCgoJdTMyICAgIHdpbmRvd19tc3c7CgkvKiBVcHBlciAzMiBiaXRzIG9mIHRoZSByZW5kZXIgd2luZG93IHN0YXJ0IHZhbHVlLgoJICoKCSAqIFRoZSA2NC1iaXQgbnVtYmVyIGZvcm1lZCBieSB3aW5kb3dfbHN3IGFuZCB3aW5kb3dfbXN3IHNwZWNpZmllcyBhCgkgKiBzaWduZWQgNjQtYml0IHdpbmRvdyB2YWx1ZSBpbiBtaWNyb3NlY29uZHMuIFRoZSBzaWduIGV4dGVuc2lvbiBpcwoJICogbmVjZXNzYXJ5LiBUaGlzIHZhbHVlIGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgoJICogI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fUkVOREVSX1dJTkRPV19TVEFSVF9WMgoJICogI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fUkVOREVSX1dJTkRPV19FTkRfVjIKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1NUQVRfV0lORE9XX1NUQVJUX1YyCgkgKiAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9TVEFUX1dJTkRPV19FTkRfVjIKCSAqIFRoZSB2YWx1ZSBkZXBlbmRzIG9uIHdoaWNoIHBhcmFtZXRlciBJRCBpcyB1c2VkLgoJICogVGhlIGFEU1AgaG9ub3JzIHRoZSB3aW5kb3dzIGF0IGEgZ3JhbnVsYXJpdHkgb2YgMSBtcy4KCSAqLwp9OwoKc3RydWN0IGFzbV9zZXNzaW9uX2NtZF9zZXRfbXRteF9zdHJzdHJfcGFyYW1zX3YyIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbHN3OwoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGRhdGEgcGF5bG9hZCBhZGRyZXNzLiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbXN3OwoJLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGRhdGEgcGF5bG9hZCBhZGRyZXNzLgoJICogSWYgdGhlIGFkZHJlc3MgaXMgbm90IHNlbnQgKE5VTEwpLCB0aGUgbWVzc2FnZSBpcyBpbiB0aGUgcGF5bG9hZC4KCSAqIElmIHRoZSBhZGRyZXNzIGlzIHNlbnQgKG5vbi1OVUxMKSwgdGhlIHBhcmFtZXRlciBkYXRhIHBheWxvYWRzCgkgKiBiZWdpbiBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGFuIGFkZHJlc3MuIFRoaXMgbWVtb3J5IG1hcCBoYW5kbGUgaXMgcmV0dXJuZWQKCSAqIGJ5IHRoZSBhRFNQIHRocm91Z2ggdGhlICNBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZC4KCSAqIHZhbHVlcwoJICogLSBOVUxMIC0tIFBhcmFtZXRlciBkYXRhIHBheWxvYWRzIGFyZSB3aXRoaW4gdGhlIG1lc3NhZ2UgcGF5bG9hZAoJICogKGluLWJhbmQpLgoJICogLSBOb24tTlVMTCAtLSBQYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBiZWdpbiBhdCB0aGUgYWRkcmVzcyBzcGVjaWZpZWQKCSAqIGluIHRoZSBkYXRhX3BheWxvYWRfYWRkcl9sc3cgYW5kIGRhdGFfcGF5bG9hZF9hZGRyX21zdyBmaWVsZHMKCSAqIChvdXQtb2YtYmFuZCkuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9zaXplOwoJLyogQWN0dWFsIHNpemUgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgYWNjb21wYW55aW5nIHRoZSBtZXNzYWdlLCBvciBpbgoJICogc2hhcmVkIG1lbW9yeS4gVGhpcyBmaWVsZCBpcyB1c2VkIGZvciBwYXJzaW5nIHRoZSBwYXJhbWV0ZXIgcGF5bG9hZC4KCSAqIHZhbHVlcyA+IDAgYnl0ZXMKCSAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOwoJLyogRGlyZWN0aW9uIG9mIHRoZSBlbnRpdHkgKG1hdHJpeCBtaXhlciBvciBzdHJlYW0gcm91dGVyKSBvbiB3aGljaAoJICogdGhlIHBhcmFtZXRlciBpcyB0byBiZSBzZXQuCgkgKiB2YWx1ZXMKCSAqIC0gMCAtLSBSeCAoZm9yIFJ4IHN0cmVhbSByb3V0ZXIgb3IgUnggbWF0cml4IG1peGVyKQoJICogLSAxIC0tIFR4IChmb3IgVHggc3RyZWFtIHJvdXRlciBvciBUeCBtYXRyaXggbWl4ZXIpCgkgKi8KfTsKCi8qIFBhcmFtZXRlciB1c2VkIGJ5ICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX01PRFVMRV9JRF9BVlNZTkMgd2hpY2ggYWxsb3dzIHRoZQogKiBhdWRpbyBjbGllbnQgY2hvb3NlIHRoZSByZW5kZXJpbmcgZGVjaXNpb24gdGhhdCB0aGUgYXVkaW8gRFNQIHNob3VsZCB1c2UuCiAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fUkVOREVSX01PREVfQ01EICAweDAwMDEyRjBECgovKiBJbmRpY2F0ZXMgdGhhdCByZW5kZXJpbmcgZGVjaXNpb24gd2lsbCBiZSBiYXNlZCBvbiBkZWZhdWx0IHJhdGUKICogKHNlc3Npb24gY2xvY2sgYmFzZWQgcmVuZGVyaW5nLCBkZXZpY2UgZHJpdmVuKS4KICogMS4gVGhlIGRlZmF1bHQgc2Vzc2lvbiBjbG9jayBiYXNlZCByZW5kZXJpbmcgaXMgaW5oZXJlbnRseSBkcml2ZW4KICogICAgYnkgdGhlIHRpbWluZyBvZiB0aGUgZGV2aWNlLgogKiAyLiBBZnRlciB0aGUgaW5pdGlhbCBkZWNpc2lvbiBpcyBtYWRlIChmaXJzdCBidWZmZXIgYWZ0ZXIgYSBydW4KICogICAgY29tbWFuZCksIHN1YnNlcXVlbnQgZGF0YSByZW5kZXJpbmcgZGVjaXNpb25zIGFyZSBtYWRlIHdpdGgKICogICAgcmVzcGVjdCB0byB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgZGV2aWNlIGlzIHJlbmRlcmluZywgdGh1cyBkZXJpdmluZwogKiAgICBpdHMgdGltaW5nIGZyb20gdGhlIGRldmljZS4KICogMy4gV2hpbGUgdGhpcyBkZWNpc2lvbiBtYWtpbmcgaXMgc2ltcGxlLCBpdCBoYXMgc29tZSBpbmhlcmVudCBsaW1pdGF0aW9ucwogKiAgICAobWVudGlvbmVkIGluIHRoZSBuZXh0IHNlY3Rpb24pLgogKiA0LiBJZiB0aGlzIEFQSSBpcyBub3Qgc2V0LCB0aGUgc2Vzc2lvbiBjbG9jayBiYXNlZCByZW5kZXJpbmcgd2lsbCBiZSBhc3N1bWVkCiAqICAgIGFuZCB0aGlzIHdpbGwgZW5zdXJlIHRoYXQgdGhlIERTUCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9ERUZBVUxUIDAKCi8qIEluZGljYXRlcyB0aGF0IHJlbmRlcmluZyBkZWNpc2lvbiB3aWxsIGJlIGJhc2VkIG9uIGxvY2FsIGNsb2NrIHJhdGUuCiAqIDEuIEluIHRoZSBEU1AgbG9vcGJhY2svY2xpZW50IGxvb3BiYWNrIHVzZSBjYXNlcyAoZnJhbWUgYmFzZWQKICogICAgaW5wdXRzKSwgdGhlIGluY29taW5nIGRhdGEgaW50byBhdWRpbyBEU1AgaXMgdGltZS1zdGFtcGVkIGF0IHRoZQogKiAgICBsb2NhbCBjbG9jayByYXRlIChTVEMpLgogKiAyLiBUaGlzIFRTIHJhdGUgbWF5IG1hdGNoIHRoZSBpbmNvbWluZyBkYXRhIHJhdGUgb3IgbWF5YmUgZGlmZmVyZW50CiAqICAgIGZyb20gdGhlIGluY29taW5nIGRhdGEgcmF0ZS4KICogMy4gUmVnYXJkbGVzcywgdGhlIGRhdGEgd2lsbCBiZSB0aW1lLXN0YW1wZWQgd2l0aCBsb2NhbCBTVEMgYW5kCiAqICAgIHRoZXJlZm9yZSwgdGhlIGNsaWVudCBpcyByZWNvbW1lbmRlZCB0byBzZXQgdGhpcyBtb2RlIGZvciB0aGVzZQogKiAgICB1c2UgY2FzZXMuIFRoaXMgbWV0aG9kIGlzIGluaGVyZW50bHkgbW9yZSByb2J1c3QgdG8gc2VxdWVuY2luZwogKiAgICAoQUZFIFN0YXJ0L1N0b3ApIGFuZCBkZXZpY2Ugc3dpdGNoZXMsIGFtb25nIG90aGVyIGJlbmVmaXRzLgogKiA0LiBUaGlzIEFQSSB3aWxsIGluZm9ybSB0aGUgRFNQIHRvIGNvbXBhcmUgZXZlcnkgaW5jb21pbmcgYnVmZmVyIFRTCiAqICAgIGFnYWluc3QgbG9jYWwgU1RDLgogKiA1LiBEU1Agd2lsbCBjb250aW51ZSB0byBob25vciByZW5kZXIgd2luZG93cyBBUElzLCBhcyBiZWZvcmUuCiAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fUkVOREVSX0xPQ0FMX1NUQyAxCgovKiBTdHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyBkZWNpc2lvbiBwYXJhbWV0ZXIgKi8Kc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fcmVuZGVyX21vZGVfdCB7CgkvKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgcmVuZGVyaW5nIGRlY2lzaW9uIHRoZSBhdWRpbyBEU1Agc2hvdWxkIHVzZS4KCSAqCgkgKiBAdmFsdWVzCgkgKiAtICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9ERUZBVUxUCgkgKiAtICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9MT0NBTF9TVEMKCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7Cn0gX19wYWNrZWQ7CgovKiBQYXJhbWV0ZXIgdXNlZCBieSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9NT0RVTEVfSURfQVZTWU5DIHdoaWNoIGFsbG93cyB0aGUKICogYXVkaW8gY2xpZW50IHRvIHNwZWNpZnkgdGhlIGNsb2NrIHJlY292ZXJ5IG1lY2hhbmlzbSB0aGF0IHRoZSBhdWRpbyBEU1AKICogc2hvdWxkIHVzZS4KICovCgojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fQ0xLX1JFQ19DTUQgMHgwMDAxMkYwRQoKLyogSW5kaWNhdGVzIHRoYXQgZGVmYXVsdCBjbG9jayByZWNvdmVyeSB3aWxsIGJlIHVzZWQgKG5vIGNsb2NrIHJlY292ZXJ5KS4KICogSWYgdGhlIGNsaWVudCB3aXNoZXMgdGhhdCBubyBjbG9jayByZWNvdmVyeSBiZSBkb25lLCB0aGUgY2xpZW50IGNhbgogKiBjaG9vc2UgdGhpcy4gVGhpcyBtZWFucyB0aGF0IG5vIGF0dGVtcHQgd2lsbCBtYWRlIGJ5IHRoZSBEU1AgdG8gdHJ5IGFuZAogKiBtYXRjaCB0aGUgcmF0ZXMgb2YgdGhlIGlucHV0IGFuZCBvdXRwdXQgYXVkaW8uCiAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fQ0xLX1JFQ19OT05FIDAKCi8qIEluZGljYXRlcyB0aGF0IGluZGVwZW5kZW50IGNsb2NrIHJlY292ZXJ5IG5lZWRzIHRvIGJlIHVzZWQuCiAqIDEuIEluIHRoZSBEU1AgbG9vcGJhY2svY2xpZW50IGxvb3BiYWNrIHVzZSBjYXNlcyAoZnJhbWUgYmFzZWQgaW5wdXRzKSwKICogICAgdGhlIGNsaWVudCBzaG91bGQgY2hvb3NlIHRoZSBpbmRlcGVuZGVudCBjbG9jayByZWNvdmVyeSBvcHRpb24uCiAqIDIuIFRoaXMgYmFzaWNhbGx5IGRlLWNvdXBsZXMgdGhlIGF1ZGlvIGFuZCB2aWRlbyBmcm9tIGtub3dpbmcgZWFjaCBvdGhlcnMKICogICAgY2xvY2sgc291cmNlcyBhbmQgbGV0cyB0aGUgYXVkaW8gRFNQIGluZGVwZW5kZW50bHkgcmF0ZSBtYXRjaCB0aGUgaW5wdXQKICogICAgYW5kIG91dHB1dCByYXRlcy4KICogMy4gQWZ0ZXIgZHJpZnQgZGV0ZWN0aW9uLCB0aGUgZHJpZnQgY29ycmVjdGlvbiBpcyBhY2hpZXZlZCBieSBlaXRoZXIgcHVsbGluZwogKiAgICB0aGUgUExMcyAoaWYgYXBwbGljYWJsZSkgb3IgYnkgc3RyZWFtIHRvIGRldmljZSByYXRlIG1hdGNoaW5nCiAqICAgIChmb3IgUENNIHVzZSBjYXNlcykgYnkgY29tcGFyaW5nIGRyaWZ0IHdpdGggcmVzcGVjdCB0byBTVEMuCiAqIDQuIEZvciBwYXNzdGhyb3VnaCB1c2UgY2FzZXMsIHNpbmNlIHRoZSBQTEwgcHVsbGluZyBpcyB0aGUgb25seSBvcHRpb24sCiAqICAgIGEgYmVzdCBlZmZvcnQgd2lsbCBiZSBtYWRlLgogKiAgICBJZiBQTEwgcHVsbGluZyBpcyBub3QgcG9zc2libGUgLyBhdmFpbGFibGUsIHRoZSByZW5kZXJpbmcgd2lsbCBiZQogKiAgICBkb25lIHdpdGhvdXQgcmF0ZSBtYXRjaGluZy4KICovCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9DTEtfUkVDX0FVVE8gMQoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fQ0xLX1JFQyBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9jbGtfcmVjX3QgewoJLyogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGNsb2NrIHJlY292ZXJ5IHRoYXQgdGhlIGF1ZGlvIERTUCBzaG91bGQKCSAqIHVzZSBmb3IgcmF0ZSBtYXRjaGluZy4KCSAqLwoKCS8qIEB2YWx1ZXMKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUNfREVGQVVMVAoJICogI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fQ0xLX1JFQ19JTkRFUEVOREVOVAoJICovCgl1MzIgICAgICAgICAgICAgICAgICBmbGFnczsKfSBfX3BhY2tlZDsKCgovKiBQYXJhbWV0ZXIgdXNlZCBieSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9NT0RVTEVfSURfQVZTWU5DIHRvCiAqIHJlYWxpemUgc21vb3RoZXIgYWRqdXN0bWVudCBvZiBhdWRpbyBzZXNzaW9uIGNsb2NrIGZvciBhIHNwZWNpZmllZCBzZXNzaW9uLgogKiBUaGUgZGVzaXJlZCBhdWRpbyBzZXNzaW9uIGNsb2NrIGFkanVzdG1lbnQoaW4gbWljcm8gc2Vjb25kcykgaXMgc3BlY2lmaWVkCiAqIHVzaW5nIHRoZSBjb21tYW5kICNBU01fU0VTU0lPTl9DTURfQURKVVNUX1NFU1NJT05fQ0xPQ0tfVjIuCiAqIERlbGF5aW5nL0FkdmFuY2luZyB0aGUgc2Vzc2lvbiBjbG9jayB3b3VsZCBiZSBpbXBsZW1lbnRlZCBieSBpbnNlcnRpbmcKICogaW50ZXJwb2xhdGVkL2Ryb3BwaW5nIGF1ZGlvIHNhbXBsZXMgaW4gdGhlIHBsYXliYWNrIHBhdGggcmVzcGVjdGl2ZWx5LgogKiBBbHNvLCB0aGlzIHBhcmFtZXRlciBoYXMgdG8gYmUgY29uZmlndXJlZCBiZWZvcmUgdGhlIEF1ZGlvIFNlc3Npb24gaXMgcHV0CiAqIHRvIFJVTiBzdGF0ZSB0byBhdm9pZCBjb2xkIHN0YXJ0IGxhdGVuY3kvZ2xpdGNoZXMgaW4gdGhlIHBsYXliYWNrLgogKi8KCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9QQVJBTV9BREpVU1RfU0VTU0lPTl9USU1FX0NUTCAgICAgICAgIDB4MDAwMTMyMTcKCnN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3BhcmFtX2FkanVzdF9zZXNzaW9uX3RpbWVfY3RsX3QgewoJLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1vZHVsZSBpcyBlbmFibGVkIG9yIG5vdAoJICogQHZhbHVlcwoJICogMCAtLSBkaXNhYmxlZAoJICogMSAtLSBlbmFibGVkCgkgKi8KCXUzMiAgICAgICAgICAgICAgICAgZW5hYmxlOwp9OwoKdW5pb24gYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9jb25maWcgewoJc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fd2luZG93X3YyX3Qgd2luZG93X3BhcmFtOwoJc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fcmVuZGVyX21vZGVfdCByZW5kZXJfcGFyYW07CglzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9jbGtfcmVjX3QgY2xrX3JlY19wYXJhbTsKCXN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3BhcmFtX2FkanVzdF9zZXNzaW9uX3RpbWVfY3RsX3QgYWRqX3RpbWVfcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX210bXhfc3RydHJfcGFyYW1zIHsKCXN0cnVjdCBhcHJfaGRyICBoZHI7CglzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX3NldF9tdG14X3N0cnN0cl9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1bmlvbiBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX2NvbmZpZyBjb25maWc7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9HRVRfTVRNWF9TVFJUUl9QQVJBTVNfVjIgMHgwMDAxMERDRgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRFJTUF9HRVRfTVRNWF9TVFJUUl9QQVJBTVNfVjIgMHgwMDAxMEREMAoKI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1NFU1NJT05fVElNRV9WMyAweDAwMDEyRjBCCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9TVElNRV9UU1RNUF9GTEdfQk1BU0sgKDB4ODAwMDAwMDBVTCkKCnN0cnVjdCBhc21fc2Vzc2lvbl9jbWRfZ2V0X210bXhfc3Ryc3RyX3BhcmFtc192MiB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX2xzdzsKCS8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKCS8qCgkgKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgZGF0YSBwYXlsb2FkIGFkZHJlc3MuCgkgKiBJZiB0aGUgYWRkcmVzcyBpcyBub3Qgc2VudCAoTlVMTCksIHRoZSBtZXNzYWdlIGlzIGluIHRoZSBwYXlsb2FkLgoJICogSWYgdGhlIGFkZHJlc3MgaXMgc2VudCAobm9uLU5VTEwpLCB0aGUgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZHMKCSAqIGJlZ2luIGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4KCSAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7CgkvKgoJICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIGFuIGFkZHJlc3MuIFRoaXMgbWVtb3J5IG1hcCBoYW5kbGUgaXMgcmV0dXJuZWQKCSAqIGJ5IHRoZSBhRFNQIHRocm91Z2ggdGhlICNBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZC4KCSAqIHZhbHVlcwoJICogLSBOVUxMIC0tIFBhcmFtZXRlciBkYXRhIHBheWxvYWRzIGFyZSB3aXRoaW4gdGhlIG1lc3NhZ2UgcGF5bG9hZAoJICogKGluLWJhbmQpLgoJICogLSBOb24tTlVMTCAtLSBQYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBiZWdpbiBhdCB0aGUgYWRkcmVzcyBzcGVjaWZpZWQKCSAqIGluIHRoZSBkYXRhX3BheWxvYWRfYWRkcl9sc3cgYW5kIGRhdGFfcGF5bG9hZF9hZGRyX21zdyBmaWVsZHMKCSAqIChvdXQtb2YtYmFuZCkuCgkgKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOwoJLyoKCSAqIERpcmVjdGlvbiBvZiB0aGUgZW50aXR5IChtYXRyaXggbWl4ZXIgb3Igc3RyZWFtIHJvdXRlcikgb24gd2hpY2gKCSAqIHRoZSBwYXJhbWV0ZXIgaXMgdG8gYmUgc2V0LgoJICogdmFsdWVzCgkgKiAtIDAgLS0gUnggKGZvciBSeCBzdHJlYW0gcm91dGVyIG9yIFJ4IG1hdHJpeCBtaXhlcikKCSAqIC0gMSAtLSBUeCAoZm9yIFR4IHN0cmVhbSByb3V0ZXIgb3IgVHggbWF0cml4IG1peGVyKQoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG1vZHVsZV9pZDsKCS8qIFVuaXF1ZSBtb2R1bGUgSUQuICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKCS8qIFVuaXF1ZSBwYXJhbWV0ZXIgSUQuICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBwYXJhbV9tYXhfc2l6ZTsKfTsKCnN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX3Nlc3Npb25fdGltZV92M190IHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgc2Vzc2lvbl90aW1lX2xzdzsKCS8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbiB0aW1lIGluIG1pY3Jvc2Vjb25kcyAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgc2Vzc2lvbl90aW1lX21zdzsKCS8qCgkgKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMuCgkgKiBUaGUgNjQtYml0IG51bWJlciBmb3JtZWQgYnkgc2Vzc2lvbl90aW1lX2xzdyBhbmQgc2Vzc2lvbl90aW1lX21zdwoJICogaXMgdHJlYXRlZCBhcyBzaWduZWQuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGFic29sdXRlX3RpbWVfbHN3OwoJLyoKCSAqIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBhYnNvbHV0ZSB0aW1lIGluIG1pY3Jvc2Vjb25kcy4KCSAqIFRoaXMgaXMgdGhlIHRpbWUgd2hlbiB0aGUgc2FtcGxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlCgkgKiBzZXNzaW9uX3RpbWVfbHN3IGlzIHJlbmRlcmVkIHRvIHRoZSBoYXJkd2FyZS4gVGhpcyBhYnNvbHV0ZQoJICogdGltZSBjYW4gYmUgc2xpZ2h0bHkgaW4gdGhlIGZ1dHVyZSBvciBwYXN0LgoJICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBhYnNvbHV0ZV90aW1lX21zdzsKCS8qCgkgKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgYWJzb2x1dGUgdGltZSBpbiBtaWNyb3NlY29uZHMuCgkgKiBUaGlzIGlzIHRoZSB0aW1lIHdoZW4gdGhlIHNhbXBsZSBjb3JyZXNwb25kaW5nIHRvIHRoZQoJICogc2Vzc2lvbl90aW1lX21zdyBpcyByZW5kZXJlZCB0byBoYXJkd2FyZS4gVGhpcyBhYnNvbHV0ZQoJICogdGltZSBjYW4gYmUgc2xpZ2h0bHkgaW4gdGhlIGZ1dHVyZSBvciBwYXN0LiBUaGUgNjQtYml0IG51bWJlcgoJICogZm9ybWVkIGJ5IGFic29sdXRlX3RpbWVfbHN3IGFuZCBhYnNvbHV0ZV90aW1lX21zdyBpcyB0cmVhdGVkIGFzCgkgKiB1bnNpZ25lZC4KCSAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdGltZV9zdGFtcF9sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCB0aW1lc3RhbXAgaW4gbWljcm9zZWNvbmRzICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICB0aW1lX3N0YW1wX21zdzsKCS8qCgkgKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBsYXN0IHByb2Nlc3NlZCB0aW1lc3RhbXAgaW4gbWljcm9zZWNvbmRzLgoJICogVGhlIDY0LWJpdCBudW1iZXIgZm9ybWVkIGJ5IHRpbWVfc3RhbXBfbHN3IGFuZCB0aW1lX3N0YW1wX2xzdwoJICogaXMgdHJlYXRlZCBhcyB1bnNpZ25lZC4KCSAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZmxhZ3M7CgkvKgoJICogS2VlcHMgdHJhY2sgb2YgYW55IGFkZGl0aW9uYWwgZmxhZ3MgbmVlZGVkLgoJICogQHZhbHVlc3tmb3IgYml0IDMxfQoJICogLSAwIC0tIFVuaW5pdGlhbGl6ZWQvaW52YWxpZAoJICogLSAxIC0tIFZhbGlkCgkgKiBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byB6ZXJvLgoJICovCn07Cgp1bmlvbiBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX2RhdGFfdHlwZSB7CglzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9zZXNzaW9uX3RpbWVfdjNfdCBzZXNzaW9uX3RpbWU7Cn07CgpzdHJ1Y3QgYXNtX210bXhfc3RydHJfZ2V0X3BhcmFtcyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX2dldF9tdG14X3N0cnN0cl9wYXJhbXNfdjIgcGFyYW1faW5mbzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fbXRteF9zdHJ0cl9nZXRfcGFyYW1zX2NtZHJzcCB7Cgl1aW50MzJfdCBlcnJfY29kZTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgcGFyYW1faW5mbzsKCXVuaW9uIGFzbV9zZXNzaW9uX210bXhfc3RydHJfZGF0YV90eXBlIHBhcmFtX2RhdGE7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX1JFU0FNUExFUiAweDAwMDEwNzE5CgplbnVtIHsKCUxFR0FDWV9QQ00gPSAwLAoJQ09NUFJFU1NFRF9QQVNTVEhST1VHSCwKCUNPTVBSRVNTRURfUEFTU1RIUk9VR0hfQ09OVkVSVCwKCUNPTVBSRVNTRURfUEFTU1RIUk9VR0hfRFNELAoJTElTVEVOLAoJQ09NUFJFU1NFRF9QQVNTVEhST1VHSF9HRU4sCglDT01QUkVTU0VEX1BBU1NUSFJPVUdIX0lFQzYxOTM3Cn07CgojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX0NPTVBSRVNTRURfTVVURSAgICAgICAgICAgICAgICAweDAwMDEwNzcwCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9DT01QUkVTU0VEX01VVEUgICAgICAgICAgICAgICAgIDB4MDAwMTA3NzEKCnN0cnVjdCBhZG1fc2V0X2NvbXByZXNzZWRfZGV2aWNlX211dGUgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBjb21tYW5kOwoJc3RydWN0IGFkbV9wYXJhbV9kYXRhX3Y1IHBhcmFtczsKCXUzMiAgICBtdXRlX29uOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9DT01QUkVTU0VEX0xBVEVOQ1kgICAgICAgICAgICAgMHgwMDAxMDc2RQojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQ09NUFJFU1NFRF9MQVRFTkNZICAgICAgICAgICAgICAweDAwMDEwNzZGCgpzdHJ1Y3QgYWRtX3NldF9jb21wcmVzc2VkX2RldmljZV9sYXRlbmN5IHsKCXN0cnVjdCBhZG1fY21kX3NldF9wcF9wYXJhbXNfdjUgY29tbWFuZDsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBwYXJhbXM7Cgl1MzIgICAgbGF0ZW5jeTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgVk9JQ0VQUk9DX01PRFVMRV9JRF9HRU5FUklDX1RYICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBFRjYKI2RlZmluZSBWT0lDRVBST0NfUEFSQU1fSURfRkxVRU5DRV9TT1VOREZPQ1VTICAgICAgICAgICAgICAgMHgwMDAxMEUzNwojZGVmaW5lIFZPSUNFUFJPQ19QQVJBTV9JRF9GTFVFTkNFX1NPVVJDRVRSQUNLSU5HICAgICAgICAgICAweDAwMDEwRTM4CiNkZWZpbmUgTUFYX1NFQ1RPUlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgKI2RlZmluZSBNQVhfTk9JU0VfU09VUkNFX0lORElDQVRPUlMgICAgICAgICAgICAgICAgICAgICAgICAgMwojZGVmaW5lIE1BWF9QT0xBUl9BQ1RJVklUWV9JTkRJQ0FUT1JTICAgICAgICAgICAgICAgICAgICAgICAzNjAKCnN0cnVjdCBzb3VuZF9mb2N1c19wYXJhbSB7Cgl1aW50MTZfdCBzdGFydF9hbmdsZVtNQVhfU0VDVE9SU107Cgl1aW50OF90IGVuYWJsZVtNQVhfU0VDVE9SU107Cgl1aW50MTZfdCBnYWluX3N0ZXA7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3Qgc291cmNlX3RyYWNraW5nX3BhcmFtIHsKCXVpbnQ4X3QgdmFkW01BWF9TRUNUT1JTXTsKCXVpbnQxNl90IGRvYV9zcGVlY2g7Cgl1aW50MTZfdCBkb2Ffbm9pc2VbTUFYX05PSVNFX1NPVVJDRV9JTkRJQ0FUT1JTXTsKCXVpbnQ4X3QgcG9sYXJfYWN0aXZpdHlbTUFYX1BPTEFSX0FDVElWSVRZX0lORElDQVRPUlNdOwp9IF9fcGFja2VkOwoKc3RydWN0IGFkbV9wYXJhbV9mbHVlbmNlX3NvdW5kZm9jdXNfdCB7Cgl1aW50MTZfdCBzdGFydF9hbmdsZXNbTUFYX1NFQ1RPUlNdOwoJdWludDhfdCBlbmFibGVzW01BWF9TRUNUT1JTXTsKCXVpbnQxNl90IGdhaW5fc3RlcDsKCXVpbnQxNl90IHJlc2VydmVkOwp9IF9fcGFja2VkOwoKc3RydWN0IGFkbV9zZXRfZmx1ZW5jZV9zb3VuZGZvY3VzX3BhcmFtIHsKCXN0cnVjdCBhZG1fY21kX3NldF9wcF9wYXJhbXNfdjUgcGFyYW1zOwoJc3RydWN0IGFkbV9wYXJhbV9kYXRhX3Y1IGRhdGE7CglzdHJ1Y3QgYWRtX3BhcmFtX2ZsdWVuY2Vfc291bmRmb2N1c190IHNvdW5kZm9jdXNfZGF0YTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZG1fcGFyYW1fZmx1ZW5jZV9zb3VyY2V0cmFja2luZ190IHsKCXVpbnQ4X3QgdmFkW01BWF9TRUNUT1JTXTsKCXVpbnQxNl90IGRvYV9zcGVlY2g7Cgl1aW50MTZfdCBkb2Ffbm9pc2VbTUFYX05PSVNFX1NPVVJDRV9JTkRJQ0FUT1JTXTsKCXVpbnQ4X3QgcG9sYXJfYWN0aXZpdHlbTUFYX1BPTEFSX0FDVElWSVRZX0lORElDQVRPUlNdOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9BVURJT1NQSEVSRSAgICAgICAgICAgICAgIDB4MDAwMTA5MTYKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FVRElPU1BIRVJFX0VOQUJMRSAgICAgICAgIDB4MDAwMTA5MTcKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FVRElPU1BIRVJFX1NUUkVOR1RIICAgICAgIDB4MDAwMTA5MTgKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FVRElPU1BIRVJFX0NPTkZJR19NT0RFICAgIDB4MDAwMTA5MTkKCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9DT0VGRlNfU1RFUkVPX0lOUFVUICAgICAgICAgMHgwMDAxMDkxQQojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQVVESU9TUEhFUkVfQ09FRkZTX01VTFRJQ0hBTk5FTF9JTlBVVCAgIDB4MDAwMTA5MUIKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FVRElPU1BIRVJFX0RFU0lHTl9TVEVSRU9fSU5QVVQgICAgICAgICAweDAwMDEwOTFDCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9ERVNJR05fTVVMVElDSEFOTkVMX0lOUFVUICAgMHgwMDAxMDkxRAoKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FVRElPU1BIRVJFX09QRVJBVElOR19JTlBVVF9NRURJQV9JTkZPICAweDAwMDEwOTFFCgojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX1ZPSUNFX1RYX1NFQ05TICAgMHgxMDAyNzA1OQojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURYX1NFQ19QUklNQVJZX01JQ19DSCAweDEwMDE0NDQ0CgpzdHJ1Y3QgYWRteF9zZWNfcHJpbWFyeV9taWNfY2ggewoJdWludDE2X3QgdmVyc2lvbjsKCXVpbnQxNl90IHJlc2VydmVkOwoJdWludDE2X3Qgc2VjX3ByaW1hcnlfbWljX2NoOwoJdWludDE2X3QgcmVzZXJ2ZWQxOwp9IF9fcGFja2VkOwoKCnN0cnVjdCBhZG1fc2V0X3NlY19wcmltYXJ5X2NoX3BhcmFtcyB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHBhcmFtczsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBkYXRhOwoJc3RydWN0IGFkbXhfc2VjX3ByaW1hcnlfbWljX2NoIHNlY19wcmltYXJ5X21pY19jaF9kYXRhOwp9IF9fcGFja2VkOwojZW5kaWYgLypfQVBSX0FVRElPX1YyX0hfICovCg==