LyoKICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKICoKICogIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgogKiAgQXV0aG9yOiBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAqLwojaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICgojZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJCTB4ZmZmZmZmZmYKCiNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVAkxNwoKI2RlZmluZSBPTUFQX0RNQV9OT19ERVZJQ0UJCTAKI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9UWAkJMQojZGVmaW5lIE9NQVBfRE1BX01DU0kxX1JYCQkyCiNkZWZpbmUgT01BUF9ETUFfSTJDX1JYCQkJMwojZGVmaW5lIE9NQVBfRE1BX0kyQ19UWAkJCTQKI2RlZmluZSBPTUFQX0RNQV9FWFRfTkRNQV9SRVEJCTUKI2RlZmluZSBPTUFQX0RNQV9FWFRfTkRNQV9SRVEyCQk2CiNkZWZpbmUgT01BUF9ETUFfVVdJUkVfVFgJCTcKI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDFfVFgJCTgKI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDFfUlgJCTkKI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDNfVFgJCTEwCiNkZWZpbmUgT01BUF9ETUFfTUNCU1AzX1JYCQkxMQojZGVmaW5lIE9NQVBfRE1BX1VBUlQxX1RYCQkxMgojZGVmaW5lIE9NQVBfRE1BX1VBUlQxX1JYCQkxMwojZGVmaW5lIE9NQVBfRE1BX1VBUlQyX1RYCQkxNAojZGVmaW5lIE9NQVBfRE1BX1VBUlQyX1JYCQkxNQojZGVmaW5lIE9NQVBfRE1BX01DQlNQMl9UWAkJMTYKI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDJfUlgJCTE3CiNkZWZpbmUgT01BUF9ETUFfVUFSVDNfVFgJCTE4CiNkZWZpbmUgT01BUF9ETUFfVUFSVDNfUlgJCTE5CiNkZWZpbmUgT01BUF9ETUFfQ0FNRVJBX0lGX1JYCQkyMAojZGVmaW5lIE9NQVBfRE1BX01NQ19UWAkJCTIxCiNkZWZpbmUgT01BUF9ETUFfTU1DX1JYCQkJMjIKI2RlZmluZSBPTUFQX0RNQV9OQU5ECQkJMjMKI2RlZmluZSBPTUFQX0RNQV9JUlFfTENEX0xJTkUJCTI0CiNkZWZpbmUgT01BUF9ETUFfTUVNT1JZX1NUSUNLCQkyNQojZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1JYMAkJMjYKI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19SWDEJCTI3CiNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfUlgyCQkyOAojZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1RYMAkJMjkKI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19UWDEJCTMwCiNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgyCQkzMQoKLyogVGhlc2UgYXJlIG9ubHkgZm9yIDE2MTAgKi8KI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fREVTX0lOCQkzMgojZGVmaW5lIE9NQVBfRE1BX1NQSV9UWAkJCTMzCiNkZWZpbmUgT01BUF9ETUFfU1BJX1JYCQkJMzQKI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fSEFTSAkJMzUKI2RlZmluZSBPTUFQX0RNQV9DQ1BfQVRUTgkJMzYKI2RlZmluZSBPTUFQX0RNQV9DQ1BfRklGT19OT1RfRU1QVFkJMzcKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMAkzOAojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8wCTM5CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzEJNDAKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMQk0MQojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8yCTQyCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzIJNDMKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMwk0NAojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8zCTQ1CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzQJNDYKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNAk0NwojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl81CTQ4CiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzUJNDkKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fNgk1MAojZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl82CTUxCiNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzcJNTIKI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fNwk1MwojZGVmaW5lIE9NQVBfRE1BX01NQzJfVFgJCTU0CiNkZWZpbmUgT01BUF9ETUFfTU1DMl9SWAkJNTUKI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fREVTX09VVAkJNTYKCgojZGVmaW5lIE9NQVBfRE1BX0JBU0UJCQkoMHhmZmZlZDgwMCkKI2RlZmluZSBPTUFQX0RNQV9HQ1IJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAwKQojZGVmaW5lIE9NQVBfRE1BX0dTQ1IJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA0KQojZGVmaW5lIE9NQVBfRE1BX0dSU1QJCQkoT01BUF9ETUFfQkFTRSArIDB4NDA4KQojZGVmaW5lIE9NQVBfRE1BX0hXX0lECQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0MikKI2RlZmluZSBPTUFQX0RNQV9QQ0gyX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDQ0KQojZGVmaW5lIE9NQVBfRE1BX1BDSDBfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NDYpCiNkZWZpbmUgT01BUF9ETUFfUENIMV9JRAkJKE9NQVBfRE1BX0JBU0UgKyAweDQ0OCkKI2RlZmluZSBPTUFQX0RNQV9QQ0hHX0lECQkoT01BUF9ETUFfQkFTRSArIDB4NDRhKQojZGVmaW5lIE9NQVBfRE1BX1BDSERfSUQJCShPTUFQX0RNQV9CQVNFICsgMHg0NGMpCiNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX1UJCShPTUFQX0RNQV9CQVNFICsgMHg0NGUpCiNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX0wJCShPTUFQX0RNQV9CQVNFICsgMHg0NTApCiNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX1UJCShPTUFQX0RNQV9CQVNFICsgMHg0NTIpCiNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX0wJCShPTUFQX0RNQV9CQVNFICsgMHg0NTQpCiNkZWZpbmUgT01BUF9ETUFfQ0FQU18yCQkJKE9NQVBfRE1BX0JBU0UgKyAweDQ1NikKI2RlZmluZSBPTUFQX0RNQV9DQVBTXzMJCQkoT01BUF9ETUFfQkFTRSArIDB4NDU4KQojZGVmaW5lIE9NQVBfRE1BX0NBUFNfNAkJCShPTUFQX0RNQV9CQVNFICsgMHg0NWEpCiNkZWZpbmUgT01BUF9ETUFfUENIMl9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDQ2MCkKI2RlZmluZSBPTUFQX0RNQV9QQ0gwX1NSCQkoT01BUF9ETUFfQkFTRSArIDB4NDgwKQojZGVmaW5lIE9NQVBfRE1BX1BDSDFfU1IJCShPTUFQX0RNQV9CQVNFICsgMHg0ODIpCiNkZWZpbmUgT01BUF9ETUFfUENIRF9TUgkJKE9NQVBfRE1BX0JBU0UgKyAweDRjMCkKCiNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CQVNFCQkoMHhmZmZlZGIwMCkKI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0NUUkwJCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAwKQojZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDIpCiNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfVQkoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwNCkKI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0JPVF9GMV9MCShPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDA2KQojZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UJKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDgpCgojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQkFTRQkJKDB4ZmZmZWUzMDApCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9DU0RQICAgICAgCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMwKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSCQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjMikKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NUUkwJCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM0KQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzgpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhjYSkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNjKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IxX1UJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2UpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfTAkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMl9VCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQyKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IyX0wJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDQpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNikKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19FSV9CMQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkOCkKI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9MCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGRhKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0VOX0IxCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGUwKQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZOX0IxCShPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGU0KQojZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwJKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZWEpCiNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRklfQjFfVQkoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhmNCkKCgovKiBFdmVyeSBMQ2ggaGFzIGl0cyBvd24gc2V0IG9mIHRoZSByZWdpc3RlcnMgYmVsb3cgKi8KI2RlZmluZSBPTUFQX0RNQV9DU0RQKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDAwKQojZGVmaW5lIE9NQVBfRE1BX0NDUihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDIpCiNkZWZpbmUgT01BUF9ETUFfQ0lDUihuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwNCkKI2RlZmluZSBPTUFQX0RNQV9DU1IobikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDA2KQojZGVmaW5lIE9NQVBfRE1BX0NTU0FfTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwOCkKI2RlZmluZSBPTUFQX0RNQV9DU1NBX1UobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGEpCiNkZWZpbmUgT01BUF9ETUFfQ0RTQV9MKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBjKQojZGVmaW5lIE9NQVBfRE1BX0NEU0FfVShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwZSkKI2RlZmluZSBPTUFQX0RNQV9DRU4obikJCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDEwKQojZGVmaW5lIE9NQVBfRE1BX0NGTihuKQkJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTIpCiNkZWZpbmUgT01BUF9ETUFfQ1NGSShuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxNCkKI2RlZmluZSBPTUFQX0RNQV9DU0VJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDE2KQojZGVmaW5lIE9NQVBfRE1BX0NTQUMobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MTgpCiNkZWZpbmUgT01BUF9ETUFfQ0RBQyhuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgxYSkKI2RlZmluZSBPTUFQX0RNQV9DREVJKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDFjKQojZGVmaW5lIE9NQVBfRE1BX0NERkkobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MWUpCiNkZWZpbmUgT01BUF9ETUFfQ09MT1JfTChuKQkJKE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKI2RlZmluZSBPTUFQX0RNQV9DT0xPUl9VKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDIyKQojZGVmaW5lIE9NQVBfRE1BX0NDUjIobikJCShPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjQpCiNkZWZpbmUgT01BUF9ETUFfQ0xOS19DVFJMKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI4KQojZGVmaW5lIE9NQVBfRE1BX0xDSF9DVFJMKG4pCQkoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQoKI2RlZmluZSBPTUFQX0RNQV9UT1VUX0lSUQkJKDEgPDwgMCkKI2RlZmluZSBPTUFQX0RNQV9EUk9QX0lSUQkJKDEgPDwgMSkKI2RlZmluZSBPTUFQX0RNQV9IQUxGX0lSUQkJKDEgPDwgMikKI2RlZmluZSBPTUFQX0RNQV9GUkFNRV9JUlEJCSgxIDw8IDMpCiNkZWZpbmUgT01BUF9ETUFfTEFTVF9JUlEJCSgxIDw8IDQpCiNkZWZpbmUgT01BUF9ETUFfQkxPQ0tfSVJRCQkoMSA8PCA1KQojZGVmaW5lIE9NQVBfRE1BX1NZTkNfSVJRCQkoMSA8PCA2KQoKI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzgJCTB4MDAKI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2CQkweDAxCiNkZWZpbmUgT01BUF9ETUFfREFUQV9UWVBFX1MzMgkJMHgwMgoKI2RlZmluZSBPTUFQX0RNQV9TWU5DX0VMRU1FTlQJCTB4MDAKI2RlZmluZSBPTUFQX0RNQV9TWU5DX0ZSQU1FCQkweDAxCiNkZWZpbmUgT01BUF9ETUFfU1lOQ19CTE9DSwkJMHgwMgoKI2RlZmluZSBPTUFQX0RNQV9QT1JUX0VNSUZGCQkweDAwCiNkZWZpbmUgT01BUF9ETUFfUE9SVF9FTUlGUwkJMHgwMQojZGVmaW5lIE9NQVBfRE1BX1BPUlRfT0NQX1QxCQkweDAyCiNkZWZpbmUgT01BUF9ETUFfUE9SVF9USVBCCQkweDAzCiNkZWZpbmUgT01BUF9ETUFfUE9SVF9PQ1BfVDIJCTB4MDQKI2RlZmluZSBPTUFQX0RNQV9QT1JUX01QVUkJCTB4MDUKCiNkZWZpbmUgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQJCTB4MDAKI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQwkJMHgwMQojZGVmaW5lIE9NQVBfRE1BX0FNT0RFX1NJTkdMRV9JRFgJMHgwMgojZGVmaW5lIE9NQVBfRE1BX0FNT0RFX0RPVUJMRV9JRFgJMHgwMwoKLyogTENEIERNQSBibG9jayBudW1iZXJzICovCmVudW0gewoJT01BUF9MQ0RfRE1BX0IxX1RPUCwKCU9NQVBfTENEX0RNQV9CMV9CT1RUT00sCglPTUFQX0xDRF9ETUFfQjJfVE9QLAoJT01BUF9MQ0RfRE1BX0IyX0JPVFRPTQp9OwoKZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIHsKCU9NQVBfRE1BX0RBVEFfQlVSU1RfRElTID0gMCwKCU9NQVBfRE1BX0RBVEFfQlVSU1RfNCwKCU9NQVBfRE1BX0RBVEFfQlVSU1RfOAp9OwoKZW51bSBvbWFwX2RtYV9jb2xvcl9tb2RlIHsKCU9NQVBfRE1BX0NPTE9SX0RJUyA9IDAsCglPTUFQX0RNQV9DT05TVEFOVF9GSUxMLAoJT01BUF9ETUFfVFJBTlNQQVJFTlRfQ09QWQp9OwoKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KTsKZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAoJCQkgICAgdm9pZCAoKiBjYWxsYmFjaykoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSksCgkJCSAgICB2b2lkICpkYXRhLCBpbnQgKmRtYV9jaCk7CmV4dGVybiB2b2lkIG9tYXBfZW5hYmxlX2RtYV9pcnEoaW50IGNoLCB1MTYgaXJxX2JpdHMpOwpleHRlcm4gdm9pZCBvbWFwX2Rpc2FibGVfZG1hX2lycShpbnQgY2gsIHUxNiBpcnFfYml0cyk7CmV4dGVybiB2b2lkIG9tYXBfZnJlZV9kbWEoaW50IGNoKTsKZXh0ZXJuIHZvaWQgb21hcF9zdGFydF9kbWEoaW50IGxjaCk7CmV4dGVybiB2b2lkIG9tYXBfc3RvcF9kbWEoaW50IGxjaCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV90cmFuc2Zlcl9wYXJhbXMoaW50IGxjaCwgaW50IGRhdGFfdHlwZSwKCQkJCQkgaW50IGVsZW1fY291bnQsIGludCBmcmFtZV9jb3VudCwKCQkJCQkgaW50IHN5bmNfbW9kZSk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9jb2xvcl9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSBtb2RlLAoJCQkJICAgIHUzMiBjb2xvcik7CgpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX3BhcmFtcyhpbnQgbGNoLCBpbnQgc3JjX3BvcnQsIGludCBzcmNfYW1vZGUsCgkJCQkgICAgdW5zaWduZWQgbG9uZyBzcmNfc3RhcnQpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9zcmNfZGF0YV9wYWNrKGludCBsY2gsIGludCBlbmFibGUpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfc3JjX2J1cnN0X21vZGUoaW50IGxjaCwKCQkJCQllbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSk7CgpleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfZGVzdF9wYXJhbXMoaW50IGxjaCwgaW50IGRlc3RfcG9ydCwgaW50IGRlc3RfYW1vZGUsCgkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZGVzdF9zdGFydCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2luZGV4KGludCBsY2gsIGludCBlaWR4LCBpbnQgZmlkeCk7CmV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9kZXN0X2RhdGFfcGFjayhpbnQgbGNoLCBpbnQgZW5hYmxlKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX2Rlc3RfYnVyc3RfbW9kZShpbnQgbGNoLAoJCQkJCSBlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgYnVyc3RfbW9kZSk7CgpleHRlcm4gdm9pZCBvbWFwX2RtYV9saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKZXh0ZXJuIHZvaWQgb21hcF9kbWFfdW5saW5rX2xjaCAoaW50IGxjaF9oZWFkLCBpbnQgbGNoX3F1ZXVlKTsKCmV4dGVybiBkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpOwpleHRlcm4gZG1hX2FkZHJfdCBvbWFwX2dldF9kbWFfZHN0X3BvcyhpbnQgbGNoKTsKZXh0ZXJuIHZvaWQgb21hcF9jbGVhcl9kbWEoaW50IGxjaCk7CmV4dGVybiBpbnQgb21hcF9kbWFfcnVubmluZyh2b2lkKTsKCi8qIFJldHVybnMgMSBpZiB0aGUgRE1BIG1vZHVsZSBpcyBpbiBPTUFQMTUxMC1jb21wYXRpYmxlIG1vZGUsIDAgb3RoZXJ3aXNlICovCmV4dGVybiBpbnQgb21hcF9kbWFfaW5fMTUxMF9tb2RlKHZvaWQpOwoKLyogTENEIERNQSBmdW5jdGlvbnMgKi8KZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfbGNkX2RtYSh2b2lkICgqIGNhbGxiYWNrKSh1MTYgc3RhdHVzLCB2b2lkICpkYXRhKSwKCQkJCXZvaWQgKmRhdGEpOwpleHRlcm4gdm9pZCBvbWFwX2ZyZWVfbGNkX2RtYSh2b2lkKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXR1cF9sY2RfZG1hKHZvaWQpOwpleHRlcm4gdm9pZCBvbWFwX2VuYWJsZV9sY2RfZG1hKHZvaWQpOwpleHRlcm4gdm9pZCBvbWFwX3N0b3BfbGNkX2RtYSh2b2lkKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9leHRfY29udHJvbGxlcihpbnQgZXh0ZXJuYWwpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX3NpbmdsZV90cmFuc2ZlcihpbnQgc2luZ2xlKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMSh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiBmYl94cmVzLCB1MTYgZmJfeXJlcywKCQkJCWludCBkYXRhX3R5cGUpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3JvdGF0aW9uKGludCByb3RhdGUpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3Z4cmVzKHVuc2lnbmVkIGxvbmcgdnhyZXMpOwpleHRlcm4gdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX21pcnJvcihpbnQgbWlycm9yKTsKZXh0ZXJuIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9zY2FsZSh1bnNpZ25lZCBpbnQgeHNjYWxlLCB1bnNpZ25lZCBpbnQgeXNjYWxlKTsKCiNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCg==