LyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTksIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqLwoKCiNpZm5kZWYgX0FQUl9BVURJT19WMl9IXwojZGVmaW5lIF9BUFJfQVVESU9fVjJfSF8KCiNpbmNsdWRlIDxpcGMvYXByLmg+CiNpbmNsdWRlIDxsaW51eC9tc21fYXVkaW8uaD4KCi8qIHNpemUgb2YgaGVhZGVyIG5lZWRlZCBmb3IgcGFzc2luZyBkYXRhIG91dCBvZiBiYW5kICovCiNkZWZpbmUgQVBSX0NNRF9PQl9IRFJfU1ogIDEyCgovKiBzaXplIG9mIGhlYWRlciBuZWVkZWQgZm9yIGdldHRpbmcgZGF0YSAqLwojZGVmaW5lIEFQUl9DTURfR0VUX0hEUl9TWiAxNgoKc3RydWN0IHBhcmFtX291dGJhbmQgewoJc2l6ZV90ICAgICAgIHNpemU7Cgl2b2lkICAgICAgICAqa3ZhZGRyOwoJcGh5c19hZGRyX3QgIHBhZGRyOwp9OwoKI2RlZmluZSBBRFNQX0FETV9WRVJTSU9OICAgIDB4MDAwNzAwMDAKCiNkZWZpbmUgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICAgIDB4MDAwMTAzMjIKI2RlZmluZSBBRE1fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgMHgwMDAxMDMyMwojZGVmaW5lIEFETV9DTURfU0hBUkVEX01FTV9VTk1BUF9SRUdJT05TIDB4MDAwMTAzMjQKCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfTUFQX1JPVVRJTkdTX1Y1IDB4MDAwMTAzMjUKI2RlZmluZSBBRE1fQ01EX1NUUkVBTV9ERVZJQ0VfTUFQX1JPVVRJTkdTX1Y1IDB4MDAwMTAzM0QKLyogRW51bWVyYXRpb24gZm9yIGFuIGF1ZGlvIFJ4IG1hdHJpeCBJRC4qLwojZGVmaW5lIEFETV9NQVRSSVhfSURfQVVESU9fUlggICAgICAgICAgICAgIDAKCiNkZWZpbmUgQURNX01BVFJJWF9JRF9BVURJT19UWCAgICAgICAgICAgICAgMQoKI2RlZmluZSBBRE1fTUFUUklYX0lEX0NPTVBSRVNTRURfQVVESU9fUlggICAyCgojZGVmaW5lIEFETV9NQVRSSVhfSURfQ09NUFJFU1NFRF9BVURJT19UWCAgIDMKCiNkZWZpbmUgQURNX01BVFJJWF9JRF9MSVNURU5fVFggICAgICAgICAgICAgNAovKiBFbnVtZXJhdGlvbiBmb3IgYW4gYXVkaW8gVHggbWF0cml4IElELiovCiNkZWZpbmUgQURNX01BVFJJWF9JRF9BVURJT1ggICAgICAgICAgICAgIDEKCiNkZWZpbmUgQURNX01BWF9DT1BQUyA1CgovKiBtYWtlIHN1cmUgdGhpcyBtYXRjaGVzIHdpdGggbXNtX2F1ZGlvX2NhbGlicmF0aW9uICovCiNkZWZpbmUgU1BfVjJfTlVNX01BWF9TUEtSIDIKCi8qIFNlc3Npb24gbWFwIG5vZGUgc3RydWN0dXJlLgogKiBJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgYXJlIG51bV9jb3BwcwogKiBlbnRyaWVzIG9mIENPUFAgSURzLiBUaGUgQ09QUCBJRHMgYXJlIDE2IGJpdHMsIHNvCiAqIHRoZXJlIG1pZ2h0IGJlIGEgcGFkZGluZyAxNi1iaXQgZmllbGQgaWYgbnVtX2NvcHBzCiAqIGlzIG9kZC4KICovCnN0cnVjdCBhZG1fc2Vzc2lvbl9tYXBfbm9kZV92NSB7Cgl1MTYgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwoJLyogSGFuZGxlIG9mIHRoZSBBU00gc2Vzc2lvbiB0byBiZSByb3V0ZWQuIFN1cHBvcnRlZCB2YWx1ZXM6IDEKCSAqIHRvIDguCgkgKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NvcHBzOwoJLyogTnVtYmVyIG9mIENPUFBzIHRvIHdoaWNoIHRoaXMgc2Vzc2lvbiBpcyB0byBiZSByb3V0ZWQuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIDwgbnVtX2NvcHBzIDw9IEFETV9NQVhfQ09QUFMuCgkgKi8KfSBfX3BhY2tlZDsKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRF9NQVRSSVhfTUFQX1JPVVRJTkdTX1Y1IGNvbW1hbmQuCiAqCUltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUgbnVtX3Nlc3Npb25zIG9mIHRoZSBzZXNzaW9uIG1hcAogKglub2RlIHBheWxvYWQgKGFkbV9zZXNzaW9uX21hcF9ub2RlX3Y1KS4KICovCgpzdHJ1Y3QgYWRtX2NtZF9tYXRyaXhfbWFwX3JvdXRpbmdzX3Y1IHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCgl1MzIgICAgICAgICAgICAgICAgICBtYXRyaXhfaWQ7CgkvKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgbWF0cml4IElEIGlzIEF1ZGlvIFJ4ICgwKSBvciBBdWRpbyBUeAoJICogKDEpLiBVc2UgdGhlIEFETV9NQVRSSVhfSURfQVVESU9fUlggb3IgQURNX01BVFJJWF9JRF9BVURJT1gKCSAqIG1hY3JvcyB0byBzZXQgdGhpcyBmaWVsZC4KCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgbnVtX3Nlc3Npb25zOwoJLyogTnVtYmVyIG9mIHNlc3Npb25zIGJlaW5nIHVwZGF0ZWQgYnkgdGhpcyBjb21tYW5kIChvcHRpb25hbCkuICovCn0gX19wYWNrZWQ7CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MuIFRYIG1vZHVsZQogKiBhbmQgc2V0cyB1cCB0aGUgZGV2aWNlIHNlc3Npb246IE1hdHJpeCAtPiBDT1BQIC0+IEFGRSBvbiB0aGUgUlgKICogYW5kIEFGRSAtPiBDT1BQIC0+IE1hdHJpeCBvbiB0aGUgVFguIFRoaXMgZW5hYmxlcyBQQ00gZGF0YSB0bwogKiBiZSB0cmFuc2ZlcnJlZCB0by9mcm9tIHRoZSBlbmRwb2ludCAoQUZFUG9ydElEKS4KICoKICogQHJldHVybgogKiAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNSB3aXRoIHRoZSByZXN1bHRpbmcgc3RhdHVzIGFuZCBDT1BQIElELgogKi8KI2RlZmluZSBBRE1fQ01EX0RFVklDRV9PUEVOX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzI2CgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgY2xpZW50IHRvIG9wZW4gYSBDT1BQL1ZvaWNlIFByb2MgdGhlCiAqCXdheSBhcyBBRE1fQ01EX0RFVklDRV9PUEVOX1Y1IGJ1dCBzdXBwb3J0cyBtdWx0aXBsZSBlbmRwb2ludDIKICoJY2hhbm5lbHMuCiAqCiAqCUByZXR1cm4KICoJI0FETV9DTURSU1BfREVWSUNFX09QRU5fVjYgd2l0aCB0aGUgcmVzdWx0aW5nIHN0YXR1cyBhbmQKICoJQ09QUCBJRC4KICovCiNkZWZpbmUgQURNX0NNRF9ERVZJQ0VfT1BFTl9WNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzU2CgovKiBEZWZpbml0aW9uIGZvciBhIGxvdyBsYXRlbmN5IHN0cmVhbSBzZXNzaW9uLiAqLwojZGVmaW5lIEFETV9MT1dfTEFURU5DWV9ERVZJQ0VfU0VTU0lPTgkJCTB4MjAwMAoKLyogRGVmaW5pdGlvbiBmb3IgYSB1bHRyYSBsb3cgbGF0ZW5jeSBzdHJlYW0gc2Vzc2lvbi4gKi8KI2RlZmluZSBBRE1fVUxUUkFfTE9XX0xBVEVOQ1lfREVWSUNFX1NFU1NJT04JCTB4NDAwMAoKLyogRGVmaW5pdGlvbiBmb3IgYSB1bHRyYSBsb3cgbGF0ZW5jeSB3aXRoIFBvc3QgUHJvY2Vzc2luZyBzdHJlYW0gc2Vzc2lvbi4gKi8KI2RlZmluZSBBRE1fVUxMX1BPU1RfUFJPQ0VTU0lOR19ERVZJQ0VfU0VTU0lPTgkJMHg4MDAwCgovKiBEZWZpbml0aW9uIGZvciBhIGxlZ2FjeSBkZXZpY2Ugc2Vzc2lvbi4gKi8KI2RlZmluZSBBRE1fTEVHQUNZX0RFVklDRV9TRVNTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCgovKiBJbmRpY2F0ZXMgdGhhdCBlbmRwb2ludF9pZF8yIGlzIHRvIGJlIGlnbm9yZWQuKi8KI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9FTkRfUE9JTlRfSURfMl9JR05PUkUJCQkJMHhGRkZGCgojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX01PREVfT0ZfT1BFUkFUSU9OX1JYX1BBVEhfQ09QUAkJIDEKCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05YX1BBVEhfTElWRV9DT1BQCQkgMgoKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9NT0RFX09GX09QRVJBVElPTlhfUEFUSF9OT05fTElWRV9DT1BQCSAzCgovKiBJbmRpY2F0ZXMgdGhhdCBhbiBhdWRpbyBDT1BQIGlzIHRvIHNlbmQvcmVjZWl2ZSBhIG1vbm8gUENNCiAqIHN0cmVhbSB0by9mcm9tCiAqCUVORF9QT0lOVF9JRF8xLgogKi8KI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9DSEFOTkVMX0NPTkZJR19NT05PCQkxCgovKiBJbmRpY2F0ZXMgdGhhdCBhbiBhdWRpbyBDT1BQIGlzIHRvIHNlbmQvcmVjZWl2ZSBhCiAqCXN0ZXJlbyBQQ00gc3RyZWFtIHRvL2Zyb20gRU5EX1BPSU5UX0lEXzEuCiAqLwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX0NIQU5ORUxfQ09ORklHX1NURVJFTwkJMgoKLyogU2FtcGxlIHJhdGUgaXMgODAwMCBIei4qLwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX1NBTVBMRV9SQVRFXzhLIDgwMDAKCi8qIFNhbXBsZSByYXRlIGlzIDE2MDAwIEh6LiovCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fU0FNUExFX1JBVEVfMTZLIDE2MDAwCgovKiBTYW1wbGUgcmF0ZSBpcyA0ODAwMCBIei4qLwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOX1NBTVBMRV9SQVRFXzQ4SyA0ODAwMAoKLyogRGVmaW5pdGlvbiBmb3IgYSBDT1BQIGxpdmUgaW5wdXQgZmxhZyBiaXRtYXNrLiovCiNkZWZpbmUgQURNX0JJVF9NQVNLX0NPUFBfTElWRV9JTlBVVF9GTEFHICgweDAwMDFVKQoKLyogRGVmaW5pdGlvbiBmb3IgYSBDT1BQIGxpdmUgc2hpZnQgdmFsdWUgYml0bWFzay4qLwojZGVmaW5lIEFETV9TSElGVF9DT1BQX0xJVkVfSU5QVVRfRkxBRwkgMAoKLyogRGVmaW5pdGlvbiBmb3IgdGhlIENPUFAgSUQgYml0bWFzay4qLwojZGVmaW5lIEFETV9CSVRfTUFTS19DT1BQX0lEICAoMHgwMDAwRkZGRlVMKQoKLyogRGVmaW5pdGlvbiBmb3IgdGhlIENPUFAgSUQgc2hpZnQgdmFsdWUuKi8KI2RlZmluZSBBRE1fU0hJRlRfQ09QUF9JRAkwCgovKiBEZWZpbml0aW9uIGZvciB0aGUgc2VydmljZSBJRCBiaXRtYXNrLiovCiNkZWZpbmUgQURNX0JJVF9NQVNLX1NFUlZJQ0VfSUQgICgweDAwRkYwMDAwVUwpCgovKiBEZWZpbml0aW9uIGZvciB0aGUgc2VydmljZSBJRCBzaGlmdCB2YWx1ZS4qLwojZGVmaW5lIEFETV9TSElGVF9TRVJWSUNFX0lECTE2CgovKiBEZWZpbml0aW9uIGZvciB0aGUgZG9tYWluIElEIGJpdG1hc2suKi8KI2RlZmluZSBBRE1fQklUX01BU0tfRE9NQUlOX0lEICAgICgweEZGMDAwMDAwVUwpCgovKiBEZWZpbml0aW9uIGZvciB0aGUgZG9tYWluIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQURNX1NISUZUX0RPTUFJTl9JRAkyNAoKLyogQURNIGRldmljZSBvcGVuIGNvbW1hbmQgcGF5bG9hZCBvZiB0aGUKICogI0FETV9DTURfREVWSUNFX09QRU5fVjUgY29tbWFuZC4KICovCnN0cnVjdCBhZG1fY21kX2RldmljZV9vcGVuX3Y1IHsKCXN0cnVjdCBhcHJfaGRyCQloZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBmbGFnczsKLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZAogKiB0byB6ZXJvLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBtb2RlX29mX29wZXJhdGlvbjsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIENPUFAgbXVzdCBiZSBvcGVuZWQgb24gdGhlIFR4IG9yIFJ4CiAqIHBhdGguIFVzZSB0aGUgQURNX0NNRF9DT1BQX09QRU5fTU9ERV9PRl9PUEVSQVRJT05fKiBtYWNyb3MgZm9yCiAqIHN1cHBvcnRlZCB2YWx1ZXMgYW5kIGludGVycHJldGF0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDB4MSAtLSBSeCBwYXRoIENPUFAKICogLSAweDIgLS0gVHggcGF0aCBsaXZlIENPUFAKICogLSAweDMgLS0gVHggcGF0aCBub25saXZlIENPUFAKICogTGl2ZSBjb25uZWN0aW9ucyBjYXVzZSBzYW1wbGUgZGlzY2FyZGluZyBpbiB0aGUgVHggZGV2aWNlCiAqIG1hdHJpeCBpZiB0aGUgZGVzdGluYXRpb24gb3V0cHV0IHBvcnRzIGRvIG5vdCBwdWxsIHRoZW0KICogZmFzdCBlbm91Z2guIE5vbmxpdmUgY29ubmVjdGlvbnMgcXVldWUgdGhlIHNhbXBsZXMKICogaW5kZWZpbml0ZWx5LgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBlbmRwb2ludF9pZF8xOwovKiBMb2dpY2FsIGFuZCBwaHlzaWNhbCBlbmRwb2ludCBJRCBvZiB0aGUgYXVkaW8gcGF0aC4KICogSWYgdGhlIElEIGlzIGEgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrLCBpdCByZWNlaXZlcyBuZWFyCiAqIHNhbXBsZXMuCVN1cHBvcnRlZCB2YWx1ZXM6IEFueSBwc2V1ZG9wb3J0LCBBRkUgUnggcG9ydCwKICogb3IgQUZFIFR4IHBvcnQgRm9yIGEgbGlzdCBvZiB2YWxpZCBJRHMsIHJlZmVyIHRvCiAqIEB4aHlwZXJyZWZ7UTQsW1E0XX0uCiAqIFE0ID0gSGV4YWdvbiBNdWx0aW1lZGlhOiBBRkUgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5kcG9pbnRfaWRfMjsKLyogTG9naWNhbCBhbmQgcGh5c2ljYWwgZW5kcG9pbnQgSUQgMiBmb3IgYSB2b2ljZSBwcm9jZXNzb3IKICogVHggYmxvY2suCiAqIFRoaXMgaXMgbm90IGFwcGxpY2FibGUgdG8gYXVkaW8gQ09QUC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSBBRkUgUnggcG9ydAogKiAtIDB4RkZGRiAtLSBFbmRwb2ludCAyIGlzIHVuYXZhaWxhYmxlIGFuZCB0aGUgdm9pY2UKICogcHJvY2Vzc29yIFR4CiAqIGJsb2NrIGlnbm9yZXMgdGhpcyBlbmRwb2ludAogKiBXaGVuIHRoZSB2b2ljZSBwcm9jZXNzb3IgVHggYmxvY2sgaXMgY3JlYXRlZCBvbiB0aGUgYXVkaW8KICogcmVjb3JkIHBhdGgsCiAqIGl0IGNhbiByZWNlaXZlIGZhci1lbmQgc2FtcGxlcyBmcm9tIGFuIEFGRSBSeCBwb3J0IGlmIHRoZQogKiB2b2ljZSBjYWxsCiAqIGlzIGFjdGl2ZS4gVGhlIElEIG9mIHRoZSBBRkUgcG9ydCBpcyBwcm92aWRlZCBpbiB0aGlzCiAqIGZpZWxkLgogKiBGb3IgYSBsaXN0IG9mIHZhbGlkIElEcywgcmVmZXIgQHhoeXBlcnJlZntRNCxbUTRdfS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgdG9wb2xvZ3lfaWQ7Ci8qIEF1ZGlvIENPUFAgdG9wb2xvZ3kgSUQ7IDMyLWJpdCBHVUlELiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGRldl9udW1fY2hhbm5lbDsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIHRoZSBhdWRpbyBDT1BQIHNlbmRzIHRvL3JlY2VpdmVzIGZyb20KICogdGhlIGVuZHBvaW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDguCiAqIFRoZSB2YWx1ZSBpcyBpZ25vcmVkIGZvciB0aGUgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrLAogKiB3aGVyZSBjaGFubmVsCiAqIGNvbmZpZ3VyYXRpb24gaXMgZGVyaXZlZCBmcm9tIHRoZSB0b3BvbG9neSBJRC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggKGluIGJpdHMpIHRoYXQgdGhlIGF1ZGlvIENPUFAgc2VuZHMgdG8vcmVjZWl2ZXMKICogZnJvbSB0aGUKICogZW5kcG9pbnQuIFRoZSB2YWx1ZSBpcyBpZ25vcmVkIGZvciB0aGUgdm9pY2UgcHJvY2Vzc2luZwogKiBUeCBibG9jaywKICogd2hlcmUgdGhlIFBDTSB3aWR0aCBpcyAxNiBiaXRzLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogU2FtcGxpbmcgcmF0ZSBhdCB3aGljaCB0aGUgYXVkaW8gQ09QUC92b2ljZSBwcm9jZXNzb3IKICogVHggYmxvY2sKICogaW50ZXJmYWNlcyB3aXRoIHRoZSBlbmRwb2ludC4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3Igdm9pY2UgcHJvY2Vzc29yIFR4OiA4MDAwLCAxNjAwMCwKICogNDgwMDAgSHoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYXVkaW8gQ09QUDogPjAgYW5kIDw9MTkyIGtIegogKi8KCgl1OCAgICAgICAgICAgICAgICAgICBkZXZfY2hhbm5lbF9tYXBwaW5nWzhdOwovKiBBcnJheSBvZiBjaGFubmVsIG1hcHBpbmcgb2YgYnVmZmVycyB0aGF0IHRoZSBhdWRpbyBDT1BQCiAqIHNlbmRzIHRvIHRoZSBlbmRwb2ludC4gQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsCiAqIEkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlIDAgPCBpIDwgZGV2X251bV9jaGFubmVsLgogKiBUaGlzIHZhbHVlIGlzIHJlbGV2YW50IG9ubHkgZm9yIGFuIGF1ZGlvIFJ4IENPUFAuCiAqIEZvciB0aGUgdm9pY2UgcHJvY2Vzc29yIGJsb2NrIGFuZCBUeCBhdWRpbyBibG9jaywgdGhpcyBmaWVsZAogKiBpcyBzZXQgdG8gemVybyBhbmQgaXMgaWdub3JlZC4KICovCn0gX19wYWNrZWQ7CgovKiAgQURNIGRldmljZSBvcGVuIGNvbW1hbmQgcGF5bG9hZCBvZiB0aGUKICogICNBRE1fQ01EX0RFVklDRV9PUEVOX1Y2IGNvbW1hbmQuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9kZXZpY2Vfb3Blbl92NiB7CglzdHJ1Y3QgYXByX2hkcgkJaGRyOwoJdTE2ICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQKICogdG8gemVyby4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbW9kZV9vZl9vcGVyYXRpb247Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBDT1BQIG11c3QgYmUgb3BlbmVkIG9uIHRoZSBUeCBvciBSeAogKiBwYXRoLiBVc2UgdGhlIEFETV9DTURfQ09QUF9PUEVOX01PREVfT0ZfT1BFUkFUSU9OXyogbWFjcm9zIGZvcgogKiBzdXBwb3J0ZWQgdmFsdWVzIGFuZCBpbnRlcnByZXRhdGlvbi4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAweDEgLS0gUnggcGF0aCBDT1BQCiAqIC0gMHgyIC0tIFR4IHBhdGggbGl2ZSBDT1BQCiAqIC0gMHgzIC0tIFR4IHBhdGggbm9ubGl2ZSBDT1BQCiAqIExpdmUgY29ubmVjdGlvbnMgY2F1c2Ugc2FtcGxlIGRpc2NhcmRpbmcgaW4gdGhlIFR4IGRldmljZQogKiBtYXRyaXggaWYgdGhlIGRlc3RpbmF0aW9uIG91dHB1dCBwb3J0cyBkbyBub3QgcHVsbCB0aGVtCiAqIGZhc3QgZW5vdWdoLiBOb25saXZlIGNvbm5lY3Rpb25zIHF1ZXVlIHRoZSBzYW1wbGVzCiAqIGluZGVmaW5pdGVseS4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5kcG9pbnRfaWRfMTsKLyogTG9naWNhbCBhbmQgcGh5c2ljYWwgZW5kcG9pbnQgSUQgb2YgdGhlIGF1ZGlvIHBhdGguCiAqIElmIHRoZSBJRCBpcyBhIHZvaWNlIHByb2Nlc3NvciBUeCBibG9jaywgaXQgcmVjZWl2ZXMgbmVhcgogKiBzYW1wbGVzLglTdXBwb3J0ZWQgdmFsdWVzOiBBbnkgcHNldWRvcG9ydCwgQUZFIFJ4IHBvcnQsCiAqIG9yIEFGRSBUeCBwb3J0IEZvciBhIGxpc3Qgb2YgdmFsaWQgSURzLCByZWZlciB0bwogKiBAeGh5cGVycmVme1E0LFtRNF19LgogKiBRNCA9IEhleGFnb24gTXVsdGltZWRpYTogQUZFIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkXzI7Ci8qIExvZ2ljYWwgYW5kIHBoeXNpY2FsIGVuZHBvaW50IElEIDIgZm9yIGEgdm9pY2UgcHJvY2Vzc29yCiAqIFR4IGJsb2NrLgogKiBUaGlzIGlzIG5vdCBhcHBsaWNhYmxlIHRvIGF1ZGlvIENPUFAuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gQUZFIFJ4IHBvcnQKICogLSAweEZGRkYgLS0gRW5kcG9pbnQgMiBpcyB1bmF2YWlsYWJsZSBhbmQgdGhlIHZvaWNlCiAqIHByb2Nlc3NvciBUeAogKiBibG9jayBpZ25vcmVzIHRoaXMgZW5kcG9pbnQKICogV2hlbiB0aGUgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrIGlzIGNyZWF0ZWQgb24gdGhlIGF1ZGlvCiAqIHJlY29yZCBwYXRoLAogKiBpdCBjYW4gcmVjZWl2ZSBmYXItZW5kIHNhbXBsZXMgZnJvbSBhbiBBRkUgUnggcG9ydCBpZiB0aGUKICogdm9pY2UgY2FsbAogKiBpcyBhY3RpdmUuIFRoZSBJRCBvZiB0aGUgQUZFIHBvcnQgaXMgcHJvdmlkZWQgaW4gdGhpcwogKiBmaWVsZC4KICogRm9yIGEgbGlzdCBvZiB2YWxpZCBJRHMsIHJlZmVyIEB4aHlwZXJyZWZ7UTQsW1E0XX0uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHRvcG9sb2d5X2lkOwovKiBBdWRpbyBDT1BQIHRvcG9sb2d5IElEOyAzMi1iaXQgR1VJRC4gKi8KCgl1MTYgICAgICAgICAgICAgICAgICBkZXZfbnVtX2NoYW5uZWw7Ci8qIE51bWJlciBvZiBjaGFubmVscyB0aGUgYXVkaW8gQ09QUCBzZW5kcyB0by9yZWNlaXZlcyBmcm9tCiAqIHRoZSBlbmRwb2ludC4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4LgogKiBUaGUgdmFsdWUgaXMgaWdub3JlZCBmb3IgdGhlIHZvaWNlIHByb2Nlc3NvciBUeCBibG9jaywKICogd2hlcmUgY2hhbm5lbAogKiBjb25maWd1cmF0aW9uIGlzIGRlcml2ZWQgZnJvbSB0aGUgdG9wb2xvZ3kgSUQuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogQml0IHdpZHRoIChpbiBiaXRzKSB0aGF0IHRoZSBhdWRpbyBDT1BQIHNlbmRzIHRvL3JlY2VpdmVzCiAqIGZyb20gdGhlCiAqIGVuZHBvaW50LiBUaGUgdmFsdWUgaXMgaWdub3JlZCBmb3IgdGhlIHZvaWNlIHByb2Nlc3NpbmcKICogVHggYmxvY2ssCiAqIHdoZXJlIHRoZSBQQ00gd2lkdGggaXMgMTYgYml0cy4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgYXQgd2hpY2ggdGhlIGF1ZGlvIENPUFAvdm9pY2UgcHJvY2Vzc29yCiAqIFR4IGJsb2NrCiAqIGludGVyZmFjZXMgd2l0aCB0aGUgZW5kcG9pbnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIHZvaWNlIHByb2Nlc3NvciBUeDogODAwMCwgMTYwMDAsCiAqIDQ4MDAwIEh6CiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGF1ZGlvIENPUFA6ID4wIGFuZCA8PTE5MiBrSHoKICovCgoJdTggICAgICAgICAgICAgICAgICAgZGV2X2NoYW5uZWxfbWFwcGluZ1s4XTsKLyogQXJyYXkgb2YgY2hhbm5lbCBtYXBwaW5nIG9mIGJ1ZmZlcnMgdGhhdCB0aGUgYXVkaW8gQ09QUAogKiBzZW5kcyB0byB0aGUgZW5kcG9pbnQuIENoYW5uZWxbaV0gbWFwcGluZyBkZXNjcmliZXMgY2hhbm5lbAogKiBJIGluc2lkZSB0aGUgYnVmZmVyLCB3aGVyZSAwIDwgaSA8IGRldl9udW1fY2hhbm5lbC4KICogVGhpcyB2YWx1ZSBpcyByZWxldmFudCBvbmx5IGZvciBhbiBhdWRpbyBSeCBDT1BQLgogKiBGb3IgdGhlIHZvaWNlIHByb2Nlc3NvciBibG9jayBhbmQgVHggYXVkaW8gYmxvY2ssIHRoaXMgZmllbGQKICogaXMgc2V0IHRvIHplcm8gYW5kIGlzIGlnbm9yZWQuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGRldl9udW1fY2hhbm5lbF9laWQyOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgdGhlIHZvaWNlIHByb2Nlc3NvciBibG9jayBzZW5kcwogKiB0by9yZWNlaXZlcyBmcm9tIHRoZSBlbmRwb2ludDIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOC4KICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIGF1ZGlvIENPUFAgb3IgaWYgZW5kcG9pbnRfaWRfMiBpcwogKiBzZXQgdG8gMHhGRkZGLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGhfZWlkMjsKLyogQml0IHdpZHRoIChpbiBiaXRzKSB0aGF0IHRoZSB2b2ljZSBwcm9jZXNzb3Igc2VuZHMKICogdG8vcmVjZWl2ZXMgZnJvbSB0aGUgZW5kcG9pbnQyLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQuCiAqIFRoZSB2YWx1ZSBpcyBpZ25vcmVkIGZvciBhdWRpbyBDT1BQIG9yIGlmIGVuZHBvaW50X2lkXzIgaXMKICogc2V0IHRvIDB4RkZGRi4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGVfZWlkMjsKLyogU2FtcGxpbmcgcmF0ZSBhdCB3aGljaCB0aGUgdm9pY2UgcHJvY2Vzc29yIFR4IGJsb2NrCiAqIGludGVyZmFjZXMgd2l0aCB0aGUgZW5kcG9pbnQyLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBUeCB2b2ljZSBwcm9jZXNzb3I6ID4wIGFuZCA8PTM4NCBrSHoKICogVGhlIHZhbHVlIGlzIGlnbm9yZWQgZm9yIGF1ZGlvIENPUFAgb3IgaWYgZW5kcG9pbnRfaWRfMiBpcwogKiBzZXQgdG8gMHhGRkZGLgogKi8KCgl1OCAgICAgICAgICAgICAgICAgICBkZXZfY2hhbm5lbF9tYXBwaW5nX2VpZDJbOF07Ci8qIEFycmF5IG9mIGNoYW5uZWwgbWFwcGluZyBvZiBidWZmZXJzIHRoYXQgdGhlIHZvaWNlIHByb2Nlc3NvcgogKiBzZW5kcyB0byB0aGUgZW5kcG9pbnQuIENoYW5uZWxbaV0gbWFwcGluZyBkZXNjcmliZXMgY2hhbm5lbAogKiBJIGluc2lkZSB0aGUgYnVmZmVyLCB3aGVyZSAwIDwgaSA8IGRldl9udW1fY2hhbm5lbC4KICogVGhpcyB2YWx1ZSBpcyByZWxldmFudCBvbmx5IGZvciB0aGUgVHggdm9pY2UgcHJvY2Vzc29yLgogKiBUaGUgdmFsdWVzIGFyZSBpZ25vcmVkIGZvciBhdWRpbyBDT1BQIG9yIGlmIGVuZHBvaW50X2lkXzIgaXMKICogc2V0IHRvIDB4RkZGRi4KICovCn0gX19wYWNrZWQ7CgovKgogKglUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBjbGllbnQgdG8gY2xvc2UgYSBDT1BQIGFuZCBkaXNjb25uZWN0CiAqCXRoZSBkZXZpY2Ugc2Vzc2lvbi4KICovCiNkZWZpbmUgQURNX0NNRF9ERVZJQ0VfQ0xPU0VfVjUgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDMyNwoKLyogU2V0cyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIHRvIGEgQ09QUC4gKi8KI2RlZmluZSBBRE1fQ01EX1NFVF9QUF9QQVJBTVNfVjUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzI4CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfU0VUX1BQX1BBUkFNU19WNSBjb21tYW5kLgogKglJZiB0aGUgZGF0YV9wYXlsb2FkX2FkZHJfbHN3IGFuZCBkYXRhX3BheWxvYWRfYWRkcl9tc3cgZWxlbWVudAogKglhcmUgTlVMTCwgYSBzZXJpZXMgb2YgYWRtX3BhcmFtX2RhdGFzdHJ1Y3R1cmVzIGltbWVkaWF0ZWx5CiAqCWZvbGxvd3MsIHdob3NlIHRvdGFsIHNpemUgaXMgZGF0YV9wYXlsb2FkX3NpemUgYnl0ZXMuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMgkJcGF5bG9hZF9hZGRyX2xzdzsKLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCXUzMgkJcGF5bG9hZF9hZGRyX21zdzsKLyogTVNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwovKiBNZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBBRE1fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogY29tbWFuZAogKgogKiBJZiBtZW1fbWFwX2hhbmRsZSBpcyB6ZXJvIGltcGxpZXMgdGhlIG1lc3NhZ2UgaXMgaW4KICogdGhlIHBheWxvYWQKICovCgoJdTMyCQlwYXlsb2FkX3NpemU7Ci8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgYWNjb21wYW55aW5nIHRoaXMKICogbWVzc2FnZSBvcgogKiBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlIHBhcmFtZXRlcgogKiBwYXlsb2FkLgogKi8KfSBfX3BhY2tlZDsKCi8qICBQYXlsb2FkIGZvcm1hdCBmb3IgQ09QUCBwYXJhbWV0ZXIgZGF0YS4KICogSW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoaXMgc3RydWN0dXJlIGFyZSBwYXJhbV9zaXplIGJ5dGVzCiAqIG9mIHBhcmFtZXRlcgogKiBkYXRhLgogKi8Kc3RydWN0IGFkbV9wYXJhbV9kYXRhX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIG1vZHVsZV9pZDsKCS8qIFVuaXF1ZSBJRCBvZiB0aGUgbW9kdWxlLiAqLwoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgSUQgb2YgdGhlIHBhcmFtZXRlci4gKi8KCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX3NpemU7CgkvKiBEYXRhIHNpemUgb2YgdGhlIHBhcmFtX2lkL21vZHVsZV9pZCBjb21iaW5hdGlvbi4KCSAqIFRoaXMgdmFsdWUgaXMgYQoJICogbXVsdGlwbGUgb2YgNCBieXRlcy4KCSAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cy4KCSAqIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KCSAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9SRUdJU1RFUl9QUF9FVkVOVFMgMHgwMDAxMzIxMwojZGVmaW5lIEFTTV9TVFJFQU1fUFBfRVZFTlQgMHgwMDAxMzIxNAojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX1JFR0lTVEVSX0lFQ182MTkzN19GTVRfVVBEQVRFIDB4MTMzMzMKI2RlZmluZSBBU01fSUVDXzYxOTM3X01FRElBX0ZNVF9FVkVOVCAweDEzMzM0CgojZGVmaW5lIERTUF9TVFJFQU1fQ01EICJBRFNQIFN0cmVhbSBDbWQiCiNkZWZpbmUgRFNQX1NUUkVBTV9DQUxMQkFDSyAiQURTUCBTdHJlYW0gQ2FsbGJhY2sgRXZlbnQiCiNkZWZpbmUgRFNQX1NUUkVBTV9DQUxMQkFDS19RVUVVRV9TSVpFIDEwMjQKCnN0cnVjdCBkc3Bfc3RyZWFtX2NhbGxiYWNrX2xpc3QgewoJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwoJc3RydWN0IG1zbV9hZHNwX2V2ZW50X2RhdGEgZXZlbnQ7Cn07CgpzdHJ1Y3QgZHNwX3N0cmVhbV9jYWxsYmFja19wcnRkIHsKCXVpbnQxNl90IGV2ZW50X2NvdW50OwoJc3RydWN0IGxpc3RfaGVhZCBldmVudF9xdWV1ZTsKCXNwaW5sb2NrX3QgcHJ0ZF9zcGluX2xvY2s7Cn07CgovKiBzZXQgY3VzdG9taXplZCBtaXhpbmcgb24gbWF0cml4IG1peGVyICovCiNkZWZpbmUgQURNX0NNRF9TRVRfUFNQRF9NVE1YX1NUUlRSX1BBUkFNU19WNSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzNDQKc3RydWN0IGFkbV9jbWRfc2V0X3BzcGRfbXRteF9zdHJ0cl9wYXJhbXNfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQlwYXlsb2FkX2FkZHJfbHN3OwoJLyogTVNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyCQlwYXlsb2FkX2FkZHJfbXN3OwoJLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICovCgkvKiBjb21tYW5kLiBJZiBtZW1fbWFwX2hhbmRsZSBpcyB6ZXJvIGltcGxpZXMgdGhlIG1lc3NhZ2UgaXMgaW4gKi8KCS8qIHRoZSBwYXlsb2FkICovCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwoJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUgcGF5bG9hZCBhY2NvbXBhbnlpbmcgdGhpcyAqLwoJLyogbWVzc2FnZSBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlICovCgkvKiBwYXJhbWV0ZXIgcGF5bG9hZC4gKi8KCXUzMgkJcGF5bG9hZF9zaXplOwoJdTE2CQlkaXJlY3Rpb247Cgl1MTYJCXNlc3Npb25pZDsKCXUxNgkJZGV2aWNlaWQ7Cgl1MTYJCXJlc2VydmVkOwp9IF9fcGFja2VkOwoKLyogRGVmaW5lZCBzcGVjaWZpY2FsbHkgZm9yIGluLWJhbmQgdXNlLCBpbmNsdWRlcyBwYXJhbXMgKi8Kc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc19pbmJhbmRfdjUgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJLyogTFNXIG9mIHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4qLwoJdTMyICAgICAgICAgICAgIHBheWxvYWRfYWRkcl9sc3c7CgkvKiBNU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgl1MzIgICAgICAgICAgICAgcGF5bG9hZF9hZGRyX21zdzsKCS8qIE1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IEFETV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAqLwoJLyogY29tbWFuZC4gSWYgbWVtX21hcF9oYW5kbGUgaXMgemVybyBpbXBsaWVzIHRoZSBtZXNzYWdlIGlzIGluICovCgkvKiB0aGUgcGF5bG9hZCAqLwoJdTMyICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyogU2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUgcGF5bG9hZCBhY2NvbXBhbnlpbmcgdGhpcyAqLwoJLyogbWVzc2FnZSBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlICovCgkvKiBwYXJhbWV0ZXIgcGF5bG9hZC4gKi8KCXUzMiAgICAgICAgICAgICBwYXlsb2FkX3NpemU7CgkvKiBQYXJhbWV0ZXJzIHBhc3NlZCBmb3IgaW4gYmFuZCBwYXlsb2FkICovCglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgICAgICAgIHBhcmFtczsKfSBfX3BhY2tlZDsKCi8qIFJldHVybnMgdGhlIHN0YXR1cyBhbmQgQ09QUCBJRCB0byBhbiAjQURNX0NNRF9ERVZJQ0VfT1BFTl9WNSBjb21tYW5kLgogKi8KI2RlZmluZSBBRE1fQ01EUlNQX0RFVklDRV9PUEVOX1Y1ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAzMjkKCi8qICBQYXlsb2FkIG9mIHRoZSAjQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNSBtZXNzYWdlLAogKgl3aGljaCByZXR1cm5zIHRoZQogKglzdGF0dXMgYW5kIENPUFAgSUQgdG8gYW4gI0FETV9DTURfREVWSUNFX09QRU5fVjUgY29tbWFuZC4KICovCnN0cnVjdCBhZG1fY21kX3JzcF9kZXZpY2Vfb3Blbl92NSB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuKi8KCgl1MTYgICAgICAgICAgICAgICAgICBjb3BwX2lkOwoJLyogQ09QUCBJRDogIFN1cHBvcnRlZCB2YWx1ZXM6IDAgPD0gY29wcF9pZCA8IEFETV9NQVhfQ09QUFMqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogUmVzZXJ2ZWQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogUmV0dXJucyB0aGUgc3RhdHVzIGFuZCBDT1BQIElEIHRvIGFuICNBRE1fQ01EX0RFVklDRV9PUEVOX1Y2IGNvbW1hbmQuICovCiNkZWZpbmUgQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNiAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMzU3CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURSU1BfREVWSUNFX09QRU5fVjYgbWVzc2FnZSwKICoJd2hpY2ggcmV0dXJucyB0aGUKICoJc3RhdHVzIGFuZCBDT1BQIElEIHRvIGFuICNBRE1fQ01EX0RFVklDRV9PUEVOX1Y2IGNvbW1hbmQKICoJaXMgdGhlIGV4YWN0IHNhbWUgYXMgQURNX0NNRFJTUF9ERVZJQ0VfT1BFTl9WNS4KICovCgovKiBUaGlzIGNvbW1hbmQgYWxsb3dzIGEgcXVlcnkgb2Ygb25lIENPUFAgcGFyYW1ldGVyLiAqLwojZGVmaW5lIEFETV9DTURfR0VUX1BQX1BBUkFNU19WNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDMyQQoKLyogIFBheWxvYWQgYW4gI0FETV9DTURfR0VUX1BQX1BBUkFNU19WNSBjb21tYW5kLiAqLwpzdHJ1Y3QgYWRtX2NtZF9nZXRfcHBfcGFyYW1zX3Y1IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX2xzdzsKCS8qIExTVyBvZiBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuKi8KCgl1MzIgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9tc3c7CgkvKiBNU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgoJLyogSWYgdGhlIG1lbV9tYXBfaGFuZGxlIGlzIG5vbiB6ZXJvLAoJICogb24gQUNLLCB0aGUgUGFyYW1EYXRhIHBheWxvYWRzIGJlZ2luIGF0CgkgKiB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgKG91dC1vZi1iYW5kKS4KCSAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQKCSAqIGJ5IEFETV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kLgoJICogSWYgdGhlIG1lbV9tYXBfaGFuZGxlIGlzIDAsIGl0IGltcGxpZXMgdGhhdAoJICogdGhlIEFDSydzIHBheWxvYWQgd2lsbCBjb250YWluIHRoZSBQYXJhbURhdGEgKGluLWJhbmQpLgoJICovCgoJdTMyICAgICAgICAgICAgICAgICAgbW9kdWxlX2lkOwoJLyogVW5pcXVlIElEIG9mIHRoZSBtb2R1bGUuICovCgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgSUQgb2YgdGhlIHBhcmFtZXRlci4gKi8KCgl1MTYgICAgICAgICAgICAgICAgICBwYXJhbV9tYXhfc2l6ZTsKCS8qIE1heGltdW0gZGF0YSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIKCSAqSUQvbW9kdWxlIElEIGNvbWJpbmF0aW9uLiBUaGlzCgkgKiBmaWVsZCBpcyBhIG11bHRpcGxlIG9mIDQgYnl0ZXMuCgkgKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBlbmhhbmNlbWVudHMuCgkgKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uCgkgKi8KfSBfX3BhY2tlZDsKCi8qIFJldHVybnMgcGFyYW1ldGVyIHZhbHVlcwogKglpbiByZXNwb25zZSB0byBhbiAjQURNX0NNRF9HRVRfUFBfUEFSQU1TX1Y1IGNvbW1hbmQuCiAqLwojZGVmaW5lIEFETV9DTURSU1BfR0VUX1BQX1BBUkFNU19WNQkJMHgwMDAxMDMyQgoKLyogUGF5bG9hZCBvZiB0aGUgI0FETV9DTURSU1BfR0VUX1BQX1BBUkFNU19WNSBtZXNzYWdlLAogKiB3aGljaCByZXR1cm5zIHBhcmFtZXRlciB2YWx1ZXMgaW4gcmVzcG9uc2UKICogdG8gYW4gI0FETV9DTURfR0VUX1BQX1BBUkFNU19WNSBjb21tYW5kLgogKiBJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcwogKiBzdHJ1Y3R1cmUgaXMgdGhlIGFkbV9wYXJhbV9kYXRhX3Y1CiAqIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBwcmUvcG9zdHByb2Nlc3NpbmcKICogcGFyYW1ldGVyIGRhdGEuIEZvciBhbiBpbi1iYW5kCiAqIHNjZW5hcmlvLCB0aGUgdmFyaWFibGUgcGF5bG9hZCBkZXBlbmRzCiAqIG9uIHRoZSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9yc3BfZ2V0X3BwX3BhcmFtc192NSB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuKi8KfSBfX3BhY2tlZDsKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBzb2Z0IHN0ZXBwaW5nIHZvbHVtZSBwYXJhbWV0ZXJzLiAqLwoKLyoKICogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTCiAqIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLgogKi8KCnN0cnVjdCBhdWRwcm9jX3NvZnR2b2x1bWVfcGFyYW1zIHsKCXUzMiBwZXJpb2Q7Cgl1MzIgc3RlcDsKCXUzMiByYW1waW5nY3VydmU7Cn0gX19wYWNrZWQ7CgovKgogKiBJRCBvZiB0aGUgTWVkaWEgRm9ybWF0IENvbnZlcnRlciAoTUZDKSBtb2R1bGUuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogI0FVRFBST0NfUEFSQU1fSURfTUZDX09VVFBVVF9NRURJQV9GT1JNQVQKICogI0FVRFBST0NfQ0hNSVhFUl9QQVJBTV9JRF9DT0VGRgogKi8KI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9NRkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDkxMgoKLyogSUQgb2YgdGhlIE91dHB1dCBNZWRpYSBGb3JtYXQgcGFyYW1ldGVycyB1c2VkIGJ5IEFVRFBST0NfTU9EVUxFX0lEX01GQy4KICoKICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9NRkNfT1VUUFVUX01FRElBX0ZPUk1BVCAgICAgICAgICAgIDB4MDAwMTA5MTMKCi8qIFBhcmFtIElEIG9mIENoYW5uZWwgTWl4ZXIgdXNlZCBieSBBVURQUk9DX01PRFVMRV9JRF9NRkMgKi8KI2RlZmluZSBBVURQUk9DX0NITUlYRVJfUEFSQU1fSURfQ09FRkYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDM0MgoKCnN0cnVjdCBhdWRwcm9jX21mY19vdXRwdXRfbWVkaWFfZm10IHsKCXN0cnVjdCBhZG1fY21kX3NldF9wcF9wYXJhbXNfdjUgcGFyYW1zOwoJc3RydWN0IGFkbV9wYXJhbV9kYXRhX3Y1IGRhdGE7Cgl1aW50MzJfdCBzYW1wbGluZ19yYXRlOwoJdWludDE2X3QgYml0c19wZXJfc2FtcGxlOwoJdWludDE2X3QgbnVtX2NoYW5uZWxzOwoJdWludDE2X3QgY2hhbm5lbF90eXBlWzhdOwp9IF9fcGFja2VkOwoKc3RydWN0IGF1ZHByb2Nfdm9sdW1lX2N0cmxfbWFzdGVyX2dhaW4gewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKCS8qIExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIG1hc3Rlcl9nYWluOwoJLyogQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwp9IF9fcGFja2VkOwoKc3RydWN0IGF1ZHByb2Nfc29mdF9zdGVwX3ZvbHVtZV9wYXJhbXMgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKLyoKICogUGVyaW9kIGluIG1pbGxpc2Vjb25kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAxNTAwMAogKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcGVyaW9kOwovKgogKiBTdGVwIGluIG1pY3Jvc2Vjb25kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAxNTAwMDAwMAogKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgc3RlcDsKLyoKICogUmFtcGluZyBjdXJ2ZSB0eXBlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBVURQUk9DX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTElORUFSCiAqIC0gI0FVRFBST0NfUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9FWFAKICogLSAjQVVEUFJPQ19QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0xPRwogKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcmFtcGluZ19jdXJ2ZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhdWRwcm9jX2VuYWJsZV9wYXJhbV90IHsKCXN0cnVjdCBhZG1fY21kX3NldF9wcF9wYXJhbXNfaW5iYW5kX3Y1IHBwX3BhcmFtczsKCS8qCgkgKiBTcGVjaWZpZXMgd2hldGhlciB0aGUgQXVkaW8gcHJvY2Vzc2luZyBtb2R1bGUgaXMgZW5hYmxlZC4KCSAqIFRoaXMgcGFyYW1ldGVyIGlzIGdlbmVyaWMvY29tbW9uIHBhcmFtZXRlciB0byBjb25maWd1cmUgb3IKCSAqIGRldGVybWluZSB0aGUgc3RhdGUgb2YgYW55IGF1ZGlvIHByb2Nlc3NpbmcgbW9kdWxlLgoKCSAqIEB2YWx1ZXMgMCA6IERpc2FibGUgMTogRW5hYmxlCgkgKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlOwp9OwoKLyoKICogQWxsb3dzIGEgY2xpZW50IHRvIGNvbnRyb2wgdGhlIGdhaW5zIG9uIHZhcmlvdXMgc2Vzc2lvbi10by1DT1BQIHBhdGhzLgogKi8KI2RlZmluZSBBRE1fQ01EX01BVFJJWF9SQU1QX0dBSU5TX1Y1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDMyQwoKLyogSW5kaWNhdGVzIHRoYXQgdGhlIHRhcmdldCBnYWluIGluIHRoZQogKgljdXJyZW50IGFkbV9zZXNzaW9uX2NvcHBfZ2Fpbl92NQogKglzdHJ1Y3R1cmUgaXMgdG8gYmUgYXBwbGllZCB0byBhbGwKICoJdGhlIHNlc3Npb24tdG8tQ09QUCBwYXRocyB0aGF0IGV4aXN0IGZvcgogKgl0aGUgc3BlY2lmaWVkIHNlc3Npb24uCiAqLwojZGVmaW5lIEFETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfQ09QUF9JRF9BTExfQ09OTkVDVEVEX0NPUFBTICAgICAweEZGRkYKCi8qIEluZGljYXRlcyB0aGF0IHRoZSB0YXJnZXQgZ2FpbiBpcwogKiB0byBiZSBpbW1lZGlhdGVseSBhcHBsaWVkIHRvIHRoZQogKiBzcGVjaWZpZWQgc2Vzc2lvbi10by1DT1BQIHBhdGgsCiAqIHdpdGhvdXQgYSByYW1waW5nIGZhc2hpb24uCiAqLwojZGVmaW5lIEFETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfUkFNUF9EVVJBVElPTl9JTU1FRElBVEUgICAgICAgICAweDAwMDAKCi8qIEVudW1lcmF0aW9uIGZvciBhIGxpbmVhciByYW1waW5nIGN1cnZlLiovCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfUkFNUF9HQUlOU19SQU1QX0NVUlZFX0xJTkVBUiAgICAgICAgICAgICAgIDB4MDAwMAoKLyogIFBheWxvYWQgb2YgdGhlICNBRE1fQ01EX01BVFJJWF9SQU1QX0dBSU5TX1Y1IGNvbW1hbmQuCiAqIEltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUgbnVtX2dhaW5zIG9mIHRoZQogKiBhZG1fc2Vzc2lvbl9jb3BwX2dhaW5fdjVzdHJ1Y3R1cmUuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9tYXRyaXhfcmFtcF9nYWluc192NSB7Cgl1MzIgICAgICAgICAgICAgICAgICBtYXRyaXhfaWQ7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBtYXRyaXggSUQgaXMgQXVkaW8gUnggKDApIG9yIEF1ZGlvIFR4ICgxKS4KICogVXNlIHRoZSBBRE1fTUFUUklYX0lEX0FVRElPX1JYIG9yICBBRE1fTUFUUklYX0lEX0FVRElPWAogKiBtYWNyb3MgdG8gc2V0IHRoaXMgZmllbGQuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9nYWluczsKCS8qIE51bWJlciBvZiBnYWlucyBiZWluZyBhcHBsaWVkLiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkX2Zvcl9hbGlnbjsKCS8qIFJlc2VydmVkLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCi8qICBTZXNzaW9uLXRvLUNPUFAgcGF0aCBnYWluIHN0cnVjdHVyZSwgdXNlZCBieSB0aGUKICoJI0FETV9DTURfTUFUUklYX1JBTVBfR0FJTlNfVjUgY29tbWFuZC4KICoJVGhpcyBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHRoZSB0YXJnZXQKICoJZ2FpbiAocGVyIGNoYW5uZWwpIHRoYXQgbXVzdCBiZSBhcHBsaWVkCiAqCXRvIGEgcGFydGljdWxhciBzZXNzaW9uLXRvLUNPUFAgcGF0aCBpbgogKgl0aGUgYXVkaW8gbWF0cml4LiBUaGUgc3RydWN0dXJlIGNhbgogKglhbHNvIGJlIHVzZWQgdG8gYXBwbHkgdGhlIGdhaW4gZ2xvYmFsbHkKICoJdG8gYWxsIHNlc3Npb24tdG8tQ09QUCBwYXRocyB0aGF0CiAqCWV4aXN0IGZvciB0aGUgZ2l2ZW4gc2Vzc2lvbi4KICoJVGhlIGFEU1AgdXNlcyBkZXZpY2UgY2hhbm5lbCBtYXBwaW5nIHRvCiAqCWRldGVybWluZSB3aGljaCBjaGFubmVsIGdhaW5zIHRvCiAqCXVzZSBmcm9tIHRoaXMgY29tbWFuZC4gRm9yIGV4YW1wbGUsCiAqCWlmIHRoZSBkZXZpY2UgaXMgY29uZmlndXJlZCBhcyBzdGVyZW8sCiAqCXRoZSBhRFNQIHVzZXMgb25seSB0YXJnZXRfZ2Fpbl9jaF8xIGFuZAogKgl0YXJnZXRfZ2Fpbl9jaF8yLCBhbmQgaXQgaWdub3JlcwogKgl0aGUgb3RoZXJzLgogKi8Kc3RydWN0IGFkbV9zZXNzaW9uX2NvcHBfZ2Fpbl92NSB7Cgl1MTYgICAgICAgICAgICAgICAgICBzZXNzaW9uX2lkOwovKiBIYW5kbGUgb2YgdGhlIEFTTSBzZXNzaW9uLgogKglTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDguCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNvcHBfaWQ7Ci8qIEhhbmRsZSBvZiB0aGUgQ09QUC4gR2FpbiB3aWxsIGJlIGFwcGxpZWQgb24gdGhlIFNlc3Npb24gSUQKICogQ09QUCBJRCBwYXRoLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByYW1wX2R1cmF0aW9uOwovKiBEdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSBvZiB0aGUgcmFtcCBvdmVyCiAqIHdoaWNoIHRhcmdldCBnYWlucyBhcmUKICogdG8gYmUgYXBwbGllZC4gVXNlCiAqICNBRE1fQ01EX01BVFJJWF9SQU1QX0dBSU5TX1JBTVBfRFVSQVRJT05fSU1NRURJQVRFCiAqIHRvIGluZGljYXRlIHRoYXQgZ2FpbiBtdXN0IGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHN0ZXBfZHVyYXRpb247Ci8qIER1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpIG9mIGVhY2ggc3RlcCBpbiB0aGUgcmFtcC4KICogVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiByYW1wX2R1cmF0aW9uIGlzIGVxdWFsIHRvCiAqICNBRE1fQ01EX01BVFJJWF9SQU1QX0dBSU5TX1JBTVBfRFVSQVRJT05fSU1NRURJQVRFLgogKiBTdXBwb3J0ZWQgdmFsdWU6IDEKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmFtcF9jdXJ2ZTsKLyogVHlwZSBvZiByYW1waW5nIGN1cnZlLgogKiBTdXBwb3J0ZWQgdmFsdWU6ICNBRE1fQ01EX01BVFJJWF9SQU1QX0dBSU5TX1JBTVBfQ1VSVkVfTElORUFSCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkX2Zvcl9hbGlnbjsKCS8qIFJlc2VydmVkLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfMTsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCAxIGluIFExMyBmb3JtYXQ7ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfMjsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCAyIGluIFExMyBmb3JtYXQ7ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfMzsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCAzIGluIFExMyBmb3JtYXQ7ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfNDsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCA0IGluIFExMyBmb3JtYXQ7ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfNTsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCA1IGluIFExMyBmb3JtYXQ7ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfNjsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCA2IGluIFExMyBmb3JtYXQ7ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfNzsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCA3IGluIFExMyBmb3JtYXQ7ICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGFyZ2V0X2dhaW5fY2hfODsKCS8qIFRhcmdldCBsaW5lYXIgZ2FpbiBmb3IgY2hhbm5lbCA4IGluIFExMyBmb3JtYXQ7ICovCn0gX19wYWNrZWQ7CgovKiBBbGxvd3MgdG8gc2V0IG11dGUvdW5tdXRlIG9uIHZhcmlvdXMgc2Vzc2lvbi10by1DT1BQIHBhdGhzLgogKglGb3IgZXZlcnkgc2Vzc2lvbi10by1DT1BQIHBhdGggKHN0cmVhbS1kZXZpY2UgaW50ZXJjb25uZWN0aW9uKSwKICoJbXV0ZS91bm11dGUgY2FuIGJlIHNldCBpbmRpdmlkdWFsbHkgb24gdGhlIG91dHB1dCBjaGFubmVscy4KICovCiNkZWZpbmUgQURNX0NNRF9NQVRSSVhfTVVURV9WNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDMyRAoKLyogSW5kaWNhdGVzIHRoYXQgbXV0ZS91bm11dGUgaW4gdGhlCiAqCWN1cnJlbnQgYWRtX3Nlc3Npb25fY29wcF9tdXRlX3Y1c3RydWN0dXJlCiAqCWlzIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSBzZXNzaW9uLXRvLUNPUFAKICoJcGF0aHMgdGhhdCBleGlzdCBmb3IgdGhlIHNwZWNpZmllZCBzZXNzaW9uLgogKi8KI2RlZmluZSBBRE1fQ01EX01BVFJJWF9NVVRFX0NPUFBfSURfQUxMX0NPTk5FQ1RFRF9DT1BQUyAgICAgMHhGRkZGCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FETV9DTURfTUFUUklYX01VVEVfVjUgY29tbWFuZCovCnN0cnVjdCBhZG1fY21kX21hdHJpeF9tdXRlX3Y1IHsKCXUzMiAgICAgICAgICAgICAgICAgIG1hdHJpeF9pZDsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIG1hdHJpeCBJRCBpcyBBdWRpbyBSeCAoMCkgb3IgQXVkaW8gVHggKDEpLgogKiBVc2UgdGhlIEFETV9NQVRSSVhfSURfQVVESU9fUlggb3IgIEFETV9NQVRSSVhfSURfQVVESU9YCiAqIG1hY3JvcyB0byBzZXQgdGhpcyBmaWVsZC4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9pZDsKLyogSGFuZGxlIG9mIHRoZSBBU00gc2Vzc2lvbi4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4LgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBjb3BwX2lkOwovKiBIYW5kbGUgb2YgdGhlIENPUFAuCiAqIFVzZSBBRE1fQ01EX01BVFJJWF9NVVRFX0NPUFBfSURfQUxMX0NPTk5FQ1RFRF9DT1BQUwogKiB0byBpbmRpY2F0ZSB0aGF0IG11dGUvdW5tdXRlIG11c3QgYmUgYXBwbGllZCB0bwogKiBhbGwgdGhlIENPUFBzIGNvbm5lY3RlZCB0byBzZXNzaW9uX2lkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDB4RkZGRiAtLSBBcHBseSBtdXRlL3VubXV0ZSB0byBhbGwgY29ubmVjdGVkIENPUFBzCiAqIC0gT3RoZXIgdmFsdWVzIC0tIFZhbGlkIENPUFAgSUQKICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfMTsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCAxIGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgbXV0ZV9mbGFnX2NoXzI7CgkvKiBNdXRlIGZsYWcgZm9yIGNoYW5uZWwgMiBpcyBzZXQgdG8gdW5tdXRlICgwKSBvciBtdXRlICgxKS4gKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF8zOwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDMgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfNDsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCA0IGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgbXV0ZV9mbGFnX2NoXzU7CgkvKiBNdXRlIGZsYWcgZm9yIGNoYW5uZWwgNSBpcyBzZXQgdG8gdW5tdXRlICgwKSBvciBtdXRlICgxKS4gKi8KCgl1OCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZ19jaF82OwoJLyogTXV0ZSBmbGFnIGZvciBjaGFubmVsIDYgaXMgc2V0IHRvIHVubXV0ZSAoMCkgb3IgbXV0ZSAoMSkuICovCgoJdTggICAgICAgICAgICAgICAgICBtdXRlX2ZsYWdfY2hfNzsKCS8qIE11dGUgZmxhZyBmb3IgY2hhbm5lbCA3IGlzIHNldCB0byB1bm11dGUgKDApIG9yIG11dGUgKDEpLiAqLwoKCXU4ICAgICAgICAgICAgICAgICAgbXV0ZV9mbGFnX2NoXzg7CgkvKiBNdXRlIGZsYWcgZm9yIGNoYW5uZWwgOCBpcyBzZXQgdG8gdW5tdXRlICgwKSBvciBtdXRlICgxKS4gKi8KCgl1MTYgICAgICAgICAgICAgICAgIHJhbXBfZHVyYXRpb247Ci8qIFBlcmlvZCAoaW4gbWlsbGlzZWNvbmRzKSBvdmVyIHdoaWNoIHRoZSBzb2Z0IG11dGUvdW5tdXRlIHdpbGwgYmUKICogYXBwbGllZC4KICogU3VwcG9ydGVkIHZhbHVlczogMCAoRGVmYXVsdCkgdG8gMHhGRkZGCiAqIFRoZSBkZWZhdWx0IG9mIDAgbWVhbnMgbXV0ZS91bm11dGUgd2lsbCBiZSBhcHBsaWVkIGltbWVkaWF0ZWx5LgogKi8KCgl1MTYgICAgICAgICAgICAgICAgIHJlc2VydmVkX2Zvcl9hbGlnbjsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQUNfU1RFUkVPX01JWF9DT0VGRl9TRUxFQ1RJT05fRkxBR19WMiAoMHgwMDAxMEREOCkKCnN0cnVjdCBhc21fYWFjX3N0ZXJlb19taXhfY29lZmZfc2VsZWN0aW9uX3BhcmFtX3YyIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgICAgIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgIHBhcmFtX2lkOwoJdTMyICAgICAgICAgICAgICAgICAgICAgcGFyYW1fc2l6ZTsKCXUzMiAgICAgICAgICAgICAgICAgICAgIGFhY19zdGVyZW9fbWl4X2NvZWZmX2ZsYWc7Cn0gX19wYWNrZWQ7CgovKiBBbGxvd3MgYSBjbGllbnQgdG8gY29ubmVjdCB0aGUgZGVzaXJlZCBzdHJlYW0gdG8KICogdGhlIGRlc2lyZWQgQUZFIHBvcnQgdGhyb3VnaCB0aGUgc3RyZWFtIHJvdXRlcgogKgogKiBUaGlzIGNvbW1hbmQgYWxsb3dzIHRoZSBjbGllbnQgdG8gY29ubmVjdCBzcGVjaWZpZWQgc2Vzc2lvbiB0bwogKiBzcGVjaWZpZWQgQUZFIHBvcnQuIFRoaXMgaXMgdXNlZCBmb3IgY29tcHJlc3NlZCBzdHJlYW1zIG9ubHkKICogb3BlbmVkIHVzaW5nIHRoZSAjQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9DT01QUkVTU0VEIG9yCiAqICNBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURfQ09NUFJFU1NFRCBjb21tYW5kLgogKgogKiBAcHJlcmVxdWlzaXRlcwogKiBTZXNzaW9uIElEIGFuZCBBRkUgUG9ydCBJRCBtdXN0IGJlIHZhbGlkLgogKiAjQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9DT01QUkVTU0VEIG9yCiAqICNBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURfQ09NUFJFU1NFRAogKiBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgb24gdGhpcyBzZXNzaW9uLgogKi8KCiNkZWZpbmUgQURNX0NNRF9DT05ORUNUX0FGRV9QT1JUX1Y1CTB4MDAwMTAzMkUKI2RlZmluZSBBRE1fQ01EX0RJU0NPTk5FQ1RfQUZFX1BPUlRfVjUJMHgwMDAxMDMyRgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIFJ4IHN0cmVhbSByb3V0ZXIgSUQuKi8KI2RlZmluZSBBRE1fU1RSVFJfSURfUlggICAgICAgICAgICAgICAgICAgIDAKLyogRW51bWVyYXRpb24gZm9yIHRoZSBUeCBzdHJlYW0gcm91dGVyIElELiovCiNkZWZpbmUgQURNX1NUUlRSX0lEWCAgICAgICAgICAgICAgICAgICAgMQoKLyogIFBheWxvYWQgb2YgdGhlICNBRE1fQ01EX0NPTk5FQ1RfQUZFX1BPUlRfVjUgY29tbWFuZC4qLwpzdHJ1Y3QgYWRtX2NtZF9jb25uZWN0X2FmZV9wb3J0X3Y1IHsKCXN0cnVjdCBhcHJfaGRyICAgICBoZHI7Cgl1OCAgICAgICAgICAgICAgICAgIG1vZGU7Ci8qIElEIG9mIHRoZSBzdHJlYW0gcm91dGVyIChSWC9UWCkuIFVzZSB0aGUKICogQURNX1NUUlRSX0lEX1JYIG9yIEFETV9TVFJUUl9JRFggbWFjcm9zCiAqIHRvIHNldCB0aGlzIGZpZWxkLgogKi8KCgl1OCAgICAgICAgICAgICAgICAgIHNlc3Npb25faWQ7CgkvKiBTZXNzaW9uIElEIG9mIHRoZSBzdHJlYW0gdG8gY29ubmVjdCAqLwoKCXUxNiAgICAgICAgICAgICAgICAgYWZlX3BvcnRfaWQ7CgkvKiBQb3J0IElEIG9mIHRoZSBBRkUgcG9ydCB0byBjb25uZWN0IHRvLiovCgl1MzIgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGRldmljZSBjaGFubmVscwogKiBTdXBwb3J0ZWQgdmFsdWVzOiAyKEF1ZGlvIFNhbXBsZSBQYWNrZXQpLAogKiA4IChIQlIgQXVkaW8gU3RyZWFtIFNhbXBsZSBQYWNrZXQpCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgc2FtcGxpbmdfcmF0ZTsKLyogRGV2aWNlIHNhbXBsaW5nIHJhdGUKICogU3VwcG9ydGVkIHZhbHVlczogQW55CiAqLwp9IF9fcGFja2VkOwoKCi8qIGFkc3BfYWRtX2FwaS5oICovCgoKLyogUG9ydCBJRC4gVXBkYXRlIGFmZV9nZXRfcG9ydF9pbmRleAogKiB3aGVuIGEgbmV3IHBvcnQgaXMgYWRkZWQgaGVyZS4KICovCiNkZWZpbmUgUFJJTUFSWV9JMlNfUlggMAojZGVmaW5lIFBSSU1BUllfSTJTX1RYIDEKI2RlZmluZSBTRUNPTkRBUllfSTJTX1JYIDQKI2RlZmluZSBTRUNPTkRBUllfSTJTX1RYIDUKI2RlZmluZSBNSTJTX1JYIDYKI2RlZmluZSBNSTJTX1RYIDcKI2RlZmluZSBIRE1JX1JYIDgKI2RlZmluZSBSU1ZEXzIgOQojZGVmaW5lIFJTVkRfMyAxMAojZGVmaW5lIERJR0lfTUlDX1RYIDExCiNkZWZpbmUgVk9JQ0UyX1BMQVlCQUNLX1RYIDB4ODAwMgojZGVmaW5lIFZPSUNFX1JFQ09SRF9SWCAweDgwMDMKI2RlZmluZSBWT0lDRV9SRUNPUkRfVFggMHg4MDA0CiNkZWZpbmUgVk9JQ0VfUExBWUJBQ0tfVFggMHg4MDA1CgovKiBTbGltYnVzIE11bHRpIGNoYW5uZWwgcG9ydCBpZCBwb29sICAqLwojZGVmaW5lIFNMSU1CVVNfMF9SWAkJMHg0MDAwCiNkZWZpbmUgU0xJTUJVU18wX1RYCQkweDQwMDEKI2RlZmluZSBTTElNQlVTXzFfUlgJCTB4NDAwMgojZGVmaW5lIFNMSU1CVVNfMV9UWAkJMHg0MDAzCiNkZWZpbmUgU0xJTUJVU18yX1JYCQkweDQwMDQKI2RlZmluZSBTTElNQlVTXzJfVFgJCTB4NDAwNQojZGVmaW5lIFNMSU1CVVNfM19SWAkJMHg0MDA2CiNkZWZpbmUgU0xJTUJVU18zX1RYCQkweDQwMDcKI2RlZmluZSBTTElNQlVTXzRfUlgJCTB4NDAwOAojZGVmaW5lIFNMSU1CVVNfNF9UWAkJMHg0MDA5CiNkZWZpbmUgU0xJTUJVU181X1JYCQkweDQwMGEKI2RlZmluZSBTTElNQlVTXzVfVFgJCTB4NDAwYgojZGVmaW5lIFNMSU1CVVNfNl9SWAkJMHg0MDBjCiNkZWZpbmUgU0xJTUJVU182X1RYCQkweDQwMGQKI2RlZmluZSBTTElNQlVTXzdfUlgJCTB4NDAwZQojZGVmaW5lIFNMSU1CVVNfN19UWAkJMHg0MDBmCiNkZWZpbmUgU0xJTUJVU184X1JYCQkweDQwMTAKI2RlZmluZSBTTElNQlVTXzhfVFgJCTB4NDAxMQojZGVmaW5lIFNMSU1CVVNfUE9SVF9MQVNUCVNMSU1CVVNfOF9UWAojZGVmaW5lIElOVF9CVF9TQ09fUlggMHgzMDAwCiNkZWZpbmUgSU5UX0JUX1NDT19UWCAweDMwMDEKI2RlZmluZSBJTlRfQlRfQTJEUF9SWCAweDMwMDIKI2RlZmluZSBJTlRfRk1fUlggMHgzMDA0CiNkZWZpbmUgSU5UX0ZNX1RYIDB4MzAwNQojZGVmaW5lIFJUX1BST1hZX1BPUlRfMDAxX1JYCTB4MjAwMAojZGVmaW5lIFJUX1BST1hZX1BPUlRfMDAxX1RYCTB4MjAwMQojZGVmaW5lIEFGRV9MT09QQkFDS19UWAkweDYwMDEKI2RlZmluZSBESVNQTEFZX1BPUlRfUlgJMHg2MDIwCgojZGVmaW5lIEFGRV9QT1JUX0lOVkFMSUQgMHhGRkZGCiNkZWZpbmUgU0xJTUJVU19JTlZBTElEIEFGRV9QT1JUX0lOVkFMSUQKCiNkZWZpbmUgQUZFX1BPUlRfQ01EX1NUQVJUIDB4MDAwMTAwY2EKCiNkZWZpbmUgQUZFX0VWRU5UX1JUUE9SVF9TVEFSVCAwCiNkZWZpbmUgQUZFX0VWRU5UX1JUUE9SVF9TVE9QIDEKI2RlZmluZSBBRkVfRVZFTlRfUlRQT1JUX0xPV19XTSAyCiNkZWZpbmUgQUZFX0VWRU5UX1JUUE9SVF9ISV9XTSAzCgojZGVmaW5lIEFEU1BfQUZFX1ZFUlNJT04gICAgMHgwMDIwMDAwMAoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHRoZSBhdWRpbyBpbnRlcmZhY2UuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX0FVRElPX0lGX1BPUlRfUkFOR0VfU0laRQkweEYKCi8qIFNpemUgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBpbnRlcm5hbCBCVC1GTSBwb3J0cy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9GTV9SQU5HRV9TSVpFCTB4NgoKLyogU2l6ZSBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIFNMSU1idXM8c3VwPiZyZWc7CiAqIDwvc3VwPiBtdWx0aWNoYW5uZWwKICogcG9ydHMuCiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfUkFOR0VfU0laRQkweEEKCi8qIFNpemUgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciByZWFsLXRpbWUgcHJveHkgcG9ydHMuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU0laRQkweDIKCi8qIFNpemUgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBwc2V1ZG9wb3J0cy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9QU0VVRE9QT1JUX1JBTkdFX1NJWkUJMHg1CgovKiBTdGFydCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIHRoZSBhdWRpbyBpbnRlcmZhY2UuICovCiNkZWZpbmUgIEFGRV9QT1JUX0lEX0FVRElPX0lGX1BPUlRfUkFOR0VfU1RBUlQJMHgxMDAwCgovKiBFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciB0aGUgYXVkaW8gaW50ZXJmYWNlLiAqLwojZGVmaW5lICBBRkVfUE9SVF9JRF9BVURJT19JRl9QT1JUX1JBTkdFX0VORCBcCgkoQUZFX1BPUlRfSURfQVVESU9fSUZfUE9SVF9SQU5HRV9TVEFSVCArXAoJQUZFX1BPUlRfSURfQVVESU9fSUZfUE9SVF9SQU5HRV9TSVpFIC0gMSkKCi8qIFN0YXJ0IG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgcmVhbC10aW1lIHByb3h5IHBvcnRzLiAqLwojZGVmaW5lICBBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NUQVJUCTB4MjAwMAoKLyogRW5kIG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgcmVhbC10aW1lIHByb3h5IHBvcnRzLiAqLwojZGVmaW5lICBBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX0VORCBcCgkoQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TVEFSVCArXAoJQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF9SQU5HRV9TSVpFLTEpCgovKiBTdGFydCBvZiB0aGUgcmFuZ2Ugb2YgcG9ydCBJRHMgZm9yIGludGVybmFsIEJULUZNIGRldmljZXMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSU5URVJOQUxfQlRfRk1fUkFOR0VfU1RBUlQJMHgzMDAwCgovKiBFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBpbnRlcm5hbCBCVC1GTSBkZXZpY2VzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX0ZNX1JBTkdFX0VORCBcCgkoQUZFX1BPUlRfSURfSU5URVJOQUxfQlRfRk1fUkFOR0VfU1RBUlQgK1wKCUFGRV9QT1JUX0lEX0lOVEVSTkFMX0JUX0ZNX1JBTkdFX1NJWkUtMSkKCi8qCVN0YXJ0IG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgU0xJTWJ1cyBkZXZpY2VzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfUkFOR0VfU1RBUlQJMHg0MDAwCgovKglFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBTTElNYnVzIGRldmljZXMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19SQU5HRV9FTkQgXAoJKEFGRV9QT1JUX0lEX1NMSU1CVVNfUkFOR0VfU1RBUlQgK1wKCUFGRV9QT1JUX0lEX1NMSU1CVVNfUkFOR0VfU0laRS0xKQoKLyogU3RhcnQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBwc2V1ZG9wb3J0cy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9QU0VVRE9QT1JUX1JBTkdFX1NUQVJUCTB4ODAwMQoKLyogRW5kIG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgcHNldWRvcG9ydHMuICAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfUkFOR0VfRU5EIFwKCShBRkVfUE9SVF9JRF9QU0VVRE9QT1JUX1JBTkdFX1NUQVJUICtcCglBRkVfUE9SVF9JRF9QU0VVRE9QT1JUX1JBTkdFX1NJWkUtMSkKCi8qIFN0YXJ0IG9mIHRoZSByYW5nZSBvZiBwb3J0IElEcyBmb3IgVERNIGRldmljZXMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQJMHg5MDAwCgovKiBFbmQgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBURE0gZGV2aWNlcy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9FTkQgXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUKzB4NTAtMSkKCi8qIFNpemUgb2YgdGhlIHJhbmdlIG9mIHBvcnQgSURzIGZvciBURE0gcG9ydHMuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU0laRSBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfRU5EIC0gXAoJQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQrMSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9NSTJTX1JYICAgICAgICAgMHgxMDAwCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9NSTJTX1RYICAgICAgICAgMHgxMDAxCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX01JMlNfUlggICAgICAgMHgxMDAyCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX01JMlNfVFggICAgICAgMHgxMDAzCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfTUkyU19SWCAgICAgICAgMHgxMDA0CiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfTUkyU19UWCAgICAgICAgMHgxMDA1CiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9NSTJTX1JYICAgICAgMHgxMDA2CiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9NSTJTX1RYICAgICAgMHgxMDA3CiNkZWZpbmUgQVVESU9fUE9SVF9JRF9JMlNfUlggICAgICAgICAgICAgICAgMHgxMDA4CiNkZWZpbmUgQUZFX1BPUlRfSURfRElHSVRBTF9NSUNfVFggICAgICAgICAgMHgxMDA5CiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9QQ01fUlggICAgICAgICAgMHgxMDBBCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9QQ01fVFggICAgICAgICAgMHgxMDBCCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1BDTV9SWCAgICAgICAgMHgxMDBDCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1BDTV9UWCAgICAgICAgMHgxMDBECiNkZWZpbmUgQUZFX1BPUlRfSURfTVVMVElDSEFOX0hETUlfUlggICAgICAgMHgxMDBFCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX01JMlNfUlhfU0QxICAgMHgxMDEwCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfUENNX1JYICAgICAgICAgMHgxMDEyCiNkZWZpbmUgQUZFX1BPUlRfSURfVEVSVElBUllfUENNX1RYICAgICAgICAgMHgxMDEzCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9QQ01fUlggICAgICAgMHgxMDE0CiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9QQ01fVFggICAgICAgMHgxMDE1CiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9NSTJTX1JYICAgICAgICAgMHgxMDE2CiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9NSTJTX1RYICAgICAgICAgMHgxMDE3Ci8qIElEIG9mIHRoZSBzZW5hcnkgTUkyUyBSeCBwb3J0LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NFTkFSWV9NSTJTX1JYICAgICAgICAgIDB4MTAxOAovKiBJRCBvZiB0aGUgc2VuYXJ5IE1JMlMgVHggcG9ydC4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TRU5BUllfTUkyU19UWCAgICAgICAgICAweDEwMTkKCi8qIElEIG9mIHRoZSBJbnRlcm5hbCAwIE1JMlMgUnggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDBfTUkyU19SWCAgICAgICAgICAgICAgICAgMHgxMDJFCi8qIElEIG9mIHRoZSBJbnRlcm5hbCAwIE1JMlMgVHggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDBfTUkyU19UWCAgICAgICAgICAgICAgICAgMHgxMDJGCi8qIElEIG9mIHRoZSBJbnRlcm5hbCAxIE1JMlMgUnggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDFfTUkyU19SWCAgICAgICAgICAgICAgICAgMHgxMDMwCi8qIElEIG9mIHRoZSBJbnRlcm5hbCAxIE1JMlMgVHggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDFfTUkyU19UWCAgICAgICAgICAgICAgICAgMHgxMDMxCi8qIElEIG9mIHRoZSBJbnRlcm5hbCAyIE1JMlMgUnggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDJfTUkyU19SWCAgICAgICAgICAgICAgICAgMHgxMDMyCi8qIElEIG9mIHRoZSBJbnRlcm5hbCAyIE1JMlMgVHggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDJfTUkyU19UWCAgICAgICAgICAgICAgICAgMHgxMDMzCi8qIElEIG9mIHRoZSBJbnRlcm5hbCAzIE1JMlMgUnggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDNfTUkyU19SWCAgICAgICAgICAgICAgICAgMHgxMDM0Ci8qIElEIG9mIHRoZSBJbnRlcm5hbCAzIE1JMlMgVHggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDNfTUkyU19UWCAgICAgICAgICAgICAgICAgMHgxMDM1Ci8qIElEIG9mIHRoZSBJbnRlcm5hbCA0IE1JMlMgUnggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDRfTUkyU19SWCAgICAgICAgICAgICAgICAgMHgxMDM2Ci8qIElEIG9mIHRoZSBJbnRlcm5hbCA0IE1JMlMgVHggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDRfTUkyU19UWCAgICAgICAgICAgICAgICAgMHgxMDM3Ci8qIElEIG9mIHRoZSBJbnRlcm5hbCA1IE1JMlMgUnggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDVfTUkyU19SWCAgICAgICAgICAgICAgICAgMHgxMDM4Ci8qIElEIG9mIHRoZSBJbnRlcm5hbCA1IE1JMlMgVHggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDVfTUkyU19UWCAgICAgICAgICAgICAgICAgMHgxMDM5Ci8qIElEIG9mIHRoZSBJbnRlcm5hbCA2IE1JMlMgUnggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDZfTUkyU19SWCAgICAgICAgICAgICAgICAgMHgxMDNBCi8qIElEIG9mIHRoZSBJbnRlcm5hbCA2IE1JMlMgVHggcG9ydCAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVDZfTUkyU19UWCAgICAgICAgICAgICAgICAgMHgxMDNCCgojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfUENNX1JYICAgICAgIDB4MTAzQwojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfUENNX1RYICAgICAgIDB4MTAzRAoKI2RlZmluZSBBRkVfUE9SVF9JRF9TUERJRl9SWCAgICAgICAgICAgICAgICAweDUwMDAKI2RlZmluZSAgQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF8wMDFfUlggICAweDIwMDAKI2RlZmluZSAgQUZFX1BPUlRfSURfUlRfUFJPWFlfUE9SVF8wMDFfVFggICAweDIwMDEKI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9TQ09fUlggICAgICAweDMwMDAKI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9TQ09fVFggICAgICAweDMwMDEKI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9CVF9BMkRQX1JYICAgICAweDMwMDIKI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9GTV9SWCAgICAgICAgICAweDMwMDQKI2RlZmluZSBBRkVfUE9SVF9JRF9JTlRFUk5BTF9GTV9UWCAgICAgICAgICAweDMwMDUKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgMC4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fMF9SWCAgICAgIDB4NDAwMAovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCAwLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8wX1RYICAgICAgMHg0MDAxCi8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDEuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzFfUlggICAgICAweDQwMDIKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgMS4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fMV9UWCAgICAgIDB4NDAwMwovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCAyLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8yX1JYICAgICAgMHg0MDA0Ci8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDIuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzJfVFggICAgICAweDQwMDUKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgMy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fM19SWCAgICAgIDB4NDAwNgovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCAzLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl8zX1RYICAgICAgMHg0MDA3Ci8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDQuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzRfUlggICAgICAweDQwMDgKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgNC4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fNF9UWCAgICAgIDB4NDAwOQovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCA1LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl81X1JYICAgICAgMHg0MDBhCi8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDUuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzVfVFggICAgICAweDQwMGIKLyogU0xJTWJ1cyBSeCBwb3J0IG9uIGNoYW5uZWwgNi4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fNl9SWCAgICAgIDB4NDAwYwovKiBTTElNYnVzIFR4IHBvcnQgb24gY2hhbm5lbCA2LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl82X1RYICAgICAgMHg0MDBkCi8qIFNMSU1idXMgUnggcG9ydCBvbiBjaGFubmVsIDcuICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzdfUlggICAgICAweDQwMGUKLyogU0xJTWJ1cyBUeCBwb3J0IG9uIGNoYW5uZWwgNy4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9TTElNQlVTX01VTFRJX0NIQU5fN19UWCAgICAgIDB4NDAwZgovKiBTTElNYnVzIFJ4IHBvcnQgb24gY2hhbm5lbCA4LiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1NMSU1CVVNfTVVMVElfQ0hBTl84X1JYICAgICAgMHg0MDEwCi8qIFNMSU1idXMgVHggcG9ydCBvbiBjaGFubmVsIDguICovCiNkZWZpbmUgQUZFX1BPUlRfSURfU0xJTUJVU19NVUxUSV9DSEFOXzhfVFggICAgICAweDQwMTEKLyogQUZFIFJ4IHBvcnQgZm9yIGF1ZGlvIG92ZXIgRGlzcGxheSBwb3J0ICovCiNkZWZpbmUgQUZFX1BPUlRfSURfSERNSV9PVkVSX0RQX1JYICAgICAgICAgICAgICAweDYwMjAKLypVU0IgQUZFIHBvcnQgKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9VU0JfUlggICAgICAgICAgICAgICAgICAgICAgIDB4NzAwMAojZGVmaW5lIEFGRV9QT1JUX0lEX1VTQl9UWCAgICAgICAgICAgICAgICAgICAgICAgMHg3MDAxCgovKiBHZW5lcmljIHBzZXVkb3BvcnQgMS4gKi8KI2RlZmluZSBBRkVfUE9SVF9JRF9QU0VVRE9QT1JUXzAxICAgICAgMHg4MDAxCi8qIEdlbmVyaWMgcHNldWRvcG9ydCAyLiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BTRVVET1BPUlRfMDIgICAgICAweDgwMDIKCi8qIEB4cmVmbGFiZWx7aGRyOkFmZVBvcnRJZFByaW1hcnlBdXhQY21UeH0KICogUHJpbWFyeSBBdXggUENNIFR4IHBvcnQgSUQuCiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfUENNX1RYICAgICAgMHgxMDBCCi8qIFBzZXVkb3BvcnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgdm9pY2UgUnggcGF0aC4KICogRm9yIHJlY29yZGluZywgdGhlIHZvaWNlIFJ4IHBhdGggc2FtcGxlcyBhcmUgd3JpdHRlbiB0byB0aGlzCiAqIHBvcnQgYW5kIGNvbnN1bWVkIGJ5IHRoZSBhdWRpbyBwYXRoLgogKi8KCiNkZWZpbmUgQUZFX1BPUlRfSURfVk9JQ0VfUkVDT1JEX1JYCTB4ODAwMwoKLyogUHNldWRvcG9ydCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB2b2ljZSBUeCBwYXRoLgogKiBGb3IgcmVjb3JkaW5nLCB0aGUgdm9pY2UgVHggcGF0aCBzYW1wbGVzIGFyZSB3cml0dGVuIHRvIHRoaXMKICogcG9ydCBhbmQgY29uc3VtZWQgYnkgdGhlIGF1ZGlvIHBhdGguCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9JRF9WT0lDRV9SRUNPUkRfVFgJMHg4MDA0Ci8qIFBzZXVkb3BvcnQgdGhhdCBjb3JyZXNwb25kcyB0byBpbi1jYWxsIHZvaWNlIGRlbGl2ZXJ5IHNhbXBsZXMuCiAqIER1cmluZyBpbi1jYWxsIGF1ZGlvIGRlbGl2ZXJ5LCB0aGUgYXVkaW8gcGF0aCBkZWxpdmVycyBzYW1wbGVzCiAqIHRvIHRoaXMgcG9ydCBmcm9tIHdoZXJlIHRoZSB2b2ljZSBwYXRoIGRlbGl2ZXJzIHRoZW0gb24gdGhlCiAqIFJ4IHBhdGguCiAqLwojZGVmaW5lIEFGRV9QT1JUX0lEX1ZPSUNFMl9QTEFZQkFDS19UWCAgMHg4MDAyCiNkZWZpbmUgQUZFX1BPUlRfSURfVk9JQ0VfUExBWUJBQ0tfVFggICAweDgwMDUKCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgwMCkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF8xIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMiBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzMgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF80IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNSBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYXzYgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1JYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWF83IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4MDEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFhfMSBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzIgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYICsgMHgwNCkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8zIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFhfNCBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYXzUgXAoJKEFGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYICsgMHgwQSkKI2RlZmluZSBBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF82IFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFhfNyBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fVFggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4MTApCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF8xIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzIgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfMyBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF80IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzUgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfNiBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF83IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDExKQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfMSBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF8yIFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwNCkKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzMgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfNCBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF81IFwKCShBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYICsgMHgwQSkKI2RlZmluZSBBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzYgXAoJKEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfNyBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDIwKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF8xIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF8yIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF8zIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF80IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF81IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF82IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF83IFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgyMSkKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfMSBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfMiBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgwNCkKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfMyBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNCBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNSBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgwQSkKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNiBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNyBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHgzMCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF8xIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMiBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzMgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF80IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNSBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYXzYgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1JYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWF83IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9URE1fUE9SVF9SQU5HRV9TVEFSVCArIDB4MzEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFhfMSBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggKyAweDAyKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzIgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYICsgMHgwNCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8zIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MDYpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFhfNCBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggKyAweDA4KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYXzUgXAoJKEFGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYICsgMHgwQSkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF82IFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MEMpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFhfNyBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fVFggKyAweDBFKQoKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfVERNX1BPUlRfUkFOR0VfU1RBUlQgKyAweDQwKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYXzEgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgwMikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWF8yIFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWCArIDB4MDQpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfMyBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDA2KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYXzQgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgwOCkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWF81IFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9SWCArIDB4MEEpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlhfNiBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fUlggKyAweDBDKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYXzcgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgwRSkKCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggXAoJKEFGRV9QT1JUX0lEX1RETV9QT1JUX1JBTkdFX1NUQVJUICsgMHg0MSkKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWF8xIFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MDIpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFhfMiBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDA0KQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzMgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwNikKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWF80IFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MDgpCiNkZWZpbmUgQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFhfNSBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDBBKQojZGVmaW5lIEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYXzYgXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1RYICsgMHgwQykKI2RlZmluZSBBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWF83IFwKCShBRkVfUE9SVF9JRF9RVUlOQVJZX1RETV9UWCArIDB4MEUpCgojZGVmaW5lIEFGRV9QT1JUX0lEX0lOVkFMSUQgICAgICAgICAgICAgMHhGRkZGCgojZGVmaW5lIEFBQ19FTkNfTU9ERV9BQUNfTEMgMHgwMgojZGVmaW5lIEFBQ19FTkNfTU9ERV9BQUNfUCAweDA1CiNkZWZpbmUgQUFDX0VOQ19NT0RFX0VBQUNfUCAweDFECgojZGVmaW5lIEFGRV9QU0VVRE9QT1JUX0NNRF9TVEFSVCAweDAwMDEwMGNmCnN0cnVjdCBhZmVfcHNldWRvcG9ydF9zdGFydF9jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUxNiBwb3J0X2lkOwkJLyogUHNldWRvIFBvcnQgMSA9IDB4ODAwMCAqLwoJCQkJLyogUHNldWRvIFBvcnQgMiA9IDB4ODAwMSAqLwoJCQkJLyogUHNldWRvIFBvcnQgMyA9IDB4ODAwMiAqLwoJdTE2IHRpbWluZzsJCS8qIEZUUlQgPSAwICwgQVZUaW1lciA9IDEsICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QU0VVRE9QT1JUX0NNRF9TVE9QIDB4MDAwMTAwZDAKc3RydWN0IGFmZV9wc2V1ZG9wb3J0X3N0b3BfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgcG9ydF9pZDsJCS8qIFBzZXVkbyBQb3J0IDEgPSAweDgwMDAgKi8KCQkJCS8qIFBzZXVkbyBQb3J0IDIgPSAweDgwMDEgKi8KCQkJCS8qIFBzZXVkbyBQb3J0IDMgPSAweDgwMDIgKi8KCXUxNiByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCgojZGVmaW5lIEFGRV9NT0RVTEVfU0lERVRPTkVfSUlSX0ZJTFRFUgkweDAwMDEwMjAyCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0VOQUJMRQkweDAwMDEwMjAzCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9FTkFCTEUKICogcGFyYW1ldGVyLCB3aGljaCBlbmFibGVzIG9yCiAqIGRpc2FibGVzIGFueSBtb2R1bGUuCiAqIFRoZSBmaXhlZCBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGlzIGZvdXIgYnl0ZXMuCiAqLwoKc3RydWN0IGFmZV9tb2RfZW5hYmxlX3BhcmFtIHsKCXUxNiAgICAgICAgICAgICAgICAgIGVuYWJsZTsKCS8qIEVuYWJsZXMgKDEpIG9yIGRpc2FibGVzICgwKSB0aGUgbW9kdWxlLiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKLyogSUQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRkVfTU9EVUxFX1NJREVUT05FX0lJUl9GSUxURVIgbW9kdWxlLgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfU0lERVRPTkVfSUlSX0ZJTFRFUl9DT05GSUcJMHgwMDAxMDIwNAojZGVmaW5lIE1BWF9TSURFVE9ORV9JSVJfREFUQV9TSVpFIDIyNAojZGVmaW5lIE1BWF9OT19JSVJfRklMVEVSX1NUQUdFICAgIDEwCgpzdHJ1Y3QgYWZlX3NpZGV0b25lX2lpcl9maWx0ZXJfY29uZmlnX3BhcmFtcyB7Cgl1MTYgICAgICAgICAgICAgICAgICBudW1fYmlxdWFkX3N0YWdlczsKLyogTnVtYmVyIG9mIHN0YWdlcy4KICogU3VwcG9ydGVkIHZhbHVlczogTWluaW11bSBvZiA1IGFuZCBtYXhpbXVtIG9mIDEwCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHByZWdhaW47Ci8qIFByZWdhaW4gZm9yIHRoZSBjb21wZW5zYXRpbmcgZmlsdGVyIHJlc3BvbnNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBBbnkgbnVtYmVyIGluIFExMyBmb3JtYXQKICovCgl1aW50OF90ICAgaWlyX2NvbmZpZ1tNQVhfU0lERVRPTkVfSUlSX0RBVEFfU0laRV07Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9NT0RVTEVfTE9PUEJBQ0sJMHgwMDAxMDIwNQojZGVmaW5lIEFGRV9QQVJBTV9JRF9MT09QQkFDS19HQUlOX1BFUl9QQVRICTB4MDAwMTAyMDYKCi8qIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfTE9PUEJBQ0tfR0FJTl9QRVJfUEFUSCBwYXJhbWV0ZXIsCiAqIHdoaWNoIGdldHMvc2V0cyBsb29wYmFjayBnYWluIG9mIGEgcG9ydCB0byBhbiBSeCBwb3J0LgogKiBUaGUgVHggcG9ydCBJRCBvZiB0aGUgbG9vcGJhY2sgaXMgcGFydCBvZiB0aGUgc2V0X3BhcmFtIGNvbW1hbmQuCiAqLwoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUE9SVF9DTURfU0VUX1BBUkFNX1YyIGNvbW1hbmQncwogKiBjb25maWd1cmF0aW9uL2NhbGlicmF0aW9uIHNldHRpbmdzIGZvciB0aGUgQUZFIHBvcnQuCiAqLwpzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiB7Cgl1MTYgcG9ydF9pZDsKLyogUG9ydCBpbnRlcmZhY2UgYW5kIGRpcmVjdGlvbiAoUnggb3IgVHgpIHRvIHN0YXJ0LiAqLwoKCXUxNiBwYXlsb2FkX3NpemU7Ci8qIEFjdHVhbCBzaXplIG9mIHRoZSBwYXlsb2FkIGluIGJ5dGVzLgogKiBUaGlzIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlIHBhcmFtZXRlciBwYXlsb2FkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgp1MzIgcGF5bG9hZF9hZGRyZXNzX2xzdzsKLyogTFNXIG9mIDY0IGJpdCBQYXlsb2FkIGFkZHJlc3MuCiAqIEFkZHJlc3Mgc2hvdWxkIGJlIDMyLWJ5dGUsCiAqIDRrYnl0ZSBhbGlnbmVkIGFuZCBtdXN0IGJlIGNvbnRpZ3VvdXMgbWVtb3J5LgogKi8KCnUzMiBwYXlsb2FkX2FkZHJlc3NfbXN3OwovKiBNU1cgb2YgNjQgYml0IFBheWxvYWQgYWRkcmVzcy4KICogSW4gY2FzZSBvZiAzMi1iaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLAogKiB0aGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uCiAqIEluIGNhc2Ugb2YgMzYtYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywKICogYml0LTQgdG8gYml0LTMxIG11c3QgYmUgc2V0IHRvIHplcm8uCiAqIEFkZHJlc3Mgc2hvdWxkIGJlIDMyLWJ5dGUsIDRrYnl0ZSBhbGlnbmVkCiAqIGFuZCBtdXN0IGJlIGNvbnRpZ3VvdXMgbWVtb3J5LgogKi8KCnUzMiBtZW1fbWFwX2hhbmRsZTsKLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkKICogQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZHMuCiAqIFN1cHBvcnRlZCBWYWx1ZXM6CiAqIC0gTlVMTCAtLSBNZXNzYWdlLiBUaGUgcGFyYW1ldGVyIGRhdGEgaXMgaW4tYmFuZC4KICogLSBOb24tTlVMTCAtLSBUaGUgcGFyYW1ldGVyIGRhdGEgaXMgT3V0LWJhbmQuUG9pbnRlciB0bwogKiB0aGUgcGh5c2ljYWwgYWRkcmVzcwogKiBpbiBzaGFyZWQgbWVtb3J5IG9mIHRoZSBwYXlsb2FkIGRhdGEuCiAqIEFuIG9wdGlvbmFsIGZpZWxkIGlzIGF2YWlsYWJsZSBpZiBwYXJhbWV0ZXIKICogZGF0YSBpcyBpbi1iYW5kOgogKiBhZmVfcGFyYW1fZGF0YV92MiBwYXJhbV9kYXRhWy4uLl0uCiAqIEZvciBkZXRhaWxlZCBwYXlsb2FkIGNvbnRlbnQsIHNlZSB0aGUKICogYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBzdHJ1Y3R1cmUuCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9DTURfU0VUX1BBUkFNX1YyCTB4MDAwMTAwRUYKCnN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHsKCXUzMiBtb2R1bGVfaWQ7Ci8qIElEIG9mIHRoZSBtb2R1bGUgdG8gYmUgY29uZmlndXJlZC4KICogU3VwcG9ydGVkIHZhbHVlczogVmFsaWQgbW9kdWxlIElECiAqLwoKdTMyIHBhcmFtX2lkOwovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN1cHBvcnRlZCBwYXJhbWV0ZXJzCiAqIGZvciB0aGUgbW9kdWxlIElELgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBWYWxpZCBwYXJhbWV0ZXIgSUQKICovCgp1MTYgcGFyYW1fc2l6ZTsKLyogQWN0dWFsIHNpemUgb2YgdGhlIGRhdGEgZm9yIHRoZQogKiBtb2R1bGVfaWQvcGFyYW1faWQgcGFpci4gVGhlIHNpemUgaXMgYQogKiBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgp1MTYgcmVzZXJ2ZWQ7Ci8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xvb3BiYWNrX2dhaW5fcGVyX3BhdGhfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXUxNiAgICAgICAgICAgICAgICAgIHJ4X3BvcnRfaWQ7Ci8qIFJ4IHBvcnQgb2YgdGhlIGxvb3BiYWNrLiAqLwoKdTE2ICAgICAgICAgICAgICAgICAgZ2FpbjsKLyogTG9vcGJhY2sgZ2FpbiBwZXIgcGF0aCBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczogQW55IG51bWJlciBpbiBRMTMgZm9ybWF0CiAqLwp9IF9fcGFja2VkOwoKLyogUGFyYW1ldGVyIElEIHVzZWQgdG8gY29uZmlndXJlIGFuZCBlbmFibGUvZGlzYWJsZSB0aGUKICogbG9vcGJhY2sgcGF0aC4gVGhlIGRpZmZlcmVuY2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBleGlzdGluZwogKiBBUEksIEFGRV9QT1JUX0NNRF9MT09QQkFDSywgaXMgdGhhdCBpdCBhbGxvd3MgUnggcG9ydCB0byBiZQogKiBjb25maWd1cmVkIGFzIHNvdXJjZSBwb3J0IGluIGxvb3BiYWNrIHBhdGguIFBvcnQtaWQgaW4KICogQUZFX1BPUlRfQ01EX1NFVF9QQVJBTSBjbWQgaXMgdGhlIHNvdXJjZSBwb3J0IHdoaWNoIGNhbiBiZQogKiBUeCBvciBSeCBwb3J0LiBJbiBhZGRpdGlvbiwgd2UgY2FuIGNvbmZpZ3VyZSB0aGUgdHlwZSBvZgogKiByb3V0aW5nIG1vZGUgdG8gaGFuZGxlIGRpZmZlcmVudCB1c2UgY2FzZXMuCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9MT09QQkFDS19DT05GSUcJMHgwMDAxMDIwQgojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9MT09QQkFDS19DT05GSUcJMHgxCgplbnVtIGFmZV9sb29wYmFja19yb3V0aW5nX21vZGUgewoJTEJfTU9ERV9ERUZBVUxUID0gMSwKCS8qIFJlZ3VsYXIgbG9vcGJhY2sgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24gcG9ydCAqLwoJTEJfTU9ERV9TSURFVE9ORSwKCS8qIFNpZGV0b25lIGZlZWQgZnJvbSBUeCBzb3VyY2UgdG8gUnggZGVzdGluYXRpb24gcG9ydCAqLwoJTEJfTU9ERV9FQ19SRUZfVk9JQ0VfQVVESU8sCgkvKiBFY2hvIGNhbmNlbGxlciByZWZlcmVuY2UsIHZvaWNlICsgYXVkaW8gKyBEVE1GICovCglMQl9NT0RFX0VDX1JFRl9WT0lDRQoJLyogRWNobyBjYW5jZWxsZXIgcmVmZXJlbmNlLCB2b2ljZSBhbG9uZSAqLwp9IF9fcGFja2VkOwoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfTE9PUEJBQ0tfQ09ORklHICwKICogd2hpY2ggZW5hYmxlcy9kaXNhYmxlcyBvbmUgQUZFIGxvb3BiYWNrLgogKi8Kc3RydWN0IGFmZV9sb29wYmFja19jZmdfdjEgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXUzMgkJbG9vcGJhY2tfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIFJNQyBtb2R1bGUKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fTE9PUEJBQ0tfQ09ORklHCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgZHN0X3BvcnRfaWQ7CgkvKiBEZXN0aW5hdGlvbiBQb3J0IElkLiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcm91dGluZ19tb2RlOwovKiBTcGVjaWZpZXMgZGF0YSBwYXRoIHR5cGUgZnJvbSBzcmMgdG8gZGVzdCBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAjTEJfTU9ERV9ERUZBVUxUCiAqICNMQl9NT0RFX1NJREVUT05FCiAqICNMQl9NT0RFX0VDX1JFRl9WT0lDRV9BVURJTwogKiAjTEJfTU9ERV9FQ19SRUZfVk9JQ0VfQQogKiAjTEJfTU9ERV9FQ19SRUZfVk9JQ0UKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZW5hYmxlOwovKiBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgKDEpIG9yCiAqIGRpc2FibGUgKDApIGFuIEFGRSBsb29wYmFjay4KICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIDMyLWJpdCBhbGlnbm1lbnQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9sb29wYmFja19zaWRldG9uZV9nYWluIHsKCXUxNiAgICAgICAgICAgICAgICAgIHJ4X3BvcnRfaWQ7Cgl1MTYgICAgICAgICAgICAgICAgICBnYWluOwp9IF9fcGFja2VkOwoKc3RydWN0IGxvb3BiYWNrX2NmZ19kYXRhIHsKCXUzMiAgICAgICAgICAgICAgICAgIGxvb3BiYWNrX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBSTUMgbW9kdWxlCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX0xPT1BCQUNLX0NPTkZJRwogKi8KCXUxNiAgICAgICAgICAgICAgICAgIGRzdF9wb3J0X2lkOwoJLyogRGVzdGluYXRpb24gUG9ydCBJZC4gKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJvdXRpbmdfbW9kZTsKLyogU3BlY2lmaWVzIGRhdGEgcGF0aCB0eXBlIGZyb20gc3JjIHRvIGRlc3QgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogI0xCX01PREVfREVGQVVMVAogKiAjTEJfTU9ERV9TSURFVE9ORQogKiAjTEJfTU9ERV9FQ19SRUZfVk9JQ0VfQVVESU8KICogI0xCX01PREVfRUNfUkVGX1ZPSUNFX0EKICogI0xCX01PREVfRUNfUkVGX1ZPSUNFCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGVuYWJsZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlICgxKSBvcgogKiBkaXNhYmxlICgwKSBhbiBBRkUgbG9vcGJhY2suCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciAzMi1iaXQgYWxpZ25tZW50LiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIDAuCiAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdF9sb29wYmFja19jZmdfdjEgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICAgICAgICAgICAgIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyICBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgICBnYWluX3BkYXRhOwoJc3RydWN0IGFmZV9sb29wYmFja19zaWRldG9uZV9nYWluIGdhaW5fZGF0YTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgICBjZmdfcGRhdGE7CglzdHJ1Y3QgbG9vcGJhY2tfY2ZnX2RhdGEgICAgICAgICAgY2ZnX2RhdGE7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xvb3BiYWNrX2lpcl9jZmdfdjIgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICAgICAgICAgICAgICAgICAgIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyICAgICAgICBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgICAgICAgICBzdF9paXJfZW5hYmxlX3BkYXRhOwoJc3RydWN0IGFmZV9tb2RfZW5hYmxlX3BhcmFtICAgICAgICAgICAgIHN0X2lpcl9tb2RlX2VuYWJsZV9kYXRhOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgICAgICAgIHN0X2lpcl9maWx0ZXJfY29uZmlnX3BkYXRhOwoJc3RydWN0IGFmZV9zaWRldG9uZV9paXJfZmlsdGVyX2NvbmZpZ19wYXJhbXMgc3RfaWlyX2ZpbHRlcl9jb25maWdfZGF0YTsKfSBfX3BhY2tlZDsKI2RlZmluZSBBRkVfTU9EVUxFX1NQRUFLRVJfUFJPVEVDVElPTgkweDAwMDEwMjA5CiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQS1JfUFJPVF9DT05GSUcJMHgwMDAxMDIwYQojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9TUEtSX1BST1RfQ09ORklHCTB4MQojZGVmaW5lIEFGRV9TUEtSX1BST1RfRVhDVVJTSU9ORl9MRU4JNTEyCnN0cnVjdCBhZmVfc3Brcl9wcm90X2NmZ19wYXJhbV92MSB7Cgl1MzIgICAgICAgc3Brcl9wcm90X21pbm9yX3ZlcnNpb247Ci8qCiAqIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlCiAqIHNwZWFrZXIgcHJvdGVjdGlvbiBtb2R1bGUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fU1BLUl9QUk9UX0NPTkZJRwogKi8KCmludDE2X3QgICAgICAgIHdpbl9zaXplOwovKiBBbmFseXNpcyBhbmQgc3ludGhlc2lzIHdpbmRvdyBzaXplIChuV2luU2l6ZSkuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEwMjQsIDUxMiwgMjU2IHNhbXBsZXMKICovCgppbnQxNl90ICAgICAgICBtYXJnaW47Ci8qIEFsbG93YWJsZSBtYXJnaW4gZm9yIGV4Y3Vyc2lvbiBwcmVkaWN0aW9uLAogKiBpbiBMMTZRMTUgZm9ybWF0LiBUaGlzIGlzIGEKICogY29udHJvbCBwYXJhbWV0ZXIgdG8gYWxsb3cKICogZm9yIG92ZXJlc3RpbWF0aW9uIG9mIHBlYWsgZXhjdXJzaW9uLgogKi8KCmludDE2X3QgICAgICAgIHNwa3JfZXhjX2xpbWl0OwovKiBTcGVha2VyIGV4Y3Vyc2lvbiBsaW1pdCwgaW4gTDE2UTE1IGZvcm1hdC4qLwoKaW50MTZfdCAgICAgICAgc3Brcl9yZXNvbmFuY2VfZnJlcTsKLyogUmVzb25hbmNlIGZyZXF1ZW5jeSBvZiB0aGUgc3BlYWtlcjsgdXNlZAogKiB0byBkZWZpbmUgYSBmcmVxdWVuY3kgcmFuZ2UKICogZm9yIHNpZ25hbCBtb2RpZmljYXRpb24uCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMjAwMCBIegogKi8KCmludDE2X3QgICAgICAgIGxpbWhyZXNoOwovKiBUaHJlc2hvbGQgb2YgdGhlIGhhcmQgbGltaXRlcjsgdXNlZCB0bwogKiBwcmV2ZW50IG92ZXJzaG9vdGluZyBiZXlvbmQgYQogKiBzaWduYWwgbGV2ZWwgdGhhdCB3YXMgc2V0IGJ5IHRoZSBsaW1pdGVyCiAqIHByaW9yIHRvIHNwZWFrZXIgcHJvdGVjdGlvbi4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAzMjc2NwogKi8KCmludDE2X3QgICAgICAgIGhwZl9jdXRfb2ZmX2ZyZXE7Ci8qIEhpZ2ggcGFzcyBmaWx0ZXIgY3V0b2ZmIGZyZXF1ZW5jeS4KICogU3VwcG9ydGVkIHZhbHVlczogMTAwLCAyMDAsIDMwMCBIegogKi8KCmludDE2X3QgICAgICAgIGhwZl9lbmFibGU7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBoaWdoIHBhc3MgZmlsdGVyCiAqIGlzIGVuYWJsZWQgKDApIG9yIGRpc2FibGVkICgxKS4KICovCgppbnQxNl90ICAgICAgICByZXNlcnZlZDsKLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwoKaW50MzJfdCAgICAgICAgYW1wX2dhaW47Ci8qIEFtcGxpZmllciBnYWluIGluIEwzMlExNSBmb3JtYXQuCiAqIFRoaXMgaXMgdGhlIFJNUyB2b2x0YWdlIGF0IHRoZQogKiBsb3Vkc3BlYWtlciB3aGVuIGEgMGRCRlMgdG9uZQogKiBpcyBwbGF5ZWQgaW4gdGhlIGRpZ2l0YWwgZG9tYWluLgogKi8KCmludDE2X3QgICAgICAgIGV4Y3Vyc2lvbmZbQUZFX1NQS1JfUFJPVF9FWENVUlNJT05GX0xFTl07Ci8qIEFycmF5IG9mIHRoZSBleGN1cnNpb24gdHJhbnNmZXIgZnVuY3Rpb24uCiAqIFRoZSBwZWFrIGV4Y3Vyc2lvbiBvZiB0aGUKICogbG91ZHNwZWFrZXIgZGlhcGhyYWdtIGlzCiAqIG1lYXN1cmVkIGluIG1pbGxpbWV0ZXJzIGZvciAxIFZybXMgU2luZQogKiB0b25lIGF0IGFsbCBGRlQgYmluIGZyZXF1ZW5jaWVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBRMTUgZm9ybWF0CiAqLwp9IF9fcGFja2VkOwoKCiNkZWZpbmUgQUZFX1NFUlZJQ0VfQ01EX1JFR0lTVEVSX1JUX1BPUlRfRFJJVkVSCTB4MDAwMTAwRTAKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1NFUlZJQ0VfQ01EX1JFR0lTVEVSX1JUX1BPUlRfRFJJVkVSCiAqIGNvbW1hbmQsIHdoaWNoIHJlZ2lzdGVycyBhIHJlYWwtdGltZSBwb3J0IGRyaXZlcgogKiB3aXRoIHRoZSBBRkUgc2VydmljZS4KICovCnN0cnVjdCBhZmVfc2VydmljZV9jbWRfcmVnaXN0ZXJfcnRfcG9ydF9kcml2ZXIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTE2ICAgICAgICAgICAgICAgICAgcG9ydF9pZDsKLyogUG9ydCBJRCB3aXRoIHdoaWNoIHRoZSByZWFsLXRpbWUgZHJpdmVyIGV4Y2hhbmdlcyBkYXRhCiAqIChyZWdpc3RlcnMgZm9yIGV2ZW50cykuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NUQVJUIHRvCiAqICNBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX0VORAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1NFUlZJQ0VfQ01EX1VOUkVHSVNURVJfUlRfUE9SVF9EUklWRVIJMHgwMDAxMDBFMQoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfU0VSVklDRV9DTURfVU5SRUdJU1RFUl9SVF9QT1JUX0RSSVZFUgogKiBjb21tYW5kLCB3aGljaCB1bnJlZ2lzdGVycyBhIHJlYWwtdGltZSBwb3J0IGRyaXZlciBmcm9tCiAqIHRoZSBBRkUgc2VydmljZS4KICovCnN0cnVjdCBhZmVfc2VydmljZV9jbWRfdW5yZWdpc3Rlcl9ydF9wb3J0X2RyaXZlciB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IElEIGZyb20gd2hpY2ggdGhlIHJlYWwtdGltZQogKiBkcml2ZXIgdW5yZWdpc3RlcnMgZm9yIGV2ZW50cy4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLgkqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfRVZFTlRfUlRfUFJPWFlfUE9SVF9TVEFUVVMJMHgwMDAxMDEwNQojZGVmaW5lIEFGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX1NUQVJUCTAKI2RlZmluZSBBRkVfRVZFTlRZUEVfUlRfUFJPWFlfUE9SVF9TVE9QCTEKI2RlZmluZSBBRkVfRVZFTlRZUEVfUlRfUFJPWFlfUE9SVF9MT1dfV0FURVJfTUFSSwkyCiNkZWZpbmUgQUZFX0VWRU5UWVBFX1JUX1BST1hZX1BPUlRfSElHSF9XQVRFUl9NQVJLCTMKI2RlZmluZSBBRkVfRVZFTlRZUEVfUlRfUFJPWFlfUE9SVF9JTlZBTElECTB4RkZGRgoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfRVZFTlRfUlRfUFJPWFlfUE9SVF9TVEFUVVMKICogbWVzc2FnZSwgd2hpY2ggc2VuZHMgYW4gZXZlbnQgZnJvbSB0aGUgQUZFIHNlcnZpY2UKICogdG8gYSByZWdpc3RlcmVkIGNsaWVudC4KICovCnN0cnVjdCBhZmVfZXZlbnRfcnRfcHJveHlfcG9ydF9zdGF0dXMgewoJdTE2ICAgICAgICAgICAgICAgICAgcG9ydF9pZDsKLyogUG9ydCBJRCB0byB3aGljaCB0aGUgZXZlbnQgaXMgc2VudC4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfU1RBUlQgdG8KICogI0FGRV9QT1JUX0lEX1JUX1BST1hZX1BPUlRfUkFOR0VfRU5ECiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGV2ZW50eXBlOwovKiBUeXBlIG9mIGV2ZW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfRVZFTlRZUEVfUlRfUFJPWFlfUE9SVF9TVEFSVAogKiAtICNBRkVfRVZFTlRZUEVfUlRfUFJPWFlfUE9SVF9TVE9QCiAqIC0gI0FGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX0xPV19XQVRFUl9NQVJLCiAqIC0gI0FGRV9FVkVOVFlQRV9SVF9QUk9YWV9QT1JUX0hJR0hfV0FURVJfTUFSSwogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BPUlRfREFUQV9DTURfUlRfUFJPWFlfUE9SVF9XUklURV9WMiAweDAwMDEwMEVECgpzdHJ1Y3QgYWZlX3BvcnRfZGF0YV9jbWRfcnRfcHJveHlfcG9ydF93cml0ZV92MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBUeCAobWljKSBwcm94eSBwb3J0IElEIHdpdGggd2hpY2ggdGhlIHJlYWwtdGltZQogKiBkcml2ZXIgZXhjaGFuZ2VzIGRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NUQVJUIHRvCiAqICNBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX0VORAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBidWZmZXJfYWRkcmVzc19sc3c7Ci8qIExTVyBBZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUKICogZGF0YSBmcm9tIHRoZSByZWFsLXRpbWUgc291cmNlCiAqIGRldmljZSBvbiBhIGNsaWVudC4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmZmVyX2FkZHJlc3NfbXN3OwovKiBNU1cgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlCiAqIGRhdGEgZnJvbSB0aGUgcmVhbC10aW1lIHNvdXJjZQogKiBkZXZpY2Ugb24gYSBjbGllbnQuCiAqLwoKCXUzMgkJCQkJbWVtX21hcF9oYW5kbGU7Ci8qIEEgbWVtb3J5IG1hcCBoYW5kbGUgZW5jYXBzdWxhdGluZyBzaGFyZWQgbWVtb3J5CiAqIGF0dHJpYnV0ZXMgaXMgcmV0dXJuZWQgaWYKICogQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogY29tbWFuZCBpcyBzdWNjZXNzZnVsLgogKiBTdXBwb3J0ZWQgVmFsdWVzOgogKiAtIEFueSAzMiBiaXQgdmFsdWUKICovCgoJdTMyICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlX2J5dGVzOwovKiBOdW1iZXIgb2YgdmFsaWQgYnl0ZXMgYXZhaWxhYmxlCiAqIGluIHRoZSBidWZmZXIgKGluY2x1ZGluZyBhbGwKICogY2hhbm5lbHM6IG51bWJlciBvZiBieXRlcyBwZXIKICogY2hhbm5lbCA9IGF2YWlsYWJsZUJ5dGVzdW1DaGFubmVscykuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKgogKiBUaGlzIGZpZWxkIG11c3QgYmUgZXF1YWwgdG8gdGhlIGZyYW1lCiAqIHNpemUgc3BlY2lmaWVkIGluIHRoZSAjQUZFX1BPUlRfQVVESU9fSUZfQ09ORklHCiAqIGNvbW1hbmQgdGhhdCB3YXMgc2VudCB0byBjb25maWd1cmUgdGhpcwogKiBwb3J0LgogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BPUlRfREFUQV9DTURfUlRfUFJPWFlfUE9SVF9SRUFEX1YyCTB4MDAwMTAwRUUKCi8qICBQYXlsb2FkIG9mIHRoZQogKiAjQUZFX1BPUlRfREFUQV9DTURfUlRfUFJPWFlfUE9SVF9SRUFEX1YyIGNvbW1hbmQsIHdoaWNoCiAqIGRlbGl2ZXJzIGFuIGVtcHR5IGJ1ZmZlciB0byB0aGUgQUZFIHNlcnZpY2UuIE9uCiAqIGFja25vd2xlZGdtZW50LCBkYXRhIGlzIGZpbGxlZCBpbiB0aGUgYnVmZmVyLgogKi8Kc3RydWN0IGFmZV9wb3J0X2RhdGFfY21kX3J0X3Byb3h5X3BvcnRfcmVhZF92MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBSeCBwcm94eSBwb3J0IElEIHdpdGggd2hpY2ggdGhlIHJlYWwtdGltZQogKiBkcml2ZXIgZXhjaGFuZ2VzIGRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX1NUQVJUIHRvCiAqICNBRkVfUE9SVF9JRF9SVF9QUk9YWV9QT1JUX1JBTkdFX0VORAogKiAoVGhpcyBtdXN0IGJlIGFuIFJ4IChzcGVha2VyKSBwb3J0LikKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmZmVyX2FkZHJlc3NfbHN3OwovKiBMU1cgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgc2VudCBmcm9tIHRoZSBBRkUKICogc2VydmljZSB0byBhIHJlYWwtdGltZSBzaW5rIGRldmljZSBvbiB0aGUgY2xpZW50LgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmZmVyX2FkZHJlc3NfbXN3OwovKiBNU1cgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgc2VudCBmcm9tIHRoZSBBRkUKICogc2VydmljZSB0byBhIHJlYWwtdGltZSBzaW5rIGRldmljZSBvbiB0aGUgY2xpZW50LgogKi8KCgkJdTMyCQkJCW1lbV9tYXBfaGFuZGxlOwovKiBBIG1lbW9yeSBtYXAgaGFuZGxlIGVuY2Fwc3VsYXRpbmcgc2hhcmVkIG1lbW9yeSBhdHRyaWJ1dGVzIGlzCiAqIHJldHVybmVkIGlmIEFGRV9TRVJWSUNFX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQgaXMKICogc3VjY2Vzc2Z1bC4KICogU3VwcG9ydGVkIFZhbHVlczoKICogLSBBbnkgMzIgYml0IHZhbHVlCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV9ieXRlczsKLyogTnVtYmVyIG9mIHZhbGlkIGJ5dGVzIGF2YWlsYWJsZSBpbiB0aGUgYnVmZmVyIChpbmNsdWRpbmcgYWxsCiAqIGNoYW5uZWxzKS4KICogU3VwcG9ydGVkIHZhbHVlczogPiAwCiAqIFRoaXMgZmllbGQgbXVzdCBiZSBlcXVhbCB0byB0aGUgZnJhbWUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlCiAqICNBRkVfUE9SVF9BVURJT19JRl9DT05GSUcgY29tbWFuZCB0aGF0IHdhcyBzZW50IHRvIGNvbmZpZ3VyZQogKiB0aGlzIHBvcnQuCiAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBtb2R1bGUgSUQgaXMgcmVsYXRlZCB0byBkZXZpY2UgY29uZmlndXJpbmcgbGlrZSBJMlMsUENNLAogKiBIRE1JLCBTTElNQnVzIGV0Yy4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgZm9sbG93aW5nIHBhcmFtZXRlciBpZHMuCiAqIC0gI0FGRV9QQVJBTV9JRF9JMlNfQ09ORklHCiAqIC0gI0FGRV9QQVJBTV9JRF9QQ01fQ09ORklHCiAqIC0gI0FGRV9QQVJBTV9JRF9ESUdJX01JQ19DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX0hETUlfQ09ORklHCiAqIC0gI0FGRV9QQVJBTV9JRF9JTlRFUk5BTF9CVF9GTV9DT05GSUcKICogLSAjQUZFX1BBUkFNX0lEX1NMSU1CVVNfQ09ORklHCiAqIC0gI0FGRV9QQVJBTV9JRF9SVF9QUk9YWV9DT05GSUcKICovCgojZGVmaW5lIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRSAgICAweDAwMDEwMjBDCiNkZWZpbmUgQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsgICAgICAgICAgIDgwMDAKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksgICAgICAgICAgMTYwMDAKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsgICAgICAgICAgNDgwMDAKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV85NksgICAgICAgICAgOTYwMDAKI2RlZmluZSBBRkVfUE9SVF9TQU1QTEVfUkFURV8xNzZQNEsgICAgICAgMTc2NDAwCiNkZWZpbmUgQUZFX1BPUlRfU0FNUExFX1JBVEVfMTkySyAgICAgICAgIDE5MjAwMAojZGVmaW5lIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzM1MlA4SyAgICAgICAzNTI4MDAKI2RlZmluZSBBRkVfTElORUFSX1BDTV9EQVRBCQkJCTB4MAojZGVmaW5lIEFGRV9OT05fTElORUFSX0RBVEEJCQkJMHgxCiNkZWZpbmUgQUZFX0xJTkVBUl9QQ01fREFUQV9QQUNLRURfNjA5NTggMHgyCiNkZWZpbmUgQUZFX05PTl9MSU5FQVJfREFUQV9QQUNLRURfNjA5NTggMHgzCiNkZWZpbmUgQUZFX0dFTkVSSUNfQ09NUFJFU1NFRCAgICAgICAgICAgMHg4CgovKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIEkyUyBpbnRlcmZhY2UgKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfSTJTX0NPTkZJRwkweDAwMDEwMjBECiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0kyU19DT05GSUcJMHgxCi8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBJMlMgY29uZmlndXJhdGlvbgogKiBjaGFubmVsX21vZGUgcGFyYW1ldGVyIHRvCiAqIHNlcmlhbCBkYXRhIHdpcmUgbnVtYmVyIDEtMyAoU0QzKS4KICovCiNkZWZpbmUgQUZFX1BPUlRfSTJTX1NEMCAgICAgICAgICAgICAgICAgICAgIDB4MQojZGVmaW5lIEFGRV9QT1JUX0kyU19TRDEgICAgICAgICAgICAgICAgICAgICAweDIKI2RlZmluZSBBRkVfUE9SVF9JMlNfU0QyICAgICAgICAgICAgICAgICAgICAgMHgzCiNkZWZpbmUgQUZFX1BPUlRfSTJTX1NEMyAgICAgICAgICAgICAgICAgICAgIDB4NAojZGVmaW5lIEFGRV9QT1JUX0kyU19RVUFEMDEgICAgICAgICAgICAgICAgICAweDUKI2RlZmluZSBBRkVfUE9SVF9JMlNfUVVBRDIzICAgICAgICAgICAgICAgICAgMHg2CiNkZWZpbmUgQUZFX1BPUlRfSTJTXzZDSFMgICAgICAgICAgICAgICAgICAgIDB4NwojZGVmaW5lIEFGRV9QT1JUX0kyU184Q0hTICAgICAgICAgICAgICAgICAgICAweDgKI2RlZmluZSBBRkVfUE9SVF9JMlNfTU9OTyAgICAgICAgICAgICAgICAgICAgMHgwCiNkZWZpbmUgQUZFX1BPUlRfSTJTX1NURVJFTyAgICAgICAgICAgICAgICAgIDB4MQojZGVmaW5lIEFGRV9QT1JUX0NPTkZJR19JMlNfV1NfU1JDX0VYVEVSTkFMICAweDAKI2RlZmluZSBBRkVfUE9SVF9DT05GSUdfSTJTX1dTX1NSQ19JTlRFUk5BTCAgMHgxCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9JMlNfQ09ORklHCiAqIGNvbW1hbmQncyAoSTJTIGNvbmZpZ3VyYXRpb24KICogcGFyYW1ldGVyKS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfaTJzX2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBpMnNfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEkyUwogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9JMlNfQ09ORklHCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBjaGFubmVsX21vZGU7Ci8qIEkyUyBsaW5lcyBhbmQgbXVsdGljaGFubmVsIG9wZXJhdGlvbi4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfSTJTX1NEMAogKiAtICNBRkVfUE9SVF9JMlNfU0QxCiAqIC0gI0FGRV9QT1JUX0kyU19TRDIKICogLSAjQUZFX1BPUlRfSTJTX1NEMwogKiAtICNBRkVfUE9SVF9JMlNfUVVBRDAxCiAqIC0gI0FGRV9QT1JUX0kyU19RVUFEMjMKICogLSAjQUZFX1BPUlRfSTJTXzZDSFMKICogLSAjQUZFX1BPUlRfSTJTXzhDSFMKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbW9ub19zdGVyZW87Ci8qIFNwZWNpZmllcyBtb25vIG9yIHN0ZXJlby4gVGhpcyBhcHBsaWVzIG9ubHkgd2hlbgogKiBhIHNpbmdsZSBJMlMgbGluZSBpcyB1c2VkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9JMlNfTU9OTwogKiAtICNBRkVfUE9SVF9JMlNfU1RFUkVPCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHdzX3NyYzsKLyogV29yZCBzZWxlY3Qgc291cmNlOiBpbnRlcm5hbCBvciBleHRlcm5hbC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfQ09ORklHX0kyU19XU19TUkNfRVhURVJOQUwKICogLSAjQUZFX1BPUlRfQ09ORklHX0kyU19XU19TUkNfSU5URVJOQUwKICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksKICovCgoJdTE2CQkJCQlkYXRhX2Zvcm1hdDsKLyogZGF0YSBmb3JtYXQKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjTElORUFSX1BDTV9EQVRBCiAqIC0gI05PTl9MSU5FQVJfREFUQQogKiAtICNMSU5FQVJfUENNX0RBVEFfUEFDS0VEX0lOXzYwOTU4CiAqIC0gI05PTl9MSU5FQVJfREFUQV9QQUNLRURfSU5fNjA5NTgKICovCgkJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgovKgogKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIFBDTSBpbnRlcmZhY2UKICovCgojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9TUERJRl9DT05GSUcgMHgxCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NQRElGX0NIX1NUQVRVU19DT05GSUcgMHgxCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NQRElGX0NMS19DT05GSUcgMHgxCiNkZWZpbmUgQUZFX0NIX1NUQVRVU19BIDEKI2RlZmluZSBBRkVfQ0hfU1RBVFVTX0IgMgoKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BESUZfQ09ORklHIDB4MDAwMTAyNDQKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0hfU1RBVFVTX0NPTkZJRyAweDAwMDEwMjQ1CiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQRElGX0NMS19DT05GSUcgMHgwMDAxMDI0NgoKI2RlZmluZSBBRkVfUE9SVF9DTEtfUk9PVF9MUEFQTEwgMHgzCiNkZWZpbmUgQUZFX1BPUlRfQ0xLX1JPT1RfTFBBUTZQTEwgICAweDQKCnN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2ZnIHsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgU1BESUYKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fU1BESUZfQ09ORklHCiAqLwoJdTMyCXNwZGlmX2NmZ19taW5vcl92ZXJzaW9uOwoKLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMjJfMDVLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzMySwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80NF8xSwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE3Nl80SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xOTJLCiAqLwoJdTMyCXNhbXBsZV9yYXRlOwoKLyogZGF0YSBmb3JtYXQKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX0xJTkVBUl9QQ01fREFUQQogKiAtICNBRkVfTk9OX0xJTkVBUl9EQVRBCiAqLwoJdTE2CWRhdGFfZm9ybWF0OwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IHRoZSBwb3J0CiAqIC0gUENNIC0gMSwgQ29tcHJlc3NlZCBDYXNlIC0gMgogKi8KCXUxNgludW1fY2hhbm5lbHM7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgl1MTYJYml0X3dpZHRoOwovKiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uICovCgl1MTYJcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NwZGlmX2NoX3N0YXR1c19jZmcgewoJdTMyIGNoX3N0YXR1c19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiBjaGFubmVsCiAqIHN0YXR1cyBjb25maWd1cmF0aW9uLiBDdXJyZW50IHN1cHBvcnRlZCB2ZXJzaW9uIGlzIDEKICovCgoJdTMyIHN0YXR1c190eXBlOwovKiBJbmRpY2F0ZSBpZiB0aGUgY2hhbm5lbCBzdGF0dXMgaXMgZm9yIGNoYW5uZWwgQSBvciBCCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9DSF9TVEFUVVNfQQogKiAtICNBRkVfQ0hfU1RBVFVTX0IKICovCgoJdTggc3RhdHVzX2JpdHNbMjRdOwovKiBDaGFubmVsIHN0YXR1cyAtIDE5MiBiaXRzIGZvciBjaGFubmVsCiAqIEJ5dGUgb3JkZXJpbmcgYXMgZGVmaW5lZCBieSBJRUM2MDk1OC0zCiAqLwoKCXU4IHN0YXR1c19tYXNrWzI0XTsKLyogQ2hhbm5lbCBzdGF0dXMgd2l0aCBtYXNrIGJpdHMgMSB3aWxsIGJlIGFwcGxpZWQuCiAqIEJ5dGUgb3JkZXJpbmcgYXMgZGVmaW5lZCBieSBJRUM2MDk1OC0zCiAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9pZF9zcGRpZl9jbGtfY2ZnIHsKCXUzMiBjbGtfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgU1BESUYKICogaW50ZXJmYWNlIGNsb2NrIGNvbmZpZ3VyYXRpb24uIEN1cnJlbnQgc3VwcG9ydGVkIHZlcnNpb24KICogaXMgMQogKi8KCgl1MzIgY2xrX3ZhbHVlOwovKiBTcGVjaWZpZXMgdGhlIGNsb2NrIGZyZXF1ZW5jeSBpbiBIeiB0byBzZXQKICogU3VwcG9ydGVkIHZhbHVlczoKICogMCAtIERpc2FibGUgdGhlIGNsb2NrCiAqIDIgKGJ5cGhhc2UpICogMzIgKDYwOTU4IHN1YmZyYW1lIHNpemUpICogc2FtcGxpbmcgcmF0ZSAqIDIKICogKGNoYW5uZWxzIEEgYW5kIEIpCiAqLwoKCXUzMiBjbGtfcm9vdDsKLyogU3BlY2lmaWVzIFNQRElGIHJvb3QgY2xrIHNvdXJjZQogKiBTdXBwb3J0ZWQgVmFsdWVzOgogKiAtICNBRkVfUE9SVF9DTEtfUk9PVF9MUEFQTEwKICogLSAjQUZFX1BPUlRfQ0xLX1JPT1RfTFBBUTZQTEwKICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwZGlmX2Nsa19jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgICAgICAgICAgICAgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgIHBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zcGRpZl9jbGtfY2ZnIGNsa19jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwZGlmX2Noc3RhdHVzX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgICAgICAgICAgICAgICBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiAgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICAgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NwZGlmX2NoX3N0YXR1c19jZmcgY2hfc3RhdHVzOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcGRpZl9wb3J0X2NvbmZpZyB7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NwZGlmX2NmZyAgICAgICAgICAgIGNmZzsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2hfc3RhdHVzX2NmZyAgY2hfc3RhdHVzOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfUENNX0NPTkZJRyAgICAgICAgMHgwMDAxMDIwRQojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9QQ01fQ09ORklHCTB4MQovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIGF1eGlsaWFyeSBQQ00gc3luY2hyb25pemF0aW9uIHNpZ25hbAogKiBwcm92aWRlZCBieSBhbiBleHRlcm5hbCBzb3VyY2UuCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9QQ01fU1lOQ19TUkNfRVhURVJOQUwgMHgwCi8qCUVudW1lcmF0aW9uIGZvciB0aGUgYXV4aWxpYXJ5IFBDTSBzeW5jaHJvbml6YXRpb24gc2lnbmFsCiAqIHByb3ZpZGVkIGJ5IGFuIGludGVybmFsIHNvdXJjZS4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX1NZTkNfU1JDX0lOVEVSTkFMICAweDEKLyoJRW51bWVyYXRpb24gZm9yIHRoZSBQQ00gY29uZmlndXJhdGlvbiBhdXhfbW9kZSBwYXJhbWV0ZXIsCiAqIHdoaWNoIGNvbmZpZ3VyZXMgdGhlIGF1eGlsaWFyeSBQQ00gaW50ZXJmYWNlIHRvIHVzZQogKiBzaG9ydCBzeW5jaHJvbml6YXRpb24uCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9BVVhfTU9ERV9QQ00gIDB4MAovKgogKiBFbnVtZXJhdGlvbiBmb3IgdGhlIFBDTSBjb25maWd1cmF0aW9uIGF1eF9tb2RlIHBhcmFtZXRlciwKICogd2hpY2ggY29uZmlndXJlcyB0aGUgYXV4aWxpYXJ5IFBDTSBpbnRlcmZhY2UgdG8gdXNlIGxvbmcKICogc3luY2hyb25pemF0aW9uLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQVVYX01PREVfQVVYICAgIDB4MQovKgogKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gZnJhbWUgdG8gOC4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzggIDB4MAovKgogKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gZnJhbWUgdG8gMTYuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8xNiAgIDB4MQoKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIGZyYW1lIHRvIDMyLiovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzMyIDB4MgoKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIGZyYW1lIHRvIDY0LiovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzY0ICAgMHgzCgovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gZnJhbWUgdG8gMTI4LiovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzEyOCAweDQKCi8qCUVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBmcmFtZSB0byAyNTYuKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMjU2IDB4NQoKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uCiAqIHF1YW50eXBlIHBhcmFtZXRlciB0byBBLWxhdyB3aXRoIG5vIHBhZGRpbmcuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9BTEFXX05PUEFERElORyAweDAKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBQQ00gY29uZmlndXJhdGlvbiBxdWFudHlwZQogKiBwYXJhbWV0ZXIgdG8gbXUtbGF3IHdpdGggbm8gcGFkZGluZy4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX01VTEFXX05PUEFERElORyAweDEKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIHF1YW50eXBlCiAqIHBhcmFtZXRlciB0byBsaW5lYXIgd2l0aCBubyBwYWRkaW5nLgogKi8KI2RlZmluZSBBRkVfUE9SVF9QQ01fTElORUFSX05PUEFERElORyAweDIKLyoJRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uIHF1YW50eXBlCiAqIHBhcmFtZXRlciB0byBBLWxhdyB3aXRoIHBhZGRpbmcuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9BTEFXX1BBRERJTkcgIDB4MwovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gcXVhbnR5cGUKICogcGFyYW1ldGVyIHRvIG11LWxhdyB3aXRoIHBhZGRpbmcuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9NVUxBV19QQURESU5HIDB4NAovKglFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24gcXVhbnR5cGUKICogcGFyYW1ldGVyIHRvIGxpbmVhciB3aXRoIHBhZGRpbmcuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9MSU5FQVJfUEFERElORyAweDUKLyoJRW51bWVyYXRpb24gZm9yIGRpc2FibGluZyB0aGUgUENNIGNvbmZpZ3VyYXRpb24KICogY3RybF9kYXRhX291dF9lbmFibGUgcGFyYW1ldGVyLgogKiBUaGUgUENNIGJsb2NrIGlzIHRoZSBvbmx5IG1hc3Rlci4KICovCiNkZWZpbmUgQUZFX1BPUlRfUENNX0NUUkxfREFUQV9PRV9ESVNBQkxFIDB4MAovKgogKiBFbnVtZXJhdGlvbiBmb3IgZW5hYmxpbmcgdGhlIFBDTSBjb25maWd1cmF0aW9uCiAqIGN0cmxfZGF0YV9vdXRfZW5hYmxlIHBhcmFtZXRlci4gVGhlIFBDTSBibG9jayBzaGFyZXMKICogdGhlIHNpZ25hbCB3aXRoIG90aGVyIG1hc3RlcnMuCiAqLwojZGVmaW5lIEFGRV9QT1JUX1BDTV9DVFJMX0RBVEFfT0VfRU5BQkxFICAweDEKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BBUkFNX0lEX1BDTV9DT05GSUcgY29tbWFuZCdzCiAqIChQQ00gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIpLgogKi8KCnN0cnVjdCBhZmVfcGFyYW1faWRfcGNtX2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBwY21fY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEFVWCBQQ00KICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fUENNX0NPTkZJRwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBhdXhfbW9kZTsKLyogUENNIHN5bmNocm9uaXphdGlvbiBzZXR0aW5nLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9QQ01fQVVYX01PREVfUENNCiAqIC0gI0FGRV9QT1JUX1BDTV9BVVhfTU9ERV9BVVgKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgc3luY19zcmM7Ci8qIFN5bmNocm9uaXphdGlvbiBzb3VyY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX1BDTV9TWU5DX1NSQ19FWFRFUk5BTAogKiAtICNBRkVfUE9SVF9QQ01fU1lOQ19TUkNfSU5URVJOQUwKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgZnJhbWVfc2V0dGluZzsKLyogTnVtYmVyIG9mIGJpdHMgcGVyIGZyYW1lLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfOAogKiAtICNBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMTYKICogLSAjQUZFX1BPUlRfUENNX0JJVFNfUEVSX0ZSQU1FXzMyCiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV82NAogKiAtICNBRkVfUE9SVF9QQ01fQklUU19QRVJfRlJBTUVfMTI4CiAqIC0gI0FGRV9QT1JUX1BDTV9CSVRTX1BFUl9GUkFNRV8yNTYKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcXVhbnR5cGU7Ci8qIFBDTSBxdWFudGl6YXRpb24gdHlwZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfUENNX0FMQVdfTk9QQURESU5HCiAqIC0gI0FGRV9QT1JUX1BDTV9NVUxBV19OT1BBRERJTkcKICogLSAjQUZFX1BPUlRfUENNX0xJTkVBUl9OT1BBRERJTkcKICogLSAjQUZFX1BPUlRfUENNX0FMQVdfUEFERElORwogKiAtICNBRkVfUE9SVF9QQ01fTVVMQVdfUEFERElORwogKiAtICNBRkVfUE9SVF9QQ01fTElORUFSX1BBRERJTkcKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgY3RybF9kYXRhX291dF9lbmFibGU7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBQQ00gYmxvY2sgc2hhcmVzIHRoZSBkYXRhLW91dAogKiBzaWduYWwgdG8gdGhlIGRyaXZlIHdpdGggb3RoZXIgbWFzdGVycy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfUENNX0NUUkxfREFUQV9PRV9ESVNBQkxFCiAqIC0gI0FGRV9QT1JUX1BDTV9DVFJMX0RBVEFfT0VfRU5BQkxFCiAqLwoJCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gNAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBzbG90X251bWJlcl9tYXBwaW5nWzRdOwovKiBTcGVjaWZpZXMgdGhlIHNsb3QgbnVtYmVyIGZvciB0aGUgZWFjaCBjaGFubmVsIGluCiAqIG11bHRpIGNoYW5uZWwgc2NlbmFyaW8uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gMzIKICovCn0gX19wYWNrZWQ7CgovKgogKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIERJR0kgTUlDIGludGVyZmFjZQogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfRElHSV9NSUNfQ09ORklHCTB4MDAwMTAyMEYKLyogIFRoaXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgbmV3CiAqICAgYWRkaXRpb25zIHRvIHRoZSBjb25maWcgaW50ZXJmYWNlIGluIGZ1dHVyZSBpbiBiYWNrd2FyZAogKiAgIGNvbXBhdGlibGUgbWFubmVyLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fRElHSV9NSUNfQ09ORklHIDB4MQoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byBsZWZ0IDAuCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9ESUdJX01JQ19NT0RFX0xFRlQwICAweDEKCi8qRW51bWVyYXRpb24gZm9yIHNldHRpbmcgdGhlIGRpZ2l0YWwgbWljIGNvbmZpZ3VyYXRpb24KICogY2hhbm5lbF9tb2RlIHBhcmFtZXRlciB0byByaWdodCAwLgogKi8KCgojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfUklHSFQwICAweDIKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBkaWdpdGFsIG1pYyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8gbGVmdCAxLgogKi8KCiNkZWZpbmUgQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9MRUZUMSAgMHgzCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgZGlnaXRhbCBtaWMgY29uZmlndXJhdGlvbgogKiBjaGFubmVsX21vZGUgcGFyYW1ldGVyIHRvIHJpZ2h0IDEuCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9ESUdJX01JQ19NT0RFX1JJR0hUMSAweDQKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBkaWdpdGFsIG1pYyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8gc3RlcmVvIDAuCiAqLwojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfU1RFUkVPMCAgMHg1CgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgZGlnaXRhbCBtaWMgY29uZmlndXJhdGlvbgogKiBjaGFubmVsX21vZGUgcGFyYW1ldGVyIHRvIHN0ZXJlbyAxLgogKi8KCgojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfU1RFUkVPMSAgICAweDYKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBkaWdpdGFsIG1pYyBjb25maWd1cmF0aW9uCiAqIGNoYW5uZWxfbW9kZSBwYXJhbWV0ZXIgdG8gcXVhZC4KICovCgojZGVmaW5lIEFGRV9QT1JUX0RJR0lfTUlDX01PREVfUVVBRCAgICAgMHg3CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9ESUdJX01JQ19DT05GSUcgY29tbWFuZCdzCiAqIChESUdJIE1JQyBjb25maWd1cmF0aW9uCiAqIHBhcmFtZXRlcikuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2RpZ2lfbWljX2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBkaWdpX21pY19jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgRElHSSBNaWMKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fRElHSV9NSUNfQ09ORklHCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2CiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbW9kZTsKLyogRGlnaXRhbCBtaWMgYW5kIG11bHRpY2hhbm5lbCBvcGVyYXRpb24uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FGRV9QT1JUX0RJR0lfTUlDX01PREVfTEVGVDAKICogLSAjQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9SSUdIVDAKICogLSAjQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9MRUZUMQogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX1JJR0hUMQogKiAtICNBRkVfUE9SVF9ESUdJX01JQ19NT0RFX1NURVJFTzAKICogLSAjQUZFX1BPUlRfRElHSV9NSUNfTU9ERV9TVEVSRU8xCiAqIC0gI0FGRV9QT1JUX0RJR0lfTUlDX01PREVfUVVBRAogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTZLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwogKi8KfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgSERNSSBpbnRlcmZhY2UgKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfSERNSV9DT05GSUcgICAgIDB4MDAwMTAyMTAKCi8qIFRoaXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgbmV3CiAqIGFkZGl0aW9ucyB0byB0aGUgY29uZmlnIGludGVyZmFjZSBpbiBmdXR1cmUgaW4gYmFja3dhcmQKICogY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9IRE1JX0NPTkZJRyAweDEKCi8qIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfSERNSV9DT05GSUcgY29tbWFuZCwKICogd2hpY2ggY29uZmlndXJlcyBhIG11bHRpY2hhbm5lbCBIRE1JIGF1ZGlvIGludGVyZmFjZS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfaGRtaV9tdWx0aV9jaGFuX2F1ZGlvX2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBoZG1pX2NmZ19taW5vcl92ZXJzaW9uOwovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBIRE1JCiAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAjQUZFX0FQSV9WRVJTSU9OX0hETUlfQ09ORklHCiAqLwoKdTE2ICAgICAgICAgICAgICAgICAgZGF0YXR5cGU7Ci8qIGRhdGEgdHlwZQogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNMSU5FQVJfUENNX0RBVEEKICogLSAjTk9OX0xJTkVBUl9EQVRBCiAqIC0gI0xJTkVBUl9QQ01fREFUQV9QQUNLRURfSU5fNjA5NTgKICogLSAjTk9OX0xJTkVBUl9EQVRBX1BBQ0tFRF9JTl82MDk1OAogKi8KCnUxNiAgICAgICAgICAgICAgICAgIGNoYW5uZWxfYWxsb2NhdGlvbjsKLyogSERNSSBjaGFubmVsIGFsbG9jYXRpb24gaW5mb3JtYXRpb24gZm9yIHByb2dyYW1taW5nIGFuIEhETUkKICogZnJhbWUuIFRoZSBkZWZhdWx0IGlzIDAgKFN0ZXJlbykuCiAqCiAqIFRoaXMgaW5mb3JtYXRpb24gaXMgZGVmaW5lZCBpbiB0aGUgSERNSSBzdGFuZGFyZCwgQ0VBIDg2MS1ECiAqIChyZWZlciB0byBAeGh5cGVycmVme1MxLFtTMV19KS4gVGhlIG51bWJlciBvZiBjaGFubmVscyBpcyBhbHNvCiAqIGluZmVycmVkIGZyb20gdGhpcyBwYXJhbWV0ZXIuCiAqLwoKCnUzMiAgICAgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SwogKiAtIDIyMDUwLCA0NDEwMCwgMTc2NDAwIGZvciBjb21wcmVzc2VkIHN0cmVhbXMKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoJCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogVGhpcyBmaWVsZCBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBCVCBvciBGTShSSVZBKSBpbnRlcmZhY2UgKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfSU5URVJOQUxfQlRfRk1fQ09ORklHICAweDAwMDEwMjExCgovKiBUaGlzIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgdXNlZCB0byBoYW5kbGUgdGhlIG5ldwogKiBhZGRpdGlvbnMgdG8gdGhlIGNvbmZpZyBpbnRlcmZhY2UgaW4gZnV0dXJlIGluIGJhY2t3YXJkCiAqIGNvbXBhdGlibGUgbWFubmVyLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fSU5URVJOQUxfQlRfRk1fQ09ORklHCTB4MQoKLyogUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9JTlRFUk5BTF9CVF9GTV9DT05GSUcKICogY29tbWFuZCdzIEJUIHZvaWNlL0JUIGF1ZGlvL0ZNIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9pbnRlcm5hbF9idF9mbV9jZmcgewoJdTMyICAgICAgICAgICAgICAgICAgYnRfZm1fY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEJUIGFuZCBGTQogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9JTlRFUk5BTF9CVF9GTV9DT05GSUcKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gMgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsgKG9ubHkgZm9yIEJUU0NPKQogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksgKG9ubHkgZm9yIEJUU0NPKQogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsgKEZNIGFuZCBBMkRQKQogKi8KfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgU0xJTUJVUyBpbnRlcmZhY2UgdXNpbmcKICogc2hhcmVkIGNoYW5uZWwgYXBwcm9hY2guCiAqLwoKCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NMSU1CVVNfQ09ORklHICAgIDB4MDAwMTAyMTIKCi8qIFRoaXMgdmVyc2lvbiBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGhhbmRsZSB0aGUgbmV3CiAqIGFkZGl0aW9ucyB0byB0aGUgY29uZmlnIGludGVyZmFjZSBpbiBmdXR1cmUgaW4gYmFja3dhcmQKICogY29tcGF0aWJsZSBtYW5uZXIuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9TTElNQlVTX0NPTkZJRyAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIFNMSU1idXMgZGV2aWNlIElEIDEuICovCiNkZWZpbmUgQUZFX1NMSU1CVVNfREVWSUNFXzEgICAgICAgICAgIDB4MAoKLyogRW51bWVyYXRpb24gZm9yIHNldHRpbmcgU0xJTWJ1cyBkZXZpY2UgSUQgMi4gKi8KI2RlZmluZSBBRkVfU0xJTUJVU19ERVZJQ0VfMiAgICAgICAgICAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBTTElNYnVzIGRhdGEgZm9ybWF0cy4gKi8KI2RlZmluZSBBRkVfU0JfREFUQV9GT1JNQVRfTk9UX0lORElDQVRFRCAweDAKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzdHJlYW1zIHBlcgogKiBkZXZpY2UuCiAqLwoKI2RlZmluZSBBRkVfUE9SVF9NQVhfQVVESU9fQ0hBTl9DTlQJMHg4CgovKiBQYXlsb2FkIG9mIHRoZSAjQUZFX1BPUlRfQ01EX1NMSU1CVVNfQ09ORklHIGNvbW1hbmQncyBTTElNYnVzCiAqIHBvcnQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiAqLwoKc3RydWN0IGFmZV9wYXJhbV9pZF9zbGltYnVzX2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBzYl9jZmdfbWlub3JfdmVyc2lvbjsKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgU0xJTUJVUwogKiBjb25maWd1cmF0aW9uIGludGVyZmFjZS4KICogU3VwcG9ydGVkIHZhbHVlczogI0FGRV9BUElfVkVSU0lPTl9TTElNQlVTX0NPTkZJRwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBzbGltYnVzX2Rldl9pZDsKLyogU0xJTWJ1cyBoYXJkd2FyZSBkZXZpY2UgSUQsIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGhhbmRsZQogKiBtdWx0aXBsZSBTTElNYnVzIGhhcmR3YXJlIGJsb2Nrcy4KICogU3VwcG9ydGVkIHZhbHVlczogLSAjQUZFX1NMSU1CVVNfREVWSUNFXzEgLSAjQUZFX1NMSU1CVVNfREVWSUNFXzIKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIGJpdF93aWR0aDsKLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICBkYXRhX2Zvcm1hdDsKLyogRGF0YSBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBTTElNYnVzIGhhcmR3YXJlLiBUaGUgZGVmYXVsdCBpcwogKiAwICgjQUZFX1NCX0RBVEFfRk9STUFUX05PVF9JTkRJQ0FURUQpLCB3aGljaCBpbmRpY2F0ZXMgdGhlCiAqIGhhcmR3YXJlIGRvZXMgbm90IHBlcmZvcm0gYW55IGZvcm1hdCBjb252ZXJzaW9ucyBiZWZvcmUgdGhlIGRhdGEKICogdHJhbnNmZXIuCiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAjQUZFX1BPUlRfTUFYX0FVRElPX0NIQU5fQ05UCiAqLwoKCXU4ICBzaGFyZWRfY2hfbWFwcGluZ1tBRkVfUE9SVF9NQVhfQVVESU9fQ0hBTl9DTlRdOwovKiBNYXBwaW5nIG9mIHNoYXJlZCBjaGFubmVsIElEcyAoMTI4IHRvIDI1NSkgdG8gd2hpY2ggdGhlCiAqIG1hc3RlciBwb3J0IGlzIHRvIGJlIGNvbm5lY3RlZC4KICogU2hhcmVkX2NoYW5uZWxfbWFwcGluZ1tpXSByZXByZXNlbnRzIHRoZSBzaGFyZWQgY2hhbm5lbCBhc3NpZ25lZAogKiBmb3IgYXVkaW8gY2hhbm5lbCBpIGluIG11bHRpY2hhbm5lbCBhdWRpbyBkYXRhLgogKi8KCgl1MzIgICAgICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLCiAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzk2SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xOTJLCiAqLwp9IF9fcGFja2VkOwoKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCBieSBBRkVfUEFSQU1fSURfVVNCX0FVRElPX0RFVl9QQVJBTVMgdG8gY29uZmlndXJlCiAqIFVTQiBhdWRpbyBkZXZpY2UgcGFyYW1ldGVyLiBJdCBzaG91bGQgYmUgdXNlZCB3aXRoCiAqIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRQogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfVVNCX0FVRElPX0RFVl9QQVJBTVMgICAgMHgwMDAxMDJBNQoKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCB0byBzZXQgdGhlIGVuZGlhbm5lc3MgdmFsdWUgZm9yIHRoZQogKiBVU0IgYXVkaW8gZGV2aWNlLiBJdCBzaG91bGQgYmUgdXNlZCB3aXRoCiAqIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRQogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfVVNCX0FVRElPX0RFVl9MUENNX0ZNVCAweDAwMDEwMkFBCgovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIFVTQiBhdWRpbyAgY29uZmlndXJhdGlvbiAqLwojZGVmaW5lIEFGRV9BUElfTUlOSU9SX1ZFUlNJT05fVVNCX0FVRElPX0NPTkZJRyAweDEKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCB0byBzZXQgdGhlIGxhdGVuY3kgbW9kZSBvZiB0aGUKICogVVNCIGF1ZGlvIGRldmljZS4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1BPUlRfTEFURU5DWV9NT0RFX0NPTkZJRyAgMHgwMDAxMDJCMwoKLyogTWlub3IgdmVyc2lvbiB1c2VkIGZvciB0cmFja2luZyBVU0IgYXVkaW8gbGF0ZW5jeSBtb2RlICovCiNkZWZpbmUgQUZFX0FQSV9NSU5PUl9WRVJTSU9OX1VTQl9BVURJT19MQVRFTkNZX01PREUgMHgxCgovKiBTdXBwb3J0ZWQgQUZFIHBvcnQgbGF0ZW5jeSBtb2RlcyAqLwojZGVmaW5lIEFGRV9QT1JUX0RFRkFVTFRfTEFURU5DWV9NT0RFICAgICAweDAKI2RlZmluZSBBRkVfUE9SVF9MT1dfTEFURU5DWV9NT0RFICAgICAgICAgMHgxCgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfVVNCX0FVRElPX0RFVl9QQVJBTVMgcGFyYW1ldGVyIHVzZWQgYnkKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF91c2JfYXVkaW9fZGV2X3BhcmFtcyB7Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVVNCIGF1ZGlvIGRldmljZSBwYXJhbWV0ZXIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEFGRV9BUElfTUlOSU9SX1ZFUlNJT05fVVNCX0FVRElPX0NPTkZJRwogKi8KCXUzMiAgICAgICAgICAgICAgICAgIGNmZ19taW5vcl92ZXJzaW9uOwovKiBUb2tlbiBvZiBhY3R1YWwgZW5kIFVTQiBhZHVpbyBkZXZpY2UgKi8KCXUzMiAgICAgICAgICAgICAgICAgIGRldl90b2tlbjsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1faWRfdXNiX2F1ZGlvX2Rldl9scGNtX2ZtdCB7Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVVNCIGF1ZGlvIGRldmljZSBwYXJhbWV0ZXIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEFGRV9BUElfTUlOSU9SX1ZFUlNJT05fVVNCX0FVRElPX0NPTkZJRwogKi8KCXUzMiAgICAgICAgICAgICAgICAgIGNmZ19taW5vcl92ZXJzaW9uOwovKiBFbmRpYW5uZXNzIG9mIGFjdHVhbCBlbmQgVVNCIGF1ZGlvIGRldmljZSAqLwoJdTMyICAgICAgICAgICAgICAgICAgZW5kaWFuOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9pZF91c2JfYXVkaW9fZGV2X2xhdGVuY3lfbW9kZSB7Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVVNCIGF1ZGlvIGRldmljZSBwYXJhbWV0ZXIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEFGRV9BUElfTUlOT1JfVkVSU0lPTl9VU0JfQVVESU9fTEFURU5DWV9NT0RFCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgbWlub3JfdmVyc2lvbjsKLyogbGF0ZW5jeSBtb2RlIGZvciB0aGUgVVNCIGF1ZGlvIGRldmljZSAqLwoJdTMyICAgICAgICAgICAgICAgICAgbW9kZTsKfSBfX3BhY2tlZDsKCgoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5IEFGRV9QQVJBTV9JRF9VU0JfQVVESU9fQ09ORklHIHRvIGNvbmZpZ3VyZQogKiBVU0IgYXVkaW8gaW50ZXJmYWNlLiBJdCBzaG91bGQgYmUgdXNlZCB3aXRoIEFGRV9NT0RVTEVfQVVESU9fREVWX0lOVEVSRkFDRQogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfVVNCX0FVRElPX0NPTkZJRyAgICAweDAwMDEwMkE0CgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfVVNCX0FVRElPX0NPTkZJRyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19jZmcgewovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIFVTQiBhdWRpbyBkZXZpY2UgY29uZmlndXJhdGlvbi4KICogU3VwcG9ydGVkIHZhbHVlczogQUZFX0FQSV9NSU5JT1JfVkVSU0lPTl9VU0JfQVVESU9fQ09ORklHCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2ZnX21pbm9yX3ZlcnNpb247Ci8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV8xMTAyNQogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzEySwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzE2SwogKiAtIEFGRV9QT1JUX1NBTVBMRV9SQVRFXzIyMDUwCiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMjRLCiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfMzJLCiAqIC0gQUZFX1BPUlRfU0FNUExFX1JBVEVfNDRQMUsKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV85NksKICogLSBBRkVfUE9SVF9TQU1QTEVfUkFURV8xOTJLCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgl1MTYgICAgICAgICAgICAgICAgICBiaXRfd2lkdGg7Ci8qIE51bWJlciBvZiBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMSBhbmQgMgogKi8KCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogRGF0YSBmb3JtYXQgc3VwcG9ydGVkIGJ5IHRoZSBVU0IuIFRoZSBzdXBwb3J0ZWQgdmFsdWUgaXMKICogMCAoI0FGRV9VU0JfQVVESU9fREFUQV9GT1JNQVRfTElORUFSX1BDTSkuCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgZGF0YV9mb3JtYXQ7Ci8qIHRoaXMgZmllbGQgbXVzdCBiZSAwICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogZGV2aWNlIHRva2VuIG9mIGFjdHVhbCBlbmQgVVNCIGFkdWlvIGRldmljZSAqLwoJdTMyICAgICAgICAgICAgICAgICAgZGV2X3Rva2VuOwovKiBlbmRpYW5uZXNzIG9mIHRoaXMgaW50ZXJmYWNlICovCgl1MzIgICAgICAgICAgICAgICAgICBlbmRpYW47Ci8qIHNlcnZpY2UgaW50ZXJ2YWwgKi8KCXUzMiAgICAgICAgICAgICAgICAgIHNlcnZpY2VfaW50ZXJ2YWw7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3VzYl9hdWRpb19kZXZfcGFyYW1fY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyICAgIHBkYXRhOwoJdW5pb24gewoJCXN0cnVjdCBhZmVfcGFyYW1faWRfdXNiX2F1ZGlvX2Rldl9wYXJhbXMgdXNiX2RldjsKCQlzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19kZXZfbHBjbV9mbXQgbHBjbV9mbXQ7CgkJc3RydWN0IGFmZV9wYXJhbV9pZF91c2JfYXVkaW9fZGV2X2xhdGVuY3lfbW9kZSBsYXRlbmN5X2NvbmZpZzsKCX07Cn0gX19wYWNrZWQ7CgovKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIFJlYWwgVGltZSBQcm94eSBpbnRlcmZhY2UuICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1JUX1BST1hZX0NPTkZJRyAweDAwMDEwMjEzCgovKiBUaGlzIHZlcnNpb24gaW5mb3JtYXRpb24gaXMgdXNlZCB0byBoYW5kbGUgdGhlIG5ldwogKiBhZGRpdGlvbnMgdG8gdGhlIGNvbmZpZyBpbnRlcmZhY2UgaW4gZnV0dXJlIGluIGJhY2t3YXJkCiAqIGNvbXBhdGlibGUgbWFubmVyLgogKi8KI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fUlRfUFJPWFlfQ09ORklHIDB4MQoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfUlRfUFJPWFlfQ09ORklHCiAqIGNvbW1hbmQgKHJlYWwtdGltZSBwcm94eSBwb3J0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyKS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfcnRfcHJveHlfcG9ydF9jZmcgewoJdTMyICAgICAgICAgICAgICAgICAgcnRfcHJveHlfY2ZnX21pbm9yX3ZlcnNpb247Ci8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgcnQtcHJveHkKICogY29uZmlnIGludGVyZmFjZS4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwovKiBCaXQgd2lkdGggb2YgdGhlIHNhbXBsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgaW50ZXJsZWF2ZWQ7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBkYXRhIGV4Y2hhbmdlZCBiZXR3ZWVuIHRoZSBBRkUKICogaW50ZXJmYWNlIGFuZCByZWFsLXRpbWUgcG9ydCBpcyBpbnRlcmxlYXZlZC4KICogU3VwcG9ydGVkIHZhbHVlczogLSAwIC0tIE5vbi1pbnRlcmxlYXZlZCAoc2FtcGxlcyBmcm9tIGVhY2gKICogY2hhbm5lbCBhcmUgY29udGlndW91cyBpbiB0aGUgYnVmZmVyKSAtIDEgLS0gSW50ZXJsZWF2ZWQKICogKGNvcnJlc3BvbmRpbmcgc2FtcGxlcyBmcm9tIGVhY2ggaW5wdXQgY2hhbm5lbCBhcmUgaW50ZXJsZWF2ZWQKICogd2l0aGluIHRoZSBidWZmZXIpCiAqLwoKCgl1MTYgICAgICAgICAgICAgICAgICBmcmFtZV9zaXplOwovKiBTaXplIG9mIHRoZSBmcmFtZXMgdGhhdCBhcmUgdXNlZCBmb3IgUENNIGV4Y2hhbmdlcyB3aXRoIHRoaXMKICogcG9ydC4KICogU3VwcG9ydGVkIHZhbHVlczogPiAwLCBpbiBieXRlcwogKiBGb3IgZXhhbXBsZSwgNSBtcyBidWZmZXJzIG9mIDE2IGJpdHMgYW5kIDE2IGtIeiBzdGVyZW8gc2FtcGxlcwogKiBpcyA1IG1zICogMTYgc2FtcGxlcy9tcyAqIDIgYnl0ZXMvc2FtcGxlICogMiBjaGFubmVscyA9IDMyMAogKiBieXRlcy4KICovCgl1MTYgICAgICAgICAgICAgICAgICBqaXR0ZXJfYWxsb3dhbmNlOwovKiBDb25maWd1cmVzIHRoZSBhbW91bnQgb2Ygaml0dGVyIHRoYXQgdGhlIHBvcnQgd2lsbCBhbGxvdy4KICogU3VwcG9ydGVkIHZhbHVlczogPiAwCiAqIEZvciBleGFtcGxlLCBpZiArLy0xMCBtcyBvZiBqaXR0ZXIgaXMgYW50aWNpcGF0ZWQgaW4gdGhlIHRpbWluZwogKiBvZiBzZW5kaW5nIGZyYW1lcyB0byB0aGUgcG9ydCwgYW5kIHRoZSBjb25maWd1cmF0aW9uIGlzIDE2IGtIegogKiBtb25vIHdpdGggMTYtYml0IHNhbXBsZXMsIHRoaXMgZmllbGQgaXMgMTAgbXMgKiAxNiBzYW1wbGVzL21zICogMgogKiBieXRlcy9zYW1wbGUgPSAzMjAuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGxvd193YXRlcl9tYXJrOwovKiBMb3cgd2F0ZXJtYXJrIGluIGJ5dGVzIChpbmNsdWRpbmcgYWxsIGNoYW5uZWxzKS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIERvIG5vdCBzZW5kIGFueSBsb3cgd2F0ZXJtYXJrIGV2ZW50cwogKiAtID4gMCAtLSBMb3cgd2F0ZXJtYXJrIGZvciB0cmlnZ2VyaW5nIGFuIGV2ZW50CiAqIElmIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gaW50ZXJuYWwgY2lyY3VsYXIgYnVmZmVyIGlzIGxvd2VyCiAqIHRoYW4gdGhpcyBsb3dfd2F0ZXJfbWFyayBwYXJhbWV0ZXIsIGEgTE9XX1dBVEVSX01BUksgZXZlbnQgaXMKICogc2VudCB0byBhcHBsaWNhdGlvbnMgKHZpYSB0aGUgI0FGRV9FVkVOVF9SVF9QUk9YWV9QT1JUX1NUQVRVUwogKiBldmVudCkuCiAqIFVzZSBvZiB3YXRlcm1hcmsgZXZlbnRzIGlzIG9wdGlvbmFsIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGhpZ2hfd2F0ZXJfbWFyazsKLyogSGlnaCB3YXRlcm1hcmsgaW4gYnl0ZXMgKGluY2x1ZGluZyBhbGwgY2hhbm5lbHMpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRG8gbm90IHNlbmQgYW55IGhpZ2ggd2F0ZXJtYXJrIGV2ZW50cwogKiAtID4gMCAtLSBIaWdoIHdhdGVybWFyayBmb3IgdHJpZ2dlcmluZyBhbiBldmVudAogKiBJZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIGludGVybmFsIGNpcmN1bGFyIGJ1ZmZlciBleGNlZWRzCiAqIFRPVEFMX0NJUkNfQlVGX1NJWkUgbWludXMgaGlnaF93YXRlcl9tYXJrLCBhIGhpZ2ggd2F0ZXJtYXJrIGV2ZW50CiAqIGlzIHNlbnQgdG8gYXBwbGljYXRpb25zICh2aWEgdGhlICNBRkVfRVZFTlRfUlRfUFJPWFlfUE9SVF9TVEFUVVMKICogZXZlbnQpLgogKiBUaGUgdXNlIG9mIHdhdGVybWFyayBldmVudHMgaXMgb3B0aW9uYWwgYW5kIGZvciBkZWJ1Z2dpbmcKICogcHVycG9zZXMuCiAqLwoKCgl1MzIJCQkJCXNhbXBsZV9yYXRlOwovKiBTYW1wbGluZyByYXRlIG9mIHRoZSBwb3J0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwogKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvICNBRkVfUE9SVF9NQVhfQVVESU9fQ0hBTl9DTlQKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBGb3IgMzIgYml0IGFsaWdubWVudC4gKi8KfSBfX3BhY2tlZDsKCgovKiBUaGlzIHBhcmFtIGlkIGlzIHVzZWQgdG8gY29uZmlndXJlIHRoZSBQc2V1ZG9wb3J0IGludGVyZmFjZSAqLwoKI2RlZmluZSBBRkVfUEFSQU1fSURfUFNFVURPX1BPUlRfQ09ORklHCTB4MDAwMTAyMTkKCi8qIFZlcnNpb24gaW5mb3JtYXRpb24gdXNlZCB0byBoYW5kbGUgZnV0dXJlIGFkZGl0aW9ucyB0byB0aGUgY29uZmlndXJhdGlvbgogKiBpbnRlcmZhY2UgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1BTRVVET19QT1JUX0NPTkZJRyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgdGltaW5nX21vZGUgcGFyYW1ldGVyIHRvIGZhc3RlciB0aGFuIHJlYWwKICogdGltZS4KICovCiNkZWZpbmUgQUZFX1BTRVVET1BPUlRfVElNSU5HX01PREVfRlRSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCgovKiBFbnVtZXJhdGlvbiBmb3Igc2V0dGluZyB0aGUgdGltaW5nX21vZGUgcGFyYW1ldGVyIHRvIHJlYWwgdGltZSB1c2luZwogKiB0aW1lcnMuCiAqLwojZGVmaW5lIEFGRV9QU0VVRE9QT1JUX1RJTUlOR19NT0RFX1RJTUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQoKLyogUGF5bG9hZCBvZiB0aGUgQUZFX1BBUkFNX0lEX1BTRVVET19QT1JUX0NPTkZJRyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3BzZXVkb19wb3J0X2NmZyB7Cgl1MzIgICAgICAgICAgICAgICAgICBwc2V1ZF9wb3J0X2NmZ19taW5vcl92ZXJzaW9uOwoJLyoKCSAqIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIHBzZXVkb3BvcnQKCSAqIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgoJICovCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0X3dpZHRoOwoJLyogQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUgYXQgdmFsdWVzIDE2LCAyNCAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKCS8qIE51bWJlciBvZiBjaGFubmVscyBhdCB2YWx1ZXMgIDEgdG8gOCAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGRhdGFfZm9ybWF0OwoJLyogTm9uLWxpbmVhciBkYXRhIGZvcm1hdCBzdXBwb3J0ZWQgYnkgdGhlIHBzZXVkb3BvcnQgKGZvciBmdXR1cmUgdXNlKS4KCSAqIEF0IHZhbHVlcyAjQUZFX0xJTkVBUl9QQ01fREFUQQoJICovCgoJdTE2ICAgICAgICAgICAgICAgICAgdGltaW5nX21vZGU7CgkvKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHNldWRvcG9ydCBzeW5jaHJvbml6ZXMgdG8gdGhlIGNsb2NrIG9yCgkgKiBvcGVyYXRlcyBmYXN0ZXIgdGhhbiByZWFsIHRpbWUuCgkgKiBhdCB2YWx1ZXMKCSAqIC0gI0FGRV9QU0VVRE9QT1JUX1RJTUlOR19NT0RFX0ZUUlQKCSAqIC0gI0FGRV9QU0VVRE9QT1JUX1RJTUlOR19NT0RFX1RJTUVSIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7CgkvKiBTYW1wbGUgcmF0ZSBhdCB3aGljaCB0aGUgcHNldWRvcG9ydCB3aWxsIHJ1bi4KCSAqIGF0IHZhbHVlcwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzMySwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV85NksKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE5MksgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1RETV9DT05GSUcJCTB4MDAwMTAyOUQKCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1RETV9DT05GSUcgICAgICAgICAgICAgIDEKCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NIT1JUX1NZTkNfQklUX01PREUgICAgICAgIDAKI2RlZmluZSBBRkVfUE9SVF9URE1fTE9OR19TWU5DX01PREUgICAgICAgICAgICAgMQojZGVmaW5lIEFGRV9QT1JUX1RETV9TSE9SVF9TWU5DX1NMT1RfTU9ERSAgICAgICAyCgojZGVmaW5lIEFGRV9QT1JUX1RETV9TWU5DX1NSQ19FWFRFUk5BTCAgICAgICAgICAwCiNkZWZpbmUgQUZFX1BPUlRfVERNX1NZTkNfU1JDX0lOVEVSTkFMICAgICAgICAgIDEKCiNkZWZpbmUgQUZFX1BPUlRfVERNX0NUUkxfREFUQV9PRV9ESVNBQkxFICAgICAgIDAKI2RlZmluZSBBRkVfUE9SVF9URE1fQ1RSTF9EQVRBX09FX0VOQUJMRSAgICAgICAgMQoKI2RlZmluZSBBRkVfUE9SVF9URE1fU1lOQ19OT1JNQUwgICAgICAgICAgICAgICAgMAojZGVmaW5lIEFGRV9QT1JUX1RETV9TWU5DX0lOVkVSVCAgICAgICAgICAgICAgICAxCgojZGVmaW5lIEFGRV9QT1JUX1RETV9EQVRBX0RFTEFZXzBfQkNMS19DWUNMRSAgICAwCiNkZWZpbmUgQUZFX1BPUlRfVERNX0RBVEFfREVMQVlfMV9CQ0xLX0NZQ0xFICAgIDEKI2RlZmluZSBBRkVfUE9SVF9URE1fREFUQV9ERUxBWV8yX0JDTEtfQ1lDTEUgICAgMgoKLyogUGF5bG9hZCBvZiB0aGUgQUZFX1BBUkFNX0lEX1RETV9DT05GSUcgcGFyYW1ldGVyIHVzZWQgYnkKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF90ZG1fY2ZnIHsKCXUzMgl0ZG1fY2ZnX21pbm9yX3ZlcnNpb247CgkvKiA8IE1pbm9yIHZlcnNpb24gdXNlZCB0byB0cmFjayBURE0gY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9URE1fQ09ORklHCgkgKi8KCgl1MzIJbnVtX2NoYW5uZWxzOwoJLyogPCBOdW1iZXIgb2YgZW5hYmxlZCBzbG90cyBmb3IgVERNIGZyYW1lLgoJICogQHZhbHVlcyAxIHRvIDgKCSAqLwoKCXUzMglzYW1wbGVfcmF0ZTsKCS8qIDwgU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzhLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzI0SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzJLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV80OEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzE3NlA0SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMzUyUDhLIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTMyCWJpdF93aWR0aDsKCS8qIDwgQml0IHdpZHRoIG9mIHRoZSBzYW1wbGUuCgkgKiBAdmFsdWVzIDE2LCAyNAoJICovCgoJdTE2CWRhdGFfZm9ybWF0OwoJLyogPCBEYXRhIGZvcm1hdDogbGluZWFyICxjb21wcmVzc2VkLCBnZW5lcmljIGNvbXByZXNzc2VkCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfTElORUFSX1BDTV9EQVRBCgkgKiAtICNBRkVfTk9OX0xJTkVBUl9EQVRBCgkgKiAtICNBRkVfR0VORVJJQ19DT01QUkVTU0VECgkgKi8KCgl1MTYJc3luY19tb2RlOwoJLyogPCBURE0gc3luY2hyb25pemF0aW9uIHNldHRpbmcuCgkgKiBAdmFsdWVzIChzaG9ydCwgbG9uZywgc2xvdCkgc3luYyBtb2RlCgkgKiAtICNBRkVfUE9SVF9URE1fU0hPUlRfU1lOQ19CSVRfTU9ERQoJICogLSAjQUZFX1BPUlRfVERNX0xPTkdfU1lOQ19NT0RFCgkgKiAtICNBRkVfUE9SVF9URE1fU0hPUlRfU1lOQ19TTE9UX01PREUgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MTYJc3luY19zcmM7CgkvKiA8IFN5bmNocm9uaXphdGlvbiBzb3VyY2UuCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfUE9SVF9URE1fU1lOQ19TUkNfRVhURVJOQUwKCSAqIC0gI0FGRV9QT1JUX1RETV9TWU5DX1NSQ19JTlRFUk5BTCBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNgluc2xvdHNfcGVyX2ZyYW1lOwoJLyogPCBOdW1iZXIgb2Ygc2xvdHMgcGVyIGZyYW1lLiBUeXBpY2FsIDogMSwgMiwgNCwgOCwgMTYsIDMyLgoJICogQHZhbHVlcyAxIC0gMzIKCSAqLwoKCXUxNgljdHJsX2RhdGFfb3V0X2VuYWJsZTsKCS8qIDwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFRETSBibG9jayBzaGFyZXMgdGhlIGRhdGEtb3V0IHNpZ25hbCB0byB0aGUKCSAqIGRyaXZlIHdpdGggb3RoZXIgbWFzdGVycy4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX1RETV9DVFJMX0RBVEFfT0VfRElTQUJMRQoJICogLSAjQUZFX1BPUlRfVERNX0NUUkxfREFUQV9PRV9FTkFCTEUgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MTYJY3RybF9pbnZlcnRfc3luY19wdWxzZTsKCS8qIDwgU3BlY2lmaWVzIHdoZXRoZXIgdG8gaW52ZXJ0IHRoZSBzeW5jIG9yIG5vdC4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX1RETV9TWU5DX05PUk1BTAoJICogLSAjQUZFX1BPUlRfVERNX1NZTkNfSU5WRVJUIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTE2CWN0cmxfc3luY19kYXRhX2RlbGF5OwoJLyogPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBiaXQgY2xvY2sgdG8gZGVsYXkgZGF0YSB3aXRoIHJlc3BlY3QgdG8KCSAqIHN5bmMgZWRnZS4KCSAqIEB2YWx1ZXMKCSAqIC0gI0FGRV9QT1JUX1RETV9EQVRBX0RFTEFZXzBfQkNMS19DWUNMRQoJICogLSAjQUZFX1BPUlRfVERNX0RBVEFfREVMQVlfMV9CQ0xLX0NZQ0xFCgkgKiAtICNBRkVfUE9SVF9URE1fREFUQV9ERUxBWV8yX0JDTEtfQ1lDTEUgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCgl1MTYJc2xvdF93aWR0aDsKCS8qIDwgU2xvdCB3aWR0aCBvZiB0aGUgc2xvdCBpbiBhIFRETSBmcmFtZS4gIChzbG90X3dpZHRoID49IGJpdF93aWR0aCkKCSAqIGhhdmUgdG8gYmUgc2F0aXNmaWVkLgoJICogQHZhbHVlcyAxNiwgMjQsIDMyCgkgKi8KCgl1MzIJc2xvdF9tYXNrOwoJLyogPCBQb3NpdGlvbiBvZiBhY3RpdmUgc2xvdHMuICBXaGVuIHRoYXQgYml0IGlzIHNldCwKCSAqIHRoYXQgcGFyaWN1bGFyIHNsb3QgaXMgYWN0aXZlLgoJICogTnVtYmVyIG9mIGFjdGl2ZSBzbG90cyBjYW4gYmUgaW5mZXJyZWQgYnkgbnVtYmVyIG9mCgkgKiBiaXRzIHNldCBpbiB0aGUgbWFzay4gIE9ubHkgOCBpbmRpdmlkdWFsIGJpdHMgY2FuIGJlIGVuYWJsZWQuCgkgKiBCaXRzIDAuLjMxIGNvcnJlc3BvbmRpbmcgdG8gc2xvdCAwLi4zMQoJICogQHZhbHVlcyAxIHRvIDJeMzIgLSAxCgkgKi8KfSBfX3BhY2tlZDsKCi8qIElEIG9mIFRpbWUgRGl2c2lvbiBNdWx0aXBsZXhpbmcgKFRETSkgbW9kdWxlLAogKiB3aGljaCBpcyB1c2VkIGZvciBjb25maWd1cmluZyB0aGUgQUZFIFRETS4KICoKICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FGRV9QT1JUX1RETV9TTE9UX0NPTkZJRwogKgogKiBUbyBjb25maWd1cmUgdGhlIFRETSBpbnRlcmZhY2UsIHRoZSBjbGllbnQgbXVzdCB1c2UgdGhlCiAqICNBRkVfUE9SVF9DTURfU0VUX1BBUkFNIGNvbW1hbmQsIGFuZCBmaWxsIHRoZSBtb2R1bGUgSUQgd2l0aCB0aGUKICogcmVzcGVjdGl2ZSBwYXJhbWV0ZXIgSURzIGFzIGxpc3RlZCBhYm92ZS4KICovCgojZGVmaW5lIEFGRV9NT0RVTEVfVERNCQkweDAwMDEwMjhBCgovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHVzZWQgYnkgI0FGRV9NT0RVTEVfVERNIHRvIGNvbmZpZ3VyZQogKiB0aGUgVERNIHNsb3QgbWFwcGluZy4gI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU0gY2FuIHVzZSB0aGlzIHBhcmFtZXRlciBJRC4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1BPUlRfU0xPVF9NQVBQSU5HX0NPTkZJRwkweDAwMDEwMjk3CgovKiBWZXJzaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gaGFuZGxlIGZ1dHVyZSBhZGRpdGlvbnMgdG8gc2xvdCBtYXBwaW5nCiAqIGNvbmZpZ3VyYXRpb24gKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1NMT1RfTUFQUElOR19DT05GSUcJMHgxCgovKiBEYXRhIGFsaWduIHR5cGUgICovCiNkZWZpbmUgQUZFX1NMT1RfTUFQUElOR19EQVRBX0FMSUdOX01TQgkJMAojZGVmaW5lIEFGRV9TTE9UX01BUFBJTkdfREFUQV9BTElHTl9MU0IJCTEKCiNkZWZpbmUgQUZFX1NMT1RfTUFQUElOR19PRkZTRVRfSU5WQUxJRAkJMHhGRkZGCgovKiBQYXlsb2FkIG9mIHRoZSBBRkVfUEFSQU1fSURfUE9SVF9TTE9UX01BUFBJTkdfQ09ORklHCiAqIGNvbW1hbmQncyBURE0gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3Nsb3RfbWFwcGluZ19jZmcgewoJdTMyCW1pbm9yX3ZlcnNpb247CgkvKiA8IE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgVERNIHNsb3QgY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9URE1fU0xPVF9DT05GSUcKCSAqLwoKCXUxNgludW1fY2hhbm5lbDsKCS8qIDwgbnVtYmVyIG9mIGNoYW5uZWwgb2YgdGhlIGF1ZGlvIHNhbXBsZS4KCSAqIEB2YWx1ZXMgMSwgMiwgNCwgNiwgOCBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUxNgliaXR3aWR0aDsKCS8qIDwgU2xvdCBiaXQgd2lkdGggZm9yIGVhY2ggY2hhbm5lbAoJICogQHZhbHVlcyAxNiwgMjQsIDMyCgkgKi8KCgl1MzIJZGF0YV9hbGlnbl90eXBlOwoJLyogPCBpbmRpY2F0ZSBob3cgZGF0YSBwYWNrZWQgZnJvbSBzbG90X29mZnNldCBmb3IgMzIgc2xvdCBiaXQgd2lkdGgKCSAqIGluIGNhc2Ugb2Ygc2FtcGxlIGJpdCB3aWR0aCBpcyAyNC4KCSAqIEB2YWx1ZXMKCSAqICNBRkVfU0xPVF9NQVBQSU5HX0RBVEFfQUxJR05fTVNCCgkgKiAjQUZFX1NMT1RfTUFQUElOR19EQVRBX0FMSUdOX0xTQgoJICovCgoJdTE2CW9mZnNldFtBRkVfUE9SVF9NQVhfQVVESU9fQ0hBTl9DTlRdOwoJLyogPCBBcnJheSBvZiB0aGUgc2xvdCBtYXBwaW5nIHN0YXJ0IG9mZnNldCBpbiBieXRlcyBmb3IgdGhpcyBmcmFtZS4KCSAqIFRoZSBieXRlcyBpcyBjb3VudGVkIGZyb20gMC4gVGhlIDAgaXMgbWFwcGVkIHRvIHRoZSAxc3QgYnl0ZQoJICogaW4gb3Igb3V0IG9mIHRoZSBkaWdpdGFsIHNlcmlhbCBkYXRhIGxpbmUgdGhpcyBzdWItZnJhbWUgYmVsb25nIHRvLgoJICogc2xvdF9vZmZzZXRbXSBzZXR0aW5nIGlzIHBlci1jaGFubmVsIGJhc2VkLgoJICogVGhlIG1heCBudW0gb2YgY2hhbm5lbCBzdXBwb3J0ZWQgaXMgOC4KCSAqIFRoZSB2YWxpZCBvZmZzZXQgdmFsdWUgbXVzdCBhbHdheXMgYmUgY29udGludWx5IHBsYWNlZCBpbiBmcm9tCgkgKiBpbmRleCAwLgoJICogU2V0IG9mZnNldCBhcyBBRkVfU0xPVF9NQVBQSU5HX09GRlNFVF9JTlZBTElEIGZvciBub3QgdXNlZCBhcnJheXMuCgkgKiBJZiAic2xvdF9iaXR3aWR0aF9wZXJfY2hhbm5lbCIgaXMgMzIgYW5kICJzYW1wbGVfYml0d2lkdGgiIGlzIDI0LAoJICogImRhdGFfYWxpZ25fdHlwZSIgaXMgdXNlZCB0byBpbmRpY2F0ZSBob3cgMjQgYml0IHNhbXBsZSBkYXRhIGluCgkgKiBhbGlnbmluZyB3aXRoIDMyIGJpdCBzbG90IHdpZHRoIHBlci1jaGFubmVsLgoJICogQHZhbHVlcywgaW4gYnl0ZQoJICovCn0gX19wYWNrZWQ7CgovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHVzZWQgYnkgI0FGRV9NT0RVTEVfVERNIHRvIGNvbmZpZ3VyZQogKiB0aGUgY3VzdG9tZXIgVERNIGhlYWRlci4gI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU0gY2FuIHVzZSB0aGlzIHBhcmFtZXRlciBJRC4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NVU1RPTV9URE1fSEVBREVSX0NPTkZJRwkJMHgwMDAxMDI5OAoKLyogVmVyc2lvbiBpbmZvcm1hdGlvbiB1c2VkIHRvIGhhbmRsZSBmdXR1cmUgYWRkaXRpb25zIHRvIGN1c3RvbSBURE0gaGVhZGVyCiAqIGNvbmZpZ3VyYXRpb24gKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0NVU1RPTV9URE1fSEVBREVSX0NPTkZJRwkweDEKCiNkZWZpbmUgQUZFX0NVU1RPTV9URE1fSEVBREVSX1RZUEVfSU5WQUxJRAkJMHgwCiNkZWZpbmUgQUZFX0NVU1RPTV9URE1fSEVBREVSX1RZUEVfREVGQVVMVAkJMHgxCiNkZWZpbmUgQUZFX0NVU1RPTV9URE1fSEVBREVSX1RZUEVfRU5URVJUQUlOTUVOVF9NT1NUCTB4MgoKI2RlZmluZSBBRkVfQ1VTVE9NX1RETV9IRUFERVJfTUFYX0NOVAkweDgKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9DVVNUT01fVERNX0hFQURFUl9DT05GSUcgcGFyYW1ldGVyIElEICovCnN0cnVjdCBhZmVfcGFyYW1faWRfY3VzdG9tX3RkbV9oZWFkZXJfY2ZnIHsKCXUzMgltaW5vcl92ZXJzaW9uOwoJLyogPCBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIGN1c3RvbSBURE0gaGVhZGVyIGNvbmZpZ3VyYXRpb24uCgkgKiBAdmFsdWVzICNBRkVfQVBJX1ZFUlNJT05fQ1VTVE9NX1RETV9IRUFERVJfQ09ORklHCgkgKi8KCgl1MTYJc3RhcnRfb2Zmc2V0OwoJLyogPCB0aGUgc2xvdCBtYXBwaW5nIHN0YXJ0IG9mZnNldCBpbiBieXRlcyBmcm9tIHRoaXMgc3ViLWZyYW1lCgkgKiBUaGUgYnl0ZXMgaXMgY291bnRlZCBmcm9tIDAuIFRoZSAwIGlzIG1hcHBlZCB0byB0aGUgMXN0IGJ5dGUgaW4gb3IKCSAqIG91dCBvZiB0aGUgZGlnaXRhbCBzZXJpYWwgZGF0YSBsaW5lIHRoaXMgc3ViLWZyYW1lIGJlbG9uZyB0by4KCSAqIEB2YWx1ZXMsIGluIGJ5dGUsCgkgKiBzdXBwb3J0ZWQgdmFsdWVzIGFyZSAwLCA0LCA4CgkgKi8KCgl1MTYJaGVhZGVyX3dpZHRoOwoJLyogPCB0aGUgaGVhZGVyIHdpZHRoIHBlci1mcmFtZSBmb2xsb3dlZC4KCSAqIDIgYnl0ZXMgZm9yIE1PU1QvVERNIGNhc2UKCSAqIEB2YWx1ZXMsIGluIGJ5dGUKCSAqIHN1cHBvcnRlZCB2YWx1ZSBpcyAyCgkgKi8KCgl1MTYJaGVhZGVyX3R5cGU7CgkvKiA8IEluZGljYXRlIHdoYXQga2luZCBvZiBjdXN0b20gVERNIGhlYWRlciBpdCBpcy4KCSAqIEB2YWx1ZXMgI0FGRV9DVVNUT01fVERNX0hFQURFUl9UWVBFX0lOVkFMSUQgPSAwCgkgKiAjQUZFX0NVU1RPTV9URE1fSEVBREVSX1RZUEVfREVGQVVMVCA9IDEgIChmb3IgQUFOIGNoYW5uZWwgcGVyIE1PU1QpCgkgKiAjQUZFX0NVU1RPTV9URE1fSEVBREVSX1RZUEVfRU5URVJUQUlOTUVOVF9NT1NUID0gMgoJICogKGZvciBlbnRlcnRhaW5tZW50IGNoYW5uZWwsIHdoaWNoIHdpbGwgb3ZlcndyaXRlCgkgKiBBRkVfQVBJX1ZFUlNJT05fVERNX1NBRF9IRUFERVJfVFlQRV9ERUZBVUxUIHBlciBNT1NUKQoJICovCgoJdTE2CW51bV9mcmFtZV9yZXBlYXQ7CgkvKiA8IG51bSBvZiBoZWFkZXIgZm9sbG93ZWQuCgkgKiBAdmFsdWVzLCBzdXBwb3J0ZWQgdmFsdWUgaXMgOAoJICovCgl1MTYJaGVhZGVyW0FGRV9DVVNUT01fVERNX0hFQURFUl9NQVhfQ05UXTsKCS8qIDwgU0FEIGhlYWRlciBmb3IgTU9TVC9URE0gY2FzZSBpcyBmb2xsb3dlZCBhcyBwYXlsb2FkIGFzIGJlbG93LgoJICogVGhlIHNpemUgb2YgZm9sbG93ZWQgU0FEIGhlYWRlciBpbiBieXRlcyBpcyBudW1fb2ZfZnJhbWVfcmVwZWF0ICoKCSAqIGhlYWRlcl93aWR0aF9wZXJfZnJhbWUsIHdoaWNoIGlzIDIgKiA4ID0gMTYgYnl0ZXMgaGVyZS4KCSAqIHRoZSBzdXBwb3J0ZWQgcGF5bG9hZCBmb3JtYXQgaXMgaW4gdWludDE2X3QgYXMgYmVsb3cKCSAqIHVpbnQxNl90IGhlYWRlcjA7IFN5bmNIaSAweDNDIEluZm9bNF0gLSBDb2RlY1R5cGUgLT4gMHgzQzAwCgkgKiB1aW50MTZfdCBoZWFkZXIxOyBTeW5jTG8gMHhCMiBJbmZvWzVdIC0gU2FtcGxlV2lkdGggLT4gMHhCMjE4CgkgKiB1aW50MTZfdCBoZWFkZXIyOyBEVENQIEluZm8gICAgIEluZm9bNl0gLSB1bnVzZWQgLT4gMHgwCgkgKiB1aW50MTZfdCBoZWFkZXIzOyBFeHRlbnNpb24gSW5mb1s3XSAtIEFTQUQtVmFsdWUgLT4gMHhDMAoJICogdWludDE2X3QgaGVhZGVyNDsgUmVzZXJ2ZWQgSW5mb1swXSAtIE51bSBvZiBieXRlcyBmb2xsb3dpbmcgIC0+IDB4NwoJICogdWludDE2X3QgaGVhZGVyNTsgUmVzZXJ2ZWQgSW5mb1sxXSAtIE1lZGlhIFR5cGUgLT4gMHgwCgkgKiB1aW50MTZfdCBoZWFkZXI2OyBSZXNlcnZlZCBJbmZvWzJdIC0gQml0cmF0ZVtrYnBzXSAtIEhpZ2ggQnl0ZSAtPiAweDAKCSAqIHVpbnQxNl90IGhlYWRlcjc7IFJlc2VydmVkIEluZm9bM10gLSBCaXRyYXRlW2ticHNdIC0gTG93ICBCeXRlIC0+IDB4MAoJICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3Nsb3RfbWFwcGluZ19jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MglwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyCXBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zbG90X21hcHBpbmdfY2ZnCXNsb3RfbWFwcGluZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfY3VzdG9tX3RkbV9oZWFkZXJfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIJcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MglwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfY3VzdG9tX3RkbV9oZWFkZXJfY2ZnCWN1c3RvbV90ZG1faGVhZGVyOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV90ZG1fcG9ydF9jb25maWcgewoJc3RydWN0IGFmZV9wYXJhbV9pZF90ZG1fY2ZnCQkJCXRkbTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc2xvdF9tYXBwaW5nX2NmZwkJc2xvdF9tYXBwaW5nOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9jdXN0b21fdGRtX2hlYWRlcl9jZmcJY3VzdG9tX3RkbV9oZWFkZXI7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9ERVZJQ0VfSFdfREVMQVkgICAgIDB4MDAwMTAyNDMKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fREVWSUNFX0hXX0RFTEFZICAweDEKCnN0cnVjdCBhZmVfcGFyYW1faWRfZGV2aWNlX2h3X2RlbGF5X2NmZyB7Cgl1aW50MzJfdCAgICBkZXZpY2VfaHdfZGVsYXlfbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90ICAgIGRlbGF5X2luX3VzOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfU0VUX1RPUE9MT0dZICAgIDB4MDAwMTAyNUEKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fVE9QT0xPR1lfVjEgMHgxCgpzdHJ1Y3QgYWZlX3BhcmFtX2lkX3NldF90b3BvbG9neV9jZmcgewoJLyoKCSAqIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgYWZlIHRvcG9sb2d5IGlkIGNvbmZpZ3VyYXRpb24uCgkgKiBAdmFsdWVzICNBRkVfQVBJX1ZFUlNJT05fVE9QT0xPR1lfVjEKCSAqLwoJdTMyCQltaW5vcl92ZXJzaW9uOwoJLyoKCSAqIElkIG9mIHRoZSB0b3BvbG9neSBmb3IgdGhlIGFmZSBzZXNzaW9uLgoJICogQHZhbHVlcyBBbnkgdmFsaWQgQUZFIHRvcG9sb2d5IElECgkgKi8KCXUzMgkJdG9wb2xvZ3lfaWQ7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIE1BWF9BQlJfTEVWRUxTIDUKCnN0cnVjdCBhZmVfYml0X3JhdGVfbGV2ZWxfbWFwX3QgewoJLyoKCSAqIEtleSB2YWx1ZSBwYWlyIGZvciBsaW5rIHF1YWxpdHkgbGV2ZWwgdG8gYml0cmF0ZQoJICogbWFwcGluZyBpbiBBRkUKCSAqLwoJdWludDMyX3QgbGlua19xdWFsaXR5X2xldmVsOwoJdWludDMyX3QgYml0cmF0ZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcXVhbGl0eV9sZXZlbF90b19iaXRyYXRlX2luZm8gewoJLyoKCSAqIE51bWJlciBvZiBxdWFsaXR5IGxldmVscyBiZWluZyBtYXBwZWQuCgkgKiBUaGlzIHdpbGwgYmUgZXF1YWwgdG8gdGhlIHNpemUgb2YgbWFwcGluZyB0YWJsZS4KCSAqLwoJdWludDMyX3QgbnVtX2xldmVsczsKCS8qCgkgKiBRdWFsaXR5IGxldmVsIHRvIGJpdHJhdGUgbWFwcGluZyB0YWJsZQoJICovCglzdHJ1Y3QgYWZlX2JpdF9yYXRlX2xldmVsX21hcF90IGJpdF9yYXRlX2xldmVsX21hcFtNQVhfQUJSX0xFVkVMU107Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2ltY19kZWNfZW5jX2luZm8gewoJLyoKCSAqIERlY29kZXIgdG8gZW5jb2RlciBjb21tdW5pY2F0aW9uIGRpcmVjdGlvbi4KCSAqIFRyYW5zbWl0ID0gMCAvIFJlY2VpdmUgPSAxCgkgKi8KCXVpbnQzMl90IGRpcmVjdGlvbjsKCS8qCgkgKiBFbmFibGUgLyBkaXNhYmxlIElNQyBiZXR3ZWVuIGRlY29kZXIgYW5kIGVuY29kZXIKCSAqLwoJdWludDMyX3QgZW5hYmxlOwoJLyoKCSAqIFB1cnBvc2Ugb2YgSU1DIGJlaW5nIHNldCB1cCBiZXR3ZWVuIGRlY29kZXIgYW5kIGVuY29kZXIuCgkgKiBQYXJhbSBJRCBkZWZpbmVkIGZvciBsaW5rIHF1YWxpdHkgZmVlZGJhY2sgaW4gTFBBU1Mgd2lsbAoJICogYmUgdGhlIGRlZmF1bHQgdmFsdWUgc2VudCBhcyBwdXJwb3NlLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqIEFGRV9FTkNERUNfUFVSUE9TRV9JRF9CVF9JTkZPCgkgKi8KCXVpbnQzMl90IHB1cnBvc2U7CgkvKgoJICogVW5pcXVlIGNvbW11bmljYXRpb24gaW5zdGFuY2UgSUQuCgkgKiBEYXRhIHR5cGUgYTJkcF9hYnJfaW5zdGFuY2UgdXNlZCB0byBzZXQgaW5zdGFuY2UgSUQuCgkgKiBwdXJwb3NlIGFuZCBjb21tX2luc3RhbmNlIHRvZ2V0aGVyIGZvcm0gdGhlIGFjdHVhbCBrZXkKCSAqIHVzZWQgaW4gSU1DIHJlZ2lzdHJhdGlvbiwgd2hpY2ggbXVzdCBiZSB0aGUgc2FtZSBmb3IKCSAqIGVuY29kZXIgYW5kIGRlY29kZXIgZm9yIHdoaWNoIElNQyBpcyBiZWluZyBzZXQgdXAuCgkgKi8KCXVpbnQzMl90IGNvbW1faW5zdGFuY2U7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2Ficl9kZWNfY2ZnX3QgewoJc3RydWN0IGFmZV9pbWNfZGVjX2VuY19pbmZvIGltY19pbmZvOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9hYnJfZW5jX2NmZ190IHsKCS8qCgkgKiBMaW5rIHF1YWxpdHkgbGV2ZWwgdG8gYml0cmF0ZSBtYXBwaW5nIGluZm8gc2VudCB0byBEU1AuCgkgKi8KCXN0cnVjdCBhZmVfcXVhbGl0eV9sZXZlbF90b19iaXRyYXRlX2luZm8gbWFwcGluZ19pbmZvOwoJLyoKCSAqIEluZm9ybWF0aW9uIHRvIHNldCB1cCBJTUMgYmV0d2VlbiBkZWNvZGVyIGFuZCBlbmNvZGVyLgoJICovCglzdHJ1Y3QgYWZlX2ltY19kZWNfZW5jX2luZm8gaW1jX2luZm87Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9BUFRYX1NZTkNfTU9ERSAgMHgwMDAxMzIwNQoKc3RydWN0IGFmZV9wYXJhbV9pZF9hcHR4X3N5bmNfbW9kZSB7CgkvKgoJICogc3luYyBtb2RlOiAweDAgPSBzdGVyZW8gc3luYyBtb2RlIChkZWZhdWx0KQoJICogICAgICAgICAgICAweDAxID0gZHVhbCBtb25vIHN5bmMgbW9kZQoJICogICAgICAgICAgICAweDAyID0gZHVhbCBtb25vIHdpdGggbm8gc3luYyBvbiBlaXRoZXIgTCBvciBSCgkgKi8KCXVpbnQzMl90ICAgICBzeW5jX21vZGU7Cn0gX19wYWNrZWQ7CgovKgogKiBHZW5lcmljIGVuY29kZXIgbW9kdWxlIElELgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqICNBVlNfRU5DT0RFUl9QQVJBTV9JRF9FTkNfRk1UX0lEIChjYW5ub3QgYmUgc2V0IHJ1biB0aW1lKQogKiAjQVZTX0VOQ09ERVJfUEFSQU1fSURfRU5DX0NGR19CTEsgKG1heSBiZSBzZXQgcnVuIHRpbWUpCiAqICNBVlNfRU5DT0RFUl9QQVJBTV9JRF9FTkNfQklUUkFURSAobWF5IGJlIHNldCBydW4gdGltZSkKICogI0FWU19FTkNPREVSX1BBUkFNX0lEX1BBQ0tFVElaRVJfSUQgKGNhbm5vdCBiZSBzZXQgcnVuIHRpbWUpCiAqIE9wY29kZSAtIEFWU19NT0RVTEVfSURfRU5DT0RFUgogKiBBRkUgQ29tbWFuZCBBRkVfUE9SVF9DTURfU0VUX1BBUkFNX1YyIHN1cHBvcnRzIHRoaXMgbW9kdWxlIElELgogKi8KI2RlZmluZSBBRkVfTU9EVUxFX0lEX0VOQ09ERVIgICAgICAgIDB4MDAwMTMyMjkKCi8qIE1hY3JvIGZvciBkZWZpbmluZyB0aGUgcGFja2V0aXplciBJRDogQ09QLiAqLwojZGVmaW5lIEFGRV9NT0RVTEVfSURfUEFDS0VUSVpFUl9DT1AgMHgwMDAxMzIyQQoKLyoKICogUGFja2V0aXplciB0eXBlIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0VOQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX1BBQ0tFVElaRVJfSUQgMHgwMDAxMzIyRQoKLyoKICogRW5jb2RlciBjb25maWcgYmxvY2sgIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0VOQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBtYXkgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX0VOQ19DRkdfQkxLIDB4MDAwMTMyMkMKCi8qCiAqIEVuY29kZXIgZm9ybWF0IElEIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0VOQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX0VOQ19GTVRfSUQgICAgICAgICAweDAwMDEzMjJCCgovKgogKiBFbmNvZGVyIHNjcmFtYmxlciBwYXJhbWV0ZXIgZm9yIHRoZSAjQVZTX01PRFVMRV9JRF9FTkNPREVSIG1vZHVsZS4KICogVGhpcyBwYXJhbWV0ZXIgY2Fubm90IGJlIHNldCBydW50aW1lLgogKi8KI2RlZmluZSBBRkVfRU5DT0RFUl9QQVJBTV9JRF9FTkFCTEVfU0NSQU1CTElORyAgICAgICAgIDB4MDAwMTMyM0MKCi8qCiAqIExpbmsgcXVhbGl0eSBsZXZlbCB0byBiaXRyYXRlIG1hcHBpbmcgaW5mbyBzZW50IHRvIEFGRSBFbmNvZGVyLgogKiBUaGlzIHBhcmFtZXRlciBtYXkgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNPREVSX1BBUkFNX0lEX0JJVF9SQVRFX0xFVkVMX01BUCAgICAgICAgMHgwMDAxMzJFMQoKLyoKICogUGFyYW1ldGVyIHRvIHNldCB1cCBJbnRlciBNb2R1bGUgQ29tbXVuaWNhdGlvbiAoSU1DKSBiZXR3ZWVuCiAqIEFGRSBEZWNvZGVyIGFuZCBFbmNvZGVyLgogKiBUaGlzIHBhcmFtZXRlciBtYXkgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9FTkNERUNfUEFSQU1fSURfREVDX1RPX0VOQ19DT01NVU5JQ0FUSU9OICAgICAgICAweDAwMDEzMjNECgovKgogKiBQdXJwb3NlIG9mIElNQyBzZXQgdXAgYmV0d2VlbiBlbmNvZGVyIGFuZCBkZWNvZGVyLgogKiBDb21tdW5pY2F0aW9uIGluc3RhbmNlIGFuZCBwdXJwb3NlIHRvZ2V0aGVyIGZvcm0gdGhlCiAqIGFjdHVhbCBrZXkgdXNlZCBmb3IgSU1DIHJlZ2lzdHJhdGlvbi4KICovCiNkZWZpbmUgQUZFX0VOQ0RFQ19QVVJQT1NFX0lEX0JUX0lORk8gICAgICAgIDB4MDAwMTMyRTIKCiNkZWZpbmUgQUZFX01PRFVMRV9JRF9ERUNPREVSICAgICAgICAweDAwMDEzMjMxCgovKgogKiBNYWNybyBmb3IgZGVmaW5pbmcgdGhlIGRlcGFja2V0aXplciBJRDogQ09QLgogKi8KI2RlZmluZSBBRkVfTU9EVUxFX0lEX0RFUEFDS0VUSVpFUl9DT1AgICAgICAgIDB4MDAwMTMyMzMKCi8qCiAqIERlcGFja2V0aXplciB0eXBlIHBhcmFtZXRlciBmb3IgdGhlICNBVlNfTU9EVUxFX0lEX0RFQ09ERVIgbW9kdWxlLgogKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgc2V0IHJ1bnRpbWUuCiAqLwojZGVmaW5lIEFGRV9ERUNPREVSX1BBUkFNX0lEX0RFUEFDS0VUSVpFUl9JRCAgICAgICAgMHgwMDAxMzIzNQoKI2RlZmluZSBDQVBJX1YyX1BBUkFNX0lEX0FQVFhfRU5DX1NXSVRDSF9UT19NT05PICAgIDB4MDAwMTMzMkEKCnN0cnVjdCBhcHR4X2NoYW5uZWxfbW9kZV9wYXJhbV90IHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7Cgl1MzIgY2hhbm5lbF9tb2RlOwp9IF9fcGFja2VkOwovKgogKiBEYXRhIGZvcm1hdCB0byBzZW5kIGNvbXByZXNzZWQgZGF0YQogKiBpcyB0cmFuc21pdHRlZC9yZWNlaXZlZCBvdmVyIFNsaW1idXMgbGluZXMuCiAqLwojZGVmaW5lIEFGRV9TQl9EQVRBX0ZPUk1BVF9HRU5FUklDX0NPTVBSRVNTRUQgICAgMHgzCgovKgogKiBJRCBmb3IgQUZFIHBvcnQgbW9kdWxlLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBkZWZpbmUgcG9ydCBwcm9wZXJ0aWVzLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogI0FGRV9QQVJBTV9JRF9QT1JUX01FRElBX1RZUEUKICogVG8gY29uZmlndXJlIHRoZSBwb3J0IHByb3BlcnR5LCB0aGUgY2xpZW50IG11c3QgdXNlIHRoZQogKiAjQUZFX1BPUlRfQ01EX1NFVF9QQVJBTV9WMiBjb21tYW5kLAogKiBhbmQgZmlsbCB0aGUgbW9kdWxlIElEIHdpdGggdGhlIHJlc3BlY3RpdmUgcGFyYW1ldGVyIElEcyBhcyBsaXN0ZWQgYWJvdmUuCiAqIEBhcHJfaGRyX2ZpZWxkcwogKiBPcGNvZGUgLS0gQUZFX01PRFVMRV9QT1JUCiAqLwojZGVmaW5lIEFGRV9NT0RVTEVfUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDJhNgoKLyoKICogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5ICNBRkVfTU9EVUxFX1BPUlQgdG8gc2V0IHRoZSBwb3J0IG1lZGlhIHR5cGUuCiAqIHBhcmFtZXRlciBJRCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIHVzaW5nI0FGRV9QT1JUX0NNRF9TRVRfUEFSQU1fVjIgY29tbWFuZC4KICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1BPUlRfTUVESUFfVFlQRSAgICAgICAgICAgICAgMHgwMDAxMDJhNwoKLyoKICogTWFjcm9zIGZvciBkZWZpbmluZyB0aGUgImRhdGFfZm9ybWF0IiBmaWVsZCBpbiB0aGUKICogI0FGRV9QQVJBTV9JRF9QT1JUX01FRElBX1RZUEUKICovCiNkZWZpbmUgQUZFX1BPUlRfREFUQV9GT1JNQVRfUENNICAgICAgICAgICAgICAgICAgMHgwCiNkZWZpbmUgQUZFX1BPUlRfREFUQV9GT1JNQVRfR0VORVJJQ19DT01QUkVTU0VEICAgMHgxCgovKgogKiBNYWNybyBmb3IgZGVmaW5pbmcgdGhlICJtaW5vcl92ZXJzaW9uIiBmaWVsZCBpbiB0aGUKICogI0FGRV9QQVJBTV9JRF9QT1JUX01FRElBX1RZUEUKICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX1BPUlRfTUVESUFfVFlQRSAgICAgICAgICAgMHgxCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTk9ORSAgICAgICAgICAgICAgICAgICAgICAgIDB4MAoKLyoKICogTWVkaWEgZm9ybWF0IElEIGZvciBTQkMgZW5jb2RlIGNvbmZpZ3VyYXRpb24uCiAqIEBwYXIgU0JDIGVuY29kZSBjb25maWd1cmF0aW9uIChhc21fc2JjX2VuY19jZmdfdCkKICogQHRhYmxle3dlYWtfX2FzbV9fc2JjX19lbmNfX2NmZ19fdH0KICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEJGMgoKLyogU0JDIGNoYW5uZWwgTW9ubyBtb2RlLiovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX01PTk8gICAgICAgICAgICAgICAgICAgICAxCgovKiBTQkMgY2hhbm5lbCBTdGVyZW8gbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1NCQ19DSEFOTkVMX01PREVfU1RFUkVPICAgICAgICAgICAgICAgICAgIDIKCi8qIFNCQyBjaGFubmVsIER1YWwgTW9ubyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9EVUFMX01PTk8gICAgICAgICAgICAgICAgOAoKLyogU0JDIGNoYW5uZWwgSm9pbnQgU3RlcmVvIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX0pPSU5UX1NURVJFTyAgICAgICAgICAgICA5CgovKiBTQkMgYml0IGFsbG9jYXRpb24gbWV0aG9kID0gbG91ZG5lc3MuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9TQkNfQUxMT0NBVElPTl9NRVRIT0RfTE9VRE5FU1MgICAgICAgICAgICAwCgovKiBTQkMgYml0IGFsbG9jYXRpb24gbWV0aG9kID0gU05SLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfU0JDX0FMTE9DQVRJT05fTUVUSE9EX1NOUiAgICAgICAgICAgICAgICAgMQoKCi8qCiAqIFBheWxvYWQgb2YgdGhlIFNCQyBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbiB0aGUKICogI0FTTV9NRURJQV9GTVRfU0JDIG1lZGlhIGZvcm1hdC4KICovCnN0cnVjdCBhc21fc2JjX2VuY19jZmdfdCB7CgkvKgoJICogTnVtYmVyIG9mIHN1YmJhbmRzLgoJICogQHZhbHVlcyA0LCA4CgkgKi8KCXVpbnQzMl90ICAgIG51bV9zdWJiYW5kczsKCgkvKgoJICogU2l6ZSBvZiB0aGUgZW5jb2RlZCBibG9jayBpbiBzYW1wbGVzLgoJICogQHZhbHVlcyA0LCA4LCAxMiwgMTYKCSAqLwoJdWludDMyX3QgICAgYmxrX2xlbjsKCgkvKgoJICogTW9kZSB1c2VkIHRvIGFsbG9jYXRlIGJpdHMgYmV0d2VlbiBjaGFubmVscy4KCSAqIEB2YWx1ZXMKCSAqIDAgKE5hdGl2ZSBtb2RlKQoJICogI0FTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9NT05PCgkgKiAjQVNNX01FRElBX0ZNVF9TQkNfQ0hBTk5FTF9NT0RFX1NURVJFTwoJICogI0FTTV9NRURJQV9GTVRfU0JDX0NIQU5ORUxfTU9ERV9EVUFMX01PTk8KCSAqICNBU01fTUVESUFfRk1UX1NCQ19DSEFOTkVMX01PREVfSk9JTlRfU1RFUkVPCgkgKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBudW1iZXIKCSAqIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KCSAqIElmIHBvc3Rwcm9jZXNzaW5nIG91dHB1dHMgb25lLWNoYW5uZWwgZGF0YSwgTW9ubyBtb2RlIGlzIHVzZWQuIElmCgkgKiBwb3N0cHJvY2Vzc2luZyBvdXRwdXRzIHR3by1jaGFubmVsIGRhdGEsIFN0ZXJlbyBtb2RlIGlzIHVzZWQuCgkgKiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCgkgKi8KCXVpbnQzMl90ICAgIGNoYW5uZWxfbW9kZTsKCgkvKgoJICogRW5jb2RlciBiaXQgYWxsb2NhdGlvbiBtZXRob2QuCgkgKiBAdmFsdWVzCgkgKiAjQVNNX01FRElBX0ZNVF9TQkNfQUxMT0NBVElPTl9NRVRIT0RfTE9VRE5FU1MKCSAqICNBU01fTUVESUFfRk1UX1NCQ19BTExPQ0FUSU9OX01FVEhPRF9TTlIgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQzMl90ICAgIGFsbG9jX21ldGhvZDsKCgkvKgoJICogTnVtYmVyIG9mIGVuY29kZWQgYml0cyBwZXIgc2Vjb25kLgoJICogQHZhbHVlcwoJICogTW9ubyBjaGFubmVsIC0tIE1heGltdW0gb2YgMzIwIGticHMKCSAqIFN0ZXJlbyBjaGFubmVsIC0tIE1heGltdW0gb2YgNTEyIGticHMgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXVpbnQzMl90ICAgIGJpdF9yYXRlOwoKCS8qCgkgKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kLgoJICogQHZhbHVlcyAwIChOYXRpdmUgbW9kZSksIDE2MDAwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwJm5ic3A7SHoKCSAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlCgkgKiBzYW1wbGluZyByYXRlIGF0IHRoZSBpbnB1dC4KCSAqIFRoZSBzYW1wbGluZyByYXRlIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCgkgKi8KCXVpbnQzMl90ICAgIHNhbXBsZV9yYXRlOwp9OwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfTEMgICAgICAgICAgICAyCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUiAgICAgICAgICAgNQojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0FPVF9QUyAgICAgICAgICAgIDI5CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURUUyAgMAojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX1JBVyAgIDMKCnN0cnVjdCBhc21fYWFjX2VuY19jZmdfdjJfdCB7CgoJLyogRW5jb2RpbmcgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuKi8KCXVpbnQzMl90ICAgICBiaXRfcmF0ZTsKCgkvKgoJICogRW5jb2RpbmcgbW9kZS4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6CgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX0xDCgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUgoJICogI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9QUwoJICovCgl1aW50MzJfdCAgICAgZW5jX21vZGU7CgoJLyoKCSAqIEFBQyBmb3JtYXQgZmxhZy4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6CgkgKiAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURUUwoJICogI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX1JBVwoJICovCgl1aW50MTZfdCAgICAgYWFjX2ZtdF9mbGFnOwoKCS8qCgkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gZW5jb2RlLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqIDAgLSBOYXRpdmUgbW9kZQoJICogMSAtIE1vbm8KCSAqIDIgLSBTdGVyZW8KCSAqIE90aGVyIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZC4KCSAqIEBub3RlMWhhbmcgVGhlIGVBQUMrIGVuY29kZXIgbW9kZSBzdXBwb3J0cyBvbmx5IHN0ZXJlby4KCSAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlCgkgKiBudW1iZXIgb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgoJICogVGhlIG51bWJlciBvZiBjaGFubmVscyBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgoJICovCgl1aW50MTZfdCAgICAgY2hhbm5lbF9jZmc7CgoJLyoKCSAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDAgLS0gTmF0aXZlIG1vZGUgLSBGb3Igb3RoZXIgdmFsdWVzLAoJICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKCSAqIHNhbXBsaW5nIHJhdGUgYXQgdGhlIGlucHV0LgoJICogVGhlIHNhbXBsaW5nIHJhdGUgbXVzdCBub3QgY2hhbmdlIGR1cmluZyBlbmNvZGluZy4KCSAqLwoJdWludDMyX3QgICAgIHNhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKLyogRk1UIElEIGZvciBhcHQtWCBDbGFzc2ljICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BUFRYIDB4MDAwMTMxZmYKCi8qIEZNVCBJRCBmb3IgYXB0LVggSEQgKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FQVFhfSEQgMHgwMDAxMzIwMAoKI2RlZmluZSBQQ01fQ0hBTk5FTF9MICAgICAgICAgMQojZGVmaW5lIFBDTV9DSEFOTkVMX1IgICAgICAgICAyCiNkZWZpbmUgUENNX0NIQU5ORUxfQyAgICAgICAgIDMKCnN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCB7Cgl1aW50MzJfdCAgICBzYW1wbGVfcmF0ZTsKCS8qIE1vbm8gb3Igc3RlcmVvICovCgl1aW50MTZfdCAgICBudW1fY2hhbm5lbHM7Cgl1aW50MTZfdCAgICByZXNlcnZlZDsKCS8qIG51bV9jaCA9PSAxLCB0aGVuIFBDTV9DSEFOTkVMX0MsCgkgKiBudW1fY2ggPT0gMiwgdGhlbiB7UENNX0NIQU5ORUxfTCwgUENNX0NIQU5ORUxfUn0KCSAqLwoJdWludDhfdCAgICAgY2hhbm5lbF9tYXBwaW5nWzhdOwoJdWludDMyX3QgICAgY3VzdG9tX3NpemU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FwdHhfdjJfZW5jX2NmZ19leHRfdCB7CgkvKgoJICogc3luYyBtb2RlOiAweDAgPSBzdGVyZW8gc3luYyBtb2RlIChkZWZhdWx0KQoJICogICAgICAgICAgICAweDAxID0gZHVhbCBtb25vIHN5bmMgbW9kZQoJICogICAgICAgICAgICAweDAyID0gZHVhbCBtb25vIHdpdGggbm8gc3luYyBvbiBlaXRoZXIgTCBvciBSCgkgKi8KCXVpbnQzMl90ICAgICBzeW5jX21vZGU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FwdHhfZW5jX2NmZ190IHsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCBjdXN0b21fY2ZnOwoJc3RydWN0IGFzbV9hcHR4X3YyX2VuY19jZmdfZXh0X3QgYXB0eF92Ml9jZmc7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQ0VMVCAweDAwMDEzMjIxCnN0cnVjdCBhc21fY2VsdF9zcGVjaWZpY19lbmNfY2ZnX3QgewoJLyoKCSAqIEJpdCByYXRlIHVzZWQgZm9yIGVuY29kaW5nLgoJICogVGhpcyBpcyB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgdXBwZXIgdGhyZXNob2xkCgkgKiBmb3IgYnl0ZXMgcGVyIGZyYW1lIGlmIHZicl9mbGFnIGlzIDEuCgkgKiBPciBlbHNlLCB0aGlzIHdpbGwgYmUgdXNlZCBhcyBhIHJlZ3VsYXIgY29uc3RhbnQKCSAqIGJpdCByYXRlIGZvciBlbmNvZGVyIG91dHB1dC4KCSAqIEBSYW5nZSA6IDMyMDAwIHRvIDE1MzYwMDAKCSAqIEBEZWZhdWx0OiAxMjgKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICBiaXRfcmF0ZTsKCS8qCgkgKiBGcmFtZSBzaXplIHVzZWQgZm9yIGVuY29kaW5nLgoJICogQFJhbmdlIDogNjQsIDEyOCwgMjU2LCA1MTIKCSAqIEBEZWZhdWx0OiAyNTYKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBmcmFtZV9zaXplOwoJLyoKCSAqIGNvbXBsZXhpdHkgb2YgYWxnb3JpdGhtLgoJICogQFJhbmdlIDogMC0xMAoJICogQERlZmF1bHQ6IDMKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBjb21wbGV4aXR5OwoJLyoKCSAqIFN3aXRjaCB2YXJpYWJsZSBmb3IgcHJlZGljdGlvbiBmZWF0dXJlLgoJICogVXNlZCB0byBjaG9vc2UgYmV0d2VlbiB0aGUgbGV2ZWwgb2YgaW50ZXJmcmFtZQoJICogcHJlZGljdGlvbnMgYWxsb3dlZCB3aGlsZSBlbmNvZGluZy4KCSAqIEBSYW5nZToKCSAqIDA6IEluZGVwZW5kZW50IEZyYW1lcy4KCSAqIDE6IFNob3J0IFRlcm0gaW50ZXJmcmFtZSBwcmVkaWN0aW9uIGFsbG93ZWQuCgkgKiAyOiBMb25nIHRlcm0gcHJlZGljdGlvbiBhbGxvd2VkLgoJICogQERlZmF1bHQ6IDIKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uX21vZGU7CgkvKgoJICogVmFyaWFibGUgQml0IFJhdGUgZmxhZy4KCSAqIEBEZWZhdWx0OiAwCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgdmJyX2ZsYWc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2NlbHRfZW5jX2NmZ190IHsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCAgY3VzdG9tX2NvbmZpZzsKCXN0cnVjdCBhc21fY2VsdF9zcGVjaWZpY19lbmNfY2ZnX3QgIGNlbHRfc3BlY2lmaWNfY29uZmlnOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0xEQUMgMHgwMDAxMzIyNApzdHJ1Y3QgYXNtX2xkYWNfc3BlY2lmaWNfZW5jX2NmZ190IHsKCS8qCgkgKiBUaGlzIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBlbmNvZGVyIG91dHB1dAoJICogYnl0ZXMgcGVyIGZyYW1lIChpLmUuIGJ5dGVzIHBlciBwYWNrZXQpLgoJICogQml0IHJhdGUgYWxzbyBjb25maWd1cmVzIHRoZSBFUU1JRC4KCSAqIFRoZSBtaW4gYml0IHJhdGUgMzAzMDAwIGJwcyBpcyBjYWxjdWxhdGVkIGZvcgoJICogNDQuMSBrSHogYW5kIDg4LjIgS0h6IHNhbXBsaW5nIGZyZXF1ZW5jaWVzIHdpdGgKCSAqIE1vYmlsZSB1c2UgUXVhbGl0eS4KCSAqIFRoZSBtYXggYml0IHJhdGUgb2YgOTkwMDAwIGJwcyBpcyBjYWxjdWxhdGVkIGZvcgoJICogOTZrSHogYW5kIDQ4IEtIeiB3aXRoIEhpZ2ggUXVhbGl0eQoJICogQFJhbmdlKGluIGJpdHMgcGVyIHNlY29uZCkKCSAqIDMwMzAwMCBmb3IgTW9iaWxlIHVzZSBRdWFsaXR5CgkgKiA2MDYwMDAgZm9yIHN0YW5kYXJkIFF1YWxpdHkKCSAqIDkwOTAwMCBmb3IgSGlnaCBRdWFsaXR5CgkgKi8KCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgYml0X3JhdGU7CgkvKgoJICogVGhlIGNoYW5uZWwgc2V0dGluZyBpbmZvcm1hdGlvbiBmb3IgTERBQyBzcGVjaWZpY2F0aW9uCgkgKiBvZiBCbHVldG9vdGggQTJEUCB3aGljaCBpcyBkZXRlcm1pbmVkIGJ5IFNSQyBhbmQgU05LCgkgKiBkZXZpY2VzIGluIEJsdWV0b290aCB0cmFuc21pc3Npb24uCgkgKiBAUmFuZ2U6CgkgKiAwIGZvciBuYXRpdmUgbW9kZQoJICogNCBmb3IgbW9ubwoJICogMiBmb3IgZHVhbCBjaGFubmVsCgkgKiAxIGZvciBzdGVyZW8KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBjaGFubmVsX21vZGU7CgkvKgoJICogTWF4aW11bSBUcmFuc21pc3Npb24gVW5pdCAoTVRVKS4KCSAqIFRoZSBtaW5pbXVtIE1UVSB0aGF0IGEgTDJDQVAgaW1wbGVtZW50YXRpb24gZm9yIExEQUMgc2hhbGwKCSAqIHN1cHBvcnQgaXMgNjc5IGJ5dGVzLCBiZWNhdXNlIExEQUMgaXMgb3B0aW1pemVkIHdpdGggMi1ESDUKCSAqIHBhY2tldCBhcyBpdHMgdGFyZ2V0LgoJICogQFJhbmdlIDogNjc5CgkgKiBARGVmYXVsdDogNjc5IGZvciBMREFDQlRfTVRVXzJESDUKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgICBtdHU7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2xkYWNfZW5jX2NmZ190IHsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCAgY3VzdG9tX2NvbmZpZzsKCXN0cnVjdCBhc21fbGRhY19zcGVjaWZpY19lbmNfY2ZnX3QgIGxkYWNfc3BlY2lmaWNfY29uZmlnOwoJc3RydWN0IGFmZV9hYnJfZW5jX2NmZ190IGFicl9jb25maWc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2VuY19mbXRfaWRfcGFyYW1fdCB7CgkvKgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqICAjQVNNX01FRElBX0ZNVF9TQkMKCSAqICAjQVNNX01FRElBX0ZNVF9BQUNfVjIKCSAqIEFueSBPcGVuRFNQIHN1cHBvcnRlZCB2YWx1ZXMKCSAqLwoJdWludDMyX3QgICAgZm10X2lkOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wb3J0X21lZGlhX3R5cGVfdCB7CgkvKgoJICogTWlub3IgdmVyc2lvbgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX1BPUlRfTUVESUFfVFlQRS4KCSAqLwoJdWludDMyX3QgICAgbWlub3JfdmVyc2lvbjsKCgkvKgoJICogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgcG9ydC4KCSAqIEB2YWx1ZXMKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzExXzAyNUsKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xMksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8xNksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yMl8wNUsKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yNEsKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV8zMksKCSAqICNBRkVfUE9SVF9TQU1QTEVfUkFURV80NF8xSwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzQ4SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzg4XzJLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfOTZLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTc2XzRLCgkgKiAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTkySwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzM1Ml84SwoJICogI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzM4NEsKCSAqLwoJdWludDMyX3QgICAgc2FtcGxlX3JhdGU7CgoJLyoKCSAqIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgoJICogQHZhbHVlcyAxNiwgMjQKCSAqLwoJdWludDE2X3QgICAgYml0X3dpZHRoOwoKCS8qCgkgKiBOdW1iZXIgb2YgY2hhbm5lbHMuCgkgKiBAdmFsdWVzIDEgdG8gI0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVAoJICovCgl1aW50MTZfdCAgICBudW1fY2hhbm5lbHM7CgoJLyoKCSAqIERhdGEgZm9ybWF0IHN1cHBvcnRlZCBieSB0aGlzIHBvcnQuCgkgKiBJZiB0aGUgcG9ydCBtZWRpYSB0eXBlIGFuZCBkZXZpY2UgbWVkaWEgdHlwZSBhcmUgZGlmZmVyZW50LAoJICogaXQgc2lnbmlmaWVzIGEgZW5jb2RpbmcvZGVjb2RpbmcgdXNlIGNhc2UKCSAqIEB2YWx1ZXMKCSAqICNBRkVfUE9SVF9EQVRBX0ZPUk1BVF9QQ00KCSAqICNBRkVfUE9SVF9EQVRBX0ZPUk1BVF9HRU5FUklDX0NPTVBSRVNTRUQKCSAqLwoJdWludDE2X3QgICBkYXRhX2Zvcm1hdDsKCgkvKlRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4qLwoJdWludDE2X3QgICByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnVuaW9uIGFmZV9lbmNfY29uZmlnX2RhdGEgewoJc3RydWN0IGFzbV9zYmNfZW5jX2NmZ190IHNiY19jb25maWc7CglzdHJ1Y3QgYXNtX2FhY19lbmNfY2ZnX3YyX3QgYWFjX2NvbmZpZzsKCXN0cnVjdCBhc21fY3VzdG9tX2VuY19jZmdfdCAgY3VzdG9tX2NvbmZpZzsKCXN0cnVjdCBhc21fY2VsdF9lbmNfY2ZnX3QgIGNlbHRfY29uZmlnOwoJc3RydWN0IGFzbV9hcHR4X2VuY19jZmdfdCAgYXB0eF9jb25maWc7CglzdHJ1Y3QgYXNtX2xkYWNfZW5jX2NmZ190ICBsZGFjX2NvbmZpZzsKfTsKCnN0cnVjdCBhZmVfZW5jX2NvbmZpZyB7Cgl1MzIgZm9ybWF0OwoJdTMyIHNjcmFtYmxlcl9tb2RlOwoJdTMyIG1vbm9fbW9kZTsKCXVuaW9uIGFmZV9lbmNfY29uZmlnX2RhdGEgZGF0YTsKfTsKCnN0cnVjdCBhZmVfZGVjX2NvbmZpZyB7Cgl1MzIgZm9ybWF0OwoJc3RydWN0IGFmZV9hYnJfZGVjX2NmZ190IGFicl9kZWNfY2ZnOwp9OwoKc3RydWN0IGFmZV9lbmNfY2ZnX2Jsa19wYXJhbV90IHsKCXVpbnQzMl90IGVuY19jZmdfYmxrX3NpemU7CgkvKgoJICpTaXplIG9mIHRoZSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gYmxvY2sgdGhhdCBmb2xsb3dzIHRoaXMgbWVtYmVyCgkgKi8KCXVuaW9uIGFmZV9lbmNfY29uZmlnX2RhdGEgZW5jX2Jsa19jb25maWc7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfRU5DT0RFUl9QQVJBTV9JRF9QQUNLRVRJWkVSX0lEIHBhcmFtZXRlci4KICovCnN0cnVjdCBhdnNfZW5jX3BhY2tldGl6ZXJfaWRfcGFyYW1fdCB7CgkvKgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqICNBVlNfTU9EVUxFX0lEX1BBQ0tFVElaRVJfQ09QCgkgKiBBbnkgT3BlbkRTUCBzdXBwb3J0ZWQgdmFsdWVzCgkgKi8KCXVpbnQzMl90IGVuY19wYWNrZXRpemVyX2lkOwp9OwoKLyoKICogUGF5bG9hZCBvZiB0aGUgQVZTX0VOQ09ERVJfUEFSQU1fSURfRU5BQkxFX1NDUkFNQkxJTkcgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGF2c19lbmNfc2V0X3NjcmFtYmxlcl9wYXJhbV90IHsKCS8qCgkgKiAgU3VwcG9ydGVkIHZhbHVlczoKCSAqICAxIDogZW5hYmxlIHNjcmFtYmxlcgoJICogIDAgOiBkaXNhYmxlIHNjcmFtYmxlcgoJICovCgl1aW50MzJfdCBlbmFibGVfc2NyYW1ibGVyOwp9OwoKLyoKICogUGF5bG9hZCBvZiB0aGUgQ0FQSV9WMl9QQVJBTV9JRF9BUFRYX0VOQ19TV0lUQ0hfVE9fTU9OTyBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX2VuY19zZXRfY2hhbm5lbF9tb2RlX3BhcmFtX3QgewoJLyoKCSogIFN1cHBvcnRlZCB2YWx1ZXM6CgkqICAxIDogbW9ubwoJKiAgMiA6IGR1YWxfbW9ubwoJKi8KCXUzMiBjaGFubmVsX21vZGU7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfRU5DT0RFUl9QQVJBTV9JRF9CSVRfUkFURV9MRVZFTF9NQVAgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGFmZV9lbmNfbGV2ZWxfdG9fYml0cmF0ZV9tYXBfcGFyYW1fdCB7CgkvKgoJICogUGFyYW1ldGVyIGZvciBtYXBwaW5nIGxpbmsgcXVhbGl0eSBsZXZlbCB0byBiaXRyYXRlLgoJICovCglzdHJ1Y3QgYWZlX3F1YWxpdHlfbGV2ZWxfdG9fYml0cmF0ZV9pbmZvIG1hcHBpbmdfdGFibGU7Cn07CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBVlNfRU5DREVDX1BBUkFNX0lEX0RFQ19UT19FTkNfQ09NTVVOSUNBVElPTiBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX2VuY19kZWNfaW1jX2luZm9fcGFyYW1fdCB7CgkvKgoJICogUGFyYW1ldGVyIHRvIHNldCB1cCBJbnRlciBNb2R1bGUgQ29tbXVuaWNhdGlvbiAoSU1DKSBiZXR3ZWVuCgkgKiBBRkUgRGVjb2RlciBhbmQgRW5jb2Rlci4KCSAqLwoJc3RydWN0IGFmZV9pbWNfZGVjX2VuY19pbmZvIGltY19pbmZvOwp9OwoKLyoKICogUGF5bG9hZCBvZiB0aGUgQVZTX0RFQ09ERVJfUEFSQU1fSURfREVQQUNLRVRJWkVSX0lEIHBhcmFtZXRlci4KICovCnN0cnVjdCBhdnNfZGVjX2RlcGFja2V0aXplcl9pZF9wYXJhbV90IHsKCS8qCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOgoJICogI0FWU19NT0RVTEVfSURfREVQQUNLRVRJWkVSX0NPUAoJICogQW55IE9wZW5EU1Agc3VwcG9ydGVkIHZhbHVlcwoJICovCgl1aW50MzJfdCBkZWNfZGVwYWNrZXRpemVyX2lkOwp9OwoKdW5pb24gYWZlX3BvcnRfY29uZmlnIHsKCXN0cnVjdCBhZmVfcGFyYW1faWRfcGNtX2NmZyAgICAgICAgICAgICAgIHBjbTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfaTJzX2NmZyAgICAgICAgICAgICAgIGkyczsKCXN0cnVjdCBhZmVfcGFyYW1faWRfaGRtaV9tdWx0aV9jaGFuX2F1ZGlvX2NmZyBoZG1pX211bHRpX2NoOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zbGltYnVzX2NmZyAgICAgICAgICAgc2xpbV9zY2g7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3J0X3Byb3h5X3BvcnRfY2ZnICAgICBydHByb3h5OwoJc3RydWN0IGFmZV9wYXJhbV9pZF9pbnRlcm5hbF9idF9mbV9jZmcgICAgaW50X2J0X2ZtOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9wc2V1ZG9fcG9ydF9jZmcgICAgICAgcHNldWRvX3BvcnQ7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2RldmljZV9od19kZWxheV9jZmcgICBod19kZWxheTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfc3BkaWZfY2ZnICAgICAgICAgICAgIHNwZGlmOwoJc3RydWN0IGFmZV9wYXJhbV9pZF9zZXRfdG9wb2xvZ3lfY2ZnICAgICAgdG9wb2xvZ3k7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3RkbV9jZmcgICAgICAgICAgICAgICB0ZG07CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX3VzYl9hdWRpb19jZmcgICAgICAgICB1c2JfYXVkaW87CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2FwdHhfc3luY19tb2RlICAgICAgICBzeW5jX21vZGVfcGFyYW07CglzdHJ1Y3QgYWZlX2VuY19mbXRfaWRfcGFyYW1fdCAgICAgICAgICAgICBlbmNfZm10OwoJc3RydWN0IGFmZV9wb3J0X21lZGlhX3R5cGVfdCAgICAgICAgICAgICAgbWVkaWFfdHlwZTsKCXN0cnVjdCBhZmVfZW5jX2NmZ19ibGtfcGFyYW1fdCAgICAgICAgICAgIGVuY19ibGtfcGFyYW07CglzdHJ1Y3QgYXZzX2VuY19wYWNrZXRpemVyX2lkX3BhcmFtX3QgICAgICBlbmNfcGt0X2lkX3BhcmFtOwoJc3RydWN0IGF2c19lbmNfc2V0X3NjcmFtYmxlcl9wYXJhbV90ICAgICAgZW5jX3NldF9zY3JhbWJsZXJfcGFyYW07CglzdHJ1Y3QgYXZzX2RlY19kZXBhY2tldGl6ZXJfaWRfcGFyYW1fdCAgICBkZWNfZGVwa3RfaWRfcGFyYW07CglzdHJ1Y3QgYWZlX2VuY19sZXZlbF90b19iaXRyYXRlX21hcF9wYXJhbV90ICAgIG1hcF9wYXJhbTsKCXN0cnVjdCBhZmVfZW5jX2RlY19pbWNfaW5mb19wYXJhbV90ICAgICAgIGltY19pbmZvX3BhcmFtOwoJc3RydWN0IGFmZV9lbmNfc2V0X2NoYW5uZWxfbW9kZV9wYXJhbV90ICAgY2hhbm5lbF9tb2RlX3BhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9hdWRpb2lmX2NvbmZpZ19jb21tYW5kX25vX3BheWxvYWQgewoJc3RydWN0IGFwcl9oZHIJCQloZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfYXVkaW9pZl9jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkcgkJCWhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgcGRhdGE7Cgl1bmlvbiBhZmVfcG9ydF9jb25maWcgICAgICAgICAgICBwb3J0Owp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUE9SVF9DTURfREVWSUNFX1NUQVJUIDB4MDAwMTAwRTUKCi8qICBQYXlsb2FkIG9mIHRoZSAjQUZFX1BPUlRfQ01EX0RFVklDRV9TVEFSVC4qLwpzdHJ1Y3QgYWZlX3BvcnRfY21kX2RldmljZV9zdGFydCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IGludGVyZmFjZSBhbmQgZGlyZWN0aW9uIChSeCBvciBUeCkgdG8gc3RhcnQuIEFuIGV2ZW4KICogbnVtYmVyIHJlcHJlc2VudHMgdGhlIFJ4IGRpcmVjdGlvbiwgYW5kIGFuIG9kZCBudW1iZXIgcmVwcmVzZW50cwogKiB0aGUgVHggZGlyZWN0aW9uLgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciAzMi1iaXQgYWxpZ25tZW50LiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIDAuKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QT1JUX0NNRF9ERVZJQ0VfU1RPUCAgMHgwMDAxMDBFNgoKLyogUGF5bG9hZCBvZiB0aGUgI0FGRV9QT1JUX0NNRF9ERVZJQ0VfU1RPUC4gKi8Kc3RydWN0IGFmZV9wb3J0X2NtZF9kZXZpY2Vfc3RvcCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBwb3J0X2lkOwovKiBQb3J0IGludGVyZmFjZSBhbmQgZGlyZWN0aW9uIChSeCBvciBUeCkgdG8gc3RhcnQuIEFuIGV2ZW4KICogbnVtYmVyIHJlcHJlc2VudHMgdGhlIFJ4IGRpcmVjdGlvbiwgYW5kIGFuIG9kZCBudW1iZXIgcmVwcmVzZW50cwogKiB0aGUgVHggZGlyZWN0aW9uLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIDMyLWJpdCBhbGlnbm1lbnQuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4qLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAweDAwMDEwMEVBCgovKiAgTWVtb3J5IG1hcCByZWdpb25zIGNvbW1hbmQgcGF5bG9hZCB1c2VkIGJ5IHRoZQogKiAjQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgLgogKiBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgY2xpZW50cyB0byBtYXAgbXVsdGlwbGUgc2hhcmVkIG1lbW9yeQogKiByZWdpb25zIGluIGEgc2luZ2xlIGNvbW1hbmQuIEZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUKICogbnVtX3JlZ2lvbnMgb2YgYWZlX3NlcnZpY2Vfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZC4KICovCnN0cnVjdCBhZmVfc2VydmljZV9jbWRfc2hhcmVkX21lbV9tYXBfcmVnaW9ucyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CnUxNiAgICAgICAgICAgICAgICAgIG1lbV9wb29sX2lkOwovKiBUeXBlIG9mIG1lbW9yeSBvbiB3aGljaCB0aGlzIG1lbW9yeSByZWdpb24gaXMgbWFwcGVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBRFNQX01FTU9SWV9NQVBfRUJJX1BPT0wKICogLSAjQURTUF9NRU1PUllfTUFQX1NNSV9QT09MCiAqIC0gI0FEU1BfTUVNT1JZX01BUF9TSE1FTThfNEtfUE9PTAogKiAtIE90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQKICoKICogVGhlIG1lbW9yeSBwb29sIElEIGltcGxpY2l0bHkgZGVmaW5lcyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZQogKiBtZW1vcnkuIENoYXJhY3RlcmlzdGljcyBtYXkgaW5jbHVkZSBhbGlnbm1lbnQgdHlwZSwgcGVybWlzc2lvbnMsCiAqIGV0Yy4KICoKICogQURTUF9NRU1PUllfTUFQX0VCSV9QT09MIGlzIEV4dGVybmFsIEJ1ZmZlciBJbnRlcmZhY2UgdHlwZSBtZW1vcnkKICogQURTUF9NRU1PUllfTUFQX1NNSV9QT09MIGlzIFNoYXJlZCBNZW1vcnkgSW50ZXJmYWNlIHR5cGUgbWVtb3J5CiAqIEFEU1BfTUVNT1JZX01BUF9TSE1FTThfNEtfUE9PTCBpcyBzaGFyZWQgbWVtb3J5LCBieXRlCiAqIGFkZHJlc3NhYmxlLCBhbmQgNCBLQiBhbGlnbmVkLgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX3JlZ2lvbnM7Ci8qIE51bWJlciBvZiByZWdpb25zIHRvIG1hcC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSBBbnkgdmFsdWUgZ3JlYXRlciB0aGFuIHplcm8KICovCgoJdTMyICAgICAgICAgICAgICAgICAgcHJvcGVydHlfZmxhZzsKLyogQ29uZmlndXJlcyBvbmUgY29tbW9uIHByb3BlcnR5IGZvciBhbGwgdGhlIHJlZ2lvbnMgaW4gdGhlCiAqIHBheWxvYWQuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gMHgwMDAwMDAwMCB0byAweDAwMDAwMDAxCiAqCiAqIGIwIC0gYml0IDAgaW5kaWNhdGVzIHBoeXNpY2FsIG9yIHZpcnR1YWwgbWFwcGluZyAwIFNoYXJlZCBtZW1vcnkKICogYWRkcmVzcyBwcm92aWRlZCBpbiBhZmVfc2VydmljZV9zaGFyZWRfbWFwX3JlZ2lvbl9wYXlsb2FkaXMgYQogKiBwaHlzaWNhbCBhZGRyZXNzLiBUaGUgc2hhcmVkIG1lbW9yeSBuZWVkcyB0byBiZSBtYXBwZWQoIGhhcmR3YXJlCiAqIFRMQiBlbnRyeSkgYW5kIGEgc29mdHdhcmUgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgZm9yIGludGVybmFsCiAqIGJvb2sga2VlcGluZy4KICoKICogMSBTaGFyZWQgbWVtb3J5IGFkZHJlc3MgcHJvdmlkZWQgaW4KICogYWZlX3NlcnZpY2Vfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZGlzIGEgdmlydHVhbCBhZGRyZXNzLiBUaGUKICogc2hhcmVkIG1lbW9yeSBtdXN0IG5vdCBiZSBtYXBwZWQgKHNpbmNlIGhhcmR3YXJlIFRMQiBlbnRyeSBpcwogKiBhbHJlYWR5IGF2YWlsYWJsZSkgYnV0IGEgc29mdHdhcmUgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgZm9yCiAqIGludGVybmFsIGJvb2sga2VlcGluZy4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHR3byBzZXJ2aWNlcyB3aXRoIGluCiAqIEFEU1AgaXMgY29tbXVuaWNhdGluZyB2aWEgQVBSLiBUaGV5IGNhbiBub3cgZGlyZWN0bHkgY29tbXVuaWNhdGUKICogdmlhIHRoZSBWaXJ0dWFsIGFkZHJlc3MgaW5zdGVhZCBvZiBQaHlzaWNhbCBhZGRyZXNzLiBUaGUgdmlydHVhbAogKiByZWdpb25zIG11c3QgYmUgY29udGlndW91cy4gbnVtX3JlZ2lvbnMgbXVzdCBiZSAxIGluIHRoaXMgY2FzZS4KICoKICogYjMxLWIxIC0gcmVzZXJ2ZWQgYml0cy4gbXVzdCBiZSBzZXQgdG8gemVybwogKi8KCgp9IF9fcGFja2VkOwovKiAgTWFwIHJlZ2lvbiBwYXlsb2FkIHVzZWQgYnkgdGhlCiAqIGFmZV9zZXJ2aWNlX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWRzdHJ1Y3R1cmUuCiAqLwpzdHJ1Y3QgYWZlX3NlcnZpY2Vfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCB7Cgl1MzIgICAgICAgICAgICAgICAgICBzaG1fYWRkcl9sc3c7Ci8qIGxlYXN0IHNpZ25pZmljYW50IHdvcmQgb2Ygc3RhcnRpbmcgYWRkcmVzcyBpbiB0aGUgbWVtb3J5CiAqIHJlZ2lvbiB0byBtYXAuIEl0IG11c3QgYmUgY29udGlndW91cyBtZW1vcnksIGFuZCBpdCBtdXN0IGJlIDQgS0IKICogYWxpZ25lZC4KICogU3VwcG9ydGVkIHZhbHVlczogLSBBbnkgMzIgYml0IHZhbHVlCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBzaG1fYWRkcl9tc3c7Ci8qIG1vc3Qgc2lnbmlmaWNhbnQgd29yZCBvZiBzdGFydG5nIGFkZHJlc3MgaW4gdGhlIG1lbW9yeSByZWdpb24KICogdG8gbWFwLiBGb3IgMzIgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgdGhpcyBmaWVsZCBtdXN0IGJlIHNldAogKiB0byB6ZXJvLiBGb3IgMzYgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYml0MzEgdG8gYml0IDQgbXVzdCBiZQogKiBzZXQgdG8gemVybwogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIEZvciAzMiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCB0aGlzIGZpZWxkCiAqIG11c3QgYmUgc2V0IHRvIHplcm8uIC0gRm9yIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdDMxIHRvCiAqIGJpdCA0IG11c3QgYmUgc2V0IHRvIHplcm8gLSBGb3IgNjQgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYW55CiAqIDMyIGJpdCB2YWx1ZQogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgbWVtX3NpemVfYnl0ZXM7Ci8qIE51bWJlciBvZiBieXRlcyBpbiB0aGUgcmVnaW9uLiBUaGUgYURTUCB3aWxsIGFsd2F5cyBtYXAgdGhlCiAqIHJlZ2lvbnMgYXMgdmlydHVhbCBjb250aWd1b3VzIG1lbW9yeSwgYnV0IHRoZSBtZW1vcnkgc2l6ZSBtdXN0IGJlCiAqIGluIG11bHRpcGxlcyBvZiA0IEtCIHRvIGF2b2lkIGdhcHMgaW4gdGhlIHZpcnR1YWxseSBjb250aWd1b3VzCiAqIG1hcHBlZCBtZW1vcnkuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gbXVsdGlwbGVzIG9mIDRLQgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9TRVJWSUNFX0NNRFJTUF9TSEFSRURfTUVNX01BUF9SRUdJT05TIDB4MDAwMTAwRUIKc3RydWN0IGFmZV9zZXJ2aWNlX2NtZHJzcF9zaGFyZWRfbWVtX21hcF9yZWdpb25zIHsKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBBIG1lbW9yeSBtYXAgaGFuZGxlIGVuY2Fwc3VsYXRpbmcgc2hhcmVkIG1lbW9yeSBhdHRyaWJ1dGVzIGlzCiAqIHJldHVybmVkIGlmZiBBRkVfU0VSVklDRV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kIGlzCiAqIHN1Y2Nlc3NmdWwuIEluIHRoZSBjYXNlIG9mIGZhaWx1cmUgLCBhIGdlbmVyaWMgQVBSIGVycm9yIHJlc3BvbnNlCiAqIGlzIHJldHVybmVkIHRvIHRoZSBjbGllbnQuCiAqCiAqIFN1cHBvcnRlZCBWYWx1ZXM6IC0gQW55IDMyIGJpdCB2YWx1ZQogKi8KCn0gX19wYWNrZWQ7CiNkZWZpbmUgQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fVU5NQVBfUkVHSU9OUyAweDAwMDEwMEVDCi8qIE1lbW9yeSB1bm1hcCByZWdpb25zIGNvbW1hbmQgcGF5bG9hZCB1c2VkIGJ5IHRoZQogKiAjQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fVU5NQVBfUkVHSU9OUwogKgogKiBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgY2xpZW50cyB0byB1bm1hcCBtdWx0aXBsZSBzaGFyZWQgbWVtb3J5CiAqIHJlZ2lvbnMgaW4gYSBzaW5nbGUgY29tbWFuZC4KICovCgoKc3RydWN0IGFmZV9zZXJ2aWNlX2NtZF9zaGFyZWRfbWVtX3VubWFwX3JlZ2lvbnMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwp1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogbWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkKICogQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZHMKICoKICogU3VwcG9ydGVkIFZhbHVlczoKICogLSBBbnkgMzIgYml0IHZhbHVlCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSAgQUZFX1BPUlRfQ01EX0dFVF9QQVJBTV9WMiAweDAwMDEwMEYwCgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QT1JUX0NNRF9HRVRfUEFSQU1fVjIgY29tbWFuZCwKICogd2hpY2ggcXVlcmllcyBmb3Igb25lIHBvc3QvcHJlcHJvY2Vzc2luZyBwYXJhbWV0ZXIgb2YgYQogKiBzdHJlYW0uCiAqLwpzdHJ1Y3QgYWZlX3BvcnRfY21kX2dldF9wYXJhbV92MiB7Cgl1MTYgcG9ydF9pZDsKLyogUG9ydCBpbnRlcmZhY2UgYW5kIGRpcmVjdGlvbiAoUnggb3IgVHgpIHRvIHN0YXJ0LiAqLwoKCXUxNiBwYXlsb2FkX3NpemU7Ci8qIE1heGltdW0gZGF0YSBzaXplIG9mIHRoZSBwYXJhbWV0ZXIgSUQvbW9kdWxlIElEIGNvbWJpbmF0aW9uLgogKiBUaGlzIGlzIGEgbXVsdGlwbGUgb2YgZm91ciBieXRlcwogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgoJdTMyIHBheWxvYWRfYWRkcmVzc19sc3c7Ci8qIExTVyBvZiA2NCBiaXQgUGF5bG9hZCBhZGRyZXNzLiBBZGRyZXNzIHNob3VsZCBiZSAzMi1ieXRlLAogKiA0a2J5dGUgYWxpZ25lZCBhbmQgbXVzdCBiZSBjb250aWcgbWVtb3J5LgogKi8KCgoJdTMyIHBheWxvYWRfYWRkcmVzc19tc3c7Ci8qIE1TVyBvZiA2NCBiaXQgUGF5bG9hZCBhZGRyZXNzLiBJbiBjYXNlIG9mIDMyLWJpdCBzaGFyZWQKICogbWVtb3J5IGFkZHJlc3MsIHRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gSW4gY2FzZSBvZiAzNi1iaXQKICogc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQtNCB0byBiaXQtMzEgbXVzdCBiZSBzZXQgdG8gemVyby4KICogQWRkcmVzcyBzaG91bGQgYmUgMzItYnl0ZSwgNGtieXRlIGFsaWduZWQgYW5kIG11c3QgYmUgY29udGlndW91cwogKiBtZW1vcnkuCiAqLwoKCXUzMiBtZW1fbWFwX2hhbmRsZTsKLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkKICogQUZFX1NFUlZJQ0VfQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZHMuCiAqIFN1cHBvcnRlZCBWYWx1ZXM6IC0gTlVMTCAtLSBNZXNzYWdlLiBUaGUgcGFyYW1ldGVyIGRhdGEgaXMKICogaW4tYmFuZC4gLSBOb24tTlVMTCAtLSBUaGUgcGFyYW1ldGVyIGRhdGEgaXMgT3V0LWJhbmQuUG9pbnRlciB0bwogKiAtIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGluIHNoYXJlZCBtZW1vcnkgb2YgdGhlIHBheWxvYWQgZGF0YS4KICogRm9yIGRldGFpbGVkIHBheWxvYWQgY29udGVudCwgc2VlIHRoZSBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyCiAqIHN0cnVjdHVyZQogKi8KCgoJdTMyIG1vZHVsZV9pZDsKLyogSUQgb2YgdGhlIG1vZHVsZSB0byBiZSBxdWVyaWVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBWYWxpZCBtb2R1bGUgSUQKICovCgoJdTMyIHBhcmFtX2lkOwovKiBJRCBvZiB0aGUgcGFyYW1ldGVyIHRvIGJlIHF1ZXJpZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFZhbGlkIHBhcmFtZXRlciBJRAogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BPUlRfQ01EUlNQX0dFVF9QQVJBTV9WMiAweDAwMDEwMTA2CgovKiBQYXlsb2FkIG9mIHRoZSAjQUZFX1BPUlRfQ01EUlNQX0dFVF9QQVJBTV9WMiBtZXNzYWdlLCB3aGljaAogKiByZXNwb25kcyB0byBhbiAjQUZFX1BPUlRfQ01EX0dFVF9QQVJBTV9WMiBjb21tYW5kLgogKgogKiBJbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgaXMgdGhlIHBhcmFtZXRlcnMgc3RydWN0dXJlCiAqIChhZmVfcG9ydF9wYXJhbV9kYXRhKSBjb250YWluaW5nIHRoZSByZXNwb25zZShhY2tub3dsZWRnbWVudCkKICogcGFyYW1ldGVyIHBheWxvYWQuIFRoaXMgcGF5bG9hZCBpcyBpbmNsdWRlZCBmb3IgYW4gaW4tYmFuZAogKiBzY2VuYXJpby4gRm9yIGFuIGFkZHJlc3Mvc2hhcmVkIG1lbW9yeS1iYXNlZCBzZXQgcGFyYW1ldGVyLCB0aGlzCiAqIHBheWxvYWQgaXMgbm90IG5lZWRlZC4KICovCgoKc3RydWN0IGFmZV9wb3J0X2NtZHJzcF9nZXRfcGFyYW1fdjIgewoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfTFBBU1NfQ09SRV9TSEFSRURfQ0xPQ0tfQ09ORklHCTB4MDAwMTAyOEMKI2RlZmluZSBBRkVfQVBJX1ZFUlNJT05fTFBBU1NfQ09SRV9TSEFSRURfQ0xLX0NPTkZJRwkweDEKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9MUEFTU19DT1JFX1NIQVJFRF9DTE9DS19DT05GSUcgcGFyYW1ldGVyIHVzZWQgYnkKICogQUZFX01PRFVMRV9BVURJT19ERVZfSU5URVJGQUNFLgogKi8Kc3RydWN0IGFmZV9wYXJhbV9pZF9scGFzc19jb3JlX3NoYXJlZF9jbGtfY2ZnIHsKCXUzMglscGFzc19jb3JlX3NoYXJlZF9jbGtfY2ZnX21pbm9yX3ZlcnNpb247Ci8qCiAqIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgbHBhc3MgY29yZSBzaGFyZWQgY2xvY2sgY29uZmlndXJhdGlvbgogKiBTdXBwb3J0ZWQgdmFsdWU6IEFGRV9BUElfVkVSU0lPTl9MUEFTU19DT1JFX1NIQVJFRF9DTEtfQ09ORklHCiAqLwoJdTMyCWVuYWJsZTsKLyoKICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGxwYXNzIGNvcmUgc2hhcmVkIGNsb2NrIGlzCiAqIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgwKS4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xwYXNzX2NvcmVfc2hhcmVkX2Nsa19jb25maWdfY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkcgkJICAgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfbHBhc3NfY29yZV9zaGFyZWRfY2xrX2NmZyBjbGtfY2ZnOwp9IF9fcGFja2VkOwoKLyogYWRzcF9hZmVfc2VydmljZV9jb21tYW5kcy5oICovCgojZGVmaW5lIEFEU1BfTUVNT1JZX01BUF9FQklfUE9PTCAgICAgIDAKCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX1NNSV9QT09MICAgICAgMQojZGVmaW5lIEFEU1BfTUVNT1JZX01BUF9JTUVNX1BPT0wgICAgICAyCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX1NITUVNOF80S19QT09MICAgICAgMwoKLyogRGVmaW5pdGlvbiBvZiB2aXJ0dWFsIG1lbW9yeSBmbGFnICovCiNkZWZpbmUgQURTUF9NRU1PUllfTUFQX1ZJUlRVQUxfTUVNT1JZIDEKCi8qIERlZmluaXRpb24gb2YgcGh5c2ljYWwgbWVtb3J5IGZsYWcgKi8KI2RlZmluZSBBRFNQX01FTU9SWV9NQVBfUEhZU0lDQUxfTUVNT1JZIDAKCiNkZWZpbmUgTlVMTF9QT1BQX1RPUE9MT0dZCQkJCTB4MDAwMTBDNjgKI2RlZmluZSBOVUxMX0NPUFBfVE9QT0xPR1kJCQkJMHgwMDAxMDMxMgojZGVmaW5lIERFRkFVTFRfQ09QUF9UT1BPTE9HWQkJCQkweDAwMDEwMzE0CiNkZWZpbmUgREVGQVVMVF9QT1BQX1RPUE9MT0dZCQkJCTB4MDAwMTBCRTQKI2RlZmluZSBDT01QUkVTU0VEX1BBU1NUSFJPVUdIX0RFRkFVTFRfVE9QT0xPR1kgICAgICAgICAweDAwMDEwNzZCCiNkZWZpbmUgQ09NUFJFU1NFRF9QQVNTVEhST1VHSF9OT05FX1RPUE9MT0dZICAgICAgICAgICAgMHgwMDAxMDc3NAojZGVmaW5lIFZQTV9UWF9TTV9FQ05TX0NPUFBfVE9QT0xPR1kJCQkweDAwMDEwRjcxCiNkZWZpbmUgVlBNX1RYX1NNX0VDTlNfVjJfQ09QUF9UT1BPTE9HWQkJCTB4MDAwMTBGODkKI2RlZmluZSBWUE1fVFhfRE1fRkxVRU5DRV9DT1BQX1RPUE9MT0dZCQkJMHgwMDAxMEY3MgojZGVmaW5lIFZQTV9UWF9RTUlDX0ZMVUVOQ0VfQ09QUF9UT1BPTE9HWQkJMHgwMDAxMEY3NQojZGVmaW5lIFZQTV9UWF9ETV9SRkVDTlNfQ09QUF9UT1BPTE9HWQkJCTB4MDAwMTBGODYKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTl9UT1BPTE9HWV9JRF9EVFNfSFBYCQkweDEwMDE1MDAyCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5fVE9QT0xPR1lfSURfQVVESU9TUEhFUkUJMHgxMDAyODAwMAoKLyogTWVtb3J5IG1hcCByZWdpb25zIGNvbW1hbmQgcGF5bG9hZCB1c2VkIGJ5IHRoZQogKiAjQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICwjQURNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TCiAqIGNvbW1hbmRzLgogKgogKiBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgY2xpZW50cyB0byBtYXAgbXVsdGlwbGUgc2hhcmVkIG1lbW9yeQogKiByZWdpb25zIGluIGEgc2luZ2xlIGNvbW1hbmQuIEZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBhcmUKICogbnVtX3JlZ2lvbnMgb2YgYXZzX3NoYXJlZF9tYXBfcmVnaW9uX3BheWxvYWQuCiAqLwoKCnN0cnVjdCBhdnNfY21kX3NoYXJlZF9tZW1fbWFwX3JlZ2lvbnMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTE2ICAgICAgICAgICAgICAgICAgbWVtX3Bvb2xfaWQ7Ci8qIFR5cGUgb2YgbWVtb3J5IG9uIHdoaWNoIHRoaXMgbWVtb3J5IHJlZ2lvbiBpcyBtYXBwZWQuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gI0FEU1BfTUVNT1JZX01BUF9FQklfUE9PTCAtCiAqICNBRFNQX01FTU9SWV9NQVBfU01JX1BPT0wgLSAjQURTUF9NRU1PUllfTUFQX0lNRU1fUE9PTAogKiAodW5zdXBwb3J0ZWQpIC0gI0FEU1BfTUVNT1JZX01BUF9TSE1FTThfNEtfUE9PTCAtIE90aGVyIHZhbHVlcwogKiBhcmUgcmVzZXJ2ZWQKICoKICogVGhlIG1lbW9yeSBJRCBpbXBsaWNpdGx5IGRlZmluZXMgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUKICogbWVtb3J5LiBDaGFyYWN0ZXJpc3RpY3MgbWF5IGluY2x1ZGUgYWxpZ25tZW50IHR5cGUsIHBlcm1pc3Npb25zLAogKiBldGMuCiAqCiAqIFNITUVNOF80SyBpcyBzaGFyZWQgbWVtb3J5LCBieXRlIGFkZHJlc3NhYmxlLCBhbmQgNCBLQiBhbGlnbmVkLgogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX3JlZ2lvbnM7CgkvKiBOdW1iZXIgb2YgcmVnaW9ucyB0byBtYXAuKi8KCgl1MzIgICAgICAgICAgICAgICAgICBwcm9wZXJ0eV9mbGFnOwovKiBDb25maWd1cmVzIG9uZSBjb21tb24gcHJvcGVydHkgZm9yIGFsbCB0aGUgcmVnaW9ucyBpbiB0aGUKICogcGF5bG9hZC4gTm8gdHdvIHJlZ2lvbnMgaW4gdGhlIHNhbWUgbWVtb3J5IG1hcCByZWdpb25zIGNtZCBjYW4KICogaGF2ZSBkaWZmZXJudCBwcm9wZXJ0eS4gU3VwcG9ydGVkIHZhbHVlczogLSAweDAwMDAwMDAwIHRvCiAqIDB4MDAwMDAwMDEKICoKICogYjAgLSBiaXQgMCBpbmRpY2F0ZXMgcGh5c2ljYWwgb3IgdmlydHVhbCBtYXBwaW5nIDAgc2hhcmVkIG1lbW9yeQogKiBhZGRyZXNzIHByb3ZpZGVkIGluIGF2c19zaGFyZWRfbWFwX3JlZ2lvbnNfcGF5bG9hZCBpcyBwaHlzaWNhbAogKiBhZGRyZXNzLiBUaGUgc2hhcmVkIG1lbW9yeSBuZWVkcyB0byBiZSBtYXBwZWQoIGhhcmR3YXJlIFRMQgogKiBlbnRyeSkKICoKICogYW5kIGEgc29mdHdhcmUgZW50cnkgbmVlZHMgdG8gYmUgYWRkZWQgZm9yIGludGVybmFsIGJvb2sga2VlcGluZy4KICoKICogMSBTaGFyZWQgbWVtb3J5IGFkZHJlc3MgcHJvdmlkZWQgaW4gTWF5UGF5bG9hZFt1c1JlZ2lvbnNdIGlzCiAqIHZpcnR1YWwgYWRkcmVzcy4gVGhlIHNoYXJlZCBtZW1vcnkgbXVzdCBub3QgYmUgbWFwcGVkIChzaW5jZQogKiBoYXJkd2FyZSBUTEIgZW50cnkgaXMgYWxyZWFkeSBhdmFpbGFibGUpIGJ1dCBhIHNvZnR3YXJlIGVudHJ5CiAqIG5lZWRzIHRvIGJlIGFkZGVkIGZvciBpbnRlcm5hbCBib29rIGtlZXBpbmcuIFRoaXMgY2FuIGJlIHVzZWZ1bAogKiBpZiB0d28gc2VydmljZXMgd2l0aCBpbiBBRFNQIGlzIGNvbW11bmljYXRpbmcgdmlhIEFQUi4gVGhleSBjYW4KICogbm93IGRpcmVjdGx5IGNvbW11bmljYXRlIHZpYSB0aGUgVmlydHVhbCBhZGRyZXNzIGluc3RlYWQgb2YKICogUGh5c2ljYWwgYWRkcmVzcy4gVGhlIHZpcnR1YWwgcmVnaW9ucyBtdXN0IGJlIGNvbnRpZ3VvdXMuCiAqCiAqIGIzMS1iMSAtIHJlc2VydmVkIGJpdHMuIG11c3QgYmUgc2V0IHRvIHplcm8KICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGF2c19zaGFyZWRfbWFwX3JlZ2lvbl9wYXlsb2FkIHsKCXUzMiAgICAgICAgICAgICAgICAgIHNobV9hZGRyX2xzdzsKLyogbGVhc3Qgc2lnbmlmaWNhbnQgd29yZCBvZiBzaGFyZWQgbWVtb3J5IGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQogKiByZWdpb24gdG8gbWFwLiBJdCBtdXN0IGJlIGNvbnRpZ3VvdXMgbWVtb3J5LCBhbmQgaXQgbXVzdCBiZSA0IEtCCiAqIGFsaWduZWQuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHNobV9hZGRyX21zdzsKLyogbW9zdCBzaWduaWZpY2FudCB3b3JkIG9mIHNoYXJlZCBtZW1vcnkgYWRkcmVzcyBvZiB0aGUgbWVtb3J5CiAqIHJlZ2lvbiB0byBtYXAuIEZvciAzMiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCB0aGlzIGZpZWxkIG11c3QKICogdGJlIHNldCB0byB6ZXJvLiBGb3IgMzYgYml0IHNoYXJlZCBtZW1vcnkgYWRkcmVzcywgYml0MzEgdG8gYml0IDQKICogbXVzdCBiZSBzZXQgdG8gemVybwogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBtZW1fc2l6ZV9ieXRlczsKLyogTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSByZWdpb24uCiAqCiAqIFRoZSBhRFNQIHdpbGwgYWx3YXlzIG1hcCB0aGUgcmVnaW9ucyBhcyB2aXJ0dWFsIGNvbnRpZ3VvdXMKICogbWVtb3J5LCBidXQgdGhlIG1lbW9yeSBzaXplIG11c3QgYmUgaW4gbXVsdGlwbGVzIG9mIDQgS0IgdG8gYXZvaWQKICogZ2FwcyBpbiB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWFwcGVkIG1lbW9yeS4KICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGF2c19jbWRfc2hhcmVkX21lbV91bm1hcF9yZWdpb25zIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogLCBBRE1fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMsIGNvbW1hbmRzCiAqLwoKfSBfX3BhY2tlZDsKCi8qIE1lbW9yeSBtYXAgY29tbWFuZCByZXNwb25zZSBwYXlsb2FkIHVzZWQgYnkgdGhlCiAqICNBU01fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogLCNBRE1fQ01EUlNQX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICovCgoKc3RydWN0IGF2c19jbWRyc3Bfc2hhcmVkX21lbV9tYXBfcmVnaW9ucyB7Cgl1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogQSBtZW1vcnkgbWFwIGhhbmRsZSBlbmNhcHN1bGF0aW5nIHNoYXJlZCBtZW1vcnkgYXR0cmlidXRlcyBpcwogKiByZXR1cm5lZAogKi8KCn0gX19wYWNrZWQ7CgovKmFkc3BfYXVkaW9fbWVtbWFwX2FwaS5oKi8KCi8qIEFTTSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyAqLwpzdHJ1Y3QgYXNtX3dtYV9jZmcgewoJdTE2IGZvcm1hdF90YWc7Cgl1MTYgY2hfY2ZnOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIGF2Z19ieXRlc19wZXJfc2VjOwoJdTE2IGJsb2NrX2FsaWduOwoJdTE2IHZhbGlkX2JpdHNfcGVyX3NhbXBsZTsKCXUzMiBjaF9tYXNrOwoJdTE2IGVuY29kZV9vcHQ7Cgl1MTYgYWR2X2VuY29kZV9vcHQ7Cgl1MzIgYWR2X2VuY29kZV9vcHQyOwoJdTMyIGRyY19wZWFrX3JlZjsKCXUzMiBkcmNfcGVha190YXJnZXQ7Cgl1MzIgZHJjX2F2ZV9yZWY7Cgl1MzIgZHJjX2F2ZV90YXJnZXQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX3dtYXByb19jZmcgewoJdTE2IGZvcm1hdF90YWc7Cgl1MTYgY2hfY2ZnOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIGF2Z19ieXRlc19wZXJfc2VjOwoJdTE2IGJsb2NrX2FsaWduOwoJdTE2IHZhbGlkX2JpdHNfcGVyX3NhbXBsZTsKCXUzMiBjaF9tYXNrOwoJdTE2IGVuY29kZV9vcHQ7Cgl1MTYgYWR2X2VuY29kZV9vcHQ7Cgl1MzIgYWR2X2VuY29kZV9vcHQyOwoJdTMyIGRyY19wZWFrX3JlZjsKCXUzMiBkcmNfcGVha190YXJnZXQ7Cgl1MzIgZHJjX2F2ZV9yZWY7Cgl1MzIgZHJjX2F2ZV90YXJnZXQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2FhY19jZmcgewoJdTE2IGZvcm1hdDsKCXUxNiBhb3Q7Cgl1MTYgZXBfY29uZmlnOwoJdTE2IHNlY3Rpb25fZGF0YV9yZXNpbGllbmNlOwoJdTE2IHNjYWxlZmFjdG9yX2RhdGFfcmVzaWxpZW5jZTsKCXUxNiBzcGVjdHJhbF9kYXRhX3Jlc2lsaWVuY2U7Cgl1MTYgY2hfY2ZnOwoJdTE2IHJlc2VydmVkOwoJdTMyIHNhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9hbXJ3YnBsdXNfY2ZnIHsKCXUzMiAgc2l6ZV9ieXRlczsKCXUzMiAgdmVyc2lvbjsKCXUzMiAgbnVtX2NoYW5uZWxzOwoJdTMyICBhbXJfYmFuZF9tb2RlOwoJdTMyICBhbXJfZHR4X21vZGU7Cgl1MzIgIGFtcl9mcmFtZV9mbXQ7Cgl1MzIgIGFtcl9sc2ZfaWR4Owp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9mbGFjX2NmZyB7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgZXh0X3NhbXBsZV9yYXRlOwoJdTMyIG1pbl9mcmFtZV9zaXplOwoJdTMyIG1heF9mcmFtZV9zaXplOwoJdTE2IHN0cmVhbV9pbmZvX3ByZXNlbnQ7Cgl1MTYgbWluX2Jsa19zaXplOwoJdTE2IG1heF9ibGtfc2l6ZTsKCXUxNiBjaF9jZmc7Cgl1MTYgc2FtcGxlX3NpemU7Cgl1MTYgbWQ1X3N1bTsKfTsKCnN0cnVjdCBhc21fYWxhY19jZmcgewoJdTMyIGZyYW1lX2xlbmd0aDsKCXU4IGNvbXBhdGlibGVfdmVyc2lvbjsKCXU4IGJpdF9kZXB0aDsKCXU4IHBiOwoJdTggbWI7Cgl1OCBrYjsKCXU4IG51bV9jaGFubmVsczsKCXUxNiBtYXhfcnVuOwoJdTMyIG1heF9mcmFtZV9ieXRlczsKCXUzMiBhdmdfYml0X3JhdGU7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgY2hhbm5lbF9sYXlvdXRfdGFnOwp9OwoKc3RydWN0IGFzbV9nNzExX2RlY19jZmcgewoJdTMyIHNhbXBsZV9yYXRlOwp9OwoKc3RydWN0IGFzbV92b3JiaXNfY2ZnIHsKCXUzMiBiaXRfc3RyZWFtX2ZtdDsKfTsKCnN0cnVjdCBhc21fYXBlX2NmZyB7Cgl1MTYgY29tcGF0aWJsZV92ZXJzaW9uOwoJdTE2IGNvbXByZXNzaW9uX2xldmVsOwoJdTMyIGZvcm1hdF9mbGFnczsKCXUzMiBibG9ja3NfcGVyX2ZyYW1lOwoJdTMyIGZpbmFsX2ZyYW1lX2Jsb2NrczsKCXUzMiB0b3RhbF9mcmFtZXM7Cgl1MTYgYml0c19wZXJfc2FtcGxlOwoJdTE2IG51bV9jaGFubmVsczsKCXUzMiBzYW1wbGVfcmF0ZTsKCXUzMiBzZWVrX3RhYmxlX3ByZXNlbnQ7Cn07CgpzdHJ1Y3QgYXNtX2RzZF9jZmcgewoJdTE2IG51bV92ZXJzaW9uOwoJdTE2IGlzX2JpdHdpc2VfYmlnX2VuZGlhbjsKCXUxNiBkc2RfY2hhbm5lbF9ibG9ja19zaXplOwoJdTE2IG51bV9jaGFubmVsczsKCXU4ICBjaGFubmVsX21hcHBpbmdbOF07Cgl1MzIgZHNkX2RhdGFfcmF0ZTsKfTsKCnN0cnVjdCBhc21fc29mdHBhdXNlX3BhcmFtcyB7Cgl1MzIgZW5hYmxlOwoJdTMyIHBlcmlvZDsKCXUzMiBzdGVwOwoJdTMyIHJhbXBpbmdjdXJ2ZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fc29mdHZvbHVtZV9wYXJhbXMgewoJdTMyIHBlcmlvZDsKCXUzMiBzdGVwOwoJdTMyIHJhbXBpbmdjdXJ2ZTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX0VORF9QT0lOVF9ERVZJQ0VfTUFUUklYICAgICAwCgojZGVmaW5lIFBDTV9DSEFOTkVMX05VTEwgMAoKLyogRnJvbnQgbGVmdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0ZMICAgIDEKCi8qIEZyb250IHJpZ2h0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfRlIgICAgMgoKLyogRnJvbnQgY2VudGVyIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfRkMgICAgMwoKLyogTGVmdCBzdXJyb3VuZCBjaGFubmVsLiovCiNkZWZpbmUgUENNX0NIQU5ORUxfTFMgICA0CgovKiBSaWdodCBzdXJyb3VuZCBjaGFubmVsLiovCiNkZWZpbmUgUENNX0NIQU5ORUxfUlMgICA1CgovKiBMb3cgZnJlcXVlbmN5IGVmZmVjdCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX0xGRSAgNgoKLyogQ2VudGVyIHN1cnJvdW5kIGNoYW5uZWw7IFJlYXIgY2VudGVyIGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfQ1MgICA3CgovKiBMZWZ0IGJhY2sgY2hhbm5lbDsgUmVhciBsZWZ0IGNoYW5uZWwuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfTEIgICA4CgovKiBSaWdodCBiYWNrIGNoYW5uZWw7IFJlYXIgcmlnaHQgY2hhbm5lbC4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9SQiAgIDkKCi8qIFRvcCBzdXJyb3VuZCBjaGFubmVsLiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMUyAgIDEwCgovKiBDZW50ZXIgdmVydGljYWwgaGVpZ2h0IGNoYW5uZWwuKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9DVkggIDExCgovKiBNb25vIHN1cnJvdW5kIGNoYW5uZWwuKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9NUyAgIDEyCgovKiBGcm9udCBsZWZ0IG9mIGNlbnRlci4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9GTEMgIDEzCgovKiBGcm9udCByaWdodCBvZiBjZW50ZXIuICovCiNkZWZpbmUgUENNX0NIQU5ORUxfRlJDICAxNAoKLyogUmVhciBsZWZ0IG9mIGNlbnRlci4gKi8KI2RlZmluZSBQQ01fQ0hBTk5FTF9STEMgIDE1CgovKiBSZWFyIHJpZ2h0IG9mIGNlbnRlci4gVXBkYXRlIFBDTV9NQVhfQ0hNQVBfSUQgd2hlbgogKiB0aGlzIGxpc3QgaXMgZXh0ZW5kZWQuCiAqLwojZGVmaW5lIFBDTV9DSEFOTkVMX1JSQyAgMTYKCi8qIE1heCB2YWxpZCBjaGFubmVsIG1hcCBpbmRleCAqLwojZGVmaW5lIFBDTV9NQVhfQ0hNQVBfSUQgUENNX0NIQU5ORUxfUlJDCgojZGVmaW5lIFBDTV9GT1JNQVRfTUFYX05VTV9DSEFOTkVMICA4CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjIgMHgwMDAxMERBNQoKI2RlZmluZSBBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YzIDB4MDAwMTBEREMKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNCAweDAwMDEzMjBDCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfRVZSQ0JfRlMgMHgwMDAxMEJFRgoKI2RlZmluZSBBU01fTUVESUFfRk1UX0VWUkNXQl9GUyAweDAwMDEwQkYwCgojZGVmaW5lIEFTTV9NRURJQV9GTVRfR0VORVJJQ19DT01QUkVTU0VEICAweDAwMDEzMjEyCgojZGVmaW5lIEFTTV9NQVhfRVFfQkFORFMgMTIKCiNkZWZpbmUgQVNNX0RBVEFfQ01EX01FRElBX0ZNVF9VUERBVEVfVjIgMHgwMDAxMEQ5OAoKc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIHsKdTMyICAgICAgICAgICAgICAgICAgICBmbXRfYmxrX3NpemU7CgkvKiBNZWRpYSBmb3JtYXQgYmxvY2sgc2l6ZSBpbiBieXRlcy4qLwp9ICBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZ2VuZXJpY19jb21wcmVzc2VkX2ZtdF9ibGtfdCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10X2JsazsKCgkvKgoJICogQ2hhbm5lbCBtYXBwaW5nIGFycmF5IG9mIGJpdHN0cmVhbSBvdXRwdXQuCgkgKiBDaGFubmVsW2ldIG1hcHBpbmcgZGVzY3JpYmVzIGNoYW5uZWwgaSBpbnNpZGUgdGhlIGJ1ZmZlciwgd2hlcmUKCSAqIGkgPCBudW1fY2hhbm5lbHMuIEFsbCB2YWxpZCB1c2VkIGNoYW5uZWxzIG11c3QgYmUKCSAqIHByZXNlbnQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuCgkgKi8KCXVpbnQ4X3QgY2hhbm5lbF9tYXBwaW5nWzhdOwoKCS8qCgkgKiBOdW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGluY29taW5nIGJpdHN0cmVhbS4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEsMiwzLDQsNSw2LDcsOAoJICovCgl1aW50MTZfdCBudW1fY2hhbm5lbHM7CgoJLyoKCSAqIE5vbWluYWwgYml0cyBwZXIgc2FtcGxlIHZhbHVlIG9mIHRoZSBpbmNvbWluZyBiaXRzdHJlYW0uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMzIKCSAqLwoJdWludDE2X3QgYml0c19wZXJfc2FtcGxlOwoKCS8qCgkgKiBOb21pbmFsIHNhbXBsaW5nIHJhdGUgb2YgdGhlIGluY29taW5nIGJpdHN0cmVhbS4KCSAqIFN1cHBvcnRlZCB2YWx1ZXM6IDgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDI0MDAwLCAzMjAwMCwKCSAqICAgICAgICAgICAgICAgICAgIDQ0MTAwLCA0ODAwMCwgODgyMDAsIDk2MDAwLCAxNzY0MDAsIDE5MjAwMCwKCSAqICAgICAgICAgICAgICAgICAgIDM1MjgwMCwgMzg0MDAwCgkgKi8KCXVpbnQzMl90IHNhbXBsaW5nX3JhdGU7Cgp9IF9fcGFja2VkOwoKCi8qIENvbW1hbmQgdG8gc2VuZCBzYW1wbGUgcmF0ZSAmIGNoYW5uZWxzIGZvciBJRUM2MTkzNyAoY29tcHJlc3NlZCkgb3IgSUVDNjA5NTgKICogKHBjbSkgc3RyZWFtcy4gQm90aCBhdWRpbyBzdGFuZGFyZHMgdXNlIHRoZSBzYW1lIGZvcm1hdCBhbmQgYXJlIHVzZWQgZm9yCiAqIEhETUkgb3IgU1BESUYuCiAqLwojZGVmaW5lIEFTTV9EQVRBX0NNRF9JRUNfNjA5NThfTUVESUFfRk1UICAgICAgICAweDAwMDEzMjFFCgpzdHJ1Y3QgYXNtX2llY19jb21wcmVzc2VkX2ZtdF9ibGtfdCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CgoJLyoKCSAqIE5vbWluYWwgc2FtcGxpbmcgcmF0ZSBvZiB0aGUgaW5jb21pbmcgYml0c3RyZWFtLgoJICogU3VwcG9ydGVkIHZhbHVlczogODAwMCwgMTEwMjUsIDE2MDAwLCAyMjA1MCwgMjQwMDAsIDMyMDAwLAoJICogICAgICAgICAgICAgICAgICAgNDQxMDAsIDQ4MDAwLCA4ODIwMCwgOTYwMDAsIDE3NjQwMCwgMTkyMDAwLAoJICogICAgICAgICAgICAgICAgICAgMzUyODAwLCAzODQwMDAKCSAqLwoJdWludDMyX3Qgc2FtcGxpbmdfcmF0ZTsKCgkvKgoJICogTnVtYmVyIG9mIGNoYW5uZWxzIG9mIHRoZSBpbmNvbWluZyBiaXRzdHJlYW0uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAxLDIsMyw0LDUsNiw3LDgKCSAqLwoJdWludDMyX3QgbnVtX2NoYW5uZWxzOwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10X2JsazsKCgl1MTYgIG51bV9jaGFubmVsczsKCS8qIE51bWJlciBvZiBjaGFubmVscy4gU3VwcG9ydGVkIHZhbHVlczogMSB0byA4ICovCgl1MTYgIGJpdHNfcGVyX3NhbXBsZTsKLyogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbC4gKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAxNiwgMjQgKiBXaGVuIHVzZWQgZm9yIHBsYXliYWNrLCB0aGUgY2xpZW50IG11c3Qgc2VuZCAyNC1iaXQKICogc2FtcGxlcyBwYWNrZWQgaW4gMzItYml0IHdvcmRzLiBUaGUgMjQtYml0IHNhbXBsZXMgbXVzdCBiZSBwbGFjZWQKICogaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMjQgYml0cyBvZiB0aGUgMzItYml0IHdvcmQuIFdoZW4gdXNlZCBmb3IKICogcmVjb3JkaW5nLCB0aGUgYURTUCBzZW5kcyAyNC1iaXQgc2FtcGxlcyBwYWNrZWQgaW4gMzItYml0IHdvcmRzLgogKiBUaGUgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbiB0aGUgbW9zdCBzaWduaWZpY2FudCAyNCBiaXRzIG9mCiAqIHRoZSAzMi1iaXQgd29yZC4KICovCgoKCXUzMiAgc2FtcGxlX3JhdGU7Ci8qIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQgKGluIEhlcnR6KS4KICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA0ODAwMAogKi8KCgl1MTYgIGlzX3NpZ25lZDsKCS8qIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIHNhbXBsZXMgYXJlIHNpZ25lZCAoMSkuICovCgoJdTE2ICByZXNlcnZlZDsKCS8qIHJlc2VydmVkIGZpZWxkIGZvciAzMiBiaXQgYWxpZ25tZW50LiBtdXN0IGJlIHNldCB0byB6ZXJvLiAqLwoKCXU4ICAgY2hhbm5lbF9tYXBwaW5nWzhdOwovKiBDaGFubmVsIGFycmF5IG9mIHNpemUgOC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjUENNX0NIQU5ORUxfTAogKiAtICNQQ01fQ0hBTk5FTF9SCiAqIC0gI1BDTV9DSEFOTkVMX0MKICogLSAjUENNX0NIQU5ORUxfTFMKICogLSAjUENNX0NIQU5ORUxfUlMKICogLSAjUENNX0NIQU5ORUxfTEZFCiAqIC0gI1BDTV9DSEFOTkVMX0NTCiAqIC0gI1BDTV9DSEFOTkVMX0xCCiAqIC0gI1BDTV9DSEFOTkVMX1JCCiAqIC0gI1BDTV9DSEFOTkVMUwogKiAtICNQQ01fQ0hBTk5FTF9DVkgKICogLSAjUENNX0NIQU5ORUxfTVMKICogLSAjUENNX0NIQU5ORUxfRkxDCiAqIC0gI1BDTV9DSEFOTkVMX0ZSQwogKiAtICNQQ01fQ0hBTk5FTF9STEMKICogLSAjUENNX0NIQU5ORUxfUlJDCiAqCiAqIENoYW5uZWxbaV0gbWFwcGluZyBkZXNjcmliZXMgY2hhbm5lbCBJLiBFYWNoIGVsZW1lbnQgaSBvZiB0aGUKICogYXJyYXkgZGVzY3JpYmVzIGNoYW5uZWwgSSBpbnNpZGUgdGhlIGJ1ZmZlciB3aGVyZSAwIEBsZSBJIDwKICogbnVtX2NoYW5uZWxzLiBBbiB1bnVzZWQgY2hhbm5lbCBpcyBzZXQgdG8gemVyby4KICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjMgewoJdWludDE2X3QgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKgogKiBOdW1iZXIgb2YgY2hhbm5lbHMKICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyoKICogTnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSBwZXIgY2hhbm5lbAogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiwgMjQKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qCiAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQKICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA0ODAwMCwgOTYwMDAsMTkyMDAwIEh6CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGlzX3NpZ25lZDsKLyogRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgc2FtcGxlX3dvcmRfc2l6ZTsKLyoKICogU2l6ZSBpbiBiaXRzIG9mIHRoZSB3b3JkIHRoYXQgaG9sZHMgYSBzYW1wbGUgb2YgYSBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMiwyNCwzMgogKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbOF07Ci8qCiAqIEVhY2ggZWxlbWVudCwgaSwgaW4gdGhlIGFycmF5IGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIgd2hlcmUKICogMCA8PSBpIDwgbnVtX2NoYW5uZWxzLiBVbnVzZWQgY2hhbm5lbHMgYXJlIHNldCB0byAwLgogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZm10X2Jsa192NCB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qCiAqIE51bWJlciBvZiBjaGFubmVscwogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDgKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKgogKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNCwgMzIKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qCiAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQKICogU3VwcG9ydGVkIHZhbHVlczogMjAwMCB0byA0ODAwMCwgOTYwMDAsMTkyMDAwIEh6CiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgIGlzX3NpZ25lZDsKLyogRmxhZyB0aGF0IGluZGljYXRlcyB0aGF0IFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgc2FtcGxlX3dvcmRfc2l6ZTsKLyoKICogU2l6ZSBpbiBiaXRzIG9mIHRoZSB3b3JkIHRoYXQgaG9sZHMgYSBzYW1wbGUgb2YgYSBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMiwyNCwzMgogKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbOF07Ci8qCiAqIEVhY2ggZWxlbWVudCwgaSwgaW4gdGhlIGFycmF5IGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIgd2hlcmUKICogMCA8PSBpIDwgbnVtX2NoYW5uZWxzLiBVbnVzZWQgY2hhbm5lbHMgYXJlIHNldCB0byAwLgogKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIGVuZGlhbm5lc3M7Ci8qCiAqIEZsYWcgdG8gaW5kaWNhdGUgdGhlIGVuZGlhbm5lc3Mgb2YgdGhlIHBjbSBzYW1wbGUKICogU3VwcG9ydGVkIHZhbHVlczogMCAtIExpdHRsZSBlbmRpYW4gKGFsbCBvdGhlciBmb3JtYXRzKQogKiAgICAgICAgICAgICAgICAgICAxIC0gQmlnIGVuZGlhbiAoQUlGRikKICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICBtb2RlOwovKgogKiBNb2RlIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvIGFib3V0IHRoZSBwY20gaW5wdXQgZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogMCAtIERlZmF1bHQgUUZzIChRMTUgZm9yIDE2YiwgUTIzIGZvciBwYWNrZWQgMjRiLAogKiAgICAgICAgICAgICAgICAgICAgICAgUTMxIGZvciB1bnBhY2tlZCAyNGIgb3IgMzJiKQogKiAgICAgICAgICAgICAgICAgIDE1IC0gZm9yIDE2IGJpdAogKiAgICAgICAgICAgICAgICAgIDIzIC0gZm9yIDI0YiBwYWNrZWQgb3IgOC4yNCBmb3JtYXQKICogICAgICAgICAgICAgICAgICAzMSAtIGZvciAyNGIgdW5wYWNrZWQgb3IgMzJiaXQKICovCn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMyBtZWRpYSBmb3JtYXQuCiAqLwpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfcGFyYW1fdjMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CglzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjMgcGFyYW07Cn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WNCBtZWRpYSBmb3JtYXQuCiAqLwpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfcGFyYW1fdjQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CglzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2ZtdF9ibGtfdjQgcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSB7Cgl1MzIgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKCS8qIElEIG9mIHRoZSBwYXJhbWV0ZXIuICovCgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1fc2l6ZTsKLyogRGF0YSBzaXplIG9mIHRoaXMgcGFyYW1ldGVyLCBpbiBieXRlcy4gVGhlIHNpemUgaXMgYSBtdWx0aXBsZQogKiBvZiA0IGJ5dGVzLgogKi8KCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIGZyYW1lc19wZXJfYnVmOwovKiBOdW1iZXIgb2YgZW5jb2RlZCBmcmFtZXMgdG8gcGFjayBpbnRvIGVhY2ggYnVmZmVyLgogKgogKiBAbm90ZTFoYW5nIFRoaXMgaXMgb25seSBndWlkYW5jZSBpbmZvcm1hdGlvbiBmb3IgdGhlIGFEU1AuIFRoZQogKiBudW1iZXIgb2YgZW5jb2RlZCBmcmFtZXMgcHV0IGludG8gZWFjaCBidWZmZXIgKHNwZWNpZmllZCBieSB0aGUKICogY2xpZW50KSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyBudW1iZXIuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIGVuY19jZmdfYmxrX3NpemU7Ci8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIGVuY29kZXIgY29uZmlndXJhdGlvbiBibG9jayB0aGF0IGZvbGxvd3MKICogdGhpcyBtZW1iZXIuCiAqLwoKfSBfX3BhY2tlZDsKCi8qIEBicmllZiBEb2xieSBEaWdpdGFsIFBsdXMgZW5kIHBvaW50IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAqLwpzdHJ1Y3QgYXNtX2RlY19kZHBfZW5kcF9wYXJhbV92MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJaW50IGVuZHBfcGFyYW1fdmFsdWU7Cn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBtdWx0aWNoYW5uZWwgUENNIGVuY29kZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGluCiAqIHRoZSBBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1Y0IG1lZGlhIGZvcm1hdC4KICovCgpzdHJ1Y3QgYXNtX211bHRpX2NoYW5uZWxfcGNtX2VuY19jZmdfdjQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MiBlbmNibGs7Cgl1aW50MTZfdCBudW1fY2hhbm5lbHM7CgkvKgoJICogTnVtYmVyIG9mIFBDTSBjaGFubmVscy4KCSAqIEB2YWx1ZXMKCSAqIC0gMCAtLSBOYXRpdmUgbW9kZQoJICogLSAxIC0tIDggY2hhbm5lbHMKCSAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlIG51bWJlcgoJICogb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgoJICovCgl1aW50MTZfdCAgYml0c19wZXJfc2FtcGxlOwoJLyoKCSAqIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcGVyIGNoYW5uZWwuCgkgKiBAdmFsdWVzIDE2LCAyNAoJICovCgl1aW50MzJfdCAgc2FtcGxlX3JhdGU7CgkvKgoJICogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KCSAqIEB2YWx1ZXMgMCwgODAwMCB0byA0ODAwMCBIegoJICogQSB2YWx1ZSBvZiAwIGluZGljYXRlcyB0aGUgbmF0aXZlIHNhbXBsaW5nIHJhdGUuIEVuY29kaW5nIGlzCgkgKiBwZXJmb3JtZWQgYXQgdGhlIGlucHV0IHNhbXBsaW5nIHJhdGUuCgkgKi8KCXVpbnQxNl90ICBpc19zaWduZWQ7CgkvKgoJICogRmxhZyB0aGF0IGluZGljYXRlcyB0aGUgUENNIHNhbXBsZXMgYXJlIHNpZ25lZCAoMSkuIEN1cnJlbnRseSwgb25seQoJICogc2lnbmVkIFBDTSBzYW1wbGVzIGFyZSBzdXBwb3J0ZWQuCgkgKi8KCXVpbnQxNl90ICAgIHNhbXBsZV93b3JkX3NpemU7CgkvKgoJICogVGhlIHNpemUgaW4gYml0cyBvZiB0aGUgd29yZCB0aGF0IGhvbGRzIGEgc2FtcGxlIG9mIGEgY2hhbm5lbC4KCSAqIEB2YWx1ZXMgMTYsIDI0LCAzMgoJICogMTYtYml0IHNhbXBsZXMgYXJlIGFsd2F5cyBwbGFjZWQgaW4gMTYtYml0IHdvcmRzOgoJICogc2FtcGxlX3dvcmRfc2l6ZSA9IDEuCgkgKiAyNC1iaXQgc2FtcGxlcyBjYW4gYmUgcGxhY2VkIGluIDMyLWJpdCB3b3JkcyBvciBpbiBjb25zZWN1dGl2ZQoJICogMjQtYml0IHdvcmRzLgoJICogLSBJZiBzYW1wbGVfd29yZF9zaXplID0gMzIsIDI0LWJpdCBzYW1wbGVzIGFyZSBwbGFjZWQgaW4gdGhlCgkgKiBtb3N0IHNpZ25pZmljYW50IDI0IGJpdHMgb2YgYSAzMi1iaXQgd29yZC4KCSAqIC0gSWYgc2FtcGxlX3dvcmRfc2l6ZSA9IDI0LCAyNC1iaXQgc2FtcGxlcyBhcmUgcGxhY2VkIGluCgkgKiAyNC1iaXQgd29yZHMuIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50OF90ICAgY2hhbm5lbF9tYXBwaW5nWzhdOwoJLyoKCSAqIENoYW5uZWwgbWFwcGluZyBhcnJheSBleHBlY3RlZCBhdCB0aGUgZW5jb2RlciBvdXRwdXQuCgkgKiAgQ2hhbm5lbFtpXSBtYXBwaW5nIGRlc2NyaWJlcyBjaGFubmVsIGkgaW5zaWRlIHRoZSBidWZmZXIsIHdoZXJlCgkgKiAgMCBAbGUgaSA8IG51bV9jaGFubmVscy4gQWxsIHZhbGlkIHVzZWQgY2hhbm5lbHMgbXVzdCBiZSBwcmVzZW50IGF0CgkgKiAgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXJyYXkuCgkgKiBJZiBOYXRpdmUgbW9kZSBpcyBzZXQgZm9yIHRoZSBjaGFubmVscywgdGhpcyBmaWVsZCBpcyBpZ25vcmVkLgoJICogQHZhbHVlcyBTZWUgU2VjdGlvbiBAeHJlZntkb3g6UGNtQ2hhbm5lbERlZnN9CgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIGVuZGlhbm5lc3M7CgkvKgoJICogRmxhZyB0byBpbmRpY2F0ZSB0aGUgZW5kaWFubmVzcyBvZiB0aGUgcGNtIHNhbXBsZQoJICogU3VwcG9ydGVkIHZhbHVlczogMCAtIExpdHRsZSBlbmRpYW4gKGFsbCBvdGhlciBmb3JtYXRzKQoJICogICAgICAgICAgICAgICAgICAgMSAtIEJpZyBlbmRpYW4gKEFJRkYpCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgIG1vZGU7CgkvKgoJICogTW9kZSB0byBwcm92aWRlIGFkZGl0aW9uYWwgaW5mbyBhYm91dCB0aGUgcGNtIGlucHV0IGRhdGEuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIC0gRGVmYXVsdCBRRnMgKFExNSBmb3IgMTZiLCBRMjMgZm9yIHBhY2tlZCAyNGIsCgkgKiAgICAgICAgICAgICAgICAgICAgICAgUTMxIGZvciB1bnBhY2tlZCAyNGIgb3IgMzJiKQoJICogICAgICAgICAgICAgICAgICAxNSAtIGZvciAxNiBiaXQKCSAqICAgICAgICAgICAgICAgICAgMjMgLSBmb3IgMjRiIHBhY2tlZCBvciA4LjI0IGZvcm1hdAoJICogICAgICAgICAgICAgICAgICAzMSAtIGZvciAyNGIgdW5wYWNrZWQgb3IgMzJiaXQKCSAqLwp9IF9fcGFja2VkOwoKLyoKICogUGF5bG9hZCBvZiB0aGUgbXVsdGljaGFubmVsIFBDTSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBpbgogKiB0aGUgQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMyBtZWRpYSBmb3JtYXQuCiAqLwoKc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9lbmNfY2ZnX3YzIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIgZW5jYmxrOwoJdWludDE2X3QgbnVtX2NoYW5uZWxzOwoJLyoKCSAqIE51bWJlciBvZiBQQ00gY2hhbm5lbHMuCgkgKiBAdmFsdWVzCgkgKiAtIDAgLS0gTmF0aXZlIG1vZGUKCSAqIC0gMSAtLSA4IGNoYW5uZWxzCgkgKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBudW1iZXIKCSAqIG9mIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KCSAqLwoJdWludDE2X3QgIGJpdHNfcGVyX3NhbXBsZTsKCS8qCgkgKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHBlciBjaGFubmVsLgoJICogQHZhbHVlcyAxNiwgMjQKCSAqLwoJdWludDMyX3QgIHNhbXBsZV9yYXRlOwoJLyoKCSAqIE51bWJlciBvZiBzYW1wbGVzIHBlciBzZWNvbmQuCgkgKiBAdmFsdWVzIDAsIDgwMDAgdG8gNDgwMDAgSHoKCSAqIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgdGhlIG5hdGl2ZSBzYW1wbGluZyByYXRlLiBFbmNvZGluZyBpcwoJICogcGVyZm9ybWVkIGF0IHRoZSBpbnB1dCBzYW1wbGluZyByYXRlLgoJICovCgl1aW50MTZfdCAgaXNfc2lnbmVkOwoJLyoKCSAqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgdGhlIFBDTSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpLiBDdXJyZW50bHksIG9ubHkKCSAqIHNpZ25lZCBQQ00gc2FtcGxlcyBhcmUgc3VwcG9ydGVkLgoJICovCgl1aW50MTZfdCAgICBzYW1wbGVfd29yZF9zaXplOwoJLyoKCSAqIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIHdvcmQgdGhhdCBob2xkcyBhIHNhbXBsZSBvZiBhIGNoYW5uZWwuCgkgKiBAdmFsdWVzIDE2LCAyNCwgMzIKCSAqIDE2LWJpdCBzYW1wbGVzIGFyZSBhbHdheXMgcGxhY2VkIGluIDE2LWJpdCB3b3JkczoKCSAqIHNhbXBsZV93b3JkX3NpemUgPSAxLgoJICogMjQtYml0IHNhbXBsZXMgY2FuIGJlIHBsYWNlZCBpbiAzMi1iaXQgd29yZHMgb3IgaW4gY29uc2VjdXRpdmUKCSAqIDI0LWJpdCB3b3Jkcy4KCSAqIC0gSWYgc2FtcGxlX3dvcmRfc2l6ZSA9IDMyLCAyNC1iaXQgc2FtcGxlcyBhcmUgcGxhY2VkIGluIHRoZQoJICogbW9zdCBzaWduaWZpY2FudCAyNCBiaXRzIG9mIGEgMzItYml0IHdvcmQuCgkgKiAtIElmIHNhbXBsZV93b3JkX3NpemUgPSAyNCwgMjQtYml0IHNhbXBsZXMgYXJlIHBsYWNlZCBpbgoJICogMjQtYml0IHdvcmRzLiBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDhfdCAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKCS8qCgkgKiBDaGFubmVsIG1hcHBpbmcgYXJyYXkgZXhwZWN0ZWQgYXQgdGhlIGVuY29kZXIgb3V0cHV0LgoJICogIENoYW5uZWxbaV0gbWFwcGluZyBkZXNjcmliZXMgY2hhbm5lbCBpIGluc2lkZSB0aGUgYnVmZmVyLCB3aGVyZQoJICogIDAgQGxlIGkgPCBudW1fY2hhbm5lbHMuIEFsbCB2YWxpZCB1c2VkIGNoYW5uZWxzIG11c3QgYmUgcHJlc2VudCBhdAoJICogIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5LgoJICogSWYgTmF0aXZlIG1vZGUgaXMgc2V0IGZvciB0aGUgY2hhbm5lbHMsIHRoaXMgZmllbGQgaXMgaWdub3JlZC4KCSAqIEB2YWx1ZXMgU2VlIFNlY3Rpb24gQHhyZWZ7ZG94OlBjbUNoYW5uZWxEZWZzfQoJICovCn07CgovKiBAYnJpZWYgTXVsdGljaGFubmVsIFBDTSBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlIHVzZWQKICogaW4gdGhlICNBU01fUEFSQU1fSURfRU5DREVDX0VOQ19DRkdfQkxLX1YyIGNvbW1hbmQuCiAqLwoKc3RydWN0IGFzbV9tdWx0aV9jaGFubmVsX3BjbV9lbmNfY2ZnX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCXVpbnQxNl90ICBudW1fY2hhbm5lbHM7Ci8qPCBOdW1iZXIgb2YgUENNIGNoYW5uZWxzLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtIDAgLS0gTmF0aXZlIG1vZGUgLSAxIC0tIDggTmF0aXZlIG1vZGUKICogaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgbnVtYmVyIG9mCiAqIGNoYW5uZWxzIGF0IHRoZSBpbnB1dC4KICovCgoJdWludDE2X3QgIGJpdHNfcGVyX3NhbXBsZTsKLyo8IE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcGVyIGNoYW5uZWwuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCgl1aW50MzJfdCAgc2FtcGxlX3JhdGU7Ci8qPCBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kIChpbiBIZXJ0eikuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAsIDgwMDAgdG8gNDgwMDAgQSB2YWx1ZSBvZiAwIGluZGljYXRlcyB0aGUKICogbmF0aXZlIHNhbXBsaW5nIHJhdGUuIEVuY29kaW5nIGlzIHBlcmZvcm1lZCBhdCB0aGUgaW5wdXQgc2FtcGxpbmcKICogcmF0ZS4KICovCgoJdWludDE2X3QgIGlzX3NpZ25lZDsKLyo8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBzYW1wbGVzIGFyZSBzaWduZWQgKDEpLiBDdXJyZW50bHksCiAqIG9ubHkgc2lnbmVkIHNhbXBsZXMgYXJlIHN1cHBvcnRlZC4KICovCgoJdWludDE2X3QgIHJlc2VydmVkOwovKjwgcmVzZXJ2ZWQgZmllbGQgZm9yIDMyIGJpdCBhbGlnbm1lbnQuIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KCgoJdWludDhfdCAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NUDMgMHgwMDAxMEJFOQojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX1YyIDB4MDAwMTBEQTYKCi8qIEB4cmVmbGFiZWwKICoge2hkcjpBc21NZWRpYUZtdERvbGJ5QWFjfSBNZWRpYSBmb3JtYXQgSUQgZm9yIHRoZQogKiBEb2xieSBBQUMgZGVjb2Rlci4gVGhpcyBmb3JtYXQgSUQgaXMgYmUgdXNlZCBpZiB0aGUgY2xpZW50IHdhbnRzCiAqIHRvIHVzZSB0aGUgRG9sYnkgQUFDIGRlY29kZXIgdG8gZGVjb2RlIE1QRUcyIGFuZCBNUEVHNCBBQUMKICogY29udGVudHMuCiAqLwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0RPTEJZX0FBQyAweDAwMDEwRDg2CgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIGF1ZGlvIGRhdGEgdHJhbnNwb3J0IHN0cmVhbSBBQUMgZm9ybWF0LiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0FEVFMgMAoKLyogRW51bWVyYXRpb24gZm9yIGxvdyBvdmVyaGVhZCBhdWRpbyBzdHJlYW0gQUFDIGZvcm1hdC4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19MT0FTICAgICAgICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgYXVkaW8gZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQKICogQUFDIGZvcm1hdC4KICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURJRiAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgcmF3IEFBQyBmb3JtYXQuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfUkFXICAgIDMKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgQUFDIExBVE0gZm9ybWF0LiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0xBVE0gICA0CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUFDX0FPVF9MQyAgICAgICAgICAgICAyCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUiAgICAgICAgICAgIDUKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfUFMgICAgICAgICAgICAgMjkKI2RlZmluZSBBU01fTUVESUFfRk1UX0FBQ19BT1RfQlNBQyAgICAgICAgICAgMjIKCnN0cnVjdCBhc21fYWFjX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdF9ibGs7CgoJCXUxNiAgICAgICAgICBhYWNfZm10X2ZsYWc7Ci8qIEJpdHN0cmVhbSBmb3JtYXQgb3B0aW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19BRFRTCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0xPQVMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfQURJRgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19GT1JNQVRfRkxBR19SQVcKICovCgoJdTE2ICAgICAgICAgIGF1ZGlvX29ianlwZTsKLyogQXVkaW8gT2JqZWN0IFR5cGUgKEFPVCkgcHJlc2VudCBpbiB0aGUgQUFDIHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX0xDCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0FPVF9TQlIKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX0JTQUMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1BTCiAqIC0gT3RoZXJ3aXNlIC0tIE5vdCBzdXBwb3J0ZWQKICovCgoJdTE2ICAgICAgICAgIGNoYW5uZWxfY29uZmlnOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGUgQUFDIHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAxIC0tIE1vbm8KICogLSAyIC0tIFN0ZXJlbwogKiAtIDYgLS0gNS4xIGNvbnRlbnQKICovCgoJdTE2ICAgICAgICAgIHRvdGFsX3NpemVfb2ZfUENFX2JpdHM7Ci8qIGdyZWF0ZXIgb3IgZXF1YWwgdG8gemVyby4gKiAtSW4gY2FzZSBvZiBSQVcgZm9ybWF0cyBhbmQKICogY2hhbm5lbCBjb25maWcgPSAwIChQQ0UpLCBjbGllbnQgY2FuIHNlbmQgKiB0aGUgYml0IHN0cmVhbQogKiBjb250YWluaW5nIFBDRSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhpcyBzdHJ1Y3R1cmUgKiAoaW4tYmFuZCkuCiAqIC1UaGlzIG51bWJlciBkb2VzIG5vdCBpbmNsdWRlIGJpdHMgaW5jbHVkZWQgZm9yIDMyIGJpdCBhbGlnbm1lbnQuCiAqIC1JZiB6ZXJvLCB0aGVuIHRoZSBQQ0UgaW5mbyBpcyBhc3N1bWVkIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGUKICogYXVkaW8gLWJpdCBzdHJlYW0gJiBub3QgaW4tYmFuZC4KICovCgoJdTMyICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kIChpbiBIZXJ0eikuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDgwMDAsIDExMDI1LCAxMjAwMCwgMTYwMDAsIDIyMDUwLCAyNDAwMCwgMzIwMDAsCiAqIDQ0MTAwLCA0ODAwMAogKgogKiBUaGlzIGZpZWxkIG11c3QgYmUgZXF1YWwgdG8gdGhlIHNhbXBsZSByYXRlIG9mIHRoZSBBQUMtTEMKICogZGVjb2RlcidzIG91dHB1dC4gLSBGb3IgTVA0IG9yIDNHUCBjb250YWluZXJzLCB0aGlzIGlzIGluZGljYXRlZAogKiBieSB0aGUgc2FtcGxpbmdGcmVxdWVuY3lJbmRleCBmaWVsZCBpbiB0aGUgQXVkaW9TcGVjaWZpY0NvbmZpZwogKiBlbGVtZW50LiAtIEZvciBBRFRTIGZvcm1hdCwgdGhpcyBpcyBpbmRpY2F0ZWQgYnkgdGhlCiAqIHNhbXBsaW5nRnJlcXVlbmN5SW5kZXggaW4gdGhlIEFEVFMgZml4ZWQgaGVhZGVyLiAtIEZvciBBRElGCiAqIGZvcm1hdCwgdGhpcyBpcyBpbmRpY2F0ZWQgYnkgdGhlIHNhbXBsaW5nRnJlcXVlbmN5SW5kZXggaW4gdGhlCiAqIHByb2dyYW1fY29uZmlnX2VsZW1lbnQgcHJlc2VudCBpbiB0aGUgQURJRiBoZWFkZXIuCiAqLwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYWFjX2VuY19jZmdfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIJZW5jYmxrOwoKCXUzMiAgICAgICAgICBiaXRfcmF0ZTsKCS8qIEVuY29kaW5nIHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLiAqLwoJdTMyICAgICAgICAgIGVuY19tb2RlOwovKiBFbmNvZGluZyBtb2RlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19BT1RfTEMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfQU9UX1NCUgogKiAtICNBU01fTUVESUFfRk1UX0FBQ19BT1RfUFMKICovCgl1MTYgICAgICAgICAgYWFjX2ZtdF9mbGFnOwovKiBBQUMgZm9ybWF0IGZsYWcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX0ZPUk1BVF9GTEFHX0FEVFMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfRk9STUFUX0ZMQUdfUkFXCiAqLwoJdTE2ICAgICAgICAgIGNoYW5uZWxfY2ZnOwovKiBOdW1iZXIgb2YgY2hhbm5lbHMgdG8gZW5jb2RlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gTmF0aXZlIG1vZGUKICogLSAxIC0tIE1vbm8KICogLSAyIC0tIFN0ZXJlbwogKiAtIE90aGVyIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZC4KICogQG5vdGUxaGFuZyBUaGUgZUFBQysgZW5jb2RlciBtb2RlIHN1cHBvcnRzIG9ubHkgc3RlcmVvLgogKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZQogKiBudW1iZXIgb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgogKiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCiAqLwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogLSAwIC0tIE5hdGl2ZSBtb2RlIC0gRm9yIG90aGVyIHZhbHVlcywKICogTmF0aXZlIG1vZGUgaW5kaWNhdGVzIHRoYXQgZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQgd2l0aCB0aGUKICogc2FtcGxpbmcgcmF0ZSBhdCB0aGUgaW5wdXQuCiAqIFRoZSBzYW1wbGluZyByYXRlIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9HNzExX0FMQVdfRlMgMHgwMDAxMEJGNwojZGVmaW5lIEFTTV9NRURJQV9GTVRfRzcxMV9NTEFXX0ZTIDB4MDAwMTBDMkUKCnN0cnVjdCBhc21fZzcxMV9lbmNfY2ZnX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIgZW5jYmxrOwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyoKICogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogODAwMCwgMTYwMDAgSHoKICovCgp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV92b3JiaXNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoJdTMyICAgICAgICAgIGJpdF9zdHJlYW1fZm10OwovKiBCaXQgc3RyZWFtIGZvcm1hdC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIFJhdyBiaXRzdHJlYW0KICogLSAxIC0tIFRyYW5zY29kZWQgYml0c3RyZWFtCiAqCiAqIFRyYW5zY29kZWQgYml0c3RyZWFtIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgdGhlIGZyYW1lIGFzIHRoZSBmaXJzdAogKiB3b3JkIGluIGVhY2ggZnJhbWUuCiAqLwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZmxhY19mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTE2IGlzX3N0cmVhbV9pbmZvX3ByZXNlbnQ7Ci8qIFNwZWNpZmllcyB3aGV0aGVyIHN0cmVhbSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50IGluIHRoZSBGTEFDIGZvcm1hdAogKiBibG9jay4KICoKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIFN0cmVhbSBpbmZvcm1hdGlvbiBpcyBub3QgcHJlc2VudCBpbiB0aGlzIG1lc3NhZ2UKICogLSAxIC0tIFN0cmVhbSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50IGluIHRoaXMgbWVzc2FnZQogKgogKiBXaGVuIHNldCB0byAxLCB0aGUgRkxBQyBiaXRzdHJlYW0gd2FzIHN1Y2Nlc3NmdWxseSBwYXJzZWQgYnkgdGhlCiAqIGNsaWVudCwgYW5kIG90aGVyIGZpZWxkcyBpbiB0aGUgRkxBQyBmb3JtYXQgYmxvY2sgY2FuIGJlIHJlYWQgYnkgdGhlCiAqIGRlY29kZXIgdG8gZ2V0IG1ldGFkYXRhIHN0cmVhbSBpbmZvcm1hdGlvbi4KICovCgoJdTE2IG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIGZvciBkZWNvZGluZy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAyCiAqLwoKCXUxNiBtaW5fYmxrX3NpemU7Ci8qIE1pbmltdW0gYmxvY2sgc2l6ZSAoaW4gc2FtcGxlcykgdXNlZCBpbiB0aGUgc3RyZWFtLiBJdCBtdXN0IGJlIGxlc3MKICogdGhhbiBvciBlcXVhbCB0byBtYXhfYmxrX3NpemUuCiAqLwoKCXUxNiBtYXhfYmxrX3NpemU7Ci8qIE1heGltdW0gYmxvY2sgc2l6ZSAoaW4gc2FtcGxlcykgdXNlZCBpbiB0aGUgc3RyZWFtLiBJZiB0aGUKICogbWluaW11bSBibG9jayBzaXplIGVxdWFscyB0aGUgbWF4aW11bSBibG9jayBzaXplLCBhIGZpeGVkIGJsb2NrCiAqIHNpemUgc3RyZWFtIGlzIGltcGxpZWQuCiAqLwoKCXUxNiBtZDVfc3VtWzhdOwovKiBNRDUgc2lnbmF0dXJlIGFycmF5IG9mIHRoZSB1bmVuY29kZWQgYXVkaW8gZGF0YS4gVGhpcyBhbGxvd3MgdGhlCiAqIGRlY29kZXIgdG8gZGV0ZXJtaW5lIGlmIGFuIGVycm9yIGV4aXN0cyBpbiB0aGUgYXVkaW8gZGF0YSwgZXZlbiB3aGVuCiAqIHRoZSBlcnJvciBkb2VzIG5vdCByZXN1bHQgaW4gYW4gaW52YWxpZCBiaXRzdHJlYW0uCiAqLwoKCXUzMiBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogODAwMCB0byA0ODAwMCBIegogKi8KCgl1MzIgbWluX2ZyYW1lX3NpemU7Ci8qIE1pbmltdW0gZnJhbWUgc2l6ZSB1c2VkIGluIHRoZSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gPiAwIGJ5dGVzCiAqIC0gMCAtLSBUaGUgdmFsdWUgaXMgdW5rbm93bgogKi8KCgl1MzIgbWF4X2ZyYW1lX3NpemU7Ci8qIE1heGltdW0gZnJhbWUgc2l6ZSB1c2VkIGluIHRoZSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0tID4gMCBieXRlcwogKiAtLSAwIC4gVGhlIHZhbHVlIGlzIHVua25vd24KICovCgoJdTE2IHNhbXBsZV9zaXplOwovKiBCaXRzIHBlciBzYW1wbGUuU3VwcG9ydGVkIHZhbHVlczogOCwgMTYgKi8KCgl1MTYgcmVzZXJ2ZWQ7Ci8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvCiAqLwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYWxhY19mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTMyIGZyYW1lX2xlbmd0aDsKCXU4IGNvbXBhdGlibGVfdmVyc2lvbjsKCXU4IGJpdF9kZXB0aDsKCXU4IHBiOwoJdTggbWI7Cgl1OCBrYjsKCXU4IG51bV9jaGFubmVsczsKCXUxNiBtYXhfcnVuOwoJdTMyIG1heF9mcmFtZV9ieXRlczsKCXUzMiBhdmdfYml0X3JhdGU7Cgl1MzIgc2FtcGxlX3JhdGU7Cgl1MzIgY2hhbm5lbF9sYXlvdXRfdGFnOwoKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZzcxMV9kZWNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoJdTMyIHNhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9hcGVfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoKCXUxNiBjb21wYXRpYmxlX3ZlcnNpb247Cgl1MTYgY29tcHJlc3Npb25fbGV2ZWw7Cgl1MzIgZm9ybWF0X2ZsYWdzOwoJdTMyIGJsb2Nrc19wZXJfZnJhbWU7Cgl1MzIgZmluYWxfZnJhbWVfYmxvY2tzOwoJdTMyIHRvdGFsX2ZyYW1lczsKCXUxNiBiaXRzX3Blcl9zYW1wbGU7Cgl1MTYgbnVtX2NoYW5uZWxzOwoJdTMyIHNhbXBsZV9yYXRlOwoJdTMyIHNlZWtfdGFibGVfcHJlc2VudDsKCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX2RzZF9mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTE2IG51bV92ZXJzaW9uOwoJdTE2IGlzX2JpdHdpc2VfYmlnX2VuZGlhbjsKCXUxNiBkc2RfY2hhbm5lbF9ibG9ja19zaXplOwoJdTE2IG51bV9jaGFubmVsczsKCXU4ICBjaGFubmVsX21hcHBpbmdbOF07Cgl1MzIgZHNkX2RhdGFfcmF0ZTsKCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlMgICAgICAgICAgICAgICAgICAweDAwMDEwQkVCCgovKiBFbnVtZXJhdGlvbiBmb3IgNC43NSBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTVI0NzUgICAgICAgICAgICAgICAgMAoKLyogRW51bWVyYXRpb24gZm9yIDUuMTUga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01SNTE1ICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciA1LjkwIGticHMgQU1SLU5CIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV9NTVI1OSAgICAgICAgICAgICAgICAyCgovKiBFbnVtZXJhdGlvbiBmb3IgNi43MCBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTU1SNjcgICAgICAgICAgICAgICAgMwoKLyogRW51bWVyYXRpb24gZm9yIDcuNDAga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01NUjc0ICAgICAgICAgICAgICAgIDQKCi8qIEVudW1lcmF0aW9uIGZvciA3Ljk1IGticHMgQU1SLU5CIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJOQl9GU19FTkNPREVfTU9ERV9NTVI3OTUgICAgICAgICAgICAgICA1CgovKiBFbnVtZXJhdGlvbiBmb3IgMTAuMjAga2JwcyBBTVItTkIgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFX01NUjEwMiAgICAgICAgICAgICAgIDYKCi8qIEVudW1lcmF0aW9uIGZvciAxMi4yMCBrYnBzIEFNUi1OQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1STkJfRlNfRU5DT0RFX01PREVfTU1SMTIyICAgICAgICAgICAgICAgNwoKLyogRW51bWVyYXRpb24gZm9yIEFNUi1OQiBEaXNjb250aW51b3VzIFRyYW5zbWlzc2lvbiBtb2RlIG9mZi4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX09GRiAgICAgICAgICAgICAgICAgICAgIDAKCi8qIEVudW1lcmF0aW9uIGZvciBBTVItTkIgRFRYIG1vZGUgVkFEMS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX1ZBRDEgICAgICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciBBTVItTkIgRFRYIG1vZGUgVkFEMi4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX1ZBRDIgICAgICAgICAgICAgICAgICAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciBBTVItTkIgRFRYIG1vZGUgYXV0by4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0RUWF9NT0RFX0FVVE8gICAgICAgICAgICAgICAgICAgIDMKCnN0cnVjdCBhc21fYW1ybmJfZW5jX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7CgoJdTE2ICAgICAgICAgIGVuY19tb2RlOwovKiBBTVItTkIgZW5jb2RpbmcgcmF0ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogVXNlIHRoZSBBU01fTUVESUFfRk1UX0FNUk5CX0ZTX0VOQ09ERV9NT0RFXyoKICogbWFjcm9zCiAqLwoKCXUxNiAgICAgICAgICBkdHhfbW9kZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgRFRYIG1vZGUgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9PRkYKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9WQUQxCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTICAgICAgICAgICAgICAgICAgMHgwMDAxMEJFQwoKLyogRW51bWVyYXRpb24gZm9yIDYuNiBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVI2NiAgICAgICAgICAgICAgICAgMAoKLyogRW51bWVyYXRpb24gZm9yIDguODUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SODg1ICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciAxMi42NSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIxMjY1ICAgICAgICAgICAgICAgMgoKLyogRW51bWVyYXRpb24gZm9yIDE0LjI1IGticHMgQU1SLVdCIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV9NUjE0MjUgICAgICAgICAgICAgICAzCgovKiBFbnVtZXJhdGlvbiBmb3IgMTUuODUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SMTU4NSAgICAgICAgICAgICAgIDQKCi8qIEVudW1lcmF0aW9uIGZvciAxOC4yNSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIxODI1ICAgICAgICAgICAgICAgNQoKLyogRW51bWVyYXRpb24gZm9yIDE5Ljg1IGticHMgQU1SLVdCIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJXQl9GU19FTkNPREVfTU9ERV9NUjE5ODUgICAgICAgICAgICAgICA2CgovKiBFbnVtZXJhdGlvbiBmb3IgMjMuMDUga2JwcyBBTVItV0IgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFX01SMjMwNSAgICAgICAgICAgICAgIDcKCi8qIEVudW1lcmF0aW9uIGZvciAyMy44NSBrYnBzIEFNUi1XQiBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfQU1SV0JfRlNfRU5DT0RFX01PREVfTVIyMzg1ICAgICAgICAgICAgICAgOAoKc3RydWN0IGFzbV9hbXJ3Yl9lbmNfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCgl1MTYgICAgICAgICAgZW5jX21vZGU7Ci8qIEFNUi1XQiBlbmNvZGluZyByYXRlLgogKiBTdXVwcG9ydGVkIHZhbHVlczoKICogVXNlIHRoZSBBU01fTUVESUFfRk1UX0FNUldCX0ZTX0VOQ09ERV9NT0RFXyoKICogbWFjcm9zCiAqLwoKCXUxNiAgICAgICAgICBkdHhfbW9kZTsKLyogU3BlY2lmaWVzIHdoZXRoZXIgRFRYIG1vZGUgaXMgZGlzYWJsZWQgb3IgZW5hYmxlZC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9PRkYKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GU19EVFhfTU9ERV9WQUQxCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlMgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEJFRAoKLyogRW51bWVyYXRpb24gZm9yIDE0LjQga2JwcyBWMTNLIEVuY29kaW5nIG1vZGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTQ0MCAgICAgICAgICAgICAgICAwCgovKiBFbnVtZXJhdGlvbiBmb3IgMTIuMiBrYnBzIFYxM0sgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVIxMjIwICAgICAgICAgICAgICAgIDEKCi8qIEVudW1lcmF0aW9uIGZvciAxMS4yIGticHMgVjEzSyBFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjExMjAgICAgICAgICAgICAgICAgMgoKLyogRW51bWVyYXRpb24gZm9yIDkuMCBrYnBzIFYxM0sgRW5jb2RpbmcgbW9kZS4gKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVI5MCAgICAgICAgICAgICAgICAgIDMKCi8qIEVudW1lcmF0aW9uIGZvciA3LjIga2JwcyBWMTNLIGVFbmNvZGluZyBtb2RlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjcyMCAgICAgICAgICAgICAgICAgNAoKLyogRW51bWVyYXRpb24gZm9yIDEvOCB2b2NvZGVyIHJhdGUuKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX1ZPQ19PTkVfRUlHSFRIX1JBVEUgICAgICAgICAgMQoKLyogRW51bWVyYXRpb24gZm9yIDEvNCB2b2NvZGVyIHJhdGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WT0NfT05FX0ZPVVJUSF9SQVRFICAgICAgIDIKCi8qIEVudW1lcmF0aW9uIGZvciAxLzIgdm9jb2RlciByYXRlLiAqLwojZGVmaW5lIEFTTV9NRURJQV9GTVRfVk9DX0hBTEZfUkFURSAgICAgICAgICAgICAzCgovKiBFbnVtZXJhdGlvbiBmb3IgZnVsbCB2b2NvZGVyIHJhdGUuICovCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9WT0NfRlVMTF9SQVRFICAgICAgICAgICAgIDQKCnN0cnVjdCBhc21fdjEza19lbmNfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCQl1MTYgICAgICAgICAgbWF4X3JhdGU7Ci8qIE1heGltdW0gYWxsb3dlZCBlbmNvZGVyIGZyYW1lIHJhdGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9FSUdIVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRk9VUlRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfSEFMRl9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0ZVTExfUkFURQogKi8KCgl1MTYgICAgICAgICAgbWluX3JhdGU7Ci8qIE1pbmltdW0gYWxsb3dlZCBlbmNvZGVyIGZyYW1lIHJhdGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9FSUdIVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19PTkVfRk9VUlRIX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfSEFMRl9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX0ZVTExfUkFURQogKi8KCgl1MTYgICAgICAgICAgcmVkdWNlZF9yYXRlX2NtZDsKLyogUmVkdWNlZCByYXRlIGNvbW1hbmQsIHVzZWQgdG8gY2hhbmdlCiAqIHRoZSBhdmVyYWdlIGJpdHJhdGUgb2YgdGhlIFYxM0sKICogdm9jb2Rlci4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTQ0MCAoRGVmYXVsdCkKICogLSAjQVNNX01FRElBX0ZNVF9WMTNLX0ZTX0VOQ09ERV9NT0RFX01SMTIyMAogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlNfRU5DT0RFX01PREVfTVIxMTIwCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjkwCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GU19FTkNPREVfTU9ERV9NUjcyMAogKi8KCgl1MTYgICAgICAgICAgcmF0ZV9tb2RfY21kOwovKiBSYXRlIG1vZHVsYXRpb24gY29tbWFuZC4gRGVmYXVsdCA9IDAuCiAqLSBJZiBiaXQgMD0xLCByYXRlIGNvbnRyb2wgaXMgZW5hYmxlZC4KICotIElmIGJpdCAxPTEsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBmdWxsIHJhdGUKICoJCQlmcmFtZXMgaXMgbGltaXRlZCB3aXRoIG51bWJlcnMgc3VwcGxpZWQgaW4KICoJCQliaXRzIDIgdG8gMTAuCiAqLSBJZiBiaXQgMT0wLCB0aGUgbWluaW11bSBudW1iZXIgb2Ygbm9uLWZ1bGwgcmF0ZSBmcmFtZXMKICoJCQlpbiBiZXR3ZWVuIHR3byBmdWxsIHJhdGUgZnJhbWVzIGlzIGZvcmNlZCB0bwogKiB0aGUgbnVtYmVyIHN1cHBsaWVkIGluIGJpdHMgMiB0byAxMC4gSW4gYm90aCBjYXNlcywgaWYgbmVjZXNzYXJ5LAogKiBoYWxmIHJhdGUgaXMgdXNlZCB0byBzdWJzdGl0dXRlIGZ1bGwgcmF0ZS4gLSBCaXRzIDE1IHRvIDEwIGFyZQogKiByZXNlcnZlZCBhbmQgbXVzdCBhbGwgYmUgc2V0IHRvIHplcm8uCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9FVlJDX0ZTICAgICAgICAgICAgICAgICAgIDB4MDAwMTBCRUUKCi8qICBFVlJDIGVuY29kZXIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUKICogI0FTTV9QQVJBTV9JRF9FTkNERUNfRU5DX0NGR19CTEtfVjIgY29tbWFuZC4KICovCnN0cnVjdCBhc21fZXZyY19lbmNfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtICBlbmNkZWM7CglzdHJ1Y3QgYXNtX2VuY19jZmdfYmxrX3BhcmFtX3YyCWVuY2JsazsKCXUxNiAgICAgICAgICBtYXhfcmF0ZTsKLyogTWF4aW11bSBhbGxvd2VkIGVuY29kZXIgZnJhbWUgcmF0ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfT05FX0VJR0hUSF9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9GT1VSVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19IQUxGX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfRlVMTF9SQVRFCiAqLwoKCXUxNiAgICAgICAgICBtaW5fcmF0ZTsKLyogTWluaW11bSBhbGxvd2VkIGVuY29kZXIgZnJhbWUgcmF0ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfT05FX0VJR0hUSF9SQVRFCiAqIC0gI0FTTV9NRURJQV9GTVRfVk9DX09ORV9GT1VSVEhfUkFURQogKiAtICNBU01fTUVESUFfRk1UX1ZPQ19IQUxGX1JBVEUKICogLSAjQVNNX01FRElBX0ZNVF9WT0NfRlVMTF9SQVRFCiAqLwoKCXUxNiAgICAgICAgICByYXRlX21vZF9jbWQ7Ci8qIFJhdGUgbW9kdWxhdGlvbiBjb21tYW5kLiBEZWZhdWx0OiAwLgogKiAtIElmIGJpdCAwPTEsIHJhdGUgY29udHJvbCBpcyBlbmFibGVkLgogKiAtIElmIGJpdCAxPTEsIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25zZWN1dGl2ZSBmdWxsIHJhdGUgZnJhbWVzCiAqIGlzIGxpbWl0ZWQgd2l0aCBudW1iZXJzIHN1cHBsaWVkIGluIGJpdHMgMiB0byAxMC4KICoKICogLSBJZiBiaXQgMT0wLCB0aGUgbWluaW11bSBudW1iZXIgb2Ygbm9uLWZ1bGwgcmF0ZSBmcmFtZXMgaW4KICogYmV0d2VlbiB0d28gZnVsbCByYXRlIGZyYW1lcyBpcyBmb3JjZWQgdG8gdGhlIG51bWJlciBzdXBwbGllZCBpbgogKiBiaXRzIDIgdG8gMTAuIEluIGJvdGggY2FzZXMsIGlmIG5lY2Vzc2FyeSwgaGFsZiByYXRlIGlzIHVzZWQgdG8KICogc3Vic3RpdHV0ZSBmdWxsIHJhdGUuCiAqCiAqIC0gQml0cyAxNSB0byAxMCBhcmUgcmVzZXJ2ZWQgYW5kIG11c3QgYWxsIGJlIHNldCB0byB6ZXJvLgogKi8KCgl1MTYgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBSZXNlcnZlZC4gQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfV01BX1YxMFBST19WMiAgICAgICAgICAgICAgICAweDAwMDEwREE3CgpzdHJ1Y3QgYXNtX3dtYXByb3YxMF9mbXRfYmxrX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fZGF0YV9jbWRfbWVkaWFfZm10X3VwZGF0ZV92MiBmbXRibGs7CgoJdTE2ICAgICAgICAgIGZtdGFnOwovKiBXTUEgZm9ybWF0IHR5cGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMHgxNjIgLS0gV01BIDkgUHJvCiAqIC0gMHgxNjMgLS0gV01BIDkgUHJvIExvc3NsZXNzCiAqIC0gMHgxNjYgLS0gV01BIDEwIFBybwogKiAtIDB4MTY3IC0tIFdNQSAxMCBQcm8gTG9zc2xlc3MKICovCgoJdTE2ICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIGVuY29kZWQgaW4gdGhlIGlucHV0IHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKCXUzMiAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZCAoaW4gSGVydHopLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxMTAyNSwgMTYwMDAsIDIyMDUwLCAzMjAwMCwgNDQxMDAsIDQ4MDAwLAogKiA4ODIwMCwgOTYwMDAKICovCgoJdTMyICAgICAgICAgIGF2Z19ieXRlc19wZXJfc2VjOwovKiBCaXRyYXRlIGV4cHJlc3NlZCBhcyB0aGUgYXZlcmFnZSBieXRlcyBwZXIgc2Vjb25kLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAyMDAwIHRvIDk2MDAwCiAqLwoKCXUxNiAgICAgICAgICBibGtfYWxpZ247Ci8qIFNpemUgb2YgdGhlIGJpdHN0cmVhbSBwYWNrZXQgc2l6ZSBpbiBieXRlcy4gV01BIFBybyBmaWxlcwogKiBoYXZlIGEgcGF5bG9hZCBvZiBvbmUgYmxvY2sgcGVyIGJpdHN0cmVhbSBwYWNrZXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEBsZSAxMzM3NgogKi8KCgl1MTYgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBOdW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIGluIHRoZSBlbmNvZGVkIFdNQSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDE2LCAyNAogKi8KCgl1MzIgICAgICAgICAgY2hhbm5lbF9tYXNrOwovKiBCaXQtcGFja2VkIGRvdWJsZSB3b3JkICgzMi1iaXRzKSB0aGF0IGluZGljYXRlcyB0aGUKICogcmVjb21tZW5kZWQgc3BlYWtlciBwb3NpdGlvbnMgZm9yIGVhY2ggc291cmNlIGNoYW5uZWwuCiAqLwoKCXUxNiAgICAgICAgICBlbmNfb3B0aW9uczsKLyogQml0LXBhY2tlZCB3b3JkIHdpdGggdmFsdWVzIHRoYXQgaW5kaWNhdGUgd2hldGhlciBjZXJ0YWluCiAqIGZlYXR1cmVzIG9mIHRoZSBiaXRzdHJlYW0gYXJlIHVzZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC0gMHgwMDAxIC0tIEVOQ09QVDNfUFVSRV9MT1NTTEVTUyAtIDB4MDAwNiAtLQogKiBFTkNPUFQzX0ZSTV9TSVpFX01PRCAtIDB4MDAzOCAtLSBFTkNPUFQzX1NVQkZSTV9ESVYgLSAweDAwNDAgLS0KICogRU5DT1BUM19XUklURV9GUkFNRVNJWkVfSU5fSERSIC0gMHgwMDgwIC0tCiAqIEVOQ09QVDNfR0VORVJBVEVfRFJDX1BBUkFNUyAtIDB4MDEwMCAtLSBFTkNPUFQzX1JUTUJJVFMKICovCgoKCXUxNiAgICAgICAgICB1c0FkdmFuY2VkRW5jb2RlT3B0OwoJLyogQWR2YW5jZWQgZW5jb2Rpbmcgb3B0aW9uLiAgKi8KCgl1MzIgICAgICAgICAgYWR2YW5jZWRfZW5jX29wdGlvbnMyOwoJLyogQWR2YW5jZWQgZW5jb2Rpbmcgb3B0aW9uIDIuICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fTUVESUFfRk1UX1dNQV9WOV9WMiAgICAgICAgICAgICAgICAgICAgMHgwMDAxMERBOApzdHJ1Y3QgYXNtX3dtYXN0ZHY5X2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCXUxNiAgICAgICAgICBmbXRhZzsKLyogV01BIGZvcm1hdCB0YWcuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDB4MTYxIChXTUEgOSBzdGFuZGFyZCkKICovCgoJdTE2ICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTnVtYmVyIG9mIGNoYW5uZWxzIGluIHRoZSBzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDEsIDIKICovCgoJdTMyICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kIChpbiBIZXJ0eikuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDQ4MDAwCiAqLwoKCXUzMiAgICAgICAgICBhdmdfYnl0ZXNfcGVyX3NlYzsKCS8qIEJpdHJhdGUgZXhwcmVzc2VkIGFzIHRoZSBhdmVyYWdlIGJ5dGVzIHBlciBzZWNvbmQuICovCgoJdTE2ICAgICAgICAgIGJsa19hbGlnbjsKLyogQmxvY2sgYWxpZ24uIEFsbCBXTUEgZmlsZXMgd2l0aCBhIG1heGltdW0gcGFja2V0IHNpemUgb2YKICogMTMzNzYgYXJlIHN1cHBvcnRlZC4KICovCgoKCXUxNiAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgaW4gdGhlIG91dHB1dC4KICogU3VwcG9ydGVkIHZhbHVlczogMTYKICovCgoJdTMyICAgICAgICAgIGNoYW5uZWxfbWFzazsKLyogQ2hhbm5lbCBtYXNrLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDMgLS0gU3RlcmVvIChmcm9udCBsZWZ0L2Zyb250IHJpZ2h0KQogKiAtIDQgLS0gTW9ubyAoY2VudGVyKQogKi8KCgl1MTYgICAgICAgICAgZW5jX29wdGlvbnM7CgkvKiBPcHRpb25zIHVzZWQgZHVyaW5nIGVuY29kaW5nLiAqLwoKCXUxNiAgICAgICAgICByZXNlcnZlZDsKCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfV01BX1Y4ICAgICAgICAgICAgICAgICAgICAweDAwMDEwRDkxCgpzdHJ1Y3QgYXNtX3dtYXN0ZHY4X2VuY19jZmcgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW0gIGVuY2RlYzsKCXN0cnVjdCBhc21fZW5jX2NmZ19ibGtfcGFyYW1fdjIJZW5jYmxrOwoJdTMyICAgICAgICAgIGJpdF9yYXRlOwoJLyogRW5jb2RpbmcgcmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuICovCgoJdTMyICAgICAgICAgIHNhbXBsZV9yYXRlOwovKiBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgc2Vjb25kLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gTmF0aXZlIG1vZGUKICogLSBPdGhlciBTdXBwb3J0ZWQgdmFsdWVzIGFyZSAyMjA1MCwgMzIwMDAsIDQ0MTAwLCBhbmQgNDgwMDAuCiAqCiAqIE5hdGl2ZSBtb2RlIGluZGljYXRlcyB0aGF0IGVuY29kaW5nIG11c3QgYmUgcGVyZm9ybWVkIHdpdGggdGhlCiAqIHNhbXBsaW5nIHJhdGUgYXQgdGhlIGlucHV0LgogKiBUaGUgc2FtcGxpbmcgcmF0ZSBtdXN0IG5vdCBjaGFuZ2UgZHVyaW5nIGVuY29kaW5nLgogKi8KCgl1MTYgICAgICAgICAgY2hhbm5lbF9jZmc7Ci8qIE51bWJlciBvZiBjaGFubmVscyB0byBlbmNvZGUuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBOYXRpdmUgbW9kZQogKiAtIDEgLS0gTW9ubwogKiAtIDIgLS0gU3RlcmVvCiAqIC0gT3RoZXIgdmFsdWVzIGFyZSBub3Qgc3VwcG9ydGVkLgogKgogKiBOYXRpdmUgbW9kZSBpbmRpY2F0ZXMgdGhhdCBlbmNvZGluZyBtdXN0IGJlIHBlcmZvcm1lZCB3aXRoIHRoZQogKiBudW1iZXIgb2YgY2hhbm5lbHMgYXQgdGhlIGlucHV0LgogKiBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIG11c3Qgbm90IGNoYW5nZSBkdXJpbmcgZW5jb2RpbmcuCiAqLwoKCXUxNiAgICAgICAgICByZXNlcnZlZDsKCS8qIFJlc2VydmVkLiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwoJfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BTVJfV0JfUExVU19WMiAgICAgICAgICAgICAgIDB4MDAwMTBEQTkKCnN0cnVjdCBhc21fYW1yd2JwbHVzX2ZtdF9ibGtfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9kYXRhX2NtZF9tZWRpYV9mbXRfdXBkYXRlX3YyIGZtdGJsazsKCXUzMiAgICAgICAgICBhbXJfZnJhbWVfZm10OwovKiBBTVIgZnJhbWUgZm9ybWF0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDYgLS0gVHJhbnNwb3J0IEludGVyZmFjZSBGb3JtYXQgKFRJRikKICogLSBBbnkgb3RoZXIgdmFsdWUgLS0gRmlsZSBzdG9yYWdlIGZvcm1hdCAoRlNGKQogKgogKiBUSUYgc3RyZWFtIGNvbnRhaW5zIDItYnl0ZSBoZWFkZXIgZm9yIGVhY2ggZnJhbWUgd2l0aGluIHRoZQogKiBzdXBlcmZyYW1lLiBGU0Ygc3RyZWFtIGNvbnRhaW5zIG9uZSAyLWJ5dGUgaGVhZGVyIHBlciBzdXBlcmZyYW1lLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9NRURJQV9GTVRfQUMzICAgICAgICAgICAgICAgICAgICAweDAwMDEwREVFCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9FQUMzICAgICAgICAgICAgICAgICAgIDB4MDAwMTBERUYKI2RlZmluZSBBU01fTUVESUFfRk1UX0RUUyAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEQ4OAojZGVmaW5lIEFTTV9NRURJQV9GTVRfTVAyICAgICAgICAgICAgICAgICAgICAweDAwMDEwREU5CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9GTEFDICAgICAgICAgICAgICAgICAgIDB4MDAwMTBDMTYKI2RlZmluZSBBU01fTUVESUFfRk1UX0FMQUMgICAgICAgICAgICAgICAgICAgMHgwMDAxMkYzMQojZGVmaW5lIEFTTV9NRURJQV9GTVRfVk9SQklTICAgICAgICAgICAgICAgICAweDAwMDEwQzE1CiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BUEUgICAgICAgICAgICAgICAgICAgIDB4MDAwMTJGMzIKI2RlZmluZSBBU01fTUVESUFfRk1UX0RTRCAgICAgICAgICAgICAgICAgICAgMHgwMDAxMkYzRQojZGVmaW5lIEFTTV9NRURJQV9GTVRfVFJVRUhEICAgICAgICAgICAgICAgICAweDAwMDEzMjE1Ci8qIDB4MCBpcyB1c2VkIGZvciBmb21hdCBJRCBzaW5jZSBBRFNQIGR5bmFtaWNhbGx5IGRldGVybWluZXMgdGhlCiAqIGZvcm1hdCBlbmNhcHN1bGF0ZWQgaW4gdGhlIElFQzYxOTM3IChjb21wcmVzc2VkKSBvciBJRUM2MDk1OAogKiAocGNtKSBwYWNrZXRzLgogKi8KI2RlZmluZSBBU01fTUVESUFfRk1UX0lFQyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAoKLyogTWVkaWEgZm9ybWF0IElEIGZvciBhZGFwdGl2ZSB0cmFuc2Zvcm0gYWNvdXN0aWMgY29kaW5nLiBUaGlzCiAqIElEIGlzIHVzZWQgYnkgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgY29tbWFuZAogKiBvbmx5LgogKi8KCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9BVFJBQyAgICAgICAgICAgICAgICAgIDB4MDAwMTBEODkKCi8qIE1lZGlhIGZvcm1hdCBJRCBmb3IgbWV0YWRhdGEtZW5oYW5jZWQgYXVkaW8gdHJhbnNtaXNzaW9uLgogKiBUaGlzIElEIGlzIHVzZWQgYnkgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQKICogY29tbWFuZCBvbmx5LgogKi8KCiNkZWZpbmUgQVNNX01FRElBX0ZNVF9NQVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBEOEEKCi8qICBhZHNwX21lZGlhX2ZtdC5oICovCgojZGVmaW5lIEFTTV9EQVRBX0NNRF9XUklURV9WMiAweDAwMDEwREFCCgpzdHJ1Y3QgYXNtX2RhdGFfY21kX3dyaXRlX3YyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgIGJ1Zl9hZGRyX2xzdzsKLyogVGhlIDY0IGJpdCBhZGRyZXNzIG1zdy1sc3cgc2hvdWxkIGJlIGEgdmFsaWQsIG1hcHBlZCBhZGRyZXNzLgogKiA2NCBiaXQgYWRkcmVzcyBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiAzMiBieXRlcwogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBidWZfYWRkcl9tc3c7Ci8qIFRoZSA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IHNob3VsZCBiZSBhIHZhbGlkLCBtYXBwZWQgYWRkcmVzcy4KICogNjQgYml0IGFkZHJlc3Mgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMuCiAqIC1BZGRyZXNzIG9mIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZSBkZWNvZGVkLgogKiBUaGUgYnVmZmVyIHNob3VsZCBiZSBhbGlnbmVkIHRvIGEgMzIgYnl0ZSBib3VuZGFyeS4KICogLUluIHRoZSBjYXNlIG9mIDMyIGJpdCBTaGFyZWQgbWVtb3J5IGFkZHJlc3MsIG1zdyBmaWVsZCBtdXN0CiAqIC1iZSBzZXQgdG8gemVyby4KICogLUluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQgNAogKiAtb2YgbXN3IG11c3QgYmUgc2V0IHRvIHplcm8uCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7Ci8qIG1lbW9yeSBtYXAgaGFuZGxlIHJldHVybmVkIGJ5IERTUCB0aHJvdWdoCiAqIEFTTV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgYnVmX3NpemU7Ci8qIE51bWJlciBvZiB2YWxpZCBieXRlcyBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlciBmb3IgZGVjb2RpbmcuIFRoZQogKiBmaXJzdCBieXRlIHN0YXJ0cyBhdCBidWZfYWRkci4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgc2VxX2lkOwoJLyogT3B0aW9uYWwgYnVmZmVyIHNlcXVlbmNlIElELiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzIG9mIHRoZQogKiBmaXJzdCBidWZmZXIgc2FtcGxlLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICB0aW1lc3RhbXBfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgc2Vzc2lvbiB0aW1lIGluIG1pY3Jvc2Vjb25kcyBvZiB0aGUKICogZmlyc3QgYnVmZmVyIHNhbXBsZS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci8qIEJpdGZpZWxkIG9mIGZsYWdzLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzE6CiAqIC0gMSAtLSBWYWxpZCB0aW1lc3RhbXAuCiAqIC0gMCAtLSBJbnZhbGlkIHRpbWVzdGFtcC4KICogLSBVc2UgI0FTTV9CSVRfTUFTS0lNRVNUQU1QX1ZBTElEX0ZMQUcgYXMgdGhlIGJpdG1hc2sgYW5kCiAqICNBU01fU0hJRlRJTUVTVEFNUF9WQUxJRF9GTEFHIGFzIHRoZSBzaGlmdCB2YWx1ZSB0byBzZXQgdGhpcyBiaXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCAzMDoKICogLSAxIC0tIExhc3QgYnVmZmVyLgogKiAtIDAgLS0gTm90IHRoZSBsYXN0IGJ1ZmZlci4KICoKICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0IDI5OgogKiAtIDEgLS0gQ29udGludWUgdGhlIHRpbWVzdGFtcCBmcm9tIHRoZSBwcmV2aW91cyBidWZmZXIuCiAqIC0gMCAtLSBUaW1lc3RhbXAgb2YgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIG5vdCByZWxhdGVkCiAqIHRvIHRoZSB0aW1lc3RhbXAgb2YgdGhlIHByZXZpb3VzIGJ1ZmZlci4KICogLSBVc2UgI0FTTV9CSVRfTUFTS1NfQ09OVElOVUVfRkxBRyBhbmQgI0FTTV9TSElGVFNfQ09OVElOVUVfRkxBRwogKiB0byBzZXQgdGhpcyBiaXQuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCA0OgogKiAtIDEgLS0gRW5kIG9mIHRoZSBmcmFtZS4KICogLSAwIC0tIE5vdCB0aGUgZW5kIG9mIGZyYW1lLCBvciB0aGlzIGluZm9ybWF0aW9uIGlzIG5vdCBrbm93bi4KICogLSBVc2UgI0FTTV9CSVRfTUFTS19FT0ZfRkxBRyBhcyB0aGUgYml0bWFzayBhbmQgI0FTTV9TSElGVF9FT0ZfRkxBRwogKiBhcyB0aGUgc2hpZnQgdmFsdWUgdG8gc2V0IHRoaXMgYml0LgogKgogKiBBbGwgb3RoZXIgYml0cyBhcmUgcmVzZXJ2ZWQgYW5kIG11c3QgYmUgc2V0IHRvIDAuCiAqCiAqIElmIGJpdCAzMT0wIGFuZCBiaXQgMjk9MTogVGhlIHRpbWVzdGFtcCBvZiB0aGUgZmlyc3Qgc2FtcGxlIGluCiAqIHRoaXMgYnVmZmVyIGNvbnRpbnVlcyBmcm9tIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGxhc3Qgc2FtcGxlIGluCiAqIHRoZSBwcmV2aW91cyBidWZmZXIuIElmIHRoZXJlIGlzIG5vIHByZXZpb3VzIGJ1ZmZlciAoaS5lLiwgdGhpcwogKiBpcyB0aGUgZmlyc3QgYnVmZmVyIHNlbnQgYWZ0ZXIgb3BlbmluZyB0aGUgc3RyZWFtIG9yIGFmdGVyIGEKICogZmx1c2ggb3BlcmF0aW9uKSwgb3IgaWYgdGhlIHByZXZpb3VzIGJ1ZmZlciBkb2VzIG5vdCBoYXZlIGEgdmFsaWQKICogdGltZXN0YW1wLCB0aGUgc2FtcGxlcyBpbiB0aGUgY3VycmVudCBidWZmZXIgYWxzbyBkbyBub3QgaGF2ZSBhCiAqIHZhbGlkIHRpbWVzdGFtcC4gVGhleSBhcmUgcGxheWVkIG91dCBhcyBzb29uIGFzIHBvc3NpYmxlLgogKgogKgogKiBJZiBiaXQgMzE9MCBhbmQgYml0IDI5PTA6IE5vIHRpbWVzdGFtcCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIGZpcnN0IHNhbXBsZSBpbiB0aGlzIGJ1ZmZlci4gVGhlIHNhbXBsZXMgYXJlIHBsYXllZCBvdXQgYXMgc29vbgogKiBhcyBwb3NzaWJsZS4KICoKICoKICogSWYgYml0IDMxPTEgYW5kIGJpdCAyOSBpcyBpZ25vcmVkOiBUaGUgdGltZXN0YW1wIHNwZWNpZmllZCBpbgogKiB0aGlzIHBheWxvYWQgaXMgaG9ub3JlZC4KICoKICoKICogSWYgYml0IDMwPTA6IE5vdCB0aGUgbGFzdCBidWZmZXIgaW4gdGhlIHN0cmVhbS4gVGhpcyBpcyB1c2VmdWwKICogaW4gcmVtb3ZpbmcgdHJhaWxpbmcgc2FtcGxlcy4KICoKICoKICogRm9yIGJpdCA0OiBUaGUgY2xpZW50IGNhbiBzZXQgdGhpcyBmbGFnIGZvciBldmVyeSBidWZmZXIgc2VudCBpbgogKiB3aGljaCB0aGUgbGFzdCBieXRlIGlzIHRoZSBlbmQgb2YgYSBmcmFtZS4gSWYgdGhpcyBmbGFnIGlzIHNldCwKICogdGhlIGJ1ZmZlciBjYW4gY29udGFpbiBkYXRhIGZyb20gbXVsdGlwbGUgZnJhbWVzLCBidXQgaXQgc2hvdWxkCiAqIGFsd2F5cyBlbmQgYXQgYSBmcmFtZSBib3VuZGFyeS4gUmVzdHJpY3Rpb25zIGFsbG93IHRoZSBhRFNQIHRvCiAqIGRldGVjdCBhbiBlbmQgb2YgZnJhbWUgd2l0aG91dCByZXF1aXJpbmcgYWRkaXRpb25hbCBwcm9jZXNzaW5nLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9EQVRBX0NNRF9SRUFEX1YyIDB4MDAwMTBEQUMKCnN0cnVjdCBhc21fZGF0YV9jbWRfcmVhZF92MiB7CglzdHJ1Y3QgYXByX2hkciAgICAgICBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICBidWZfYWRkcl9sc3c7Ci8qIHRoZSA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IHNob3VsZCBiZSBhIHZhbGlkIG1hcHBlZCBhZGRyZXNzCiAqIGFuZCBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiAzMiBieXRlcwogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbXN3OwovKiB0aGUgNjQgYml0IGFkZHJlc3MgbXN3LWxzdyBzaG91bGQgYmUgYSB2YWxpZCBtYXBwZWQgYWRkcmVzcwogKiBhbmQgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMuCiAqIC0gQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHdoZXJlIHRoZSBEU1AgcHV0cyB0aGUgZW5jb2RlZCBkYXRhLAogKiBwb3RlbnRpYWxseSwgYXQgYW4gb2Zmc2V0IHNwZWNpZmllZCBieSB0aGUgdU9mZnNldCBmaWVsZCBpbgogKiBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkUgc3RydWN0dXJlLiBUaGUgYnVmZmVyIHNob3VsZCBiZSBhbGlnbmVkCiAqIHRvIGEgMzIgYnl0ZSBib3VuZGFyeS4KICogLSBJbiB0aGUgY2FzZSBvZiAzMiBiaXQgU2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBtc3cgZmllbGQgbXVzdAogKiAtIGJlIHNldCB0byB6ZXJvLgogKiAtIEluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQKICogLSA0IG9mIG1zdyBtdXN0IGJlIHNldCB0byB6ZXJvLgogKi8KCXUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBEU1AgdGhyb3VnaAogKiBBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMgY29tbWFuZC4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgYnVmX3NpemU7Ci8qIE51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgZm9yIHRoZSBhRFNQIHRvIHdyaXRlLiBUaGUgYURTUAogKiBzdGFydHMgd3JpdGluZyBmcm9tIGJ1Zl9hZGRyLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzZXFfaWQ7CgkvKiBPcHRpb25hbCBidWZmZXIgc2VxdWVuY2UgSUQuICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9EQVRBX0NNRF9FT1MgICAgICAgICAgICAgICAweDAwMDEwQkRCCiNkZWZpbmUgQVNNX0RBVEFfRVZFTlRfUkVOREVSRURfRU9TICAgIDB4MDAwMTBDMUMKI2RlZmluZSBBU01fREFUQV9FVkVOVF9FT1MgICAgICAgICAgICAgMHgwMDAxMEJERAoKI2RlZmluZSBBU01fREFUQV9FVkVOVF9XUklURV9ET05FX1YyIDB4MDAwMTBEOTkKc3RydWN0IGFzbV9kYXRhX2V2ZW50X3dyaXRlX2RvbmVfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbHN3OwoJLyogbHN3IG9mIHRoZSA2NCBiaXQgYWRkcmVzcyAqLwoJdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbXN3OwoJLyogbXN3IG9mIHRoZSA2NCBiaXQgYWRkcmVzcy4gYWRkcmVzcyBnaXZlbiBieSB0aGUgY2xpZW50IGluCgkgKiBBU01fREFUQV9DTURfV1JJVEVfVjIgY29tbWFuZC4KCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7CgkvKiBtZW1vcnkgbWFwIGhhbmRsZSBpbiB0aGUgQVNNX0RBVEFfQ01EX1dSSVRFX1YyICovCgoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwovKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUKICogcmVmZXJlbmNlZCBidWZmZXIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbnN1bWVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBSZWZlciB0byBAeGh5cGVycmVme1EzLFtRM119CiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkVfVjIgMHgwMDAxMEQ5QQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgZnJhbWUgbWV0YWRhdGEgZmxhZyBiaXRtYXNrLiovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX0ZSQU1FX01FVEFEQVRBX0ZMQUcgKDB4NDAwMDAwMDBVTCkKCi8qIERlZmluaXRpb24gb2YgdGhlIGZyYW1lIG1ldGFkYXRhIGZsYWcgc2hpZnQgdmFsdWUuICovCiNkZWZpbmUgQVNNX1NISUZUX0ZSQU1FX01FVEFEQVRBX0ZMQUcgMzAKCnN0cnVjdCBhc21fZGF0YV9ldmVudF9yZWFkX2RvbmVfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgc3RhdHVzOwovKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IFJlZmVyIHRvIEB4aHlwZXJyZWZ7UTMsW1EzXX0KICovCgp1MzIgICAgICAgICAgICAgICAgICBidWZfYWRkcl9sc3c7Ci8qIDY0IGJpdCBhZGRyZXNzIG1zdy1sc3cgaXMgYSB2YWxpZCwgbWFwcGVkIGFkZHJlc3MuIDY0IGJpdAogKiBhZGRyZXNzIGlzIGEgbXVsdGlwbGUgb2YgMzIgYnl0ZXMuCiAqLwoKdTMyICAgICAgICAgICAgICAgICAgYnVmX2FkZHJfbXN3OwovKiA2NCBiaXQgYWRkcmVzcyBtc3ctbHN3IGlzIGEgdmFsaWQsIG1hcHBlZCBhZGRyZXNzLiA2NCBiaXQKICogYWRkcmVzcyBpcyBhIG11bHRpcGxlIG9mIDMyIGJ5dGVzLgogKgogKiAtU2FtZSBhZGRyZXNzIHByb3ZpZGVkIGJ5IHRoZSBjbGllbnQgaW4gQVNNX0RBVEFfQ01EX1JFQURfVjIKICogLUluIHRoZSBjYXNlIG9mIDMyIGJpdCBTaGFyZWQgbWVtb3J5IGFkZHJlc3MsIG1zdyBmaWVsZCBpcyBzZXQgdG8KICogemVyby4KICogLUluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQgNAogKiAtb2YgbXN3IGlzIHNldCB0byB6ZXJvLgogKi8KCnUzMiAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwovKiBtZW1vcnkgbWFwIGhhbmRsZSBpbiB0aGUgQVNNX0RBVEFfQ01EX1JFQURfVjIgICovCgp1MzIgICAgICAgICAgICAgICAgICBlbmNfZnJhbWVzb3RhbF9zaXplOwovKiBUb3RhbCBzaXplIG9mIHRoZSBlbmNvZGVkIGZyYW1lcyBpbiBieXRlcy4KICogU3VwcG9ydGVkIHZhbHVlczogPjAKICovCgp1MzIgICAgICAgICAgICAgICAgICBvZmZzZXQ7Ci8qIE9mZnNldCAoZnJvbSBidWZfYWRkcikgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGZpcnN0IGVuY29kZWQKICogZnJhbWUuIEFsbCBlbmNvZGVkIGZyYW1lcyBhcmUgY29uc2VjdXRpdmUsIHN0YXJ0aW5nIGZyb20gdGhpcwogKiBvZmZzZXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcF9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzIG9mCiAqIHRoZSBmaXJzdCBzYW1wbGUgaW4gdGhlIGJ1ZmZlci4gSWYgQml0IDUgb2YgbW9kZV9mbGFncyBmbGFnIG9mCiAqIEFTTV9TVFJFQU1fQ01EX09QRU5fUkVBRF9WMiBpcyAxIHRoZW4gdGhlIDY0IGJpdCB0aW1lc3RhbXAgaXMKICogYWJzb2x1dGUgY2FwdHVyZSB0aW1lIG90aGVyd2lzZSBpdCBpcyByZWxhdGl2ZSBzZXNzaW9uIHRpbWUuIFRoZQogKiBhYnNvbHV0ZSB0aW1lc3RhbXAgZG9lc24ndCByZXNldCB1bmxlc3MgdGhlIHN5c3RlbSBpcyByZXNldC4KICovCgoKdTMyICAgICAgICAgICAgICAgICAgdGltZXN0YW1wX21zdzsKLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgb2YKICogdGhlIGZpcnN0IHNhbXBsZSBpbiB0aGUgYnVmZmVyLgogKi8KCgp1MzIgICAgICAgICAgICAgICAgICBmbGFnczsKLyogQml0ZmllbGQgb2YgZmxhZ3MuIEJpdCAzMCBpbmRpY2F0ZXMgd2hldGhlciBmcmFtZSBtZXRhZGF0YSBpcwogKiBwcmVzZW50LiBJZiBmcmFtZSBtZXRhZGF0YSBpcyBwcmVzZW50LCBudW1fZnJhbWVzIGNvbnNlY3V0aXZlCiAqIGluc3RhbmNlcyBvZiBAeGh5cGVycmVme2hkcjpGcmFtZU1ldGFEYXRhLEZyYW1lIG1ldGFkYXRhfSBzdGFydAogKiBhdCB0aGUgYnVmZmVyIGFkZHJlc3MuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCAzMToKICogLSAxIC0tIFRpbWVzdGFtcCBpcyB2YWxpZC4KICogLSAwIC0tIFRpbWVzdGFtcCBpcyBpbnZhbGlkLgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLSU1FU1RBTVBfVkFMSURfRkxBRyBhbmQKICogI0FTTV9TSElGVElNRVNUQU1QX1ZBTElEX0ZMQUcgdG8gc2V0IHRoaXMgYml0LgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzA6CiAqIC0gMSAtLSBGcmFtZSBtZXRhZGF0YSBpcyBwcmVzZW50LgogKiAtIDAgLS0gRnJhbWUgbWV0YWRhdGEgaXMgYWJzZW50LgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLX0ZSQU1FX01FVEFEQVRBX0ZMQUcgYW5kCiAqICNBU01fU0hJRlRfRlJBTUVfTUVUQURBVEFfRkxBRyB0byBzZXQgdGhpcyBiaXQuCiAqCiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgdGhlIGFEU1Agc2V0cyB0aGVtIHRvIDAuCiAqLwoKdTMyICAgICAgICAgICAgICAgICAgbnVtX2ZyYW1lczsKLyogTnVtYmVyIG9mIGVuY29kZWQgZnJhbWVzIGluIHRoZSBidWZmZXIuICovCgp1MzIgICAgICAgICAgICAgICAgICBzZXFfaWQ7Ci8qIE9wdGlvbmFsIGJ1ZmZlciBzZXF1ZW5jZSBJRC4JKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZGF0YV9yZWFkX2J1Zl9tZXRhZGF0YV92MiB7Cgl1MzIgICAgICAgICAgb2Zmc2V0OwovKiBPZmZzZXQgZnJvbSBidWZfYWRkciBpbiAjQVNNX0RBVEFfRVZFTlRfUkVBRF9ET05FX1BBWUxPQUQgdG8KICogdGhlIGZyYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1ldGFkYXRhLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+IDAKICovCgp1MzIgICAgICAgICAgZnJtX3NpemU7Ci8qIFNpemUgb2YgdGhlIGVuY29kZWQgZnJhbWUgaW4gYnl0ZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiAgICAgICAgICBudW1fZW5jb2RlZF9wY21fc2FtcGxlczsKLyogTnVtYmVyIG9mIGVuY29kZWQgUENNIHNhbXBsZXMgKHBlciBjaGFubmVsKSBpbiB0aGUgZnJhbWUKICogYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWV0YWRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID4gMAogKi8KCnUzMiAgICAgICAgICB0aW1lc3RhbXBfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgc2Vzc2lvbiB0aW1lIGluIG1pY3Jvc2Vjb25kcyBvZiB0aGUKICogZmlyc3Qgc2FtcGxlIGZvciB0aGlzIGZyYW1lLgogKiBJZiBCaXQgNSBvZiBtb2RlX2ZsYWdzIGZsYWcgb2YgQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEX1YyIGlzIDEKICogdGhlbiB0aGUgNjQgYml0IHRpbWVzdGFtcCBpcyBhYnNvbHV0ZSBjYXB0dXJlIHRpbWUgb3RoZXJ3aXNlIGl0CiAqIGlzIHJlbGF0aXZlIHNlc3Npb24gdGltZS4gVGhlIGFic29sdXRlIHRpbWVzdGFtcCBkb2Vzbid0IHJlc2V0CiAqIHVubGVzcyB0aGUgc3lzdGVtIGlzIHJlc2V0LgogKi8KCgp1MzIgICAgICAgICAgdGltZXN0YW1wX21zdzsKLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlCiAqIGZpcnN0IHNhbXBsZSBmb3IgdGhpcyBmcmFtZS4KICovCgp1MzIgICAgICAgICAgZmxhZ3M7Ci8qIEZyYW1lIGZsYWdzLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzE6CiAqIC0gMSAtLSBUaW1lIHN0YW1wIGlzIHZhbGlkCiAqIC0gMCAtLSBUaW1lIHN0YW1wIGlzIG5vdCB2YWxpZAogKiAtIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgdGhlIGFEU1Agc2V0cyB0aGVtIHRvIDAuCiAqLwp9IF9fcGFja2VkOwoKLyogTm90aWZpZXMgdGhlIGNsaWVudCBvZiBhIGNoYW5nZSBpbiB0aGUgZGF0YSBzYW1wbGluZyByYXRlIG9yCiAqIENoYW5uZWwgbW9kZS4gVGhpcyBldmVudCBpcyByYWlzZWQgYnkgdGhlIGRlY29kZXIgc2VydmljZS4gVGhlCiAqIGV2ZW50IGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgbW9kZSBmbGFncyBvZgogKiAjQVNNX1NUUkVBTV9DTURfT1BFTl9XUklURV9WMiBvcgogKiAjQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEV1JJVEVfVjIuIC0gVGhlIGRlY29kZXIgZGV0ZWN0cyBhIGNoYW5nZQogKiBpbiB0aGUgb3V0cHV0IHNhbXBsaW5nIGZyZXF1ZW5jeSBvciB0aGUgbnVtYmVyL3Bvc2l0aW9uaW5nIG9mCiAqIG91dHB1dCBjaGFubmVscywgb3IgaWYgaXQgaXMgdGhlIGZpcnN0IGZyYW1lIGRlY29kZWQuVGhlIG5ldwogKiBzYW1wbGluZyBmcmVxdWVuY3kgb3IgdGhlIG5ldyBjaGFubmVsIGNvbmZpZ3VyYXRpb24gaXMKICogY29tbXVuaWNhdGVkIGJhY2sgdG8gdGhlIGNsaWVudCBhc3luY2hyb25vdXNseS4KICovCgojZGVmaW5lIEFTTV9EQVRBX0VWRU5UX1NSX0NNX0NIQU5HRV9OT1RJRlkgMHgwMDAxMEM2NQoKLyogIFBheWxvYWQgb2YgdGhlICNBU01fREFUQV9FVkVOVF9TUl9DTV9DSEFOR0VfTk9USUZZIGV2ZW50LgogKiBUaGlzIGV2ZW50IGlzIHJhaXNlZCB3aGVuIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYm90aCB0cnVlOgogKiAtIFRoZSBldmVudCBpcyBlbmFibGVkIHRocm91Z2ggdGhlIG1vZGVfZmxhZ3Mgb2YKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fV1JJVEVfVjIgb3IKICogI0FTTV9TVFJFQU1fQ01EX09QRU5fUkVBRFdSSVRFX1YyLiAtIFRoZSBkZWNvZGVyIGRldGVjdHMgYSBjaGFuZ2UKICogaW4gZWl0aGVyIHRoZSBvdXRwdXQgc2FtcGxpbmcgZnJlcXVlbmN5IG9yIHRoZSBudW1iZXIvcG9zaXRpb25pbmcKICogb2Ygb3V0cHV0IGNoYW5uZWxzLCBvciBpZiBpdCBpcyB0aGUgZmlyc3QgZnJhbWUgZGVjb2RlZC4KICogVGhpcyBldmVudCBpcyBub3QgcmFpc2VkIChldmVuIGlmIGVuYWJsZWQpIGlmIHRoZSBkZWNvZGVyIGlzCiAqIE1JREksIGJlY2F1c2UKICovCgoKc3RydWN0IGFzbV9kYXRhX2V2ZW50X3NyX2NtX2NoYW5nZV9ub3RpZnkgewoJdTMyICAgICAgICAgICAgICAgICAgc2FtcGxlX3JhdGU7Ci8qIE5ldyBzYW1wbGluZyByYXRlIChpbiBIZXJ0eikgYWZ0ZXIgZGV0ZWN0aW5nIGEgY2hhbmdlIGluIHRoZQogKiBiaXRzdHJlYW0uCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwovKiBOZXcgbnVtYmVyIG9mIGNoYW5uZWxzIGFmdGVyIGRldGVjdGluZyBhIGNoYW5nZSBpbiB0aGUKICogYml0c3RyZWFtLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDgKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4qLwoKCXU4ICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFwcGluZ1s4XTsKCn0gX19wYWNrZWQ7CgovKiBOb3RpZmllcyB0aGUgY2xpZW50IG9mIGEgZGF0YSBzYW1wbGluZyByYXRlIG9yIGNoYW5uZWwgbW9kZQogKiBjaGFuZ2UuIFRoaXMgZXZlbnQgaXMgcmFpc2VkIGJ5IHRoZSBlbmNvZGVyIHNlcnZpY2UuCiAqIFRoaXMgZXZlbnQgaXMgcmFpc2VkIHdoZW4gOgogKiAtIE5hdGl2ZSBtb2RlIGVuY29kaW5nIHdhcyByZXF1ZXN0ZWQgaW4gdGhlIGVuY29kZXIKICogY29uZmlndXJhdGlvbiAoaS5lLiwgdGhlIGNoYW5uZWwgbnVtYmVyIHdhcyAwKSwgdGhlIHNhbXBsZSByYXRlCiAqIHdhcyAwLCBvciBib3RoIHdlcmUgMC4KICoKICogLSBUaGUgaW5wdXQgZGF0YSBmcmFtZSBhdCB0aGUgZW5jb2RlciBpcyB0aGUgZmlyc3Qgb25lLCBvciB0aGUKICogc2FtcGxpbmcgcmF0ZS9jaGFubmVsIG1vZGUgaXMgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIGlucHV0CiAqIGRhdGEgZnJhbWUuCiAqCiAqLwojZGVmaW5lIEFTTV9EQVRBX0VWRU5UX0VOQ19TUl9DTV9DSEFOR0VfTk9USUZZIDB4MDAwMTBCREUKCnN0cnVjdCBhc21fZGF0YV9ldmVudF9lbmNfc3JfY21fY2hhbmdlX25vdGlmeSB7Cgl1MzIgICAgICAgICAgICAgICAgICBzYW1wbGVfcmF0ZTsKLyogTmV3IHNhbXBsaW5nIHJhdGUgKGluIEhlcnR6KSBhZnRlciBkZXRlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlCiAqIGlucHV0IGRhdGEuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDIwMDAgdG8gNDgwMDAKICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyogTmV3IG51bWJlciBvZiBjaGFubmVscyBhZnRlciBkZXRlY3RpbmcgYSBjaGFuZ2UgaW4gdGhlIGlucHV0CiAqIGRhdGEuIFN1cHBvcnRlZCB2YWx1ZXM6IDEgdG8gOAogKi8KCgoJdTE2ICAgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiBOZXcgYml0cyBwZXIgc2FtcGxlIGFmdGVyIGRldGVjdGluZyBhIGNoYW5nZSBpbiB0aGUgaW5wdXQKICogZGF0YS4KICogU3VwcG9ydGVkIHZhbHVlczogMTYsIDI0CiAqLwoKCgl1OCAgICAgICAgICAgICAgICAgICBjaGFubmVsX21hcHBpbmdbOF07Cgp9IF9fcGFja2VkOwojZGVmaW5lIEFTTV9EQVRBX0NNRF9JRUNfNjA5NThfRlJBTUVfUkFURSAweDAwMDEwRDg3CgoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9EQVRBX0NNRF9JRUNfNjA5NThfRlJBTUVfUkFURSBjb21tYW5kLAogKiB3aGljaCBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSBJRUMgNjA5NTggZnJhbWUgcmF0ZSBvZiBhIGdpdmVuCiAqIHBhY2tldGl6ZWQgYXVkaW8gc3RyZWFtLgogKi8KCnN0cnVjdCBhc21fZGF0YV9jbWRfaWVjXzYwOTU4X2ZyYW1lX3JhdGUgewoJdTMyICAgICAgICAgICAgICAgICAgZnJhbWVfcmF0ZTsKLyogSUVDIDYwOTU4IGZyYW1lIHJhdGUgb2YgdGhlIGluY29taW5nIElFQyA2MTkzNyBwYWNrZXRpemVkIHN0cmVhbS4KICogU3VwcG9ydGVkIHZhbHVlczogQW55IHZhbGlkIGZyYW1lIHJhdGUKICovCn0gX19wYWNrZWQ7CgovKiBhZHNwX2FzbV9kYXRhX2NvbW1hbmRzLmgqLwovKiBEZWZpbml0aW9uIG9mIHRoZSBzdHJlYW0gSUQgYml0bWFzay4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19TVFJFQU1fSUQgICAgICAgICAgICAgICAgICgweDAwMDAwMEZGVUwpCgovKiBEZWZpbml0aW9uIG9mIHRoZSBzdHJlYW0gSUQgc2hpZnQgdmFsdWUuKi8KI2RlZmluZSBBU01fU0hJRlRfU1RSRUFNX0lEICAgICAgICAgICAgICAgICAgICAwCgovKiBEZWZpbml0aW9uIG9mIHRoZSBzZXNzaW9uIElEIGJpdG1hc2suKi8KI2RlZmluZSBBU01fQklUX01BU0tfU0VTU0lPTl9JRCAgICAgICAgICAgICAgICAoMHgwMDAwRkYwMFVMKQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgc2Vzc2lvbiBJRCBzaGlmdCB2YWx1ZS4qLwojZGVmaW5lIEFTTV9TSElGVF9TRVNTSU9OX0lEICAgICAgICAgICAgICAgICAgIDgKCi8qIERlZmluaXRpb24gb2YgdGhlIHNlcnZpY2UgSUQgYml0bWFzay4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19TRVJWSUNFX0lEICAgICAgICAgICAgICAgICgweDAwRkYwMDAwVUwpCgovKiBEZWZpbml0aW9uIG9mIHRoZSBzZXJ2aWNlIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQVNNX1NISUZUX1NFUlZJQ0VfSUQgICAgICAgICAgICAgICAgICAgMTYKCi8qIERlZmluaXRpb24gb2YgdGhlIGRvbWFpbiBJRCBiaXRtYXNrLiovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX0RPTUFJTl9JRCAgICAgICAgICAgICAgICAoMHhGRjAwMDAwMFVMKQoKLyogRGVmaW5pdGlvbiBvZiB0aGUgZG9tYWluIElEIHNoaWZ0IHZhbHVlLiovCiNkZWZpbmUgQVNNX1NISUZUX0RPTUFJTl9JRCAgICAgICAgICAgICAgICAgICAgMjQKCiNkZWZpbmUgQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TICAgICAgICAgICAgICAgMHgwMDAxMEQ5MgojZGVmaW5lIEFTTV9DTURSU1BfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyAgICAgMHgwMDAxMEQ5MwojZGVmaW5lIEFTTV9DTURfU0hBUkVEX01FTV9VTk1BUF9SRUdJT05TICAgICAgICAgICAgICAweDAwMDEwRDk0CgovKiBhZHNwX2FzbV9zZXJ2aWNlX2NvbW1hbmRzLmggKi8KCiNkZWZpbmUgQVNNX01BWF9TRVNTSU9OX0lEICAoMTUpCgovKiBNYXhpbXVtIG51bWJlciBvZiBzZXNzaW9ucy4qLwojZGVmaW5lIEFTTV9NQVhfTlVNX1NFU1NJT05TICAgICAgICAgICAgICAgIEFTTV9NQVhfU0VTU0lPTl9JRAoKLyogTWF4aW11bSBudW1iZXIgb2Ygc3RyZWFtcyBwZXIgc2Vzc2lvbi4qLwojZGVmaW5lIEFTTV9NQVhfU1RSRUFNU19QRVJfU0VTU0lPTiAoOCkKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUlVOX1YyICAgICAgICAgICAgICAgICAgIDB4MDAwMTBEQUEKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9JTU1FRElBVEUgIDAKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9BVF9BQlNPTFVURUlNRSAxCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fQVRfUkVMQVRJVkVJTUUgMgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRJTUVfUlVOX1dJVEhfREVMQVkgICAgIDMKCiNkZWZpbmUgQVNNX0JJVF9NQVNLX1JVTl9TVEFSVElNRSAgICAgICAgICAgICAgICAgKDB4MDAwMDAwMDNVTCkKCi8qIEJpdCBzaGlmdCB2YWx1ZSB1c2VkIHRvIHNwZWNpZnkgdGhlIHN0YXJ0IHRpbWUgZm9yIHRoZQogKiBBU01fU0VTU0lPTl9DTURfUlVOX1YyIGNvbW1hbmQuCiAqLwojZGVmaW5lIEFTTV9TSElGVF9SVU5fU1RBUlRJTUUgMApzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX3J1bl92MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICBmbGFnczsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdG8gcnVuIGltbWVkaWF0ZWx5IG9yIGF0IGEgc3BlY2lmaWMKICogcmVuZGVyaW5nIHRpbWUgb3Igd2l0aCBhIHNwZWNpZmllZCBkZWxheS4gUnVuIHdpdGggZGVsYXkgaXMKICogdXNlZnVsIGZvciBkZWxheWluZyBpbiBjYXNlIG9mIEFTTSBsb29wYmFjayBvcGVuZWQgdGhyb3VnaAogKiBBU01fU1RSRUFNX0NNRF9PUEVOX0xPT1BCQUNLX1YyLiBVc2UgI0FTTV9CSVRfTUFTS19SVU5fU1RBUlRJTUUKICogYW5kICNBU01fU0hJRlRfUlVOX1NUQVJUSU1FIHRvIHNldCB0aGlzIDItYml0IGZsYWcuCiAqCiAqCiAqQml0cyAwIGFuZCAxIGNhbiB0YWtlIG9uZSBvZiBmb3VyIHBvc3NpYmxlIHZhbHVlczoKICoKICotICNBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9JTU1FRElBVEUKICotICNBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUSU1FX1JVTl9BVF9BQlNPTFVURUlNRQogKi0gI0FTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRJTUVfUlVOX0FUX1JFTEFUSVZFSU1FCiAqLSAjQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVElNRV9SVU5fV0lUSF9ERUxBWQogKgogKkFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHRpbWVfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSB0aW1lIGluIG1pY3Jvc2Vjb25kcyB1c2VkIHRvIGFsaWduIHRoZQogKiBzZXNzaW9uIG9yaWdpbiB0aW1lLiBXaGVuIGJpdHMgMC0xIG9mIGZsYWdzIGlzCiAqIEFTTV9TRVNTSU9OX0NNRF9SVU5fU1RBUlRfUlVOX1dJVEhfREVMQVksIHRpbWUgbHN3IGlzIHRoZSBsc3cgb2YKICogdGhlIGRlbGF5IGluIHVzLiBGb3IgQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVF9SVU5fV0lUSF9ERUxBWSwKICogbWF4aW11bSB2YWx1ZSBvZiB0aGUgNjQgYml0IGRlbGF5IGlzIDE1MCBtcy4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgdGltZV9tc3c7Ci8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIHRpbWUgaW4gbWljcm9zZWNvbmRzIHVzZWQgdG8gYWxpZ24gdGhlCiAqIHNlc3Npb24gb3JpZ2luIHRpbWUuIFdoZW4gYml0cyAwLTEgb2YgZmxhZ3MgaXMKICogQVNNX1NFU1NJT05fQ01EX1JVTl9TVEFSVF9SVU5fV0lUSF9ERUxBWSwgdGltZSBtc3cgaXMgdGhlIG1zdyBvZgogKiB0aGUgZGVsYXkgaW4gdXMuIEZvciBBU01fU0VTU0lPTl9DTURfUlVOX1NUQVJUX1JVTl9XSVRIX0RFTEFZLAogKiBtYXhpbXVtIHZhbHVlIG9mIHRoZSA2NCBiaXQgZGVsYXkgaXMgMTUwIG1zLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9QQVVTRSAweDAwMDEwQkQzCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1NVU1BFTkQgMHgwMDAxMERFQwojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9HRVRfU0VTU0lPTlRJTUVfVjMgMHgwMDAxMEQ5RAojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9SRUdJU1RFUl9GT1JfUlhfVU5ERVJGTE9XX0VWRU5UUyAweDAwMDEwQkQ1CgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX3Jnc3RyX3J4X3VuZGVyZmxvdyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyogU3BlY2lmaWVzIHdoZXRoZXIgYSBjbGllbnQgaXMgdG8gcmVjZWl2ZSBldmVudHMgd2hlbiBhbiBSeAogKiBzZXNzaW9uIHVuZGVyZmxvd3MuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gMCAtLSBEbyBub3Qgc2VuZCB1bmRlcmZsb3cgZXZlbnRzCiAqIC0gMSAtLSBTZW5kIHVuZGVyZmxvdyBldmVudHMKICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFJlc2VydmVkLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EX1JFR0lTVEVSX0ZPUlhfT1ZFUkZMT1dfRVZFTlRTIDB4MDAwMTBCRDYKCnN0cnVjdCBhc21fc2Vzc2lvbl9jbWRfcmVneF9vdmVyZmxvdyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MTYgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyogU3BlY2lmaWVzIHdoZXRoZXIgYSBjbGllbnQgaXMgdG8gcmVjZWl2ZSBldmVudHMgd2hlbiBhIFR4CiAqIHNlc3Npb24gb3ZlcmZsb3dzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRG8gbm90IHNlbmQgb3ZlcmZsb3cgZXZlbnRzCiAqIC0gMSAtLSBTZW5kIG92ZXJmbG93IGV2ZW50cwogKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIFJlc2VydmVkLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NFU1NJT05fRVZFTlRfUlhfVU5ERVJGTE9XICAgICAgICAweDAwMDEwQzE3CiNkZWZpbmUgQVNNX1NFU1NJT05fRVZFTlRYX09WRVJGTE9XICAgICAgICAgICAweDAwMDEwQzE4CiNkZWZpbmUgQVNNX1NFU1NJT05fQ01EUlNQX0dFVF9TRVNTSU9OVElNRV9WMyAweDAwMDEwRDlFCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kcnNwX2dldF9zZXNzaW9udGltZV92MyB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiBSZWZlciB0byBAeGh5cGVycmVme1EzLFtRM119CgkgKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzZXNzaW9udGltZV9sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMuKi8KCgl1MzIgICAgICAgICAgICAgICAgICBzZXNzaW9udGltZV9tc3c7CgkvKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMuKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhYnNvbHV0ZXRpbWVfbHN3OwovKiBMb3dlciAzMiBiaXRzIGluIG1pY3JvIHNlY29uZHMgb2YgdGhlIGFic29sdXRlIHRpbWUgYXQgd2hpY2gKICogdGhlICogc2FtcGxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFib3ZlIHNlc3Npb24gdGltZSBnZXRzCiAqIHJlbmRlcmVkICogdG8gaGFyZHdhcmUuIFRoaXMgYWJzb2x1dGUgdGltZSBtYXkgYmUgc2xpZ2h0bHkgaW4gdGhlCiAqIGZ1dHVyZSBvciBwYXN0LgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgYWJzb2x1dGV0aW1lX21zdzsKLyogVXBwZXIgMzIgYml0cyBpbiBtaWNybyBzZWNvbmRzIG9mIHRoZSBhYnNvbHV0ZSB0aW1lIGF0IHdoaWNoCiAqIHRoZSAqIHNhbXBsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhYm92ZSBzZXNzaW9uIHRpbWUgZ2V0cwogKiByZW5kZXJlZCB0byAqIGhhcmR3YXJlLiBUaGlzIGFic29sdXRlIHRpbWUgbWF5IGJlIHNsaWdodGx5IGluIHRoZQogKiBmdXR1cmUgb3IgcGFzdC4KICovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfQURKVVNUX1NFU1NJT05fQ0xPQ0tfVjIgICAgIDB4MDAwMTBEOUYKCnN0cnVjdCBhc21fc2Vzc2lvbl9jbWRfYWRqdXN0X3Nlc3Npb25fY2xvY2tfdjIgewoJc3RydWN0IGFwcl9oZHIgaGRyOwp1MzIgICAgICAgICAgICAgICAgICBhZGp1c3RpbWVfbHN3OwovKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBzaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzIHRoZQogKiBhZGp1c3RtZW50IHRpbWUgaW4gbWljcm9zZWNvbmRzIHRvIHRoZSBzZXNzaW9uIGNsb2NrLgogKgogKiBQb3NpdGl2ZSB2YWx1ZXMgaW5kaWNhdGUgYWR2YW5jZW1lbnQgb2YgdGhlIHNlc3Npb24gY2xvY2suCiAqIE5lZ2F0aXZlIHZhbHVlcyBpbmRpY2F0ZSBkZWxheSBvZiB0aGUgc2Vzc2lvbiBjbG9jay4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGFkanVzdGltZV9tc3c7Ci8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIHNpZ25lZCA2NC1iaXQgcXVhbnRpdHkgdGhhdCBzcGVjaWZpZXMKICogdGhlIGFkanVzdG1lbnQgdGltZSBpbiBtaWNyb3NlY29uZHMgdG8gdGhlIHNlc3Npb24gY2xvY2suCiAqIFBvc2l0aXZlIHZhbHVlcyBpbmRpY2F0ZSBhZHZhbmNlbWVudCBvZiB0aGUgc2Vzc2lvbiBjbG9jay4KICogTmVnYXRpdmUgdmFsdWVzIGluZGljYXRlIGRlbGF5IG9mIHRoZSBzZXNzaW9uIGNsb2NrLgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRFJTUF9BREpVU1RfU0VTU0lPTl9DTE9DS19WMiAgICAweDAwMDEwREEwCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kcnNwX2FkanVzdF9zZXNzaW9uX2Nsb2NrX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiBSZWZlciB0byBAeGh5cGVycmVme1EzLFtRM119CiAqIEFuIGVycm9yIG1lYW5zIHRoZSBzZXNzaW9uIGNsb2NrIGlzIG5vdCBhZGp1c3RlZC4gSW4gdGhpcyBjYXNlLAogKiB0aGUgbmV4dCB0d28gZmllbGRzIGFyZSBpcnJlbGV2YW50LgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgYWN0dWFsX2FkanVzdGltZV9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIHNpZ25lZCA2NC1iaXQgcXVhbnRpdHkgdGhhdCBzcGVjaWZpZXMKICogdGhlIGFjdHVhbCBhZGp1c3RtZW50IGluIG1pY3Jvc2Vjb25kcyBwZXJmb3JtZWQgYnkgdGhlIGFEU1AuCiAqIEEgcG9zaXRpdmUgdmFsdWUgaW5kaWNhdGVzIGFkdmFuY2VtZW50IG9mIHRoZSBzZXNzaW9uIGNsb2NrLiBBCiAqIG5lZ2F0aXZlIHZhbHVlIGluZGljYXRlcyBkZWxheSBvZiB0aGUgc2Vzc2lvbiBjbG9jay4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGFjdHVhbF9hZGp1c3RpbWVfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBzaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzCiAqIHRoZSBhY3R1YWwgYWRqdXN0bWVudCBpbiBtaWNyb3NlY29uZHMgcGVyZm9ybWVkIGJ5IHRoZSBhRFNQLgogKiBBIHBvc2l0aXZlIHZhbHVlIGluZGljYXRlcyBhZHZhbmNlbWVudCBvZiB0aGUgc2Vzc2lvbiBjbG9jay4gQQogKiBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgZGVsYXkgb2YgdGhlIHNlc3Npb24gY2xvY2suCiAqLwoKCgl1MzIgICAgICAgICAgICAgICAgICBjbWRfbGF0ZW5jeV9sc3c7Ci8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIHVuc2lnbmVkIDY0LWJpdCBxdWFudGl0eSB0aGF0IHNwZWNpZmllcwogKiB0aGUgYW1vdW50IG9mIHRpbWUgaW4gbWljcm9zZWNvbmRzIHRha2VuIHRvIHBlcmZvcm0gdGhlIHNlc3Npb24KICogY2xvY2sgYWRqdXN0bWVudC4KICovCgoKCXUzMiAgICAgICAgICAgICAgICAgIGNtZF9sYXRlbmN5X21zdzsKLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgdW5zaWduZWQgNjQtYml0IHF1YW50aXR5IHRoYXQgc3BlY2lmaWVzCiAqIHRoZSBhbW91bnQgb2YgdGltZSBpbiBtaWNyb3NlY29uZHMgdGFrZW4gdG8gcGVyZm9ybSB0aGUgc2Vzc2lvbgogKiBjbG9jayBhZGp1c3RtZW50LgogKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRF9HRVRfUEFUSF9ERUxBWV9WMgkgMHgwMDAxMERBRgojZGVmaW5lIEFTTV9TRVNTSU9OX0NNRFJTUF9HRVRfUEFUSF9ERUxBWV9WMiAweDAwMDEwREIwCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kcnNwX2dldF9wYXRoX2RlbGF5X3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIHN0YXR1czsKLyogU3RhdHVzIG1lc3NhZ2UgKGVycm9yIGNvZGUpLiBXaGV0aGVyIHRoaXMgZ2V0IGRlbGF5IG9wZXJhdGlvbgogKiBpcyBzdWNjZXNzZnVsIG9yIG5vdC4gRGVsYXkgdmFsdWUgaXMgdmFsaWQgb25seSBpZiBzdGF0dXMgaXMKICogc3VjY2Vzcy4KICogU3VwcG9ydGVkIHZhbHVlczogUmVmZXIgdG8gQHhoeXBlcnJlZntRNSxbUTVdfQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhdWRpb19kZWxheV9sc3c7CgkvKiBVcHBlciAzMiBiaXRzIG9mIHRoZSBhRFNQIGRlbGF5IGluIG1pY3Jvc2Vjb25kcy4gKi8KCgl1MzIgICAgICAgICAgICAgICAgICBhdWRpb19kZWxheV9tc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBhRFNQIGRlbGF5ICBpbiBtaWNyb3NlY29uZHMuICovCgp9IF9fcGFja2VkOwoKLyogYWRzcF9hc21fc2Vzc2lvbl9jb21tYW5kLmgqLwojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fV1JJVEVfVjMgICAgICAgMHgwMDAxMERCMwoKI2RlZmluZSBBU01fTE9XX0xBVEVOQ1lfU1RSRUFNX1NFU1NJT04JCQkJMHgxMDAwMDAwMAoKI2RlZmluZSBBU01fVUxUUkFfTE9XX0xBVEVOQ1lfU1RSRUFNX1NFU1NJT04JCQkweDIwMDAwMDAwCgojZGVmaW5lIEFTTV9VTExfUE9TVF9QUk9DRVNTSU5HX1NUUkVBTV9TRVNTSU9OCQkJMHg0MDAwMDAwMAoKI2RlZmluZSBBU01fTEVHQUNZX1NUUkVBTV9TRVNTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCgoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fd3JpdGVfdjMgewoJc3RydWN0IGFwcl9oZHIJCQloZHI7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbW9kZV9mbGFnczsKLyogTW9kZSBmbGFncyB0aGF0IGNvbmZpZ3VyZSB0aGUgc3RyZWFtIHRvIG5vdGlmeSB0aGUgY2xpZW50CiAqIHdoZW5ldmVyIGl0IGRldGVjdHMgYW4gU1IvQ00gY2hhbmdlIGF0IHRoZSBpbnB1dCB0byBpdHMgUE9QUC4KICogU3VwcG9ydGVkIHZhbHVlcyBmb3IgYml0cyAwIHRvIDE6CiAqIC0gUmVzZXJ2ZWQ7IGNsaWVudHMgbXVzdCBzZXQgdGhlbSB0byB6ZXJvLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMjoKICogLSAwIC0tIFNSL0NNIGNoYW5nZSBub3RpZmljYXRpb24gZXZlbnQgaXMgZGlzYWJsZWQuCiAqIC0gMSAtLSBTUi9DTSBjaGFuZ2Ugbm90aWZpY2F0aW9uIGV2ZW50IGlzIGVuYWJsZWQuCiAqIC0gVXNlICNBU01fQklUX01BU0tfU1JfQ01fQ0hBTkdFX05PVElGWV9GTEFHIGFuZAogKiAjQVNNX1NISUZUX1NSX0NNX0NIQU5HRV9OT1RJRllfRkxBRyB0byBzZXQgb3IgZ2V0IHRoaXMgYml0LgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgMzE6CiAqIC0gMCAtLSBTdHJlYW0gdG8gYmUgb3BlbmVkIGluIG9uLUdhcGxlc3MgbW9kZS4KICogLSAxIC0tIFN0cmVhbSB0byBiZSBvcGVuZWQgaW4gR2FwbGVzcyBtb2RlLiBJbiBHYXBsZXNzIG1vZGUsCiAqIHN1Y2Nlc3NpdmUgc3RyZWFtcyBtdXN0IGJlIG9wZW5lZCB3aXRoIHNhbWUgc2Vzc2lvbiBJRCBidXQKICogZGlmZmVyZW50IHN0cmVhbSBJRHMuCiAqCiAqIC0gVXNlICNBU01fQklUX01BU0tfR0FQTEVTU19NT0RFX0ZMQUcgYW5kCiAqICNBU01fU0hJRlRfR0FQTEVTU19NT0RFX0ZMQUcgdG8gc2V0IG9yIGdldCB0aGlzIGJpdC4KICoKICoKICogQG5vdGUxaGFuZyBNSURJIGFuZCBEVE1GIHN0cmVhbXMgY2Fubm90IGJlIG9wZW5lZCBpbiBHYXBsZXNzIG1vZGUuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgICBzaW5rX2VuZHBvaW50eXBlOwovKjwgU2luayBwb2ludCB0eXBlLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRGV2aWNlIG1hdHJpeAogKiAtIE90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQuCiAqCiAqIFRoZSBkZXZpY2UgbWF0cml4IGlzIHRoZSBnYXRld2F5IHRvIHRoZSBoYXJkd2FyZSBwb3J0cy4KICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICAgIGJpdHNfcGVyX3NhbXBsZTsKLyo8IE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IEFTTSBtb2R1bGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBwb3N0cHJvY29wb19pZDsKLyo8IFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mIHByb2Nlc3NpbmcpIG9mCiAqIHBvc3Rwcm9jZXNzaW5nIGFsZ29yaXRobXMuIDxpPk5vbmU8L2k+IG1lYW5zIG5vIHBvc3Rwcm9jZXNzaW5nLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fU1RSRUFNX1BPU1RQUk9DT1BPX0lEX0RFRkFVTFQKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9NQ0hfUEVBS19WT0wKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FCiAqCiAqIFRoaXMgZmllbGQgY2FuIGFsc28gYmUgZW5hYmxlZCB0aHJvdWdoIFNldFBhcmFtcyBmbGFncy4KICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICAgIGRlY19mbXRfaWQ7Ci8qPCBDb25maWd1cmF0aW9uIElEIG9mIHRoZSBkZWNvZGVyIG1lZGlhIGZvcm1hdC4KICoKICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX0FEUENNCiAqIC0gI0FTTV9NRURJQV9GTVRfTVAzCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfRE9MQllfQUFDCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0FNUl9XQl9QTFVTX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1NCQwogKiAtICNBU01fTUVESUFfRk1UX1dNQV9WMTBQUk9fVjIKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjlfVjIKICogLSAjQVNNX01FRElBX0ZNVF9BQzMKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9BTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcxMV9NTEFXX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRzcyOUFfRlMKICogLSAjQVNNX01FRElBX0ZNVF9GUl9GUwogKiAtICNBU01fTUVESUFfRk1UX1ZPUkJJUwogKiAtICNBU01fTUVESUFfRk1UX0ZMQUMKICogLSAjQVNNX01FRElBX0ZNVF9BTEFDCiAqIC0gI0FTTV9NRURJQV9GTVRfQVBFCiAqIC0gI0FTTV9NRURJQV9GTVRfRVhBTVBMRQogKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfT1BFTl9QVUxMX01PREVfV1JJVEUgICAgMHgwMDAxMEREOQoKLyogQml0bWFzayBmb3IgdGhlIHN0cmVhbV9wZXJmX21vZGUgc3ViZmllbGQuICovCiNkZWZpbmUgQVNNX0JJVF9NQVNLX1NUUkVBTV9QRVJGX0ZMQUdfUFVMTF9NT0RFX1dSSVRFIDB4RTAwMDAwMDBVTAoKLyogQml0bWFzayBmb3IgdGhlIHN0cmVhbV9wZXJmX21vZGUgc3ViZmllbGQuICovCiNkZWZpbmUgQVNNX1NISUZUX1NUUkVBTV9QRVJGX0ZMQUdfUFVMTF9NT0RFX1dSSVRFIDI5CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fUFVTSF9NT0RFX1JFQUQgIDB4MDAwMTBEREEKCiNkZWZpbmUgQVNNX0JJVF9NQVNLX1NUUkVBTV9QRVJGX0ZMQUdfUFVTSF9NT0RFX1JFQUQgMHhFMDAwMDAwMFVMCgojZGVmaW5lIEFTTV9TSElGVF9TVFJFQU1fUEVSRl9GTEFHX1BVU0hfTU9ERV9SRUFEIDI5CgojZGVmaW5lIEFTTV9EQVRBX0VWRU5UX1dBVEVSTUFSSyAweDAwMDEwRERCCgpzdHJ1Y3QgYXNtX3NoYXJlZF9wb3NpdGlvbl9idWZmZXIgewoJdm9sYXRpbGUgdWludDMyX3QgICAgICAgICAgICAgICBmcmFtZV9jb3VudGVyOwovKiBDb3VudGVyIHVzZWQgdG8gaGFuZGxlIGludGVycHJvY2Vzc29yIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuCiAqIFdoZW4gZnJhbWVfY291bnRlciBpcyAwOiByZWFkX2luZGV4LCB3YWxsX2Nsb2NrX3VzX2xzdywgYW5kCiAqIHdhbGxfY2xvY2tfdXNfbXN3IGFyZSBpbnZhbGlkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiA+PSAwLgogKi8KCgl2b2xhdGlsZSB1aW50MzJfdCAgICAgICAgICAgICAgIGluZGV4OwovKiBJbmRleCBpbiBieXRlcyBmcm9tIHdoZXJlIHRoZSBhRFNQIGlzIHJlYWRpbmcvd3JpdGluZy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byBjaXJjdWxhciBidWZmZXIgc2l6ZSAtIDEKICovCgoJdm9sYXRpbGUgdWludDMyX3QgICAgICAgICAgICAgICB3YWxsX2Nsb2NrX3VzX2xzdzsKLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHdhbGwgY2xvY2sgdGltZSBpbiBtaWNyb3NlY29uZHMgd2hlbiB0aGUKICogcmVhZCBpbmRleCB3YXMgdXBkYXRlZC4KICogU3VwcG9ydGVkIHZhbHVlczogPj0gMAogKi8KCgl2b2xhdGlsZSB1aW50MzJfdCAgICAgICAgICAgICAgIHdhbGxfY2xvY2tfdXNfbXN3OwovKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NCBiaXQgd2FsbCBjbG9jayB0aW1lIGluIG1pY3Jvc2Vjb25kcyB3aGVuIHRoZQogKiByZWFkIGluZGV4IHdhcyB1cGRhdGVkCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ID49IDAKICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX3NoYXJlZF93YXRlcm1hcmtfbGV2ZWwgewoJdWludDMyX3QgICAgICAgICAgICAgICAgd2F0ZXJtYXJrX2xldmVsX2J5dGVzOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fc2hhcmVkX2lvIHsKCXN0cnVjdCBhcHJfaGRyICAgICAgICAgIGhkcjsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICBlbmRwb2ludF90eXBlOwoJdWludDE2X3QgICAgICAgICAgICAgICAgdG9wb19iaXRzX3Blcl9zYW1wbGU7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICB0b3BvX2lkOwoJdWludDMyX3QgICAgICAgICAgICAgICAgZm10X2lkOwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX3Bvc19idWZfcGh5X2FkZHJfbHN3OwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX3Bvc19idWZfcGh5X2FkZHJfbXN3OwoJdWludDE2X3QgICAgICAgICAgICAgICAgc2hhcmVkX3Bvc19idWZfbWVtX3Bvb2xfaWQ7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICBzaGFyZWRfcG9zX2J1Zl9udW1fcmVnaW9uczsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9wb3NfYnVmX3Byb3BlcnR5X2ZsYWc7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICBzaGFyZWRfY2lyY19idWZfc3RhcnRfcGh5X2FkZHJfbHN3OwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX3N0YXJ0X3BoeV9hZGRyX21zdzsKCXVpbnQzMl90ICAgICAgICAgICAgICAgIHNoYXJlZF9jaXJjX2J1Zl9zaXplOwoJdWludDE2X3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX21lbV9wb29sX2lkOwoJdWludDE2X3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX251bV9yZWdpb25zOwoJdWludDMyX3QgICAgICAgICAgICAgICAgc2hhcmVkX2NpcmNfYnVmX3Byb3BlcnR5X2ZsYWc7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICBudW1fd2F0ZXJtYXJrX2xldmVsczsKCXN0cnVjdCBhc21fbXVsdGlfY2hhbm5lbF9wY21fZm10X2Jsa192MyAgICAgICAgIGZtdDsKCXN0cnVjdCBhdnNfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCAgICAgICAgICAgIG1hcF9yZWdpb25fcG9zX2J1ZjsKCXN0cnVjdCBhdnNfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCAgICAgICAgICAgIG1hcF9yZWdpb25fY2lyY19idWY7CglzdHJ1Y3QgYXNtX3NoYXJlZF93YXRlcm1hcmtfbGV2ZWwgd2F0ZXJtYXJrWzBdOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURfVjMgICAgICAgICAgICAgICAgIDB4MDAwMTBEQjQKCi8qIERlZmluaXRpb24gb2YgdGhlIHRpbWVzdGFtcCB0eXBlIGZsYWcgYml0bWFzayAqLwojZGVmaW5lIEFTTV9CSVRfTUFTS0lNRVNUQU1QWVBFX0ZMQUcgICAgICAgICgweDAwMDAwMDIwVUwpCgovKiBEZWZpbml0aW9uIG9mIHRoZSB0aW1lc3RhbXAgdHlwZSBmbGFnIHNoaWZ0IHZhbHVlLiAqLwojZGVmaW5lIEFTTV9TSElGVElNRVNUQU1QWVBFX0ZMQUcgNQoKLyogUmVsYXRpdmUgdGltZXN0YW1wIGlzIGlkZW50aWZpZWQgYnkgdGhpcyB2YWx1ZS4qLwojZGVmaW5lIEFTTV9SRUxBVElWRUlNRVNUQU1QICAgICAgMAoKLyogQWJzb2x1dGUgdGltZXN0YW1wIGlzIGlkZW50aWZpZWQgYnkgdGhpcyB2YWx1ZS4qLwojZGVmaW5lIEFTTV9BQlNPTFVURUlNRVNUQU1QICAgICAgMQoKLyogQml0IHZhbHVlIGZvciBMb3cgTGF0ZW5jeSBUeCBzdHJlYW0gc3ViZmllbGQgKi8KI2RlZmluZSBBU01fTE9XX0xBVEVOQ1lfVFhfU1RSRUFNX1NFU1NJT04JCQkxCgovKiBCaXQgc2hpZnQgZm9yIHRoZSBzdHJlYW1fcGVyZl9tb2RlIHN1YmZpZWxkLiAqLwojZGVmaW5lIEFTTV9TSElGVF9TVFJFQU1fUEVSRl9NT0RFX0ZMQUdfSU5fT1BFTl9SRUFEICAgICAgICAgICAgICAyOQoKc3RydWN0IGFzbV9zdHJlYW1fY21kX29wZW5fcmVhZF92MyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MgdGhhdCBpbmRpY2F0ZSB3aGV0aGVyIG1ldGEgaW5mb3JtYXRpb24gcGVyIGVuY29kZWQKICogZnJhbWUgaXMgdG8gYmUgcHJvdmlkZWQuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCA0OgogKgogKiAtIDAgLS0gUmV0dXJuIGRhdGEgYnVmZmVyIGNvbnRhaW5zIGFsbCBlbmNvZGVkIGZyYW1lcyBvbmx5OyBpdAogKiBkb2VzIG5vdCBjb250YWluIGZyYW1lIG1ldGFkYXRhLgogKgogKiAtIDEgLS0gUmV0dXJuIGRhdGEgYnVmZmVyIGNvbnRhaW5zIGFuIGFycmF5IG9mIG1ldGFkYXRhIGFuZAogKiBlbmNvZGVkIGZyYW1lcy4KICoKICogLSBVc2UgI0FTTV9CSVRfTUFTS19NRVRBX0lORk9fRkxBRyBhcyB0aGUgYml0bWFzayBhbmQKICogI0FTTV9TSElGVF9NRVRBX0lORk9fRkxBRyBhcyB0aGUgc2hpZnQgdmFsdWUgZm9yIHRoaXMgYml0LgogKgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgNToKICoKICogLSBBU01fUkVMQVRJVkVJTUVTVEFNUCAtLSBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkVfVjIgd2lsbCBoYXZlCiAqIC0gcmVsYXRpdmUgdGltZS1zdGFtcC4KICogLSBBU01fQUJTT0xVVEVJTUVTVEFNUCAtLSBBU01fREFUQV9FVkVOVF9SRUFEX0RPTkVfVjIgd2lsbAogKiAtIGhhdmUgYWJzb2x1dGUgdGltZS1zdGFtcC4KICoKICogLSBVc2UgI0FTTV9CSVRfTUFTS0lNRVNUQU1QWVBFX0ZMQUcgYXMgdGhlIGJpdG1hc2sgYW5kCiAqICNBU01fU0hJRlRJTUVTVEFNUFlQRV9GTEFHIGFzIHRoZSBzaGlmdCB2YWx1ZSBmb3IgdGhpcyBiaXQuCiAqCiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgc3JjX2VuZHBvaW50eXBlOwovKiBTcGVjaWZpZXMgdGhlIGVuZHBvaW50IHByb3ZpZGluZyB0aGUgaW5wdXQgc2FtcGxlcy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAwIC0tIERldmljZSBtYXRyaXgKICogLSBBbGwgb3RoZXIgdmFsdWVzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqIE90aGVyd2lzZSwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCiAqIFRoZSBkZXZpY2UgbWF0cml4IGlzIHRoZSBnYXRld2F5IGZyb20gdGhlIHR1bm5lbGVkIFR4IHBvcnRzLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIHByZXByb2NvcG9faWQ7Ci8qIFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mIHByb2Nlc3NpbmcpIG9mIHByZXByb2Nlc3NpbmcKICogYWxnb3JpdGhtcy4gPGk+Tm9uZTwvaT4gbWVhbnMgbm8gcHJlcHJvY2Vzc2luZy4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1NUUkVBTV9QUkVQUk9DT1BPX0lEX0RFRkFVTFQKICogLSAjQVNNX1NUUkVBTV9QUkVQUk9DT1BPX0lEX05PTkUKICoKICogVGhpcyBmaWVsZCBjYW4gYWxzbyBiZSBlbmFibGVkIHRocm91Z2ggU2V0UGFyYW1zIGZsYWdzLgogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIGVuY19jZmdfaWQ7Ci8qIE1lZGlhIGNvbmZpZ3VyYXRpb24gSUQgZm9yIGVuY29kZWQgb3V0cHV0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9TQkMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX0FMQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX01MQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzI5QV9GUwogKiAtICNBU01fTUVESUFfRk1UX0VYQU1QTEUKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjgKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IEFTTSBtb2R1bGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1BPUFBfT1VUUFVUX1NSX05BVElWRV9SQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKCi8qIEVudW1lcmF0aW9uIGZvciB0aGUgbWF4aW11bSBzYW1wbGluZyByYXRlIGF0IHRoZSBQT1BQIG91dHB1dC4qLwojZGVmaW5lIEFTTV9QT1BQX09VVFBVVF9TUl9NQVhfUkFURSAgICAgICAgICAgICA0ODAwMAoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1JFQURXUklURV9WMiAgICAgICAgMHgwMDAxMEQ4RAojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fUkVBRFdSSVRFX1YyICAgICAgICAweDAwMDEwRDhECgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl9yZWFkd3JpdGVfdjIgewoJc3RydWN0IGFwcl9oZHIgICAgICAgICBoZHI7Cgl1MzIgICAgICAgICAgICAgICAgICAgIG1vZGVfZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MuCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCAyOgogKiAtIDAgLS0gU1IvQ00gY2hhbmdlIG5vdGlmaWNhdGlvbiBldmVudCBpcyBkaXNhYmxlZC4KICogLSAxIC0tIFNSL0NNIGNoYW5nZSBub3RpZmljYXRpb24gZXZlbnQgaXMgZW5hYmxlZC4gVXNlCiAqICNBU01fQklUX01BU0tfU1JfQ01fQ0hBTkdFX05PVElGWV9GTEFHIGFuZAogKiAjQVNNX1NISUZUX1NSX0NNX0NIQU5HRV9OT1RJRllfRkxBRyB0byBzZXQgb3IKICogZ2V0dGluZyB0aGlzIGZsYWcuCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMgZm9yIGJpdCA0OgogKiAtIDAgLS0gUmV0dXJuIHJlYWQgZGF0YSBidWZmZXIgY29udGFpbnMgYWxsIGVuY29kZWQgZnJhbWVzIG9ubHk7IGl0CiAqIGRvZXMgbm90IGNvbnRhaW4gZnJhbWUgbWV0YWRhdGEuCiAqIC0gMSAtLSBSZXR1cm4gcmVhZCBkYXRhIGJ1ZmZlciBjb250YWlucyBhbiBhcnJheSBvZiBtZXRhZGF0YSBhbmQKICogZW5jb2RlZCBmcmFtZXMuCiAqCiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIHplcm8uCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgcG9zdHByb2NvcG9faWQ7Ci8qIFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mIHByb2Nlc3NpbmcpIG9mIHBvc3Rwcm9jZXNzaW5nCiAqIGFsZ29yaXRobXMuIDxpPk5vbmU8L2k+IG1lYW5zIG5vIHBvc3Rwcm9jZXNzaW5nLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fU1RSRUFNX1BPU1RQUk9DT1BPX0lEX0RFRkFVTFQKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9NQ0hfUEVBS19WT0wKICogLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgZGVjX2ZtdF9pZDsKLyogU3BlY2lmaWVzIHRoZSBtZWRpYSB0eXBlIG9mIHRoZSBpbnB1dCBkYXRhLiBQQ00gaW5kaWNhdGVzIHRoYXQKICogbm8gZGVjb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQsIGUuZy4sIHRoaXMgaXMgYW4gTlQgZW5jb2RlcgogKiBzZXNzaW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQURQQ00KICogLSAjQVNNX01FRElBX0ZNVF9NUDMKICogLSAjQVNNX01FRElBX0ZNVF9BQUNfVjIKICogLSAjQVNNX01FRElBX0ZNVF9ET0xCWV9BQUMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJOQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0FNUldCX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfVjEzS19GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDQl9GUwogKiAtICNBU01fTUVESUFfRk1UX0VWUkNXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1NCQwogKiAtICNBU01fTUVESUFfRk1UX1dNQV9WMTBQUk9fVjIKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjlfVjIKICogLSAjQVNNX01FRElBX0ZNVF9BTVJfV0JfUExVU19WMgogKiAtICNBU01fTUVESUFfRk1UX0FDMwogKiAtICNBU01fTUVESUFfRk1UX0c3MTFfQUxBV19GUwogKiAtICNBU01fTUVESUFfRk1UX0c3MTFfTUxBV19GUwogKiAtICNBU01fTUVESUFfRk1UX0c3MjlBX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVhBTVBMRQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIGVuY19jZmdfaWQ7Ci8qIFNwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBmb3IgdGhlIG91dHB1dCBvZiB0aGUgc3RyZWFtLiBQQ00KICogaW5kaWNhdGVzIHRoYXQgbm8gZW5jb2RpbmcgbXVzdCBiZSBwZXJmb3JtZWQsIGUuZy4sIHRoaXMgaXMgYW4gTlQKICogZGVjb2RlciBzZXNzaW9uLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQUFDX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfQU1STkJfRlMKICogLSAjQVNNX01FRElBX0ZNVF9BTVJXQl9GUwogKiAtICNBU01fTUVESUFfRk1UX1YxM0tfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDX0ZTCiAqIC0gI0FTTV9NRURJQV9GTVRfRVZSQ0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9FVlJDV0JfRlMKICogLSAjQVNNX01FRElBX0ZNVF9TQkMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX0FMQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzExX01MQVdfRlMKICogLSAjQVNNX01FRElBX0ZNVF9HNzI5QV9GUwogKiAtICNBU01fTUVESUFfRk1UX0VYQU1QTEUKICogLSAjQVNNX01FRElBX0ZNVF9XTUFfVjgKICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IEFTTSBtb2R1bGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvIHplcm8uKi8KCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fTE9PUEJBQ0tfVjIgMHgwMDAxMEQ4RQpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl9sb29wYmFja192MiB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgbW9kZV9mbGFnczsKLyogTW9kZSBmbGFncy4KICogQml0IDAtMzE6IHJlc2VydmVkOyBjbGllbnQgc2hvdWxkIHNldCB0aGVzZSBiaXRzIHRvIDAKICovCgl1MTYgICAgICAgICAgICAgICAgICAgIHNyY19lbmRwb2ludHlwZTsKCS8qIEVuZHBvaW50IHR5cGUuIDAgPSBUeCBNYXRyaXggKi8KCXUxNiAgICAgICAgICAgICAgICAgICAgc2lua19lbmRwb2ludHlwZTsKCS8qIEVuZHBvaW50IHR5cGUuIDAgPSBSeCBNYXRyaXggKi8KCXUzMiAgICAgICAgICAgICAgICAgICAgcG9zdHByb2NvcG9faWQ7Ci8qIFBvc3Rwcm9jZXNzb3IgdG9wb2xvZ3kgSUQuIFNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgb2YKICogcG9zdHByb2Nlc3NpbmcgYWxnb3JpdGhtcy4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgICBiaXRzX3Blcl9zYW1wbGU7Ci8qIFRoZSBudW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHByb2Nlc3NlZCBieSBBU00gbW9kdWxlcwogKiBTdXBwb3J0ZWQgdmFsdWVzOiAxNiBhbmQgMjQgYml0cyBwZXIgc2FtcGxlCiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKLyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KfSBfX3BhY2tlZDsKCgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLICAgIDB4MDAwMTBEQkEKCi8qIEJpdG1hc2sgZm9yIHRoZSBzdHJlYW0ncyBQZXJmb3JtYW5jZSBtb2RlLiAqLwojZGVmaW5lIEFTTV9CSVRfTUFTS19TVFJFQU1fUEVSRl9NT0RFX0ZMQUdfSU5fT1BFTl9UUkFOU0NPREVfTE9PUEJBQ0sgXAoJKDB4NzAwMDAwMDBVTCkKCi8qIEJpdCBzaGlmdCBmb3IgdGhlIHN0cmVhbSdzIFBlcmZvcm1hbmNlIG1vZGUuICovCiNkZWZpbmUgQVNNX1NISUZUX1NUUkVBTV9QRVJGX01PREVfRkxBR19JTl9PUEVOX1RSQU5TQ09ERV9MT09QQkFDSyAgICAyOAoKLyogQml0bWFzayBmb3IgdGhlIGRlY29kZXIgY29udmVydGVyIGVuYWJsZSBmbGFnLiAqLwojZGVmaW5lIEFTTV9CSVRfTUFTS19ERUNPREVSX0NPTlZFUlRFUl9GTEFHICAgICgweDAwMDAwMDc4VUwpCgovKiBTaGlmdCB2YWx1ZSBmb3IgdGhlIGRlY29kZXIgY29udmVydGVyIGVuYWJsZSBmbGFnLiAqLwojZGVmaW5lIEFTTV9TSElGVF9ERUNPREVSX0NPTlZFUlRFUl9GTEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMwoKLyogQ29udmVydGVyIG1vZGUgaXMgTm9uZSAoRGVmYXVsdCkuICovCiNkZWZpbmUgQVNNX0NPTlZFUlRFUl9NT0RFX05PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCgovKiBDb252ZXJ0ZXIgbW9kZSBpcyBERFAtdG8tREQuICovCiNkZWZpbmUgQVNNX0REUF9ERF9DT05WRVJURVJfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCgovKiAgSWRlbnRpZmllcyBhIHNwZWNpYWwgY29udmVydGVyIG1vZGUgd2hlcmUgc291cmNlIGFuZCBzaW5rIGZvcm1hdHMKICogIGFyZSB0aGUgc2FtZSBidXQgcG9zdHByb2Nlc3NpbmcgbXVzdCBhcHBsaWVkLiBUaGVyZWZvcmUsIERlY29kZQogKiAgQHJhcnJvdyBSZS1lbmNvZGUgaXMgbmVjZXNzYXJ5LgogKi8KI2RlZmluZSBBU01fUE9TVF9QUk9DRVNTX0NPTlZFUlRFUl9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKCgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl90cmFuc2NvZGVfbG9vcGJhY2tfdCB7CglzdHJ1Y3QgYXByX2hkciAgICAgICAgIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgbW9kZV9mbGFnczsKLyogTW9kZSBGbGFncyBzcGVjaWZpZXMgdGhlIHBlcmZvcm1hbmNlIG1vZGUgaW4gd2hpY2ggdGhpcyBzdHJlYW0KICogaXMgdG8gYmUgb3BlbmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVze2ZvciBiaXRzIDMwIHRvIDI4fShzdHJlYW1fcGVyZl9tb2RlIGZsYWcpCiAqCiAqICNBU01fTEVHQUNZX1NUUkVBTV9TRVNTSU9OIC0tIFRoaXMgbW9kZSBlbnN1cmVzIGJhY2t3YXJkCiAqICAgICAgIGNvbXBhdGliaWxpdHkgdG8gdGhlIG9yaWdpbmFsIGJlaGF2aW9yCiAqICAgICAgIG9mIEFTTV9TVFJFQU1fQ01EX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLCiAqCiAqICNBU01fTE9XX0xBVEVOQ1lfU1RSRUFNX1NFU1NJT04gLS0gT3BlbnMgYSBsb29wYmFjayBzZXNzaW9uIGJ5IHVzaW5nCiAqICBzaG9ydGVuZWQgYnVmZmVycyBpbiBsb3cgbGF0ZW5jeSBQT1BQCiAqICAtIFJlY29tbWVuZGF0aW9uOiBEbyBub3QgZW5hYmxlIGhpZ2ggbGF0ZW5jeSBhbGdvcml0aG1zLiBUaGV5IG1pZ2h0CiAqICAgIG5lZ2F0ZSB0aGUgYmVuZWZpdHMgb2Ygb3BlbmluZyBhIGxvdyBsYXRlbmN5IHN0cmVhbSwgYW5kIHRoZXkKICogICAgbWlnaHQgYWxzbyBzdWZmZXIgcXVhbGl0eSBkZWdyYWRhdGlvbiBmcm9tIHVuZXhwZWN0ZWQgaml0dGVyLgogKiAgLSBUaGlzIExvdyBMYXRlbmN5IG1vZGUgaXMgc3VwcG9ydGVkIG9ubHkgZm9yIFBDTSBJbiBhbmQgUENNIE91dAogKiAgICBsb29wYmFja3MuIEFuIGVycm9yIGlzIHJldHVybmVkIGlmIExvdyBMYXRlbmN5IG1vZGUgaXMgb3BlbmVkIGZvcgogKiAgICBvdGhlciB0cmFuc2NvZGUgbG9vcGJhY2sgbW9kZXMuCiAqICAtIFRvIGNvbmZpZ3VyZSB0aGlzIHN1YmZpZWxkLCB1c2UKICogICAgIEFTTV9CSVRfTUFTS19TVFJFQU1fUEVSRl9NT0RFX0ZMQUdfSU5fT1BFTl9UUkFOU0NPREVfTE9PUEJBQ0sgYW5kCiAqICAgICBBU01fU0hJRlRfU1RSRUFNX1BFUkZfTU9ERV9GTEFHX0lOX09QRU5fVFJBTlNDT0RFX0xPT1BCQUNLLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVze2ZvciBiaXRzIDYgdG8gM30gKGRlY29kZXItY29udmVydGVyIGNvbXBhdGliaWxpdHkpCiAqICNBU01fQ09OVkVSVEVSX01PREVfTk9ORSAoMHgwKSAtLSBEZWZhdWx0CiAqICNBU01fRERQX0REX0NPTlZFUlRFUl9NT0RFICgweDEpCiAqICNBU01fUE9TVF9QUk9DRVNTX0NPTlZFUlRFUl9NT0RFICgweDIpCiAqIDB4My0weEYgLS0gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKICogLSBVc2UgI0FTTV9CSVRfTUFTS19ERUNPREVSX0NPTlZFUlRFUl9GTEFHIGFuZAogKiAgICAgICAgQVNNX1NISUZUX0RFQ09ERVJfQ09OVkVSVEVSX0ZMQUcgdG8gc2V0IHRoaXMgYml0CiAqIEFsbCBvdGhlciBiaXRzIGFyZSByZXNlcnZlZDsgY2xpZW50cyBtdXN0IHNldCB0aGVtIHRvIDAuCiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgICAgc3JjX2Zvcm1hdF9pZDsKLyogU3BlY2lmaWVzIHRoZSBtZWRpYSBmb3JtYXQgb2YgdGhlIGlucHV0IGF1ZGlvIHN0cmVhbS4KICoKICogU3VwcG9ydGVkIHZhbHVlcwogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YyCiAqIC0gI0FTTV9NRURJQV9GTVRfTVVMVElfQ0hBTk5FTF9QQ01fVjMKICogLSAjQVNNX01FRElBX0ZNVF9EVFMKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzX0RFQwogKiAtICNBU01fTUVESUFfRk1UX0VBQzMKICogLSAjQVNNX01FRElBX0ZNVF9BQzNfREVDCiAqIC0gI0FTTV9NRURJQV9GTVRfQUMzCiAqLwoJdTMyICAgICAgICAgICAgICAgICAgICBzaW5rX2Zvcm1hdF9pZDsKLyogU3BlY2lmaWVzIHRoZSBtZWRpYSBmb3JtYXQgb2YgdGhlIG91dHB1dCBzdHJlYW0uCiAqCiAqIFN1cHBvcnRlZCB2YWx1ZXMKICogLSAjQVNNX01FRElBX0ZNVF9NVUxUSV9DSEFOTkVMX1BDTV9WMgogKiAtICNBU01fTUVESUFfRk1UX01VTFRJX0NIQU5ORUxfUENNX1YzCiAqIC0gI0FTTV9NRURJQV9GTVRfRFRTIChub3Qgc3VwcG9ydGVkIGluIExvdyBMYXRlbmN5IG1vZGUpCiAqIC0gI0FTTV9NRURJQV9GTVRfRUFDM19ERUMgKG5vdCBzdXBwb3J0ZWQgaW4gTG93IExhdGVuY3kgbW9kZSkKICogLSAjQVNNX01FRElBX0ZNVF9FQUMzIChub3Qgc3VwcG9ydGVkIGluIExvdyBMYXRlbmN5IG1vZGUpCiAqIC0gI0FTTV9NRURJQV9GTVRfQUMzX0RFQyAobm90IHN1cHBvcnRlZCBpbiBMb3cgTGF0ZW5jeSBtb2RlKQogKiAtICNBU01fTUVESUFfRk1UX0FDMyAobm90IHN1cHBvcnRlZCBpbiBMb3cgTGF0ZW5jeSBtb2RlKQogKi8KCgl1MzIgICAgICAgICAgICAgICAgICAgIGF1ZHByb2NfdG9wb19pZDsKLyogUG9zdHByb2Nlc3NpbmcgdG9wb2xvZ3kgSUQsIHdoaWNoIHNwZWNpZmllcyB0aGUgdG9wb2xvZ3kgKG9yZGVyIG9mCiAqICAgICAgICBwcm9jZXNzaW5nKSBvZiBwb3N0cHJvY2Vzc2luZyBhbGdvcml0aG1zLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzCiAqICAgIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NfVE9QT19JRF9ERUZBVUxUCiAqICAgIC0gI0FTTV9TVFJFQU1fUE9TVFBST0NfVE9QT19JRF9QRUFLTUVURVIKICogICAgLSAjQVNNX1NUUkVBTV9QT1NUUFJPQ19UT1BPX0lEX01DSF9QRUFLX1ZPTAogKiAgICAtICNBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfTk9ORQogKiAgVG9wb2xvZ2llcyBjYW4gYmUgYWRkZWQgdGhyb3VnaCAjQVNNX0NNRF9BRERfVE9QT0xPR0lFUy4KICogIFRoaXMgZmllbGQgaXMgaWdub3JlZCBmb3IgdGhlIENvbnZlcnRlciBtb2RlLCBpbiB3aGljaCBubwogKiAgcG9zdHByb2Nlc3NpbmcgaXMgcGVyZm9ybWVkLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHNyY19lbmRwb2ludF90eXBlOwovKiBTcGVjaWZpZXMgdGhlIHNvdXJjZSBlbmRwb2ludCB0aGF0IHByb3ZpZGVzIHRoZSBpbnB1dCBzYW1wbGVzLgogKgogKiBTdXBwb3J0ZWQgdmFsdWVzCiAqICAtIDAgLS0gVHggZGV2aWNlIG1hdHJpeCBvciBzdHJlYW0gcm91dGVyIChnYXRld2F5IHRvIHRoZSBoYXJkd2FyZQogKiAgICBwb3J0cykKICogIC0gQWxsIG90aGVyIHZhbHVlcyBhcmUgcmVzZXJ2ZWQKICogIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byAwLiBPdGhlcndpc2UsIGFuIGVycm9yIGlzIHJldHVybmVkLgogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHNpbmtfZW5kcG9pbnRfdHlwZTsKLyogIFNwZWNpZmllcyB0aGUgc2luayBlbmRwb2ludCB0eXBlLgogKgogKiAgU3VwcG9ydGVkIHZhbHVlcwogKiAgLSAwIC0tIFJ4IGRldmljZSBtYXRyaXggb3Igc3RyZWFtIHJvdXRlciAoZ2F0ZXdheSB0byB0aGUgaGFyZHdhcmUKICogICAgcG9ydHMpCiAqICAtIEFsbCBvdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkCiAqICAgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIDAuIE90aGVyd2lzZSwgYW4gZXJyb3IgaXMgcmV0dXJuZWQuCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgICAgYml0c19wZXJfc2FtcGxlOwovKiAgIE51bWJlciBvZiBiaXRzIHBlciBzYW1wbGUgcHJvY2Vzc2VkIGJ5IHRoZSBBU00gbW9kdWxlcy4KICogICBTdXBwb3J0ZWQgdmFsdWVzIDE2LCAyNAogKi8KCgl1MTYgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiAgIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gMC4KICovCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9DTE9TRSAgICAgICAgICAgICAweDAwMDEwQkNECiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfRkxVU0ggICAgICAgICAgICAgMHgwMDAxMEJDRQoKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfRkxVU0hfUkVBREJVRlMgICAweDAwMDEwQzA5CiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfU0VUX1BQX1BBUkFNU19WMiAweDAwMDEwREExCgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9sc3c7Ci8qIExTVyBvZiBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuIFN1cHBvcnRlZCB2YWx1ZXM6IGFueS4gKi8KCXUzMiAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKLyogTVNXIG9mIFBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4gU3VwcG9ydGVkIHZhbHVlczogYW55LgogKiAtIE11c3QgYmUgc2V0IHRvIHplcm8gZm9yIGluLWJhbmQgZGF0YS4KICogLSBJbiB0aGUgY2FzZSBvZiAzMiBiaXQgU2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBtc3cgIGZpZWxkIG11c3QgYmUKICogLSBzZXQgdG8gemVyby4KICogLSBJbiB0aGUgY2FzZSBvZiAzNiBiaXQgc2hhcmVkIG1lbW9yeSBhZGRyZXNzLCBiaXQgMzEgdG8gYml0IDQgb2YKICogbXN3CiAqCiAqIC0gbXVzdCBiZSBzZXQgdG8gemVyby4KICovCgl1MzIgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKLyogU3VwcG9ydGVkIFZhbHVlczogQW55LgogKiBtZW1vcnkgbWFwIGhhbmRsZSByZXR1cm5lZCBieSBEU1AgdGhyb3VnaAogKiBBU01fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMKICogY29tbWFuZC4KICogaWYgbW1oYW5kbGUgaXMgTlVMTCwgdGhlIFBhcmFtRGF0YSBwYXlsb2FkcyBhcmUgd2l0aGluIHRoZQogKiBtZXNzYWdlIHBheWxvYWQgKGluLWJhbmQpLgogKiBJZiBtbWhhbmRsZSBpcyBub24tTlVMTCwgdGhlIFBhcmFtRGF0YSBwYXlsb2FkcyBiZWdpbiBhdCB0aGUKICogYWRkcmVzcyBzcGVjaWZpZWQgaW4gdGhlIGFkZHJlc3MgbXN3IGFuZCBsc3cgKG91dC1vZi1iYW5kKS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX3NpemU7Ci8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgYWNjb21wYW55aW5nIHRoZQogKiBtZXNzYWdlLCBvciBpbiBzaGFyZWQgbWVtb3J5LiBUaGlzIGZpZWxkIGlzIHVzZWQgZm9yIHBhcnNpbmcgdGhlCiAqIHBhcmFtZXRlciBwYXlsb2FkLgogKi8KfSBfX3BhY2tlZDsKCgpzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIHsKCXUzMiAgICAgICAgICAgICAgICAgIG1vZHVsZV9pZDsKCS8qIFVuaXF1ZSBtb2R1bGUgSUQuICovCgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgcGFyYW1ldGVyIElELiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX3NpemU7Ci8qIERhdGEgc2l6ZSBvZiB0aGUgcGFyYW1faWQvbW9kdWxlX2lkIGNvbWJpbmF0aW9uLiBUaGlzIGlzCiAqIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KICovCgoJdTE2ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Ci8qIFJlc2VydmVkIGZvciBmdXR1cmUgZW5oYW5jZW1lbnRzLiBUaGlzIGZpZWxkIG11c3QgYmUgc2V0IHRvCiAqIHplcm8uCiAqLwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfR0VUX1BQX1BBUkFNU19WMgkJMHgwMDAxMERBMgoKc3RydWN0IGFzbV9zdHJlYW1fY21kX2dldF9wcF9wYXJhbXNfdjIgewoJdTMyICAgICAgICAgICAgICAgICAgZGF0YV9wYXlsb2FkX2FkZHJfbHN3OwoJLyogTFNXIG9mIHRoZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkIGFkZHJlc3MuICovCgl1MzIgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9tc3c7Ci8qIE1TVyBvZiB0aGUgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLgogKiAtIFNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnksIGlmIHNwZWNpZmllZCwgc2hhbGwgYmUgbGFyZ2UgZW5vdWdoCiAqIHRvIGNvbnRhaW4gdGhlIHdob2xlIFBhcmFtRGF0YSBwYXlsb2FkLCBpbmNsdWRpbmcgTW9kdWxlIElELAogKiBQYXJhbSBJRCwgUGFyYW0gU2l6ZSwgYW5kIFBhcmFtIFZhbHVlcwogKiAtIE11c3QgYmUgc2V0IHRvIHplcm8gZm9yIGluLWJhbmQgZGF0YQogKiAtIEluIHRoZSBjYXNlIG9mIDMyIGJpdCBTaGFyZWQgbWVtb3J5IGFkZHJlc3MsIG1zdyBmaWVsZCBtdXN0IGJlCiAqIHNldCB0byB6ZXJvLgogKiAtIEluIHRoZSBjYXNlIG9mIDM2IGJpdCBzaGFyZWQgbWVtb3J5IGFkZHJlc3MsIGJpdCAzMSB0byBiaXQgNCBvZgogKiBtc3cgbXVzdCBiZSBzZXQgdG8gemVyby4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgbWVtX21hcF9oYW5kbGU7Ci8qIFN1cHBvcnRlZCBWYWx1ZXM6IEFueS4KICogbWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgRFNQIHRocm91Z2ggQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TCiAqIGNvbW1hbmQuCiAqIGlmIG1taGFuZGxlIGlzIE5VTEwsIHRoZSBQYXJhbURhdGEgcGF5bG9hZHMgaW4gdGhlIEFDSyBhcmUgd2l0aGluIHRoZQogKiBtZXNzYWdlIHBheWxvYWQgKGluLWJhbmQpLgogKiBJZiBtbWhhbmRsZSBpcyBub24tTlVMTCwgdGhlIFBhcmFtRGF0YSBwYXlsb2FkcyBpbiB0aGUgQUNLIGJlZ2luIGF0IHRoZQogKiBhZGRyZXNzIHNwZWNpZmllZCBpbiB0aGUgYWRkcmVzcyBtc3cgYW5kIGxzdy4KICogKG91dC1vZi1iYW5kKS4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgbW9kdWxlX2lkOwovKiBVbmlxdWUgbW9kdWxlIElELiAqLwoKCXUzMiAgICAgICAgICAgICAgICAgIHBhcmFtX2lkOwovKiBVbmlxdWUgcGFyYW1ldGVyIElELiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIHBhcmFtX21heF9zaXplOwovKiBNYXhpbXVtIGRhdGEgc2l6ZSBvZiB0aGUgbW9kdWxlX2lkL3BhcmFtX2lkIGNvbWJpbmF0aW9uLiBUaGlzCiAqIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KICovCgoKCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwovKiBSZXNlcnZlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gQ2xpZW50cyBtdXN0IHNldCB0aGlzCiAqIGZpZWxkIHRvIHplcm8uCiAqLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9TRVRfRU5DREVDX1BBUkFNIDB4MDAwMTBDMTAKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTV9WMiAgICAgMHgwMDAxMzIxOAoKc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW1fdjIgewoJdTE2ICAgICAgICAgICAgICAgICAgc2VydmljZV9pZDsKCS8qIDAgLSBBU01fRU5DT0RFUl9TVkM7IDEgLSBBU01fREVDT0RFUl9TVkMgKi8KCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCgl1MzIgICAgICAgICAgICAgICAgICBwYXJhbV9pZDsKCS8qIElEIG9mIHRoZSBwYXJhbWV0ZXIuICovCgoJdTMyICAgICAgICAgICAgICAgICAgcGFyYW1fc2l6ZTsKCS8qCgkgKiBEYXRhIHNpemUgb2YgdGhpcyBwYXJhbWV0ZXIsIGluIGJ5dGVzLiBUaGUgc2l6ZSBpcyBhIG11bHRpcGxlCgkgKiBvZiA0IGJ5dGVzLgoJICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9TVFJFQU1fQ01EX1JFR0lTVEVSX0VOQ0RFQ19FVkVOVFMgIDB4MDAwMTMyMTkKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfRU5DREVDX0VWRU5UUyAgICAgICAgICAgMHgwMDAxMzIxQQoKI2RlZmluZSBBVlNfUEFSQU1fSURfUlRJQ19TSEFSRURfTUVNT1JZX0FERFIgICAweDAwMDEzMjM3CgpzdHJ1Y3QgYXZzX3J0aWNfc2hhcmVkX21lbV9hZGRyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtX3YyICBlbmNkZWM7Cgl1MzIgICAgICAgICAgICAgICAgIHNobV9idWZfYWRkcl9sc3c7CgkvKiBMb3dlciAzMiBiaXQgb2YgdGhlIFJUSUMgc2hhcmVkIG1lbW9yeSAqLwoKCXUzMiAgICAgICAgICAgICAgICAgc2htX2J1Zl9hZGRyX21zdzsKCS8qIFVwcGVyIDMyIGJpdCBvZiB0aGUgUlRJQyBzaGFyZWQgbWVtb3J5ICovCgoJdTMyICAgICAgICAgICAgICAgICBidWZfc2l6ZTsKCS8qIFNpemUgb2YgYnVmZmVyICovCgoJdTE2ICAgICAgICAgICAgICAgICBzaG1fYnVmX21lbV9wb29sX2lkOwoJLyogQURTUF9NRU1PUllfTUFQX1NITUVNOF80S19QT09MICovCgoJdTE2ICAgICAgICAgICAgICAgICBzaG1fYnVmX251bV9yZWdpb25zOwoJLyogbnVtYmVyIG9mIHJlZ2lvbnMgdG8gbWFwICovCgoJdTMyICAgICAgICAgICAgICAgICBzaG1fYnVmX2ZsYWc7CgkvKiBidWZmZXIgcHJvcGVydHkgZmxhZyAqLwoKCXN0cnVjdCBhdnNfc2hhcmVkX21hcF9yZWdpb25fcGF5bG9hZCBtYXBfcmVnaW9uOwoJLyogbWVtb3J5IG1hcCByZWdpb24qLwp9IF9fcGFja2VkOwoKI2RlZmluZSBBVlNfUEFSQU1fSURfUlRJQ19FVkVOVF9BQ0sgICAgICAgICAgIDB4MDAwMTMyMzgKCnN0cnVjdCBhdnNfcGFyYW1fcnRpY19ldmVudF9hY2sgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9lbmNkZWNfcGFyYW1fdjIgIGVuY2RlYzsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0VOQ0RFQ19CSVRSQVRFICAgICAweDAwMDEwQzEzCgpzdHJ1Y3QgYXNtX2JpdHJhdGVfcGFyYW0gewoJdTMyICAgICAgICAgICAgICAgICAgYml0cmF0ZTsKLyogTWF4aW11bSBzdXBwb3J0ZWQgYml0cmF0ZS4gT25seSB0aGUgQUFDIGVuY29kZXIgaXMgc3VwcG9ydGVkLiovCgp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fUEFSQU1fSURfRU5DREVDX0VOQ19DRkdfQkxLX1YyIDB4MDAwMTBEQTMKI2RlZmluZSBBU01fUEFSQU1fSURfQUFDX1NCUl9QU19GTEFHCQkgMHgwMDAxMEM2MwoKLyogRmxhZyB0byB0dXJuIG9mZiBib3RoIFNCUiBhbmQgUFMgcHJvY2Vzc2luZywgaWYgdGhleSBhcmUKICogcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtLgogKi8KCiNkZWZpbmUgQVNNX0FBQ19TQlJfT0ZGX1BTX09GRiAoMikKCi8qIEZsYWcgdG8gdHVybiBvbiBTQlIgYnV0IHR1cm4gb2ZmIFBTIHByb2Nlc3NpbmcsaWYgdGhleSBhcmUKICogcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtLgogKi8KCiNkZWZpbmUgQVNNX0FBQ19TQlJfT05fUFNfT0ZGICAoMSkKCi8qIEZsYWcgdG8gdHVybiBvbiBib3RoIFNCUiBhbmQgUFMgcHJvY2Vzc2luZywgaWYgdGhleSBhcmUKICogcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtIChkZWZhdWx0IGJlaGF2aW9yKS4KICovCgoKI2RlZmluZSBBU01fQUFDX1NCUl9PTl9QU19PTiAgICgwKQoKLyogU3RydWN0dXJlIGZvciBhbiBBQUMgU0JSIFBTIHByb2Nlc3NpbmcgZmxhZy4gKi8KCi8qICBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX0FBQ19TQlJfUFNfRkxBRyBwYXJhbWV0ZXIgaW4gdGhlCiAqICNBU01fU1RSRUFNX0NNRF9TRVRfRU5DREVDX1BBUkFNIGNvbW1hbmQuCiAqLwpzdHJ1Y3QgYXNtX2FhY19zYnJfcHNfZmxhZ19wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7CgoJdTMyICAgICAgICAgICAgICAgICAgc2JyX3BzX2ZsYWc7Ci8qIENvbnRyb2wgcGFyYW1ldGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIFNCUi9QUyBwcm9jZXNzaW5nIGluCiAqIHRoZSBBQUMgYml0c3RyZWFtLiBVc2UgdGhlIGZvbGxvd2luZyBtYWNyb3MgdG8gc2V0IHRoaXMgZmllbGQ6CiAqIC0gI0FTTV9BQUNfU0JSX09GRl9QU19PRkYgLS0gVHVybiBvZmYgYm90aCBTQlIgYW5kIFBTCiAqIHByb2Nlc3NpbmcsIGlmIHRoZXkgYXJlIHByZXNlbnQgaW4gdGhlIGJpdHN0cmVhbS4KICogLSAjQVNNX0FBQ19TQlJfT05fUFNfT0ZGIC0tIFR1cm4gb24gU0JSIHByb2Nlc3NpbmcsIGJ1dCBub3QgUFMKICogcHJvY2Vzc2luZywgaWYgdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgYml0c3RyZWFtLgogKiAtICNBU01fQUFDX1NCUl9PTl9QU19PTiAtLSBUdXJuIG9uIGJvdGggU0JSIGFuZCBQUyBwcm9jZXNzaW5nLAogKiBpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBiaXRzdHJlYW0gKGRlZmF1bHQgYmVoYXZpb3IpLgogKiAtIEFsbCBvdGhlciB2YWx1ZXMgYXJlIGludmFsaWQuCiAqIENoYW5nZXMgYXJlIGFwcGxpZWQgdG8gdGhlIG5leHQgZGVjb2RlZCBmcmFtZS4KICovCn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQUNfRFVBTF9NT05PX01BUFBJTkcgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEM2NAoKLyoJRmlyc3Qgc2luZ2xlIGNoYW5uZWwgZWxlbWVudCBpbiBhIGR1YWwgbW9ubyBiaXRzdHJlYW0uKi8KI2RlZmluZSBBU01fQUFDX0RVQUxfTU9OT19NQVBfU0NFXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkKCi8qCVNlY29uZCBzaW5nbGUgY2hhbm5lbCBlbGVtZW50IGluIGEgZHVhbCBtb25vIGJpdHN0cmVhbS4qLwojZGVmaW5lIEFTTV9BQUNfRFVBTF9NT05PX01BUF9TQ0VfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgyKQoKLyogU3RydWN0dXJlIGZvciBBQUMgZGVjb2RlciBkdWFsIG1vbm8gY2hhbm5lbCBtYXBwaW5nLiAqLwoKCnN0cnVjdCBhc21fYWFjX2R1YWxfbW9ub19tYXBwaW5nX3BhcmFtIHsKCXN0cnVjdCBhcHJfaGRyCQkJCQkJCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtCWVuY2RlYzsKCXUxNiAgICBsZWZ0X2NoYW5uZWxfc2NlOwoJdTE2ICAgIHJpZ2h0X2NoYW5uZWxfc2NlOwoKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURSU1BfR0VUX1BQX1BBUkFNU19WMiAweDAwMDEwREE0CgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRyc3BfZ2V0X3BwX3BhcmFtc192MiB7Cgl1MzIgICAgICAgICAgICAgICAgICBzdGF0dXM7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQzNfS0FSQU9LRV9NT0RFIDB4MDAwMTBENzMKCi8qIEVudW1lcmF0aW9uIGZvciBib3RoIHZvY2FscyBpbiBhIGthcmFva2Ugc3RyZWFtLiovCiNkZWZpbmUgQUMzX0tBUkFPS0VfTU9ERV9OT19WT0NBTCAgICAgKDApCgovKiBFbnVtZXJhdGlvbiBmb3Igb25seSB0aGUgbGVmdCB2b2NhbCBpbiBhIGthcmFva2Ugc3RyZWFtLiovCiNkZWZpbmUgQUMzX0tBUkFPS0VfTU9ERV9MRUZUX1ZPQ0FMICAgKDEpCgovKiBFbnVtZXJhdGlvbiBmb3Igb25seSB0aGUgcmlnaHQgdm9jYWwgaW4gYSBrYXJhb2tlIHN0cmVhbS4qLwojZGVmaW5lIEFDM19LQVJBT0tFX01PREVfUklHSFRfVk9DQUwgKDIpCgovKiBFbnVtZXJhdGlvbiBmb3IgYm90aCB2b2NhbCBjaGFubmVscyBpbiBhIGthcmFva2Ugc3RyZWFtLiovCiNkZWZpbmUgQUMzX0tBUkFPS0VfTU9ERV9CT1RIX1ZPQ0FMICAgICAgICAgICAgICgzKQojZGVmaW5lIEFTTV9QQVJBTV9JRF9BQzNfRFJDX01PREUgICAgICAgICAgICAgICAweDAwMDEwRDc0Ci8qIEVudW1lcmF0aW9uIGZvciB0aGUgQ3VzdG9tIEFuYWxvZyBtb2RlLiovCiNkZWZpbmUgQUMzX0RSQ19NT0RFX0NVU1RPTV9BTkFMT0cgICAgICAgICAgICAgICgwKQoKLyogRW51bWVyYXRpb24gZm9yIHRoZSBDdXN0b20gRGlnaXRhbCBtb2RlLiovCiNkZWZpbmUgQUMzX0RSQ19NT0RFX0NVU1RPTV9ESUdJVEFMICAgICAgICAgICAgICgxKQovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIExpbmUgT3V0IG1vZGUgKGxpZ2h0IGNvbXByZXNzaW9uKS4qLwojZGVmaW5lIEFDM19EUkNfTU9ERV9MSU5FX09VVCAgKDIpCgovKiBFbnVtZXJhdGlvbiBmb3IgdGhlIFJGIHJlbW9kdWxhdGlvbiBtb2RlIChoZWF2eSBjb21wcmVzc2lvbikuKi8KI2RlZmluZSBBQzNfRFJDX01PREVfUkZfUkVNT0QgICAgICAgICAgICAgICAgICAgICAgICAgKDMpCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19EVUFMX01PTk9fTU9ERSAgICAgICAgICAgICAgIDB4MDAwMTBENzUKCi8qIEVudW1lcmF0aW9uIGZvciBwbGF5aW5nIGR1YWwgbW9ubyBpbiBzdGVyZW8gbW9kZS4qLwojZGVmaW5lIEFDM19EVUFMX01PTk9fTU9ERV9TVEVSRU8gICAgICAgICAgICAgICAgICAgICAoMCkKCi8qIEVudW1lcmF0aW9uIGZvciBwbGF5aW5nIGxlZnQgbW9uby4qLwojZGVmaW5lIEFDM19EVUFMX01PTk9fTU9ERV9MRUZUX01PTk8gICAgICAgICAgICAgICAgICAoMSkKCi8qIEVudW1lcmF0aW9uIGZvciBwbGF5aW5nIHJpZ2h0IG1vbm8uKi8KI2RlZmluZSBBQzNfRFVBTF9NT05PX01PREVfUklHSFRfTU9OTyAgICAgICAgICAgICAgICAgKDIpCgovKiBFbnVtZXJhdGlvbiBmb3IgbWl4aW5nIGJvdGggZHVhbCBtb25vIGNoYW5uZWxzIGFuZCBwbGF5aW5nIHRoZW0uKi8KI2RlZmluZSBBQzNfRFVBTF9NT05PX01PREVfTUlYRURfTU9OTyAgICAgICAgKDMpCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19TVEVSRU9fRE9XTk1JWF9NT0RFIDB4MDAwMTBENzYKCi8qIEVudW1lcmF0aW9uIGZvciB1c2luZyB0aGUgRG93bm1peCBtb2RlIGluZGljYXRlZCBpbiB0aGUgYml0c3RyZWFtLiAqLwoKI2RlZmluZSBBQzNfU1RFUkVPX0RPV05NSVhfTU9ERV9BVVRPX0RFVEVDVCAgKDApCgovKiBFbnVtZXJhdGlvbiBmb3IgU3Vycm91bmQgQ29tcGF0aWJsZSBtb2RlIChwcmVzZXJ2ZXMgdGhlCiAqIHN1cnJvdW5kIGluZm9ybWF0aW9uKS4KICovCgojZGVmaW5lIEFDM19TVEVSRU9fRE9XTk1JWF9NT0RFX0xUX1JUICAgICAgICAoMSkKLyogRW51bWVyYXRpb24gZm9yIE1vbm8gQ29tcGF0aWJsZSBtb2RlIChpZiB0aGUgb3V0cHV0IGlzIHRvIGJlCiAqIGZ1cnRoZXIgZG93bm1peGVkIHRvIG1vbm8pLgogKi8KCiNkZWZpbmUgQUMzX1NURVJFT19ET1dOTUlYX01PREVfTE9fUk8gKDIpCgovKiBJRCBvZiB0aGUgQUMzIFBDTSBzY2FsZSBmYWN0b3IgcGFyYW1ldGVyIGluIHRoZQogKiAjQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSBjb21tYW5kLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfQUMzX1BDTV9TQ0FMRUZBQ1RPUiAweDAwMDEwRDc4CgovKiBJRCBvZiB0aGUgQUMzIERSQyBib29zdCBzY2FsZSBmYWN0b3IgcGFyYW1ldGVyIGluIHRoZQogKiAjQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSBjb21tYW5kLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfQUMzX0RSQ19CT09TVF9TQ0FMRUZBQ1RPUiAweDAwMDEwRDc5CgovKiBJRCBvZiB0aGUgQUMzIERSQyBjdXQgc2NhbGUgZmFjdG9yIHBhcmFtZXRlciBpbiB0aGUKICogI0FTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU0gY29tbWFuZC4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0FDM19EUkNfQ1VUX1NDQUxFRkFDVE9SIDB4MDAwMTBEN0EKCi8qIFN0cnVjdHVyZSBmb3IgQUMzIEdlbmVyaWMgUGFyYW1ldGVyLiAqLwoKLyogIFBheWxvYWQgb2YgdGhlIEFDMyBwYXJhbWV0ZXJzIGluIHRoZQogKiAjQVNNX1NUUkVBTV9DTURfU0VUX0VOQ0RFQ19QQVJBTSBjb21tYW5kLgogKi8Kc3RydWN0IGFzbV9hYzNfZ2VuZXJpY19wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJc3RydWN0IGFzbV9lbmNfY2ZnX2Jsa19wYXJhbV92MgllbmNibGs7Cgl1MzIgICAgICAgICAgICAgICAgICBnZW5lcmljX3BhcmFtZXRlcjsKLyogQUMzIGdlbmVyaWMgcGFyYW1ldGVyLiBTZWxlY3QgZnJvbSBvbmUgb2YgdGhlIGZvbGxvd2luZwogKiBwb3NzaWJsZSB2YWx1ZXMuCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19LQVJBT0tFX01PREUsIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogKiAtIEFDM19LQVJBT0tFX01PREVfTk9fVk9DQUwKICogLSBBQzNfS0FSQU9LRV9NT0RFX0xFRlRfVk9DQUwKICogLSBBQzNfS0FSQU9LRV9NT0RFX1JJR0hUX1ZPQ0FMCiAqIC0gQUMzX0tBUkFPS0VfTU9ERV9CT1RIX1ZPQ0FMCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19EUkNfTU9ERSwgc3VwcG9ydGVkIHZhbHVlcyBhcmU6CiAqIC0gQUMzX0RSQ19NT0RFX0NVU1RPTV9BTkFMT0cKICogLSBBQzNfRFJDX01PREVfQ1VTVE9NX0RJR0lUQUwKICogLSBBQzNfRFJDX01PREVfTElORV9PVVQKICogLSBBQzNfRFJDX01PREVfUkZfUkVNT0QKICoKICogRm9yICNBU01fUEFSQU1fSURfQUMzX0RVQUxfTU9OT19NT0RFLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZToKICogLSBBQzNfRFVBTF9NT05PX01PREVfU1RFUkVPCiAqIC0gQUMzX0RVQUxfTU9OT19NT0RFX0xFRlRfTU9OTwogKiAtIEFDM19EVUFMX01PTk9fTU9ERV9SSUdIVF9NT05PCiAqIC0gQUMzX0RVQUxfTU9OT19NT0RFX01JWEVEX01PTk8KICoKICogRm9yICNBU01fUEFSQU1fSURfQUMzX1NURVJFT19ET1dOTUlYX01PREUsIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOgogKiAtIEFDM19TVEVSRU9fRE9XTk1JWF9NT0RFX0FVVE9fREVURUNUCiAqIC0gQUMzX1NURVJFT19ET1dOTUlYX01PREVfTFRfUlQKICogLSBBQzNfU1RFUkVPX0RPV05NSVhfTU9ERV9MT19STwogKgogKiBGb3IgI0FTTV9QQVJBTV9JRF9BQzNfUENNX1NDQUxFRkFDVE9SLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZQogKiAwIHRvIDEgaW4gUTMxIGZvcm1hdC4KICoKICogRm9yICNBU01fUEFSQU1fSURfQUMzX0RSQ19CT09TVF9TQ0FMRUZBQ1RPUiwgc3VwcG9ydGVkIHZhbHVlcyBhcmUKICogMCB0byAxIGluIFEzMSBmb3JtYXQuCiAqCiAqIEZvciAjQVNNX1BBUkFNX0lEX0FDM19EUkNfQ1VUX1NDQUxFRkFDVE9SLCBzdXBwb3J0ZWQgdmFsdWVzIGFyZQogKiAwIHRvIDEgaW4gUTMxIGZvcm1hdC4KICovCn0gX19wYWNrZWQ7CgovKiBFbnVtZXJhdGlvbiBmb3IgUmF3IG1vZGUgKG5vIGRvd25taXhpbmcpLCB3aGljaCBzcGVjaWZpZXMKICogdGhhdCBhbGwgY2hhbm5lbHMgaW4gdGhlIGJpdHN0cmVhbSBhcmUgdG8gYmUgcGxheWVkIG91dCBhcyBpcwogKiB3aXRob3V0IGFueSBkb3dubWl4aW5nLiAoRGVmYXVsdCkKICovCgojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfUkFXICgtMSkKCi8qIEVudW1lcmF0aW9uIGZvciBzZXR0aW5nIHRoZSBjaGFubmVsIG1hc2sgdG8gMC4gVGhlIDcuMSBtb2RlCiAqIChIb21lIFRoZWF0ZXIpIGlzIGFzc2lnbmVkLgogKi8KCgojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfWkVSTyAweDAwMDAKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIG9uZSBjaGFubmVsIChIb21lIFRoZWF0ZXIsIG1vbm8pLgogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfMV9DIDB4MDAwNAoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgdHdvIGNoYW5uZWxzIChIb21lIFRoZWF0ZXIsIHN0ZXJlbykuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzJfTF9SIDB4MDAwMwoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgdGhyZWUgY2hhbm5lbHMgKEhvbWUgVGhlYXRlcikuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfM19MX0NfUiAweDAwMDcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHR3byBjaGFubmVscyAoc3RlcmVvKS4KICogLSBTcGVha2VyIGJhY2sgbGVmdAogKiAtIFNwZWFrZXIgYmFjayByaWdodAogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzJfQmxfQnIgIDB4MDAzMAoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgZm91ciBjaGFubmVscy4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS180X0xfUl9CbF9CciAweDAwMzMKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGZvdXIgY2hhbm5lbHMgKEhvbWUgVGhlYXRlcikuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGNlbnRlcgogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzRfTF9SX0NfQmNfSFQgMHgwMTA3Ci8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGZpdmUgY2hhbm5lbHMuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181X0xfQ19SX0JsX0JyICAweDAwMzcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGZpdmUgY2hhbm5lbHMgKDUgbW9kZSwgSG9tZSBUaGVhdGVyKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIHNpZGUgbGVmdAogKiAtIFNwZWFrZXIgc2lkZSByaWdodAogKi8KI2RlZmluZSBXTUFQUk9fQ0hBTk5FTF9NQVNLXzVfTF9DX1JfU2xfU3JfSFQgICAweDA2MDcKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2l4IGNoYW5uZWxzICg1LjEgbW9kZSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBsb3cgZnJlcXVlbmN5CiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181RE9UMV9MX0NfUl9CbF9Ccl9TTEYgIDB4MDAzRgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBzaXggY2hhbm5lbHMgKDUuMSBtb2RlLCBIb21lIFRoZWF0ZXIpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgbG93IGZyZXF1ZW5jeQogKiAtIFNwZWFrZXIgc2lkZSBsZWZ0CiAqIC0gU3BlYWtlciBzaWRlIHJpZ2h0CiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfNURPVDFfTF9DX1JfU2xfU3JfU0xGX0hUICAweDA2MEYKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2l4IGNoYW5uZWxzICg1LjEgbW9kZSwgbm8gTEZFKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGJhY2sgbGVmdAogKiAtIFNwZWFrZXIgYmFjayByaWdodAogKiAtIFNwZWFrZXIgYmFjayBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181RE9UMV9MX0NfUl9CbF9Ccl9CYyAgMHgwMTM3Ci8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNpeCBjaGFubmVscyAoNS4xIG1vZGUsIEhvbWUgVGhlYXRlciwKICogbm8gTEZFKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGJhY2sgY2VudGVyCiAqIC0gU3BlYWtlciBzaWRlIGxlZnQKICogLSBTcGVha2VyIHNpZGUgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS181RE9UMV9MX0NfUl9TbF9Tcl9CY19IVCAgIDB4MDcwNwoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2V2ZW4gY2hhbm5lbHMgKDYuMSBtb2RlKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGxvdyBmcmVxdWVuY3kKICogLSBTcGVha2VyIGJhY2sgbGVmdAogKiAtIFNwZWFrZXIgYmFjayByaWdodAogKiAtIFNwZWFrZXIgYmFjayBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9CbF9Ccl9CY19TTEYgICAweDAxM0YKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIHNldmVuIGNoYW5uZWxzICg2LjEgbW9kZSwgSG9tZQogKiBUaGVhdGVyKS4KICogLSBTcGVha2VyIGZyb250IGxlZnQKICogLSBTcGVha2VyIGZyb250IHJpZ2h0CiAqIC0gU3BlYWtlciBmcm9udCBjZW50ZXIKICogLSBTcGVha2VyIGxvdyBmcmVxdWVuY3kKICogLSBTcGVha2VyIGJhY2sgY2VudGVyCiAqIC0gU3BlYWtlciBzaWRlIGxlZnQKICogLSBTcGVha2VyIHNpZGUgcmlnaHQKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9TbF9Tcl9CY19TTEZfSFQgMHgwNzBGCgovKiBTcGVha2VyIGxheW91dCBtYXNrIGZvciBzZXZlbiBjaGFubmVscyAoNi4xIG1vZGUsIG5vIExGRSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGxlZnQgb2YgY2VudGVyCiAqIC0gU3BlYWtlciBmcm9udCByaWdodCBvZiBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9CbF9Ccl9TRkxPQ19TRlJPQyAgIDB4MDBGNwoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3Igc2V2ZW4gY2hhbm5lbHMgKDYuMSBtb2RlLCBIb21lCiAqIFRoZWF0ZXIsIG5vIExGRSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBzaWRlIGxlZnQKICogLSBTcGVha2VyIHNpZGUgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGxlZnQgb2YgY2VudGVyCiAqIC0gU3BlYWtlciBmcm9udCByaWdodCBvZiBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS182RE9UMV9MX0NfUl9TbF9Tcl9TRkxPQ19TRlJPQ19IVCAweDA2MzcKCi8qIFNwZWFrZXIgbGF5b3V0IG1hc2sgZm9yIGVpZ2h0IGNoYW5uZWxzICg3LjEgbW9kZSkuCiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0CiAqIC0gU3BlYWtlciBmcm9udCByaWdodAogKiAtIFNwZWFrZXIgZnJvbnQgY2VudGVyCiAqIC0gU3BlYWtlciBiYWNrIGxlZnQKICogLSBTcGVha2VyIGJhY2sgcmlnaHQKICogLSBTcGVha2VyIGxvdyBmcmVxdWVuY3kKICogLSBTcGVha2VyIGZyb250IGxlZnQgb2YgY2VudGVyCiAqIC0gU3BlYWtlciBmcm9udCByaWdodCBvZiBjZW50ZXIKICovCiNkZWZpbmUgV01BUFJPX0NIQU5ORUxfTUFTS183RE9UMV9MX0NfUl9CbF9Ccl9TTEZfU0ZMT0NfU0ZST0MgXAoJCQkJCTB4MDBGRgoKLyogU3BlYWtlciBsYXlvdXQgbWFzayBmb3IgZWlnaHQgY2hhbm5lbHMgKDcuMSBtb2RlLCBIb21lIFRoZWF0ZXIpLgogKiAtIFNwZWFrZXIgZnJvbnQgbGVmdAogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQKICogLSBTcGVha2VyIGZyb250IGNlbnRlcgogKiAtIFNwZWFrZXIgc2lkZSBsZWZ0CiAqIC0gU3BlYWtlciBzaWRlIHJpZ2h0CiAqIC0gU3BlYWtlciBsb3cgZnJlcXVlbmN5CiAqIC0gU3BlYWtlciBmcm9udCBsZWZ0IG9mIGNlbnRlcgogKiAtIFNwZWFrZXIgZnJvbnQgcmlnaHQgb2YgY2VudGVyCiAqCiAqLwojZGVmaW5lIFdNQVBST19DSEFOTkVMX01BU0tfN0RPVDFfTF9DX1JfU2xfU3JfU0xGX1NGTE9DX1NGUk9DX0hUIFwKCQkJCQkweDA2M0YKCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0RFQ19PVVRQVVRfQ0hBTl9NQVAgIDB4MDAwMTBEODIKCi8qIE1heGltdW0gbnVtYmVyIG9mIGRlY29kZXIgb3V0cHV0IGNoYW5uZWxzLiAqLwojZGVmaW5lIE1BWF9DSEFOX01BUF9DSEFOTkVMUyAgMTYKCi8qIFN0cnVjdHVyZSBmb3IgZGVjb2RlciBvdXRwdXQgY2hhbm5lbCBtYXBwaW5nLiAqLwoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9ERUNfT1VUUFVUX0NIQU5fTUFQIHBhcmFtZXRlciBpbiB0aGUKICogI0FTTV9TVFJFQU1fQ01EX1NFVF9FTkNERUNfUEFSQU0gY29tbWFuZC4KICovCnN0cnVjdCBhc21fZGVjX291dF9jaGFuX21hcF9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X2VuY2RlY19wYXJhbSAgZW5jZGVjOwoJdTMyICAgICAgICAgICAgICAgICBudW1fY2hhbm5lbHM7Ci8qIE51bWJlciBvZiBkZWNvZGVyIG91dHB1dCBjaGFubmVscy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAjTUFYX0NIQU5fTUFQX0NIQU5ORUxTCiAqCiAqIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgbmF0aXZlIGNoYW5uZWwgbWFwcGluZywgd2hpY2ggaXMgdmFsaWQKICogb25seSBmb3IgTlQgbW9kZS4gVGhpcyBtZWFucyB0aGUgb3V0cHV0IG9mIHRoZSBkZWNvZGVyIGlzIHRvIGJlCiAqIHByZXNlcnZlZCBhcyBpcy4KICovCgl1OCAgICAgICAgICAgICAgICAgIGNoYW5uZWxfbWFwcGluZ1tNQVhfQ0hBTl9NQVBfQ0hBTk5FTFNdOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQgIDB4MDAwMTBEODQKCi8qIEJpdG1hc2sgZm9yIHRoZSBJRUMgNjE5MzcgZW5hYmxlIGZsYWcuKi8KI2RlZmluZSBBU01fQklUX01BU0tfSUVDXzYxOTM3X1NUUkVBTV9GTEFHICAgKDB4MDAwMDAwMDFVTCkKCi8qIFNoaWZ0IHZhbHVlIGZvciB0aGUgSUVDIDYxOTM3IGVuYWJsZSBmbGFnLiovCiNkZWZpbmUgQVNNX1NISUZUX0lFQ182MTkzN19TVFJFQU1fRkxBRyAgMAoKLyogQml0bWFzayBmb3IgdGhlIElFQyA2MDk1OCBlbmFibGUgZmxhZy4qLwojZGVmaW5lIEFTTV9CSVRfTUFTS19JRUNfNjA5NThfU1RSRUFNX0ZMQUcgICAoMHgwMDAwMDAwMlVMKQoKLyogU2hpZnQgdmFsdWUgZm9yIHRoZSBJRUMgNjA5NTggZW5hYmxlIGZsYWcuKi8KI2RlZmluZSBBU01fU0hJRlRfSUVDXzYwOTU4X1NUUkVBTV9GTEFHICAgMQoKLyogUGF5bG9hZCBmb3JtYXQgZm9yIG9wZW4gd3JpdGUgY29tcHJlc3NlZCBjb21tYW5kICovCgovKiBQYXlsb2FkIGZvcm1hdCBmb3IgdGhlICNBU01fU1RSRUFNX0NNRF9PUEVOX1dSSVRFX0NPTVBSRVNTRUQKICogY29tbWFuZCwgd2hpY2ggb3BlbnMgYSBzdHJlYW0gZm9yIGEgZ2l2ZW4gc2Vzc2lvbiBJRCBhbmQgc3RyZWFtIElECiAqIHRvIGJlIHJlbmRlcmVkIGluIHRoZSBjb21wcmVzc2VkIGZvcm1hdC4KICovCgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl93cml0ZV9jb21wcmVzc2VkIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXUzMiAgICAgICAgICAgICAgICAgICAgZmxhZ3M7Ci8qIE1vZGUgZmxhZ3MgdGhhdCBjb25maWd1cmUgdGhlIHN0cmVhbSBmb3IgYSBzcGVjaWZpYyBmb3JtYXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gQml0IDAgLS0gSUVDIDYxOTM3IGNvbXBhdGliaWxpdHkKICogICAtIDAgLS0gU3RyZWFtIGlzIG5vdCBpbiBJRUMgNjE5MzcgZm9ybWF0CiAqICAgLSAxIC0tIFN0cmVhbSBpcyBpbiBJRUMgNjE5MzcgZm9ybWF0CiAqIC0gQml0IDEgLS0gSUVDIDYwOTU4IGNvbXBhdGliaWxpdHkKICogICAtIDAgLS0gU3RyZWFtIGlzIG5vdCBpbiBJRUMgNjA5NTggZm9ybWF0CiAqICAgLSAxIC0tIFN0cmVhbSBpcyBpbiBJRUMgNjA5NTggZm9ybWF0CiAqIC0gQml0cyAyIHRvIDMxIC0tIDAgKFJlc2VydmVkKQogKgogKiBGb3IgdGhlIHNhbWUgc3RyZWFtLCBiaXQgMCBjYW5ub3QgYmUgc2V0IHRvIDAgYW5kIGJpdCAxIGNhbm5vdAogKiBiZSBzZXQgdG8gMS4gQSBjb21wcmVzc2VkIHN0cmVhbSBjb25ub3QgaGF2ZSBJRUMgNjA5NTgKICogcGFja2V0aXphdGlvbiBhcHBsaWVkIHdpdGhvdXQgSUVDIDYxOTM3IHBhY2tldGl6YXRpb24uCiAqIEBub3RlMWhhbmcgQ3VycmVudGx5LCBJRUMgNjA5NTggcGFja2V0aXplZCBpbnB1dCBzdHJlYW1zIGFyZSBub3QKICogc3VwcG9ydGVkLgogKi8KCgoJdTMyICAgICAgICAgICAgICAgICAgICBmbXRfaWQ7Ci8qIFNwZWNpZmllcyB0aGUgbWVkaWEgdHlwZSBvZiB0aGUgSERNSSBzdHJlYW0gdG8gYmUgb3BlbmVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtICNBU01fTUVESUFfRk1UX0FDMwogKiAtICNBU01fTUVESUFfRk1UX0VBQzMKICogLSAjQVNNX01FRElBX0ZNVF9EVFMKICogLSAjQVNNX01FRElBX0ZNVF9BVFJBQwogKiAtICNBU01fTUVESUFfRk1UX01BVAogKgogKiBAbm90ZTFoYW5nIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gYSB2YWxpZCBtZWRpYSB0eXBlIGV2ZW4gaWYKICogSUVDIDYxOTM3IHBhY2tldGl6YXRpb24gaXMgbm90IHBlcmZvcm1lZCBieSB0aGUgYURTUC4KICovCgp9IF9fcGFja2VkOwoKCi8qIEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgcGVyIGNoYW5uZWwgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZQogKiBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbS4KICovCiNkZWZpbmUgQVNNX0RBVEFfQ01EX1JFTU9WRV9JTklUSUFMX1NJTEVOQ0UgMHgwMDAxMEQ2NwoKLyogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2FtcGxlcyBwZXIgY2hhbm5lbCB0byBiZSByZW1vdmVkIGZyb20KICogdGhlIGVuZCBvZiB0aGUgc3RyZWFtLgogKi8KI2RlZmluZSBBU01fREFUQV9DTURfUkVNT1ZFX1RSQUlMSU5HX1NJTEVOQ0UgMHgwMDAxMEQ2OAoKc3RydWN0IGFzbV9kYXRhX2NtZF9yZW1vdmVfc2lsZW5jZSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIJbnVtX3NhbXBsZXNfdG9fcmVtb3ZlOwoJLyogPCBOdW1iZXIgb2Ygc2FtcGxlcyBwZXIgY2hhbm5lbCB0byBiZSByZW1vdmVkLgoJICogQHZhbHVlcyAwIHRvICgyQHNzY3J7MzJ9LTEpCgkgKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX1NUUkVBTV9DTURfT1BFTl9SRUFEX0NPTVBSRVNTRUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwRDk1CgpzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfb3Blbl9yZWFkX2NvbXByZXNzZWQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJdTMyICAgICAgICAgICAgICAgICAgICBtb2RlX2ZsYWdzOwovKiBNb2RlIGZsYWdzIHRoYXQgaW5kaWNhdGUgd2hldGhlciBtZXRhIGluZm9ybWF0aW9uIHBlciBlbmNvZGVkCiAqIGZyYW1lIGlzIHRvIGJlIHByb3ZpZGVkLgogKiBTdXBwb3J0ZWQgdmFsdWVzIGZvciBiaXQgNDoKICogLSAwIC0tIFJldHVybiBkYXRhIGJ1ZmZlciBjb250YWlucyBhbGwgZW5jb2RlZCBmcmFtZXMgb25seTsgaXQgZG9lcwogKiAgICAgIG5vdCBjb250YWluIGZyYW1lIG1ldGFkYXRhLgogKiAtIDEgLS0gUmV0dXJuIGRhdGEgYnVmZmVyIGNvbnRhaW5zIGFuIGFycmF5IG9mIG1ldGFkYXRhIGFuZCBlbmNvZGVkCiAqICAgICAgZnJhbWVzLgogKiAtIFVzZSAjQVNNX0JJVF9NQVNLX01FVEFfSU5GT19GTEFHIHRvIHNldCB0aGUgYml0bWFzayBhbmQKICogI0FTTV9TSElGVF9NRVRBX0lORk9fRkxBRyB0byBzZXQgdGhlIHNoaWZ0IHZhbHVlIGZvciB0aGlzIGJpdC4KICogQWxsIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkOyBjbGllbnRzIG11c3Qgc2V0IHRoZW0gdG8gemVyby4KICovCgoJdTMyICAgICAgICAgICAgICAgICAgICBmcmFtZXNfcGVyX2J1ZjsKLyogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgbmVlZCB0byBiZSByZXR1cm5lZCBwZXIKICogcmVhZCBidWZmZXIKICogU3VwcG9ydGVkIHZhbHVlczogc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwCiAqLwoKfSBfX3BhY2tlZDsKCi8qIGFkc3BfYXNtX3N0cmVhbV9jb21tYW5kcy5oKi8KCgovKiBhZHNwX2FzbV9hcGkuaCAobm8gY2hhbmdlcykqLwojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfREVGQVVMVCBcCgkJCQkJCQkJMHgwMDAxMEJFNAojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfUEVBS01FVEVSIFwKCQkJCQkJCQkweDAwMDEwRDgzCiNkZWZpbmUgQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FIFwKCQkJCQkJCQkweDAwMDEwQzY4CiNkZWZpbmUgQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9NQ0hfUEVBS19WT0wgXAoJCQkJCQkJCTB4MDAwMTBEOEIKI2RlZmluZSBBU01fU1RSRUFNX1BSRVBST0NPUE9fSURfREVGQVVMVCBcCgkJCUFTTV9TVFJFQU1fUE9TVFBST0NPUE9fSURfREVGQVVMVAojZGVmaW5lIEFTTV9TVFJFQU1fUFJFUFJPQ09QT19JRF9OT05FIFwKCQkJQVNNX1NUUkVBTV9QT1NUUFJPQ09QT19JRF9OT05FCiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX05PTkVfQVVESU9fQ09QUCBcCgkJCTB4MDAwMTAzMTIKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9NT05PX0FVRElPX0NPUFAgXAoJCQkJCQkJCTB4MDAwMTAzMTMKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9TVEVSRU9fQVVESU9fQ09QUCBcCgkJCQkJCQkJMHgwMDAxMDMxNAojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX1NURVJFT19JSVJfQVVESU9fQ09QUFwKCQkJCQkJCQkweDAwMDEwNzA0CiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX1NQRUFLRVJfTU9OT19BVURJT19DT1BQX01CRFJDVjJcCgkJCQkJCQkJMHgwMDAxMDcwRAojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX1NURVJFT19BVURJT19DT1BQX01CRFJDVjJcCgkJCQkJCQkJMHgwMDAxMDcwRQojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX1NURVJFT19JSVJfQVVESU9fQ09QUF9NQkRSQ1YyXAoJCQkJCQkJCTB4MDAwMTA3MEYKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfU1BFQUtFUl9TVEVSRU9fQVVESU9fQ09QUF9NQkRSQ19WMyBcCgkJCQkJCQkJMHgxMTAwMDAwMAojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9TUEVBS0VSX01DSF9QRUFLX1ZPTCBcCgkJCQkJCQkJMHgwMDAxMDMxQgojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9NSUNfTU9OT19BVURJT19DT1BQICAweDAwMDEwMzE1CiNkZWZpbmUgQURNX0NNRF9DT1BQX09QRU5PUE9MT0dZX0lEX01JQ19TVEVSRU9fQVVESU9fQ09QUCAweDAwMDEwMzE2CiNkZWZpbmUgQVVEUFJPQ19DT1BQT1BPTE9HWV9JRF9NQ0hBTl9JSVJfQVVESU8gICAgICAgICAgIDB4MDAwMTA3MTUKI2RlZmluZSBBRE1fQ01EX0NPUFBfT1BFTk9QT0xPR1lfSURfREVGQVVMVF9BVURJT19DT1BQICAgMHgwMDAxMEJFMwojZGVmaW5lIEFETV9DTURfQ09QUF9PUEVOT1BPTE9HWV9JRF9QRUFLTUVURVJfQVVESU9fQ09QUCAweDAwMDEwMzE3CiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQUlHICAgMHgwMDAxMDcxNgojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQUlHX0VOQUJMRQkJMHgwMDAxMDcxNwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQUlHX0NPTkZJRwkJMHgwMDAxMDcxOAoKc3RydWN0IEF1ZGlvX0FpZ1BhcmFtIHsKCXVpbnQxNl90CW1vZGU7Ci8qPCBNb2RlIHdvcmQgZm9yIGVuYWJsaW5nIEFJRy9TSUcgbW9kZSAuCiAqIEJ5dGUgb2Zmc2V0OiAwCiAqLwoJaW50MTZfdAkJc3RhdGljR2FpbkwxNlExMjsKLyo8IFN0YXRpYyBpbnB1dCBnYWluIHdoZW4gYWlnTW9kZSBpcyBzZXQgdG8gMS4KICogQnl0ZSBvZmZzZXQ6IDIKICovCglpbnQxNl90CQlpbml0aWFsR2FpbkRCTDE2UTc7Ci8qPEluaXRpYWwgdmFsdWUgdGhhdCB0aGUgYWRhcHRpdmUgZ2FpbiB1cGRhdGUgc3RhcnRzIGZyb20gZEIKICogUTcgQnl0ZSBvZmZzZXQ6IDQKICovCglpbnQxNl90CQlpZGVhbFJNU0RCTDE2UTc7Ci8qPEF2ZXJhZ2UgUk1TIGxldmVsIHRoYXQgQUlHIGF0dGVtcHRzIHRvIGFjaGlldmUgUTguNwogKiBCeXRlIG9mZnNldDogNgogKi8KCWludDMyX3QJCW5vaXNlR2F0ZUwzMjsKLypUaHJlc2hvbGQgYmVsb3cgd2hpY2ggc2lnbmFsIGlzIGNvbnNpZGVyZWQgYXMgbm9pc2UgYW5kIEFJRwogKiBCeXRlIG9mZnNldDogOAogKi8KCWludDMyX3QJCW1pbkdhaW5MMzJRMTU7Ci8qTWluaW11bSBnYWluIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IEFJRyBRMTYuMTUKICogQnl0ZSBvZmZzZXQ6IDEyCiAqLwoJaW50MzJfdAkJbWF4R2FpbkwzMlExNTsKLypNYXhpbXVtIGdhaW4gdGhhdCBjYW4gYmUgcHJvdmlkZWQgYnkgQUlHIFExNi4xNQogKiBCeXRlIG9mZnNldDogMTYKICovCgl1aW50MzJfdAkJZ2FpbkF0UnRVTDMyUTMxOwovKkF0dGFjay9yZWxlYXNlIHRpbWUgZm9yIEFJRyB1cGRhdGUgUTEuMzEKICogQnl0ZSBvZmZzZXQ6IDIwCiAqLwoJdWludDMyX3QJCWxvbmdHYWluQXRSdFVMMzJRMzE7Ci8qTG9uZyBhdHRhY2svcmVsZWFzZSB0aW1lIHdoaWxlIHVwZGF0aW5nIGdhaW4gZm9yCiAqIG5vaXNlL3NpbGVuY2UgUTEuMzEgQnl0ZSBvZmZzZXQ6IDI0CiAqLwoKCXVpbnQzMl90CQlybXNUYXZVTDMyUTMyOwovKiBSTVMgc21vb3RoaW5nIHRpbWUgY29uc3RhbnQgdXNlZCBmb3IgbG9uZy10ZXJtIFJNUyBlc3RpbWF0ZQogKiBRMC4zMiBCeXRlIG9mZnNldDogMjgKICovCgoJdWludDMyX3QJCWdhaW5VcGRhdGVTdGFydFRpbU1zVUwzMlEwOwovKiBUaGUgd2FpdGluZyB0aW1lIGJlZm9yZSB3aGljaCBBSUcgc3RhcnRzIHRvIGFwcGx5IGFkYXB0aXZlCiAqIGdhaW4gdXBkYXRlIFEzMi4wIEJ5dGUgb2Zmc2V0OiAzMgogKi8KCn0gX19wYWNrZWQ7CgoKI2RlZmluZSBBRE1fTU9EVUxFX0lEX0VBTlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEM0QQojZGVmaW5lIEFETV9QQVJBTV9JRF9FQU5TX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQzRCCiNkZWZpbmUgQURNX1BBUkFNX0lEX0VBTlNfUEFSQU1TICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTBDNEMKCnN0cnVjdCBhZG1fZWFuc19lbmFibGUgewoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBFQU5TIGlzIGRpc2FibGVkICgwKSBvciBlbmFibGVkCiAqIChub256ZXJvKS4KICogVGhpcyBpcyBzdXBwb3J0ZWQgb25seSBmb3Igc2FtcGxpbmcgcmF0ZXMgb2YgOCwgMTIsIDE2LCAyNCwgMzIsCiAqIGFuZCA0OCBrSHouIEl0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNhbXBsaW5nIHJhdGVzIG9mIDExLjAyNSwKICogMjIuMDUsIG9yIDQ0LjEga0h6LgogKi8KCn0gX19wYWNrZWQ7CgoKc3RydWN0IGFkbV9lYW5zX3BhcmFtcyB7CglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbW9kZTsKLyo8IE1vZGUgd29yZCBmb3IgZW5hYmxpbmcvZGlzYWJsaW5nIHN1Ym1vZHVsZXMuCiAqIEJ5dGUgb2Zmc2V0OiAwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19pbnB1dF9nYWluOwovKjwgUTIuMTMgaW5wdXQgZ2FpbiB0byB0aGUgRUFOUyBtb2R1bGUuCiAqIEJ5dGUgb2Zmc2V0OiAyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19vdXRwdXRfZ2FpbjsKLyo8IFEyLjEzIG91dHB1dCBnYWluIHRvIHRoZSBFQU5TIG1vZHVsZS4KICogQnl0ZSBvZmZzZXQ6IDQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zYXJnZXRfbnM7Ci8qPCBUYXJnZXQgbm9pc2Ugc3VwcHJlc3Npb24gbGV2ZWwgaW4gZEIuCiAqIEJ5dGUgb2Zmc2V0OiA2CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19zX2FscGhhOwovKjwgUTMuMTIgb3Zlci1zdWJ0cmFjdGlvbiBmYWN0b3IgZm9yIHN0YXRpb25hcnkgbm9pc2UKICogc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiA4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19uX2FscGhhOwovKiA8IFEzLjEyIG92ZXItc3VidHJhY3Rpb24gZmFjdG9yIGZvciBub25zdGF0aW9uYXJ5IG5vaXNlCiAqIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMTAKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fYWxwaGFtYXg7Ci8qPCBRMy4xMiBtYXhpbXVtIG92ZXItc3VidHJhY3Rpb24gZmFjdG9yIGZvciBub25zdGF0aW9uYXJ5CiAqIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMTIKICovCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZV9hbHBoYTsKLyo8IFExNSBzY2FsaW5nIGZhY3RvciBmb3IgZXhjZXNzIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMTQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25zX3Nucm1heDsKLyo8IFVwcGVyIGJvdW5kYXJ5IGluIGRCIGZvciBTTlIgZXN0aW1hdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDE2CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19zbnNfYmxvY2s7Ci8qPCBRdWFydGVyIGJsb2NrIHNpemUgZm9yIHN0YXRpb25hcnkgbm9pc2Ugc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiAxOAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbnNfaTsKLyo8IEluaXRpYWxpemF0aW9uIGJsb2NrIHNpemUgZm9yIG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMjAKICovCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbnBfc2NhbGU7Ci8qPCBQb3dlciBzY2FsZSBmYWN0b3IgZm9yIG5vbnN0YXRpb25hcnkgbm9pc2UgdXBkYXRlLgogKiBCeXRlIG9mZnNldDogMjIKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fbGFtYmRhOwovKjwgU21vb3RoaW5nIGZhY3RvciBmb3IgaGlnaGVyIGxldmVsIG5vbnN0YXRpb25hcnkgbm9pc2UKICogdXBkYXRlLgogKiBCeXRlIG9mZnNldDogMjQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX25fbGFtYmRhZjsKLyo8IE1lZGl1bSBhdmVyYWdpbmcgZmFjdG9yIGZvciBub2lzZSB1cGRhdGUuCiAqIEJ5dGUgb2Zmc2V0OiAyNgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZ3NfYmlhczsKLyo8IEJpYXMgZmFjdG9yIGluIGRCIGZvciBnYWluIGNhbGN1bGF0aW9uLgogKiBCeXRlIG9mZnNldDogMjgKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX2dzX21heDsKLyo8IFNOUiBsb3dlciBib3VuZGFyeSBpbiBkQiBmb3IgYWdncmVzc2l2ZSBnYWluIGNhbGN1bGF0aW9uLgogKiBCeXRlIG9mZnNldDogMzAKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX3NfYWxwaGFfaGI7Ci8qPCBRMy4xMiBvdmVyLXN1YnRyYWN0aW9uIGZhY3RvciBmb3IgaGlnaC1iYW5kIHN0YXRpb25hcnkKICogbm9pc2Ugc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiAzMgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbl9hbHBoYW1heF9oYjsKLyo8IFEzLjEyIG1heGltdW0gb3Zlci1zdWJ0cmFjdGlvbiBmYWN0b3IgZm9yIGhpZ2gtYmFuZAogKiBub25zdGF0aW9uYXJ5IG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogMzQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBlYW5zX2VfYWxwaGFfaGI7Ci8qPCBRMTUgc2NhbGluZyBmYWN0b3IgZm9yIGhpZ2gtYmFuZCBleGNlc3Mgbm9pc2Ugc3VwcHJlc3Npb24uCiAqIEJ5dGUgb2Zmc2V0OiAzNgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfbl9sYW1iZGEwOwovKjwgU21vb3RoaW5nIGZhY3RvciBmb3Igbm9uc3RhdGlvbmFyeSBub2lzZSB1cGRhdGUgZHVyaW5nCiAqIHNwZWVjaCBhY3Rpdml0eS4KICogQnl0ZSBvZmZzZXQ6IDM4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNoOwovKjwgVGhyZXNob2xkIGZvciBnZW5lcmF0aW5nIGEgYmluYXJ5IFZBRCBkZWNpc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDQwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgcHdyX3NjYWxlOwovKjwgSW5kaXJlY3QgbG93ZXIgYm91bmRhcnkgb2YgdGhlIG5vaXNlIGxldmVsIGVzdGltYXRlLgogKiBCeXRlIG9mZnNldDogNDIKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBoYW5nb3Zlcl9tYXg7Ci8qPCBBdm9pZHMgbWlkLXNwZWVjaCBjbGlwcGluZyBhbmQgcmVsaWFibHkgZGV0ZWN0cyB3ZWFrIHNwZWVjaAogKiBidXJzdHMgYXQgdGhlIGVuZCBvZiBzcGVlY2ggYWN0aXZpdHkuCiAqIEJ5dGUgb2Zmc2V0OiA0NAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhX3NucjsKLyo8IENvbnRyb2xzIHJlc3BvbnNpdmVuZXNzIG9mIHRoZSBWQUQuCiAqIEJ5dGUgb2Zmc2V0OiA0NgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHNucl9kaWZmX21heDsKLyo8IE1heGltdW0gU05SIGRpZmZlcmVuY2UuIERlY3JlYXNpbmcgdGhpcyBwYXJhbWV0ZXIgdmFsdWUgbWF5CiAqIGhlbHAgaW4gbWFraW5nIGNvcnJlY3QgZGVjaXNpb25zIGR1cmluZyBhYnJ1cHQgY2hhbmdlczsgaG93ZXZlciwKICogZGVjcmVhc2luZyB0b28gbXVjaCBtYXkgaW5jcmVhc2UgZmFsc2UgYWxhcm1zIGR1cmluZyBsb25nCiAqIHBhdXNlcy9zaWxlbmNlcy4KICogQnl0ZSBvZmZzZXQ6IDQ4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgc25yX2RpZmZfbWluOwovKjwgTWluaW11bSBTTlIgZGlmZmVyZW5jZS4gRGVjcmVhc2luZyB0aGlzIHBhcmFtZXRlciB2YWx1ZSBtYXkKICogaGVscCBpbiBtYWtpbmcgY29ycmVjdCBkZWNpc2lvbnMgZHVyaW5nIGFicnVwdCBjaGFuZ2VzOyBob3dldmVyLAogKiBkZWNyZWFzaW5nIHRvbyBtdWNoIG1heSBpbmNyZWFzZSBmYWxzZSBhbGFybXMgZHVyaW5nIGxvbmcKICogcGF1c2VzL3NpbGVuY2VzLgogKiBCeXRlIG9mZnNldDogNTAKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2xlbmd0aDsKLyo8IERlZmluZXMgdGhlIG51bWJlciBvZiBmcmFtZXMgZm9yIHdoaWNoIGEgbm9pc2UgbGV2ZWwKICogZXN0aW1hdGUgaXMgc2V0IHRvIGEgZml4ZWQgdmFsdWUuCiAqIEJ5dGUgb2Zmc2V0OiA1MgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIG1heF92YWw7Ci8qPCBEZWZpbmVzIHRoZSB1cHBlciBsaW1pdCBvZiB0aGUgbm9pc2UgbGV2ZWwuCiAqIEJ5dGUgb2Zmc2V0OiA1NAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfYm91bmQ7Ci8qPCBEZWZpbmVzIHRoZSBpbml0aWFsIGJvdW5kaW5nIHZhbHVlIGZvciB0aGUgbm9pc2UgbGV2ZWwKICogZXN0aW1hdGUuIFRoaXMgaXMgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgc2VnbWVudCBkZWZpbmVkIGJ5IHRoZQogKiBpbml0X2xlbmd0aCBwYXJhbWV0ZXIuCiAqIEJ5dGUgb2Zmc2V0OiA1NgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0X2JvdW5kOwovKjwgUmVzZXQgYm91bmRhcnkgZm9yIG5vaXNlIHRyYWNraW5nLgogKiBCeXRlIG9mZnNldDogNTgKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICAgICAgICBhdmFyX3NjYWxlOwovKjwgRGVmaW5lcyB0aGUgYmlhcyBmYWN0b3IgaW4gbm9pc2UgZXN0aW1hdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDYwCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgc3ViX25jOwovKjwgRGVmaW5lcyB0aGUgd2luZG93IGxlbmd0aCBmb3Igbm9pc2UgZXN0aW1hdGlvbi4KICogQnl0ZSBvZmZzZXQ6IDYyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgc3Bvd19taW47Ci8qPCBEZWZpbmVzIHRoZSBtaW5pbXVtIHNpZ25hbCBwb3dlciByZXF1aXJlZCB0byB1cGRhdGUgdGhlCiAqIGJvdW5kYXJpZXMgZm9yIHRoZSBub2lzZSBmbG9vciBlc3RpbWF0ZS4KICogQnl0ZSBvZmZzZXQ6IDY0CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19nc19mYXN0OwovKjwgRmFzdCBzbW9vdGhpbmcgZmFjdG9yIGZvciBwb3N0cHJvY2Vzc29yIGdhaW4uCiAqIEJ5dGUgb2Zmc2V0OiA2NgogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfZ3NfbWVkOwovKjwgTWVkaXVtIHNtb290aGluZyBmYWN0b3IgZm9yIHBvc3Rwcm9jZXNzb3IgZ2Fpbi4KICogQnl0ZSBvZmZzZXQ6IDY4CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19nc19zbG93OwovKjwgU2xvdyBzbW9vdGhpbmcgZmFjdG9yIGZvciBwb3N0cHJvY2Vzc29yIGdhaW4uCiAqIEJ5dGUgb2Zmc2V0OiA3MAogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgIGVhbnNfc3diX3NhbHBoYTsKLyo8IFEzLjEyIHN1cGVyIHdpZGViYW5kIGFnZ3Jlc3NpdmVuZXNzIGZhY3RvciBmb3Igc3RhdGlvbmFyeQogKiBub2lzZSBzdXBwcmVzc2lvbi4KICogQnl0ZSBvZmZzZXQ6IDcyCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgICAgICAgZWFuc19zd2JfbmFscGhhOwovKjwgUTMuMTIgc3VwZXIgd2lkZWJhbmQgYWdncmVzc2l2ZW5lc3MgZmFjdG9yIGZvcgogKiBub25zdGF0aW9uYXJ5IG5vaXNlIHN1cHByZXNzaW9uLgogKiBCeXRlIG9mZnNldDogNzQKICovCn0gX19wYWNrZWQ7CiNkZWZpbmUgQURNX01PRFVMRV9JRFhfTUlDX0dBSU5fQ1RSTCAgIDB4MDAwMTBDMzUKCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcwogKiBJRCBvZiB0aGUgVHggbWljIGdhaW4gY29udHJvbCBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURYX01JQ19HQUlOX0NUUkwgbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthZG14X21pY19nYWlufQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURYX01JQ19HQUlOLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEWF9NSUNfR0FJTiAgICAgICAweDAwMDEwQzM2CgovKiBTdHJ1Y3R1cmUgZm9yIGEgVHggbWljIGdhaW4gcGFyYW1ldGVyIGZvciB0aGUgbWljIGdhaW4KICogY29udHJvbCBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQURNX1BBUkFNX0lEWF9NSUNfR0FJTiBwYXJhbWV0ZXIgaW4gdGhlCiAqIFR4IE1pYyBHYWluIENvbnRyb2wgbW9kdWxlLgogKi8Kc3RydWN0IGFkbXhfbWljX2dhaW4gewoJdWludDE2X3QgICAgICAgICAgICAgICAgICB0eF9taWNfZ2FpbjsKCS8qPCBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0LiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWRtX3NldF9taWNfZ2Fpbl9wYXJhbXMgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKCXN0cnVjdCBhZG14X21pY19nYWluIG1pY19nYWluX2RhdGE7Cn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KCi8qIEBpbmdyb3VwIGF1ZGlvX3BwX21vZHVsZV9pZHMKICogSUQgb2YgdGhlIFJ4IENvZGVjIEdhaW4gQ29udHJvbCBtb2R1bGUuCiAqCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEOgogKiAtICNBRE1fUEFSQU1fSURfUlhfQ09ERUNfR0FJTgogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEX1JYX0NPREVDX0dBSU5fQ1RSTCAgICAgICAweDAwMDEwQzM3CgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMKICogSUQgb2YgdGhlIFJ4IGNvZGVjIGdhaW4gY29udHJvbCBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUlhfQ09ERUNfR0FJTl9DVFJMIG1vZHVsZS4KICoKICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3J4X2NvZGVjX2dhaW59CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9SWF9DT0RFQ19HQUlOLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEX1JYX0NPREVDX0dBSU4gICAweDAwMDEwQzM4CgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBSeCBjb21tb24gY29kZWMgZ2FpbiBjb250cm9sIG1vZHVsZS4gKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRF9SWF9DT0RFQ19HQUlOIHBhcmFtZXRlcgogKiBpbiB0aGUgUnggQ29kZWMgR2FpbiBDb250cm9sIG1vZHVsZS4KICovCgoKc3RydWN0IGFkbV9yeF9jb2RlY19nYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcnhfY29kZWNfZ2FpbjsKCS8qIExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KCi8qIEBpbmdyb3VwIGF1ZGlvX3BwX21vZHVsZV9pZHMKICogSUQgb2YgdGhlIEhQRiBUdW5pbmcgRmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAtICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0VOQUJMRV9DT05GSUcKICogLSAjQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9QUkVfR0FJTgogKiAtICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0NPTkZJR19QQVJBTVMKICovCiNkZWZpbmUgQURNX01PRFVMRV9JRF9IUEZfSUlSWF9GSUxURVIgICAgMHgwMDAxMEMzRAoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBUeCBIUEYgSUlSIGZpbHRlciBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX0hQRl9JSVJYX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG1faHBmeF9paXJfZmlsdGVyX2VuYWJsZV9jZmd9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfRU5BQkxFX0NPTkZJRy50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfRU5BQkxFX0NPTkZJRyAgIDB4MDAwMTBDM0UKCi8qIElEIG9mIHRoZSBUeCBIUEYgSUlSIGZpbHRlciBwcmVnYWluIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRF9IUEZfSUlSWF9GSUxURVIgbW9kdWxlLgogKiBAcGFyc3BhY2UgTWVzc2FnZSBwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX2hwZnhfaWlyX2ZpbHRlcl9wcmVfZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEX0hQRl9JSVJYX0ZJTFRFUl9QUkVfR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfUFJFX0dBSU4gICAweDAwMDEwQzNGCgovKiBJRCBvZiB0aGUgVHggSFBGIElJUiBmaWx0ZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEX0hQRl9JSVJYX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG1faHBmeF9paXJfZmlsdGVyX2NmZ19wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfQ09ORklHX1BBCiAqIFJBTVMudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0NPTkZJR19QQVJBTVMgIDB4MDAwMTBDNDAKCi8qIFN0cnVjdHVyZSBmb3IgZW5hYmxpbmcgYSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IKICogdGhlIEhQRiBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUgb24gdGhlIFR4IHBhdGguCiAqLwoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0VOQUJMRV9DT05GSUcKICogcGFyYW1ldGVyIGluIHRoZSBUeCBwYXRoIEhQRiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCnN0cnVjdCBhZG1faHBmeF9paXJfZmlsdGVyX2VuYWJsZV9jZmcgewoJdWludDMyX3QgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIEhQRiB0dW5pbmcgZmlsdGVyIGlzIGRpc2FibGVkICgwKSBvcgogKiBlbmFibGVkIChub256ZXJvKS4KICovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgcHJlZ2FpbiBwYXJhbWV0ZXIgZm9yIHRoZSBIUEYKICogSUlSIHR1bmluZyBmaWx0ZXIgbW9kdWxlIG9uIHRoZSBUeCBwYXRoLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRF9IUEZfSUlSWF9GSUxURVJfUFJFX0dBSU4gcGFyYW1ldGVyCiAqIGluIHRoZSBUeCBwYXRoIEhQRiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCnN0cnVjdCBhZG1faHBmeF9paXJfZmlsdGVyX3ByZV9nYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcHJlX2dhaW47CgkvKiBMaW5lYXIgZ2FpbiBpbiBRMTMgZm9ybWF0LiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUKICogSFBGIElJUiB0dW5pbmcgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfSFBGX0lJUlhfRklMVEVSX0NPTkZJR19QQVJBTVMKICogcGFyYW1ldGVycyBpbiB0aGUgVHggcGF0aCBIUEYgVHVuaW5nIEZpbHRlciBtb2R1bGUuIFxuCiAqIFxuCiAqIFRoaXMgc3RydWN0dXJlIGlzIGZvbGxvd2VkIGJ5IHR1bmluZyBmaWx0ZXIgY29lZmZpY2llbnRzIGFzIGZvbGxvd3M6IFxuCiAqIC0gU2VxdWVuY2Ugb2YgaW50MzJfdCBGaWx0ZXJDb2VmZnMuCiAqIEVhY2ggYmFuZCBoYXMgZml2ZSBjb2VmZmljaWVudHMsIGVhY2ggaW4gaW50MzJfdCBmb3JtYXQgaW4gdGhlIG9yZGVyIG9mCiAqIGIwLCBiMSwgYjIsIGExLCBhMi4KICogLSBTZXF1ZW5jZSBvZiBpbnQxNl90IE51bVNoaWZ0RmFjdG9yLgogKiBPbmUgaW50MTZfdCBwZXIgYmFuZC4gVGhlIG51bWVyYXRvciBzaGlmdCBmYWN0b3IgaXMgcmVsYXRlZCB0byB0aGUgUQogKiBmYWN0b3Igb2YgdGhlIGZpbHRlciBjb2VmZmljaWVudHMuCiAqIC0gU2VxdWVuY2Ugb2YgdWludDE2X3QgUGFuU2V0dGluZy4KICogT25lIHVpbnQxNl90IGZvciBlYWNoIGJhbmQgdG8gaW5kaWNhdGUgYXBwbGljYXRpb24gb2YgdGhlIGZpbHRlciB0bwogKiBsZWZ0ICgwKSwgcmlnaHQgKDEpLCBvciBib3RoICgyKSBjaGFubmVscy4KICovCnN0cnVjdCBhZG1faHBmeF9paXJfZmlsdGVyX2NmZ19wYXJhbXMgewoJdWludDE2X3QgICAgICAgICAgICAgICAgICBudW1fYmlxdWFkX3N0YWdlczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAyMAogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCi8qIElEIG9mIHRoZSBUeCBwYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICoJVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKgktICNBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfRU5BQkxFX0NPTkZJRwogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEWF9JSVJfRklMVEVSIDB4MDAwMTBDNDEKCi8qIElEIG9mIHRoZSBSeCBwYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZSBmb3IgdGhlIGxlZnQgY2hhbm5lbC4KICoJVGhlIHBhcmFtZXRlciBJRHMgb2YgdGhlIElJUiB0dW5pbmcgZmlsdGVyIG1vZHVsZQogKgkoI0FTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSKSBhcmUgdXNlZCBmb3IgdGhlIGxlZnQgSUlSIFJ4IHR1bmluZwogKglmaWx0ZXIuCiAqCiAqIFBhbiBwYXJhbWV0ZXJzIGFyZSBub3QgcmVxdWlyZWQgZm9yIHRoaXMgcGVyLWNoYW5uZWwgSUlSIGZpbHRlcjsgdGhlIHBhbgogKiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkIGJ5IHRoaXMgbW9kdWxlLgogKi8KI2RlZmluZSBBRE1fTU9EVUxFX0lEX0xFRlRfSUlSVU5JTkdfRklMVEVSICAgICAgMHgwMDAxMDcwNQoKLyogSUQgb2YgdGhlIHRoZSBSeCBwYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZSBmb3IgdGhlIHJpZ2h0CiAqIGNoYW5uZWwuCiAqIFRoZSBwYXJhbWV0ZXIgSURzIG9mIHRoZSBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUKICogKCNBU01fTU9EVUxFX0lEX0lJUlVOSU5HX0ZJTFRFUikgYXJlIHVzZWQgZm9yIHRoZSByaWdodCBJSVIgUngKICogdHVuaW5nIGZpbHRlci4KICoKICogUGFuIHBhcmFtZXRlcnMgYXJlIG5vdCByZXF1aXJlZCBmb3IgdGhpcyBwZXItY2hhbm5lbCBJSVIgZmlsdGVyOwogKiB0aGUgcGFuIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQgYnkgdGhpcyBtb2R1bGUuCiAqLwojZGVmaW5lIEFETV9NT0RVTEVfSURfUklHSFRfSUlSVU5JTkdfRklMVEVSICAgIDB4MDAwMTA3MDYKCi8qIGVuZF9hZGR0b2dyb3VwIGF1ZGlvX3BwX21vZHVsZV9pZHMgKi8KCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwoKLyogSUQgb2YgdGhlIFR4IElJUiBmaWx0ZXIgZW5hYmxlIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRFhfSUlSX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG14X2lpcl9maWx0ZXJfZW5hYmxlX2NmZ30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0VOQUJMRV9DT05GSUcudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfRU5BQkxFX0NPTkZJRyAgIDB4MDAwMTBDNDIKCi8qIElEIG9mIHRoZSBUeCBJSVIgZmlsdGVyIHByZWdhaW4gcGFyYW1ldGVyIHVzZWQgYnkgdGhlCiAqICNBRE1fTU9EVUxFX0lEWF9JSVJfRklMVEVSIG1vZHVsZS4KICogQHBhcnNwYWNlIE1lc3NhZ2UgcGF5bG9hZAogKiBAc3RydWN0dXJle2FkbXhfaWlyX2ZpbHRlcl9wcmVfZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX1BSRV9HQUlOLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX1BSRV9HQUlOICAgIDB4MDAwMTBDNDMKCi8qIElEIG9mIHRoZSBUeCBJSVIgZmlsdGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQURNX01PRFVMRV9JRFhfSUlSX0ZJTFRFUiBtb2R1bGUuCiAqIEBwYXJzcGFjZSBNZXNzYWdlIHBheWxvYWQKICogQHN0cnVjdHVyZXthZG14X2lpcl9maWx0ZXJfY2ZnX3BhcmFtc30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEWF9JSVJfRklMVEVSX0NPTkZJR19QQVJBTVMudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfQ09ORklHX1BBUkFNUyAgICAgMHgwMDAxMEM0NAoKLyogU3RydWN0dXJlIGZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBJSVIgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRFhfSUlSX0ZJTFRFUl9FTkFCTEVfQ09ORklHCiAqIHBhcmFtZXRlciBpbiB0aGUgVHggUGF0aCBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwoKc3RydWN0IGFkbXhfaWlyX2ZpbHRlcl9lbmFibGVfY2ZnIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgSUlSIHR1bmluZyBmaWx0ZXIgaXMgZGlzYWJsZWQgKDApIG9yCiAqIGVuYWJsZWQgKG5vbnplcm8pLgogKi8KCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgcHJlZ2FpbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBJSVIgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfUFJFX0dBSU4KICogcGFyYW1ldGVyIGluIHRoZSBUeCBQYXRoIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCgpzdHJ1Y3QgYWRteF9paXJfZmlsdGVyX3ByZV9nYWluIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcHJlX2dhaW47CgkvKjwgTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdC4gKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBJSVIgZmlsdGVyIG1vZHVsZSBvbiB0aGUgVHggcGF0aC4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURYX0lJUl9GSUxURVJfQ09ORklHX1BBUkFNUwogKiBwYXJhbWV0ZXIgaW4gdGhlIFR4IFBhdGggSUlSIFR1bmluZyBGaWx0ZXIgbW9kdWxlLiBcbgogKglcbgogKiBUaGlzIHN0cnVjdHVyZSBpcyBmb2xsb3dlZCBieSB0aGUgSFBGIElJUiBmaWx0ZXIgY29lZmZpY2llbnRzIG9uCiAqIHRoZSBUeCBwYXRoIGFzIGZvbGxvd3M6IFxuCiAqIC0gU2VxdWVuY2Ugb2YgaW50MzJfdCB1bEZpbHRlckNvZWZmcy4gRWFjaCBiYW5kIGhhcyBmaXZlCiAqIGNvZWZmaWNpZW50cywgZWFjaCBpbiBpbnQzMl90IGZvcm1hdCBpbiB0aGUgb3JkZXIgb2YgYjAsIGIxLCBiMiwKICogYTEsIGEyLgogKiAtIFNlcXVlbmNlIG9mIGludDE2X3Qgc051bVNoaWZ0RmFjdG9yLiBPbmUgaW50MTZfdCBwZXIgYmFuZC4gVGhlCiAqIG51bWVyYXRvciBzaGlmdCBmYWN0b3IgaXMgcmVsYXRlZCB0byB0aGUgUSBmYWN0b3Igb2YgdGhlIGZpbHRlcgogKiBjb2VmZmljaWVudHMuCiAqIC0gU2VxdWVuY2Ugb2YgdWludDE2X3QgdXNQYW5TZXR0aW5nLiBPbmUgdWludDE2X3QgZm9yIGVhY2ggYmFuZAogKiB0byBpbmRpY2F0ZSBpZiB0aGUgZmlsdGVyIGlzIGFwcGxpZWQgdG8gbGVmdCAoMCksIHJpZ2h0ICgxKSwgb3IKICogYm90aCAoMikgY2hhbm5lbHMuCiAqLwpzdHJ1Y3QgYWRteF9paXJfZmlsdGVyX2NmZ19wYXJhbXMgewoJdWludDE2X3QgICAgICAgICAgICAgICAgICBudW1fYmlxdWFkX3N0YWdlczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAyMAogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCgovKiBAaW5ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzCiAqCUlEIG9mIHRoZSBRRW5zZW1ibGUgbW9kdWxlLgogKglUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqCS0gI0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfRU5BQkxFCiAqCS0gI0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfQkFDS0dBSU4KICoJLSAjQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9TRVRfTkVXX0FOR0xFCiAqLwojZGVmaW5lIEFETV9NT0RVTEVfSURfUUVOU0VNQkxFICAgIDB4MDAwMTBDNTkKCi8qIEBhZGR0b2dyb3VwIGF1ZGlvX3BwX3BhcmFtX2lkcyAqLwovKiBJRCBvZiB0aGUgUUVuc2VtYmxlIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUUVOU0VNQkxFIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3FlbnNlbWJsZV9lbmFibGV9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfRU5BQkxFLnRleH0KICovCiNkZWZpbmUgQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9FTkFCTEUgICAweDAwMDEwQzYwCgovKiBJRCBvZiB0aGUgUUVuc2VtYmxlIGJhY2sgZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUUVOU0VNQkxFIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3FlbnNlbWJsZV9wYXJhbV9iYWNrZ2Fpbn0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQURNX1BBUkFNX0lEX1FFTlNFTUJMRV9CQUNLR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFETV9QQVJBTV9JRF9RRU5TRU1CTEVfQkFDS0dBSU4gICAweDAwMDEwQzYxCgovKiBJRCBvZiB0aGUgUUVuc2VtYmxlIG5ldyBhbmdsZSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FETV9NT0RVTEVfSURfUUVOU0VNQkxFIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YWRtX3FlbnNlbWJsZV9wYXJhbV9zZXRfbmV3X2FuZ2xlfQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BRE1fUEFSQU1fSURfUUVOU0VNQkxFX1NFVF9ORVdfQU5HTEUudGV4fQogKi8KI2RlZmluZSBBRE1fUEFSQU1fSURfUUVOU0VNQkxFX1NFVF9ORVdfQU5HTEUgICAgMHgwMDAxMEM2MgoKLyogU3RydWN0dXJlIGZvciBlbmFibGluZyB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIHRoZQogKiBRRW5zZW1ibGUgbW9kdWxlLgogKi8KCgovKiBAYnJpZWYgUGF5bG9hZCBvZiB0aGUgI0FETV9QQVJBTV9JRF9RRU5TRU1CTEVfRU5BQkxFCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBRRW5zZW1ibGUgbW9kdWxlLgogKi8Kc3RydWN0IGFkbV9xZW5zZW1ibGVfZW5hYmxlIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgUUVuc2VtYmxlIG1vZHVsZSBpcyBkaXNhYmxlZCAoMCkgb3IgZW5hYmxlZAogKiAobm9uemVybykuCiAqLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIGJhY2tncm91bmQgZ2FpbiBmb3IgdGhlIFFFbnNlbWJsZSBtb2R1bGUuICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfUUVOU0VNQkxFX0JBQ0tHQUlOCiAqIHBhcmFtZXRlciB1c2VkIGJ5CiAqIHRoZSBRRW5zZW1ibGUgbW9kdWxlLgogKi8Kc3RydWN0IGFkbV9xZW5zZW1ibGVfcGFyYW1fYmFja2dhaW4gewoJaW50MTZfdCAgICAgICAgICAgICAgICAgIGJhY2tfZ2FpbjsKLyo8IExpbmVhciBnYWluIGluIFExNSBmb3JtYXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMzI3NjcKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgIHJlc2VydmVkOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiovCn0gX19wYWNrZWQ7Ci8qIFN0cnVjdHVyZSBmb3Igc2V0dGluZyBhIG5ldyBhbmdsZSBmb3IgdGhlIFFFbnNlbWJsZSBtb2R1bGUuICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBRE1fUEFSQU1fSURfUUVOU0VNQkxFX1NFVF9ORVdfQU5HTEUKICogcGFyYW1ldGVyIHVzZWQKICogYnkgdGhlIFFFbnNlbWJsZSBtb2R1bGUuCiAqLwpzdHJ1Y3QgYWRtX3FlbnNlbWJsZV9wYXJhbV9zZXRfbmV3X2FuZ2xlIHsKCWludDE2X3QgICAgICAgICAgICAgICAgICAgIG5ld19hbmdsZTsKLyo8IE5ldyBhbmdsZSBpbiBkZWdyZWVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDM1OQogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgICB0aW1lX21zOwovKjwgVHJhbnNpdGlvbiB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byBzZXQgdGhlIG5ldyBhbmdsZS4KICogU3VwcG9ydGVkIHZhbHVlczogMCB0byAzMjc2NwogKi8KfSBfX3BhY2tlZDsKCgojZGVmaW5lIEFETV9DTURfR0VUX1BQX1RPUE9fTU9EVUxFX0xJU1QJCQkJMHgwMDAxMDM0OQojZGVmaW5lIEFETV9DTURSU1BfR0VUX1BQX1RPUE9fTU9EVUxFX0xJU1QJCQkweDAwMDEwMzUwCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FTkFCTEUJCQkJCTB4MDAwMTA5MDQKIC8qCiAgKiBQYXlsb2FkIG9mIHRoZSBBRE1fQ01EX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUIGNvbW1hbmQuCiAgKi8Kc3RydWN0IGFkbV9jbWRfZ2V0X3BwX3RvcG9fbW9kdWxlX2xpc3RfdCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9sc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IHBhcmFtZXRlciBkYXRhIHBheWxvYWQgYWRkcmVzcy4KCSAqCgkgKgoJICogVGhlIHNpemUgb2YgdGhlIHNoYXJlZCBtZW1vcnksIGlmIHNwZWNpZmllZCwgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8KCSAqIGNvbnRhaW4gdGhlIGVudGlyZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkLCBpbmNsdWRpbmcgdGhlIG1vZHVsZSBJRCwKCSAqIHBhcmFtZXRlciBJRCwgcGFyYW1ldGVyIHNpemUsIGFuZCBwYXJhbWV0ZXIgdmFsdWVzLgoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKCS8qCgkgKiAgVW5pcXVlIGlkZW50aWZpZXIgZm9yIGFuIGFkZHJlc3MuCgkgKgoJICogVGhpcyBtZW1vcnkgbWFwIGhhbmRsZSBpcyByZXR1cm5lZCBieSB0aGUgYURTUCB0aHJvdWdoIHRoZQoJICogI0FETV9DTURfU0hBUkVEX01FTV9NQVBfUkVHSU9OUyBjb21tYW5kLgoJICoKCSAqIEB2YWx1ZXMKCSAqIC0gTm9uLU5VTEwgLS0gT24gYWNrbm93bGVkZ21lbnQsIHRoZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBiZWdpbiBhdAoJICogdGhlIGFkZHJlc3Mgc3BlY2lmaWVkIChvdXQtb2YtYmFuZCkKCSAqIC0gTlVMTCAtLSBUaGUgYWNrbm93bGVkZ21lbnQncyBwYXlsb2FkIGNvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgZGF0YQoJICogKGluLWJhbmQpIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyoKCSAqIE1heGltdW0gZGF0YSBzaXplIG9mIHRoZSBsaXN0IG9mIG1vZHVsZXMuIFRoaXMKCSAqIGZpZWxkIGlzIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBwYXJhbV9tYXhfc2l6ZTsKCS8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgovKgogKiBQYXlsb2FkIG9mIHRoZSBBRE1fQ01EUlNQX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUIG1lc3NhZ2UsIHdoaWNoIHJldHVybnMKICogbW9kdWxlIGlkcyBpbiByZXNwb25zZSB0byBhbiBBRE1fQ01EX0dFVF9QUF9UT1BPX01PRFVMRV9MSVNUIGNvbW1hbmQuCiAqIEltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGlzIHN0cnVjdHVyZSBpcyB0aGUgYWNrbm93bGVkZ21lbnQgPGI+bW9kdWxlIGlkCiAqIGRhdGEgdmFyaWFibGUgcGF5bG9hZDwvYj4gY29udGFpbmluZyB0aGUgcHJlL3Bvc3Rwcm9jZXNzaW5nIG1vZHVsZSBpZAogKiB2YWx1ZXMuIEZvciBhbiBpbi1iYW5kIHNjZW5hcmlvLCB0aGUgdmFyaWFibGUgcGF5bG9hZCBkZXBlbmRzIG9uIHRoZSBzaXplCiAqIG9mIHRoZSBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWRtX2NtZF9yc3BfZ2V0X3BwX3RvcG9fbW9kdWxlX2xpc3RfdCB7CgkvKiBTdGF0dXMgbWVzc2FnZSAoZXJyb3IgY29kZSkuICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHN0YXR1czsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhdWRwcm9jX3RvcG9sb2d5X21vZHVsZV9pZF9pbmZvX3QgewoJdWludDMyX3QJbnVtX21vZHVsZXM7Cn0gX19wYWNrZWQ7CgovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzICovCgovKiBAaW5ncm91cCBhdWRpb19wcF9tb2R1bGVfaWRzCiAqIElEIG9mIHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUgcHJlL3Bvc3Rwcm9jZXNzaW5nIGJsb2NrLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTgogKiAtICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX0dBSU4KICogLSAjQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHCiAqIC0gI0FTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTCiAqIC0gI0FTTV9QQVJBTV9JRF9TT0ZUX1BBVVNFX1BBUkFNRVRFUlMKICogLSAjQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9HQUlOCiAqIC0gI0FTTV9QQVJBTV9JRF9NVUxUSUNIQU5ORUxfTVVURQogKi8KI2RlZmluZSBBU01fTU9EVUxFX0lEX1ZPTF9DVFJMICAgMHgwMDAxMEJGRQojZGVmaW5lIEFTTV9NT0RVTEVfSURfVk9MX0NUUkwyICAweDAwMDEwOTEwCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfVk9MX0NUUkwgQVNNX01PRFVMRV9JRF9WT0xfQ1RSTAoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBtYXN0ZXIgZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUgI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwKICogbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthc21fdm9sdW1lX2N0cmxfbWFzdGVyX2dhaW59CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTi50ZXh9CiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTiAgICAweDAwMDEwQkZGCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9WT0xfQ1RSTF9NQVNURVJfR0FJTiBBU01fUEFSQU1fSURfVk9MX0NUUkxfTUFTVEVSX0dBSU4KCi8qIElEIG9mIHRoZSBsZWZ0L3JpZ2h0IGNoYW5uZWwgZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwgbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthc21fdm9sdW1lX2N0cmxfbHJfY2hhbl9nYWlufQogKiBAdGFibGVzcGFjZQogKiBAaW5wdXR0YWJsZXtBdWRpb19Qb3N0cHJvY19BU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX0dBSU4udGV4fQogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfVk9MX0NUUkxfTFJfQ0hBTk5FTF9HQUlOICAgICAweDAwMDEwQzAwCgovKiBJRCBvZiB0aGUgbXV0ZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9WT0xfQ1RSTCBtb2R1bGUuCiAqIEBtZXNzYWdlcGF5bG9hZAogKiBAc3RydWN0dXJle2FzbV92b2x1bWVfY3RybF9tdXRlX2NvbmZpZ30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHLnRleH0KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHICAgMHgwMDAxMEMwMQoKLyogSUQgb2YgdGhlIHNvZnQgc3RlcHBpbmcgdm9sdW1lIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfVk9MX0NUUkwgbW9kdWxlLgogKiBAbWVzc2FnZXBheWxvYWQKICogQHN0cnVjdHVyZXthc21fc29mdF9zdGVwX3ZvbHVtZV9wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVUCiAqIEVSUy50ZXh9CiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTICAweDAwMDEwQzI5CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9TT0ZUX1ZPTF9TVEVQUElOR19QQVJBTUVURVJTXAoJCQlBU01fUEFSQU1fSURfU09GVF9WT0xfU1RFUFBJTkdfUEFSQU1FVEVSUwoKLyogSUQgb2YgdGhlIHNvZnQgcGF1c2UgcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSAjQVNNX01PRFVMRV9JRF9WT0xfQ1RSTAogKiBtb2R1bGUuCiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9TT0ZUX1BBVVNFX1BBUkFNRVRFUlMgICAweDAwMDEwRDZBCgovKiBJRCBvZiB0aGUgbXVsdGlwbGUtY2hhbm5lbCB2b2x1bWUgY29udHJvbCBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX1ZPTF9DVFJMIG1vZHVsZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX01VTFRJQ0hBTk5FTF9HQUlOICAweDAwMDEwNzEzCgovKiBJRCBvZiB0aGUgbXVsdGlwbGUtY2hhbm5lbCBtdXRlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9WT0xfQ1RSTCBtb2R1bGUuCiAqLwoKI2RlZmluZSBBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX01VVEUgIDB4MDAwMTA3MTQKCi8qIFN0cnVjdHVyZSBmb3IgdGhlIG1hc3RlciBnYWluIHBhcmFtZXRlciBmb3IgYSB2b2x1bWUgY29udHJvbAogKiBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01BU1RFUl9HQUlOCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX21hc3Rlcl9nYWluIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBtYXN0ZXJfZ2FpbjsKCS8qIExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwp9IF9fcGFja2VkOwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfbHJfY2hhbl9nYWluIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbF9jaGFuX2dhaW47CgkvKjwgTGluZWFyIGdhaW4gaW4gUTEzIGZvcm1hdCBmb3IgdGhlIGxlZnQgY2hhbm5lbC4gKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHJfY2hhbl9nYWluOwoJLyo8IExpbmVhciBnYWluIGluIFExMyBmb3JtYXQgZm9yIHRoZSByaWdodCBjaGFubmVsLiovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciB0aGUgbXV0ZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBmb3IgYQogKiB2b2x1bWUgY29udHJvbCBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1ZPTF9DVFJMX01VVEVfQ09ORklHCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfbXV0ZV9jb25maWcgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG11dGVfZmxhZzsKLyo8IFNwZWNpZmllcyB3aGV0aGVyIG11dGUgaXMgZGlzYWJsZWQgKDApIG9yIGVuYWJsZWQgKG5vbnplcm8pLiovCgp9IF9fcGFja2VkOwoKLyoKICogU3VwcG9ydGVkIHBhcmFtZXRlcnMgZm9yIGEgc29mdCBzdGVwcGluZyBsaW5lYXIgcmFtcGluZyBjdXJ2ZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTElORUFSICAwCgovKgogKiBFeHBvbmVudGlhbCByYW1waW5nIGN1cnZlLgogKi8KI2RlZmluZSBBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9FWFAgICAgMQoKLyoKICogTG9nYXJpdGhtaWMgcmFtcGluZyBjdXJ2ZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTE9HICAgIDIKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBzb2Z0IHN0ZXBwaW5nIHZvbHVtZSBwYXJhbWV0ZXJzLiAqLwoKCi8qICBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1NPRlRfVk9MX1NURVBQSU5HX1BBUkFNRVRFUlMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwpzdHJ1Y3QgYXNtX3NvZnRfc3RlcF92b2x1bWVfcGFyYW1zIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBwZXJpb2Q7Ci8qPCBQZXJpb2QgaW4gbWlsbGlzZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgc3RlcDsKLyo8IFN0ZXAgaW4gbWljcm9zZWNvbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDE1MDAwMDAwCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcmFtcGluZ19jdXJ2ZTsKLyo8IFJhbXBpbmcgY3VydmUgdHlwZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTElORUFSCiAqIC0gI0FTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0VYUAogKiAtICNBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9MT0cKICovCn0gX19wYWNrZWQ7CgoKLyogU3RydWN0dXJlIGZvciBob2xkaW5nIHNvZnQgcGF1c2UgcGFyYW1ldGVycy4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX1NPRlRfUEFVU0VfUEFSQU1FVEVSUwogKiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIFZvbHVtZSBDb250cm9sIG1vZHVsZS4KICovCgoKc3RydWN0IGFzbV9zb2Z0X3BhdXNlX3BhcmFtcyB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBzb2Z0IHBhdXNlIGlzIGRpc2FibGVkICgwKSBvciBlbmFibGVkCiAqIChub256ZXJvKS4KICovCgoKCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHBlcmlvZDsKLyo8IFBlcmlvZCBpbiBtaWxsaXNlY29uZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMTUwMDAKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBzdGVwOwovKjwgU3RlcCBpbiBtaWNyb3NlY29uZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMTUwMDAwMDAKICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICByYW1waW5nX2N1cnZlOwovKjwgUmFtcGluZyBjdXJ2ZS4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjQVNNX1BBUkFNX1NWQ19SQU1QSU5HQ1VSVkVfTElORUFSCiAqIC0gI0FTTV9QQVJBTV9TVkNfUkFNUElOR0NVUlZFX0VYUAogKiAtICNBU01fUEFSQU1fU1ZDX1JBTVBJTkdDVVJWRV9MT0cKICovCn0gX19wYWNrZWQ7CgoKLyogTWF4aW11bSBudW1iZXIgb2YgY2hhbm5lbHMuKi8KI2RlZmluZSBWT0xVTUVfQ09OVFJPTF9NQVhfQ0hBTk5FTFMgICAgICAgICAgICAgICAgICAgICAgIDgKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBvbmUgY2hhbm5lbCB0eXBlIC0gZ2FpbiBwYWlyLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX0dBSU4gY2hhbm5lbAogKiB0eXBlL2dhaW4gcGFpcnMgdXNlZCBieSB0aGUgVm9sdW1lIENvbnRyb2wgbW9kdWxlLiBcbiBcbiBUaGlzCiAqIHN0cnVjdHVyZSBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZQogKiBhc21fdm9sdW1lX2N0cmxfbXVsdGljaGFubmVsX2dhaW4gc3RydWN0dXJlLgogKi8KCgpzdHJ1Y3QgYXNtX3ZvbHVtZV9jdHJsX2NoYW5uZWx0eXBlX2dhaW5fcGFpciB7Cgl1aW50OF90ICAgICAgICAgICAgICAgICAgIGNoYW5uZWx0eXBlOwoJLyoKCSAqIENoYW5uZWwgdHlwZSBmb3Igd2hpY2ggdGhlIGdhaW4gc2V0dGluZyBpcyB0byBiZSBhcHBsaWVkLgoJICogU3VwcG9ydGVkIHZhbHVlczoKCSAqIC0gI1BDTV9DSEFOTkVMX0wKCSAqIC0gI1BDTV9DSEFOTkVMX1IKCSAqIC0gI1BDTV9DSEFOTkVMX0MKCSAqIC0gI1BDTV9DSEFOTkVMX0xTCgkgKiAtICNQQ01fQ0hBTk5FTF9SUwoJICogLSAjUENNX0NIQU5ORUxfTEZFCgkgKiAtICNQQ01fQ0hBTk5FTF9DUwoJICogLSAjUENNX0NIQU5ORUxfTEIKCSAqIC0gI1BDTV9DSEFOTkVMX1JCCgkgKiAtICNQQ01fQ0hBTk5FTFMKCSAqIC0gI1BDTV9DSEFOTkVMX0NWSAoJICogLSAjUENNX0NIQU5ORUxfTVMKCSAqIC0gI1BDTV9DSEFOTkVMX0ZMQwoJICogLSAjUENNX0NIQU5ORUxfRlJDCgkgKiAtICNQQ01fQ0hBTk5FTF9STEMKCSAqIC0gI1BDTV9DSEFOTkVMX1JSQwoJICovCgoJdWludDhfdCAgICAgICAgICAgICAgICAgICByZXNlcnZlZDE7CgkvKiBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCgl1aW50OF90ICAgICAgICAgICAgICAgICAgIHJlc2VydmVkMjsKCS8qIENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzOwoJLyogQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBnYWluOwoJLyoKCSAqIEdhaW4gdmFsdWUgZm9yIHRoaXMgY2hhbm5lbCBpbiBRMjggZm9ybWF0LgoJICogU3VwcG9ydGVkIHZhbHVlczogQW55CgkgKi8KfSBfX3BhY2tlZDsKCgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBtdWx0aWNoYW5uZWwgZ2FpbiBjb21tYW5kICovCgoKLyogUGF5bG9hZCBvZiB0aGUgI0FTTV9QQVJBTV9JRF9NVUxUSUNIQU5ORUxfR0FJTgogKiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIFZvbHVtZSBDb250cm9sIG1vZHVsZS4KICovCgoKc3RydWN0IGFzbV92b2x1bWVfY3RybF9tdWx0aWNoYW5uZWxfZ2FpbiB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgbnVtX2NoYW5uZWxzOwoJLyoKCSAqIE51bWJlciBvZiBjaGFubmVscyBmb3Igd2hpY2ggZ2FpbiB2YWx1ZXMgYXJlIHByb3ZpZGVkLiBBbnkKCSAqIGNoYW5uZWxzIHByZXNlbnQgaW4gdGhlIGRhdGEgZm9yIHdoaWNoIGdhaW4gaXMgbm90IHByb3ZpZGVkIGFyZQoJICogc2V0IHRvIHVuaXR5IGdhaW4uCgkgKiBTdXBwb3J0ZWQgdmFsdWVzOiAxIHRvIDgKCSAqLwoKCXN0cnVjdCBhc21fdm9sdW1lX2N0cmxfY2hhbm5lbHR5cGVfZ2Fpbl9wYWlyCgkJZ2Fpbl9kYXRhW1ZPTFVNRV9DT05UUk9MX01BWF9DSEFOTkVMU107CgkvKiBBcnJheSBvZiBjaGFubmVsIHR5cGUvZ2FpbiBwYWlycy4qLwp9IF9fcGFja2VkOwoKCi8qIFN0cnVjdHVyZSBmb3IgaG9sZGluZyBvbmUgY2hhbm5lbCB0eXBlIC0gbXV0ZSBwYWlyLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX01VVEUgY2hhbm5lbAogKiB0eXBlL211dGUgc2V0dGluZyBwYWlycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuIFxuIFxuCiAqIFRoaXMgc3RydWN0dXJlIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlCiAqIGFzbV92b2x1bWVfY3RybF9tdWx0aWNoYW5uZWxfbXV0ZSBzdHJ1Y3R1cmUuCiAqLwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfY2hhbm5lbHlwZV9tdXRlX3BhaXIgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50OF90ICAgICAgICAgICAgICAgICAgIGNoYW5uZWx5cGU7Ci8qPCBDaGFubmVsIHR5cGUgZm9yIHdoaWNoIHRoZSBtdXRlIHNldHRpbmcgaXMgdG8gYmUgYXBwbGllZC4KICogU3VwcG9ydGVkIHZhbHVlczoKICogLSAjUENNX0NIQU5ORUxfTAogKiAtICNQQ01fQ0hBTk5FTF9SCiAqIC0gI1BDTV9DSEFOTkVMX0MKICogLSAjUENNX0NIQU5ORUxfTFMKICogLSAjUENNX0NIQU5ORUxfUlMKICogLSAjUENNX0NIQU5ORUxfTEZFCiAqIC0gI1BDTV9DSEFOTkVMX0NTCiAqIC0gI1BDTV9DSEFOTkVMX0xCCiAqIC0gI1BDTV9DSEFOTkVMX1JCCiAqIC0gI1BDTV9DSEFOTkVMUwogKiAtICNQQ01fQ0hBTk5FTF9DVkgKICogLSAjUENNX0NIQU5ORUxfTVMKICogLSAjUENNX0NIQU5ORUxfRkxDCiAqIC0gI1BDTV9DSEFOTkVMX0ZSQwogKiAtICNQQ01fQ0hBTk5FTF9STEMKICogLSAjUENNX0NIQU5ORUxfUlJDCiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQ4X3QgICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQzOwoJLyo8IENsaWVudHMgbXVzdCBzZXQgdGhpcyBmaWVsZCB0byB6ZXJvLiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgbXV0ZTsKLyo8IE11dGUgc2V0dGluZyBmb3IgdGhpcyBjaGFubmVsLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgPSBVbm11dGUKICogLSBOb256ZXJvID0gTXV0ZQogKi8KfSBfX3BhY2tlZDsKCgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBtdWx0aWNoYW5uZWwgbXV0ZSBjb21tYW5kICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTVVMVElDSEFOTkVMX01VVEUKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBWb2x1bWUgQ29udHJvbCBtb2R1bGUuCiAqLwoKCnN0cnVjdCBhc21fdm9sdW1lX2N0cmxfbXVsdGljaGFubmVsX211dGUgewoJc3RydWN0IGFwcl9oZHIJaGRyOwoJc3RydWN0IGFzbV9zdHJlYW1fY21kX3NldF9wcF9wYXJhbXNfdjIgcGFyYW07CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIGRhdGE7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG51bV9jaGFubmVsczsKLyo8IE51bWJlciBvZiBjaGFubmVscyBmb3Igd2hpY2ggbXV0ZSBjb25maWd1cmF0aW9uIGlzCiAqIHByb3ZpZGVkLiBBbnkgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGUgZGF0YSBmb3Igd2hpY2ggbXV0ZQogKiBjb25maWd1cmF0aW9uIGlzIG5vdCBwcm92aWRlZCBhcmUgc2V0IHRvIHVubXV0ZS4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA4CiAqLwoKc3RydWN0IGFzbV92b2x1bWVfY3RybF9jaGFubmVseXBlX211dGVfcGFpcgoJCQkJbXV0ZV9kYXRhW1ZPTFVNRV9DT05UUk9MX01BWF9DSEFOTkVMU107CgkvKjwgQXJyYXkgb2YgY2hhbm5lbCB0eXBlL211dGUgc2V0dGluZyBwYWlycy4qLwp9IF9fcGFja2VkOwovKiBlbmRfYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KCi8qIGF1ZGlvX3BwX21vZHVsZV9pZHMKICogSUQgb2YgdGhlIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAtICNBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0VOQUJMRV9DT05GSUcKICogLSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9QUkVfR0FJTgogKiAtICNBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0NPTkZJR19QQVJBTVMKICovCiNkZWZpbmUgQVNNX01PRFVMRV9JRF9JSVJVTklOR19GSUxURVIgICAweDAwMDEwQzAyCgovKiBAYWRkdG9ncm91cCBhdWRpb19wcF9wYXJhbV9pZHMgKi8KLyogSUQgb2YgdGhlIElJUiB0dW5pbmcgZmlsdGVyIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX2lpcnVuaW5nX2ZpbHRlcl9lbmFibGV9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9JSVJVTklOR19GSUxURVJfRU5BQkxFX0NPCiAqIE5GSUcudGV4fQogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0VOQUJMRV9DT05GSUcgICAweDAwMDEwQzAzCgovKiBJRCBvZiB0aGUgSUlSIHR1bmluZyBmaWx0ZXIgcHJlZ2FpbiBwYXJhbWV0ZXIgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfSUlSVU5JTkdfRklMVEVSIG1vZHVsZS4KICovCiNkZWZpbmUgQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9QUkVfR0FJTiAgMHgwMDAxMEMwNAoKLyogSUQgb2YgdGhlIElJUiB0dW5pbmcgZmlsdGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB1c2VkIGJ5IHRoZQogKiAjQVNNX01PRFVMRV9JRF9JSVJVTklOR19GSUxURVIgbW9kdWxlLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0NPTkZJR19QQVJBTVMgIDB4MDAwMTBDMDUKCi8qIFN0cnVjdHVyZSBmb3IgYW4gZW5hYmxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciBhbgogKiBJSVIgdHVuaW5nIGZpbHRlciBtb2R1bGUuCiAqLwoKCi8qIEBicmllZiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9FTkFCTEVfQ09ORklHCiAqIHBhcmFtZXRlciB1c2VkIGJ5IHRoZSBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuCiAqLwpzdHJ1Y3QgYXNtX2lpcnVuaW5nX2ZpbHRlcl9lbmFibGUgewoJdWludDMyX3QgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZzsKLyo8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBJSVIgdHVuaW5nIGZpbHRlciBpcyBkaXNhYmxlZCAoMCkgb3IKICogZW5hYmxlZCAoMSkuCiAqLwp9IF9fcGFja2VkOwoKLyogU3RydWN0dXJlIGZvciB0aGUgcHJlZ2FpbiBwYXJhbWV0ZXIgZm9yIGFuIElJUiB0dW5pbmcgZmlsdGVyIG1vZHVsZS4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX0lJUlVOSU5HX0ZJTFRFUl9QUkVfR0FJTgogKiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlIElJUiBUdW5pbmcgRmlsdGVyIG1vZHVsZS4KICovCnN0cnVjdCBhc21faWlydW5pbmdfZmlsdGVyX3ByZWdhaW4gewoJdWludDE2X3QgICAgICAgICAgICAgICAgICBwcmVnYWluOwoJLyo8IExpbmVhciBnYWluIGluIFExMyBmb3JtYXQuICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogU3RydWN0dXJlIGZvciB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgZm9yIGFuIElJUiB0dW5pbmcgZmlsdGVyCiAqIG1vZHVsZS4KICovCgoKLyogQGJyaWVmIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfSUlSVU5JTkdfRklMVEVSX0NPTkZJR19QQVJBTVMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBJSVIgVHVuaW5nIEZpbHRlciBtb2R1bGUuIFxuCiAqIFxuCiAqIFRoaXMgc3RydWN0dXJlIGlzIGZvbGxvd2VkIGJ5IHRoZSBJSVIgZmlsdGVyIGNvZWZmaWNpZW50czogXG4KICogLSBTZXF1ZW5jZSBvZiBpbnQzMl90IEZpbHRlckNvZWZmcyBcbgogKiBGaXZlIGNvZWZmaWNpZW50cyBmb3IgZWFjaCBiYW5kLiBFYWNoIGNvZWZmaWNpZW50IGlzIGluIGludDMyX3QgZm9ybWF0LCBpbgogKiB0aGUgb3JkZXIgb2YgYjAsIGIxLCBiMiwgYTEsIGEyLgogKiAtIFNlcXVlbmNlIG9mIGludDE2X3QgTnVtU2hpZnRGYWN0b3IgXG4KICogT25lIGludDE2X3QgcGVyIGJhbmQuIFRoZSBudW1lcmF0b3Igc2hpZnQgZmFjdG9yIGlzIHJlbGF0ZWQgdG8gdGhlIFEKICogZmFjdG9yIG9mIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzLgogKiAtIFNlcXVlbmNlIG9mIHVpbnQxNl90IFBhblNldHRpbmcgXG4KICogT25lIHVpbnQxNl90IHBlciBiYW5kLCBpbmRpY2F0aW5nIGlmIHRoZSBmaWx0ZXIgaXMgYXBwbGllZCB0byBsZWZ0ICgwKSwKICogcmlnaHQgKDEpLCBvciBib3RoICgyKSBjaGFubmVscy4KICovCnN0cnVjdCBhc21faWlyX2ZpbHRlcl9jb25maWdfcGFyYW1zIHsKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgbnVtX2JpcXVhZF9zdGFnZXM7Ci8qPCBOdW1iZXIgb2YgYmFuZHMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMjAKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4qLwp9IF9fcGFja2VkOwoKLyogYXVkaW9fcHBfbW9kdWxlX2lkcwogKiBJRCBvZiB0aGUgTXVsdGliYW5kIER5bmFtaWMgUmFuZ2UgQ29udHJvbCAoTUJEUkMpIG1vZHVsZSBvbiB0aGUgVHgvUngKICogcGF0aHMuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0VOQUJMRQogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUwogKi8KI2RlZmluZSBBU01fTU9EVUxFX0lEX01CRFJDICAgMHgwMDAxMEMwNgoKLyogYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBNQkRSQyBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkgdGhlICNBU01fTU9EVUxFX0lEX01CRFJDIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX21iZHJjX2VuYWJsZX0KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQVNNX1BBUkFNX0lEX01CRFJDX0VOQUJMRS50ZXh9CiAqLwojZGVmaW5lIEFTTV9QQVJBTV9JRF9NQkRSQ19FTkFCTEUgICAweDAwMDEwQzA3CgovKiBJRCBvZiB0aGUgTUJEUkMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHVzZWQgYnkgdGhlCiAqICNBU01fTU9EVUxFX0lEX01CRFJDIG1vZHVsZS4KICogQG1lc3NhZ2VwYXlsb2FkCiAqIEBzdHJ1Y3R1cmV7YXNtX21iZHJjX2NvbmZpZ19wYXJhbXN9CiAqIEB0YWJsZXNwYWNlCiAqIEBpbnB1dHRhYmxle0F1ZGlvX1Bvc3Rwcm9jX0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TLnRleH0KICoKICogQHBhcnNwYWNlIFN1Yi1iYW5kIERSQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKICogQHN0cnVjdHVyZXthc21fc3ViYmFuZF9kcmNfY29uZmlnX3BhcmFtc30KICogQHRhYmxlc3BhY2UKICogQGlucHV0dGFibGV7QXVkaW9fUG9zdHByb2NfQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVNfc3ViYmFuZF9EUkMudGV4fQogKgogKiBAa2VlcHs2fQogKiBUbyBvYnRhaW4gbGVnYWN5IEFEUkMgZnJvbSBNQkRSQywgdXNlIHRoZSBjYWxpYnJhdGlvbiB0b29sIHRvOgogKgogKiAtIEVuYWJsZSBNQkRSQyAoRW5hYmxlRmxhZyA9IFRSVUUpCiAqIC0gU2V0IG51bWJlciBvZiBiYW5kcyB0byAxICh1aU51bUJhbmRzID0gMSkKICogLSBFbmFibGUgdGhlIGZpcnN0IE1CRFJDIGJhbmQgKERyY01vZGVbMF0gPSBEUkNfRU5BQkxFRCA9IDEpCiAqIC0gQ2xlYXIgdGhlIGZpcnN0IGJhbmQgbXV0ZSBmbGFnIChNdXRlRmxhZ1swXSA9IDApCiAqIC0gU2V0IHRoZSBmaXJzdCBiYW5kIG1ha2V1cCBnYWluIHRvIHVuaXR5IChjb21wTWFrZVVwR2FpblswXSA9IDB4MjAwMCkKICogLSBVc2UgdGhlIGxlZ2FjeSBBRFJDIHBhcmFtZXRlcnMgdG8gY2FsaWJyYXRlIHRoZSByZXN0IG9mIHRoZSBNQkRSQwogKiBwYXJhbWV0ZXJzLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUyAgMHgwMDAxMEMwOAoKLyogZW5kX2FkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCgovKiBhdWRpb19wcF9tb2R1bGVfaWRzCiAqIElEIG9mIHRoZSBNTUJEUkMgbW9kdWxlIHZlcnNpb24gMiBwcmUvcG9zdHByb2Nlc3NpbmcgYmxvY2suCiAqIFRoaXMgbW9kdWxlIGRpZmZlcnMgZnJvbSB0aGUgb3JpZ2luYWwgTUJEUkMgKCNBU01fTU9EVUxFX0lEX01CRFJDKSBpbgogKiB0aGUgbGVuZ3RoIG9mIHRoZSBmaWx0ZXJzIHVzZWQgaW4gZWFjaCBzdWItYmFuZC4KICogVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXIgSUQ6CiAqIC0gI0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TX0lNUFJPVkVEX0ZJTFRCQU5LX1YyCiAqLwojZGVmaW5lIEFTTV9NT0RVTEVfSURfTUJEUkNWMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDcwQgoKLyogQGFkZHRvZ3JvdXAgYXVkaW9fcHBfcGFyYW1faWRzICovCi8qIElEIG9mIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgdXNlZCBieSB0aGUKICogI0FTTV9NT0RVTEVfSURfTUJEUkNWMiBtb2R1bGUgZm9yIHRoZSBpbXByb3ZlZCBmaWx0ZXIgc3RydWN0dXJlCiAqIG9mIHRoZSBNQkRSQyB2MiBwcmUvcG9zdHByb2Nlc3NpbmcgYmxvY2suCiAqIFRoZSB1cGRhdGUgdG8gdGhpcyBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmcm9tIHRoZSBvcmlnaW5hbAogKiBNQkRSQyBpcyB0aGUgbnVtYmVyIG9mIGZpbHRlciBjb2VmZmljaWVudHMgaW4gdGhlIGZpbHRlcgogKiBzdHJ1Y3R1cmUuIFRoZSBzZXF1ZW5jZSBmb3IgaXMgYXMgZm9sbG93czoKICogLSAxIGJhbmQgPSAwIEZJUiBjb2VmZmljaWVudCArIDEgbXV0ZSBmbGFnICsgdWludDE2X3QgcGFkZGluZwogKiAtIDIgYmFuZHMgPSAxNDEgRklSIGNvZWZmaWNpZW50cyArIDIgbXV0ZSBmbGFncyArIHVpbnQxNl90IHBhZGRpbmcKICogLSAzIGJhbmRzID0gMTQxKzgxIEZJUiBjb2VmZmljaWVudHMgKyAzIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNCBiYW5kcyA9IDE0MSs4MSs2MSBGSVIgY29lZmZpY2llbnRzICsgNCBtdXRlIGZsYWdzICsgdWludDE2X3QKICogcGFkZGluZwogKiAtIDUgYmFuZHMgPSAxNDErODErNjErNjEgRklSIGNvZWZmaWNpZW50cyArIDUgbXV0ZSBmbGFncyArCiAqIHVpbnQxNl90IHBhZGRpbmcKICoJVGhpcyBibG9jayB1c2VzIHRoZSBzYW1lIHBhcmFtZXRlciBzdHJ1Y3R1cmUgYXMKICoJI0FTTV9QQVJBTV9JRF9NQkRSQ19DT05GSUdfUEFSQU1TLgogKi8KI2RlZmluZSBBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNU19JTVBST1ZFRF9GSUxUQkFOS19WMiBcCgkJCQkJCQkJMHgwMDAxMDcwQwoKI2RlZmluZSBBU01fTU9EVUxFX0lEX01CRFJDVjMJCQkJCTB4MDAwMTA5MEIKLyoKICogSUQgb2YgdGhlIE1NQkRSQyBtb2R1bGUgdmVyc2lvbiAzIHByZS9wb3N0cHJvY2Vzc2luZyBibG9jay4KICogVGhpcyBtb2R1bGUgZGlmZmVycyBmcm9tIE1CRFJDdjIgKCNBU01fTU9EVUxFX0lEX01CRFJDVjIpIGluCiAqIHRoYXQgaXQgc3VwcG9ydHMgYm90aCAxNi0gYW5kIDI0LWJpdCBkYXRhLgogKiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlciBJRDoKICogLSAjQVNNX1BBUkFNX0lEX01CRFJDX0VOQUJMRQogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUwogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNU19WMwogKiAtICNBU01fUEFSQU1fSURfTUJEUkNfRklMVEVSX1hPVkVSX0ZSRVFTCiAqLwoKLyogU3RydWN0dXJlIGZvciB0aGUgZW5hYmxlIHBhcmFtZXRlciBmb3IgYW4gTUJEUkMgbW9kdWxlLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTUJEUkNfRU5BQkxFIHBhcmFtZXRlciB1c2VkIGJ5IHRoZQogKiBNQkRSQyBtb2R1bGUuCiAqLwpzdHJ1Y3QgYXNtX21iZHJjX2VuYWJsZSB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGVuYWJsZV9mbGFnOwovKjwgU3BlY2lmaWVzIHdoZXRoZXIgTUJEUkMgaXMgZGlzYWJsZWQgKDApIG9yIGVuYWJsZWQgKG5vbnplcm8pLiovCn0gX19wYWNrZWQ7CgovKiBTdHJ1Y3R1cmUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIGFuIE1CRFJDIG1vZHVsZS4gKi8KCgovKiBQYXlsb2FkIG9mIHRoZSAjQVNNX1BBUkFNX0lEX01CRFJDX0NPTkZJR19QQVJBTVMKICogcGFyYW1ldGVycyB1c2VkIGJ5IHRoZSBNQkRSQyBtb2R1bGUuIFxuIFxuIEZvbGxvd2luZyB0aGlzCiAqIHN0cnVjdHVyZSBpcyB0aGUgcGF5bG9hZCBmb3Igc3ViLWJhbmQgRFJDIGNvbmZpZ3VyYXRpb24KICogcGFyYW1ldGVycyAoYXNtX3N1YmJhbmRfZHJjX2NvbmZpZ19wYXJhbXMpLiBUaGlzIHN1Yi1iYW5kCiAqIHN0cnVjdHVyZSBtdXN0IGJlIHJlcGVhdGVkIGZvciBlYWNoIGJhbmQuCiAqLwoKCnN0cnVjdCBhc21fbWJkcmNfY29uZmlnX3BhcmFtcyB7Cgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIG51bV9iYW5kczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byA1CiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgbGltaXRlcmhyZXNob2xkOwovKjwgVGhyZXNob2xkIGluIGRlY2liZWxzIGZvciB0aGUgbGltaXRlciBvdXRwdXQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IC03MiB0byAxOCBcbgogKiBSZWNvbW1lbmRlZCB2YWx1ZTogMzk5NCAoLTAuMjIgZGIgaW4gUTMuMTIgZm9ybWF0KQogKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGxpbWl0ZXJfbWFrZXVwX2dhaW47Ci8qPCBNYWtldXAgZ2FpbiBpbiBkZWNpYmVscyBmb3IgdGhlIGxpbWl0ZXIgb3V0cHV0LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAtNDIgdG8gNDIgXG4KICogUmVjb21tZW5kZWQgdmFsdWU6IDI1NiAoMCBkQiBpbiBRNy44IGZvcm1hdCkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBsaW1pdGVyX2djOwovKjwgTGltaXRlciBnYWluIHJlY292ZXJ5IGNvZWZmaWNpZW50LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwLjUgdG8gMC45OSBcbgogKiBSZWNvbW1lbmRlZCB2YWx1ZTogMzI0NDAgKDAuOTkgaW4gUTE1IGZvcm1hdCkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBsaW1pdGVyX2RlbGF5OwovKjwgTGltaXRlciBkZWxheSBpbiBzYW1wbGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDEwIFxuCiAqIFJlY29tbWVuZGVkIHZhbHVlOiAyNjIgKDAuMDA4IHNhbXBsZXMgaW4gUTE1IGZvcm1hdCkKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBsaW1pdGVyX21heF93YWl0OwovKjwgTWF4aW11bSBsaW1pdGVyIHdhaXRpbmcgdGltZSBpbiBzYW1wbGVzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDEwIFxuCiAqIFJlY29tbWVuZGVkIHZhbHVlOiAyNjIgKDAuMDA4IHNhbXBsZXMgaW4gUTE1IGZvcm1hdCkKICovCn0gX19wYWNrZWQ7CgovKiBEUkMgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIGVhY2ggc3ViLWJhbmQgb2YgYW4gTUJEUkMgbW9kdWxlLiAqLwoKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fUEFSQU1fSURfTUJEUkNfQ09ORklHX1BBUkFNUyBEUkMKICogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBlYWNoIHN1Yi1iYW5kIGluIHRoZSBNQkRSQyBtb2R1bGUuCiAqIEFmdGVyIHRoaXMgRFJDIHN0cnVjdHVyZSBpcyBjb25maWd1cmVkIGZvciB2YWxpZCBiYW5kcywgdGhlIG5leHQKICogTUJEUkMgc2V0cGFyYW1zIGV4cGVjdHMgdGhlIHNlcXVlbmNlIG9mIHN1Yi1iYW5kIE1CRFJDIGZpbHRlcgogKiBjb2VmZmljaWVudHMgKHRoZSBsZW5ndGggZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGJhbmRzKSBwbHVzIHRoZQogKiBtdXRlIGZsYWcgZm9yIHRoYXQgYmFuZCBwbHVzIHVpbnQxNl90IHBhZGRpbmcuCiAqCiAqIEBrZWVwezEwfQogKiBUaGUgZmlsdGVyIGNvZWZmaWNpZW50IGFuZCBtdXRlIGZsYWcgYXJlIG9mIHR5cGUgaW50MTZfdDoKICogLSBGSVIgY29lZmZpY2llbnQgPSBpbnQxNl90IGZpckZpbHRlcgogKiAtIE11dGUgZmxhZyA9IGludDE2X3QgZk11dGVGbGFnCiAqCiAqIFRoZSBzZXF1ZW5jZSBpcyBhcyBmb2xsb3dzOgogKiAtIDEgYmFuZCA9IDAgRklSIGNvZWZmaWNpZW50ICsgMSBtdXRlIGZsYWcgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gMiBiYW5kcyA9IDk3IEZJUiBjb2VmZmljaWVudHMgKyAyIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gMyBiYW5kcyA9IDk3KzMzIEZJUiBjb2VmZmljaWVudHMgKyAzIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNCBiYW5kcyA9IDk3KzMzKzMzIEZJUiBjb2VmZmljaWVudHMgKyA0IG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNSBiYW5kcyA9IDk3KzMzKzMzKzMzIEZJUiBjb2VmZmljaWVudHMgKyA1IG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqCiAqIEZvciBpbXByb3ZlZCBmaWx0ZXJiYW5rLCB0aGUgc2VxdWVuY2UgaXMgYXMgZm9sbG93czoKICogLSAxIGJhbmQgPSAwIEZJUiBjb2VmZmljaWVudCArIDEgbXV0ZSBmbGFnICsgdWludDE2X3QgcGFkZGluZwogKiAtIDIgYmFuZHMgPSAxNDEgRklSIGNvZWZmaWNpZW50cyArIDIgbXV0ZSBmbGFncyArIHVpbnQxNl90IHBhZGRpbmcKICogLSAzIGJhbmRzID0gMTQxKzgxIEZJUiBjb2VmZmljaWVudHMgKyAzIG11dGUgZmxhZ3MgKyB1aW50MTZfdCBwYWRkaW5nCiAqIC0gNCBiYW5kcyA9IDE0MSs4MSs2MSBGSVIgY29lZmZpY2llbnRzICsgNCBtdXRlIGZsYWdzICsgdWludDE2X3QgcGFkZGluZwogKiAtIDUgYmFuZHMgPSAxNDErODErNjErNjEgRklSIGNvZWZmaWNpZW50cyArIDUgbXV0ZSBmbGFncyArIHVpbnQxNl90IHBhZGRpbmcKICovCnN0cnVjdCBhc21fc3ViYmFuZF9kcmNfY29uZmlnX3BhcmFtcyB7CglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGRyY19zdGVyZW9fbGlua2VkX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBhbGwgc3RlcmVvIGNoYW5uZWxzIGhhdmUgdGhlIHNhbWUgYXBwbGllZAogKiBkeW5hbWljcyAoMSkgb3IgaWYgdGhleSBwcm9jZXNzIHRoZWlyIGR5bmFtaWNzIGluZGVwZW5kZW50bHkgKDApLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gTm90IGxpbmtlZAogKiAtIDEgLS0gTGlua2VkCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZHJjX21vZGU7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciBEUkMgbW9kZSBpcyBieXBhc3NlZCBmb3Igc3ViLWJhbmRzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOgogKiAtIDAgLS0gRGlzYWJsZWQKICogLSAxIC0tIEVuYWJsZWQKICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBkcmNfZG93bl9zYW1wbGVfbGV2ZWw7Ci8qPCBEUkMgZG93biBzYW1wbGUgbGV2ZWwuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IEBnZSAxCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZHJjX2RlbGF5OwovKjwgRFJDIGRlbGF5IGluIHNhbXBsZXMuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMTIwMAogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIGRyY19ybXNpbWVfYXZnX2NvbnN0OwovKjwgUk1TIHNpZ25hbCBlbmVyZ3kgdGltZS1hdmVyYWdpbmcgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6IDAgdG8gMl4xNi0xCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgZHJjX21ha2V1cF9nYWluOwovKjwgRFJDIG1ha2V1cCBnYWluIGluIGRlY2liZWxzLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAyNTggdG8gNjQ5MTcKICovCgkvKiBEb3duIGV4cGFuZGVyIHNldHRpbmdzICovCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJocmVzaG9sZDsKLyo8IERvd24gZXhwYW5kZXIgdGhyZXNob2xkLgogKiBTdXBwb3J0ZWQgUTcgZm9ybWF0IHZhbHVlczogMTMyMCB0byB1cF9jbXBzcmhyZXNob2xkCiAqLwoKCWludDE2X3QgICAgICAgICAgICAgICAgICAgZG93bl9leHBkcl9zbG9wZTsKLyo8IERvd24gZXhwYW5kZXIgc2xvcGUuCiAqIFN1cHBvcnRlZCBROCBmb3JtYXQgdmFsdWVzOiAtMzI3NjggdG8gMC4KICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkb3duX2V4cGRyX2F0dGFjazsKLyo8IERvd24gZXhwYW5kZXIgYXR0YWNrIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTMxIGZvcm1hdCB2YWx1ZXM6IDE5Njg0NCB0byAyXjMxLgogKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJfcmVsZWFzZTsKLyo8IERvd24gZXhwYW5kZXIgcmVsZWFzZSBjb25zdGFudC4KICogU3VwcG9ydGVkIFEzMSBmb3JtYXQgdmFsdWVzOiAxOTY4NSB0byAyXjMxCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgZG93bl9leHBkcl9oeXN0ZXJlc2lzOwovKjwgRG93biBleHBhbmRlciBoeXN0ZXJlc2lzIGNvbnN0YW50LgogKiBTdXBwb3J0ZWQgUTE0IGZvcm1hdCB2YWx1ZXM6IDEgdG8gMzI2OTAKICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKCS8qPCBDbGllbnRzIG11c3Qgc2V0IHRoaXMgZmllbGQgdG8gemVyby4gKi8KCglpbnQzMl90ICAgICAgICAgICAgICAgICAgIGRvd25fZXhwZHJfbWluX2dhaW5fZGI7Ci8qPCBEb3duIGV4cGFuZGVyIG1pbmltdW0gZ2Fpbi4KICogU3VwcG9ydGVkIFEyMyBmb3JtYXQgdmFsdWVzOiAtODA1MzA2MzY4IHRvIDAuCiAqLwoKCS8qIFVwIGNvbXByZXNzb3Igc2V0dGluZ3MgKi8KCglpbnQxNl90ICAgICAgICAgICAgICAgICAgIHVwX2NtcHNyaHJlc2hvbGQ7Ci8qPCBVcCBjb21wcmVzc29yIHRocmVzaG9sZC4KICogU3VwcG9ydGVkIFE3IGZvcm1hdCB2YWx1ZXM6IGRvd25fZXhwZHJocmVzaG9sZCB0bwogKiBkb3duX2NtcHNyaHJlc2hvbGQuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgdXBfY21wc3Jfc2xvcGU7Ci8qPCBVcCBjb21wcmVzc29yIHNsb3BlLgogKiBTdXBwb3J0ZWQgUTE2IGZvcm1hdCB2YWx1ZXM6IDAgdG8gNjQ4ODEuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdXBfY21wc3JfYXR0YWNrOwovKjwgVXAgY29tcHJlc3NvciBhdHRhY2sgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODQ0IHRvIDJeMzEuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdXBfY21wc3JfcmVsZWFzZTsKLyo8IFVwIGNvbXByZXNzb3IgcmVsZWFzZSBjb25zdGFudC4KICogU3VwcG9ydGVkIFEzMSBmb3JtYXQgdmFsdWVzOiAxOTY4NSB0byAyXjMxLgogKi8KCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIHVwX2NtcHNyX2h5c3RlcmVzaXM7Ci8qPCBVcCBjb21wcmVzc29yIGh5c3RlcmVzaXMgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMTQgZm9ybWF0IHZhbHVlczogMSB0byAzMjY5MC4KICovCgoJLyogRG93biBjb21wcmVzc29yIHNldHRpbmdzICovCgoJaW50MTZfdCAgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyaHJlc2hvbGQ7Ci8qPCBEb3duIGNvbXByZXNzb3IgdGhyZXNob2xkLgogKiBTdXBwb3J0ZWQgUTcgZm9ybWF0IHZhbHVlczogdXBfY21wc3JocmVzaG9sZCB0byAxMTU2MC4KICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyX3Nsb3BlOwovKjwgRG93biBjb21wcmVzc29yIHNsb3BlLgogKiBTdXBwb3J0ZWQgUTE2IGZvcm1hdCB2YWx1ZXM6IDAgdG8gNjQ4ODEuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQxOwovKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyX2F0dGFjazsKLyo8IERvd24gY29tcHJlc3NvciBhdHRhY2sgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODQ0IHRvIDJeMzEuCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZG93bl9jbXBzcl9yZWxlYXNlOwovKjwgRG93biBjb21wcmVzc29yIHJlbGVhc2UgY29uc3RhbnQuCiAqIFN1cHBvcnRlZCBRMzEgZm9ybWF0IHZhbHVlczogMTk2ODUgdG8gMl4zMS4KICovCgoJdWludDE2X3QgICAgICAgICAgICAgICAgICBkb3duX2NtcHNyX2h5c3RlcmVzaXM7Ci8qPCBEb3duIGNvbXByZXNzb3IgaHlzdGVyZXNpcyBjb25zdGFudC4KICogU3VwcG9ydGVkIFExNCB2YWx1ZXM6IDEgdG8gMzI2OTAuCiAqLwoKCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQyOwovKjwgQ2xpZW50cyBtdXN0IHNldCB0aGlzIGZpZWxkIHRvIHplcm8uKi8KfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVNNX01PRFVMRV9JRF9FUVVBTElaRVIgICAgICAgICAgICAweDAwMDEwQzI3CiNkZWZpbmUgQVNNX1BBUkFNX0lEX0VRVUFMSVpFUl9QQVJBTUVURVJTICAweDAwMDEwQzI4CgojZGVmaW5lIEFTTV9NQVhfRVFfQkFORFMgMTIKCnN0cnVjdCBhc21fZXFfcGVyX2JhbmRfcGFyYW1zIHsKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgYmFuZF9pZHg7Ci8qPCBCYW5kIGluZGV4LgogKiBTdXBwb3J0ZWQgdmFsdWVzOiAwIHRvIDExCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZmlsdGVyeXBlOwovKjwgVHlwZSBvZiBmaWx0ZXIuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6CiAqIC0gI0FTTV9QQVJBTV9FUVlQRV9OT05FCiAqIC0gI0FTTV9QQVJBTV9FUV9CQVNTX0JPT1NUCiAqIC0gI0FTTV9QQVJBTV9FUV9CQVNTX0NVVAogKiAtICNBU01fUEFSQU1fRVFSRUJMRV9CT09TVAogKiAtICNBU01fUEFSQU1fRVFSRUJMRV9DVVQKICogLSAjQVNNX1BBUkFNX0VRX0JBTkRfQk9PU1QKICogLSAjQVNNX1BBUkFNX0VRX0JBTkRfQ1VUCiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgY2VudGVyX2ZyZXFfaHo7CgkvKjwgRmlsdGVyIGJhbmQgY2VudGVyIGZyZXF1ZW5jeSBpbiBIZXJ0ei4gKi8KCglpbnQzMl90ICAgICAgICAgICAgICAgICAgIGZpbHRlcl9nYWluOwovKjwgRmlsdGVyIGJhbmQgaW5pdGlhbCBnYWluLgogKiBTdXBwb3J0ZWQgdmFsdWVzOiArMTIgdG8gLTEyIGRCIGluIDEgZEIgaW5jcmVtZW50cwogKi8KCglpbnQzMl90ICAgICAgICAgICAgICAgICAgIHFfZmFjdG9yOwovKjwgRmlsdGVyIGJhbmQgcXVhbGl0eSBmYWN0b3IgZXhwcmVzc2VkIGFzIGEgUTggbnVtYmVyLCBpLmUuLCBhCiAqIGZpeGVkLXBvaW50IG51bWJlciB3aXRoIHEgZmFjdG9yIG9mIDguIEZvciBleGFtcGxlLCAzMDAwLygyXjgpLgogKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZXFfcGFyYW1zIHsKCXN0cnVjdCBhcHJfaGRyCWhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfcHBfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgZW5hYmxlX2ZsYWc7Ci8qPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgZXF1YWxpemVyIG1vZHVsZSBpcyBkaXNhYmxlZCAoMCkgb3IgZW5hYmxlZAogKiAobm9uemVybykuCiAqLwoKCQl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG51bV9iYW5kczsKLyo8IE51bWJlciBvZiBiYW5kcy4KICogU3VwcG9ydGVkIHZhbHVlczogMSB0byAxMgogKi8KCXN0cnVjdCBhc21fZXFfcGVyX2JhbmRfcGFyYW1zIGVxX2JhbmRzW0FTTV9NQVhfRVFfQkFORFNdOwoKfSBfX3BhY2tlZDsKCi8qCU5vIGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFZUEVfTk9ORSAgICAgIDAKCi8qCUJhc3MgYm9vc3QgZXF1YWxpemVyIGVmZmVjdC4qLwojZGVmaW5lIEFTTV9QQVJBTV9FUV9CQVNTX0JPT1NUICAgICAxCgovKkJhc3MgY3V0IGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFfQkFTU19DVVQgICAgICAgMgoKLyoJVHJlYmxlIGJvb3N0IGVxdWFsaXplciBlZmZlY3QgKi8KI2RlZmluZSBBU01fUEFSQU1fRVFSRUJMRV9CT09TVCAgIDMKCi8qCVRyZWJsZSBjdXQgZXF1YWxpemVyIGVmZmVjdC4qLwojZGVmaW5lIEFTTV9QQVJBTV9FUVJFQkxFX0NVVCAgICAgNAoKLyoJQmFuZCBib29zdCBlcXVhbGl6ZXIgZWZmZWN0LiovCiNkZWZpbmUgQVNNX1BBUkFNX0VRX0JBTkRfQk9PU1QgICAgIDUKCi8qCUJhbmQgY3V0IGVxdWFsaXplciBlZmZlY3QuKi8KI2RlZmluZSBBU01fUEFSQU1fRVFfQkFORF9DVVQgICAgICAgNgoKLyogR2V0ICYgc2V0IHBhcmFtcyAqLwojZGVmaW5lIFZTU19JQ09NTU9OX0NNRF9TRVRfUEFSQU1fVjIJMHgwMDAxMTMzRAojZGVmaW5lIFZTU19JQ09NTU9OX0NNRF9HRVRfUEFSQU1fVjIJMHgwMDAxMTMzRQojZGVmaW5lIFZTU19JQ09NTU9OX1JTUF9HRVRfUEFSQU0JMHgwMDAxMTAwOAoKI2RlZmluZSBWU1NfTUFYX0FWQ1NfTlVNX1NFUlZJQ0VTCTI1CgovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBtb2R1bGUuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogIC0gI0FVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9FTkFCTEUKICogIC0gI0FVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9NT0RFCiAqICAtICNBVURQUk9DX1BBUkFNX0lEX0JBU1NfQk9PU1RfU1RSRU5HVEgKICovCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBMQovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVC4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9CQVNTX0JPT1NUX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBMgovKiBJRCBvZiB0aGUgQmFzcyBCb29zdCBtb2RlIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX0JBU1NfQk9PU1QuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQkFTU19CT09TVF9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTMKLyogSUQgb2YgdGhlIEJhc3MgQm9vc3Qgc3RyZW5ndGggcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVC4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9CQVNTX0JPT1NUX1NUUkVOR1RIICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBNAoKLyogSUQgb2YgdGhlIFBCRSBtb2R1bGUuCiAqIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9QQkVfRU5BQkxFCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUEJFX1BBUkFNX0NPTkZJRwogKi8KI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9QQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQzJBCi8qIElEIG9mIHRoZSBCYXNzIEJvb3N0IGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9CQVNTX0JPT1NULgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1BCRV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwQzJCCi8qIElEIG9mIHRoZSBCYXNzIEJvb3N0IG1vZGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfQkFTU19CT09TVC4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9QQkVfUEFSQU1fQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMEM0OQoKLyogSUQgb2YgdGhlIFZpcnR1YWxpemVyIG1vZHVsZS4gVGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlCiAqIGZvbGxvd2luZyBwYXJhbWV0ZXIgSURzOgogKiAtICNBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX0VOQUJMRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX1NUUkVOR1RICiAqIC0gI0FVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfT1VUX1RZUEUKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9WSVJUVUFMSVpFUl9HQUlOX0FESlVTVAogKi8KI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9WSVJUVUFMSVpFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEE1Ci8qIElEIG9mIHRoZSBWaXJ0dWFsaXplciBlbmFibGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfVklSVFVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTYKLyogSUQgb2YgdGhlIFZpcnR1YWxpemVyIHN0cmVuZ3RoIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1ZJUlRVQUxJWkVSLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1ZJUlRVQUxJWkVSX1NUUkVOR1RIICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEE3Ci8qIElEIG9mIHRoZSBWaXJ0dWFsaXplciBvdXQgdHlwZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9WSVJUVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9WSVJUVUFMSVpFUl9PVVRfVFlQRSAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBOAovKiBJRCBvZiB0aGUgVmlydHVhbGl6ZXIgb3V0IHR5cGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfVklSVFVBTElaRVIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfVklSVFVBTElaRVJfR0FJTl9BREpVU1QgICAgICAgICAgICAgICAgIDB4MDAwMTA4QTkKCi8qIElEIG9mIHRoZSBSZXZlcmIgbW9kdWxlLiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nCiAqIHBhcmFtZXRlciBJRHM6CiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0VOQUJMRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9NT0RFCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1BSRVNFVAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9XRVRfTUlYCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0dBSU5fQURKVVNUCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JPT01fTEVWRUwKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUk9PTV9IRl9MRVZFTAogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUNBWV9USU1FCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFQ0FZX0hGX1JBVElPCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JFRkxFQ1RJT05TX0xFVkVMCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JFRkxFQ1RJT05TX0RFTEFZCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0xFVkVMCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFTEFZCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RJRkZVU0lPTgogKiAtICNBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERU5TSVRZCiAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBQQovKiBJRCBvZiB0aGUgUmV2ZXJiIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhBQgovKiBJRCBvZiB0aGUgUmV2ZXJiIG1vZGUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9NT0RFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QUMKLyogSUQgb2YgdGhlIFJldmVyYiBwcmVzZXQgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9QUkVTRVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QUQKLyogSUQgb2YgdGhlIFJldmVyYiB3ZXQgbWl4IHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfV0VUX01JWCAgICAgICAgICAgICAgICAgICAweDAwMDEwOEFFCi8qIElEIG9mIHRoZSBSZXZlcmIgZ2FpbiBhZGp1c3QgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9HQUlOX0FESlVTVCAgICAgICAgICAgICAgIDB4MDAwMTA4QUYKLyogSUQgb2YgdGhlIFJldmVyYiByb29tIGxldmVsIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUk9PTV9MRVZFTCAgICAgICAgICAgICAgICAweDAwMDEwOEIwCi8qIElEIG9mIHRoZSBSZXZlcmIgcm9vbSBoZiBsZXZlbCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX1JPT01fSEZfTEVWRUwgICAgICAgICAgICAgMHgwMDAxMDhCMQovKiBJRCBvZiB0aGUgUmV2ZXJiIGRlY2F5IHRpbWUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ERUNBWV9USU1FICAgICAgICAgICAgICAgIDB4MDAwMTA4QjIKLyogSUQgb2YgdGhlIFJldmVyYiBkZWNheSBoZiByYXRpbyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFQ0FZX0hGX1JBVElPICAgICAgICAgICAgMHgwMDAxMDhCMwovKiBJRCBvZiB0aGUgUmV2ZXJiIHJlZmxlY3Rpb25zIGxldmVsIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1JFVkVSQi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9SRVZFUkJfUkVGTEVDVElPTlNfTEVWRUwgICAgICAgICAweDAwMDEwOEI0Ci8qIElEIG9mIHRoZSBSZXZlcmIgcmVmbGVjdGlvbnMgZGVsYXkgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9SRUZMRUNUSU9OU19ERUxBWSAgICAgICAgIDB4MDAwMTA4QjUKLyogSUQgb2YgdGhlIFJldmVyYiBsZXZlbCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0xFVkVMICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QjYKLyogSUQgb2YgdGhlIFJldmVyYiBkZWxheSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFTEFZICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QjcKLyogSUQgb2YgdGhlIFJldmVyYiBkaWZmdXNpb24gcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUkVWRVJCLgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX1JFVkVSQl9ESUZGVVNJT04gICAgICAgICAgICAgICAgICAweDAwMDEwOEI4Ci8qIElEIG9mIHRoZSBSZXZlcmIgZGVuc2l0eSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9SRVZFUkIuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfUkVWRVJCX0RFTlNJVFkgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QjkKCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBtb2R1bGUuIFRoaXMgbW9kdWxlIHN1cHBvcnRzIHRoZQogKiBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9FTkFCTEUKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9DT05GSUcKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9OVU1fQkFORFMKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0xFVkVMUwogKiAtICNBVURQUk9DX1BBUkFNX0lEX0VRX0JBTkRfTEVWRUxfUkFOR0UKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0ZSRVFTCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfU0lOR0xFX0JBTkRfRlJFUV9SQU5HRQogKiAtICNBVURQUk9DX1BBUkFNX0lEX0VRX1NJTkdMRV9CQU5EX0ZSRVEKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0lOREVYCiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfUFJFU0VUX0lECiAqIC0gI0FVRFBST0NfUEFSQU1fSURfRVFfTlVNX1BSRVNFVFMKICogLSAjQVVEUFJPQ19QQVJBTV9JRF9FUV9HRVRfUFJFU0VUX05BTUUKICovCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkEKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGVuYWJsZSBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkIKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGNvbmZpZyBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkMKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIG51bWJlciBvZiBiYW5kcyBwYXJhbWV0ZXIgdXNlZAogKiBieSBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcwogKiB1c2VkIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9OVU1fQkFORFMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkQKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGJhbmQgbGV2ZWxzIHBhcmFtZXRlciB1c2VkIGJ5CiAqIEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElEIGlzCiAqIHVzZWQgZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX0JBTkRfTEVWRUxTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhCRQovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgYmFuZCBsZXZlbCByYW5nZSBwYXJhbWV0ZXIgdXNlZAogKiBieSBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcwogKiB1c2VkIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0xFVkVMX1JBTkdFICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QkYKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIGJhbmQgZnJlcXVlbmNpZXMgcGFyYW1ldGVyIHVzZWQKICogYnkgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuIFRoaXMgcGFyYW0gSUQgaXMKICogdXNlZCBmb3IgZ2V0IHBhcmFtIG9ubHkuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfQkFORF9GUkVRUyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEMwCi8qIElEIG9mIHRoZSBQb3BsZXNzIEVxdWFsaXplciBzaW5nbGUgYmFuZCBmcmVxdWVuY3kgcmFuZ2UKICogcGFyYW1ldGVyIHVzZWQgYnkgQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuCiAqICBUaGlzIHBhcmFtIElEIGlzIHVzZWQgZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX1NJTkdMRV9CQU5EX0ZSRVFfUkFOR0UgICAgICAgICAgICAgMHgwMDAxMDhDMQovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgc2luZ2xlIGJhbmQgZnJlcXVlbmN5IHBhcmFtZXRlcgogKiB1c2VkIGJ5IEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElECiAqIGlzIHVzZWQgZm9yIHNldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX1NJTkdMRV9CQU5EX0ZSRVEgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhDMgovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgYmFuZCBpbmRleCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9CQU5EX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QzMKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIHByZXNldCBpZCBwYXJhbWV0ZXIgdXNlZCBieQogKiBBVURQUk9DX01PRFVMRV9JRF9QT1BMRVNTX0VRVUFMSVpFUi4gVGhpcyBwYXJhbSBJRCBpcyB1c2VkCiAqIGZvciBnZXQgcGFyYW0gb25seS4KICovCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FUV9QUkVTRVRfSUQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTA4QzQKLyogSUQgb2YgdGhlIFBvcGxlc3MgRXF1YWxpemVyIG51bWJlciBvZiBwcmVzZXRzIHBhcmFtZXRlciB1c2VkCiAqIGJ5IEFVRFBST0NfTU9EVUxFX0lEX1BPUExFU1NfRVFVQUxJWkVSLiBUaGlzIHBhcmFtIElEIGlzIHVzZWQKICogZm9yIGdldCBwYXJhbSBvbmx5LgogKi8KI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0VRX05VTV9QUkVTRVRTICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxMDhDNQovKiBJRCBvZiB0aGUgUG9wbGVzcyBFcXVhbGl6ZXIgcHJlc2V0IG5hbWUgcGFyYW1ldGVyIHVzZWQgYnkKICogQVVEUFJPQ19NT0RVTEVfSURfUE9QTEVTU19FUVVBTElaRVIuIFRoaXMgcGFyYW0gSUQgaXMgdXNlZAogKiBmb3IgZ2V0IHBhcmFtIG9ubHkuCiAqLwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfRVFfUFJFU0VUX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwOEM2CgovKiBTZXQgUTYgdG9wb2xvZ2llcyAqLwojZGVmaW5lIEFTTV9DTURfQUREX1RPUE9MT0dJRVMJCQkJMHgwMDAxMERCRQojZGVmaW5lIEFETV9DTURfQUREX1RPUE9MT0dJRVMJCQkJMHgwMDAxMDMzNQojZGVmaW5lIEFGRV9DTURfQUREX1RPUE9MT0dJRVMJCQkJMHgwMDAxMDBmOAovKiBzdHJ1Y3R1cmUgdXNlZCBmb3IgYm90aCBpb2N0bHMgKi8Kc3RydWN0IGNtZF9zZXRfdG9wb2xvZ2llcyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7Cgl1MzIJCXBheWxvYWRfYWRkcl9sc3c7CgkvKiBMU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgl1MzIJCXBheWxvYWRfYWRkcl9tc3c7CgkvKiBNU1cgb2YgcGFyYW1ldGVyIGRhdGEgcGF5bG9hZCBhZGRyZXNzLiovCgl1MzIJCW1lbV9tYXBfaGFuZGxlOwoJLyogTWVtb3J5IG1hcCBoYW5kbGUgcmV0dXJuZWQgYnkgbWVtIG1hcCBjb21tYW5kICovCgl1MzIJCXBheWxvYWRfc2l6ZTsKCS8qIFNpemUgaW4gYnl0ZXMgb2YgdGhlIHZhcmlhYmxlIHBheWxvYWQgaW4gc2hhcmVkIG1lbW9yeSAqLwp9IF9fcGFja2VkOwoKLyogVGhpcyBtb2R1bGUgcmVwcmVzZW50cyB0aGUgUnggcHJvY2Vzc2luZyBvZiBGZWVkYmFjayBzcGVha2VyIHByb3RlY3Rpb24uCiAqIEl0IGNvbnRhaW5zIHRoZSBleGN1cnNpb24gY29udHJvbCwgdGhlcm1hbCBwcm90ZWN0aW9uLAogKiBhbmFsb2cgY2xpcCBtYW5hZ2VyIGZlYXR1cmVzIGluIGl0LgogKiBUaGlzIG1vZHVsZSBpZCB3aWxsIHN1cHBvcnQgZm9sbG93aW5nIHBhcmFtIGlkcy4KICogLSBBRkVfUEFSQU1fSURfRkJTUF9NT0RFX1JYX0NGRwogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9GQl9TUEtSX1BST1RfUlggMHgwMDAxMDIxQwojZGVmaW5lIEFGRV9NT0RVTEVfRkJfU1BLUl9QUk9UX1YyX1JYIDB4MDAwMTAyNUYKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BfUlhfTElNSVRFUl9USCAweDAwMDEwMkIxCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0ZCU1BfTU9ERV9SWF9DRkcgMHgwMDAxMDIxRAojZGVmaW5lIEFGRV9QQVJBTV9JRF9GQlNQX1BUT05FX1JBTVBfQ0ZHIDB4MDAwMTAyNjAKCnN0cnVjdCBhc21fZmJzcF9tb2RlX3J4X2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3QgbW9kZTsKfSBfX3BhY2tlZDsKCi8qIFRoaXMgbW9kdWxlIHJlcHJlc2VudHMgdGhlIFZJIHByb2Nlc3Npbmcgb2YgZmVlZGJhY2sgc3BlYWtlciBwcm90ZWN0aW9uLgogKiBJdCB3aWxsIHJlY2VpdmUgVnNlbnMgYW5kIElzZW5zIGZyb20gY29kZWMgYW5kIGdlbmVyYXRlcyBuZWNlc3NhcnkKICogcGFyYW1ldGVycyBuZWVkZWQgYnkgUnggcHJvY2Vzc2luZy4KICogVGhpcyBtb2R1bGUgaWQgd2lsbCBzdXBwb3J0IGZvbGxvd2luZyBwYXJhbSBpZHMuCiAqIC0gQUZFX1BBUkFNX0lEX1NQS1JfQ0FMSUJfVklfUFJPQ19DRkcKICogLSBBRkVfUEFSQU1fSURfQ0FMSUJfUkVTX0NGRwogKiAtIEFGRV9QQVJBTV9JRF9GRUVEQkFDS19QQVRIX0NGRwogKi8KCiNkZWZpbmUgQUZFX01PRFVMRV9GQl9TUEtSX1BST1RfVklfUFJPQyAweDAwMDEwMjI2CiNkZWZpbmUgQUZFX01PRFVMRV9GQl9TUEtSX1BST1RfVklfUFJPQ19WMiAweDAwMDEwMjZBCgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUEtSX0NBTElCX1ZJX1BST0NfQ0ZHIDB4MDAwMTAyMkEKI2RlZmluZSBBRkVfUEFSQU1fSURfU1BLUl9DQUxJQl9WSV9QUk9DX0NGR19WMiAgMHgwMDAxMDI2QgoKc3RydWN0IGFzbV9zcGtyX2NhbGliX3ZpX3Byb2NfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBvcGVyYXRpb25fbW9kZTsKCXVpbnQzMl90IHIwX3QwX3NlbGVjdGlvbl9mbGFnW1NQX1YyX05VTV9NQVhfU1BLUl07CglpbnQzMl90IHIwX2NhbGlfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CglpbnQxNl90CXQwX2NhbGlfcTZbU1BfVjJfTlVNX01BWF9TUEtSXTsKCXVpbnQzMl90IHF1aWNrX2NhbGliX2ZsYWc7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIEFGRV9QQVJBTV9JRF9DQUxJQl9SRVNfQ0ZHIDB4MDAwMTAyMkIKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0FMSUJfUkVTX0NGR19WMiAweDAwMDEwMjZFCgpzdHJ1Y3QgYXNtX2NhbGliX3Jlc19jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCWludDMyX3QJcjBfY2FsaV9xMjRbU1BfVjJfTlVNX01BWF9TUEtSXTsKCXVpbnQzMl90IHRoX3ZpX2NhX3N0YXRlOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBRkVfUEFSQU1fSURfRkVFREJBQ0tfUEFUSF9DRkcgMHgwMDAxMDIyQwojZGVmaW5lIEFGRV9NT0RVTEVfRkVFREJBQ0sgMHgwMDAxMDI1NwoKc3RydWN0IGFzbV9mZWVkYmFja19wYXRoX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJaW50MzJfdAlkc3RfcG9ydGlkOwoJaW50MzJfdAludW1fY2hhbm5lbHM7CglpbnQzMl90CWNoYW5faW5mb1s0XTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX1BBUkFNX0lEX01PREVfVklfUFJPQ19DRkcgMHgwMDAxMDIyNwoKc3RydWN0IGFzbV9tb2RlX3ZpX3Byb2NfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCBjYWxfbW9kZTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX01PRFVMRV9TUEVBS0VSX1BST1RFQ1RJT05fVjJfVEhfVkkJMHgwMDAxMDI2QQojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9USF9WSV9NT0RFX0NGRwkweDAwMDEwMjZCCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQX1YyX1RIX1ZJX0ZUTV9DRkcJMHgwMDAxMDI5RgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9USF9WSV9GVE1fUEFSQU1TCTB4MDAwMTAyQTAKCnN0cnVjdCBhZmVfc3BfdGhfdmlfbW9kZV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IG9wZXJhdGlvbl9tb2RlOwoJLyoKCSAqIE9wZXJhdGlvbiBtb2RlIG9mIHRoZXJtYWwgVkkgbW9kdWxlLgoJICogICAwIC0tIE5vcm1hbCBSdW5uaW5nIG1vZGUKCSAqICAgMSAtLSBDYWxpYnJhdGlvbiBtb2RlCgkgKiAgIDIgLS0gRlRNIG1vZGUKCSAqLwoJdWludDMyX3QgcjB0MF9zZWxlY3Rpb25fZmxhZ1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIFNwZWNpZmllcyB3aGljaCBzZXQgb2YgUjAsIFQwIHZhbHVlcyB0aGUgYWxnb3JpdGhtIHdpbGwgdXNlLgoJICogVGhpcyBmaWVsZCBpcyB2YWxpZCBvbmx5IGluIE5vcm1hbCBtb2RlIChvcGVyYXRpb25fbW9kZSA9IDApLgoJICogMCAtLSBVc2UgY2FsaWJyYXRlZCBSMCwgVDAgdmFsdWUKCSAqIDEgLS0gVXNlIHNhZmUgUjAsIFQwIHZhbHVlCgkgKi8KCWludDMyX3QgcjBfY2FsaV9xMjRbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBDYWxpYnJhdGlvbiBwb2ludCByZXNpc3RhbmNlIHBlciBkZXZpY2UuIFRoaXMgZmllbGQgaXMgdmFsaWQKCSAqIG9ubHkgaW4gTm9ybWFsIG1vZGUgKG9wZXJhdGlvbl9tb2RlID0gMCkuCgkgKiB2YWx1ZXMgMzM1NTQ0MzIgdG8gMTA3Mzc0MTgyNCBPaG1zIChpbiBRMjQgZm9ybWF0KQoJICovCglpbnQxNl90IHQwX2NhbGlfcTZbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBDYWxpYnJhdGlvbiBwb2ludCB0ZW1wZXJhdHVyZSBwZXIgZGV2aWNlLiBUaGlzIGZpZWxkIGlzIHZhbGlkCgkgKiBpbiBib3RoIE5vcm1hbCBtb2RlIGFuZCBDYWxpYnJhdGlvbiBtb2RlLgoJICogdmFsdWVzIC0xOTIwIHRvIDUxMjAgZGVncmVlcyBDIChpbiBRNiBmb3JtYXQpCgkgKi8KCXVpbnQzMl90IHF1aWNrX2NhbGliX2ZsYWc7CgkvKgoJICogSW5kaWNhdGVzIHdoZXRoZXIgY2FsaWJyYXRpb24gaXMgdG8gYmUgZG9uZSBpbiBxdWljayBtb2RlIG9yIG5vdC4KCSAqIFRoaXMgZmllbGQgaXMgdmFsaWQgb25seSBpbiBDYWxpYnJhdGlvbiBtb2RlIChvcGVyYXRpb25fbW9kZSA9IDEpLgoJICogMCAtLSBEaXNhYmxlZAoJICogMSAtLSBFbmFibGVkCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfdGhfdmlfZnRtX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3Qgd2FpdF90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogV2FpdCB0aW1lIHRvIGhlYXQgdXAgc3BlYWtlciBiZWZvcmUgY29sbGVjdGluZyBzdGF0aXN0aWNzCgkgKiBmb3IgZnRtIG1vZGUgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byA0Mjk0OTY3Mjk1IG1zCgkgKi8KCXVpbnQzMl90IGZ0bV90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogZHVyYXRpb24gZm9yIHdoaWNoIEZUTSBzdGF0aXN0aWNzIGFyZSBjb2xsZWN0ZWQgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byAyMDAwIG1zCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfdGhfdmlfZnRtX3BhcmFtcyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJaW50MzJfdCBkY19yZXNfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogREMgcmVzaXN0YW5jZSB2YWx1ZSBpbiBxMjQgZm9ybWF0CgkgKiB2YWx1ZXMgMCB0byAyMTQ3NDgzNjQ3IE9obXMgKGluIFEyNCBmb3JtYXQpCgkgKi8KCWludDMyX3QgdGVtcF9xMjJbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiB0ZW1wZXJhdHVyZSB2YWx1ZSBpbiBxMjIgZm9ybWF0CgkgKiB2YWx1ZXMgLTEyNTgyOTEyMCB0byAyMTQ3NDgzNjQ3IGRlZ0MgKGluIFEyMiBmb3JtYXQpCgkgKi8KCXVpbnQzMl90IHN0YXR1c1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIEZUTSBwYWNrZXQgc3RhdHVzCgkgKiAwIC0gSW5jb3JyZWN0IG9wZXJhdGlvbiBtb2RlLlRoaXMgc3RhdHVzIGlzIHJldHVybmVkCgkgKiAgICAgd2hlbiBHRVRfUEFSQU0gaXMgY2FsbGVkIGluIG5vbiBGVE0gTW9kZQoJICogMSAtIEluYWN0aXZlIG1vZGUgLS0gUG9ydCBpcyBub3QgeWV0IHN0YXJ0ZWQuCgkgKiAyIC0gV2FpdCBzdGF0ZS4gd2FpdF90aW1lX21zIGhhcyBub3QgeWV0IGVsYXBzZWQKCSAqIDMgLSBJbiBwcm9ncmVzcyBzdGF0ZS4gZnRtX3RpbWVfbXMgaGFzIG5vdCB5ZXQgZWxhcHNlZC4KCSAqIDQgLSBTdWNjZXNzLgoJICogNSAtIEZhaWxlZC4KCSAqLwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcF90aF92aV9nZXRfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9nZXRfcGFyYW1fdjIgZ2V0X3BhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3NwX3RoX3ZpX2Z0bV9wYXJhbXMgcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX3RoX3ZpX2dldF9wYXJhbV9yZXNwIHsKCXVpbnQzMl90IHN0YXR1czsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9zcF90aF92aV9mdG1fcGFyYW1zIHBhcmFtOwp9IF9fcGFja2VkOwoKCiNkZWZpbmUgQUZFX01PRFVMRV9TUEVBS0VSX1BST1RFQ1RJT05fVjJfRVhfVkkJMHgwMDAxMDI2RgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9FWF9WSV9NT0RFX0NGRwkweDAwMDEwMkExCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NQX1YyX0VYX1ZJX0ZUTV9DRkcJMHgwMDAxMDJBMgojZGVmaW5lIEFGRV9QQVJBTV9JRF9TUF9WMl9FWF9WSV9GVE1fUEFSQU1TCTB4MDAwMTAyQTMKCnN0cnVjdCBhZmVfc3BfZXhfdmlfbW9kZV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IG9wZXJhdGlvbl9tb2RlOwoJLyoKCSAqIE9wZXJhdGlvbiBtb2RlIG9mIEV4Y3Vyc2lvbiBWSSBtb2R1bGUuCgkgKiAwIC0gTm9ybWFsIFJ1bm5pbmcgbW9kZQoJICogMiAtIEZUTSBtb2RlCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3Qgd2FpdF90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogV2FpdCB0aW1lIHRvIGhlYXQgdXAgc3BlYWtlciBiZWZvcmUgY29sbGVjdGluZyBzdGF0aXN0aWNzCgkgKiBmb3IgZnRtIG1vZGUgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byA0Mjk0OTY3Mjk1IG1zCgkgKi8KCXVpbnQzMl90IGZ0bV90aW1lX21zW1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogZHVyYXRpb24gZm9yIHdoaWNoIEZUTSBzdGF0aXN0aWNzIGFyZSBjb2xsZWN0ZWQgaW4gbXMuCgkgKiB2YWx1ZXMgMCB0byAyMDAwIG1zCgkgKi8KfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX3BhcmFtcyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJaW50MzJfdCBmcmVxX3EyMFtTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIFJlc29uYW5jZSBmcmVxdWVuY3kgaW4gcTIwIGZvcm1hdAoJICogdmFsdWVzIDAgdG8gMjE0NzQ4MzY0NyBIeiAoaW4gUTIwIGZvcm1hdCkKCSAqLwoJaW50MzJfdCByZXNpc19xMjRbU1BfVjJfTlVNX01BWF9TUEtSXTsKCS8qCgkgKiBNZWNoYW5pY2FsIHJlc2lzdGFuY2UgaW4gcTI0IGZvcm1hdAoJICogdmFsdWVzIDAgdG8gMjE0NzQ4MzY0NyBPaG1zIChpbiBRMjQgZm9ybWF0KQoJICovCglpbnQzMl90IHFtY3RfcTI0W1NQX1YyX05VTV9NQVhfU1BLUl07CgkvKgoJICogTWVjaGFuaWNhbCBRZmFjdG9yIGluIHEyNCBmb3JtYXQKCSAqIHZhbHVlcyAwIHRvIDIxNDc0ODM2NDcgKGluIFEyNCBmb3JtYXQpCgkgKi8KCXVpbnQzMl90IHN0YXR1c1tTUF9WMl9OVU1fTUFYX1NQS1JdOwoJLyoKCSAqIEZUTSBwYWNrZXQgc3RhdHVzCgkgKiAwIC0gSW5jb3JyZWN0IG9wZXJhdGlvbiBtb2RlLlRoaXMgc3RhdHVzIGlzIHJldHVybmVkCgkgKiAgICAgIHdoZW4gR0VUX1BBUkFNIGlzIGNhbGxlZCBpbiBub24gRlRNIE1vZGUuCgkgKiAxIC0gSW5hY3RpdmUgbW9kZSAtLSBQb3J0IGlzIG5vdCB5ZXQgc3RhcnRlZC4KCSAqIDIgLSBXYWl0IHN0YXRlLiB3YWl0X3RpbWVfbXMgaGFzIG5vdCB5ZXQgZWxhcHNlZAoJICogMyAtIEluIHByb2dyZXNzIHN0YXRlLiBmdG1fdGltZV9tcyBoYXMgbm90IHlldCBlbGFwc2VkLgoJICogNCAtIFN1Y2Nlc3MuCgkgKiA1IC0gRmFpbGVkLgoJICovCn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2dldF9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX2dldF9wYXJhbV92MiBnZXRfcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX3BhcmFtcyBwYXJhbTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3BfZXhfdmlfZ2V0X3BhcmFtX3Jlc3AgewoJdWludDMyX3Qgc3RhdHVzOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3NwX2V4X3ZpX2Z0bV9wYXJhbXMgcGFyYW07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3NwX3J4X2xpbWl0ZXJfdGhfcGFyYW0gewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IGxpbV90aHJfcGVyX2NhbGliX3EyN1tTUF9WMl9OVU1fTUFYX1NQS1JdOwp9IF9fcGFja2VkOwoKdW5pb24gYWZlX3Nwa3JfcHJvdF9jb25maWcgewoJc3RydWN0IGFzbV9mYnNwX21vZGVfcnhfY2ZnIG1vZGVfcnhfY2ZnOwoJc3RydWN0IGFzbV9zcGtyX2NhbGliX3ZpX3Byb2NfY2ZnIHZpX3Byb2NfY2ZnOwoJc3RydWN0IGFzbV9mZWVkYmFja19wYXRoX2NmZyBmZWVkYmFja19wYXRoX2NmZzsKCXN0cnVjdCBhc21fbW9kZV92aV9wcm9jX2NmZyBtb2RlX3ZpX3Byb2NfY2ZnOwoJc3RydWN0IGFmZV9zcF90aF92aV9tb2RlX2NmZyB0aF92aV9tb2RlX2NmZzsKCXN0cnVjdCBhZmVfc3BfdGhfdmlfZnRtX2NmZyB0aF92aV9mdG1fY2ZnOwoJc3RydWN0IGFmZV9zcF9leF92aV9tb2RlX2NmZyBleF92aV9tb2RlX2NmZzsKCXN0cnVjdCBhZmVfc3BfZXhfdmlfZnRtX2NmZyBleF92aV9mdG1fY2ZnOwoJc3RydWN0IGFmZV9zcF9yeF9saW1pdGVyX3RoX3BhcmFtIGxpbWl0ZXJfdGhfY2ZnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcGtyX3Byb3RfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXVuaW9uIGFmZV9zcGtyX3Byb3RfY29uZmlnIHByb3RfY29uZmlnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zcGtyX3Byb3RfZ2V0X3ZpX2NhbGliIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfZ2V0X3BhcmFtX3YyIGdldF9wYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFzbV9jYWxpYl9yZXNfY2ZnIHJlc19jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3Nwa3JfcHJvdF9jYWxpYl9nZXRfcmVzcCB7Cgl1aW50MzJfdCBzdGF0dXM7CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhc21fY2FsaWJfcmVzX2NmZyByZXNfY2ZnOwp9IF9fcGFja2VkOwoKCi8qIFNSUyBUUlVNRURJQSBzdGFydCAqLwovKiB0b3BvbG9neSAqLwojZGVmaW5lIFNSU19UUlVNRURJQV9UT1BPTE9HWV9JRAkJCTB4MDAwMTBEOTAKLyogbW9kdWxlICovCiNkZWZpbmUgU1JTX1RSVU1FRElBX01PRFVMRV9JRAkJCQkweDEwMDA1MDEwCi8qIHBhcmFtZXRlcnMgKi8KI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TCQkJCTB4MTAwMDUwMTEKI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TX1dPV0hECQkJMHgxMDAwNTAxMgojZGVmaW5lIFNSU19UUlVNRURJQV9QQVJBTVNfQ1NIUAkJCTB4MTAwMDUwMTMKI2RlZmluZSBTUlNfVFJVTUVESUFfUEFSQU1TX0hQRgkJCQkweDEwMDA1MDE0CiNkZWZpbmUgU1JTX1RSVU1FRElBX1BBUkFNU19BRVEJCQkJMHgxMDAwNTAxNQojZGVmaW5lIFNSU19UUlVNRURJQV9QQVJBTVNfSEwJCQkJMHgxMDAwNTAxNgojZGVmaW5lIFNSU19UUlVNRURJQV9QQVJBTVNfR0VRCQkJCTB4MTAwMDUwMTcKCiNkZWZpbmUgU1JTX0lEX0dMT0JBTAkweDAwMDAwMDAxCiNkZWZpbmUgU1JTX0lEX1dPV0hECTB4MDAwMDAwMDIKI2RlZmluZSBTUlNfSURfQ1NIUAkweDAwMDAwMDAzCiNkZWZpbmUgU1JTX0lEX0hQRgkweDAwMDAwMDA0CiNkZWZpbmUgU1JTX0lEX0FFUQkweDAwMDAwMDA1CiNkZWZpbmUgU1JTX0lEX0hMCQkweDAwMDAwMDA2CiNkZWZpbmUgU1JTX0lEX0dFUQkweDAwMDAwMDA3CgojZGVmaW5lIFNSU19DTURfVVBMT0FECQkweDdGRkYwMDAwCiNkZWZpbmUgU1JTX1BBUkFNX09GRlNFVF9NQVNLCTB4M0ZGRjAwMDAKI2RlZmluZSBTUlNfUEFSQU1fVkFMVUVfTUFTSwkweDAwMDBGRkZGCgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19HTE9CQUwgewoJdWludDhfdCAgICAgICAgICAgICAgICAgIHYxOwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHYyOwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHYzOwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY0OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY1OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY2OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY3OwoJdWludDhfdCAgICAgICAgICAgICAgICAgIHY4OwoJdWludDE2X3QgICAgICAgICAgICAgICAgIHY5Owp9IF9fcGFja2VkOwoKc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfV09XSEQgewoJdWludDMyX3QJCQkJdjE7Cgl1aW50MTZfdAkJCQl2MjsKCXVpbnQxNl90CQkJCXYzOwoJdWludDE2X3QJCQkJdjQ7Cgl1aW50MTZfdAkJCQl2NTsKCXVpbnQxNl90CQkJCXY2OwoJdWludDE2X3QJCQkJdjc7Cgl1aW50MTZfdAkJCQl2ODsKCXVpbnQxNl90CQkJCXZfX19fQTE7Cgl1aW50MzJfdAkJCQl2OTsKCXVpbnQxNl90CQkJCXYxMDsKCXVpbnQxNl90CQkJCXYxMTsKCXVpbnQzMl90CQkJCXYxMlsxNl07Cgl1aW50MzJfdAl2MTNbMTZdOwoJdWludDMyX3QJdjE0WzE2XTsKCXVpbnQzMl90CXYxNVsxNl07Cgl1aW50MzJfdAl2MTY7Cgl1aW50MTZfdAl2MTc7Cgl1aW50MTZfdAl2MTg7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19DU0hQIHsKCXVpbnQzMl90CQl2MTsKCXVpbnQxNl90CQl2MjsKCXVpbnQxNl90CQl2MzsKCXVpbnQxNl90CQl2NDsKCXVpbnQxNl90CQl2NTsKCXVpbnQxNl90CQl2NjsKCXVpbnQxNl90CQl2X19fX0ExOwoJdWludDMyX3QJCXY3OwoJdWludDE2X3QJCXY4OwoJdWludDE2X3QJCXY5OwoJdWludDMyX3QJCXYxMFsxNl07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19IUEYgewoJdWludDMyX3QJCXYxOwoJdWludDMyX3QJCXYyWzI2XTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0FFUSB7Cgl1aW50MzJfdAkJdjE7Cgl1aW50MTZfdAkJdjI7Cgl1aW50MTZfdAkJdjM7Cgl1aW50MTZfdAkJdjQ7Cgl1aW50MTZfdAkJdl9fX19BMTsKCXVpbnQzMl90CXY1Wzc0XTsKCXVpbnQzMl90CXY2Wzc0XTsKCXVpbnQxNl90CXY3WzIwNDhdOwp9IF9fcGFja2VkOwoKc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfSEwgewoJdWludDE2X3QJCXYxOwoJdWludDE2X3QJCXYyOwoJdWludDE2X3QJCXYzOwoJdWludDE2X3QJCXZfX19fQTE7CglpbnQzMl90CQkJdjQ7Cgl1aW50MzJfdAkJdjU7Cgl1aW50MTZfdAkJdjY7Cgl1aW50MTZfdAkJdl9fX19BMjsKCXVpbnQzMl90CQl2NzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0dFUSB7CglpbnQxNl90CQl2MVsxMF07Cn0gX19wYWNrZWQ7CnN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zIHsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0dMT0JBTAlnbG9iYWw7CglzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19XT1dIRAl3b3doZDsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0NTSFAJCWNzaHA7CglzdHJ1Y3Qgc3JzX3RydW1lZGlhX3BhcmFtc19IUEYJCWhwZjsKCXN0cnVjdCBzcnNfdHJ1bWVkaWFfcGFyYW1zX0FFUQkJYWVxOwoJc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfSEwJCWhsOwoJc3RydWN0IHNyc190cnVtZWRpYV9wYXJhbXNfR0VRCQlnZXE7Cn0gX19wYWNrZWQ7Ci8qIFNSUyBUcnVNZWRpYSBlbmQgKi8KCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9FTkFCTEUJCTB4MDAwMTA5MDQKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfU0FfUExVUyAweDEwMDBGRkZGCi8qIERUUyBFYWdsZSAqLwojZGVmaW5lIEFVRFBST0NfTU9EVUxFX0lEX0RUU19IUFhfUFJFTUlYIDB4MDAwMTA3N0MKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9EVFNfSFBYX1BPU1RNSVggMHgwMDAxMDc3QgojZGVmaW5lIEFTTV9TVFJFQU1fUE9TVFBST0NfVE9QT19JRF9EVFNfSFBYIDB4MDAwMTBERUQKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfSFBYX1BMVVMgIDB4MTAwMTUwMDAKI2RlZmluZSBBU01fU1RSRUFNX1BPU1RQUk9DX1RPUE9fSURfSFBYX01BU1RFUiAgMHgxMDAxNTAwMQpzdHJ1Y3QgYXNtX2R0c19lYWdsZV9wYXJhbSB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfc2V0X3BwX3BhcmFtc192MiBwYXJhbTsKCXN0cnVjdCBhc21fc3RyZWFtX3BhcmFtX2RhdGFfdjIgZGF0YTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fZHRzX2VhZ2xlX3BhcmFtX2dldCB7CglzdHJ1Y3QgYXByX2hkcgloZHI7CglzdHJ1Y3QgYXNtX3N0cmVhbV9jbWRfZ2V0X3BwX3BhcmFtc192MiBwYXJhbTsKfSBfX3BhY2tlZDsKCi8qIE9wY29kZSB0byBzZXQgQlQgYWRkcmVzcyBhbmQgbGljZW5zZSBmb3IgYXB0eCBkZWNvZGVyICovCiNkZWZpbmUgQVBUWF9ERUNPREVSX0JUX0FERFJFU1MgMHgwMDAxMzIwMQojZGVmaW5lIEFQVFhfQ0xBU1NJQ19ERUNfTElDRU5TRV9JRCAweDAwMDEzMjAyCgpzdHJ1Y3QgYXB0eF9kZWNfYnRfYWRkcl9jZmcgewoJdWludDMyX3QgbGFwOwoJdWludDMyX3QgdWFwOwoJdWludDMyX3QgbmFwOwp9IF9fcGFja2VkOwoKc3RydWN0IGFwdHhfZGVjX2J0X2Rldl9hZGRyIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhc21fc3RyZWFtX2NtZF9zZXRfZW5jZGVjX3BhcmFtIGVuY2RlYzsKCXN0cnVjdCBhcHR4X2RlY19idF9hZGRyX2NmZyBidF9hZGRyX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhc21fYXB0eF9kZWNfZm10X2Jsa192MiB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYXNtX2RhdGFfY21kX21lZGlhX2ZtdF91cGRhdGVfdjIgZm10YmxrOwoJdTMyICAgICBzYW1wbGVfcmF0ZTsKLyogTnVtYmVyIG9mIHNhbXBsZXMgcGVyIHNlY29uZC4KICogU3VwcG9ydGVkIHZhbHVlczogNDQxMDAgYW5kIDQ4MDAwIEh6CiAqLwp9IF9fcGFja2VkOwoKLyogUTZDb3JlIFNwZWNpZmljICovCiNkZWZpbmUgQVZDU19DTURfR0VUX0ZXS19WRVJTSU9OICgweDAwMDEyOTJDKQojZGVmaW5lIEFWQ1NfQ01EUlNQX0dFVF9GV0tfVkVSU0lPTiAoMHgwMDAxMjkyRCkKCiNkZWZpbmUgQVZDU19TRVJWSUNFX0lEX0FMTCAoMHhGRkZGRkZGRikKI2RlZmluZSBBVkNTX1NFUlZJQ0VfSURfQUZFICgweDQpCiNkZWZpbmUgQVBSVjJfSURTX1NFUlZJQ0VfSURfQURTUF9DVlBfVgkoMHhCKQoKc3RydWN0IGF2Y3NfZ2V0X2Z3a192ZXJzaW9uIHsKCS8qCgkgKiBJbmRpY2F0ZXMgdGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIEFWUyBidWlsZC4KCSAqIFRoaXMgdmFsdWUgaXMgaW5jcmVtZW50ZWQgb24gY2hpcHNldCBmYW1pbHkgYm91bmRhcmllcy4KCSAqLwoJdWludDMyX3QgYnVpbGRfbWFqb3JfdmVyc2lvbjsKCgkvKgoJICogTWlub3IgdmVyc2lvbiBvZiB0aGUgQVZTIGJ1aWxkLgoJICogVGhpcyB2YWx1ZSByZXByZXNlbnRzIHRoZSBtYWlubGluZSB0byB3aGljaCB0aGUgQVZTIGJ1aWxkIGJlbG9uZ3MuCgkgKi8KCXVpbnQzMl90IGJ1aWxkX21pbm9yX3ZlcnNpb247CgoJLyogSW5kaWNhdGVzIHRoZSBBVlMgYnJhbmNoIHZlcnNpb24gdG8gd2hpY2ggdGhlIGltYWdlIGJlbG9uZ3MuICovCgl1aW50MzJfdCBidWlsZF9icmFuY2hfdmVyc2lvbjsKCgkvKiBJbmRpY2F0ZXMgdGhlIEFWUyBzdWItYnJhbmNoIG9yIGN1c3RvbWVyIHByb2R1Y3QgbGluZSBpbmZvcm1hdGlvbi4gKi8KCXVpbnQzMl90IGJ1aWxkX3N1YmJyYW5jaF92ZXJzaW9uOwoKCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgQVZTIHNlcnZpY2VzIGluIHRoZSBjdXJyZW50IGJ1aWxkLiAqLwoJdWludDMyX3QgbnVtX3NlcnZpY2VzOwp9OwoKc3RydWN0IGF2c19zdmNfYXBpX2luZm8gewoJLyoKCSAqIEFQUlYyIHNlcnZpY2UgSURzIGZvciB0aGUgaW5kaXZpZHVhbCBzdGF0aWMgc2VydmljZXMuCgkgKgoJICoJIEB2YWx1ZXMKCSAqCSAtIEFQUlYyX0lEU19TRVJWSUNFX0lEX0FEU1BfQ09SRV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FGRV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FTTV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0FETV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX01WTV9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0NWU19WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0NWUF9WCgkgKgkgLSBBUFJWMl9JRFNfU0VSVklDRV9JRF9BRFNQX0xTTV9WCgkgKi8KCXVpbnQzMl90IHNlcnZpY2VfaWQ7CgoJLyoKCSAqIEluZGljYXRlcyB0aGUgQVBJIHZlcnNpb24gb2YgdGhlIHNlcnZpY2UuCgkgKgoJICogRWFjaCBuZXcgQVBJIHVwZGF0ZSB0aGF0IHdhcnJhbnRzIGEgY2hhbmdlIG9uIHRoZSBITE9TIHNpZGUgdHJpZ2dlcnMKCSAqIGFuIGluY3JlbWVudCBpbiB0aGUgdmVyc2lvbi4KCSAqLwoJdWludDMyX3QgYXBpX3ZlcnNpb247CgoJLyoKCSAqIEluZGljYXRlcyB0aGUgQVBJIGluY3JlbWVudHMgb24gYSBzdWItYnJhbmNoIChub3Qgb24gdGhlIG1haW5saW5lKS4KCSAqCgkgKiBBUEkgYnJhbmNoIHZlcnNpb24gbnVtYmVycyBjYW4gaW5jcmVtZW50IGluZGVwZW5kZW50bHkgb24gZGlmZmVyZW50CgkgKiBzdWItYnJhbmNoZXMuCgkgKi8KCXVpbnQzMl90IGFwaV9icmFuY2hfdmVyc2lvbjsKfTsKCnN0cnVjdCBhdmNzX2Z3a192ZXJfaW5mbyB7CglzdHJ1Y3QgYXZjc19nZXRfZndrX3ZlcnNpb24gYXZjc19md2tfdmVyc2lvbjsKCXN0cnVjdCBhdnNfc3ZjX2FwaV9pbmZvIHNlcnZpY2VzWzBdOwp9IF9fcGFja2VkOwoKLyogTFNNIFNwZWNpZmljICovCiNkZWZpbmUgVldfRkVBVF9ESU0JCQkJCSgzOSkKCiNkZWZpbmUgQVBSVjJfSURTX1NFUlZJQ0VfSURfQURTUF9MU01fVgkJCSgweEQpCiNkZWZpbmUgQVBSVjJfSURTX0RPTUFJTl9JRF9BRFNQX1YJCQkoMHg0KQojZGVmaW5lIEFQUlYyX0lEU19ET01BSU5fSURfQVBQU19WCQkJKDB4NSkKCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1NIQVJFRF9NRU1fTUFQX1JFR0lPTlMJCSgweDAwMDEyQTdGKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRFJTUF9TSEFSRURfTUVNX01BUF9SRUdJT05TCSgweDAwMDEyQTgwKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9TSEFSRURfTUVNX1VOTUFQX1JFR0lPTlMJKDB4MDAwMTJBODEpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX09QRU5fVFgJCQkJKDB4MDAwMTJBODIpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX0NMT1NFX1RYCQkJKDB4MDAwMTJBODgpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX1NFVF9QQVJBTVMJCQkoMHgwMDAxMkE4MykKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfU0VUX1BBUkFNU19WMgkJCSgweDAwMDEyQThGKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9SRUdJU1RFUl9TT1VORF9NT0RFTAkJKDB4MDAwMTJBODQpCiNkZWZpbmUgTFNNX1NFU1NJT05fQ01EX0RFUkVHSVNURVJfU09VTkRfTU9ERUwJCSgweDAwMDEyQTg1KQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9TVEFSVAkJCQkoMHgwMDAxMkE4NikKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfU1RPUAkJCQkoMHgwMDAxMkE4NykKI2RlZmluZSBMU01fU0VTU0lPTl9DTURfRU9CCQkJCSgweDAwMDEyQTg5KQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9SRUFECQkJCSgweDAwMDEyQThBKQojZGVmaW5lIExTTV9TRVNTSU9OX0NNRF9PUEVOX1RYX1YyCQkJKDB4MDAwMTJBOEIpCiNkZWZpbmUgTFNNX0NNRF9BRERfVE9QT0xPR0lFUwkJCQkoMHgwMDAxMkE4QykKCiNkZWZpbmUgTFNNX1NFU1NJT05fRVZFTlRfREVURUNUSU9OX1NUQVRVUwkJKDB4MDAwMTJCMDApCiNkZWZpbmUgTFNNX1NFU1NJT05fRVZFTlRfREVURUNUSU9OX1NUQVRVU19WMgkJKDB4MDAwMTJCMDEpCiNkZWZpbmUgTFNNX0RBVEFfRVZFTlRfUkVBRF9ET05FCQkJKDB4MDAwMTJCMDIpCiNkZWZpbmUgTFNNX0RBVEFfRVZFTlRfU1RBVFVTCQkJCSgweDAwMDEyQjAzKQojZGVmaW5lIExTTV9TRVNTSU9OX0VWRU5UX0RFVEVDVElPTl9TVEFUVVNfVjMJCSgweDAwMDEyQjA0KQoKI2RlZmluZSBMU01fTU9EVUxFX0lEX1ZPSUNFX1dBS0VVUAkJCSgweDAwMDEyQzAwKQojZGVmaW5lIExTTV9QQVJBTV9JRF9FTkRQT0lOVF9ERVRFQ1RfVEhSRVNIT0xECQkoMHgwMDAxMkMwMSkKI2RlZmluZSBMU01fUEFSQU1fSURfT1BFUkFUSU9OX01PREUJCQkoMHgwMDAxMkMwMikKI2RlZmluZSBMU01fUEFSQU1fSURfR0FJTgkJCQkoMHgwMDAxMkMwMykKI2RlZmluZSBMU01fUEFSQU1fSURfQ09OTkVDVF9UT19QT1JUCQkJKDB4MDAwMTJDMDQpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX0ZFQVRVUkVfQ09NUEVOU0FUSU9OX0RBVEEJCSgweDAwMDEyQzA3KQojZGVmaW5lIExTTV9QQVJBTV9JRF9NSU5fQ09ORklERU5DRV9MRVZFTFMJCSgweDAwMDEyQzA3KQojZGVmaW5lIExTTV9NT0RVTEVfSURfTEFCCQkJCSgweDAwMDEyQzA4KQojZGVmaW5lIExTTV9QQVJBTV9JRF9MQUJfRU5BQkxFCQkJCSgweDAwMDEyQzA5KQojZGVmaW5lIExTTV9QQVJBTV9JRF9MQUJfQ09ORklHCQkJCSgweDAwMDEyQzBBKQojZGVmaW5lIExTTV9NT0RVTEVfSURfRlJBTUVXT1JLCQkJCSgweDAwMDEyQzBFKQojZGVmaW5lIExTTV9QQVJBTV9JRF9TV01BRF9DRkcJCQkJKDB4MDAwMTJDMTgpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX1NXTUFEX01PREVMCQkJKDB4MDAwMTJDMTkpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX1NXTUFEX0VOQUJMRQkJCSgweDAwMDEyQzFBKQojZGVmaW5lIExTTV9QQVJBTV9JRF9QT0xMSU5HX0VOQUJMRQkJCSgweDAwMDEyQzFCKQojZGVmaW5lIExTTV9QQVJBTV9JRF9NRURJQV9GTVQJCQkJKDB4MDAwMTJDMUUpCiNkZWZpbmUgTFNNX1BBUkFNX0lEX0ZXS19NT0RFX0NPTkZJRwkJCSgweDAwMDEyQzI3KQoKLyogSFcgTUFEIHNwZWNpZmljICovCiNkZWZpbmUgQUZFX01PRFVMRV9IV19NQUQJCQkJKDB4MDAwMTAyMzApCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0hXX01BRF9DRkcJCQkJKDB4MDAwMTAyMzEpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0hXX01BRF9DVFJMCQkJKDB4MDAwMTAyMzIpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NMSU1CVVNfU0xBVkVfUE9SVF9DRkcJCSgweDAwMDEwMjMzKQoKLyogU1cgTUFEIHNwZWNpZmljICovCiNkZWZpbmUgQUZFX01PRFVMRV9TV19NQUQJCQkJKDB4MDAwMTAyMkQpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NXX01BRF9DRkcJCQkJKDB4MDAwMTAyMkUpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX1NWTV9NT0RFTAkJCQkoMHgwMDAxMDIyRikKCi8qIENvbW1hbmRzL1BhcmFtcyB0byBwYXNzIHRoZSBjb2RlYy9zbGltYnVzIGRhdGEgdG8gRFNQICovCiNkZWZpbmUgQUZFX1NWQ19DTURfU0VUX1BBUkFNCQkJCSgweDAwMDEwMGYzKQojZGVmaW5lIEFGRV9NT0RVTEVfQ0RDX0RFVl9DRkcJCQkJKDB4MDAwMTAyMzQpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NEQ19TTElNQlVTX1NMQVZFX0NGRwkJKDB4MDAwMTAyMzUpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NEQ19SRUdfQ0ZHCQkJKDB4MDAwMTAyMzYpCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0NEQ19SRUdfQ0ZHX0lOSVQJCQkoMHgwMDAxMDIzNykKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0RDX1JFR19QQUdFX0NGRyAgICAgICAgICAgICAgICAgICAoMHgwMDAxMDI5NikKCiNkZWZpbmUgQUZFX01BWF9DRENfUkVHSVNURVJTX1RPX0NPTkZJRwkJCSgyMCkKCi8qIEFBTkMgUG9ydCBDb25maWcgU3BlY2lmaWMgKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfQUFOQ19QT1JUX0NPTkZJRwkJCSgweDAwMDEwMjE1KQojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9BQU5DX1BPUlRfQ09ORklHCQkoMHgxKQojZGVmaW5lIEFBTkNfVFhfTUlDX1VOVVNFRAkJCQkoMCkKI2RlZmluZSBBQU5DX1RYX1ZPSUNFX01JQwkJCQkoMSkKI2RlZmluZSBBQU5DX1RYX0VSUk9SX01JQwkJCQkoMikKI2RlZmluZSBBQU5DX1RYX05PSVNFX01JQwkJCQkoMykKI2RlZmluZSBBRkVfUE9SVF9NQVhfQ0hBTk5FTF9DTlQJCQkoOCkKI2RlZmluZSBBRkVfTU9EVUxFX0FBTkMJCQkJCSgweDAwMDEwMjE0KQojZGVmaW5lIEFGRV9QQVJBTV9JRF9DRENfQUFOQ19WRVJTSU9OCQkJKDB4MDAwMTAyM0EpCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0NEQ19BQU5DX1ZFUlNJT04JCSgweDEpCiNkZWZpbmUgQUFOQ19IV19CTE9DS19WRVJTSU9OXzEJCQkJKDEpCiNkZWZpbmUgQUFOQ19IV19CTE9DS19WRVJTSU9OXzIJCQkJKDIpCgovKkNsaXAgYmFuayBzZWxlY3Rpb24qLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9DTElQX0JBTktfU0VMX0NGRyAweDEKI2RlZmluZSBBRkVfQ0xJUF9NQVhfQkFOS1MJCTQKI2RlZmluZSBBRkVfUEFSQU1fSURfQ0xJUF9CQU5LX1NFTF9DRkcgMHgwMDAxMDI0MgoKc3RydWN0IGFmZV9wYXJhbV9hYW5jX3BvcnRfY2ZnIHsKCS8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZSdzCgkgKiBzb3VyY2UgcG9ydCBjb25maWd1cmF0aW9uLgoJICovCgl1aW50MzJfdCBhYW5jX3BvcnRfY2ZnX21pbm9yX3ZlcnNpb247CgoJLyogU2FtcGxpbmcgcmF0ZSBvZiB0aGUgc291cmNlIFR4IHBvcnQuIDhrIC0gMTkyayovCgl1aW50MzJfdCB0eF9wb3J0X3NhbXBsZV9yYXRlOwoKCS8qIENoYW5uZWwgbWFwcGluZyBmb3IgdGhlIFR4IHBvcnQgc2lnbmFsIGNhcnJ5aW5nIE5vaXNlIChYKSwKCSAqIEVycm9yIChFKSwgYW5kIFZvaWNlIChWKSBzaWduYWxzLgoJICovCgl1aW50OF90IHR4X3BvcnRfY2hhbm5lbF9tYXBbQUZFX1BPUlRfTUFYX0NIQU5ORUxfQ05UXTsKCgkvKiBOdW1iZXIgb2YgY2hhbm5lbHMgb24gdGhlIHNvdXJjZSBUeCBwb3J0LiAqLwoJdWludDE2X3QgdHhfcG9ydF9udW1fY2hhbm5lbHM7CgoJLyogUG9ydCBJRCBvZiB0aGUgUnggcGF0aCByZWZlcmVuY2Ugc2lnbmFsLiAqLwoJdWludDE2X3QgcnhfcGF0aF9yZWZfcG9ydF9pZDsKCgkvKiBTYW1wbGluZyByYXRlIG9mIHRoZSByZWZlcmVuY2UgcG9ydC4gOGsgLSAxOTJrKi8KCXVpbnQzMl90IHJlZl9wb3J0X3NhbXBsZV9yYXRlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9pZF9jZGNfYWFuY192ZXJzaW9uIHsKCS8qIE1pbm9yIHZlcnNpb24gdXNlZCBmb3IgdHJhY2tpbmcgdGhlIHZlcnNpb24gb2YgdGhlIG1vZHVsZSdzCgkgKiBodyB2ZXJzaW9uCgkgKi8KCXVpbnQzMl90IGNkY19hYW5jX21pbm9yX3ZlcnNpb247CgoJLyogSFcgdmVyc2lvbi4gKi8KCXVpbnQzMl90IGFhbmNfaHdfdmVyc2lvbjsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1faWRfY2xpcF9iYW5rX3NlbCB7CgkvKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUncwoJICogaHcgdmVyc2lvbgoJICovCgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoKCS8qIE51bWJlciBvZiBiYW5rcyB0byBiZSByZWFkICovCgl1aW50MzJfdCBudW1fYmFua3M7CgoJdWludDMyX3QgYmFua19tYXBbQUZFX0NMSVBfTUFYX0JBTktTXTsKfSBfX3BhY2tlZDsKCi8qIEVSUk9SIENPREVTICovCi8qIFN1Y2Nlc3MuIFRoZSBvcGVyYXRpb24gY29tcGxldGVkIHdpdGggbm8gZXJyb3JzLiAqLwojZGVmaW5lIEFEU1BfRU9LICAgICAgICAgIDB4MDAwMDAwMDAKLyogR2VuZXJhbCBmYWlsdXJlLiAqLwojZGVmaW5lIEFEU1BfRUZBSUxFRCAgICAgIDB4MDAwMDAwMDEKLyogQmFkIG9wZXJhdGlvbiBwYXJhbWV0ZXIuICovCiNkZWZpbmUgQURTUF9FQkFEUEFSQU0gICAgMHgwMDAwMDAwMgovKiBVbnN1cHBvcnRlZCByb3V0aW5lIG9yIG9wZXJhdGlvbi4gKi8KI2RlZmluZSBBRFNQX0VVTlNVUFBPUlRFRCAweDAwMDAwMDAzCi8qIFVuc3VwcG9ydGVkIHZlcnNpb24uICovCiNkZWZpbmUgQURTUF9FVkVSU0lPTiAgICAgMHgwMDAwMDAwNAovKiBVbmV4cGVjdGVkIHByb2JsZW0gZW5jb3VudGVyZWQuICovCiNkZWZpbmUgQURTUF9FVU5FWFBFQ1RFRCAgMHgwMDAwMDAwNQovKiBVbmhhbmRsZWQgcHJvYmxlbSBvY2N1cnJlZC4gKi8KI2RlZmluZSBBRFNQX0VQQU5JQyAgICAgICAweDAwMDAwMDA2Ci8qIFVuYWJsZSB0byBhbGxvY2F0ZSByZXNvdXJjZS4gKi8KI2RlZmluZSBBRFNQX0VOT1JFU09VUkNFICAweDAwMDAwMDA3Ci8qIEludmFsaWQgaGFuZGxlLiAqLwojZGVmaW5lIEFEU1BfRUhBTkRMRSAgICAgIDB4MDAwMDAwMDgKLyogT3BlcmF0aW9uIGlzIGFscmVhZHkgcHJvY2Vzc2VkLiAqLwojZGVmaW5lIEFEU1BfRUFMUkVBRFkgICAgIDB4MDAwMDAwMDkKLyogT3BlcmF0aW9uIGlzIG5vdCByZWFkeSB0byBiZSBwcm9jZXNzZWQuICovCiNkZWZpbmUgQURTUF9FTk9UUkVBRFkgICAgMHgwMDAwMDAwQQovKiBPcGVyYXRpb24gaXMgcGVuZGluZyBjb21wbGV0aW9uLiAqLwojZGVmaW5lIEFEU1BfRVBFTkRJTkcgICAgIDB4MDAwMDAwMEIKLyogT3BlcmF0aW9uIGNvdWxkIG5vdCBiZSBhY2NlcHRlZCBvciBwcm9jZXNzZWQuICovCiNkZWZpbmUgQURTUF9FQlVTWSAgICAgICAgMHgwMDAwMDAwQwovKiBPcGVyYXRpb24gYWJvcnRlZCBkdWUgdG8gYW4gZXJyb3IuICovCiNkZWZpbmUgQURTUF9FQUJPUlRFRCAgICAgMHgwMDAwMDAwRAovKiBPcGVyYXRpb24gcHJlZW1wdGVkIGJ5IGEgaGlnaGVyIHByaW9yaXR5LiAqLwojZGVmaW5lIEFEU1BfRVBSRUVNUFRFRCAgIDB4MDAwMDAwMEUKLyogT3BlcmF0aW9uIHJlcXVlc3RzIGludGVydmVudGlvbiB0byBjb21wbGV0ZS4gKi8KI2RlZmluZSBBRFNQX0VDT05USU5VRSAgICAweDAwMDAwMDBGCi8qIE9wZXJhdGlvbiByZXF1ZXN0cyBpbW1lZGlhdGUgaW50ZXJ2ZW50aW9uIHRvIGNvbXBsZXRlLiAqLwojZGVmaW5lIEFEU1BfRUlNTUVESUFURSAgIDB4MDAwMDAwMTAKLyogT3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZC4gKi8KI2RlZmluZSBBRFNQX0VOT1RJTVBMICAgICAweDAwMDAwMDExCi8qIE9wZXJhdGlvbiBuZWVkcyBtb3JlIGRhdGEgb3IgcmVzb3VyY2VzLiAqLwojZGVmaW5lIEFEU1BfRU5FRURNT1JFICAgIDB4MDAwMDAwMTIKLyogT3BlcmF0aW9uIGRvZXMgbm90IGhhdmUgbWVtb3J5LiAqLwojZGVmaW5lIEFEU1BfRU5PTUVNT1JZICAgIDB4MDAwMDAwMTQKLyogSXRlbSBkb2VzIG5vdCBleGlzdC4gKi8KI2RlZmluZSBBRFNQX0VOT1RFWElTVCAgICAweDAwMDAwMDE1Ci8qIE1heCBjb3VudCBmb3IgYWRzcCBlcnJvciBjb2RlIHNlbnQgdG8gSExPUyovCiNkZWZpbmUgQURTUF9FUlJfTUFYICAgICAgKEFEU1BfRU5PVEVYSVNUICsgMSkKLyogT3BlcmF0aW9uIGlzIGZpbmlzaGVkLiAqLwojZGVmaW5lIEFEU1BfRVRFUk1JTkFURUQgICAgMHgwMDAxMTE3NAoKLypiaGFyYXRoLCBhZHNwX2Vycm9yX2NvZGVzLmggKi8KCi8qIExQQVNTIGNsb2NrIGZvciBJMlMgSW50ZXJmYWNlICovCgovKiBTdXBwb3J0ZWQgT1NSIGNsb2NrIHZhbHVlcyAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfMTJfUDI4OF9NSFoJCTB4QkI4MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS18xMV9QMjg5Nl9NSFoJCTB4QUM0NDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS185X1A2MDBfTUhaCQkweDkyN0MwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfOF9QMTkyX01IWgkJMHg3RDAwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzZfUDE0NF9NSFoJCTB4NURDMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS180X1AwOTZfTUhaCQkweDNFODAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfM19QMDcyX01IWgkJMHgyRUUwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzJfUDA0OF9NSFoJCTB4MUY0MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS18xX1A1MzZfTUhaCQkweDE3NzAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfMV9QMDI0X01IWgkJIDB4RkEwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19PU1JfQ0xLXzc2OF9rSFoJCSAweEJCODAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfT1NSX0NMS181MTJfa0haCQkgMHg3RDAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX09TUl9DTEtfRElTQUJMRQkJICAgICAweDAKCi8qIFN1cHBvcnRlZCBCaXQgY2xvY2sgdmFsdWVzICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfMTJfUDI4OF9NSFoJMHhCQjgwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xMV9QMjg5Nl9NSFoJMHhBQzQ0MDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS184X1AxOTJfTUhaCQkweDdEMDAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzZfUDE0NF9NSFoJCTB4NURDMDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfNF9QMDk2X01IWgkJMHgzRTgwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18zX1AwNzJfTUhaCQkweDJFRTAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzJfUDgyMjRfTUhaCQkweDJiMTEwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzJfUDA0OF9NSFoJCTB4MUY0MDAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfMV9QNTM2X01IWgkJMHgxNzcwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xX1A0MTEyX01IWgkJMHgxNTg4ODAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18xX1AwMjRfTUhaCQkgMHhGQTAwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLXzc2OF9LSFoJCSAweEJCODAwCiNkZWZpbmUgUTZBRkVfTFBBU1NfSUJJVF9DTEtfNTEyX0tIWgkJIDB4N0QwMDAKI2RlZmluZSBRNkFGRV9MUEFTU19JQklUX0NMS18yNTZfS0haCQkgMHgzRTgwMAojZGVmaW5lIFE2QUZFX0xQQVNTX0lCSVRfQ0xLX0RJU0FCTEUJCSAgICAgMHgwCgovKiBTdXBwb3J0ZWQgTFBBU1MgQ0xLIHNvdXJjZXMgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfU1JDX0VYVEVSTkFMIDAKI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfU1JDX0lOVEVSTkFMIDEKCi8qIFN1cHBvcnRlZCBMUEFTUyBDTEsgcm9vdCovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX1JPT1RfREVGQVVMVCAwCgplbnVtIGFmZV9scGFzc19jbGtfbW9kZSB7CglRNkFGRV9MUEFTU19NT0RFX0JPVEhfSU5WQUxJRCwKCVE2QUZFX0xQQVNTX01PREVfQ0xLMV9WQUxJRCwKCVE2QUZFX0xQQVNTX01PREVfQ0xLMl9WQUxJRCwKCVE2QUZFX0xQQVNTX01PREVfQk9USF9WQUxJRCwKfSBfX3BhY2tlZDsKCi8qIENsb2NrIElEIEVudW1lcmF0aW9uIERlZmluZS4gKi8KLyogQ2xvY2sgSUQgZm9yIFByaW1hcnkgSTJTIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUFJJX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKLyogQ2xvY2sgSUQgZm9yIFByaW1hcnkgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUFJJX01JMlNfRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDEKLyogQ2xvY2sgSUQgZm9yIFNlY29uZGFyeSBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TRUNfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMgovKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19NSTJTX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAzCi8qIENsb2NrIElEIGZvciBUZXJ0aWFyeSBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwNAovKiBDbG9jayBJRCBmb3IgVGVydGlhcnkgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfVEVSX01JMlNfRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxMDUKLyogQ2xvY2sgSUQgZm9yIFF1YXJ0bmVyeSBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUFEX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAweDEwNgovKiBDbG9jayBJRCBmb3IgUXVhcnRuZXJ5IEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVQURfTUkyU19FQklUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTA3Ci8qIENsb2NrIElEIGZvciBTcGVha2VyIEkyUyBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NQRUFLRVJfSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTA4Ci8qIENsb2NrIElEIGZvciBTcGVha2VyIEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NQRUFLRVJfSTJTX0VCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTA5Ci8qIENsb2NrIElEIGZvciBTcGVha2VyIEkyUyBPU1IgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU1BFQUtFUl9JMlNfT1NSICAgICAgICAgICAgICAgICAgICAgICAgMHgxMEEKCi8qIENsb2NrIElEIGZvciBRVUlOQVJZICBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUlfTUkyU19JQklUCQkJMHgxMEIKLyogQ2xvY2sgSUQgZm9yIFFVSU5BUlkgIEkyUyBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSV9NSTJTX0VCSVQJCQkweDEwQwovKiBDbG9jayBJRCBmb3IgU0VOQVJZICBJMlMgSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9TRU5fTUkyU19JQklUCQkJMHgxMEQKLyogQ2xvY2sgSUQgZm9yIFNFTkFSWSAgSTJTIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VOX01JMlNfRUJJVAkJCTB4MTBFCi8qIENsb2NrIElEIGZvciBJTlQwIEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQwX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMEYKLyogQ2xvY2sgSUQgZm9yIElOVDEgSTJTIElCSVQgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVDFfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAweDExMAovKiBDbG9jayBJRCBmb3IgSU5UMiBJMlMgSUJJVCAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5UMl9NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTExCi8qIENsb2NrIElEIGZvciBJTlQzIEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQzX01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMTIKLyogQ2xvY2sgSUQgZm9yIElOVDQgSTJTIElCSVQgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVDRfTUkyU19JQklUICAgICAgICAgICAgICAgICAgICAgICAweDExMwovKiBDbG9jayBJRCBmb3IgSU5UNSBJMlMgSUJJVCAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5UNV9NSTJTX0lCSVQgICAgICAgICAgICAgICAgICAgICAgIDB4MTE0Ci8qIENsb2NrIElEIGZvciBJTlQ2IEkyUyBJQklUICAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlQ2X01JMlNfSUJJVCAgICAgICAgICAgICAgICAgICAgICAgMHgxMTUKCi8qIENsb2NrIElEIGZvciBRVUlOQVJZIE1JMlMgT1NSIENMSyAgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVJX01JMlNfT1NSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTE2CgovKiBDbG9jayBJRCBmb3IgUHJpbWFyeSBQQ00gSUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9QUklfUENNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMAovKiBDbG9jayBJRCBmb3IgUHJpbWFyeSBQQ00gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9QUklfUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMQovKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IFBDTSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAyCi8qIENsb2NrIElEIGZvciBTZWNvbmRhcnkgUENNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU0VDX1BDTV9FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDMKLyogQ2xvY2sgSUQgZm9yIFRlcnRpYXJ5IFBDTSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1RFUl9QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA0Ci8qIENsb2NrIElEIGZvciBUZXJ0aWFyeSBQQ00gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwNQovKiBDbG9jayBJRCBmb3IgUXVhcnRlcnkgUENNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVBRF9QQ01fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDYKLyogQ2xvY2sgSUQgZm9yIFF1YXJ0ZXJ5IFBDTSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVQURfUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA3Ci8qIENsb2NrIElEIGZvciBRdWluYXJ5IFBDTSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fUENNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4Ci8qIENsb2NrIElEIGZvciBRdWluYXJ5IFBDTSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fUENNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA5Ci8qIENsb2NrIElEIGZvciBRVUlOQVJZIFBDTSBPU1IgICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSV9QQ01fT1NSICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjBBCgovKiogQ2xvY2sgSUQgZm9yIFByaW1hcnkgVERNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUFJJX1RETV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAKLyoqIENsb2NrIElEIGZvciBQcmltYXJ5IFRETSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1BSSV9URE1fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAxCi8qKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IFRETSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19URE1fSUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAyCi8qKiBDbG9jayBJRCBmb3IgU2Vjb25kYXJ5IFRETSBFQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1NFQ19URE1fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAzCi8qKiBDbG9jayBJRCBmb3IgVGVydGlhcnkgVERNIElCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfVEVSX1RETV9JQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDQKLyoqIENsb2NrIElEIGZvciBUZXJ0aWFyeSBURE0gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9URVJfVERNX0VCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwNQovKiogQ2xvY2sgSUQgZm9yIFF1YXJ0ZXJ5IFRETSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVQURfVERNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA2Ci8qKiBDbG9jayBJRCBmb3IgUXVhcnRlcnkgVERNIEVCSVQgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfUVVBRF9URE1fRUJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDcKLyoqIENsb2NrIElEIGZvciBRdWluYXJ5IFRETSBJQklUICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX1FVSU5fVERNX0lCSVQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjA4Ci8qKiBDbG9jayBJRCBmb3IgUXVpbmFyeSBURE0gRUJJVCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUlOX1RETV9FQklUICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwOQovKiogQ2xvY2sgSUQgZm9yIFF1aW5hcnkgVERNIE9TUiAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9RVUlOX1RETV9PU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwQQoKLyogQ2xvY2sgSUQgZm9yIE1DTEsxICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX01DTEtfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzAwCi8qIENsb2NrIElEIGZvciBNQ0xLMiAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9NQ0xLXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwMQovKiBDbG9jayBJRCBmb3IgTUNMSzMgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfTUNMS18zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDIKLyogQ2xvY2sgSUQgZm9yIE1DTEs0ICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX01DTEtfNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA0Ci8qIENsb2NrIElEIGZvciBJbnRlcm5hbCBEaWdpdGFsIENvZGVjIENvcmUgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfSU5URVJOQUxfRElHSVRBTF9DT0RFQ19DT1JFICAgICAgICAgICAgMHgzMDMKLyogQ2xvY2sgSUQgZm9yIElOVCBNQ0xLMCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9JTlRfTUNMS18wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDMwNQovKiBDbG9jayBJRCBmb3IgSU5UIE1DTEsxICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0lEX0lOVF9NQ0xLXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzA2Ci8qCiAqIENsb2NrIElEIGZvciBzb3VuZHdpcmUgTlBMLgogKiBUaGlzIGlzIHRoZSBjbG9jayB0byBiZSB1c2VkIHRvIGVuYWJsZSBOUEwgY2xvY2sgZm9yICBpbnRlcm5hbCBTb3VuZHdpcmUuCiAqLwojZGVmaW5lIEFGRV9DTE9DS19TRVRfQ0xPQ0tfSURfU1dSX05QTF9DTEsgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMDcKCi8qIENsb2NrIElEIGZvciBBSEIgSERNSSBpbnB1dCAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19JRF9BSEJfSERNSV9JTlBVVCAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMAoKLyogQ2xvY2sgSUQgZm9yIFNQRElGIGNvcmUgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfSURfU1BESUZfQ09SRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MDAKCgovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIGludmFsaWQgdXNlIChyZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UpICovCiNkZWZpbmUgUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9JTlZBTElECQkweDAKLyogQ2xvY2sgYXR0cmlidXRlIGZvciBubyBjb3VwbGUgY2FzZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX05PCQkweDEKLyogQ2xvY2sgYXR0cmlidXRlIGZvciBkaXZpZGVuZCBjb3VwbGUgY2FzZSAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX0RJVklERU5ECTB4MgovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIGRpdmlzb3IgY291cGxlIGNhc2UgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0NPVVBMRV9ESVZJU09SCTB4MwovKiBDbG9jayBhdHRyaWJ1dGUgZm9yIGludmVydCBhbmQgbm8gY291cGxlIGNhc2UgKi8KI2RlZmluZSBRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0lOVkVSVF9DT1VQTEVfTk8JMHg0Ci8qIENsb2NrIHNldCBBUEkgdmVyc2lvbiAqLwojZGVmaW5lIFE2QUZFX0xQQVNTX0NMS19DT05GSUdfQVBJX1ZFUlNJT04JCTB4MQoKc3RydWN0IGFmZV9jbGtfc2V0IHsKCS8qCgkgKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIGNsb2NrIHNldC4KCSAqCUB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9DTE9DS19TRVQKCSAqLwoJdWludDMyX3QgY2xrX3NldF9taW5vcl92ZXJzaW9uOwoKCS8qCgkgKiBDbG9jayBJRAoJICoJQHZhbHVlcwoJICoJLSAweDEwMCB0byAweDEwQSAtIE1TTTg5OTYKCSAqCS0gMHgyMDAgdG8gMHgyMDcgLSBNU004OTk2CgkgKgktIDB4MzAwIHRvIDB4MzAyIC0gTVNNODk5NiBAdGFibGVidWxsZXRlbmQKCSAqLwoJdWludDMyX3QgY2xrX2lkOwoKCS8qCgkgKiBDbG9jayBmcmVxdWVuY3kgIChpbiBIZXJ0eikgdG8gYmUgc2V0LgoJICoJQHZhbHVlcwoJICoJLSA+PSAwIGZvciBjbG9jayBmcmVxdWVuY3kgdG8gc2V0IEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MzJfdCBjbGtfZnJlcV9pbl9oejsKCgkvKiBVc2UgdG8gc3BlY2lmaWMgZGl2aWRlciBmb3IgdHdvIGNsb2NrcyBpZiBuZWVkZWQuCgkgKglTZXQgdG8gUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9DT1VQTEVfTk8gZm9yIG5vIGRpdmlkZXIKCSAqCXJlbGF0aW9uIGNsb2NrcwoJICoJQHZhbHVlcwoJICoJLSAjUTZBRkVfTFBBU1NfQ0xLX0FUVFJJQlVURV9DT1VQTEVfTk8KCSAqCS0gI1E2QUZFX0xQQVNTX0NMS19BVFRSSUJVVEVfQ09VUExFX0RJVklERU5ECgkgKgktICNRNkFGRV9MUEFTU19DTEtfQVRUUklCVVRFX0NPVVBMRV9ESVZJU09SIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MTZfdCBjbGtfYXR0cmk7CgoJLyoKCSAqIFNwZWNpZmllcyB0aGUgcm9vdCBjbG9jayBzb3VyY2UuCgkgKglDdXJyZW50bHksIG9ubHkgUTZBRkVfTFBBU1NfQ0xLX1JPT1RfREVGQVVMVCBpcyB2YWxpZAoJICoJQHZhbHVlcwoJICoJLSAwIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MTZfdCBjbGtfcm9vdDsKCgkvKgoJICogZm9yIGVuYWJsZSBhbmQgZGlzYWJsZSBjbG9jay4KCSAqCSJjbGtfZnJlcV9pbl9oeiIsICJjbGtfYXR0cmkiLCBhbmQgImNsa19yb290IgoJICoJYXJlIGlnbm9yZWQgaW4gZGlzYWJsZSBjbG9jayBjYXNlLgoJICoJQHZhbHVlc6AKCSAqCS0gMCAtLSBEaXNhYmxlZAoJICoJLSAxIC0tIEVuYWJsZWQgIEB0YWJsZWJ1bGxldGVuZAoJICovCgl1aW50MzJfdCBlbmFibGU7Cn07CgpzdHJ1Y3QgYWZlX2Nsa19jZmcgewovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBJMlMKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fSTJTX0NPTkZJRwogKi8KCXUzMiAgICAgICAgICAgICAgICAgIGkyc19jZmdfbWlub3JfdmVyc2lvbjsKCi8qIGNsayB2YWx1ZSAxIGluIE1Iei4gKi8KCXUzMiAgICAgICAgICAgICAgICAgIGNsa192YWwxOwoKLyogY2xrIHZhbHVlIDIgaW4gTUh6LiAqLwoJdTMyICAgICAgICAgICAgICAgICAgY2xrX3ZhbDI7CgovKiBjbGtfc3JjCiAqICNRNkFGRV9MUEFTU19DTEtfU1JDX0VYVEVSTkFMCiAqICNRNkFGRV9MUEFTU19DTEtfU1JDX0lOVEVSTkFMCiAqLwoKCXUxNiAgICAgICAgICAgICAgICAgIGNsa19zcmM7CgovKiBjbGtfcm9vdCAtMCBmb3IgZGVmYXVsdCAqLwoJdTE2ICAgICAgICAgICAgICAgICAgY2xrX3Jvb3Q7CgovKiBjbGtfc2V0X21vZGUKICogI1E2QUZFX0xQQVNTX01PREVfQk9USF9JTlZBTElECiAqICNRNkFGRV9MUEFTU19NT0RFX0NMSzFfVkFMSUQKICogI1E2QUZFX0xQQVNTX01PREVfQ0xLMl9WQUxJRAogKiAjUTZBRkVfTFBBU1NfTU9ERV9CT1RIX1ZBTElECiAqLwoJdTE2ICAgICAgICAgICAgICAgICAgY2xrX3NldF9tb2RlOwoKLyogVGhpcyBwYXJhbSBpZCBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBJMlMgY2xrICovCgl1MTYgICAgICAgICAgICAgICAgICByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgSTJTIGNsayAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9MUEFJRl9DTEtfQ09ORklHCTB4MDAwMTAyMzgKI2RlZmluZSBBRkVfTU9EVUxFX0NMT0NLX1NFVAkJMHgwMDAxMDI4RgojZGVmaW5lIEFGRV9QQVJBTV9JRF9DTE9DS19TRVQJCTB4MDAwMTAyOTAKCnN0cnVjdCBhZmVfbHBhc3NfY2xrX2NvbmZpZ19jb21tYW5kIHsKCXN0cnVjdCBhcHJfaGRyCQkJIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgICAgcGRhdGE7CglzdHJ1Y3QgYWZlX2Nsa19jZmcgY2xrX2NmZzsKfSBfX3BhY2tlZDsKCmVudW0gYWZlX2xwYXNzX2RpZ2l0YWxfY2xrX3NyYyB7CglRNkFGRV9MUEFTU19ESUdJVEFMX1JPT1RfSU5WQUxJRCwKCVE2QUZFX0xQQVNTX0RJR0lUQUxfUk9PVF9QUklfTUkyU19PU1IsCglRNkFGRV9MUEFTU19ESUdJVEFMX1JPT1RfU0VDX01JMlNfT1NSLAoJUTZBRkVfTFBBU1NfRElHSVRBTF9ST09UX1RFUl9NSTJTX09TUiwKCVE2QUZFX0xQQVNTX0RJR0lUQUxfUk9PVF9RVUFEX01JMlNfT1NSLAoJUTZBRkVfTFBBU1NfRElHSVRBTF9ST09UX0NEQ19ST09UX0NMSywKfSBfX3BhY2tlZDsKCi8qIFRoaXMgcGFyYW0gaWQgaXMgdXNlZCB0byBjb25maWd1cmUgaW50ZXJuYWwgY2xrICovCiNkZWZpbmUgQUZFX1BBUkFNX0lEX0lOVEVSTkFMX0RJR0lBVExfQ0RDX0NMS19DT05GSUcJMHgwMDAxMDIzOQoKc3RydWN0IGFmZV9kaWdpdGFsX2Nsa19jZmcgewovKiBNaW5vciB2ZXJzaW9uIHVzZWQgZm9yIHRyYWNraW5nIHRoZSB2ZXJzaW9uIG9mIHRoZSBJMlMKICogY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAqIFN1cHBvcnRlZCB2YWx1ZXM6ICNBRkVfQVBJX1ZFUlNJT05fSTJTX0NPTkZJRwogKi8KCXUzMiAgICAgICAgICAgICAgICAgIGkyc19jZmdfbWlub3JfdmVyc2lvbjsKCi8qIGNsayB2YWx1ZSBpbiBNSHouICovCgl1MzIgICAgICAgICAgICAgICAgICBjbGtfdmFsOwoKLyoJSU5WQUxJRAogKglQUklfTUkyU19PU1IKICoJU0VDX01JMlNfT1NSCiAqCVRFUl9NSTJTX09TUgogKglRVUFEX01JMlNfT1NSCiAqCURJR1RfQ0RDX1JPT1QKICovCgl1MTYgICAgICAgICAgICAgICAgICBjbGtfcm9vdDsKCi8qIFRoaXMgZmllbGQgbXVzdCBiZSBzZXQgdG8gemVyby4gKi8KCXUxNiAgICAgICAgICAgICAgICAgIHJlc2VydmVkOwp9IF9fcGFja2VkOwoKCnN0cnVjdCBhZmVfbHBhc3NfZGlnaXRhbF9jbGtfY29uZmlnX2NvbW1hbmQgewoJc3RydWN0IGFwcl9oZHIJCQkgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfcGFyYW1fdjIgcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiAgICBwZGF0YTsKCXN0cnVjdCBhZmVfZGlnaXRhbF9jbGtfY2ZnIGNsa19jZmc7Cn0gX19wYWNrZWQ7CgovKgogKiBPcGNvZGUgZm9yIEFGRSB0byBzdGFydCBEVE1GLgogKi8KI2RlZmluZSBBRkVfUE9SVFNfQ01EX0RUTUZfQ1RMCTB4MDAwMTAxMDIKCi8qKiBEVE1GIHBheWxvYWQuKi8Kc3RydWN0IGFmZV9kdG1mX2dlbmVyYXRpb25fY29tbWFuZCB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CgoJLyoKCSAqIER1cmF0aW9uIG9mIHRoZSBEVE1GIHRvbmUgaW4gbXMuCgkgKiAtMSAgICAgIC0+IGNvbnRpbnVvdXMsCgkgKiAgMCAgICAgIC0+IGRpc2FibGUKCSAqLwoJaW50NjRfdCAgICAgICAgICAgICAgICAgICBkdXJhdGlvbl9pbl9tczsKCgkvKgoJICogVGhlIERUTUYgaGlnaCB0b25lIGZyZXF1ZW5jeS4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBoaWdoX2ZyZXE7CgoJLyoKCSAqIFRoZSBEVE1GIGxvdyB0b25lIGZyZXF1ZW5jeS4KCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBsb3dfZnJlcTsKCgkvKgoJICogVGhlIERUTUYgdm9sdW1lIHNldHRpbmcKCSAqLwoJdWludDE2X3QgICAgICAgICAgICAgICAgICBnYWluOwoKCS8qCgkgKiBUaGUgbnVtYmVyIG9mIHBvcnRzIHRvIGVuYWJsZS9kaXNhYmxlIG9uLgoJICovCgl1aW50MTZfdCAgICAgICAgICAgICAgICAgIG51bV9wb3J0czsKCgkvKgoJICogVGhlIERlc3RpbmF0aW9uIHBvcnRzIC0gYXJyYXkgIC4KCSAqIEZvciBEVE1GIG9uIG11bHRpcGxlIHBvcnRzLCBwb3J0SWRzIG5lZWRzIHRvCgkgKiBiZSBwb3B1bGF0ZWQgbnVtUG9ydHMgdGltZXMuCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcG9ydF9pZHM7CgoJLyoKCSAqIHZhcmlhYmxlIGZvciAzMiBiaXQgYWxpZ25tZW50IG9mIEFQUiBwYWNrZXQuCgkgKi8KCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQ7Cn0gX19wYWNrZWQ7CgplbnVtIGFmZV9jb25maWdfdHlwZSB7CglBRkVfU0xJTUJVU19TTEFWRV9QT1JUX0NPTkZJRywKCUFGRV9TTElNQlVTX1NMQVZFX0NPTkZJRywKCUFGRV9DRENfUkVHSVNURVJTX0NPTkZJRywKCUFGRV9BQU5DX1ZFUlNJT04sCglBRkVfQ0RDX0NMSVBfUkVHSVNURVJTX0NPTkZJRywKCUFGRV9DTElQX0JBTktfU0VMLAoJQUZFX0NEQ19SRUdJU1RFUl9QQUdFX0NPTkZJRywKCUFGRV9NQVhfQ09ORklHX1RZUEVTLAp9OwoKc3RydWN0IGFmZV9wYXJhbV9zbGltYnVzX3NsYXZlX3BvcnRfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MTZfdCBzbGltYnVzX2Rldl9pZDsKCXVpbnQxNl90IHNsYXZlX2Rldl9wZ2RfbGE7Cgl1aW50MTZfdCBzbGF2ZV9kZXZfaW50ZmRldl9sYTsKCXVpbnQxNl90IGJpdF93aWR0aDsKCXVpbnQxNl90IGRhdGFfZm9ybWF0OwoJdWludDE2X3QgbnVtX2NoYW5uZWxzOwoJdWludDE2X3Qgc2xhdmVfcG9ydF9tYXBwaW5nW0FGRV9QT1JUX01BWF9BVURJT19DSEFOX0NOVF07Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19zbGltYnVzX3NsYXZlX2NmZyB7Cgl1aW50MzJfdCBtaW5vcl92ZXJzaW9uOwoJdWludDMyX3QgZGV2aWNlX2VudW1fYWRkcl9sc3c7Cgl1aW50MzJfdCBkZXZpY2VfZW51bV9hZGRyX21zdzsKCXVpbnQxNl90IHR4X3NsYXZlX3BvcnRfb2Zmc2V0OwoJdWludDE2X3Qgcnhfc2xhdmVfcG9ydF9vZmZzZXQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfY2ZnIHsKCXVpbnQzMl90IG1pbm9yX3ZlcnNpb247Cgl1aW50MzJfdCByZWdfbG9naWNhbF9hZGRyOwoJdWludDMyX3QgcmVnX2ZpZWxkX3R5cGU7Cgl1aW50MzJfdCByZWdfZmllbGRfYml0X21hc2s7Cgl1aW50MTZfdCByZWdfYml0X3dpZHRoOwoJdWludDE2X3QgcmVnX29mZnNldF9zY2FsZTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0NEQ19SRUdfUEFHRV9DRkcgICAxCgplbnVtIHsKCUFGRV9DRENfUkVHX1BBR0VfQVNTSUdOX1BST0NfSURfMCA9IDAsCglBRkVfQ0RDX1JFR19QQUdFX0FTU0lHTl9QUk9DX0lEXzEsCglBRkVfQ0RDX1JFR19QQUdFX0FTU0lHTl9QUk9DX0lEXzIsCglBRkVfQ0RDX1JFR19QQUdFX0FTU0lHTl9QUk9DX0lEXzMsCn07CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfcGFnZV9jZmcgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQzMl90IGVuYWJsZTsKCXVpbnQzMl90IHByb2NfaWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfY2ZnX2RhdGEgewoJdWludDMyX3QgbnVtX3JlZ2lzdGVyczsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmcgKnJlZ19kYXRhOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSB7Cgl1aW50MzJfdCBwYXlsb2FkX3NpemU7Cgl1aW50MzJfdCBwYXlsb2FkX2FkZHJlc3NfbHN3OwoJdWludDMyX3QgcGF5bG9hZF9hZGRyZXNzX21zdzsKCXVpbnQzMl90IG1lbV9tYXBfaGFuZGxlOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfcGFyYW1fZGF0YSB7Cgl1aW50MzJfdCBtb2R1bGVfaWQ7Cgl1aW50MzJfdCBwYXJhbV9pZDsKCXVpbnQxNl90IHBhcmFtX3NpemU7Cgl1aW50MTZfdCByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfcGFyYW1faHdfbWFkX2N0cmwgewoJdWludDMyX3QgbWlub3JfdmVyc2lvbjsKCXVpbnQxNl90IG1hZF90eXBlOwoJdWludDE2X3QgbWFkX2VuYWJsZTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfY21kX2h3X21hZF9jdHJsIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2h3X21hZF9jdHJsIHBheWxvYWQ7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2NtZF9od19tYWRfc2xpbWJ1c19zbGF2ZV9wb3J0X2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJc3RydWN0IGFmZV9wYXJhbV9zbGltYnVzX3NsYXZlX3BvcnRfY2ZnIHNiX3BvcnRfY2ZnOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9jbWRfc3dfbWFkX2VuYWJsZSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wYXJhbV9jZGNfcmVnX2NmZ19wYXlsb2FkIHsKCXN0cnVjdCBhZmVfc3ZjX3BhcmFtX2RhdGEgICAgIGNvbW1vbjsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmcgIHJlZ19jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2xwYXNzX2Nsa19jb25maWdfY29tbWFuZF92MiB7CglzdHJ1Y3QgYXByX2hkcgkJCWhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0JcGFyYW07CglzdHJ1Y3QgYWZlX3N2Y19wYXJhbV9kYXRhCXBkYXRhOwoJc3RydWN0IGFmZV9jbGtfc2V0CQljbGtfY2ZnOwp9IF9fcGFja2VkOwoKLyoKICogcmVnX2RhdGEncyBzaXplIGNhbiBiZSB1cCB0byBBRkVfTUFYX0NEQ19SRUdJU1RFUlNfVE9fQ09ORklHCiAqLwpzdHJ1Y3QgYWZlX3N2Y19jbWRfY2RjX3JlZ19jZmcgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9zdmNfY21kX3NldF9wYXJhbSBwYXJhbTsKCXN0cnVjdCBhZmVfcGFyYW1fY2RjX3JlZ19jZmdfcGF5bG9hZCByZWdfZGF0YVswXTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3ZjX2NtZF9pbml0X2NkY19yZWdfY2ZnIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBpbml0Owp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9zdmNfY21kX3NiX3NsYXZlX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3N2Y19jbWRfc2V0X3BhcmFtIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2NkY19zbGltYnVzX3NsYXZlX2NmZyBzYl9zbGF2ZV9jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3N2Y19jbWRfY2RjX3JlZ19wYWdlX2NmZyB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3N2Y19jbWRfc2V0X3BhcmFtIHBhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2NkY19yZWdfcGFnZV9jZmcgY2RjX3JlZ19wYWdlX2NmZzsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZmVfc3ZjX2NtZF9jZGNfYWFuY192ZXJzaW9uIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfY2RjX2FhbmNfdmVyc2lvbiB2ZXJzaW9uOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfYWFuY19wYXJhbSB7CglzdHJ1Y3QgYXByX2hkciBoZHI7CglzdHJ1Y3QgYWZlX3BvcnRfY21kX3NldF9wYXJhbV92MiBwYXJhbTsKCXN0cnVjdCBhZmVfcG9ydF9wYXJhbV9kYXRhX3YyIHBkYXRhOwoJdW5pb24gewoJCXN0cnVjdCBhZmVfcGFyYW1fYWFuY19wb3J0X2NmZyBhYW5jX3BvcnRfY2ZnOwoJCXN0cnVjdCBhZmVfbW9kX2VuYWJsZV9wYXJhbSAgICBtb2RfZW5hYmxlOwoJfSBfX3BhY2tlZCBkYXRhOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9wb3J0X2NtZF9zZXRfYWFuY19hY2RiX3RhYmxlIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfcG9ydF9jbWRfc2V0X3BhcmFtX3YyIHBhcmFtOwp9IF9fcGFja2VkOwoKLyogRG9sYnkgREFQIHRvcG9sb2d5ICovCiNkZWZpbmUgRE9MQllfQURNX0NPUFBfVE9QT0xPR1lfSUQJMHgwMDAxMDMzQgojZGVmaW5lIERTMl9BRE1fQ09QUF9UT1BPTE9HWV9JRAkweDEzMDEwMzNCCgovKiBSTVMgdmFsdWUgZnJvbSBEU1AgKi8KI2RlZmluZSBSTVNfTU9EVUxFSURfQVBQSV9QQVNTVEhSVSAgMHgxMDAwOTAxMQojZGVmaW5lIFJNU19QQVJBTV9GSVJTVF9TQU1QTEUgMHgxMDAwOTAxMgojZGVmaW5lIFJNU19QQVlMT0FEX0xFTiA0CgovKiBDdXN0b21pemVkIG1peGluZyBpbiBtYXRpeCBtaXhlciAqLwojZGVmaW5lIE1UTVhfTU9EVUxFX0lEX0RFRkFVTFRfQ0hNSVhFUiAgMHgwMDAxMDM0MQojZGVmaW5lIERFRkFVTFRfQ0hNSVhFUl9QQVJBTV9JRF9DT0VGRiAgMHgwMDAxMDM0MgojZGVmaW5lIENVU1RPTV9TVEVSRU9fUEFZTE9BRF9TSVpFCTkKI2RlZmluZSBDVVNUT01fU1RFUkVPX0NNRF9QQVJBTV9TSVpFCTI0CiNkZWZpbmUgQ1VTVE9NX1NURVJFT19OVU1fT1VUX0NICTB4MDAwMgojZGVmaW5lIENVU1RPTV9TVEVSRU9fTlVNX0lOX0NICQkweDAwMDIKI2RlZmluZSBDVVNUT01fU1RFUkVPX0lOREVYX1BBUkFNCTB4MDAwMgojZGVmaW5lIFExNF9HQUlOX1pFUk9fUE9JTlRfRklWRQkweDIwMDAKI2RlZmluZSBRMTRfR0FJTl9VTklUWQkJCTB4NDAwMAoKc3RydWN0IGFmZV9zdmNfY21kX3NldF9jbGlwX2Jhbmtfc2VsZWN0aW9uIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXN0cnVjdCBhZmVfcGFyYW1faWRfY2xpcF9iYW5rX3NlbCBiYW5rX3NlbDsKfSBfX3BhY2tlZDsKCi8qIFVsdHJhc291bmQgc3VwcG9ydGVkIGZvcm1hdHMgKi8KI2RlZmluZSBVU19QT0lOVF9FUE9TX0ZPUk1BVF9WMiAweDAwMDEyNzJECiNkZWZpbmUgVVNfUkFXX0ZPUk1BVF9WMiAgICAgICAgMHgwMDAxMjcyQwojZGVmaW5lIFVTX1BST1hfRk9STUFUX1Y0ICAgICAgIDB4MDAwMTI3M0IKI2RlZmluZSBVU19SQVdfU1lOQ19GT1JNQVQgICAgICAweDAwMDEyNzJGCiNkZWZpbmUgVVNfR0VTX1NZTkNfRk9STUFUICAgICAgMHgwMDAxMjczMAoKI2RlZmluZSBBRkVfTU9EVUxFX0dST1VQX0RFVklDRQkweDAwMDEwMjU0CiNkZWZpbmUgQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9DRkcJMHgwMDAxMDI1NQojZGVmaW5lIEFGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfRU5BQkxFIDB4MDAwMTAyNTYKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1NFQ09OREFSWV9NSTJTX1JYCTB4MTEwMgoKLyogIFBheWxvYWQgb2YgdGhlICNBRkVfUEFSQU1fSURfR1JPVVBfREVWSUNFX0NGRwogKiBwYXJhbWV0ZXIsIHdoaWNoIGNvbmZpZ3VyZXMgbWF4IG9mIDggQUZFIHBvcnRzCiAqIGludG8gYSBncm91cC4KICogVGhlIGZpeGVkIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgaXMgc2l4dGVlbiBieXRlcy4KICovCnN0cnVjdCBhZmVfZ3JvdXBfZGV2aWNlX2dyb3VwX2NmZyB7Cgl1MzIgbWlub3JfdmVyc2lvbjsKCXUxNiBncm91cF9pZDsKCXUxNiBudW1fY2hhbm5lbHM7Cgl1MTYgcG9ydF9pZFs4XTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9QUklNQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1BSSU1BUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfVEVSVElBUllfVERNX1JYIFwKCShBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1RFUlRJQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9RVUFURVJOQVJZX1RETV9SWCBcCgkoQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlggKyAweDEwMCkKI2RlZmluZSBBRkVfR1JPVVBfREVWSUNFX0lEX1FVQVRFUk5BUllfVERNX1RYIFwKCShBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWCArIDB4MTAwKQojZGVmaW5lIEFGRV9HUk9VUF9ERVZJQ0VfSURfUVVJTkFSWV9URE1fUlggXAoJKEFGRV9QT1JUX0lEX1FVSU5BUllfVERNX1JYICsgMHgxMDApCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9JRF9RVUlOQVJZX1RETV9UWCBcCgkoQUZFX1BPUlRfSURfUVVJTkFSWV9URE1fVFggKyAweDEwMCkKCi8qIElEIG9mIHRoZSBwYXJhbWV0ZXIgdXNlZCBieSAjQUZFX01PRFVMRV9HUk9VUF9ERVZJQ0UgdG8gY29uZmlndXJlIHRoZQogKiBncm91cCBkZXZpY2UuICNBRkVfU1ZDX0NNRF9TRVRfUEFSQU0gY2FuIHVzZSB0aGlzIHBhcmFtZXRlciBJRC4KICoKICogUmVxdWlyZW1lbnRzOgogKiAtIENvbmZpZ3VyZSB0aGUgZ3JvdXAgYmVmb3JlIHRoZSBtZW1iZXIgcG9ydHMgaW4gdGhlIGdyb3VwIGFyZQogKiBjb25maWd1cmVkIGFuZCBzdGFydGVkLgogKiAtIEVuYWJsZSB0aGUgZ3JvdXAgb25seSBhZnRlciBpdCBpcyBjb25maWd1cmVkLgogKiAtIFN0b3AgYWxsIG1lbWJlciBwb3J0cyBpbiB0aGUgZ3JvdXAgYmVmb3JlIGRpc2FibGluZyB0aGUgZ3JvdXAuCiAqLwojZGVmaW5lIEFGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfVERNX0NPTkZJRwkweDAwMDEwMjlFCgovKiBWZXJzaW9uIGluZm9ybWF0aW9uIHVzZWQgdG8gaGFuZGxlIGZ1dHVyZSBhZGRpdGlvbnMgdG8KICogQUZFX1BBUkFNX0lEX0dST1VQX0RFVklDRV9URE1fQ09ORklHIHByb2Nlc3NpbmcgKGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KS4KICovCiNkZWZpbmUgQUZFX0FQSV9WRVJTSU9OX0dST1VQX0RFVklDRV9URE1fQ09ORklHCTB4MQoKLyogTnVtYmVyIG9mIEFGRSBwb3J0cyBpbiBncm91cCBkZXZpY2UgICovCiNkZWZpbmUgQUZFX0dST1VQX0RFVklDRV9OVU1fUE9SVFMJCQkJCTgKCi8qIFBheWxvYWQgb2YgdGhlIEFGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfVERNX0NPTkZJRyBwYXJhbWV0ZXIgSUQKICogdXNlZCBieSBBRkVfTU9EVUxFX0dST1VQX0RFVklDRS4KICovCnN0cnVjdCBhZmVfcGFyYW1faWRfZ3JvdXBfZGV2aWNlX3RkbV9jZmcgewoJdTMyCWdyb3VwX2RldmljZV9jZmdfbWlub3JfdmVyc2lvbjsKCS8qIE1pbm9yIHZlcnNpb24gdXNlZCB0byB0cmFjayBncm91cCBkZXZpY2UgY29uZmlndXJhdGlvbi4KCSAqIEB2YWx1ZXMgI0FGRV9BUElfVkVSU0lPTl9HUk9VUF9ERVZJQ0VfVERNX0NPTkZJRwoJICovCgoJdTE2CWdyb3VwX2lkOwoJLyogSUQgZm9yIHRoZSBncm91cCBkZXZpY2UuCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1BSSU1BUllfVERNX1JYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1BSSU1BUllfVERNX1RYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1NFQ09OREFSWV9URE1fUlgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfU0VDT05EQVJZX1RETV9UWAoJICogLSAjQUZFX0dST1VQX0RFVklDRV9JRF9URVJUSUFSWV9URE1fUlgKCSAqIC0gI0FGRV9HUk9VUF9ERVZJQ0VfSURfVEVSVElBUllfVERNX1RYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1FVQVRFUk5BUllfVERNX1JYCgkgKiAtICNBRkVfR1JPVVBfREVWSUNFX0lEX1FVQVRFUk5BUllfVERNX1RYCgkgKi8KCgl1MTYJcmVzZXJ2ZWQ7CgkvKiAwICovCgoJdTE2CXBvcnRfaWRbQUZFX0dST1VQX0RFVklDRV9OVU1fUE9SVFNdOwoJLyogQXJyYXkgb2YgbWVtYmVyIHBvcnQgSURzIG9mIHRoaXMgZ3JvdXAuCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9SWAoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMQoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMgoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfMwoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNAoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNQoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNgoJICogLSAjQUZFX1BPUlRfSURfUFJJTUFSWV9URE1fUlhfNwoKCSAqIC0gI0FGRV9QT1JUX0lEX1BSSU1BUllfVERNX1RYCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF80CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF81CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF82CgkgKiAtICNBRkVfUE9SVF9JRF9QUklNQVJZX1RETV9UWF83CgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWAoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfMwoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF80CgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1JYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fUlhfNgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9SWF83CgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWAoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfMwoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF80CgkgKiAtICNBRkVfUE9SVF9JRF9TRUNPTkRBUllfVERNX1RYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1NFQ09OREFSWV9URE1fVFhfNgoJICogLSAjQUZFX1BPUlRfSURfU0VDT05EQVJZX1RETV9UWF83CgoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfMQoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzIKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfNAoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1JYXzUKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9SWF82CgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fUlhfNwoKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWAoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzEKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfMwoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzQKCSAqIC0gI0FGRV9QT1JUX0lEX1RFUlRJQVJZX1RETV9UWF81CgkgKiAtICNBRkVfUE9SVF9JRF9URVJUSUFSWV9URE1fVFhfNgoJICogLSAjQUZFX1BPUlRfSURfVEVSVElBUllfVERNX1RYXzcKCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9SWAoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMQoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMgoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfMwoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNAoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNQoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNgoJICogLSAjQUZFX1BPUlRfSURfUVVBVEVSTkFSWV9URE1fUlhfNwoKCSAqIC0gI0FGRV9QT1JUX0lEX1FVQVRFUk5BUllfVERNX1RYCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8xCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8yCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF8zCgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF80CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF81CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF82CgkgKiAtICNBRkVfUE9SVF9JRF9RVUFURVJOQVJZX1RETV9UWF83CgkgKiBAdGFibGVidWxsZXRlbmQKCSAqLwoKCXUzMgludW1fY2hhbm5lbHM7CgkvKiBOdW1iZXIgb2YgZW5hYmxlZCBzbG90cyBmb3IgVERNIGZyYW1lLgoJICogQHZhbHVlcyAxIHRvIDgKCSAqLwoKCXUzMglzYW1wbGVfcmF0ZTsKCS8qIFNhbXBsaW5nIHJhdGUgb2YgdGhlIHBvcnQuCgkgKiBAdmFsdWVzCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV84SwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfMTZLCgkgKiAtICNBRkVfUE9SVF9TQU1QTEVfUkFURV8yNEsKCSAqIC0gI0FGRV9QT1JUX1NBTVBMRV9SQVRFXzMySwoJICogLSAjQUZFX1BPUlRfU0FNUExFX1JBVEVfNDhLIEB0YWJsZWJ1bGxldGVuZAoJICovCgoJdTMyCWJpdF93aWR0aDsKCS8qIEJpdCB3aWR0aCBvZiB0aGUgc2FtcGxlLgoJICogQHZhbHVlcyAxNiwgMjQsICgzMikKCSAqLwoKCXUxNgluc2xvdHNfcGVyX2ZyYW1lOwoJLyogTnVtYmVyIG9mIHNsb3RzIHBlciBmcmFtZS4gVHlwaWNhbCA6IDEsIDIsIDQsIDgsIDE2LCAzMi4KCSAqIEB2YWx1ZXMgMSAtIDMyCgkgKi8KCgl1MTYJc2xvdF93aWR0aDsKCS8qIFNsb3Qgd2lkdGggb2YgdGhlIHNsb3QgaW4gYSBURE0gZnJhbWUuICAoc2xvdF93aWR0aCA+PSBiaXRfd2lkdGgpCgkgKiBoYXZlIHRvIGJlIHNhdGlzZmllZC4KCSAqIEB2YWx1ZXMgMTYsIDI0LCAzMgoJICovCgoJdTMyCXNsb3RfbWFzazsKCS8qIFBvc2l0aW9uIG9mIGFjdGl2ZSBzbG90cy4gIFdoZW4gdGhhdCBiaXQgaXMgc2V0LCB0aGF0IHBhcmljdWxhcgoJICogc2xvdCBpcyBhY3RpdmUuCgkgKiBOdW1iZXIgb2YgYWN0aXZlIHNsb3RzIGNhbiBiZSBpbmZlcnJlZCBieSBudW1iZXIgb2YgYml0cyBzZXQgaW4KCSAqIHRoZSBtYXNrLiAgT25seSA4IGluZGl2aWR1YWwgYml0cyBjYW4gYmUgZW5hYmxlZC4KCSAqIEJpdHMgMC4uMzEgY29ycmVzcG9uZGluZyB0byBzbG90IDAuLjMxCgkgKiBAdmFsdWVzIDEgdG8gMl4zMiAtMQoJICovCn0gX19wYWNrZWQ7CgovKiAgUGF5bG9hZCBvZiB0aGUgI0FGRV9QQVJBTV9JRF9HUk9VUF9ERVZJQ0VfRU5BQkxFCiAqIHBhcmFtZXRlciwgd2hpY2ggZW5hYmxlcyBvcgogKiBkaXNhYmxlcyBhbnkgbW9kdWxlLgogKiBUaGUgZml4ZWQgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBpcyBmb3VyIGJ5dGVzLgogKi8KCnN0cnVjdCBhZmVfZ3JvdXBfZGV2aWNlX2VuYWJsZSB7Cgl1MTYgZ3JvdXBfaWQ7CgkvKiB2YWxpZCB2YWx1ZSBpcyBBRkVfR1JPVVBfREVWSUNFX0lEX1NFQ09OREFSWV9NSTJTX1JYICovCgl1MTYgZW5hYmxlOwoJLyogRW5hYmxlcyAoMSkgb3IgZGlzYWJsZXMgKDApIHRoZSBtb2R1bGUuICovCn0gX19wYWNrZWQ7Cgp1bmlvbiBhZmVfcG9ydF9ncm91cF9jb25maWcgewoJc3RydWN0IGFmZV9ncm91cF9kZXZpY2VfZ3JvdXBfY2ZnIGdyb3VwX2NmZzsKCXN0cnVjdCBhZmVfZ3JvdXBfZGV2aWNlX2VuYWJsZSBncm91cF9lbmFibGU7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2dyb3VwX2RldmljZV90ZG1fY2ZnIHRkbV9jZmc7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX3BvcnRfZ3JvdXBfY3JlYXRlIHsKCXN0cnVjdCBhcHJfaGRyIGhkcjsKCXN0cnVjdCBhZmVfc3ZjX2NtZF9zZXRfcGFyYW0gcGFyYW07CglzdHJ1Y3QgYWZlX3BvcnRfcGFyYW1fZGF0YV92MiBwZGF0YTsKCXVuaW9uIGFmZV9wb3J0X2dyb3VwX2NvbmZpZyBkYXRhOwp9IF9fcGFja2VkOwoKLyogSUQgb2YgdGhlIHBhcmFtZXRlciB1c2VkIGJ5ICNBRkVfTU9EVUxFX0FVRElPX0RFVl9JTlRFUkZBQ0UgdG8gc3BlY2lmeQogKiB0aGUgdGltaW5nIHN0YXRpc3RpY3Mgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGludGVyZmFjZS4KICogQ2xpZW50IGNhbiBwZXJpb2RpY2FsbHkgcXVlcnkgZm9yIHRoZSBkZXZpY2UgdGltZSBzdGF0aXN0aWNzIHRvIGhlbHAgYWRqdXN0CiAqIHRoZSBQTEwgYmFzZWQgb24gdGhlIGRyaWZ0IHZhbHVlLiBUaGUgZ2V0IHBhcmFtIGNvbW1hbmQgbXVzdCBiZSBzZW50IHRvCiAqIEFGRSBwb3J0IElEIGNvcnJlc3BvbmRpbmcgdG8gZGV2aWNlIGludGVyZmFjZQoKICogVGhpcyBwYXJhbWV0ZXIgSUQgc3VwcG9ydHMgZm9sbG93aW5nIGdldCBwYXJhbSBjb21tYW5kczoKICogI0FGRV9QT1JUX0NNRF9HRVRfUEFSQU1fVjIgYW5kCiAqICNBRkVfUE9SVF9DTURfR0VUX1BBUkFNX1YzLgogKi8KI2RlZmluZSBBRkVfUEFSQU1fSURfREVWX1RJTUlOR19TVEFUUyAgICAgICAgICAgMHgwMDAxMDJBRAoKLyogVmVyc2lvbiBpbmZvcm1hdGlvbiB1c2VkIHRvIGhhbmRsZSBmdXR1cmUgYWRkaXRpb25zIHRvIEFGRSBkZXZpY2UKICogaW50ZXJmYWNlIHRpbWluZyBzdGF0aXN0aWNzIChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCiAqLwojZGVmaW5lIEFGRV9BUElfVkVSU0lPTl9ERVZfVElNSU5HX1NUQVRTICAgICAgICAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzcGVjaWZ5aW5nIGEgc2luayhSeCkgZGV2aWNlICovCiNkZWZpbmUgQUZFX1NJTktfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAoKLyogRW51bWVyYXRpb24gZm9yIHNwZWNpZnlpbmcgYSBzb3VyY2UoVHgpIGRldmljZSAqLwojZGVmaW5lIEFGRV9TT1VSQ0VfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAweDEKCi8qIEVudW1lcmF0aW9uIGZvciBzcGVjaWZ5aW5nIHRoZSBkcmlmdCByZWZlcmVuY2UgaXMgb2YgdHlwZSBBViBUaW1lciAqLwojZGVmaW5lIEFGRV9SRUZfVElNRVJfVFlQRV9BVlRJTUVSICAgICAgICAgICAgICAweDAKCi8qIE1lc3NhZ2UgcGF5bG9hZCBzdHJ1Y3R1cmUgZm9yIHRoZQogKiBBRkVfUEFSQU1fSURfREVWX1RJTUlOR19TVEFUUyBwYXJhbWV0ZXIuCiAqLwpzdHJ1Y3QgYWZlX3BhcmFtX2lkX2Rldl90aW1pbmdfc3RhdHMgewoJLyogTWlub3IgdmVyc2lvbiB1c2VkIHRvIHRyYWNrIHRoZSB2ZXJzaW9uIG9mIGRldmljZSBpbnRlcmZhY2UgdGltaW5nCgkgKiBzdGF0aXN0aWNzLiBDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBpcyAxLgoJICogQHZhbHVlcyAjQUZFX0FQSV9WRVJTSU9OX0RFVl9USU1JTkdfU1RBVFMKCSAqLwoJdTMyICAgICAgIG1pbm9yX3ZlcnNpb247CgoJLyogSW5kaWNhdGVzIHRoZSBkZXZpY2UgaW50ZXJmYWNlIGRpcmVjdGlvbiBhcyBlaXRoZXIKCSAqIHNvdXJjZSAoVHgpIG9yIHNpbmsgKFJ4KS4KCSAqIEB2YWx1ZXMKCSAqICNBRkVfU0lOS19ERVZJQ0UKCSAqICNBRkVfU09VUkNFX0RFVklDRQoJICovCgl1MTYgICAgICAgIGRldmljZV9kaXJlY3Rpb247CgoJLyogUmVmZXJlbmNlIHRpbWVyIGZvciBkcmlmdCBhY2N1bXVsYXRpb24gYW5kIHRpbWUgc3RhbXAgaW5mb3JtYXRpb24uCgkgKiBAdmFsdWVzCgkgKiAjQUZFX1JFRl9USU1FUl9UWVBFX0FWVElNRVIgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXUxNiAgICAgICAgcmVmZXJlbmNlX3RpbWVyOwoKCS8qCgkgKiBGbGFnIHRvIGluZGljYXRlIGlmIHJlc3luYyBpcyByZXF1aXJlZCBvbiB0aGUgY2xpZW50IHNpZGUgZm9yCgkgKiBkcmlmdCBjb3JyZWN0aW9uLiBGbGFnIGlzIHNldCB0byBUUlVFIGZvciB0aGUgZmlyc3QgZ2V0X3BhcmFtCgkgKiByZXNwb25zZSBhZnRlciBkZXZpY2UgaW50ZXJmYWNlIHN0YXJ0cy4gVGhpcyBmbGFnIHZhbHVlIGNhbiBiZQoJICogdXNlZCBieSBjbGllbnQgdG8gaWRlbnRpZnkgaWYgZGV2aWNlIGludGVyZmFjZSByZXN0YXJ0IGhhcwoJICogaGFwcGVuZWQgYW5kIGlmIGFueSByZS1zeW5jIGlzIHJlcXVpcmVkIGF0IHRoZWlyIGVuZCBmb3IgZHJpZnQKCSAqIGNvcnJlY3Rpb24uCgkgKiBAdmFsdWVzCgkgKiAwOiBGQUxTRSAoUmVzeW5jIG5vdCByZXF1aXJlZCkKCSAqIDE6IFRSVUUgKFJlc3luYyByZXF1aXJlZCkgQHRhYmxlYnVsbGV0ZW5kCgkgKi8KCXUzMiAgICAgICAgcmVzeW5jX2ZsYWc7CgoJLyogQWNjdW11bGF0ZWQgZHJpZnQgdmFsdWUgaW4gbWljcm9zZWNvbmRzLiBUaGlzIHZhbHVlIGlzIHVwZGF0ZWQKCSAqIGV2ZXJ5IDEwMHRoIG1zLgoJICogUG9zaXRpdmUgZHJpZnQgdmFsdWUgaW5kaWNhdGVzIEFWIHRpbWVyIGlzIHJ1bm5pbmcgZmFzdGVyIHRoYW4gZGV2aWNlCgkgKiBOZWdhdGl2ZSBkcmlmdCB2YWx1ZSBpbmRpY2F0ZXMgQVYgdGltZXIgaXMgcnVubmluZyBzbG93ZXIgdGhhbiBkZXZpY2UKCSAqIEB2YWx1ZXMgQW55IHZhbGlkIGludDMyIG51bWJlcgoJICovCglzMzIgICAgICAgICBhY2NfZHJpZnRfdmFsdWU7CgoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGFic29sdXRlIHRpbWVzdGFtcCBvZiByZWZlcmVuY2UKCSAqIHRpbWVyIGluIG1pY3Jvc2Vjb25kcy4KCgkgKiBUaGlzIHRpbWVzdGFtcCBjb3JyZXNwb25kcyB0byB0aGUgdGltZSB3aGVuIHRoZSBkcmlmdCB2YWx1ZXMKCSAqIGFyZSBhY2N1bWxhdGVkIGZvciBldmVyeSAxMDB0aCBtcy4KCSAqIEB2YWx1ZXMgQW55IHZhbGlkIHVpbnQzMiBudW1iZXIKCSAqLwoJdTMyICAgICAgICByZWZfdGltZXJfYWJzX3RzX2xzdzsKCgkvKiBVcHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgYWJzb2x1dGUgdGltZXN0YW1wIG9mIHJlZmVyZW5jZQoJICogdGltZXIgaW4gbWljcm9zZWNvbmRzLgoJICogVGhpcyB0aW1lc3RhbXAgY29ycmVzcG9uZHMgdG8gdGhlIHRpbWUgd2hlbiB0aGUgZHJpZnQgdmFsdWVzCgkgKiBhcmUgYWNjdW1sYXRlZCBmb3IgZXZlcnkgMTAwdGggbXMuCgkgKiBAdmFsdWVzIEFueSB2YWxpZCB1aW50MzIgbnVtYmVyCgkgKi8KCXUzMiAgICAgICAgcmVmX3RpbWVyX2Fic190c19tc3c7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWZlX2F2X2Rldl9kcmlmdF9nZXRfcGFyYW0gewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFmZV9wb3J0X2NtZF9nZXRfcGFyYW1fdjIgZ2V0X3BhcmFtOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2Rldl90aW1pbmdfc3RhdHMgdGltaW5nX3N0YXRzOwp9IF9fcGFja2VkOwoKc3RydWN0IGFmZV9hdl9kZXZfZHJpZnRfZ2V0X3BhcmFtX3Jlc3AgewoJdWludDMyX3Qgc3RhdHVzOwoJc3RydWN0IGFmZV9wb3J0X3BhcmFtX2RhdGFfdjIgcGRhdGE7CglzdHJ1Y3QgYWZlX3BhcmFtX2lkX2Rldl90aW1pbmdfc3RhdHMgdGltaW5nX3N0YXRzOwp9IF9fcGFja2VkOwoKLyogQ29tbWFuZCBmb3IgTWF0cml4IG9yIFN0cmVhbSBSb3V0ZXIgKi8KI2RlZmluZSBBU01fU0VTU0lPTl9DTURfU0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyICAgIDB4MDAwMTBEQ0UKLyogTW9kdWxlIGZvciBBVlNZTkMgKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX01PRFVMRV9JRF9BVlNZTkMgICAgMHgwMDAxMERDNgoKLyogUGFyYW1ldGVyIHVzZWQgYnkgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyB0byBzcGVjaWZ5IHRoZQogKiByZW5kZXIgd2luZG93IHN0YXJ0IHZhbHVlLiBUaGlzIHBhcmFtZXRlciBpcyBzdXBwb3J0ZWQgb25seSBmb3IgYSBTZXQKICogY29tbWFuZCAobm90IGEgR2V0IGNvbW1hbmQpIGluIHRoZSBSeCBkaXJlY3Rpb24KICogKCNBU01fU0VTU0lPTl9DTURfU0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyKS4KICogUmVuZGVyIHdpbmRvdyBzdGFydCBpcyBhIHZhbHVlIChzZXNzaW9uIHRpbWUgbWludXMgdGltZXN0YW1wLCBvciBTVC1UUykKICogYmVsb3cgd2hpY2ggZnJhbWVzIGFyZSBoZWxkLCBhbmQgYWZ0ZXIgd2hpY2ggZnJhbWVzIGFyZSBpbW1lZGlhdGVseQogKiByZW5kZXJlZC4KICovCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfV0lORE9XX1NUQVJUX1YyIDB4MDAwMTBERDEKCi8qIFBhcmFtZXRlciB1c2VkIGJ5ICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX01PRFVMRV9JRF9BVlNZTkMgdG8gc3BlY2lmeSB0aGUKICogcmVuZGVyIHdpbmRvdyBlbmQgdmFsdWUuIFRoaXMgcGFyYW1ldGVyIGlzIHN1cHBvcnRlZCBvbmx5IGZvciBhIFNldAogKiBjb21tYW5kIChub3QgYSBHZXQgY29tbWFuZCkgaW4gdGhlIFJ4IGRpcmVjdGlvbgogKiAoI0FTTV9TRVNTSU9OX0NNRF9TRVRfTVRNWF9TVFJUUl9QQVJBTVNfVjIpLiBSZW5kZXIgd2luZG93IGVuZCBpcyBhIHZhbHVlCiAqIChzZXNzaW9uIHRpbWUgbWludXMgdGltZXN0YW1wKSBhYm92ZSB3aGljaCBmcmFtZXMgYXJlIGRyb3BwZWQsIGFuZCBiZWxvdwogKiB3aGljaCBmcmFtZXMgYXJlIGltbWVkaWF0ZWx5IHJlbmRlcmVkLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9XSU5ET1dfRU5EX1YyICAgMHgwMDAxMEREMgoKLyogR2VuZXJpYyBwYXlsb2FkIG9mIHRoZSB3aW5kb3cgcGFyYW1ldGVycyBpbiB0aGUKICogI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyBtb2R1bGUuCiAqIFRoaXMgcGF5bG9hZCBpcyBzdXBwb3J0ZWQgb25seSBmb3IgYSBTZXQgY29tbWFuZAogKiAobm90IGEgR2V0IGNvbW1hbmQpIG9uIHRoZSBSeCBwYXRoLgogKi8Kc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fd2luZG93X3YyX3QgewoJdTMyICAgIHdpbmRvd19sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSByZW5kZXIgd2luZG93IHN0YXJ0IHZhbHVlLiAqLwoKCXUzMiAgICB3aW5kb3dfbXN3OwoJLyogVXBwZXIgMzIgYml0cyBvZiB0aGUgcmVuZGVyIHdpbmRvdyBzdGFydCB2YWx1ZS4KCSAqCgkgKiBUaGUgNjQtYml0IG51bWJlciBmb3JtZWQgYnkgd2luZG93X2xzdyBhbmQgd2luZG93X21zdyBzcGVjaWZpZXMgYQoJICogc2lnbmVkIDY0LWJpdCB3aW5kb3cgdmFsdWUgaW4gbWljcm9zZWNvbmRzLiBUaGUgc2lnbiBleHRlbnNpb24gaXMKCSAqIG5lY2Vzc2FyeS4gVGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIElEczoKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9XSU5ET1dfU1RBUlRfVjIKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9XSU5ET1dfRU5EX1YyCgkgKiAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9TVEFUX1dJTkRPV19TVEFSVF9WMgoJICogI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fU1RBVF9XSU5ET1dfRU5EX1YyCgkgKiBUaGUgdmFsdWUgZGVwZW5kcyBvbiB3aGljaCBwYXJhbWV0ZXIgSUQgaXMgdXNlZC4KCSAqIFRoZSBhRFNQIGhvbm9ycyB0aGUgd2luZG93cyBhdCBhIGdyYW51bGFyaXR5IG9mIDEgbXMuCgkgKi8KfTsKCnN0cnVjdCBhc21fc2Vzc2lvbl9jbWRfc2V0X210bXhfc3Ryc3RyX3BhcmFtc192MiB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX2xzdzsKCS8qIExvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBkYXRhIHBheWxvYWQgYWRkcmVzcy4gKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRhdGFfcGF5bG9hZF9hZGRyX21zdzsKCS8qIFVwcGVyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCBkYXRhIHBheWxvYWQgYWRkcmVzcy4KCSAqIElmIHRoZSBhZGRyZXNzIGlzIG5vdCBzZW50IChOVUxMKSwgdGhlIG1lc3NhZ2UgaXMgaW4gdGhlIHBheWxvYWQuCgkgKiBJZiB0aGUgYWRkcmVzcyBpcyBzZW50IChub24tTlVMTCksIHRoZSBwYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcwoJICogYmVnaW4gYXQgdGhlIHNwZWNpZmllZCBhZGRyZXNzLgoJICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBtZW1fbWFwX2hhbmRsZTsKCS8qIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhbiBhZGRyZXNzLiBUaGlzIG1lbW9yeSBtYXAgaGFuZGxlIGlzIHJldHVybmVkCgkgKiBieSB0aGUgYURTUCB0aHJvdWdoIHRoZSAjQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQuCgkgKiB2YWx1ZXMKCSAqIC0gTlVMTCAtLSBQYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBhcmUgd2l0aGluIHRoZSBtZXNzYWdlIHBheWxvYWQKCSAqIChpbi1iYW5kKS4KCSAqIC0gTm9uLU5VTEwgLS0gUGFyYW1ldGVyIGRhdGEgcGF5bG9hZHMgYmVnaW4gYXQgdGhlIGFkZHJlc3Mgc3BlY2lmaWVkCgkgKiBpbiB0aGUgZGF0YV9wYXlsb2FkX2FkZHJfbHN3IGFuZCBkYXRhX3BheWxvYWRfYWRkcl9tc3cgZmllbGRzCgkgKiAob3V0LW9mLWJhbmQpLgoJICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfc2l6ZTsKCS8qIEFjdHVhbCBzaXplIG9mIHRoZSB2YXJpYWJsZSBwYXlsb2FkIGFjY29tcGFueWluZyB0aGUgbWVzc2FnZSwgb3IgaW4KCSAqIHNoYXJlZCBtZW1vcnkuIFRoaXMgZmllbGQgaXMgdXNlZCBmb3IgcGFyc2luZyB0aGUgcGFyYW1ldGVyIHBheWxvYWQuCgkgKiB2YWx1ZXMgPiAwIGJ5dGVzCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsKCS8qIERpcmVjdGlvbiBvZiB0aGUgZW50aXR5IChtYXRyaXggbWl4ZXIgb3Igc3RyZWFtIHJvdXRlcikgb24gd2hpY2gKCSAqIHRoZSBwYXJhbWV0ZXIgaXMgdG8gYmUgc2V0LgoJICogdmFsdWVzCgkgKiAtIDAgLS0gUnggKGZvciBSeCBzdHJlYW0gcm91dGVyIG9yIFJ4IG1hdHJpeCBtaXhlcikKCSAqIC0gMSAtLSBUeCAoZm9yIFR4IHN0cmVhbSByb3V0ZXIgb3IgVHggbWF0cml4IG1peGVyKQoJICovCn07CgovKiBQYXJhbWV0ZXIgdXNlZCBieSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9NT0RVTEVfSURfQVZTWU5DIHdoaWNoIGFsbG93cyB0aGUKICogYXVkaW8gY2xpZW50IGNob29zZSB0aGUgcmVuZGVyaW5nIGRlY2lzaW9uIHRoYXQgdGhlIGF1ZGlvIERTUCBzaG91bGQgdXNlLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9NT0RFX0NNRCAgMHgwMDAxMkYwRAoKLyogSW5kaWNhdGVzIHRoYXQgcmVuZGVyaW5nIGRlY2lzaW9uIHdpbGwgYmUgYmFzZWQgb24gZGVmYXVsdCByYXRlCiAqIChzZXNzaW9uIGNsb2NrIGJhc2VkIHJlbmRlcmluZywgZGV2aWNlIGRyaXZlbikuCiAqIDEuIFRoZSBkZWZhdWx0IHNlc3Npb24gY2xvY2sgYmFzZWQgcmVuZGVyaW5nIGlzIGluaGVyZW50bHkgZHJpdmVuCiAqICAgIGJ5IHRoZSB0aW1pbmcgb2YgdGhlIGRldmljZS4KICogMi4gQWZ0ZXIgdGhlIGluaXRpYWwgZGVjaXNpb24gaXMgbWFkZSAoZmlyc3QgYnVmZmVyIGFmdGVyIGEgcnVuCiAqICAgIGNvbW1hbmQpLCBzdWJzZXF1ZW50IGRhdGEgcmVuZGVyaW5nIGRlY2lzaW9ucyBhcmUgbWFkZSB3aXRoCiAqICAgIHJlc3BlY3QgdG8gdGhlIHJhdGUgYXQgd2hpY2ggdGhlIGRldmljZSBpcyByZW5kZXJpbmcsIHRodXMgZGVyaXZpbmcKICogICAgaXRzIHRpbWluZyBmcm9tIHRoZSBkZXZpY2UuCiAqIDMuIFdoaWxlIHRoaXMgZGVjaXNpb24gbWFraW5nIGlzIHNpbXBsZSwgaXQgaGFzIHNvbWUgaW5oZXJlbnQgbGltaXRhdGlvbnMKICogICAgKG1lbnRpb25lZCBpbiB0aGUgbmV4dCBzZWN0aW9uKS4KICogNC4gSWYgdGhpcyBBUEkgaXMgbm90IHNldCwgdGhlIHNlc3Npb24gY2xvY2sgYmFzZWQgcmVuZGVyaW5nIHdpbGwgYmUgYXNzdW1lZAogKiAgICBhbmQgdGhpcyB3aWxsIGVuc3VyZSB0aGF0IHRoZSBEU1AgaXMgYmFja3dhcmQgY29tcGF0aWJsZS4KICovCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfREVGQVVMVCAwCgovKiBJbmRpY2F0ZXMgdGhhdCByZW5kZXJpbmcgZGVjaXNpb24gd2lsbCBiZSBiYXNlZCBvbiBsb2NhbCBjbG9jayByYXRlLgogKiAxLiBJbiB0aGUgRFNQIGxvb3BiYWNrL2NsaWVudCBsb29wYmFjayB1c2UgY2FzZXMgKGZyYW1lIGJhc2VkCiAqICAgIGlucHV0cyksIHRoZSBpbmNvbWluZyBkYXRhIGludG8gYXVkaW8gRFNQIGlzIHRpbWUtc3RhbXBlZCBhdCB0aGUKICogICAgbG9jYWwgY2xvY2sgcmF0ZSAoU1RDKS4KICogMi4gVGhpcyBUUyByYXRlIG1heSBtYXRjaCB0aGUgaW5jb21pbmcgZGF0YSByYXRlIG9yIG1heWJlIGRpZmZlcmVudAogKiAgICBmcm9tIHRoZSBpbmNvbWluZyBkYXRhIHJhdGUuCiAqIDMuIFJlZ2FyZGxlc3MsIHRoZSBkYXRhIHdpbGwgYmUgdGltZS1zdGFtcGVkIHdpdGggbG9jYWwgU1RDIGFuZAogKiAgICB0aGVyZWZvcmUsIHRoZSBjbGllbnQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IHRoaXMgbW9kZSBmb3IgdGhlc2UKICogICAgdXNlIGNhc2VzLiBUaGlzIG1ldGhvZCBpcyBpbmhlcmVudGx5IG1vcmUgcm9idXN0IHRvIHNlcXVlbmNpbmcKICogICAgKEFGRSBTdGFydC9TdG9wKSBhbmQgZGV2aWNlIHN3aXRjaGVzLCBhbW9uZyBvdGhlciBiZW5lZml0cy4KICogNC4gVGhpcyBBUEkgd2lsbCBpbmZvcm0gdGhlIERTUCB0byBjb21wYXJlIGV2ZXJ5IGluY29taW5nIGJ1ZmZlciBUUwogKiAgICBhZ2FpbnN0IGxvY2FsIFNUQy4KICogNS4gRFNQIHdpbGwgY29udGludWUgdG8gaG9ub3IgcmVuZGVyIHdpbmRvd3MgQVBJcywgYXMgYmVmb3JlLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX1JFTkRFUl9MT0NBTF9TVEMgMQoKLyogU3RydWN0dXJlIGZvciByZW5kZXJpbmcgZGVjaXNpb24gcGFyYW1ldGVyICovCnN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX3JlbmRlcl9tb2RlX3QgewoJLyogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHJlbmRlcmluZyBkZWNpc2lvbiB0aGUgYXVkaW8gRFNQIHNob3VsZCB1c2UuCgkgKgoJICogQHZhbHVlcwoJICogLSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfREVGQVVMVAoJICogLSAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9SRU5ERVJfTE9DQUxfU1RDCgkgKi8KCXUzMiAgICAgICAgICAgICAgICAgIGZsYWdzOwp9IF9fcGFja2VkOwoKLyogUGFyYW1ldGVyIHVzZWQgYnkgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyB3aGljaCBhbGxvd3MgdGhlCiAqIGF1ZGlvIGNsaWVudCB0byBzcGVjaWZ5IHRoZSBjbG9jayByZWNvdmVyeSBtZWNoYW5pc20gdGhhdCB0aGUgYXVkaW8gRFNQCiAqIHNob3VsZCB1c2UuCiAqLwoKI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUNfQ01EIDB4MDAwMTJGMEUKCi8qIEluZGljYXRlcyB0aGF0IGRlZmF1bHQgY2xvY2sgcmVjb3Zlcnkgd2lsbCBiZSB1c2VkIChubyBjbG9jayByZWNvdmVyeSkuCiAqIElmIHRoZSBjbGllbnQgd2lzaGVzIHRoYXQgbm8gY2xvY2sgcmVjb3ZlcnkgYmUgZG9uZSwgdGhlIGNsaWVudCBjYW4KICogY2hvb3NlIHRoaXMuIFRoaXMgbWVhbnMgdGhhdCBubyBhdHRlbXB0IHdpbGwgbWFkZSBieSB0aGUgRFNQIHRvIHRyeSBhbmQKICogbWF0Y2ggdGhlIHJhdGVzIG9mIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGF1ZGlvLgogKi8KI2RlZmluZSBBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUNfTk9ORSAwCgovKiBJbmRpY2F0ZXMgdGhhdCBpbmRlcGVuZGVudCBjbG9jayByZWNvdmVyeSBuZWVkcyB0byBiZSB1c2VkLgogKiAxLiBJbiB0aGUgRFNQIGxvb3BiYWNrL2NsaWVudCBsb29wYmFjayB1c2UgY2FzZXMgKGZyYW1lIGJhc2VkIGlucHV0cyksCiAqICAgIHRoZSBjbGllbnQgc2hvdWxkIGNob29zZSB0aGUgaW5kZXBlbmRlbnQgY2xvY2sgcmVjb3Zlcnkgb3B0aW9uLgogKiAyLiBUaGlzIGJhc2ljYWxseSBkZS1jb3VwbGVzIHRoZSBhdWRpbyBhbmQgdmlkZW8gZnJvbSBrbm93aW5nIGVhY2ggb3RoZXJzCiAqICAgIGNsb2NrIHNvdXJjZXMgYW5kIGxldHMgdGhlIGF1ZGlvIERTUCBpbmRlcGVuZGVudGx5IHJhdGUgbWF0Y2ggdGhlIGlucHV0CiAqICAgIGFuZCBvdXRwdXQgcmF0ZXMuCiAqIDMuIEFmdGVyIGRyaWZ0IGRldGVjdGlvbiwgdGhlIGRyaWZ0IGNvcnJlY3Rpb24gaXMgYWNoaWV2ZWQgYnkgZWl0aGVyIHB1bGxpbmcKICogICAgdGhlIFBMTHMgKGlmIGFwcGxpY2FibGUpIG9yIGJ5IHN0cmVhbSB0byBkZXZpY2UgcmF0ZSBtYXRjaGluZwogKiAgICAoZm9yIFBDTSB1c2UgY2FzZXMpIGJ5IGNvbXBhcmluZyBkcmlmdCB3aXRoIHJlc3BlY3QgdG8gU1RDLgogKiA0LiBGb3IgcGFzc3Rocm91Z2ggdXNlIGNhc2VzLCBzaW5jZSB0aGUgUExMIHB1bGxpbmcgaXMgdGhlIG9ubHkgb3B0aW9uLAogKiAgICBhIGJlc3QgZWZmb3J0IHdpbGwgYmUgbWFkZS4KICogICAgSWYgUExMIHB1bGxpbmcgaXMgbm90IHBvc3NpYmxlIC8gYXZhaWxhYmxlLCB0aGUgcmVuZGVyaW5nIHdpbGwgYmUKICogICAgZG9uZSB3aXRob3V0IHJhdGUgbWF0Y2hpbmcuCiAqLwojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fQ0xLX1JFQ19BVVRPIDEKCi8qIFBheWxvYWQgb2YgdGhlICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUMgcGFyYW1ldGVyLgogKi8Kc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fY2xrX3JlY190IHsKCS8qIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBjbG9jayByZWNvdmVyeSB0aGF0IHRoZSBhdWRpbyBEU1Agc2hvdWxkCgkgKiB1c2UgZm9yIHJhdGUgbWF0Y2hpbmcuCgkgKi8KCgkvKiBAdmFsdWVzCgkgKiAjQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9DTEtfUkVDX0RFRkFVTFQKCSAqICNBU01fU0VTU0lPTl9NVE1YX1NUUlRSX1BBUkFNX0NMS19SRUNfSU5ERVBFTkRFTlQKCSAqLwoJdTMyICAgICAgICAgICAgICAgICAgZmxhZ3M7Cn0gX19wYWNrZWQ7CgoKLyogUGFyYW1ldGVyIHVzZWQgYnkgI0FTTV9TRVNTSU9OX01UTVhfU1RSVFJfTU9EVUxFX0lEX0FWU1lOQyB0bwogKiByZWFsaXplIHNtb290aGVyIGFkanVzdG1lbnQgb2YgYXVkaW8gc2Vzc2lvbiBjbG9jayBmb3IgYSBzcGVjaWZpZWQgc2Vzc2lvbi4KICogVGhlIGRlc2lyZWQgYXVkaW8gc2Vzc2lvbiBjbG9jayBhZGp1c3RtZW50KGluIG1pY3JvIHNlY29uZHMpIGlzIHNwZWNpZmllZAogKiB1c2luZyB0aGUgY29tbWFuZCAjQVNNX1NFU1NJT05fQ01EX0FESlVTVF9TRVNTSU9OX0NMT0NLX1YyLgogKiBEZWxheWluZy9BZHZhbmNpbmcgdGhlIHNlc3Npb24gY2xvY2sgd291bGQgYmUgaW1wbGVtZW50ZWQgYnkgaW5zZXJ0aW5nCiAqIGludGVycG9sYXRlZC9kcm9wcGluZyBhdWRpbyBzYW1wbGVzIGluIHRoZSBwbGF5YmFjayBwYXRoIHJlc3BlY3RpdmVseS4KICogQWxzbywgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgYmVmb3JlIHRoZSBBdWRpbyBTZXNzaW9uIGlzIHB1dAogKiB0byBSVU4gc3RhdGUgdG8gYXZvaWQgY29sZCBzdGFydCBsYXRlbmN5L2dsaXRjaGVzIGluIHRoZSBwbGF5YmFjay4KICovCgojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfUEFSQU1fQURKVVNUX1NFU1NJT05fVElNRV9DVEwgICAgICAgICAweDAwMDEzMjE3CgpzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9wYXJhbV9hZGp1c3Rfc2Vzc2lvbl90aW1lX2N0bF90IHsKCS8qIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBtb2R1bGUgaXMgZW5hYmxlZCBvciBub3QKCSAqIEB2YWx1ZXMKCSAqIDAgLS0gZGlzYWJsZWQKCSAqIDEgLS0gZW5hYmxlZAoJICovCgl1MzIgICAgICAgICAgICAgICAgIGVuYWJsZTsKfTsKCnVuaW9uIGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fY29uZmlnIHsKCXN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX3dpbmRvd192Ml90IHdpbmRvd19wYXJhbTsKCXN0cnVjdCBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX3BhcmFtX3JlbmRlcl9tb2RlX3QgcmVuZGVyX3BhcmFtOwoJc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fY2xrX3JlY190IGNsa19yZWNfcGFyYW07CglzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9wYXJhbV9hZGp1c3Rfc2Vzc2lvbl90aW1lX2N0bF90IGFkal90aW1lX3BhcmFtOwp9IF9fcGFja2VkOwoKc3RydWN0IGFzbV9tdG14X3N0cnRyX3BhcmFtcyB7CglzdHJ1Y3QgYXByX2hkciAgaGRyOwoJc3RydWN0IGFzbV9zZXNzaW9uX2NtZF9zZXRfbXRteF9zdHJzdHJfcGFyYW1zX3YyIHBhcmFtOwoJc3RydWN0IGFzbV9zdHJlYW1fcGFyYW1fZGF0YV92MiBkYXRhOwoJdW5pb24gYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9jb25maWcgY29uZmlnOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBU01fU0VTU0lPTl9DTURfR0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyIDB4MDAwMTBEQ0YKI2RlZmluZSBBU01fU0VTU0lPTl9DTURSU1BfR0VUX01UTVhfU1RSVFJfUEFSQU1TX1YyIDB4MDAwMTBERDAKCiNkZWZpbmUgQVNNX1NFU1NJT05fTVRNWF9TVFJUUl9QQVJBTV9TRVNTSU9OX1RJTUVfVjMgMHgwMDAxMkYwQgojZGVmaW5lIEFTTV9TRVNTSU9OX01UTVhfU1RSVFJfUEFSQU1fU1RJTUVfVFNUTVBfRkxHX0JNQVNLICgweDgwMDAwMDAwVUwpCgpzdHJ1Y3QgYXNtX3Nlc3Npb25fY21kX2dldF9tdG14X3N0cnN0cl9wYXJhbXNfdjIgewoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgZGF0YSBwYXlsb2FkIGFkZHJlc3MuICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBkYXRhX3BheWxvYWRfYWRkcl9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGRhdGEgcGF5bG9hZCBhZGRyZXNzLgoJICogSWYgdGhlIGFkZHJlc3MgaXMgbm90IHNlbnQgKE5VTEwpLCB0aGUgbWVzc2FnZSBpcyBpbiB0aGUgcGF5bG9hZC4KCSAqIElmIHRoZSBhZGRyZXNzIGlzIHNlbnQgKG5vbi1OVUxMKSwgdGhlIHBhcmFtZXRlciBkYXRhIHBheWxvYWRzCgkgKiBiZWdpbiBhdCB0aGUgc3BlY2lmaWVkIGFkZHJlc3MuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIG1lbV9tYXBfaGFuZGxlOwoJLyoKCSAqIFVuaXF1ZSBpZGVudGlmaWVyIGZvciBhbiBhZGRyZXNzLiBUaGlzIG1lbW9yeSBtYXAgaGFuZGxlIGlzIHJldHVybmVkCgkgKiBieSB0aGUgYURTUCB0aHJvdWdoIHRoZSAjQVNNX0NNRF9TSEFSRURfTUVNX01BUF9SRUdJT05TIGNvbW1hbmQuCgkgKiB2YWx1ZXMKCSAqIC0gTlVMTCAtLSBQYXJhbWV0ZXIgZGF0YSBwYXlsb2FkcyBhcmUgd2l0aGluIHRoZSBtZXNzYWdlIHBheWxvYWQKCSAqIChpbi1iYW5kKS4KCSAqIC0gTm9uLU5VTEwgLS0gUGFyYW1ldGVyIGRhdGEgcGF5bG9hZHMgYmVnaW4gYXQgdGhlIGFkZHJlc3Mgc3BlY2lmaWVkCgkgKiBpbiB0aGUgZGF0YV9wYXlsb2FkX2FkZHJfbHN3IGFuZCBkYXRhX3BheWxvYWRfYWRkcl9tc3cgZmllbGRzCgkgKiAob3V0LW9mLWJhbmQpLgoJICovCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsKCS8qCgkgKiBEaXJlY3Rpb24gb2YgdGhlIGVudGl0eSAobWF0cml4IG1peGVyIG9yIHN0cmVhbSByb3V0ZXIpIG9uIHdoaWNoCgkgKiB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIHNldC4KCSAqIHZhbHVlcwoJICogLSAwIC0tIFJ4IChmb3IgUnggc3RyZWFtIHJvdXRlciBvciBSeCBtYXRyaXggbWl4ZXIpCgkgKiAtIDEgLS0gVHggKGZvciBUeCBzdHJlYW0gcm91dGVyIG9yIFR4IG1hdHJpeCBtaXhlcikKCSAqLwoJdWludDMyX3QgICAgICAgICAgICAgICAgICBtb2R1bGVfaWQ7CgkvKiBVbmlxdWUgbW9kdWxlIElELiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcGFyYW1faWQ7CgkvKiBVbmlxdWUgcGFyYW1ldGVyIElELiAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgcGFyYW1fbWF4X3NpemU7Cn07CgpzdHJ1Y3QgYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9wYXJhbV9zZXNzaW9uX3RpbWVfdjNfdCB7Cgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHNlc3Npb25fdGltZV9sc3c7CgkvKiBMb3dlciAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHNlc3Npb24gdGltZSBpbiBtaWNyb3NlY29uZHMgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHNlc3Npb25fdGltZV9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgY3VycmVudCBzZXNzaW9uIHRpbWUgaW4gbWljcm9zZWNvbmRzLgoJICogVGhlIDY0LWJpdCBudW1iZXIgZm9ybWVkIGJ5IHNlc3Npb25fdGltZV9sc3cgYW5kIHNlc3Npb25fdGltZV9tc3cKCSAqIGlzIHRyZWF0ZWQgYXMgc2lnbmVkLgoJICovCgoJdWludDMyX3QgICAgICAgICAgICAgICAgICBhYnNvbHV0ZV90aW1lX2xzdzsKCS8qCgkgKiBMb3dlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgYWJzb2x1dGUgdGltZSBpbiBtaWNyb3NlY29uZHMuCgkgKiBUaGlzIGlzIHRoZSB0aW1lIHdoZW4gdGhlIHNhbXBsZSBjb3JyZXNwb25kaW5nIHRvIHRoZQoJICogc2Vzc2lvbl90aW1lX2xzdyBpcyByZW5kZXJlZCB0byB0aGUgaGFyZHdhcmUuIFRoaXMgYWJzb2x1dGUKCSAqIHRpbWUgY2FuIGJlIHNsaWdodGx5IGluIHRoZSBmdXR1cmUgb3IgcGFzdC4KCSAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgYWJzb2x1dGVfdGltZV9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgNjQtYml0IGFic29sdXRlIHRpbWUgaW4gbWljcm9zZWNvbmRzLgoJICogVGhpcyBpcyB0aGUgdGltZSB3aGVuIHRoZSBzYW1wbGUgY29ycmVzcG9uZGluZyB0byB0aGUKCSAqIHNlc3Npb25fdGltZV9tc3cgaXMgcmVuZGVyZWQgdG8gaGFyZHdhcmUuIFRoaXMgYWJzb2x1dGUKCSAqIHRpbWUgY2FuIGJlIHNsaWdodGx5IGluIHRoZSBmdXR1cmUgb3IgcGFzdC4gVGhlIDY0LWJpdCBudW1iZXIKCSAqIGZvcm1lZCBieSBhYnNvbHV0ZV90aW1lX2xzdyBhbmQgYWJzb2x1dGVfdGltZV9tc3cgaXMgdHJlYXRlZCBhcwoJICogdW5zaWduZWQuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIHRpbWVfc3RhbXBfbHN3OwoJLyogTG93ZXIgMzIgYml0cyBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgdGltZXN0YW1wIGluIG1pY3Jvc2Vjb25kcyAqLwoKCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdGltZV9zdGFtcF9tc3c7CgkvKgoJICogVXBwZXIgMzIgYml0cyBvZiB0aGUgbGFzdCBwcm9jZXNzZWQgdGltZXN0YW1wIGluIG1pY3Jvc2Vjb25kcy4KCSAqIFRoZSA2NC1iaXQgbnVtYmVyIGZvcm1lZCBieSB0aW1lX3N0YW1wX2xzdyBhbmQgdGltZV9zdGFtcF9sc3cKCSAqIGlzIHRyZWF0ZWQgYXMgdW5zaWduZWQuCgkgKi8KCgl1aW50MzJfdCAgICAgICAgICAgICAgICAgIGZsYWdzOwoJLyoKCSAqIEtlZXBzIHRyYWNrIG9mIGFueSBhZGRpdGlvbmFsIGZsYWdzIG5lZWRlZC4KCSAqIEB2YWx1ZXN7Zm9yIGJpdCAzMX0KCSAqIC0gMCAtLSBVbmluaXRpYWxpemVkL2ludmFsaWQKCSAqIC0gMSAtLSBWYWxpZAoJICogQWxsIG90aGVyIGJpdHMgYXJlIHJlc2VydmVkOyBjbGllbnRzIG11c3Qgc2V0IHRoZW0gdG8gemVyby4KCSAqLwp9OwoKdW5pb24gYXNtX3Nlc3Npb25fbXRteF9zdHJ0cl9kYXRhX3R5cGUgewoJc3RydWN0IGFzbV9zZXNzaW9uX210bXhfc3RydHJfcGFyYW1fc2Vzc2lvbl90aW1lX3YzX3Qgc2Vzc2lvbl90aW1lOwp9OwoKc3RydWN0IGFzbV9tdG14X3N0cnRyX2dldF9wYXJhbXMgewoJc3RydWN0IGFwcl9oZHIgaGRyOwoJc3RydWN0IGFzbV9zZXNzaW9uX2NtZF9nZXRfbXRteF9zdHJzdHJfcGFyYW1zX3YyIHBhcmFtX2luZm87Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYXNtX210bXhfc3RydHJfZ2V0X3BhcmFtc19jbWRyc3AgewoJdWludDMyX3QgZXJyX2NvZGU7CglzdHJ1Y3QgYXNtX3N0cmVhbV9wYXJhbV9kYXRhX3YyIHBhcmFtX2luZm87Cgl1bmlvbiBhc21fc2Vzc2lvbl9tdG14X3N0cnRyX2RhdGFfdHlwZSBwYXJhbV9kYXRhOwp9IF9fcGFja2VkOwoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9SRVNBTVBMRVIgMHgwMDAxMDcxOQoKZW51bSB7CglMRUdBQ1lfUENNID0gMCwKCUNPTVBSRVNTRURfUEFTU1RIUk9VR0gsCglDT01QUkVTU0VEX1BBU1NUSFJPVUdIX0NPTlZFUlQsCglDT01QUkVTU0VEX1BBU1NUSFJPVUdIX0RTRCwKCUxJU1RFTiwKCUNPTVBSRVNTRURfUEFTU1RIUk9VR0hfR0VOLAoJQ09NUFJFU1NFRF9QQVNTVEhST1VHSF9JRUM2MTkzNwp9OwoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9DT01QUkVTU0VEX01VVEUgICAgICAgICAgICAgICAgMHgwMDAxMDc3MAojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQ09NUFJFU1NFRF9NVVRFICAgICAgICAgICAgICAgICAweDAwMDEwNzcxCgpzdHJ1Y3QgYWRtX3NldF9jb21wcmVzc2VkX2RldmljZV9tdXRlIHsKCXN0cnVjdCBhZG1fY21kX3NldF9wcF9wYXJhbXNfdjUgY29tbWFuZDsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBwYXJhbXM7Cgl1MzIgICAgbXV0ZV9vbjsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQ09NUFJFU1NFRF9MQVRFTkNZICAgICAgICAgICAgIDB4MDAwMTA3NkUKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0NPTVBSRVNTRURfTEFURU5DWSAgICAgICAgICAgICAgMHgwMDAxMDc2RgoKc3RydWN0IGFkbV9zZXRfY29tcHJlc3NlZF9kZXZpY2VfbGF0ZW5jeSB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IGNvbW1hbmQ7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgcGFyYW1zOwoJdTMyICAgIGxhdGVuY3k7Cn0gX19wYWNrZWQ7CgojZGVmaW5lIFZPSUNFUFJPQ19NT0RVTEVfSURfR0VORVJJQ19UWCAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwRUY2CiNkZWZpbmUgVk9JQ0VQUk9DX1BBUkFNX0lEX0ZMVUVOQ0VfU09VTkRGT0NVUyAgICAgICAgICAgICAgIDB4MDAwMTBFMzcKI2RlZmluZSBWT0lDRVBST0NfUEFSQU1fSURfRkxVRU5DRV9TT1VSQ0VUUkFDS0lORyAgICAgICAgICAgMHgwMDAxMEUzOAojZGVmaW5lIE1BWF9TRUNUT1JTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4CiNkZWZpbmUgTUFYX05PSVNFX1NPVVJDRV9JTkRJQ0FUT1JTICAgICAgICAgICAgICAgICAgICAgICAgIDMKI2RlZmluZSBNQVhfUE9MQVJfQUNUSVZJVFlfSU5ESUNBVE9SUyAgICAgICAgICAgICAgICAgICAgICAgMzYwCgpzdHJ1Y3Qgc291bmRfZm9jdXNfcGFyYW0gewoJdWludDE2X3Qgc3RhcnRfYW5nbGVbTUFYX1NFQ1RPUlNdOwoJdWludDhfdCBlbmFibGVbTUFYX1NFQ1RPUlNdOwoJdWludDE2X3QgZ2Fpbl9zdGVwOwp9IF9fcGFja2VkOwoKc3RydWN0IHNvdXJjZV90cmFja2luZ19wYXJhbSB7Cgl1aW50OF90IHZhZFtNQVhfU0VDVE9SU107Cgl1aW50MTZfdCBkb2Ffc3BlZWNoOwoJdWludDE2X3QgZG9hX25vaXNlW01BWF9OT0lTRV9TT1VSQ0VfSU5ESUNBVE9SU107Cgl1aW50OF90IHBvbGFyX2FjdGl2aXR5W01BWF9QT0xBUl9BQ1RJVklUWV9JTkRJQ0FUT1JTXTsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZG1fcGFyYW1fZmx1ZW5jZV9zb3VuZGZvY3VzX3QgewoJdWludDE2X3Qgc3RhcnRfYW5nbGVzW01BWF9TRUNUT1JTXTsKCXVpbnQ4X3QgZW5hYmxlc1tNQVhfU0VDVE9SU107Cgl1aW50MTZfdCBnYWluX3N0ZXA7Cgl1aW50MTZfdCByZXNlcnZlZDsKfSBfX3BhY2tlZDsKCnN0cnVjdCBhZG1fc2V0X2ZsdWVuY2Vfc291bmRmb2N1c19wYXJhbSB7CglzdHJ1Y3QgYWRtX2NtZF9zZXRfcHBfcGFyYW1zX3Y1IHBhcmFtczsKCXN0cnVjdCBhZG1fcGFyYW1fZGF0YV92NSBkYXRhOwoJc3RydWN0IGFkbV9wYXJhbV9mbHVlbmNlX3NvdW5kZm9jdXNfdCBzb3VuZGZvY3VzX2RhdGE7Cn0gX19wYWNrZWQ7CgpzdHJ1Y3QgYWRtX3BhcmFtX2ZsdWVuY2Vfc291cmNldHJhY2tpbmdfdCB7Cgl1aW50OF90IHZhZFtNQVhfU0VDVE9SU107Cgl1aW50MTZfdCBkb2Ffc3BlZWNoOwoJdWludDE2X3QgZG9hX25vaXNlW01BWF9OT0lTRV9TT1VSQ0VfSU5ESUNBVE9SU107Cgl1aW50OF90IHBvbGFyX2FjdGl2aXR5W01BWF9QT0xBUl9BQ1RJVklUWV9JTkRJQ0FUT1JTXTsKfSBfX3BhY2tlZDsKCiNkZWZpbmUgQVVEUFJPQ19NT0RVTEVfSURfQVVESU9TUEhFUkUgICAgICAgICAgICAgICAweDAwMDEwOTE2CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9FTkFCTEUgICAgICAgICAweDAwMDEwOTE3CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9TVFJFTkdUSCAgICAgICAweDAwMDEwOTE4CiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9DT05GSUdfTU9ERSAgICAweDAwMDEwOTE5CgojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQVVESU9TUEhFUkVfQ09FRkZTX1NURVJFT19JTlBVVCAgICAgICAgIDB4MDAwMTA5MUEKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEX0FVRElPU1BIRVJFX0NPRUZGU19NVUxUSUNIQU5ORUxfSU5QVVQgICAweDAwMDEwOTFCCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9ERVNJR05fU1RFUkVPX0lOUFVUICAgICAgICAgMHgwMDAxMDkxQwojZGVmaW5lIEFVRFBST0NfUEFSQU1fSURfQVVESU9TUEhFUkVfREVTSUdOX01VTFRJQ0hBTk5FTF9JTlBVVCAgIDB4MDAwMTA5MUQKCiNkZWZpbmUgQVVEUFJPQ19QQVJBTV9JRF9BVURJT1NQSEVSRV9PUEVSQVRJTkdfSU5QVVRfTUVESUFfSU5GTyAgMHgwMDAxMDkxRQoKI2RlZmluZSBBVURQUk9DX01PRFVMRV9JRF9WT0lDRV9UWF9TRUNOUyAgIDB4MTAwMjcwNTkKI2RlZmluZSBBVURQUk9DX1BBUkFNX0lEWF9TRUNfUFJJTUFSWV9NSUNfQ0ggMHgxMDAxNDQ0NAoKc3RydWN0IGFkbXhfc2VjX3ByaW1hcnlfbWljX2NoIHsKCXVpbnQxNl90IHZlcnNpb247Cgl1aW50MTZfdCByZXNlcnZlZDsKCXVpbnQxNl90IHNlY19wcmltYXJ5X21pY19jaDsKCXVpbnQxNl90IHJlc2VydmVkMTsKfSBfX3BhY2tlZDsKCgpzdHJ1Y3QgYWRtX3NldF9zZWNfcHJpbWFyeV9jaF9wYXJhbXMgewoJc3RydWN0IGFkbV9jbWRfc2V0X3BwX3BhcmFtc192NSBwYXJhbXM7CglzdHJ1Y3QgYWRtX3BhcmFtX2RhdGFfdjUgZGF0YTsKCXN0cnVjdCBhZG14X3NlY19wcmltYXJ5X21pY19jaCBzZWNfcHJpbWFyeV9taWNfY2hfZGF0YTsKfSBfX3BhY2tlZDsKI2VuZGlmIC8qX0FQUl9BVURJT19WMl9IXyAqLwo=