LyoKICogQWdlcmUgU3lzdGVtcyBJbmMuCiAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcwogKgogKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgogKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCiAqCiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqCiAqIGV0MTMxMF9hZGRyZXNzX21hcC5oIC0gQ29udGFpbnMgdGhlIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIHRoZSBFVDEzMTAKICoKICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICoKICogU09GVFdBUkUgTElDRU5TRQogKgogKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwogKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCiAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KICoKICogQ29weXJpZ2h0IKkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwogKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwogKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKICogICAgZGlzdHJpYnV0aW9uLgogKgogKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgogKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogKgogKiBEaXNjbGFpbWVyCiAqCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgk0FTIElTlCBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAogKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQogKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwogKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAogKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKICogREFNQUdFLgogKgogKi8KCiNpZm5kZWYgX0VUMTMxMF9BRERSRVNTX01BUF9IXwojZGVmaW5lIF9FVDEzMTBfQUREUkVTU19NQVBfSF8KCgovKiBTVEFSVCBPRiBHTE9CQUwgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCnR5cGVkZWYgdW5pb24gX1FfQUREUl90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQoJCXUzMiBhZGRyOjEwOwkvLyBiaXRzIDAtOQojZWxzZQoJCXUzMiBhZGRyOjEwOwkvLyBiaXRzIDAtOQoJCXUzMiB1bnVzZWQ6MjI7CS8vIGJpdHMgMTAtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUV9BRERSX3QsICpQUV9BRERSX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIHR4IHF1ZXVlIHN0YXJ0IGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDAwCiAqIERlZmluZWQgZWFybGllciAoUV9BRERSX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciB0eCBxdWV1ZSBlbmQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMDQKICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHN0YXJ0IGFkZHJlc3MgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDA4CiAqIERlZmluZWQgZWFybGllciAoUV9BRERSX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSBlbmQgYWRkcmVzcyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMEMKICogRGVmaW5lZCBlYXJsaWVyIChRX0FERFJfdCkKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHBvd2VyIG1hbmFnZW1lbnQgY29udHJvbCBzdGF0dXMgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDEwCiAqLwp0eXBlZGVmIHVuaW9uIF9QTV9DU1JfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCgkJdTMyIHBtX2phZ2NvcmVfcnhfcmR5OjE7CS8vIGJpdCA5CgkJdTMyIHBtX2phZ2NvcmVfdHhfcmR5OjE7CS8vIGJpdCA4CgkJdTMyIHBtX3BoeV9scGVkX2VuOjE7CS8vIGJpdCA3CgkJdTMyIHBtX3BoeV9zd19jb21hOjE7CS8vIGJpdCA2CgkJdTMyIHBtX3J4Y2xrX2dhdGU6MTsJLy8gYml0IDUKCQl1MzIgcG1fdHhjbGtfZ2F0ZToxOwkvLyBiaXQgNAoJCXUzMiBwbV9zeXNjbGtfZ2F0ZToxOwkvLyBiaXQgMwoJCXUzMiBwbV9qYWdjb3JlX3J4X2VuOjE7CS8vIGJpdCAyCgkJdTMyIHBtX2phZ2NvcmVfdHhfZW46MTsJLy8gYml0IDEKCQl1MzIgcG1fZ2lnZXBoeV9lbjoxOwkvLyBiaXQgMAojZWxzZQoJCXUzMiBwbV9naWdlcGh5X2VuOjE7CS8vIGJpdCAwCgkJdTMyIHBtX2phZ2NvcmVfdHhfZW46MTsJLy8gYml0IDEKCQl1MzIgcG1famFnY29yZV9yeF9lbjoxOwkvLyBiaXQgMgoJCXUzMiBwbV9zeXNjbGtfZ2F0ZToxOwkvLyBiaXQgMwoJCXUzMiBwbV90eGNsa19nYXRlOjE7CS8vIGJpdCA0CgkJdTMyIHBtX3J4Y2xrX2dhdGU6MTsJLy8gYml0IDUKCQl1MzIgcG1fcGh5X3N3X2NvbWE6MTsJLy8gYml0IDYKCQl1MzIgcG1fcGh5X2xwZWRfZW46MTsJLy8gYml0IDcKCQl1MzIgcG1famFnY29yZV90eF9yZHk6MTsJLy8gYml0IDgKCQl1MzIgcG1famFnY29yZV9yeF9yZHk6MTsJLy8gYml0IDkKCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQojZW5kaWYKCX0gYml0czsKfSBQTV9DU1JfdCwgKlBQTV9DU1JfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IHN0YXR1cyByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMTgKICovCnR5cGVkZWYgdW5pb24gX0lOVEVSUlVQVF90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDU6MTE7CQkJLy8gYml0cyAyMS0zMQoJCXUzMiBzbHZfdGltZW91dDoxOwkJCS8vIGJpdCAyMAoJCXUzMiBtYWNfc3RhdF9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOQoJCXUzMiByeG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOAoJCXUzMiB0eG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNwoJCXUzMiBwaHlfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTYKCQl1MzIgd2FrZV9vbl9sYW46MTsJCQkvLyBiaXQgMTUKCQl1MzIgd2F0Y2hkb2dfaW50ZXJydXB0OjE7CQkvLyBiaXQgMTQKCQl1MzIgdW51c2VkNDo0OwkJCS8vIGJpdHMgMTAtMTMKCQl1MzIgcnhkbWFfZXJyOjE7CQkJLy8gYml0IDkKCQl1MzIgcnhkbWFfcGt0X3N0YXRfcmluZ19sb3c6MTsJLy8gYml0IDgKCQl1MzIgcnhkbWFfZmJfcmluZzFfbG93OjE7CQkvLyBiaXQgNwoJCXUzMiByeGRtYV9mYl9yaW5nMF9sb3c6MTsJCS8vIGJpdCA2CgkJdTMyIHJ4ZG1hX3hmcl9kb25lOjE7CQkvLyBiaXQgNQoJCXUzMiB0eGRtYV9lcnI6MTsJCQkvLyBiaXQgNAoJCXUzMiB0eGRtYV9pc3I6MTsJCQkvLyBiaXQgMwoJCXUzMiB1bnVzZWQzOjE7CQkJLy8gYml0IDIKCQl1MzIgdW51c2VkMjoxOwkJCS8vIGJpdCAxCgkJdTMyIHVudXNlZDE6MTsJCQkvLyBiaXQgMAojZWxzZQoJCXUzMiB1bnVzZWQxOjE7CQkJLy8gYml0IDAKCQl1MzIgdW51c2VkMjoxOwkJCS8vIGJpdCAxCgkJdTMyIHVudXNlZDM6MTsJCQkvLyBiaXQgMgoJCXUzMiB0eGRtYV9pc3I6MTsJCQkvLyBiaXQgMwoJCXUzMiB0eGRtYV9lcnI6MTsJCQkvLyBiaXQgNAoJCXUzMiByeGRtYV94ZnJfZG9uZToxOwkJLy8gYml0IDUKCQl1MzIgcnhkbWFfZmJfcmluZzBfbG93OjE7CQkvLyBiaXQgNgoJCXUzMiByeGRtYV9mYl9yaW5nMV9sb3c6MTsJCS8vIGJpdCA3CgkJdTMyIHJ4ZG1hX3BrdF9zdGF0X3JpbmdfbG93OjE7CS8vIGJpdCA4CgkJdTMyIHJ4ZG1hX2VycjoxOwkJCS8vIGJpdCA5CgkJdTMyIHVudXNlZDQ6NDsJCQkvLyBiaXRzIDEwLTEzCgkJdTMyIHdhdGNoZG9nX2ludGVycnVwdDoxOwkJLy8gYml0IDE0CgkJdTMyIHdha2Vfb25fbGFuOjE7CQkJLy8gYml0IDE1CgkJdTMyIHBoeV9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNgoJCXUzMiB0eG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxNwoJCXUzMiByeG1hY19pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOAoJCXUzMiBtYWNfc3RhdF9pbnRlcnJ1cHQ6MTsJCS8vIGJpdCAxOQoJCXUzMiBzbHZfdGltZW91dDoxOwkJCS8vIGJpdCAyMAoJCXUzMiB1bnVzZWQ1OjExOwkJCS8vIGJpdHMgMjEtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gSU5URVJSVVBUX3QsICpQSU5URVJSVVBUX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIGludGVycnVwdCBtYXNrIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAxQwogKiBEZWZpbmVkIGVhcmxpZXIgKElOVEVSUlVQVF90KSwgYnV0ICd3YXRjaGRvZ19pbnRlcnJ1cHQnIGlzIG5vdCB1c2VkLgogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgaW50ZXJydXB0IGFsaWFzIGNsZWFyIG1hc2sgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDIwCiAqIERlZmluZWQgZWFybGllciAoSU5URVJSVVBUX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgc3RhdHVzIGFsaWFzIHJlZyBpbiBnbG9iYWwgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAyNAogKiBEZWZpbmVkIGVhcmxpZXIgKElOVEVSUlVQVF90KQogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3Igc29mdHdhcmUgcmVzZXQgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDI4CiAqLwp0eXBlZGVmIHVuaW9uIF9TV19SRVNFVF90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHNlbGZjbHJfZGlzYWJsZToxOwkvLyBiaXQgMzEKCQl1MzIgdW51c2VkOjI0OwkJLy8gYml0cyA3LTMwCgkJdTMyIG1tY19zd19yZXNldDoxOwkvLyBiaXQgNgoJCXUzMiBtYWNfc3RhdF9zd19yZXNldDoxOwkvLyBiaXQgNQoJCXUzMiBtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDQKCQl1MzIgcnhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDMKCQl1MzIgdHhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDIKCQl1MzIgcnhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDEKCQl1MzIgdHhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDAKI2Vsc2UKCQl1MzIgdHhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDAKCQl1MzIgcnhkbWFfc3dfcmVzZXQ6MTsJLy8gYml0IDEKCQl1MzIgdHhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDIKCQl1MzIgcnhtYWNfc3dfcmVzZXQ6MTsJLy8gYml0IDMKCQl1MzIgbWFjX3N3X3Jlc2V0OjE7CS8vIGJpdCA0CgkJdTMyIG1hY19zdGF0X3N3X3Jlc2V0OjE7CS8vIGJpdCA1CgkJdTMyIG1tY19zd19yZXNldDoxOwkvLyBiaXQgNgoJCXUzMiB1bnVzZWQ6MjQ7CQkvLyBiaXRzIDctMzAKCQl1MzIgc2VsZmNscl9kaXNhYmxlOjE7CS8vIGJpdCAzMQojZW5kaWYKCX0gYml0czsKfSBTV19SRVNFVF90LCAqUFNXX1JFU0VUX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIFNMViBUaW1lciByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMkMKICovCnR5cGVkZWYgdW5pb24gX1NMVl9USU1FUl90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDo4OwkvLyBiaXRzIDI0LTMxCgkJdTMyIHRpbWVyX2luaToyNDsJLy8gYml0cyAwLTIzCiNlbHNlCgkJdTMyIHRpbWVyX2luaToyNDsJLy8gYml0cyAwLTIzCgkJdTMyIHVudXNlZDo4OwkvLyBiaXRzIDI0LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFNMVl9USU1FUl90LCAqUFNMVl9USU1FUl90OwoKLyoKICogc3RydWN0dXJlIGZvciBNU0kgQ29uZmlndXJhdGlvbiByZWcgaW4gZ2xvYmFsIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDAwMzAKICovCnR5cGVkZWYgdW5pb24gX01TSV9DT05GSUdfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQxOjEzOwkvLyBiaXRzIDE5LTMxCgkJdTMyIG1zaV90YzozOwkvLyBiaXRzIDE2LTE4CgkJdTMyIHVudXNlZDI6MTE7CS8vIGJpdHMgNS0xNQoJCXUzMiBtc2lfdmVjdG9yOjU7CS8vIGJpdHMgMC00CiNlbHNlCgkJdTMyIG1zaV92ZWN0b3I6NTsJLy8gYml0cyAwLTQKCQl1MzIgdW51c2VkMjoxMTsJLy8gYml0cyA1LTE1CgkJdTMyIG1zaV90YzozOwkvLyBiaXRzIDE2LTE4CgkJdTMyIHVudXNlZDE6MTM7CS8vIGJpdHMgMTktMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTVNJX0NPTkZJR190LCAqUE1TSV9DT05GSUdfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgTG9vcGJhY2sgcmVnIGluIGdsb2JhbCBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgwMDM0CiAqLwp0eXBlZGVmIHVuaW9uIF9MT09QQkFDS190IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDozMDsJCS8vIGJpdHMgMi0zMQoJCXUzMiBkbWFfbG9vcGJhY2s6MTsJLy8gYml0IDEKCQl1MzIgbWFjX2xvb3BiYWNrOjE7CS8vIGJpdCAwCiNlbHNlCgkJdTMyIG1hY19sb29wYmFjazoxOwkvLyBiaXQgMAoJCXUzMiBkbWFfbG9vcGJhY2s6MTsJLy8gYml0IDEKCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCiNlbmRpZgoJfSBiaXRzOwp9IExPT1BCQUNLX3QsICpQTE9PUEJBQ0tfdDsKCi8qCiAqIEdMT0JBTCBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwMAogKi8KdHlwZWRlZiBzdHJ1Y3QgX0dMT0JBTF90IHsJCQkvLyBMb2NhdGlvbjoKCVFfQUREUl90IHR4cV9zdGFydF9hZGRyOwkJLy8gIDB4MDAwMAoJUV9BRERSX3QgdHhxX2VuZF9hZGRyOwkJCS8vICAweDAwMDQKCVFfQUREUl90IHJ4cV9zdGFydF9hZGRyOwkJLy8gIDB4MDAwOAoJUV9BRERSX3QgcnhxX2VuZF9hZGRyOwkJCS8vICAweDAwMEMKCVBNX0NTUl90IHBtX2NzcjsJCQkvLyAgMHgwMDEwCgl1MzIgdW51c2VkOwkJCQkvLyAgMHgwMDE0CglJTlRFUlJVUFRfdCBpbnRfc3RhdHVzOwkJCS8vICAweDAwMTgKCUlOVEVSUlVQVF90IGludF9tYXNrOwkJCS8vICAweDAwMUMKCUlOVEVSUlVQVF90IGludF9hbGlhc19jbHJfZW47CQkvLyAgMHgwMDIwCglJTlRFUlJVUFRfdCBpbnRfc3RhdHVzX2FsaWFzOwkJLy8gIDB4MDAyNAoJU1dfUkVTRVRfdCBzd19yZXNldDsJCQkvLyAgMHgwMDI4CglTTFZfVElNRVJfdCBzbHZfdGltZXI7CQkJLy8gIDB4MDAyQwoJTVNJX0NPTkZJR190IG1zaV9jb25maWc7CQkvLyAgMHgwMDMwCglMT09QQkFDS190IGxvb3BiYWNrOwkJCS8vICAweDAwMzQKCXUzMiB3YXRjaGRvZ190aW1lcjsJCQkvLyAgMHgwMDM4Cn0gR0xPQkFMX3QsICpQR0xPQkFMX3Q7CgovKiBFTkQgT0YgR0xPQkFMIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCgoKLyogU1RBUlQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgY29udHJvbCBzdGF0dXMgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDAKICovCnR5cGVkZWYgdW5pb24gX1RYRE1BX0NTUl90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDI6MTk7CQkvLyBiaXRzIDEzLTMxCgkJdTMyIHRyYWZmaWNfY2xhc3M6NDsJLy8gYml0cyA5LTEyCgkJdTMyIHNuZ2xfZXBrdF9tb2RlOjE7CS8vIGJpdCA4CgkJdTMyIGNhY2hlX3RocnNobGQ6NDsJLy8gYml0cyA0LTcKCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyAyLTMKCQl1MzIgZHJvcF9UTFBfZGlzYWJsZToxOwkvLyBiaXQgMQoJCXUzMiBoYWx0OjE7CQkvLyBiaXQgMAojZWxzZQoJCXUzMiBoYWx0OjE7CQkvLyBiaXQgMAoJCXUzMiBkcm9wX1RMUF9kaXNhYmxlOjE7CS8vIGJpdCAxCgkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgMi0zCgkJdTMyIGNhY2hlX3RocnNobGQ6NDsJLy8gYml0cyA0LTcKCQl1MzIgc25nbF9lcGt0X21vZGU6MTsJLy8gYml0IDgKCQl1MzIgdHJhZmZpY19jbGFzczo0OwkvLyBiaXRzIDktMTIKCQl1MzIgdW51c2VkMjoxOTsJCS8vIGJpdHMgMTMtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gVFhETUFfQ1NSX3QsICpQVFhETUFfQ1NSX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHBhY2tldCByaW5nIGJhc2UgYWRkcmVzcyBoaSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwNAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHBhY2tldCByaW5nIGJhc2UgYWRkcmVzcyBsb3cgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMDgKICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciB0eGRtYSBwYWNrZXQgcmluZyBudW1iZXIgb2YgZGVzY3JpcHRvciByZWcgaW4gdHhkbWEgYWRkcmVzcwogKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDBDCiAqLwp0eXBlZGVmIHVuaW9uIF9UWERNQV9QUl9OVU1fREVTX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCgkJdTMyIHByX25kZXM6MTA7CS8vIGJpdHMgMC05CiNlbHNlCgkJdTMyIHByX25kZXM6MTA7CS8vIGJpdHMgMC05CgkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQojZW5kaWYKCX0gYml0czsKfSBUWERNQV9QUl9OVU1fREVTX3QsICpQVFhETUFfUFJfTlVNX0RFU190OwoKCnR5cGVkZWYgdW5pb24gX0RNQTEwV190IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDoyMTsJLy8gYml0cyAxMS0zMQoJCXUzMiB3cmFwOjE7CS8vIGJpdCAxMAoJCXUzMiB2YWw6MTA7CS8vIGJpdHMgMC05CiNlbHNlCgkJdTMyIHZhbDoxMDsJLy8gYml0cyAwLTkKCQl1MzIgd3JhcDoxOwkvLyBiaXQgMTAKCQl1MzIgdW51c2VkOjIxOwkvLyBiaXRzIDExLTMxCiNlbmRpZgoJfSBiaXRzOwp9IERNQTEwV190LCAqUERNQTEwV190OwoKLyoKICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSB3cml0ZSBhZGRyZXNzIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDEwCiAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSB3cml0ZSBhZGRyZXNzIGV4dGVybmFsIHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDE0CiAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciB0eGRtYSB0eCBxdWV1ZSByZWFkIGFkZHJlc3MgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMTgKICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHN0YXR1cyB3cml0ZWJhY2sgYWRkcmVzcyBoaSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAxQwogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHN0YXR1cyB3cml0ZWJhY2sgYWRkcmVzcyBsbyByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyMAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHNlcnZpY2UgcmVxdWVzdCByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyNAogKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgc2VydmljZSBjb21wbGV0ZSByZWcgaW4gdHhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAyOAogKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQogKi8KCnR5cGVkZWYgdW5pb24gX0RNQTRXX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKCQl1MzIgd3JhcDoxOwkvLyBiaXQgNAoJCXUzMiB2YWw6NDsJCS8vIGJpdCAwLTMKI2Vsc2UKCQl1MzIgdmFsOjQ7CQkvLyBiaXRzIDAtMwoJCXUzMiB3cmFwOjE7CS8vIGJpdCA0CgkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCiNlbmRpZgoJfSBiaXRzOwp9IERNQTRXX3QsICpQRE1BNFdfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgdHggZGVzY3JpcHRvciBjYWNoZSByZWFkIGluZGV4IHJlZyBpbiB0eGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgxMDJDCiAqIERlZmluZWQgZWFybGllciAoRE1BNFdfdCkKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHR4ZG1hIHR4IGRlc2NyaXB0b3IgY2FjaGUgd3JpdGUgaW5kZXggcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMzAKICogRGVmaW5lZCBlYXJsaWVyIChETUE0V190KQogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgdHhkbWEgZXJyb3IgcmVnIGluIHR4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDEwMzQKICovCnR5cGVkZWYgdW5pb24gX1RYRE1BX0VSUk9SX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkMzoyMjsJCS8vIGJpdHMgMTAtMzEKCQl1MzIgV3Jia1Jld2luZDoxOwkvLyBiaXQgOQoJCXUzMiBXcmJrUmVzZW5kOjE7CS8vIGJpdCA4CgkJdTMyIHVudXNlZDI6MjsJCS8vIGJpdHMgNi03CgkJdTMyIERlc2NyUmV3aW5kOjE7CS8vIGJpdCA1CgkJdTMyIERlc2NyUmVzZW5kOjE7CS8vIGJpdCA0CgkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgMi0zCgkJdTMyIFB5bGRSZXdpbmQ6MTsJLy8gYml0IDEKCQl1MzIgUHlsZFJlc2VuZDoxOwkvLyBiaXQgMAojZWxzZQoJCXUzMiBQeWxkUmVzZW5kOjE7CS8vIGJpdCAwCgkJdTMyIFB5bGRSZXdpbmQ6MTsJLy8gYml0IDEKCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyAyLTMKCQl1MzIgRGVzY3JSZXNlbmQ6MTsJLy8gYml0IDQKCQl1MzIgRGVzY3JSZXdpbmQ6MTsJLy8gYml0IDUKCQl1MzIgdW51c2VkMjoyOwkJLy8gYml0cyA2LTcKCQl1MzIgV3Jia1Jlc2VuZDoxOwkvLyBiaXQgOAoJCXUzMiBXcmJrUmV3aW5kOjE7CS8vIGJpdCA5CgkJdTMyIHVudXNlZDM6MjI7CQkvLyBiaXRzIDEwLTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYRE1BX0VSUk9SX3QsICpQVFhETUFfRVJST1JfdDsKCi8qCiAqIFR4IERNQSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwMAogKi8KdHlwZWRlZiBzdHJ1Y3QgX1RYRE1BX3QgewkJLy8gTG9jYXRpb246CglUWERNQV9DU1JfdCBjc3I7CQkvLyAgMHgxMDAwCgl1MzIgcHJfYmFzZV9oaTsJCQkvLyAgMHgxMDA0Cgl1MzIgcHJfYmFzZV9sbzsJCQkvLyAgMHgxMDA4CglUWERNQV9QUl9OVU1fREVTX3QgcHJfbnVtX2RlczsJLy8gIDB4MTAwQwoJRE1BMTBXX3QgdHhxX3dyX2FkZHI7CQkvLyAgMHgxMDEwCglETUExMFdfdCB0eHFfd3JfYWRkcl9leHQ7CS8vICAweDEwMTQKCURNQTEwV190IHR4cV9yZF9hZGRyOwkJLy8gIDB4MTAxOAoJdTMyIGRtYV93Yl9iYXNlX2hpOwkJLy8gIDB4MTAxQwoJdTMyIGRtYV93Yl9iYXNlX2xvOwkJLy8gIDB4MTAyMAoJRE1BMTBXX3Qgc2VydmljZV9yZXF1ZXN0OwkvLyAgMHgxMDI0CglETUExMFdfdCBzZXJ2aWNlX2NvbXBsZXRlOwkvLyAgMHgxMDI4CglETUE0V190IGNhY2hlX3JkX2luZGV4OwkJLy8gIDB4MTAyQwoJRE1BNFdfdCBjYWNoZV93cl9pbmRleDsJCS8vICAweDEwMzAKCVRYRE1BX0VSUk9SX3QgVHhEbWFFcnJvcjsJLy8gIDB4MTAzNAoJdTMyIERlc2NBYm9ydENvdW50OwkJLy8gIDB4MTAzOAoJdTMyIFBheWxvYWRBYm9ydENudDsJCS8vICAweDEwM2MKCXUzMiBXcml0ZUJhY2tBYm9ydENudDsJCS8vICAweDEwNDAKCXUzMiBEZXNjVGltZW91dENudDsJCS8vICAweDEwNDQKCXUzMiBQYXlsb2FkVGltZW91dENudDsJCS8vICAweDEwNDgKCXUzMiBXcml0ZUJhY2tUaW1lb3V0Q250OwkvLyAgMHgxMDRjCgl1MzIgRGVzY0Vycm9yQ291bnQ7CQkvLyAgMHgxMDUwCgl1MzIgUGF5bG9hZEVycm9yQ250OwkJLy8gIDB4MTA1NAoJdTMyIFdyaXRlQmFja0Vycm9yQ250OwkJLy8gIDB4MTA1OAoJdTMyIERyb3BwZWRUTFBDb3VudDsJCS8vICAweDEwNWMKCURNQTEwV190IE5ld1NlcnZpY2VDb21wbGV0ZTsJLy8gIDB4MTA2MAoJdTMyIEV0aGVybmV0UGFja2V0Q291bnQ7CS8vICAweDEwNjQKfSBUWERNQV90LCAqUFRYRE1BX3Q7CgovKiBFTkQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCgovKiBTVEFSVCBPRiBSWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKLyoKICogc3RydWN0dXJlIGZvciBjb250cm9sIHN0YXR1cyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwMAogKi8KdHlwZWRlZiB1bmlvbiBfUlhETUFfQ1NSX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkMjoxNDsJCS8vIGJpdHMgMTgtMzEKCQl1MzIgaGFsdF9zdGF0dXM6MTsJLy8gYml0IDE3CgkJdTMyIHBrdF9kb25lX2ZsdXNoOjE7CS8vIGJpdCAxNgoJCXUzMiBwa3RfZHJvcF9kaXNhYmxlOjE7CS8vIGJpdCAxNQoJCXUzMiB1bnVzZWQxOjE7CQkvLyBiaXQgMTQKCQl1MzIgZmJyMV9lbmFibGU6MTsJLy8gYml0IDEzCgkJdTMyIGZicjFfc2l6ZToyOwkvLyBiaXRzIDExLTEyCgkJdTMyIGZicjBfZW5hYmxlOjE7CS8vIGJpdCAxMAoJCXUzMiBmYnIwX3NpemU6MjsJLy8gYml0cyA4LTkKCQl1MzIgZG1hX2JpZ19lbmRpYW46MTsJLy8gYml0IDcKCQl1MzIgcGt0X2JpZ19lbmRpYW46MTsJLy8gYml0IDYKCQl1MzIgcHNyX2JpZ19lbmRpYW46MTsJLy8gYml0IDUKCQl1MzIgZmJyX2JpZ19lbmRpYW46MTsJLy8gYml0IDQKCQl1MzIgdGM6MzsJCS8vIGJpdHMgMS0zCgkJdTMyIGhhbHQ6MTsJCS8vIGJpdCAwCiNlbHNlCgkJdTMyIGhhbHQ6MTsJCS8vIGJpdCAwCgkJdTMyIHRjOjM7CQkvLyBiaXRzIDEtMwoJCXUzMiBmYnJfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNAoJCXUzMiBwc3JfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNQoJCXUzMiBwa3RfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNgoJCXUzMiBkbWFfYmlnX2VuZGlhbjoxOwkvLyBiaXQgNwoJCXUzMiBmYnIwX3NpemU6MjsJLy8gYml0cyA4LTkKCQl1MzIgZmJyMF9lbmFibGU6MTsJLy8gYml0IDEwCgkJdTMyIGZicjFfc2l6ZToyOwkvLyBiaXRzIDExLTEyCgkJdTMyIGZicjFfZW5hYmxlOjE7CS8vIGJpdCAxMwoJCXUzMiB1bnVzZWQxOjE7CQkvLyBiaXQgMTQKCQl1MzIgcGt0X2Ryb3BfZGlzYWJsZToxOwkvLyBiaXQgMTUKCQl1MzIgcGt0X2RvbmVfZmx1c2g6MTsJLy8gYml0IDE2CgkJdTMyIGhhbHRfc3RhdHVzOjE7CS8vIGJpdCAxNwoJCXUzMiB1bnVzZWQyOjE0OwkJLy8gYml0cyAxOC0zMQojZW5kaWYKCX0gYml0czsKfSBSWERNQV9DU1JfdCwgKlBSWERNQV9DU1JfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgZG1hIHdyaXRlYmFjayBsbyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwNAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIGRtYSB3cml0ZWJhY2sgaGkgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMDgKICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciBudW1iZXIgb2YgcGFja2V0cyBkb25lIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDBDCiAqLwp0eXBlZGVmIHVuaW9uIF9SWERNQV9OVU1fUEtUX0RPTkVfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6MjQ7CS8vIGJpdHMgOC0zMQoJCXUzMiBudW1fZG9uZTo4OwkvLyBiaXRzIDAtNwojZWxzZQoJCXUzMiBudW1fZG9uZTo4OwkvLyBiaXRzIDAtNwoJCXUzMiB1bnVzZWQ6MjQ7CS8vIGJpdHMgOC0zMQojZW5kaWYKCX0gYml0czsKfSBSWERNQV9OVU1fUEtUX0RPTkVfdCwgKlBSWERNQV9OVU1fUEtUX0RPTkVfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgbWF4IHBhY2tldCB0aW1lIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDEwCiAqLwp0eXBlZGVmIHVuaW9uIF9SWERNQV9NQVhfUEtUX1RJTUVfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6MTQ7CQkvLyBiaXRzIDE4LTMxCgkJdTMyIHRpbWVfZG9uZToxODsJLy8gYml0cyAwLTE3CiNlbHNlCgkJdTMyIHRpbWVfZG9uZToxODsJLy8gYml0cyAwLTE3CgkJdTMyIHVudXNlZDoxNDsJCS8vIGJpdHMgMTgtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhETUFfTUFYX1BLVF9USU1FX3QsICpQUlhETUFfTUFYX1BLVF9USU1FX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIHJ4IHF1ZXVlIHJlYWQgYWRkcmVzcyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAxNAogKiBEZWZpbmVkIGVhcmxpZXIgKERNQTEwV190KQogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgcnggcXVldWUgcmVhZCBhZGRyZXNzIGV4dGVybmFsIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDE4CiAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciByeCBxdWV1ZSB3cml0ZSBhZGRyZXNzIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDFDCiAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciBwYWNrZXQgc3RhdHVzIHJpbmcgYmFzZSBhZGRyZXNzIGxvIHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDIwCiAqIERlZmluZWQgZWFybGllciAodTMyKQogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgcGFja2V0IHN0YXR1cyByaW5nIGJhc2UgYWRkcmVzcyBoaSByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyNAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBudW1iZXIgb2YgZGVzY3JpcHRvcnMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MKICogbWFwLiAgTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAyOAogKi8KdHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX05VTV9ERVNfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCgkJdTMyIHBzcl9uZGVzOjEyOwkvLyBiaXQgMC0xMQojZWxzZQoJCXUzMiBwc3JfbmRlczoxMjsJLy8gYml0IDAtMTEKCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQojZW5kaWYKCX0gYml0czsKfSBSWERNQV9QU1JfTlVNX0RFU190LCAqUFJYRE1BX1BTUl9OVU1fREVTX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDJDCiAqLwp0eXBlZGVmIHVuaW9uIF9SWERNQV9QU1JfQVZBSUxfT0ZGU0VUX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjE5OwkJLy8gYml0cyAxMy0zMQoJCXUzMiBwc3JfYXZhaWxfd3JhcDoxOwkvLyBiaXQgMTIKCQl1MzIgcHNyX2F2YWlsOjEyOwkvLyBiaXQgMC0xMQojZWxzZQoJCXUzMiBwc3JfYXZhaWw6MTI7CS8vIGJpdCAwLTExCgkJdTMyIHBzcl9hdmFpbF93cmFwOjE7CS8vIGJpdCAxMgoJCXUzMiB1bnVzZWQ6MTk7CQkvLyBiaXRzIDEzLTMxCiNlbmRpZgoJfSBiaXRzOwp9IFJYRE1BX1BTUl9BVkFJTF9PRkZTRVRfdCwgKlBSWERNQV9QU1JfQVZBSUxfT0ZGU0VUX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBmdWxsIG9mZnNldCByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAzMAogKi8KdHlwZWRlZiB1bmlvbiBfUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjE5OwkJLy8gYml0cyAxMy0zMQoJCXUzMiBwc3JfZnVsbF93cmFwOjE7CS8vIGJpdCAxMgoJCXUzMiBwc3JfZnVsbDoxMjsJLy8gYml0IDAtMTEKI2Vsc2UKCQl1MzIgcHNyX2Z1bGw6MTI7CS8vIGJpdCAwLTExCgkJdTMyIHBzcl9mdWxsX3dyYXA6MTsJLy8gYml0IDEyCgkJdTMyIHVudXNlZDoxOTsJCS8vIGJpdHMgMTMtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3QsICpQUlhETUFfUFNSX0ZVTExfT0ZGU0VUX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBhY2Nlc3MgaW5kZXggcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMzQKICovCnR5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6Mjc7CS8vIGJpdHMgNS0zMQoJCXUzMiBwc3JfYWk6NTsJLy8gYml0cyAwLTQKI2Vsc2UKCQl1MzIgcHNyX2FpOjU7CS8vIGJpdHMgMC00CgkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFJYRE1BX1BTUl9BQ0NFU1NfSU5ERVhfdCwgKlBSWERNQV9QU1JfQUNDRVNTX0lOREVYX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIHBhY2tldCBzdGF0dXMgcmluZyBtaW5pbXVtIGRlc2NyaXB0b3JzIHJlZyBpbiByeGRtYSBhZGRyZXNzCiAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMzgKICovCnR5cGVkZWYgdW5pb24gX1JYRE1BX1BTUl9NSU5fREVTX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjIwOwkvLyBiaXRzIDEyLTMxCgkJdTMyIHBzcl9taW46MTI7CS8vIGJpdHMgMC0xMQojZWxzZQoJCXUzMiBwc3JfbWluOjEyOwkvLyBiaXRzIDAtMTEKCQl1MzIgdW51c2VkOjIwOwkvLyBiaXRzIDEyLTMxCiNlbmRpZgoJfSBiaXRzOwp9IFJYRE1BX1BTUl9NSU5fREVTX3QsICpQUlhETUFfUFNSX01JTl9ERVNfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyBiYXNlIGxvIGFkZHJlc3MgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwM0MKICogRGVmaW5lZCBlYXJsaWVyICh1MzIpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIGJhc2UgaGkgYWRkcmVzcyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MjA0MAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIHJlZyBpbiByeGRtYSBhZGRyZXNzCiAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNDQKICovCnR5cGVkZWYgdW5pb24gX1JYRE1BX0ZCUl9OVU1fREVTX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQoJCXUzMiBmYnJfbmRlc2M6MTA7CS8vIGJpdHMgMC05CiNlbHNlCgkJdTMyIGZicl9uZGVzYzoxMDsJLy8gYml0cyAwLTkKCQl1MzIgdW51c2VkOjIyOwkJLy8gYml0cyAxMC0zMQojZW5kaWYKCX0gYml0czsKfSBSWERNQV9GQlJfTlVNX0RFU190LCAqUFJYRE1BX0ZCUl9OVU1fREVTX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMCBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDQ4CiAqIERlZmluZWQgZWFybGllciAoRE1BMTBXX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciByaW5nIDAgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNEMKICogRGVmaW5lZCBlYXJsaWVyIChETUExMFdfdCkKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIGNhY2hlIDAgZnVsbCBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNTAKICovCnR5cGVkZWYgdW5pb24gX1JYRE1BX0ZCQ19SRF9JTkRFWF90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDoyNzsJLy8gYml0cyA1LTMxCgkJdTMyIGZiY19yZGk6NTsJLy8gYml0IDAtNAojZWxzZQoJCXUzMiBmYmNfcmRpOjU7CS8vIGJpdCAwLTQKCQl1MzIgdW51c2VkOjI3OwkvLyBiaXRzIDUtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhETUFfRkJDX1JEX0lOREVYX3QsICpQUlhETUFfRkJDX1JEX0lOREVYX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMCBtaW5pbXVtIGRlc2NyaXB0b3IgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNTQKICovCnR5cGVkZWYgdW5pb24gX1JYRE1BX0ZCUl9NSU5fREVTX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjIyOwkvLyBiaXRzIDEwLTMxCgkJdTMyIGZicl9taW46MTA7CS8vIGJpdHMgMC05CiNlbHNlCgkJdTMyIGZicl9taW46MTA7CS8vIGJpdHMgMC05CgkJdTMyIHVudXNlZDoyMjsJLy8gYml0cyAxMC0zMQojZW5kaWYKCX0gYml0czsKfSBSWERNQV9GQlJfTUlOX0RFU190LCAqUFJYRE1BX0ZCUl9NSU5fREVTX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBiYXNlIGFkZHJlc3MgbG8gcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNTggLSAweDIwNUMKICogRGVmaW5lZCBlYXJsaWVyIChSWERNQV9GQlJfQkFTRV9MT190IGFuZCBSWERNQV9GQlJfQkFTRV9ISV90KQogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAxIG51bWJlciBvZiBkZXNjcmlwdG9ycyByZWcgaW4gcnhkbWEgYWRkcmVzcwogKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDYwCiAqIERlZmluZWQgZWFybGllciAoUlhETUFfRkJSX05VTV9ERVNfdCkKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBhdmFpbGFibGUgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDY0CiAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJSX0FWQUlMX09GRlNFVF90KQogKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAxIGZ1bGwgb2Zmc2V0IHJlZyBpbiByeGRtYSBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDY4CiAqIERlZmluZWQgRWFybGllciAoUlhETUFfRkJSX0ZVTExfT0ZGU0VUX3QpCiAqLwoKLyoKICogc3RydWN0dXJlIGZvciBmcmVlIGJ1ZmZlciBjYWNoZSAxIHJlYWQgaW5kZXggcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNkMKICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQkNfUkRfSU5ERVhfdCkKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIGZyZWUgYnVmZmVyIHJpbmcgMSBtaW5pbXVtIGRlc2NyaXB0b3IgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDIwNzAKICogRGVmaW5lZCBFYXJsaWVyIChSWERNQV9GQlJfTUlOX0RFU190KQogKi8KCi8qCiAqIFJ4IERNQSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MjAwMAogKi8KdHlwZWRlZiBzdHJ1Y3QgX1JYRE1BX3QgewkJCQkvLyBMb2NhdGlvbjoKCVJYRE1BX0NTUl90IGNzcjsJCQkJLy8gIDB4MjAwMAoJdTMyIGRtYV93Yl9iYXNlX2xvOwkJCQkvLyAgMHgyMDA0Cgl1MzIgZG1hX3diX2Jhc2VfaGk7CQkJCS8vICAweDIwMDgKCVJYRE1BX05VTV9QS1RfRE9ORV90IG51bV9wa3RfZG9uZTsJCS8vICAweDIwMEMKCVJYRE1BX01BWF9QS1RfVElNRV90IG1heF9wa3RfdGltZTsJCS8vICAweDIwMTAKCURNQTEwV190IHJ4cV9yZF9hZGRyOwkJCQkvLyAgMHgyMDE0CglETUExMFdfdCByeHFfcmRfYWRkcl9leHQ7CQkJLy8gIDB4MjAxOAoJRE1BMTBXX3QgcnhxX3dyX2FkZHI7CQkJCS8vICAweDIwMUMKCXUzMiBwc3JfYmFzZV9sbzsJCQkJLy8gIDB4MjAyMAoJdTMyIHBzcl9iYXNlX2hpOwkJCQkvLyAgMHgyMDI0CglSWERNQV9QU1JfTlVNX0RFU190IHBzcl9udW1fZGVzOwkJLy8gIDB4MjAyOAoJUlhETUFfUFNSX0FWQUlMX09GRlNFVF90IHBzcl9hdmFpbF9vZmZzZXQ7CS8vICAweDIwMkMKCVJYRE1BX1BTUl9GVUxMX09GRlNFVF90IHBzcl9mdWxsX29mZnNldDsJLy8gIDB4MjAzMAoJUlhETUFfUFNSX0FDQ0VTU19JTkRFWF90IHBzcl9hY2Nlc3NfaW5kZXg7CS8vICAweDIwMzQKCVJYRE1BX1BTUl9NSU5fREVTX3QgcHNyX21pbl9kZXM7CQkvLyAgMHgyMDM4Cgl1MzIgZmJyMF9iYXNlX2xvOwkJCQkvLyAgMHgyMDNDCgl1MzIgZmJyMF9iYXNlX2hpOwkJCQkvLyAgMHgyMDQwCglSWERNQV9GQlJfTlVNX0RFU190IGZicjBfbnVtX2RlczsJCS8vICAweDIwNDQKCURNQTEwV190IGZicjBfYXZhaWxfb2Zmc2V0OwkJCS8vICAweDIwNDgKCURNQTEwV190IGZicjBfZnVsbF9vZmZzZXQ7CQkJLy8gIDB4MjA0QwoJUlhETUFfRkJDX1JEX0lOREVYX3QgZmJyMF9yZF9pbmRleDsJCS8vICAweDIwNTAKCVJYRE1BX0ZCUl9NSU5fREVTX3QgZmJyMF9taW5fZGVzOwkJLy8gIDB4MjA1NAoJdTMyIGZicjFfYmFzZV9sbzsJCQkJLy8gIDB4MjA1OAoJdTMyIGZicjFfYmFzZV9oaTsJCQkJLy8gIDB4MjA1QwoJUlhETUFfRkJSX05VTV9ERVNfdCBmYnIxX251bV9kZXM7CQkvLyAgMHgyMDYwCglETUExMFdfdCBmYnIxX2F2YWlsX29mZnNldDsJCQkvLyAgMHgyMDY0CglETUExMFdfdCBmYnIxX2Z1bGxfb2Zmc2V0OwkJCS8vICAweDIwNjgKCVJYRE1BX0ZCQ19SRF9JTkRFWF90IGZicjFfcmRfaW5kZXg7CQkvLyAgMHgyMDZDCglSWERNQV9GQlJfTUlOX0RFU190IGZicjFfbWluX2RlczsJCS8vICAweDIwNzAKfSBSWERNQV90LCAqUFJYRE1BX3Q7CgovKiBFTkQgT0YgUlhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCgovKiBTVEFSVCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKLyoKICogc3RydWN0dXJlIGZvciBjb250cm9sIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDAwCiAqLwp0eXBlZGVmIHVuaW9uIF9UWE1BQ19DVExfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6MjQ7CQkvLyBiaXRzIDgtMzEKCQl1MzIgY2tsc2VnX2RpYWJsZToxOwkvLyBiaXQgNwoJCXUzMiBja2JjbnRfZGlzYWJsZToxOwkvLyBiaXQgNgoJCXUzMiBja3NlZ251bToxOwkJLy8gYml0IDUKCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkvLyBiaXQgNAoJCXUzMiBmY19kaXNhYmxlOjE7CS8vIGJpdCAzCgkJdTMyIG1jaWZfZGlzYWJsZToxOwkvLyBiaXQgMgoJCXUzMiBtaWZfZGlzYWJsZToxOwkvLyBiaXQgMQoJCXUzMiB0eG1hY19lbjoxOwkJLy8gYml0IDAKI2Vsc2UKCQl1MzIgdHhtYWNfZW46MTsJCS8vIGJpdCAwCgkJdTMyIG1pZl9kaXNhYmxlOjE7CS8vIGJpdCAxIG1hYyBpbnRlcmZhY2UKCQl1MzIgbWNpZl9kaXNhYmxlOjE7CS8vIGJpdCAyIG1lbS4gY29udHIuIGludGVyZmFjZQoJCXUzMiBmY19kaXNhYmxlOjE7CS8vIGJpdCAzCgkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJLy8gYml0IDQKCQl1MzIgY2tzZWdudW06MTsJCS8vIGJpdCA1CgkJdTMyIGNrYmNudF9kaXNhYmxlOjE7CS8vIGJpdCA2CgkJdTMyIGNrbHNlZ19kaWFibGU6MTsJLy8gYml0IDcKCQl1MzIgdW51c2VkOjI0OwkJLy8gYml0cyA4LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYTUFDX0NUTF90LCAqUFRYTUFDX0NUTF90OwoKLyoKICogc3RydWN0dXJlIGZvciBzaGFkb3cgcG9pbnRlciByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwNAogKi8KdHlwZWRlZiB1bmlvbiBfVFhNQUNfU0hBRE9XX1BUUl90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmVkMjo1OwkvLyBiaXRzIDI3LTMxCgkJdTMyIHR4cV9yZF9wdHI6MTE7CS8vIGJpdHMgMTYtMjYKCQl1MzIgcmVzZXJ2ZWQ6NTsJCS8vIGJpdHMgMTEtMTUKCQl1MzIgdHhxX3dyX3B0cjoxMTsJLy8gYml0cyAwLTEwCiNlbHNlCgkJdTMyIHR4cV93cl9wdHI6MTE7CS8vIGJpdHMgMC0xMAoJCXUzMiByZXNlcnZlZDo1OwkJLy8gYml0cyAxMS0xNQoJCXUzMiB0eHFfcmRfcHRyOjExOwkvLyBiaXRzIDE2LTI2CgkJdTMyIHJlc2VydmVkMjo1OwkvLyBiaXRzIDI3LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYTUFDX1NIQURPV19QVFJfdCwgKlBUWE1BQ19TSEFET1dfUFRSX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIGNvdW50IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDA4CiAqLwp0eXBlZGVmIHVuaW9uIF9UWE1BQ19FUlJfQ05UX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQoJCXUzMiByZXNlcnZlZDo0OwkJLy8gYml0cyA4LTExCgkJdTMyIHR4cV91bmRlcnJ1bjo0OwkvLyBiaXRzIDQtNwoJCXUzMiBmaWZvX3VuZGVycnVuOjQ7CS8vIGJpdHMgMC0zCiNlbHNlCgkJdTMyIGZpZm9fdW5kZXJydW46NDsJLy8gYml0cyAwLTMKCQl1MzIgdHhxX3VuZGVycnVuOjQ7CS8vIGJpdHMgNC03CgkJdTMyIHJlc2VydmVkOjQ7CQkvLyBiaXRzIDgtMTEKCQl1MzIgdW51c2VkOjIwOwkJLy8gYml0cyAxMi0zMQojZW5kaWYKCX0gYml0czsKfSBUWE1BQ19FUlJfQ05UX3QsICpQVFhNQUNfRVJSX0NOVF90OwoKLyoKICogc3RydWN0dXJlIGZvciBtYXggZmlsbCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwQwogKi8KdHlwZWRlZiB1bmlvbiBfVFhNQUNfTUFYX0ZJTExfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCgkJdTMyIG1heF9maWxsOjEyOwkvLyBiaXRzIDAtMTEKI2Vsc2UKCQl1MzIgbWF4X2ZpbGw6MTI7CS8vIGJpdHMgMC0xMQoJCXUzMiB1bnVzZWQ6MjA7CQkvLyBiaXRzIDEyLTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYTUFDX01BWF9GSUxMX3QsICpQVFhNQUNfTUFYX0ZJTExfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgY2YgcGFyYW1ldGVyIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDEwCiAqLwp0eXBlZGVmIHVuaW9uIF9UWE1BQ19DRl9QQVJBTV90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIGNmZXA6MTY7CS8vIGJpdHMgMTYtMzEKCQl1MzIgY2ZwdDoxNjsJLy8gYml0cyAwLTE1CiNlbHNlCgkJdTMyIGNmcHQ6MTY7CS8vIGJpdHMgMC0xNQoJCXUzMiBjZmVwOjE2OwkvLyBiaXRzIDE2LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYTUFDX0NGX1BBUkFNX3QsICpQVFhNQUNfQ0ZfUEFSQU1fdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgdHggdGVzdCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxNAogKi8KdHlwZWRlZiB1bmlvbiBfVFhNQUNfVFhURVNUX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkMjoxNTsJCS8vIGJpdHMgMTctMzEKCQl1MzIgcmVzZXJ2ZWQxOjE7CS8vIGJpdCAxNgoJCXUzMiB0eHRlc3RfZW46MTsJLy8gYml0IDE1CgkJdTMyIHVudXNlZDE6NDsJCS8vIGJpdHMgMTEtMTQKCQl1MzIgdHhxdGVzdF9wdHI6MTE7CS8vIGJpdHMgMC0xMQojZWxzZQoJCXUzMiB0eHF0ZXN0X3B0cjoxMTsJLy8gYml0cyAwLTEwCgkJdTMyIHVudXNlZDE6NDsJCS8vIGJpdHMgMTEtMTQKCQl1MzIgdHh0ZXN0X2VuOjE7CS8vIGJpdCAxNQoJCXUzMiByZXNlcnZlZDE6MTsJLy8gYml0IDE2CgkJdTMyIHVudXNlZDI6MTU7CQkvLyBiaXRzIDE3LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYTUFDX1RYVEVTVF90LCAqUFRYTUFDX1RYVEVTVF90OwoKLyoKICogc3RydWN0dXJlIGZvciBlcnJvciByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxOAogKi8KdHlwZWRlZiB1bmlvbiBfVFhNQUNfRVJSX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkMjoyMzsJCS8vIGJpdHMgOS0zMQoJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CgkJdTMyIHVudXNlZDE6MjsJCS8vIGJpdHMgNi03CgkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQoJCXUzMiB0eHFfdW5kZXJydW46MTsJLy8gYml0IDQKCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCgkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgoJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCgkJdTMyIHNlZzBfZXJyOjE7CQkvLyBiaXQgMAojZWxzZQoJCXUzMiBzZWcwX2VycjoxOwkJLy8gYml0IDAKCQl1MzIgc2VnbnVtX2VycjoxOwkvLyBiaXQgMQoJCXUzMiBsc2VnX2VycjoxOwkJLy8gYml0IDIKCQl1MzIgYmNudF9lcnI6MTsJCS8vIGJpdCAzCgkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvLyBiaXQgNAoJCXUzMiBjdHJsMl9lcnI6MTsJLy8gYml0IDUKCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKCQl1MzIgZmlmb191bmRlcnJ1bjoxOwkvLyBiaXQgOAoJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYTUFDX0VSUl90LCAqUFRYTUFDX0VSUl90OwoKLyoKICogc3RydWN0dXJlIGZvciBlcnJvciBpbnRlcnJ1cHQgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMUMKICovCnR5cGVkZWYgdW5pb24gX1RYTUFDX0VSUl9JTlRfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQyOjIzOwkJLy8gYml0cyA5LTMxCgkJdTMyIGZpZm9fdW5kZXJydW46MTsJLy8gYml0IDgKCQl1MzIgdW51c2VkMToyOwkJLy8gYml0cyA2LTcKCQl1MzIgY3RybDJfZXJyOjE7CS8vIGJpdCA1CgkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvLyBiaXQgNAoJCXUzMiBiY250X2VycjoxOwkJLy8gYml0IDMKCQl1MzIgbHNlZ19lcnI6MTsJCS8vIGJpdCAyCgkJdTMyIHNlZ251bV9lcnI6MTsJLy8gYml0IDEKCQl1MzIgc2VnMF9lcnI6MTsJCS8vIGJpdCAwCiNlbHNlCgkJdTMyIHNlZzBfZXJyOjE7CQkvLyBiaXQgMAoJCXUzMiBzZWdudW1fZXJyOjE7CS8vIGJpdCAxCgkJdTMyIGxzZWdfZXJyOjE7CQkvLyBiaXQgMgoJCXUzMiBiY250X2VycjoxOwkJLy8gYml0IDMKCQl1MzIgdHhxX3VuZGVycnVuOjE7CS8vIGJpdCA0CgkJdTMyIGN0cmwyX2VycjoxOwkvLyBiaXQgNQoJCXUzMiB1bnVzZWQxOjI7CQkvLyBiaXRzIDYtNwoJCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8vIGJpdCA4CgkJdTMyIHVudXNlZDI6MjM7CQkvLyBiaXRzIDktMzEKI2VuZGlmCgl9IGJpdHM7Cn0gVFhNQUNfRVJSX0lOVF90LCAqUFRYTUFDX0VSUl9JTlRfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgZXJyb3IgaW50ZXJydXB0IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHgzMDIwCiAqLwp0eXBlZGVmIHVuaW9uIF9UWE1BQ19DUF9DVFJMX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCgkJdTMyIGJwX3JlcToxOwkJLy8gYml0IDEKCQl1MzIgYnBfeG9ueG9mZjoxOwkvLyBiaXQgMAojZWxzZQoJCXUzMiBicF94b254b2ZmOjE7CS8vIGJpdCAwCgkJdTMyIGJwX3JlcToxOwkJLy8gYml0IDEKCQl1MzIgdW51c2VkOjMwOwkJLy8gYml0cyAyLTMxCiNlbmRpZgoJfSBiaXRzOwp9IFRYTUFDX0JQX0NUUkxfdCwgKlBUWE1BQ19CUF9DVFJMX3Q7CgovKgogKiBUeCBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAqLwp0eXBlZGVmIHN0cnVjdCBfVFhNQUNfdCB7CQkvLyBMb2NhdGlvbjoKCVRYTUFDX0NUTF90IGN0bDsJCS8vICAweDMwMDAKCVRYTUFDX1NIQURPV19QVFJfdCBzaGFkb3dfcHRyOwkvLyAgMHgzMDA0CglUWE1BQ19FUlJfQ05UX3QgZXJyX2NudDsJLy8gIDB4MzAwOAoJVFhNQUNfTUFYX0ZJTExfdCBtYXhfZmlsbDsJLy8gIDB4MzAwQwoJVFhNQUNfQ0ZfUEFSQU1fdCBjZl9wYXJhbTsJLy8gIDB4MzAxMAoJVFhNQUNfVFhURVNUX3QgdHhfdGVzdDsJCS8vICAweDMwMTQKCVRYTUFDX0VSUl90IGVycjsJCS8vICAweDMwMTgKCVRYTUFDX0VSUl9JTlRfdCBlcnJfaW50OwkvLyAgMHgzMDFDCglUWE1BQ19CUF9DVFJMX3QgYnBfY3RybDsJLy8gIDB4MzAyMAp9IFRYTUFDX3QsICpQVFhNQUNfdDsKCi8qIEVORCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKLyogU1RBUlQgT0YgUlhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgcnhtYWMgY29udHJvbCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwMAogKi8KdHlwZWRlZiB1bmlvbiBfUlhNQUNfQ1RSTF90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA3LTMxCgkJdTMyIHJ4bWFjX2ludF9kaXNhYmxlOjE7CS8vIGJpdCA2CgkJdTMyIGFzeW5jX2Rpc2FibGU6MTsJCS8vIGJpdCA1CgkJdTMyIG1pZl9kaXNhYmxlOjE7CQkvLyBiaXQgNAoJCXUzMiB3b2xfZGlzYWJsZToxOwkJLy8gYml0IDMKCQl1MzIgcGt0X2ZpbHRlcl9kaXNhYmxlOjE7CS8vIGJpdCAyCgkJdTMyIG1jaWZfZGlzYWJsZToxOwkJLy8gYml0IDEKCQl1MzIgcnhtYWNfZW46MTsJCQkvLyBiaXQgMAojZWxzZQoJCXUzMiByeG1hY19lbjoxOwkJCS8vIGJpdCAwCgkJdTMyIG1jaWZfZGlzYWJsZToxOwkJLy8gYml0IDEKCQl1MzIgcGt0X2ZpbHRlcl9kaXNhYmxlOjE7CS8vIGJpdCAyCgkJdTMyIHdvbF9kaXNhYmxlOjE7CQkvLyBiaXQgMwoJCXUzMiBtaWZfZGlzYWJsZToxOwkJLy8gYml0IDQKCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkJLy8gYml0IDUKCQl1MzIgcnhtYWNfaW50X2Rpc2FibGU6MTsJLy8gYml0IDYKCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfQ1RSTF90LCAqUFJYTUFDX0NUUkxfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gQ29udHJvbCBhbmQgQ1JDIDAgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMDQKICovCnR5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9DVExfQ1JDMF90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIGNyYzA6MTY7CQkvLyBiaXRzIDE2LTMxCgkJdTMyIHJlc2VydmU6NDsJCS8vIGJpdHMgMTItMTUKCQl1MzIgaWdub3JlX3BwOjE7CS8vIGJpdCAxMQoJCXUzMiBpZ25vcmVfbXA6MTsJLy8gYml0IDEwCgkJdTMyIGNscl9pbnRyOjE7CQkvLyBiaXQgOQoJCXUzMiBpZ25vcmVfbGlua19jaGc6MTsJLy8gYml0IDgKCQl1MzIgaWdub3JlX3VuaToxOwkvLyBiaXQgNwoJCXUzMiBpZ25vcmVfbXVsdGk6MTsJLy8gYml0IDYKCQl1MzIgaWdub3JlX2Jyb2FkOjE7CS8vIGJpdCA1CgkJdTMyIHZhbGlkX2NyYzQ6MTsJLy8gYml0IDQKCQl1MzIgdmFsaWRfY3JjMzoxOwkvLyBiaXQgMwoJCXUzMiB2YWxpZF9jcmMyOjE7CS8vIGJpdCAyCgkJdTMyIHZhbGlkX2NyYzE6MTsJLy8gYml0IDEKCQl1MzIgdmFsaWRfY3JjMDoxOwkvLyBiaXQgMAojZWxzZQoJCXUzMiB2YWxpZF9jcmMwOjE7CS8vIGJpdCAwCgkJdTMyIHZhbGlkX2NyYzE6MTsJLy8gYml0IDEKCQl1MzIgdmFsaWRfY3JjMjoxOwkvLyBiaXQgMgoJCXUzMiB2YWxpZF9jcmMzOjE7CS8vIGJpdCAzCgkJdTMyIHZhbGlkX2NyYzQ6MTsJLy8gYml0IDQKCQl1MzIgaWdub3JlX2Jyb2FkOjE7CS8vIGJpdCA1CgkJdTMyIGlnbm9yZV9tdWx0aToxOwkvLyBiaXQgNgoJCXUzMiBpZ25vcmVfdW5pOjE7CS8vIGJpdCA3CgkJdTMyIGlnbm9yZV9saW5rX2NoZzoxOwkvLyBiaXQgOAoJCXUzMiBjbHJfaW50cjoxOwkJLy8gYml0IDkKCQl1MzIgaWdub3JlX21wOjE7CS8vIGJpdCAxMAoJCXUzMiBpZ25vcmVfcHA6MTsJLy8gYml0IDExCgkJdTMyIHJlc2VydmU6NDsJCS8vIGJpdHMgMTItMTUKCQl1MzIgY3JjMDoxNjsJCS8vIGJpdHMgMTYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfV09MX0NUTF9DUkMwX3QsICpQUlhNQUNfV09MX0NUTF9DUkMwX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIENSQyAxIGFuZCBDUkMgMiByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwOAogKi8KdHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX0NSQzEyX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgY3JjMjoxNjsJLy8gYml0cyAxNi0zMQoJCXUzMiBjcmMxOjE2OwkvLyBiaXRzIDAtMTUKI2Vsc2UKCQl1MzIgY3JjMToxNjsJLy8gYml0cyAwLTE1CgkJdTMyIGNyYzI6MTY7CS8vIGJpdHMgMTYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfV09MX0NSQzEyX3QsICpQUlhNQUNfV09MX0NSQzEyX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIENSQyAzIGFuZCBDUkMgNCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwQwogKi8KdHlwZWRlZiB1bmlvbiBfUlhNQUNfV09MX0NSQzM0X3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgY3JjNDoxNjsJLy8gYml0cyAxNi0zMQoJCXUzMiBjcmMzOjE2OwkvLyBiaXRzIDAtMTUKI2Vsc2UKCQl1MzIgY3JjMzoxNjsJLy8gYml0cyAwLTE1CgkJdTMyIGNyYzQ6MTY7CS8vIGJpdHMgMTYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfV09MX0NSQzM0X3QsICpQUlhNQUNfV09MX0NSQzM0X3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIFNvdXJjZSBBZGRyZXNzIExvIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDEwCiAqLwp0eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfU0FfTE9fdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiBzYTM6ODsJLy8gYml0cyAyNC0zMQoJCXUzMiBzYTQ6ODsJLy8gYml0cyAxNi0yMwoJCXUzMiBzYTU6ODsJLy8gYml0cyA4LTE1CgkJdTMyIHNhNjo4OwkvLyBiaXRzIDAtNwojZWxzZQoJCXUzMiBzYTY6ODsJLy8gYml0cyAwLTcKCQl1MzIgc2E1Ojg7CS8vIGJpdHMgOC0xNQoJCXUzMiBzYTQ6ODsJLy8gYml0cyAxNi0yMwoJCXUzMiBzYTM6ODsJLy8gYml0cyAyNC0zMQojZW5kaWYKCX0gYml0czsKfSBSWE1BQ19XT0xfU0FfTE9fdCwgKlBSWE1BQ19XT0xfU0FfTE9fdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gU291cmNlIEFkZHJlc3MgSGkgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMTQKICovCnR5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9TQV9ISV90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCgkJdTMyIHNhMTo4OwkJLy8gYml0cyA4LTE1CgkJdTMyIHNhMjo4OwkJLy8gYml0cyAwLTcKI2Vsc2UKCQl1MzIgc2EyOjg7CQkvLyBiaXRzIDAtNwoJCXUzMiBzYTE6ODsJCS8vIGJpdHMgOC0xNQoJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQojZW5kaWYKCX0gYml0czsKfSBSWE1BQ19XT0xfU0FfSElfdCwgKlBSWE1BQ19XT0xfU0FfSElfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgV2FrZSBPbiBMYW4gbWFzayByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAxOCAtIDB4NDA2NAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIFVuaWNhc3QgUGFrZXQgRmlsdGVyIEFkZHJlc3MgMSByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA2OAogKi8KdHlwZWRlZiB1bmlvbiBfUlhNQUNfVU5JX1BGX0FERFIxX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgYWRkcjFfMzo4OwkvLyBiaXRzIDI0LTMxCgkJdTMyIGFkZHIxXzQ6ODsJLy8gYml0cyAxNi0yMwoJCXUzMiBhZGRyMV81Ojg7CS8vIGJpdHMgOC0xNQoJCXUzMiBhZGRyMV82Ojg7CS8vIGJpdHMgMC03CiNlbHNlCgkJdTMyIGFkZHIxXzY6ODsJLy8gYml0cyAwLTcKCQl1MzIgYWRkcjFfNTo4OwkvLyBiaXRzIDgtMTUKCQl1MzIgYWRkcjFfNDo4OwkvLyBiaXRzIDE2LTIzCgkJdTMyIGFkZHIxXzM6ODsJLy8gYml0cyAyNC0zMQojZW5kaWYKCX0gYml0czsKfSBSWE1BQ19VTklfUEZfQUREUjFfdCwgKlBSWE1BQ19VTklfUEZfQUREUjFfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgVW5pY2FzdCBQYWtldCBGaWx0ZXIgQWRkcmVzcyAyIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDZDCiAqLwp0eXBlZGVmIHVuaW9uIF9SWE1BQ19VTklfUEZfQUREUjJfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiBhZGRyMl8zOjg7CS8vIGJpdHMgMjQtMzEKCQl1MzIgYWRkcjJfNDo4OwkvLyBiaXRzIDE2LTIzCgkJdTMyIGFkZHIyXzU6ODsJLy8gYml0cyA4LTE1CgkJdTMyIGFkZHIyXzY6ODsJLy8gYml0cyAwLTcKI2Vsc2UKCQl1MzIgYWRkcjJfNjo4OwkvLyBiaXRzIDAtNwoJCXUzMiBhZGRyMl81Ojg7CS8vIGJpdHMgOC0xNQoJCXUzMiBhZGRyMl80Ojg7CS8vIGJpdHMgMTYtMjMKCQl1MzIgYWRkcjJfMzo4OwkvLyBiaXRzIDI0LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFJYTUFDX1VOSV9QRl9BRERSMl90LCAqUFJYTUFDX1VOSV9QRl9BRERSMl90OwoKLyoKICogc3RydWN0dXJlIGZvciBVbmljYXN0IFBha2V0IEZpbHRlciBBZGRyZXNzIDEgJiAyIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDcwCiAqLwp0eXBlZGVmIHVuaW9uIF9SWE1BQ19VTklfUEZfQUREUjNfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiBhZGRyMl8xOjg7CS8vIGJpdHMgMjQtMzEKCQl1MzIgYWRkcjJfMjo4OwkvLyBiaXRzIDE2LTIzCgkJdTMyIGFkZHIxXzE6ODsJLy8gYml0cyA4LTE1CgkJdTMyIGFkZHIxXzI6ODsJLy8gYml0cyAwLTcKI2Vsc2UKCQl1MzIgYWRkcjFfMjo4OwkvLyBiaXRzIDAtNwoJCXUzMiBhZGRyMV8xOjg7CS8vIGJpdHMgOC0xNQoJCXUzMiBhZGRyMl8yOjg7CS8vIGJpdHMgMTYtMjMKCQl1MzIgYWRkcjJfMTo4OwkvLyBiaXRzIDI0LTMxCiNlbmRpZgoJfSBiaXRzOwp9IFJYTUFDX1VOSV9QRl9BRERSM190LCAqUFJYTUFDX1VOSV9QRl9BRERSM190OwoKLyoKICogc3RydWN0dXJlIGZvciBNdWx0aWNhc3QgSGFzaCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA3NCAtIDB4NDA4MAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIFBhY2tldCBGaWx0ZXIgQ29udHJvbCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA4NAogKi8KdHlwZWRlZiB1bmlvbiBfUlhNQUNfUEZfQ1RSTF90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHVudXNlZDI6OTsJCS8vIGJpdHMgMjMtMzEKCQl1MzIgbWluX3BrdF9zaXplOjc7CS8vIGJpdHMgMTYtMjIKCQl1MzIgdW51c2VkMToxMjsJCS8vIGJpdHMgNC0xNQoJCXUzMiBmaWx0ZXJfZnJhZ19lbjoxOwkvLyBiaXQgMwoJCXUzMiBmaWx0ZXJfdW5pX2VuOjE7CS8vIGJpdCAyCgkJdTMyIGZpbHRlcl9tdWx0aV9lbjoxOwkvLyBiaXQgMQoJCXUzMiBmaWx0ZXJfYnJvYWRfZW46MTsJLy8gYml0IDAKI2Vsc2UKCQl1MzIgZmlsdGVyX2Jyb2FkX2VuOjE7CS8vIGJpdCAwCgkJdTMyIGZpbHRlcl9tdWx0aV9lbjoxOwkvLyBiaXQgMQoJCXUzMiBmaWx0ZXJfdW5pX2VuOjE7CS8vIGJpdCAyCgkJdTMyIGZpbHRlcl9mcmFnX2VuOjE7CS8vIGJpdCAzCgkJdTMyIHVudXNlZDE6MTI7CQkvLyBiaXRzIDQtMTUKCQl1MzIgbWluX3BrdF9zaXplOjc7CS8vIGJpdHMgMTYtMjIKCQl1MzIgdW51c2VkMjo5OwkJLy8gYml0cyAyMy0zMQojZW5kaWYKCX0gYml0czsKfSBSWE1BQ19QRl9DVFJMX3QsICpQUlhNQUNfUEZfQ1RSTF90OwoKLyoKICogc3RydWN0dXJlIGZvciBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgQ29udHJvbCBNYXggU2VnbWVudCByZWcgaW4gcnhtYWMKICogYWRkcmVzcyBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDg4CiAqLwp0eXBlZGVmIHVuaW9uIF9SWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmVkOjIyOwkvLyBiaXRzIDEwLTMxCgkJdTMyIG1heF9zaXplOjg7CS8vIGJpdHMgMi05CgkJdTMyIGZjX2VuOjE7CS8vIGJpdCAxCgkJdTMyIHNlZ19lbjoxOwkvLyBiaXQgMAojZWxzZQoJCXUzMiBzZWdfZW46MTsJLy8gYml0IDAKCQl1MzIgZmNfZW46MTsJLy8gYml0IDEKCQl1MzIgbWF4X3NpemU6ODsJLy8gYml0cyAyLTkKCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8vIGJpdHMgMTAtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCwgKlBSWE1BQ19NQ0lGX0NUUkxfTUFYX1NFR190OwoKLyoKICogc3RydWN0dXJlIGZvciBNZW1vcnkgQ29udHJvbGxlciBJbnRlcmZhY2UgV2F0ZXIgTWFyayByZWcgaW4gcnhtYWMgYWRkcmVzcwogKiBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDhDCiAqLwp0eXBlZGVmIHVuaW9uIF9SWE1BQ19NQ0lGX1dBVEVSX01BUktfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiByZXNlcnZlZDI6NjsJLy8gYml0cyAyNi0zMQoJCXUzMiBtYXJrX2hpOjEwOwkvLyBiaXRzIDE2LTI1CgkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CgkJdTMyIG1hcmtfbG86MTA7CS8vIGJpdHMgMC05CiNlbHNlCgkJdTMyIG1hcmtfbG86MTA7CS8vIGJpdHMgMC05CgkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CgkJdTMyIG1hcmtfaGk6MTA7CS8vIGJpdHMgMTYtMjUKCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3QsICpQUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIFJ4IFF1ZXVlIERpYWxvZyByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTAKICovCnR5cGVkZWYgdW5pb24gX1JYTUFDX1JYUV9ESUFHX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKCQl1MzIgcmRfcHRyOjEwOwkvLyBiaXRzIDE2LTI1CgkJdTMyIHJlc2VydmVkMTo2OwkvLyBiaXRzIDEwLTE1CgkJdTMyIHdyX3B0cjoxMDsJLy8gYml0cyAwLTkKI2Vsc2UKCQl1MzIgd3JfcHRyOjEwOwkvLyBiaXRzIDAtOQoJCXUzMiByZXNlcnZlZDE6NjsJLy8gYml0cyAxMC0xNQoJCXUzMiByZF9wdHI6MTA7CS8vIGJpdHMgMTYtMjUKCQl1MzIgcmVzZXJ2ZWQyOjY7CS8vIGJpdHMgMjYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfUlhRX0RJQUdfdCwgKlBSWE1BQ19SWFFfRElBR190OwoKLyoKICogc3RydWN0dXJlIGZvciBzcGFjZSBhdmFpbGlhYmxlIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5NAogKi8KdHlwZWRlZiB1bmlvbiBfUlhNQUNfU1BBQ0VfQVZBSUxfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiByZXNlcnZlZDI6MTU7CQkvLyBiaXRzIDE3LTMxCgkJdTMyIHNwYWNlX2F2YWlsX2VuOjE7CS8vIGJpdCAxNgoJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMTAtMTUKCQl1MzIgc3BhY2VfYXZhaWw6MTA7CS8vIGJpdHMgMC05CiNlbHNlCgkJdTMyIHNwYWNlX2F2YWlsOjEwOwkvLyBiaXRzIDAtOQoJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMTAtMTUKCQl1MzIgc3BhY2VfYXZhaWxfZW46MTsJLy8gYml0IDE2CgkJdTMyIHJlc2VydmVkMjoxNTsJCS8vIGJpdHMgMTctMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfU1BBQ0VfQVZBSUxfdCwgKlBSWE1BQ19TUEFDRV9BVkFJTF90OwoKLyoKICogc3RydWN0dXJlIGZvciBtYW5hZ2VtZW50IGludGVyZmFjZSByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTgKICovCnR5cGVkZWYgdW5pb24gX1JYTUFDX01JRl9DVExfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiByZXNlcnZlOjE0OwkJLy8gYml0cyAxOC0zMQoJCXUzMiBkcm9wX3BrdF9lbjoxOwkJLy8gYml0IDE3CgkJdTMyIGRyb3BfcGt0X21hc2s6MTc7CS8vIGJpdHMgMC0xNgojZWxzZQoJCXUzMiBkcm9wX3BrdF9tYXNrOjE3OwkvLyBiaXRzIDAtMTYKCQl1MzIgZHJvcF9wa3RfZW46MTsJCS8vIGJpdCAxNwoJCXUzMiByZXNlcnZlOjE0OwkJLy8gYml0cyAxOC0zMQojZW5kaWYKCX0gYml0czsKfSBSWE1BQ19NSUZfQ1RMX3QsICpQUlhNQUNfTUlGX0NUTF90OwoKLyoKICogc3RydWN0dXJlIGZvciBFcnJvciByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOUMKICovCnR5cGVkZWYgdW5pb24gX1JYTUFDX0VSUk9SX1JFR190IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmU6Mjg7CS8vIGJpdHMgNC0zMQoJCXUzMiBtaWY6MTsJCS8vIGJpdCAzCgkJdTMyIGFzeW5jOjE7CS8vIGJpdCAyCgkJdTMyIHBrdF9maWx0ZXI6MTsJLy8gYml0IDEKCQl1MzIgbWNpZjoxOwkvLyBiaXQgMAojZWxzZQoJCXUzMiBtY2lmOjE7CS8vIGJpdCAwCgkJdTMyIHBrdF9maWx0ZXI6MTsJLy8gYml0IDEKCQl1MzIgYXN5bmM6MTsJLy8gYml0IDIKCQl1MzIgbWlmOjE7CQkvLyBiaXQgMwoJCXUzMiByZXNlcnZlOjI4OwkvLyBiaXRzIDQtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gUlhNQUNfRVJST1JfUkVHX3QsICpQUlhNQUNfRVJST1JfUkVHX3Q7CgovKgogKiBSeCBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAqLwp0eXBlZGVmIHN0cnVjdCBfUlhNQUNfdCB7CQkJCS8vIExvY2F0aW9uOgoJUlhNQUNfQ1RSTF90IGN0cmw7CQkJCS8vICAweDQwMDAKCVJYTUFDX1dPTF9DVExfQ1JDMF90IGNyYzA7CQkJLy8gIDB4NDAwNAoJUlhNQUNfV09MX0NSQzEyX3QgY3JjMTI7CQkJLy8gIDB4NDAwOAoJUlhNQUNfV09MX0NSQzM0X3QgY3JjMzQ7CQkJLy8gIDB4NDAwQwoJUlhNQUNfV09MX1NBX0xPX3Qgc2FfbG87CQkJLy8gIDB4NDAxMAoJUlhNQUNfV09MX1NBX0hJX3Qgc2FfaGk7CQkJLy8gIDB4NDAxNAoJdTMyIG1hc2swX3dvcmQwOwkJCQkvLyAgMHg0MDE4Cgl1MzIgbWFzazBfd29yZDE7CQkJCS8vICAweDQwMUMKCXUzMiBtYXNrMF93b3JkMjsJCQkJLy8gIDB4NDAyMAoJdTMyIG1hc2swX3dvcmQzOwkJCQkvLyAgMHg0MDI0Cgl1MzIgbWFzazFfd29yZDA7CQkJCS8vICAweDQwMjgKCXUzMiBtYXNrMV93b3JkMTsJCQkJLy8gIDB4NDAyQwoJdTMyIG1hc2sxX3dvcmQyOwkJCQkvLyAgMHg0MDMwCgl1MzIgbWFzazFfd29yZDM7CQkJCS8vICAweDQwMzQKCXUzMiBtYXNrMl93b3JkMDsJCQkJLy8gIDB4NDAzOAoJdTMyIG1hc2syX3dvcmQxOwkJCQkvLyAgMHg0MDNDCgl1MzIgbWFzazJfd29yZDI7CQkJCS8vICAweDQwNDAKCXUzMiBtYXNrMl93b3JkMzsJCQkJLy8gIDB4NDA0NAoJdTMyIG1hc2szX3dvcmQwOwkJCQkvLyAgMHg0MDQ4Cgl1MzIgbWFzazNfd29yZDE7CQkJCS8vICAweDQwNEMKCXUzMiBtYXNrM193b3JkMjsJCQkJLy8gIDB4NDA1MAoJdTMyIG1hc2szX3dvcmQzOwkJCQkvLyAgMHg0MDU0Cgl1MzIgbWFzazRfd29yZDA7CQkJCS8vICAweDQwNTgKCXUzMiBtYXNrNF93b3JkMTsJCQkJLy8gIDB4NDA1QwoJdTMyIG1hc2s0X3dvcmQyOwkJCQkvLyAgMHg0MDYwCgl1MzIgbWFzazRfd29yZDM7CQkJCS8vICAweDQwNjQKCVJYTUFDX1VOSV9QRl9BRERSMV90IHVuaV9wZl9hZGRyMTsJCS8vICAweDQwNjgKCVJYTUFDX1VOSV9QRl9BRERSMl90IHVuaV9wZl9hZGRyMjsJCS8vICAweDQwNkMKCVJYTUFDX1VOSV9QRl9BRERSM190IHVuaV9wZl9hZGRyMzsJCS8vICAweDQwNzAKCXUzMiBtdWx0aV9oYXNoMTsJCQkJLy8gIDB4NDA3NAoJdTMyIG11bHRpX2hhc2gyOwkJCQkvLyAgMHg0MDc4Cgl1MzIgbXVsdGlfaGFzaDM7CQkJCS8vICAweDQwN0MKCXUzMiBtdWx0aV9oYXNoNDsJCQkJLy8gIDB4NDA4MAoJUlhNQUNfUEZfQ1RSTF90IHBmX2N0cmw7CQkJLy8gIDB4NDA4NAoJUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCBtY2lmX2N0cmxfbWF4X3NlZzsJLy8gIDB4NDA4OAoJUlhNQUNfTUNJRl9XQVRFUl9NQVJLX3QgbWNpZl93YXRlcl9tYXJrOwkvLyAgMHg0MDhDCglSWE1BQ19SWFFfRElBR190IHJ4cV9kaWFnOwkJCS8vICAweDQwOTAKCVJYTUFDX1NQQUNFX0FWQUlMX3Qgc3BhY2VfYXZhaWw7CQkvLyAgMHg0MDk0CgoJUlhNQUNfTUlGX0NUTF90IG1pZl9jdHJsOwkJCS8vICAweDQwOTgKCVJYTUFDX0VSUk9SX1JFR190IGVycl9yZWc7CQkJLy8gIDB4NDA5Qwp9IFJYTUFDX3QsICpQUlhNQUNfdDsKCi8qIEVORCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKCi8qIFNUQVJUIE9GIE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKLyoKICogc3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uICMxIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMDAKICovCnR5cGVkZWYgdW5pb24gX01BQ19DRkcxX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgc29mdF9yZXNldDoxOwkJLy8gYml0IDMxCgkJdTMyIHNpbV9yZXNldDoxOwkJLy8gYml0IDMwCgkJdTMyIHJlc2VydmVkMzoxMDsJCS8vIGJpdHMgMjAtMjkKCQl1MzIgcmVzZXRfcnhfbWM6MTsJCS8vIGJpdCAxOQoJCXUzMiByZXNldF90eF9tYzoxOwkJLy8gYml0IDE4CgkJdTMyIHJlc2V0X3J4X2Z1bjoxOwkvLyBiaXQgMTcKCQl1MzIgcmVzZXRfdHhfZnVuOjE7CS8vIGJpdCAxNgoJCXUzMiByZXNlcnZlZDI6NzsJCS8vIGJpdHMgOS0xNQoJCXUzMiBsb29wX2JhY2s6MTsJCS8vIGJpdCA4CgkJdTMyIHJlc2VydmVkMToyOwkJLy8gYml0cyA2LTcKCQl1MzIgcnhfZmxvdzoxOwkJLy8gYml0IDUKCQl1MzIgdHhfZmxvdzoxOwkJLy8gYml0IDQKCQl1MzIgc3luY2RfcnhfZW46MTsJCS8vIGJpdCAzCgkJdTMyIHJ4X2VuYWJsZToxOwkJLy8gYml0IDIKCQl1MzIgc3luY2RfdHhfZW46MTsJCS8vIGJpdCAxCgkJdTMyIHR4X2VuYWJsZToxOwkJLy8gYml0IDAKI2Vsc2UKCQl1MzIgdHhfZW5hYmxlOjE7CQkvLyBiaXQgMAoJCXUzMiBzeW5jZF90eF9lbjoxOwkJLy8gYml0IDEKCQl1MzIgcnhfZW5hYmxlOjE7CQkvLyBiaXQgMgoJCXUzMiBzeW5jZF9yeF9lbjoxOwkJLy8gYml0IDMKCQl1MzIgdHhfZmxvdzoxOwkJLy8gYml0IDQKCQl1MzIgcnhfZmxvdzoxOwkJLy8gYml0IDUKCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNwoJCXUzMiBsb29wX2JhY2s6MTsJCS8vIGJpdCA4CgkJdTMyIHJlc2VydmVkMjo3OwkJLy8gYml0cyA5LTE1CgkJdTMyIHJlc2V0X3R4X2Z1bjoxOwkvLyBiaXQgMTYKCQl1MzIgcmVzZXRfcnhfZnVuOjE7CS8vIGJpdCAxNwoJCXUzMiByZXNldF90eF9tYzoxOwkJLy8gYml0IDE4CgkJdTMyIHJlc2V0X3J4X21jOjE7CQkvLyBiaXQgMTkKCQl1MzIgcmVzZXJ2ZWQzOjEwOwkJLy8gYml0cyAyMC0yOQoJCXUzMiBzaW1fcmVzZXQ6MTsJCS8vIGJpdCAzMAoJCXUzMiBzb2Z0X3Jlc2V0OjE7CQkvLyBiaXQgMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUFDX0NGRzFfdCwgKlBNQUNfQ0ZHMV90OwoKLyoKICogc3RydWN0dXJlIGZvciBjb25maWd1cmF0aW9uICMyIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMDQKICovCnR5cGVkZWYgdW5pb24gX01BQ19DRkcyX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXJ2ZWQzOjE2OwkJLy8gYml0cyAxNi0zMQoJCXUzMiBwcmVhbWJsZV9sZW46NDsJLy8gYml0cyAxMi0xNQoJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTAtMTEKCQl1MzIgaWZfbW9kZToyOwkJLy8gYml0cyA4LTkKCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNwoJCXUzMiBodWdlX2ZyYW1lOjE7CQkvLyBiaXQgNQoJCXUzMiBsZW5fY2hlY2s6MTsJCS8vIGJpdCA0CgkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKCQl1MzIgcGFkX2NyYzoxOwkJLy8gYml0IDIKCQl1MzIgY3JjX2VuYWJsZToxOwkJLy8gYml0IDEKCQl1MzIgZnVsbF9kdXBsZXg6MTsJCS8vIGJpdCAwCiNlbHNlCgkJdTMyIGZ1bGxfZHVwbGV4OjE7CQkvLyBiaXQgMAoJCXUzMiBjcmNfZW5hYmxlOjE7CQkvLyBiaXQgMQoJCXUzMiBwYWRfY3JjOjE7CQkvLyBiaXQgMgoJCXUzMiB1bmRlZmluZWQ6MTsJCS8vIGJpdCAzCgkJdTMyIGxlbl9jaGVjazoxOwkJLy8gYml0IDQKCQl1MzIgaHVnZV9mcmFtZToxOwkJLy8gYml0IDUKCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDYtNwoJCXUzMiBpZl9tb2RlOjI7CQkvLyBiaXRzIDgtOQoJCXUzMiByZXNlcnZlZDI6MjsJCS8vIGJpdHMgMTAtMTEKCQl1MzIgcHJlYW1ibGVfbGVuOjQ7CS8vIGJpdHMgMTItMTUKCQl1MzIgcmVzZXJ2ZWQzOjE2OwkJLy8gYml0cyAxNi0zMQojZW5kaWYKCX0gYml0czsKfSBNQUNfQ0ZHMl90LCAqUE1BQ19DRkcyX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIEludGVycGFja2V0IGdhcCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDA4CiAqLwp0eXBlZGVmIHVuaW9uIF9NQUNfSVBHX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXJ2ZWQ6MTsJCS8vIGJpdCAzMQoJCXUzMiBub25fQjJCX2lwZ18xOjc7CS8vIGJpdHMgMjQtMzAKCQl1MzIgdW5kZWZpbmVkMjoxOwkJLy8gYml0IDIzCgkJdTMyIG5vbl9CMkJfaXBnXzI6NzsJLy8gYml0cyAxNi0yMgoJCXUzMiBtaW5faWZnX2VuZm9yY2U6ODsJLy8gYml0cyA4LTE1CgkJdTMyIHVuZGVmaW5lZDE6MTsJCS8vIGJpdCA3CgkJdTMyIEIyQl9pcGc6NzsJCS8vIGJpdHMgMC02CiNlbHNlCgkJdTMyIEIyQl9pcGc6NzsJCS8vIGJpdHMgMC02CgkJdTMyIHVuZGVmaW5lZDE6MTsJCS8vIGJpdCA3CgkJdTMyIG1pbl9pZmdfZW5mb3JjZTo4OwkvLyBiaXRzIDgtMTUKCQl1MzIgbm9uX0IyQl9pcGdfMjo3OwkvLyBiaXRzIDE2LTIyCgkJdTMyIHVuZGVmaW5lZDI6MTsJCS8vIGJpdCAyMwoJCXUzMiBub25fQjJCX2lwZ18xOjc7CS8vIGJpdHMgMjQtMzAKCQl1MzIgcmVzZXJ2ZWQ6MTsJCS8vIGJpdCAzMQojZW5kaWYKCX0gYml0czsKfSBNQUNfSVBHX3QsICpQTUFDX0lQR190OwoKLyoKICogc3RydWN0dXJlIGZvciBoYWxmIGR1cGxleCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDBDCiAqLwp0eXBlZGVmIHVuaW9uIF9NQUNfSEZEUF90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmVkMjo4OwkJLy8gYml0cyAyNC0zMQoJCXUzMiBhbHRfYmViX3RydW5jOjQ7CS8vIGJpdHMgMjMtMjAKCQl1MzIgYWx0X2JlYl9lbmFibGU6MTsJLy8gYml0IDE5CgkJdTMyIGJwX25vX2JhY2tvZmY6MTsJLy8gYml0IDE4CgkJdTMyIG5vX2JhY2tvZmY6MTsJCS8vIGJpdCAxNwoJCXUzMiBleGNlc3NfZGVmZXI6MTsJLy8gYml0IDE2CgkJdTMyIHJleG1pdF9tYXg6NDsJCS8vIGJpdHMgMTItMTUKCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDEwLTExCgkJdTMyIGNvbGxfd2luZG93OjEwOwkvLyBiaXRzIDAtOQojZWxzZQoJCXUzMiBjb2xsX3dpbmRvdzoxMDsJLy8gYml0cyAwLTkKCQl1MzIgcmVzZXJ2ZWQxOjI7CQkvLyBiaXRzIDEwLTExCgkJdTMyIHJleG1pdF9tYXg6NDsJCS8vIGJpdHMgMTItMTUKCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8vIGJpdCAxNgoJCXUzMiBub19iYWNrb2ZmOjE7CQkvLyBiaXQgMTcKCQl1MzIgYnBfbm9fYmFja29mZjoxOwkvLyBiaXQgMTgKCQl1MzIgYWx0X2JlYl9lbmFibGU6MTsJLy8gYml0IDE5CgkJdTMyIGFsdF9iZWJfdHJ1bmM6NDsJLy8gYml0cyAyMy0yMAoJCXUzMiByZXNlcnZlZDI6ODsJCS8vIGJpdHMgMjQtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUFDX0hGRFBfdCwgKlBNQUNfSEZEUF90OwoKLyoKICogc3RydWN0dXJlIGZvciBNYXhpbXVtIEZyYW1lIExlbmd0aCByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDEwCiAqLwp0eXBlZGVmIHVuaW9uIF9NQUNfTUFYX0ZNX0xFTl90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXRzIDE2LTMxCgkJdTMyIG1heF9sZW46MTY7CS8vIGJpdHMgMC0xNQojZWxzZQoJCXUzMiBtYXhfbGVuOjE2OwkvLyBiaXRzIDAtMTUKCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUFDX01BWF9GTV9MRU5fdCwgKlBNQUNfTUFYX0ZNX0xFTl90OwoKLyoKICogc3RydWN0dXJlIGZvciBSZXNlcnZlIDEgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxNCAtIDB4NTAxOAogKiBEZWZpbmVkIGVhcmxpZXIgKHUzMikKICovCgovKgogKiBzdHJ1Y3R1cmUgZm9yIFRlc3QgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAxQwogKi8KdHlwZWRlZiB1bmlvbiBfTUFDX1RFU1RfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6Mjk7CS8vIGJpdHMgMy0zMQoJCXUzMiBtYWNfdGVzdDozOwkvLyBiaXRzIDAtMgojZWxzZQoJCXUzMiBtYWNfdGVzdDozOwkvLyBiaXRzIDAtMgoJCXUzMiB1bnVzZWQ6Mjk7CS8vIGJpdHMgMy0zMQojZW5kaWYKCX0gYml0czsKfSBNQUNfVEVTVF90LCAqUE1BQ19URVNUX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24gcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyMAogKi8KdHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQ0ZHX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXRfbWlpX21nbXQ6MTsJLy8gYml0IDMxCgkJdTMyIHJlc2VydmVkOjI1OwkJLy8gYml0cyA2LTMwCgkJdTMyIHNjYW5fYXV0b19pbmNyZW10OjE7CS8vIGJpdCA1CgkJdTMyIHByZWFtYmxlX3N1cHByZXNzOjE7CS8vIGJpdCA0CgkJdTMyIHVuZGVmaW5lZDoxOwkJLy8gYml0IDMKCQl1MzIgbWdtdF9jbGtfcmVzZXQ6MzsJLy8gYml0cyAwLTIKI2Vsc2UKCQl1MzIgbWdtdF9jbGtfcmVzZXQ6MzsJLy8gYml0cyAwLTIKCQl1MzIgdW5kZWZpbmVkOjE7CQkvLyBiaXQgMwoJCXUzMiBwcmVhbWJsZV9zdXBwcmVzczoxOwkvLyBiaXQgNAoJCXUzMiBzY2FuX2F1dG9faW5jcmVtdDoxOwkvLyBiaXQgNQoJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNi0zMAoJCXUzMiByZXNldF9taWlfbWdtdDoxOwkvLyBiaXQgMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUlJX01HTVRfQ0ZHX3QsICpQTUlJX01HTVRfQ0ZHX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IENvbW1hbmQgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyNAogKi8KdHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQ01EX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXJ2ZWQ6MzA7CS8vIGJpdHMgMi0zMQoJCXUzMiBzY2FuX2N5Y2xlOjE7CS8vIGJpdCAxCgkJdTMyIHJlYWRfY3ljbGU6MTsJLy8gYml0IDAKI2Vsc2UKCQl1MzIgcmVhZF9jeWNsZToxOwkvLyBiaXQgMAoJCXUzMiBzY2FuX2N5Y2xlOjE7CS8vIGJpdCAxCgkJdTMyIHJlc2VydmVkOjMwOwkvLyBiaXRzIDItMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUlJX01HTVRfQ01EX3QsICpQTUlJX01HTVRfQ01EX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIE1JSSBNYW5hZ2VtZW50IEFkZHJlc3MgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAyOAogKi8KdHlwZWRlZiB1bmlvbiBfTUlJX01HTVRfQUREUl90IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIHJlc2VydmVkMjoxOTsJLy8gYml0IDEzLTMxCgkJdTMyIHBoeV9hZGRyOjU7CS8vIGJpdHMgOC0xMgoJCXUzMiByZXNlcnZlZDE6MzsJLy8gYml0cyA1LTcKCQl1MzIgcmVnX2FkZHI6NTsJLy8gYml0cyAwLTQKI2Vsc2UKCQl1MzIgcmVnX2FkZHI6NTsJLy8gYml0cyAwLTQKCQl1MzIgcmVzZXJ2ZWQxOjM7CS8vIGJpdHMgNS03CgkJdTMyIHBoeV9hZGRyOjU7CS8vIGJpdHMgOC0xMgoJCXUzMiByZXNlcnZlZDI6MTk7CS8vIGJpdCAxMy0zMQojZW5kaWYKCX0gYml0czsKfSBNSUlfTUdNVF9BRERSX3QsICpQTUlJX01HTVRfQUREUl90OwoKLyoKICogc3RydWN0dXJlIGZvciBNSUkgTWFuYWdlbWVudCBDb250cm9sIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMkMKICovCnR5cGVkZWYgdW5pb24gX01JSV9NR01UX0NUUkxfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQoJCXUzMiBwaHlfY3RybDoxNjsJLy8gYml0cyAwLTE1CiNlbHNlCgkJdTMyIHBoeV9jdHJsOjE2OwkvLyBiaXRzIDAtMTUKCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUlJX01HTVRfQ1RSTF90LCAqUE1JSV9NR01UX0NUUkxfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgU3RhdHVzIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMzAKICovCnR5cGVkZWYgdW5pb24gX01JSV9NR01UX1NUQVRfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAxNi0zMQoJCXUzMiBwaHlfc3RhdDoxNjsJLy8gYml0cyAwLTE1CiNlbHNlCgkJdTMyIHBoeV9zdGF0OjE2OwkvLyBiaXRzIDAtMTUKCQl1MzIgcmVzZXJ2ZWQ6MTY7CS8vIGJpdHMgMTYtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUlJX01HTVRfU1RBVF90LCAqUE1JSV9NR01UX1NUQVRfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgTUlJIE1hbmFnZW1lbnQgSW5kaWNhdG9ycyByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgogKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg1MDM0CiAqLwp0eXBlZGVmIHVuaW9uIF9NSUlfTUdNVF9JTkRJQ0FUT1JfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiByZXNlcnZlZDoyOTsJLy8gYml0cyAzLTMxCgkJdTMyIG5vdF92YWxpZDoxOwkvLyBiaXQgMgoJCXUzMiBzY2FubmluZzoxOwkvLyBiaXQgMQoJCXUzMiBidXN5OjE7CS8vIGJpdCAwCiNlbHNlCgkJdTMyIGJ1c3k6MTsJLy8gYml0IDAKCQl1MzIgc2Nhbm5pbmc6MTsJLy8gYml0IDEKCQl1MzIgbm90X3ZhbGlkOjE7CS8vIGJpdCAyCgkJdTMyIHJlc2VydmVkOjI5OwkvLyBiaXRzIDMtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUlJX01HTVRfSU5ESUNBVE9SX3QsICpQTUlJX01HTVRfSU5ESUNBVE9SX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIEludGVyZmFjZSBDb250cm9sIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwMzgKICovCnR5cGVkZWYgdW5pb24gX01BQ19JRl9DVFJMX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXRfaWZfbW9kdWxlOjE7CS8vIGJpdCAzMQoJCXUzMiByZXNlcnZlZDQ6MzsJCS8vIGJpdCAyOC0zMAoJCXUzMiB0YmlfbW9kZToxOwkJLy8gYml0IDI3CgkJdTMyIGdoZF9tb2RlOjE7CQkvLyBiaXQgMjYKCQl1MzIgbGhkX21vZGU6MTsJCS8vIGJpdCAyNQoJCXUzMiBwaHlfbW9kZToxOwkJLy8gYml0IDI0CgkJdTMyIHJlc2V0X3Blcl9taWk6MTsJLy8gYml0IDIzCgkJdTMyIHJlc2VydmVkMzo2OwkJLy8gYml0cyAxNy0yMgoJCXUzMiBzcGVlZDoxOwkJLy8gYml0IDE2CgkJdTMyIHJlc2V0X3BlMTAweDoxOwkvLyBiaXQgMTUKCQl1MzIgcmVzZXJ2ZWQyOjQ7CQkvLyBiaXRzIDExLTE0CgkJdTMyIGZvcmNlX3F1aWV0OjE7CQkvLyBiaXQgMTAKCQl1MzIgbm9fY2lwaGVyOjE7CQkvLyBiaXQgOQoJCXUzMiBkaXNhYmxlX2xpbmtfZmFpbDoxOwkvLyBiaXQgOAoJCXUzMiByZXNldF9ncHNpOjE7CQkvLyBiaXQgNwoJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMS02CgkJdTMyIGVuYWJfamFiX3Byb3RlY3Q6MTsJLy8gYml0IDAKI2Vsc2UKCQl1MzIgZW5hYl9qYWJfcHJvdGVjdDoxOwkvLyBiaXQgMAoJCXUzMiByZXNlcnZlZDE6NjsJCS8vIGJpdHMgMS02CgkJdTMyIHJlc2V0X2dwc2k6MTsJCS8vIGJpdCA3CgkJdTMyIGRpc2FibGVfbGlua19mYWlsOjE7CS8vIGJpdCA4CgkJdTMyIG5vX2NpcGhlcjoxOwkJLy8gYml0IDkKCQl1MzIgZm9yY2VfcXVpZXQ6MTsJCS8vIGJpdCAxMAoJCXUzMiByZXNlcnZlZDI6NDsJCS8vIGJpdHMgMTEtMTQKCQl1MzIgcmVzZXRfcGUxMDB4OjE7CS8vIGJpdCAxNQoJCXUzMiBzcGVlZDoxOwkJLy8gYml0IDE2CgkJdTMyIHJlc2VydmVkMzo2OwkJLy8gYml0cyAxNy0yMgoJCXUzMiByZXNldF9wZXJfbWlpOjE7CS8vIGJpdCAyMwoJCXUzMiBwaHlfbW9kZToxOwkJLy8gYml0IDI0CgkJdTMyIGxoZF9tb2RlOjE7CQkvLyBiaXQgMjUKCQl1MzIgZ2hkX21vZGU6MTsJCS8vIGJpdCAyNgoJCXUzMiB0YmlfbW9kZToxOwkJLy8gYml0IDI3CgkJdTMyIHJlc2VydmVkNDozOwkJLy8gYml0IDI4LTMwCgkJdTMyIHJlc2V0X2lmX21vZHVsZToxOwkvLyBiaXQgMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUFDX0lGX0NUUkxfdCwgKlBNQUNfSUZfQ1RSTF90OwoKLyoKICogc3RydWN0dXJlIGZvciBJbnRlcmZhY2UgU3RhdHVzIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwM0MKICovCnR5cGVkZWYgdW5pb24gX01BQ19JRl9TVEFUX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXJ2ZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCgkJdTMyIGV4Y2Vzc19kZWZlcjoxOwkvLyBiaXQgOQoJCXUzMiBjbGFzaDoxOwkJLy8gYml0IDgKCQl1MzIgcGh5X2phYmJlcjoxOwkJLy8gYml0IDcKCQl1MzIgcGh5X2xpbmtfb2s6MTsJCS8vIGJpdCA2CgkJdTMyIHBoeV9mdWxsX2R1cGxleDoxOwkvLyBiaXQgNQoJCXUzMiBwaHlfc3BlZWQ6MTsJCS8vIGJpdCA0CgkJdTMyIHBlMTAweF9saW5rX2ZhaWw6MTsJLy8gYml0IDMKCQl1MzIgcGUxMHRfbG9zc19jYXJyaWU6MTsJLy8gYml0IDIKCQl1MzIgcGUxMHRfc3FlX2Vycm9yOjE7CS8vIGJpdCAxCgkJdTMyIHBlMTB0X2phYmJlcjoxOwkvLyBiaXQgMAojZWxzZQoJCXUzMiBwZTEwdF9qYWJiZXI6MTsJLy8gYml0IDAKCQl1MzIgcGUxMHRfc3FlX2Vycm9yOjE7CS8vIGJpdCAxCgkJdTMyIHBlMTB0X2xvc3NfY2FycmllOjE7CS8vIGJpdCAyCgkJdTMyIHBlMTAweF9saW5rX2ZhaWw6MTsJLy8gYml0IDMKCQl1MzIgcGh5X3NwZWVkOjE7CQkvLyBiaXQgNAoJCXUzMiBwaHlfZnVsbF9kdXBsZXg6MTsJLy8gYml0IDUKCQl1MzIgcGh5X2xpbmtfb2s6MTsJCS8vIGJpdCA2CgkJdTMyIHBoeV9qYWJiZXI6MTsJCS8vIGJpdCA3CgkJdTMyIGNsYXNoOjE7CQkvLyBiaXQgOAoJCXUzMiBleGNlc3NfZGVmZXI6MTsJLy8gYml0IDkKCQl1MzIgcmVzZXJ2ZWQ6MjI7CQkvLyBiaXRzIDEwLTMxCiNlbmRpZgoJfSBiaXRzOwp9IE1BQ19JRl9TVEFUX3QsICpQTUFDX0lGX1NUQVRfdDsKCi8qCiAqIHN0cnVjdHVyZSBmb3IgTWFjIFN0YXRpb24gQWRkcmVzcywgUGFydCAxIHJlZyBpbiBtYWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUwNDAKICovCnR5cGVkZWYgdW5pb24gX01BQ19TVEFUSU9OX0FERFIxX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgT2N0ZXQ2Ojg7CS8vIGJpdHMgMjQtMzEKCQl1MzIgT2N0ZXQ1Ojg7CS8vIGJpdHMgMTYtMjMKCQl1MzIgT2N0ZXQ0Ojg7CS8vIGJpdHMgOC0xNQoJCXUzMiBPY3RldDM6ODsJLy8gYml0cyAwLTcKI2Vsc2UKCQl1MzIgT2N0ZXQzOjg7CS8vIGJpdHMgMC03CgkJdTMyIE9jdGV0NDo4OwkvLyBiaXRzIDgtMTUKCQl1MzIgT2N0ZXQ1Ojg7CS8vIGJpdHMgMTYtMjMKCQl1MzIgT2N0ZXQ2Ojg7CS8vIGJpdHMgMjQtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUFDX1NUQVRJT05fQUREUjFfdCwgKlBNQUNfU1RBVElPTl9BRERSMV90OwoKLyoKICogc3RydWN0dXJlIGZvciBNYWMgU3RhdGlvbiBBZGRyZXNzLCBQYXJ0IDIgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTA0NAogKi8KdHlwZWRlZiB1bmlvbiBfTUFDX1NUQVRJT05fQUREUjJfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiBPY3RldDI6ODsJLy8gYml0cyAyNC0zMQoJCXUzMiBPY3RldDE6ODsJLy8gYml0cyAxNi0yMwoJCXUzMiByZXNlcnZlZDoxNjsJLy8gYml0cyAwLTE1CiNlbHNlCgkJdTMyIHJlc2VydmVkOjE2OwkvLyBiaXQgMC0xNQoJCXUzMiBPY3RldDE6ODsJLy8gYml0cyAxNi0yMwoJCXUzMiBPY3RldDI6ODsJLy8gYml0cyAyNC0zMQojZW5kaWYKCX0gYml0czsKfSBNQUNfU1RBVElPTl9BRERSMl90LCAqUE1BQ19TVEFUSU9OX0FERFIyX3Q7CgovKgogKiBNQUMgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAqLwp0eXBlZGVmIHN0cnVjdCBfTUFDX3QgewkJCQkJLy8gTG9jYXRpb246CglNQUNfQ0ZHMV90IGNmZzE7CQkJCS8vICAweDUwMDAKCU1BQ19DRkcyX3QgY2ZnMjsJCQkJLy8gIDB4NTAwNAoJTUFDX0lQR190IGlwZzsJCQkJCS8vICAweDUwMDgKCU1BQ19IRkRQX3QgaGZkcDsJCQkJLy8gIDB4NTAwQwoJTUFDX01BWF9GTV9MRU5fdCBtYXhfZm1fbGVuOwkJCS8vICAweDUwMTAKCXUzMiByc3YxOwkJCQkJLy8gIDB4NTAxNAoJdTMyIHJzdjI7CQkJCQkvLyAgMHg1MDE4CglNQUNfVEVTVF90IG1hY190ZXN0OwkJCQkvLyAgMHg1MDFDCglNSUlfTUdNVF9DRkdfdCBtaWlfbWdtdF9jZmc7CQkJLy8gIDB4NTAyMAoJTUlJX01HTVRfQ01EX3QgbWlpX21nbXRfY21kOwkJCS8vICAweDUwMjQKCU1JSV9NR01UX0FERFJfdCBtaWlfbWdtdF9hZGRyOwkJCS8vICAweDUwMjgKCU1JSV9NR01UX0NUUkxfdCBtaWlfbWdtdF9jdHJsOwkJCS8vICAweDUwMkMKCU1JSV9NR01UX1NUQVRfdCBtaWlfbWdtdF9zdGF0OwkJCS8vICAweDUwMzAKCU1JSV9NR01UX0lORElDQVRPUl90IG1paV9tZ210X2luZGljYXRvcjsJLy8gIDB4NTAzNAoJTUFDX0lGX0NUUkxfdCBpZl9jdHJsOwkJCQkvLyAgMHg1MDM4CglNQUNfSUZfU1RBVF90IGlmX3N0YXQ7CQkJCS8vICAweDUwM0MKCU1BQ19TVEFUSU9OX0FERFIxX3Qgc3RhdGlvbl9hZGRyXzE7CQkvLyAgMHg1MDQwCglNQUNfU1RBVElPTl9BRERSMl90IHN0YXRpb25fYWRkcl8yOwkJLy8gIDB4NTA0NAp9IE1BQ190LCAqUE1BQ190OwoKLyogRU5EIE9GIE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKLyogU1RBUlQgT0YgTUFDIFNUQVQgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgQ2FycnkgUmVnaXN0ZXIgT25lIGFuZCBpdCdzIE1hc2sgUmVnaXN0ZXIgcmVnIGxvY2F0ZWQgaW4gbWFjCiAqIHN0YXQgYWRkcmVzcyBtYXAgYWRkcmVzcyAweDYxMzAgYW5kIDB4NjEzOC4KICovCnR5cGVkZWYgdW5pb24gX01BQ19TVEFUX1JFR18xX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgdHI2NDoxOwkvLyBiaXQgMzEKCQl1MzIgdHIxMjc6MTsJLy8gYml0IDMwCgkJdTMyIHRyMjU1OjE7CS8vIGJpdCAyOQoJCXUzMiB0cjUxMToxOwkvLyBiaXQgMjgKCQl1MzIgdHIxazoxOwkvLyBiaXQgMjcKCQl1MzIgdHJtYXg6MTsJLy8gYml0IDI2CgkJdTMyIHRybWd2OjE7CS8vIGJpdCAyNQoJCXUzMiB1bnVzZWQ6ODsJLy8gYml0cyAxNy0yNAoJCXUzMiByYnl0OjE7CS8vIGJpdCAxNgoJCXUzMiBycGt0OjE7CS8vIGJpdCAxNQoJCXUzMiByZmNzOjE7CS8vIGJpdCAxNAoJCXUzMiBybWNhOjE7CS8vIGJpdCAxMwoJCXUzMiByYmNhOjE7CS8vIGJpdCAxMgoJCXUzMiByeGNmOjE7CS8vIGJpdCAxMQoJCXUzMiByeHBmOjE7CS8vIGJpdCAxMAoJCXUzMiByeHVvOjE7CS8vIGJpdCA5CgkJdTMyIHJhbG46MTsJLy8gYml0IDgKCQl1MzIgcmZscjoxOwkvLyBiaXQgNwoJCXUzMiByY2RlOjE7CS8vIGJpdCA2CgkJdTMyIHJjc2U6MTsJLy8gYml0IDUKCQl1MzIgcnVuZDoxOwkvLyBiaXQgNAoJCXUzMiByb3ZyOjE7CS8vIGJpdCAzCgkJdTMyIHJmcmc6MTsJLy8gYml0IDIKCQl1MzIgcmpicjoxOwkvLyBiaXQgMQoJCXUzMiByZHJwOjE7CS8vIGJpdCAwCiNlbHNlCgkJdTMyIHJkcnA6MTsJLy8gYml0IDAKCQl1MzIgcmpicjoxOwkvLyBiaXQgMQoJCXUzMiByZnJnOjE7CS8vIGJpdCAyCgkJdTMyIHJvdnI6MTsJLy8gYml0IDMKCQl1MzIgcnVuZDoxOwkvLyBiaXQgNAoJCXUzMiByY3NlOjE7CS8vIGJpdCA1CgkJdTMyIHJjZGU6MTsJLy8gYml0IDYKCQl1MzIgcmZscjoxOwkvLyBiaXQgNwoJCXUzMiByYWxuOjE7CS8vIGJpdCA4CgkJdTMyIHJ4dW86MTsJLy8gYml0IDkKCQl1MzIgcnhwZjoxOwkvLyBiaXQgMTAKCQl1MzIgcnhjZjoxOwkvLyBiaXQgMTEKCQl1MzIgcmJjYToxOwkvLyBiaXQgMTIKCQl1MzIgcm1jYToxOwkvLyBiaXQgMTMKCQl1MzIgcmZjczoxOwkvLyBiaXQgMTQKCQl1MzIgcnBrdDoxOwkvLyBiaXQgMTUKCQl1MzIgcmJ5dDoxOwkvLyBiaXQgMTYKCQl1MzIgdW51c2VkOjg7CS8vIGJpdHMgMTctMjQKCQl1MzIgdHJtZ3Y6MTsJLy8gYml0IDI1CgkJdTMyIHRybWF4OjE7CS8vIGJpdCAyNgoJCXUzMiB0cjFrOjE7CS8vIGJpdCAyNwoJCXUzMiB0cjUxMToxOwkvLyBiaXQgMjgKCQl1MzIgdHIyNTU6MTsJLy8gYml0IDI5CgkJdTMyIHRyMTI3OjE7CS8vIGJpdCAzMAoJCXUzMiB0cjY0OjE7CS8vIGJpdCAzMQojZW5kaWYKCX0gYml0czsKfSBNQUNfU1RBVF9SRUdfMV90LCAqUE1BQ19TVEFUX1JFR18xX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIENhcnJ5IFJlZ2lzdGVyIFR3byBNYXNrIFJlZ2lzdGVyIHJlZyBpbiBtYWMgc3RhdCBhZGRyZXNzIG1hcC4KICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NjEzQwogKi8KdHlwZWRlZiB1bmlvbiBfTUFDX1NUQVRfUkVHXzJfdCB7Cgl1MzIgdmFsdWU7CglzdHJ1Y3QgewojaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAoJCXUzMiB1bnVzZWQ6MTI7CS8vIGJpdCAyMC0zMQoJCXUzMiB0amJyOjE7CS8vIGJpdCAxOQoJCXUzMiB0ZmNzOjE7CS8vIGJpdCAxOAoJCXUzMiB0eGNmOjE7CS8vIGJpdCAxNwoJCXUzMiB0b3ZyOjE7CS8vIGJpdCAxNgoJCXUzMiB0dW5kOjE7CS8vIGJpdCAxNQoJCXUzMiB0ZnJnOjE7CS8vIGJpdCAxNAoJCXUzMiB0Ynl0OjE7CS8vIGJpdCAxMwoJCXUzMiB0cGt0OjE7CS8vIGJpdCAxMgoJCXUzMiB0bWNhOjE7CS8vIGJpdCAxMQoJCXUzMiB0YmNhOjE7CS8vIGJpdCAxMAoJCXUzMiB0eHBmOjE7CS8vIGJpdCA5CgkJdTMyIHRkZnI6MTsJLy8gYml0IDgKCQl1MzIgdGVkZjoxOwkvLyBiaXQgNwoJCXUzMiB0c2NsOjE7CS8vIGJpdCA2CgkJdTMyIHRtY2w6MTsJLy8gYml0IDUKCQl1MzIgdGxjbDoxOwkvLyBiaXQgNAoJCXUzMiB0eGNsOjE7CS8vIGJpdCAzCgkJdTMyIHRuY2w6MTsJLy8gYml0IDIKCQl1MzIgdHBmaDoxOwkvLyBiaXQgMQoJCXUzMiB0ZHJwOjE7CS8vIGJpdCAwCiNlbHNlCgkJdTMyIHRkcnA6MTsJLy8gYml0IDAKCQl1MzIgdHBmaDoxOwkvLyBiaXQgMQoJCXUzMiB0bmNsOjE7CS8vIGJpdCAyCgkJdTMyIHR4Y2w6MTsJLy8gYml0IDMKCQl1MzIgdGxjbDoxOwkvLyBiaXQgNAoJCXUzMiB0bWNsOjE7CS8vIGJpdCA1CgkJdTMyIHRzY2w6MTsJLy8gYml0IDYKCQl1MzIgdGVkZjoxOwkvLyBiaXQgNwoJCXUzMiB0ZGZyOjE7CS8vIGJpdCA4CgkJdTMyIHR4cGY6MTsJLy8gYml0IDkKCQl1MzIgdGJjYToxOwkvLyBiaXQgMTAKCQl1MzIgdG1jYToxOwkvLyBiaXQgMTEKCQl1MzIgdHBrdDoxOwkvLyBiaXQgMTIKCQl1MzIgdGJ5dDoxOwkvLyBiaXQgMTMKCQl1MzIgdGZyZzoxOwkvLyBiaXQgMTQKCQl1MzIgdHVuZDoxOwkvLyBiaXQgMTUKCQl1MzIgdG92cjoxOwkvLyBiaXQgMTYKCQl1MzIgdHhjZjoxOwkvLyBiaXQgMTcKCQl1MzIgdGZjczoxOwkvLyBiaXQgMTgKCQl1MzIgdGpicjoxOwkvLyBiaXQgMTkKCQl1MzIgdW51c2VkOjEyOwkvLyBiaXQgMjAtMzEKI2VuZGlmCgl9IGJpdHM7Cn0gTUFDX1NUQVRfUkVHXzJfdCwgKlBNQUNfU1RBVF9SRUdfMl90OwoKLyoKICogTUFDIFNUQVRTIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwogKi8KdHlwZWRlZiBzdHJ1Y3QgX01BQ19TVEFUX3QgewkJLy8gTG9jYXRpb246Cgl1MzIgcGFkWzMyXTsJCS8vICAweDYwMDAgLSA2MDdDCgoJLy8gVHgvUnggMC02NCBCeXRlIEZyYW1lIENvdW50ZXIKCXUzMiBUUjY0OwkJCS8vICAweDYwODAKCgkvLyBUeC9SeCA2NS0xMjcgQnl0ZSBGcmFtZSBDb3VudGVyCgl1MzIgVFIxMjc7CQkJLy8gIDB4NjA4NAoKCS8vIFR4L1J4IDEyOC0yNTUgQnl0ZSBGcmFtZSBDb3VudGVyCgl1MzIgVFIyNTU7CQkJLy8gIDB4NjA4OAoKCS8vIFR4L1J4IDI1Ni01MTEgQnl0ZSBGcmFtZSBDb3VudGVyCgl1MzIgVFI1MTE7CQkJLy8gIDB4NjA4QwoKCS8vIFR4L1J4IDUxMi0xMDIzIEJ5dGUgRnJhbWUgQ291bnRlcgoJdTMyIFRSMUs7CQkJLy8gIDB4NjA5MAoKCS8vIFR4L1J4IDEwMjQtMTUxOCBCeXRlIEZyYW1lIENvdW50ZXIKCXUzMiBUUk1heDsJCQkvLyAgMHg2MDk0CgoJLy8gVHgvUnggMTUxOS0xNTIyIEJ5dGUgR29vZCBWTEFOIEZyYW1lIENvdW50Cgl1MzIgVFJNZ3Y7CQkJLy8gIDB4NjA5OAoKCS8vIFJ4IEJ5dGUgQ291bnRlcgoJdTMyIFJCeXQ7CQkJLy8gIDB4NjA5QwoKCS8vIFJ4IFBhY2tldCBDb3VudGVyCgl1MzIgUlBrdDsJCQkvLyAgMHg2MEEwCgoJLy8gUnggRkNTIEVycm9yIENvdW50ZXIKCXUzMiBSRmNzOwkJCS8vICAweDYwQTQKCgkvLyBSeCBNdWx0aWNhc3QgUGFja2V0IENvdW50ZXIKCXUzMiBSTWNhOwkJCS8vICAweDYwQTgKCgkvLyBSeCBCcm9hZGNhc3QgUGFja2V0IENvdW50ZXIKCXUzMiBSQmNhOwkJCS8vICAweDYwQUMKCgkvLyBSeCBDb250cm9sIEZyYW1lIFBhY2tldCBDb3VudGVyCgl1MzIgUnhDZjsJCQkvLyAgMHg2MEIwCgoJLy8gUnggUGF1c2UgRnJhbWUgUGFja2V0IENvdW50ZXIKCXUzMiBSeFBmOwkJCS8vICAweDYwQjQKCgkvLyBSeCBVbmtub3duIE9QIENvZGUgQ291bnRlcgoJdTMyIFJ4VW87CQkJLy8gIDB4NjBCOAoKCS8vIFJ4IEFsaWdubWVudCBFcnJvciBDb3VudGVyCgl1MzIgUkFsbjsJCQkvLyAgMHg2MEJDCgoJLy8gUnggRnJhbWUgTGVuZ3RoIEVycm9yIENvdW50ZXIKCXUzMiBSRmxyOwkJCS8vICAweDYwQzAKCgkvLyBSeCBDb2RlIEVycm9yIENvdW50ZXIKCXUzMiBSQ2RlOwkJCS8vICAweDYwQzQKCgkvLyBSeCBDYXJyaWVyIFNlbnNlIEVycm9yIENvdW50ZXIKCXUzMiBSQ3NlOwkJCS8vICAweDYwQzgKCgkvLyBSeCBVbmRlcnNpemUgUGFja2V0IENvdW50ZXIKCXUzMiBSVW5kOwkJCS8vICAweDYwQ0MKCgkvLyBSeCBPdmVyc2l6ZSBQYWNrZXQgQ291bnRlcgoJdTMyIFJPdnI7CQkJLy8gIDB4NjBEMAoKCS8vIFJ4IEZyYWdtZW50IENvdW50ZXIKCXUzMiBSRnJnOwkJCS8vICAweDYwRDQKCgkvLyBSeCBKYWJiZXIgQ291bnRlcgoJdTMyIFJKYnI7CQkJLy8gIDB4NjBEOAoKCS8vIFJ4IERyb3AKCXUzMiBSRHJwOwkJCS8vICAweDYwREMKCgkvLyBUeCBCeXRlIENvdW50ZXIKCXUzMiBUQnl0OwkJCS8vICAweDYwRTAKCgkvLyBUeCBQYWNrZXQgQ291bnRlcgoJdTMyIFRQa3Q7CQkJLy8gIDB4NjBFNAoKCS8vIFR4IE11bHRpY2FzdCBQYWNrZXQgQ291bnRlcgoJdTMyIFRNY2E7CQkJLy8gIDB4NjBFOAoKCS8vIFR4IEJyb2FkY2FzdCBQYWNrZXQgQ291bnRlcgoJdTMyIFRCY2E7CQkJLy8gIDB4NjBFQwoKCS8vIFR4IFBhdXNlIENvbnRyb2wgRnJhbWUgQ291bnRlcgoJdTMyIFR4UGY7CQkJLy8gIDB4NjBGMAoKCS8vIFR4IERlZmVycmFsIFBhY2tldCBDb3VudGVyCgl1MzIgVERmcjsJCQkvLyAgMHg2MEY0CgoJLy8gVHggRXhjZXNzaXZlIERlZmVycmFsIFBhY2tldCBDb3VudGVyCgl1MzIgVEVkZjsJCQkvLyAgMHg2MEY4CgoJLy8gVHggU2luZ2xlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgoJdTMyIFRTY2w7CQkJLy8gIDB4NjBGQwoKCS8vIFR4IE11bHRpcGxlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgoJdTMyIFRNY2w7CQkJLy8gIDB4NjEwMAoKCS8vIFR4IExhdGUgQ29sbGlzaW9uIFBhY2tldCBDb3VudGVyCgl1MzIgVExjbDsJCQkvLyAgMHg2MTA0CgoJLy8gVHggRXhjZXNzaXZlIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgoJdTMyIFRYY2w7CQkJLy8gIDB4NjEwOAoKCS8vIFR4IFRvdGFsIENvbGxpc2lvbiBQYWNrZXQgQ291bnRlcgoJdTMyIFROY2w7CQkJLy8gIDB4NjEwQwoKCS8vIFR4IFBhdXNlIEZyYW1lIEhvbm9yZWQgQ291bnRlcgoJdTMyIFRQZmg7CQkJLy8gIDB4NjExMAoKCS8vIFR4IERyb3AgRnJhbWUgQ291bnRlcgoJdTMyIFREcnA7CQkJLy8gIDB4NjExNAoKCS8vIFR4IEphYmJlciBGcmFtZSBDb3VudGVyCgl1MzIgVEpicjsJCQkvLyAgMHg2MTE4CgoJLy8gVHggRkNTIEVycm9yIENvdW50ZXIKCXUzMiBURmNzOwkJCS8vICAweDYxMUMKCgkvLyBUeCBDb250cm9sIEZyYW1lIENvdW50ZXIKCXUzMiBUeENmOwkJCS8vICAweDYxMjAKCgkvLyBUeCBPdmVyc2l6ZSBGcmFtZSBDb3VudGVyCgl1MzIgVE92cjsJCQkvLyAgMHg2MTI0CgoJLy8gVHggVW5kZXJzaXplIEZyYW1lIENvdW50ZXIKCXUzMiBUVW5kOwkJCS8vICAweDYxMjgKCgkvLyBUeCBGcmFnbWVudHMgRnJhbWUgQ291bnRlcgoJdTMyIFRGcmc7CQkJLy8gIDB4NjEyQwoKCS8vIENhcnJ5IFJlZ2lzdGVyIE9uZSBSZWdpc3RlcgoJTUFDX1NUQVRfUkVHXzFfdCBDYXJyeTE7CS8vICAweDYxMzAKCgkvLyBDYXJyeSBSZWdpc3RlciBUd28gUmVnaXN0ZXIKCU1BQ19TVEFUX1JFR18yX3QgQ2FycnkyOwkvLyAgMHg2MTM0CgoJLy8gQ2FycnkgUmVnaXN0ZXIgT25lIE1hc2sgUmVnaXN0ZXIKCU1BQ19TVEFUX1JFR18xX3QgQ2FycnkxTTsJLy8gIDB4NjEzOAoKCS8vIENhcnJ5IFJlZ2lzdGVyIFR3byBNYXNrIFJlZ2lzdGVyCglNQUNfU1RBVF9SRUdfMl90IENhcnJ5Mk07CS8vICAweDYxM0MKfSBNQUNfU1RBVF90LCAqUE1BQ19TVEFUX3Q7CgovKiBFTkQgT0YgTUFDIFNUQVQgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCgovKiBTVEFSVCBPRiBNTUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KCi8qCiAqIHN0cnVjdHVyZSBmb3IgTWFpbiBNZW1vcnkgQ29udHJvbGxlciBDb250cm9sIHJlZyBpbiBtbWMgYWRkcmVzcyBtYXAuCiAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDcwMDAKICovCnR5cGVkZWYgdW5pb24gX01NQ19DVFJMX3QgewoJdTMyIHZhbHVlOwoJc3RydWN0IHsKI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKCQl1MzIgcmVzZXJ2ZWQ6MjU7CQkvLyBiaXRzIDctMzEKCQl1MzIgZm9yY2VfY2U6MTsJCS8vIGJpdCA2CgkJdTMyIHJ4ZG1hX2Rpc2FibGU6MTsJLy8gYml0IDUKCQl1MzIgdHhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNAoJCXUzMiB0eG1hY19kaXNhYmxlOjE7CS8vIGJpdCAzCgkJdTMyIHJ4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDIKCQl1MzIgYXJiX2Rpc2FibGU6MTsJCS8vIGJpdCAxCgkJdTMyIG1tY19lbmFibGU6MTsJCS8vIGJpdCAwCiNlbHNlCgkJdTMyIG1tY19lbmFibGU6MTsJCS8vIGJpdCAwCgkJdTMyIGFyYl9kaXNhYmxlOjE7CQkvLyBiaXQgMQoJCXUzMiByeG1hY19kaXNhYmxlOjE7CS8vIGJpdCAyCgkJdTMyIHR4bWFjX2Rpc2FibGU6MTsJLy8gYml0IDMKCQl1MzIgdHhkbWFfZGlzYWJsZToxOwkvLyBiaXQgNAoJCXUzMiByeGRtYV9kaXNhYmxlOjE7CS8vIGJpdCA1CgkJdTMyIGZvcmNlX2NlOjE7CQkvLyBiaXQgNgoJCXUzMiByZXNlcnZlZDoyNTsJCS8vIGJpdHMgNy0zMQojZW5kaWYKCX0gYml0czsKfSBNTUNfQ1RSTF90LCAqUE1NQ19DVFJMX3Q7CgovKgogKiBzdHJ1Y3R1cmUgZm9yIE1haW4gTWVtb3J5IENvbnRyb2xsZXIgSG9zdCBNZW1vcnkgQWNjZXNzIEFkZHJlc3MgcmVnIGluIG1tYwogKiBhZGRyZXNzIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDcwMDQKICovCnR5cGVkZWYgdW5pb24gX01NQ19TUkFNX0FDQ0VTU190IHsKCXUzMiB2YWx1ZTsKCXN0cnVjdCB7CiNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCgkJdTMyIGJ5dGVfZW5hYmxlOjE2OwkvLyBiaXRzIDE2LTMxCgkJdTMyIHJlc2VydmVkMjoyOwkJLy8gYml0cyAxNC0xNQoJCXUzMiByZXFfYWRkcjoxMDsJCS8vIGJpdHMgNC0xMwoJCXUzMiByZXNlcnZlZDE6MTsJCS8vIGJpdCAzCgkJdTMyIGlzX2N0cmxfd29yZDoxOwkvLyBiaXQgMgoJCXUzMiB3cl9hY2Nlc3M6MTsJCS8vIGJpdCAxCgkJdTMyIHJlcV9hY2Nlc3M6MTsJCS8vIGJpdCAwCiNlbHNlCgkJdTMyIHJlcV9hY2Nlc3M6MTsJCS8vIGJpdCAwCgkJdTMyIHdyX2FjY2VzczoxOwkJLy8gYml0IDEKCQl1MzIgaXNfY3RybF93b3JkOjE7CS8vIGJpdCAyCgkJdTMyIHJlc2VydmVkMToxOwkJLy8gYml0IDMKCQl1MzIgcmVxX2FkZHI6MTA7CQkvLyBiaXRzIDQtMTMKCQl1MzIgcmVzZXJ2ZWQyOjI7CQkvLyBiaXRzIDE0LTE1CgkJdTMyIGJ5dGVfZW5hYmxlOjE2OwkvLyBiaXRzIDE2LTMxCiNlbmRpZgoJfSBiaXRzOwp9IE1NQ19TUkFNX0FDQ0VTU190LCAqUE1NQ19TUkFNX0FDQ0VTU190OwoKLyoKICogc3RydWN0dXJlIGZvciBNYWluIE1lbW9yeSBDb250cm9sbGVyIEhvc3QgTWVtb3J5IEFjY2VzcyBEYXRhIHJlZyBpbiBtbWMKICogYWRkcmVzcyBtYXAuICBMb2NhdGVkIGF0IGFkZHJlc3MgMHg3MDA4IC0gMHg3MDE0CiAqIERlZmluZWQgZWFybGllciAodTMyKQogKi8KCi8qCiAqIE1lbW9yeSBDb250cm9sIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwogKi8KdHlwZWRlZiBzdHJ1Y3QgX01NQ190IHsJCQkvLyBMb2NhdGlvbjoKCU1NQ19DVFJMX3QgbW1jX2N0cmw7CQkvLyAgMHg3MDAwCglNTUNfU1JBTV9BQ0NFU1NfdCBzcmFtX2FjY2VzczsJLy8gIDB4NzAwNAoJdTMyIHNyYW1fd29yZDE7CQkvLyAgMHg3MDA4Cgl1MzIgc3JhbV93b3JkMjsJCS8vICAweDcwMEMKCXUzMiBzcmFtX3dvcmQzOwkJLy8gIDB4NzAxMAoJdTMyIHNyYW1fd29yZDQ7CQkvLyAgMHg3MDE0Cn0gTU1DX3QsICpQTU1DX3Q7CgovKiBFTkQgT0YgTU1DIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCgoKLyogU1RBUlQgT0YgRVhQIFJPTSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKLyoKICogRXhwYW5zaW9uIFJPTSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICovCgovKiBUYWtlIHRoaXMgb3V0IHVudGlsIGl0IGlzIG5vdCBlbXB0eSAqLwojaWYgMAp0eXBlZGVmIHN0cnVjdCBfRVhQX1JPTV90IHsKCn0gRVhQX1JPTV90LCAqUEVYUF9ST01fdDsKI2VuZGlmCgovKiBFTkQgT0YgRVhQIFJPTSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwoKCi8qCiAqIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAqLwp0eXBlZGVmIHN0cnVjdCBfQUREUkVTU19NQVBfdCB7CglHTE9CQUxfdCBnbG9iYWw7CgkvLyB1bnVzZWQgc2VjdGlvbiBvZiBnbG9iYWwgYWRkcmVzcyBtYXAKCXU4IHVudXNlZF9nbG9iYWxbNDA5NiAtIHNpemVvZihHTE9CQUxfdCldOwoJVFhETUFfdCB0eGRtYTsKCS8vIHVudXNlZCBzZWN0aW9uIG9mIHR4ZG1hIGFkZHJlc3MgbWFwCgl1OCB1bnVzZWRfdHhkbWFbNDA5NiAtIHNpemVvZihUWERNQV90KV07CglSWERNQV90IHJ4ZG1hOwoJLy8gdW51c2VkIHNlY3Rpb24gb2YgcnhkbWEgYWRkcmVzcyBtYXAKCXU4IHVudXNlZF9yeGRtYVs0MDk2IC0gc2l6ZW9mKFJYRE1BX3QpXTsKCVRYTUFDX3QgdHhtYWM7CgkvLyB1bnVzZWQgc2VjdGlvbiBvZiB0eG1hYyBhZGRyZXNzIG1hcAoJdTggdW51c2VkX3R4bWFjWzQwOTYgLSBzaXplb2YoVFhNQUNfdCldOwoJUlhNQUNfdCByeG1hYzsKCS8vIHVudXNlZCBzZWN0aW9uIG9mIHJ4bWFjIGFkZHJlc3MgbWFwCgl1OCB1bnVzZWRfcnhtYWNbNDA5NiAtIHNpemVvZihSWE1BQ190KV07CglNQUNfdCBtYWM7CgkvLyB1bnVzZWQgc2VjdGlvbiBvZiBtYWMgYWRkcmVzcyBtYXAKCXU4IHVudXNlZF9tYWNbNDA5NiAtIHNpemVvZihNQUNfdCldOwoJTUFDX1NUQVRfdCBtYWNTdGF0OwoJLy8gdW51c2VkIHNlY3Rpb24gb2YgbWFjIHN0YXQgYWRkcmVzcyBtYXAKCXU4IHVudXNlZF9tYWNfc3RhdFs0MDk2IC0gc2l6ZW9mKE1BQ19TVEFUX3QpXTsKCU1NQ190IG1tYzsKCS8vIHVudXNlZCBzZWN0aW9uIG9mIG1tYyBhZGRyZXNzIG1hcAoJdTggdW51c2VkX21tY1s0MDk2IC0gc2l6ZW9mKE1NQ190KV07CgkvLyB1bnVzZWQgc2VjdGlvbiBvZiBhZGRyZXNzIG1hcAoJdTggdW51c2VkX1sxMDE1ODA4XTsKCi8qIFRha2UgdGhpcyBvdXQgdW50aWwgaXQgaXMgbm90IGVtcHR5ICovCiNpZiAwCglFWFBfUk9NX3QgZXhwX3JvbTsKI2VuZGlmCgoJdTggdW51c2VkX2V4cF9yb21bNDA5Nl07CS8vIE1HUy1zaXplIFRCRAoJdTggdW51c2VkX19bNTI0Mjg4XTsJLy8gdW51c2VkIHNlY3Rpb24gb2YgYWRkcmVzcyBtYXAKfSBBRERSRVNTX01BUF90LCAqUEFERFJFU1NfTUFQX3Q7CgojZW5kaWYgLyogX0VUMTMxMF9BRERSRVNTX01BUF9IXyAqLwo=