LyoKICogRGVmaW5pdGlvbnMgZm9yIHRoZSBGVERJIFVTQiBTaW5nbGUgUG9ydCBTZXJpYWwgQ29udmVydGVyIC0gCiAqIGtub3duIGFzIEZURElfU0lPIChTZXJpYWwgSW5wdXQvT3V0cHV0IGFwcGxpY2F0aW9uIG9mIHRoZSBjaGlwc2V0KSAKICoKICogVGhlIGV4YW1wbGUgSSBoYXZlIGlzIGtub3duIGFzIHRoZSBVU0MtMTAwMCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbQogKiBodHRwOi8vd3d3LmRzZS5jby5ueiAtIGNhdCBubyBYSDQyMTQgSXQgbG9va3Mgc2ltaWxhciB0byB0aGlzOgogKiBodHRwOi8vd3d3LmRhbnNkYXRhLmNvbS91c2JzZXIuaHRtIGJ1dCBJIGNhbid0IGJlIHN1cmUgVGhlcmUgYXJlIG90aGVyCiAqIFVTQy0xMDAwcyB3aGljaCBkb24ndCBsb29rIGxpa2UgbXkgZGV2aWNlIHRob3VnaCBzbyBiZXdhcmUhCiAqCiAqIFRoZSBkZXZpY2UgaXMgYmFzZWQgb24gdGhlIEZUREkgRlQ4VTEwMEFYIGNoaXAuIEl0IGhhcyBhIERCMjUgb24gb25lIHNpZGUsIAogKiBVU0Igb24gdGhlIG90aGVyLgogKgogKiBUaGFueCB0byBGVERJIChodHRwOi8vd3d3LmZ0ZGkuY28udWspIGZvciBzbyBraW5kbHkgcHJvdmlkaW5nIGRldGFpbHMKICogb2YgdGhlIHByb3RvY29sIHJlcXVpcmVkIHRvIHRhbGsgdG8gdGhlIGRldmljZSBhbmQgb25nb2luZyBhc3Npc3RlbmNlCiAqIGR1cmluZyBkZXZlbG9wbWVudC4KICoKICogQmlsbCBSeWRlciAtIGJyeWRlckBzZ2kuY29tIGZvcm1lcmx5IG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4tIHdyb3RlIHRoZSAKICogRlRESV9TSU8gaW1wbGVtZW50YXRpb24uCiAqCiAqIFBoaWxpcHAgR/xocmluZyAtIHBnQGZ1dHVyZXdhcmUuYXQgLSBhZGRlZCB0aGUgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzCiAqIGZyb20gUnVkb2xmIEd1Z2xlcgogKgogKi8KCiNkZWZpbmUgRlRESV9WSUQJMHgwNDAzCS8qIFZlbmRvciBJZCAqLwojZGVmaW5lIEZURElfU0lPX1BJRAkweDgzNzIJLyogUHJvZHVjdCBJZCBTSU8gYXBwbGljYXRpb24gb2YgOFUxMDBBWCAgKi8KI2RlZmluZSBGVERJXzhVMjMyQU1fUElEIDB4NjAwMSAvKiBTaW1pbGFyIGRldmljZSB0byBTSU8gYWJvdmUgKi8KI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCiNkZWZpbmUgRlRESV84VTIyMzJDX1BJRCAweDYwMTAgLyogRHVhbCBjaGFubmVsIGRldmljZSAqLwojZGVmaW5lIEZURElfUkVMQUlTX1BJRAkweEZBMTAgIC8qIFJlbGFpcyBkZXZpY2UgZnJvbSBSdWRvbGYgR3VnbGVyICovCiNkZWZpbmUgRlRESV9ORl9SSUNfVklECTB4MERDRAkvKiBWZW5kb3IgSWQgKi8KI2RlZmluZSBGVERJX05GX1JJQ19QSUQJMHgwMDAxCS8qIFByb2R1Y3QgSWQgKi8KCgovKiB3d3cuY2FudXNiLmNvbSBMYXdpY2VsIENBTlVTQiBkZXZpY2UgKi8KI2RlZmluZSBGVERJX0NBTlVTQl9QSUQgMHhGRkE4IC8qIFByb2R1Y3QgSWQgKi8KCi8qIEFscGhhTWljcm8gQ29tcG9uZW50cyBBTUMtMjMyVVNCMDEgZGV2aWNlICovCiNkZWZpbmUgRlRESV9BTUMyMzJfUElEIDB4RkYwMCAvKiBQcm9kdWN0IElkICovCgovKiBBQ1QgU29sdXRpb25zIEhvbWVQcm8gWldhdmUgaW50ZXJmYWNlIChodHRwOi8vd3d3LmFjdC1zb2x1dGlvbnMuY29tL0hvbWVQcm8uaHRtKSAqLwojZGVmaW5lIEZURElfQUNUWldBVkVfUElECTB4RjJEMAoKCi8qIHd3dy5zdGFydGluZy1wb2ludC1zeXN0ZW1zLmNvbSC1Q2hhbWVsZW9uIGRldmljZSAqLwojZGVmaW5lIEZURElfTUlDUk9fQ0hBTUVMRU9OX1BJRAkweENBQTAJLyogUHJvZHVjdCBJZCAqLwoKLyogd3d3LmlydHJhbnMuZGUgZGV2aWNlICovCiNkZWZpbmUgRlRESV9JUlRSQU5TX1BJRCAweEZDNjAgLyogUHJvZHVjdCBJZCAqLwoKCi8qIHd3dy50aG91Z2h0dGVjaG5vbG9neS5jb20vIFRULVVTQiBwcm92aWRlIHdpdGggcHJvY29tcCB1c2UgZnRkaV9zaW8gKi8KI2RlZmluZSBGVERJX1RUVVNCX1BJRCAweEZGMjAgLyogUHJvZHVjdCBJZCAqLwoKLyogaVBsdXMgZGV2aWNlICovCiNkZWZpbmUgRlRESV9JUExVU19QSUQgMHhEMDcwIC8qIFByb2R1Y3QgSWQgKi8KCi8qIERNWDRBTEwgRE1YIEludGVyZmFjZXMgKi8KI2RlZmluZSBGVERJX0RNWDRBTEwgMHhDODUwCgovKiB3d3cuY3J5c3RhbGZvbnR6LmNvbSBkZXZpY2VzIC0gdGhhbnggZm9yIHByb3ZpZGluZyBmcmVlIGRldmljZXMgZm9yIGV2YWx1YXRpb24gISAqLwovKiB0aGV5IHVzZSB0aGUgZnRkaSBjaGlwc2V0IGZvciB0aGUgVVNCIGludGVyZmFjZSBhbmQgdGhlIHZlbmRvciBpZCBpcyB0aGUgc2FtZSAqLwojZGVmaW5lIEZURElfWEZfNjMyX1BJRCAweEZDMDgJLyogNjMyOiAxNngyIENoYXJhY3RlciBEaXNwbGF5ICovCiNkZWZpbmUgRlRESV9YRl82MzRfUElEIDB4RkMwOQkvKiA2MzQ6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KI2RlZmluZSBGVERJX1hGXzU0N19QSUQgMHhGQzBBCS8qIDU0NzogVHdvIGxpbmUgRGlzcGxheSAqLwojZGVmaW5lIEZURElfWEZfNjMzX1BJRCAweEZDMEIJLyogNjMzOiAxNngyIENoYXJhY3RlciBEaXNwbGF5IHdpdGggS2V5cyAqLwojZGVmaW5lIEZURElfWEZfNjMxX1BJRCAweEZDMEMJLyogNjMxOiAyMHgyIENoYXJhY3RlciBEaXNwbGF5ICovCiNkZWZpbmUgRlRESV9YRl82MzVfUElEIDB4RkMwRAkvKiA2MzU6IDIweDQgQ2hhcmFjdGVyIERpc3BsYXkgKi8KI2RlZmluZSBGVERJX1hGXzY0MF9QSUQgMHhGQzBFCS8qIDY0MDogVHdvIGxpbmUgRGlzcGxheSAqLwojZGVmaW5lIEZURElfWEZfNjQyX1BJRCAweEZDMEYJLyogNjQyOiBUd28gbGluZSBEaXNwbGF5ICovCgovKiBWaWRlbyBOZXR3b3JrcyBMaW1pdGVkIC8gSG9tZWNob2ljZSBpbiB0aGUgVUsgdXNlIGFuIGZ0ZGktYmFzZWQgZGV2aWNlIGZvciB0aGVpciAxTWIgKi8KLyogYnJvYWRiYW5kIGludGVybmV0IHNlcnZpY2UuICBUaGUgZm9sbG93aW5nIFBJRCBpcyBleGhpYml0ZWQgYnkgdGhlIHVzYiBkZXZpY2Ugc3VwcGxpZWQgKi8KLyogKHRoZSBWSUQgaXMgdGhlIHN0YW5kYXJkIGZ0ZGkgdmlkIChGVERJX1ZJRCkgKi8KI2RlZmluZSBGVERJX1ZOSENQQ1VTQl9EX1BJRCAweGZlMzggLyogUHJvZHVjdCBJZCAqLwoKLyoKICogUENESiB1c2UgZnRkaSBiYXNlZCBkai1jb250cm9sbGVycy4gIFRoZSBmb2xsb3dpbmcgUElEIGlzIGZvciB0aGVpciBEQUMtMiBkZXZpY2UKICogaHR0cDovL3d3dy5wY2RqaGFyZHdhcmUuY29tL0RBQzIuYXNwIChQSUQgc2VudCBieSBXb3V0ZXIgUGFlc2VuKQogKiAodGhlIFZJRCBpcyB0aGUgc3RhbmRhcmQgZnRkaSB2aWQgKEZURElfVklEKSAqLwojZGVmaW5lIEZURElfUENESl9EQUMyX1BJRCAweEZBODgKCi8qCiAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNYXRyaXggT3JiaXRhbCBMQ0QgZGlzcGxheXMsCiAqIHdoaWNoIGFyZSB0aGUgRlQyMzJCTSAoIHNpbWlsYXIgdG8gdGhlIDhVMjMyQU0gKQogKi8KI2RlZmluZSBGVERJX01UWE9SQl8wX1BJRCAgICAgIDB4RkEwMCAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwojZGVmaW5lIEZURElfTVRYT1JCXzFfUElEICAgICAgMHhGQTAxICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCiNkZWZpbmUgRlRESV9NVFhPUkJfMl9QSUQgICAgICAweEZBMDIgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KI2RlZmluZSBGVERJX01UWE9SQl8zX1BJRCAgICAgIDB4RkEwMyAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwojZGVmaW5lIEZURElfTVRYT1JCXzRfUElEICAgICAgMHhGQTA0ICAvKiBNYXRyaXggT3JiaXRhbCBQcm9kdWN0IElkICovCiNkZWZpbmUgRlRESV9NVFhPUkJfNV9QSUQgICAgICAweEZBMDUgIC8qIE1hdHJpeCBPcmJpdGFsIFByb2R1Y3QgSWQgKi8KI2RlZmluZSBGVERJX01UWE9SQl82X1BJRCAgICAgIDB4RkEwNiAgLyogTWF0cml4IE9yYml0YWwgUHJvZHVjdCBJZCAqLwoKLyogSW50ZXJiaW9tZXRyaWNzIFVTQiBJL08gQm9hcmQgKi8KLyogRGV2ZWxvcGVkIGZvciBJbnRlcmJpb21ldHJpY3MgYnkgUnVkb2xmIEd1Z2xlciAqLwojZGVmaW5lIElOVEVSQklPTUVUUklDU19WSUQgICAgICAgICAgICAgIDB4MTIwOQojZGVmaW5lIElOVEVSQklPTUVUUklDU19JT0JPQVJEX1BJRCAgICAgIDB4MTAwMgojZGVmaW5lIElOVEVSQklPTUVUUklDU19NSU5JX0lPQk9BUkRfUElEIDB4MTAwNgoKLyoKICogVGhlIGZvbGxvd2luZyBhcmUgdGhlIHZhbHVlcyBmb3IgdGhlIFBlcmxlIFN5c3RlbXMKICogVWx0cmFQb3J0IFVTQiBzZXJpYWwgY29udmVydGVycwogKi8KI2RlZmluZSBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQgMHhGMEMwCS8qIFBlcmxlIFVsdHJhUG9ydCBQcm9kdWN0IElkICovCgovKgogKiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgdmFsdWVzIGZvciB0aGUgU2VhbGV2ZWwgU2VhTElOSysgYWRhcHRlcnMuCiAqIChPcmlnaW5hbCBsaXN0IHNlbnQgYnkgVHVhbiBIb2FuZy4gIElhbiBBYmJvdHQgcmVuYW1lZCB0aGUgbWFjcm9zIGFuZAogKiByZW1vdmVkIHNvbWUgUElEcyB0aGF0IGRvbid0IHNlZW0gdG8gbWF0Y2ggYW55IGV4aXN0aW5nIHByb2R1Y3RzLikKICovCiNkZWZpbmUgU0VBTEVWRUxfVklECQkweDBjNTIJLyogU2VhbGV2ZWwgVmVuZG9yIElEICovCiNkZWZpbmUgU0VBTEVWRUxfMjEwMV9QSUQJMHgyMTAxCS8qIFNlYUxJTksrMjMyICgyMTAxLzIxMDUpICovCiNkZWZpbmUgU0VBTEVWRUxfMjEwMl9QSUQJMHgyMTAyCS8qIFNlYUxJTksrNDg1ICgyMTAyKSAqLwojZGVmaW5lIFNFQUxFVkVMXzIxMDNfUElECTB4MjEwMwkvKiBTZWFMSU5LKzIzMkkgKDIxMDMpICovCiNkZWZpbmUgU0VBTEVWRUxfMjEwNF9QSUQJMHgyMTA0CS8qIFNlYUxJTksrNDg1SSAoMjEwNCkgKi8KI2RlZmluZSBTRUFMRVZFTF8yMTA2X1BJRAkweDkwMjAJLyogU2VhTElOSys0MjIgKDIxMDYpICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMV8xX1BJRAkweDIyMTEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMV8yX1BJRAkweDIyMjEJLyogU2VhUE9SVCsyLzIzMiAoMjIwMSkgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMl8xX1BJRAkweDIyMTIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwMl8yX1BJRAkweDIyMjIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjIwM18xX1BJRAkweDIyMTMJLyogU2VhUE9SVCsyICgyMjAzKSBQb3J0IDEgKi8KI2RlZmluZSBTRUFMRVZFTF8yMjAzXzJfUElECTB4MjIyMwkvKiBTZWFQT1JUKzIgKDIyMDMpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfMV9QSUQJMHgyNDExCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMSAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfMl9QSUQJMHgyNDIxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfM19QSUQJMHgyNDMxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDFfNF9QSUQJMHgyNDQxCS8qIFNlYVBPUlQrNC8yMzIgKDI0MDEpIFBvcnQgNCAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfMV9QSUQJMHgyNDEyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMSAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfMl9QSUQJMHgyNDIyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMiAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfM19QSUQJMHgyNDMyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDJfNF9QSUQJMHgyNDQyCS8qIFNlYVBPUlQrNC80ODUgKDI0MDIpIFBvcnQgNCAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDNfMV9QSUQJMHgyNDEzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjQwM18yX1BJRAkweDI0MjMJLyogU2VhUE9SVCs0ICgyNDAzKSBQb3J0IDIgKi8KI2RlZmluZSBTRUFMRVZFTF8yNDAzXzNfUElECTB4MjQzMwkvKiBTZWFQT1JUKzQgKDI0MDMpIFBvcnQgMyAqLwojZGVmaW5lIFNFQUxFVkVMXzI0MDNfNF9QSUQJMHgyNDQzCS8qIFNlYVBPUlQrNCAoMjQwMykgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8xX1BJRAkwWDI4MTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8yX1BJRAkwWDI4MjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV8zX1BJRAkwWDI4MzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCAzICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV80X1BJRAkwWDI4NDEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV81X1BJRAkwWDI4NTEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA1ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV82X1BJRAkwWDI4NjEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA2ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV83X1BJRAkwWDI4NzEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA3ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMV84X1BJRAkwWDI4ODEJLyogU2VhTElOSys4LzIzMiAoMjgwMSkgUG9ydCA4ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8xX1BJRAkwWDI4MTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAxICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8yX1BJRAkwWDI4MjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAyICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl8zX1BJRAkwWDI4MzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCAzICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl80X1BJRAkwWDI4NDIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA0ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl81X1BJRAkwWDI4NTIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA1ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl82X1BJRAkwWDI4NjIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA2ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl83X1BJRAkwWDI4NzIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA3ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwMl84X1BJRAkwWDI4ODIJLyogU2VhTElOSys4LzQ4NSAoMjgwMikgUG9ydCA4ICovCiNkZWZpbmUgU0VBTEVWRUxfMjgwM18xX1BJRAkwWDI4MTMJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDEgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzJfUElECTBYMjgyMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDIgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzNfUElECTBYMjgzMyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDMgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzRfUElECTBYMjg0MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDQgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzVfUElECTBYMjg1MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDUgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzZfUElECTBYMjg2MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDYgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzdfUElECTBYMjg3MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDcgKi8KI2RlZmluZSBTRUFMRVZFTF8yODAzXzhfUElECTBYMjg4MyAJLyogU2VhTElOSys4ICgyODAzKSBQb3J0IDggKi8KCi8qCiAqIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSB2YWx1ZXMgZm9yIHR3byBLT0JJTCBjaGlwY2FyZCB0ZXJtaW5hbHMuCiAqLwojZGVmaW5lIEtPQklMX1ZJRAkJMHgwZDQ2CS8qIEtPQklMIFZlbmRvciBJRCAqLwojZGVmaW5lIEtPQklMX0NPTlZfQjFfUElECTB4MjAyMAkvKiBLT0JJTCBLb252ZXJ0ZXIgZm9yIEIxICovCiNkZWZpbmUgS09CSUxfQ09OVl9LQUFOX1BJRAkweDIwMjEJLyogS09CSUxfS29udmVydGVyIGZvciBLQUFOICovCgovKgogKiBJY29tIElELTEgZGlnaXRhbCB0cmFuc2NlaXZlcgogKi8KCiNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2CiNkZWZpbmUgSUNPTV9JRDFfUElEICAgICAgICAgICAgMHgwMDA0CgovKgogKiBBU0suZnIgZGV2aWNlcwogKi8KI2RlZmluZSBGVERJX0FTS19SRFI0MDBfUElECTB4Qzk5MQkvKiBBU0sgUkRSIDQwMCBzZXJpZXMgY2FyZCByZWFkZXIgKi8KCi8qCiAqIEZUREkgVVNCIFVBUlQgY2hpcHMgdXNlZCBpbiBjb25zdHJ1Y3Rpb24gcHJvamVjdHMgZnJvbSB0aGUKICogRWxla3RvciBFbGVjdHJvbmljcyBtYWdhemluZSAoaHR0cDovL2VsZWt0b3ItZWxlY3Ryb25pY3MuY28udWspCiAqLwojZGVmaW5lIEVMRUtUT1JfVklECQkweDBDN0QKI2RlZmluZSBFTEVLVE9SX0ZUMzIzUl9QSUQJMHgwMDA1CS8qIFJGSUQtUmVhZGVyLCBpc3N1ZSAwOS0yMDA2ICovCgovKgogKiBEU1MtMjAgU3luYyBTdGF0aW9uIGZvciBTb255IEVyaWNzc29uIFA4MDAKICovCiNkZWZpbmUgRlRESV9EU1MyMF9QSUQgICAgICAgICAgMHhGQzgyICAKCi8qCiAqIEhvbWUgRWxlY3Ryb25pY3MgKHd3dy5ob21lLWVsZWN0cm8uY29tKSBVU0IgZ2FkZ2V0cwogKi8KI2RlZmluZSBGVERJX0hFX1RJUkExX1BJRAkweEZBNzgJLyogVGlyYS0xIElSIHRyYW5zY2VpdmVyICovCgovKiBVU0ItVUlSVCAtIEFuIGluZnJhcmVkIHJlY2VpdmVyIGFuZCB0cmFuc21pdHRlciB1c2luZyB0aGUgOFUyMzJBTSBjaGlwICovCi8qIGh0dHA6Ly9ob21lLmVhcnRobGluay5uZXQvfmpyaGVlcy9VU0JVSVJUL2luZGV4Lmh0bSAqLwojZGVmaW5lIEZURElfVVNCX1VJUlRfUElECTB4Rjg1MAkvKiBQcm9kdWN0IElkICovCgovKiBUTkMtWCBVU0ItdG8tcGFja2V0LXJhZGlvIGFkYXB0ZXIsIHZlcnNpb25zIHByaW9yIHRvIDMuMCAoRExQIG1vZHVsZSkgKi8KCiNkZWZpbmUgRlRESV9UTkNfWF9QSUQJCTB4RUJFMAoKLyoKICogRUxWIFVTQiBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDaHJpc3RpYW4gQWJ0IG9mIEVMViAod3d3LmVsdi5kZSkuCiAqIEFsbCBvZiB0aGVzZSBkZXZpY2VzIHVzZSBGVERJJ3MgdmVuZG9yIElEICgweDA0MDMpLgogKgogKiBUaGUgcHJldmlvdXNseSBpbmNsdWRlZCBQSUQgZm9yIHRoZSBVTyAxMDAgbW9kdWxlIHdhcyBpbmNvcnJlY3QuCiAqIEluIGZhY3QsIHRoYXQgUElEIHdhcyBmb3IgRUxWJ3MgVVIgMTAwIFVTQi1SUzIzMiBjb252ZXJ0ZXIgKDB4RkI1OCkuCiAqCiAqIEFybWluIExhZXVnZXIgb3JpZ2luYWxseSBzZW50IHRoZSBQSUQgZm9yIHRoZSBVTSAxMDAgbW9kdWxlLgogKi8KI2RlZmluZSBGVERJX0VMVl9VUjEwMF9QSUQJMHhGQjU4CS8qIFVTQi1SUzIzMi1VbXNldHplciAoVVIgMTAwKSAqLwojZGVmaW5lIEZURElfRUxWX1VNMTAwX1BJRAkweEZCNUEJLyogVVNCLU1vZHVsIFVNIDEwMCAqLwojZGVmaW5lIEZURElfRUxWX1VPMTAwX1BJRAkweEZCNUIJLyogVVNCLU1vZHVsIFVPIDEwMCAqLwojZGVmaW5lIEZURElfRUxWX0FMQzg1MDBfUElECTB4RjA2RQkvKiBBTEMgODUwMCBFeHBlcnQgKi8KLyogQWRkaXRpb25hbCBFTFYgUElEcyB0aGF0IGRlZmF1bHQgdG8gdXNpbmcgdGhlIEZUREkgRDJYWCBkcml2ZXJzIG9uCiAqIE1TIFdpbmRvd3MsIHJhdGhlciB0aGFuIHRoZSBGVERJIFZpcnR1YWwgQ29tIFBvcnQgZHJpdmVycy4KICogTWF5YmUgdGhlc2Ugd2lsbCBiZSBlYXNpZXIgdG8gdXNlIHdpdGggdGhlIGxpYmZ0ZGkvbGlidXNiIHVzZXItc3BhY2UKICogZHJpdmVycywgb3IgcG9zc2libHkgdGhlIENvbWVkaSBkcml2ZXJzIGluIHNvbWUgY2FzZXMuICovCiNkZWZpbmUgRlRESV9FTFZfQ0xJNzAwMF9QSUQJMHhGQjU5CS8qIENvbXB1dGVyLUxpZ2h0LUludGVyZmFjZSAoQ0xJIDcwMDApICovCiNkZWZpbmUgRlRESV9FTFZfUFBTNzMzMF9QSUQJMHhGQjVDCS8qIFByb2Nlc3Nvci1Qb3dlci1TdXBwbHkgKFBQUyA3MzMwKSAqLwojZGVmaW5lIEZURElfRUxWX1RGTTEwMF9QSUQJMHhGQjVECS8qIFRlbXBlcmFydHVyLUZldWNodGUgTWVzc2dlcmFldCAoVEZNIDEwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9VREY3N19QSUQJMHhGQjVFCS8qIFVTQiBEQ0YgRnVua3VyaCAoVURGIDc3KSAqLwojZGVmaW5lIEZURElfRUxWX1VJTzg4X1BJRAkweEZCNUYJLyogVVNCLUkvTyBJbnRlcmZhY2UgKFVJTyA4OCkgKi8KI2RlZmluZSBGVERJX0VMVl9VQUQ4X1BJRAkweEYwNjgJLyogVVNCLUFELVdhbmRsZXIgKFVBRCA4KSAqLwojZGVmaW5lIEZURElfRUxWX1VEQTdfUElECTB4RjA2OQkvKiBVU0ItREEtV2FuZGxlciAoVURBIDcpICovCiNkZWZpbmUgRlRESV9FTFZfVVNJMl9QSUQJMHhGMDZBCS8qIFVTQi1TY2hyaXR0bW90b3Jlbi1JbnRlcmZhY2UgKFVTSSAyKSAqLwojZGVmaW5lIEZURElfRUxWX1QxMTAwX1BJRAkweEYwNkIJLyogVGhlcm1vbWV0ZXIgKFQgMTEwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9QQ0QyMDBfUElECTB4RjA2QwkvKiBQQy1EYXRlbmxvZ2dlciAoUENEIDIwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9VTEEyMDBfUElECTB4RjA2RAkvKiBVU0ItTENELUFuc3RldWVydW5nIChVTEEgMjAwKSAqLwojZGVmaW5lIEZURElfRUxWX0ZIWjEwMDBQQ19QSUQJMHhGMDZGCS8qIEZIWiAxMDAwIFBDICovCiNkZWZpbmUgRlRESV9FTFZfQ1NJOF9QSUQJMHhFMEYwCS8qIENvbXB1dGVyLVNjaGFsdC1JbnRlcmZhY2UgKENTSSA4KSAqLwojZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KI2RlZmluZSBGVERJX0VMVl9QQ0sxMDBfUElECTB4RTBGMgkvKiBQQy1LYWJlbHRlc3RlciAoUENLIDEwMCkgKi8KI2RlZmluZSBGVERJX0VMVl9SRlA1MDBfUElECTB4RTBGMwkvKiBIRi1MZWlzdHVuZ3NtZXNzZXIgKFJGUCA1MDApICovCiNkZWZpbmUgRlRESV9FTFZfRlMyMFNJR19QSUQJMHhFMEY0CS8qIFNpZ25hbGdlYmVyIChGUyAyMCBTSUcpICovCiNkZWZpbmUgRlRESV9FTFZfV1MzMDBQQ19QSUQJMHhFMEY2CS8qIFBDLVdldHRlcnN0YXRpb24gKFdTIDMwMCBQQykgKi8KI2RlZmluZSBGVERJX0VMVl9GSFoxMzAwUENfUElECTB4RTBFOAkvKiBGSFogMTMwMCBQQyAqLwojZGVmaW5lIEZURElfRUxWX1dTNTAwX1BJRAkweEUwRTkJLyogUEMtV2V0dGVyc3RhdGlvbiAoV1MgNTAwKSAqLwoKLyoKICogRGVmaW5pdGlvbnMgZm9yIElEIFRFQ0ggKHd3dy5pZHQtbmV0LmNvbSkgZGV2aWNlcwogKi8KI2RlZmluZSBJRFRFQ0hfVklECQkweDBBQ0QJLyogSUQgVEVDSCBWZW5kb3IgSUQgKi8KI2RlZmluZSBJRFRFQ0hfSURUMTIyMVVfUElECTB4MDMwMAkvKiBJRFQxMjIxVSBVU0IgdG8gUlMtMjMyIGFkYXB0ZXIgKi8KCi8qCiAqIERlZmluaXRpb25zIGZvciBPbW5pZGlyZWN0aW9uYWwgQ29udHJvbCBUZWNobm9sb2d5LCBJbmMuIGRldmljZXMKICovCiNkZWZpbmUgT0NUX1ZJRAkJCTB4MEIzOQkvKiBPQ1QgdmVuZG9yIElEICovCi8qIE5vdGU6IE9DVCBVUzEwMSBpcyBhbHNvIHJlYmFkZ2VkIGFzIERpY2sgU21pdGggRWxlY3Ryb25pY3MgKE5aKSBYSDYzODEgKi8KLyogQWxzbyByZWJhZGdlZCBhcyBEaWNrIFNtaXRoIEVsZWN0cm9uaWNzIChBdXMpIFhINjQ1MSAqLwovKiBBbHNvIHJlYmFkZ2VkIGFzIFNJSUcgSW5jLiBtb2RlbCBVUzIzMDggaGFyZHdhcmUgdmVyc2lvbiAxICovCiNkZWZpbmUgT0NUX1VTMTAxX1BJRAkJMHgwNDIxCS8qIE9DVCBVUzEwMSBVU0IgdG8gUlMtMjMyICovCgovKiBhbiBpbmZyYXJlZCByZWNlaXZlciBmb3IgdXNlciBhY2Nlc3MgY29udHJvbCB3aXRoIElSIHRhZ3MgKi8KI2RlZmluZSBGVERJX1BJRUdST1VQX1BJRAkweEYyMDgJLyogUHJvZHVjdCBJZCAqLwoKLyoKICogRGVmaW5pdGlvbnMgZm9yIEFydGVtaXMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCiAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXJ0ZW1pc2NjZC5jby51ay8KICovCiNkZWZpbmUgRlRESV9BUlRFTUlTX1BJRAkweERGMjgJLyogQWxsIEFydGVtaXMgQ2FtZXJhcyAqLwoKLyoKICogRGVmaW5pdGlvbnMgZm9yIEFUSUsgSW5zdHJ1bWVudHMgYXN0cm9ub21pY2FsIFVTQiBiYXNlZCBjYW1lcmFzCiAqIENoZWNrIGl0IGF0IGh0dHA6Ly93d3cuYXRpay1pbnN0cnVtZW50cy5jb20vCiAqLwojZGVmaW5lIEZURElfQVRJS19BVEsxNl9QSUQJMHhERjMwCS8qIEFUSUsgQVRLLTE2IEdyYXlzY2FsZSBDYW1lcmEgKi8KI2RlZmluZSBGVERJX0FUSUtfQVRLMTZDX1BJRAkweERGMzIJLyogQVRJSyBBVEstMTZDIENvbG91ciBDYW1lcmEgKi8KI2RlZmluZSBGVERJX0FUSUtfQVRLMTZIUl9QSUQJMHhERjMxCS8qIEFUSUsgQVRLLTE2SFIgR3JheXNjYWxlIENhbWVyYSAqLwojZGVmaW5lIEZURElfQVRJS19BVEsxNkhSQ19QSUQJMHhERjMzCS8qIEFUSUsgQVRLLTE2SFJDIENvbG91ciBDYW1lcmEgKi8KCi8qCiAqIFByb3RlZ28gcHJvZHVjdCBpZHMKICovCiNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzEJMHhGQzcwCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KI2RlZmluZSBQUk9URUdPX1IyWDAJCTB4RkM3MQkvKiBSMjAwLVVTQiBUUk5HIHVuaXQgKFIyMTAsIFIyMjAsIGFuZCBSMjMwKSAqLwojZGVmaW5lIFBST1RFR09fU1BFQ0lBTF8zCTB4RkM3MgkvKiBzcGVjaWFsL3Vua25vd24gZGV2aWNlICovCiNkZWZpbmUgUFJPVEVHT19TUEVDSUFMXzQJMHhGQzczCS8qIHNwZWNpYWwvdW5rbm93biBkZXZpY2UgKi8KCi8qCiAqIEd1ZGUgQW5hbG9nLSB1bmQgRGlnaXRhbHN5c3RlbWUgR21iSAogKi8KI2RlZmluZSBGVERJX0dVREVBRFNfRTgwOF9QSUQgICAgMHhFODA4CiNkZWZpbmUgRlRESV9HVURFQURTX0U4MDlfUElEICAgIDB4RTgwOQojZGVmaW5lIEZURElfR1VERUFEU19FODBBX1BJRCAgICAweEU4MEEKI2RlZmluZSBGVERJX0dVREVBRFNfRTgwQl9QSUQgICAgMHhFODBCCiNkZWZpbmUgRlRESV9HVURFQURTX0U4MENfUElEICAgIDB4RTgwQwojZGVmaW5lIEZURElfR1VERUFEU19FODBEX1BJRCAgICAweEU4MEQKI2RlZmluZSBGVERJX0dVREVBRFNfRTgwRV9QSUQgICAgMHhFODBFCiNkZWZpbmUgRlRESV9HVURFQURTX0U4MEZfUElEICAgIDB4RTgwRgojZGVmaW5lIEZURElfR1VERUFEU19FODg4X1BJRCAgICAweEU4ODggIC8qIEV4cGVydCBJU0ROIENvbnRyb2wgVVNCICovCiNkZWZpbmUgRlRESV9HVURFQURTX0U4ODlfUElEICAgIDB4RTg4OSAgLyogVVNCIFJTLTIzMiBPcHRvQnJpZGdlICovCiNkZWZpbmUgRlRESV9HVURFQURTX0U4OEFfUElEICAgIDB4RTg4QQojZGVmaW5lIEZURElfR1VERUFEU19FODhCX1BJRCAgICAweEU4OEIKI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Q19QSUQgICAgMHhFODhDCiNkZWZpbmUgRlRESV9HVURFQURTX0U4OERfUElEICAgIDB4RTg4RAojZGVmaW5lIEZURElfR1VERUFEU19FODhFX1BJRCAgICAweEU4OEUKI2RlZmluZSBGVERJX0dVREVBRFNfRTg4Rl9QSUQgICAgMHhFODhGCgovKgogKiBMaW54IFRlY2hub2xvZ2llcyBwcm9kdWN0IGlkcwogKi8KI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCiNkZWZpbmUgTElOWF9NQVNURVJERVZFTDJfUElEICAgMHhGNDQ5ICAgLyogTGlueCBNYXN0ZXIgRGV2ZWxvcG1lbnQgMi4wICovCiNkZWZpbmUgTElOWF9GVVRVUkVfMF9QSUQgICAweEY0NEEgICAvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwojZGVmaW5lIExJTlhfRlVUVVJFXzJfUElEICAgMHhGNDRDICAgLyogTGlueCBmdXR1cmUgZGV2aWNlICovCgovKiBDQ1MgSW5jLiBJQ0RVL0lDRFU0MCBwcm9kdWN0IElEIC0gdGhlIEZUMjMyQk0gaXMgdXNlZCBpbiBhbiBpbi1jaXJjdWl0LWRlYnVnZ2VyICovCi8qIHVuaXQgZm9yIFBJQzE2J3MvUElDMTgncyAqLwojZGVmaW5lIEZURElfQ0NTSUNEVTIwXzBfUElEICAgIDB4RjlEMAojZGVmaW5lIEZURElfQ0NTSUNEVTQwXzFfUElEICAgIDB4RjlEMQojZGVmaW5lIEZURElfQ0NTTUFDSFhfMl9QSUQgICAgIDB4RjlEMgoKLyogSW5zaWRlIEFjY2Vzc28gY29udGFjdGxlc3MgcmVhZGVyIChodHRwOi8vd3d3Lmluc2lkZWZyLmNvbSkgKi8KI2RlZmluZSBJTlNJREVfQUNDRVNTTwkJMHhGQUQwCgovKgogKiBJbnRyZXBpZCBDb250cm9sIFN5c3RlbXMgKGh0dHA6Ly93d3cuaW50cmVwaWRjcy5jb20vKSBWYWx1ZUNBTiBhbmQgTmVvVkkKICovCiNkZWZpbmUgSU5UUkVQSURfVklECQkweDA5M0MKI2RlZmluZSBJTlRSRVBJRF9WQUxVRUNBTl9QSUQJMHgwNjAxCiNkZWZpbmUgSU5UUkVQSURfTkVPVklfUElECTB4MDcwMQoKLyoKICogRmFsY29tIFdpcmVsZXNzIENvbW11bmljYXRpb25zIEdtYkgKICovCiNkZWZpbmUgRkFMQ09NX1ZJRAkJMHgwRjk0CS8qIFZlbmRvciBJZCAqLwojZGVmaW5lIEZBTENPTV9UV0lTVF9QSUQJMHgwMDAxCS8qIEZhbGNvbSBUd2lzdCBVU0IgR1BSUyBtb2RlbSAqLwojZGVmaW5lIEZBTENPTV9TQU1CQV9QSUQJMHgwMDA1CS8qIEZhbGNvbSBTYW1iYSBVU0IgR1BSUyBtb2RlbSAqLwoKLyoKICogU1VVTlRPIHByb2R1Y3QgaWRzCiAqLwojZGVmaW5lIEZURElfU1VVTlRPX1NQT1JUU19QSUQJMHhGNjgwCS8qIFN1dW50byBTcG9ydHMgaW5zdHJ1bWVudCAqLwoKLyoKICogRGVmaW5pdGlvbnMgZm9yIEImQiBFbGVjdHJvbmljcyBwcm9kdWN0cy4KICovCiNkZWZpbmUgQkFOREJfVklECQkweDA4NTYJLyogQiZCIEVsZWN0cm9uaWNzIFZlbmRvciBJRCAqLwojZGVmaW5lIEJBTkRCX1VTT1RMNF9QSUQJMHhBQzAxCS8qIFVTT1RMNCBJc29sYXRlZCBSUy00ODUgQ29udmVydGVyICovCiNkZWZpbmUgQkFOREJfVVNUTDRfUElECQkweEFDMDIJLyogVVNUTDQgUlMtNDg1IENvbnZlcnRlciAqLwojZGVmaW5lIEJBTkRCX1VTTzlNTDJfUElECTB4QUMwMwkvKiBVU085TUwyIElzb2xhdGVkIFJTLTIzMiBDb252ZXJ0ZXIgKi8KCi8qCiAqIFJNIE1pY2hhZWxpZGVzIENBTnZpZXcgVVNCIChodHRwOi8vd3d3LnJtY2FuLmNvbSkKICogQ0FOIGZpZWxkYnVzIGludGVyZmFjZSBhZGFwdGVyLCBhZGRlZCBieSBwb3J0IEdtYkggd3d3LnBvcnQuZGUpCiAqIElhbiBBYmJvdHQgY2hhbmdlZCB0aGUgbWFjcm8gbmFtZXMgZm9yIGNvbnNpc3RlbmN5LgogKi8KI2RlZmluZSBGVERJX1JNX0NBTlZJRVdfUElECTB4ZmQ2MAkvKiBQcm9kdWN0IElkICovCgovKgogKiBFVkVSIEVjbyBQcm8gVVBTIChodHRwOi8vd3d3LmV2ZXIuY29tLnBsLykKICovCgojZGVmaW5lCUVWRVJfRUNPX1BST19DRFMJMHhlNTIwCS8qIFJTLTIzMiBjb252ZXJ0ZXIgKi8KCi8qCiAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAogKiBVU0ItVFRZIGFjdGl2LCBVU0ItVFRZIHBhc3Npdi4gIFNvbWUgUElEcyBhcmUgdXNlZCBieSBzZXZlcmFsIGRldmljZXMKICogYW5kIEknbSBub3QgZW50aXJlbHkgc3VyZSB3aGljaCBhcmUgdXNlZCBieSB3aGljaC4KICovCiNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMF9QSUQJMHg4MzcyCiNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQJMHhGM0MwCiNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMl9QSUQJMHhGM0MxCgovKgogKiBNb2JpbGl0eSBFbGVjdHJvbmljcyBwcm9kdWN0cy4KICovCiNkZWZpbmUgTU9CSUxJVFlfVklECQkJMHgxMzQyCiNkZWZpbmUgTU9CSUxJVFlfVVNCX1NFUklBTF9QSUQJCTB4MDIwMgkvKiBFYXNpRG9jayBVU0IgMjAwIHNlcmlhbCAqLwoKLyoKICogbWljcm9IQU0gcHJvZHVjdCBJRHMgKGh0dHA6Ly93d3cubWljcm9oYW0uY29tKS4KICogU3VibWl0dGVkIGJ5IEp1c3RpbiBCdXJrZXQgKEtMMVJMKSA8em9ydG9uQGp0YW4uY29tPgogKiBhbmQgTWlrZSBTdHVkZXIgKEs2RUVQKSA8azZlZXBAaGFtc29mdHdhcmUub3JnPi4KICogSWFuIEFiYm90dCA8YWJib3R0aUBtZXYuY28udWs+IGFkZGVkIGEgZmV3IG1vcmUgZnJvbSB0aGUgZHJpdmVyIElORiBmaWxlLgogKi8KI2RlZmluZSBGVERJX01IQU1fS1dfUElEIDB4RUVFOAkJLyogVVNCLUtXIGludGVyZmFjZSAqLwojZGVmaW5lIEZURElfTUhBTV9ZU19QSUQgMHhFRUU5CQkvKiBVU0ItWVMgaW50ZXJmYWNlICovCiNkZWZpbmUgRlRESV9NSEFNX1k2X1BJRCAweEVFRUEJCS8qIFVTQi1ZNiBpbnRlcmZhY2UgKi8KI2RlZmluZSBGVERJX01IQU1fWThfUElEIDB4RUVFQgkJLyogVVNCLVk4IGludGVyZmFjZSAqLwojZGVmaW5lIEZURElfTUhBTV9JQ19QSUQgMHhFRUVDCQkvKiBVU0ItSUMgaW50ZXJmYWNlICovCiNkZWZpbmUgRlRESV9NSEFNX0RCOV9QSUQgMHhFRUVECS8qIFVTQi1EQjkgaW50ZXJmYWNlICovCiNkZWZpbmUgRlRESV9NSEFNX1JTMjMyX1BJRCAweEVFRUUJLyogVVNCLVJTMjMyIGludGVyZmFjZSAqLwojZGVmaW5lIEZURElfTUhBTV9ZOV9QSUQgMHhFRUVGCQkvKiBVU0ItWTkgaW50ZXJmYWNlICovCgovKgogKiBBY3RpdmUgUm9ib3RzIHByb2R1Y3QgaWRzLgogKi8KI2RlZmluZSBGVERJX0FDVElWRV9ST0JPVFNfUElECTB4RTU0OAkvKiBVU0IgY29tbXMgYm9hcmQgKi8KCi8qCiAqIFhzZW5zIFRlY2hub2xvZ2llcyBCViBwcm9kdWN0cyAoaHR0cDovL3d3dy54c2Vucy5jb20pLgogKi8KI2RlZmluZSBYU0VOU19DT05WRVJURVJfMF9QSUQJMHhEMzg4CiNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzFfUElECTB4RDM4OQojZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl8yX1BJRAkweEQzOEEKI2RlZmluZSBYU0VOU19DT05WRVJURVJfM19QSUQJMHhEMzhCCiNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzRfUElECTB4RDM4QwojZGVmaW5lIFhTRU5TX0NPTlZFUlRFUl81X1BJRAkweEQzOEQKI2RlZmluZSBYU0VOU19DT05WRVJURVJfNl9QSUQJMHhEMzhFCiNkZWZpbmUgWFNFTlNfQ09OVkVSVEVSXzdfUElECTB4RDM4RgoKLyoKICogVGVyYXRyb25payBwcm9kdWN0IGlkcy4KICogU3VibWl0dGVkIGJ5IE8uIFf2bGZlbHNjaG5laWRlci4KICovCiNkZWZpbmUgRlRESV9URVJBVFJPTklLX1ZDUF9QSUQJIDB4RUM4OAkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBWQ1AgZHJpdmVyIG9uIHdpbmRvd3MpICovCiNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLwoKLyoKICogRXZvbHV0aW9uIFJvYm90aWNzIHByb2R1Y3RzIChodHRwOi8vd3d3LmV2b2x1dGlvbi5jb20vKS4KICogU3VibWl0dGVkIGJ5IFNoYXduIE0uIExhdmVsbGUuCiAqLwojZGVmaW5lIEVWT0xVVElPTl9WSUQJCTB4REVFRQkvKiBWZW5kb3IgSUQgKi8KI2RlZmluZSBFVk9MVVRJT05fRVIxX1BJRAkweDAzMDAJLyogRVIxIENvbnRyb2wgTW9kdWxlICovCgovKiBQeXJhbWlkIENvbXB1dGVyIEdtYkggKi8KI2RlZmluZSBGVERJX1BZUkFNSURfUElECTB4RTZDOAkvKiBQeXJhbWlkIEFwcGxpYW5jZSBEaXNwbGF5ICovCgovKgogKiBQb3NpZmxleCBpbmMgcmV0YWlsIGVxdWlwbWVudCAoaHR0cDovL3d3dy5wb3NpZmxleC5jb20udHcpCiAqLwojZGVmaW5lIFBPU0lGTEVYX1ZJRAkJMHgwZDNhICAvKiBWZW5kb3IgSUQgKi8KI2RlZmluZSBQT1NJRkxFWF9QUDcwMDBfUElECTB4MDMwMCAgLyogUFAtNzAwMElJIHRoZXJtYWwgcHJpbnRlciAqLwoKLyoKICogV2VzdHJleCBJbnRlcm5hdGlvbmFsIGRldmljZXMgc3VibWl0dGVkIGJ5IENvcnkgTGVlCiAqLwojZGVmaW5lIEZURElfV0VTVFJFWF9NT0RFTF83NzdfUElECTB4REMwMAkvKiBNb2RlbCA3NzcgKi8KI2RlZmluZSBGVERJX1dFU1RSRVhfTU9ERUxfODkwMEZfUElECTB4REMwMQkvKiBNb2RlbCA4OTAwRiAqLwoKLyoKICogUlItQ2lyS2l0cyBMb2NvQnVmZmVyIFVTQiAoaHR0cDovL3d3dy5yci1jaXJraXRzLmNvbSkKICovCiNkZWZpbmUgRlRESV9SUkNJUktJVFNfTE9DT0JVRkZFUl9QSUQJMHhjN2QwCS8qIExvY29CdWZmZXIgVVNCICovCgovKgogKiBFY2xvIChodHRwOi8vd3d3LmVjbG8ucHQvKSBwcm9kdWN0IElEcy4KICogUElEIDB4RUE5MCBzdWJtaXR0ZWQgYnkgTWFydGluIEdyaWxsLgogKi8KI2RlZmluZSBGVERJX0VDTE9fQ09NXzFXSVJFX1BJRAkweEVBOTAJLyogQ09NIHRvIDEtV2lyZSBVU0IgYWRhcHRvciAqLwoKLyoKICogUGFwb3VjaCBwcm9kdWN0cyAoaHR0cDovL3d3dy5wYXBvdWNoLmNvbS8pCiAqIFN1Ym1pdHRlZCBieSBGb2xrZXJ0IHZhbiBIZXVzZGVuCiAqLwoKI2RlZmluZSBQQVBPVUNIX1ZJRAkJCTB4NTA1MAkvKiBWZW5kb3IgSUQgKi8KI2RlZmluZSBQQVBPVUNIX1RNVV9QSUQJCQkweDA0MDAJLyogVE1VIFVTQiBUaGVybW9tZXRlciAqLwoKLyoKICogQUNHIElkZW50aWZpY2F0aW9uIFRlY2hub2xvZ2llcyBHbWJIIHByb2R1Y3RzIChodHRwOi8vd3d3LmFjZy5kZS8pLgogKiBTdWJtaXR0ZWQgYnkgYW50b24gLWF0LSBnb3RvMTAgLWRvdC0gb3JnLgogKi8KI2RlZmluZSBGVERJX0FDR19IRkRVQUxfUElECQkweEREMjAJLyogSEYgRHVhbCBJU08gUmVhZGVyIChSRklEKSAqLwoKLyoKICogWW9zdCBFbmdpbmVlcmluZywgSW5jLiBwcm9kdWN0cyAod3d3Lnlvc3RlbmdpbmVlcmluZy5jb20pLgogKiBQSUQgMHhFMDUwIHN1Ym1pdHRlZCBieSBBYXJvbiBQcm9zZS4KICovCiNkZWZpbmUgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQJMHhFMDUwCS8qIFlFSSBTZXJ2b0NlbnRlcjMuMSBVU0IgKi8KCi8qCiAqIFRob3JMYWJzIFVTQiBtb3RvciBkcml2ZXJzCiAqLwojZGVmaW5lIEZURElfVEhPUkxBQlNfUElECQkweGZhZjAgLyogVGhvckxhYnMgVVNCIG1vdG9yIGRyaXZlcnMgKi8KCi8qCiAqIFRlc3RvIHByb2R1Y3RzIChodHRwOi8vd3d3LnRlc3RvLmNvbS8pCiAqIFN1Ym1pdHRlZCBieSBDb2xpbiBMZXJveQogKi8KI2RlZmluZSBURVNUT19WSUQJCQkweDEyOEQKI2RlZmluZSBURVNUT19VU0JfSU5URVJGQUNFX1BJRAkJMHgwMDAxCgovKgogKiBHYW1tYSBTY291dCAoaHR0cDovL2dhbW1hLXNjb3V0LmNvbS8pLiBTdWJtaXR0ZWQgYnkgcnNjQHJ1bnR1eC5jb20uCiAqLwojZGVmaW5lIEZURElfR0FNTUFfU0NPVVRfUElECQkweEQ2NzgJLyogR2FtbWEgU2NvdXQgb25saW5lICovCgovKgogKiBUYWN0cml4IE9wZW5Qb3J0IChFQ1UpIGRldmljZXMuCiAqIE9wZW5Qb3J0IDEuM00gc3VibWl0dGVkIGJ5IERvbm91ciBTaXplbW9yZS4KICogT3BlblBvcnQgMS4zUyBhbmQgMS4zVSBzdWJtaXR0ZWQgYnkgSWFuIEFiYm90dC4KICovCiNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzTV9QSUQJMHhDQzQ4CS8qIE9wZW5Qb3J0IDEuMyBNaXRzdWJpc2hpICovCiNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzU19QSUQJMHhDQzQ5CS8qIE9wZW5Qb3J0IDEuMyBTdWJhcnUgKi8KI2RlZmluZSBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNVX1BJRAkweENDNEEJLyogT3BlblBvcnQgMS4zIFVuaXZlcnNhbCAqLwoKLyogQ29tbWFuZHMgKi8KI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkwJMiAvKiBTZXQgZmxvdyBjb250cm9sIHJlZ2lzdGVyICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURfUkFURQkzIC8qIFNldCBiYXVkIHJhdGUgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfREFUQQk0IC8qIFNldCB0aGUgZGF0YSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHBvcnQgKi8KI2RlZmluZSBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCTUgLyogUmV0cmlldmUgY3VycmVudCB2YWx1ZSBvZiBtb2Rlcm4gc3RhdHVzIHJlZ2lzdGVyICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIJNiAvKiBTZXQgdGhlIGV2ZW50IGNoYXJhY3RlciAqLwojZGVmaW5lIEZURElfU0lPX1NFVF9FUlJPUl9DSEFSCTcgLyogU2V0IHRoZSBlcnJvciBjaGFyYWN0ZXIgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgk5IC8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwojZGVmaW5lIEZURElfU0lPX0dFVF9MQVRFTkNZX1RJTUVSCTEwIC8qIEdldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwoKCi8qCiAqICAgQm1SZXF1ZXN0VHlwZTogIDExMDAgMDAwMGIKICogICBiUmVxdWVzdDogICAgICAgRlRESV9FMl9SRUFECiAqICAgd1ZhbHVlOiAgICAgICAgIDAKICogICB3SW5kZXg6ICAgICAgICAgQWRkcmVzcyBvZiB3b3JkIHRvIHJlYWQKICogICB3TGVuZ3RoOiAgICAgICAgMgogKiAgIERhdGE6ICAgICAgICAgICBXaWxsIHJldHVybiBhIHdvcmQgb2YgZGF0YSBmcm9tIEUyQWRkcmVzcwogKgogKi8KCi8qIFBvcnQgSWRlbnRpZmllciBUYWJsZSAqLwojZGVmaW5lIFBJVF9ERUZBVUxUIAkJMCAvKiBTSU9BICovCiNkZWZpbmUgUElUX1NJT0EJCTEgLyogU0lPQSAqLwovKiBUaGUgZGV2aWNlIHRoaXMgZHJpdmVyIGlzIHRlc3RlZCB3aXRoIG9uZSBoYXMgb25seSBvbmUgcG9ydCAqLwojZGVmaW5lIFBJVF9TSU9CCQkyIC8qIFNJT0IgKi8KI2RlZmluZSBQSVRfUEFSQUxMRUwJCTMgLyogUGFyYWxsZWwgKi8KCi8qIEZURElfU0lPX1JFU0VUICovCiNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUkVRVUVTVCBGVERJX1NJT19SRVNFVAojZGVmaW5lIEZURElfU0lPX1JFU0VUX1JFUVVFU1RfVFlQRSAweDQwCiNkZWZpbmUgRlRESV9TSU9fUkVTRVRfU0lPIDAKI2RlZmluZSBGVERJX1NJT19SRVNFVF9QVVJHRV9SWCAxCiNkZWZpbmUgRlRESV9TSU9fUkVTRVRfUFVSR0VfVFggMgoKLyoKICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIKICogYlJlcXVlc3Q6ICAgICAgIEZURElfU0lPX1JFU0VUCiAqIHdWYWx1ZTogICAgICAgICBDb250cm9sIFZhbHVlIAogKiAgICAgICAgICAgICAgICAgICAwID0gUmVzZXQgU0lPCiAqICAgICAgICAgICAgICAgICAgIDEgPSBQdXJnZSBSWCBidWZmZXIKICogICAgICAgICAgICAgICAgICAgMiA9IFB1cmdlIFRYIGJ1ZmZlcgogKiB3SW5kZXg6ICAgICAgICAgUG9ydAogKiB3TGVuZ3RoOiAgICAgICAgMAogKiBEYXRhOiAgICAgICAgICAgTm9uZQogKgogKiBUaGUgUmVzZXQgU0lPIGNvbW1hbmQgaGFzIHRoaXMgZWZmZWN0OgogKgogKiAgICBTZXRzIGZsb3cgY29udHJvbCBzZXQgdG8gJ25vbmUnCiAqICAgIEV2ZW50IGNoYXIgPSAkMEQKICogICAgRXZlbnQgdHJpZ2dlciA9IGRpc2FibGVkCiAqICAgIFB1cmdlIFJYIGJ1ZmZlcgogKiAgICBQdXJnZSBUWCBidWZmZXIKICogICAgQ2xlYXIgRFRSCiAqICAgIENsZWFyIFJUUwogKiAgICBiYXVkIGFuZCBkYXRhIGZvcm1hdCBub3QgcmVzZXQKICoKICogVGhlIFB1cmdlIFJYIGFuZCBUWCBidWZmZXIgY29tbWFuZHMgYWZmZWN0IG5vdGhpbmcgZXhjZXB0IHRoZSBidWZmZXJzCiAqCiAgICovCgovKiBGVERJX1NJT19TRVRfQkFVRFJBVEUgKi8KI2RlZmluZSBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVF9UWVBFIDB4NDAKI2RlZmluZSBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVCAzCgovKgogKiBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwQgogKiBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0JBVURSQVRFCiAqIHdWYWx1ZTogICAgICAgICBCYXVkRGl2aXNvciB2YWx1ZSAtIHNlZSBiZWxvdwogKiB3SW5kZXg6ICAgICAgICAgUG9ydAogKiB3TGVuZ3RoOiAgICAgICAgMAogKiBEYXRhOiAgICAgICAgICAgTm9uZQogKiBUaGUgQmF1ZERpdmlzb3IgdmFsdWVzIGFyZSBjYWxjdWxhdGVkIGFzIGZvbGxvd3M6CiAqIC0gQmFzZUNsb2NrIGlzIGVpdGhlciAxMjAwMDAwMCBvciA0ODAwMDAwMCBkZXBlbmRpbmcgb24gdGhlIGRldmljZS4gRklYTUU6IEkgd2lzaAogKiAgIEkga25ldyBob3cgdG8gZGV0ZWN0IG9sZCBjaGlwcyB0byBzZWxlY3QgcHJvcGVyIGJhc2UgY2xvY2shCiAqIC0gQmF1ZERpdmlzb3IgaXMgYSBmaXhlZCBwb2ludCBudW1iZXIgZW5jb2RlZCBpbiBhIGZ1bm55IHdheS4KICogICAoLS1XUk9ORyBXQVkgT0YgVEhJTktJTkctLSkKICogICBCYXVkRGl2aXNvciBpcyBhIGZpeGVkIHBvaW50IG51bWJlciBlbmNvZGVkIHdpdGggZm9sbG93aW5nIGJpdCB3ZWlnaHM6CiAqICAgKC0yKSgtMSkoMTMuLjApLiBJdCBpcyBhIHJhZGljYWwgd2l0aCBhIGRlbm9taW5hdG9yIG9mIDQsIHNvIHZhbHVlcwogKiAgIGVuZCB3aXRoIDAuMCAoMDAuLi4pLCAwLjI1ICgxMC4uLiksIDAuNSAoMDEuLi4pLCBhbmQgMC43NSAoMTEuLi4pLgogKiAgICgtLVRIRSBSRUFMSVRZLS0pCiAqICAgVGhlIGJvdGgtYml0cy1zZXQgaGFzIHF1aXRlIGRpZmZlcmVudCBtZWFuaW5nIGZyb20gMC43NSAtIHRoZSBjaGlwIGRlc2lnbmVycwogKiAgIGhhdmUgZGVjaWRlZCBpdCB0byBtZWFuIDAuMTI1IGluc3RlYWQgb2YgMC43NS4KICogICBUaGlzIGluZm8gbG9va2VkIHVwIGluIEZUREkgYXBwbGljYXRpb24gbm90ZSAiRlQ4VTIzMiBERVZJQ0VTIFwgRGF0YSBSYXRlcwogKiAgIGFuZCBGbG93IENvbnRyb2wgQ29uc2lkZXJhdGlvbiBmb3IgVVNCIHRvIFJTMjMyIi4KICogLSBCYXVkRGl2aXNvciA9IChCYXNlQ2xvY2sgLyAxNikgLyBCYXVkUmF0ZSwgd2hlcmUgdGhlICg9KSBvcGVyYXRpb24gc2hvdWxkCiAqICAgYXV0b21hZ2ljYWxseSByZS1lbmNvZGUgdGhlIHJlc3VsdGluZyB2YWx1ZSB0byB0YWtlIGZyYWN0aW9ucyBpbnRvIGNvbnNpZGVyYXRpb24uCiAqIEFzIGFsbCB2YWx1ZXMgYXJlIGludGVnZXJzLCBzb21lIGJpdCB0d2lkZGxpbmcgaXMgaW4gb3JkZXI6CiAqICAgQmF1ZERpdmlzb3IgPSAoQmFzZUNsb2NrIC8gMTYgLyBCYXVkUmF0ZSkgfAogKiAgICgoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiA0KSA/IDB4NDAwMCAgICAvLyAwLjUKICogICAgOiAoKEJhc2VDbG9jayAvIDIgLyBCYXVkUmF0ZSkgJiAyKSA/IDB4ODAwMCAgLy8gMC4yNQogKiAgICA6ICgoQmFzZUNsb2NrIC8gMiAvIEJhdWRSYXRlKSAmIDEpID8gMHhjMDAwICAvLyAwLjEyNQogKiAgICA6IDApCiAqCiAqIEZvciB0aGUgRlQyMzJCTSwgYSAxN3RoIGRpdmlzb3IgYml0IHdhcyBpbnRyb2R1Y2VkIHRvIGVuY29kZSB0aGUgbXVsdGlwbGVzCiAqIG9mIDAuMTI1IG1pc3NpbmcgZnJvbSB0aGUgRlQ4VTIzMkFNLiAgQml0cyAxNiB0byAxNCBhcmUgY29kZWQgYXMgZm9sbG93cwogKiAodGhlIGZpcnN0IGZvdXIgY29kZXMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgRlQ4VTIzMkFNLCB3aGVyZSBiaXQgMTYgaXMKICogYWx3YXlzIDApOgogKiAgIDAwMCAtIGFkZCAuMDAwIHRvIGRpdmlzb3IKICogICAwMDEgLSBhZGQgLjUwMCB0byBkaXZpc29yCiAqICAgMDEwIC0gYWRkIC4yNTAgdG8gZGl2aXNvcgogKiAgIDAxMSAtIGFkZCAuMTI1IHRvIGRpdmlzb3IKICogICAxMDAgLSBhZGQgLjM3NSB0byBkaXZpc29yCiAqICAgMTAxIC0gYWRkIC42MjUgdG8gZGl2aXNvcgogKiAgIDExMCAtIGFkZCAuNzUwIHRvIGRpdmlzb3IKICogICAxMTEgLSBhZGQgLjg3NSB0byBkaXZpc29yCiAqIEJpdHMgMTUgdG8gMCBvZiB0aGUgMTctYml0IGRpdmlzb3IgYXJlIHBsYWNlZCBpbiB0aGUgdXJiIHZhbHVlLiAgQml0IDE2IGlzIAogKiBwbGFjZWQgaW4gYml0IDAgb2YgdGhlIHVyYiBpbmRleC4KICoKICogTm90ZSB0aGF0IHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzcGVjaWFsIGNhc2VzIHRvIHN1cHBvcnQgdGhlIGhpZ2hlc3QgYmF1ZAogKiByYXRlcy4gIElmIHRoZSBjYWxjdWxhdGVkIGRpdmlzb3IgdmFsdWUgaXMgMSwgdGhpcyBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoCiAqIDAuICBBZGRpdGlvbmFsbHkgZm9yIHRoZSBGVDIzMkJNLCBpZiB0aGUgY2FsY3VsYXRlZCBkaXZpc29yIHZhbHVlIGlzIDB4NDAwMQogKiAoMS41KSwgdGhpcyBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIDB4MDAwMSAoMSkgKGJ1dCB0aGlzIGRpdmlzb3IgdmFsdWUgaXMKICogbm90IHN1cHBvcnRlZCBieSB0aGUgRlQ4VTIzMkFNKS4KICovCgp0eXBlZGVmIGVudW0gewoJU0lPID0gMSwKCUZUOFUyMzJBTSA9IDIsCglGVDIzMkJNID0gMywKCUZUMjIzMkMgPSA0LAp9IGZ0ZGlfY2hpcF90eXBlX3Q7Cgp0eXBlZGVmIGVudW0gewogZnRkaV9zaW9fYjMwMCA9IDAsIAogZnRkaV9zaW9fYjYwMCA9IDEsIAogZnRkaV9zaW9fYjEyMDAgPSAyLAogZnRkaV9zaW9fYjI0MDAgPSAzLAogZnRkaV9zaW9fYjQ4MDAgPSA0LAogZnRkaV9zaW9fYjk2MDAgPSA1LAogZnRkaV9zaW9fYjE5MjAwID0gNiwKIGZ0ZGlfc2lvX2IzODQwMCA9IDcsCiBmdGRpX3Npb19iNTc2MDAgPSA4LAogZnRkaV9zaW9fYjExNTIwMCA9IDkKfSBGVERJX1NJT19iYXVkcmF0ZV90IDsKCi8qCiAqIFRoZSBmdGRpXzhVMjMyQU1feHhNSHpfYnl5eSBjb25zdGFudHMgaGF2ZSBiZWVuIHJlbW92ZWQuIFRoZSBlbmNvZGVkIGRpdmlzb3IgdmFsdWVzCiAqIGFyZSBjYWxjdWxhdGVkIGludGVybmFsbHkuCiAqLwoKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNUIEZURElfU0lPX1NFVF9EQVRBCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFIDB4NDAKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfTk9ORSAoMHgwIDw8IDggKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9PREQgKDB4MSA8PCA4ICkKI2RlZmluZSBGVERJX1NJT19TRVRfREFUQV9QQVJJVFlfRVZFTiAoMHgyIDw8IDggKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1BBUklUWV9NQVJLICgweDMgPDwgOCApCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfUEFSSVRZX1NQQUNFICgweDQgPDwgOCApCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzEgKDB4MCA8PCAxMSApCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEFfU1RPUF9CSVRTXzE1ICgweDEgPDwgMTEgKQojZGVmaW5lIEZURElfU0lPX1NFVF9EQVRBX1NUT1BfQklUU18yICgweDIgPDwgMTEgKQojZGVmaW5lIEZURElfU0lPX1NFVF9CUkVBSyAoMHgxIDw8IDE0KQovKiBGVERJX1NJT19TRVRfREFUQSAqLwoKLyoKICogQm1SZXF1ZXN0VHlwZTogIDAxMDAgMDAwMEIgCiAqIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfREFUQQogKiB3VmFsdWU6ICAgICAgICAgRGF0YSBjaGFyYWN0ZXJpc3RpY3MgKHNlZSBiZWxvdykKICogd0luZGV4OiAgICAgICAgIFBvcnQKICogd0xlbmd0aDogICAgICAgIDAKICogRGF0YTogICAgICAgICAgIE5vCiAqCiAqIERhdGEgY2hhcmFjdGVyaXN0aWNzCiAqCiAqICAgQjAuLjcgICBOdW1iZXIgb2YgZGF0YSBiaXRzCiAqICAgQjguLjEwICBQYXJpdHkKICogICAgICAgICAgIDAgPSBOb25lCiAqICAgICAgICAgICAxID0gT2RkCiAqICAgICAgICAgICAyID0gRXZlbgogKiAgICAgICAgICAgMyA9IE1hcmsKICogICAgICAgICAgIDQgPSBTcGFjZQogKiAgIEIxMS4uMTMgU3RvcCBCaXRzCiAqICAgICAgICAgICAwID0gMQogKiAgICAgICAgICAgMSA9IDEuNQogKiAgICAgICAgICAgMiA9IDIKICogICBCMTQKICogICAgICAgICAgIDEgPSBUWCBPTiAoYnJlYWspCiAqICAgICAgICAgICAwID0gVFggT0ZGIChub3JtYWwgc3RhdGUpCiAqICAgQjE1IFJlc2VydmVkCiAqCiAqLwoKCgovKiBGVERJX1NJT19NT0RFTV9DVFJMICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVF9UWVBFIDB4NDAKI2RlZmluZSBGVERJX1NJT19TRVRfTU9ERU1fQ1RSTF9SRVFVRVNUIEZURElfU0lPX01PREVNX0NUUkwKCi8qIAogKiBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMEIKICogYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19NT0RFTV9DVFJMCiAqIHdWYWx1ZTogICAgICAgICAgQ29udHJvbFZhbHVlIChzZWUgYmVsb3cpCiAqIHdJbmRleDogICAgICAgICAgUG9ydAogKiB3TGVuZ3RoOiAgICAgICAgIDAKICogRGF0YTogICAgICAgICAgICBOb25lCiAqCiAqIE5PVEU6IElmIHRoZSBkZXZpY2UgaXMgaW4gUlRTL0NUUyBmbG93IGNvbnRyb2wsIHRoZSBSVFMgc2V0IGJ5IHRoaXMKICogY29tbWFuZCB3aWxsIGJlIElHTk9SRUQgd2l0aG91dCBhbiBlcnJvciBiZWluZyByZXR1cm5lZAogKiBBbHNvIC0geW91IGNhbiBub3Qgc2V0IERUUiBhbmQgUlRTIHdpdGggb25lIGNvbnRyb2wgbWVzc2FnZQogKi8KCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9NQVNLIDB4MQojZGVmaW5lIEZURElfU0lPX1NFVF9EVFJfSElHSCAoIDEgfCAoIEZURElfU0lPX1NFVF9EVFJfTUFTSyAgPDwgOCkpCiNkZWZpbmUgRlRESV9TSU9fU0VUX0RUUl9MT1cgICggMCB8ICggRlRESV9TSU9fU0VUX0RUUl9NQVNLICA8PCA4KSkKI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX01BU0sgMHgyCiNkZWZpbmUgRlRESV9TSU9fU0VUX1JUU19ISUdIICggMiB8ICggRlRESV9TSU9fU0VUX1JUU19NQVNLIDw8IDggKSkKI2RlZmluZSBGVERJX1NJT19TRVRfUlRTX0xPVyAoIDAgfCAoIEZURElfU0lPX1NFVF9SVFNfTUFTSyA8PCA4ICkpCgovKgogKiBDb250cm9sVmFsdWUKICogQjAgICAgRFRSIHN0YXRlCiAqICAgICAgICAgIDAgPSByZXNldAogKiAgICAgICAgICAxID0gc2V0CiAqIEIxICAgIFJUUyBzdGF0ZQogKiAgICAgICAgICAwID0gcmVzZXQKICogICAgICAgICAgMSA9IHNldAogKiBCMi4uNyBSZXNlcnZlZAogKiBCOCAgICBEVFIgc3RhdGUgZW5hYmxlCiAqICAgICAgICAgIDAgPSBpZ25vcmUKICogICAgICAgICAgMSA9IHVzZSBEVFIgc3RhdGUKICogQjkgICAgUlRTIHN0YXRlIGVuYWJsZQogKiAgICAgICAgICAwID0gaWdub3JlCiAqICAgICAgICAgIDEgPSB1c2UgUlRTIHN0YXRlCiAqIEIxMC4uMTUgUmVzZXJ2ZWQKICovCgovKiBGVERJX1NJT19TRVRfRkxPV19DVFJMICovCiNkZWZpbmUgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUgMHg0MAojZGVmaW5lIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVCBGVERJX1NJT19TRVRfRkxPV19DVFJMCiNkZWZpbmUgRlRESV9TSU9fRElTQUJMRV9GTE9XX0NUUkwgMHgwIAojZGVmaW5lIEZURElfU0lPX1JUU19DVFNfSFMgKDB4MSA8PCA4KQojZGVmaW5lIEZURElfU0lPX0RUUl9EU1JfSFMgKDB4MiA8PCA4KQojZGVmaW5lIEZURElfU0lPX1hPTl9YT0ZGX0hTICgweDQgPDwgOCkKLyoKICogICBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwYgogKiAgIGJSZXF1ZXN0OiAgICAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMCiAqICAgd1ZhbHVlOiAgICAgICAgIFhvZmYvWG9uCiAqICAgd0luZGV4OiAgICAgICAgIFByb3RvY29sL1BvcnQgLSBoSW5kZXggaXMgcHJvdG9jbCAvIGxJbmRleCBpcyBwb3J0CiAqICAgd0xlbmd0aDogICAgICAgIDAgCiAqICAgRGF0YTogICAgICAgICAgIE5vbmUKICoKICogaEluZGV4IHByb3RvY29sIGlzOgogKiAgIEIwIE91dHB1dCBoYW5kc2hha2luZyB1c2luZyBSVFMvQ1RTCiAqICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAxID0gZW5hYmxlZAogKiAgIEIxIE91dHB1dCBoYW5kc2hha2luZyB1c2luZyBEVFIvRFNSCiAqICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAxID0gZW5hYmxlZAogKiAgIEIyIFhvbi9Yb2ZmIGhhbmRzaGFraW5nCiAqICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAxID0gZW5hYmxlZAogKgogKiBBIHZhbHVlIG9mIHplcm8gaW4gdGhlIGhJbmRleCBmaWVsZCBkaXNhYmxlcyBoYW5kc2hha2luZwogKgogKiBJZiBYb24vWG9mZiBoYW5kc2hha2luZyBpcyBzcGVjaWZpZWQsIHRoZSBoVmFsdWUgZmllbGQgc2hvdWxkIGNvbnRhaW4gdGhlIFhPRkYgY2hhcmFjdGVyIAogKiBhbmQgdGhlIGxWYWx1ZSBmaWVsZCBjb250YWlucyB0aGUgWE9OIGNoYXJhY3Rlci4KICovICAKIAovKgogKiBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgogKgogKiBTZXQgdGhlIHRpbWVvdXQgaW50ZXJ2YWwuIFRoZSBGVERJIGNvbGxlY3RzIGRhdGEgZnJvbSB0aGUgc2xhdmUKICogZGV2aWNlLCB0cmFuc21pdHRpbmcgaXQgdG8gdGhlIGhvc3Qgd2hlbiBlaXRoZXIgQSkgNjIgYnl0ZXMgYXJlCiAqIHJlY2VpdmVkLCBvciBCKSB0aGUgdGltZW91dCBpbnRlcnZhbCBoYXMgZWxhcHNlZCBhbmQgdGhlIGJ1ZmZlcgogKiBjb250YWlucyBhdCBsZWFzdCAxIGJ5dGUuICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYSBzbWFsbCBudW1iZXIKICogY2FuIGRyYW1hdGljYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggc2VuZAogKiBzbWFsbCBwYWNrZXRzLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNm1zLgogKi8KI2RlZmluZSAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgojZGVmaW5lICBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUgMHhDMAoKLyogCiAqICBCbVJlcXVlc3RUeXBlOiAgIDExMDAgMDAwMGIKICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVIKICogIHdWYWx1ZTogICAgICAgICAgMAogKiAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICB3TGVuZ3RoOiAgICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICAgbGF0ZW5jeSAob24gcmV0dXJuKQogKi8KCi8qIAogKiBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgogKgogKiBTZXQgdGhlIHRpbWVvdXQgaW50ZXJ2YWwuIFRoZSBGVERJIGNvbGxlY3RzIGRhdGEgZnJvbSB0aGUgc2xhdmUKICogZGV2aWNlLCB0cmFuc21pdHRpbmcgaXQgdG8gdGhlIGhvc3Qgd2hlbiBlaXRoZXIgQSkgNjIgYnl0ZXMgYXJlCiAqIHJlY2VpdmVkLCBvciBCKSB0aGUgdGltZW91dCBpbnRlcnZhbCBoYXMgZWxhcHNlZCBhbmQgdGhlIGJ1ZmZlcgogKiBjb250YWlucyBhdCBsZWFzdCAxIGJ5dGUuICBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYSBzbWFsbCBudW1iZXIKICogY2FuIGRyYW1hdGljYWxseSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBhcHBsaWNhdGlvbnMgd2hpY2ggc2VuZAogKiBzbWFsbCBwYWNrZXRzLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNm1zLgogKi8KI2RlZmluZSAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgojZGVmaW5lICBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUl9SRVFVRVNUX1RZUEUgMHg0MAoKLyogCiAqICBCbVJlcXVlc3RUeXBlOiAgIDAxMDAgMDAwMGIKICogIGJSZXF1ZXN0OiAgICAgICAgRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVIKICogIHdWYWx1ZTogICAgICAgICAgTGF0ZW5jeSAobWlsbGlzZWNvbmRzKQogKiAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICB3TGVuZ3RoOiAgICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICAgTm9uZQogKgogKiB3VmFsdWU6CiAqICAgQjAuLjcgICBMYXRlbmN5IHRpbWVyCiAqICAgQjguLjE1ICAwCiAqCiAqLwoKLyoKICogRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIgCiAqCiAqIFNldCB0aGUgc3BlY2lhbCBldmVudCBjaGFyYWN0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29tbXVuaWNhdGlvbnMgcG9ydC4KICogSWYgdGhlIGRldmljZSBzZWVzIHRoaXMgY2hhcmFjdGVyIGl0IHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHRoZQogKiBkYXRhIHJlYWQgc28gZmFyIC0gcmF0aGVyIHRoYW4gd2FpdCA0MG1zIG9yIHVudGlsIDYyIGJ5dGVzIGFyZSByZWFkCiAqIHdoaWNoIGlzIHdoYXQgbm9ybWFsbHkgaGFwcGVucy4KICovCgoKI2RlZmluZSAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVCBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUgojZGVmaW5lICBGVERJX1NJT19TRVRfRVZFTlRfQ0hBUl9SRVFVRVNUX1RZUEUgMHg0MAoKCi8qIAogKiAgQm1SZXF1ZXN0VHlwZTogICAwMTAwIDAwMDBiCiAqICBiUmVxdWVzdDogICAgICAgIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCiAqICB3VmFsdWU6ICAgICAgICAgIEV2ZW50Q2hhcgogKiAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICB3TGVuZ3RoOiAgICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICAgTm9uZQogKgogKiB3VmFsdWU6CiAqICAgQjAuLjcgICBFdmVudCBDaGFyYWN0ZXIKICogICBCOCAgICAgIEV2ZW50IENoYXJhY3RlciBQcm9jZXNzaW5nCiAqICAgICAgICAgICAgIDAgPSBkaXNhYmxlZAogKiAgICAgICAgICAgICAxID0gZW5hYmxlZAogKiAgIEI5Li4xNSAgUmVzZXJ2ZWQKICoKICovCiAgICAgICAgICAKLyogRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIgKi8KCi8qIFNldCB0aGUgcGFyaXR5IGVycm9yIHJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3IgdGhlIHNwZWNpZmllZCBjb21tdW5pY2F0aW9ucyBwb3J0ICovCgovKiAKICogIEJtUmVxdWVzdFR5cGU6ICAwMTAwIDAwMDBiCiAqICBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVIKICogIHdWYWx1ZTogICAgICAgICBFcnJvciBDaGFyCiAqICB3SW5kZXg6ICAgICAgICAgUG9ydAogKiAgd0xlbmd0aDogICAgICAgIDAKICogIERhdGE6ICAgICAgICAgICBOb25lCiAqCiAqRXJyb3IgQ2hhcgogKiAgQjAuLjcgIEVycm9yIENoYXJhY3RlcgogKiAgQjggICAgIEVycm9yIENoYXJhY3RlciBQcm9jZXNzaW5nCiAqICAgICAgICAgICAwID0gZGlzYWJsZWQKICogICAgICAgICAgIDEgPSBlbmFibGVkCiAqICBCOS4uMTUgUmVzZXJ2ZWQKICoKICovCgovKiBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTICovCi8qIFJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBtb2RlbSBzdGF0dXMgcmVnaXN0ZXIgKi8KCiNkZWZpbmUgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUgMHhjMAojZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCiNkZWZpbmUgRlRESV9TSU9fQ1RTX01BU0sgMHgxMAojZGVmaW5lIEZURElfU0lPX0RTUl9NQVNLIDB4MjAKI2RlZmluZSBGVERJX1NJT19SSV9NQVNLICAweDQwCiNkZWZpbmUgRlRESV9TSU9fUkxTRF9NQVNLIDB4ODAKLyogCiAqICAgQm1SZXF1ZXN0VHlwZTogICAxMTAwIDAwMDBiCiAqICAgYlJlcXVlc3Q6ICAgICAgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTCiAqICAgd1ZhbHVlOiAgICAgICAgICB6ZXJvCiAqICAgd0luZGV4OiAgICAgICAgICBQb3J0CiAqICAgd0xlbmd0aDogICAgICAgICAxCiAqICAgRGF0YTogICAgICAgICAgICBTdGF0dXMKICogCiAqIE9uZSBieXRlIG9mIGRhdGEgaXMgcmV0dXJuZWQgCiAqIEIwLi4zIDAKICogQjQgICAgQ1RTCiAqICAgICAgICAgMCA9IGluYWN0aXZlCiAqICAgICAgICAgMSA9IGFjdGl2ZQogKiBCNSAgICBEU1IKICogICAgICAgICAwID0gaW5hY3RpdmUKICogICAgICAgICAxID0gYWN0aXZlCiAqIEI2ICAgIFJpbmcgSW5kaWNhdG9yIChSSSkKICogICAgICAgICAwID0gaW5hY3RpdmUKICogICAgICAgICAxID0gYWN0aXZlCiAqIEI3ICAgIFJlY2VpdmUgTGluZSBTaWduYWwgRGV0ZWN0IChSTFNEKQogKiAgICAgICAgIDAgPSBpbmFjdGl2ZQogKiAgICAgICAgIDEgPSBhY3RpdmUgCiAqLwoKCgovKiBEZXNjcmlwdG9ycyByZXR1cm5lZCBieSB0aGUgZGV2aWNlIAogKiAKICogIERldmljZSBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCVNpemUJVmFsdWUJRGVzY3JpcHRpb24KICogMAliTGVuZ3RoCQkxCTB4MTIJU2l6ZSBvZiBkZXNjcmlwdG9yIGluIGJ5dGVzCiAqIDEJYkRlc2NyaXB0b3JUeXBlCTEJMHgwMQlERVZJQ0UgRGVzY3JpcHRvciBUeXBlCiAqIDIJYmNkVVNCCQkyCTB4MDExMAlVU0IgU3BlYyBSZWxlYXNlIE51bWJlcgogKiA0CWJEZXZpY2VDbGFzcwkxCTB4MDAJQ2xhc3MgQ29kZQogKiA1CWJEZXZpY2VTdWJDbGFzcwkxCTB4MDAJU3ViQ2xhc3MgQ29kZQogKiA2CWJEZXZpY2VQcm90b2NvbAkxCTB4MDAJUHJvdG9jb2wgQ29kZQogKiA3CWJNYXhQYWNrZXRTaXplMCAxCTB4MDgJTWF4aW11bSBwYWNrZXQgc2l6ZSBmb3IgZW5kcG9pbnQgMAogKiA4CWlkVmVuZG9yCTIJMHgwNDAzCVZlbmRvciBJRAogKiAxMAlpZFByb2R1Y3QJMgkweDgzNzIJUHJvZHVjdCBJRCAoRlRESV9TSU9fUElEKQogKiAxMgliY2REZXZpY2UJMgkweDAwMDEJRGV2aWNlIHJlbGVhc2UgbnVtYmVyCiAqIDE0CWlNYW51ZmFjdHVyZXIJMQkweDAxCUluZGV4IG9mIG1hbi4gc3RyaW5nIGRlc2MKICogMTUJaVByb2R1Y3QJMQkweDAyCUluZGV4IG9mIHByb2Qgc3RyaW5nIGRlc2MKICogMTYJaVNlcmlhbE51bWJlcgkxCTB4MDIJSW5kZXggb2Ygc2VyaWFsIG5tciBzdHJpbmcgZGVzYwogKiAxNwliTnVtQ29uZmlndXJhdGlvbnMgMSAgICAweDAxCU51bWJlciBvZiBwb3NzaWJsZSBjb25maWd1cmF0aW9ucwogKiAKICogQ29uZmlndXJhdGlvbiBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAqIDAJYkxlbmd0aAkJCTEJMHgwOQlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwMglDT05GSUdVUkFUSU9OIERlc2NyaXB0b3IgVHlwZQogKiAyCXdUb3RhbExlbmd0aAkJMgkweDAwMjAJVG90YWwgbGVuZ3RoIG9mIGRhdGEKICogNAliTnVtSW50ZXJmYWNlcwkJMQkweDAxCU51bWJlciBvZiBpbnRlcmZhY2VzIHN1cHBvcnRlZAogKiA1CWJDb25maWd1cmF0aW9uVmFsdWUJMQkweDAxCUFyZ3VtZW50IGZvciBTZXRDT25maWd1cmF0aW9uKCkgcmVxCiAqIDYJaUNvbmZpZ3VyYXRpb24JCTEJMHgwMglJbmRleCBvZiBjb25maWcgc3RyaW5nIGRlc2NyaXB0b3IKICogNwlibUF0dHJpYnV0ZXMJCTEJMHgyMAlDb25maWcgY2hhcmFjdGVyaXN0aWNzIFJlbW90ZSBXYWtldXAKICogOAlNYXhQb3dlcgkJMQkweDFFCU1heCBwb3dlciBjb25zdW1wdGlvbgogKiAKICogSW50ZXJmYWNlIERlc2NyaXB0b3IKICogCiAqIE9mZnNldAlGaWVsZAkJCVNpemUJVmFsdWUKICogMAliTGVuZ3RoCQkJMQkweDA5CVNpemUgb2YgZGVzY3JpcHRvciBpbiBieXRlcwogKiAxCWJEZXNjcmlwdG9yVHlwZQkJMQkweDA0CUlOVEVSRkFDRSBEZXNjcmlwdG9yIFR5cGUKICogMgliSW50ZXJmYWNlTnVtYmVyCTEJMHgwMAlOdW1iZXIgb2YgaW50ZXJmYWNlCiAqIDMJYkFsdGVybmF0ZVNldHRpbmcJMQkweDAwCVZhbHVlIHVzZWQgdG8gc2VsZWN0IGFsdGVybmF0ZQogKiA0CWJOdW1FbmRwb2ludHMJCTEJMHgwMglOdW1iZXIgb2YgZW5kcG9pbnRzCiAqIDUJYkludGVyZmFjZUNsYXNzCQkxCTB4RkYJQ2xhc3MgQ29kZQogKiA2CWJJbnRlcmZhY2VTdWJDbGFzcwkxCTB4RkYJU3ViY2xhc3MgQ29kZQogKiA3CWJJbnRlcmZhY2VQcm90b2NvbAkxCTB4RkYJUHJvdG9jb2wgQ29kZQogKiA4CWlJbnRlcmZhY2UJCTEJMHgwMglJbmRleCBvZiBpbnRlcmZhY2Ugc3RyaW5nIGRlc2NyaXB0aW9uCiAqIAogKiBJTiBFbmRwb2ludCBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAqIDAJYkxlbmd0aAkJCTEJMHgwNwlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNQlFTkRQT0lOVCBkZXNjcmlwdG9yIHR5cGUKICogMgliRW5kcG9pbnRBZGRyZXNzCTEJMHg4MglBZGRyZXNzIG9mIGVuZHBvaW50CiAqIDMJYm1BdHRyaWJ1dGVzCQkxCTB4MDIJRW5kcG9pbnQgYXR0cmlidXRlcyAtIEJ1bGsKICogNAliTnVtRW5kcG9pbnRzCQkyCTB4MDA0MAltYXhpbXVtIHBhY2tldCBzaXplCiAqIDUJYkludGVydmFsCQkxCTB4MDAJSW50ZXJ2YWwgZm9yIHBvbGxpbmcgZW5kcG9pbnQKICogCiAqIE9VVCBFbmRwb2ludCBEZXNjcmlwdG9yCiAqIAogKiBPZmZzZXQJRmllbGQJCQlTaXplCVZhbHVlCiAqIDAJYkxlbmd0aAkJCTEJMHgwNwlTaXplIG9mIGRlc2NyaXB0b3IgaW4gYnl0ZXMKICogMQliRGVzY3JpcHRvclR5cGUJCTEJMHgwNQlFTkRQT0lOVCBkZXNjcmlwdG9yIHR5cGUKICogMgliRW5kcG9pbnRBZGRyZXNzCTEJMHgwMglBZGRyZXNzIG9mIGVuZHBvaW50CiAqIDMJYm1BdHRyaWJ1dGVzCQkxCTB4MDIJRW5kcG9pbnQgYXR0cmlidXRlcyAtIEJ1bGsKICogNAliTnVtRW5kcG9pbnRzCQkyCTB4MDA0MAltYXhpbXVtIHBhY2tldCBzaXplCiAqIDUJYkludGVydmFsCQkxCTB4MDAJSW50ZXJ2YWwgZm9yIHBvbGxpbmcgZW5kcG9pbnQKICogICAgIAogKiBEQVRBIEZPUk1BVAogKiAKICogSU4gRW5kcG9pbnQKICogCiAqIFRoZSBkZXZpY2UgcmVzZXJ2ZXMgdGhlIGZpcnN0IHR3byBieXRlcyBvZiBkYXRhIG9uIHRoaXMgZW5kcG9pbnQgdG8gY29udGFpbiB0aGUgY3VycmVudAogKiB2YWx1ZXMgb2YgdGhlIG1vZGVtIGFuZCBsaW5lIHN0YXR1cyByZWdpc3RlcnMuIEluIHRoZSBhYnNlbmNlIG9mIGRhdGEsIHRoZSBkZXZpY2UgCiAqIGdlbmVyYXRlcyBhIG1lc3NhZ2UgY29uc2lzdGluZyBvZiB0aGVzZSB0d28gc3RhdHVzIGJ5dGVzIGV2ZXJ5IDQwIG1zCiAqIAogKiBCeXRlIDA6IE1vZGVtIFN0YXR1cwogKiAKICogT2Zmc2V0CURlc2NyaXB0aW9uCiAqIEIwCVJlc2VydmVkIC0gbXVzdCBiZSAxCiAqIEIxCVJlc2VydmVkIC0gbXVzdCBiZSAwCiAqIEIyCVJlc2VydmVkIC0gbXVzdCBiZSAwCiAqIEIzCVJlc2VydmVkIC0gbXVzdCBiZSAwCiAqIEI0CUNsZWFyIHRvIFNlbmQgKENUUykKICogQjUJRGF0YSBTZXQgUmVhZHkgKERTUikKICogQjYJUmluZyBJbmRpY2F0b3IgKFJJKQogKiBCNwlSZWNlaXZlIExpbmUgU2lnbmFsIERldGVjdCAoUkxTRCkKICogCiAqIEJ5dGUgMTogTGluZSBTdGF0dXMKICogCiAqIE9mZnNldAlEZXNjcmlwdGlvbgogKiBCMAlEYXRhIFJlYWR5IChEUikKICogQjEJT3ZlcnJ1biBFcnJvciAoT0UpCiAqIEIyCVBhcml0eSBFcnJvciAoUEUpCiAqIEIzCUZyYW1pbmcgRXJyb3IgKEZFKQogKiBCNAlCcmVhayBJbnRlcnJ1cHQgKEJJKQogKiBCNQlUcmFuc21pdHRlciBIb2xkaW5nIFJlZ2lzdGVyIChUSFJFKQogKiBCNglUcmFuc21pdHRlciBFbXB0eSAoVEVNVCkKICogQjcJRXJyb3IgaW4gUkNWUiBGSUZPCiAqIAogKi8KI2RlZmluZSBGVERJX1JTMF9DVFMJKDEgPDwgNCkKI2RlZmluZSBGVERJX1JTMF9EU1IJKDEgPDwgNSkKI2RlZmluZSBGVERJX1JTMF9SSQkoMSA8PCA2KQojZGVmaW5lIEZURElfUlMwX1JMU0QJKDEgPDwgNykKCiNkZWZpbmUgRlRESV9SU19EUiAgMQojZGVmaW5lIEZURElfUlNfT0UgKDE8PDEpCiNkZWZpbmUgRlRESV9SU19QRSAoMTw8MikKI2RlZmluZSBGVERJX1JTX0ZFICgxPDwzKQojZGVmaW5lIEZURElfUlNfQkkgKDE8PDQpCiNkZWZpbmUgRlRESV9SU19USFJFICgxPDw1KQojZGVmaW5lIEZURElfUlNfVEVNVCAoMTw8NikKI2RlZmluZSBGVERJX1JTX0ZJRk8gICgxPDw3KQoKLyoKICogT1VUIEVuZHBvaW50CiAqIAogKiBUaGlzIGRldmljZSByZXNlcnZlcyB0aGUgZmlyc3QgYnl0ZXMgb2YgZGF0YSBvbiB0aGlzIGVuZHBvaW50IGNvbnRhaW4gdGhlIGxlbmd0aAogKiBhbmQgcG9ydCBpZGVudGlmaWVyIG9mIHRoZSBtZXNzYWdlLiBGb3IgdGhlIEZUREkgVVNCIFNlcmlhbCBjb252ZXJ0ZXIgdGhlIHBvcnQgCiAqIGlkZW50aWZpZXIgaXMgYWx3YXlzIDEuCiAqIAogKiBCeXRlIDA6IExpbmUgU3RhdHVzCiAqIAogKiBPZmZzZXQJRGVzY3JpcHRpb24KICogQjAJUmVzZXJ2ZWQgLSBtdXN0IGJlIDEKICogQjEJUmVzZXJ2ZWQgLSBtdXN0IGJlIDAKICogQjIuLjcJTGVuZ3RoIG9mIG1lc3NhZ2UgLSAobm90IGluY2x1ZGluZyBCeXRlIDApCiAqIAogKi8KCg==