LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTIgQnJvYWRjb20gQ29ycG9yYXRpb24KICoKICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogKgogKiAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqCiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogKiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogIFRoaXMgaXMgdGhlIHB1YmxpYyBpbnRlcmZhY2UgZmlsZSBmb3IgdGhlIGF1ZGlvIGdhdGV3YXkgKEFHKSBzdWJzeXN0ZW0KICogIG9mIEJUQSwgQnJvYWRjb20ncyBCbHVldG9vdGggYXBwbGljYXRpb24gbGF5ZXIgZm9yIG1vYmlsZSBwaG9uZXMuCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpZm5kZWYgQlRBX0FHX0FQSV9ICiNkZWZpbmUgQlRBX0FHX0FQSV9ICgojaW5jbHVkZSAiYnRhX2FwaS5oIgoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKiAgQ29uc3RhbnRzIGFuZCBkYXRhIHR5cGVzCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyogQUcgZmVhdHVyZSBtYXNrcyAqLwojZGVmaW5lIEJUQV9BR19GRUFUXzNXQVkgICAgMHgwMDAwMDAwMSAgIC8qIFRocmVlLXdheSBjYWxsaW5nICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfRUNOUiAgICAweDAwMDAwMDAyICAgLyogRWNobyBjYW5jZWxsYXRpb24gYW5kL29yIG5vaXNlIHJlZHVjdGlvbiAqLwojZGVmaW5lIEJUQV9BR19GRUFUX1ZSRUMgICAgMHgwMDAwMDAwNCAgIC8qIFZvaWNlIHJlY29nbml0aW9uICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfSU5CQU5EICAweDAwMDAwMDA4ICAgLyogSW4tYmFuZCByaW5nIHRvbmUgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9WVEFHICAgIDB4MDAwMDAwMTAgICAvKiBBdHRhY2ggYSBwaG9uZSBudW1iZXIgdG8gYSB2b2ljZSB0YWcgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9SRUpFQ1QgIDB4MDAwMDAwMjAgICAvKiBBYmlsaXR5IHRvIHJlamVjdCBpbmNvbWluZyBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfRUNTICAgICAweDAwMDAwMDQwICAgLyogRW5oYW5jZWQgQ2FsbCBTdGF0dXMgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9FQ0MgICAgIDB4MDAwMDAwODAgICAvKiBFbmhhbmNlZCBDYWxsIENvbnRyb2wgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9FWFRFUlIgIDB4MDAwMDAxMDAgICAvKiBFeHRlbmRlZCBlcnJvciBjb2RlcyAqLwojZGVmaW5lIEJUQV9BR19GRUFUX0NPREVDICAgMHgwMDAwMDIwMCAgIC8qIENvZGVjIE5lZ290aWF0aW9uICovCiNkZWZpbmUgQlRBX0FHX0ZFQVRfVk9JUCAgICAweDAwMDAwNDAwICAgLyogVm9JUCBjYWxsICovCi8qIFByb3ByaWV0YXJ5IGZlYXR1cmVzOiB1c2luZyAzMSB+IDE2IGJpdHMgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9CVFJIICAgIDB4MDAwMTAwMDAgICAvKiBDQ0FQIGluY29taW5nIGNhbGwgaG9sZCAqLwojZGVmaW5lIEJUQV9BR19GRUFUX1VOQVQgICAgMHgwMDAyMDAwMCAgIC8qIFBhc3MgdW5rbm93biBBVCBjb21tYW5kcyB0byBhcHBsaWNhdGlvbiAqLwojZGVmaW5lIEJUQV9BR19GRUFUX05PU0NPICAgMHgwMDA0MDAwMCAgIC8qIE5vIFNDTyBjb250cm9sIHBlcmZvcm1lZCBieSBCVEEgQUcgKi8KI2RlZmluZSBCVEFfQUdfRkVBVF9OT19FU0NPIDB4MDAwODAwMDAgICAvKiBEbyBub3QgYWxsb3cgb3IgdXNlIGVTQ08gKi8KCnR5cGVkZWYgVUlOVDMyIHRCVEFfQUdfRkVBVDsKCi8qIEFHIHBhcnNlIG1vZGUgKi8KI2RlZmluZSBCVEFfQUdfUEFSU0UgICAgICAgICAgICAwIC8qIFBlcmZvcm0gQVQgY29tbWFuZCBwYXJzaW5nIGluIEFHICovCiNkZWZpbmUgQlRBX0FHX1BBU1NfVEhST1VHSCAgICAgMSAvKiBQYXNzIGRhdGEgZGlyZWN0bHkgdG8gcGhvbmWScyBBVCBjb21tYW5kIGludGVycHJldGVyICovCgp0eXBlZGVmIFVJTlQ4IHRCVEFfQUdfUEFSU0VfTU9ERTsKCi8qIEFHIG9wZW4gc3RhdHVzICovCiNkZWZpbmUgQlRBX0FHX1NVQ0NFU1MgICAgICAgICAgMCAvKiBDb25uZWN0aW9uIHN1Y2Nlc3NmdWxseSBvcGVuZWQgKi8KI2RlZmluZSBCVEFfQUdfRkFJTF9TRFAgICAgICAgICAxIC8qIE9wZW4gZmFpbGVkIGR1ZSB0byBTRFAgKi8KI2RlZmluZSBCVEFfQUdfRkFJTF9SRkNPTU0gICAgICAyIC8qIE9wZW4gZmFpbGVkIGR1ZSB0byBSRkNPTU0gKi8KI2RlZmluZSBCVEFfQUdfRkFJTF9SRVNPVVJDRVMgICAzIC8qIG91dCBvZiByZXNvdXJjZXMgZmFpbHVyZSAgKi8KCnR5cGVkZWYgVUlOVDggdEJUQV9BR19TVEFUVVM7CgovKiBoYW5kbGUgdmFsdWVzIHVzZWQgd2l0aCBCVEFfQWdSZXN1bHQgKi8KI2RlZmluZSBCVEFfQUdfSEFORExFX05PTkUgICAgICAwCiNkZWZpbmUgQlRBX0FHX0hBTkRMRV9BTEwgICAgICAgMHhGRkZGCi8qIEl0IGlzIHNhZmUgdG8gdXNlIHRoZSBzYW1lIHZhbHVlIGFzIEJUQV9BR19IQU5ETEVfQUxMCiAqIEhBTkRMRV9BTEwgaXMgdXNlZCBmb3IgZGVsaXZlcmluZyBpbmRpY2F0aW9uCiAqIFNDT19OT19DSEFOR0UgaXMgdXNlZCBmb3IgY2hhbmdpbmcgc2NvIGJlaGF2aW9yCiAqIFRoZXkgZG9ub3QgaW50ZXJmZXJlIHdpdGggZWFjaCBvdGhlcgogKi8KI2RlZmluZSBCVEFfQUdfSEFORExFX1NDT19OT19DSEFOR0UgMHhGRkZGCgovKiBBRyByZXN1bHQgY29kZXMgdXNlZCB3aXRoIEJUQV9BZ1Jlc3VsdCAqLwojZGVmaW5lIEJUQV9BR19TUEtfUkVTICAgICAgICAgICAgICAwICAgLyogVXBkYXRlIHNwZWFrZXIgdm9sdW1lICovCiNkZWZpbmUgQlRBX0FHX01JQ19SRVMgICAgICAgICAgICAgIDEgICAvKiBVcGRhdGUgbWljcm9waG9uZSB2b2x1bWUgKi8KI2RlZmluZSBCVEFfQUdfSU5CQU5EX1JJTkdfUkVTICAgICAgMiAgIC8qIFVwZGF0ZSBpbmJhbmQgcmluZyBzdGF0ZSAqLwojZGVmaW5lIEJUQV9BR19DSU5EX1JFUyAgICAgICAgICAgICAzICAgLyogU2VuZCBpbmRpY2F0b3IgcmVzcG9uc2UgZm9yIEFUK0NJTkQgKi8KI2RlZmluZSBCVEFfQUdfQklOUF9SRVMgICAgICAgICAgICAgNCAgIC8qIFNlbmQgcGhvbmUgbnVtYmVyIGZvciB2b2ljZSB0YWcgZm9yIEFUK0JJTlAgKi8KI2RlZmluZSBCVEFfQUdfSU5EX1JFUyAgICAgICAgICAgICAgNSAgIC8qIFVwZGF0ZSBhbiBpbmRpY2F0b3IgdmFsdWUgKi8KI2RlZmluZSBCVEFfQUdfQlZSQV9SRVMgICAgICAgICAgICAgNiAgIC8qIFVwZGF0ZSB2b2ljZSByZWNvZ25pdGlvbiBzdGF0ZSAqLwojZGVmaW5lIEJUQV9BR19DTlVNX1JFUyAgICAgICAgICAgICA3ICAgLyogU2VuZCBzdWJzY3JpYmVyIG51bWJlciByZXNwb25zZSBmb3IgQVQrQ05VTSAqLwojZGVmaW5lIEJUQV9BR19CVFJIX1JFUyAgICAgICAgICAgICA4ICAgLyogU2VuZCBDQ0FQIGluY29taW5nIGNhbGwgaG9sZCAqLwojZGVmaW5lIEJUQV9BR19DTENDX1JFUyAgICAgICAgICAgICA5ICAgLyogUXVlcnkgbGlzdCBvZiBjYWxscyAqLwojZGVmaW5lIEJUQV9BR19DT1BTX1JFUyAgICAgICAgICAgICAxMCAgLyogUmVhZCBuZXR3b3JrIG9wZXJhdG9yICovCiNkZWZpbmUgQlRBX0FHX0lOX0NBTExfUkVTICAgICAgICAgIDExICAvKiBJbmRpY2F0ZSBpbmNvbWluZyBwaG9uZSBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0lOX0NBTExfQ09OTl9SRVMgICAgIDEyICAvKiBJbmNvbWluZyBwaG9uZSBjYWxsIGNvbm5lY3RlZCAqLwojZGVmaW5lIEJUQV9BR19DQUxMX1dBSVRfUkVTICAgICAgICAxMyAgLyogQ2FsbCB3YWl0aW5nIG5vdGlmaWNhdGlvbiAqLwojZGVmaW5lIEJUQV9BR19PVVRfQ0FMTF9PUklHX1JFUyAgICAxNCAgLyogT3V0Z29pbmcgcGhvbmUgY2FsbCBvcmlnaW5hdGlvbiAqLwojZGVmaW5lIEJUQV9BR19PVVRfQ0FMTF9BTEVSVF9SRVMgICAxNSAgLyogT3V0Z29pbmcgcGhvbmUgY2FsbCBhbGVydGluZyByZW1vdGUgcGFydHkgKi8KI2RlZmluZSBCVEFfQUdfT1VUX0NBTExfQ09OTl9SRVMgICAgMTYgIC8qIE91dGdvaW5nIHBob25lIGNhbGwgY29ubmVjdGVkICovCiNkZWZpbmUgQlRBX0FHX0NBTExfQ0FOQ0VMX1JFUyAgICAgIDE3ICAvKiBJbmNvbWluZy9vdXRnb2luZyAzLXdheSBjYW5jZWxlZCBiZWZvcmUgY29ubmVjdGVkICovCiNkZWZpbmUgQlRBX0FHX0VORF9DQUxMX1JFUyAgICAgICAgIDE4ICAvKiBFbmQgY2FsbCAqLwojZGVmaW5lIEJUQV9BR19JTl9DQUxMX0hFTERfUkVTICAgICAxOSAgLyogSW5jb21pbmcgY2FsbCBoZWxkICovCiNkZWZpbmUgQlRBX0FHX1VOQVRfUkVTICAgICAgICAgICAgIDIwICAvKiBSZXNwb25zZSB0byB1bmtub3duIEFUIGNvbW1hbmQgZXZlbnQgKi8KI2RlZmluZSBCVEFfQUdfTVVMVElfQ0FMTF9SRVMgICAgICAgMjEgIC8qIFNMQyBhdCB0aHJlZSB3YXkgY2FsbCAqLwoKdHlwZWRlZiBVSU5UOCB0QlRBX0FHX1JFUzsKCi8qIEhGUCBwZWVyIGZlYXR1cmVzICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9FQ05SICAgICAgIDB4MDAwMSAgLyogRWNobyBjYW5jZWxsYXRpb24gYW5kL29yIG5vaXNlIHJlZHVjdGlvbiAqLwojZGVmaW5lIEJUQV9BR19QRUVSX0ZFQVRfM1dBWSAgICAgICAweDAwMDIgIC8qIENhbGwgd2FpdGluZyBhbmQgdGhyZWUtd2F5IGNhbGxpbmcgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX0NMSSAgICAgICAgMHgwMDA0ICAvKiBDYWxsZXIgSUQgcHJlc2VudGF0aW9uIGNhcGFiaWxpdHkgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX1ZSRUMgICAgICAgMHgwMDA4ICAvKiBWb2ljZSByZWNvZ25pdGlvbiBhY3RpdmF0aW9uICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9WT0wgICAgICAgIDB4MDAxMCAgLyogUmVtb3RlIHZvbHVtZSBjb250cm9sICovCiNkZWZpbmUgQlRBX0FHX1BFRVJfRkVBVF9FQ1MgICAgICAgIDB4MDAyMCAgLyogRW5oYW5jZWQgQ2FsbCBTdGF0dXMgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX0VDQyAgICAgICAgMHgwMDQwICAvKiBFbmhhbmNlZCBDYWxsIENvbnRyb2wgKi8KI2RlZmluZSBCVEFfQUdfUEVFUl9GRUFUX0NPREVDICAgICAgMHgwMDgwICAvKiBDb2RlYyBOZWdvdGlhdGlvbiAqLwojZGVmaW5lIEJUQV9BR19QRUVSX0ZFQVRfVk9JUCAgICAgICAweDAxMDAgIC8qIFZvSVAgY2FsbCAqLwoKdHlwZWRlZiBVSU5UMTYgdEJUQV9BR19QRUVSX0ZFQVQ7CgovKiBIRlAgcGVlciBzdXBwb3J0ZWQgY29kZWMgbWFza3MgKi8KLy8gVE9ETyhnb29nbGUpIFRoaXMgc2hvdWxkIHVzZSBjb21tb24gZGVmaW5pdGlvbnMKLy8gaW4gaGNpL2luY2x1ZGUvaGNpX2F1ZGlvLmgKI2RlZmluZSBCVEFfQUdfQ09ERUNfTk9ORSAgICAgICAgICAgQlRNX1NDT19DT0RFQ19OT05FCiNkZWZpbmUgQlRBX0FHX0NPREVDX0NWU0QgICAgICAgICAgIEJUTV9TQ09fQ09ERUNfQ1ZTRCAgICAgIC8qIENWU0QgKi8KI2RlZmluZSBCVEFfQUdfQ09ERUNfTVNCQyAgICAgICAgICAgQlRNX1NDT19DT0RFQ19NU0JDICAgICAgLyogbVNCQyAqLwp0eXBlZGVmIFVJTlQxNiB0QlRBX0FHX1BFRVJfQ09ERUM7CgovKiBIRlAgZXJyY29kZSAtIFNldCB3aGVuIEJUQV9BR19PS19FUlJPUiBpcyByZXR1cm5lZCBpbiAnb2tfZmxhZycgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1BIT05FX0ZBSUxVUkUgICAgMCAgICAgICAvKiBQaG9uZSBGYWlsdXJlICovCiNkZWZpbmUgQlRBX0FHX0VSUl9OT19DT05OX1BIT05FICAgIDEgICAgICAgLyogTm8gY29ubmVjdGlvbiB0byBwaG9uZSAqLwojZGVmaW5lIEJUQV9BR19FUlJfT1BfTk9UX0FMTE9XRUQgICAzICAgICAgIC8qIE9wZXJhdGlvbiBub3QgYWxsb3dlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfT1BfTk9UX1NVUFBPUlRFRCA0ICAgICAgIC8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9QSFNJTV9QSU5fUkVRICAgIDUgICAgICAgLyogUEgtU0lNIFBJTiByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0lNX05PVF9JTlNFUlRFRCAxMCAgICAgIC8qIFNJTSBub3QgaW5zZXJ0ZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NJTV9QSU5fUkVRICAgICAgMTEgICAgICAvKiBTSU0gUElOIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TSU1fUFVLX1JFUSAgICAgIDEyICAgICAgLyogU0lNIFBVSyByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0lNX0ZBSUxVUkUgICAgICAxMyAgICAgIC8qIFNJTSBmYWlsdXJlICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TSU1fQlVTWSAgICAgICAgIDE0ICAgICAgLyogU0lNIGJ1c3kgKi8KI2RlZmluZSBCVEFfQUdfRVJSX0lOQ09SUkVDVF9QV0QgICAgMTYgICAgICAvKiBJbmNvcnJlY3QgcGFzc3dvcmQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NJTV9QSU4yX1JFUSAgICAgMTcgICAgICAvKiBTSU0gUElOMiByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU0lNX1BVSzJfUkVRICAgICAxOCAgICAgIC8qIFNJTSBQVUsyIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9NRU1PUllfRlVMTCAgICAgIDIwICAgICAgLyogTWVtb3J5IGZ1bGwgKi8KI2RlZmluZSBCVEFfQUdfRVJSX0lOVkFMSURfSU5ERVggICAgMjEgICAgICAvKiBJbnZhbGlkIGluZGV4ICovCiNkZWZpbmUgQlRBX0FHX0VSUl9NRU1PUllfRkFJTFVSRSAgIDIzICAgICAgLyogTWVtb3J5IGZhaWx1cmUgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1RFWFRfVE9PX0xPTkcgICAgMjQgICAgICAvKiBUZXh0IHN0cmluZyB0b28gbG9uZyAqLwojZGVmaW5lIEJUQV9BR19FUlJfSU5WX0NIQVJfSU5fVFNUUiAyNSAgICAgIC8qIEludmFsaWQgY2hhcmFjdGVycyBpbiB0ZXh0IHN0cmluZyAqLwojZGVmaW5lIEJUQV9BR19FUlJfRFNUUl9UT09fTE9ORyAgICAyNiAgICAgIC8qIERpYWwgc3RyaW5nIHRvbyBsb25nICovCiNkZWZpbmUgQlRBX0FHX0VSUl9JTlZfQ0hBUl9JTl9EU1RSIDI3ICAgICAgLyogSW52YWxpZCBjaGFyYWN0ZXJzIGluIGRpYWwgc3RyaW5nICovCiNkZWZpbmUgQlRBX0FHX0VSUl9OT19ORVRXT1JLX1NFUlYgIDMwICAgICAgLyogTm8gbmV0d29yayBzZXJ2aWNlICovCiNkZWZpbmUgQlRBX0FHX0VSUl9ORVRXT1JLX1RJTUVfT1VUIDMxICAgICAgLyogTmV0d29yayB0aW1lb3V0ICovCiNkZWZpbmUgQlRBX0FHX0VSUl9OT19ORVRfRU1HX09OTFkgIDMyICAgICAgLyogTmV0d29yayBub3QgYWxsb3dlZCAtIGVtZXJnZW5jeSBzZXJ2aWNlIG9ubHkgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1ZPSVBfQ1NfQ0FMTFMgICAgMzMgICAgICAvKiBBRyBjYW5ub3QgY3JlYXRlIHNpbXVsdGFuZW91cyBWb0lQIGFuZCBDUyBjYWxscyAqLwojZGVmaW5lIEJUQV9BR19FUlJfTk9UX0ZPUl9WT0lQICAgICAzNCAgICAgIC8qIE5vdCBzdXBwb3J0ZWQgb24gdGhpcyBjYWxsIHR5cGUoVm9JUCkgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NJUF9SRVNQX0NPREUgICAgMzUgICAgICAvKiBTSVAgMyBkaWdpdCByZXNwb25zZSBjb2RlICovCgojaWYgMCAgIC8qIE5vdCBVc2VkIGluIEJsdWV0b290aCBIRlAgMS41IFNwZWNpZmljYXRpb24gKi8KI2RlZmluZSBCVEFfQUdfRVJSX1BIQURBUF9MTktfUkVTICAgMiAgICAgICAvKiBQaG9uZS1hZGFwdGVyIGxpbmsgcmVzZXJ2ZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1BIRlNJTV9QSU5fUkVRICAgNiAgICAgICAvKiBQSC1GU0lNIFBJTiByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfUEhGU0lNX1BVS19SRVEgICA3ICAgICAgIC8qIFBILUZTSU0gUFVLIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TSU1fV1JPTkcgICAgICAgIDE1ICAgICAgLyogU0lNIHdyb25nICovCiNkZWZpbmUgQlRBX0FHX0VSUl9OT1RfRk9VTkQgICAgICAgIDIyICAgICAgLyogTm90IGZvdW5kICovCiNkZWZpbmUgQlRBX0FHX0VSUl9ORVRXT1JLX1RJTUVPVVQgIDMxICAgICAgLyogTmV0d29yayB0aW1lb3V0ICovCiNkZWZpbmUgQlRBX0FHX0VSUl9ORVRfUElOX1JFUSAgICAgIDQwICAgICAgLyogTmV0d29yayBwZXJzb25hbGl6YXRpb24gUElOIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9ORVRfUFVLX1JFUSAgICAgIDQxICAgICAgLyogTmV0d29yayBwZXJzb25hbGl6YXRpb24gUFVLIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9TVUJTRVRfUElOX1JFUSAgIDQyICAgICAgLyogTmV0d29yayBzdWJzZXQgcGVyc29uYWxpemF0aW9uIFBJTiByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfU1VCU0VUX1BVS19SRVEgICA0MyAgICAgIC8qIE5ldHdvcmsgc3Vic2V0IHBlcnNvbmFsaXphdGlvbiBQVUsgcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NFUlZQUk9fUElOX1JFUSAgNDQgICAgICAvKiBTZXJ2aWNlIHByb3ZpZGVyIHBlcnNvbmFsaXphdGlvbiBQSU4gcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1NFUlZQUk9fUFVLX1JFUSAgNDUgICAgICAvKiBTZXJ2aWNlIHByb3ZpZGVyIHBlcnNvbmFsaXphdGlvbiBQVUsgcmVxdWlyZWQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX0NPUlBfUElOX1JFUSAgICAgNDYgICAgICAvKiBDb3Jwb3JhdGUgcGVyc29uYWxpemF0aW9uIFBJTiByZXF1aXJlZCAqLwojZGVmaW5lIEJUQV9BR19FUlJfQ09SUF9QVUtfUkVRICAgICA0NyAgICAgIC8qIENvcnBvcmF0ZSBwZXJzb25hbGl6YXRpb24gUFVLIHJlcXVpcmVkICovCiNkZWZpbmUgQlRBX0FHX0VSUl9VTktOT1dOICAgICAgICAgIDEwMCAgICAvKiBVbmtub3duIGVycm9yICovCi8qIEdQUlMtcmVsYXRlZCBlcnJvcnMgKi8KI2RlZmluZSBCVEFfQUdfRVJSX0lMTF9NUyAgICAgICAgICAgMTAzICAgIC8qIElsbGVnYWwgTVMgKCMzKSAqLwojZGVmaW5lIEJUQV9BR19FUlJfSUxMX01FICAgICAgICAgICAxMDYgICAgLyogSWxsZWdhbCBNRSAoIzYpICovCiNkZWZpbmUgQlRBX0FHX0VSUl9HUFJTX05PVF9BTExPV0VEIDEwNyAgICAvKiBHUFJTIHNlcnZpY2VzIG5vdCBhbGxvd2VkICgjNykgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1BMTU5fTk9UX0FMTE9XRUQgMTExICAgIC8qIFBMTU4gc2VydmljZXMgbm90IGFsbG93ZWQgKCMxMSkgKi8KI2RlZmluZSBCVEFfQUdfRVJSX0xPQ19OT1RfQUxMT1dFRCAgMTEyICAgIC8qIExvY2F0aW9uIGFyZWEgbm90IGFsbG93ZWQgKCMxMikgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1JPQU1fTk9UX0FMTE9XRUQgMTEzICAgIC8qIFJvYW1pbmcgbm90IGFsbG93ZWQgaW4gdGhpcyBsb2NhdGlvbiBhcmVhICgjMTMpICovCi8qIEVycm9ycyByZWxhdGVkIHRvIGEgZmFpbHVyZSB0byBBY3RpdmF0ZSBhIENvbnRleHQgKi8KI2RlZmluZSBCVEFfQUdfRVJSX09QVF9OT1RfU1VQUCAgICAgMTMyICAgIC8qIFNlcnZpY2Ugb3B0aW9uIG5vdCBzdXBwb3J0ZWQgKCMzMikgKi8KI2RlZmluZSBCVEFfQUdfRVJSX09QVF9OT1RfU1VCU0NSICAgMTMzICAgIC8qIFJlcXVlc3RlZCBzZXJ2aWNlIG9wdGlvbiBub3Qgc3Vic2NyaWJlZCAoIzMzKSAqLwojZGVmaW5lIEJUQV9BR19FUlJfT1BUX09VVF9PRl9PUkRFUiAxMzQgICAgLyogU2VydmljZSBvcHRpb24gdGVtcG9yYXJpbHkgb3V0IG9mIG9yZGVyICgjMzQpICovCiNkZWZpbmUgQlRBX0FHX0VSUl9QRFBfQVVUSF9GQUlMVVJFIDE0OSAgICAvKiBQRFAgYXV0aGVudGljYXRpb24gZmFpbHVyZSAqLwovKiBPdGhlciBHUFJTIGVycm9ycyAqLwojZGVmaW5lIEJUQV9BR19FUlJfSU5WX01PQklMRV9DTEFTUyAxNTAgICAgLyogSW52YWxpZCBtb2JpbGUgY2xhc3MgKi8KI2RlZmluZSBCVEFfQUdfRVJSX1VOU1BFQ19HUFJTX0VSUiAgMTQ4ICAgIC8qIFVuc3BlY2lmaWVkIEdQUlMgZXJyb3IgKi8KI2VuZGlmICAvKiBVbnVzZWQgZXJyb3IgY29kZXMgKi8KCgovKiBIRlAgcmVzdWx0IGRhdGEgJ29rX2ZsYWcnICovCiNkZWZpbmUgQlRBX0FHX09LX0NPTlRJTlVFICAgICAgICAgIDAgICAgICAgLyogU2VuZCBvdXQgcmVzcG9uc2UgKG1vcmUgcmVzcG9uc2VzIGNvbWluZykgKi8KI2RlZmluZSBCVEFfQUdfT0tfRE9ORSAgICAgICAgICAgICAgMSAgICAgICAvKiBTZW5kIG91dCByZXNwb25zZSBmb2xsb3dlZCBieSBPSyAoZmluaXNoZWQpICovCiNkZWZpbmUgQlRBX0FHX09LX0VSUk9SICAgICAgICAgICAgIDIgICAgICAgLyogRXJyb3IgcmVzcG9uc2UgKi8KCi8qIEJUUkggdmFsdWVzICovCiNkZWZpbmUgQlRBX0FHX0JUUkhfU0VUX0hPTEQgICAgICAgIDAgICAgICAgLyogUHV0IGluY29taW5nIGNhbGwgb24gaG9sZCAqLwojZGVmaW5lIEJUQV9BR19CVFJIX1NFVF9BQ0MgICAgICAgICAxICAgICAgIC8qIEFjY2VwdCBpbmNvbWluZyBjYWxsIG9uIGhvbGQgKi8KI2RlZmluZSBCVEFfQUdfQlRSSF9TRVRfUkVKICAgICAgICAgMiAgICAgICAvKiBSZWplY3QgaW5jb21pbmcgY2FsbCBvbiBob2xkICovCiNkZWZpbmUgQlRBX0FHX0JUUkhfUkVBRCAgICAgICAgICAgIDMgICAgICAgLyogUmVhZCB0aGUgY3VycmVudCB2YWx1ZSAqLwojZGVmaW5lIEJUQV9BR19CVFJIX05PX1JFU1AgICAgICAgICA0ICAgICAgIC8qIE5vdCBpbiBSSCBTdGF0ZXMgKHJlcGx5IHRvIHJlYWQpICovCgovKiBBU0NJSSBjaGFyYWN0ZXIgc3RyaW5nIG9mIGFyZ3VtZW50cyB0byB0aGUgQVQgY29tbWFuZCBvciByZXN1bHQgKi8KI2lmbmRlZiBCVEFfQUdfQVRfTUFYX0xFTgojZGVmaW5lIEJUQV9BR19BVF9NQVhfTEVOICAgICAgICAgICAyNTYKI2VuZGlmCgovKiBkYXRhIGFzc29jaWF0ZWQgd2l0aCBCVEFfQUdfSU5EX1JFUyAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgICBVSU5UMTYgICAgICAgICAgaWQ7CiAgICBVSU5UMTYgICAgICAgICAgdmFsdWU7Cn0gdEJUQV9BR19JTkQ7CgovKiBkYXRhIHR5cGUgZm9yIEJUQV9BZ1Jlc3VsdCgpICovCnR5cGVkZWYgc3RydWN0CnsKICAgIGNoYXIgICAgICAgICAgICBzdHJbQlRBX0FHX0FUX01BWF9MRU4rMV07CiAgICB0QlRBX0FHX0lORCAgICAgaW5kOwogICAgVUlOVDE2ICAgICAgICAgIG51bTsKICAgIFVJTlQxNiAgICAgICAgICBhdWRpb19oYW5kbGU7CiAgICBVSU5UMTYgICAgICAgICAgZXJyY29kZTsgICAgICAgIC8qIFZhbGlkIG9ubHkgaWYgJ29rX2ZsYWcnIGlzIHNldCB0byBCVEFfQUdfT0tfRVJST1IgKi8KICAgIFVJTlQ4ICAgICAgICAgICBva19mbGFnOyAgICAgICAgLyogSW5kaWNhdGVzIGlmIHJlc3BvbnNlIGlzIGZpbmlzaGVkLCBhbmQgaWYgZXJyb3Igb2NjdXJyZWQgKi8KICAgIEJPT0xFQU4gICAgICAgICBzdGF0ZTsKfSB0QlRBX0FHX1JFU19EQVRBOwoKLyogQUcgY2FsbGJhY2sgZXZlbnRzICovCiNkZWZpbmUgQlRBX0FHX0VOQUJMRV9FVlQgICAgICAgMCAgLyogQUcgZW5hYmxlZCAqLwojZGVmaW5lIEJUQV9BR19SRUdJU1RFUl9FVlQgICAgIDEgIC8qIEFHIHJlZ2lzdGVyZWQgKi8KI2RlZmluZSBCVEFfQUdfT1BFTl9FVlQgICAgICAgICAyICAvKiBBRyBjb25uZWN0aW9uIG9wZW4gKi8KI2RlZmluZSBCVEFfQUdfQ0xPU0VfRVZUICAgICAgICAzICAvKiBBRyBjb25uZWN0aW9uIGNsb3NlZCAqLwojZGVmaW5lIEJUQV9BR19DT05OX0VWVCAgICAgICAgIDQgIC8qIFNlcnZpY2UgbGV2ZWwgY29ubmVjdGlvbiBvcGVuZWQgKi8KI2RlZmluZSBCVEFfQUdfQVVESU9fT1BFTl9FVlQgICA1ICAvKiBBdWRpbyBjb25uZWN0aW9uIG9wZW4gKi8KI2RlZmluZSBCVEFfQUdfQVVESU9fQ0xPU0VfRVZUICA2ICAvKiBBdWRpbyBjb25uZWN0aW9uIGNsb3NlZCAqLwojZGVmaW5lIEJUQV9BR19TUEtfRVZUICAgICAgICAgIDcgIC8qIFNwZWFrZXIgdm9sdW1lIGNoYW5nZWQgKi8KI2RlZmluZSBCVEFfQUdfTUlDX0VWVCAgICAgICAgICA4ICAvKiBNaWNyb3Bob25lIHZvbHVtZSBjaGFuZ2VkICovCiNkZWZpbmUgQlRBX0FHX0FUX0NLUERfRVZUICAgICAgOSAgLyogQ0tQRCBmcm9tIHRoZSBIUyAqLwojZGVmaW5lIEJUQV9BR19ESVNBQkxFX0VWVCAgICAgIDMwIC8qIEFHIGRpc2FibGVkICAgICAgICovCiNpZiAoQlRNX1dCU19JTkNMVURFRCA9PSBUUlVFICkKI2RlZmluZSBCVEFfQUdfV0JTX0VWVCAgICAgICAgICAzMSAvKiBTQ08gY29kZWMgaW5mbyAqLwojZW5kaWYKLyogVmFsdWVzIGJlbG93IGFyZSBmb3IgSEZQIG9ubHkgKi8KI2RlZmluZSBCVEFfQUdfQVRfQV9FVlQgICAgICAgICAxMCAvKiBBbnN3ZXIgYSBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0FUX0RfRVZUICAgICAgICAgMTEgLyogUGxhY2UgYSBjYWxsIHVzaW5nIG51bWJlciBvciBtZW1vcnkgZGlhbCAqLwojZGVmaW5lIEJUQV9BR19BVF9DSExEX0VWVCAgICAgIDEyIC8qIENhbGwgaG9sZCAqLwojZGVmaW5lIEJUQV9BR19BVF9DSFVQX0VWVCAgICAgIDEzIC8qIEhhbmcgdXAgYSBjYWxsICovCiNkZWZpbmUgQlRBX0FHX0FUX0NJTkRfRVZUICAgICAgMTQgLyogUmVhZCBpbmRpY2F0b3Igc2V0dGluZ3MgKi8KI2RlZmluZSBCVEFfQUdfQVRfVlRTX0VWVCAgICAgICAxNSAvKiBUcmFuc21pdCBEVE1GIHRvbmUgKi8KI2RlZmluZSBCVEFfQUdfQVRfQklOUF9FVlQgICAgICAxNiAvKiBSZXRyaWV2ZSBudW1iZXIgZnJvbSB2b2ljZSB0YWcgKi8KI2RlZmluZSBCVEFfQUdfQVRfQkxETl9FVlQgICAgICAxNyAvKiBQbGFjZSBjYWxsIHRvIGxhc3QgZGlhbGVkIG51bWJlciAqLwojZGVmaW5lIEJUQV9BR19BVF9CVlJBX0VWVCAgICAgIDE4IC8qIEVuYWJsZS9kaXNhYmxlIHZvaWNlIHJlY29nbml0aW9uICovCiNkZWZpbmUgQlRBX0FHX0FUX05SRUNfRVZUICAgICAgMTkgLyogRGlzYWJsZSBlY2hvIGNhbmNlbGluZyAqLwojZGVmaW5lIEJUQV9BR19BVF9DTlVNX0VWVCAgICAgIDIwIC8qIFJldHJpZXZlIHN1YnNjcmliZXIgbnVtYmVyICovCiNkZWZpbmUgQlRBX0FHX0FUX0JUUkhfRVZUICAgICAgMjEgLyogQ0NBUC1zdHlsZSBpbmNvbWluZyBjYWxsIGhvbGQgKi8KI2RlZmluZSBCVEFfQUdfQVRfQ0xDQ19FVlQgICAgICAyMiAvKiBRdWVyeSBsaXN0IG9mIGN1cnJlbnQgY2FsbHMgKi8KI2RlZmluZSBCVEFfQUdfQVRfQ09QU19FVlQgICAgICAyMyAvKiBRdWVyeSBsaXN0IG9mIGN1cnJlbnQgY2FsbHMgKi8KI2RlZmluZSBCVEFfQUdfQVRfVU5BVF9FVlQgICAgICAyNCAvKiBVbmtub3duIEFUIGNvbW1hbmQgKi8KI2RlZmluZSBCVEFfQUdfQVRfQ0JDX0VWVCAgICAgICAyNSAvKiBCYXR0ZXJ5IExldmVsIHJlcG9ydCBmcm9tIEhGICovCiNkZWZpbmUgQlRBX0FHX0FUX0JBQ19FVlQgICAgICAgMjYgLyogYXZhYmxhYmxlIGNvZGVjICovCiNkZWZpbmUgQlRBX0FHX0FUX0JDU19FVlQgICAgICAgMjcgLyogQ29kZWMgc2VsZWN0ICovCgp0eXBlZGVmIFVJTlQ4IHRCVEFfQUdfRVZUOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggbW9zdCBub24tQVQgZXZlbnRzICovCnR5cGVkZWYgc3RydWN0CnsKICAgIFVJTlQxNiAgICAgICAgICAgICAgaGFuZGxlOwogICAgVUlOVDggICAgICAgICAgICAgICBhcHBfaWQ7CiAgICB0QlRBX0FHX1NUQVRVUyAgICAgIHN0YXR1czsKfSB0QlRBX0FHX0hEUjsKCi8qIGRhdGEgYXNzb2NpYXRlZCB3aXRoIEJUQV9BR19SRUdJU1RFUl9FVlQgKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgdEJUQV9BR19IRFIgICAgICAgICBoZHI7CiAgICB0QlRBX0FHX1NUQVRVUyAgICAgIHN0YXR1czsKfSB0QlRBX0FHX1JFR0lTVEVSOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQlRBX0FHX09QRU5fRVZUICovCnR5cGVkZWYgc3RydWN0CnsKICAgIHRCVEFfQUdfSERSICAgICAgICAgaGRyOwogICAgQkRfQUREUiAgICAgICAgICAgICBiZF9hZGRyOwogICAgdEJUQV9TRVJWSUNFX0lEICAgICBzZXJ2aWNlX2lkOwogICAgdEJUQV9BR19TVEFUVVMgICAgICBzdGF0dXM7Cn0gdEJUQV9BR19PUEVOOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQlRBX0FHX0NMT1NFX0VWVCAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgICB0QlRBX0FHX0hEUiAgICAgICAgIGhkcjsKICAgIEJEX0FERFIgICAgICAgICAgICAgYmRfYWRkcjsKfSB0QlRBX0FHX0NMT1NFOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQlRBX0FHX0NPTk5fRVZUICovCnR5cGVkZWYgc3RydWN0CnsKICAgIHRCVEFfQUdfSERSICAgICAgICAgaGRyOwogICAgdEJUQV9BR19QRUVSX0ZFQVQgICBwZWVyX2ZlYXQ7CiAgICBCRF9BRERSICAgICAgICAgICAgIGJkX2FkZHI7CiAgICB0QlRBX0FHX1BFRVJfQ09ERUMgIHBlZXJfY29kZWM7Cn0gdEJUQV9BR19DT05OOwoKLyogZGF0YSBhc3NvY2lhdGVkIHdpdGggQVQgY29tbWFuZCBldmVudCAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgICB0QlRBX0FHX0hEUiAgICAgICAgIGhkcjsKICAgIEJEX0FERFIgICAgICAgICAgICAgYmRfYWRkcjsKICAgIGNoYXIgICAgICAgICAgICAgICAgc3RyW0JUQV9BR19BVF9NQVhfTEVOKzFdOwogICAgVUlOVDE2ICAgICAgICAgICAgICBudW07CiAgICBVSU5UOCAgICAgICAgICAgICAgIGlkeDsgICAgLyogY2FsbCBudW1iZXIgdXNlZCBieSBDTENDIGFuZCBDSExEICovCn0gdEJUQV9BR19WQUw7CgovKiB1bmlvbiBvZiBkYXRhIGFzc29jaWF0ZWQgd2l0aCBBRyBjYWxsYmFjayAqLwp0eXBlZGVmIHVuaW9uCnsKICAgIHRCVEFfQUdfSERSICAgICAgICAgaGRyOwogICAgdEJUQV9BR19SRUdJU1RFUiAgICByZWc7CiAgICB0QlRBX0FHX09QRU4gICAgICAgIG9wZW47CiAgICB0QlRBX0FHX0NMT1NFICAgICAgIGNsb3NlOwogICAgdEJUQV9BR19DT05OICAgICAgICBjb25uOwogICAgdEJUQV9BR19WQUwgICAgICAgICB2YWw7Cn0gdEJUQV9BRzsKCi8qIEFHIGNhbGxiYWNrICovCnR5cGVkZWYgdm9pZCAodEJUQV9BR19DQkFDSykodEJUQV9BR19FVlQgZXZlbnQsIHRCVEFfQUcgKnBfZGF0YSk7CgovKiBpbmRpY2F0b3IgY29uc3RhbnRzIEhGUCAxLjEgYW5kIGxhdGVyICovCiNkZWZpbmUgQlRBX0FHX0lORF9DQUxMICAgICAgICAgICAgIDEgICAvKiBwb3NpdGlvbiBvZiBjYWxsIGluZGljYXRvciAqLwojZGVmaW5lIEJUQV9BR19JTkRfQ0FMTFNFVFVQICAgICAgICAyICAgLyogcG9zaXRpb24gb2YgY2FsbHNldHVwIGluZGljYXRvciAqLwojZGVmaW5lIEJUQV9BR19JTkRfU0VSVklDRSAgICAgICAgICAzICAgLyogcG9zaXRpb24gb2Ygc2VydmljZSBpbmRpY2F0b3IgKi8KCi8qIGluZGljYXRvciBjb25zdGFudHMgSEZQIDEuNSBhbmQgbGF0ZXIgKi8KI2RlZmluZSBCVEFfQUdfSU5EX1NJR05BTCAgICAgICAgICAgNCAgIC8qIHBvc2l0aW9uIG9mIHNpZ25hbCBzdHJlbmd0aCBpbmRpY2F0b3IgKi8KI2RlZmluZSBCVEFfQUdfSU5EX1JPQU0gICAgICAgICAgICAgNSAgIC8qIHBvc2l0aW9uIG9mIHJvYW1pbmcgaW5kaWNhdG9yICovCiNkZWZpbmUgQlRBX0FHX0lORF9CQVRUQ0hHICAgICAgICAgIDYgICAvKiBwb3NpdGlvbiBvZiBiYXR0ZXJ5IGNoYXJnZSBpbmRpY2F0b3IgKi8KI2RlZmluZSBCVEFfQUdfSU5EX0NBTExIRUxEICAgICAgICAgNyAgIC8qIHBvc2l0aW9uIG9mIGNhbGxoZWxkIGluZGljYXRvciAqLwojZGVmaW5lIEJUQV9BR19JTkRfQkVBUkVSICAgICAgICAgICA4ICAgLyogcG9zaXRpb24gb2YgYmVhcmVyIGluZGljYXRvciAqLwoKLyogY2FsbCBpbmRpY2F0b3IgdmFsdWVzICovCiNkZWZpbmUgQlRBX0FHX0NBTExfSU5BQ1RJVkUgICAgICAgIDAgICAvKiBQaG9uZSBjYWxsIGluYWN0aXZlICovCiNkZWZpbmUgQlRBX0FHX0NBTExfQUNUSVZFICAgICAgICAgIDEgICAvKiBQaG9uZSBjYWxsIGFjdGl2ZSAqLwoKLyogY2FsbHNldHVwIGluZGljYXRvciB2YWx1ZXMgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTFNFVFVQX05PTkUgICAgICAgMCAgIC8qIE5vdCBjdXJyZW50bHkgaW4gY2FsbCBzZXQgdXAgKi8KI2RlZmluZSBCVEFfQUdfQ0FMTFNFVFVQX0lOQ09NSU5HICAgMSAgIC8qIEluY29taW5nIGNhbGwgcHJvY2VzcyBvbmdvaW5nICovCiNkZWZpbmUgQlRBX0FHX0NBTExTRVRVUF9PVVRHT0lORyAgIDIgICAvKiBPdXRnb2luZyBjYWxsIHNldCB1cCBpcyBvbmdvaW5nICovCiNkZWZpbmUgQlRBX0FHX0NBTExTRVRVUF9BTEVSVElORyAgIDMgICAvKiBSZW1vdGUgcGFydHkgYmVpbmcgYWxlcnRlZCBpbiBhbiBvdXRnb2luZyBjYWxsICovCgovKiBzZXJ2aWNlIGluZGljYXRvciB2YWx1ZXMgKi8KI2RlZmluZSBCVEFfQUdfU0VSVklDRV9OT05FICAgICAgICAgMCAgIC8qIE5laXRoZXIgQ1Mgbm9yIFZvSVAgc2VydmljZSBpcyBhdmFpbGFibGUgICAgICovCiNkZWZpbmUgQlRBX0FHX1NFUlZJQ0VfQ1MgICAgICAgICAgIDEgICAvKiBPbmx5IENTIHNlcnZpY2UgaXMgYXZhaWxhYmxlICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEJUQV9BR19TRVJWSUNFX1ZPSVAgICAgICAgICAyICAgLyogT25seSBWb0lQIHNlcnZpY2UgaXMgYXZhaWxhYmxlICAgICAgICAgICAgICAgKi8KI2RlZmluZSBCVEFfQUdfU0VSVklDRV9DU19WT0lQICAgICAgMyAgIC8qIEJvdGggQ1MgYW5kIFZvSVAgc2VydmljZXMgYXZhaWxhYmxlICAgICAgICAgICovCgovKiBjYWxsaGVsZCBpbmRpY2F0b3IgdmFsdWVzICovCiNkZWZpbmUgQlRBX0FHX0NBTExIRUxEX0lOQUNUSVZFICAgIDAgICAvKiBObyBoZWxkIGNhbGxzICovCiNkZWZpbmUgQlRBX0FHX0NBTExIRUxEX0FDVElWRSAgICAgIDEgICAvKiBDYWxsIGhlbGQgYW5kIGNhbGwgYWN0aXZlICovCiNkZWZpbmUgQlRBX0FHX0NBTExIRUxEX05PQUNUSVZFICAgIDIgICAvKiBDYWxsIGhlbGQgYW5kIG5vIGNhbGwgYWN0aXZlICovCgovKiBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9yIHZhbHVlcyAqLwojZGVmaW5lIEJUQV9BR19ST0FNSU5HX0lOQUNUSVZFICAgICAwICAgLyogUGhvbmUgY2FsbCBpbmFjdGl2ZSAqLwojZGVmaW5lIEJUQV9BR19ST0FNSU5HX0FDVElWRSAgICAgICAxICAgLyogUGhvbmUgY2FsbCBhY3RpdmUgKi8KCi8qIGJlYXJlciBpbmRpY2F0b3IgdmFsdWVzICovCiNkZWZpbmUgQlRBX0FHX0JFQVJFUl9XTEFOICAgICAgICAgIDAgICAvKiBXTEFOICAgICAgICAgKi8KI2RlZmluZSBCVEFfQUdfQkVBUkVSX0JMVUVUT09USCAgICAgMSAgIC8qIEJsdWV0b290aCAgICAqLwojZGVmaW5lIEJUQV9BR19CRUFSRVJfV0lSRUQgICAgICAgICAyICAgLyogV2lyZWQgICAgICAgICovCiNkZWZpbmUgQlRBX0FHX0JFQVJFUl8yRzNHICAgICAgICAgIDMgICAvKiAyRyAzRyAgICAgICAgKi8KI2RlZmluZSBCVEFfQUdfQkVBUkVSX1dJTUFYICAgICAgICAgNCAgIC8qIFdJTUFYICAgICAgICAqLwojZGVmaW5lIEJUQV9BR19CRUFSRVJfUkVTMSAgICAgICAgICA1ICAgLyogUmVzZXJ2ZWQgICAgICovCiNkZWZpbmUgQlRBX0FHX0JFQVJFUl9SRVMyICAgICAgICAgIDYgICAvKiBSZXNlcnZlZCAgICAgKi8KI2RlZmluZSBCVEFfQUdfQkVBUkVSX1JFUzMgICAgICAgICAgNyAgIC8qIFJlc2VydmVkICAgICAqLwoKLyogQUcgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KdHlwZWRlZiBzdHJ1Y3QKewogICAgY2hhciAgICAgICAgICpjaW5kX2luZm87CiAgICBJTlQzMiAgICAgICAgY29ubl90b3V0OwogICAgVUlOVDE2ICAgICAgIHNjb19wa3RfdHlwZXM7CiAgICBjaGFyICAgICAgICAgKmNobGRfdmFsX2VjYzsKICAgIGNoYXIgICAgICAgICAqY2hsZF92YWw7Cn0gdEJUQV9BR19DRkc7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiogIEV4dGVybmFsIEZ1bmN0aW9uIERlY2xhcmF0aW9ucwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnRW5hYmxlCioqCioqIERlc2NyaXB0aW9uICAgICAgRW5hYmxlIHRoZSBhdWRpbyBnYXRld2F5IHNlcnZpY2UuIFdoZW4gdGhlIGVuYWJsZQoqKiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2lsbCBiZQoqKiAgICAgICAgICAgICAgICAgIGNhbGxlZCB3aXRoIGEgQlRBX0FHX0VOQUJMRV9FVlQuIFRoaXMgZnVuY3Rpb24gbXVzdAoqKiAgICAgICAgICAgICAgICAgIGJlIGNhbGxlZCBiZWZvcmUgb3RoZXIgZnVuY3Rpb24gaW4gdGhlIEFHIEFQSSBhcmUKKiogICAgICAgICAgICAgICAgICBjYWxsZWQuCioqCioqIFJldHVybnMgICAgICAgICAgQlRBX1NVQ0NFU1MgaWYgT0ssIEJUQV9GQUlMVVJFIG90aGVyd2lzZS4KKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdEJUQV9TVEFUVVMgQlRBX0FnRW5hYmxlKHRCVEFfQUdfUEFSU0VfTU9ERSBwYXJzZV9tb2RlLCB0QlRBX0FHX0NCQUNLICpwX2NiYWNrKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnRGlzYWJsZQoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIERpc2FibGUgdGhlIGF1ZGlvIGdhdGV3YXkgc2VydmljZQoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdEaXNhYmxlKHZvaWQpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdSZWdpc3RlcgoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIFJlZ2lzdGVyIGFuIEF1ZGlvIEdhdGV3YXkgc2VydmljZS4KKioKKioKKiogUmV0dXJucyAgICAgICAgICB2b2lkCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgQlRBX0FnUmVnaXN0ZXIodEJUQV9TRVJWSUNFX01BU0sgc2VydmljZXMsIHRCVEFfU0VDIHNlY19tYXNrLAogICAgICAgICAgICAgICAgICAgIHRCVEFfQUdfRkVBVCBmZWF0dXJlcywgY29uc3QgY2hhciAqcF9zZXJ2aWNlX25hbWVzW10sIFVJTlQ4IGFwcF9pZCk7CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKgoqKiBGdW5jdGlvbiAgICAgICAgIEJUQV9BZ0RlcmVnaXN0ZXIKKioKKiogRGVzY3JpcHRpb24gICAgICBEZXJlZ2lzdGVyIGFuIGF1ZGlvIGdhdGV3YXkgc2VydmljZS4KKioKKioKKiogUmV0dXJucyAgICAgICAgICB2b2lkCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgQlRBX0FnRGVyZWdpc3RlcihVSU5UMTYgaGFuZGxlKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnT3BlbgoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIE9wZW5zIGEgY29ubmVjdGlvbiB0byBhIGhlYWRzZXQgb3IgaGFuZHMtZnJlZSBkZXZpY2UuCioqICAgICAgICAgICAgICAgICAgV2hlbiBjb25uZWN0aW9uIGlzIG9wZW4gY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkCioqICAgICAgICAgICAgICAgICAgd2l0aCBhIEJUQV9BR19PUEVOX0VWVC4gT25seSB0aGUgZGF0YSBjb25uZWN0aW9uIGlzCioqICAgICAgICAgICAgICAgICAgb3BlbmVkLiBUaGUgYXVkaW8gY29ubmVjdGlvbiBpcyBub3Qgb3BlbmVkLgoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdPcGVuKFVJTlQxNiBoYW5kbGUsIEJEX0FERFIgYmRfYWRkciwgdEJUQV9TRUMgc2VjX21hc2ssIHRCVEFfU0VSVklDRV9NQVNLIHNlcnZpY2VzKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnQ2xvc2UKKioKKiogRGVzY3JpcHRpb24gICAgICBDbG9zZSB0aGUgY3VycmVudCBjb25uZWN0aW9uIHRvIGEgaGVhZHNldCBvciBhIGhhbmRzZnJlZQoqKiAgICAgICAgICAgICAgICAgIEFueSBjdXJyZW50IGF1ZGlvIGNvbm5lY3Rpb24gd2lsbCBhbHNvIGJlIGNsb3NlZAoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdDbG9zZShVSU5UMTYgaGFuZGxlKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnQXVkaW9PcGVuCioqCioqIERlc2NyaXB0aW9uICAgICAgT3BlbnMgYW4gYXVkaW8gY29ubmVjdGlvbiB0byB0aGUgY3VycmVudGx5IGNvbm5lY3RlZAoqKiAgICAgICAgICAgICAgICAgIGhlYWRzZXQgb3IgaG5hZHNmcmVlCioqCioqCioqIFJldHVybnMgICAgICAgICAgdm9pZAoqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIEJUQV9BZ0F1ZGlvT3BlbihVSU5UMTYgaGFuZGxlKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnQXVkaW9DbG9zZQoqKgoqKiBEZXNjcmlwdGlvbiAgICAgIENsb3NlIHRoZSBjdXJyZW50bHkgYWN0aXZlIGF1ZGlvIGNvbm5lY3Rpb24gdG8gYSBoZWFkc2V0CioqICAgICAgICAgICAgICAgICAgb3IgaG5hZHNmcmVlLiBUaGUgZGF0YSBjb25uZWN0aW9uIHJlbWFpbnMgb3BlbgoqKgoqKgoqKiBSZXR1cm5zICAgICAgICAgIHZvaWQKKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8Kdm9pZCBCVEFfQWdBdWRpb0Nsb3NlKFVJTlQxNiBoYW5kbGUpOwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioKKiogRnVuY3Rpb24gICAgICAgICBCVEFfQWdSZXN1bHQKKioKKiogRGVzY3JpcHRpb24gICAgICBTZW5kIGFuIEFUIHJlc3VsdCBjb2RlIHRvIGEgaGVhZHNldCBvciBoYW5kcy1mcmVlIGRldmljZS4KKiogICAgICAgICAgICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgdXNlZCB3aGVuIHRoZSBBRyBwYXJzZSBtb2RlIGlzIHNldAoqKiAgICAgICAgICAgICAgICAgIHRvIEJUQV9BR19QQVJTRS4KKioKKioKKiogUmV0dXJucyAgICAgICAgICB2b2lkCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgQlRBX0FnUmVzdWx0KFVJTlQxNiBoYW5kbGUsIHRCVEFfQUdfUkVTIHJlc3VsdCwgdEJUQV9BR19SRVNfREFUQSAqcF9kYXRhKTsKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqCioqIEZ1bmN0aW9uICAgICAgICAgQlRBX0FnU2V0Q29kZWMKKioKKiogRGVzY3JpcHRpb24gICAgICBTcGVjaWZ5IHRoZSBjb2RlYyB0eXBlIHRvIGJlIHVzZWQgZm9yIHRoZSBzdWJzZXF1ZW50CioqICAgICAgICAgICAgICAgICAgYXVkaW8gY29ubmVjdGlvbi4KKioKKioKKioKKiogUmV0dXJucyAgICAgICAgICB2b2lkCioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnZvaWQgQlRBX0FnU2V0Q29kZWMoVUlOVDE2IGhhbmRsZSwgdEJUQV9BR19QRUVSX0NPREVDIGNvZGVjKTsKCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2VuZGlmIC8qIEJUQV9BR19BUElfSCAqLwo=