ZGlmZiAtLWdpdCBhL0NIQU5HRUxPRyBiL0NIQU5HRUxPRwppbmRleCAzYmVhYjM1Li4yZmE5YTk0IDEwMDY0NAotLS0gYS9DSEFOR0VMT0cKKysrIGIvQ0hBTkdFTE9HCkBAIC0zLDcgKzMsOSBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMTYgTWFyIDIwMDM6Ci0gIEFkZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxUk05MjAwREsgdy9OQU5ECisgIC0gQWRkIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgTkFORAorICAgIGZsYXNoIChjZXJ0YWluIGZvcm1zIG9mIHdoaWNoIGFyZSBjYWxsZWQgU21hcnRNZWRpYSkuCisgIC0gQWRkIHN1cHBvcnQgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdC4KIAogKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTkgTWFyIDIwMDM6CiAgIC0gdXNlIGFybS1saW51eC1nY2MgYXMgZGVmYXVsdCBjb21waWxlciBmb3IgQVJNCkBAIC0zNiw2ICszOCwxMiBAQAogICAgIHRvIGV4aXN0aW5nIFBQQzQwNUdQIGRlc2lnbnMuCiAgIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KIAorKiBFeHRlbmQgSU5DQUlQIGJvYXJkIHN1cHBvcnQ6CisgIC0gYWRkIGF1dG9tYXRpYyBSQU0gc2l6ZSBkZXRlY3Rpb24KKyAgLSBhZGQgImJkaW5mbyIgY29tbWFuZAorICAtIHBhc3MgZmxhc2ggYWRkcmVzcyBhbmQgc2l6ZSB0byBMaW51eCBrZXJuZWwKKyAgLSBzd2l0Y2ggdG8gMTUwIE1IeiBjbG9jaworCiAqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKICAgdGhlIEhTWU5DL1ZTWU5DLiBSZXF1aXJlcyBuZXcgQ1BMRCBjb2RlIChWZXJzaW9uIDEwMSBmb3IgUmV2LiAxMDAKICAgYm9hcmRzLCB2ZXJzaW9uIDE1MyBmb3IgUmV2LiAyMDAgYm9hcmRzKS4KQEAgLTE3OSw2ICsxODcsMTAgQEAKICogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKICAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQogCisqIEFkZCBzdXBwb3J0IGZvciBNSVBTMzIgNEtjIENQVXMKKworKiBBZGQgc3VwcG9ydCBmb3IgSU5DQS1JUCBCb2FyZAorCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjI6CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCA5MTM5Y2NmLi40YTIxMzEwIDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogTjogUmljayBCcm9uc29uCiBFOiByaWNrQGVmbi5vcmcKLUQ6IEF0bWVsIEFUOTFSTTkyMDBESyB3L05BTkQgc3VwcG9ydAorRDogQXRtZWwgQVQ5MVJNOTIwMERLIGFuZCBOQU5EIHN1cHBvcnQKIAogTjogRGF2aWQgQnJvd24KIEU6IERCcm93bjAzQGhhcnJpcy5jb20KZGlmZiAtLWdpdCBhL01BS0VBTEwgYi9NQUtFQUxMCmluZGV4IGU4ZDg3ZTcuLmJhNGQ5ZWIgMTAwNjQ0Ci0tLSBhL01BS0VBTEwKKysrIGIvTUFLRUFMTApAQCAtMTA3LDYgKzEwNywxNCBAQAogCiBMSVNUX2FybT0iJHtMSVNUX1NBfSAke0xJU1RfQVJNN30gJHtMSVNUX0FSTTl9ICR7TElTVF94c2NhbGV9IgogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBNSVBTIDRLYyBTeXN0ZW1zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0xJU1RfbWlwczRrYz0iaW5jYWlwIgorCitMSVNUX21pcHM9IiR7TElTVF9taXBzNGtjfSIKKwogCiAjLS0tLS0gZm9yIG5vdywganVzdCBydW4gUFBDIGJ5IGRlZmF1bHQgLS0tLS0KIFsgJCMgPSAwIF0gJiYgc2V0ICRMSVNUX3BwYwpAQCAtMTI4LDcgKzEzNiw3IEBACiBmb3IgYXJnIGluICRACiBkbwogCWNhc2UgIiRhcmciIGluCi0JOHh4fDgyNHh8ODI2MHw0eHh8N3h4fDc0eHh8U0F8QVJNN3xBUk05fHBwY3xhcm18eHNjYWxlKQorCTh4eHw4MjR4fDgyNjB8NHh4fDd4eHw3NHh4fFNBfEFSTTd8QVJNOXxwcGN8YXJtfHhzY2FsZXxtaXBzKQogCQkJZm9yIHRhcmdldCBpbiBgZXZhbCBlY2hvICckTElTVF8nJHthcmd9YAogCQkJZG8KIAkJCQlidWlsZF90YXJnZXQgJHt0YXJnZXR9CmRpZmYgLS1naXQgYS9ib2FyZC9pbmNhaXAvTWFrZWZpbGUgYi9ib2FyZC9pbmNhaXAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ1OWJmMAotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2luY2FpcC9NYWtlZmlsZQpAQCAtMCwwICsxLDQxIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChCT0FSRCkuYQorCitPQkpTCT0gJChCT0FSRCkubyBmbGFzaC5vCitTT0JKUwk9IG1lbXNldHVwLm8KKworJChMSUIpOgkuZGVwZW5kICQoT0JKUykgJChTT0JKUykKKwkkKEFSKSBjcnYgJEAgJF4KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNPQkpTOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9ib2FyZC9pbmNhaXAvY29uZmlnLm1rIGIvYm9hcmQvaW5jYWlwL2NvbmZpZy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2VjYzAxCi0tLSAvZGV2L251bGwKKysrIGIvYm9hcmQvaW5jYWlwL2NvbmZpZy5tawpAQCAtMCwwICsxLDMyIEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCisjCisjIElOQ0EtSVAgYm9hcmQgd2l0aCBNSVBTIDRLYyBDUFUgY29yZQorIworCisjIFJPTSB2ZXJzaW9uCitURVhUX0JBU0UgPSAweEIwMDAwMDAwCisKKyMgUkFNIHZlcnNpb24KKyNURVhUX0JBU0UgPSAweDgwMTAwMDAwCmRpZmYgLS1naXQgYS9ib2FyZC9pbmNhaXAvZmxhc2guYyBiL2JvYXJkL2luY2FpcC9mbGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyN2YxNGEKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pbmNhaXAvZmxhc2guYwpAQCAtMCwwICsxLDY3MSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL2luY2EtaXAuaD4KKworZmxhc2hfaW5mb190CWZsYXNoX2luZm9bQ0ZHX01BWF9GTEFTSF9CQU5LU107IC8qIGluZm8gZm9yIEZMQVNIIGNoaXBzCSovCisKKy8qIE5PVEUgLSBDT05GSUdfRkxBU0hfMTZCSVQgbWVhbnMgdGhlIENQVSBpbnRlcmZhY2UgaXMgMTYtYml0LCBpdAorICogICAgICAgIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGZsYXNoIGNoaXAgYmVpbmcgOC1iaXQgb3IgMTYtYml0LgorICovCisjaWZkZWYgQ09ORklHX0ZMQVNIXzE2QklUCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IEZMQVNIX1BPUlRfV0lEVEg7Cit0eXBlZGVmIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IEZMQVNIX1BPUlRfV0lEVEhWOworI2RlZmluZQlGTEFTSF9JRF9NQVNLCTB4RkZGRgorI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBGTEFTSF9QT1JUX1dJRFRIOwordHlwZWRlZiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIEZMQVNIX1BPUlRfV0lEVEhWOworI2RlZmluZQlGTEFTSF9JRF9NQVNLCTB4RkZGRkZGRkYKKyNlbmRpZgorCisjZGVmaW5lIEZQVwlGTEFTSF9QT1JUX1dJRFRICisjZGVmaW5lIEZQV1YJRkxBU0hfUE9SVF9XSURUSFYKKworI2RlZmluZSBPUk1BU0soc2l6ZSkgKCgtc2l6ZSkgJiBPUl9BTV9NU0spCisKKyNpZiAwCisjZGVmaW5lIEZMQVNIX0NZQ0xFMQkweDA1NTUKKyNkZWZpbmUgRkxBU0hfQ1lDTEUyCTB4MDJhYQorI2Vsc2UKKyNkZWZpbmUgRkxBU0hfQ1lDTEUxCTB4MDU1NAorI2RlZmluZSBGTEFTSF9DWUNMRTIJMHgwMmFiCisjZW5kaWYKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRnVuY3Rpb25zCisgKi8KK3N0YXRpYyB1bG9uZyBmbGFzaF9nZXRfc2l6ZShGUFdWICphZGRyLCBmbGFzaF9pbmZvX3QgKmluZm8pOworc3RhdGljIHZvaWQgZmxhc2hfcmVzZXQoZmxhc2hfaW5mb190ICppbmZvKTsKK3N0YXRpYyBpbnQgd3JpdGVfd29yZF9pbnRlbChmbGFzaF9pbmZvX3QgKmluZm8sIEZQV1YgKmRlc3QsIEZQVyBkYXRhKTsKK3N0YXRpYyBpbnQgd3JpdGVfd29yZF9hbWQoZmxhc2hfaW5mb190ICppbmZvLCBGUFdWICpkZXN0LCBGUFcgZGF0YSk7CitzdGF0aWMgdm9pZCBmbGFzaF9nZXRfb2Zmc2V0cyh1bG9uZyBiYXNlLCBmbGFzaF9pbmZvX3QgKmluZm8pOworc3RhdGljIGZsYXNoX2luZm9fdCAqZmxhc2hfZ2V0X2luZm8odWxvbmcgYmFzZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIGZsYXNoX2luaXQoKQorICoKKyAqIHNldHMgdXAgZmxhc2hfaW5mbyBhbmQgcmV0dXJucyBzaXplIG9mIEZMQVNIIChieXRlcykKKyAqLwordW5zaWduZWQgbG9uZyBmbGFzaF9pbml0ICh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CisJaW50IGk7CisKKwkvKiBJbml0OiBubyBGTEFTSGVzIGtub3duICovCisJZm9yIChpPTA7IGkgPCBDRkdfTUFYX0ZMQVNIX0JBTktTOyArK2kpIHsKKwkJdWxvbmcgZmxhc2hiYXNlID0gKGkgPT0gMCkgPyBQSFlTX0ZMQVNIXzEgOiBQSFlTX0ZMQVNIXzI7CisJCXVsb25nICogYnVzY29uID0gKHVsb25nICopCisJCQkoKGkgPT0gMCkgPyBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMCA6IElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yKTsKKworCQkvKiBEaXNhYmxlIHdyaXRlIHByb3RlY3Rpb24gKi8KKwkJKmJ1c2NvbiAmPSB+SU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfV1JESVM7CisKKyNpZiAxCisJCW1lbXNldCgmZmxhc2hfaW5mb1tpXSwgMCwgc2l6ZW9mKGZsYXNoX2luZm9fdCkpOworI2VuZGlmCisKKwkJZmxhc2hfaW5mb1tpXS5zaXplID0gCisJCQlmbGFzaF9nZXRfc2l6ZSgoRlBXICopZmxhc2hiYXNlLCAmZmxhc2hfaW5mb1tpXSk7CisKKwkJaWYgKGZsYXNoX2luZm9baV0uZmxhc2hfaWQgPT0gRkxBU0hfVU5LTk9XTikgeworCQkJcHJpbnRmICgiIyMgVW5rbm93biBGTEFTSCBvbiBCYW5rICVkIC0gU2l6ZSA9IDB4JTA4bHhcbiIsCisJCQlpLCBmbGFzaF9pbmZvW2ldLnNpemUpOworCQl9CisJCQorCQlzaXplICs9IGZsYXNoX2luZm9baV0uc2l6ZTsKKwl9CisKKyNpZiBDRkdfTU9OSVRPUl9CQVNFID49IENGR19GTEFTSF9CQVNFCisJLyogbW9uaXRvciBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgIENGR19NT05JVE9SX0JBU0UsCisJCSAgICAgIENGR19NT05JVE9SX0JBU0UrQ0ZHX01PTklUT1JfTEVOLTEsCisJCSAgICAgIGZsYXNoX2dldF9pbmZvKENGR19NT05JVE9SX0JBU0UpKTsKKyNlbmRpZgorCisjaWZkZWYJQ0ZHX0VOVl9JU19JTl9GTEFTSAorCS8qIEVOViBwcm90ZWN0aW9uIE9OIGJ5IGRlZmF1bHQgKi8KKwlmbGFzaF9wcm90ZWN0KEZMQUdfUFJPVEVDVF9TRVQsCisJCSAgICAgIENGR19FTlZfQUREUiwKKwkJICAgICAgQ0ZHX0VOVl9BRERSK0NGR19FTlZfU0laRS0xLAorCQkgICAgICBmbGFzaF9nZXRfaW5mbyhDRkdfRU5WX0FERFIpKTsKKyNlbmRpZgorCisKKwlyZXR1cm4gc2l6ZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgdm9pZCBmbGFzaF9yZXNldChmbGFzaF9pbmZvX3QgKmluZm8pCit7CisJRlBXViAqYmFzZSA9IChGUFdWICopKGluZm8tPnN0YXJ0WzBdKTsKKworCS8qIFB1dCBGTEFTSCBiYWNrIGluIHJlYWQgbW9kZSAqLworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMKQorCQkqYmFzZSA9IChGUFcpMHgwMEZGMDBGRjsJLyogSW50ZWwgUmVhZCBNb2RlICovCisJZWxzZSBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9BTUQpCisJCSpiYXNlID0gKEZQVykweDAwRjAwMEYwOwkvKiBBTUQgUmVhZCBNb2RlICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIHZvaWQgZmxhc2hfZ2V0X29mZnNldHMgKHVsb25nIGJhc2UsIGZsYXNoX2luZm9fdCAqaW5mbykKK3sKKwlpbnQgaTsKKworCS8qIHNldCB1cCBzZWN0b3Igc3RhcnQgYWRkcmVzcyB0YWJsZSAqLworCWlmICgoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgPT0gRkxBU0hfTUFOX0lOVEVMCisJICAgICYmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSkgeworCQlpbnQgYm9vdHNlY3Rfc2l6ZTsJLyogbnVtYmVyIG9mIGJ5dGVzL2Jvb3Qgc2VjdG9yCSovCisJCWludCBzZWN0X3NpemU7CQkvKiBudW1iZXIgb2YgYnl0ZXMvcmVndWxhciBzZWN0b3IgKi8KKworCQlib290c2VjdF9zaXplID0gMHgwMDAwMjAwMCAqIChzaXplb2YoRlBXKS8yKTsKKwkJc2VjdF9zaXplID0gICAgIDB4MDAwMTAwMDAgKiAoc2l6ZW9mKEZQVykvMik7CisKKwkJLyogc2V0IHNlY3RvciBvZmZzZXRzIGZvciBib3R0b20gYm9vdCBibG9jayB0eXBlCSovCisJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKKwkJCWluZm8tPnN0YXJ0W2ldID0gYmFzZSArIChpICogYm9vdHNlY3Rfc2l6ZSk7CisJCX0KKwkJZm9yIChpID0gODsgaSA8IGluZm8tPnNlY3Rvcl9jb3VudDsgaSsrKSB7CisJCQlpbmZvLT5zdGFydFtpXSA9IGJhc2UgKyAoKGkgLSA3KSAqIHNlY3Rfc2l6ZSk7CisJCX0KKwl9CisJZWxzZSBpZiAoKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spID09IEZMQVNIX01BTl9BTUQKKwkJICYmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSA9PSBGTEFTSF9BTTY0MFUpIHsKKworCQlpbnQgc2VjdF9zaXplOwkJLyogbnVtYmVyIG9mIGJ5dGVzL3NlY3RvciAqLworCisJCXNlY3Rfc2l6ZSA9IDB4MDAwMTAwMDAgKiAoc2l6ZW9mKEZQVykvMik7CisKKwkJLyogc2V0IHVwIHNlY3RvciBzdGFydCBhZGRyZXNzIHRhYmxlICh1bmlmb3JtIHNlY3RvciB0eXBlKSAqLworCQlmb3IoIGkgPSAwOyBpIDwgaW5mby0+c2VjdG9yX2NvdW50OyBpKysgKQorCQkJaW5mby0+c3RhcnRbaV0gPSBiYXNlICsgKGkgKiBzZWN0X3NpemUpOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBmbGFzaF9pbmZvX3QgKmZsYXNoX2dldF9pbmZvKHVsb25nIGJhc2UpCit7CisJaW50IGk7CisJZmxhc2hfaW5mb190ICogaW5mbzsKKwkKKwlmb3IgKGkgPSAwOyBpIDwgQ0ZHX01BWF9GTEFTSF9CQU5LUzsgaSArKykgeworCQlpbmZvID0gJiBmbGFzaF9pbmZvW2ldOworCQlpZiAoaW5mby0+c3RhcnRbMF0gPD0gYmFzZSAmJiBiYXNlIDwgaW5mby0+c3RhcnRbMF0gKyBpbmZvLT5zaXplKQorCQkJYnJlYWs7CisJfQorCQorCXJldHVybiBpID09IENGR19NQVhfRkxBU0hfQkFOS1MgPyAwIDogaW5mbzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3ZvaWQgZmxhc2hfcHJpbnRfaW5mbyAoZmxhc2hfaW5mb190ICppbmZvKQoreworCWludCBpOworCXVjaGFyICpib290dHlwZTsKKwl1Y2hhciAqYm9vdGxldHRlcjsKKwl1Y2hhciAqZm10OworCXVjaGFyIGJvdGJvb3RsZXR0ZXJbXSA9ICJCIjsKKwl1Y2hhciB0b3Bib290bGV0dGVyW10gPSAiVCI7CisJdWNoYXIgYm90Ym9vdHR5cGVbXSA9ICJib3R0b20gYm9vdCBzZWN0b3IiOworCXVjaGFyIHRvcGJvb3R0eXBlW10gPSAidG9wIGJvb3Qgc2VjdG9yIjsKKworCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoaW5mby0+Zmxhc2hfaWQgJiBGTEFTSF9WRU5ETUFTSykgeworCWNhc2UgRkxBU0hfTUFOX0FNRDoJcHJpbnRmICgiQU1EICIpOwkJYnJlYWs7CisJY2FzZSBGTEFTSF9NQU5fQk06CXByaW50ZiAoIkJSSUdIVCBNSUNSTyAiKTsJYnJlYWs7CisJY2FzZSBGTEFTSF9NQU5fRlVKOglwcmludGYgKCJGVUpJVFNVICIpOwkJYnJlYWs7CisJY2FzZSBGTEFTSF9NQU5fU1NUOglwcmludGYgKCJTU1QgIik7CQlicmVhazsKKwljYXNlIEZMQVNIX01BTl9TVE06CXByaW50ZiAoIlNUTSAiKTsJCWJyZWFrOworCWNhc2UgRkxBU0hfTUFOX0lOVEVMOglwcmludGYgKCJJTlRFTCAiKTsJCWJyZWFrOworCWRlZmF1bHQ6CQlwcmludGYgKCJVbmtub3duIFZlbmRvciAiKTsJYnJlYWs7CisJfQorCisJLyogY2hlY2sgZm9yIHRvcCBvciBib3R0b20gYm9vdCwgaWYgaXQgYXBwbGllcyAqLworCWlmIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX0JUWVBFKSB7CisJCWJvb3R0eXBlID0gYm90Ym9vdHR5cGU7CisJCWJvb3RsZXR0ZXIgPSBib3Rib290bGV0dGVyOworCX0KKwllbHNlIHsKKwkJYm9vdHR5cGUgPSB0b3Bib290dHlwZTsKKwkJYm9vdGxldHRlciA9IHRvcGJvb3RsZXR0ZXI7CisJfQorCisJc3dpdGNoIChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1RZUEVNQVNLKSB7CisJY2FzZSBGTEFTSF9BTTY0MFU6CisJCWZtdCA9ICIyOUxWNjQxRCAoNjQgTWJpdCwgdW5pZm9ybSBzZWN0b3JzKVxuIjsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgRkxBU0hfMjhGODAwQzNCOgorICAgICAgICBjYXNlIEZMQVNIXzI4RjgwMEMzVDoKKwkJZm10ID0gIjI4RjgwMEMzJXMgKDggTWJpdCwgJXMpXG4iOworCQlicmVhazsKKwljYXNlIEZMQVNIX0lOVEVMODAwQjoKKwljYXNlIEZMQVNIX0lOVEVMODAwVDoKKwkJZm10ID0gIjI4RjgwMEIzJXMgKDggTWJpdCwgJXMpXG4iOworCQlicmVhazsKKyAgICAgICAgY2FzZSBGTEFTSF8yOEYxNjBDM0I6CisgICAgICAgIGNhc2UgRkxBU0hfMjhGMTYwQzNUOgorCQlmbXQgPSAiMjhGMTYwQzMlcyAoMTYgTWJpdCwgJXMpXG4iOworCQlicmVhazsKKwljYXNlIEZMQVNIX0lOVEVMMTYwQjoKKwljYXNlIEZMQVNIX0lOVEVMMTYwVDoKKwkJZm10ID0gIjI4RjE2MEIzJXMgKDE2IE1iaXQsICVzKVxuIjsKKwkJYnJlYWs7CisgICAgICAgIGNhc2UgRkxBU0hfMjhGMzIwQzNCOgorICAgICAgICBjYXNlIEZMQVNIXzI4RjMyMEMzVDoKKwkJZm10ID0gIjI4RjMyMEMzJXMgKDMyIE1iaXQsICVzKVxuIjsKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9JTlRFTDMyMEI6CisJY2FzZSBGTEFTSF9JTlRFTDMyMFQ6CisJCWZtdCA9ICIyOEYzMjBCMyVzICgzMiBNYml0LCAlcylcbiI7CisJCWJyZWFrOworICAgICAgICBjYXNlIEZMQVNIXzI4RjY0MEMzQjoKKyAgICAgICAgY2FzZSBGTEFTSF8yOEY2NDBDM1Q6CisJCWZtdCA9ICIyOEY2NDBDMyVzICg2NCBNYml0LCAlcylcbiI7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfSU5URUw2NDBCOgorCWNhc2UgRkxBU0hfSU5URUw2NDBUOgorCQlmbXQgPSAiMjhGNjQwQjMlcyAoNjQgTWJpdCwgJXMpXG4iOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbXQgPSAiVW5rbm93biBDaGlwIFR5cGVcbiI7CisJCWJyZWFrOworCX0KKworCXByaW50ZiAoZm10LCBib290bGV0dGVyLCBib290dHlwZSk7CisKKwlwcmludGYgKCIgIFNpemU6ICVsZCBNQiBpbiAlZCBTZWN0b3JzXG4iLAorCQlpbmZvLT5zaXplID4+IDIwLAorCQlpbmZvLT5zZWN0b3JfY291bnQpOworCisJcHJpbnRmICgiICBTZWN0b3IgU3RhcnQgQWRkcmVzc2VzOiIpOworCisJZm9yIChpPTA7IGk8aW5mby0+c2VjdG9yX2NvdW50OyArK2kpIHsKKwkJaWYgKChpICUgNSkgPT0gMCkgeworCQkJcHJpbnRmICgiXG4gICAiKTsKKwkJfQorCisJCXByaW50ZiAoIiAlMDhsWCVzIiwgaW5mby0+c3RhcnRbaV0sCisJCQlpbmZvLT5wcm90ZWN0W2ldID8gIiAoUk8pIiA6ICIgICAgICIpOworCX0KKworCXByaW50ZiAoIlxuIik7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBjb2RlIGNhbm5vdCBiZSBydW4gZnJvbSBGTEFTSCEKKyAqLworCit1bG9uZyBmbGFzaF9nZXRfc2l6ZSAoRlBXViAqYWRkciwgZmxhc2hfaW5mb190ICppbmZvKQoreworCS8qIFdyaXRlIGF1dG8gc2VsZWN0IGNvbW1hbmQ6IHJlYWQgTWFudWZhY3R1cmVyIElEICovCisKKwkvKiBXcml0ZSBhdXRvIHNlbGVjdCBjb21tYW5kIHNlcXVlbmNlIGFuZCB0ZXN0IEZMQVNIIGFuc3dlciAqLworCWFkZHJbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMEFBMDBBQTsJLyogZm9yIEFNRCwgSW50ZWwgaWdub3JlcyB0aGlzICovCisJYWRkcltGTEFTSF9DWUNMRTJdID0gKEZQVykweDAwNTUwMDU1OwkvKiBmb3IgQU1ELCBJbnRlbCBpZ25vcmVzIHRoaXMgKi8KKwlhZGRyW0ZMQVNIX0NZQ0xFMV0gPSAoRlBXKTB4MDA5MDAwOTA7CS8qIHNlbGVjdHMgSW50ZWwgb3IgQU1EICovCisKKwkvKiBUaGUgbWFudWZhY3R1cmVyIGNvZGVzIGFyZSBvbmx5IDEgYnl0ZSwgc28ganVzdCB1c2UgMSBieXRlLgorCSAqIFRoaXMgd29ya3MgZm9yIGFueSBidXMgd2lkdGggYW5kIGFueSBGTEFTSCBkZXZpY2Ugd2lkdGguCisJICovCisJc3dpdGNoIChhZGRyWzFdICYgMHhmZikgeworCisJY2FzZSAodWNoYXIpQU1EX01BTlVGQUNUOgorCQlpbmZvLT5mbGFzaF9pZCA9IEZMQVNIX01BTl9BTUQ7CisJCWJyZWFrOworCisJY2FzZSAodWNoYXIpSU5URUxfTUFOVUZBQ1Q6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfTUFOX0lOVEVMOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKKwkJaW5mby0+c2l6ZSA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIENoZWNrIDE2IGJpdHMgb3IgMzIgYml0cyBvZiBJRCBzbyB3b3JrIG9uIDMyIG9yIDE2IGJpdCBidXMuICovCisJaWYgKGluZm8tPmZsYXNoX2lkICE9IEZMQVNIX1VOS05PV04pIHN3aXRjaCAoYWRkclswXSkgeworCisJY2FzZSAoRlBXKUFNRF9JRF9MVjY0MFU6CS8qIDI5TFY2NDAgYW5kIDI5TFY2NDEgaGF2ZSBzYW1lIElEICovCisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0FNNjQwVTsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTI4OworCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKKwkJYnJlYWs7CQkJCS8qID0+IDggb3IgMTYgTUIJKi8KKworCWNhc2UgKEZQVylJTlRFTF9JRF8yOEY4MDBDM0I6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjgwMEMzQjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMjM7CisJCWluZm8tPnNpemUgPSAweDAwMTAwMDAwICogKHNpemVvZihGUFcpLzIpOworCQlicmVhazsJCQkJLyogPT4gMSBvciAyIE1CCQkqLworCisJY2FzZSAoRlBXKUlOVEVMX0lEXzI4RjgwMEIzQjoKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfSU5URUw4MDBCOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSAyMzsKKwkJaW5mby0+c2l6ZSA9IDB4MDAxMDAwMDAgKiAoc2l6ZW9mKEZQVykvMik7CisJCWJyZWFrOwkJCQkvKiA9PiAxIG9yIDIgTUIJCSovCisKKwljYXNlIChGUFcpSU5URUxfSURfMjhGMTYwQzNCOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF8yOEYxNjBDM0I7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDM5OworCQlpbmZvLT5zaXplID0gMHgwMDIwMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKKwkJYnJlYWs7CQkJCS8qID0+IDIgb3IgNCBNQgkJKi8KKworCWNhc2UgKEZQVylJTlRFTF9JRF8yOEYxNjBCM0I6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0lOVEVMMTYwQjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMzk7CisJCWluZm8tPnNpemUgPSAweDAwMjAwMDAwICogKHNpemVvZihGUFcpLzIpOworCQlicmVhazsJCQkJLyogPT4gMiBvciA0IE1CCQkqLworCisJY2FzZSAoRlBXKUlOVEVMX0lEXzI4RjMyMEMzQjoKKwkJaW5mby0+Zmxhc2hfaWQgKz0gRkxBU0hfMjhGMzIwQzNCOworCQlpbmZvLT5zZWN0b3JfY291bnQgPSA3MTsKKwkJaW5mby0+c2l6ZSA9IDB4MDA0MDAwMDAgKiAoc2l6ZW9mKEZQVykvMik7CisJCWJyZWFrOwkJCQkvKiA9PiA0IG9yIDggTUIJCSovCisKKwljYXNlIChGUFcpSU5URUxfSURfMjhGMzIwQjNCOgorCQlpbmZvLT5mbGFzaF9pZCArPSBGTEFTSF9JTlRFTDMyMEI7CisJCWluZm8tPnNlY3Rvcl9jb3VudCA9IDcxOworCQlpbmZvLT5zaXplID0gMHgwMDQwMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKKwkJYnJlYWs7CQkJCS8qID0+IDQgb3IgOCBNQgkJKi8KKworCWNhc2UgKEZQVylJTlRFTF9JRF8yOEY2NDBDM0I6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIXzI4RjY0MEMzQjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTM1OworCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKKwkJYnJlYWs7CQkJCS8qID0+IDggb3IgMTYgTUIJKi8KKworCWNhc2UgKEZQVylJTlRFTF9JRF8yOEY2NDBCM0I6CisJCWluZm8tPmZsYXNoX2lkICs9IEZMQVNIX0lOVEVMNjQwQjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMTM1OworCQlpbmZvLT5zaXplID0gMHgwMDgwMDAwMCAqIChzaXplb2YoRlBXKS8yKTsKKwkJYnJlYWs7CQkJCS8qID0+IDggb3IgMTYgTUIJKi8KKworCWRlZmF1bHQ6CisJCWluZm8tPmZsYXNoX2lkID0gRkxBU0hfVU5LTk9XTjsKKwkJaW5mby0+c2VjdG9yX2NvdW50ID0gMDsKKwkJaW5mby0+c2l6ZSA9IDA7CisJCXJldHVybiAoMCk7CQkJLyogPT4gbm8gb3IgdW5rbm93biBmbGFzaCAqLworCX0KKworCWZsYXNoX2dldF9vZmZzZXRzKCh1bG9uZylhZGRyLCBpbmZvKTsKKworCS8qIFB1dCBGTEFTSCBiYWNrIGluIHJlYWQgbW9kZSAqLworCWZsYXNoX3Jlc2V0KGluZm8pOworCisJcmV0dXJuIChpbmZvLT5zaXplKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2ludAlmbGFzaF9lcmFzZSAoZmxhc2hfaW5mb190ICppbmZvLCBpbnQgc19maXJzdCwgaW50IHNfbGFzdCkKK3sKKwlGUFdWICphZGRyOworCWludCBmbGFnLCBwcm90LCBzZWN0OworCWludCBpbnRlbCA9IChpbmZvLT5mbGFzaF9pZCAmIEZMQVNIX1ZFTkRNQVNLKSA9PSBGTEFTSF9NQU5fSU5URUw7CisJdWxvbmcgc3RhcnQsIG5vdywgbGFzdDsKKwlpbnQgcmNvZGUgPSAwOworCisJaWYgKChzX2ZpcnN0IDwgMCkgfHwgKHNfZmlyc3QgPiBzX2xhc3QpKSB7CisJCWlmIChpbmZvLT5mbGFzaF9pZCA9PSBGTEFTSF9VTktOT1dOKSB7CisJCQlwcmludGYgKCItIG1pc3NpbmdcbiIpOworCQl9IGVsc2UgeworCQkJcHJpbnRmICgiLSBubyBzZWN0b3JzIHRvIGVyYXNlXG4iKTsKKwkJfQorCQlyZXR1cm4gMTsKKwl9CisKKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVFlQRU1BU0spIHsKKwljYXNlIEZMQVNIX0lOVEVMODAwQjoKKwljYXNlIEZMQVNIX0lOVEVMMTYwQjoKKwljYXNlIEZMQVNIX0lOVEVMMzIwQjoKKwljYXNlIEZMQVNIX0lOVEVMNjQwQjoKKwljYXNlIEZMQVNIXzI4RjgwMEMzQjoKKwljYXNlIEZMQVNIXzI4RjE2MEMzQjoKKwljYXNlIEZMQVNIXzI4RjMyMEMzQjoKKwljYXNlIEZMQVNIXzI4RjY0MEMzQjoKKwljYXNlIEZMQVNIX0FNNjQwVToKKwkJYnJlYWs7CisJY2FzZSBGTEFTSF9VTktOT1dOOgorCWRlZmF1bHQ6CisJCXByaW50ZiAoIkNhbid0IGVyYXNlIHVua25vd24gZmxhc2ggdHlwZSAlMDhseCAtIGFib3J0ZWRcbiIsCisJCQlpbmZvLT5mbGFzaF9pZCk7CisJCXJldHVybiAxOworCX0KKworCXByb3QgPSAwOworCWZvciAoc2VjdD1zX2ZpcnN0OyBzZWN0PD1zX2xhc3Q7ICsrc2VjdCkgeworCQlpZiAoaW5mby0+cHJvdGVjdFtzZWN0XSkgeworCQkJcHJvdCsrOworCQl9CisJfQorCisJaWYgKHByb3QpIHsKKwkJcHJpbnRmICgiLSBXYXJuaW5nOiAlZCBwcm90ZWN0ZWQgc2VjdG9ycyB3aWxsIG5vdCBiZSBlcmFzZWQhXG4iLAorCQkJcHJvdCk7CisJfSBlbHNlIHsKKwkJcHJpbnRmICgiXG4iKTsKKwl9CisKKwlsYXN0ICA9IGdldF90aW1lcigwKTsKKworCS8qIFN0YXJ0IGVyYXNlIG9uIHVucHJvdGVjdGVkIHNlY3RvcnMgKi8KKwlmb3IgKHNlY3QgPSBzX2ZpcnN0OyBzZWN0PD1zX2xhc3QgJiYgcmNvZGUgPT0gMDsgc2VjdCsrKSB7CisKKwkJaWYgKGluZm8tPnByb3RlY3Rbc2VjdF0gIT0gMCkJLyogcHJvdGVjdGVkLCBza2lwIGl0ICovCisJCQljb250aW51ZTsKKworCQkvKiBEaXNhYmxlIGludGVycnVwdHMgd2hpY2ggbWlnaHQgY2F1c2UgYSB0aW1lb3V0IGhlcmUgKi8KKwkJZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisJCWFkZHIgPSAoRlBXViAqKShpbmZvLT5zdGFydFtzZWN0XSk7CisJCWlmIChpbnRlbCkgeworCQkJKmFkZHIgPSAoRlBXKTB4MDA1MDAwNTA7IC8qIGNsZWFyIHN0YXR1cyByZWdpc3RlciAqLworCQkJKmFkZHIgPSAoRlBXKTB4MDAyMDAwMjA7IC8qIGVyYXNlIHNldHVwICovCisJCQkqYWRkciA9IChGUFcpMHgwMEQwMDBEMDsgLyogZXJhc2UgY29uZmlybSAqLworCQl9CisJCWVsc2UgeworCQkJLyogbXVzdCBiZSBBTUQgc3R5bGUgaWYgbm90IEludGVsICovCisJCQlGUFdWICpiYXNlOwkJLyogZmlyc3QgYWRkcmVzcyBpbiBiYW5rICovCisKKwkJCWJhc2UgPSAoRlBXViAqKShpbmZvLT5zdGFydFswXSk7CisJCQliYXNlW0ZMQVNIX0NZQ0xFMV0gPSAoRlBXKTB4MDBBQTAwQUE7CS8qIHVubG9jayAqLworCQkJYmFzZVtGTEFTSF9DWUNMRTJdID0gKEZQVykweDAwNTUwMDU1OwkvKiB1bmxvY2sgKi8KKwkJCWJhc2VbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMDgwMDA4MDsJLyogZXJhc2UgbW9kZSAqLworCQkJYmFzZVtGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwQUEwMEFBOwkvKiB1bmxvY2sgKi8KKwkJCWJhc2VbRkxBU0hfQ1lDTEUyXSA9IChGUFcpMHgwMDU1MDA1NTsJLyogdW5sb2NrICovCisJCQkqYWRkciA9IChGUFcpMHgwMDMwMDAzMDsJLyogZXJhc2Ugc2VjdG9yICovCisJCX0KKworCQkvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKwkJaWYgKGZsYWcpCisJCQllbmFibGVfaW50ZXJydXB0cygpOworCisJCXN0YXJ0ID0gZ2V0X3RpbWVyKDApOworCisJCS8qIHdhaXQgYXQgbGVhc3QgNTB1cyBmb3IgQU1ELCA4MHVzIGZvciBJbnRlbC4KKwkJICogTGV0J3Mgd2FpdCAxIG1zLgorCQkgKi8KKwkJdWRlbGF5ICgxMDAwKTsKKworCQl3aGlsZSAoKCphZGRyICYgKEZQVykweDAwODAwMDgwKSAhPSAoRlBXKTB4MDA4MDAwODApIHsKKwkJCWlmICgobm93ID0gZ2V0X3RpbWVyKHN0YXJ0KSkgPiBDRkdfRkxBU0hfRVJBU0VfVE9VVCkgeworCQkJCXByaW50ZiAoIlRpbWVvdXRcbiIpOworCisJCQkJaWYgKGludGVsKSB7CisJCQkJCS8qIHN1c3BlbmQgZXJhc2UJKi8KKwkJCQkJKmFkZHIgPSAoRlBXKTB4MDBCMDAwQjA7CisJCQkJfQorCisJCQkJZmxhc2hfcmVzZXQoaW5mbyk7CS8qIHJlc2V0IHRvIHJlYWQgbW9kZSAqLworCQkJCXJjb2RlID0gMTsJCS8qIGZhaWxlZCAqLworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBzaG93IHRoYXQgd2UncmUgd2FpdGluZyAqLworCQkJaWYgKChnZXRfdGltZXIobGFzdCkpID4gQ0ZHX0haKSB7LyogZXZlcnkgc2Vjb25kICovCisJCQkJcHV0YyAoJy4nKTsKKwkJCQlsYXN0ID0gZ2V0X3RpbWVyKDApOworCQkJfQorCQl9CisKKwkJLyogc2hvdyB0aGF0IHdlJ3JlIHdhaXRpbmcgKi8KKwkJaWYgKChnZXRfdGltZXIobGFzdCkpID4gQ0ZHX0haKSB7CS8qIGV2ZXJ5IHNlY29uZCAqLworCQkJcHV0YyAoJy4nKTsKKwkJCWxhc3QgPSBnZXRfdGltZXIoMCk7CisJCX0KKworCQlmbGFzaF9yZXNldChpbmZvKTsJLyogcmVzZXQgdG8gcmVhZCBtb2RlCSovCisJfQorCisJcHJpbnRmICgiIGRvbmVcbiIpOworCXJldHVybiByY29kZTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29weSBtZW1vcnkgdG8gZmxhc2gsIHJldHVybnM6CisgKiAwIC0gT0sKKyAqIDEgLSB3cml0ZSB0aW1lb3V0CisgKiAyIC0gRmxhc2ggbm90IGVyYXNlZAorICovCitpbnQgd3JpdGVfYnVmZiAoZmxhc2hfaW5mb190ICppbmZvLCB1Y2hhciAqc3JjLCB1bG9uZyBhZGRyLCB1bG9uZyBjbnQpCit7CisgICAgRlBXIGRhdGEgPSAwOyAvKiAxNiBvciAzMiBiaXQgd29yZCwgbWF0Y2hlcyBmbGFzaCBidXMgd2lkdGggb24gTVBDOFhYICovCisgICAgaW50IGJ5dGVzOwkgIC8qIG51bWJlciBvZiBieXRlcyB0byBwcm9ncmFtIGluIGN1cnJlbnQgd29yZAkJKi8KKyAgICBpbnQgbGVmdDsJICAvKiBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBwcm9ncmFtCQkJKi8KKyAgICBpbnQgaSwgcmVzOworCisgICAgZm9yIChsZWZ0ID0gY250LCByZXMgPSAwOworCSBsZWZ0ID4gMCAmJiByZXMgPT0gMDsKKwkgYWRkciArPSBzaXplb2YoZGF0YSksIGxlZnQgLT0gc2l6ZW9mKGRhdGEpIC0gYnl0ZXMpIHsKKworICAgICAgICBieXRlcyA9IGFkZHIgJiAoc2l6ZW9mKGRhdGEpIC0gMSk7CisgICAgICAgIGFkZHIgJj0gfihzaXplb2YoZGF0YSkgLSAxKTsKKworCS8qIGNvbWJpbmUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkYXRhIHNvIGNhbiBwcm9ncmFtCisJICogYW4gZW50aXJlIHdvcmQgb2YgMTYgb3IgMzIgYml0cworCSAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRhdGEpOyBpKyspIHsKKyAgICAgICAgICAgIGRhdGEgPDw9IDg7CisgICAgICAgICAgICBpZiAoaSA8IGJ5dGVzIHx8IGkgLSBieXRlcyA+PSBsZWZ0ICkKKwkJZGF0YSArPSAqKCh1Y2hhciAqKWFkZHIgKyBpKTsKKwkgICAgZWxzZQorCQlkYXRhICs9ICpzcmMrKzsKKwl9CisKKwkvKiB3cml0ZSBvbmUgd29yZCB0byB0aGUgZmxhc2ggKi8KKwlzd2l0Y2ggKGluZm8tPmZsYXNoX2lkICYgRkxBU0hfVkVORE1BU0spIHsKKwljYXNlIEZMQVNIX01BTl9BTUQ6CisJCXJlcyA9IHdyaXRlX3dvcmRfYW1kKGluZm8sIChGUFdWICopYWRkciwgZGF0YSk7CisJCWJyZWFrOworCWNhc2UgRkxBU0hfTUFOX0lOVEVMOgorCQlyZXMgPSB3cml0ZV93b3JkX2ludGVsKGluZm8sIChGUFdWICopYWRkciwgZGF0YSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHVua25vd24gZmxhc2ggdHlwZSwgZXJyb3IhICovCisJCXByaW50ZiAoIm1pc3Npbmcgb3IgdW5rbm93biBGTEFTSCB0eXBlXG4iKTsKKwkJcmVzID0gMTsJLyogbm90IHJlYWxseSBhIHRpbWVvdXQsIGJ1dCBnaXZlcyBlcnJvciAqLworCQlicmVhazsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2ggZm9yIEFNRCBGTEFTSAorICogQSB3b3JkIGlzIDE2IG9yIDMyIGJpdHMsIHdoaWNoZXZlciB0aGUgYnVzIHdpZHRoIG9mIHRoZSBmbGFzaCBiYW5rCisgKiAobm90IGFuIGluZGl2aWR1YWwgY2hpcCkgaXMuCisgKgorICogcmV0dXJuczoKKyAqIDAgLSBPSworICogMSAtIHdyaXRlIHRpbWVvdXQKKyAqIDIgLSBGbGFzaCBub3QgZXJhc2VkCisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfd29yZF9hbWQgKGZsYXNoX2luZm9fdCAqaW5mbywgRlBXViAqZGVzdCwgRlBXIGRhdGEpCit7CisgICAgdWxvbmcgc3RhcnQ7CisgICAgaW50IGZsYWc7CisgICAgaW50IHJlcyA9IDA7CS8qIHJlc3VsdCwgYXNzdW1lIHN1Y2Nlc3MJKi8KKyAgICBGUFdWICpiYXNlOwkJLyogZmlyc3QgYWRkcmVzcyBpbiBmbGFzaCBiYW5rCSovCisKKyAgICAvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKyAgICBpZiAoKCpkZXN0ICYgZGF0YSkgIT0gZGF0YSkgeworCXJldHVybiAoMik7CisgICAgfQorCisKKyAgICBiYXNlID0gKEZQV1YgKikoaW5mby0+c3RhcnRbMF0pOworCisgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisgICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisgICAgYmFzZVtGTEFTSF9DWUNMRTFdID0gKEZQVykweDAwQUEwMEFBOwkvKiB1bmxvY2sgKi8KKyAgICBiYXNlW0ZMQVNIX0NZQ0xFMl0gPSAoRlBXKTB4MDA1NTAwNTU7CS8qIHVubG9jayAqLworICAgIGJhc2VbRkxBU0hfQ1lDTEUxXSA9IChGUFcpMHgwMEEwMDBBMDsJLyogc2VsZWN0cyBwcm9ncmFtIG1vZGUgKi8KKworICAgICpkZXN0ID0gZGF0YTsJCS8qIHN0YXJ0IHByb2dyYW1taW5nIHRoZSBkYXRhCSovCisKKyAgICAvKiByZS1lbmFibGUgaW50ZXJydXB0cyBpZiBuZWNlc3NhcnkgKi8KKyAgICBpZiAoZmxhZykKKwllbmFibGVfaW50ZXJydXB0cygpOworCisgICAgc3RhcnQgPSBnZXRfdGltZXIgKDApOworCisgICAgLyogZGF0YSBwb2xsaW5nIGZvciBENyAqLworICAgIHdoaWxlIChyZXMgPT0gMCAmJiAoKmRlc3QgJiAoRlBXKTB4MDA4MDAwODApICE9IChkYXRhICYgKEZQVykweDAwODAwMDgwKSkgeworCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkgICAgKmRlc3QgPSAoRlBXKTB4MDBGMDAwRjA7CS8qIHJlc2V0IGJhbmsgKi8KKwkgICAgcmVzID0gMTsKKwl9CisgICAgfQorCisgICAgcmV0dXJuIChyZXMpOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBXcml0ZSBhIHdvcmQgdG8gRmxhc2ggZm9yIEludGVsIEZMQVNICisgKiBBIHdvcmQgaXMgMTYgb3IgMzIgYml0cywgd2hpY2hldmVyIHRoZSBidXMgd2lkdGggb2YgdGhlIGZsYXNoIGJhbmsKKyAqIChub3QgYW4gaW5kaXZpZHVhbCBjaGlwKSBpcy4KKyAqCisgKiByZXR1cm5zOgorICogMCAtIE9LCisgKiAxIC0gd3JpdGUgdGltZW91dAorICogMiAtIEZsYXNoIG5vdCBlcmFzZWQKKyAqLworc3RhdGljIGludCB3cml0ZV93b3JkX2ludGVsIChmbGFzaF9pbmZvX3QgKmluZm8sIEZQV1YgKmRlc3QsIEZQVyBkYXRhKQoreworICAgIHVsb25nIHN0YXJ0OworICAgIGludCBmbGFnOworICAgIGludCByZXMgPSAwOwkvKiByZXN1bHQsIGFzc3VtZSBzdWNjZXNzCSovCisKKyAgICAvKiBDaGVjayBpZiBGbGFzaCBpcyAoc3VmZmljaWVudGx5KSBlcmFzZWQgKi8KKyAgICBpZiAoKCpkZXN0ICYgZGF0YSkgIT0gZGF0YSkgeworCXJldHVybiAoMik7CisgICAgfQorCisgICAgLyogRGlzYWJsZSBpbnRlcnJ1cHRzIHdoaWNoIG1pZ2h0IGNhdXNlIGEgdGltZW91dCBoZXJlICovCisgICAgZmxhZyA9IGRpc2FibGVfaW50ZXJydXB0cygpOworCisgICAgKmRlc3QgPSAoRlBXKTB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlcgkqLworICAgICpkZXN0ID0gKEZQVykweDAwRkYwMEZGOwkvKiBtYWtlIHN1cmUgaW4gcmVhZCBtb2RlCSovCisgICAgKmRlc3QgPSAoRlBXKTB4MDA0MDAwNDA7CS8qIHByb2dyYW0gc2V0dXAJCSovCisKKyAgICAqZGVzdCA9IGRhdGE7CQkvKiBzdGFydCBwcm9ncmFtbWluZyB0aGUgZGF0YQkqLworCisgICAgLyogcmUtZW5hYmxlIGludGVycnVwdHMgaWYgbmVjZXNzYXJ5ICovCisgICAgaWYgKGZsYWcpCisJZW5hYmxlX2ludGVycnVwdHMoKTsKKworICAgIHN0YXJ0ID0gZ2V0X3RpbWVyICgwKTsKKworICAgIHdoaWxlIChyZXMgPT0gMCAmJiAoKmRlc3QgJiAoRlBXKTB4MDA4MDAwODApICE9IChGUFcpMHgwMDgwMDA4MCkgeworCWlmIChnZXRfdGltZXIoc3RhcnQpID4gQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQpIHsKKwkgICAgKmRlc3QgPSAoRlBXKTB4MDBCMDAwQjA7CS8qIFN1c3BlbmQgcHJvZ3JhbQkqLworCSAgICByZXMgPSAxOworCX0KKyAgICB9CisKKyAgICBpZiAocmVzID09IDAgJiYgKCpkZXN0ICYgKEZQVykweDAwMTAwMDEwKSkKKwlyZXMgPSAxOwkvKiB3cml0ZSBmYWlsZWQsIHRpbWUgb3V0IGVycm9yIGlzIGNsb3NlIGVub3VnaAkqLworCisgICAgKmRlc3QgPSAoRlBXKTB4MDA1MDAwNTA7CS8qIGNsZWFyIHN0YXR1cyByZWdpc3RlcgkqLworICAgICpkZXN0ID0gKEZQVykweDAwRkYwMEZGOwkvKiBtYWtlIHN1cmUgaW4gcmVhZCBtb2RlCSovCisKKyAgICByZXR1cm4gKHJlcyk7Cit9CmRpZmYgLS1naXQgYS9ib2FyZC9pbmNhaXAvaW5jYWlwLmMgYi9ib2FyZC9pbmNhaXAvaW5jYWlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJmMWMyMQotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2luY2FpcC9pbmNhaXAuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKyNpbmNsdWRlIDxhc20vaW5jYS1pcC5oPgorCisKK3N0YXRpYyB1bG9uZyBtYXhfc2RyYW1fc2l6ZSh2b2lkKQoreworCS8qIFRoZSBvbmx5IHN1cHBvcnRlZCBTRFJBTSBkYXRhIHdpZHRoIGlzIDE2Yml0LgorCSAqLworI2RlZmluZSBDRkdfRFcJMgorCisJLyogVGhlIG9ubHkgc3VwcG9ydGVkIG51bWJlciBvZiBTRFJBTSBiYW5rcyBpcyA0LgorCSAqLworI2RlZmluZSBDRkdfTkIJNAorCisJdWxvbmcgY2ZncGIwID0gKklOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwOworCWludCAgIGNvbHMgICA9IGNmZ3BiMCAmIDB4RjsKKwlpbnQgICByb3dzICAgPSAoY2ZncGIwICYgMHhGMCkgPj4gNDsKKwl1bG9uZyBzaXplICAgPSAoMSA8PCAocm93cyArIGNvbHMpKSAqIENGR19EVyAqIENGR19OQjsKKworCXJldHVybiBzaXplOworfQorCisvKgorICogQ2hlY2sgbWVtb3J5IHJhbmdlIGZvciB2YWxpZCBSQU0uIEEgc2ltcGxlIG1lbW9yeSB0ZXN0IGRldGVybWluZXMKKyAqIHRoZSBhY3R1YWxseSBhdmFpbGFibGUgUkFNIHNpemUgYmV0d2VlbiBhZGRyZXNzZXMgYGJhc2UnIGFuZAorICogYGJhc2UgKyBtYXhzaXplJy4gU29tZSAobm90IGFsbCkgaGFyZHdhcmUgZXJyb3JzIGFyZSBkZXRlY3RlZDoKKyAqIC0gc2hvcnQgYmV0d2VlbiBhZGRyZXNzIGxpbmVzCisgKiAtIHNob3J0IGJldHdlZW4gZGF0YSBsaW5lcworICovCisKK3N0YXRpYyBsb25nIGludCBkcmFtX3NpemUobG9uZyBpbnQgKmJhc2UsIGxvbmcgaW50IG1heHNpemUpCit7CisJdm9sYXRpbGUgbG9uZyBpbnQgKmFkZHI7CisJdWxvbmcgY250LCB2YWw7CisJdWxvbmcgc2F2ZVszMl07CQkJLyogdG8gbWFrZSB0ZXN0IG5vbi1kZXN0cnVjdGl2ZSAqLworCXVuc2lnbmVkIGNoYXIgaSA9IDA7CisKKwlmb3IgKGNudCA9IChtYXhzaXplIC8gc2l6ZW9mIChsb25nKSkgPj4gMTsgY250ID4gMDsgY250ID4+PSAxKSB7CisJCWFkZHIgPSBiYXNlICsgY250OwkJLyogcG9pbnRlciBhcml0aCEgKi8KKworCQlzYXZlW2krK10gPSAqYWRkcjsKKwkJKmFkZHIgPSB+Y250OworCX0KKworCS8qIHdyaXRlIDAgdG8gYmFzZSBhZGRyZXNzICovCisJYWRkciA9IGJhc2U7CisJc2F2ZVtpXSA9ICphZGRyOworCSphZGRyID0gMDsKKworCS8qIGNoZWNrIGF0IGJhc2UgYWRkcmVzcyAqLworCWlmICgodmFsID0gKmFkZHIpICE9IDApIHsKKwkJKmFkZHIgPSBzYXZlW2ldOworCQlyZXR1cm4gKDApOworCX0KKworCWZvciAoY250ID0gMTsgY250IDwgbWF4c2l6ZSAvIHNpemVvZiAobG9uZyk7IGNudCA8PD0gMSkgeworCQlhZGRyID0gYmFzZSArIGNudDsJCS8qIHBvaW50ZXIgYXJpdGghICovCisKKwkJdmFsID0gKmFkZHI7CisJCSphZGRyID0gc2F2ZVstLWldOworCisJCWlmICh2YWwgIT0gKH5jbnQpKSB7CisJCQlyZXR1cm4gKGNudCAqIHNpemVvZiAobG9uZykpOworCQl9CisJfQorCXJldHVybiAobWF4c2l6ZSk7Cit9CisKK2xvbmcgaW50IGluaXRkcmFtKGludCBib2FyZF90eXBlKQoreworCWludCAgIHJvd3MsIGNvbHMsIGJlc3RfdmFsID0gKklOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwOworCXVsb25nIHNpemUsIG1heF9zaXplICAgICAgID0gMDsKKwl1bG9uZyBvdXJfYWRkcmVzczsKKworCWFzbSB2b2xhdGlsZSAoIm1vdmUgJTAsICQyNSIgOiAiPXIiIChvdXJfYWRkcmVzcykgOik7CisKKwkJLyogQ2FuJ3QgcHJvYmUgZm9yIFJBTSBzaXplIHVubGVzcyB3ZSBhcmUgcnVubmluZyBmcm9tIEZsYXNoLgorCQkgKi8KKwlpZiAoUEhZU0FERFIob3VyX2FkZHJlc3MpIDwgUEhZU0FERFIoUEhZU19GTEFTSF8xKSkKKwl7CisJCXJldHVybiBtYXhfc2RyYW1fc2l6ZSgpOworCX0KKworCWZvciAoY29scyA9IDB4ODsgY29scyA8PSAweEM7IGNvbHMrKykKKwl7CisJCWZvciAocm93cyA9IDB4Qjsgcm93cyA8PSAweEQ7IHJvd3MrKykKKwkJeworCQkJKklOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwID0gKDB4MTQgPDwgOCkgfAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJvd3MgPDwgNCkgfCBjb2xzOworCQkJc2l6ZSA9IGRyYW1fc2l6ZSgodWxvbmcgKilDRkdfU0RSQU1fQkFTRSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfc2RyYW1fc2l6ZSgpKTsKKworCQkJaWYgKHNpemUgPiBtYXhfc2l6ZSkKKwkJCXsKKwkJCQliZXN0X3ZhbCA9ICpJTkNBX0lQX1NEUkFNX01DX0NGR1BCMDsKKwkJCQltYXhfc2l6ZSA9IHNpemU7CisJCQl9CisJCX0KKwl9CisKKwkqSU5DQV9JUF9TRFJBTV9NQ19DRkdQQjAgPSBiZXN0X3ZhbDsKKwlyZXR1cm4gbWF4X3NpemU7Cit9CisKZGlmZiAtLWdpdCBhL2JvYXJkL2luY2FpcC9tZW1zZXR1cC5TIGIvYm9hcmQvaW5jYWlwL21lbXNldHVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhZjYyNwotLS0gL2Rldi9udWxsCisrKyBiL2JvYXJkL2luY2FpcC9tZW1zZXR1cC5TCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogIE1lbW9yeSBzdWItc3lzdGVtIGluaXRpYWxpemF0aW9uIGNvZGUgZm9yIElOQ0EtSVAgZGV2ZWxvcG1lbnQgYm9hcmQuCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMwlXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgorCisKKyNkZWZpbmUgRUJVX01PRFVMX0JBU0UgICAgICAgICAgMHhCODAwMDIwMAorI2RlZmluZSBFQlVfQ0xDKHZhbHVlKSAgICAgICAgICAweDAwMDAodmFsdWUpCisjZGVmaW5lIEVCVV9DT04odmFsdWUpICAgICAgICAgIDB4MDAxMCh2YWx1ZSkKKyNkZWZpbmUgRUJVX0FERFNFTDAodmFsdWUpICAgICAgMHgwMDIwKHZhbHVlKQorI2RlZmluZSBFQlVfQUREU0VMMSh2YWx1ZSkgICAgICAweDAwMjQodmFsdWUpCisjZGVmaW5lIEVCVV9BRERTRUwyKHZhbHVlKSAgICAgIDB4MDAyOCh2YWx1ZSkKKyNkZWZpbmUgRUJVX0JVU0NPTjAodmFsdWUpICAgICAgMHgwMDYwKHZhbHVlKQorI2RlZmluZSBFQlVfQlVTQ09OMSh2YWx1ZSkgICAgICAweDAwNjQodmFsdWUpCisjZGVmaW5lIEVCVV9CVVNDT04yKHZhbHVlKSAgICAgIDB4MDA2OCh2YWx1ZSkKKworI2RlZmluZSBNQ19NT0RVTF9CQVNFICAgICAgICAgICAweEJGODAwMDAwCisjZGVmaW5lIE1DX0VSUkNBVVNFKHZhbHVlKSAgICAgIDB4MDEwMCh2YWx1ZSkKKyNkZWZpbmUgTUNfRVJSQUREUih2YWx1ZSkgICAgICAgMHgwMTA4KHZhbHVlKQorI2RlZmluZSBNQ19JT0dQKHZhbHVlKSAgICAgICAgICAweDA4MDAodmFsdWUpCisjZGVmaW5lIE1DX1NFTEZSRlNIKHZhbHVlKSAgICAgIDB4MEEwMCh2YWx1ZSkKKyNkZWZpbmUgTUNfQ1RSTEVOQSh2YWx1ZSkgICAgICAgMHgxMDAwKHZhbHVlKQorI2RlZmluZSBNQ19NUlNDT0RFKHZhbHVlKSAgICAgICAweDEwMDgodmFsdWUpCisjZGVmaW5lIE1DX0NGR0RXKHZhbHVlKSAgICAgICAgIDB4MTAxMCh2YWx1ZSkKKyNkZWZpbmUgTUNfQ0ZHUEIwKHZhbHVlKSAgICAgICAgMHgxMDE4KHZhbHVlKQorI2RlZmluZSBNQ19MQVRFTkNZKHZhbHVlKSAgICAgICAweDEwMzgodmFsdWUpCisjZGVmaW5lIE1DX1RSRUZSRVNIKHZhbHVlKSAgICAgIDB4MTA0MCh2YWx1ZSkKKworI2lmIENQVV9DTE9DS19SQVRFPT0xNTAwMDAwMDAgICAvKiAxNTAgTUh6IGNsb2NrIGZvciB0aGUgTUlQUyBjb3JlICovCisjZGVmaW5lIENHVV9NT0RVTF9CQVNFICAgICAgICAgIDB4QkYxMDcwMDAKKyNkZWZpbmUgQ0dVX1BMTDFDUih2YWx1ZSkgICAgICAgMHgwMDA4KHZhbHVlKQorI2RlZmluZSBDR1VfRElWQ1IodmFsdWUpICAgICAgICAweDAwMTAodmFsdWUpCisjZGVmaW5lIENHVV9NVVhDUih2YWx1ZSkgICAgICAgIDB4MDAxNCh2YWx1ZSkKKyNkZWZpbmUgQ0dVX1BMTDFTUih2YWx1ZSkgICAgICAgMHgwMDBDKHZhbHVlKQorI2VuZGlmCisKKwkuZ2xvYmwJbWVtc2V0dXAKK21lbXNldHVwOgorCisJLyogRUJVIEluaXRpYWxpemF0aW9uIGZvciB0aGUgRmxhc2ggQ1MwIGFuZCBDUzIuCisJICovCisJbGkJdDAsIEVCVV9NT0RVTF9CQVNFCisKKwlsaQl0MSwgMHhBMDAwMDA0MQorCXN3CXQxLCBFQlVfQUREU0VMMCh0MCkKKworI2lmIENQVV9DTE9DS19SQVRFPT0xNTAwMDAwMDAgICAvKiAxNTAgTUh6IGNsb2NrIGZvciB0aGUgTUlQUyBjb3JlICovCisJbGkJdDEsIDB4RTg0MTQxN0UKKwlzdwl0MSwgRUJVX0JVU0NPTjAodDApICAgLyogdmFsdWUgc2V0IHVwIGJ5IG1hZ2ljIGZsYXNoIHdvcmQgKi8KKwlzdwl0MSwgRUJVX0JVU0NPTjIodDApCisjZWxzZSAvKiAxMDAgTUh6ICovCisJbHcJdDEsIEVCVV9CVVNDT04wKHQwKSAgIC8qIHZhbHVlIHNldCB1cCBieSBtYWdpYyBmbGFzaCB3b3JkICovCisJc3cJdDEsIEVCVV9CVVNDT04yKHQwKQorI2VuZGlmCisKKwlsaQl0MSwgMHhBMDgwMDA0MQorCXN3CXQxLCBFQlVfQUREU0VMMih0MCkKKworCS8qIE5lZWQgdG8gaW5pdGlhbGl6ZSBDUzEgdG9vLCBzbyBhcyB0byB0byBwcmV2ZW50IG92ZXJsYXBwaW5nIHdpdGgKKwkgKiBGbGFzaCBiYW5rIDEuCisJICovCisJbGkJdDEsIDB4QkUwMDAwRjEKKyAJc3cJdDEsIEVCVV9BRERTRUwxKHQwKQorCisjaWYgQ1BVX0NMT0NLX1JBVEU9PTE1MDAwMDAwMCAgIC8qIDE1MCBNSHogY2xvY2sgZm9yIHRoZSBNSVBTIGNvcmUgKi8KKwlsaQl0MSwgMHg2ODQxNDNGRAorI2Vsc2UgLyogMTAwIE1IeiAqLworCWxpCXQxLCAweDY4NDE0MkJECisjZW5kaWYKKyAJc3cJdDEsIEVCVV9CVVNDT04xKHQwKQorCisjaWYgQ1BVX0NMT0NLX1JBVEU9PTE1MDAwMDAwMCAgIC8qIDE1MCBNSHogY2xvY2sgZm9yIHRoZSBNSVBTIGNvcmUgKi8KKwlsaSAgICAgIHQwLCBDR1VfTU9EVUxfQkFTRQorCWxpICAgICAgdDEsIDB4ODAwMDAwMTcKKwlzdyAgICAgIHQxLCBDR1VfRElWQ1IodDApCisJbGkgICAgICB0MSwgMHhDMDBCMDAwMQorCXN3ICAgICAgdDEsIENHVV9QTEwxQ1IodDApCisJbHVpICAgICB0MiwgMHg4MDAwCitiMToKKwlsdyAgICAgIHQxLCBDR1VfUExMMVNSKHQwKQorCWFuZCAgICAgdDEsIHQxLCB0MgorCWJlcSAgICAgdDEsIHplcm8sIGIxCisJbGkgICAgICB0MSwgMHg4MDAwMDAwMQorCXN3ICAgICAgdDEsIENHVV9NVVhDUih0MCkKKyNlbmRpZgorCisJLyogU0RSQU0gSW5pdGlhbGl6YXRpb24uCisJICovCisJbGkJdDAsIE1DX01PRFVMX0JBU0UKKworCS8qIENsZWFyIEVycm9yIGxvZyByZWdpc3RlcnMgKi8KKwlzdwl6ZXJvLCBNQ19FUlJDQVVTRSh0MCkKKwlzdwl6ZXJvLCBNQ19FUlJBRERSKHQwKQorCisJLyogU2V0IGNsb2NrIHJhdGlvIHRvIDE6MSAqLworCWxpCXQxLCAweDAzCQkvKiBjbGtyYXQ9MToxLCByZGRlbD0zICovCisJc3cJdDEsIE1DX0lPR1AodDApCisKKwkvKiBDbGVhciBQb3dlci1kb3duIHJlZ2lzdGVycyAqLworCXN3CXplcm8sIE1DX1NFTEZSRlNIKHQwKQorCisJLyogU2V0IENBUyBMYXRlbmN5ICovCisJbGkJdDEsIDB4MDAwMDAwMjAJCS8qIENMID0gMiAqLworCXN3CXQxLCBNQ19NUlNDT0RFKHQwKQorCisJLyogU2V0IHdvcmQgd2lkdGggdG8gMTYgYml0ICovCisJbGkJdDEsIDB4MiAgCisJc3cJdDEsIE1DX0NGR0RXKHQwKQorCisJLyogU2V0IENTMCB0byBTRFJBTSBwYXJhbWV0ZXJzICovCisJbGkJdDEsIDB4MDAwMDE0QzkKKwlzdwl0MSwgTUNfQ0ZHUEIwKHQwKQorCisJLyogU2V0IFNEUkFNIGxhdGVuY3kgcGFyYW1ldGVycyAqLworCWxpCXQxLCAweDAwMDI2MzI1CQkvKiBCQyBQQzEwMCAqLworCXN3CXQxLCBNQ19MQVRFTkNZKHQwKQorCisJLyogU2V0IFNEUkFNIHJlZnJlc2ggcmF0ZSAqLworCWxpCXQxLCAweDAwMDAwQzMwCQkvKiA0Sy82NG1zIEAgMTAwTUh6ICovCisJc3cJdDEsIE1DX1RSRUZSRVNIKHQwKQorCisJLyogRmluYWxseSBlbmFibGUgdGhlIGNvbnRyb2xsZXIgKi8KKwlsaQl0MSwgMQorCXN3CXQxLCBNQ19DVFJMRU5BKHQwKQorCisJaglyYQorCW5vcAorCmRpZmYgLS1naXQgYS9ib2FyZC9pbmNhaXAvdS1ib290LmxkcyBiL2JvYXJkL2luY2FpcC91LWJvb3QubGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjOWNhODkKLS0tIC9kZXYvbnVsbAorKysgYi9ib2FyZC9pbmNhaXAvdS1ib290LmxkcwpAQCAtMCwwICsxLDY0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rIEVuZ2luZWVyaW5nLCA8d2RAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorT1VUUFVUX0ZPUk1BVCgiZWxmMzItYmlnbWlwcyIsICJlbGYzMi1iaWdtaXBzIiwgImVsZjMyLWJpZ21pcHMiKQorKi8KK09VVFBVVF9GT1JNQVQoImVsZjMyLXRyYWRiaWdtaXBzIiwgImVsZjMyLXRyYWRiaWdtaXBzIiwgImVsZjMyLXRyYWRiaWdtaXBzIikKK09VVFBVVF9BUkNIKG1pcHMpCitFTlRSWShfc3RhcnQpCitTRUNUSU9OUworeworICAgICAgICAuID0gMHgwMDAwMDAwMDsKKworICAgICAgICAuID0gQUxJR04oNCk7CisJLnRleHQgICAgICAgOgorCXsKKwkgICooLnRleHQpCisJfQorCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLnJvZGF0YSAgOiB7ICooLnJvZGF0YSkgfQorCisgICAgICAgIC4gPSBBTElHTig0KTsKKyAgICAgICAgLmRhdGEgIDogeyAqKC5kYXRhKSB9CisKKwkuID0gQUxJR04oNCk7CisJLnNkYXRhICA6IHsgKiguc2RhdGEpIH0KKworCV9ncCA9IEFMSUdOKDE2KTsKKworCV9fZ290X3N0YXJ0ID0gLjsKKwkuZ290ICA6IHsgKiguZ290KSB9CisJX19nb3RfZW5kID0gLjsKKworCS5zZGF0YSAgOiB7ICooLnNkYXRhKSB9CisKKwl1Ym9vdF9lbmRfZGF0YSA9IC47CisJbnVtX2dvdF9lbnRyaWVzID0gKF9fZ290X2VuZCAtIF9fZ290X3N0YXJ0KSA+PiAyOworCisgICAgICAgIC4gPSBBTElHTig0KTsKKwkuc2JzcyAgOiB7ICooLnNic3MpIH0KKyAgICAgICAgLmJzcyAgOiB7ICooLmJzcykgfQorCXVib290X2VuZCA9IC47Cit9CmRpZmYgLS1naXQgYS9jcHUvbWlwcy9NYWtlZmlsZSBiL2NwdS9taXBzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDA4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbWlwcy9NYWtlZmlsZQpAQCAtMCwwICsxLDQ0IEBACisjCisjIChDKSBDb3B5cmlnaHQgMjAwMworIyBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorIworIyBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworIyBwcm9qZWN0LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorIyBNQSAwMjExMS0xMzA3IFVTQQorIworCitpbmNsdWRlICQoVE9QRElSKS9jb25maWcubWsKKworTElCCT0gbGliJChDUFUpLmEKKworU1RBUlQJPSBzdGFydC5vCitPQkpTCT0gaW50ZXJydXB0cy5vIGNwdS5vIGluY2FpcF9jbG9jay5vIHNlcmlhbC5vCitTT0JKUwk9IGluY2FpcF93ZHQubyBjYWNoZS5vCisKK2FsbDoJLmRlcGVuZCAkKFNUQVJUKSAkKExJQikKKworJChMSUIpOgkkKE9CSlMpICQoU09CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykgJChTT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpCisJCSQoQ0MpIC1NICQoQ0ZMQUdTKSAkKFNUQVJUOi5vPS5TKSAkKE9CSlM6Lm89LmMpID4gJEAKKworc2luY2x1ZGUgLmRlcGVuZAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9jYWNoZS5TIGIvY3B1L21pcHMvY2FjaGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWIwNGIzCi0tLSAvZGV2L251bGwKKysrIGIvY3B1L21pcHMvY2FjaGUuUwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqICBDYWNoZS1oYW5kbGluZyByb3V0aW5lZCBmb3IgTUlQUyA0SyBDUFVzCisgKgorICogIENvcHlyaWdodCAoYykgMjAwMwlXb2xmZ2FuZyBEZW5rIDx3ZEBkZW54LmRlPgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKworI2luY2x1ZGUgPGNvbmZpZy5oPgorI2luY2x1ZGUgPHZlcnNpb24uaD4KKyNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CisjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZW9wcy5oPgorCisKKwkvKiAxNktCIGlzIHRoZSBtYXhpbXVtIHNpemUgb2YgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgY2FjaGVzIG9uCisJICogTUlQUyA0Sy4KKwkgKi8KKyNkZWZpbmUgTUlQU19NQVhfQ0FDSEVfU0laRQkweDQwMDAKKworCisvKgorICogY2FjaGVvcCBtYWNybyB0byBhdXRvbWF0ZSBjYWNoZSBvcGVyYXRpb25zCisgKiBmaXJzdCBzb21lIGhlbHBlcnMuLi4KKyAqLworI2RlZmluZSBfbWluY2FjaGUoc2l6ZSwgbWF4c2l6ZSkgXAorICAgYmx0dSAgc2l6ZSxtYXhzaXplLDlmIDsgXAorICAgbW92ZSAgc2l6ZSxtYXhzaXplIDsgICAgXAorOToKKworI2RlZmluZSBfYWxpZ24obWluYWRkciwgbWF4YWRkciwgbGluZXNpemUpIFwKKyAgIC5zZXQgbm9hdCA7IFwKKyAgIHN1YnUgIEFULGxpbmVzaXplLDEgOyAgIFwKKyAgIG5vdCAgIEFUIDsgICAgICAgIFwKKyAgIGFuZCAgIG1pbmFkZHIsQVQgOyAgICAgIFwKKyAgIGFkZHUgIG1heGFkZHIsLTEgOyAgICAgIFwKKyAgIGFuZCAgIG1heGFkZHIsQVQgOyAgICAgIFwKKyAgIC5zZXQgYXQKKworLyogZ2VuZXJhbCBvcGVyYXRpb25zICovCisjZGVmaW5lIGRvb3AxKG9wMSkgXAorICAgY2FjaGUgb3AxLDAoYTApCisjZGVmaW5lIGRvb3AyKG9wMSwgb3AyKSBcCisgICBjYWNoZSBvcDEsMChhMCkgOyAgICBcCisgICBub3AgOyAgICAgICAgICBcCisgICBjYWNoZSBvcDIsMChhMCkKKworLyogc3BlY2lhbHMgZm9yIGNhY2hlIGluaXRpYWxpc2F0aW9uICovCisjZGVmaW5lIGRvb3AxbHcob3AxKSBcCisgICBsdyB6ZXJvLDAoYTApCisjZGVmaW5lIGRvb3AxbHcxKG9wMSkgXAorICAgY2FjaGUgb3AxLDAoYTApIDsgICAgXAorICAgbHcgemVybywwKGEwKSA7ICAgICAgXAorICAgY2FjaGUgb3AxLDAoYTApCisjZGVmaW5lIGRvb3AxMjEob3AxLG9wMikgXAorICAgY2FjaGUgb3AxLDAoYTApIDsgICAgXAorICAgbm9wOyAgICAgICAgICAgXAorICAgY2FjaGUgb3AyLDAoYTApIDsgICAgXAorICAgbm9wOyAgICAgICAgICAgXAorICAgY2FjaGUgb3AxLDAoYTApCisKKyNkZWZpbmUgX29wbG9vcG4obWluYWRkciwgbWF4YWRkciwgbGluZXNpemUsIHRhZywgb3BzKSBcCisgICAuc2V0ICBub3Jlb3JkZXIgOyAgICBcCisxMDogICBkb29wIyN0YWcjI29wcyA7ICBcCisgICBibmUgICAgIG1pbmFkZHIsbWF4YWRkciwxMGIgOyBcCisgICBhZGQgICAgICBtaW5hZGRyLGxpbmVzaXplIDsgICBcCisgICAuc2V0ICByZW9yZGVyCisKKy8qIGZpbmFsbHkgdGhlIGNhY2hlIG9wZXJhdGlvbiBtYWNyb3MgKi8KKyNkZWZpbmUgdmNhY2hlb3BuKGt2YSwgbiwgY2FjaGVTaXplLCBjYWNoZUxpbmVTaXplLCB0YWcsIG9wcykgXAorICAgYmxleiAgbiwxMWYgOyAgICAgICAgXAorICAgYWRkdSAgbixrdmEgOyAgICAgICAgXAorICAgX2FsaWduKGt2YSwgbiwgY2FjaGVMaW5lU2l6ZSkgOyBcCisgICBfb3Bsb29wbihrdmEsIG4sIGNhY2hlTGluZVNpemUsIHRhZywgb3BzKSA7IFwKKzExOgorCisjZGVmaW5lIGljYWNoZW9wbihrdmEsIG4sIGNhY2hlU2l6ZSwgY2FjaGVMaW5lU2l6ZSwgdGFnLCBvcHMpIFwKKyAgIF9taW5jYWNoZShuLCBjYWNoZVNpemUpOyAgIFwKKyAgIGJsZXogIG4sMTFmIDsgICAgICAgIFwKKyAgIGFkZHUgIG4sa3ZhIDsgICAgICAgIFwKKyAgIF9hbGlnbihrdmEsIG4sIGNhY2hlTGluZVNpemUpIDsgXAorICAgX29wbG9vcG4oa3ZhLCBuLCBjYWNoZUxpbmVTaXplLCB0YWcsIG9wcykgOyBcCisxMToKKworI2RlZmluZSB2Y2FjaGVvcChrdmEsIG4sIGNhY2hlU2l6ZSwgY2FjaGVMaW5lU2l6ZSwgb3ApIFwKKyAgIHZjYWNoZW9wbihrdmEsIG4sIGNhY2hlU2l6ZSwgY2FjaGVMaW5lU2l6ZSwgMSwgKG9wKSkKKworI2RlZmluZSBpY2FjaGVvcChrdmEsIG4sIGNhY2hlU2l6ZSwgY2FjaGVMaW5lU2l6ZSwgb3ApIFwKKyAgIGljYWNoZW9wbihrdmEsIG4sIGNhY2hlU2l6ZSwgY2FjaGVMaW5lU2l6ZSwgMSwgKG9wKSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogbWlwc19jYWNoZV9yZXNldCAtIGxvdyBsZXZlbCBpbml0aWFsaXNhdGlvbiBvZiB0aGUgcHJpbWFyeSBjYWNoZXMKKyoKKyogVGhpcyByb3V0aW5lIGluaXRpYWxpc2VzIHRoZSBwcmltYXJ5IGNhY2hlcyB0byBlbnN1cmUgdGhhdCB0aGV5CisqIGhhdmUgZ29vZCBwYXJpdHkuICBJdCBtdXN0IGJlIGNhbGxlZCBieSB0aGUgUk9NIGJlZm9yZSBhbnkgY2FjaGVkIGxvY2F0aW9ucworKiBhcmUgdXNlZCB0byBwcmV2ZW50IHRoZSBwb3NzaWJpbGl0eSBvZiBkYXRhIHdpdGggYmFkIHBhcml0eSBiZWluZyB3cml0dGVuIHRvCisqIG1lbW9yeS4KKyogVG8gaW5pdGlhbGlzZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgaXQgaXMgZXNzZW50aWFsIHRoYXQgYSBzb3VyY2Ugb2YgZGF0YQorKiB3aXRoIGdvb2QgcGFyaXR5IGlzIGF2YWlsYWJsZS4gVGhpcyByb3V0aW5lCisqIHdpbGwgaW5pdGlhbGlzZSBhbiBhcmVhIG9mIG1lbW9yeSBzdGFydGluZyBhdCBsb2NhdGlvbiB6ZXJvIHRvIGJlIHVzZWQgYXMKKyogYSBzb3VyY2Ugb2YgcGFyaXR5LgorKgorKiBSRVRVUk5TOiBOL0EKKyoKKyovCisJLmdsb2JsCW1pcHNfY2FjaGVfcmVzZXQKKwkuZW50CW1pcHNfY2FjaGVfcmVzZXQKK21pcHNfY2FjaGVfcmVzZXQ6CisKKwlsaQl0MiwgQ0ZHX0lDQUNIRV9TSVpFCisJbGkJdDMsIENGR19EQ0FDSEVfU0laRQorCWxpCXQ0LCBDRkdfQ0FDSEVMSU5FX1NJWkUKKwltb3ZlCXQ1LCB0NAorCisKKwlsaQl2MCwgTUlQU19NQVhfQ0FDSEVfU0laRQorCisJLyogTm93IGNsZWFyIHRoYXQgbXVjaCBtZW1vcnkgc3RhcnRpbmcgZnJvbSB6ZXJvLgorCSAqLworCisJbGkJYTAsIEtTRUcxCisJYWRkdQlhMSwgYTAsIHYwCisKKzI6CXN3CXplcm8sIDAoYTApCisJc3cJemVybywgNChhMCkKKwlzdwl6ZXJvLCA4KGEwKQorCXN3CXplcm8sIDEyKGEwKQorCXN3CXplcm8sIDE2KGEwKQorCXN3CXplcm8sIDIwKGEwKQorCXN3CXplcm8sIDI0KGEwKQorCXN3CXplcm8sIDI4KGEwKQorCWFkZHUJYTAsIDMyCisJYmx0dQlhMCwgYTEsIDJiCisgICAKKwkvKiBTZXQgaW52YWxpZCB0YWcuCisJICovCisKKwltdGMwCXplcm8sIENQMF9UQUdMTworCisgICAvKgorICAgICogVGhlIGNhY2hlcyBhcmUgcHJvYmFibHkgaW4gYW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZSwKKyAgICAqIHNvIHdlIGZvcmNlIGdvb2QgcGFyaXR5IGludG8gdGhlbSBieSBkb2luZyBhbgorICAgICogaW52YWxpZGF0ZSwgbG9hZC9maWxsLCBpbnZhbGlkYXRlIGZvciBlYWNoIGxpbmUuCisgICAgKi8KKworCS8qIEFzc3VtZSBib3R0b20gb2YgUkFNIHdpbGwgZ2VuZXJhdGUgZ29vZCBwYXJpdHkgZm9yIHRoZSBjYWNoZS4KKwkgKi8KKworCWxpCWEwLCBLMEJBU0UKKwltb3ZlCWEyLCB0MgkJIyBpY2FjaGVTaXplCisJbW92ZQlhMywgdDQJCSMgaWNhY2hlTGluZVNpemUKKwltb3ZlCWExLCBhMgorCWljYWNoZW9wbihhMCxhMSxhMixhMywxMjEsKEluZGV4X1N0b3JlX1RhZ19JLEZpbGwpKQorCisJLyogVG8gc3VwcG9ydCBPcmlvbi9SNDYwMCwgd2UgaW5pdGlhbGlzZSB0aGUgZGF0YSBjYWNoZSBpbiAzIHBhc3Nlcy4KKwkgKi8KKworCS8qIDE6IGluaXRpYWxpc2UgZGNhY2hlIHRhZ3MuCisJICovCisKKwlsaQlhMCwgSzBCQVNFCisJbW92ZQlhMiwgdDMJCSMgZGNhY2hlU2l6ZQorCW1vdmUJYTMsIHQ1CQkjIGRjYWNoZUxpbmVTaXplCisJbW92ZQlhMSwgYTIKKwlpY2FjaGVvcChhMCxhMSxhMixhMyxJbmRleF9TdG9yZV9UYWdfRCkKKworCS8qIDI6IGZpbGwgZGNhY2hlLgorCSAqLworCisJbGkJYTAsIEswQkFTRQorCW1vdmUJYTIsIHQzCQkjIGRjYWNoZVNpemUKKwltb3ZlCWEzLCB0NQkJIyBkY2FjaGVMaW5lU2l6ZQorCW1vdmUJYTEsIGEyCisJaWNhY2hlb3BuKGEwLGExLGEyLGEzLDFsdywoZHVtbXkpKQorCisJLyogMzogY2xlYXIgZGNhY2hlIHRhZ3MuCisJICovCisKKwlsaQlhMCwgSzBCQVNFCisJbW92ZQlhMiwgdDMJCSMgZGNhY2hlU2l6ZQorCW1vdmUJYTMsIHQ1CQkjIGRjYWNoZUxpbmVTaXplCisJbW92ZQlhMSwgYTIKKwlpY2FjaGVvcChhMCxhMSxhMixhMyxJbmRleF9TdG9yZV9UYWdfRCkKKworCWogIHJhCisJLmVuZCAgbWlwc19jYWNoZV9yZXNldAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIGRjYWNoZV9zdGF0dXMgLSBnZXQgY2FjaGUgc3RhdHVzCisqCisqIFJFVFVSTlM6IDAgLSBjYWNoZSBkaXNhYmxlZDsgMSAtIGNhY2hlIGVuYWJsZWQKKyoKKyovCisJLmdsb2JsCWRjYWNoZV9zdGF0dXMKKwkuZW50CWRjYWNoZV9zdGF0dXMKK2RjYWNoZV9zdGF0dXM6CisKKwltZmMwCXYwLCBDUDBfQ09ORklHCisJYW5kaQl2MCwgdjAsIDEKKwlqCXJhCisKKwkuZW5kICBkY2FjaGVfc3RhdHVzCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIGRjYWNoZV9kaXNhYmxlIC0gZGlzYWJsZSBjYWNoZQorKgorKiBSRVRVUk5TOiBOL0EKKyoKKyovCisJLmdsb2JsCWRjYWNoZV9kaXNhYmxlCisJLmVudAlkY2FjaGVfZGlzYWJsZQorZGNhY2hlX2Rpc2FibGU6CisKKwltZmMwCXQwLCBDUDBfQ09ORklHCisJbGkJdDEsIC04CisJYW5kCXQwLCB0MCwgdDEKKwlvcmkJdDAsIHQwLCBDT05GX0NNX1VOQ0FDSEVECisJbXRjMCAgICB0MCwgQ1AwX0NPTkZJRworCWoJcmEKKworCS5lbmQgIGRjYWNoZV9kaXNhYmxlCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogbWlwc19jYWNoZV9sb2NrIC0gbG9jayBSQU0gYXJlYSBwb2ludGVkIHRvIGJ5IGEwIGluIGNhY2hlLgorKgorKiBSRVRVUk5TOiBOL0EKKyoKKyovCisJLmdsb2JsCW1pcHNfY2FjaGVfbG9jaworCS5lbnQJbWlwc19jYWNoZV9sb2NrCittaXBzX2NhY2hlX2xvY2s6CisJbGkJYTEsIEswQkFTRSAtIENGR19EQ0FDSEVfU0laRQorCWFkZHUJYTAsIGExCisJbGkJYTIsIENGR19EQ0FDSEVfU0laRQorCWxpCWEzLCBDRkdfQ0FDSEVMSU5FX1NJWkUKKwltb3ZlCWExLCBhMgorCWljYWNoZW9wKGEwLGExLGEyLGEzLDB4MWQpCisKKwlqCXJhCisJLmVuZAltaXBzX2NhY2hlX2xvY2sKKwpkaWZmIC0tZ2l0IGEvY3B1L21pcHMvY29uZmlnLm1rIGIvY3B1L21pcHMvY29uZmlnLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTY2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbWlwcy9jb25maWcubWsKQEAgLTAsMCArMSwyNSBAQAorIworIyAoQykgQ29weXJpZ2h0IDIwMDMKKyMgV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgPHdkQGRlbnguZGU+CisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK1BMQVRGT1JNX0NQUEZMQUdTICs9IC1tY3B1PTRrYyAtRUIgLW1hYmljYWxscworCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9jcHUuYyBiL2NwdS9taXBzL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzM5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbWlwcy9jcHUuYwpAQCAtMCwwICsxLDQxIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8d2RAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8Y29tbWFuZC5oPgorI2luY2x1ZGUgPGFzbS9pbmNhLWlwLmg+CisKK2ludCBkb19yZXNldChjbWRfdGJsX3QgKmNtZHRwLCBpbnQgZmxhZywgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyNpZmRlZiBDT05GSUdfSU5DQV9JUAorCSpJTkNBX0lQX1dEVF9SU1RfUkVRID0gMHgzZjsKKyNlbmRpZgorCWZwcmludGYoc3RkZXJyLCAiKioqIHJlc2V0IGZhaWxlZCAqKipcbiIpOworCXJldHVybiAwOworfQorCit2b2lkIGZsdXNoX2NhY2hlICh1bG9uZyBzdGFydF9hZGRyLCB1bG9uZyBzaXplKQoreworCit9CisKZGlmZiAtLWdpdCBhL2NwdS9taXBzL2luY2FpcF9jbG9jay5jIGIvY3B1L21pcHMvaW5jYWlwX2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjNmViMAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9taXBzL2luY2FpcF9jbG9jay5jCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxhc20vaW5jYS1pcC5oPgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogZ2V0X2NwdWNsayAtIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgQ1BVLiAKKyoKKyogR2V0cyB0aGUgdmFsdWUgZGlyZWN0bHkgZnJvbSB0aGUgSU5DQS1JUCBoYXJkd2FyZS4KKyoKKyogUkVUVVJOUzogCisqICAgICAgICAgIDE1MC4wMDAuMDAwIGZvciAxNTAgTUh6CisqICAgICAgICAgIDEzMC4wMDAuMDAwLiBmb3IgMTMwIE1oegorKiAgICAgICAgICAxMDAuMDAwLjAwMC4gZm9yIDEwMCBNaHoKKyogTk9URToKKyogICBUaGlzIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieSB0aGUgaGFyZHdhcmUgZHJpdmVyIHRvIGdldCB0aGUgY29ycmVjdAorKiAgIGZyZXF1ZW5jeSBvZiB0aGUgQ1BVLiBEb24ndCB1c2UgdGhlIG1hY3Jvcywgd2hpY2ggYXJlIHNldCB0byBpbml0IHRoZSBDUFUKKyogICBmcmVxdWVuY3kgaW4gdGhlIFJPTSBjb2RlLgorKi8KK3VpbnQgaW5jYWlwX2dldF9jcHVjbGsodm9pZCkKK3sKKyAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAvKiBDUFUgQ2xvY2sgSW5wdXQgTXVsdGlwbGV4ZXIgKE1VWCBJKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgLyogTXVsdGlwbGV4ZXIgTVVYIEkgc2VsZWN0cyB0aGUgbWF4aW11bSBpbnB1dCBjbG9jayB0byB0aGUgQ1BVLiAgICAgICAgICAgKi8KKyAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICBpZiAoKigodm9sYXRpbGUgdWxvbmcqKUlOQ0FfSVBfQ0dVX0NHVV9NVVhDUikgJiBJTkNBX0lQX0NHVV9DR1VfTVVYQ1JfTVVYSSkKKyAgIHsKKyAgICAgIC8qIE1VWCBJIHNldCB0byAxNTAgTUh6IGNsb2NrICovCisgICAgICByZXR1cm4gMTUwMDAwMDAwOworICAgfQorICAgZWxzZQorICAgeworICAgICAgLyogTVVYIEkgc2V0IHRvIDEwMC8xMzMgTUh6IGNsb2NrICovCisgICAgICBpZiAoKigodm9sYXRpbGUgdWxvbmcqKUlOQ0FfSVBfQ0dVX0NHVV9ESVZDUikgJiAweDQwKSAKKyAgICAgIHsKKyAgICAgICAgIC8qIERpdmlzaW9uIHZhbHVlIGlzIDEvMywgbWF4aW11bSBDUFUgb3BlcmF0aW5nICovCisgICAgICAgICAvKiBmcmVxdWVuY3kgaXMgMTMzLjMgTUh6ICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgcmV0dXJuIDEzMDAwMDAwMDsKKyAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICAgIC8qIERpdmlzaW9uIHZhbHVlIGlzIDEvNCwgbWF4aW11bSBDUFUgb3BlcmF0aW5nICovCisgICAgICAgICAvKiBmcmVxdWVuY3kgaXMgMTAwIE1IeiAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgcmV0dXJuIDEwMDAwMDAwMDsKKyAgICAgIH0KKyAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogZ2V0X2ZwaWNsayAtIHJldHVybnMgdGhlIGZyZXF1ZW5jeSBvZiB0aGUgRlBJIGJ1cy4gCisqCisqIEdldHMgdGhlIHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIElOQ0EtSVAgaGFyZHdhcmUuCisqCisqIFJFVFVSTlM6IEZycXVlbmN5IGluIEh6CisqCisqIE5PVEU6CisqICAgVGhpcyBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkgdGhlIGhhcmR3YXJlIGRyaXZlciB0byBnZXQgdGhlIGNvcnJlY3QKKyogICBmcmVxdWVuY3kgb2YgdGhlIENQVS4gRG9uJ3QgdXNlIHRoZSBtYWNyb3MsIHdoaWNoIGFyZSBzZXQgdG8gaW5pdCB0aGUgQ1BVCisqICAgZnJlcXVlbmN5IGluIHRoZSBST00gY29kZS4KKyogICBUaGUgY2FsY3VsYXRpb24gZm9yIHRoZSAKKyovCit1aW50IGluY2FpcF9nZXRfZnBpY2xrKHZvaWQpCit7CisgICB1aW50ICBjbGtDUFU7CisgICAKKyAgIGNsa0NQVSA9IGluY2FpcF9nZXRfY3B1Y2xrKCk7CisgICAKKyAgIHN3aXRjaCAoKigodm9sYXRpbGUgdWxvbmcqKUlOQ0FfSVBfQ0dVX0NHVV9ESVZDUikgJiAweEMpCisgICB7CisgICAgICBjYXNlIDB4NDoKKyAgICAgICAgIHJldHVybiBjbGtDUFUgPj4gMTsgLyogZGV2aWRlZCBieSAyICovCisgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMHg4OgorICAgICAgICAgcmV0dXJuIGNsa0NQVSA+PiAyOyAvKiBkZXZpZGVkIGJ5IDQgKi8KKyAgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgIHJldHVybiBjbGtDUFU7CisgICAgICAgICBicmVhazsKKyAgIH0KK30KKworCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9pbmNhaXBfd2R0LlMgYi9jcHUvbWlwcy9pbmNhaXBfd2R0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ1NTU2OQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9taXBzL2luY2FpcF93ZHQuUwpAQCAtMCwwICsxLDczIEBACisvKgorICogIElOQ0EtSVAgV2F0Y2hkb2cgdGltZXIgbWFuYWdlbWVudCBjb2RlLgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDMJV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxjb25maWcuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgorCisKKyNkZWZpbmUgV0RfQkFTRSAgICAgICAgICAgIDB4YjgwMDAwMDAKKyNkZWZpbmUgV0RfQ09OMCh2YWx1ZSkgICAgIDB4MDAyMCh2YWx1ZSkKKyNkZWZpbmUgV0RfQ09OMSh2YWx1ZSkgICAgIDB4MDAyNCh2YWx1ZSkKKyNkZWZpbmUgV0RfRElTQUJMRSAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgV0RfRU5BQkxFICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgV0RfV1JJVEVfUFcgICAgICAgIDB4RkZGQzAwRjgKKyNkZWZpbmUgV0RfV1JJVEVfRU5ESU5JVCAgIDB4RkZGQzAwRjMKKyNkZWZpbmUgV0RfV1JJVEVfSU5JVCAgICAgIDB4RkZGQzAwRjIKKworCisJLmdsb2JsCWRpc2FibGVfaW5jYWlwX3dkdAorZGlzYWJsZV9pbmNhaXBfd2R0OgorCWxpCXQwLCBXRF9CQVNFCisKKwkvKiBDYWxjdWxhdGUgcGFzc3dvcmQuCisJICovCisJbHcJdDIsIFdEX0NPTjEodDApCisJYW5kCXQyLCAweEMKKworCWx3CXQzLCBXRF9DT04wKHQwKQorCWFuZAl0MywgMHhGRkZGRkYwMQorCisJb3IJdDMsIHQyCisJb3IgCXQzLCAweEYwCisKKwlzdwl0MywgV0RfQ09OMCh0MCkJCS8qIHdyaXRlIHBhc3N3b3JkICovCisKKwkvKiBDbGVhciBFTkRJTklULgorCSAqLworCWxpCXQxLCBXRF9XUklURV9JTklUCisJc3cJdDEsIFdEX0NPTjAodDApCisKKworCWxpCXQxLCBXRF9ESVNBQkxFCisJc3cJdDEsIFdEX0NPTjEodDApCQkvKiBkaXNhYmxlIHdhdGNoZG9nICovCisJbGkJdDEsIFdEX1dSSVRFX1BXCisJc3cJdDEsIFdEX0NPTjAodDApCQkvKiB3cml0ZSBwYXNzd29yZCAqLworCWxpCXQxLCBXRF9XUklURV9FTkRJTklUCisJc3cJdDEsIFdEX0NPTjAodDApCQkvKiBlbmQgY29tbWFuZCAqLworCisJaglyYQorCW5vcAorCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9pbnRlcnJ1cHRzLmMgYi9jcHUvbWlwcy9pbnRlcnJ1cHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5MGE3NgotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9taXBzL2ludGVycnVwdHMuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8d2RAZGVueC5kZT4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKK3ZvaWQgZW5hYmxlX2ludGVycnVwdHModm9pZCkKK3sKK30KKworaW50IGRpc2FibGVfaW50ZXJydXB0cyh2b2lkKQoreworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9jcHUvbWlwcy9zZXJpYWwuYyBiL2NwdS9taXBzL3NlcmlhbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZGE1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9jcHUvbWlwcy9zZXJpYWwuYwpAQCAtMCwwICsxLDI4MiBAQAorLyoKKyAqIChJTkNBKSBBU0MgVUFSVCBzdXBwb3J0CisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9pbmNhLWlwLmg+CisjaW5jbHVkZSAic2VyaWFsLmgiCisKKyNkZWZpbmUgU0VUX0JJVChyZWcsIG1hc2spICAgICAgICAgICAgICAgICAgcmVnIHw9IChtYXNrKQorI2RlZmluZSBDTEVBUl9CSVQocmVnLCBtYXNrKSAgICAgICAgICAgICAgICByZWcgJj0gKH5tYXNrKQorI2RlZmluZSBDTEVBUl9CSVRTKHJlZywgbWFzaykgICAgICAgICAgICAgICBDTEVBUl9CSVQocmVnLCBtYXNrKQorI2RlZmluZSBTRVRfQklUUyhyZWcsIG1hc2spICAgICAgICAgICAgICAgICBTRVRfQklUKHJlZywgbWFzaykKKyNkZWZpbmUgU0VUX0JJVEZJRUxEKHJlZywgbWFzaywgb2ZmLCB2YWwpICAge3JlZyAmPSAofm1hc2spOyByZWcgfD0gKHZhbCA8PCBvZmYpO30KKworZXh0ZXJuIHVpbnQgaW5jYWlwX2dldF9mcGljbGsodm9pZCk7CisKK3N0YXRpYyBpbnQgc2VyaWFsX3NldG9wdCAodm9pZCk7CisKKy8qIHBvaW50ZXIgdG8gQVNDIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAqLworc3RhdGljIHZvbGF0aWxlIGluY2FBc2NfdCAqcEFzYyA9IChpbmNhQXNjX3QgKilJTkNBX0lQX0FTQzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBzZXJpYWxfaW5pdCAtIGluaXRpYWxpemUgYSBJTkNBQVNDIGNoYW5uZWwKKyoKKyogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBudW1iZXIgb2YgZGF0YSBiaXRzLCBwYXJpdHkKKyogYW5kIHNldCB0aGUgc2VsZWN0ZWQgYmF1ZCByYXRlLiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZC4KKyogU2V0IHRoZSBtb2RlbSBjb250cm9sIHNpZ25hbHMgaWYgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZC4KKyoKKyogUkVUVVJOUzogTi9BCisqLworCitpbnQgc2VyaWFsX2luaXQgKHZvaWQpCit7CisgICAgLyogd2UgaGF2ZSB0byBzZXQgUE1VLkVOMTMgYml0IHRvIGVuYWJsZSBhbiBBU0MgZGV2aWNlKi8KKyAgICBJTkNBQVNDX1BNVV9FTkFCTEUoMTMpOworICAgIAorICAgIC8qIGFuZCB3ZSBoYXZlIHRvIHNldCBDTEMgcmVnaXN0ZXIqLworICAgIENMRUFSX0JJVChwQXNjLT5hc2NfY2xjLCBBU0NDTENfRElTUyk7CisgICAgU0VUX0JJVEZJRUxEKHBBc2MtPmFzY19jbGMsIEFTQ0NMQ19STUNNQVNLLCBBU0NDTENfUk1DT0ZGU0VULCAweDAwMDEpOworICAgIAorICAgIC8qIGluaXRpYWx5IHdlIGFyZSBpbiBhc3luYyBtb2RlICovCisgICAgcEFzYy0+YXNjX2NvbiA9IEFTQ0NPTl9NXzhBU1lOQzsKKworICAgIC8qIHNlbGVjdCBpbnB1dCBwb3J0ICovCisgICAgcEFzYy0+YXNjX3Bpc2VsID0gKENPTlNPTEVfVFRZICYgMHgxKTsKKworICAgIC8qIFRYRklGTydzIGZpbGxpbmcgbGV2ZWwgKi8KKyAgICBTRVRfQklURklFTEQocEFzYy0+YXNjX3R4ZmNvbiwgQVNDVFhGQ09OX1RYRklUTE1BU0ssCisgICAgICAgICAgICAgICAgICAgIEFTQ1RYRkNPTl9UWEZJVExPRkYsIElOQ0FBU0NfVFhGSUZPX0ZMKTsKKyAgICAvKiBlbmFibGUgVFhGSUZPICovCisgICAgU0VUX0JJVChwQXNjLT5hc2NfdHhmY29uLCBBU0NUWEZDT05fVFhGRU4pOworCisgICAgLyogUlhGSUZPJ3MgZmlsbGluZyBsZXZlbCAqLworICAgIFNFVF9CSVRGSUVMRChwQXNjLT5hc2NfdHhmY29uLCBBU0NSWEZDT05fUlhGSVRMTUFTSywgCisgICAgICAgICAgICAgICAgICAgIEFTQ1JYRkNPTl9SWEZJVExPRkYsIElOQ0FBU0NfUlhGSUZPX0ZMKTsKKyAgICAvKiBlbmFibGUgUlhGSUZPICovCisgICAgU0VUX0JJVChwQXNjLT5hc2NfcnhmY29uLCBBU0NSWEZDT05fUlhGRU4pOworCisgICAgLyogZW5hYmxlIGVycm9yIHNpZ25hbHMgKi8KKyAgICBTRVRfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9GRU4pOworICAgIFNFVF9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX09FTik7CisKKyAgICAvKiBhY2tub3dsZWRnZSBBU0MgaW50ZXJydXB0cyAqLworICAgIEFTQ19JTlRFUlJVUFRTX0NMRUFSKElOQ0FBU0NfSVJRX0xJTkVfQUxMKTsKKworICAgIC8qIGRpc2FibGUgQVNDIGludGVycnVwdHMgKi8KKyAgICBBU0NfSU5URVJSVVBUU19ESVNBQkxFKElOQ0FBU0NfSVJRX0xJTkVfQUxMKTsKKworICAgIC8qIHNldCBGSUZPcyBpbnRvIHRoZSB0cmFuc3BhcmVudCBtb2RlICovCisgICAgU0VUX0JJVChwQXNjLT5hc2NfdHhmY29uLCBBU0NUWEZDT05fVFhUTUVOKTsKKyAgICBTRVRfQklUKHBBc2MtPmFzY19yeGZjb24sIEFTQ1JYRkNPTl9SWFRNRU4pOworCisgICAgLyogc2V0IGJhdWQgcmF0ZSAqLworICAgIHNlcmlhbF9zZXRicmcoKTsKKworICAgIC8qIHNldCB0aGUgb3B0aW9ucyAqLworICAgIHNlcmlhbF9zZXRvcHQoKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBzZXJpYWxfc2V0YnJnICh2b2lkKQoreworICAgIHVsb25nICAgICAgdWlSZWxvYWRWYWx1ZSwgZmR2OworICAgIHVsb25nICAgICAgZl9BU0M7CisKKyAgICBmX0FTQyA9IGluY2FpcF9nZXRfZnBpY2xrKCk7CisKKyNpZm5kZWYgSU5DQUFTQ19VU0VfRkRWCisgICAgZmR2ID0gMjsKKyAgICB1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKGZkdiAqIDE2ICogQ09ORklHX0JBVURSQVRFKSkgLSAxOworI2Vsc2UgCisgICAgZmR2ID0gSU5DQUFTQ19GRFZfSElHSF9CQVVEUkFURTsKKyAgICB1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKDgxOTIgKiBDT05GSUdfQkFVRFJBVEUgLyBmZHYpKSAtIDE7CisjZW5kaWYgLyogSU5DQUFTQ19VU0VfRkRWICovCisgICAgCisgICAgaWYgKCAodWlSZWxvYWRWYWx1ZSA8IDApIHx8ICh1aVJlbG9hZFZhbHVlID4gODE5MSkgKQorICAgIHsKKyNpZm5kZWYgSU5DQUFTQ19VU0VfRkRWCisgICAgICAgIGZkdiA9IDM7CisgICAgICAgIHVpUmVsb2FkVmFsdWUgPSAoZl9BU0MgLyAoZmR2ICogMTYgKiBDT05GSUdfQkFVRFJBVEUpKSAtIDE7CisjZWxzZSAKKyAgICAgICAgZmR2ID0gSU5DQUFTQ19GRFZfTE9XX0JBVURSQVRFOworICAgICAgICB1aVJlbG9hZFZhbHVlID0gKGZfQVNDIC8gKDgxOTIgKiBDT05GSUdfQkFVRFJBVEUgLyBmZHYpKSAtIDE7CisjZW5kaWYgLyogSU5DQUFTQ19VU0VfRkRWICovCisgICAgICAgIAorICAgICAgICBpZiAoICh1aVJlbG9hZFZhbHVlIDwgMCkgfHwgKHVpUmVsb2FkVmFsdWUgPiA4MTkxKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybjsgICAgLyogY2FuJ3QgaW1wb3NzaWJseSBnZW5lcmF0ZSB0aGF0IGJhdWQgcmF0ZSAqLworICAgICAgICB9CisgICAgfQorCisgICAgLyogRGlzYWJsZSBCYXVkIFJhdGUgR2VuZXJhdG9yOyBCRyBzaG91bGQgb25seSBiZSB3cml0dGVuIHdoZW4gUj0wICovCisgICAgQ0xFQVJfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9SKTsKKworI2lmbmRlZiBJTkNBQVNDX1VTRV9GRFYKKyAgICAvKgorICAgICAqIERpc2FibGUgRnJhY3Rpb25hbCBEaXZpZGVyIChGREUpCisgICAgICogRGl2aWRlIGNsb2NrIGJ5IHJlbG9hZC12YWx1ZSArIGNvbnN0YW50IChCUlMpCisgICAgICovCisgICAgLyogRkRFID0gMCAqLworICAgIENMRUFSX0JJVChwQXNjLT5hc2NfY29uLCBBU0NDT05fRkRFKTsKKworICAgIGlmICggZmR2ID09IDIgKQorICAgICAgICBDTEVBUl9CSVQocEFzYy0+YXNjX2NvbiwgQVNDQ09OX0JSUyk7ICAgLyogQlJTID0gMCAqLworICAgIGVsc2UKKyAgICAgICAgU0VUX0JJVChwQXNjLT5hc2NfY29uLCBBU0NDT05fQlJTKTsgLyogQlJTID0gMSAqLworCisjZWxzZSAvKiBJTkNBQVNDX1VTRV9GRFYgKi8KKworICAgIC8qIEVuYWJsZSBGcmFjdGlvbmFsIERpdmlkZXIgKi8KKyAgICBTRVRfQklUKHBBc2MtPmFzY19jb24sIEFTQ0NPTl9GREUpOyAvKiBGREUgPSAxICovCisKKyAgICAvKiBTZXQgZnJhY3Rpb25hbCBkaXZpZGVyIHZhbHVlICovCisgICAgcEFzYy0+YXNjX2ZkdiA9IGZkdiAmIEFTQ0ZEVl9WQUxVRV9NQVNLOworCisjZW5kaWYgLyogSU5DQUFTQ19VU0VfRkRWICovCisKKyAgICAvKiBTZXQgcmVsb2FkIHZhbHVlIGluIEJHICovCisgICAgcEFzYy0+YXNjX2JnID0gdWlSZWxvYWRWYWx1ZTsKKworICAgIC8qIEVuYWJsZSBCYXVkIFJhdGUgR2VuZXJhdG9yICovCisgICAgU0VUX0JJVChwQXNjLT5hc2NfY29uLCBBU0NDT05fUik7ICAgICAgICAgICAvKiBSID0gMSAqLworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBzZXJpYWxfc2V0b3B0IC0gc2V0IHRoZSBzZXJpYWwgb3B0aW9ucworKgorKiBTZXQgdGhlIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGUgdG8gdGhhdCBzcGVjaWZpZWQuIEZvbGxvd2luZyBvcHRpb25zCisqIGFyZSBzdXBwb3J0ZWQ6IENSRUFELCBDU0laRSwgUEFSRU5CLCBhbmQgUEFST0RELgorKgorKiBOb3RlLCB0aGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIHRyYW5zbWl0dGVyLiAgVGhlIGNhbGxpbmcgcm91dGluZQorKiBtYXkgaGF2ZSB0byByZS1lbmFibGUgaXQuCisqCisqIFJFVFVSTlM6CisqIFJldHVybnMgMCB0byBpbmRpY2F0ZSBzdWNjZXNzLCBvdGhlcndpc2UgLTEgaXMgcmV0dXJuZWQKKyovCisKK3N0YXRpYyBpbnQgc2VyaWFsX3NldG9wdCAodm9pZCkKK3sKKyAgICB1bG9uZyAgY29uOworCisgICAgc3dpdGNoICggQVNDX09QVElPTlMgJiBBU0NPUFRfQ1NJWkUgKQorICAgIHsKKyAgICAvKiA3LWJpdC1kYXRhICovCisgICAgY2FzZSBBU0NPUFRfQ1M3OgorICAgICAgICBjb24gPSBBU0NDT05fTV83QVNZTkNQQVI7ICAgLyogNy1iaXQtZGF0YSBhbmQgcGFyaXR5IGJpdCAqLworICAgICAgICBicmVhazsKKworICAgIC8qIDgtYml0LWRhdGEgKi8KKyAgICBjYXNlIEFTQ09QVF9DUzg6CisgICAgICAgIGlmICggQVNDX09QVElPTlMgJiBBU0NPUFRfUEFSRU5CICkKKyAgICAgICAgICAgIGNvbiA9IEFTQ0NPTl9NXzhBU1lOQ1BBUjsgICAvKiA4LWJpdC1kYXRhIGFuZCBwYXJpdHkgYml0ICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbiA9IEFTQ0NPTl9NXzhBU1lOQzsgICAgICAvKiA4LWJpdC1kYXRhIG5vIHBhcml0eSAqLworICAgICAgICBicmVhazsKKyAgICAKKyAgICAvKiAKKyAgICAgKiAgb25seSA3IGFuZCA4LWJpdCBmcmFtZXMgYXJlIHN1cHBvcnRlZAorICAgICAqICBpZiB3ZSBkb24ndCB1c2UgSU9DVEwgZXh0ZW5zaW9ucyAKKyAgICAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9TVE9QQiApCisgICAgICAgIFNFVF9CSVQoY29uLCBBU0NDT05fU1RQKTsgICAgICAgLyogMiBzdG9wIGJpdHMgKi8KKyAgICBlbHNlCisgICAgICAgIENMRUFSX0JJVChjb24sIEFTQ0NPTl9TVFApOyAgICAgLyogMSBzdG9wIGJpdCAqLworCisgICAgaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9QQVJFTkIgKQorICAgICAgICBTRVRfQklUKGNvbiwgQVNDQ09OX1BFTik7ICAgICAgICAgICAvKiBlbmFibGUgcGFyaXR5IGNoZWNraW5nICovICAgIAorICAgIGVsc2UKKyAgICAgICAgQ0xFQVJfQklUKGNvbiwgQVNDQ09OX1BFTik7ICAgICAgICAgLyogZGlzYWJsZSBwYXJpdHkgY2hlY2tpbmcgKi8KKyAgICAKKyAgICBpZiAoIEFTQ19PUFRJT05TICYgQVNDT1BUX1BBUk9ERCApCisgICAgICAgIFNFVF9CSVQoY29uLCBBU0NDT05fT0REKTsgICAgICAgLyogb2RkIHBhcml0eSAqLworICAgIGVsc2UKKyAgICAgICAgQ0xFQVJfQklUKGNvbiwgQVNDQ09OX09ERCk7ICAgICAvKiBldmVuIHBhcml0eSAqLworCisgICAgaWYgKCBBU0NfT1BUSU9OUyAmIEFTQ09QVF9DUkVBRCApCisgICAgICAgIFNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX1NFVFJFTik7IC8qIFJlY2VpdmVyIGVuYWJsZSAqLworCisgICAgcEFzYy0+YXNjX2NvbiB8PSBjb247CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBzZXJpYWxfcHV0YyAoY29uc3QgY2hhciBjKQoreworICAgIHVpbnQgdHhGbCA9IDA7CisKKyAgICBpZiAoYyA9PSAnXG4nKSBzZXJpYWxfcHV0YyAoJ1xyJyk7CisKKyAgICAvKiBjaGVjayBkbyB3ZSBoYXZlIGEgZnJlZSBzcGFjZSBpbiB0aGUgVFggRklGTyAqLworICAgIC8qIGdldCBjdXJyZW50IGZpbGxpbmcgbGV2ZWwgKi8KKyAgICBkbworICAgIHsKKwl0eEZsID0gKCBwQXNjLT5hc2NfZnN0YXQgJiBBU0NGU1RBVF9UWEZGTE1BU0sgKSA+PiBBU0NGU1RBVF9UWEZGTE9GRjsKKyAgICB9CisgICAgd2hpbGUgKCB0eEZsID09IElOQ0FBU0NfVFhGSUZPX0ZVTEwgKTsKKworICAgIHBBc2MtPmFzY190YnVmID0gYzsgLyogd3JpdGUgY2hhciB0byBUcmFuc21pdCBCdWZmZXIgUmVnaXN0ZXIgKi8KKyAgICAvKiBjaGVjayBmb3IgZXJyb3JzICovCisgICAgaWYgKCBwQXNjLT5hc2NfY29uICYgQVNDQ09OX09FICkKKyAgICB7CisgICAgICAgIFNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUk9FKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBzZXJpYWxfcHV0cyAoY29uc3QgY2hhciAqcykKK3sKKyAgICB3aGlsZSAoKnMpCisgICAgeworCXNlcmlhbF9wdXRjICgqcysrKTsKKyAgICB9Cit9CisKK2ludCBzZXJpYWxfZ2V0YyAodm9pZCkKK3sKKyAgICB1bG9uZyBzeW1ib2xfbWFzazsKKyAgICBjaGFyIGM7CisKKyAgICB3aGlsZSAoIXNlcmlhbF90c3RjKCkpOworCisgICAgc3ltYm9sX21hc2sgPQorCSgoQVNDX09QVElPTlMgJiBBU0NPUFRfQ1NJWkUpID09IEFTQ09QVF9DUzcpID8gKDB4N2YpIDogKDB4ZmYpOworICAgIAorICAgIGMgPSAoY2hhcikocEFzYy0+YXNjX3JidWYgJiBzeW1ib2xfbWFzayk7CisKKyAgICByZXR1cm4gYzsKK30KKworaW50IHNlcmlhbF90c3RjICh2b2lkKQoreworICAgIGludCByZXMgPSAxOworCisgICAgaWYgKCAocEFzYy0+YXNjX2ZzdGF0ICYgQVNDRlNUQVRfUlhGRkxNQVNLKSA9PSAwICkKKyAgICB7CisgICAgICAgIHJlcyA9IDA7CisgICAgfQorICAgIGVsc2UgaWYgKCBwQXNjLT5hc2NfY29uICYgQVNDQ09OX0ZFICkKKyAgICB7CisgICAgICAgIFNFVF9CSVQocEFzYy0+YXNjX3doYmNvbiwgQVNDV0hCQ09OX0NMUkZFKTsKKyAgICAgICAgcmVzID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIHBBc2MtPmFzY19jb24gJiBBU0NDT05fUEUgKQorICAgIHsKKyAgICAgICAgU0VUX0JJVChwQXNjLT5hc2Nfd2hiY29uLCBBU0NXSEJDT05fQ0xSUEUpOworICAgICAgICByZXMgPSAwOworICAgIH0KKyAgICBlbHNlIGlmICggcEFzYy0+YXNjX2NvbiAmIEFTQ0NPTl9PRSApCisgICAgeworICAgICAgICBTRVRfQklUKHBBc2MtPmFzY193aGJjb24sIEFTQ1dIQkNPTl9DTFJPRSk7CisgICAgICAgIHJlcyA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKK30KZGlmZiAtLWdpdCBhL2NwdS9taXBzL3NlcmlhbC5oIGIvY3B1L21pcHMvc2VyaWFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2MzM2MAotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9taXBzL3NlcmlhbC5oCkBAIC0wLDAgKzEsMTc4IEBACisvKiBpbmNhQXNjU2lvLmggLSAoSU5DQSkgQVNDIFVBUlQgdHR5IGRyaXZlciBoZWFkZXIgKi8KKworI2lmbmRlZiBfX0lOQ2luY2FBc2NTaW9oCisjZGVmaW5lIF9fSU5DaW5jYUFzY1Npb2gKKworI2luY2x1ZGUgPGFzbS9pbmNhLWlwLmg+CisKKy8qIGNoYW5uZWwgb3BlcmF0aW5nIG1vZGVzICovCisjZGVmaW5lCUFTQ09QVF9DU0laRQkweDAwMDAwMDAzCisjZGVmaW5lCUFTQ09QVF9DUzcJMHgwMDAwMDAwMQorI2RlZmluZQlBU0NPUFRfQ1M4CTB4MDAwMDAwMDIKKyNkZWZpbmUJQVNDT1BUX1BBUkVOQgkweDAwMDAwMDA0CisjZGVmaW5lCUFTQ09QVF9TVE9QQgkweDAwMDAwMDA4CisjZGVmaW5lCUFTQ09QVF9QQVJPREQJMHgwMDAwMDAxMAorI2RlZmluZQlBU0NPUFRfQ1JFQUQJMHgwMDAwMDAyMAorCisjZGVmaW5lIEFTQ19PUFRJT05TCQkoQVNDT1BUX0NSRUFEIHwgQVNDT1BUX0NTOCkKKworLyogQVNDIGlucHV0IHNlbGVjdCAoMCBvciAxKSAqLworI2RlZmluZSBDT05TT0xFX1RUWQkwCisKKy8qIHVzZSBmcmFjdGlvbmFsIGRpdmlkZXIgZm9yIGJhdWRyYXRlIHNldHRpbmdzICovCisjZGVmaW5lIElOQ0FBU0NfVVNFX0ZEVgorCisjaWZkZWYgSU5DQUFTQ19VU0VfRkRWCisgICAjZGVmaW5lIElOQ0FBU0NfRkRWX0xPV19CQVVEUkFURSAgICAgICAgNzEKKyAgICNkZWZpbmUgSU5DQUFTQ19GRFZfSElHSF9CQVVEUkFURSAgICAgICA0NTMgICAKKyNlbmRpZiAvKklOQ0FBU0NfVVNFX0ZEViovCisKKworI2RlZmluZSBJTkNBQVNDX1RYRklGT19GTCAgICAgICAxCisjZGVmaW5lIElOQ0FBU0NfUlhGSUZPX0ZMICAgICAgIDEKKyNkZWZpbmUgSU5DQUFTQ19UWEZJRk9fRlVMTCAgICAgMTYKKworLyogaW50ZXJydXB0IGxpbmVzIG1hc2tzIGZvciB0aGUgQVNDIGRldmljZSBpbnRlcnJ1cHRzKi8KKy8qIGNoYW5nZSB0aGVzZSBtYWNyb3NlcyBpZiBpdCdzIG5lY2Vzc2FyeSAqLworI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX0FMTCAgICAgICAgMHgwMDBGMDAwMCAgLyogYWxsIElSUXMgKi8KKworI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX1RJUiAgICAgICAgICAgIDB4MDAwMTAwMDAgICAgICAvKiBUSVIgLSBUeCAqLworI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX1JJUiAgICAgICAgICAgIDB4MDAwMjAwMDAgICAgICAvKiBSSVIgLSBSeCAqLworI2RlZmluZSBJTkNBQVNDX0lSUV9MSU5FX0VJUiAgICAgICAgICAgIDB4MDAwNDAwMDAgICAgICAvKiBFSVIgLSBFcnIgKi8KKyNkZWZpbmUgSU5DQUFTQ19JUlFfTElORV9UQklSICAgICAgICAgICAweDAwMDgwMDAwICAgICAgLyogVEJJUiAtIFR4IEJ1ZiovCisKKy8qIGludGVycnVwdCBjb250cm9sbGVyIGFjY2VzcyBtYWNyb3MgKi8gICAgCisjZGVmaW5lIEFTQ19JTlRFUlJVUFRTX0VOQUJMRShYKSAgXAorICAgKigodm9sYXRpbGUgdW5zaWduZWQgaW50KikgSU5DQV9JUF9JQ1VfSU0yX0lFUikgfD0gWDsKKyNkZWZpbmUgQVNDX0lOVEVSUlVQVFNfRElTQUJMRShYKSBcCisgICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSBJTkNBX0lQX0lDVV9JTTJfSUVSKSAmPSB+WDsKKyNkZWZpbmUgQVNDX0lOVEVSUlVQVFNfQ0xFQVIoWCkgICBcCisgICAqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQqKSBJTkNBX0lQX0lDVV9JTTJfSVNSKSA9IFg7CisKKy8qIENMQyByZWdpc3RlcidzIGJpdHMgYW5kIGJpdGZpZWxkcyAqLworI2RlZmluZSBBU0NDTENfRElTUiAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBU0NDTENfRElTUyAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBBU0NDTENfUk1DTUFTSyAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBBU0NDTENfUk1DT0ZGU0VUICAgOAorCisvKiBDT04gcmVnaXN0ZXIncyBiaXRzIGFuZCBiaXRmaWVsZHMgKi8KKyNkZWZpbmUgQVNDQ09OX01PREVNQVNLIDB4MDAwNworICAgICNkZWZpbmUgQVNDQ09OX01fOFNZTkMgICAgICAgICAgMHgwCisgICAgI2RlZmluZSBBU0NDT05fTV84QVNZTkMgICAgICAgICAweDEKKyAgICAjZGVmaW5lIEFTQ0NPTl9NXzhJUkRBQVNZTkMgICAgIDB4MgorICAgICNkZWZpbmUgQVNDQ09OX01fN0FTWU5DUEFSICAgICAgMHgzCisgICAgI2RlZmluZSBBU0NDT05fTV85QVNZTkMgICAgICAgICAweDQKKyAgICAjZGVmaW5lIEFTQ0NPTl9NXzhXQUtFVVBBU1lOQyAgIDB4NQorICAgICNkZWZpbmUgQVNDQ09OX01fOEFTWU5DUEFSICAgICAgMHg3CisjZGVmaW5lIEFTQ0NPTl9TVFAgICAgICAweDAwMDgKKyNkZWZpbmUgQVNDQ09OX1JFTiAgICAgIDB4MDAxMAorI2RlZmluZSBBU0NDT05fUEVOICAgICAgMHgwMDIwCisjZGVmaW5lIEFTQ0NPTl9GRU4gICAgICAweDAwNDAKKyNkZWZpbmUgQVNDQ09OX09FTiAgICAgIDB4MDA4MAorI2RlZmluZSBBU0NDT05fUEUgICAgICAgMHgwMTAwCisjZGVmaW5lIEFTQ0NPTl9GRSAgICAgICAweDAyMDAKKyNkZWZpbmUgQVNDQ09OX09FICAgICAgIDB4MDQwMAorI2RlZmluZSBBU0NDT05fRkRFICAgICAgMHgwODAwCisjZGVmaW5lIEFTQ0NPTl9PREQgICAgICAweDEwMDAKKyNkZWZpbmUgQVNDQ09OX0JSUyAgICAgIDB4MjAwMAorI2RlZmluZSBBU0NDT05fTEIgICAgICAgMHg0MDAwCisjZGVmaW5lIEFTQ0NPTl9SICAgICAgICAweDgwMDAKKworLyogV0hCQ09OIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCisjZGVmaW5lIEFTQ1dIQkNPTl9DTFJSRU4gICAgMHgwMDEwCisjZGVmaW5lIEFTQ1dIQkNPTl9TRVRSRU4gICAgMHgwMDIwCisjZGVmaW5lIEFTQ1dIQkNPTl9DTFJQRSAgICAgMHgwMTAwCisjZGVmaW5lIEFTQ1dIQkNPTl9DTFJGRSAgICAgMHgwMjAwCisjZGVmaW5lIEFTQ1dIQkNPTl9DTFJPRSAgICAgMHgwNDAwCisjZGVmaW5lIEFTQ1dIQkNPTl9TRVRQRSAgICAgMHgwODAwCisjZGVmaW5lIEFTQ1dIQkNPTl9TRVRGRSAgICAgMHgxMDAwCisjZGVmaW5lIEFTQ1dIQkNPTl9TRVRPRSAgICAgMHgyMDAwCisKKy8qIEFCQ09OIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCisjZGVmaW5lIEFTQ0FCQ09OX0FCRU4gICAgICAgMHgwMDAxCisjZGVmaW5lIEFTQ0FCQ09OX0FVUkVOICAgICAgMHgwMDAyCisjZGVmaW5lIEFTQ0FCQ09OX0FCU1RFTiAgICAgMHgwMDA0CisjZGVmaW5lIEFTQ0FCQ09OX0FCREVURU4gICAgMHgwMDA4CisjZGVmaW5lIEFTQ0FCQ09OX0ZDREVURU4gICAgMHgwMDEwCisjZGVmaW5lIEFTQ0FCQ09OX0VNTUFTSyAgICAgMHgwMzAwCisgICAgI2RlZmluZSBBU0NBQkNPTl9FTU9GRiAgICAgICAgICA4CisgICAgICAgICNkZWZpbmUgQVNDQUJDT05fRU1fRElTQUIgICAgICAgMHgwCisgICAgICAgICNkZWZpbmUgQVNDQUJDT05fRU1fRFVSQUIgICAgICAgMHgxCisgICAgICAgICNkZWZpbmUgQVNDQUJDT05fRU1fQUxXQVlTICAgICAgMHgyCisjZGVmaW5lIEFTQ0FCQ09OX1RYSU5WICAgICAgMHgwNDAwCisjZGVmaW5lIEFTQ0FCQ09OX1JYSU5WICAgICAgMHgwODAwCisKKy8qIEZEViByZWdpc3RlciBtYXNrLCBvZmZzZXQgYW5kIGJpdGZpZWxkcyovCisjZGVmaW5lIEFTQ0ZEVl9WQUxVRV9NQVNLICAgICAweDAwMDAwMUZGCisKKy8qIFdIQkFCQ09OIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCisjZGVmaW5lIEFTQ1dIQkFCQ09OX1NFVEFCRU4gICAgIDB4MDAwMQorI2RlZmluZSBBU0NXSEJBQkNPTl9DTFJBQkVOICAgICAweDAwMDIKKworLyogQUJTVEFUIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCisjZGVmaW5lIEFTQ0FCU1RBVF9GQ1NERVQgICAgMHgwMDAxCisjZGVmaW5lIEFTQ0FCU1RBVF9GQ0NERVQgICAgMHgwMDAyCisjZGVmaW5lIEFTQ0FCU1RBVF9TQ1NERVQgICAgMHgwMDA0CisjZGVmaW5lIEFTQ0FCU1RBVF9TQ0NERVQgICAgMHgwMDA4CisjZGVmaW5lIEFTQ0FCU1RBVF9ERVRXQUlUICAgMHgwMDEwCisKKy8qIFdIQkFCU1RBVCByZWdpc3RlcidzIGJpdHMgYW5kIGJpdGZpZWxkcyAqLworI2RlZmluZSBBU0NXSEJBQlNUQVRfQ0xSRkNTREVUICAweDAwMDEKKyNkZWZpbmUgQVNDV0hCQUJTVEFUX1NFVEZDU0RFVCAgMHgwMDAyCisjZGVmaW5lIEFTQ1dIQkFCU1RBVF9DTFJGQ0NERVQgIDB4MDAwNAorI2RlZmluZSBBU0NXSEJBQlNUQVRfU0VURkNDREVUICAweDAwMDgKKyNkZWZpbmUgQVNDV0hCQUJTVEFUX0NMUlNDU0RFVCAgMHgwMDEwCisjZGVmaW5lIEFTQ1dIQkFCU1RBVF9TRVRTQ1NERVQgIDB4MDAyMAorI2RlZmluZSBBU0NXSEJBQlNUQVRfU0VUU0NDREVUICAweDAwNDAKKyNkZWZpbmUgQVNDV0hCQUJTVEFUX0NMUlNDQ0RFVCAgMHgwMDgwCisjZGVmaW5lIEFTQ1dIQkFCU1RBVF9DTFJERVRXQUlUIDB4MDEwMAorI2RlZmluZSBBU0NXSEJBQlNUQVRfU0VUREVUV0FJVCAweDAyMDAKKworLyogVFhGQ09OIHJlZ2lzdGVyJ3MgYml0cyBhbmQgYml0ZmllbGRzICovCisjZGVmaW5lIEFTQ1RYRkNPTl9UWEZFTiAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBU0NUWEZDT05fVFhGRkxVICAgICAgICAweDAwMDIKKyNkZWZpbmUgQVNDVFhGQ09OX1RYVE1FTiAgICAgICAgMHgwMDA0CisjZGVmaW5lIEFTQ1RYRkNPTl9UWEZJVExNQVNLICAgIDB4M0YwMAorI2RlZmluZSBBU0NUWEZDT05fVFhGSVRMT0ZGICAgICA4CisKKy8qIFJYRkNPTiByZWdpc3RlcidzIGJpdHMgYW5kIGJpdGZpZWxkcyAqLworI2RlZmluZSBBU0NSWEZDT05fUlhGRU4gICAgICAgICAweDAwMDEKKyNkZWZpbmUgQVNDUlhGQ09OX1JYRkZMVSAgICAgICAgMHgwMDAyCisjZGVmaW5lIEFTQ1JYRkNPTl9SWFRNRU4gICAgICAgIDB4MDAwNAorI2RlZmluZSBBU0NSWEZDT05fUlhGSVRMTUFTSyAgICAweDNGMDAKKyNkZWZpbmUgQVNDUlhGQ09OX1JYRklUTE9GRiAgICAgOAorCisvKiBGU1RBVCByZWdpc3RlcidzIGJpdHMgYW5kIGJpdGZpZWxkcyAqLworI2RlZmluZSBBU0NGU1RBVF9SWEZGTE1BU0sgICAgICAweDAwM0YKKyNkZWZpbmUgQVNDRlNUQVRfVFhGRkxNQVNLICAgICAgMHgzRjAwCisjZGVmaW5lIEFTQ0ZTVEFUX1RYRkZMT0ZGICAgICAgIDgKKworI2RlZmluZSBJTkNBQVNDX1BNVV9FTkFCTEUoQklUKSAqKCh2b2xhdGlsZSB1bG9uZyopMHhCRjEwMjAwMCkgfD0gKDB4MSA8PCBCSVQpOworCit0eXBlZGVmICBzdHJ1Y3QgICAgICAgICAvKiBpbmNhQXNjX3QgKi8KK3sKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfY2xjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDAwMCovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3Bpc2VsOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwMDQqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19yc3ZkMVsyXTsgICAvKiBmb3IgbWFwcGluZyAqLyAgIC8qMHgwMDA4Ki8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfY29uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDAxMCovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX2JnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwMTQqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19mZHY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDE4Ki8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfcG13OyAgICAgICAgLyogbm90IHVzZWQgKi8gICAgICAvKjB4MDAxQyovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3RidWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwMjAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19yYnVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDI0Ki8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfcnN2ZDJbMl07ICAgLyogZm9yIG1hcHBpbmcgKi8gICAvKjB4MDAyOCovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX2FiY29uOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwMzAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY19hYnN0YXQ7ICAgICAvKiBub3QgdXNlZCAqLyAgICAgIC8qMHgwMDM0Ki8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfcnN2ZDNbMl07ICAgLyogZm9yIG1hcHBpbmcgKi8gICAvKjB4MDAzOCovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3J4ZmNvbjsgICAgICAgICAgICAgICAgICAgICAgICAgLyoweDAwNDAqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY190eGZjb247ICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDQ0Ki8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2NfZnN0YXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDA0OCovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3JzdmQ0OyAgICAgIC8qIGZvciBtYXBwaW5nICovICAgLyoweDAwNEMqLworICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgIGFzY193aGJjb247ICAgICAgICAgICAgICAgICAgICAgICAgIC8qMHgwMDUwKi8KKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICBhc2Nfd2hiYWJjb247ICAgICAgICAgICAgICAgICAgICAgICAvKjB4MDA1NCovCisgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAgYXNjX3doYmFic3RhdDsgIC8qIG5vdCB1c2VkICovICAgICAgLyoweDAwNTgqLworCit9IGluY2FBc2NfdDsKKworI2VuZGlmIC8qIF9fSU5DaW5jYUFzY1Npb2ggKi8KKwpkaWZmIC0tZ2l0IGEvY3B1L21pcHMvc3RhcnQuUyBiL2NwdS9taXBzL3N0YXJ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYxMTY1NQotLS0gL2Rldi9udWxsCisrKyBiL2NwdS9taXBzL3N0YXJ0LlMKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiAgU3RhcnR1cCBDb2RlIGZvciBNSVBTMzIgQ1BVLWNvcmUKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDAzCVdvbGZnYW5nIERlbmsgPHdkQGRlbnguZGU+CisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworCisjaW5jbHVkZSA8Y29uZmlnLmg+CisjaW5jbHVkZSA8dmVyc2lvbi5oPgorI2luY2x1ZGUgPGFzbS9yZWdkZWYuaD4KKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworCisjZGVmaW5lIFJWRUNFTlQoZixuKSBcCisgICBiIGY7IG5vcAorI2RlZmluZSBYVkVDRU5UKGYsYmV2KSBcCisgICBiIGYgICAgIDsgICAgICAgICAgIFwKKyAgIGxpIGswLGJldgorCisJLnNldCBub3Jlb3JkZXIKKworCS5nbG9ibCBfc3RhcnQKKwkudGV4dAorX3N0YXJ0OgorCVJWRUNFTlQocmVzZXQsMCkJLyogVS1ib290IGVudHJ5IHBvaW50ICovCisJUlZFQ0VOVChyZXNldCwxKQkvKiBzb2Z0d2FyZSByZWJvb3QgKi8KKyNpZmRlZiBDT05GSUdfSU5DQV9JUAorCS53b3JkIDB4MDAwMDIwQzQJLyogRUJVIGluaXQgY29kZSwgZmV0Y2hlZCBkdXJpbmcgYm9vdGluZyAqLworCS53b3JkIDB4MDAwMDAwMDAgICAgICAgIC8qIHBoYXNlIG9mIHRoZSBmbGFzaCAgICAgICAgICAgICAgICAgICAgKi8KKyNlbHNlCisJUlZFQ0VOVChyb21SZXNlcnZlZCwyKQorI2VuZGlmCisJUlZFQ0VOVChyb21SZXNlcnZlZCwzKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDUpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw2KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNykKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDgpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw5KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTApCisJUlZFQ0VOVChyb21SZXNlcnZlZCwxMSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTMpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwxNCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDE1KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTYpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwxNykgCisJUlZFQ0VOVChyb21SZXNlcnZlZCwxOCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDE5KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMjApCisJUlZFQ0VOVChyb21SZXNlcnZlZCwyMSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDIyKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMjMpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwyNCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDI1KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMjYpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwyNykKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDI4KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMjkpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwzMCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDMxKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMzIpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwzMykKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDM0KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMzUpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwzNikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDM3KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMzgpCisJUlZFQ0VOVChyb21SZXNlcnZlZCwzOSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDQwKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNDEpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw0MikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDQzKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNDQpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw0NSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDQ2KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNDcpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw0OCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDQ5KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNTApCisJUlZFQ0VOVChyb21SZXNlcnZlZCw1MSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDUyKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNTMpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw1NCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDU1KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNTYpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw1NykKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDU4KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNTkpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw2MCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDYxKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNjIpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw2MykgCisJWFZFQ0VOVChyb21FeGNIYW5kbGUsMHgyMDApCS8qIGJmYzAwMjAwOiBSNDAwMCB0bGJtaXNzIHZlY3RvciAqLworCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNjUpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw2NikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDY3KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNjgpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw2OSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDcwKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNzEpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw3MikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDczKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNzQpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw3NSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDc2KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsNzcpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw3OCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDc5KSAKKwlYVkVDRU5UKHJvbUV4Y0hhbmRsZSwweDI4MCkJLyogYmZjMDAyODA6IFI0MDAwIHh0bGJtaXNzIHZlY3RvciAqLworCVJWRUNFTlQocm9tUmVzZXJ2ZWQsODEpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw4MikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDgzKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsODQpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw4NSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDg2KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsODcpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw4OCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDg5KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTApCisJUlZFQ0VOVChyb21SZXNlcnZlZCw5MSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDkyKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTMpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw5NCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDk1KSAKKwlYVkVDRU5UKHJvbUV4Y0hhbmRsZSwweDMwMCkJLyogYmZjMDAzMDA6IFI0MDAwIGNhY2hlIHZlY3RvciAqLworCVJWRUNFTlQocm9tUmVzZXJ2ZWQsOTcpCisJUlZFQ0VOVChyb21SZXNlcnZlZCw5OCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDk5KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTAwKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTAxKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTAyKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTAzKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTA0KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTA1KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTA2KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTA3KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTA4KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTA5KQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTEwKQorCVJWRUNFTlQocm9tUmVzZXJ2ZWQsMTExKQorCVhWRUNFTlQocm9tRXhjSGFuZGxlLDB4MzgwKQkvKiBiZmMwMDM4MDogUjQwMDAgZ2VuZXJhbCB2ZWN0b3IgKi8KKwlSVkVDRU5UKHJvbVJlc2VydmVkLDExMykKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDExNCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDExNSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDExNikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDExNikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDExOCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDExOSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyMCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyMSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyMikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyMykKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyNCkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyNSkKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyNikKKwlSVkVDRU5UKHJvbVJlc2VydmVkLDEyNykKKyAgIAorCS8qIFdlIGhvcGUgdGhlcmUgYXJlIG5vIG1vcmUgcmVzZXJ2ZWQgdmVjdG9ycyEKKwkgKiAxMjggKiA4ID09IDEwMjQgPT0gMHg0MDAKKwkgKiBzbyB0aGlzIGlzIGFkZHJlc3MgUl9WRUMrMHg0MDAgPT0gMHhiZmMwMDQwMAorCSAqLworCS5hbGlnbiA0CityZXNldDoKKworCS8qIENsZWFyIHdhdGNoIHJlZ2lzdGVycy4KKwkgKi8KKwltdGMwCXplcm8sIENQMF9XQVRDSExPCisJbXRjMAl6ZXJvLCBDUDBfV0FUQ0hISQorCisJLyogU1RBVFVTIHJlZ2lzdGVyICovCisJbWZjMAlrMCwgQ1AwX1NUQVRVUworCWxpCWsxLCB+U1QwX0lFCisJYW5kCWswLCBrMQorCW10YzAJazAsIENQMF9TVEFUVVMKKworCS8qIENBVVNFIHJlZ2lzdGVyICovCisJbXRjMAl6ZXJvLCBDUDBfQ0FVU0UKKworCS8qIEluaXQgVGltZXIgKi8KKwltdGMwCXplcm8sIENQMF9DT1VOVAorCW10YzAJemVybywgQ1AwX0NPTVBBUkUKKworCS8qIENPTkZJRzAgcmVnaXN0ZXIgKi8KKwlsaQl0MCwgQ09ORl9DTV9VTkNBQ0hFRAorCW10YzAJdDAsIENQMF9DT05GSUcKKworI2lmZGVmIENPTkZJR19JTkNBX0lQCisJLyogRGlzYWJsZSBJTkNBLUlQIFdhdGNoZG9nLgorCSAqLworCWJhbAlkaXNhYmxlX2luY2FpcF93ZHQKKwlub3AKKyNlbmRpZgorCisJLyogSW5pdGlhbGl6ZSBhbnkgZXh0ZXJuYWwgbWVtb3J5LiAKKwkgKi8KKwliYWwJbWVtc2V0dXAKKwlub3AKKworCS8qIEluaXRpYWxpemUgY2FjaGVzLi4uCisJICovCisJYmFsCW1pcHNfY2FjaGVfcmVzZXQKKwlub3AKKworCS8qIC4uLiBhbmQgZW5hYmxlIHRoZW0uCisJICovCisJbGkJdDAsIENPTkZfQ01fQ0FDSEFCTEVfTk9OQ09IRVJFTlQKKwltdGMwCXQwLCBDUDBfQ09ORklHCisKKworCS8qIFNldCB1cCB0ZW1wb3Jhcnkgc3RhY2suCisJICovCisJbGkJYTAsIENGR19JTklUX1NQX09GRlNFVAorCWJhbAltaXBzX2NhY2hlX2xvY2sKKwlub3AKKworCWxpCXQwLCBDRkdfU0RSQU1fQkFTRSArIENGR19JTklUX1NQX09GRlNFVAorCWxhCXNwLCAwKHQwKQorCisJLyogSW5pdGlhbGl6ZSBHT1QgcG9pbnRlci4KKwkgKi8KKwliYWwJMWYKKwlub3AKKwkud29yZAlfR0xPQkFMX09GRlNFVF9UQUJMRV8gLSAxZiArIDQKKzE6CisJbW92ZQlncCwgcmEKKwlsdwl0MSwgMChyYSkKKwlhZGQJZ3AsIHQxCisJbGEJdDksIGJvYXJkX2luaXRfZgorCWoJdDkKKwlub3AKKworCisvKgorICogdm9pZCByZWxvY2F0ZV9jb2RlIChhZGRyX3NwLCBnZCwgYWRkcl9tb25pKQorICoKKyAqIFRoaXMgImZ1bmN0aW9uIiBkb2VzIG5vdCByZXR1cm4sIGluc3RlYWQgaXQgY29udGludWVzIGluIFJBTQorICogYWZ0ZXIgcmVsb2NhdGluZyB0aGUgbW9uaXRvciBjb2RlLgorICoKKyAqIGEwID0gYWRkcl9zcAorICogYTEgPSBnZAorICogYTIgPSBkZXN0aW5hdGlvbiBhZGRyZXNzCisgKi8KKwkuZ2xvYmwJcmVsb2NhdGVfY29kZQorCS5lbnQJcmVsb2NhdGVfY29kZQorcmVsb2NhdGVfY29kZToKKwltb3ZlCXNwLCBhMAkJLyogU2V0IG5ldyBzdGFjayBwb2ludGVyCQkqLworCisJLyoKKwkgKiBGaXggR09UIHBvaW50ZXI6CisJICoKKwkgKiBOZXcgR09ULVBUUiA9IChvbGQgR09ULVBUUiAtIENGR19NT05JVE9SX0JBU0UpICsgRGVzdGluYXRpb24gQWRkcmVzcworCSAqLworCW1vdmUJdDYsIGdwCisJc3ViCWdwLCBDRkdfTU9OSVRPUl9CQVNFCisJYWRkCWdwLCBhMgkJCS8qIGdwIG5vdyBhZGp1c3RlZAkJKi8KKwlzdWIJdDYsIGdwLCB0NgkJLyogdDYgPC0tIHJlbG9jYXRpb24gb2Zmc2V0CSovCisJCisJbGkJdDAsIENGR19NT05JVE9SX0JBU0UKKwlhZGQJdDIsIHQwLCBDRkdfTU9OSVRPUl9MRU4KKwltb3ZlCXQxLCBhMgorCisJLyoKKwkgKiB0MCA9IHNvdXJjZSBhZGRyZXNzCisJICogdDEgPSB0YXJnZXQgYWRkcmVzcworCSAqIHQyID0gc291cmNlIGVuZCBhZGRyZXNzCisJICovCisxOgorCWx3CXQzLCAwKHQwKQorCXN3CXQzLCAwKHQxKQorCWFkZHUJdDAsIDQKKwlibGUJdDAsIHQyLCAxYgorCWFkZHUJdDEsIDQJCQkvKiBkZWxheSBzbG90CQkJKi8KKworCS8qIElmIGNhY2hlcyB3ZXJlIGVuYWJsZWQsIHdlIHdvdWxkIGhhdmUgdG8gZmx1c2ggdGhlbSBoZXJlLgorCSAqLworCisJLyogSnVtcCB0byB3aGVyZSB3ZSd2ZSByZWxvY2F0ZWQgb3Vyc2VsdmVzLgorCSAqLworCWFkZGkJdDAsIGEyLCBpbl9yYW0gLSBfc3RhcnQKKwlqCXQwCisJbm9wCisKKwkud29yZAl1Ym9vdF9lbmRfZGF0YQorCS53b3JkCXVib290X2VuZAorCS53b3JkCW51bV9nb3RfZW50cmllcworCitpbl9yYW06CisJLyogTm93IHdlIHdhbnQgdG8gdXBkYXRlIEdPVC4KKwkgKi8KKwlsdwl0MywgLTQodDApCS8qIHQzIDwtLSBudW1fZ290X2VudHJpZXMJKi8KKwlhZGRpCXQ0LCBncCwgOAkvKiBTa2lwcGluZyBmaXJzdCB0d28gZW50cmllcy4JKi8KKwlsaQl0MiwgMgorMToKKwlsdwl0MSwgMCh0NCkKKwliZXF6CXQxLCAyZgorCWFkZAl0MSwgdDYKKwlzdwl0MSwgMCh0NCkKKzI6CisJYWRkaQl0MiwgMQorCWJsdAl0MiwgdDMsIDFiCisJYWRkaQl0NCwgNAkJLyogZGVsYXkgc2xvdAkJCSovCisKKwkvKiBDbGVhciBCU1MuCisJICovCisJbHcJdDEsIC0xMih0MCkJLyogdDEgPC0tIHVib290X2VuZF9kYXRhCSovCisJbHcJdDIsIC04KHQwKQkvKiB0MiA8LS0gdWJvb3RfZW5kCQkqLworCWFkZAl0MSwgdDYJCS8qIGFkanVzdCBwb2ludGVycwkJKi8KKwlhZGQJdDIsIHQ2CisKKwlzdWIJdDEsIDQKKzE6CWFkZGkJdDEsIDQKKwlibHRsCXQxLCB0MiwgMWIKKwlzdwl6ZXJvLCAwKHQxKQkvKiBkZWxheSBzbG90CQkJKi8KKwkKKwltb3ZlCWEwLCBhMQorCWxhCXQ5LCBib2FyZF9pbml0X3IKKwlqCXQ5CisJbW92ZQlhMSwgYTIJCS8qIGRlbGF5IHNsb3QJCQkqLworCisJLmVuZAlyZWxvY2F0ZV9jb2RlCisJCisKKworCS8qIEV4Y2VwdGlvbiBoYW5kbGVycy4KKwkgKi8KK3JvbVJlc2VydmVkOgorCWIgcm9tUmVzZXJ2ZWQKKworcm9tRXhjSGFuZGxlOgorCWIgcm9tRXhjSGFuZGxlCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW5jYS1pcC5oIGIvaW5jbHVkZS9hc20tbWlwcy9pbmNhLWlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJhY2IzMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaW5jYS1pcC5oCkBAIC0wLDAgKzEsMjQzMSBAQAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyLCBJbmZpbmVvbiBUZWNobm9sb2dpZXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gV2FycmFudHkKKyAgIEJlY2F1c2UgdGhlIHByb2dyYW0gaXMgbGljZW5zZWQgZnJlZSBvZiBjaGFyZ2UsIHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciAKKyAgIHRoZSBwcm9ncmFtLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gIEV4Y2VwdCB3aGVuICAgICAKKyAgIG90aGVyd2lzZSBzdGF0ZWQgaW4gd3JpdGluZyB0aGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kL29yIG90aGVyIHBhcnRpZXMgICAKKyAgIHByb3ZpZGUgdGhlIHByb2dyYW0gImFzIGlzIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgICAgICAgICAKKyAgIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgICAgICAgICAKKyAgIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVGhlICAKKyAgIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgcHJvZ3JhbSBpcyB3aXRoICAgICAKKyAgIHlvdS4gIHNob3VsZCB0aGUgcHJvZ3JhbSBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhc3N1bWUgdGhlIGNvc3Qgb2YgYWxsICAgICAKKyAgIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIEluIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyAgICAKKyAgIHdpbGwgYW55IGNvcHlyaWdodCBob2xkZXIsIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5IG1vZGlmeSBhbmQvb3IgICAgICAKKyAgIHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSBhcyBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yICAgICAgICAKKyAgIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsICAgICAKKyAgIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBwcm9ncmFtICAgICAgICAgICAKKyAgIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGxvc3Mgb2YgZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkICAgICAgICAKKyAgIGluYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgdGhpcmQgcGFydGllcyBvciBhIGZhaWx1cmUgb2YgICAKKyAgIHRoZSBwcm9ncmFtIHRvIG9wZXJhdGUgd2l0aCBhbnkgb3RoZXIgcHJvZ3JhbXMpLCBldmVuIGlmIHN1Y2ggaG9sZGVyIG9yICAKKyAgIG90aGVyIHBhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJCQorICAgICAgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTW9kdWxlICAgICAgOiAgV0RUIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICgweEI4MDAwMDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAorCisgICAgICAKKy8qKipSZXNldCBTdGF0dXMgUmVnaXN0ZXIgUG93ZXIgT24qKiovIAorI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfU1IgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDAxNCkpCisgICAgICAKKy8qKipSZXNldCBSZXF1ZXN0IFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1NXQk9PVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBJTkNBX0lQX1dEVF9SU1RfUkVRX1NXQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUlBIWSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkhTUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkZQSSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkVYVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkRTUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlNUX1JFUV9SUkNQVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKk5NSSBTdGF0dXMgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1dEVF9OTUlTUiAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDAyQykpCisjZGVmaW5lIElOQ0FfSVBfV0RUX05NSVNSX05NSVdEVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfV0RUX05NSVNSX05NSVBMTCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfV0RUX05NSVNSX05NSUVYVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipNYW51ZmFjdHVyZXIgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1dEVF9NQU5JRCAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDA3MCkpCisjZGVmaW5lIElOQ0FfSVBfV0RUX01BTklEX01BTlVGICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAxMSkgLSAxKSAmICh2YWx1ZSkpIDw8IDUpCisgICAgICAKKy8qKipDaGlwIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9XRFRfQ0hJUElEICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwNzQpKQorI2RlZmluZSBJTkNBX0lQX1dEVF9DSElQSURfVkVSU0lPTiAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKKyNkZWZpbmUgSU5DQV9JUF9XRFRfQ0hJUElEX1BBUlRfTlVNQkVSICh2YWx1ZSkgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX1dEVF9DSElQSURfTUFOSUQgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDExKSAtIDEpICYgKHZhbHVlKSkgPDwgMSkKKyAgICAgIAorLyoqKlJlZGVzaWduIFRyYWNpbmcgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1dEVF9SVElEICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDA3OCkpCisjZGVmaW5lIElOQ0FfSVBfV0RUX1JUSURfTEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9XRFRfUlRJRF9SSVggKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipXYXRjaGRvZyBUaW1lciBDb250cm9sIFJlZ2lzdGVyIDAqKiovIAorI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfQ09OMCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1dEVCsgMHgwMDIwKSkKKyAgICAgIAorLyoqKldhdGNoZG9nIFRpbWVyIENvbnRyb2wgUmVnaXN0ZXIgMSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9DT04xICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfV0RUKyAweDAwMjQpKQorI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfQ09OMV9XRFREUiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX0NPTjFfV0RUSVIgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisgICAgICAKKy8qKipXYXRjaGRvZyBUaW1lciBTdGF0dXMgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfU1IgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9XRFQrIDB4MDAyOCkpCisjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUl9XRFRUSU0gKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVFBSICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfU1JfV0RUVE8gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUl9XRFREUyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9XRFRfV0RUX1NSX1dEVElTICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1dEVF9XRFRfU1JfV0RUT0UgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfV0RUX1dEVF9TUl9XRFRBRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkJCQorICAgICAgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTW9kdWxlICAgICAgOiAgQ0dVIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9DR1UgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA3MDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAorCisgICAgICAKKy8qKipDR1UgUExMMSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFDUiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQ0dVKyAweDAwMDgpKQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMUNSX1NXUlNUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFDUl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMUNSX05ESVYgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxQ1JfTURJViAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqQ0dVIFBMTDAgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwQ1IgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0NHVSsgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBDUl9TV1JTVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwQ1JfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBDUl9ORElWICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMENSX01ESVYgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkNHVSBQTEwwIFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwwU1IgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0NHVSsgMHgwMDA0KSkKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDBTUl9MT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMFNSX1JDRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMFNSX1BMTEJZUCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQorICAgICAgCisvKioqQ0dVIFBMTDEgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX1BMTDFTUiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQ0dVKyAweDAwMEMpKQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfUExMMVNSX0xPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxU1JfUkNGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9QTEwxU1JfUExMQllQICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisgICAgICAKKy8qKipDR1UgRGl2aWRlciBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX0RJVkNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQ0dVKyAweDAwMTApKQorICAgICAgCisvKioqQ0dVIE11bHRpcGxleGVyIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfTVVYQ1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9DR1UrIDB4MDAxNCkpCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9NVVhDUl9TV1JTVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9NVVhDUl9NVVhJSSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX01VWENSX01VWEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkNHVSBGcmFjdGlvbmFsIERpdmlkZXIgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQ0dVX0NHVV9GRENSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQ0dVKyAweDAwMTgpKQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfRkRDUl9GREVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX0NHVV9DR1VfRkRDUl9JTlRFR0VSICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMTIpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9DR1VfQ0dVX0ZEQ1JfRlJBQ1RJT04gKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQkJCisgICAgICAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBNb2R1bGUgICAgICA6ICBQTVUgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1BNVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkYxMDIwMDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCisKKyAgICAgIAorLyoqKlBNIEdsb2JhbCBFbmFibGUgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU4gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9QTVUrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4xNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjEzICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4xMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU45ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU42ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VONSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9HRU5fRU4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fR0VOX0VOMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0dFTl9FTjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqUE0gUG93ZXIgRG93biBFbmFibGUgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9QTVUrIDB4MDAwOCkpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4xNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjE1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4xMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU43ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VONCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1BERU5fRU4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fUERFTl9FTjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9QREVOX0VOMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipQTSBXYWtlLVVwIGZyb20gUG93ZXIgRG93biBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX1dVUCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BNVSsgMHgwMDEwKSkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDE2ICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDE1ICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDEzICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDEyICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDggICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fV1VQX1dVUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKlBNIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9DUiAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9QTVUrIDB4MDAxNCkpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0NSX0FXRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfUE1VX1BNX0NSX1NXUlNUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9QTVVfUE1fQ1JfU1dDUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1BNVV9QTV9DUl9DUkQgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIEJDVSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfQkNVICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDEwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqQkNVIENvbnRyb2wgUmVnaXN0ZXIgKDAwMTBIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9DT04gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JDVSsgMHgwMDEwKSkKKyNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0NPTl9TUEMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX1NQRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX1BTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX0RCRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfQ09OX1RPVVQgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipCQ1UgRXJyb3IgQ29udHJvbCBDYXB0dXJlIFJlZ2lzdGVyICgwMDIwSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JDVSsgMHgwMDIwKSkKKyNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fVEFHICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKKyNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fUkROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCisjZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQ09OX1dSTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIyKQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9TVk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMSkKKyNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fQUNLICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAxOSkKKyNkZWZpbmUgSU5DQV9JUF9CQ1VfQkNVX0VDT05fQUJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQ09OX1JEWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9UT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9FUlJDTlQgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUNPTl9PUEMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI4KQorICAgICAgCisvKioqQkNVIEVycm9yIEFkZHJlc3MgQ2FwdHVyZSBSZWdpc3RlciAoMDAyNCBIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FQUREICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQkNVKyAweDAwMjQpKQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRUFERF9GUElBRFIKKyAgICAgIAorLyoqKkJDVSBFcnJvciBEYXRhIENhcHR1cmUgUmVnaXN0ZXIgKDAwMjhIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfQkNVX0JDVV9FREFUICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQkNVKyAweDAwMjgpKQorI2RlZmluZSBJTkNBX0lQX0JDVV9CQ1VfRURBVF9GUElEQVQJCQorICAgICAgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTW9kdWxlICAgICAgOiAgTUJDIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9NQkMgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTAzMDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAorCisgICAgICAKKy8qKipNYWlsYm94IENQVSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NGRyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwODApKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ0ZHX1NXQVAgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NGR19SRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ0ZHX0ZXSUQgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NGR19TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipNYWlsYm94IENQVSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwODQpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVNSX0IzREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JU1JfQjJEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9CMUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9CMEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNykKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lTUl9EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipNYWlsYm94IENQVSBNYXNrIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwODgpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLX0IzREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0tfQjJEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19CMUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19CMEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19XRFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNykKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TS19EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipNYWlsYm94IENQVSBNYXNrIDAxIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzAxICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwOEMpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMDFfQjNEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzAxX0IyREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0swMV9CMUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzAxX0IwRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI4KQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMDFfV0RUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjcpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0swMV9EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipNYWlsYm94IENQVSBNYXNrIDEwIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzEwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwOTApKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMTBfQjNEQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzEwX0IyREEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sxMF9CMUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX01TSzEwX0IwRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI4KQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfTVNLMTBfV0RUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjcpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19NU0sxMF9EUzI2MCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyNykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipNYWlsYm94IENQVSBTaG9ydCBDb21tYW5kIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NNRCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwOTQpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ01EX0NTMjcwICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDI4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKk1haWxib3ggQ1BVIElucHV0IERhdGEgb2YgQnVmZmVyIDAqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUQwICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JRDBfSU5EQVRBCisgICAgICAKKy8qKipNYWlsYm94IENQVSBJbnB1dCBEYXRhIG9mIEJ1ZmZlciAxKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lEMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMjApKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUQxX0lOREFUQQorICAgICAgCisvKioqTWFpbGJveCBDUFUgT3V0cHV0IERhdGEgb2YgQnVmZmVyIDIqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0QyICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA0MCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PRDJfT1VUREFUQQorICAgICAgCisvKioqTWFpbGJveCBDUFUgT3V0cHV0IERhdGEgb2YgQnVmZmVyIDMqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0QzICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA2MCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PRDNfT1VUREFUQQorICAgICAgCisvKioqTWFpbGJveCBDUFUgQ29udHJvbCBSZWdpc3RlciBvZiBCdWZmZXIgMCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DUjAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDA0KSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMF9SRFlBQlRGTFMgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipNYWlsYm94IENQVSBDb250cm9sIFJlZ2lzdGVyIG9mIEJ1ZmZlciAxKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMjQpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IxX1JEWUFCVEZMUyAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKk1haWxib3ggQ1BVIENvbnRyb2wgUmVnaXN0ZXIgb2YgQnVmZmVyIDIqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfQ1IyICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA0NCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DUjJfUkRZQUJURkxTICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqTWFpbGJveCBDUFUgQ29udHJvbCBSZWdpc3RlciBvZiBCdWZmZXIgMyoqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19DUjMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDY0KSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0NSM19SRFlBQlRGTFMgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipNYWlsYm94IENQVSBGcmVlIFNwYWNlIG9mIEJ1ZmZlciAwKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMDgpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMwX0ZTCisgICAgICAKKy8qKipNYWlsYm94IENQVSBGcmVlIFNwYWNlIG9mIEJ1ZmZlciAxKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMSAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMjgpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMxX0ZTCisgICAgICAKKy8qKipNYWlsYm94IENQVSBGcmVlIFNwYWNlIG9mIEJ1ZmZlciAyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNDgpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMyX0ZTCisgICAgICAKKy8qKipNYWlsYm94IENQVSBGcmVlIFNwYWNlIG9mIEJ1ZmZlciAzKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0ZTMyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNjgpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfRlMzX0ZTCisgICAgICAKKy8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19EQTAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDBDKSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMF9EQQorICAgICAgCisvKioqTWFpbGJveCBDUFUgRGF0YSBBdmFpbGFibGUgaW4gQnVmZmVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREExICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAyQykpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19EQTFfREEKKyAgICAgIAorLyoqKk1haWxib3ggQ1BVIERhdGEgQXZhaWxhYmxlIGluIEJ1ZmZlciAyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBMiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNEMpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfREEyX0RBCisgICAgICAKKy8qKipNYWlsYm94IENQVSBEYXRhIEF2YWlsYWJsZSBpbiBCdWZmZXIgMyoqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19EQTMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDZDKSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0RBM19EQQorICAgICAgCisvKioqTWFpbGJveCBDUFUgSW5wdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDEwKSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lBQlMwX0lBQlMKKyAgICAgIAorLyoqKk1haWxib3ggQ1BVIElucHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAzMCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMV9JQUJTCisgICAgICAKKy8qKipNYWlsYm94IENQVSBJbnB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lBQlMyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNTApKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSUFCUzJfSUFCUworICAgICAgCisvKioqTWFpbGJveCBDUFUgSW5wdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMyoqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JQUJTMyAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDcwKSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lBQlMzX0lBQlMKKyAgICAgIAorLyoqKk1haWxib3ggQ1BVIElucHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAwKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwMTQpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDBfSVRNUAorICAgICAgCisvKioqTWFpbGJveCBDUFUgSW5wdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAzNCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JVE1QMV9JVE1QCisgICAgICAKKy8qKipNYWlsYm94IENQVSBJbnB1dCBUZW1wb3JhcnkgUG9pbnRlciBvZiBCdWZmZXIgMioqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19JVE1QMiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDU0KSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAyX0lUTVAKKyAgICAgIAorLyoqKk1haWxib3ggQ1BVIElucHV0IFRlbXBvcmFyeSBQb2ludGVyIG9mIEJ1ZmZlciAzKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX0lUTVAzICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNzQpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfSVRNUDNfSVRNUAorICAgICAgCisvKioqTWFpbGJveCBDUFUgT3V0cHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDAqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAxOCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTMF9PQUJTCisgICAgICAKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgQWJzb2x1dGUgUG9pbnRlciBvZiBCdWZmZXIgMSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMDM4KSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMxX09BQlMKKyAgICAgIAorLyoqKk1haWxib3ggQ1BVIE91dHB1dCBBYnNvbHV0ZSBQb2ludGVyIG9mIEJ1ZmZlciAyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9NQkNfTUJDX09BQlMyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfTUJDKyAweDAwNTgpKQorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzJfT0FCUworICAgICAgCisvKioqTWFpbGJveCBDUFUgT3V0cHV0IEFic29sdXRlIFBvaW50ZXIgb2YgQnVmZmVyIDMqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT0FCUzMgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA3OCkpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PQUJTM19PQUJTCisgICAgICAKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDAqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAxQykpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PVE1QMF9PVE1QCisgICAgICAKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDAzQykpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PVE1QMV9PVE1QCisgICAgICAKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDIqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA1QykpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PVE1QMl9PVE1QCisgICAgICAKKy8qKipNYWlsYm94IENQVSBPdXRwdXQgVGVtcG9yYXJ5IFBvaW50ZXIgb2YgQnVmZmVyIDMqKiovIAorI2RlZmluZSBJTkNBX0lQX01CQ19NQkNfT1RNUDMgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9NQkMrIDB4MDA3QykpCisjZGVmaW5lIElOQ0FfSVBfTUJDX01CQ19PVE1QM19PVE1QCisgICAgICAKKy8qKipEU1AgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMEEwKSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfRENUUkxfQkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBJTkNBX0lQX01CQ19EQ1RSTF9CTU9EICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMX0lETCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RDVFJMX1JFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQorICAgICAgCisvKioqRFNQIFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RTVEEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMEE0KSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfRFNUQV9JRExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RTVEFfUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorICAgICAgCisvKioqRFNQIFRlc3QgMSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RUU1QxICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX01CQysgMHgwMEE4KSkKKyNkZWZpbmUgSU5DQV9JUF9NQkNfRFRTVDFfQUJPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIElOQ0FfSVBfTUJDX0RUU1QxX0hXRjMyICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX01CQ19EVFNUMV9IV0Y0TSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9NQkNfRFRTVDFfSFdGT1AgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIFN3aXRjaCByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwNDAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqVW5rbm93biBEZXN0aW5hdGlvbiBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1QgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVU5fREVTVF9DQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfTEIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX1BCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVU5fREVTVF9DTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfTE0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX1BNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVU5fREVTVF9DVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1VOX0RFU1RfTFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9VTl9ERVNUX1BVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKlZMQU4gQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1ZMQU5fQ1RSTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDA0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1NMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfVkxBTl9DVFJMX1ZBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKlBDIFZMQU4gQ29uZmlndXJhdGlvbiBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1ZMQU4gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDA4KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfVkxBTl9QUkkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19WTEFOX1ZMQU5fSUQgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipMQU4gVkxBTiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1ZMQU4gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAwQykpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9WTEFOX1BSSSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9WTEFOX1ZMQU5fSUQgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipDUFUgVkxBTiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1ZMQU4gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAxMCkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9WTEFOX1BSSSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9WTEFOX1ZMQU5fSUQgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipQcmlvcml0eSBDb1MgTWFwcGluZyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1MgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDE0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvU19QNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1NfUDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TX1A1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvU19QNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1NfUDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QUklfQ29TX1AyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFJJX0NvU19QMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BSSV9Db1NfUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqU3Bhbm5pbmcgVHJlZSBQb3J0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1NUX1BUICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDE4KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfU1RfUFRfQ1BTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9TVF9QVF9MUFMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1NUX1BUX1BQUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkFSTCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMUMpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0NIQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfQ0hDTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9DSENQICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0NDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfQ0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9DUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0NHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfTVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9TUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX0FUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfQUdFX1RJQ0tfU0VMICh2YWx1ZSkgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9BUkxfQ1RMX01BRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0FSTF9DVExfRU5MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQVJMX0NUTF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTkpIC0gMSkgJiAodmFsdWUpKSA8PCAxMykKKyAgICAgIAorLyoqKkNQVSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9BQ1RMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMjApKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfQUNUTF9SQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfQUNUTF9SVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfQUNUTF9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMjEpIC0gMSkgJiAodmFsdWUpKSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfQUNUTF9BVkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfQUNUTF9JRFggKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipDUFUgQWNjZXNzIERhdGEgUmVnaXN0ZXIgMSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RBVEExICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDI0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfREFUQTFfRGF0YSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDI0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkNQVSBBY2Nlc3MgRGF0YSBSZWdpc3RlciAyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfREFUQTIgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAwMjgpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EQVRBMl9EYXRhCisgICAgICAKKy8qKipDUFUgUG9ydCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVEwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAyQykpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9QQ1RMX0RBX1BPUlRTICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfREFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9QQ1RMX01BX1NUQVRFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9NQU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfUENUTF9NQV9Qb3J0cyAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfTUFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfRU1MICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfRURMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1BDVExfUmVzICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDE4KSAtIDEpICYgKHZhbHVlKSkgPDwgMTQpCisgICAgICAKKy8qKipEU0NQIENvUyBNYXBwaW5nIFJlZ2lzdGVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EU0NQX0NPUzEgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAzMCkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RTQ1BfQ09TMV9EU0NQCisgICAgICAKKy8qKipEU0NQIENvUyBNYXBwaW5nIFJlZ2lzdGVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9EU0NQX0NPUzIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDAzNCkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0RTQ1BfQ09TMl9EU0NQCisgICAgICAKKy8qKipQQyBXRlEgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dGUV9DVEwgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDgwKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV0ZRX0NUTF9QMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dGUV9DVExfUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XRlFfQ1RMX1dUMSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV0ZRX0NUTF9XVDAgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dGUV9DVExfU0NIX1NFTCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqUEMgVFggQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1RYX0NUTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMDg0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfVFhfQ1RMX0VMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1RYX0NUTF9FRVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqTEFOIFdGUSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dGUV9DVEwgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAxMDApKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV0ZRX0NUTF9QMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XRlFfQ1RMX1AwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dGUV9DVExfV1QxICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV0ZRX0NUTF9XVDAgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XRlFfQ1RMX1NDSF9TRUwgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkxBTiBUWCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1RYX0NUTCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAxMDQpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fVFhfQ1RMX0VMUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9UWF9DVExfRUVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkNQVSBXRlEgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XRlFfQ1RMICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMTgwKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dGUV9DVExfUDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV0ZRX0NUTF9QMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XRlFfQ1RMX1dUMSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dGUV9DVExfV1QwICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV0ZRX0NUTF9TQ0hfU0VMICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipQTSBQQyBSWCBXYXRlcm1hcmsgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QQ19XTSAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDIwMCkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dNX1JYX1dNMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dNX1JYX1dNMiAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BDX1dNX1JYX1dNMyAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUENfV01fUlhfV000ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqUE0gTEFOIFJYIFdhdGVybWFyayBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XTSAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjA0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTEFOX1dNX1JYX1dNMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0xBTl9XTV9SWF9XTTIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV01fUlhfV00zICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9MQU5fV01fUlhfV000ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqUE0gQ1BVIFJYIFdhdGVybWFyayBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XTSAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjA4KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ1BVX1dNX1JYX1dNMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NQVV9XTV9SWF9XTTIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV01fUlhfV00zICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DUFVfV01fUlhfV000ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqUE0gQ1BVIFJYIFdhdGVybWFyayBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0dCTF9XTSAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjBDKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfR0JMX1dNX0dCTF9SWF9XTTEgKHZhbHVlKSAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0dCTF9XTV9HQkxfUlhfV00yICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9HQkxfV01fR0JMX1JYX1dNMyAodmFsdWUpICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9HQkxfV01fR0JMX1JYX1dNNCAodmFsdWUpICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqUE0gQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNX0NUTCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjEwKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1fQ1RMX0dETiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNX0NUTF9DRE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTV9DVExfTEROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1fQ1RMX1BETiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipQTSBIZWFkZXIgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjgwKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19IRF9DVExfUkwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX1JDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX0NNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX0NWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfSERfQ1RMX1RZUEVfTEVOICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19IRF9DVExfVEFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19IRF9DVExfQUREICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKlBNIFNvdXJjZSBBZGRyZXNzIFJlZ2lzdGVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1NBMSAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjg0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19TQTFfU0FfNDdfMzIgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqUE0gU291cmNlIEFkZHJlc3MgUmVnaXN0ZXIgMioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfU0EyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyODgpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1NBMl9TQV8zMV8wCisgICAgICAKKy8qKipQTSBEZXN0IEFkZHJlc3MgUmVnaXN0ZXIgMSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfREExICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyOEMpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0RBMV9EQV80N18zMiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipQTSBEZXN0IEFkZHJlc3MgUmVnaXN0ZXIgMioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfREEyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyOTApKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX0RBMl9EQV8zMV8wCisgICAgICAKKy8qKipQTSBWTEFOIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19WTEFOICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyOTQpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1ZMQU5fUFJJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMykKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19WTEFOX0NGSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1ZMQU5fVkxBTklEICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDEyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlBNIFRYIElQRyBDb3VudGVyIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19UWF9JUEcgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAyOTgpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QTUFDX1RYX0lQR19JUEdDTlQgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipQTSBSWCBJUEcgQ291bnRlciBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BNQUNfUlhfSVBHICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMjlDKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUE1BQ19SWF9JUEdfSVBHQ05UICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqTWlycm9yIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTVJSICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDAzMDApKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlJfTVJSICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlJfRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlJfRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlJfRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlJfSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlJfSUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NUlJfSVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqUGFja2V0IExlbmd0aCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX1BLVF9MRU4gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwMzA0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUEtUX0xFTl9BREQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUEtUX0xFTl9NQVhfUEtUX0xFTiAodmFsdWUpICAgICAgICAoKCgoIDEgPDwgMTEpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqTURJTyBBY2Nlc3MgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0FDQyAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwNDgwKSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0NfUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0NfUlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19BQ0NfUEhZX0FERFIgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgNSkgLSAxKSAmICh2YWx1ZSkpIDw8IDIxKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0FDQ19SRUdfQUREUiAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCA1KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQUNDX1BIWV9EQVRBICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkV0aGVybmV0IFBIWSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0VQSFkgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1N3aXRjaCsgMHgwNDg0KSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9TTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0VQSFlfU1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9FUEhZX0xMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9MUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0VQSFlfREwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9FUEhZX0RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfRVBIWV9QTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0VQSFlfUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqUGF1c2UgV3JpdGUgRW5hYmxlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfUFdSX0VOICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU3dpdGNoKyAweDA0ODgpKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QV1JfRU5fUEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9QV1JfRU5fUFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqTURJTyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkcgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDQ4QykpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX01EUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX1BIWV9MQU5fQUREUiAodmFsdWUpICAgICAgICgoKCggMSA8PCA1KSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkdfUEhZX1BDX0FERFIgKHZhbHVlKSAgICAgICAgKCgoKCAxIDw8IDUpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0NGR19VRVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9NRElPX0NGR19QUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX01ESU9fQ0ZHX1BUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfTURJT19DRkdfVU1NICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkNsb2NrIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DTEtfQ0ZHICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Td2l0Y2grIDB4MDUwMCkpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkdfQVJMX0lEICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9Td2l0Y2hfQ0xLX0NGR19DUFVfSUQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1N3aXRjaF9DTEtfQ0ZHX0xBTl9JRCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkdfUENfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfU3dpdGNoX0NMS19DRkdfU0VfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIFNTQzEgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfU1NDMSAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDUwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqQ29udHJvbCBSZWdpc3RlciAoUHJvZ3JhbW1pbmcgTW9kZSkqKiovIAorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkcgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDEwKSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX1BSR19NUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfQVJFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX0JFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX1BSR19SRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9QUkdfVEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX0xCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX1BPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX1BIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX0hCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fUFJHX0JNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqU0NDIENvbnRyb2wgUmVnaXN0ZXIgKE9wZXJhdGluZyBNb2RlKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUiAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fT1BSX01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9CU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NDQ19DT05fT1BSX0JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TQ0NfQ09OX09QUl9QRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFJfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFJfVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU0NDX0NPTl9PUFJfQkMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipTU0MgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfV0hCQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwNDApKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9TRVRCRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfV0hCQ09OX1NFVFBFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19XSEJDT05fU0VUUkUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9TRVRURSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfV0hCQ09OX0NMUkJFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19XSEJDT05fQ0xSUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1dIQkNPTl9DTFJSRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19XSEJDT05fQ0xSVEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisgICAgICAKKy8qKipTU0MgQmF1ZHJhdGUgVGltZXIgUmVsb2FkIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19CUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAxNCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfQlJfQlJfVkFMVUUgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqU1NDIFRyYW5zbWl0dGVyIEJ1ZmZlciBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVEIgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MxKyAweDAwMjApKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1RCX1RCX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlNTQyBSZWNlaXZlciBCdWZmZXIgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDI0KSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19SQl9SQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipTU0MgUmVjZWl2ZSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JYRkNPTiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMSsgMHgwMDMwKSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19SWEZDT05fUlhGSVRMICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JYRkNPTl9SWFRNRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX1JYRkNPTl9SWEZMVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19SWEZDT05fUlhGRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipTU0MgVHJhbnNtaXQgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UWEZDT04gICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAzNCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVFhGQ09OX1JYRklUTCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UWEZDT05fVFhUTUVOICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19UWEZDT05fVFhGTFUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfVFhGQ09OX1RYRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqU1NDIEZJRk8gU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19GU1RBVCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAzOCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfRlNUQVRfVFhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0ZTVEFUX1JYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlNTQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19DTEMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzErIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMV9TU0NfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MxX1NTQ19DTENfRElTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX1NTQzFfU1NDX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIFNTQzIgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfU1NDMiAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDYwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqQ29udHJvbCBSZWdpc3RlciAoUHJvZ3JhbW1pbmcgTW9kZSkqKiovIAorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkcgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDEwKSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19NUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfQVJFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX0JFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX1BSR19SRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9QUkdfVEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX0xCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX1BPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX1BIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX0hCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fUFJHX0JNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqU0NDIENvbnRyb2wgUmVnaXN0ZXIgKE9wZXJhdGluZyBNb2RlKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX09QUiAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fT1BSX01TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX09QUl9CU1kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NDQ19DT05fT1BSX0JFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TQ0NfQ09OX09QUl9QRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfUkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU0NDX0NPTl9PUFJfQkMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipTU0MgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfV0hCQ09OICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwNDApKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1dIQkNPTl9TRVRCRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfV0hCQ09OX1NFVFBFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fU0VUUkUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1dIQkNPTl9TRVRURSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfV0hCQ09OX0NMUkJFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fQ0xSUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1dIQkNPTl9DTFJSRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19XSEJDT05fQ0xSVEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisgICAgICAKKy8qKipTU0MgQmF1ZHJhdGUgVGltZXIgUmVsb2FkIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19CUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAxNCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfQlJfQlJfVkFMVUUgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqU1NDIFRyYW5zbWl0dGVyIEJ1ZmZlciBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVEIgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TU0MyKyAweDAwMjApKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1RCX1RCX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlNTQyBSZWNlaXZlciBCdWZmZXIgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JCICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDI0KSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19SQl9SQl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipTU0MgUmVjZWl2ZSBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTiAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU1NDMisgMHgwMDMwKSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19SWEZDT05fUlhGSVRMICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTl9SWFRNRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX1JYRkNPTl9SWEZMVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19SWEZDT05fUlhGRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipTU0MgVHJhbnNtaXQgRklGTyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19UWEZDT04gICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAzNCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OX1JYRklUTCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19UWEZDT05fVFhUTUVOICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19UWEZDT05fVFhGTFUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfVFhGQ09OX1RYRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqU1NDIEZJRk8gU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19GU1RBVCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAzOCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfRlNUQVRfVFhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0ZTVEFUX1JYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlNTQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19DTEMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NTQzIrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfU1NDMl9TU0NfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TU0MyX1NTQ19DTENfRElTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX1NTQzJfU1NDX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIEVCVSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfRUJVICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDIwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqRUJVIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ0xDICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DTENfRElTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ0xDX0RJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkVCVSBHbG9iYWwgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DT04gICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDEwKSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NPTl9EVEFDUyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ09OX0RUQVJXICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DT05fVE9VVEMgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQ09OX0FSQk1PREUgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0NPTl9BUkJTWU5DICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9DT05fMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisgICAgICAKKy8qKipFQlUgQWRkcmVzcyBTZWxlY3QgUmVnaXN0ZXIgMCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwwICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDIwKSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDBfQkFTRSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIwKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwwX01BU0sgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDBfTUlSUk9SRSAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMF9SRUdFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkVCVSBBZGRyZXNzIFNlbGVjdCBSZWdpc3RlciAxKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDEgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRUJVKyAweDAwMjQpKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMV9CQVNFICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMjApIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDFfTUFTSyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMV9NSVJST1JFICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwxX1JFR0VOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqRUJVIEFkZHJlc3MgU2VsZWN0IFJlZ2lzdGVyIDIqKiovIAorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMiAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDAyOCkpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwyX0JBU0UgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyMCkgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQUREU0VMMl9NQVNLICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9BRERTRUwyX01JUlJPUkUgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0FERFNFTDJfUkVHRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipFQlUgQnVzIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgMCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0VCVSsgMHgwMDYwKSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfV1JESVMgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9BTEVDICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI5KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9CQ0dFTiAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI3KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9BR0VOICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9DTVVMVFIgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIyKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9XQUlUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9XQUlUSU5WICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9TRVRVUCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wX1BPUlRXICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wX1dBSVRSREMgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfV0FJVFdSQyAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMF9IT0xEQyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04wX1JFQ09WQyAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjBfQ01VTFQgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqRUJVIEJ1cyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9FQlUrIDB4MDA2NCkpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX1dSRElTICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfQUxFQyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyOSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfQkNHRU4gKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNykKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfQUdFTiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfQ01VTFRSICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyMikKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfV0FJVCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyMCkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfV0FJVElOViAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfU0VUVVAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9QT1JUVyAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9XQUlUUkRDICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgNykgLSAxKSAmICh2YWx1ZSkpIDw8IDkpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX1dBSVRXUkMgKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjFfSE9MREMgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMV9SRUNPVkMgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04xX0NNVUxUICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkVCVSBCdXMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjIgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRUJVKyAweDAwNjgpKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9XUkRJUyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX0FMRUMgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjkpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX0JDR0VOICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjcpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX0FHRU4gKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX0NNVUxUUiAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjIpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1dBSVQgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjApCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1dBSVRJTlYgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTkpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX1NFVFVQICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxOCkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfUE9SVFcgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfV0FJVFJEQyAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDcpIC0gMSkgJiAodmFsdWUpKSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9XQUlUV1JDICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfRUJVX0VCVV9CVVNDT04yX0hPTERDICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9FQlVfRUJVX0JVU0NPTjJfUkVDT1ZDICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0VCVV9FQlVfQlVTQ09OMl9DTVVMVCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIFNEUkFNIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfU0RSQU0gICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjgwMDAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqTUMgQWNjZXNzIEVycm9yIENhdXNlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19FUlJDQVVTRSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TRFJBTSsgMHgwMTAwKSkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19FUlJDQVVTRV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19FUlJDQVVTRV9QT1JUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0VSUkNBVVNFX0NBVVNFICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19FUlJDQVVTRV9SZXMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgTmFOKSAtIDEpICYgKHZhbHVlKSkgPDwgTmFOKQorICAgICAgCisvKioqTUMgQWNjZXNzIEVycm9yIEFkZHJlc3MgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0VSUkFERFIgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDAxMDgpKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0VSUkFERFJfQUREUgorICAgICAgCisvKioqTUMgSS9PIEdlbmVyYWwgUHVycG9zZSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUCAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MDgwMCkpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9HUFI2ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI4KQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0lPR1BfR1BSNSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAyNCkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX0dQUjQgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMjApCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9HUFIzICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0lPR1BfR1BSMiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19JT0dQX0NQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0lPR1BfQ0xLREVMQVkgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9DTEtSQVQgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfSU9HUF9SRERFTCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipNQyBTZWxmIFJlZnJlc2ggUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX1NFTEZSRlNIICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDBBMDApKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX1NFTEZSRlNIX1BXRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19TRUxGUkZTSF9QV0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX1NFTEZSRlNIX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzMCkgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCisgICAgICAKKy8qKipNQyBFbmFibGUgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NUUkxFTkEgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDEwMDApKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NUUkxFTkFfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DVFJMRU5BX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzMSkgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCisgICAgICAKKy8qKipNQyBNb2RlIFJlZ2lzdGVyIFNldHVwIENvZGUqKiovIAorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX01SU0NPREUgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDEwMDgpKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX01SU0NPREVfVU1DICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDUpIC0gMSkgJiAodmFsdWUpKSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX01SU0NPREVfQ0wgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERV9XVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTVJTQ09ERV9CTCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKk1DIENvbmZpZ3VyYXRpb24gRGF0YS13b3JkIFdpZHRoIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdEVyAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1NEUkFNKyAweDEwMTApKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NGR0RXX0RXICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NGR0RXX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCisgICAgICAKKy8qKipNQyBDb25maWd1cmF0aW9uIFBoeXNpY2FsIEJhbmsgMCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTAxOCkpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX01DU0VOMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX0JBTktOMCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19DRkdQQjBfUk9XVzAgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0NGR1BCMF9DT0xXMCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfQ0ZHUEIwX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorICAgICAgCisvKioqTUMgTGF0ZW5jeSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTEFURU5DWSAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfU0RSQU0rIDB4MTAzOCkpCisjZGVmaW5lIElOQ0FfSVBfU0RSQU1fTUNfTEFURU5DWV9UUlAgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX0xBVEVOQ1lfVFJBUyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19MQVRFTkNZX1RSQ0QgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19MQVRFTkNZX1REUEwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19MQVRFTkNZX1REQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19MQVRFTkNZX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIwKQorICAgICAgCisvKioqTUMgUmVmcmVzaCBDeWNsZSBUaW1lIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19UUkVGUkVTSCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TRFJBTSsgMHgxMDQwKSkKKyNkZWZpbmUgSU5DQV9JUF9TRFJBTV9NQ19UUkVGUkVTSF9UUkVGICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMTMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorI2RlZmluZSBJTkNBX0lQX1NEUkFNX01DX1RSRUZSRVNIX1JlcyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAxOSkgLSAxKSAmICh2YWx1ZSkpIDw8IDEzKQkJCisgICAgICAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBNb2R1bGUgICAgICA6ICBHUFRVIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0dQVFUgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QjgwMDAzMDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCisKKyAgICAgIAorLyoqKkdQVCBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DTEMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DTENfRElTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX0NMQ19ESVNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipHUFQgVGltZXIgMyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAxNCkpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNSRElSICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNDSERJUiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9UM0VER0UgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9CUFMxICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDExKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzQ09OX1QzT1RMICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9UM1VEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UM0NPTl9UM00gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDNDT05fVDNJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqR1BUIFdyaXRlIEhhcmR3YXJlIE1vZGlmaWVkIFRpbWVyIDMgQ29udHJvbCBSZWdpc3RlciAKK0lmIHNldCBhbmQgY2xlYXIgYml0IGFyZSB3cml0dGVuIGNvbmN1cnJlbnRseSB3aXRoIDEsIHRoZSBhc3NvY2lhdGVkIGJpdCBpcyBub3QgY2hhbmdlZC4qKiovCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDNDT04gICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwNEMpKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQzQ09OX1NFVFQzQ0hESVIgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDNDT05fQ0xSVDNDSERJUiAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTl9TRVRUM0VER0UgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTl9DTFJUM0VER0UgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUM0NPTl9TRVRUM09UTCAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQzQ09OX0NMUlQzT1RMICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisgICAgICAKKy8qKipHUFQgVGltZXIgMiBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMkNPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAxMCkpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhSRElSICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhDSERJUiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMkNPTl9UeEVER0UgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMkNPTl9UeElSRElTICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyQ09OX1R4UkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMkNPTl9UeFVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UMkNPTl9UeE0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDJDT05fVHhJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqR1BUIFRpbWVyIDQgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMTgpKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4UkRJUiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4Q0hESVIgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhFREdFICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhJUkRJUyAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNENPTl9UeFJDICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhVRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDRDT05fVHhNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0Q09OX1R4SSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkdQVCBXcml0ZSBIVyBNb2RpZmllZCBUaW1lciAyIENvbnRyb2wgUmVnaXN0ZXIgSWYgc2V0CisgYW5kIGNsZWFyIGJpdCBhcmUgd3JpdHRlbiBjb25jdXJyZW50bHkgd2l0aCAxLCB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgbm90IGNoYW5nZWQuKioqLworI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQyQ09OICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDQ4KSkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUMkNPTl9TRVRUeENIRElSICAgICAgICAgICAgICAgICgxIDw8IDE1KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQyQ09OX0NMUlR4Q0hESVIgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDJDT05fU0VUVHhFREdFICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDJDT05fQ0xSVHhFREdFICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCisgICAgICAKKy8qKipHUFQgV3JpdGUgSFcgTW9kaWZpZWQgVGltZXIgNCBDb250cm9sIFJlZ2lzdGVyIElmIHNldAorIGFuZCBjbGVhciBiaXQgYXJlIHdyaXR0ZW4gY29uY3VycmVudGx5IHdpdGggMSwgdGhlIGFzc29jaWF0ZWQgYml0IGlzIG5vdCBjaGFuZ2VkLioqKi8KKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUNENPTiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDA1MCkpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfV0hCVDRDT05fU0VUVHhDSERJUiAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUNENPTl9DTFJUeENIRElSICAgICAgICAgICAgICAgICgxIDw8IDE0KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ0Q09OX1NFVFR4RURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ0Q09OX0NMUlR4RURHRSAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorICAgICAgCisvKioqR1BUIENhcHR1cmUgUmVsb2FkIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9DQVBSRUwgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAzMCkpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfQ0FQUkVMX0NBUFJFTCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipHUFQgVGltZXIgMiBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDIgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMzQpKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QyX1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipHUFQgVGltZXIgMyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDMgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwMzgpKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1QzX1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipHUFQgVGltZXIgNCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDQgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwM0MpKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q0X1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipHUFQgVGltZXIgNSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDUgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwNDApKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1X1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipHUFQgVGltZXIgNiBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDYgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9HUFRVKyAweDAwNDQpKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2X1RWQUwgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAxNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipHUFQgVGltZXIgNiBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAyMCkpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDZDT05fVDZTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNkNMUiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDZDT05fQlBTMiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNkNPTl9UNk9UTCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDZDT05fVDZVRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OX1Q2UiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDZDT05fVDZNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q2Q09OX1Q2SSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkdQVCBXcml0ZSBIVyBNb2RpZmllZCBUaW1lciA2IENvbnRyb2wgUmVnaXN0ZXIgSWYgc2V0CisgYW5kIGNsZWFyIGJpdCBhcmUgd3JpdHRlbiBjb25jdXJyZW50bHkgd2l0aCAxLCB0aGUgYXNzb2NpYXRlZCBiaXQgaXMgbm90IGNoYW5nZWQuKioqLworI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ2Q09OICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfR1BUVSsgMHgwMDU0KSkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9XSEJUNkNPTl9TRVRUNk9UTCAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1dIQlQ2Q09OX0NMUlQ2T1RMICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisgICAgICAKKy8qKipHUFQgVGltZXIgNSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0dQVFUrIDB4MDAxQykpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fVDVTQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNUNMUiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fQ0kgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1Q0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fQ1QzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfR1BUVV9HUFRfVDVDT05fVDVSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1VURFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1VUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0dQVFVfR1BUX1Q1Q09OX1Q1TSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9HUFRVX0dQVF9UNUNPTl9UNUkgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIElPTSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfSU9NICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwNTAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqUmVjZWl2ZSBGSUZPKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fUkZJRk8gICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0lPTV9SRklGT19SWEQgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipUcmFuc21pdCBGSUZPKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fWEZJRk8gICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0lPTV9YRklGT19UWEQgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyIEhETEMqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9JU1RBSCAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA4MCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1JNRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1JQRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1JGTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1hQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1hNUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lTVEFIX1hEVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisgICAgICAKKy8qKipJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciBIRExDKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fTUFTS0ggICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwODApKQorI2RlZmluZSBJTkNBX0lQX0lPTV9NQVNLSF9STUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0lPTV9NQVNLSF9SUEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lPTV9NQVNLSF9SRk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0lPTV9NQVNLSF9YUFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0lPTV9NQVNLSF9YTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0lPTV9NQVNLSF9YRFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorICAgICAgCisvKioqU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwODQpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9TVEFSX1hET1YgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUl9YRlcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lPTV9TVEFSX1JBQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9JT01fU1RBUl9YQUNJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisgICAgICAKKy8qKipDb21tYW5kIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ01EUiAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwODQpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DTURSX1JNQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NNRFJfUlJFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lPTV9DTURSX1hURiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NNRFJfWE1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ01EUl9YUkVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipNb2RlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUggICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwODgpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9NT0RFSF9NRFMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX01PREVIX01EUzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUhfTURTMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0lPTV9NT0RFSF9SQUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0lPTV9NT0RFSF9ESU0yICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSU9NX01PREVIX0RJTTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fTU9ERUhfRElNMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqRXh0ZW5kZWQgTW9kZSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVIgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDhDKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fRVhNUl9YRkJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVJfUkZCUyAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0lPTV9FWE1SX1NSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0VYTVJfWENSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0lPTV9FWE1SX1JDUkMgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9JT01fRVhNUl9JVEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqU0FQSTEgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9TQVAxICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA5NCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDFfU0FQSTEgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0lPTV9TQVAxX01IQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipSZWNlaXZlIEZyYW1lIEJ5dGUgQ291bnQgTG93KioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fUkJDTCAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwOTgpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNMX1JCQyh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqU0FQSTIgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9TQVAyICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDA5OCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1NBUDJfU0FQSTIgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0lPTV9TQVAyX01MQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipSZWNlaXZlIEZyYW1lIEJ5dGUgQ291bnQgSGlnaCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0ggICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDlDKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fUkJDSF9PViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0hfUkJDMTEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0hfUkJDMTAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1JCQ0hfUkJDOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0lPTV9SQkNIX1JCQzggICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKlRFSTEgUmVnaXN0ZXIgMSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX1RFSTEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMDlDKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fVEVJMV9URUkxICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNykgLSAxKSAmICh2YWx1ZSkpIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1RFSTFfRUEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqUmVjZWl2ZSBTdGF0dXMgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBBMCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfVkZSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fUlNUQV9SRE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBX0NSQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfUkFCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9JT01fUlNUQV9TQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBX1NBMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1JTVEFfVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBJTkNBX0lQX0lPTV9SU1RBX0NSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyAgICAgIAorLyoqKlRFSTIgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9URUkyICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBBMCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1RFSTJfVEVJMiAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDcpIC0gMSkgJiAodmFsdWUpKSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0lPTV9URUkyX0VBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKlRlc3QgTW9kZSBSZWdpc3RlciBIRExDKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fVE1IICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAwQTQpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9UTUhfVExQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBSZWNlaXZlIDAqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIwICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBCOCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjBfQ09EUjAgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIwX0NJQzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0lSMF9DSUMxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjBfU0cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIwX0JBUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipDb21tYW5kL0luZGljYXRpb24gVHJhbnNtaXQgMCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDAgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMEI4KSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMF9DT0RYMCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDBfVEJBMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgwX1RCQTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMF9UQkEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDBfQkFDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkNvbW1hbmQvSW5kaWNhdGlvbiBSZWNlaXZlIDEqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9DSVIxICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBCQykpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NJUjFfQ09EUjEgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorICAgICAgCisvKioqQ29tbWFuZC9JbmRpY2F0aW9uIFRyYW5zbWl0IDEqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgxICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDBCQykpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NJWDFfQ09EWDEgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DSVgxX0NJQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0lYMV9DSTFFICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMTApKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMTAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMDApKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREExMF9DREEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMTEpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMTEgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMDQpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREExMV9DREEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMjApKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMjAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMDgpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREEyMF9DREEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipDb250cm9sbGVyIERhdGEgQWNjZXNzIFJlZy4gKENIMjEpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMjEgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMEMpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREEyMV9DREEgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDEwKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMTAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTEwKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAxMF9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDEwX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTEpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAxMSAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMTQpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDExX0RQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMTFfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqVGltZSBTbG90IGFuZCBEYXRhIFBvcnQgU2VsLiAoQ0gyMCkqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDIwICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDExOCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMjBfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAyMF9UU1MgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipUaW1lIFNsb3QgYW5kIERhdGEgUG9ydCBTZWwuIChDSDIxKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQV9UU0RQMjEgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTFDKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBX1RTRFAyMV9EUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREFfVFNEUDIxX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTApKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDEwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMjApKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMTBfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDEwX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMTEpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDExICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMjQpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMTFfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDExX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMjApKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIwICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMjgpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjBfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIwX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlRpbWUgU2xvdCBhbmQgRGF0YSBQb3J0IFNlbC4gKENIMjEpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIxICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxMkMpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DT19UU0RQMjFfRFBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ09fVFNEUDIxX1RTUyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkN0cmwuIFJlZy4gQ29udHIuIERhdGEgQWNjZXNzIENIMXgqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9DREExX0NSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDEzOCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTFfQ1JfRU5fVEJNICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMV9DUl9FTl9JMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMV9DUl9FTl9JMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMV9DUl9FTl9PMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMV9DUl9FTl9PMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMV9DUl9TV0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipDdHJsLiBSZWcuIENvbnRyLiBEYXRhIEFjY2VzcyBDSDF4KioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQ0RBMl9DUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxM0MpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9DREEyX0NSX0VOX1RCTSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fSTEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fSTAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fTzEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfRU5fTzAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0NEQTJfQ1JfU1dBUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqQ29udHJvbCBSZWdpc3RlciBCLUNoYW5uZWwgRGF0YSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX0JDSEFfQ1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTQ0KSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fQkNIQV9DUl9FTl9CQzIgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0lPTV9CQ0hBX0NSX0VOX0JDMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisgICAgICAKKy8qKipDb250cm9sIFJlZ2lzdGVyIEItQ2hhbm5lbCBEYXRhKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQkNIQl9DUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNDgpKQorI2RlZmluZSBJTkNBX0lQX0lPTV9CQ0hCX0NSX0VOX0JDMiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0JDSEJfQ1JfRU5fQkMxICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyAgICAgIAorLyoqKkNvbnRyb2wgUmVnLiBmb3IgSERMQyBhbmQgQ0kxIERhdGEqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9EQ0lfQ1IgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE0QykpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSV9DUl9EUFNfQ0kxICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSV9DUl9FTl9DSTEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lPTV9EQ0lfQ1JfRU5fRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorICAgICAgCisvKioqQ29udHJvbCBSZWcuIGZvciBIRExDIGFuZCBDSTEgRGF0YSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSUNfQ1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTRDKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fRENJQ19DUl9EUFNfQ0kwICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0RDSUNfQ1JfRU5fQ0kwICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9JT01fRENJQ19DUl9EUFNfRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyAgICAgIAorLyoqKkNvbnRyb2wgUmVnLiBTZXJpYWwgRGF0YSBTdHJvYmUgeCoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTU0KSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fU0RTX0NSX0VOU19UU1MgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fU0RTX0NSX0VOU19UU1NfMSAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1NEU19DUl9FTlNfVFNTXzMgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0lPTV9TRFNfQ1JfVFNTICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqQ29udHJvbCBSZWdpc3RlciBJT00gRGF0YSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTVDKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fSU9NX0NSX1NQVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDcpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUl9DSV9DUyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fSU9NX0NSX1RJQ19ESVMgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9JT01fSU9NX0NSX0VOX0JDTCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUl9DTEtNICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSU9NX0lPTV9DUl9SZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0lPTV9JT01fQ1JfRElTX0lPTSAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqU3luY2hyb25vdXMgVHJhbnNmZXIgSW50ZXJydXB0KioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fU1RJICAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNjApKQorI2RlZmluZSBJTkNBX0lQX0lPTV9TVElfU1RPVjIxICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fU1RJX1NUT1YyMCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1NUSV9TVE9WMTEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0lPTV9TVElfU1RPVjEwICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9JT01fU1RJX1NUSTIxICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0lPTV9TVElfU1RJMjAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSU9NX1NUSV9TVEkxMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fU1RJX1NUSTEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqQWNrbm93bGVkZ2UgU3luY2hyb25vdXMgVHJhbnNmZXIgSW50ZXJydXB0KioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JT01fQVNUSSAgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSU9NKyAweDAxNjApKQorI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzIxICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzIwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzExICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0lPTV9BU1RJX0FDSzEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqTWFzayBTeW5jaHJvbm91cyBUcmFuc2ZlciBJbnRlcnJ1cHQqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9NU1RJICAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JT00rIDB4MDE2NCkpCisjZGVmaW5lIElOQ0FfSVBfSU9NX01TVElfU1RPVjIxICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVE9WMjAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lPTV9NU1RJX1NUT1YxMSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfSU9NX01TVElfU1RPVjEwICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkyMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkyMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkxMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fTVNUSV9TVEkxMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgZm9yIFNlcmlhbCBEYXRhIFN0cm9iZXMqKiovIAorI2RlZmluZSBJTkNBX0lQX0lPTV9TRFNfQ09ORiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTY4KSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fU0RTX0NPTkZfU0RTX0JDTCAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqTW9uaXRvcmluZyBDREEgQml0cyoqKi8gCisjZGVmaW5lIElOQ0FfSVBfSU9NX01DREEgICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lPTSsgMHgwMTZDKSkKKyNkZWZpbmUgSU5DQV9JUF9JT01fTUNEQV9NQ0RBMjEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfSU9NX01DREFfTUNEQTIwICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0lPTV9NQ0RBX01DREExMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9JT01fTUNEQV9NQ0RBMTAgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIEFTQyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfQVNDICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDQwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqQVNDIFBvcnQgSW5wdXQgU2VsZWN0IFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BJU0VMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMDQpKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfUElTRUxfUklTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkFTQyBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9MQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE0KQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX0JSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX09ERCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX0ZERSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX09FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DT05fRkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX1BFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9PRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX0ZFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DT05fUEVOUlhESSAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DT05fUkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NPTl9TVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ09OX00gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipBU0MgV3JpdGUgSGFyZHdhcmUgTW9kaWZpZWQgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJDT04gICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDUwKSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9TRVRPRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJDT05fU0VURkUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQ09OX1NFVFBFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9DTFJPRSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJDT05fQ0xSRkUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJDT05fQ0xSUEUgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJDT05fU0VUUkVOICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkNPTl9DTFJSRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorICAgICAgCisvKioqQVNDIEJhdWRyYXRlIFRpbWVyL1JlbG9hZCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19CVFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDE0KSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0JUUl9CUl9WQUxVRSAodmFsdWUpICAgICAgICAgICgoKCggMSA8PCAxMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipBU0MgRnJhY3Rpb25hbCBEaXZpZGVyIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0ZEViAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMTgpKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfRkRWX0ZEX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDkpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqQVNDIElyREEgUHVsc2UgTW9kZS9XaWR0aCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19QTVcgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDFDKSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1BNV19JUlBXICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19QTVdfUFdfVkFMVUUgKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipBU0MgVHJhbnNtaXQgQnVmZmVyIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1RCVUYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAyMCkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19UQlVGX1REX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDkpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqQVNDIFJlY2VpdmUgQnVmZmVyIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1JCVUYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAyNCkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19SQlVGX1JEX1ZBTFVFICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDkpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqQVNDIEF1dG9iYXVkIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJDT04gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDAzMCkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9SWElOViAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9UWElOViAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTApCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9BQkVNICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9GQ0RFVEVOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9BQkRFVEVOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9BQlNURU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJDT05fQVVSRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQkNPTl9BQkVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipSZWNlaXZlIEZJRk8gQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQVNDX1JYRkNPTiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDQwKSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfUlhGQ09OX1JYRklUTCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfUlhGQ09OX1JYVE1FTiAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfQVNDX1JYRkNPTl9SWEZGTFUgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0FTQ19SWEZDT05fUlhGRU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipUcmFuc21pdCBGSUZPIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FTQ19UWEZDT04gICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA0NCkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX1RYRkNPTl9UWEZJVEwgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfQVNDX1RYRkNPTl9UWFRNRU4gICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0FTQ19UWEZDT05fVFhGRkxVICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfVFhGQ09OX1RYRkVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqRklGTyBTdGF0dXMgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FTQ19GU1RBVCAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA0OCkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0ZTVEFUX1RYRkZMICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA2KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfRlNUQVRfUlhGRkwgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqQVNDIFdyaXRlIEhXIE1vZGlmaWVkIEF1dG9iYXVkIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJDT04gICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA1NCkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQkNPTl9TRVRBQkVOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQkNPTl9DTFJBQkVOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipBU0MgQXV0b2JhdWQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQVNDKyAweDAwMzQpKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJTVEFUX0RFVFdBSVQgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVF9TQ0NERVQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQUJTVEFUX1NDU0RFVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19BQlNUQVRfRkNDREVUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0FCU1RBVF9GQ1NERVQgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqQVNDIFdyaXRlIEhXIE1vZGlmaWVkIEF1dG9iYXVkIFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVQgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BU0MrIDB4MDA1OCkpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfU0VUREVUV0FJVCAgICAgICAgICAgICAgICAoMSA8PCA5KQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX0NMUkRFVFdBSVQgICAgICAgICAgICAgICAgKDEgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9TRVRTQ0NERVQgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX0NMUlNDQ0RFVCAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfU0VUU0NTREVUICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9DTFJTQ1NERVQgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX1NFVEZDQ0RFVCAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19XSEJBQlNUQVRfQ0xSRkNDREVUICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX1dIQkFCU1RBVF9TRVRGQ1NERVQgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfV0hCQUJTVEFUX0NMUkZDU0RFVCAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipBU0MgQ2xvY2sgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DTEMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FTQysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BU0NfQVNDX0NMQ19STUMgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfQVNDX0FTQ19DTENfRElTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0FTQ19BU0NfQ0xDX0RJU1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkJCQorICAgICAgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTW9kdWxlICAgICAgOiAgRE1BIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9ETUEgICAgICAgICAgICAgICAgICAgICAgICAgICgweEJGMTA4MDAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAorCisgICAgICAKKy8qKipETUEgUlggQ2hhbm5lbCAwIENvbW1hbmQgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IwICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwMCkpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjBfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMF9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipETUEgUlggQ2hhbm5lbCAxIENvbW1hbmQgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhDQ1IxICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwNCkpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWENDUjFfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYQ0NSMV9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipETUEgUmVjZWl2ZSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYSVNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4MDgpKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJU1JfUkRFUlJ4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJU1JfQ01EQ1BUeCAodmFsdWUpICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJU1JfRU9QeCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJU1JfQ1BUeCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJU1JfSExEeCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqRE1BIFJlY2VpdmUgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhJTVIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDgwQykpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9SREVSUnggKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9DTURDUFR4ICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9FT1B4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9DUFR4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWElNUl9ITER4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipETUEgRmlyc3QgUmVjZWl2ZSBEZXNjcmlwdG9yIEFkZHIuIGZvciBSeCBDaGFubmVsIDAKKyoqKi8KKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYRlJEQTAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4MTApKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhGUkRBMF9SWEZSREEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqRE1BIEZpcnN0IFJlY2VpdmUgRGVzY3JpcHRvciBBZGRyLiBmb3IgUnggQ2hhbm5lbCAxCisqKiovCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWEZSREExICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwODE0KSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYRlJEQTFfUlhGUkRBICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDI4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkRNQSBSZWNlaXZlIENoYW5uZWwgUG9sbGluZyBUaW1lKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYUE9MTCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4MTgpKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfUlhQT0xMX0JTWjEgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMzApCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9SWFBPTExfQlNaMCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1JYUE9MTF9SWFBPTExUSU1FICh2YWx1ZSkgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipETUEgVFggQ2hhbm5lbCAwIENvbW1hbmQgUmVnaXN0ZXIgKFZvaWNlIFBvcnQpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4ODApKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwX0xCRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwX0hQRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjBfSFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IwX09GRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjBfSU5JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqRE1BIFRYIENoYW5uZWwgMSBDb21tYW5kIFJlZ2lzdGVyIChNYW5nbXQgUG9ydCkqKiovIAorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IxICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDg4NCkpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfTEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfSFBFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMCkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMV9IUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjFfT0ZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMV9JTklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisgICAgICAKKy8qKipETUEgVFggQ2hhbm5lbCAyIENvbW1hbmQgUmVnaXN0ZXIgKFNTQyBQb3J0KSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWENDUjIgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwODg4KSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMl9MQkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMl9IUEVOICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0hCRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0hSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYQ0NSMl9PRkYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhDQ1IyX0lOSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkRNQSBGaXJzdCBSZWNlaXZlIERlc2NyaXB0b3IgQWRkci4gZm9yIFR4IENoYW5uZWwgMAorKioqLworI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMCAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ETUErIDB4MDhBMCkpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWEZSREEwX1RYRlJEQSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipETUEgRmlyc3QgUmVjZWl2ZSBEZXNjcmlwdG9yIEFkZHIuIGZvciBUeCBDaGFubmVsIDEKKyoqKi8KKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYRlJEQTEgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QTQpKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhGUkRBMV9UWEZSREEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMjgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqRE1BIEZpcnN0IFJlY2VpdmUgRGVzY3JpcHRvciBBZGRyLiBmb3IgVHggQ2hhbm5lbCAyCisqKiovCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWEZSREEyICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwOEE4KSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYRlJEQTJfVFhGUkRBICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDI4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkRNQSBUcmFuc21pdCBDaGFubmVsIEFyYml0cmF0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYV0dUICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QzApKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhXR1RfVFgyUFIgKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhXR1RfVFgxUFJJICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhXR1RfVFgwUFJJICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqRE1BIFRyYW5zbWl0IENoYW5uZWwgUG9sbGluZyBUaW1lKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYUE9MTCAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QzQpKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhQT0xMX0JTWjIgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMzApCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWFBPTExfQlNaMSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyOCkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYUE9MTF9CU1owICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI2KQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhQT0xMX1RYUE9MTFRJTUUgKHZhbHVlKSAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkRNQSBUcmFuc21pdCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRE1BKyAweDA4QzgpKQorI2RlZmluZSBJTkNBX0lQX0RNQV9ETUFfVFhJU1JfUkRFUlJ4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAxMikKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0hMRHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0NQVHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0VPUHggKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSVNSX0NNRENQVHggKHZhbHVlKSAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkRNQSBUcmFuc21pdCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RNQSsgMHgwOENDKSkKKyNkZWZpbmUgSU5DQV9JUF9ETUFfRE1BX1RYSU1SX1JERVJSeCAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9ITER4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDkpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9DUFR4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9FT1B4ICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfRE1BX0RNQV9UWElNUl9DTURDUFR4ICh2YWx1ZSkgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIERlYnVnIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfRGVidWcgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjEwNjAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqTUNEIEJyZWFrIEJ1cyBTd2l0Y2ggUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlMgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RlYnVnKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlRQMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JUUDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTgpCisjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCU19CU1AxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlNQMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JUNUVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JUNEVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JUNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEzKQorI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX0JCU19CUzVFTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JTNEVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0RlYnVnX01DRF9CQlNfQlM1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9EZWJ1Z19NQ0RfQkJTX0JTNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisgICAgICAKKy8qKipNQ0QgTXVsdGlwbGV4ZXIgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX01DUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfRGVidWcrIDB4MDAwOCkpCisjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX01DUl9NVVg1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX01DUl9NVVg0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfRGVidWdfTUNEX01DUl9NVVgxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIFRTRiByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfVFNGICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDkwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqVFNGIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKDAwMDBIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfVFNGX1RTRl9DT05GICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX1RTRl9UU0ZfQ09ORl9QV01FTiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfVFNGX0NPTkZfTEVERU4gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfVFNGX1RTRl9DT05GX0tFWUVOICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqS2V5IHNjYW4gQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoMDAwNEgpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfS0VZX0NPTkYgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAwNCkpCisjZGVmaW5lIElOQ0FfSVBfVFNGX0tFWV9DT05GX1NMICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqU2NhbiBSZWdpc3RlciBMaW5lIDAgYW5kIDEgKDAwMDhIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUcwMSAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1RTRisgMHgwMDA4KSkKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzAxX1JFUzF4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAxMikgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHMDFfUkVTMHggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDEzKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlNjYW4gUmVnaXN0ZXIgTGluZSAyIGFuZCAzICgwMDBDSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHMjMgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAwQykpCisjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUcyM19SRVMzeCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgMTApIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzIzX1JFUzJ4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAxMSkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipTY2FuIFJlZ2lzdGVyIExpbmUgNCwgNSBhbmQgNiAoMDAxMEgpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzQ1NiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHNDU2X1JFUzZ4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA3KSAtIDEpICYgKHZhbHVlKSkgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc0NTZfUkVTNXggKHZhbHVlKSAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzQ1Nl9SRVM0eCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgOSkgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipTY2FuIFJlZ2lzdGVyIExpbmUgNyB0byAxMiAoMDAxNEgpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzd0bzEyICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMTQpKQorI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHN3RvMTJfUkVTMTJ4ICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjgpCisjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc3dG8xMl9SRVMxMXggKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQorI2RlZmluZSBJTkNBX0lQX1RTRl9TUkVHN3RvMTJfUkVTMTB4ICh2YWx1ZSkgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCAyMCkKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfU1JFRzd0bzEyX1JFUzl4ICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCA0KSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc3dG8xMl9SRVM4eCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNSkgLSAxKSAmICh2YWx1ZSkpIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfVFNGX1NSRUc3dG8xMl9SRVM3eCAodmFsdWUpICAgICAgICAgICAgICAoKCgoIDEgPDwgNikgLSAxKSAmICh2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipMRURNVVggQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoMDAxOEgpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkYgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfVFNGKyAweDAwMTgpKQorI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI1KQorI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FU1RBMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VEUFgxICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMykKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfRUFDVDEgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIyKQorI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FU1BEMSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VTVEEwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxOSkKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfRURQWDAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE4KQorI2RlZmluZSBJTkNBX0lQX1RTRl9MRURNVVhfQ09ORl9FQUNUMCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRE1VWF9DT05GX0VTUEQwICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfSU5WICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgSU5DQV9JUF9UU0ZfTEVETVVYX0NPTkZfTkNPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqTEVEIFJlZ2lzdGVyICgwMDFDSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1RTRl9MRURfUkVHICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAxQykpCisjZGVmaW5lIElOQ0FfSVBfVFNGX0xFRF9SRUdfTHh5ICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDI0KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlB1bHNlIFdpZHRoIE1vZHVsYXRvciAxIGFuZCAyIFJlZ2lzdGVyICgwMDIwSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1RTRl9QV00xMiAgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9UU0YrIDB4MDAyMCkpCisjZGVmaW5lIElOQ0FfSVBfVFNGX1BXTTEyX1BXMlBXMSAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCBOYU4pIC0gMSkgJiAodmFsdWUpKSA8PCBOYU4pCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIFBvcnRzIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfUG9ydHMgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMEEwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqUG9ydCAxIERhdGEgT3V0cHV0IFJlZ2lzdGVyICgwMDIwSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX09VVCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMjApKQorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX09VVF9QKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqUG9ydCAyIERhdGEgT3V0cHV0IFJlZ2lzdGVyICgwMDQwSCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX09VVCAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNDApKQorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX09VVF9QKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqUG9ydCAxIERhdGEgSW5wdXQgUmVnaXN0ZXIgKDAwMjRIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfSU4gICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDAyNCkpCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfSU5fUCh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKlBvcnQgMiBEYXRhIElucHV0IFJlZ2lzdGVyICgwMDQ0SCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0lOICAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNDQpKQorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0lOX1AodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipQb3J0IDEgRGlyZWN0aW9uIFJlZ2lzdGVyICgwMDI4SCkqKiovIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0RJUiAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMjgpKQorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0RJUl9Qb3J0MVAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfRElSX1BvcnQyUG4gKHZhbHVlKSAgICAgICAgICAoKCgoIDEgPDwgMTYpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqUG9ydCAyIERpcmVjdGlvbiBSZWdpc3RlciAoMDA0OEgpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9ESVIgICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDQ4KSkKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9ESVJfUG9ydDFQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0RJUl9Qb3J0MlBuICh2YWx1ZSkgICAgICAgICAgKCgoKCAxIDw8IDE2KSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKlBvcnQgMCBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIDAgKDAwMEMgSCkKKyoqKi8KKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9BTFRTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDBDKSkKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9BTFRTRUxfUG9ydDBQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqUG9ydCAxIEFsdGVybmF0ZSBGdW5jdGlvbiBTZWxlY3QgUmVnaXN0ZXIgMCAoMDAyQyBIKQorKioqLworI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0FMVFNFTCAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMkMpKQorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX0FMVFNFTF9Qb3J0MVAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDFfQUxUU0VMX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKlBvcnQgMiBBbHRlcm5hdGUgRnVuY3Rpb24gU2VsZWN0IFJlZ2lzdGVyIDAgKDAwNEMgSCkKKyoqKi8KKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9BTFRTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDRDKSkKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9BTFRTRUxfUG9ydDFQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX0FMVFNFTF9Qb3J0MlAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipQb3J0IDAgSW5wdXQgU2NobWl0dC1UcmlnZ2VyIE9mZiBSZWdpc3RlciAoMDAxMCBIKQorKioqLworI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AwX1NUT0ZGICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDAxMCkpCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDBfU1RPRkZfUG9ydDBQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqUG9ydCAxIElucHV0IFNjaG1pdHQtVHJpZ2dlciBPZmYgUmVnaXN0ZXIgKDAwMzAgSCkKKyoqKi8KKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMV9TVE9GRiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwMzApKQorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AxX1NUT0ZGX1BvcnQxUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMV9TVE9GRl9Qb3J0MlAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipQb3J0IDIgSW5wdXQgU2NobWl0dC1UcmlnZ2VyIE9mZiBSZWdpc3RlciAoMDA1MCBIKQorKioqLworI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1NUT0ZGICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDA1MCkpCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfU1RPRkZfUG9ydDFQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1NUT0ZGX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKlBvcnQgMiBPcGVuIERyYWluIENvbnRyb2wgUmVnaXN0ZXIgKDAwNTRIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfT0QgICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDA1NCkpCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfT0RfUG9ydDJQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqUG9ydCAwIFB1bGwgVXAgRGV2aWNlIEVuYWJsZSBSZWdpc3RlciAoMDAxOCBIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDBfUFVERU4gICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDE4KSkKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9QVURFTl9Qb3J0MFAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipQb3J0IDIgUHVsbCBVcCBEZXZpY2UgRW5hYmxlIFJlZ2lzdGVyICgwMDU4IEgpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURFTiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX1BvcnRzKyAweDAwNTgpKQorI2RlZmluZSBJTkNBX0lQX1BvcnRzX1AyX1BVREVOX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURFTl9Qb3J0MlAodmFsdWUpICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipQb3J0IDAgUHVsbCBVcC9QdWxsIERvd24gU2VsZWN0IFJlZ2lzdGVyICgwMDFDIEgpKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9QVURTRUwgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9Qb3J0cysgMHgwMDFDKSkKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMF9QVURTRUxfUG9ydDBQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqUG9ydCAyIFB1bGwgVXAvUHVsbCBEb3duIFNlbGVjdCBSZWdpc3RlciAoMDA1QyBIKSoqKi8gCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfUFVEU0VMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfUG9ydHMrIDB4MDA1QykpCisjZGVmaW5lIElOQ0FfSVBfUG9ydHNfUDJfUFVEU0VMX1BvcnQyUCh2YWx1ZSkgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9Qb3J0c19QMl9QVURTRUxfUG9ydDJQKHZhbHVlKSAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAkJCisgICAgICAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBNb2R1bGUgICAgICA6ICBERVMvM0RFUyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVMgICAgICAgICAgICAgICAgICAgICgweEI4MDAwODAwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLyAgIAorCisgICAgICAKKy8qKipERVMgSW5wdXQgRGF0YSBIaWdoIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUhSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUhSX0lIKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqREVTIElucHV0IERhdGEgTG93IFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUxSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDA0KSkKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSUxSX0lMKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqREVTIEtleSAjMSBIaWdoIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzFIUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMDgpKQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LMUhSX0sxSCh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqREVTIEtleSAjMSBMb3cgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LMUxSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAwQykpCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0sxTFJfSzFMKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipERVMgS2V5ICMyIEhpZ2ggUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LMkhSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAxMCkpCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0sySFJfSzJIKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipERVMgS2V5ICMyIExvdyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0syTFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDE0KSkKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzJMUl9LMkwodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkRFUyBLZXkgIzMgSGlnaCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0szSFIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9ERVNfM0RFUysgMHgwMDE4KSkKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzNIUl9LM0godmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkRFUyBLZXkgIzMgTG93IFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSzNMUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMUMpKQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19LM0xSX0szTCh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqREVTIEluaXRpYWxpemF0aW9uIFZlY3RvciBIaWdoIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfSVZIUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMjApKQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19JVkhSX0lWSCh2YWx1ZSkgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqREVTIEluaXRpYWxpemF0aW9uIFZlY3RvciBMb3cgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19JVkxSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAyNCkpCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0lWTFJfSVZMKHZhbHVlKSAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipERVMgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAyOCkpCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX0tSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9EQVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfRih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfTyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgSU5DQV9JUF9ERVNfM0RFU19ERVNfQ09OVFJPTFJfR08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9TVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9JRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9CVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19DT05UUk9MUl9TTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX0VfRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX0NPTlRST0xSX00odmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipERVMgT3V0cHV0IERhdGEgSGlnaCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX09IUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfREVTXzNERVMrIDB4MDAyQykpCisjZGVmaW5lIElOQ0FfSVBfREVTXzNERVNfREVTX09IUl9PSCh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkRFUyBPdXRwdXQgRGF0YSBMb3cgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19PTFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0RFU18zREVTKyAweDAwMzApKQorI2RlZmluZSBJTkNBX0lQX0RFU18zREVTX0RFU19PTFJfT0wodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIEFFUyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfQUVTICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDg4MCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqQUVTIElucHV0IERhdGEgMyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JRDNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQzUl9JKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIElucHV0IERhdGEgMiBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JRDJSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQyUl9JKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIElucHV0IERhdGEgMSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JRDFSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQxUl9JKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIElucHV0IERhdGEgMCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19JRDBSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSUQwUl9JKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIE91dHB1dCBEYXRhIDMgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QzUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EM1JfTyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkFFUyBPdXRwdXQgRGF0YSAyIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EMlIgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19PRDJSX08odmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipBRVMgT3V0cHV0IERhdGEgMSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19PRDFSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QxUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIE91dHB1dCBEYXRhIDAgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfT0QwUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX09EMFJfTyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkFFUyBLZXkgNyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LN1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0s3Ul9LKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIEtleSA2IFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0s2UiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzZSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipBRVMgS2V5IDUgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzVSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LNVJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkFFUyBLZXkgNCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LNFIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0s0Ul9LKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIEtleSAzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0szUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzNSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipBRVMgS2V5IDIgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzJSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9BRVMrIDB4MDAwMCkpCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LMlJfSyh2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkFFUyBLZXkgMSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19LMVIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0sxUl9LKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqQUVTIEtleSAwIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0swUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQUVTKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSzBSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDMgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYzUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWM1JfSVYodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDIgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYyUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWMlJfSVYodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDEgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYxUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWMVJfSVYodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipBRVMgSW5pdGlhbGl6YXRpb24gVmVjdG9yIDAgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfSVYwUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0lWMFJfSVYgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMzIpIC0gMSkgJih2YWx1ZSkpIDw8IDApCisgICAgICAKKy8qKipBRVMgQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0FFUysgMHgwMDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0tSRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfREFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9QTksgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0YodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9PKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfR08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfU1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0lFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElOQ0FfSVBfQUVTX0FFU19DT05UUk9MUl9CVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfU00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0FFU19BRVNfQ09OVFJPTFJfRV9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0tWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyNkZWZpbmUgSU5DQV9JUF9BRVNfQUVTX0NPTlRST0xSX0sodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIEmyQyByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfSUlDICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCODAwMDcwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqSbJDIFBvcnQgSW5wdXQgU2VsZWN0IFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1BJU0VMICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMDQpKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfUElTRUxfU0RBSVModmFsdWUpICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19QSVNFTF9TQ0xJUyh2YWx1ZSkgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkmyQyBDbG9jayBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0NMQyAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQ0xDX1JNQyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0NMQ19ESVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19DTENfRElTUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqSbJDIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfV01FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0NJICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDIpIC0gMSkgJiAodmFsdWUpKSA8PCAyNikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX1NUUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI1KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfSUdFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjQpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9UUlggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMykKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0lOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIyKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfQUNLRElTICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjEpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9CVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMCkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX01PRCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMTgpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9SU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNykKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX00xMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfUk1FTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX0NPICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfSVJRRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfSVJRUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfSVJRRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfQkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzBfTFJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8wX1NMQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMF9BRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqSbJDIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUlDKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfUk0gKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgOCkgLSAxKSAmICh2YWx1ZSkpIDw8IDI0KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfVFJYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0FDS0RJUyAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfQlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9NT0QgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDE4KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9NMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX1JNRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9DTyAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0lSUUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNykKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0lSUVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0lSUUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0JCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8xX0xSQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMV9TTEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzFfQURSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyAgICAgIAorLyoqKkmyQyBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMiAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lJQysgMHgwMDEwKSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX1dNRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9DSSAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjYpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9TVFAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX0lHRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfVFJYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjMpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9JTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyMikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX0FDS0RJUyAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfQlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjApCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9NT0QgKHZhbHVlKSAgICAgICAgICAgICAgICAoKCgoIDEgPDwgMikgLSAxKSAmICh2YWx1ZSkpIDw8IDE4KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfUlNDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTcpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9NMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX1dNICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfSVJRRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfSVJRUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA2KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfSVJRRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfQkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfU1lTQ09OXzJfTFJCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1NZU0NPTl8yX1NMQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19TWVNDT05fMl9BRFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorICAgICAgCisvKioqSbJDIFdyaXRlIEhhcmR3YXJlIE1vZGlmaWVkIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyCisqKiovCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT04gICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAyMCkpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSV01FTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9TRVRXTUVOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVFNUUCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI2KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX0NMUlNUUCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI1KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVFRSWCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX0NMUlRSWCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIzKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVEFDS0RJUyAgICAgICAgICAgICAgICAgICgxIDw8IDIyKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX0NMUkFDS0RJUyAgICAgICAgICAgICAgICAgICgxIDw8IDIxKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVEJVTSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIwKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX0NMUkJVTSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE5KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVFJTQyAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX0NMUlJTQyAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVFJNRU4gICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTUpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSUk1FTiAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNCkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9TRVRJUlFFICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX1NFVElSUVAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9TRVRJUlFEICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDgpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSSVJRRSAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA3KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfV0hCU1lTQ09OX0NMUklSUVAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1dIQlNZU0NPTl9DTFJJUlFEICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fU0VUQUwgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19XSEJTWVNDT05fQ0xSQUwgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisgICAgICAKKy8qKipJskMgQnVzIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAxNCkpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9CUlBNT0QgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8wX1BSRURJViAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjkpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMF9JQ0E5XzAgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgMTApIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8wX0JSUCAodmFsdWUpICAgICAgICAgICAgICAgICgoKCggMSA8PCA4KSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8wX1NDTEVOKHZhbHVlKSAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzBfU0RBRU4odmFsdWUpICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipJskMgQnVzIENvbnRyb2wgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzEgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JSUMrIDB4MDAxNCkpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMV9CUlBNT0QgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX0JVU0NPTl8xX1BSRURJViAodmFsdWUpICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMjkpCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMV9JQ0E3XzEgKHZhbHVlKSAgICAgICAgICAgICAoKCgoIDEgPDwgNykgLSAxKSAmICh2YWx1ZSkpIDw8IDE3KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzFfQlJQICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0lJQ19JSUNfQlVTQ09OXzFfU0NMRU4odmFsdWUpICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19CVVNDT05fMV9TREFFTih2YWx1ZSkgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkmyQyBSZWNlaXZlIFRyYW5zbWl0IEJ1ZmZlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUlDX0lJQ19SVEIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lJQysgMHgwMDE4KSkKKyNkZWZpbmUgSU5DQV9JUF9JSUNfSUlDX1JUQl9SVEIodmFsdWUpICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAJCQorICAgICAgICAgCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgTW9kdWxlICAgICAgOiAgRkIgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0ZCICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRjg4MDAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqRkIgQWNjZXNzIEVycm9yIENhdXNlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRSAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9GQisgMHgwMTAwKSkKKyNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRV9FUlIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJDQVVTRV9QT1JUICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgNCkgLSAxKSAmICh2YWx1ZSkpIDw8IDE2KQorI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0VSUkNBVVNFX0NBVVNFICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkZCIEFjY2VzcyBFcnJvciBBZGRyZXNzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJBRERSICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9GQisgMHgwMTA4KSkKKyNkZWZpbmUgSU5DQV9JUF9GQl9GQl9FUlJBRERSX0FERFIKKyAgICAgIAorLyoqKkZCIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0NGRyAgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0ZCKyAweDA4MDApKQorI2RlZmluZSBJTkNBX0lQX0ZCX0ZCX0NGR19TVk0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQkJCisgICAgICAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBNb2R1bGUgICAgICA6ICBTUkFNIHJlZ2lzdGVyIGFkZHJlc3MgYW5kIGJpdHMgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX1NSQU0gICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkY5ODAwMDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCisKKyAgICAgIAorLyoqKlNSQU0gU2l6ZSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfU1JBTV9TUkFNX1NJWkUgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9TUkFNKyAweDA4MDApKQorI2RlZmluZSBJTkNBX0lQX1NSQU1fU1JBTV9TSVpFX1NJWkUgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAyMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCQkKKyAgICAgICAgIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIE1vZHVsZSAgICAgIDogIEJJVSByZWdpc3RlciBhZGRyZXNzIGFuZCBiaXRzICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgICAgICAgCisjZGVmaW5lIElOQ0FfSVBfQklVICAgICAgICAgICAgICAgICAgICAgICAgICAoMHhCRkE4MDAwMCkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8gICAKKworICAgICAgCisvKioqQklVIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0lEICAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfQklVKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfSURfQVJDSCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0lEX0lEICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCA4KQorI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfSURfUkVWICh2YWx1ZSkgICAgICAgICAgICAgICAgKCgoKCAxIDw8IDgpIC0gMSkgJiAodmFsdWUpKSA8PCAwKQorICAgICAgCisvKioqQklVIEFjY2VzcyBFcnJvciBDYXVzZSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9FUlJDQVVTRSAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JJVSsgMHgwMTAwKSkKKyNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkNBVVNFX0VSUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBJTkNBX0lQX0JJVV9CSVVfRVJSQ0FVU0VfUE9SVCAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDQpIC0gMSkgJiAodmFsdWUpKSA8PCAxNikKKyNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkNBVVNFX0NBVVNFICh2YWx1ZSkgICAgICAgICAgICAgICgoKCggMSA8PCAyKSAtIDEpICYgKHZhbHVlKSkgPDwgMCkKKyAgICAgIAorLyoqKkJJVSBBY2Nlc3MgRXJyb3IgQWRkcmVzcyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfQklVX0JJVV9FUlJBRERSICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0JJVSsgMHgwMTA4KSkKKyNkZWZpbmUgSU5DQV9JUF9CSVVfQklVX0VSUkFERFJfQUREUgkJCisgICAgICAgICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICBNb2R1bGUgICAgICA6ICBJQ1UgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0cyAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAgICAgIAorI2RlZmluZSBJTkNBX0lQX0lDVSAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4QkYxMDEwMDApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovICAgCisKKyAgICAgIAorLyoqKklNMCBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lTUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDAwMDApKQorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSVNSX0lSKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqSU0xIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTFfSVNSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDIwMCkpCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipJTTIgSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JU1IgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwNDAwKSkKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0yX0lTUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKklNMCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lFUiAgICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDAwMDgpKQorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSUVSX0lSKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqSU0xIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTFfSUVSICAgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDIwOCkpCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JRVJfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipJTTIgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JRVIgICAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwNDA4KSkKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0yX0lFUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKklNMCBJbnRlcnJ1cHQgT3V0cHV0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMF9JT1NSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDAwMTApKQorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSU9TUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKklNMSBJbnRlcnJ1cHQgT3V0cHV0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JT1NSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDAyMTApKQorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTFfSU9TUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKklNMiBJbnRlcnJ1cHQgT3V0cHV0IFN0YXR1cyBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JT1NSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDA0MTApKQorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSU9TUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKklNMCBJbnRlcnJ1cHQgUmVxdWVzdCBTZXQgUmVnaXN0ZXIqKiovIAorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTBfSVJTUiAgICAgICAgICAgICAgICAgICAgKCh2b2xhdGlsZSB1MzIqKShJTkNBX0lQX0lDVSsgMHgwMDE4KSkKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0wX0lSU1JfSVIodmFsdWUpICAgICAgICAgICAgICAgKDEgPDwgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAKKy8qKipJTTEgSW50ZXJydXB0IFJlcXVlc3QgU2V0IFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSU0xX0lSU1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MDIxOCkpCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMV9JUlNSX0lSKHZhbHVlKSAgICAgICAgICAgICAgICgxIDw8IHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgCisvKioqSU0yIEludGVycnVwdCBSZXF1ZXN0IFNldCBSZWdpc3RlcioqKi8gCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lNMl9JUlNSICAgICAgICAgICAgICAgICAgICAoKHZvbGF0aWxlIHUzMiopKElOQ0FfSVBfSUNVKyAweDA0MTgpKQorI2RlZmluZSBJTkNBX0lQX0lDVV9JTTJfSVJTUl9JUih2YWx1ZSkgICAgICAgICAgICAgICAoMSA8PCB2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIAorLyoqKkV4dGVybmFsIEludGVycnVwdCBDb250cm9sIFJlZ2lzdGVyKioqLyAKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSUNVX0VJQ1IgICAgICAgICAgICAgICAgICAgICgodm9sYXRpbGUgdTMyKikoSU5DQV9JUF9JQ1UrIDB4MEIwMCkpCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lDVV9FSUNSX0VJSTUgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMjApCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lDVV9FSUNSX0VJSTQgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTYpCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lDVV9FSUNSX0VJSTMgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgMTIpCisjZGVmaW5lIElOQ0FfSVBfSUNVX0lDVV9FSUNSX0VJSTIgKHZhbHVlKSAgICAgICAgICAgICAgICgoKCggMSA8PCAzKSAtIDEpICYgKHZhbHVlKSkgPDwgOCkKKyNkZWZpbmUgSU5DQV9JUF9JQ1VfSUNVX0VJQ1JfRUlJMSAodmFsdWUpICAgICAgICAgICAgICAgKCgoKCAxIDw8IDMpIC0gMSkgJiAodmFsdWUpKSA8PCA0KQorI2RlZmluZSBJTkNBX0lQX0lDVV9JQ1VfRUlDUl9FSUkwICh2YWx1ZSkgICAgICAgICAgICAgICAoKCgoIDEgPDwgMykgLSAxKSAmICh2YWx1ZSkpIDw8IDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZ3MvaW5jYWlwLmggYi9pbmNsdWRlL2NvbmZpZ3MvaW5jYWlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMwZGI4NAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlncy9pbmNhaXAuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBJTkNBLUlQIGJvYXJkLgorICovCisKKyNpZm5kZWYgX19DT05GSUdfSAorI2RlZmluZSBfX0NPTkZJR19ICisKKyNkZWZpbmUgQ09ORklHX01JUFMzMgkJMQkvKiBNSVBTIDRLYyBDUFUgY29yZQkqLworI2RlZmluZSBDT05GSUdfSU5DQV9JUAkJMQkvKiBvbiBhIElOQ0EtSVAgQm9hcmQJKi8KKworLyogYWxsb3dlZCB2YWx1ZXM6IDEwMDAwMDAwMCBhbmQgMTUwMDAwMDAwICovCisjZGVmaW5lIENQVV9DTE9DS19SQVRFCTE1MDAwMDAwMCAgIC8qIDE1MCBNSHogY2xvY2sgZm9yIHRoZSBNSVBTIGNvcmUgKi8KKworI2RlZmluZSBDT05GSUdfQkFVRFJBVEUJCTExNTIwMAorCisjZGVmaW5lIENGR19TRFJBTV9CQVNFCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgQ0ZHX01BTExPQ19MRU4JCTEyOCoxMDI0CisKKyNkZWZpbmUgQ0ZHX0JPT1RQQVJBTVNfTEVOCTEyOCoxMDI0CisKKy8qIHZhbGlkIGJhdWRyYXRlcyAqLworI2RlZmluZSBDRkdfQkFVRFJBVEVfVEFCTEUJeyA5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAgfQorCisjZGVmaW5lIENPTkZJR19DT01NQU5EUwkJKENPTkZJR19DTURfREZMIHwgQ0ZHX0NNRF9FTEYpCisjaW5jbHVkZSA8Y21kX2NvbmZkZWZzLmg+CisKKy8qCisgKiBNaXNjZWxsYW5lb3VzIGNvbmZpZ3VyYWJsZSBvcHRpb25zCisgKi8KKyNkZWZpbmUJQ0ZHX0xPTkdIRUxQCQkJCS8qIHVuZGVmIHRvIHNhdmUgbWVtb3J5ICAgICAgKi8KKyNkZWZpbmUJQ0ZHX1BST01QVAkJIklOQ0EtSVAgIyAiCS8qIE1vbml0b3IgQ29tbWFuZCBQcm9tcHQgICAgKi8KKyNkZWZpbmUJQ0ZHX0NCU0laRQkJMjU2CQkvKiBDb25zb2xlIEkvTyBCdWZmZXIgU2l6ZSAgICovCisjZGVmaW5lCUNGR19QQlNJWkUgKENGR19DQlNJWkUrc2l6ZW9mKENGR19QUk9NUFQpKzE2KSAgLyogUHJpbnQgQnVmZmVyIFNpemUgKi8KKyNkZWZpbmUgQ0ZHX0haCQkJKENQVV9DTE9DS19SQVRFLzIpCisjZGVmaW5lCUNGR19NQVhBUkdTCQkxNgkJLyogbWF4IG51bWJlciBvZiBjb21tYW5kIGFyZ3MqLworCisjZGVmaW5lCUNGR19MT0FEX0FERFIJCTB4ODAxMDAwMDAJLyogZGVmYXVsdCBsb2FkIGFkZHJlc3MJKi8KKworI2RlZmluZSBDRkdfTUVNVEVTVF9TVEFSVAkweDgwMjAwMDAwCisjZGVmaW5lIENGR19NRU1URVNUX0VORAkJMHg4MDgwMDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBGTEFTSCBhbmQgZW52aXJvbm1lbnQgb3JnYW5pemF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX01BWF9GTEFTSF9CQU5LUwkyCS8qIG1heCBudW1iZXIgb2YgbWVtb3J5IGJhbmtzICovCisjZGVmaW5lIENGR19NQVhfRkxBU0hfU0VDVAkoMTI4KQkvKiBtYXggbnVtYmVyIG9mIHNlY3RvcnMgb24gb25lIGNoaXAgKi8KKworI2RlZmluZSBQSFlTX0ZMQVNIXzEJCTB4YjAwMDAwMDAgLyogRmxhc2ggQmFuayAjMSAqLworI2RlZmluZSBQSFlTX0ZMQVNIXzIJCTB4YjA4MDAwMDAgLyogRmxhc2ggQmFuayAjMiAqLworCisvKiBUaGUgZm9sbG93aW5nICNkZWZpbmVzIGFyZSBuZWVkZWQgdG8gZ2V0IGZsYXNoIGVudmlyb25tZW50IHJpZ2h0ICovCisjZGVmaW5lCUNGR19NT05JVE9SX0JBU0UJVEVYVF9CQVNFCisjZGVmaW5lCUNGR19NT05JVE9SX0xFTgkJKDE5MiA8PCAxMCkKKworI2RlZmluZSBDRkdfSU5JVF9TUF9PRkZTRVQJMHg0MDAwMDAKKworI2RlZmluZSBDRkdfRkxBU0hfQkFTRQkJUEhZU19GTEFTSF8xCisKKy8qIHRpbWVvdXQgdmFsdWVzIGFyZSBpbiB0aWNrcyAqLworI2RlZmluZSBDRkdfRkxBU0hfRVJBU0VfVE9VVAkoMiAqIENGR19IWikgLyogVGltZW91dCBmb3IgRmxhc2ggRXJhc2UgKi8KKyNkZWZpbmUgQ0ZHX0ZMQVNIX1dSSVRFX1RPVVQJKDIgKiBDRkdfSFopIC8qIFRpbWVvdXQgZm9yIEZsYXNoIFdyaXRlICovCisKKyNkZWZpbmUJQ0ZHX0VOVl9JU19JTl9GTEFTSAkxCisKKy8qIEFkZHJlc3MgYW5kIHNpemUgb2YgUHJpbWFyeSBFbnZpcm9ubWVudCBTZWN0b3IJKi8KKyNkZWZpbmUgQ0ZHX0VOVl9BRERSCQkweEIwMDMwMDAwCisjZGVmaW5lIENGR19FTlZfU0laRQkJMHgxMDAwMAorCisjZGVmaW5lIENPTkZJR19GTEFTSF8xNkJJVAorCisjZGVmaW5lIENPTkZJR19OUl9EUkFNX0JBTktTCTEKKworI2RlZmluZSBDT05GSUdfSU5DQV9JUF9TV0lUQ0gKKyNkZWZpbmUgQ09ORklHX05FVF9NVUxUSQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDYWNoZSBDb25maWd1cmF0aW9uCisgKi8KKyNkZWZpbmUgQ0ZHX0RDQUNIRV9TSVpFCQk0MDk2CisjZGVmaW5lIENGR19JQ0FDSEVfU0laRQkJNDA5NgorI2RlZmluZSBDRkdfQ0FDSEVMSU5FX1NJWkUJMTYKKworI2VuZGlmCS8qIF9fQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2xpYl9taXBzL01ha2VmaWxlIGIvbGliX21pcHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQwMzgzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYl9taXBzL01ha2VmaWxlCkBAIC0wLDAgKzEsNDQgQEAKKyMKKyMgKEMpIENvcHlyaWdodCAyMDAzCisjIFdvbGZnYW5nIERlbmssIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIHdkQGRlbnguZGUuCisjCisjIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisjIHByb2plY3QuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisjIE1BIDAyMTExLTEzMDcgVVNBCisjCisKK2luY2x1ZGUgJChUT1BESVIpL2NvbmZpZy5taworCitMSUIJPSBsaWIkKEFSQ0gpLmEKKworQU9CSlMJPSAKKworQ09CSlMJPSBib2FyZC5vIHRpbWUubyBtaXBzX2xpbnV4Lm8KKworT0JKUwk9ICQoQU9CSlMpICQoQ09CSlMpCisKKyQoTElCKToJLmRlcGVuZCAkKE9CSlMpCisJJChBUikgY3J2ICRAICQoT0JKUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisuZGVwZW5kOglNYWtlZmlsZSAkKEFPQkpTOi5vPS5TKSAkKENPQkpTOi5vPS5jKQorCQkkKENDKSAtTSAkKENGTEFHUykgJChBT0JKUzoubz0uUykgJChDT0JKUzoubz0uYykgPiAkQAorCitzaW5jbHVkZSAuZGVwZW5kCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZGlmZiAtLWdpdCBhL2xpYl9taXBzL2JvYXJkLmMgYi9saWJfbWlwcy9ib2FyZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOTA5ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJfbWlwcy9ib2FyZC5jCkBAIC0wLDAgKzEsNDAzIEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxjb21tb24uaD4KKyNpbmNsdWRlIDxjb21tYW5kLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8ZGV2aWNlcy5oPgorI2luY2x1ZGUgPHN5c2NhbGwuaD4KKyNpbmNsdWRlIDx2ZXJzaW9uLmg+CisjaW5jbHVkZSA8bmV0Lmg+CisjaW5jbHVkZSA8ZW52aXJvbm1lbnQuaD4KKworI2lmICggKChDRkdfRU5WX0FERFIrQ0ZHX0VOVl9TSVpFKSA8IENGR19NT05JVE9SX0JBU0UpIHx8IFwKKyAgICAgIChDRkdfRU5WX0FERFIgPj0gKENGR19NT05JVE9SX0JBU0UgKyBDRkdfTU9OSVRPUl9MRU4pKSApIHx8IFwKKyAgICBkZWZpbmVkKENGR19FTlZfSVNfSU5fTlZSQU0pCisjZGVmaW5lCVRPVEFMX01BTExPQ19MRU4JKENGR19NQUxMT0NfTEVOICsgQ0ZHX0VOVl9TSVpFKQorI2Vsc2UKKyNkZWZpbmUJVE9UQUxfTUFMTE9DX0xFTglDRkdfTUFMTE9DX0xFTgorI2VuZGlmCisKKyN1bmRlZiBERUJVRworCitleHRlcm4gaW50IHRpbWVyX2luaXQodm9pZCk7CisKK2NvbnN0IGNoYXIgdmVyc2lvbl9zdHJpbmdbXSA9CisJVV9CT09UX1ZFUlNJT04iICgiIF9fREFURV9fICIgLSAiIF9fVElNRV9fICIpIjsKKworc3RhdGljIGNoYXIgKmZhaWxlZCA9ICIqKiogZmFpbGVkICoqKlxuIjsKKworLyoKKyAqIEJlZ2luIGFuZCBFbmQgb2YgbWVtb3J5IGFyZWEgZm9yIG1hbGxvYygpLCBhbmQgY3VycmVudCAiYnJrIgorICovCitzdGF0aWMgdWxvbmcgbWVtX21hbGxvY19zdGFydDsKK3N0YXRpYyB1bG9uZyBtZW1fbWFsbG9jX2VuZDsKK3N0YXRpYyB1bG9uZyBtZW1fbWFsbG9jX2JyazsKKworCisvKgorICogVGhlIE1hbGxvYyBhcmVhIGlzIGltbWVkaWF0ZWx5IGJlbG93IHRoZSBtb25pdG9yIGNvcHkgaW4gRFJBTQorICovCitzdGF0aWMgdm9pZCBtZW1fbWFsbG9jX2luaXQgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwl1bG9uZyBkZXN0X2FkZHIgPSBDRkdfTU9OSVRPUl9CQVNFICsgZ2QtPnJlbG9jX29mZjsKKworCW1lbV9tYWxsb2NfZW5kID0gZGVzdF9hZGRyOworCW1lbV9tYWxsb2Nfc3RhcnQgPSBkZXN0X2FkZHIgLSBUT1RBTF9NQUxMT0NfTEVOOworCW1lbV9tYWxsb2NfYnJrID0gbWVtX21hbGxvY19zdGFydDsKKworCW1lbXNldCAoKHZvaWQgKikgbWVtX21hbGxvY19zdGFydCwKKwkJMCwKKwkJbWVtX21hbGxvY19lbmQgLSBtZW1fbWFsbG9jX3N0YXJ0KTsKK30KKwordm9pZCAqc2JyayAocHRyZGlmZl90IGluY3JlbWVudCkKK3sKKwl1bG9uZyBvbGQgPSBtZW1fbWFsbG9jX2JyazsKKwl1bG9uZyBuZXcgPSBvbGQgKyBpbmNyZW1lbnQ7CisKKwlpZiAoKG5ldyA8IG1lbV9tYWxsb2Nfc3RhcnQpIHx8IChuZXcgPiBtZW1fbWFsbG9jX2VuZCkpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbWVtX21hbGxvY19icmsgPSBuZXc7CisJcmV0dXJuICgodm9pZCAqKSBvbGQpOworfQorCisKK3N0YXRpYyBpbnQgaW5pdF9mdW5jX3JhbSAodm9pZCkKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworI2lmZGVmCUNPTkZJR19CT0FSRF9UWVBFUworCWludCBib2FyZF90eXBlID0gZ2QtPmJvYXJkX3R5cGU7CisjZWxzZQorCWludCBib2FyZF90eXBlID0gMDsJLyogdXNlIGR1bW15IGFyZyAqLworI2VuZGlmCisJcHV0cyAoIkRSQU06ICAiKTsKKworCWlmICgoZ2QtPnJhbV9zaXplID0gaW5pdGRyYW0gKGJvYXJkX3R5cGUpKSA+IDApIHsKKwkJcHJpbnRfc2l6ZSAoZ2QtPnJhbV9zaXplLCAiXG4iKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJcHV0cyAoZmFpbGVkKTsKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50IGRpc3BsYXlfYmFubmVyKHZvaWQpCit7CisKKwlwcmludGYgKCJcblxuJXNcblxuIiwgdmVyc2lvbl9zdHJpbmcpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfZmxhc2hfY29uZmlnKHVsb25nIHNpemUpCit7CisJcHV0cyAoIkZsYXNoOiAiKTsKKwlwcmludF9zaXplIChzaXplLCAiXG4iKTsKK30KKworCitzdGF0aWMgaW50IGluaXRfYmF1ZHJhdGUgKHZvaWQpCit7CisJREVDTEFSRV9HTE9CQUxfREFUQV9QVFI7CisKKwl1Y2hhciB0bXBbNjRdOwkvKiBsb25nIGVub3VnaCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisJaW50IGkgPSBnZXRlbnZfciAoImJhdWRyYXRlIiwgdG1wLCBzaXplb2YgKHRtcCkpOworCisJZ2QtPmJhdWRyYXRlID0gKGkgPiAwKQorCQkJPyAoaW50KSBzaW1wbGVfc3RydG91bCAodG1wLCBOVUxMLCAxMCkKKwkJCTogQ09ORklHX0JBVURSQVRFOworCisJcmV0dXJuICgwKTsKK30KKworCisvKgorICogQnJlYXRoIHNvbWUgbGlmZSBpbnRvIHRoZSBib2FyZC4uLgorICoKKyAqIFRoZSBmaXJzdCBwYXJ0IG9mIGluaXRpYWxpemF0aW9uIGlzIHJ1bm5pbmcgZnJvbSBGbGFzaCBtZW1vcnk7CisgKiBpdHMgbWFpbiBwdXJwb3NlIGlzIHRvIGluaXRpYWxpemUgdGhlIFJBTSBzbyB0aGF0IHdlCisgKiBjYW4gcmVsb2NhdGUgdGhlIG1vbml0b3IgY29kZSB0byBSQU0uCisgKi8KKworLyoKKyAqIEFsbCBhdHRlbXB0cyB0byBjb21lIHVwIHdpdGggYSAiY29tbW9uIiBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQorICogdGhhdCB3b3JrcyBmb3IgYWxsIGJvYXJkcyBhbmQgYXJjaGl0ZWN0dXJlcyBmYWlsZWQ6IHNvbWUgb2YgdGhlCisgKiByZXF1aXJlbWVudHMgYXJlIGp1c3QgX3Rvb18gZGlmZmVyZW50LiBUbyBnZXQgcmlkIG9mIHRoZSByZXN1bHRpbmcKKyAqIG1lc3Mgb2YgYm9hcmQgZGVwZW5kZW5kICNpZmRlZidlZCBjb2RlIHdlIG5vdyBtYWtlIHRoZSB3aG9sZQorICogaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgY29uZmlndXJhYmxlIHRvIHRoZSB1c2VyLgorICoKKyAqIFRoZSByZXF1aXJlbWVudHMgZm9yIGFueSBuZXcgaW5pdGFsaXphdGlvbiBmdW5jdGlvbiBpcyBzaW1wbGU6IGl0CisgKiByZWNlaXZlcyBhIHBvaW50ZXIgdG8gdGhlICJnbG9iYWwgZGF0YSIgc3RydWN0dXJlIGFzIGl0J3Mgb25seQorICogYXJndW1lbnQsIGFuZCByZXR1cm5zIGFuIGludGVnZXIgcmV0dXJuIGNvZGUsIHdoZXJlIDAgbWVhbnMKKyAqICJjb250aW51ZSIgYW5kICE9IDAgbWVhbnMgImZhdGFsIGVycm9yLCBoYW5nIHRoZSBzeXN0ZW0iLgorICovCit0eXBlZGVmIGludCAoaW5pdF9mbmNfdCkgKHZvaWQpOworCitpbml0X2ZuY190ICppbml0X3NlcXVlbmNlW10gPSB7CisJdGltZXJfaW5pdCwKKwllbnZfaW5pdCwJCS8qIGluaXRpYWxpemUgZW52aXJvbm1lbnQgKi8KKwlpbml0X2JhdWRyYXRlLAkJLyogaW5pdGlhbHplIGJhdWRyYXRlIHNldHRpbmdzICovCisJc2VyaWFsX2luaXQsCQkvKiBzZXJpYWwgY29tbXVuaWNhdGlvbnMgc2V0dXAgKi8KKwljb25zb2xlX2luaXRfZiwKKwlkaXNwbGF5X2Jhbm5lciwJCS8qIHNheSB0aGF0IHdlIGFyZSBoZXJlICovCisJaW5pdF9mdW5jX3JhbSwKKwlOVUxMLAorfTsKKworCit2b2lkIGJvYXJkX2luaXRfZih1bG9uZyBib290ZmxhZykKK3sKKwlERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKKworCWdkX3QgZ2RfZGF0YSwgKmlkOworCWJkX3QgKmJkOworCWluaXRfZm5jX3QgKippbml0X2ZuY19wdHI7CisJdWxvbmcgYWRkciwgYWRkcl9zcCwgbGVuICAgPSBDRkdfTU9OSVRPUl9MRU47CisKKwkJLyogUG9pbnRlciBpcyB3cml0YWJsZSBzaW5jZSB3ZSBhbGxvY2F0ZWQgYSByZWdpc3RlciBmb3IgaXQuCisJCSAqLworCWdkID0gJmdkX2RhdGE7CisJbWVtc2V0IChnZCwgMCwgc2l6ZW9mIChnZF90KSk7CisKKwlmb3IgKGluaXRfZm5jX3B0ciA9IGluaXRfc2VxdWVuY2U7ICppbml0X2ZuY19wdHI7ICsraW5pdF9mbmNfcHRyKSB7CisJCWlmICgoKmluaXRfZm5jX3B0cikoKSAhPSAwKSB7CisJCQloYW5nICgpOworCQl9CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBoYXZlIERSQU0gbWFwcGVkIGFuZCB3b3JraW5nLCB3ZSBjYW4KKwkgKiByZWxvY2F0ZSB0aGUgY29kZSBhbmQgY29udGludWUgcnVubmluZyBmcm9tIERSQU0uCisJICovCisJYWRkciA9IENGR19TRFJBTV9CQVNFICsgZ2QtPnJhbV9zaXplOworCisJCS8qIFdlIGNhbiByZXNlcnZlIHNvbWUgUkFNICJvbiB0b3AiIGhlcmUuCisJCSAqLworCisJCS8qIHJvdW5kIGRvd24gdG8gbmV4dCA0IGtCIGxpbWl0LgorCQkgKi8KKwlhZGRyICY9IH4oNDA5NiAtIDEpOworI2lmZGVmIERFQlVHCisJcHJpbnRmICgiVG9wIG9mIFJBTSB1c2FibGUgZm9yIFUtQm9vdCBhdDogJTA4bHhcbiIsIGFkZHIpOworI2VuZGlmCisJIAorCQkvKiBSZXNlcnZlIG1lbW9yeSBmb3IgVS1Cb290IGNvZGUsIGRhdGEgJiBic3MKKwkJICogcm91bmQgZG93biB0byBuZXh0IDQga0IgbGltaXQKKwkJICovCisJYWRkciAtPSBsZW47CisJYWRkciAmPSB+KDQwOTYgLSAxKTsKKworI2lmZGVmIERFQlVHCisJcHJpbnRmICgiUmVzZXJ2aW5nICVsZGsgZm9yIFUtQm9vdCBhdDogJTA4bHhcbiIsIGxlbiA+PiAxMCwgYWRkcik7CisjZW5kaWYKKworCSAJLyogUmVzZXJ2ZSBtZW1vcnkgZm9yIG1hbGxvYygpIGFyZW5hLgorCQkgKi8KKwlhZGRyX3NwID0gYWRkciAtIFRPVEFMX01BTExPQ19MRU47CisjaWZkZWYgREVCVUcKKwlwcmludGYgKCJSZXNlcnZpbmcgJWRrIGZvciBtYWxsb2MoKSBhdDogJTA4bHhcbiIsCisJCQlUT1RBTF9NQUxMT0NfTEVOID4+IDEwLCBhZGRyX3NwKTsKKyNlbmRpZgorCisJLyoKKwkgKiAocGVybWFuZW50bHkpIGFsbG9jYXRlIGEgQm9hcmQgSW5mbyBzdHJ1Y3QKKwkgKiBhbmQgYSBwZXJtYW5lbnQgY29weSBvZiB0aGUgImdsb2JhbCIgZGF0YQorCSAqLworCWFkZHJfc3AgLT0gc2l6ZW9mKGJkX3QpOworCWJkID0gKGJkX3QgKilhZGRyX3NwOworCWdkLT5iZCA9IGJkOworI2lmZGVmIERFQlVHCisJcHJpbnRmICgiUmVzZXJ2aW5nICVkIEJ5dGVzIGZvciBCb2FyZCBJbmZvIGF0OiAlMDhseFxuIiwKKwkJCXNpemVvZihiZF90KSwgYWRkcl9zcCk7CisjZW5kaWYKKwlhZGRyX3NwIC09IHNpemVvZihnZF90KTsKKwlpZCA9IChnZF90ICopYWRkcl9zcDsKKyNpZmRlZiBERUJVRworCXByaW50ZiAoIlJlc2VydmluZyAlZCBCeXRlcyBmb3IgR2xvYmFsIERhdGEgYXQ6ICUwOGx4XG4iLAorCQkJc2l6ZW9mIChnZF90KSwgYWRkcl9zcCk7CisjZW5kaWYKKworCSAJLyogUmVzZXJ2ZSBtZW1vcnkgZm9yIGJvb3QgcGFyYW1zLgorCQkgKi8KKwlhZGRyX3NwIC09IENGR19CT09UUEFSQU1TX0xFTjsKKwliZC0+YmlfYm9vdF9wYXJhbXMgPSBhZGRyX3NwOworI2lmZGVmIERFQlVHCisJcHJpbnRmICgiUmVzZXJ2aW5nICVkayBmb3IgbWFsbG9jKCkgYXQ6ICUwOGx4XG4iLAorCQkJQ0ZHX0JPT1RQQVJBTVNfTEVOID4+IDEwLCBhZGRyX3NwKTsKKyNlbmRpZgorCisJLyoKKwkgKiBGaW5hbGx5LCB3ZSBzZXQgdXAgYSBuZXcgKGJpZ2dlcikgc3RhY2suCisJICoKKwkgKiBMZWF2ZSBzb21lIHNhZmV0eSBnYXAgZm9yIFNQLCBmb3JjZSBhbGlnbm1lbnQgb24gMTYgYnl0ZSBib3VuZGFyeQorCSAqIENsZWFyIGluaXRpYWwgc3RhY2sgZnJhbWUKKwkgKi8KKwlhZGRyX3NwIC09IDE2OworCWFkZHJfc3AgJj0gfjB4RjsKKwkqKCh1bG9uZyAqKSBhZGRyX3NwKS0tID0gMDsKKwkqKCh1bG9uZyAqKSBhZGRyX3NwKS0tID0gMDsKKyNpZmRlZiBERUJVRworCXByaW50ZiAoIlN0YWNrIFBvaW50ZXIgYXQ6ICUwOGx4XG4iLCBhZGRyX3NwKTsKKyNlbmRpZgorCS8qCisJICogU2F2ZSBsb2NhbCB2YXJpYWJsZXMgdG8gYm9hcmQgaW5mbyBzdHJ1Y3QKKwkgKi8KKwliZC0+YmlfbWVtc3RhcnQJPSBDRkdfU0RSQU1fQkFTRTsJLyogc3RhcnQgb2YgIERSQU0gbWVtb3J5ICovCisJYmQtPmJpX21lbXNpemUJPSBnZC0+cmFtX3NpemU7CQkvKiBzaXplICBvZiAgRFJBTSBtZW1vcnkgaW4gYnl0ZXMgKi8KKwliZC0+YmlfYmF1ZHJhdGUJPSBnZC0+YmF1ZHJhdGU7CQkvKiBDb25zb2xlIEJhdWRyYXRlICovCisKKwltZW1jcHkgKGlkLCBnZCwgc2l6ZW9mIChnZF90KSk7CisJcmVsb2NhdGVfY29kZSAoYWRkcl9zcCwgaWQsIGFkZHIpOworCisJLyogTk9UUkVBQ0hFRCAtIHJlbG9jYXRlX2NvZGUoKSBkb2VzIG5vdCByZXR1cm4gKi8KK30KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBUaGlzIGlzIHRoZSBuZXh0IHBhcnQgaWYgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlOiB3ZSBhcmUgbm93CisgKiBydW5uaW5nIGZyb20gUkFNIGFuZCBoYXZlIGEgIm5vcm1hbCIgQyBlbnZpcm9ubWVudCwgaS4gZS4gZ2xvYmFsCisgKiBkYXRhIGNhbiBiZSB3cml0dGVuLCBCU1MgaGFzIGJlZW4gY2xlYXJlZCwgdGhlIHN0YWNrIHNpemUgaW4gbm90CisgKiB0aGF0IGNyaXRpY2FsIGFueSBtb3JlLCBldGMuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKK3ZvaWQgYm9hcmRfaW5pdF9yIChnZF90ICppZCwgdWxvbmcgZGVzdF9hZGRyKQoreworCURFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisJY21kX3RibF90ICpjbWR0cDsKKwl1bG9uZyBzaXplOworCWV4dGVybiB2b2lkIG1hbGxvY19iaW5fcmVsb2MgKHZvaWQpOworI2lmbmRlZiBDRkdfRU5WX0lTX05PV0hFUkUKKwlleHRlcm4gY2hhciAqIGVudl9uYW1lX3NwZWM7CisjZW5kaWYKKwljaGFyICpzLCAqZTsKKwliZF90ICpiZDsKKwlpbnQgaTsKKworCWdkID0gaWQ7CisJZ2QtPmZsYWdzIHw9IEdEX0ZMR19SRUxPQzsJLyogdGVsbCBvdGhlcnM6IHJlbG9jYXRpb24gZG9uZSAqLworCisjaWZkZWYgREVCVUcKKwlwcmludGYgKCJOb3cgcnVubmluZyBpbiBSQU0gLSBVLUJvb3QgYXQ6ICUwOGx4XG4iLCBkZXN0X2FkZHIpOworI2VuZGlmCisKKwlnZC0+cmVsb2Nfb2ZmID0gZGVzdF9hZGRyIC0gQ0ZHX01PTklUT1JfQkFTRTsKKworCS8qCisJICogV2UgaGF2ZSB0byByZWxvY2F0ZSB0aGUgY29tbWFuZCB0YWJsZSBtYW51YWxseQorCSAqLworCWZvciAoY21kdHAgPSAmY21kX3RibFswXTsgY21kdHAtPm5hbWU7IGNtZHRwKyspIHsKKwkJdWxvbmcgYWRkcjsKKworCQlhZGRyID0gKHVsb25nKSAoY21kdHAtPmNtZCkgKyBnZC0+cmVsb2Nfb2ZmOworI2lmIDAKKwkJcHJpbnRmICgiQ29tbWFuZCBcIiVzXCI6IDB4JTA4bHggPT4gMHglMDhseFxuIiwKKwkJCQljbWR0cC0+bmFtZSwgKHVsb25nKSAoY21kdHAtPmNtZCksIGFkZHIpOworI2VuZGlmCisJCWNtZHRwLT5jbWQgPQorCQkJKGludCAoKikoc3RydWN0IGNtZF90YmxfcyAqLCBpbnQsIGludCwgY2hhciAqW10pKWFkZHI7CisKKwkJYWRkciA9ICh1bG9uZykoY21kdHAtPm5hbWUpICsgZ2QtPnJlbG9jX29mZjsKKwkJY21kdHAtPm5hbWUgPSAoY2hhciAqKWFkZHI7CisKKwkJaWYgKGNtZHRwLT51c2FnZSkgeworCQkJYWRkciA9ICh1bG9uZykoY21kdHAtPnVzYWdlKSArIGdkLT5yZWxvY19vZmY7CisJCQljbWR0cC0+dXNhZ2UgPSAoY2hhciAqKWFkZHI7CisJCX0KKyNpZmRlZglDRkdfTE9OR0hFTFAKKwkJaWYgKGNtZHRwLT5oZWxwKSB7CisJCQlhZGRyID0gKHVsb25nKShjbWR0cC0+aGVscCkgKyBnZC0+cmVsb2Nfb2ZmOworCQkJY21kdHAtPmhlbHAgPSAoY2hhciAqKWFkZHI7CisJCX0KKyNlbmRpZgorCX0KKwkvKiB0aGVyZSBhcmUgc29tZSBvdGhlciBwb2ludGVyIGNvbnN0YW50cyB3ZSBtdXN0IGRlYWwgd2l0aCAqLworI2lmbmRlZiBDRkdfRU5WX0lTX05PV0hFUkUKKwllbnZfbmFtZV9zcGVjICs9IGdkLT5yZWxvY19vZmY7CisjZW5kaWYKKwkKKwkvKiBjb25maWd1cmUgYXZhaWxhYmxlIEZMQVNIIGJhbmtzICovCisJc2l6ZSA9IGZsYXNoX2luaXQoKTsKKwlkaXNwbGF5X2ZsYXNoX2NvbmZpZyAoc2l6ZSk7CisKKwliZCA9IGdkLT5iZDsKKwliZC0+YmlfZmxhc2hzdGFydCA9IENGR19GTEFTSF9CQVNFOworCWJkLT5iaV9mbGFzaHNpemUgPSBzaXplOworI2lmIENGR19NT05JVE9SX0JBU0UgPT0gQ0ZHX0ZMQVNIX0JBU0UKKwliZC0+YmlfZmxhc2hvZmZzZXQgPSBDRkdfTU9OSVRPUl9MRU47CS8qIHJlc2VydmVkIGFyZWEgZm9yIFUtQm9vdCAqLworI2Vsc2UKKwliZC0+YmlfZmxhc2hvZmZzZXQgPSAwOworI2VuZGlmCisKKwkvKiBpbml0aWFsaXplIG1hbGxvYygpIGFyZWEgKi8KKwltZW1fbWFsbG9jX2luaXQoKTsKKwltYWxsb2NfYmluX3JlbG9jKCk7CisKKwkvKiByZWxvY2F0ZSBlbnZpcm9ubWVudCBmdW5jdGlvbiBwb2ludGVycyBldGMuICovCisJZW52X3JlbG9jYXRlKCk7CisKKwkvKiBib2FyZCBNQUMgYWRkcmVzcyAqLworCXMgPSBnZXRlbnYgKCJldGhhZGRyIik7CisJZm9yIChpID0gMDsgaSA8IDY7ICsraSkgeworCQliZC0+YmlfZW5ldGFkZHJbaV0gPSBzID8gc2ltcGxlX3N0cnRvdWwgKHMsICZlLCAxNikgOiAwOworCQlpZiAocykKKwkJCXMgPSAoKmUpID8gZSArIDEgOiBlOworCX0KKworCS8qIElQIEFkZHJlc3MgKi8KKwliZC0+YmlfaXBfYWRkciA9IGdldGVudl9JUGFkZHIoImlwYWRkciIpOworCisvKiogbGVhdmUgdGhpcyBoZXJlIChhZnRlciBtYWxsb2MoKSwgZW52aXJvbm1lbnQgYW5kIFBDSSBhcmUgd29ya2luZykgKiovCisJLyogSW5pdGlhbGl6ZSBkZXZpY2VzICovCisJZGV2aWNlc19pbml0ICgpOworCisJLyogYWxsb2NhdGUgc3lzY2FsbHMgdGFibGUgKGNvbnNvbGVfaW5pdF9yIHdpbGwgZmlsbCBpdCBpbiAqLworCXN5c2NhbGxfdGJsID0gKHZvaWQgKiopIG1hbGxvYyAoTlJfU1lTQ0FMTFMgKiBzaXplb2YgKHZvaWQgKikpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgY29uc29sZSAoYWZ0ZXIgdGhlIHJlbG9jYXRpb24gYW5kIGRldmljZXMgaW5pdCkgKi8KKwljb25zb2xlX2luaXRfciAoKTsKKy8qKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKi8KKworI2lmIChDT05GSUdfQ09NTUFORFMgJiBDRkdfQ01EX05FVCkgJiYgZGVmaW5lZChDT05GSUdfTkVUX01VTFRJKQorCXB1dHMgKCJOZXQ6ICAgIik7CisJZXRoX2luaXRpYWxpemUoZ2QtPmJkKTsKKyNlbmRpZgorCisJLyogbWFpbl9sb29wKCkgY2FuIHJldHVybiB0byByZXRyeSBhdXRvYm9vdCwgaWYgc28ganVzdCBydW4gaXQgYWdhaW4uICovCisJZm9yICg7OykgeworCQltYWluX2xvb3AgKCk7CisJfQorCisJLyogTk9UUkVBQ0hFRCAtIG5vIHdheSBvdXQgb2YgY29tbWFuZCBsb29wIGV4Y2VwdCBib290aW5nICovCit9CisKK3ZvaWQgaGFuZyAodm9pZCkKK3sKKwlwdXRzICgiIyMjIEVSUk9SICMjIyBQbGVhc2UgUkVTRVQgdGhlIGJvYXJkICMjI1xuIik7CisJZm9yICg7Oyk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYl9taXBzL21pcHNfbGludXguYyBiL2xpYl9taXBzL21pcHNfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzNkNGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliX21pcHMvbWlwc19saW51eC5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogKEMpIENvcHlyaWdodCAyMDAzCisgKiBXb2xmZ2FuZyBEZW5rLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCB3ZEBkZW54LmRlLgorICoKKyAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCisgKiBwcm9qZWN0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgPGNvbW1vbi5oPgorI2luY2x1ZGUgPGNvbW1hbmQuaD4KKyNpbmNsdWRlIDxjbWRfYm9vdC5oPgorI2luY2x1ZGUgPGltYWdlLmg+CisjaW5jbHVkZSA8emxpYi5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisKKyNkZWZpbmUJTElOVVhfTUFYX0VOVlMJCTI1NgorI2RlZmluZQlMSU5VWF9NQVhfQVJHUwkJMjU2CisKKyNpZmRlZiBDT05GSUdfU0hPV19CT09UX1BST0dSRVNTCisjIGluY2x1ZGUgPHN0YXR1c19sZWQuaD4KKyMgZGVmaW5lIFNIT1dfQk9PVF9QUk9HUkVTUyhhcmcpCXNob3dfYm9vdF9wcm9ncmVzcyhhcmcpCisjZWxzZQorIyBkZWZpbmUgU0hPV19CT09UX1BST0dSRVNTKGFyZykKKyNlbmRpZgorCitleHRlcm4gaW1hZ2VfaGVhZGVyX3QgaGVhZGVyOyAgICAgICAgICAgLyogZnJvbSBjbWRfYm9vdG0uYyAqLworCitzdGF0aWMgaW50CWxpbnV4X2FyZ2M7CitzdGF0aWMgY2hhciAqKglsaW51eF9hcmd2OworCitzdGF0aWMgY2hhciAqKglsaW51eF9lbnY7CitzdGF0aWMgY2hhciAqCWxpbnV4X2Vudl9wOworc3RhdGljIGludAlsaW51eF9lbnZfaWR4OworCitzdGF0aWMgdm9pZCBsaW51eF9wYXJhbXNfaW5pdCAodWxvbmcgc3RhcnQsIGNoYXIgKiBjb21tYW5kbGluZSk7CitzdGF0aWMgdm9pZCBsaW51eF9lbnZfc2V0IChjaGFyICogZW52X25hbWUsIGNoYXIgKiBlbnZfdmFsKTsKKworCit2b2lkIGRvX2Jvb3RtX2xpbnV4KGNtZF90YmxfdCAqY21kdHAsIGludCBmbGFnLCBpbnQgYXJnYywgY2hhciAqYXJndltdLAorCQl1bG9uZyBhZGRyLCB1bG9uZyAqbGVuX3B0ciwgaW50ICAgdmVyaWZ5KQoreworICAgIERFQ0xBUkVfR0xPQkFMX0RBVEFfUFRSOworCisgICAgdWxvbmcgbGVuID0gMCwgY2hlY2tzdW07CisgICAgdWxvbmcgaW5pdHJkX3N0YXJ0LCBpbml0cmRfZW5kOworICAgIHVsb25nIGRhdGE7CisgICAgdm9pZCAoKnRoZUtlcm5lbCkoaW50LCBjaGFyICoqLCBjaGFyICoqLCBpbnQgKik7CisgICAgaW1hZ2VfaGVhZGVyX3QgKmhkciA9ICZoZWFkZXI7CisgICAgY2hhciAqY29tbWFuZGxpbmUgPSBnZXRlbnYoImJvb3RhcmdzIik7CisgICAgY2hhciBlbnZfYnVmWzEyXTsKKworICAgIHRoZUtlcm5lbCA9ICh2b2lkICgqKShpbnQsIGNoYXIgKiosIGNoYXIgKiosIGludCAqKSludG9obChoZHItPmloX2VwKTsKKworICAgIC8qCisgICAgICogQ2hlY2sgaWYgdGhlcmUgaXMgYW4gaW5pdHJkIGltYWdlCisgICAgICovCisgICAgaWYgKGFyZ2MgPj0gMykgeworCVNIT1dfQk9PVF9QUk9HUkVTUyAoOSk7CisKKwlhZGRyID0gc2ltcGxlX3N0cnRvdWwoYXJndlsyXSwgTlVMTCwgMTYpOworCisJcHJpbnRmICgiIyMgTG9hZGluZyBSYW1kaXNrIEltYWdlIGF0ICUwOGx4IC4uLlxuIiwgYWRkcik7CisKKwkvKiBDb3B5IGhlYWRlciBzbyB3ZSBjYW4gYmxhbmsgQ1JDIGZpZWxkIGZvciByZS1jYWxjdWxhdGlvbiAqLworCW1lbWNweSAoJmhlYWRlciwgKGNoYXIgKilhZGRyLCBzaXplb2YoaW1hZ2VfaGVhZGVyX3QpKTsKKworCWlmIChudG9obChoZHItPmloX21hZ2ljKSAhPSBJSF9NQUdJQykgeworCSAgICBwcmludGYgKCJCYWQgTWFnaWMgTnVtYmVyXG4iKTsKKwkgICAgU0hPV19CT09UX1BST0dSRVNTICgtMTApOworCSAgICBkb19yZXNldCAoY21kdHAsIGZsYWcsIGFyZ2MsIGFyZ3YpOworCX0KKworCWRhdGEgPSAodWxvbmcpJmhlYWRlcjsKKwlsZW4gID0gc2l6ZW9mKGltYWdlX2hlYWRlcl90KTsKKworCWNoZWNrc3VtID0gbnRvaGwoaGRyLT5paF9oY3JjKTsKKwloZHItPmloX2hjcmMgPSAwOworCisJaWYgKGNyYzMyICgwLCAoY2hhciAqKWRhdGEsIGxlbikgIT0gY2hlY2tzdW0pIHsKKwkgICAgcHJpbnRmICgiQmFkIEhlYWRlciBDaGVja3N1bVxuIik7CisJICAgIFNIT1dfQk9PVF9QUk9HUkVTUyAoLTExKTsKKwkgICAgZG9fcmVzZXQgKGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KTsKKwl9CisKKwlTSE9XX0JPT1RfUFJPR1JFU1MgKDEwKTsKKworCXByaW50X2ltYWdlX2hkciAoaGRyKTsKKworCWRhdGEgPSBhZGRyICsgc2l6ZW9mKGltYWdlX2hlYWRlcl90KTsKKwlsZW4gID0gbnRvaGwoaGRyLT5paF9zaXplKTsKKworCWlmICh2ZXJpZnkpIHsKKwkgICAgdWxvbmcgY3N1bSA9IDA7CisKKwkgICAgcHJpbnRmICgiICAgVmVyaWZ5aW5nIENoZWNrc3VtIC4uLiAiKTsKKwkgICAgY3N1bSA9IGNyYzMyICgwLCAoY2hhciAqKWRhdGEsIGxlbik7CisJICAgIGlmIChjc3VtICE9IG50b2hsKGhkci0+aWhfZGNyYykpIHsKKwkJcHJpbnRmICgiQmFkIERhdGEgQ1JDXG4iKTsKKwkgICAgICAgIFNIT1dfQk9PVF9QUk9HUkVTUyAoLTEyKTsKKwkJZG9fcmVzZXQgKGNtZHRwLCBmbGFnLCBhcmdjLCBhcmd2KTsKKwkgICAgfQorCSAgICBwcmludGYgKCJPS1xuIik7CisJfQorCisJU0hPV19CT09UX1BST0dSRVNTICgxMSk7CisKKwlpZiAoKGhkci0+aWhfb3MgICAhPSBJSF9PU19MSU5VWCkJfHwKKwkgICAgKGhkci0+aWhfYXJjaCAhPSBJSF9DUFVfTUlQUykJfHwKKwkgICAgKGhkci0+aWhfdHlwZSAhPSBJSF9UWVBFX1JBTURJU0spCSkgeworCSAgICBwcmludGYgKCJObyBMaW51eCBNSVBTIFJhbWRpc2sgSW1hZ2VcbiIpOworCSAgICBTSE9XX0JPT1RfUFJPR1JFU1MgKC0xMyk7CisJICAgIGRvX3Jlc2V0IChjbWR0cCwgZmxhZywgYXJnYywgYXJndik7CisJfQorCisJLyoKKwkgKiBOb3cgY2hlY2sgaWYgd2UgaGF2ZSBhIG11bHRpZmlsZSBpbWFnZQorCSAqLworICAgIH0gZWxzZSBpZiAoKGhkci0+aWhfdHlwZT09SUhfVFlQRV9NVUxUSSkgJiYgKGxlbl9wdHJbMV0pKSB7CisJdWxvbmcgdGFpbCAgICA9IG50b2hsKGxlbl9wdHJbMF0pICUgNDsKKwlpbnQgaTsKKworCVNIT1dfQk9PVF9QUk9HUkVTUyAoMTMpOworCisJLyogc2tpcCBrZXJuZWwgbGVuZ3RoIGFuZCB0ZXJtaW5hdG9yICovCisJZGF0YSA9ICh1bG9uZykoJmxlbl9wdHJbMl0pOworCS8qIHNraXAgYW55IGFkZGl0aW9uYWwgaW1hZ2UgbGVuZ3RoIGZpZWxkcyAqLworCWZvciAoaT0xOyBsZW5fcHRyW2ldOyArK2kpCisJICBkYXRhICs9IDQ7CisJLyogYWRkIGtlcm5lbCBsZW5ndGgsIGFuZCBhbGlnbiAqLworCWRhdGEgKz0gbnRvaGwobGVuX3B0clswXSk7CisJaWYgKHRhaWwpIHsKKwkgICAgZGF0YSArPSA0IC0gdGFpbDsKKwl9CisKKwlsZW4gICA9IG50b2hsKGxlbl9wdHJbMV0pOworCisgICAgfSBlbHNlIHsKKwkvKgorCSAqIG5vIGluaXRyZCBpbWFnZQorCSAqLworICAgICAgICBTSE9XX0JPT1RfUFJPR1JFU1MgKDE0KTsKKworCWRhdGEgPSAwOworICAgIH0KKworI2lmZGVmCURFQlVHCisgICAgaWYgKCFkYXRhKSB7CisJcHJpbnRmICgiTm8gaW5pdHJkXG4iKTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChkYXRhKSB7CisJaW5pdHJkX3N0YXJ0ID0gZGF0YTsKKwlpbml0cmRfZW5kICAgPSBpbml0cmRfc3RhcnQgKyBsZW47CisgICAgfSBlbHNlIHsKKwlpbml0cmRfc3RhcnQgPSAwOworCWluaXRyZF9lbmQgPSAwOworICAgIH0KKworICAgIFNIT1dfQk9PVF9QUk9HUkVTUyAoMTUpOworCisjaWZkZWYgREVCVUcKKyAgICBwcmludGYgKCIjIyBUcmFuc2ZlcnJpbmcgY29udHJvbCB0byBMaW51eCAoYXQgYWRkcmVzcyAlMDhseCkgLi4uXG4iLAorCSAgICAodWxvbmcpdGhlS2VybmVsKTsKKyNlbmRpZgorCisgICAgbGludXhfcGFyYW1zX2luaXQgKFBIWVNBRERSKGdkLT5iZC0+YmlfYm9vdF9wYXJhbXMpLCBjb21tYW5kbGluZSk7CisKKyAgICBzcHJpbnRmIChlbnZfYnVmLCAiJWx1IiwgZ2QtPnJhbV9zaXplID4+IDIwKTsKKyAgICBsaW51eF9lbnZfc2V0ICgibWVtc2l6ZSIsIGVudl9idWYpOworCisgICAgc3ByaW50ZiAoZW52X2J1ZiwgIjB4JTA4WCIsICh1aW50KVBIWVNBRERSKGluaXRyZF9zdGFydCkpOworICAgIGxpbnV4X2Vudl9zZXQgKCJpbml0cmRfc3RhcnQiLCBlbnZfYnVmKTsKKworICAgIHNwcmludGYgKGVudl9idWYsICIweCVYIiwgKHVpbnQpKGluaXRyZF9lbmQgLSBpbml0cmRfc3RhcnQpKTsKKyAgICBsaW51eF9lbnZfc2V0ICgiaW5pdHJkX3NpemUiLCBlbnZfYnVmKTsKKworICAgIHNwcmludGYgKGVudl9idWYsICIweCUwOFgiLCAodWludCkoZ2QtPmJkLT5iaV9mbGFzaHN0YXJ0KSk7CisgICAgbGludXhfZW52X3NldCAoImZsYXNoX3N0YXJ0IiwgZW52X2J1Zik7CisKKyAgICBzcHJpbnRmIChlbnZfYnVmLCAiMHglWCIsICh1aW50KShnZC0+YmQtPmJpX2ZsYXNoc2l6ZSkpOworICAgIGxpbnV4X2Vudl9zZXQgKCJmbGFzaF9zaXplIiwgZW52X2J1Zik7CisKKyAgICAvKiB3ZSBhc3N1bWUgdGhhdCB0aGUga2VybmVsIGlzIGluIHBsYWNlICovCisgICAgcHJpbnRmKCJcblN0YXJ0aW5nIGtlcm5lbCAuLi5cblxuIik7CisKKyAgICB0aGVLZXJuZWwobGludXhfYXJnYywgbGludXhfYXJndiwgbGludXhfZW52LCAwKTsKK30KKworc3RhdGljIHZvaWQgbGludXhfcGFyYW1zX2luaXQgKHVsb25nIHN0YXJ0LCBjaGFyICogbGluZSkKK3sKKyAgICBjaGFyICogbmV4dCwgKiBxdW90ZSwgKiBhcmdwOworCisgICAgbGludXhfYXJnYyA9IDE7CisgICAgbGludXhfYXJndiA9IChjaGFyICoqKSBzdGFydDsKKyAgICBsaW51eF9hcmd2WzBdID0gMDsKKyAgICBhcmdwID0gKGNoYXIgKikobGludXhfYXJndiArIExJTlVYX01BWF9BUkdTKTsKKworICAgIG5leHQgPSBsaW5lOworCisgICAgd2hpbGUgKGxpbmUgJiYgKmxpbmUgJiYgbGludXhfYXJnYyA8IExJTlVYX01BWF9BUkdTKQorICAgIHsKKwlxdW90ZSA9IHN0cmNociAobGluZSwgJyInKTsKKwluZXh0ID0gc3RyY2hyIChsaW5lLCAnICcpOworCisgICAgICAgIHdoaWxlIChuZXh0ICE9IE5VTEwgJiYgcXVvdGUgIT0gTlVMTCAmJiBxdW90ZSA8IG5leHQpCisJeworCSAgICAvKiB3ZSBmb3VuZCBhIGxlZnQgcXVvdGUgYmVmb3JlIHRoZSBuZXh0IGJsYW5rCisgICAgICAgICAgICAgKiBub3cgd2UgaGF2ZSB0byBmaW5kIHRoZSBtYXRjaGluZyByaWdodCBxdW90ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXh0ID0gc3RyY2hyIChxdW90ZSArIDEsICciJyk7CisgICAgICAgICAgICBpZiAobmV4dCAhPSBOVUxMKQorCSAgICB7CisgICAgICAgICAgICAgICAgcXVvdGUgPSBzdHJjaHIgKG5leHQgKyAxLCAnIicpOworICAgICAgICAgICAgICAgIG5leHQgPSBzdHJjaHIgKG5leHQgKyAxLCAnICcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisJCisJaWYgKG5leHQgPT0gTlVMTCkKKwl7CisJICAgIG5leHQgPSBsaW5lICsgc3RybGVuIChsaW5lKTsKKwl9CisKKwlsaW51eF9hcmd2IFtsaW51eF9hcmdjXSA9IGFyZ3A7CisJbWVtY3B5IChhcmdwLCBsaW5lLCBuZXh0IC0gbGluZSk7CisJYXJncCBbbmV4dCAtIGxpbmVdID0gMDsKKworCWFyZ3AgKz0gbmV4dCAtIGxpbmUgKyAxOworCWxpbnV4X2FyZ2MgKys7CisgICAgICAgIAorCWlmICgqbmV4dCkgbmV4dCArKzsKKwkKKwlsaW5lID0gbmV4dDsKKyAgICB9CisKKyAgICBsaW51eF9lbnYgPSAoY2hhciAqKikoKCh1bG9uZylhcmdwICsgMTUpICYgfjE1KTsKKyAgICBsaW51eF9lbnYgWzBdID0gMDsKKyAgICBsaW51eF9lbnZfcCA9IChjaGFyICopKGxpbnV4X2VudiArIExJTlVYX01BWF9FTlZTKTsKKyAgICBsaW51eF9lbnZfaWR4ID0gMDsKK30KKworc3RhdGljIHZvaWQgbGludXhfZW52X3NldCAoY2hhciAqIGVudl9uYW1lLCBjaGFyICogZW52X3ZhbCkKK3sKKyAgICBpZiAobGludXhfZW52X2lkeCA8IExJTlVYX01BWF9FTlZTIC0gMSkKKyAgICB7CisJbGludXhfZW52IFtsaW51eF9lbnZfaWR4XSA9IGxpbnV4X2Vudl9wOworCisJc3RyY3B5IChsaW51eF9lbnZfcCwgZW52X25hbWUpOworCWxpbnV4X2Vudl9wICs9IHN0cmxlbiAoZW52X25hbWUpOworCisJc3RyY3B5IChsaW51eF9lbnZfcCwgIj0iKTsKKwlsaW51eF9lbnZfcCArPSAxOworCisJc3RyY3B5IChsaW51eF9lbnZfcCwgZW52X3ZhbCk7CisJbGludXhfZW52X3AgKz0gc3RybGVuIChlbnZfdmFsKTsKKwkKKwlsaW51eF9lbnZfcCArKzsKKwlsaW51eF9lbnYgWysrIGxpbnV4X2Vudl9pZHhdID0gMDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWJfbWlwcy90aW1lLmMgYi9saWJfbWlwcy90aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU2MTM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYl9taXBzL3RpbWUuYwpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIChDKSBDb3B5cmlnaHQgMjAwMworICogV29sZmdhbmcgRGVuaywgREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZywgd2RAZGVueC5kZS4KKyAqCisgKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcworICogcHJvamVjdC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8Y29tbW9uLmg+CisKKworc3RhdGljIGlubGluZSB2b2lkIG1pcHNfY29tcGFyZV9zZXQodTMyIHYpCit7CisJYXNtIHZvbGF0aWxlICgibXRjMCAlMCwgJDExIiA6IDogInIiICh2KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtaXBzX2NvdW50X3NldCh1MzIgdikKK3sKKwlhc20gdm9sYXRpbGUgKCJtdGMwICUwLCAkOSIgOiA6ICJyIiAodikpOworfQorCisKK3N0YXRpYyBpbmxpbmUgdTMyIG1pcHNfY291bnRfZ2V0KHZvaWQpCit7CisJdTMyIGNvdW50OworCisJYXNtIHZvbGF0aWxlICgibWZjMCAlMCwgJDkiIDogIj1yIiAoY291bnQpIDopOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHRpbWVyIHdpdGhvdXQgaW50ZXJydXB0cworICovCisKK2ludCB0aW1lcl9pbml0KHZvaWQpCit7CisJbWlwc19jb21wYXJlX3NldCgwKTsKKwltaXBzX2NvdW50X3NldCgwKTsKKworCXJldHVybiAwOworfQorCit2b2lkIHJlc2V0X3RpbWVyKHZvaWQpCit7CisJbWlwc19jb3VudF9zZXQoMCk7Cit9CisKK3Vsb25nIGdldF90aW1lcih1bG9uZyBiYXNlKQoreworCXJldHVybiBtaXBzX2NvdW50X2dldCgpIC0gYmFzZTsKK30KKwordm9pZCBzZXRfdGltZXIodWxvbmcgdCkKK3sKKwltaXBzX2NvdW50X3NldCh0KTsKK30KKwordm9pZCB1ZGVsYXkgKHVuc2lnbmVkIGxvbmcgdXNlYykKK3sKKwl1bG9uZyB0bW87CisJdWxvbmcgc3RhcnQgPSBnZXRfdGltZXIoMCk7CisKKwl0bW8gPSB1c2VjICogQ0ZHX0haIC8gMTAwMDsKKwl0bW8gLz0gMTAwMDsKKworCXdoaWxlICgodWxvbmcpKChtaXBzX2NvdW50X2dldCgpIC0gc3RhcnQpKSA8IHRtbykKKwkJLypOT1AqLzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZGVyaXZlZCBmcm9tIFBvd2VyUEMgY29kZSAocmVhZCB0aW1lYmFzZSBhcyBsb25nIGxvbmcpLgorICogT24gTUlQUyBpdCBqdXN0IHJldHVybnMgdGhlIHRpbWVyIHZhbHVlLgorICovCit1bnNpZ25lZCBsb25nIGxvbmcgZ2V0X3RpY2tzKHZvaWQpCit7CisJcmV0dXJuIG1pcHNfY291bnRfZ2V0KCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGRlcml2ZWQgZnJvbSBQb3dlclBDIGNvZGUgKHRpbWViYXNlIGNsb2NrIGZyZXF1ZW5jeSkuCisgKiBPbiBNSVBTIGl0IHJldHVybnMgdGhlIG51bWJlciBvZiB0aW1lciB0aWNrcyBwZXIgc2Vjb25kLgorICovCit1bG9uZyBnZXRfdGJjbGsodm9pZCkKK3sKKwlyZXR1cm4gQ0ZHX0haOworfQorCisK