LyoKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcwogKgogKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqIGV0MTMxMF9waHkuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gdGhlCiAqICAgICAgICAgICAgICAgIFBIWS4KICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoKICogU09GVFdBUkUgTElDRU5TRQogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwogKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KICoKICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwogKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwogKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogICAgZGlzdHJpYnV0aW9uLgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgogKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBEaXNjbGFpbWVyCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAogKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKICogREFNQUdFLgogKgogKi8KCiNpZm5kZWYgX0VUMTMxMF9QSFlfSF8KI2RlZmluZSBfRVQxMzEwX1BIWV9IXwoKI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgoKI2RlZmluZSBUUlVFUEhZX1NVQ0NFU1MgMAojZGVmaW5lIFRSVUVQSFlfRkFJTFVSRSAxCnR5cGVkZWYgdm9pZCAqVFJVRVBIWV9IQU5ETEU7CnR5cGVkZWYgdm9pZCAqVFJVRVBIWV9QTEFURk9STV9IQU5ETEU7CnR5cGVkZWYgdm9pZCAqVFJVRVBIWV9PU0FMX0hBTkRMRTsKCi8qIE1JIFJlZ2lzdGVyIEFkZHJlc3NlcyAqLwojZGVmaW5lIE1JX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgICAgIDAKI2RlZmluZSBNSV9TVEFUVVNfUkVHICAgICAgICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgTUlfUEhZX0lERU5USUZJRVJfMV9SRUcgICAgICAgICAgICAgMgojZGVmaW5lIE1JX1BIWV9JREVOVElGSUVSXzJfUkVHICAgICAgICAgICAgIDMKI2RlZmluZSBNSV9BVVRPTkVHX0FEVkVSVElTRU1FTlRfUkVHICAgICAgICA0CiNkZWZpbmUgTUlfQVVUT05FR19MSU5LX1BBUlRORVJfQUJJTElUWV9SRUcgNQojZGVmaW5lIE1JX0FVVE9ORUdfRVhQQU5TSU9OX1JFRyAgICAgICAgICAgIDYKI2RlZmluZSBNSV9BVVRPTkVHX05FWFRfUEFHRV9UUkFOU01JVF9SRUcgICA3CiNkZWZpbmUgTUlfTElOS19QQVJUTkVSX05FWFRfUEFHRV9SRUcgICAgICAgOAojZGVmaW5lIE1JXzEwMDBCQVNFVF9DT05UUk9MX1JFRyAgICAgICAgICAgIDkKI2RlZmluZSBNSV8xMDAwQkFTRVRfU1RBVFVTX1JFRyAgICAgICAgICAgICAxMAojZGVmaW5lIE1JX1JFU0VSVkVEMTFfUkVHICAgICAgICAgICAgICAgICAgIDExCiNkZWZpbmUgTUlfUkVTRVJWRUQxMl9SRUcgICAgICAgICAgICAgICAgICAgMTIKI2RlZmluZSBNSV9SRVNFUlZFRDEzX1JFRyAgICAgICAgICAgICAgICAgICAxMwojZGVmaW5lIE1JX1JFU0VSVkVEMTRfUkVHICAgICAgICAgICAgICAgICAgIDE0CiNkZWZpbmUgTUlfRVhURU5ERURfU1RBVFVTX1JFRyAgICAgICAgICAgICAgMTUKCi8qIFZNSSBSZWdpc3RlciBBZGRyZXNzZXMgKi8KI2RlZmluZSBWTUlfUkVTRVJWRUQxNl9SRUcgICAgICAgICAgICAgICAgICAxNgojZGVmaW5lIFZNSV9SRVNFUlZFRDE3X1JFRyAgICAgICAgICAgICAgICAgIDE3CiNkZWZpbmUgVk1JX1JFU0VSVkVEMThfUkVHICAgICAgICAgICAgICAgICAgMTgKI2RlZmluZSBWTUlfTE9PUEJBQ0tfQ09OVFJPTF9SRUcgICAgICAgICAgICAxOQojZGVmaW5lIFZNSV9SRVNFUlZFRDIwX1JFRyAgICAgICAgICAgICAgICAgIDIwCiNkZWZpbmUgVk1JX01JX0NPTlRST0xfUkVHICAgICAgICAgICAgICAgICAgMjEKI2RlZmluZSBWTUlfUEhZX0NPTkZJR1VSQVRJT05fUkVHICAgICAgICAgICAyMgojZGVmaW5lIFZNSV9QSFlfQ09OVFJPTF9SRUcgICAgICAgICAgICAgICAgIDIzCiNkZWZpbmUgVk1JX0lOVEVSUlVQVF9NQVNLX1JFRyAgICAgICAgICAgICAgMjQKI2RlZmluZSBWTUlfSU5URVJSVVBUX1NUQVRVU19SRUcgICAgICAgICAgICAyNQojZGVmaW5lIFZNSV9QSFlfU1RBVFVTX1JFRyAgICAgICAgICAgICAgICAgIDI2CiNkZWZpbmUgVk1JX0xFRF9DT05UUk9MXzFfUkVHICAgICAgICAgICAgICAgMjcKI2RlZmluZSBWTUlfTEVEX0NPTlRST0xfMl9SRUcgICAgICAgICAgICAgICAyOAojZGVmaW5lIFZNSV9SRVNFUlZFRDI5X1JFRyAgICAgICAgICAgICAgICAgIDI5CiNkZWZpbmUgVk1JX1JFU0VSVkVEMzBfUkVHICAgICAgICAgICAgICAgICAgMzAKI2RlZmluZSBWTUlfUkVTRVJWRUQzMV9SRUcgICAgICAgICAgICAgICAgICAzMQoKLyogUEhZIFJlZ2lzdGVyIE1hcHBpbmcoTUkpIE1hbmFnZW1lbnQgSW50ZXJmYWNlIFJlZ3MgKi8KdHlwZWRlZiBzdHJ1Y3QgX01JX1JFR1NfdCB7Cgl1OCBibWNyOwkJLy8gQmFzaWMgbW9kZSBjb250cm9sIHJlZyhSZWcgMHgwMCkKCXU4IGJtc3I7CQkvLyBCYXNpYyBtb2RlIHN0YXR1cyByZWcoUmVnIDB4MDEpCgl1OCBpZHIxOwkJLy8gUGh5IGlkZW50aWZpZXIgcmVnIDEoUmVnIDB4MDIpCgl1OCBpZHIyOwkJLy8gUGh5IGlkZW50aWZpZXIgcmVnIDIoUmVnIDB4MDMpCgl1OCBhbmFyOwkJLy8gQXV0by1OZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50KFJlZyAweDA0KQoJdTggYW5scGFyOwkJLy8gQXV0by1OZWdvdGlhdGlvbiBsaW5rIFBhcnRuZXIgQWJpbGl0eShSZWcgMHgwNSkKCXU4IGFuZXI7CQkvLyBBdXRvLU5lZ290aWF0aW9uIGV4cGFuc2lvbiByZWcoUmVnIDB4MDYpCgl1OCBhbm5wdHI7CQkvLyBBdXRvLU5lZ290aWF0aW9uIG5leHQgcGFnZSB0cmFuc21pdCByZWcoUmVnIDB4MDcpCgl1OCBscG5wcjsJCS8vIGxpbmsgcGFydG5lciBuZXh0IHBhZ2UgcmVnKFJlZyAweDA4KQoJdTggZ2NyOwkJLy8gR2lnYWJpdCBiYXNpYyBtb2RlIGNvbnRyb2wgcmVnKFJlZyAweDA5KQoJdTggZ3NyOwkJLy8gR2lnYWJpdCBiYXNpYyBtb2RlIHN0YXR1cyByZWcoUmVnIDB4MEEpCgl1OCBtaV9yZXMxWzRdOwkvLyBGdXR1cmUgdXNlIGJ5IE1JIHdvcmtpbmcgZ3JvdXAoUmVnIDB4MEIgLSAweDBFKQoJdTggZXNyOwkJLy8gRXh0ZW5kZWQgc3RhdHVzIHJlZyhSZWcgMHgwRikKCXU4IG1pX3JlczJbM107CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgxMCAtIDB4MTIpCgl1OCBsb29wX2N0bDsJLy8gTG9vcGJhY2sgQ29udHJvbCBSZWcoUmVnIDB4MTMpCgl1OCBtaV9yZXMzOwkvLyBGdXR1cmUgdXNlIGJ5IE1JIHdvcmtpbmcgZ3JvdXAoUmVnIDB4MTQpCgl1OCBtY3I7CQkvLyBNSSBDb250cm9sIFJlZyhSZWcgMHgxNSkKCXU4IHBjcjsJCS8vIENvbmZpZ3VyYXRpb24gUmVnKFJlZyAweDE2KQoJdTggcGh5X2N0bDsJLy8gUEhZIENvbnRyb2wgUmVnKFJlZyAweDE3KQoJdTggaW1yOwkJLy8gSW50ZXJydXB0IE1hc2sgUmVnKFJlZyAweDE4KQoJdTggaXNyOwkJLy8gSW50ZXJydXB0IFN0YXR1cyBSZWcoUmVnIDB4MTkpCgl1OCBwc3I7CQkvLyBQSFkgU3RhdHVzIFJlZyhSZWcgMHgxQSkKCXU4IGxjcjE7CQkvLyBMRUQgQ29udHJvbCAxIFJlZyhSZWcgMHgxQikKCXU4IGxjcjI7CQkvLyBMRUQgQ29udHJvbCAyIFJlZyhSZWcgMHgxQykKCXU4IG1pX3JlczRbM107CS8vIEZ1dHVyZSB1c2UgYnkgTUkgd29ya2luZyBncm91cChSZWcgMHgxRCAtIDB4MUYpCn0gTUlfUkVHU190LCAqUE1JX1JFR1NfdDsKCi8qIE1JIFJlZ2lzdGVyIDA6IEJhc2ljIG1vZGUgY29udHJvbCByZWdpc3RlciAqLwp0eXBlZGVmIHVuaW9uIF9NSV9CTUNSX3QgewoJdTE2IHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MTYgcmVzZXQ6MTsJCS8vIGJpdCAxNQoJCXUxNiBsb29wYmFjazoxOwkJLy8gYml0IDE0CgkJdTE2IHNwZWVkX3NlbDoxOwkJLy8gYml0IDEzCgkJdTE2IGVuYWJsZV9hdXRvbmVnOjE7CS8vIGJpdCAxMgoJCXUxNiBwb3dlcl9kb3duOjE7CQkvLyBiaXQgMTEKCQl1MTYgaXNvbGF0ZToxOwkJLy8gYml0IDEwCgkJdTE2IHJlc3RhcnRfYXV0b25lZzoxOwkvLyBiaXQgOQoJCXUxNiBkdXBsZXhfbW9kZToxOwkJLy8gYml0IDgKCQl1MTYgY29sX3Rlc3Q6MTsJCS8vIGJpdCA3CgkJdTE2IHNwZWVkXzEwMDBfc2VsOjE7CS8vIGJpdCA2CgkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMC01CiNlbHNlCgkJdTE2IHJlczE6NjsJCS8vIGJpdHMgMC01CgkJdTE2IHNwZWVkXzEwMDBfc2VsOjE7CS8vIGJpdCA2CgkJdTE2IGNvbF90ZXN0OjE7CQkvLyBiaXQgNwoJCXUxNiBkdXBsZXhfbW9kZToxOwkJLy8gYml0IDgKCQl1MTYgcmVzdGFydF9hdXRvbmVnOjE7CS8vIGJpdCA5CgkJdTE2IGlzb2xhdGU6MTsJCS8vIGJpdCAxMAoJCXUxNiBwb3dlcl9kb3duOjE7CQkvLyBiaXQgMTEKCQl1MTYgZW5hYmxlX2F1dG9uZWc6MTsJLy8gYml0IDEyCgkJdTE2IHNwZWVkX3NlbDoxOwkJLy8gYml0IDEzCgkJdTE2IGxvb3BiYWNrOjE7CQkvLyBiaXQgMTQKCQl1MTYgcmVzZXQ6MTsJCS8vIGJpdCAxNQojZW5kaWYKCX0gYml0czsKfSBNSV9CTUNSX3QsICpQTUlfQk1DUl90OwoKLyogTUkgUmVnaXN0ZXIgMTogIEJhc2ljIG1vZGUgc3RhdHVzIHJlZ2lzdGVyICovCnR5cGVkZWYgdW5pb24gX01JX0JNU1JfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiBsaW5rXzEwMFQ0OjE7CQkvLyBiaXQgMTUKCQl1MTYgbGlua18xMDBmZHg6MTsJCS8vIGJpdCAxNAoJCXUxNiBsaW5rXzEwMGhkeDoxOwkJLy8gYml0IDEzCgkJdTE2IGxpbmtfMTBmZHg6MTsJCS8vIGJpdCAxMgoJCXUxNiBsaW5rXzEwaGR4OjE7CQkvLyBiaXQgMTEKCQl1MTYgbGlua18xMDBUMmZkeDoxOwkvLyBiaXQgMTAKCQl1MTYgbGlua18xMDBUMmhkeDoxOwkvLyBiaXQgOQoJCXUxNiBleHRlbmRfc3RhdHVzOjE7CS8vIGJpdCA4CgkJdTE2IHJlczE6MTsJCS8vIGJpdCA3CgkJdTE2IHByZWFtYmxlX3N1cHJlc3M6MTsJLy8gYml0IDYKCQl1MTYgYXV0b19uZWdfY29tcGxldGU6MTsJLy8gYml0IDUKCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCA0CgkJdTE2IGF1dG9fbmVnX2FibGU6MTsJLy8gYml0IDMKCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCgkJdTE2IGphYmJlcl9kZXRlY3Q6MTsJLy8gYml0IDEKCQl1MTYgZXh0X2NhcDoxOwkJLy8gYml0IDAKI2Vsc2UKCQl1MTYgZXh0X2NhcDoxOwkJLy8gYml0IDAKCQl1MTYgamFiYmVyX2RldGVjdDoxOwkvLyBiaXQgMQoJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKCQl1MTYgYXV0b19uZWdfYWJsZToxOwkvLyBiaXQgMwoJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDQKCQl1MTYgYXV0b19uZWdfY29tcGxldGU6MTsJLy8gYml0IDUKCQl1MTYgcHJlYW1ibGVfc3VwcmVzczoxOwkvLyBiaXQgNgoJCXUxNiByZXMxOjE7CQkvLyBiaXQgNwoJCXUxNiBleHRlbmRfc3RhdHVzOjE7CS8vIGJpdCA4CgkJdTE2IGxpbmtfMTAwVDJoZHg6MTsJLy8gYml0IDkKCQl1MTYgbGlua18xMDBUMmZkeDoxOwkvLyBiaXQgMTAKCQl1MTYgbGlua18xMGhkeDoxOwkJLy8gYml0IDExCgkJdTE2IGxpbmtfMTBmZHg6MTsJCS8vIGJpdCAxMgoJCXUxNiBsaW5rXzEwMGhkeDoxOwkJLy8gYml0IDEzCgkJdTE2IGxpbmtfMTAwZmR4OjE7CQkvLyBiaXQgMTQKCQl1MTYgbGlua18xMDBUNDoxOwkJLy8gYml0IDE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX0JNU1JfdCwgKlBNSV9CTVNSX3Q7CgovKiBNSSBSZWdpc3RlciAyOiBQaHlzaWNhbCBJZGVudGlmaWVyIDEgKi8KdHlwZWRlZiB1bmlvbiBfTUlfSURSMV90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CgkJdTE2IGllZWVfYWRkcmVzczoxNjsJLy8gMHgwMjgyIGRlZmF1bHQoYml0cyAwLTE1KQoJfSBiaXRzOwp9IE1JX0lEUjFfdCwgKlBNSV9JRFIxX3Q7CgovKiBNSSBSZWdpc3RlciAzOiBQaHlzaWNhbCBJZGVudGlmaWVyIDIgKi8KdHlwZWRlZiB1bmlvbiBfTUlfSURSMl90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IGllZWVfYWRkcmVzczo2OwkvLyAxMTExMDAgZGVmYXVsdChiaXRzIDEwLTE1KQoJCXUxNiBtb2RlbF9ubzo2OwkJLy8gMDAwMDAxIGRlZmF1bHQoYml0cyA0LTkpCgkJdTE2IHJldl9ubzo0OwkJLy8gMDAxMCAgIGRlZmF1bHQoYml0cyAwLTMpCiNlbHNlCgkJdTE2IHJldl9ubzo0OwkJLy8gMDAxMCAgIGRlZmF1bHQoYml0cyAwLTMpCgkJdTE2IG1vZGVsX25vOjY7CQkvLyAwMDAwMDEgZGVmYXVsdChiaXRzIDQtOSkKCQl1MTYgaWVlZV9hZGRyZXNzOjY7CS8vIDExMTEwMCBkZWZhdWx0KGJpdHMgMTAtMTUpCiNlbmRpZgoJfSBiaXRzOwp9IE1JX0lEUjJfdCwgKlBNSV9JRFIyX3Q7CgovKiBNSSBSZWdpc3RlciA0OiBBdXRvLW5lZ290aWF0aW9uIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIgKi8KdHlwZWRlZiB1bmlvbiBfTUlfQU5BUl90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IG5wX2luZGljYXRpb246MTsJLy8gYml0IDE1CgkJdTE2IHJlczI6MTsJCS8vIGJpdCAxNAoJCXUxNiByZW1vdGVfZmF1bHQ6MTsJLy8gYml0IDEzCgkJdTE2IHJlczE6MTsJCS8vIGJpdCAxMgoJCXUxNiBjYXBfYXNtcGF1c2U6MTsJLy8gYml0IDExCgkJdTE2IGNhcF9wYXVzZToxOwkJLy8gYml0IDEwCgkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKCQl1MTYgY2FwXzEwMGZkeDoxOwkJLy8gYml0IDgKCQl1MTYgY2FwXzEwMGhkeDoxOwkJLy8gYml0IDcKCQl1MTYgY2FwXzEwZmR4OjE7CQkvLyBiaXQgNgoJCXUxNiBjYXBfMTBoZHg6MTsJCS8vIGJpdCA1CgkJdTE2IHNlbGVjdG9yOjU7CQkvLyBiaXRzIDAtNAojZWxzZQoJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKCQl1MTYgY2FwXzEwaGR4OjE7CQkvLyBiaXQgNQoJCXUxNiBjYXBfMTBmZHg6MTsJCS8vIGJpdCA2CgkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CgkJdTE2IGNhcF8xMDBmZHg6MTsJCS8vIGJpdCA4CgkJdTE2IGNhcF8xMDBUNDoxOwkJLy8gYml0IDkKCQl1MTYgY2FwX3BhdXNlOjE7CQkvLyBiaXQgMTAKCQl1MTYgY2FwX2FzbXBhdXNlOjE7CS8vIGJpdCAxMQoJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTIKCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMwoJCXUxNiByZXMyOjE7CQkvLyBiaXQgMTQKCQl1MTYgbnBfaW5kaWNhdGlvbjoxOwkvLyBiaXQgMTUKI2VuZGlmCgl9IGJpdHM7Cn0gTUlfQU5BUl90LCAqUE1JX0FOQVJfdDsKCi8qIE1JIFJlZ2lzdGVyIDU6IEF1dG8tbmVnb3RpYXRpb24gbGluayBwYXJ0bmVyIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXIgKi8KdHlwZWRlZiBzdHJ1Y3QgX01JX0FOTFBBUl90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IG5wX2luZGljYXRpb246MTsJLy8gYml0IDE1CgkJdTE2IGFja25vd2xlZGdlOjE7CQkvLyBiaXQgMTQKCQl1MTYgcmVtb3RlX2ZhdWx0OjE7CS8vIGJpdCAxMwoJCXUxNiByZXMxOjE7CQkvLyBiaXQgMTIKCQl1MTYgY2FwX2FzbXBhdXNlOjE7CS8vIGJpdCAxMQoJCXUxNiBjYXBfcGF1c2U6MTsJCS8vIGJpdCAxMAoJCXUxNiBjYXBfMTAwVDQ6MTsJCS8vIGJpdCA5CgkJdTE2IGNhcF8xMDBmZHg6MTsJCS8vIGJpdCA4CgkJdTE2IGNhcF8xMDBoZHg6MTsJCS8vIGJpdCA3CgkJdTE2IGNhcF8xMGZkeDoxOwkJLy8gYml0IDYKCQl1MTYgY2FwXzEwaGR4OjE7CQkvLyBiaXQgNQoJCXUxNiBzZWxlY3Rvcjo1OwkJLy8gYml0cyAwLTQKI2Vsc2UKCQl1MTYgc2VsZWN0b3I6NTsJCS8vIGJpdHMgMC00CgkJdTE2IGNhcF8xMGhkeDoxOwkJLy8gYml0IDUKCQl1MTYgY2FwXzEwZmR4OjE7CQkvLyBiaXQgNgoJCXUxNiBjYXBfMTAwaGR4OjE7CQkvLyBiaXQgNwoJCXUxNiBjYXBfMTAwZmR4OjE7CQkvLyBiaXQgOAoJCXUxNiBjYXBfMTAwVDQ6MTsJCS8vIGJpdCA5CgkJdTE2IGNhcF9wYXVzZToxOwkJLy8gYml0IDEwCgkJdTE2IGNhcF9hc21wYXVzZToxOwkvLyBiaXQgMTEKCQl1MTYgcmVzMToxOwkJLy8gYml0IDEyCgkJdTE2IHJlbW90ZV9mYXVsdDoxOwkvLyBiaXQgMTMKCQl1MTYgYWNrbm93bGVkZ2U6MTsJCS8vIGJpdCAxNAoJCXUxNiBucF9pbmRpY2F0aW9uOjE7CS8vIGJpdCAxNQojZW5kaWYKCX0gYml0czsKfSBNSV9BTkxQQVJfdCwgKlBNSV9BTkxQQVJfdDsKCi8qIE1JIFJlZ2lzdGVyIDY6IEF1dG8tbmVnb3RpYXRpb24gZXhwYW5zaW9uIHJlZ2lzdGVyICovCnR5cGVkZWYgdW5pb24gX01JX0FORVJfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiByZXM6MTE7CS8vIGJpdHMgNS0xNQoJCXUxNiBwZGY6MTsJCS8vIGJpdCA0CgkJdTE2IGxwX25wX2FibGU6MTsJLy8gYml0IDMKCQl1MTYgbnBfYWJsZToxOwkvLyBiaXQgMgoJCXUxNiBwYWdlX3J4OjE7CS8vIGJpdCAxCgkJdTE2IGxwX2FuX2FibGU6MTsJLy8gYml0IDAKI2Vsc2UKCQl1MTYgbHBfYW5fYWJsZToxOwkvLyBiaXQgMAoJCXUxNiBwYWdlX3J4OjE7CS8vIGJpdCAxCgkJdTE2IG5wX2FibGU6MTsJLy8gYml0IDIKCQl1MTYgbHBfbnBfYWJsZToxOwkvLyBiaXQgMwoJCXUxNiBwZGY6MTsJCS8vIGJpdCA0CgkJdTE2IHJlczoxMTsJLy8gYml0cyA1LTE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX0FORVJfdCwgKlBNSV9BTkVSX3Q7CgovKiBNSSBSZWdpc3RlciA3OiBBdXRvLW5lZ290aWF0aW9uIG5leHQgcGFnZSB0cmFuc21pdCByZWcoMHgwNykgKi8KdHlwZWRlZiB1bmlvbiBfTUlfQU5OUFRSX3QgewoJdTE2IHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MTYgbnA6MTsJCS8vIGJpdCAxNQoJCXUxNiByZXMxOjE7CS8vIGJpdCAxNAoJCXUxNiBtc2dfcGFnZToxOwkvLyBiaXQgMTMKCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKCQl1MTYgdG9nZ2xlOjE7CS8vIGJpdCAxMQoJCXUxNiBtc2c6MTE7CS8vIGJpdHMgMC0xMAojZWxzZQoJCXUxNiBtc2c6MTE7CS8vIGJpdHMgMC0xMAoJCXUxNiB0b2dnbGU6MTsJLy8gYml0IDExCgkJdTE2IGFjazI6MTsJLy8gYml0IDEyCgkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMwoJCXUxNiByZXMxOjE7CS8vIGJpdCAxNAoJCXUxNiBucDoxOwkJLy8gYml0IDE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX0FOTlBUUl90LCAqUE1JX0FOTlBUUl90OwoKLyogTUkgUmVnaXN0ZXIgODogTGluayBQYXJ0bmVyIE5leHQgUGFnZSBSZWcoMHgwOCkgKi8KdHlwZWRlZiB1bmlvbiBfTUlfTFBOUFJfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiBucDoxOwkJLy8gYml0IDE1CgkJdTE2IGFjazoxOwkJLy8gYml0IDE0CgkJdTE2IG1zZ19wYWdlOjE7CS8vIGJpdCAxMwoJCXUxNiBhY2syOjE7CS8vIGJpdCAxMgoJCXUxNiB0b2dnbGU6MTsJLy8gYml0IDExCgkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCiNlbHNlCgkJdTE2IG1zZzoxMTsJLy8gYml0cyAwLTEwCgkJdTE2IHRvZ2dsZToxOwkvLyBiaXQgMTEKCQl1MTYgYWNrMjoxOwkvLyBiaXQgMTIKCQl1MTYgbXNnX3BhZ2U6MTsJLy8gYml0IDEzCgkJdTE2IGFjazoxOwkJLy8gYml0IDE0CgkJdTE2IG5wOjE7CQkvLyBiaXQgMTUKI2VuZGlmCgl9IGJpdHM7Cn0gTUlfTFBOUFJfdCwgKlBNSV9MUE5QUl90OwoKLyogTUkgUmVnaXN0ZXIgOTogMTAwMEJhc2VUIENvbnRyb2wgUmVnKDB4MDkpICovCnR5cGVkZWYgdW5pb24gX01JX0dDUl90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IHRlc3RfbW9kZTozOwkJLy8gYml0cyAxMy0xNQoJCXUxNiBtc19jb25maWdfZW46MTsJLy8gYml0IDEyCgkJdTE2IG1zX3ZhbHVlOjE7CQkvLyBiaXQgMTEKCQl1MTYgcG9ydF90eXBlOjE7CQkvLyBiaXQgMTAKCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCA5CgkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgOAoJCXUxNiByZXM6ODsJCQkvLyBiaXQgMC03CiNlbHNlCgkJdTE2IHJlczo4OwkJCS8vIGJpdCAwLTcKCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCA4CgkJdTE2IGxpbmtfMTAwMGZkeDoxOwkvLyBiaXQgOQoJCXUxNiBwb3J0X3R5cGU6MTsJCS8vIGJpdCAxMAoJCXUxNiBtc192YWx1ZToxOwkJLy8gYml0IDExCgkJdTE2IG1zX2NvbmZpZ19lbjoxOwkvLyBiaXQgMTIKCQl1MTYgdGVzdF9tb2RlOjM7CQkvLyBiaXRzIDEzLTE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX0dDUl90LCAqUE1JX0dDUl90OwoKLyogTUkgUmVnaXN0ZXIgMTA6IDEwMDBCYXNlVCBTdGF0dXMgUmVnKDB4MEEpICovCnR5cGVkZWYgdW5pb24gX01JX0dTUl90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IG1zX2NvbmZpZ19mYXVsdDoxOwkvLyBiaXQgMTUKCQl1MTYgbXNfcmVzb2x2ZToxOwkJLy8gYml0IDE0CgkJdTE2IGxvY2FsX3J4X3N0YXR1czoxOwkvLyBiaXQgMTMKCQl1MTYgcmVtb3RlX3J4X3N0YXR1czoxOwkvLyBiaXQgMTIKCQl1MTYgbGlua18xMDAwZmR4OjE7CS8vIGJpdCAxMQoJCXUxNiBsaW5rXzEwMDBoZHg6MTsJLy8gYml0IDEwCgkJdTE2IHJlczoyOwkJCS8vIGJpdHMgOC05CgkJdTE2IGlkbGVfZXJyX2NudDo4OwkvLyBiaXRzIDAtNwojZWxzZQoJCXUxNiBpZGxlX2Vycl9jbnQ6ODsJLy8gYml0cyAwLTcKCQl1MTYgcmVzOjI7CQkJLy8gYml0cyA4LTkKCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCAxMAoJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDExCgkJdTE2IHJlbW90ZV9yeF9zdGF0dXM6MTsJLy8gYml0IDEyCgkJdTE2IGxvY2FsX3J4X3N0YXR1czoxOwkvLyBiaXQgMTMKCQl1MTYgbXNfcmVzb2x2ZToxOwkJLy8gYml0IDE0CgkJdTE2IG1zX2NvbmZpZ19mYXVsdDoxOwkvLyBiaXQgMTUKI2VuZGlmCgl9IGJpdHM7Cn0gTUlfR1NSX3QsICpQTUlfR1NSX3Q7CgovKiBNSSBSZWdpc3RlciAxMSAtIDE0OiBSZXNlcnZlZCBSZWdzKDB4MEIgLSAweDBFKSAqLwp0eXBlZGVmIHVuaW9uIF9NSV9SRVNfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiByZXMxNToxOwkvLyBiaXQgMTUKCQl1MTYgcmVzMTQ6MTsJLy8gYml0IDE0CgkJdTE2IHJlczEzOjE7CS8vIGJpdCAxMwoJCXUxNiByZXMxMjoxOwkvLyBiaXQgMTIKCQl1MTYgcmVzMTE6MTsJLy8gYml0IDExCgkJdTE2IHJlczEwOjE7CS8vIGJpdCAxMAoJCXUxNiByZXM5OjE7CS8vIGJpdCA5CgkJdTE2IHJlczg6MTsJLy8gYml0IDgKCQl1MTYgcmVzNzoxOwkvLyBiaXQgNwoJCXUxNiByZXM2OjE7CS8vIGJpdCA2CgkJdTE2IHJlczU6MTsJLy8gYml0IDUKCQl1MTYgcmVzNDoxOwkvLyBiaXQgNAoJCXUxNiByZXMzOjE7CS8vIGJpdCAzCgkJdTE2IHJlczI6MTsJLy8gYml0IDIKCQl1MTYgcmVzMToxOwkvLyBiaXQgMQoJCXUxNiByZXMwOjE7CS8vIGJpdCAwCiNlbHNlCgkJdTE2IHJlczA6MTsJLy8gYml0IDAKCQl1MTYgcmVzMToxOwkvLyBiaXQgMQoJCXUxNiByZXMyOjE7CS8vIGJpdCAyCgkJdTE2IHJlczM6MTsJLy8gYml0IDMKCQl1MTYgcmVzNDoxOwkvLyBiaXQgNAoJCXUxNiByZXM1OjE7CS8vIGJpdCA1CgkJdTE2IHJlczY6MTsJLy8gYml0IDYKCQl1MTYgcmVzNzoxOwkvLyBiaXQgNwoJCXUxNiByZXM4OjE7CS8vIGJpdCA4CgkJdTE2IHJlczk6MTsJLy8gYml0IDkKCQl1MTYgcmVzMTA6MTsJLy8gYml0IDEwCgkJdTE2IHJlczExOjE7CS8vIGJpdCAxMQoJCXUxNiByZXMxMjoxOwkvLyBiaXQgMTIKCQl1MTYgcmVzMTM6MTsJLy8gYml0IDEzCgkJdTE2IHJlczE0OjE7CS8vIGJpdCAxNAoJCXUxNiByZXMxNToxOwkvLyBiaXQgMTUKI2VuZGlmCgl9IGJpdHM7Cn0gTUlfUkVTX3QsICpQTUlfUkVTX3Q7CgovKiBNSSBSZWdpc3RlciAxNTogRXh0ZW5kZWQgc3RhdHVzIFJlZygweDBGKSAqLwp0eXBlZGVmIHVuaW9uIF9NSV9FU1JfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiBsaW5rXzEwMDBYZmR4OjE7CS8vIGJpdCAxNQoJCXUxNiBsaW5rXzEwMDBYaGR4OjE7CS8vIGJpdCAxNAoJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDEzCgkJdTE2IGxpbmtfMTAwMGhkeDoxOwkvLyBiaXQgMTIKCQl1MTYgcmVzOjEyOwkJLy8gYml0IDAtMTEKI2Vsc2UKCQl1MTYgcmVzOjEyOwkJLy8gYml0IDAtMTEKCQl1MTYgbGlua18xMDAwaGR4OjE7CS8vIGJpdCAxMgoJCXUxNiBsaW5rXzEwMDBmZHg6MTsJLy8gYml0IDEzCgkJdTE2IGxpbmtfMTAwMFhoZHg6MTsJLy8gYml0IDE0CgkJdTE2IGxpbmtfMTAwMFhmZHg6MTsJLy8gYml0IDE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX0VTUl90LCAqUE1JX0VTUl90OwoKLyogTUkgUmVnaXN0ZXIgMTYgLSAxODogUmVzZXJ2ZWQgUmVnKDB4MTAtMHgxMikgKi8KCi8qIE1JIFJlZ2lzdGVyIDE5OiBMb29wYmFjayBDb250cm9sIFJlZygweDEzKSAqLwp0eXBlZGVmIHVuaW9uIF9NSV9MQ1JfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiBtaWlfZW46MTsJCS8vIGJpdCAxNQoJCXUxNiBwY3NfZW46MTsJCS8vIGJpdCAxNAoJCXUxNiBwbWRfZW46MTsJCS8vIGJpdCAxMwoJCXUxNiBhbGxfZGlnaXRhbF9lbjoxOwkvLyBiaXQgMTIKCQl1MTYgcmVwbGljYV9lbjoxOwkJLy8gYml0IDExCgkJdTE2IGxpbmVfZHJpdmVyX2VuOjE7CS8vIGJpdCAxMAoJCXUxNiByZXM6MTA7CQkvLyBiaXQgMC05CiNlbHNlCgkJdTE2IHJlczoxMDsJCS8vIGJpdCAwLTkKCQl1MTYgbGluZV9kcml2ZXJfZW46MTsJLy8gYml0IDEwCgkJdTE2IHJlcGxpY2FfZW46MTsJCS8vIGJpdCAxMQoJCXUxNiBhbGxfZGlnaXRhbF9lbjoxOwkvLyBiaXQgMTIKCQl1MTYgcG1kX2VuOjE7CQkvLyBiaXQgMTMKCQl1MTYgcGNzX2VuOjE7CQkvLyBiaXQgMTQKCQl1MTYgbWlpX2VuOjE7CQkvLyBiaXQgMTUKI2VuZGlmCgl9IGJpdHM7Cn0gTUlfTENSX3QsICpQTUlfTENSX3Q7CgovKiBNSSBSZWdpc3RlciAyMDogUmVzZXJ2ZWQgUmVnKDB4MTQpICovCgovKiBNSSBSZWdpc3RlciAyMTogTWFuYWdlbWVudCBJbnRlcmZhY2UgQ29udHJvbCBSZWcoMHgxNSkgKi8KdHlwZWRlZiB1bmlvbiBfTUlfTUlDUl90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IHJlczE6NTsJCS8vIGJpdHMgMTEtMTUKCQl1MTYgbWlfZXJyb3JfY291bnQ6NzsJLy8gYml0cyA0LTEwCgkJdTE2IHJlczI6MTsJCS8vIGJpdCAzCgkJdTE2IGlnbm9yZV8xMGdfZnI6MTsJLy8gYml0IDIKCQl1MTYgcmVzMzoxOwkJLy8gYml0IDEKCQl1MTYgcHJlYW1ibGVfc3VwcmVzc19lbjoxOwkvLyBiaXQgMAojZWxzZQoJCXUxNiBwcmVhbWJsZV9zdXByZXNzX2VuOjE7CS8vIGJpdCAwCgkJdTE2IHJlczM6MTsJCS8vIGJpdCAxCgkJdTE2IGlnbm9yZV8xMGdfZnI6MTsJLy8gYml0IDIKCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKCQl1MTYgbWlfZXJyb3JfY291bnQ6NzsJLy8gYml0cyA0LTEwCgkJdTE2IHJlczE6NTsJCS8vIGJpdHMgMTEtMTUKI2VuZGlmCgl9IGJpdHM7Cn0gTUlfTUlDUl90LCAqUE1JX01JQ1JfdDsKCi8qIE1JIFJlZ2lzdGVyIDIyOiBQSFkgQ29uZmlndXJhdGlvbiBSZWcoMHgxNikgKi8KdHlwZWRlZiB1bmlvbiBfTUlfUEhZX0NPTkZJR190IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IGNyc190eF9lbjoxOwkJLy8gYml0IDE1CgkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNAoJCXUxNiB0eF9maWZvX2RlcHRoOjI7CS8vIGJpdHMgMTItMTMKCQl1MTYgc3BlZWRfZG93bnNoaWZ0OjI7CS8vIGJpdHMgMTAtMTEKCQl1MTYgcGJpX2RldGVjdDoxOwkJLy8gYml0IDkKCQl1MTYgdGJpX3JhdGU6MTsJCS8vIGJpdCA4CgkJdTE2IGFsdGVybmF0ZV9ucDoxOwkvLyBiaXQgNwoJCXUxNiBncm91cF9tZGlvX2VuOjE7CS8vIGJpdCA2CgkJdTE2IHR4X2Nsb2NrX2VuOjE7CQkvLyBiaXQgNQoJCXUxNiBzeXNfY2xvY2tfZW46MTsJLy8gYml0IDQKCQl1MTYgcmVzMjoxOwkJLy8gYml0IDMKCQl1MTYgbWFjX2lmX21vZGU6MzsJCS8vIGJpdHMgMC0yCiNlbHNlCgkJdTE2IG1hY19pZl9tb2RlOjM7CQkvLyBiaXRzIDAtMgoJCXUxNiByZXMyOjE7CQkvLyBiaXQgMwoJCXUxNiBzeXNfY2xvY2tfZW46MTsJLy8gYml0IDQKCQl1MTYgdHhfY2xvY2tfZW46MTsJCS8vIGJpdCA1CgkJdTE2IGdyb3VwX21kaW9fZW46MTsJLy8gYml0IDYKCQl1MTYgYWx0ZXJuYXRlX25wOjE7CS8vIGJpdCA3CgkJdTE2IHRiaV9yYXRlOjE7CQkvLyBiaXQgOAoJCXUxNiBwYmlfZGV0ZWN0OjE7CQkvLyBiaXQgOQoJCXUxNiBzcGVlZF9kb3duc2hpZnQ6MjsJLy8gYml0cyAxMC0xMQoJCXUxNiB0eF9maWZvX2RlcHRoOjI7CS8vIGJpdHMgMTItMTMKCQl1MTYgcmVzMToxOwkJLy8gYml0IDE0CgkJdTE2IGNyc190eF9lbjoxOwkJLy8gYml0IDE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX1BIWV9DT05GSUdfdCwgKlBNSV9QSFlfQ09ORklHX3Q7CgovKiBNSSBSZWdpc3RlciAyMzogUEhZIENPTlRST0wgUmVnKDB4MTcpICovCnR5cGVkZWYgdW5pb24gX01JX1BIWV9DT05UUk9MX3QgewoJdTE2IHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MTYgcmVzMToxOwkJLy8gYml0IDE1CgkJdTE2IHRkcl9lbjoxOwkJLy8gYml0IDE0CgkJdTE2IHJlczI6MTsJCS8vIGJpdCAxMwoJCXUxNiBkb3duc2hpZnRfYXR0ZW1wdHM6MjsJLy8gYml0cyAxMS0xMgoJCXUxNiByZXMzOjU7CQkvLyBiaXQgNi0xMAoJCXUxNiBqYWJiZXJfMTBiYXNlVDoxOwkvLyBiaXQgNQoJCXUxNiBzcWVfMTBiYXNlVDoxOwkJLy8gYml0IDQKCQl1MTYgdHBfbG9vcGJhY2tfMTBiYXNlVDoxOwkvLyBiaXQgMwoJCXUxNiBwcmVhbWJsZV9nZW5fZW46MTsJLy8gYml0IDIKCQl1MTYgcmVzNDoxOwkJLy8gYml0IDEKCQl1MTYgZm9yY2VfaW50OjE7CQkvLyBiaXQgMAojZWxzZQoJCXUxNiBmb3JjZV9pbnQ6MTsJCS8vIGJpdCAwCgkJdTE2IHJlczQ6MTsJCS8vIGJpdCAxCgkJdTE2IHByZWFtYmxlX2dlbl9lbjoxOwkvLyBiaXQgMgoJCXUxNiB0cF9sb29wYmFja18xMGJhc2VUOjE7CS8vIGJpdCAzCgkJdTE2IHNxZV8xMGJhc2VUOjE7CQkvLyBiaXQgNAoJCXUxNiBqYWJiZXJfMTBiYXNlVDoxOwkvLyBiaXQgNQoJCXUxNiByZXMzOjU7CQkvLyBiaXQgNi0xMAoJCXUxNiBkb3duc2hpZnRfYXR0ZW1wdHM6MjsJLy8gYml0cyAxMS0xMgoJCXUxNiByZXMyOjE7CQkvLyBiaXQgMTMKCQl1MTYgdGRyX2VuOjE7CQkvLyBiaXQgMTQKCQl1MTYgcmVzMToxOwkJLy8gYml0IDE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX1BIWV9DT05UUk9MX3QsICpQTUlfUEhZX0NPTlRST0xfdDsKCi8qIE1JIFJlZ2lzdGVyIDI0OiBJbnRlcnJ1cHQgTWFzayBSZWcoMHgxOCkgKi8KdHlwZWRlZiB1bmlvbiBfTUlfSU1SX3QgewoJdTE2IHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQoJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQoJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgOAoJCXUxNiBoaV9iaXRfZXJyOjE7CQkvLyBiaXQgNwoJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKCQl1MTYgZXJyX2NvdW50ZXJfZnVsbDoxOwkvLyBiaXQgNQoJCXUxNiBmaWZvX292ZXJfdW5kZXJmbG93OjE7CS8vIGJpdCA0CgkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCgkJdTE2IGF1dG9tYXRpY19zcGVlZDoxOwkvLyBiaXQgMQoJCXUxNiBpbnRfZW46MTsJCS8vIGJpdCAwCiNlbHNlCgkJdTE2IGludF9lbjoxOwkJLy8gYml0IDAKCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCgkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgMgoJCXUxNiByeF9zdGF0dXM6MTsJCS8vIGJpdCAzCgkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKCQl1MTYgZXJyX2NvdW50ZXJfZnVsbDoxOwkvLyBiaXQgNQoJCXUxNiBucF9yeDoxOwkJLy8gYml0IDYKCQl1MTYgaGlfYml0X2VycjoxOwkJLy8gYml0IDcKCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDgKCQl1MTYgbWRpb19zeW5jX2xvc3Q6MTsJLy8gYml0IDkKCQl1MTYgcmVzMTo2OwkJLy8gYml0cyAxMC0xNQojZW5kaWYKCX0gYml0czsKfSBNSV9JTVJfdCwgKlBNSV9JTVJfdDsKCi8qIE1JIFJlZ2lzdGVyIDI1OiBJbnRlcnJ1cHQgU3RhdHVzIFJlZygweDE5KSAqLwp0eXBlZGVmIHVuaW9uIF9NSV9JU1JfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDEwLTE1CgkJdTE2IG1kaW9fc3luY19sb3N0OjE7CS8vIGJpdCA5CgkJdTE2IGF1dG9uZWdfc3RhdHVzOjE7CS8vIGJpdCA4CgkJdTE2IGhpX2JpdF9lcnI6MTsJCS8vIGJpdCA3CgkJdTE2IG5wX3J4OjE7CQkvLyBiaXQgNgoJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CgkJdTE2IGZpZm9fb3Zlcl91bmRlcmZsb3c6MTsJLy8gYml0IDQKCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgMwoJCXUxNiBsaW5rX3N0YXR1czoxOwkJLy8gYml0IDIKCQl1MTYgYXV0b21hdGljX3NwZWVkOjE7CS8vIGJpdCAxCgkJdTE2IGludF9lbjoxOwkJLy8gYml0IDAKI2Vsc2UKCQl1MTYgaW50X2VuOjE7CQkvLyBiaXQgMAoJCXUxNiBhdXRvbWF0aWNfc3BlZWQ6MTsJLy8gYml0IDEKCQl1MTYgbGlua19zdGF0dXM6MTsJCS8vIGJpdCAyCgkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDMKCQl1MTYgZmlmb19vdmVyX3VuZGVyZmxvdzoxOwkvLyBiaXQgNAoJCXUxNiBlcnJfY291bnRlcl9mdWxsOjE7CS8vIGJpdCA1CgkJdTE2IG5wX3J4OjE7CQkvLyBiaXQgNgoJCXUxNiBoaV9iaXRfZXJyOjE7CQkvLyBiaXQgNwoJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgOAoJCXUxNiBtZGlvX3N5bmNfbG9zdDoxOwkvLyBiaXQgOQoJCXUxNiByZXMxOjY7CQkvLyBiaXRzIDEwLTE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX0lTUl90LCAqUE1JX0lTUl90OwoKLyogTUkgUmVnaXN0ZXIgMjY6IFBIWSBTdGF0dXMgUmVnKDB4MUEpICovCnR5cGVkZWYgdW5pb24gX01JX1BTUl90IHsKCXUxNiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQoJCXUxNiBhdXRvbmVnX2ZhdWx0OjI7CS8vIGJpdCAxMy0xNAoJCXUxNiBhdXRvbmVnX3N0YXR1czoxOwkvLyBiaXQgMTIKCQl1MTYgbWRpX3hfc3RhdHVzOjE7CS8vIGJpdCAxMQoJCXUxNiBwb2xhcml0eV9zdGF0dXM6MTsJLy8gYml0IDEwCgkJdTE2IHNwZWVkX3N0YXR1czoyOwkvLyBiaXRzIDgtOQoJCXUxNiBkdXBsZXhfc3RhdHVzOjE7CS8vIGJpdCA3CgkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgNgoJCXUxNiB0eF9zdGF0dXM6MTsJCS8vIGJpdCA1CgkJdTE2IHJ4X3N0YXR1czoxOwkJLy8gYml0IDQKCQl1MTYgY29sbGlzaW9uX3N0YXR1czoxOwkvLyBiaXQgMwoJCXUxNiBhdXRvbmVnX2VuOjE7CQkvLyBiaXQgMgoJCXUxNiBwYXVzZV9lbjoxOwkJLy8gYml0IDEKCQl1MTYgYXN5bW1ldHJpY19kaXI6MTsJLy8gYml0IDAKI2Vsc2UKCQl1MTYgYXN5bW1ldHJpY19kaXI6MTsJLy8gYml0IDAKCQl1MTYgcGF1c2VfZW46MTsJCS8vIGJpdCAxCgkJdTE2IGF1dG9uZWdfZW46MTsJCS8vIGJpdCAyCgkJdTE2IGNvbGxpc2lvbl9zdGF0dXM6MTsJLy8gYml0IDMKCQl1MTYgcnhfc3RhdHVzOjE7CQkvLyBiaXQgNAoJCXUxNiB0eF9zdGF0dXM6MTsJCS8vIGJpdCA1CgkJdTE2IGxpbmtfc3RhdHVzOjE7CQkvLyBiaXQgNgoJCXUxNiBkdXBsZXhfc3RhdHVzOjE7CS8vIGJpdCA3CgkJdTE2IHNwZWVkX3N0YXR1czoyOwkvLyBiaXRzIDgtOQoJCXUxNiBwb2xhcml0eV9zdGF0dXM6MTsJLy8gYml0IDEwCgkJdTE2IG1kaV94X3N0YXR1czoxOwkvLyBiaXQgMTEKCQl1MTYgYXV0b25lZ19zdGF0dXM6MTsJLy8gYml0IDEyCgkJdTE2IGF1dG9uZWdfZmF1bHQ6MjsJLy8gYml0IDEzLTE0CgkJdTE2IHJlczE6MTsJCS8vIGJpdCAxNQojZW5kaWYKCX0gYml0czsKfSBNSV9QU1JfdCwgKlBNSV9QU1JfdDsKCi8qIE1JIFJlZ2lzdGVyIDI3OiBMRUQgQ29udHJvbCBSZWcgMSgweDFCKSAqLwp0eXBlZGVmIHVuaW9uIF9NSV9MQ1IxX3QgewoJdTE2IHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MTYgcmVzMToyOwkJLy8gYml0cyAxNC0xNQoJCXUxNiBsZWRfZHVwX2luZGljYXRlOjI7CS8vIGJpdHMgMTItMTMKCQl1MTYgbGVkXzEwYmFzZVQ6MjsJCS8vIGJpdHMgMTAtMTEKCQl1MTYgbGVkX2NvbGxpc2lvbjoyOwkvLyBiaXRzIDgtOQoJCXUxNiByZXMyOjI7CQkvLyBiaXRzIDYtNwoJCXUxNiByZXMzOjI7CQkvLyBiaXRzIDQtNQoJCXUxNiBwdWxzZV9kdXI6MjsJCS8vIGJpdHMgMi0zCgkJdTE2IHB1bHNlX3N0cmV0Y2gxOjE7CS8vIGJpdCAxCgkJdTE2IHB1bHNlX3N0cmV0Y2gwOjE7CS8vIGJpdCAwCiNlbHNlCgkJdTE2IHB1bHNlX3N0cmV0Y2gwOjE7CS8vIGJpdCAwCgkJdTE2IHB1bHNlX3N0cmV0Y2gxOjE7CS8vIGJpdCAxCgkJdTE2IHB1bHNlX2R1cjoyOwkJLy8gYml0cyAyLTMKCQl1MTYgcmVzMzoyOwkJLy8gYml0cyA0LTUKCQl1MTYgcmVzMjoyOwkJLy8gYml0cyA2LTcKCQl1MTYgbGVkX2NvbGxpc2lvbjoyOwkvLyBiaXRzIDgtOQoJCXUxNiBsZWRfMTBiYXNlVDoyOwkJLy8gYml0cyAxMC0xMQoJCXUxNiBsZWRfZHVwX2luZGljYXRlOjI7CS8vIGJpdHMgMTItMTMKCQl1MTYgcmVzMToyOwkJLy8gYml0cyAxNC0xNQojZW5kaWYKCX0gYml0czsKfSBNSV9MQ1IxX3QsICpQTUlfTENSMV90OwoKLyogTUkgUmVnaXN0ZXIgMjg6IExFRCBDb250cm9sIFJlZyAyKDB4MUMpICovCnR5cGVkZWYgdW5pb24gX01JX0xDUjJfdCB7Cgl1MTYgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUxNiBsZWRfbGluazo0OwkJLy8gYml0cyAxMi0xNQoJCXUxNiBsZWRfdHhfcng6NDsJCS8vIGJpdHMgOC0xMQoJCXUxNiBsZWRfMTAwQmFzZVRYOjQ7CS8vIGJpdHMgNC03CgkJdTE2IGxlZF8xMDAwQmFzZVQ6NDsJLy8gYml0cyAwLTMKI2Vsc2UKCQl1MTYgbGVkXzEwMDBCYXNlVDo0OwkvLyBiaXRzIDAtMwoJCXUxNiBsZWRfMTAwQmFzZVRYOjQ7CS8vIGJpdHMgNC03CgkJdTE2IGxlZF90eF9yeDo0OwkJLy8gYml0cyA4LTExCgkJdTE2IGxlZF9saW5rOjQ7CQkvLyBiaXRzIDEyLTE1CiNlbmRpZgoJfSBiaXRzOwp9IE1JX0xDUjJfdCwgKlBNSV9MQ1IyX3Q7CgovKiBNSSBSZWdpc3RlciAyOSAtIDMxOiBSZXNlcnZlZCBSZWcoMHgxRCAtIDB4MUUpICovCgovKiBUcnVlUEhZIGhlYWRlcnMgKi8KdHlwZWRlZiBzdHJ1Y3QgX1RSVUVQSFlfQUNDRVNTX01JX1JFR1NfIHsKCVRSVUVQSFlfSEFORExFIGhUcnVlUGh5OwoJaW50MzJfdCBuUGh5SWQ7Cgl1OCBiUmVhZFdyaXRlOwoJdTggKnBieVJlZ3M7Cgl1OCAqcHdEYXRhOwoJaW50MzJfdCBuUmVnQ291bnQ7Cn0gVFJVRVBIWV9BQ0NFU1NfTUlfUkVHUywgKlBUUlVFUEhZX0FDQ0VTU19NSV9SRUdTOwoKLyogVHJ1ZVBIWSBoZWFkZXJzICovCnR5cGVkZWYgc3RydWN0IF9UQUdfVFBBTF9BQ0NFU1NfTUlfUkVHU18gewoJdTMyIG5QaHlJZDsKCXU4IGJSZWFkV3JpdGU7Cgl1MzIgblJlZ0NvdW50OwoJdTE2IERhdGFbNDA5Nl07Cgl1OCBSZWdzWzQwOTZdOwp9IFRQQUxfQUNDRVNTX01JX1JFR1MsICpQVFBBTF9BQ0NFU1NfTUlfUkVHUzsKCgp0eXBlZGVmIFRSVUVQSFlfSEFORExFIFRQQUxfSEFORExFOwoKLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwpzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7CgovKiBPUyBTcGVjaWZpYyBGdW5jdGlvbnMqLwp2b2lkIFRQQUxfU2V0UGh5MTBIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CnZvaWQgVFBBTF9TZXRQaHkxMEZ1bGxEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKdm9pZCBUUEFMX1NldFBoeTEwRm9yY2Uoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7CnZvaWQgVFBBTF9TZXRQaHkxMDBIYWxmRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CnZvaWQgVFBBTF9TZXRQaHkxMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CnZvaWQgVFBBTF9TZXRQaHkxMDBGb3JjZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKdm9pZCBUUEFMX1NldFBoeTEwMDBGdWxsRHVwbGV4KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CnZvaWQgVFBBTF9TZXRQaHlBdXRvTmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CgovKiBQcm90b3R5cGVzIGZvciBFVDEzMTBfcGh5LmMgKi8KaW50IGV0MTMxeF94Y3ZyX2ZpbmQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKaW50IGV0MTMxeF9zZXRwaHlfbm9ybWFsKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CmludDMyX3QgUGh5TWlSZWFkKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKCSAgICAgICB1OCB4Y3ZyQWRkciwgdTggeGN2clJlZywgdTE2ICp2YWx1ZSk7CgovKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgYmVjYXVzZSBldDEzMXhfYWRhcHRlciBpcyBub3QgYWx3YXlzCiAqIGRlZmluZWQKICovCiNkZWZpbmUgTWlSZWFkKGFkYXB0ZXIsIHhjdnJSZWcsIHZhbHVlKSBcCglQaHlNaVJlYWQoKGFkYXB0ZXIpLCAoYWRhcHRlciktPlN0YXRzLnhjdnJfYWRkciwgKHhjdnJSZWcpLCAodmFsdWUpKQoKaW50MzJfdCBNaVdyaXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKCQl1OCB4Y3ZSZWcsIHUxNiB2YWx1ZSk7CnZvaWQgZXQxMzF4X01paV9jaGVjayhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyLAoJCSAgICAgIE1JX0JNU1JfdCBibXNyLCBNSV9CTVNSX3QgYm1zcl9pbnRzKTsKCi8qIFRoaXMgbGFzdCBpcyBub3Qgc3RyaWN0bHkgcmVxdWlyZWQgKHRoZSBkcml2ZXIgY291bGQgY2FsbCB0aGUgVFBBTAogKiB2ZXJzaW9uIGluc3RlYWQpLCBidXQgdGhpcyBzZXRzIHRoZSBhZGFwdGVyIHVwIGNvcnJlY3RseSwgYW5kIGNhbGxzIHRoZQogKiBhY2Nlc3Mgcm91dGluZSBpbmRpcmVjdGx5LiAgVGhpcyBwcm90ZWN0cyB0aGUgZHJpdmVyIGZyb20gY2hhbmdlcyBpbiBUUEFMLgogKi8Kdm9pZCBTZXRQaHlfMTBCYXNlVEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKCi8qIERlZmluZXMgZm9yIFBIWSBhY2Nlc3Mgcm91dGluZXMgKi8KCi8vIERlZmluZSBiaXQgb3BlcmF0aW9uIGZsYWdzCiNkZWZpbmUgVFJVRVBIWV9CSVRfQ0xFQVIgICAgICAgICAgICAgICAwCiNkZWZpbmUgVFJVRVBIWV9CSVRfU0VUICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgVFJVRVBIWV9CSVRfUkVBRCAgICAgICAgICAgICAgICAyCgovLyBEZWZpbmUgcmVhZC93cml0ZSBvcGVyYXRpb24gZmxhZ3MKI2lmbmRlZiBUUlVFUEhZX1JFQUQKI2RlZmluZSBUUlVFUEhZX1JFQUQgICAgICAgICAgICAgICAgICAgIDAKI2RlZmluZSBUUlVFUEhZX1dSSVRFICAgICAgICAgICAgICAgICAgIDEKI2RlZmluZSBUUlVFUEhZX01BU0sgICAgICAgICAgICAgICAgICAgIDIKI2VuZGlmCgovLyBEZWZpbmUgc3BlZWRzCiNkZWZpbmUgVFJVRVBIWV9TUEVFRF8xME1CUFMgICAgICAgICAgICAwCiNkZWZpbmUgVFJVRVBIWV9TUEVFRF8xMDBNQlBTICAgICAgICAgICAxCiNkZWZpbmUgVFJVRVBIWV9TUEVFRF8xMDAwTUJQUyAgICAgICAgICAyCgovLyBEZWZpbmUgZHVwbGV4IG1vZGVzCiNkZWZpbmUgVFJVRVBIWV9EVVBMRVhfSEFMRiAgICAgICAgICAgICAwCiNkZWZpbmUgVFJVRVBIWV9EVVBMRVhfRlVMTCAgICAgICAgICAgICAxCgovLyBEZWZpbmUgbWFzdGVyL3NsYXZlIGNvbmZpZ3VyYXRpb24gdmFsdWVzCiNkZWZpbmUgVFJVRVBIWV9DRkdfU0xBVkUgICAgICAgICAgICAgICAwCiNkZWZpbmUgVFJVRVBIWV9DRkdfTUFTVEVSICAgICAgICAgICAgICAxCgovLyBEZWZpbmUgTURJL01ESS1YIHNldHRpbmdzCiNkZWZpbmUgVFJVRVBIWV9NREkgICAgICAgICAgICAgICAgICAgICAwCiNkZWZpbmUgVFJVRVBIWV9NRElYICAgICAgICAgICAgICAgICAgICAxCiNkZWZpbmUgVFJVRVBIWV9BVVRPX01ESV9NRElYICAgICAgICAgICAyCgovLyBEZWZpbmUgMTBCYXNlLVQgbGluayBwb2xhcml0aWVzCiNkZWZpbmUgVFJVRVBIWV9QT0xBUklUWV9OT1JNQUwgICAgICAgICAwCiNkZWZpbmUgVFJVRVBIWV9QT0xBUklUWV9JTlZFUlRFRCAgICAgICAxCgovLyBEZWZpbmUgYXV0by1uZWdvdGlhdGlvbiByZXN1bHRzCiNkZWZpbmUgVFJVRVBIWV9BTkVHX05PVF9DT01QTEVURSAgICAgICAwCiNkZWZpbmUgVFJVRVBIWV9BTkVHX0NPTVBMRVRFICAgICAgICAgICAxCiNkZWZpbmUgVFJVRVBIWV9BTkVHX0RJU0FCTEVEICAgICAgICAgICAyCgovKiBEZWZpbmUgZHVwbGV4IGFkdmVydGlzbWVudCBmbGFncyAqLwojZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9OT05FICAgICAgICAgMHgwMAojZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9GVUxMICAgICAgICAgMHgwMQojZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9IQUxGICAgICAgICAgMHgwMgojZGVmaW5lIFRSVUVQSFlfQURWX0RVUExFWF9CT1RIICAgICBcCiAgICAoVFJVRVBIWV9BRFZfRFVQTEVYX0ZVTEwgfCBUUlVFUEhZX0FEVl9EVVBMRVhfSEFMRikKCiNkZWZpbmUgUEhZX0NPTlRST0wgICAgICAgICAgICAgICAgMHgwMAkvLyNkZWZpbmUgVFJVX01JX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgICAgICAgIDAKI2RlZmluZSBQSFlfU1RBVFVTICAgICAgICAgICAgICAgICAweDAxCS8vI2RlZmluZSBUUlVfTUlfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgMQojZGVmaW5lIFBIWV9JRF8xICAgICAgICAgICAgICAgICAgIDB4MDIJLy8jZGVmaW5lIFRSVV9NSV9QSFlfSURFTlRJRklFUl8xX1JFR0lTVEVSICAgICAgICAyCiNkZWZpbmUgUEhZX0lEXzIgICAgICAgICAgICAgICAgICAgMHgwMwkvLyNkZWZpbmUgVFJVX01JX1BIWV9JREVOVElGSUVSXzJfUkVHSVNURVIgICAgICAgIDMKI2RlZmluZSBQSFlfQVVUT19BRFZFUlRJU0VNRU5UICAgICAweDA0CS8vI2RlZmluZSBUUlVfTUlfQURWRVJUSVNFTUVOVF9SRUdJU1RFUiAgICAgICAgICAgNAojZGVmaW5lIFBIWV9BVVRPX0xJTktfUEFSVE5FUiAgICAgIDB4MDUJLy8jZGVmaW5lIFRSVV9NSV9MSU5LX1BBUlRORVJfQUJJTElUWV9SRUdJU1RFUiAgICA1CiNkZWZpbmUgUEhZX0FVVE9fRVhQQU5TSU9OICAgICAgICAgMHgwNgkvLyNkZWZpbmUgVFJVX01JX0VYUEFOU0lPTl9SRUdJU1RFUiAgICAgICAgICAgICAgIDYKI2RlZmluZSBQSFlfQVVUT19ORVhUX1BBR0VfVFggICAgICAweDA3CS8vI2RlZmluZSBUUlVfTUlfTkVYVF9QQUdFX1RSQU5TTUlUX1JFR0lTVEVSICAgICAgNwojZGVmaW5lIFBIWV9MSU5LX1BBUlRORVJfTkVYVF9QQUdFIDB4MDgJLy8jZGVmaW5lIFRSVV9NSV9MSU5LX1BBUlRORVJfTkVYVF9QQUdFX1JFR0lTVEVSICA4CiNkZWZpbmUgUEhZXzEwMDBfQ09OVFJPTCAgICAgICAgICAgMHgwOQkvLyNkZWZpbmUgVFJVX01JXzEwMDBCQVNFVF9DT05UUk9MX1JFR0lTVEVSICAgICAgIDkKI2RlZmluZSBQSFlfMTAwMF9TVEFUVVMgICAgICAgICAgICAweDBBCS8vI2RlZmluZSBUUlVfTUlfMTAwMEJBU0VUX1NUQVRVU19SRUdJU1RFUiAgICAgICAgMTAKCiNkZWZpbmUgUEhZX0VYVEVOREVEX1NUQVRVUyAgICAgICAgMHgwRgkvLyNkZWZpbmUgVFJVX01JX0VYVEVOREVEX1NUQVRVU19SRUdJU1RFUiAgICAgICAgIDE1CgovLyBzb21lIGRlZmluZXMgZm9yIG1vZGVtIHJlZ2lzdGVycyB0aGF0IHNlZW0gdG8gYmUgJ3Jlc2VydmVkJwojZGVmaW5lIFBIWV9JTkRFWF9SRUcgICAgICAgICAgICAgIDB4MTAKI2RlZmluZSBQSFlfREFUQV9SRUcgICAgICAgICAgICAgICAweDExCgojZGVmaW5lIFBIWV9NUEhZX0NPTlRST0xfUkVHICAgICAgIDB4MTIJLy8jZGVmaW5lIFRSVV9WTUlfTVBIWV9DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAxOAoKI2RlZmluZSBQSFlfTE9PUEJBQ0tfQ09OVFJPTCAgICAgICAweDEzCS8vI2RlZmluZSBUUlVfVk1JX0xPT1BCQUNLX0NPTlRST0xfMV9SRUdJU1RFUiAgICAgMTkKCQkJCQkvLyNkZWZpbmUgVFJVX1ZNSV9MT09QQkFDS19DT05UUk9MXzJfUkVHSVNURVIgICAgIDIwCiNkZWZpbmUgUEhZX1JFR0lTVEVSX01HTVRfQ09OVFJPTCAgMHgxNQkvLyNkZWZpbmUgVFJVX1ZNSV9NSV9TRVFfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgIDIxCiNkZWZpbmUgUEhZX0NPTkZJRyAgICAgICAgICAgICAgICAgMHgxNgkvLyNkZWZpbmUgVFJVX1ZNSV9DT05GSUdVUkFUSU9OX1JFR0lTVEVSICAgICAgICAgIDIyCiNkZWZpbmUgUEhZX1BIWV9DT05UUk9MICAgICAgICAgICAgMHgxNwkvLyNkZWZpbmUgVFJVX1ZNSV9QSFlfQ09OVFJPTF9SRUdJU1RFUiAgICAgICAgICAgIDIzCiNkZWZpbmUgUEhZX0lOVEVSUlVQVF9NQVNLICAgICAgICAgMHgxOAkvLyNkZWZpbmUgVFJVX1ZNSV9JTlRFUlJVUFRfTUFTS19SRUdJU1RFUiAgICAgICAgIDI0CiNkZWZpbmUgUEhZX0lOVEVSUlVQVF9TVEFUVVMgICAgICAgMHgxOQkvLyNkZWZpbmUgVFJVX1ZNSV9JTlRFUlJVUFRfU1RBVFVTX1JFR0lTVEVSICAgICAgIDI1CiNkZWZpbmUgUEhZX1BIWV9TVEFUVVMgICAgICAgICAgICAgMHgxQQkvLyNkZWZpbmUgVFJVX1ZNSV9QSFlfU1RBVFVTX1JFR0lTVEVSICAgICAgICAgICAgIDI2CiNkZWZpbmUgUEhZX0xFRF8xICAgICAgICAgICAgICAgICAgMHgxQgkvLyNkZWZpbmUgVFJVX1ZNSV9MRURfQ09OVFJPTF8xX1JFR0lTVEVSICAgICAgICAgIDI3CiNkZWZpbmUgUEhZX0xFRF8yICAgICAgICAgICAgICAgICAgMHgxQwkvLyNkZWZpbmUgVFJVX1ZNSV9MRURfQ09OVFJPTF8yX1JFR0lTVEVSICAgICAgICAgIDI4CgkJCQkJLy8jZGVmaW5lIFRSVV9WTUlfTElOS19DT05UUk9MX1JFR0lTVEVSICAgICAgICAgICAyOQoJCQkJCS8vI2RlZmluZSBUUlVfVk1JX1RJTUlOR19DT05UUk9MX1JFR0lTVEVSCgovKiBQcm90b3R5cGVzIGZvciBQSFkgYWNjZXNzIHJvdXRpbmVzICovCnZvaWQgRVQxMzEwX1BoeUluaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKdm9pZCBFVDEzMTBfUGh5UmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKdm9pZCBFVDEzMTBfUGh5UG93ZXJEb3duKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBkb3duKTsKdm9pZCBFVDEzMTBfUGh5QXV0b05lZyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIGJvb2wgZW5hYmxlKTsKdm9pZCBFVDEzMTBfUGh5RHVwbGV4TW9kZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBkdXBsZXgpOwp2b2lkIEVUMTMxMF9QaHlTcGVlZFNlbGVjdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHUxNiBzcGVlZCk7CnZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCgkJCQkgIHUxNiBkdXBsZXgpOwp2b2lkIEVUMTMxMF9QaHlBZHZlcnRpc2UxMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCgkJCQkgdTE2IGR1cGxleCk7CnZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwQmFzZVQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAoJCQkJdTE2IGR1cGxleCk7CnZvaWQgRVQxMzEwX1BoeUxpbmtTdGF0dXMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAoJCQkgIHU4ICp1Y0xpbmtTdGF0dXMsCgkJCSAgdTMyICp1aUF1dG9OZWcsCgkJCSAgdTMyICp1aUxpbmtTcGVlZCwKCQkJICB1MzIgKnVpRHVwbGV4TW9kZSwKCQkJICB1MzIgKnVpTWRpTWRpeCwKCQkJICB1MzIgKnVpTWFzdGVyU2xhdmUsIHUzMiAqdWlQb2xhcml0eSk7CnZvaWQgRVQxMzEwX1BoeUFuZE9yUmVnKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKCQkJdTE2IHJlZ251bSwgdTE2IGFuZE1hc2ssIHUxNiBvck1hc2spOwp2b2lkIEVUMTMxMF9QaHlBY2Nlc3NNaUJpdChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCgkJCSAgIHUxNiBhY3Rpb24sCgkJCSAgIHUxNiByZWdudW0sIHUxNiBiaXRudW0sIHU4ICp2YWx1ZSk7CgojZW5kaWYgLyogX0VUMTMxMF9QSFlfSF8gKi8K