LyoKICogU29ueSBQcm9ncmFtbWFibGUgSS9PIENvbnRyb2wgRGV2aWNlIGRyaXZlciBmb3IgVkFJTwogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgogKgogKiBDb3B5cmlnaHQgKEMpIDIwMDUgTmFyYXlhbmFuIFIgUyA8bmFyc0BrYWRhbWJhLm9yZz4KCiAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY/R2ZSA8d3d3LmFsY292ZS5jb20+CiAqCiAqIENvcHlyaWdodCAoQykgMjAwMSBNaWNoYWVsIEFzaGxleSA8bS5hc2hsZXlAdW5zdy5lZHUuYXU+CiAqCiAqIENvcHlyaWdodCAoQykgMjAwMSBKdW5pY2hpIE1vcml0YSA8anVuMW1AbWFycy5kdGkubmUuanA+CiAqCiAqIENvcHlyaWdodCAoQykgMjAwMCBUYWtheWEgS2luam8gPHQta2luam9AdGM0LnNvLW5ldC5uZS5qcD4KICoKICogQ29weXJpZ2h0IChDKSAyMDAwIEFuZHJldyBUcmlkZ2VsbCA8dHJpZGdlQHZhbGludXguY29tPgogKgogKiBFYXJsaWVyIHdvcmsgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBQYXVsIGBSdXN0eScgUnVzc2VsbCBhbmQgUGF1bCBNYWNrZXJyYXMuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogKgogKi8KCiNpZm5kZWYgX1NPTllQSV9IXwojZGVmaW5lIF9TT05ZUElfSF8KCiNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgoKLyogZXZlbnRzIHRoZSB1c2VyIGFwcGxpY2F0aW9uIHJlYWRpbmcgL2Rldi9zb255cGkgY2FuIHVzZSAqLwoKI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9ET1dOCQkgMQojZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX1VQCQkJIDIKI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9ET1dOX1BSRVNTRUQJIDMKI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9VUF9QUkVTU0VECQkgNAojZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX1BSRVNTRUQJCSA1CiNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfUkVMRUFTRUQJCSA2CS8qIG9ic29sZXRlICovCiNkZWZpbmUgU09OWVBJX0VWRU5UX0NBUFRVUkVfUFJFU1NFRAkJIDcKI2RlZmluZSBTT05ZUElfRVZFTlRfQ0FQVFVSRV9SRUxFQVNFRAkJIDgJLyogb2Jzb2xldGUgKi8KI2RlZmluZSBTT05ZUElfRVZFTlRfQ0FQVFVSRV9QQVJUSUFMUFJFU1NFRAkgOQojZGVmaW5lIFNPTllQSV9FVkVOVF9DQVBUVVJFX1BBUlRJQUxSRUxFQVNFRAkxMAojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9FU0MJCQkxMQojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMQkJCTEyCiNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0YyCQkJMTMKI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRjMJCQkxNAojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GNAkJCTE1CiNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y1CQkJMTYKI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRjYJCQkxNwojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GNwkJCTE4CiNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0Y4CQkJMTkKI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRjkJCQkyMAojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMTAJCQkyMQojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMTEJCQkyMgojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9GMTIJCQkyMwojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV8xCQkJMjQKI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfMgkJCTI1CiNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX0QJCQkyNgojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9FCQkJMjcKI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfRgkJCTI4CiNkZWZpbmUgU09OWVBJX0VWRU5UX0ZOS0VZX1MJCQkyOQojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9CCQkJMzAKI2RlZmluZSBTT05ZUElfRVZFTlRfQkxVRVRPT1RIX1BSRVNTRUQJCTMxCiNkZWZpbmUgU09OWVBJX0VWRU5UX1BLRVlfUDEJCQkzMgojZGVmaW5lIFNPTllQSV9FVkVOVF9QS0VZX1AyCQkJMzMKI2RlZmluZSBTT05ZUElfRVZFTlRfUEtFWV9QMwkJCTM0CiNkZWZpbmUgU09OWVBJX0VWRU5UX0JBQ0tfUFJFU1NFRAkJMzUKI2RlZmluZSBTT05ZUElfRVZFTlRfTElEX0NMT1NFRAkJCTM2CiNkZWZpbmUgU09OWVBJX0VWRU5UX0xJRF9PUEVORUQJCQkzNwojZGVmaW5lIFNPTllQSV9FVkVOVF9CTFVFVE9PVEhfT04JCTM4CiNkZWZpbmUgU09OWVBJX0VWRU5UX0JMVUVUT09USF9PRkYJCTM5CiNkZWZpbmUgU09OWVBJX0VWRU5UX0hFTFBfUFJFU1NFRAkJNDAKI2RlZmluZSBTT05ZUElfRVZFTlRfRk5LRVlfT05MWQkJCTQxCiNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfRkFTVF9ET1dOCQk0MgojZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX0ZBU1RfVVAJCTQzCiNkZWZpbmUgU09OWVBJX0VWRU5UX0pPR0RJQUxfRkFTVF9ET1dOX1BSRVNTRUQJNDQKI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9GQVNUX1VQX1BSRVNTRUQJNDUKI2RlZmluZSBTT05ZUElfRVZFTlRfSk9HRElBTF9WRkFTVF9ET1dOCQk0NgojZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX1ZGQVNUX1VQCQk0NwojZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX1ZGQVNUX0RPV05fUFJFU1NFRAk0OAojZGVmaW5lIFNPTllQSV9FVkVOVF9KT0dESUFMX1ZGQVNUX1VQX1BSRVNTRUQJNDkKI2RlZmluZSBTT05ZUElfRVZFTlRfWk9PTV9QUkVTU0VECQk1MAojZGVmaW5lIFNPTllQSV9FVkVOVF9USFVNQlBIUkFTRV9QUkVTU0VECTUxCiNkZWZpbmUgU09OWVBJX0VWRU5UX01FWUVfRkFDRQkJCTUyCiNkZWZpbmUgU09OWVBJX0VWRU5UX01FWUVfT1BQT1NJVEUJCTUzCiNkZWZpbmUgU09OWVBJX0VWRU5UX01FTU9SWVNUSUNLX0lOU0VSVAkJNTQKI2RlZmluZSBTT05ZUElfRVZFTlRfTUVNT1JZU1RJQ0tfRUpFQ1QJCTU1CiNkZWZpbmUgU09OWVBJX0VWRU5UX0FOWUJVVFRPTl9SRUxFQVNFRAkJNTYKI2RlZmluZSBTT05ZUElfRVZFTlRfQkFUVEVSWV9JTlNFUlQJCTU3CiNkZWZpbmUgU09OWVBJX0VWRU5UX0JBVFRFUllfUkVNT1ZFCQk1OAojZGVmaW5lIFNPTllQSV9FVkVOVF9GTktFWV9SRUxFQVNFRAkJNTkKI2RlZmluZSBTT05ZUElfRVZFTlRfV0lSRUxFU1NfT04JCTYwCiNkZWZpbmUgU09OWVBJX0VWRU5UX1dJUkVMRVNTX09GRgkJNjEKCi8qIGdldC9zZXQgYnJpZ2h0bmVzcyAqLwojZGVmaW5lIFNPTllQSV9JT0NHQlJUCQlfSU9SKCd2JywgMCwgX191OCkKI2RlZmluZSBTT05ZUElfSU9DU0JSVAkJX0lPVygndicsIDAsIF9fdTgpCgovKiBnZXQgYmF0dGVyeSBmdWxsIGNhcGFjaXR5L3JlbWFpbmluZyBjYXBhY2l0eSAqLwojZGVmaW5lIFNPTllQSV9JT0NHQkFUMUNBUAlfSU9SKCd2JywgMiwgX191MTYpCiNkZWZpbmUgU09OWVBJX0lPQ0dCQVQxUkVNCV9JT1IoJ3YnLCAzLCBfX3UxNikKI2RlZmluZSBTT05ZUElfSU9DR0JBVDJDQVAJX0lPUigndicsIDQsIF9fdTE2KQojZGVmaW5lIFNPTllQSV9JT0NHQkFUMlJFTQlfSU9SKCd2JywgNSwgX191MTYpCgovKiBnZXQgYmF0dGVyeSBmbGFnczogYmF0dGVyeTEvYmF0dGVyeTIvYWMgYWRhcHRlciBwcmVzZW50ICovCiNkZWZpbmUgU09OWVBJX0JGTEFHU19CMQkweDAxCiNkZWZpbmUgU09OWVBJX0JGTEFHU19CMgkweDAyCiNkZWZpbmUgU09OWVBJX0JGTEFHU19BQwkweDA0CiNkZWZpbmUgU09OWVBJX0lPQ0dCQVRGTEFHUwlfSU9SKCd2JywgNywgX191OCkKCi8qIGdldC9zZXQgYmx1ZXRvb3RoIHN1YnN5c3RlbSBzdGF0ZSBvbi9vZmYgKi8KI2RlZmluZSBTT05ZUElfSU9DR0JMVUUJCV9JT1IoJ3YnLCA4LCBfX3U4KQojZGVmaW5lIFNPTllQSV9JT0NTQkxVRQkJX0lPVygndicsIDksIF9fdTgpCgovKiBnZXQvc2V0IGZhbiBzdGF0ZSBvbi9vZmYgKi8KI2RlZmluZSBTT05ZUElfSU9DR0ZBTgkJX0lPUigndicsIDEwLCBfX3U4KQojZGVmaW5lIFNPTllQSV9JT0NTRkFOCQlfSU9XKCd2JywgMTEsIF9fdTgpCgovKiBnZXQgdGVtcGVyYXR1cmUgKEMpICovCiNkZWZpbmUgU09OWVBJX0lPQ0dURU1QCQlfSU9SKCd2JywgMTIsIF9fdTgpCgojaWZkZWYgX19LRVJORUxfXwoKLyogdXNlZCBvbmx5IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdjRsIGFuZCBzb255cGkgKi8KCiNkZWZpbmUgU09OWVBJX0NPTU1BTkRfR0VUQ0FNRVJBCQkgMQkvKiBvYnNvbGV0ZSAqLwojZGVmaW5lIFNPTllQSV9DT01NQU5EX1NFVENBTUVSQQkJIDIKI2RlZmluZSBTT05ZUElfQ09NTUFORF9HRVRDQU1FUkFCUklHSFRORVNTCSAzCS8qIG9ic29sZXRlICovCiNkZWZpbmUgU09OWVBJX0NPTU1BTkRfU0VUQ0FNRVJBQlJJR0hUTkVTUwkgNAojZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQUNPTlRSQVNUCSA1CS8qIG9ic29sZXRlICovCiNkZWZpbmUgU09OWVBJX0NPTU1BTkRfU0VUQ0FNRVJBQ09OVFJBU1QJIDYKI2RlZmluZSBTT05ZUElfQ09NTUFORF9HRVRDQU1FUkFIVUUJCSA3CS8qIG9ic29sZXRlICovCiNkZWZpbmUgU09OWVBJX0NPTU1BTkRfU0VUQ0FNRVJBSFVFCQkgOAojZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQUNPTE9SCQkgOQkvKiBvYnNvbGV0ZSAqLwojZGVmaW5lIFNPTllQSV9DT01NQU5EX1NFVENBTUVSQUNPTE9SCQkxMAojZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQVNIQVJQTkVTUwkxMQkvKiBvYnNvbGV0ZSAqLwojZGVmaW5lIFNPTllQSV9DT01NQU5EX1NFVENBTUVSQVNIQVJQTkVTUwkxMgojZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQVBJQ1RVUkUJCTEzCS8qIG9ic29sZXRlICovCiNkZWZpbmUgU09OWVBJX0NPTU1BTkRfU0VUQ0FNRVJBUElDVFVSRQkJMTQKI2RlZmluZSBTT05ZUElfQ09NTUFORF9HRVRDQU1FUkFBR0MJCTE1CS8qIG9ic29sZXRlICovCiNkZWZpbmUgU09OWVBJX0NPTU1BTkRfU0VUQ0FNRVJBQUdDCQkxNgojZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQURJUkVDVElPTgkxNwkvKiBvYnNvbGV0ZSAqLwojZGVmaW5lIFNPTllQSV9DT01NQU5EX0dFVENBTUVSQVJPTVZFUlNJT04JMTgJLyogb2Jzb2xldGUgKi8KI2RlZmluZSBTT05ZUElfQ09NTUFORF9HRVRDQU1FUkFSRVZJU0lPTgkxOQkvKiBvYnNvbGV0ZSAqLwoKaW50IHNvbnlwaV9jYW1lcmFfY29tbWFuZChpbnQgY29tbWFuZCwgdTggdmFsdWUpOwoKI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KCiNlbmRpZgkJCQkvKiBfU09OWVBJX0hfICovCg==