LyoqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBAZmlsZSAgICBzdG0zMmg3eHhfaGFsX2ZkY2FuLmgKICAqIEBhdXRob3IgIE1DRCBBcHBsaWNhdGlvbiBUZWFtCiAgKiBAYnJpZWYgICBIZWFkZXIgZmlsZSBvZiBGRENBTiBIQUwgbW9kdWxlLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQGF0dGVudGlvbgogICoKICAqIDxoMj48Y2VudGVyPiZjb3B5OyBDb3B5cmlnaHQgKGMpIDIwMTcgU1RNaWNyb2VsZWN0cm9uaWNzLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC48L2NlbnRlcj48L2gyPgogICoKICAqIFRoaXMgc29mdHdhcmUgY29tcG9uZW50IGlzIGxpY2Vuc2VkIGJ5IFNUIHVuZGVyIEJTRCAzLUNsYXVzZSBsaWNlbnNlLAogICogdGhlICJMaWNlbnNlIjsgWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZQogICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0OgogICogICAgICAgICAgICAgICAgICAgICAgICBvcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2UKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKi8KCi8qIERlZmluZSB0byBwcmV2ZW50IHJlY3Vyc2l2ZSBpbmNsdXNpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiNpZm5kZWYgU1RNMzJIN3h4X0hBTF9GRENBTl9ICiNkZWZpbmUgU1RNMzJIN3h4X0hBTF9GRENBTl9ICgojaWZkZWYgX19jcGx1c3BsdXMKZXh0ZXJuICJDIiB7CiNlbmRpZgoKLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KI2luY2x1ZGUgInN0bTMyaDd4eF9oYWxfZGVmLmgiCgojaWYgZGVmaW5lZChGRENBTjEpCgovKiogQGFkZHRvZ3JvdXAgU1RNMzJIN3h4X0hBTF9Ecml2ZXIKICAqIEB7CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBGRENBTgogICogQHsKICAqLwoKLyogRXhwb3J0ZWQgdHlwZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyoqIEBkZWZncm91cCBGRENBTl9FeHBvcnRlZF9UeXBlcyBGRENBTiBFeHBvcnRlZCBUeXBlcwogICogQHsKICAqLwoKLyoqCiAgKiBAYnJpZWYgSEFMIFN0YXRlIHN0cnVjdHVyZXMgZGVmaW5pdGlvbgogICovCnR5cGVkZWYgZW51bQp7CiAgSEFMX0ZEQ0FOX1NUQVRFX1JFU0VUICAgICAgPSAweDAwVSwgLyohPCBGRENBTiBub3QgeWV0IGluaXRpYWxpemVkIG9yIGRpc2FibGVkICovCiAgSEFMX0ZEQ0FOX1NUQVRFX1JFQURZICAgICAgPSAweDAxVSwgLyohPCBGRENBTiBpbml0aWFsaXplZCBhbmQgcmVhZHkgZm9yIHVzZSAgICovCiAgSEFMX0ZEQ0FOX1NUQVRFX0JVU1kgICAgICAgPSAweDAyVSwgLyohPCBGRENBTiBwcm9jZXNzIGlzIG9uZ29pbmcgICAgICAgICAgICAgICovCiAgSEFMX0ZEQ0FOX1NUQVRFX0VSUk9SICAgICAgPSAweDAzVSAgLyohPCBGRENBTiBlcnJvciBzdGF0ZSAgICAgICAgICAgICAgICAgICAgICovCn0gSEFMX0ZEQ0FOX1N0YXRlVHlwZURlZjsKCi8qKgogICogQGJyaWVmIEZEQ0FOIEluaXQgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgdWludDMyX3QgRnJhbWVGb3JtYXQ7ICAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEZEQ0FOIGZyYW1lIGZvcm1hdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZnJhbWVfZm9ybWF0ICAgICAqLwoKICB1aW50MzJfdCBNb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgRkRDQU4gbW9kZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fb3BlcmF0aW5nX21vZGUgICAqLwoKICBGdW5jdGlvbmFsU3RhdGUgQXV0b1JldHJhbnNtaXNzaW9uOyAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgcmV0cmFuc21pc3Npb24gbW9kZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gRU5BQkxFIG9yIERJU0FCTEUgICAgICAgICAgICAgICAqLwoKICBGdW5jdGlvbmFsU3RhdGUgVHJhbnNtaXRQYXVzZTsgICAgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBUcmFuc21pdCBQYXVzZSBmZWF0dXJlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNldCB0byBFTkFCTEUgb3IgRElTQUJMRSAgICAgICAgICAgICAgICovCgogIEZ1bmN0aW9uYWxTdGF0ZSBQcm90b2NvbEV4Y2VwdGlvbjsgICAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBQcm90b2NvbCBFeGNlcHRpb24gSGFuZGxpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgc2V0IHRvIEVOQUJMRSBvciBESVNBQkxFICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgTm9taW5hbFByZXNjYWxlcjsgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHZhbHVlIGJ5IHdoaWNoIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgbm9taW5hbCBiaXQgdGltZSBxdWFudGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgNTEyICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgTm9taW5hbFN5bmNKdW1wV2lkdGg7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWUgcXVhbnRhIHRoZSBGRENBTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgaXMgYWxsb3dlZCB0byBsZW5ndGhlbiBvciBzaG9ydGVuIGEgYml0IHRvIHBlcmZvcm0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3luY2hyb25pemF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDEyOCAgICAgICAgICAgICovCgogIHVpbnQzMl90IE5vbWluYWxUaW1lU2VnMTsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgdGltZSBxdWFudGEgaW4gQml0IFNlZ21lbnQgMS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAyIGFuZCAyNTYgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBOb21pbmFsVGltZVNlZzI7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHRpbWUgcXVhbnRhIGluIEJpdCBTZWdtZW50IDIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMiBhbmQgMTI4ICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRGF0YVByZXNjYWxlcjsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHZhbHVlIGJ5IHdoaWNoIHRoZSBvc2NpbGxhdG9yIGZyZXF1ZW5jeSBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlZCBmb3IgZ2VuZXJhdGluZyB0aGUgZGF0YSBiaXQgdGltZSBxdWFudGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMzIgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRGF0YVN5bmNKdW1wV2lkdGg7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWUgcXVhbnRhIHRoZSBGRENBTgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFyZHdhcmUgaXMgYWxsb3dlZCB0byBsZW5ndGhlbiBvciBzaG9ydGVuIGEgZGF0YSBiaXQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm0gcmVzeW5jaHJvbml6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMTYgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRGF0YVRpbWVTZWcxOyAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lIHF1YW50YSBpbiBEYXRhIEJpdCBTZWdtZW50IDEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMzIgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRGF0YVRpbWVTZWcyOyAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0aW1lIHF1YW50YSBpbiBEYXRhIEJpdCBTZWdtZW50IDIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMTYgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgTWVzc2FnZVJBTU9mZnNldDsgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgUkFNIHN0YXJ0IGFkZHJlc3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMjU2MCAgICAgICAgICAgKi8KCiAgdWludDMyX3QgU3RkRmlsdGVyc05icjsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdGFuZGFyZCBNZXNzYWdlIElEIGZpbHRlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTI4ICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRXh0RmlsdGVyc05icjsgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBleHRlbmRlZCBNZXNzYWdlIElEIGZpbHRlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNjQgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgUnhGaWZvMEVsbXRzTmJyOyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBSeCBGSUZPMCBFbGVtZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA2NCAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBSeEZpZm8wRWxtdFNpemU7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgRGF0YSBGaWVsZCBTaXplIGluIGFuIFJ4IEZJRk8gMCBlbGVtZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9kYXRhX2ZpZWxkX3NpemUgICovCgogIHVpbnQzMl90IFJ4RmlmbzFFbG10c05icjsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgUnggRklGTyAxIEVsZW1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDY0ICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFJ4RmlmbzFFbG10U2l6ZTsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBEYXRhIEZpZWxkIFNpemUgaW4gYW4gUnggRklGTyAxIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2RhdGFfZmllbGRfc2l6ZSAgKi8KCiAgdWludDMyX3QgUnhCdWZmZXJzTmJyOyAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBEZWRpY2F0ZWQgUnggQnVmZmVyIGVsZW1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDY0ICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFJ4QnVmZmVyU2l6ZTsgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBEYXRhIEZpZWxkIFNpemUgaW4gYW4gUnggQnVmZmVyIGVsZW1lbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2RhdGFfZmllbGRfc2l6ZSAgKi8KCiAgdWludDMyX3QgVHhFdmVudHNOYnI7ICAgICAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBUeCBFdmVudCBGSUZPIGVsZW1lbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDMyICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFR4QnVmZmVyc05icjsgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgRGVkaWNhdGVkIFR4IEJ1ZmZlcnMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMzIgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgVHhGaWZvUXVldWVFbG10c05icjsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBUeCBCdWZmZXJzIHVzZWQgZm9yIFR4IEZJRk8vUXVldWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMzIgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgVHhGaWZvUXVldWVNb2RlOyAgICAgICAgICAgICAgLyohPCBUeCBGSUZPL1F1ZXVlIE1vZGUgc2VsZWN0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl90eEZpZm9RdWV1ZV9Nb2RlICovCgogIHVpbnQzMl90IFR4RWxtdFNpemU7ICAgICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBEYXRhIEZpZWxkIFNpemUgaW4gYSBUeCBFbGVtZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9kYXRhX2ZpZWxkX3NpemUgICovCgp9IEZEQ0FOX0luaXRUeXBlRGVmOwoKLyoqCiAgKiBAYnJpZWYgIEZEQ0FOIGNsb2NrIGNhbGlicmF0aW9uIHVuaXQgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgdWludDMyX3QgQ2xvY2tDYWxpYnJhdGlvbjsgICAgIC8qITwgRW5hYmxlIG9yIGRpc2FibGUgdGhlIGNsb2NrIGNhbGlicmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fY2xvY2tfY2FsaWJyYXRpb24uICAgICAgICovCgogIHVpbnQzMl90IENsb2NrRGl2aWRlcjsgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgRkRDQU4ga2VybmVsIGNsb2NrIGRpdmlkZXIgd2hlbiB0aGUgY2xvY2sgY2FsaWJyYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBieXBhc3NlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2Nsb2NrX2RpdmlkZXIgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBNaW5Pc2NDbGtQZXJpb2RzOyAgICAgLyohPCBDb25maWd1cmVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBwZXJpb2RzIGluIHR3byBDQU4gYml0IHRpbWVzLiBUaGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgY29uZmlndXJlZCBudW1iZXIgb2YgcGVyaW9kcyBpcyBNaW5Pc2NDbGtQZXJpb2RzIHggMzIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MDAgYW5kIDB4RkYgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgQ2FsRmllbGRMZW5ndGg7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBjYWxpYnJhdGlvbiBmaWVsZCBsZW5ndGguCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9jYWxpYnJhdGlvbl9maWVsZF9sZW5ndGggKi8KCiAgdWludDMyX3QgVGltZVF1YW50YVBlckJpdFRpbWU7IC8qITwgQ29uZmlndXJlcyB0aGUgbnVtYmVyIG9mIHRpbWUgcXVhbnRhIHBlciBiaXQgdGltZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gNCBhbmQgMjUgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBXYXRjaGRvZ1N0YXJ0VmFsdWU7ICAgLyohPCBTdGFydCB2YWx1ZSBvZiB0aGUgQ2FsaWJyYXRpb24gV2F0Y2hkb2cgQ291bnRlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBzZXQgdG8gemVybyB0aGUgY291bnRlciBpcyBkaXNhYmxlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMHgwMDAwIGFuZCAweEZGRkYgICAgICAgICAgICAqLwoKfSBGRENBTl9DbGtDYWxVbml0VHlwZURlZjsKCi8qKgogICogQGJyaWVmICBGRENBTiBmaWx0ZXIgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgdWludDMyX3QgSWRUeXBlOyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIgdHlwZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5faWRfdHlwZSAgICAgICAqLwoKICB1aW50MzJfdCBGaWx0ZXJJbmRleDsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZmlsdGVyIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGl6ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAxMjcsIGlmIElkVHlwZSBpcyBGRENBTl9TVEFOREFSRF9JRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCBhbmQgNjMsIGlmIElkVHlwZSBpcyBGRENBTl9FWFRFTkRFRF9JRCAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IEZpbHRlclR5cGU7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaWx0ZXIgdHlwZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZmlsdGVyX3R5cGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgRkRDQU5fRVhUX0ZJTFRFUl9SQU5HRV9OT19FSURNIGlzIHBlcm1pdHRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seSB3aGVuIElkVHlwZSBpcyBGRENBTl9FWFRFTkRFRF9JRC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgRmlsdGVyQ29uZmlnIGlzIHNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRDQU5fRklMVEVSX1RPX1JYQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IEZpbHRlckNvbmZpZzsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaWx0ZXIgY29uZmlndXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZmlsdGVyX2NvbmZpZyAqLwoKICB1aW50MzJfdCBGaWx0ZXJJRDE7ICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgZmlsdGVyIGlkZW50aWZpY2F0aW9uIDEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAweDdGRiwgaWYgSWRUeXBlIGlzIEZEQ0FOX1NUQU5EQVJEX0lECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAweDFGRkZGRkZGLCBpZiBJZFR5cGUgaXMgRkRDQU5fRVhURU5ERURfSUQgICAgICAgKi8KCiAgdWludDMyX3QgRmlsdGVySUQyOyAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBpZGVudGlmaWNhdGlvbiAyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBGaWx0ZXJDb25maWcgaXMgc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRENBTl9GSUxURVJfVE9fUlhCVUZGRVIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAweDdGRiwgaWYgSWRUeXBlIGlzIEZEQ0FOX1NUQU5EQVJEX0lECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAweDFGRkZGRkZGLCBpZiBJZFR5cGUgaXMgRkRDQU5fRVhURU5ERURfSUQgICAgICAgKi8KCiAgdWludDMyX3QgUnhCdWZmZXJJbmRleDsgICAgLyohPCBDb250YWlucyB0aGUgaW5kZXggb2YgdGhlIFJ4IGJ1ZmZlciBpbiB3aGljaCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIG1lc3NhZ2Ugd2lsbCBiZSBzdG9yZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNjMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIEZpbHRlckNvbmZpZyBpcyBkaWZmZXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gRkRDQU5fRklMVEVSX1RPX1JYQlVGRkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBJc0NhbGlicmF0aW9uTXNnOyAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBmaWx0ZXIgaXMgY29uZmlndXJlZCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGlicmF0aW9uIG1lc3NhZ2VzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBGaWx0ZXJDb25maWcgaXMgZGlmZmVyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIEZEQ0FOX0ZJTFRFUl9UT19SWEJVRkZFUi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgOiBvcmRpbmFyeSBtZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxIDogY2FsaWJyYXRpb24gbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCn0gRkRDQU5fRmlsdGVyVHlwZURlZjsKCi8qKgogICogQGJyaWVmICBGRENBTiBUeCBoZWFkZXIgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgdWludDMyX3QgSWRlbnRpZmllcjsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAweDdGRiwgaWYgSWRUeXBlIGlzIEZEQ0FOX1NUQU5EQVJEX0lECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAweDFGRkZGRkZGLCBpZiBJZFR5cGUgaXMgRkRDQU5fRVhURU5ERURfSUQgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBJZFR5cGU7ICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgaWRlbnRpZmllciB0eXBlIGZvciB0aGUgbWVzc2FnZSB0aGF0IHdpbGwgYmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0dGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9pZF90eXBlICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgVHhGcmFtZVR5cGU7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZyYW1lIHR5cGUgb2YgdGhlIG1lc3NhZ2UgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9mcmFtZV90eXBlICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRGF0YUxlbmd0aDsgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgdGhhdCB3aWxsIGJlIHRyYW5zbWl0dGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZGF0YV9sZW5ndGhfY29kZSAgICAgKi8KCiAgdWludDMyX3QgRXJyb3JTdGF0ZUluZGljYXRvcjsgLyohPCBTcGVjaWZpZXMgdGhlIGVycm9yIHN0YXRlIGluZGljYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZXJyb3Jfc3RhdGVfaW5kaWNhdG9yICovCgogIHVpbnQzMl90IEJpdFJhdGVTd2l0Y2g7ICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFR4IGZyYW1lIHdpbGwgYmUgdHJhbnNtaXR0ZWQgd2l0aCBvciB3aXRob3V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXQgcmF0ZSBzd2l0Y2hpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2JpdF9yYXRlX3N3aXRjaGluZyAgICAqLwoKICB1aW50MzJfdCBGREZvcm1hdDsgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBUeCBmcmFtZSB3aWxsIGJlIHRyYW5zbWl0dGVkIGluIGNsYXNzaWMgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEIGZvcm1hdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZm9ybWF0ICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFR4RXZlbnRGaWZvQ29udHJvbDsgIC8qITwgU3BlY2lmaWVzIHRoZSBldmVudCBGSUZPIGNvbnRyb2wuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX0VGQyAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBNZXNzYWdlTWFya2VyOyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbWVzc2FnZSBtYXJrZXIgdG8gYmUgY29waWVkIGludG8gVHggRXZlbnQgRklGTwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCBmb3IgaWRlbnRpZmljYXRpb24gb2YgVHggbWVzc2FnZSBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMHhGRiAgICAgICAgICAgICAgICAqLwoKfSBGRENBTl9UeEhlYWRlclR5cGVEZWY7CgovKioKICAqIEBicmllZiAgRkRDQU4gUnggaGVhZGVyIHN0cnVjdHVyZSBkZWZpbml0aW9uCiAgKi8KdHlwZWRlZiBzdHJ1Y3QKewogIHVpbnQzMl90IElkZW50aWZpZXI7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGlkZW50aWZpZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCBhbmQgMHg3RkYsIGlmIElkVHlwZSBpcyBGRENBTl9TVEFOREFSRF9JRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAweDFGRkZGRkZGLCBpZiBJZFR5cGUgaXMgRkRDQU5fRVhURU5ERURfSUQgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBJZFR5cGU7ICAgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIHR5cGUgb2YgdGhlIHJlY2VpdmVkIG1lc3NhZ2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5faWRfdHlwZSAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFJ4RnJhbWVUeXBlOyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHRoZSByZWNlaXZlZCBtZXNzYWdlIGZyYW1lIHR5cGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZnJhbWVfdHlwZSAgICAgICAgICAgICovCgogIHVpbnQzMl90IERhdGFMZW5ndGg7ICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHJlY2VpdmVkIGZyYW1lIGxlbmd0aC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZGF0YV9sZW5ndGhfY29kZSAgICAgKi8KCiAgdWludDMyX3QgRXJyb3JTdGF0ZUluZGljYXRvcjsgICAvKiE8IFNwZWNpZmllcyB0aGUgZXJyb3Igc3RhdGUgaW5kaWNhdG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2Vycm9yX3N0YXRlX2luZGljYXRvciAqLwoKICB1aW50MzJfdCBCaXRSYXRlU3dpdGNoOyAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFJ4IGZyYW1lIGlzIHJlY2VpdmVkIHdpdGggb3Igd2l0aG91dCBiaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0ZSBzd2l0Y2hpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fYml0X3JhdGVfc3dpdGNoaW5nICAgICovCgogIHVpbnQzMl90IEZERm9ybWF0OyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciB0aGUgUnggZnJhbWUgaXMgcmVjZWl2ZWQgaW4gY2xhc3NpYyBvciBGRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZm9ybWF0ICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFJ4VGltZXN0YW1wOyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHRpbWVzdGFtcCBjb3VudGVyIHZhbHVlIGNhcHR1cmVkIG9uIHN0YXJ0IG9mIGZyYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VwdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDB4RkZGRiAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRmlsdGVySW5kZXg7ICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgaW5kZXggb2YgbWF0Y2hpbmcgUnggYWNjZXB0YW5jZSBmaWx0ZXIgZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAxMjcsIGlmIElkVHlwZSBpcyBGRENBTl9TVEFOREFSRF9JRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCA2MywgaWYgSWRUeXBlIGlzIEZEQ0FOX0VYVEVOREVEX0lEICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBJc0ZpbHRlck1hdGNoaW5nRnJhbWU7IC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGFjY2VwdGVkIGZyYW1lIGRpZCBub3QgbWF0Y2ggYW55IFJ4IGZpbHRlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY2NlcHRhbmNlIG9mIG5vbi1tYXRjaGluZyBmcmFtZXMgbWF5IGJlIGVuYWJsZWQgdmlhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFMX0ZEQ0FOX0NvbmZpZ0dsb2JhbEZpbHRlcigpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSAwIG9yIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKfSBGRENBTl9SeEhlYWRlclR5cGVEZWY7CgovKioKICAqIEBicmllZiAgRkRDQU4gVHggZXZlbnQgRklGTyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICovCnR5cGVkZWYgc3RydWN0CnsKICB1aW50MzJfdCBJZGVudGlmaWVyOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgaWRlbnRpZmllci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgYW5kIDB4N0ZGLCBpZiBJZFR5cGUgaXMgRkRDQU5fU1RBTkRBUkRfSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgYW5kIDB4MUZGRkZGRkYsIGlmIElkVHlwZSBpcyBGRENBTl9FWFRFTkRFRF9JRCAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IElkVHlwZTsgICAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBpZGVudGlmaWVyIHR5cGUgZm9yIHRoZSB0cmFuc21pdHRlZCBtZXNzYWdlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9pZF90eXBlICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgVHhGcmFtZVR5cGU7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZyYW1lIHR5cGUgb2YgdGhlIHRyYW5zbWl0dGVkIG1lc3NhZ2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2ZyYW1lX3R5cGUgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBEYXRhTGVuZ3RoOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIHRoZSB0cmFuc21pdHRlZCBmcmFtZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZGF0YV9sZW5ndGhfY29kZSAgICAgICovCgogIHVpbnQzMl90IEVycm9yU3RhdGVJbmRpY2F0b3I7IC8qITwgU3BlY2lmaWVzIHRoZSBlcnJvciBzdGF0ZSBpbmRpY2F0b3IuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2Vycm9yX3N0YXRlX2luZGljYXRvciAqLwoKICB1aW50MzJfdCBCaXRSYXRlU3dpdGNoOyAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBUeCBmcmFtZSBpcyB0cmFuc21pdHRlZCB3aXRoIG9yIHdpdGhvdXQgYml0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRlIHN3aXRjaGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fYml0X3JhdGVfc3dpdGNoaW5nICAgICovCgogIHVpbnQzMl90IEZERm9ybWF0OyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIFR4IGZyYW1lIGlzIHRyYW5zbWl0dGVkIGluIGNsYXNzaWMgb3IgRkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fZm9ybWF0ICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFR4VGltZXN0YW1wOyAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSB0aW1lc3RhbXAgY291bnRlciB2YWx1ZSBjYXB0dXJlZCBvbiBzdGFydCBvZiBmcmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDB4RkZGRiAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgTWVzc2FnZU1hcmtlcjsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIG1lc3NhZ2UgbWFya2VyIGNvcGllZCBpbnRvIFR4IEV2ZW50IEZJRk8gZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGlkZW50aWZpY2F0aW9uIG9mIFR4IG1lc3NhZ2Ugc3RhdHVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDB4RkYgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRXZlbnRUeXBlOyAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGV2ZW50IHR5cGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2V2ZW50X3R5cGUgICAgICAgICAgICAqLwoKfSBGRENBTl9UeEV2ZW50Rmlmb1R5cGVEZWY7CgovKioKICAqIEBicmllZiAgRkRDQU4gSGlnaCBQcmlvcml0eSBNZXNzYWdlIFN0YXR1cyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICovCnR5cGVkZWYgc3RydWN0CnsKICB1aW50MzJfdCBGaWx0ZXJMaXN0OyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIGZpbHRlciBsaXN0IG9mIHRoZSBtYXRjaGluZyBmaWx0ZXIgZWxlbWVudC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCA6IFN0YW5kYXJkIEZpbHRlciBMaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSA6IEV4dGVuZGVkIEZpbHRlciBMaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBGaWx0ZXJJbmRleDsgICAgLyohPCBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIG1hdGNoaW5nIGZpbHRlciBlbGVtZW50LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCBhbmQgMTI3LCBpZiBGaWx0ZXJMaXN0IGlzIDAgKFN0YW5kYXJkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCBhbmQgNjMsIGlmIEZpbHRlckxpc3QgaXMgMSAoRXh0ZW5kZWQpICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgTWVzc2FnZVN0b3JhZ2U7IC8qITwgU3BlY2lmaWVzIHRoZSBIUCBNZXNzYWdlIFN0b3JhZ2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9ocF9tc2dfc3RvcmFnZSAqLwoKICB1aW50MzJfdCBNZXNzYWdlSW5kZXg7ICAgLyohPCBTcGVjaWZpZXMgdGhlIEluZGV4IG9mIFJ4IEZJRk8gZWxlbWVudCB0byB3aGljaCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIHdhcyBzdG9yZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdmFsaWQgb25seSB3aGVuIE1lc3NhZ2VTdG9yYWdlIGlzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRDQU5fSFBfU1RPUkFHRV9SWEZJRk8wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRENBTl9IUF9TVE9SQUdFX1JYRklGTzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKfSBGRENBTl9IcE1zZ1N0YXR1c1R5cGVEZWY7CgovKioKICAqIEBicmllZiBGRENBTiBQcm90b2NvbCBTdGF0dXMgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgdWludDMyX3QgTGFzdEVycm9yQ29kZTsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBsYXN0IGVycm9yIHRoYXQgb2NjdXJyZWQgb24gdGhlIEZEQ0FOIGJ1cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX3Byb3RvY29sX2Vycm9yX2NvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBEYXRhTGFzdEVycm9yQ29kZTsgLyohPCBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIGxhc3QgZXJyb3IgdGhhdCBvY2N1cnJlZCBpbiB0aGUgZGF0YSBwaGFzZSBvZiBhIENBTiBGRCBmb3JtYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZSB3aXRoIGl0cyBCUlMgZmxhZyBzZXQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9wcm90b2NvbF9lcnJvcl9jb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgQWN0aXZpdHk7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBGRENBTiBtb2R1bGUgY29tbXVuaWNhdGlvbiBzdGF0ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX2NvbW11bmljYXRpb25fc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBFcnJvclBhc3NpdmU7ICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEZEQ0FOIG1vZHVsZSBlcnJvciBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgOiBUaGUgRkRDQU4gaXMgaW4gRXJyb3JfQWN0aXZlIHN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSA6IFRoZSBGRENBTiBpcyBpbiBFcnJvcl9QYXNzaXZlIHN0YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgV2FybmluZzsgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBGRENBTiBtb2R1bGUgd2FybmluZyBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgOiBlcnJvciBjb3VudGVycyAoUnhFcnJvckNudCBhbmQgVHhFcnJvckNudCkgYXJlIGJlbG93IHRoZSBFcnJvcl9XYXJuaW5nIGxpbWl0IG9mIDk2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSA6IGF0IGxlYXN0IG9uZSBvZiBlcnJvciBjb3VudGVycyBoYXMgcmVhY2hlZCB0aGUgRXJyb3JfV2FybmluZyBsaW1pdCBvZiA5NiAgICAgICAgICAgKi8KCiAgdWludDMyX3QgQnVzT2ZmOyAgICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBGRENBTiBtb2R1bGUgQnVzX09mZiBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgOiBUaGUgRkRDQU4gaXMgbm90IGluIEJ1c19PZmYgc3RhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxIDogVGhlIEZEQ0FOIGlzIGluIEJ1c19PZmYgc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBSeEVTSWZsYWc7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgRVNJIGZsYWcgb2YgbGFzdCByZWNlaXZlZCBDQU4gRkQgbWVzc2FnZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCA6IExhc3QgcmVjZWl2ZWQgQ0FOIEZEIG1lc3NhZ2UgZGlkIG5vdCBoYXZlIGl0cyBFU0kgZmxhZyBzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxIDogTGFzdCByZWNlaXZlZCBDQU4gRkQgbWVzc2FnZSBoYWQgaXRzIEVTSSBmbGFnIHNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBSeEJSU2ZsYWc7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgQlJTIGZsYWcgb2YgbGFzdCByZWNlaXZlZCBDQU4gRkQgbWVzc2FnZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCA6IExhc3QgcmVjZWl2ZWQgQ0FOIEZEIG1lc3NhZ2UgZGlkIG5vdCBoYXZlIGl0cyBCUlMgZmxhZyBzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxIDogTGFzdCByZWNlaXZlZCBDQU4gRkQgbWVzc2FnZSBoYWQgaXRzIEJSUyBmbGFnIHNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBSeEZERmZsYWc7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgaWYgQ0FOIEZEIG1lc3NhZ2UgKEZERiBmbGFnIHNldCkgaGFzIGJlZW4gcmVjZWl2ZWQgc2luY2UgbGFzdCBwcm90b2NvbCBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgOiBubyBDQU4gRkQgbWVzc2FnZSByZWNlaXZlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgOiBDQU4gRkQgbWVzc2FnZSByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFByb3RvY29sRXhjZXB0aW9uOyAvKiE8IFNwZWNpZmllcyB0aGUgRkRDQU4gbW9kdWxlIFByb3RvY29sIEV4Y2VwdGlvbiBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgOiBObyBwcm90b2NvbCBleGNlcHRpb24gZXZlbnQgb2NjdXJyZWQgc2luY2UgbGFzdCByZWFkIGFjY2VzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgOiBQcm90b2NvbCBleGNlcHRpb24gZXZlbnQgb2NjdXJyZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFREQ3ZhbHVlOyAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVHJhbnNtaXR0ZXIgRGVsYXkgQ29tcGVuc2F0aW9uIFZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgp9IEZEQ0FOX1Byb3RvY29sU3RhdHVzVHlwZURlZjsKCi8qKgogICogQGJyaWVmIEZEQ0FOIEVycm9yIENvdW50ZXJzIHN0cnVjdHVyZSBkZWZpbml0aW9uCiAgKi8KdHlwZWRlZiBzdHJ1Y3QKewogIHVpbnQzMl90IFR4RXJyb3JDbnQ7ICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVHJhbnNtaXQgRXJyb3IgQ291bnRlciBWYWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFJ4RXJyb3JDbnQ7ICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUmVjZWl2ZSBFcnJvciBDb3VudGVyIFZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEyNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgUnhFcnJvclBhc3NpdmU7IC8qITwgU3BlY2lmaWVzIHRoZSBSZWNlaXZlIEVycm9yIFBhc3NpdmUgc3RhdHVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIDogVGhlIFJlY2VpdmUgRXJyb3IgQ291bnRlciAoUnhFcnJvckNudCkgaXMgYmVsb3cgdGhlIGVycm9yIHBhc3NpdmUgbGV2ZWwgb2YgMTI4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSA6IFRoZSBSZWNlaXZlIEVycm9yIENvdW50ZXIgKFJ4RXJyb3JDbnQpIGhhcyByZWFjaGVkIHRoZSBlcnJvciBwYXNzaXZlIGxldmVsIG9mIDEyOCAqLwoKICB1aW50MzJfdCBFcnJvckxvZ2dpbmc7ICAgLyohPCBTcGVjaWZpZXMgdGhlIFRyYW5zbWl0L1JlY2VpdmUgZXJyb3IgbG9nZ2luZyBjb3VudGVyIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDI1NS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHdoZW4gYSBGRENBTiBwcm90b2NvbCBlcnJvciBjYXVzZXMgdGhlIFR4RXJyb3JDbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB0aGUgUnhFcnJvckNudCB0byBiZSBpbmNyZW1lbnRlZC4gVGhlIGNvdW50ZXIgc3RvcHMgYXQgMjU1OyB0aGUgbmV4dCBpbmNyZW1lbnQgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeEVycm9yQ250IG9yIFJ4RXJyb3JDbnQgc2V0cyBpbnRlcnJ1cHQgZmxhZyBGRENBTl9GTEFHX0VSUk9SX0xPR0dJTkdfT1ZFUkZMT1cgICAgICAgICAgICovCgp9IEZEQ0FOX0Vycm9yQ291bnRlcnNUeXBlRGVmOwoKLyoqCiAgKiBAYnJpZWYgRkRDQU4gVFQgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICovCnR5cGVkZWYgc3RydWN0CnsKICB1aW50MzJfdCBPcGVyYXRpb25Nb2RlOyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEZEQ0FOIE9wZXJhdGlvbiBNb2RlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fb3BlcmF0aW9uX21vZGUgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBHYXBFbmFibGU7ICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEZEQ0FOIFRUIE9wZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX1RUX29wZXJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIE9wZXJhdGlvbk1vZGUgaXMgc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRDQU5fVFRfQ09NTVVOSUNBVElPTl9MRVZFTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFRpbWVNYXN0ZXI7ICAgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBpbnN0YW5jZSBpcyBhIHNsYXZlIG9yIGEgcG90ZW50aWFsIG1hc3Rlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX1RUX3RpbWVfbWFzdGVyICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgU3luY0RldkxpbWl0OyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBTeW5jaHJvbml6YXRpb24gRGV2aWF0aW9uIExpbWl0IFNETCBvZiB0aGUgVFVSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yIDogVFVSID0gKE51bWVyYXRvciCxIFNETCkgLyBEZW5vbWluYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaXRoIDogU0RMID0gMl4oU3luY0RldkxpbWl0KzUpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA3ICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBJbml0UmVmVHJpZ09mZnNldDsgLyohPCBTcGVjaWZpZXMgdGhlIEluaXRpYWwgUmVmZXJlbmNlIFRyaWdnZXIgT2Zmc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxMjcgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBFeHRlcm5hbENsa1N5bmM7ICAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBFeHRlcm5hbCBDbG9jayBTeW5jaHJvbml6YXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9leHRlcm5hbF9jbGtfc3luYy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIE9wZXJhdGlvbk1vZGUgaXMgc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRDQU5fVFRfQ09NTVVOSUNBVElPTl9MRVZFTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IEFwcFdkZ0xpbWl0OyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgQXBwbGljYXRpb24gV2F0Y2hkb2cgTGltaXQgOiBtYXhpbXVtIHRpbWUgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0aGUgYXBwbGljYXRpb24gaGFzIHRvIHNlcnZlIHRoZSBhcHBsaWNhdGlvbiB3YXRjaGRvZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgYXBwbGljYXRpb24gd2F0Y2hkb2cgaXMgaW5jcmVtZW50ZWQgb25jZSBlYWNoIDI1NiBOVFVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBhcHBsaWNhdGlvbiB3YXRjaGRvZyBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyBBcHBXZGdMaW1pdCB0byAwLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBPcGVyYXRpb25Nb2RlIGlzIHNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEQ0FOX1RUX0NPTU1VTklDQVRJT05fTEVWRUwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBHbG9iYWxUaW1lRmlsdGVyOyAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBHbG9iYWwgVGltZSBGaWx0ZXJpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9nbG9iYWxfdGltZV9maWx0ZXJpbmcuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBPcGVyYXRpb25Nb2RlIGlzIHNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEQ0FOX1RUX0NPTU1VTklDQVRJT05fTEVWRUwxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBDbG9ja0NhbGlicmF0aW9uOyAgLyohPCBFbmFibGUgb3IgZGlzYWJsZSBBdXRvbWF0aWMgQ2xvY2sgQ2FsaWJyYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9hdXRvX2Nsa19jYWxpYnJhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBpZ25vcmVkIGlmIE9wZXJhdGlvbk1vZGUgaXMgc2V0IHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkRDQU5fVFRfQ09NTVVOSUNBVElPTl9MRVZFTDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IEV2dFRyaWdQb2xhcml0eTsgICAvKiE8IFNwZWNpZmllcyB0aGUgRXZlbnQgVHJpZ2dlciBQb2xhcml0eS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX1RUX2V2ZW50X3RyaWdfcG9sYXJpdHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZCBpZiBPcGVyYXRpb25Nb2RlIGlzIHNldCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZEQ0FOX1RUX0NPTU1VTklDQVRJT05fTEVWRUwwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBCYXNpY0N5Y2xlc05icjsgICAgLyohPCBTcGVjaWZpZXMgdGhlIG51Ym1lciBvZiBiYXNpYyBjeWNsZXMgaW4gdGhlIHN5c3RlbSBtYXRyaXguCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9iYXNpY19jeWNsZV9udW1iZXIgICAgICAgICovCgogIHVpbnQzMl90IEN5Y2xlU3RhcnRTeW5jOyAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHN5bmNocm9uaXphdGlvbiBwdWxzZSBvdXRwdXQgYXQgcGluIGZkY2FuMV9zb2MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9jeWNsZV9zdGFydF9zeW5jICAgICAgICAgICovCgogIHVpbnQzMl90IFR4RW5hYmxlV2luZG93OyAgICAvKiE8IFNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIFR4IGVuYWJsZSB3aW5kb3cgaW4gTlRVcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMSBhbmQgMTYgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgRXhwVHhUcmlnTmJyOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgVHhfVHJpZ2dlcnMgaW4gdGhlIHN5c3RlbSBtYXRyaXguCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyB0aGUgc3VtIG9mIFR4X1RyaWdnZXJzIGZvciBleGNsdXNpdmUsIHNpbmdsZSBhcmJpdHJhdGluZyBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQgYXJiaXRyYXRpbmcgd2luZG93cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNDA5NSAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgVFVSTnVtZXJhdG9yOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBUVVIgKFRpbWUgVW5pdCBSYXRpbykgbnVtZXJhdG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGlzIGFkdmljZWQgdG8gc2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRoZSBsYXJnZXN0IGFwcGxpY2FibGUgdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MTAwMDAgYW5kIDB4MUZGRkYgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFRVUkRlbm9taW5hdG9yOyAgICAvKiE8IFNwZWNpZmllcyB0aGUgVFVSIChUaW1lIFVuaXQgUmF0aW8pIGRlbm9taW5hdG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiAweDAwMDEgYW5kIDB4M0ZGRiAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBUcmlnZ2VyTWVtb3J5TmJyOyAgLyohPCBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiB0cmlnZ2VyIG1lbW9yeSBlbGVtZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNjQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgU3RvcFdhdGNoVHJpZ1NlbDsgIC8qITwgU3BlY2lmaWVzIHRoZSBpbnB1dCB0byBiZSB1c2VkIGFzIHN0b3Agd2F0Y2ggdHJpZ2dlci4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX1RUX3N0b3Bfd2F0Y2hfdHJpZ19zZWxlY3Rpb24gKi8KCiAgdWludDMyX3QgRXZlbnRUcmlnU2VsOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBpbnB1dCB0byBiZSB1c2VkIGFzIGV2ZW50IHRyaWdnZXIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9ldmVudF90cmlnX3NlbGVjdGlvbiAgICAgICovCgp9IEZEQ0FOX1RUX0NvbmZpZ1R5cGVEZWY7CgovKioKICAqIEBicmllZiAgRkRDQU4gVHJpZ2dlciBzdHJ1Y3R1cmUgZGVmaW5pdGlvbgogICovCnR5cGVkZWYgc3RydWN0CnsKICB1aW50MzJfdCBUcmlnZ2VySW5kZXg7ICAvKiE8IFNwZWNpZmllcyB0aGUgdHJpZ2dlciB3aGljaCB3aWxsIGJlIGNvbmZpZ3VyZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBUaW1lTWFyazsgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgY3ljbGUgdGltZSBmb3Igd2hpY2ggdGhlIHRyaWdnZXIgYmVjb21lcyBhY3RpdmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMHhGRkZGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBSZXBlYXRGYWN0b3I7ICAvKiE8IFNwZWNpZmllcyB0aGUgdHJpZ2dlciByZXBlYXQgZmFjdG9yLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9SZXBlYXRfRmFjdG9yICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgU3RhcnRDeWNsZTsgICAgLyohPCBTcGVjaWZpZXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjeWNsZSBpbiB3aGljaCB0aGUgdHJpZ2dlciBiZWNvbWVzIGFjdGl2ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgUmVwZWF0RmFjdG9yIGlzIHNldCB0byBGRENBTl9UVF9SRVBFQVRfRVZFUllfQ1lDTEUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgUmVwZWF0RmFjdG9yICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBUbUV2ZW50SW50OyAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnRlcm5hbCB0aW1lIG1hcmsgZXZlbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlbmFibGVkLCBGRENBTl9UVF9GTEFHX1RSSUdfVElNRV9NQVJLIGZsYWcgaXMgc2V0IHdoZW4gdHJpZ2dlciBtZW1vcnkgZWxlbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVjb21lcyBhY3RpdmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX1RUX1RpbWVfTWFya19FdmVudF9JbnRlcm5hbCAgICAgICAgICAqLwoKICB1aW50MzJfdCBUbUV2ZW50RXh0OyAgICAvKiE8IEVuYWJsZSBvciBkaXNhYmxlIHRoZSBleHRlcm5hbCB0aW1lIG1hcmsgZXZlbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlbmFibGVkLCBhbmQgaWYgVFRPQ04uVFRJRSBpcyBzZXQsIGEgcHVsc2UgaXMgZ2VuZXJhdGVkIGF0IGZkY2FuMV90bXAgd2hlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciBtZW1vcnkgZWxlbWVudCBiZWNvbWVzIGFjdGl2ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fVFRfVGltZV9NYXJrX0V2ZW50X0V4dGVybmFsICAgICAgICAgICovCgogIHVpbnQzMl90IFRyaWdnZXJUeXBlOyAgIC8qITwgU3BlY2lmaWVzIHRoZSB0cmlnZ2VyIHR5cGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX1RUX1RyaWdnZXJfVHlwZSAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBGaWx0ZXJUeXBlOyAgICAvKiE8IFNwZWNpZmllcyB0aGUgZmlsdGVyIGlkZW50aWZpZXIgdHlwZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5faWRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFR4QnVmZmVySW5kZXg7IC8qITwgU3BlY2lmaWVzIHRoZSBpbmRleCBvZiB0aGUgVHggYnVmZmVyIGZvciB3aGljaCB0aGUgdHJpZ2dlciBpcyB2YWxpZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fVHhfbG9jYXRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyB0YWtlbiBpbiBjb25zaWRlcmF0aW9uIG9ubHkgaWYgdGhlIHRyaWdnZXIgaXMgY29uZmlndXJlZCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IEZpbHRlckluZGV4OyAgIC8qITwgU3BlY2lmaWVzIHRoZSBmaWx0ZXIgZm9yIHdoaWNoIHRoZSB0cmlnZ2VyIGlzIHZhbGlkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgdGFrZW4gaW4gY29uc2lkZXJhdGlvbiBvbmx5IGlmIHRoZSB0cmlnZ2VyIGlzIGNvbmZpZ3VyZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlcHRpb24uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgbnVtYmVyIGJldHdlZW46CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIGFuZCAxMjcsIGlmIEZpbHRlclR5cGUgaXMgRkRDQU5fU1RBTkRBUkRfSUQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgYW5kIDYzLCBpZiBGaWx0ZXJUeXBlIGlzIEZEQ0FOX0VYVEVOREVEX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgp9IEZEQ0FOX1RyaWdnZXJUeXBlRGVmOwoKLyoqCiAgKiBAYnJpZWYgIEZEQ0FOIFRUIE9wZXJhdGlvbiBTdGF0dXMgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgdWludDMyX3QgRXJyb3JMZXZlbDsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgdGhlIFRUIG9wZXJhdGlvbiBlcnJvciBsZXZlbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRkRDQU5fVFRfZXJyb3JfbGV2ZWwgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IE1hc3RlclN0YXRlOyAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHRoZSBUVCBtYXN0ZXIgc3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZEQ0FOX1RUX21hc3Rlcl9zdGF0ZSAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBTeW5jU3RhdGU7ICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgVFQgc3luY2hyb25pemF0aW9uIHN0YXRlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGRENBTl9UVF9zeW5jX3N0YXRlICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgR1RpbWVRdWFsaXR5OyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFF1YWxpdHkgb2YgR2xvYmFsIFRpbWUgUGhhc2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHJlbGV2YW50IGluIExldmVsIDAgYW5kIExldmVsIDIsIG90aGVyd2lzZSBmaXhlZCB0byAwLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCA6IEdsb2JhbCB0aW1lIG5vdCB2YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSA6IEdsb2JhbCB0aW1lIGluIHBoYXNlIHdpdGggVGltZSBNYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgQ2xvY2tRdWFsaXR5OyAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFF1YWxpdHkgb2YgQ2xvY2sgU3BlZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHJlbGV2YW50IGluIExldmVsIDAgYW5kIExldmVsIDIsIG90aGVyd2lzZSBmaXhlZCB0byAxLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCA6IExvY2FsIGNsb2NrIHNwZWVkIG5vdCBzeW5jaHJvbml6ZWQgdG8gVGltZSBNYXN0ZXIgY2xvY2sgc3BlZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgOiBTeW5jaHJvbml6YXRpb24gRGV2aWF0aW9uID0gU0RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IFJlZlRyaWdPZmZzZXQ7ICAgIC8qITwgU3BlY2lmaWVzIHRoZSBBY3R1YWwgUmVmZXJlbmNlIFRyaWdnZXIgT2Zmc2V0IFZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMHhGRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgR1RpbWVEaXNjUGVuZGluZzsgLyohPCBTcGVjaWZpZXMgdGhlIEdsb2JhbCBUaW1lIERpc2NvbnRpbnVpdHkgU3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIDogTm8gZ2xvYmFsIHRpbWUgcHJlc2V0IHBlbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgOiBOb2RlIHdhaXRzIGZvciB0aGUgZ2xvYmFsIHRpbWUgcHJlc2V0IHRvIHRha2UgZWZmZWN0ICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IEdhcEZpbmlzaGVkOyAgICAgIC8qITwgU3BlY2lmaWVzIHdoZXRoZXIgYSBHYXAgaXMgZmluaXNoZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIDogUmVzZXQgYXQgdGhlIGVuZCBvZiBlYWNoIHJlZmVyZW5jZSBtZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxIDogR2FwIGZpbmlzaGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBNYXN0ZXJQcmlvcml0eTsgICAvKiE8IFNwZWNpZmllcyB0aGUgUHJpb3JpdHkgb2YgYWN0dWFsIFRpbWUgTWFzdGVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMHg3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgR2FwU3RhcnRlZDsgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBhIEdhcCBpcyBzdGFydGVkLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCA6IE5vIEdhcCBpbiBzY2hlZHVsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMSA6IEdhcCB0aW1lIGFmdGVyIEJhc2ljIEN5Y2xlIGhhcyBzdGFydGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiAgdWludDMyX3QgV2FpdEZvckV2dDsgICAgICAgLyohPCBTcGVjaWZpZXMgd2hldGhlciBhIEdhcCBpcyBhbm5vdWNlZC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDAgOiBObyBHYXAgYW5ub3VuY2VkLCByZXNldCBieSBhIHJlZmVyZW5jZSBtZXNzYWdlIHdpdGggTmV4dF9pc19HYXAgPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAxIDogUmVmZXJlbmNlIG1lc3NhZ2Ugd2l0aCBOZXh0X2lzX0dhcCA9IDEgcmVjZWl2ZWQgICAgICAgICAgICAgICAgICAgICAgICAqLwoKICB1aW50MzJfdCBBcHBXZGdFdnQ7ICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgQXBwbGljYXRpb24gV2F0Y2hkb2cgU3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIDogQXBwbGljYXRpb24gV2F0Y2hkb2cgc2VydmVkIGluIHRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgOiBGYWlsZWQgdG8gc2VydmUgQXBwbGljYXRpb24gV2F0Y2hkb2cgaW4gdGltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgogIHVpbnQzMl90IEVDU1BlbmRpbmc7ICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBFeHRlcm5hbCBDbG9jayBTeW5jaHJvbml6YXRpb24gU3RhdGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAwIDogTm8gZXh0ZXJuYWwgY2xvY2sgc3luY2hyb25pemF0aW9uIHBlbmRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgOiBOb2RlIHdhaXRzIGZvciBleHRlcm5hbCBjbG9jayBzeW5jaHJvbml6YXRpb24gdG8gdGFrZSBlZmZlY3QgICAgICAgICAgICovCgogIHVpbnQzMl90IFBoYXNlTG9jazsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBQaGFzZSBMb2NrIFN0YXRlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMCA6IFBoYXNlIG91dHNpZGUgcmFuZ2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIDEgOiBQaGFzZSBpbnNpZGUgcmFuZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgp9IEZEQ0FOX1RUT3BlcmF0aW9uU3RhdHVzVHlwZURlZjsKCi8qKgogICogQGJyaWVmICBGRENBTiBNZXNzYWdlIFJBTSBibG9ja3MKICAqLwp0eXBlZGVmIHN0cnVjdAp7CiAgdWludDMyX3QgU3RhbmRhcmRGaWx0ZXJTQTsgLyohPCBTcGVjaWZpZXMgdGhlIFN0YW5kYXJkIEZpbHRlciBMaXN0IFN0YXJ0IEFkZHJlc3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgMzItYml0IHdvcmQgYWRkcmVzcyAgICAgICovCgogIHVpbnQzMl90IEV4dGVuZGVkRmlsdGVyU0E7IC8qITwgU3BlY2lmaWVzIHRoZSBFeHRlbmRlZCBGaWx0ZXIgTGlzdCBTdGFydCBBZGRyZXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIDMyLWJpdCB3b3JkIGFkZHJlc3MgICAgICAqLwoKICB1aW50MzJfdCBSeEZJRk8wU0E7ICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgUnggRklGTyAwIFN0YXJ0IEFkZHJlc3MuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBtdXN0IGJlIGEgMzItYml0IHdvcmQgYWRkcmVzcyAgICAgICovCgogIHVpbnQzMl90IFJ4RklGTzFTQTsgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBSeCBGSUZPIDEgU3RhcnQgQWRkcmVzcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSAzMi1iaXQgd29yZCBhZGRyZXNzICAgICAgKi8KCiAgdWludDMyX3QgUnhCdWZmZXJTQTsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIFJ4IEJ1ZmZlciBTdGFydCBBZGRyZXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIDMyLWJpdCB3b3JkIGFkZHJlc3MgICAgICAqLwoKICB1aW50MzJfdCBUeEV2ZW50RklGT1NBOyAgICAvKiE8IFNwZWNpZmllcyB0aGUgVHggRXZlbnQgRklGTyBTdGFydCBBZGRyZXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIDMyLWJpdCB3b3JkIGFkZHJlc3MgICAgICAqLwoKICB1aW50MzJfdCBUeEJ1ZmZlclNBOyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVHggQnVmZmVycyBTdGFydCBBZGRyZXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIDMyLWJpdCB3b3JkIGFkZHJlc3MgICAgICAqLwoKICB1aW50MzJfdCBUeEZJRk9RU0E7ICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVHggRklGTy9RdWV1ZSBTdGFydCBBZGRyZXNzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIDMyLWJpdCB3b3JkIGFkZHJlc3MgICAgICAqLwoKICB1aW50MzJfdCBUVE1lbW9yeVNBOyAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgVHJpZ2dlciBNZW1vcnkgU3RhcnQgQWRkcmVzcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIG11c3QgYmUgYSAzMi1iaXQgd29yZCBhZGRyZXNzICAgICAgKi8KCiAgdWludDMyX3QgRW5kQWRkcmVzczsgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIEVuZCBBZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgUkFNLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgbXVzdCBiZSBhIDMyLWJpdCB3b3JkIGFkZHJlc3MgICAgICAqLwoKfSBGRENBTl9Nc2dSYW1BZGRyZXNzVHlwZURlZjsKCi8qKgogICogQGJyaWVmICBGRENBTiBoYW5kbGUgc3RydWN0dXJlIGRlZmluaXRpb24KICAqLwojaWYgVVNFX0hBTF9GRENBTl9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQp0eXBlZGVmIHN0cnVjdCBfX0ZEQ0FOX0hhbmRsZVR5cGVEZWYKI2Vsc2UKdHlwZWRlZiBzdHJ1Y3QKI2VuZGlmIC8qIFVTRV9IQUxfRkRDQU5fUkVHSVNURVJfQ0FMTEJBQ0tTICovCnsKICBGRENBTl9HbG9iYWxUeXBlRGVmICAgICAgICAgKkluc3RhbmNlOyAgICAgICAgLyohPCBSZWdpc3RlciBiYXNlIGFkZHJlc3MgICAgICovCgogIFRUQ0FOX1R5cGVEZWYgICAgICAgICAgICAgICAqdHRjYW47ICAgICAgICAgICAvKiE8IFRUIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcyAgKi8KCiAgRkRDQU5fSW5pdFR5cGVEZWYgICAgICAgICAgIEluaXQ7ICAgICAgICAgICAgIC8qITwgRkRDQU4gcmVxdWlyZWQgcGFyYW1ldGVycyAqLwoKICBGRENBTl9Nc2dSYW1BZGRyZXNzVHlwZURlZiAgbXNnUmFtOyAgICAgICAgICAgLyohPCBGRENBTiBNZXNzYWdlIFJBTSBibG9ja3MgICovCgogIHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICBMYXRlc3RUeEZpZm9RUmVxdWVzdDsgLyohPCBGRENBTiBUeCBidWZmZXIgaW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBsYXRlc3QgVHggRklGTy9RdWV1ZSByZXF1ZXN0ICovCgogIF9fSU8gSEFMX0ZEQ0FOX1N0YXRlVHlwZURlZiBTdGF0ZTsgICAgICAgICAgICAvKiE8IEZEQ0FOIGNvbW11bmljYXRpb24gc3RhdGUgKi8KCiAgSEFMX0xvY2tUeXBlRGVmICAgICAgICAgICAgIExvY2s7ICAgICAgICAgICAgIC8qITwgRkRDQU4gbG9ja2luZyBvYmplY3QgICAgICAqLwoKICBfX0lPIHVpbnQzMl90ICAgICAgICAgICAgICAgRXJyb3JDb2RlOyAgICAgICAgLyohPCBGRENBTiBFcnJvciBjb2RlICAgICAgICAgICovCgojaWYgVVNFX0hBTF9GRENBTl9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQogIHZvaWQgKCogQ2xvY2tDYWxpYnJhdGlvbkNhbGxiYWNrKShzdHJ1Y3QgX19GRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IENsa0NhbGlicmF0aW9uSVRzKTsgICAgICAgICAvKiE8IEZEQ0FOIENsb2NrIENhbGlicmF0aW9uIGNhbGxiYWNrICAgICAgICAgICovCiAgdm9pZCAoKiBUeEV2ZW50Rmlmb0NhbGxiYWNrKShzdHJ1Y3QgX19GRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFR4RXZlbnRGaWZvSVRzKTsgICAgICAgICAgICAgICAgIC8qITwgRkRDQU4gVHggRXZlbnQgRmlmbyBjYWxsYmFjayAgICAgICAgICAgICAgKi8KICB2b2lkICgqIFJ4RmlmbzBDYWxsYmFjaykoc3RydWN0IF9fRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBSeEZpZm8wSVRzKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGRENBTiBSeCBGaWZvIDAgY2FsbGJhY2sgICAgICAgICAgICAgICAgICAqLwogIHZvaWQgKCogUnhGaWZvMUNhbGxiYWNrKShzdHJ1Y3QgX19GRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFJ4RmlmbzFJVHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZEQ0FOIFJ4IEZpZm8gMSBjYWxsYmFjayAgICAgICAgICAgICAgICAgICovCiAgdm9pZCAoKiBUeEZpZm9FbXB0eUNhbGxiYWNrKShzdHJ1Y3QgX19GRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRkRDQU4gVHggRmlmbyBFbXB0eSBjYWxsYmFjayAgICAgICAgICAgICAgKi8KICB2b2lkICgqIFR4QnVmZmVyQ29tcGxldGVDYWxsYmFjaykoc3RydWN0IF9fRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBCdWZmZXJJbmRleGVzKTsgICAgICAgICAgICAgLyohPCBGRENBTiBUeCBCdWZmZXIgY29tcGxldGUgY2FsbGJhY2sgICAgICAgICAqLwogIHZvaWQgKCogVHhCdWZmZXJBYm9ydENhbGxiYWNrKShzdHJ1Y3QgX19GRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IEJ1ZmZlckluZGV4ZXMpOyAgICAgICAgICAgICAgICAvKiE8IEZEQ0FOIFR4IEJ1ZmZlciBhYm9ydCBjYWxsYmFjayAgICAgICAgICAgICovCiAgdm9pZCAoKiBSeEJ1ZmZlck5ld01lc3NhZ2VDYWxsYmFjaykoc3RydWN0IF9fRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRkRDQU4gUnggQnVmZmVyIE5ldyBNZXNzYWdlIGNhbGxiYWNrICAgICAgKi8KICB2b2lkICgqIEhpZ2hQcmlvcml0eU1lc3NhZ2VDYWxsYmFjaykoc3RydWN0IF9fRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGRENBTiBIaWdoIHByaW9yaXR5IG1lc3NhZ2UgY2FsbGJhY2sgICAgICAqLwogIHZvaWQgKCogVGltZXN0YW1wV3JhcGFyb3VuZENhbGxiYWNrKShzdHJ1Y3QgX19GRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZEQ0FOIFRpbWVzdGFtcCB3cmFwYXJvdW5kIGNhbGxiYWNrICAgICAgICovCiAgdm9pZCAoKiBUaW1lb3V0T2NjdXJyZWRDYWxsYmFjaykoc3RydWN0IF9fRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRkRDQU4gVGltZW91dCBvY2N1cnJlZCBjYWxsYmFjayAgICAgICAgICAgKi8KICB2b2lkICgqIEVycm9yQ2FsbGJhY2spKHN0cnVjdCBfX0ZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGRENBTiBFcnJvciBjYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAqLwogIHZvaWQgKCogRXJyb3JTdGF0dXNDYWxsYmFjaykoc3RydWN0IF9fRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBFcnJvclN0YXR1c0lUcyk7ICAgICAgICAgICAgICAgICAvKiE8IEZEQ0FOIEVycm9yIHN0YXR1cyBjYWxsYmFjayAgICAgICAgICAgICAgICovCiAgdm9pZCAoKiBUVF9TY2hlZHVsZVN5bmNDYWxsYmFjaykoc3RydWN0IF9fRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBUVFNjaGVkU3luY0lUcyk7ICAgICAgICAgICAgIC8qITwgRkRDQU4gVCBTY2hlZHVsZSBTeW5jaHJvbml6YXRpb24gY2FsbGJhY2sgKi8KICB2b2lkICgqIFRUX1RpbWVNYXJrQ2FsbGJhY2spKHN0cnVjdCBfX0ZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgVFRUaW1lTWFya0lUcyk7ICAgICAgICAgICAgICAgICAgLyohPCBGRENBTiBUVCBUaW1lIE1hcmsgY2FsbGJhY2sgICAgICAgICAgICAgICAqLwogIHZvaWQgKCogVFRfU3RvcFdhdGNoQ2FsbGJhY2spKHN0cnVjdCBfX0ZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgU1dUaW1lLCB1aW50MzJfdCBTV0N5Y2xlQ291bnQpOyAvKiE8IEZEQ0FOIFRUIFN0b3AgV2F0Y2ggY2FsbGJhY2sgICAgICAgICAgICAgICovCiAgdm9pZCAoKiBUVF9HbG9iYWxUaW1lQ2FsbGJhY2spKHN0cnVjdCBfX0ZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgVFRHbG9iVGltZUlUcyk7ICAgICAgICAgICAgICAgIC8qITwgRkRDQU4gVFQgR2xvYmFsIFRpbWUgY2FsbGJhY2sgICAgICAgICAgICAgKi8KCiAgdm9pZCAoKiBNc3BJbml0Q2FsbGJhY2spKHN0cnVjdCBfX0ZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRkRDQU4gTXNwIEluaXQgY2FsbGJhY2sgICAgICAgICAgICAgICAgICAgKi8KICB2b2lkICgqIE1zcERlSW5pdENhbGxiYWNrKShzdHJ1Y3QgX19GRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGRENBTiBNc3AgRGVJbml0IGNhbGxiYWNrICAgICAgICAgICAgICAgICAqLwojZW5kaWYgLyogVVNFX0hBTF9GRENBTl9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KCn0gRkRDQU5fSGFuZGxlVHlwZURlZjsKCiNpZiBVU0VfSEFMX0ZEQ0FOX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCi8qKgogICogQGJyaWVmICBIQUwgRkRDQU4gY29tbW9uIENhbGxiYWNrIElEIGVudW1lcmF0aW9uIGRlZmluaXRpb24KICAqLwp0eXBlZGVmIGVudW0KewogIEhBTF9GRENBTl9UWF9GSUZPX0VNUFRZX0NCX0lEICAgICAgICA9IDB4MDBVLCAvKiE8IEZEQ0FOIFR4IEZpZm8gRW1wdHkgY2FsbGJhY2sgSUQgICAgICAgICAqLwogIEhBTF9GRENBTl9SWF9CVUZGRVJfTkVXX01TR19DQl9JRCAgICA9IDB4MDFVLCAvKiE8IEZEQ0FOIFJ4IGJ1ZmZlciBuZXcgbWVzc2FnZSBjYWxsYmFjayBJRCAqLwogIEhBTF9GRENBTl9ISUdIX1BSSU9fTUVTU0FHRV9DQl9JRCAgICA9IDB4MDJVLCAvKiE8IEZEQ0FOIEhpZ2ggcHJpb3JpdHkgbWVzc2FnZSBjYWxsYmFjayBJRCAqLwogIEhBTF9GRENBTl9USU1FU1RBTVBfV1JBUEFST1VORF9DQl9JRCA9IDB4MDNVLCAvKiE8IEZEQ0FOIFRpbWVzdGFtcCB3cmFwYXJvdW5kIGNhbGxiYWNrIElEICAqLwogIEhBTF9GRENBTl9USU1FT1VUX09DQ1VSUkVEX0NCX0lEICAgICA9IDB4MDRVLCAvKiE8IEZEQ0FOIFRpbWVvdXQgb2NjdXJyZWQgY2FsbGJhY2sgSUQgICAgICAqLwogIEhBTF9GRENBTl9FUlJPUl9DQUxMQkFDS19DQl9JRCAgICAgICA9IDB4MDVVLCAvKiE8IEZEQ0FOIEVycm9yIGNhbGxiYWNrIElEICAgICAgICAgICAgICAgICAqLwoKICBIQUxfRkRDQU5fTVNQSU5JVF9DQl9JRCAgICAgICAgICAgICAgPSAweDA2VSwgLyohPCBGRENBTiBNc3BJbml0IGNhbGxiYWNrIElEICAgICAgICAgICAgICAgKi8KICBIQUxfRkRDQU5fTVNQREVJTklUX0NCX0lEICAgICAgICAgICAgPSAweDA3VSwgLyohPCBGRENBTiBNc3BEZUluaXQgY2FsbGJhY2sgSUQgICAgICAgICAgICAgKi8KCn0gSEFMX0ZEQ0FOX0NhbGxiYWNrSURUeXBlRGVmOwoKLyoqCiAgKiBAYnJpZWYgIEhBTCBGRENBTiBDYWxsYmFjayBwb2ludGVyIGRlZmluaXRpb24KICAqLwp0eXBlZGVmICB2b2lkICgqcEZEQ0FOX0NhbGxiYWNrVHlwZURlZikoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgcG9pbnRlciB0byBhIGNvbW1vbiBGRENBTiBjYWxsYmFjayBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgKi8KdHlwZWRlZiAgdm9pZCAoKnBGRENBTl9DbG9ja0NhbGlicmF0aW9uQ2FsbGJhY2tUeXBlRGVmKShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IENsa0NhbGlicmF0aW9uSVRzKTsgICAgICAgICAvKiE8IHBvaW50ZXIgdG8gQ2xvY2sgQ2FsaWJyYXRpb24gRkRDQU4gY2FsbGJhY2sgZnVuY3Rpb24gICAgICAgICAgICovCnR5cGVkZWYgIHZvaWQgKCpwRkRDQU5fVHhFdmVudEZpZm9DYWxsYmFja1R5cGVEZWYpKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgVHhFdmVudEZpZm9JVHMpOyAgICAgICAgICAgICAgICAgLyohPCBwb2ludGVyIHRvIFR4IGV2ZW50IEZpZm8gRkRDQU4gY2FsbGJhY2sgZnVuY3Rpb24gICAgICAgICAgICAgICAqLwp0eXBlZGVmICB2b2lkICgqcEZEQ0FOX1J4RmlmbzBDYWxsYmFja1R5cGVEZWYpKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgUnhGaWZvMElUcyk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgcG9pbnRlciB0byBSeCBGaWZvIDAgRkRDQU4gY2FsbGJhY2sgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgKi8KdHlwZWRlZiAgdm9pZCAoKnBGRENBTl9SeEZpZm8xQ2FsbGJhY2tUeXBlRGVmKShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFJ4RmlmbzFJVHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHBvaW50ZXIgdG8gUnggRmlmbyAxIEZEQ0FOIGNhbGxiYWNrIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICovCnR5cGVkZWYgIHZvaWQgKCpwRkRDQU5fVHhCdWZmZXJDb21wbGV0ZUNhbGxiYWNrVHlwZURlZikoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBCdWZmZXJJbmRleGVzKTsgICAgICAgICAgICAgLyohPCBwb2ludGVyIHRvIFR4IEJ1ZmZlciBjb21wbGV0ZSBGRENBTiBjYWxsYmFjayBmdW5jdGlvbiAgICAgICAgICAqLwp0eXBlZGVmICB2b2lkICgqcEZEQ0FOX1R4QnVmZmVyQWJvcnRDYWxsYmFja1R5cGVEZWYpKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgQnVmZmVySW5kZXhlcyk7ICAgICAgICAgICAgICAgIC8qITwgcG9pbnRlciB0byBUeCBCdWZmZXIgYWJvcnQgRkRDQU4gY2FsbGJhY2sgZnVuY3Rpb24gICAgICAgICAgICAgKi8KdHlwZWRlZiAgdm9pZCAoKnBGRENBTl9FcnJvclN0YXR1c0NhbGxiYWNrVHlwZURlZikoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBFcnJvclN0YXR1c0lUcyk7ICAgICAgICAgICAgICAgICAvKiE8IHBvaW50ZXIgdG8gRXJyb3IgU3RhdHVzIGNhbGxiYWNrIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICovCnR5cGVkZWYgIHZvaWQgKCpwRkRDQU5fVFRfU2NoZWR1bGVTeW5jQ2FsbGJhY2tUeXBlRGVmKShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRUU2NoZWRTeW5jSVRzKTsgICAgICAgICAgICAgLyohPCBwb2ludGVyIHRvIFRUIFNjaGVkdWxlIFN5bmNocm9uaXphdGlvbiBGRENBTiBjYWxsYmFjayBmdW5jdGlvbiAqLwp0eXBlZGVmICB2b2lkICgqcEZEQ0FOX1RUX1RpbWVNYXJrQ2FsbGJhY2tUeXBlRGVmKShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRUVGltZU1hcmtJVHMpOyAgICAgICAgICAgICAgICAgIC8qITwgcG9pbnRlciB0byBUVCBUaW1lIE1hcmsgRkRDQU4gY2FsbGJhY2sgZnVuY3Rpb24gICAgICAgICAgICAgICAgKi8KdHlwZWRlZiAgdm9pZCAoKnBGRENBTl9UVF9TdG9wV2F0Y2hDYWxsYmFja1R5cGVEZWYpKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgU1dUaW1lLCB1aW50MzJfdCBTV0N5Y2xlQ291bnQpOyAvKiE8IHBvaW50ZXIgdG8gVFQgU3RvcCBXYXRjaCBGRENBTiBjYWxsYmFjayBmdW5jdGlvbiAgICAgICAgICAgICAgICovCnR5cGVkZWYgIHZvaWQgKCpwRkRDQU5fVFRfR2xvYmFsVGltZUNhbGxiYWNrVHlwZURlZikoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBUVEdsb2JUaW1lSVRzKTsgICAgICAgICAgICAgICAgLyohPCBwb2ludGVyIHRvIFRUIEdsb2JhbCBUaW1lIEZEQ0FOIGNhbGxiYWNrIGZ1bmN0aW9uICAgICAgICAgICAgICAqLwojZW5kaWYgLyogVVNFX0hBTF9GRENBTl9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KCi8qKgogICogQH0KICAqLwoKLyogRXhwb3J0ZWQgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyoqIEBkZWZncm91cCBGRENBTl9FeHBvcnRlZF9Db25zdGFudHMgRkRDQU4gRXhwb3J0ZWQgQ29uc3RhbnRzCiAgKiBAewogICovCgovKiogQGRlZmdyb3VwIEhBTF9GRENBTl9FcnJvcl9Db2RlIEhBTCBGRENBTiBFcnJvciBDb2RlCiAgKiBAewogICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX05PTkUgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IE5vIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfVElNRU9VVCAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgVGltZW91dCBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9OT1RfSU5JVElBTElaRUQgKCh1aW50MzJfdCkweDAwMDAwMDAyVSkgLyohPCBQZXJpcGhlcmFsIG5vdCBpbml0aWFsaXplZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX05PVF9SRUFEWSAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKSAvKiE8IFBlcmlwaGVyYWwgbm90IHJlYWR5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfTk9UX1NUQVJURUQgICAgICgodWludDMyX3QpMHgwMDAwMDAwOFUpIC8qITwgUGVyaXBoZXJhbCBub3Qgc3RhcnRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9OT1RfU1VQUE9SVEVEICAgKCh1aW50MzJfdCkweDAwMDAwMDEwVSkgLyohPCBNb2RlIG5vdCBzdXBwb3J0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX1BBUkFNICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjBVKSAvKiE8IFBhcmFtZXRlciBlcnJvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfUEVORElORyAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDA0MFUpIC8qITwgUGVuZGluZyBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9SQU1fQUNDRVNTICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwVSkgLyohPCBNZXNzYWdlIFJBTSBBY2Nlc3MgRmFpbHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX0ZJRk9fRU1QVFkgICAgICAoKHVpbnQzMl90KTB4MDAwMDAxMDBVKSAvKiE8IFB1dCBlbGVtZW50IGluIGZ1bGwgRklGTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfRklGT19GVUxMICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMFUpIC8qITwgR2V0IGVsZW1lbnQgZnJvbSBlbXB0eSBGSUZPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9MT0dfT1ZFUkZMT1cgICAgRkRDQU5fSVJfRUxPICAgICAgICAgICAgLyohPCBPdmVyZmxvdyBvZiBDQU4gRXJyb3IgTG9nZ2luZyBDb3VudGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX1JBTV9XREcgICAgICAgICBGRENBTl9JUl9XREkgICAgICAgICAgICAvKiE8IE1lc3NhZ2UgUkFNIFdhdGNoZG9nIGV2ZW50IG9jY3VycmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfUFJPVE9DT0xfQVJCVCAgIEZEQ0FOX0lSX1BFQSAgICAgICAgICAgIC8qITwgUHJvdG9jb2wgRXJyb3IgaW4gQXJiaXRyYXRpb24gUGhhc2UgKE5vbWluYWwgQml0IFRpbWUgaXMgdXNlZCkgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9QUk9UT0NPTF9EQVRBICAgRkRDQU5fSVJfUEVEICAgICAgICAgICAgLyohPCBQcm90b2NvbCBFcnJvciBpbiBEYXRhIFBoYXNlIChEYXRhIEJpdCBUaW1lIGlzIHVzZWQpICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX1JFU0VSVkVEX0FSRUEgICBGRENBTl9JUl9BUkEgICAgICAgICAgICAvKiE8IEFjY2VzcyB0byBSZXNlcnZlZCBBZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfVFRfR0xPQkFMX1RJTUUgIEZEQ0FOX1RUSVJfR1RFICAgICAgICAgIC8qITwgR2xvYmFsIFRpbWUgRXJyb3IgOiBTeW5jaHJvbml6YXRpb24gZGV2aWF0aW9uIGV4Y2VlZGVkIGxpbWl0ICAgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9UVF9UWF9VTkRFUkZMT1cgRkRDQU5fVFRJUl9UWFUgICAgICAgICAgLyohPCBUeCBDb3VudCBVbmRlcmZsb3cgOiBMZXNzIFR4IHRyaWdnZXIgdGhhbiBleHBlY3RlZCBpbiBvbmUgbWF0cml4IGN5Y2xlICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX1RUX1RYX09WRVJGTE9XICBGRENBTl9UVElSX1RYTyAgICAgICAgICAvKiE8IFR4IENvdW50IE92ZXJmbG93IDogTW9yZSBUeCB0cmlnZ2VyIHRoYW4gZXhwZWN0ZWQgaW4gb25lIG1hdHJpeCBjeWNsZSAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfVFRfU0NIRURVTEUxICAgIEZEQ0FOX1RUSVJfU0UxICAgICAgICAgIC8qITwgU2NoZWR1bGluZyBlcnJvciAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9UVF9TQ0hFRFVMRTIgICAgRkRDQU5fVFRJUl9TRTIgICAgICAgICAgLyohPCBTY2hlZHVsaW5nIGVycm9yIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX1RUX05PX0lOSVRfUkVGICBGRENBTl9UVElSX0lXVCAgICAgICAgICAvKiE8IE5vIHN5c3RlbSBzdGFydHVwIGR1ZSB0byBtaXNzaW5nIHJlZmVyZW5jZSBtZXNzYWdlICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBIQUxfRkRDQU5fRVJST1JfVFRfTk9fUkVGICAgICAgIEZEQ0FOX1RUSVJfV1QgICAgICAgICAgIC8qITwgTWlzc2luZyByZWZlcmVuY2UgbWVzc2FnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEhBTF9GRENBTl9FUlJPUl9UVF9BUFBMX1dERyAgICAgRkRDQU5fVFRJUl9BVyAgICAgICAgICAgLyohPCBBcHBsaWNhdGlvbiB3YXRjaGRvZyBub3Qgc2VydmVkIGluIHRpbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX1RUX0NPTkZJRyAgICAgICBGRENBTl9UVElSX0NFUiAgICAgICAgICAvKiE8IEVycm9yIGZvdW5kIGluIHRyaWdnZXIgbGlzdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCiNpZiBVU0VfSEFMX0ZEQ0FOX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCiNkZWZpbmUgSEFMX0ZEQ0FOX0VSUk9SX0lOVkFMSURfQ0FMTEJBQ0sgKCh1aW50MzJfdCkweDAwMDAwMTAwVSkgLyohPCBJbnZhbGlkIENhbGxiYWNrIGVycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2VuZGlmIC8qIFVTRV9IQUxfRkRDQU5fUkVHSVNURVJfQ0FMTEJBQ0tTICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9mcmFtZV9mb3JtYXQgRkRDQU4gRnJhbWUgRm9ybWF0CiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fRlJBTUVfQ0xBU1NJQyAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ2xhc3NpYyBtb2RlICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fRlJBTUVfRkRfTk9fQlJTICgodWludDMyX3QpRkRDQU5fQ0NDUl9GRE9FKSAgICAgICAgICAgICAgICAgICAgIC8qITwgRkQgbW9kZSB3aXRob3V0IEJpdFJhdGUgU3dpdGNoaW5nICovCiNkZWZpbmUgRkRDQU5fRlJBTUVfRkRfQlJTICAgICgodWludDMyX3QpKEZEQ0FOX0NDQ1JfRkRPRSB8IEZEQ0FOX0NDQ1JfQlJTRSkpIC8qITwgRkQgbW9kZSB3aXRoIEJpdFJhdGUgU3dpdGNoaW5nICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9vcGVyYXRpbmdfbW9kZSBGRENBTiBPcGVyYXRpbmcgTW9kZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX01PREVfTk9STUFMICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBOb3JtYWwgbW9kZSAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fTU9ERV9SRVNUUklDVEVEX09QRVJBVElPTiAoKHVpbnQzMl90KTB4MDAwMDAwMDFVKSAvKiE8IFJlc3RyaWN0ZWQgT3BlcmF0aW9uIG1vZGUgKi8KI2RlZmluZSBGRENBTl9NT0RFX0JVU19NT05JVE9SSU5HICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMlUpIC8qITwgQnVzIE1vbml0b3JpbmcgbW9kZSAgICAgICAqLwojZGVmaW5lIEZEQ0FOX01PREVfSU5URVJOQUxfTE9PUEJBQ0sgICAgKCh1aW50MzJfdCkweDAwMDAwMDAzVSkgLyohPCBJbnRlcm5hbCBMb29wQmFjayBtb2RlICAgICovCiNkZWZpbmUgRkRDQU5fTU9ERV9FWFRFUk5BTF9MT09QQkFDSyAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKSAvKiE8IEV4dGVybmFsIExvb3BCYWNrIG1vZGUgICAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX2Nsb2NrX2NhbGlicmF0aW9uIEZEQ0FOIENsb2NrIENhbGlicmF0aW9uCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfQ0FMSUJSQVRJT05fRElTQUJMRSAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IERpc2FibGUgQ2xvY2sgQ2FsaWJyYXRpb24gKi8KI2RlZmluZSBGRENBTl9DTE9DS19DQUxJQlJBVElPTl9FTkFCTEUgICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgRW5hYmxlIENsb2NrIENhbGlicmF0aW9uICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fY2xvY2tfZGl2aWRlciBGRENBTiBDbG9jayBEaXZpZGVyCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMSAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDEgICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMiAgKCh1aW50MzJfdCkweDAwMDEwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDIgICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWNCAgKCh1aW50MzJfdCkweDAwMDIwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDQgICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWNiAgKCh1aW50MzJfdCkweDAwMDMwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDYgICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWOCAgKCh1aW50MzJfdCkweDAwMDQwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDggICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMTAgKCh1aW50MzJfdCkweDAwMDUwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDEwICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMTIgKCh1aW50MzJfdCkweDAwMDYwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDEyICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMTQgKCh1aW50MzJfdCkweDAwMDcwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDE0ICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMTYgKCh1aW50MzJfdCkweDAwMDgwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDE2ICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMTggKCh1aW50MzJfdCkweDAwMDkwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDE4ICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMjAgKCh1aW50MzJfdCkweDAwMEEwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDIwICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMjIgKCh1aW50MzJfdCkweDAwMEIwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDIyICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMjQgKCh1aW50MzJfdCkweDAwMEMwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDI0ICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMjYgKCh1aW50MzJfdCkweDAwMEQwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDI2ICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMjggKCh1aW50MzJfdCkweDAwMEUwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDI4ICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfRElWMzAgKCh1aW50MzJfdCkweDAwMEYwMDAwVSkgLyohPCBEaXZpZGUga2VybmVsIGNsb2NrIGJ5IDMwICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9jYWxpYnJhdGlvbl9maWVsZF9sZW5ndGggRkRDQU4gQ2FsaWJyYXRpb24gRmllbGQgTGVuZ3RoCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fQ0FMSUJfRklFTERfTEVOR1RIXzMyICgodWludDMyX3QpMHgwMDAwMDAwMFUpICAgICAgIC8qITwgQ2FsaWJyYXRpb24gZmllbGQgbGVuZ3RoIGlzIDMyIGJpdHMgKi8KI2RlZmluZSBGRENBTl9DQUxJQl9GSUVMRF9MRU5HVEhfNjQgKCh1aW50MzJfdClGRENBTkNDVV9DQ0ZHX0NGTCkgLyohPCBDYWxpYnJhdGlvbiBmaWVsZCBsZW5ndGggaXMgNjQgYml0cyAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fY2FsaWJyYXRpb25fc3RhdGUgRkRDQU4gQ2FsaWJyYXRpb24gU3RhdGUKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9DTE9DS19OT1RfQ0FMSUJSQVRFRCAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IENsb2NrIG5vdCBjYWxpYnJhdGVkICAgICAgICovCiNkZWZpbmUgRkRDQU5fQ0xPQ0tfQkFTSUNfQ0FMSUJSQVRFRCAgICAgKCh1aW50MzJfdCkweDQwMDAwMDAwVSkgLyohPCBDbG9jayBiYXNpYyBjYWxpYnJhdGVkICAgICAqLwojZGVmaW5lIEZEQ0FOX0NMT0NLX1BSRUNJU0lPTl9DQUxJQlJBVEVEICgodWludDMyX3QpMHg4MDAwMDAwMFUpIC8qITwgQ2xvY2sgcHJlY2lzaW9uIGNhbGlicmF0ZWQgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX2NhbGlicmF0aW9uX2NvdW50ZXIgRkRDQU4gQ2FsaWJyYXRpb24gQ291bnRlcgogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0NBTElCX1RJTUVfUVVBTlRBX0NPVU5URVIgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgVGltZSBRdWFudGEgQ291bnRlciAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0NBTElCX0NMT0NLX1BFUklPRF9DT1VOVEVSICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgT3NjaWxsYXRvciBDbG9jayBQZXJpb2QgQ291bnRlciAqLwojZGVmaW5lIEZEQ0FOX0NBTElCX1dBVENIRE9HX0NPVU5URVIgICAgICgodWludDMyX3QpMHgwMDAwMDAwMlUpIC8qITwgQ2FsaWJyYXRpb24gV2F0Y2hkb2cgQ291bnRlciAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fZGF0YV9maWVsZF9zaXplIEZEQ0FOIERhdGEgRmllbGQgU2l6ZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0RBVEFfQllURVNfOCAgKCh1aW50MzJfdCkweDAwMDAwMDA0VSkgLyohPCA4IGJ5dGVzIGRhdGEgZmllbGQgICovCiNkZWZpbmUgRkRDQU5fREFUQV9CWVRFU18xMiAoKHVpbnQzMl90KTB4MDAwMDAwMDVVKSAvKiE8IDEyIGJ5dGVzIGRhdGEgZmllbGQgKi8KI2RlZmluZSBGRENBTl9EQVRBX0JZVEVTXzE2ICgodWludDMyX3QpMHgwMDAwMDAwNlUpIC8qITwgMTYgYnl0ZXMgZGF0YSBmaWVsZCAqLwojZGVmaW5lIEZEQ0FOX0RBVEFfQllURVNfMjAgKCh1aW50MzJfdCkweDAwMDAwMDA3VSkgLyohPCAyMCBieXRlcyBkYXRhIGZpZWxkICovCiNkZWZpbmUgRkRDQU5fREFUQV9CWVRFU18yNCAoKHVpbnQzMl90KTB4MDAwMDAwMDhVKSAvKiE8IDI0IGJ5dGVzIGRhdGEgZmllbGQgKi8KI2RlZmluZSBGRENBTl9EQVRBX0JZVEVTXzMyICgodWludDMyX3QpMHgwMDAwMDAwQVUpIC8qITwgMzIgYnl0ZXMgZGF0YSBmaWVsZCAqLwojZGVmaW5lIEZEQ0FOX0RBVEFfQllURVNfNDggKCh1aW50MzJfdCkweDAwMDAwMDBFVSkgLyohPCA0OCBieXRlcyBkYXRhIGZpZWxkICovCiNkZWZpbmUgRkRDQU5fREFUQV9CWVRFU182NCAoKHVpbnQzMl90KTB4MDAwMDAwMTJVKSAvKiE8IDY0IGJ5dGVzIGRhdGEgZmllbGQgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX3R4Rmlmb1F1ZXVlX01vZGUgRkRDQU4gVHggRklGTy9RdWV1ZSBNb2RlCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFhfRklGT19PUEVSQVRJT04gICgodWludDMyX3QpMHgwMDAwMDAwMFUpICAgICAvKiE8IEZJRk8gbW9kZSAgKi8KI2RlZmluZSBGRENBTl9UWF9RVUVVRV9PUEVSQVRJT04gKCh1aW50MzJfdClGRENBTl9UWEJDX1RGUU0pIC8qITwgUXVldWUgbW9kZSAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5faWRfdHlwZSBGRENBTiBJRCBUeXBlCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fU1RBTkRBUkRfSUQgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBTdGFuZGFyZCBJRCBlbGVtZW50ICovCiNkZWZpbmUgRkRDQU5fRVhURU5ERURfSUQgKCh1aW50MzJfdCkweDQwMDAwMDAwVSkgLyohPCBFeHRlbmRlZCBJRCBlbGVtZW50ICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9mcmFtZV90eXBlIEZEQ0FOIEZyYW1lIFR5cGUKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9EQVRBX0ZSQU1FICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgIC8qITwgRGF0YSBmcmFtZSAgICovCiNkZWZpbmUgRkRDQU5fUkVNT1RFX0ZSQU1FICgodWludDMyX3QpMHgyMDAwMDAwMFUpICAvKiE8IFJlbW90ZSBmcmFtZSAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fZGF0YV9sZW5ndGhfY29kZSBGRENBTiBEYXRhIExlbmd0aCBDb2RlCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fRExDX0JZVEVTXzAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgMCBieXRlcyBkYXRhIGZpZWxkICAqLwojZGVmaW5lIEZEQ0FOX0RMQ19CWVRFU18xICAoKHVpbnQzMl90KTB4MDAwMTAwMDBVKSAvKiE8IDEgYnl0ZXMgZGF0YSBmaWVsZCAgKi8KI2RlZmluZSBGRENBTl9ETENfQllURVNfMiAgKCh1aW50MzJfdCkweDAwMDIwMDAwVSkgLyohPCAyIGJ5dGVzIGRhdGEgZmllbGQgICovCiNkZWZpbmUgRkRDQU5fRExDX0JZVEVTXzMgICgodWludDMyX3QpMHgwMDAzMDAwMFUpIC8qITwgMyBieXRlcyBkYXRhIGZpZWxkICAqLwojZGVmaW5lIEZEQ0FOX0RMQ19CWVRFU180ICAoKHVpbnQzMl90KTB4MDAwNDAwMDBVKSAvKiE8IDQgYnl0ZXMgZGF0YSBmaWVsZCAgKi8KI2RlZmluZSBGRENBTl9ETENfQllURVNfNSAgKCh1aW50MzJfdCkweDAwMDUwMDAwVSkgLyohPCA1IGJ5dGVzIGRhdGEgZmllbGQgICovCiNkZWZpbmUgRkRDQU5fRExDX0JZVEVTXzYgICgodWludDMyX3QpMHgwMDA2MDAwMFUpIC8qITwgNiBieXRlcyBkYXRhIGZpZWxkICAqLwojZGVmaW5lIEZEQ0FOX0RMQ19CWVRFU183ICAoKHVpbnQzMl90KTB4MDAwNzAwMDBVKSAvKiE8IDcgYnl0ZXMgZGF0YSBmaWVsZCAgKi8KI2RlZmluZSBGRENBTl9ETENfQllURVNfOCAgKCh1aW50MzJfdCkweDAwMDgwMDAwVSkgLyohPCA4IGJ5dGVzIGRhdGEgZmllbGQgICovCiNkZWZpbmUgRkRDQU5fRExDX0JZVEVTXzEyICgodWludDMyX3QpMHgwMDA5MDAwMFUpIC8qITwgMTIgYnl0ZXMgZGF0YSBmaWVsZCAqLwojZGVmaW5lIEZEQ0FOX0RMQ19CWVRFU18xNiAoKHVpbnQzMl90KTB4MDAwQTAwMDBVKSAvKiE8IDE2IGJ5dGVzIGRhdGEgZmllbGQgKi8KI2RlZmluZSBGRENBTl9ETENfQllURVNfMjAgKCh1aW50MzJfdCkweDAwMEIwMDAwVSkgLyohPCAyMCBieXRlcyBkYXRhIGZpZWxkICovCiNkZWZpbmUgRkRDQU5fRExDX0JZVEVTXzI0ICgodWludDMyX3QpMHgwMDBDMDAwMFUpIC8qITwgMjQgYnl0ZXMgZGF0YSBmaWVsZCAqLwojZGVmaW5lIEZEQ0FOX0RMQ19CWVRFU18zMiAoKHVpbnQzMl90KTB4MDAwRDAwMDBVKSAvKiE8IDMyIGJ5dGVzIGRhdGEgZmllbGQgKi8KI2RlZmluZSBGRENBTl9ETENfQllURVNfNDggKCh1aW50MzJfdCkweDAwMEUwMDAwVSkgLyohPCA0OCBieXRlcyBkYXRhIGZpZWxkICovCiNkZWZpbmUgRkRDQU5fRExDX0JZVEVTXzY0ICgodWludDMyX3QpMHgwMDBGMDAwMFUpIC8qITwgNjQgYnl0ZXMgZGF0YSBmaWVsZCAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fZXJyb3Jfc3RhdGVfaW5kaWNhdG9yIEZEQ0FOIEVycm9yIFN0YXRlIEluZGljYXRvcgogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0VTSV9BQ1RJVkUgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgVHJhbnNtaXR0aW5nIG5vZGUgaXMgZXJyb3IgYWN0aXZlICAqLwojZGVmaW5lIEZEQ0FOX0VTSV9QQVNTSVZFICgodWludDMyX3QpMHg4MDAwMDAwMFUpIC8qITwgVHJhbnNtaXR0aW5nIG5vZGUgaXMgZXJyb3IgcGFzc2l2ZSAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fYml0X3JhdGVfc3dpdGNoaW5nIEZEQ0FOIEJpdCBSYXRlIFN3aXRjaGluZwogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0JSU19PRkYgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBGRENBTiBmcmFtZXMgdHJhbnNtaXR0ZWQvcmVjZWl2ZWQgd2l0aG91dCBiaXQgcmF0ZSBzd2l0Y2hpbmcgKi8KI2RlZmluZSBGRENBTl9CUlNfT04gICgodWludDMyX3QpMHgwMDEwMDAwMFUpIC8qITwgRkRDQU4gZnJhbWVzIHRyYW5zbWl0dGVkL3JlY2VpdmVkIHdpdGggYml0IHJhdGUgc3dpdGNoaW5nICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9mb3JtYXQgRkRDQU4gZm9ybWF0CiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fQ0xBU1NJQ19DQU4gKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBGcmFtZSB0cmFuc21pdHRlZC9yZWNlaXZlZCBpbiBDbGFzc2ljIENBTiBmb3JtYXQgKi8KI2RlZmluZSBGRENBTl9GRF9DQU4gICAgICAoKHVpbnQzMl90KTB4MDAyMDAwMDBVKSAvKiE8IEZyYW1lIHRyYW5zbWl0dGVkL3JlY2VpdmVkIGluIEZEQ0FOIGZvcm1hdCAgICAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fRUZDIEZEQ0FOIEV2ZW50IEZJRk8gY29udHJvbAogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX05PX1RYX0VWRU5UUyAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IERvIG5vdCBzdG9yZSBUeCBldmVudHMgKi8KI2RlZmluZSBGRENBTl9TVE9SRV9UWF9FVkVOVFMgKCh1aW50MzJfdCkweDAwODAwMDAwVSkgLyohPCBTdG9yZSBUeCBldmVudHMgICAgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9maWx0ZXJfdHlwZSBGRENBTiBGaWx0ZXIgVHlwZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0ZJTFRFUl9SQU5HRSAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgUmFuZ2UgZmlsdGVyIGZyb20gRmlsdGVySUQxIHRvIEZpbHRlcklEMiAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fRklMVEVSX0RVQUwgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxVSkgLyohPCBEdWFsIElEIGZpbHRlciBmb3IgRmlsdGVySUQxIG9yIEZpbHRlcklEMiAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GSUxURVJfTUFTSyAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAvKiE8IENsYXNzaWMgZmlsdGVyOiBGaWx0ZXJJRDEgPSBmaWx0ZXIsIEZpbHRlcklEMiA9IG1hc2sgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0ZJTFRFUl9SQU5HRV9OT19FSURNICgodWludDMyX3QpMHgwMDAwMDAwM1UpIC8qITwgUmFuZ2UgZmlsdGVyIGZyb20gRmlsdGVySUQxIHRvIEZpbHRlcklEMiwgRUlETSBtYXNrIG5vdCBhcHBsaWVkICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9maWx0ZXJfY29uZmlnIEZEQ0FOIEZpbHRlciBDb25maWd1cmF0aW9uCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fRklMVEVSX0RJU0FCTEUgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBEaXNhYmxlIGZpbHRlciBlbGVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GSUxURVJfVE9fUlhGSUZPMCAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDFVKSAvKiE8IFN0b3JlIGluIFJ4IEZJRk8gMCBpZiBmaWx0ZXIgbWF0Y2hlcyAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0ZJTFRFUl9UT19SWEZJRk8xICAgICgodWludDMyX3QpMHgwMDAwMDAwMlUpIC8qITwgU3RvcmUgaW4gUnggRklGTyAxIGlmIGZpbHRlciBtYXRjaGVzICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fRklMVEVSX1JFSkVDVCAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAzVSkgLyohPCBSZWplY3QgSUQgaWYgZmlsdGVyIG1hdGNoZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GSUxURVJfSFAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKSAvKiE8IFNldCBoaWdoIHByaW9yaXR5IGlmIGZpbHRlciBtYXRjaGVzICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0ZJTFRFUl9UT19SWEZJRk8wX0hQICgodWludDMyX3QpMHgwMDAwMDAwNVUpIC8qITwgU2V0IGhpZ2ggcHJpb3JpdHkgYW5kIHN0b3JlIGluIEZJRk8gMCBpZiBmaWx0ZXIgbWF0Y2hlcyAgICovCiNkZWZpbmUgRkRDQU5fRklMVEVSX1RPX1JYRklGTzFfSFAgKCh1aW50MzJfdCkweDAwMDAwMDA2VSkgLyohPCBTZXQgaGlnaCBwcmlvcml0eSBhbmQgc3RvcmUgaW4gRklGTyAxIGlmIGZpbHRlciBtYXRjaGVzICAgKi8KI2RlZmluZSBGRENBTl9GSUxURVJfVE9fUlhCVUZGRVIgICAoKHVpbnQzMl90KTB4MDAwMDAwMDdVKSAvKiE8IFN0b3JlIGludG8gUnggQnVmZmVyLCBjb25maWd1cmF0aW9uIG9mIEZpbHRlclR5cGUgaWdub3JlZCAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVHhfbG9jYXRpb24gRkRDQU4gVHggTG9jYXRpb24KICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIwICAoKHVpbnQzMl90KTB4MDAwMDAwMDFVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAwICAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjEgICgodWludDMyX3QpMHgwMDAwMDAwMlUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDEgICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMiAgKCh1aW50MzJfdCkweDAwMDAwMDA0VSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMiAgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIzICAoKHVpbnQzMl90KTB4MDAwMDAwMDhVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAzICAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjQgICgodWludDMyX3QpMHgwMDAwMDAxMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDQgICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSNSAgKCh1aW50MzJfdCkweDAwMDAwMDIwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgNSAgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVI2ICAoKHVpbnQzMl90KTB4MDAwMDAwNDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciA2ICAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjcgICgodWludDMyX3QpMHgwMDAwMDA4MFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDcgICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSOCAgKCh1aW50MzJfdCkweDAwMDAwMTAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgOCAgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVI5ICAoKHVpbnQzMl90KTB4MDAwMDAyMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciA5ICAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjEwICgodWludDMyX3QpMHgwMDAwMDQwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDEwICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMTEgKCh1aW50MzJfdCkweDAwMDAwODAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMTEgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIxMiAoKHVpbnQzMl90KTB4MDAwMDEwMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAxMiAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjEzICgodWludDMyX3QpMHgwMDAwMjAwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDEzICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMTQgKCh1aW50MzJfdCkweDAwMDA0MDAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMTQgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIxNSAoKHVpbnQzMl90KTB4MDAwMDgwMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAxNSAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjE2ICgodWludDMyX3QpMHgwMDAxMDAwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDE2ICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMTcgKCh1aW50MzJfdCkweDAwMDIwMDAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMTcgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIxOCAoKHVpbnQzMl90KTB4MDAwNDAwMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAxOCAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjE5ICgodWludDMyX3QpMHgwMDA4MDAwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDE5ICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMjAgKCh1aW50MzJfdCkweDAwMTAwMDAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMjAgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIyMSAoKHVpbnQzMl90KTB4MDAyMDAwMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAyMSAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjIyICgodWludDMyX3QpMHgwMDQwMDAwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDIyICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMjMgKCh1aW50MzJfdCkweDAwODAwMDAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMjMgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIyNCAoKHVpbnQzMl90KTB4MDEwMDAwMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAyNCAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjI1ICgodWludDMyX3QpMHgwMjAwMDAwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDI1ICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMjYgKCh1aW50MzJfdCkweDA0MDAwMDAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMjYgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIyNyAoKHVpbnQzMl90KTB4MDgwMDAwMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAyNyAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjI4ICgodWludDMyX3QpMHgxMDAwMDAwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDI4ICovCiNkZWZpbmUgRkRDQU5fVFhfQlVGRkVSMjkgKCh1aW50MzJfdCkweDIwMDAwMDAwVSkgLyohPCBBZGQgbWVzc2FnZSB0byBUeCBCdWZmZXIgMjkgKi8KI2RlZmluZSBGRENBTl9UWF9CVUZGRVIzMCAoKHVpbnQzMl90KTB4NDAwMDAwMDBVKSAvKiE8IEFkZCBtZXNzYWdlIHRvIFR4IEJ1ZmZlciAzMCAqLwojZGVmaW5lIEZEQ0FOX1RYX0JVRkZFUjMxICgodWludDMyX3QpMHg4MDAwMDAwMFUpIC8qITwgQWRkIG1lc3NhZ2UgdG8gVHggQnVmZmVyIDMxICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9SeF9sb2NhdGlvbiBGRENBTiBSeCBMb2NhdGlvbgogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1JYX0ZJRk8wICAgICgodWludDMyX3QpMHgwMDAwMDA0MFUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBGSUZPIDAgICAgKi8KI2RlZmluZSBGRENBTl9SWF9GSUZPMSAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDFVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggRklGTyAxICAgICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMCAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAwICAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjEgICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMSAgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIyICAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDIgICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMyAgKCh1aW50MzJfdCkweDAwMDAwMDAzVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAzICAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjQgICgodWludDMyX3QpMHgwMDAwMDAwNFUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNCAgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI1ICAoKHVpbnQzMl90KTB4MDAwMDAwMDVVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDUgICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNiAgKCh1aW50MzJfdCkweDAwMDAwMDA2VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA2ICAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjcgICgodWludDMyX3QpMHgwMDAwMDAwN1UpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNyAgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI4ICAoKHVpbnQzMl90KTB4MDAwMDAwMDhVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDggICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSOSAgKCh1aW50MzJfdCkweDAwMDAwMDA5VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA5ICAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjEwICgodWludDMyX3QpMHgwMDAwMDAwQVUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMTAgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIxMSAoKHVpbnQzMl90KTB4MDAwMDAwMEJVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDExICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMTIgKCh1aW50MzJfdCkweDAwMDAwMDBDVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAxMiAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjEzICgodWludDMyX3QpMHgwMDAwMDAwRFUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMTMgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIxNCAoKHVpbnQzMl90KTB4MDAwMDAwMEVVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDE0ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMTUgKCh1aW50MzJfdCkweDAwMDAwMDBGVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAxNSAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjE2ICgodWludDMyX3QpMHgwMDAwMDAxMFUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMTYgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIxNyAoKHVpbnQzMl90KTB4MDAwMDAwMTFVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDE3ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMTggKCh1aW50MzJfdCkweDAwMDAwMDEyVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAxOCAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjE5ICgodWludDMyX3QpMHgwMDAwMDAxM1UpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMTkgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIyMCAoKHVpbnQzMl90KTB4MDAwMDAwMTRVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDIwICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMjEgKCh1aW50MzJfdCkweDAwMDAwMDE1VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAyMSAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjIyICgodWludDMyX3QpMHgwMDAwMDAxNlUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMjIgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIyMyAoKHVpbnQzMl90KTB4MDAwMDAwMTdVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDIzICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMjQgKCh1aW50MzJfdCkweDAwMDAwMDE4VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAyNCAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjI1ICgodWludDMyX3QpMHgwMDAwMDAxOVUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMjUgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIyNiAoKHVpbnQzMl90KTB4MDAwMDAwMUFVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDI2ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMjcgKCh1aW50MzJfdCkweDAwMDAwMDFCVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAyNyAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjI4ICgodWludDMyX3QpMHgwMDAwMDAxQ1UpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMjggKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIyOSAoKHVpbnQzMl90KTB4MDAwMDAwMURVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDI5ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMzAgKCh1aW50MzJfdCkweDAwMDAwMDFFVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAzMCAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjMxICgodWludDMyX3QpMHgwMDAwMDAxRlUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMzEgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIzMiAoKHVpbnQzMl90KTB4MDAwMDAwMjBVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDMyICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMzMgKCh1aW50MzJfdCkweDAwMDAwMDIxVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAzMyAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjM0ICgodWludDMyX3QpMHgwMDAwMDAyMlUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMzQgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIzNSAoKHVpbnQzMl90KTB4MDAwMDAwMjNVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDM1ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMzYgKCh1aW50MzJfdCkweDAwMDAwMDI0VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAzNiAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjM3ICgodWludDMyX3QpMHgwMDAwMDAyNVUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgMzcgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVIzOCAoKHVpbnQzMl90KTB4MDAwMDAwMjZVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDM4ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSMzkgKCh1aW50MzJfdCkweDAwMDAwMDI3VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciAzOSAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjQwICgodWludDMyX3QpMHgwMDAwMDAyOFUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNDAgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI0MSAoKHVpbnQzMl90KTB4MDAwMDAwMjlVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDQxICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNDIgKCh1aW50MzJfdCkweDAwMDAwMDJBVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA0MiAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjQzICgodWludDMyX3QpMHgwMDAwMDAyQlUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNDMgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI0NCAoKHVpbnQzMl90KTB4MDAwMDAwMkNVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDQ0ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNDUgKCh1aW50MzJfdCkweDAwMDAwMDJEVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA0NSAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjQ2ICgodWludDMyX3QpMHgwMDAwMDAyRVUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNDYgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI0NyAoKHVpbnQzMl90KTB4MDAwMDAwMkZVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDQ3ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNDggKCh1aW50MzJfdCkweDAwMDAwMDMwVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA0OCAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjQ5ICgodWludDMyX3QpMHgwMDAwMDAzMVUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNDkgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI1MCAoKHVpbnQzMl90KTB4MDAwMDAwMzJVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDUwICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNTEgKCh1aW50MzJfdCkweDAwMDAwMDMzVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA1MSAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjUyICgodWludDMyX3QpMHgwMDAwMDAzNFUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNTIgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI1MyAoKHVpbnQzMl90KTB4MDAwMDAwMzVVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDUzICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNTQgKCh1aW50MzJfdCkweDAwMDAwMDM2VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA1NCAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjU1ICgodWludDMyX3QpMHgwMDAwMDAzN1UpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNTUgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI1NiAoKHVpbnQzMl90KTB4MDAwMDAwMzhVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDU2ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNTcgKCh1aW50MzJfdCkweDAwMDAwMDM5VSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA1NyAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjU4ICgodWludDMyX3QpMHgwMDAwMDAzQVUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNTggKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI1OSAoKHVpbnQzMl90KTB4MDAwMDAwM0JVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDU5ICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNjAgKCh1aW50MzJfdCkweDAwMDAwMDNDVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA2MCAqLwojZGVmaW5lIEZEQ0FOX1JYX0JVRkZFUjYxICgodWludDMyX3QpMHgwMDAwMDAzRFUpIC8qITwgR2V0IHJlY2VpdmVkIG1lc3NhZ2UgZnJvbSBSeCBCdWZmZXIgNjEgKi8KI2RlZmluZSBGRENBTl9SWF9CVUZGRVI2MiAoKHVpbnQzMl90KTB4MDAwMDAwM0VVKSAvKiE8IEdldCByZWNlaXZlZCBtZXNzYWdlIGZyb20gUnggQnVmZmVyIDYyICovCiNkZWZpbmUgRkRDQU5fUlhfQlVGRkVSNjMgKCh1aW50MzJfdCkweDAwMDAwMDNGVSkgLyohPCBHZXQgcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIFJ4IEJ1ZmZlciA2MyAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fZXZlbnRfdHlwZSBGRENBTiBFdmVudCBUeXBlCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFhfRVZFTlQgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwNDAwMDAwVSkgLyohPCBUeCBldmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFhfSU5fU1BJVEVfT0ZfQUJPUlQgKCh1aW50MzJfdCkweDAwODAwMDAwVSkgLyohPCBUcmFuc21pc3Npb24gaW4gc3BpdGUgb2YgY2FuY2VsbGF0aW9uICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9ocF9tc2dfc3RvcmFnZSBGRENBTiBIaWdoIFByaW9yaXR5IE1lc3NhZ2UgU3RvcmFnZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0hQX1NUT1JBR0VfTk9fRklGTyAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBObyBGSUZPIHNlbGVjdGVkICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9IUF9TVE9SQUdFX01TR19MT1NUICgodWludDMyX3QpMHgwMDAwMDA0MFUpIC8qITwgRklGTyBtZXNzYWdlIGxvc3QgICAgICAgICovCiNkZWZpbmUgRkRDQU5fSFBfU1RPUkFHRV9SWEZJRk8wICAoKHVpbnQzMl90KTB4MDAwMDAwODBVKSAvKiE8IE1lc3NhZ2Ugc3RvcmVkIGluIEZJRk8gMCAqLwojZGVmaW5lIEZEQ0FOX0hQX1NUT1JBR0VfUlhGSUZPMSAgKCh1aW50MzJfdCkweDAwMDAwMEMwVSkgLyohPCBNZXNzYWdlIHN0b3JlZCBpbiBGSUZPIDEgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX3Byb3RvY29sX2Vycm9yX2NvZGUgRkRDQU4gcHJvdG9jb2wgZXJyb3IgY29kZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1BST1RPQ09MX0VSUk9SX05PTkUgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IE5vIGVycm9yIG9jY3VycmVkICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9QUk9UT0NPTF9FUlJPUl9TVFVGRiAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxVSkgLyohPCBTdHVmZiBlcnJvciAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fUFJPVE9DT0xfRVJST1JfRk9STSAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMlUpIC8qITwgRm9ybSBlcnJvciAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1BST1RPQ09MX0VSUk9SX0FDSyAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDNVKSAvKiE8IEFja25vd2xlZGdlIGVycm9yICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9QUk9UT0NPTF9FUlJPUl9CSVQxICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0VSkgLyohPCBCaXQgMSAocmVjZXNzaXZlKSBlcnJvciAgICovCiNkZWZpbmUgRkRDQU5fUFJPVE9DT0xfRVJST1JfQklUMCAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNVUpIC8qITwgQml0IDAgKGRvbWluYW50KSBlcnJvciAgICAqLwojZGVmaW5lIEZEQ0FOX1BST1RPQ09MX0VSUk9SX0NSQyAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDZVKSAvKiE8IENSQyBjaGVjayBzdW0gZXJyb3IgICAgICAgKi8KI2RlZmluZSBGRENBTl9QUk9UT0NPTF9FUlJPUl9OT19DSEFOR0UgKCh1aW50MzJfdCkweDAwMDAwMDA3VSkgLyohPCBObyBjaGFuZ2Ugc2luY2UgbGFzdCByZWFkICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9jb21tdW5pY2F0aW9uX3N0YXRlIEZEQ0FOIGNvbW11bmljYXRpb24gc3RhdGUKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9DT01fU1RBVEVfU1lOQyAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IE5vZGUgaXMgc3luY2hyb25pemluZyBvbiBDQU4gY29tbXVuaWNhdGlvbiAqLwojZGVmaW5lIEZEQ0FOX0NPTV9TVEFURV9JRExFICgodWludDMyX3QpMHgwMDAwMDAwOFUpIC8qITwgTm9kZSBpcyBuZWl0aGVyIHJlY2VpdmVyIG5vciB0cmFuc21pdHRlciAgICovCiNkZWZpbmUgRkRDQU5fQ09NX1NUQVRFX1JYICAgKCh1aW50MzJfdCkweDAwMDAwMDEwVSkgLyohPCBOb2RlIGlzIG9wZXJhdGluZyBhcyByZWNlaXZlciAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9DT01fU1RBVEVfVFggICAoKHVpbnQzMl90KTB4MDAwMDAwMThVKSAvKiE8IE5vZGUgaXMgb3BlcmF0aW5nIGFzIHRyYW5zbWl0dGVyICAgICAgICAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fRklGT193YXRlcm1hcmsgRkRDQU4gRklGTyB3YXRlcm1hcmsKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9DRkdfVFhfRVZFTlRfRklGTyAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IFR4IGV2ZW50IEZJRk8gKi8KI2RlZmluZSBGRENBTl9DRkdfUlhfRklGTzAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDFVKSAvKiE8IFJ4IEZJRk8wICAgICAgKi8KI2RlZmluZSBGRENBTl9DRkdfUlhfRklGTzEgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAvKiE8IFJ4IEZJRk8xICAgICAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1J4X0ZJRk9fb3BlcmF0aW9uX21vZGUgRkRDQU4gRklGTyBvcGVyYXRpb24gbW9kZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1JYX0ZJRk9fQkxPQ0tJTkcgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgUnggRklGTyBibG9ja2luZyBtb2RlICAqLwojZGVmaW5lIEZEQ0FOX1JYX0ZJRk9fT1ZFUldSSVRFICgodWludDMyX3QpMHg4MDAwMDAwMFUpIC8qITwgUnggRklGTyBvdmVyd3JpdGUgbW9kZSAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fTm9uX01hdGNoaW5nX0ZyYW1lcyBGRENBTiBub24tbWF0Y2hpbmcgZnJhbWVzCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fQUNDRVBUX0lOX1JYX0ZJRk8wICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgQWNjZXB0IGluIFJ4IEZJRk8gMCAqLwojZGVmaW5lIEZEQ0FOX0FDQ0VQVF9JTl9SWF9GSUZPMSAoKHVpbnQzMl90KTB4MDAwMDAwMDFVKSAvKiE8IEFjY2VwdCBpbiBSeCBGSUZPIDEgKi8KI2RlZmluZSBGRENBTl9SRUpFQ1QgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyVSkgLyohPCBSZWplY3QgICAgICAgICAgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9SZWplY3RfUmVtb3RlX0ZyYW1lcyBGRENBTiByZWplY3QgcmVtb3RlIGZyYW1lcwogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0ZJTFRFUl9SRU1PVEUgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBGaWx0ZXIgcmVtb3RlIGZyYW1lcyAqLwojZGVmaW5lIEZEQ0FOX1JFSkVDVF9SRU1PVEUgKCh1aW50MzJfdCkweDAwMDAwMDAxVSkgLyohPCBSZWplY3QgYWxsIHJlbW90ZSBmcmFtZXMgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX0ludGVycnVwdF9MaW5lIEZEQ0FOIGludGVycnVwdCBsaW5lCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fSU5URVJSVVBUX0xJTkUwICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgSW50ZXJydXB0IExpbmUgMCAqLwojZGVmaW5lIEZEQ0FOX0lOVEVSUlVQVF9MSU5FMSAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAvKiE8IEludGVycnVwdCBMaW5lIDEgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RpbWVzdGFtcCBGRENBTiB0aW1lc3RhbXAKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9USU1FU1RBTVBfSU5URVJOQUwgKCh1aW50MzJfdCkweDAwMDAwMDAxVSkgLyohPCBUaW1lc3RhbXAgY291bnRlciB2YWx1ZSBpbmNyZW1lbnRlZCBhY2NvcmRpbmcgdG8gVENQICovCiNkZWZpbmUgRkRDQU5fVElNRVNUQU1QX0VYVEVSTkFMICgodWludDMyX3QpMHgwMDAwMDAwMlUpIC8qITwgRXh0ZXJuYWwgdGltZXN0YW1wIGNvdW50ZXIgdmFsdWUgdXNlZCAgICAgICAgICAgICAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVGltZXN0YW1wX1ByZXNjYWxlciBGRENBTiB0aW1lc3RhbXAgcHJlc2NhbGVyCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVElNRVNUQU1QX1BSRVNDXzEgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgVGltZXN0YW1wIGNvdW50ZXIgdGltZSB1bml0IGluIGVxdWFsIHRvIENBTiBiaXQgdGltZSAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9USU1FU1RBTVBfUFJFU0NfMiAgKCh1aW50MzJfdCkweDAwMDEwMDAwVSkgLyohPCBUaW1lc3RhbXAgY291bnRlciB0aW1lIHVuaXQgaW4gZXF1YWwgdG8gQ0FOIGJpdCB0aW1lIG11bHRpcGxlZCBieSAyICAqLwojZGVmaW5lIEZEQ0FOX1RJTUVTVEFNUF9QUkVTQ18zICAoKHVpbnQzMl90KTB4MDAwMjAwMDBVKSAvKiE8IFRpbWVzdGFtcCBjb3VudGVyIHRpbWUgdW5pdCBpbiBlcXVhbCB0byBDQU4gYml0IHRpbWUgbXVsdGlwbGVkIGJ5IDMgICovCiNkZWZpbmUgRkRDQU5fVElNRVNUQU1QX1BSRVNDXzQgICgodWludDMyX3QpMHgwMDAzMDAwMFUpIC8qITwgVGltZXN0YW1wIGNvdW50ZXIgdGltZSB1bml0IGluIGVxdWFsIHRvIENBTiBiaXQgdGltZSBtdWx0aXBsZWQgYnkgNCAgKi8KI2RlZmluZSBGRENBTl9USU1FU1RBTVBfUFJFU0NfNSAgKCh1aW50MzJfdCkweDAwMDQwMDAwVSkgLyohPCBUaW1lc3RhbXAgY291bnRlciB0aW1lIHVuaXQgaW4gZXF1YWwgdG8gQ0FOIGJpdCB0aW1lIG11bHRpcGxlZCBieSA1ICAqLwojZGVmaW5lIEZEQ0FOX1RJTUVTVEFNUF9QUkVTQ182ICAoKHVpbnQzMl90KTB4MDAwNTAwMDBVKSAvKiE8IFRpbWVzdGFtcCBjb3VudGVyIHRpbWUgdW5pdCBpbiBlcXVhbCB0byBDQU4gYml0IHRpbWUgbXVsdGlwbGVkIGJ5IDYgICovCiNkZWZpbmUgRkRDQU5fVElNRVNUQU1QX1BSRVNDXzcgICgodWludDMyX3QpMHgwMDA2MDAwMFUpIC8qITwgVGltZXN0YW1wIGNvdW50ZXIgdGltZSB1bml0IGluIGVxdWFsIHRvIENBTiBiaXQgdGltZSBtdWx0aXBsZWQgYnkgNyAgKi8KI2RlZmluZSBGRENBTl9USU1FU1RBTVBfUFJFU0NfOCAgKCh1aW50MzJfdCkweDAwMDcwMDAwVSkgLyohPCBUaW1lc3RhbXAgY291bnRlciB0aW1lIHVuaXQgaW4gZXF1YWwgdG8gQ0FOIGJpdCB0aW1lIG11bHRpcGxlZCBieSA4ICAqLwojZGVmaW5lIEZEQ0FOX1RJTUVTVEFNUF9QUkVTQ185ICAoKHVpbnQzMl90KTB4MDAwODAwMDBVKSAvKiE8IFRpbWVzdGFtcCBjb3VudGVyIHRpbWUgdW5pdCBpbiBlcXVhbCB0byBDQU4gYml0IHRpbWUgbXVsdGlwbGVkIGJ5IDkgICovCiNkZWZpbmUgRkRDQU5fVElNRVNUQU1QX1BSRVNDXzEwICgodWludDMyX3QpMHgwMDA5MDAwMFUpIC8qITwgVGltZXN0YW1wIGNvdW50ZXIgdGltZSB1bml0IGluIGVxdWFsIHRvIENBTiBiaXQgdGltZSBtdWx0aXBsZWQgYnkgMTAgKi8KI2RlZmluZSBGRENBTl9USU1FU1RBTVBfUFJFU0NfMTEgKCh1aW50MzJfdCkweDAwMEEwMDAwVSkgLyohPCBUaW1lc3RhbXAgY291bnRlciB0aW1lIHVuaXQgaW4gZXF1YWwgdG8gQ0FOIGJpdCB0aW1lIG11bHRpcGxlZCBieSAxMSAqLwojZGVmaW5lIEZEQ0FOX1RJTUVTVEFNUF9QUkVTQ18xMiAoKHVpbnQzMl90KTB4MDAwQjAwMDBVKSAvKiE8IFRpbWVzdGFtcCBjb3VudGVyIHRpbWUgdW5pdCBpbiBlcXVhbCB0byBDQU4gYml0IHRpbWUgbXVsdGlwbGVkIGJ5IDEyICovCiNkZWZpbmUgRkRDQU5fVElNRVNUQU1QX1BSRVNDXzEzICgodWludDMyX3QpMHgwMDBDMDAwMFUpIC8qITwgVGltZXN0YW1wIGNvdW50ZXIgdGltZSB1bml0IGluIGVxdWFsIHRvIENBTiBiaXQgdGltZSBtdWx0aXBsZWQgYnkgMTMgKi8KI2RlZmluZSBGRENBTl9USU1FU1RBTVBfUFJFU0NfMTQgKCh1aW50MzJfdCkweDAwMEQwMDAwVSkgLyohPCBUaW1lc3RhbXAgY291bnRlciB0aW1lIHVuaXQgaW4gZXF1YWwgdG8gQ0FOIGJpdCB0aW1lIG11bHRpcGxlZCBieSAxNCAqLwojZGVmaW5lIEZEQ0FOX1RJTUVTVEFNUF9QUkVTQ18xNSAoKHVpbnQzMl90KTB4MDAwRTAwMDBVKSAvKiE8IFRpbWVzdGFtcCBjb3VudGVyIHRpbWUgdW5pdCBpbiBlcXVhbCB0byBDQU4gYml0IHRpbWUgbXVsdGlwbGVkIGJ5IDE1ICovCiNkZWZpbmUgRkRDQU5fVElNRVNUQU1QX1BSRVNDXzE2ICgodWludDMyX3QpMHgwMDBGMDAwMFUpIC8qITwgVGltZXN0YW1wIGNvdW50ZXIgdGltZSB1bml0IGluIGVxdWFsIHRvIENBTiBiaXQgdGltZSBtdWx0aXBsZWQgYnkgMTYgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RpbWVvdXRfT3BlcmF0aW9uIEZEQ0FOIHRpbWVvdXQgb3BlcmF0aW9uCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVElNRU9VVF9DT05USU5VT1VTICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgVGltZW91dCBjb250aW51b3VzIG9wZXJhdGlvbiAgICAgICAgKi8KI2RlZmluZSBGRENBTl9USU1FT1VUX1RYX0VWRU5UX0ZJRk8gKCh1aW50MzJfdCkweDAwMDAwMDAyVSkgLyohPCBUaW1lb3V0IGNvbnRyb2xsZWQgYnkgVHggRXZlbnQgRklGTyAqLwojZGVmaW5lIEZEQ0FOX1RJTUVPVVRfUlhfRklGTzAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKSAvKiE8IFRpbWVvdXQgY29udHJvbGxlZCBieSBSeCBGSUZPIDAgICAgICovCiNkZWZpbmUgRkRDQU5fVElNRU9VVF9SWF9GSUZPMSAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNlUpIC8qITwgVGltZW91dCBjb250cm9sbGVkIGJ5IFJ4IEZJRk8gMSAgICAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RUX1JlZmVyZW5jZV9NZXNzYWdlX1BheWxvYWQgRkRDQU4gVFQgcmVmZXJlbmNlIG1lc3NhZ2UgcGF5bG9hZAogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1RUX1JFRl9NRVNTQUdFX05PX1BBWUxPQUQgICgodWludDMyX3QpMHgwMDAwMDAwMFUpICAgICAgLyohPCBSZWZlcmVuY2UgbWVzc2FnZSBoYXMgbm8gYWRkaXRpb25hbCBwYXlsb2FkICAqLwojZGVmaW5lIEZEQ0FOX1RUX1JFRl9NRVNTQUdFX0FERF9QQVlMT0FEICgodWludDMyX3QpRkRDQU5fVFRSTUNfUk1QUykgLyohPCBBZGRpdGlvbmFsIHBheWxvYWQgaXMgdGFrZW4gZnJvbSBUeCBCdWZmZXIgMCAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRfUmVwZWF0X0ZhY3RvciBGRENBTiBUVCByZXBlYXQgZmFjdG9yCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfUkVQRUFUX0VWRVJZX0NZQ0xFICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBUcmlnZ2VyIHZhbGlkIGZvciBhbGwgY3ljbGVzICAgKi8KI2RlZmluZSBGRENBTl9UVF9SRVBFQVRfRVZFUllfMk5EX0NZQ0xFICAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAvKiE8IFRyaWdnZXIgdmFsaWQgZXZlcnkgMmRuIGN5Y2xlICAqLwojZGVmaW5lIEZEQ0FOX1RUX1JFUEVBVF9FVkVSWV80VEhfQ1lDTEUgICgodWludDMyX3QpMHgwMDAwMDAwNFUpIC8qITwgVHJpZ2dlciB2YWxpZCBldmVyeSA0dGggY3ljbGUgICovCiNkZWZpbmUgRkRDQU5fVFRfUkVQRUFUX0VWRVJZXzhUSF9DWUNMRSAgKCh1aW50MzJfdCkweDAwMDAwMDA4VSkgLyohPCBUcmlnZ2VyIHZhbGlkIGV2ZXJ5IDh0aCBjeWNsZSAgKi8KI2RlZmluZSBGRENBTl9UVF9SRVBFQVRfRVZFUllfMTZUSF9DWUNMRSAoKHVpbnQzMl90KTB4MDAwMDAwMTBVKSAvKiE8IFRyaWdnZXIgdmFsaWQgZXZlcnkgMTZ0aCBjeWNsZSAqLwojZGVmaW5lIEZEQ0FOX1RUX1JFUEVBVF9FVkVSWV8zMk5EX0NZQ0xFICgodWludDMyX3QpMHgwMDAwMDAyMFUpIC8qITwgVHJpZ2dlciB2YWxpZCBldmVyeSAzMm5kIGN5Y2xlICovCiNkZWZpbmUgRkRDQU5fVFRfUkVQRUFUX0VWRVJZXzY0VEhfQ1lDTEUgKCh1aW50MzJfdCkweDAwMDAwMDQwVSkgLyohPCBUcmlnZ2VyIHZhbGlkIGV2ZXJ5IDY0dGggY3ljbGUgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RUX1RyaWdnZXJfVHlwZSBGRENBTiBUVCB0cmlnZ2VyIHR5cGUKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9UWF9SRUZfVFJJR0dFUiAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgVHJhbnNtaXQgcmVmZXJlbmNlIG1lc3NhZ2UgaW4gc3RyaWN0bHkgdGltZS10cmlnZ2VyZWQgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX1RYX1JFRl9UUklHR0VSX0dBUCAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxVSkgLyohPCBUcmFuc21pdCByZWZlcmVuY2UgbWVzc2FnZSBpbiBleHRlcm5hbCBldmVudC1zeW5jaHJvbml6ZWQgdGltZS10cmlnZ2VyZWQgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfVFhfVFJJR0dFUl9TSU5HTEUgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAvKiE8IFN0YXJ0IGEgc2luZ2xlIHRyYW5zbWlzc2lvbiBpbiBhbiBleGNsdXNpdmUgdGltZSB3aW5kb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9UWF9UUklHR0VSX0NPTlRJTlVPVVMgICgodWludDMyX3QpMHgwMDAwMDAwM1UpIC8qITwgU3RhcnQgYSBjb250aW51b3VzIHRyYW5zbWlzc2lvbiBpbiBhbiBleGNsdXNpdmUgdGltZSB3aW5kb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX1RYX1RSSUdHRVJfQVJCSVRSQVRJT04gKCh1aW50MzJfdCkweDAwMDAwMDA0VSkgLyohPCBTdGFydCBhIHRyYW5zbWlzc2lvbiBpbiBhbiBhcmJpdHJhdGlvbiB0aW1lIHdpbmRvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfVFhfVFJJR0dFUl9NRVJHRUQgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDVVKSAvKiE8IFN0YXJ0IGEgbWVyZ2VkIGFyYml0cmF0aW9uIHdpbmRvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9XQVRDSF9UUklHR0VSICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNlUpIC8qITwgQ2hlY2sgZm9yIG1pc3NpbmcgcmVmZXJlbmNlIG1lc3NhZ2VzIGluIHN0cmljdGx5IHRpbWUtdHJpZ2dlcmVkIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX1dBVENIX1RSSUdHRVJfR0FQICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA3VSkgLyohPCBDaGVjayBmb3IgbWlzc2luZyByZWZlcmVuY2UgbWVzc2FnZXMgaW4gZXh0ZXJuYWwgZXZlbnQtc3luY2hyb25pemVkIHRpbWUtdHJpZ2dlcmVkIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfUlhfVFJJR0dFUiAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDhVKSAvKiE8IENoZWNrIGZvciB0aGUgcmVjZXB0aW9uIG9mIHBlcmlvZGljIG1lc3NhZ2VzIGluIGV4Y2x1c2l2ZSB0aW1lIHdpbmRvd3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9USU1FX0JBU0VfVFJJR0dFUiAgICAgICgodWludDMyX3QpMHgwMDAwMDAwOVUpIC8qITwgR2VuZXJhdGUgaW50ZXJuYWwvZXh0ZXJuYWwgZXZlbnRzIGRlcGVuZGluZyBvbiBUbUV2ZW50SW50L1RtRXZlbnRFeHQgY29uZmlndXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0VORF9PRl9MSVNUICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDBBVSkgLyohPCBJbGxlZ2FsIHRyaWdnZXIsIHRvIGJlIGFzc2lnbmVkIHRvIHRoZSB1bnVzZWQgdHJpZ2dlcnMgYWZ0ZXIgYSBGRENBTl9UVF9XQVRDSF9UUklHR0VSIG9yIEZEQ0FOX1RUX1dBVENIX1RSSUdHRVJfR0FQICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9UaW1lX01hcmtfRXZlbnRfSW50ZXJuYWwgRkRDQU4gVFQgdGltZSBtYXJrIGV2ZW50IGludGVybmFsCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfVE1fTk9fSU5URVJOQUxfRVZFTlQgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgTm8gYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX1RNX0dFTl9JTlRFUk5BTF9FVkVOVCAoKHVpbnQzMl90KTB4MDAwMDAwMjBVKSAvKiE8IEludGVybmFsIGV2ZW50IGlzIGdlbmVyYXRlZCB3aGVuIHRyaWdnZXIgYmVjb21lcyBhY3RpdmUgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RUX1RpbWVfTWFya19FdmVudF9FeHRlcm5hbCBGRENBTiBUVCB0aW1lIG1hcmsgZXZlbnQgZXh0ZXJuYWwKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9UTV9OT19FWFRFUk5BTF9FVkVOVCAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBObyBhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9UTV9HRU5fRVhURVJOQUxfRVZFTlQgKCh1aW50MzJfdCkweDAwMDAwMDEwVSkgLyohPCBFeHRlcm5hbCBldmVudCAocHVsc2UpIGlzIGdlbmVyYXRlZCB3aGVuIHRyaWdnZXIgYmVjb21lcyBhY3RpdmUgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX29wZXJhdGlvbl9tb2RlIEZEQ0FOIE9wZXJhdGlvbiBNb2RlCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfQ09NTVVOSUNBVElPTl9MRVZFTDEgICAgKCh1aW50MzJfdCkweDAwMDAwMDAxVSkgLyohPCBUaW1lIHRyaWdnZXJlZCBjb21tdW5pY2F0aW9uLCBsZXZlbCAxICovCiNkZWZpbmUgRkRDQU5fVFRfQ09NTVVOSUNBVElPTl9MRVZFTDIgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyVSkgLyohPCBUaW1lIHRyaWdnZXJlZCBjb21tdW5pY2F0aW9uLCBsZXZlbCAyICovCiNkZWZpbmUgRkRDQU5fVFRfQ09NTVVOSUNBVElPTl9MRVZFTDAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAzVSkgLyohPCBUaW1lIHRyaWdnZXJlZCBjb21tdW5pY2F0aW9uLCBsZXZlbCAwICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9vcGVyYXRpb24gRkRDQU4gVFQgT3BlcmF0aW9uCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fU1RSSUNUTFlfVFRfT1BFUkFUSU9OICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAgICAgLyohPCBTdHJpY3RseSB0aW1lLXRyaWdnZXJlZCBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fRVhUX0VWVF9TWU5DX1RUX09QRVJBVElPTiAoKHVpbnQzMl90KUZEQ0FOX1RUT0NGX0dFTikgLyohPCBFeHRlcm5hbCBldmVudC1zeW5jaHJvbml6ZWQgdGltZS10cmlnZ2VyZWQgb3BlcmF0aW9uICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF90aW1lX21hc3RlciBGRENBTiBUVCBUaW1lIE1hc3RlcgogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1RUX1NMQVZFICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgICAgLyohPCBUaW1lIHNsYXZlICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9QT1RFTlRJQUxfTUFTVEVSICgodWludDMyX3QpRkRDQU5fVFRPQ0ZfVE0pIC8qITwgUG90ZW50aWFsIHRpbWUgbWFzdGVyICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9leHRlcm5hbF9jbGtfc3luYyBGRENBTiBUVCBFeHRlcm5hbCBDbG9jayBTeW5jaHJvbml6YXRpb24KICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9FWFRfQ0xLX1NZTkNfRElTQUJMRSAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAgICAgIC8qITwgRXh0ZXJuYWwgY2xvY2sgc3luY2hyb25pemF0aW9uIGluIExldmVsIDAsMiBkaXNhYmxlZCAqLwojZGVmaW5lIEZEQ0FOX1RUX0VYVF9DTEtfU1lOQ19FTkFCTEUgICgodWludDMyX3QpRkRDQU5fVFRPQ0ZfRUVDUykgLyohPCBFeHRlcm5hbCBjbG9jayBzeW5jaHJvbml6YXRpb24gaW4gTGV2ZWwgMCwyIGVuYWJsZWQgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9nbG9iYWxfdGltZV9maWx0ZXJpbmcgRkRDQU4gVFQgR2xvYmFsIFRpbWUgRmlsdGVyaW5nCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfR0xPQl9USU1FX0ZJTFRfRElTQUJMRSAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAgICAgIC8qITwgR2xvYmFsIHRpbWUgZmlsdGVyaW5nIGluIExldmVsIDAsMiBkaXNhYmxlZCAqLwojZGVmaW5lIEZEQ0FOX1RUX0dMT0JfVElNRV9GSUxUX0VOQUJMRSAgKCh1aW50MzJfdClGRENBTl9UVE9DRl9FR1RGKSAvKiE8IEdsb2JhbCB0aW1lIGZpbHRlcmluZyBpbiBMZXZlbCAwLDIgZW5hYmxlZCAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RUX2F1dG9fY2xrX2NhbGlicmF0aW9uIEZEQ0FOIFRUIEF1dG9tYXRpYyBDbG9jayBDYWxpYnJhdGlvbgogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1RUX0FVVE9fQ0xLX0NBTElCX0RJU0FCTEUgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgICAgIC8qITwgQXV0b21hdGljIGNsb2NrIGNhbGlicmF0aW9uIGluIExldmVsIDAsMiBkaXNhYmxlZCAqLwojZGVmaW5lIEZEQ0FOX1RUX0FVVE9fQ0xLX0NBTElCX0VOQUJMRSAgKCh1aW50MzJfdClGRENBTl9UVE9DRl9FQ0MpIC8qITwgQXV0b21hdGljIGNsb2NrIGNhbGlicmF0aW9uIGluIExldmVsIDAsMiBlbmFibGVkICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRfZXZlbnRfdHJpZ19wb2xhcml0eSBGRENBTiBUVCBFdmVudCBUcmlnZ2VyIFBvbGFyaXR5CiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfRVZUX1RSSUdfUE9MX1JJU0lORyAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgICAgICAvKiE8IFJpc2luZyBlZGdlIHRyaWdnZXIgICovCiNkZWZpbmUgRkRDQU5fVFRfRVZUX1RSSUdfUE9MX0ZBTExJTkcgKCh1aW50MzJfdClGRENBTl9UVE9DRl9FVlRQKSAvKiE8IEZhbGxpbmcgZWRnZSB0cmlnZ2VyICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9iYXNpY19jeWNsZV9udW1iZXIgRkRDQU4gVFQgQmFzaWMgQ3ljbGUgTnVtYmVyCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfQ1lDTEVTX1BFUl9NQVRSSVhfMSAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCAxIEJhc2ljIEN5Y2xlIHBlciBNYXRyaXggICAqLwojZGVmaW5lIEZEQ0FOX1RUX0NZQ0xFU19QRVJfTUFUUklYXzIgICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgMiBCYXNpYyBDeWNsZXMgcGVyIE1hdHJpeCAgKi8KI2RlZmluZSBGRENBTl9UVF9DWUNMRVNfUEVSX01BVFJJWF80ICAoKHVpbnQzMl90KTB4MDAwMDAwMDNVKSAvKiE8IDQgQmFzaWMgQ3ljbGVzIHBlciBNYXRyaXggICovCiNkZWZpbmUgRkRDQU5fVFRfQ1lDTEVTX1BFUl9NQVRSSVhfOCAgKCh1aW50MzJfdCkweDAwMDAwMDA3VSkgLyohPCA4IEJhc2ljIEN5Y2xlcyBwZXIgTWF0cml4ICAqLwojZGVmaW5lIEZEQ0FOX1RUX0NZQ0xFU19QRVJfTUFUUklYXzE2ICgodWludDMyX3QpMHgwMDAwMDAwRlUpIC8qITwgMTYgQmFzaWMgQ3ljbGVzIHBlciBNYXRyaXggKi8KI2RlZmluZSBGRENBTl9UVF9DWUNMRVNfUEVSX01BVFJJWF8zMiAoKHVpbnQzMl90KTB4MDAwMDAwMUZVKSAvKiE8IDMyIEJhc2ljIEN5Y2xlcyBwZXIgTWF0cml4ICovCiNkZWZpbmUgRkRDQU5fVFRfQ1lDTEVTX1BFUl9NQVRSSVhfNjQgKCh1aW50MzJfdCkweDAwMDAwMDNGVSkgLyohPCA2NCBCYXNpYyBDeWNsZXMgcGVyIE1hdHJpeCAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRfY3ljbGVfc3RhcnRfc3luYyBGRENBTiBUVCBDeWNsZSBTdGFydCBTeW5jCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfTk9fU1lOQ19QVUxTRSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IE5vIHN5bmMgcHVsc2UgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9TWU5DX0JBU0lDX0NZQ0xFX1NUQVJUICgodWludDMyX3QpMHgwMDAwMDA0MFUpIC8qITwgU3luYyBwdWxzZSBhdCBzdGFydCBvZiBiYXNpYyBjeWNsZSAqLwojZGVmaW5lIEZEQ0FOX1RUX1NZTkNfTUFUUklYX1NUQVJUICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDgwVSkgLyohPCBTeW5jIHB1bHNlIGF0IHN0YXJ0IG9mIG1hdHJpeCAgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9zdG9wX3dhdGNoX3RyaWdfc2VsZWN0aW9uIEZEQ0FOIFRUIFN0b3AgV2F0Y2ggVHJpZ2dlciBTZWxlY3Rpb24KICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9TVE9QX1dBVENIX1RSSUdHRVJfMCAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IFRJTTIgc2VsZWN0ZWQgYXMgc3RvcCB3YXRjaCB0cmlnZ2VyICAqLwojZGVmaW5lIEZEQ0FOX1RUX1NUT1BfV0FUQ0hfVFJJR0dFUl8xICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgVElNMyBzZWxlY3RlZCBhcyBzdG9wIHdhdGNoIHRyaWdnZXIgICovCiNkZWZpbmUgRkRDQU5fVFRfU1RPUF9XQVRDSF9UUklHR0VSXzIgKCh1aW50MzJfdCkweDAwMDAwMDAyVSkgLyohPCBFVEggc2VsZWN0ZWQgYXMgc3RvcCB3YXRjaCB0cmlnZ2VyICAgKi8KI2RlZmluZSBGRENBTl9UVF9TVE9QX1dBVENIX1RSSUdHRVJfMyAoKHVpbnQzMl90KTB4MDAwMDAwMDNVKSAvKiE8IEhSVElNIHNlbGVjdGVkIGFzIHN0b3Agd2F0Y2ggdHJpZ2dlciAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRfZXZlbnRfdHJpZ19zZWxlY3Rpb24gRkRDQU4gVFQgRXZlbnQgVHJpZ2dlciBTZWxlY3Rpb24KICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9FVkVOVF9UUklHR0VSXzAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBUSU0yIHNlbGVjdGVkIGFzIGV2ZW50IHRyaWdnZXIgICovCiNkZWZpbmUgRkRDQU5fVFRfRVZFTlRfVFJJR0dFUl8xICgodWludDMyX3QpMHgwMDAwMDAxMFUpIC8qITwgVElNMyBzZWxlY3RlZCBhcyBldmVudCB0cmlnZ2VyICAqLwojZGVmaW5lIEZEQ0FOX1RUX0VWRU5UX1RSSUdHRVJfMiAoKHVpbnQzMl90KTB4MDAwMDAwMjBVKSAvKiE8IEVUSCBzZWxlY3RlZCBhcyBldmVudCB0cmlnZ2VyICAgKi8KI2RlZmluZSBGRENBTl9UVF9FVkVOVF9UUklHR0VSXzMgKCh1aW50MzJfdCkweDAwMDAwMDMwVSkgLyohPCBIUlRJTSBzZWxlY3RlZCBhcyBldmVudCB0cmlnZ2VyICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9zdG9wX3dhdGNoX3NvdXJjZSBGRENBTiBUVCBTdG9wIFdhdGNoIFNvdXJjZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1RUX1NUT1BfV0FUQ0hfRElTQUJMRUQgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBTdG9wIFdhdGNoIGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX1NUT1BfV0FUQ0hfQ1lDTEVfVElNRSAgKCh1aW50MzJfdCkweDAwMDAwMDA4VSkgLyohPCBBY3R1YWwgdmFsdWUgb2YgY3ljbGUgdGltZSBpcyBjb3BpZWQgdG8gQ2FwdHVyZSBUaW1lIHJlZ2lzdGVyIChUVENQVC5TV1YpICAqLwojZGVmaW5lIEZEQ0FOX1RUX1NUT1BfV0FUQ0hfTE9DQUxfVElNRSAgKCh1aW50MzJfdCkweDAwMDAwMDEwVSkgLyohPCBBY3R1YWwgdmFsdWUgb2YgbG9jYWwgdGltZSBpcyBjb3BpZWQgdG8gQ2FwdHVyZSBUaW1lIHJlZ2lzdGVyIChUVENQVC5TV1YpICAqLwojZGVmaW5lIEZEQ0FOX1RUX1NUT1BfV0FUQ0hfR0xPQkFMX1RJTUUgKCh1aW50MzJfdCkweDAwMDAwMDE4VSkgLyohPCBBY3R1YWwgdmFsdWUgb2YgZ2xvYmFsIHRpbWUgaXMgY29waWVkIHRvIENhcHR1cmUgVGltZSByZWdpc3RlciAoVFRDUFQuU1dWKSAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRfc3RvcF93YXRjaF9wb2xhcml0eSBGRENBTiBUVCBTdG9wIFdhdGNoIFBvbGFyaXR5CiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfU1RPUF9XQVRDSF9SSVNJTkcgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgU2VsZWN0ZWQgc3RvcCB3YXRjaCBzb3VyY2UgaXMgY2FwdHVyZWQgYXQgcmlzaW5nIGVkZ2Ugb2YgZmRjYW4xX3N3dCAgKi8KI2RlZmluZSBGRENBTl9UVF9TVE9QX1dBVENIX0ZBTExJTkcgKCh1aW50MzJfdCkweDAwMDAwMDA0VSkgLyohPCBTZWxlY3RlZCBzdG9wIHdhdGNoIHNvdXJjZSBpcyBjYXB0dXJlZCBhdCBmYWxsaW5nIGVkZ2Ugb2YgZmRjYW4xX3N3dCAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRfdGltZV9tYXJrX3NvdXJjZSBGRENBTiBUVCBUaW1lIE1hcmsgU291cmNlCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfUkVHX1RJTUVNQVJLX0RJQUJMRUQgICgodWludDMyX3QpMHgwMDAwMDAwMFUpIC8qITwgTm8gUmVnaXN0ZXIgVGltZSBNYXJrIEludGVycnVwdCBnZW5lcmF0ZWQgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX1JFR19USU1FTUFSS19DWUNfVElNRSAoKHVpbnQzMl90KTB4MDAwMDAwNDBVKSAvKiE8IFJlZ2lzdGVyIFRpbWUgTWFyayBJbnRlcnJ1cHQgaWYgVGltZSBNYXJrID0gY3ljbGUgdGltZSAgKi8KI2RlZmluZSBGRENBTl9UVF9SRUdfVElNRU1BUktfTE9DX1RJTUUgKCh1aW50MzJfdCkweDAwMDAwMDgwVSkgLyohPCBSZWdpc3RlciBUaW1lIE1hcmsgSW50ZXJydXB0IGlmIFRpbWUgTWFyayA9IGxvY2FsIHRpbWUgICovCiNkZWZpbmUgRkRDQU5fVFRfUkVHX1RJTUVNQVJLX0dMT19USU1FICgodWludDMyX3QpMHgwMDAwMDBDMFUpIC8qITwgUmVnaXN0ZXIgVGltZSBNYXJrIEludGVycnVwdCBpZiBUaW1lIE1hcmsgPSBnbG9iYWwgdGltZSAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRfZXJyb3JfbGV2ZWwgRkRDQU4gVFQgRXJyb3IgTGV2ZWwKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9OT19FUlJPUiAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBTZXZlcml0eSAwIC0gTm8gRXJyb3IgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfV0FSTklORyAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMVUpIC8qITwgU2V2ZXJpdHkgMSAtIFdhcm5pbmcgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0VSUk9SICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDJVKSAvKiE8IFNldmVyaXR5IDIgLSBFcnJvciAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9TRVZFUkVfRVJST1IgKCh1aW50MzJfdCkweDAwMDAwMDAzVSkgLyohPCBTZXZlcml0eSAzIC0gU2V2ZXJlIEVycm9yICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9tYXN0ZXJfc3RhdGUgRkRDQU4gVFQgTWFzdGVyIFN0YXRlCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfTUFTVEVSX09GRiAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDBVKSAvKiE8IE1hc3Rlcl9PZmYsIG5vIG1hc3RlciBwcm9wZXJ0aWVzIHJlbGV2YW50ICovCiNkZWZpbmUgRkRDQU5fVFRfVElNRV9TTEFWRSAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDRVKSAvKiE8IE9wZXJhdGluZyBhcyBUaW1lIFNsYXZlICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfQkFDS1VQX1RJTUVfTUFTVEVSICAoKHVpbnQzMl90KTB4MDAwMDAwMDhVKSAvKiE8IE9wZXJhdGluZyBhcyBCYWNrdXAgVGltZSBNYXN0ZXIgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfQ1VSUkVOVF9USU1FX01BU1RFUiAoKHVpbnQzMl90KTB4MDAwMDAwMENVKSAvKiE8IE9wZXJhdGluZyBhcyBjdXJyZW50IFRpbWUgTWFzdGVyICAgICAgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVF9zeW5jX3N0YXRlIEZEQ0FOIFRUIFN5bmNocm9uaXphdGlvbiBTdGF0ZQogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX1RUX09VVF9PRl9TWU5DICAgKCh1aW50MzJfdCkweDAwMDAwMDAwVSkgLyohPCBPdXQgb2YgU3luY2hyb25pemF0aW9uICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9TWU5DSFJPTklaSU5HICgodWludDMyX3QpMHgwMDAwMDAxMFUpIC8qITwgU3luY2hyb25pemluZyB0byBjb21tdW5pY2F0aW9uICovCiNkZWZpbmUgRkRDQU5fVFRfSU5fR0FQICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMjBVKSAvKiE8IFNjaGVkdWxlIHN1c3BlbmRlZCBieSBHYXAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0lOX1NDSEVEVUxFICAgKCh1aW50MzJfdCkweDAwMDAwMDMwVSkgLyohPCBTeW5jaHJvbml6ZWQgdG8gc2NoZWR1bGUgICAgICAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEludGVycnVwdF9NYXNrcyBJbnRlcnJ1cHQgbWFza3MKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9JUl9NQVNLICgodWludDMyX3QpMHgzRkNGRkZGRlUpIC8qITwgRkRDQU4gaW50ZXJydXB0cyBtYXNrICovCiNkZWZpbmUgQ0NVX0lSX01BU0sgICAoKHVpbnQzMl90KTB4QzAwMDAwMDBVKSAvKiE8IENDVSBpbnRlcnJ1cHRzIG1hc2sgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fZmxhZ3MgRkRDQU4gRmxhZ3MKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RYX0NPTVBMRVRFICAgICAgICAgICAgIEZEQ0FOX0lSX1RDICAgICAgICAgICAgIC8qITwgVHJhbnNtaXNzaW9uIENvbXBsZXRlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RYX0FCT1JUX0NPTVBMRVRFICAgICAgIEZEQ0FOX0lSX1RDRiAgICAgICAgICAgIC8qITwgVHJhbnNtaXNzaW9uIENhbmNlbGxhdGlvbiBGaW5pc2hlZCAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RYX0ZJRk9fRU1QVFkgICAgICAgICAgIEZEQ0FOX0lSX1RGRSAgICAgICAgICAgIC8qITwgVHggRklGTyBFbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0hJR0hfUFJJT1JJVFlfTVNHICAgIEZEQ0FOX0lSX0hQTSAgICAgICAgICAgIC8qITwgSGlnaCBwcmlvcml0eSBtZXNzYWdlIHJlY2VpdmVkICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0JVRkZFUl9ORVdfTUVTU0FHRSAgIEZEQ0FOX0lSX0RSWCAgICAgICAgICAgIC8qITwgQXQgbGVhc3Qgb25lIHJlY2VpdmVkIG1lc3NhZ2Ugc3RvcmVkIGludG8gYSBSeCBCdWZmZXIgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RYX0VWVF9GSUZPX0VMVF9MT1NUICAgIEZEQ0FOX0lSX1RFRkwgICAgICAgICAgIC8qITwgVHggRXZlbnQgRklGTyBlbGVtZW50IGxvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RYX0VWVF9GSUZPX0ZVTEwgICAgICAgIEZEQ0FOX0lSX1RFRkYgICAgICAgICAgIC8qITwgVHggRXZlbnQgRklGTyBmdWxsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RYX0VWVF9GSUZPX1dBVEVSTUFSSyAgIEZEQ0FOX0lSX1RFRlcgICAgICAgICAgIC8qITwgVHggRXZlbnQgRklGTyBmaWxsIGxldmVsIHJlYWNoZWQgd2F0ZXJtYXJrICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RYX0VWVF9GSUZPX05FV19EQVRBICAgIEZEQ0FOX0lSX1RFRk4gICAgICAgICAgIC8qITwgVHggSGFuZGxlciB3cm90ZSBUeCBFdmVudCBGSUZPIGVsZW1lbnQgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8wX01FU1NBR0VfTE9TVCAgIEZEQ0FOX0lSX1JGMEwgICAgICAgICAgIC8qITwgUnggRklGTyAwIG1lc3NhZ2UgbG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8wX0ZVTEwgICAgICAgICAgIEZEQ0FOX0lSX1JGMEYgICAgICAgICAgIC8qITwgUnggRklGTyAwIGZ1bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8wX1dBVEVSTUFSSyAgICAgIEZEQ0FOX0lSX1JGMFcgICAgICAgICAgIC8qITwgUnggRklGTyAwIGZpbGwgbGV2ZWwgcmVhY2hlZCB3YXRlcm1hcmsgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8wX05FV19NRVNTQUdFICAgIEZEQ0FOX0lSX1JGME4gICAgICAgICAgIC8qITwgTmV3IG1lc3NhZ2Ugd3JpdHRlbiB0byBSeCBGSUZPIDAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8xX01FU1NBR0VfTE9TVCAgIEZEQ0FOX0lSX1JGMUwgICAgICAgICAgIC8qITwgUnggRklGTyAxIG1lc3NhZ2UgbG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8xX0ZVTEwgICAgICAgICAgIEZEQ0FOX0lSX1JGMUYgICAgICAgICAgIC8qITwgUnggRklGTyAxIGZ1bGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8xX1dBVEVSTUFSSyAgICAgIEZEQ0FOX0lSX1JGMVcgICAgICAgICAgIC8qITwgUnggRklGTyAxIGZpbGwgbGV2ZWwgcmVhY2hlZCB3YXRlcm1hcmsgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JYX0ZJRk8xX05FV19NRVNTQUdFICAgIEZEQ0FOX0lSX1JGMU4gICAgICAgICAgIC8qITwgTmV3IG1lc3NhZ2Ugd3JpdHRlbiB0byBSeCBGSUZPIDEgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JBTV9BQ0NFU1NfRkFJTFVSRSAgICAgIEZEQ0FOX0lSX01SQUYgICAgICAgICAgIC8qITwgTWVzc2FnZSBSQU0gYWNjZXNzIGZhaWx1cmUgb2NjdXJyZWQgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0VSUk9SX0xPR0dJTkdfT1ZFUkZMT1cgIEZEQ0FOX0lSX0VMTyAgICAgICAgICAgIC8qITwgT3ZlcmZsb3cgb2YgRkRDQU4gRXJyb3IgTG9nZ2luZyBDb3VudGVyIG9jY3VycmVkICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0VSUk9SX1BBU1NJVkUgICAgICAgICAgIEZEQ0FOX0lSX0VQICAgICAgICAgICAgIC8qITwgRXJyb3JfUGFzc2l2ZSBzdGF0dXMgY2hhbmdlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0VSUk9SX1dBUk5JTkcgICAgICAgICAgIEZEQ0FOX0lSX0VXICAgICAgICAgICAgIC8qITwgRXJyb3JfV2FybmluZyBzdGF0dXMgY2hhbmdlZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0JVU19PRkYgICAgICAgICAgICAgICAgIEZEQ0FOX0lSX0JPICAgICAgICAgICAgIC8qITwgQnVzX09mZiBzdGF0dXMgY2hhbmdlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JBTV9XQVRDSERPRyAgICAgICAgICAgIEZEQ0FOX0lSX1dESSAgICAgICAgICAgIC8qITwgTWVzc2FnZSBSQU0gV2F0Y2hkb2cgZXZlbnQgZHVlIHRvIG1pc3NpbmcgUkVBRFkgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0FSQl9QUk9UT0NPTF9FUlJPUiAgICAgIEZEQ0FOX0lSX1BFQSAgICAgICAgICAgIC8qITwgUHJvdG9jb2wgZXJyb3IgaW4gYXJiaXRyYXRpb24gcGhhc2UgZGV0ZWN0ZWQgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0RBVEFfUFJPVE9DT0xfRVJST1IgICAgIEZEQ0FOX0lSX1BFRCAgICAgICAgICAgIC8qITwgUHJvdG9jb2wgZXJyb3IgaW4gZGF0YSBwaGFzZSBkZXRlY3RlZCAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1JFU0VSVkVEX0FERFJFU1NfQUNDRVNTIEZEQ0FOX0lSX0FSQSAgICAgICAgICAgIC8qITwgQWNjZXNzIHRvIHJlc2VydmVkIGFkZHJlc3Mgb2NjdXJyZWQgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RJTUVTVEFNUF9XUkFQQVJPVU5EICAgIEZEQ0FOX0lSX1RTVyAgICAgICAgICAgIC8qITwgVGltZXN0YW1wIGNvdW50ZXIgd3JhcHBlZCBhcm91bmQgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX1RJTUVPVVRfT0NDVVJSRUQgICAgICAgIEZEQ0FOX0lSX1RPTyAgICAgICAgICAgIC8qITwgVGltZW91dCByZWFjaGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0NBTElCX1NUQVRFX0NIQU5HRUQgICAgIChGRENBTkNDVV9JUl9DU0MgPDwgMzApIC8qITwgQ2xvY2sgY2FsaWJyYXRpb24gc3RhdGUgY2hhbmdlZCAgICAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9GTEFHX0NBTElCX1dBVENIRE9HX0VWRU5UICAgIChGRENBTkNDVV9JUl9DV0UgPDwgMzApIC8qITwgQ2xvY2sgY2FsaWJyYXRpb24gd2F0Y2hkb2cgZXZlbnQgb2NjdXJyZWQgICAgICAgICAgICAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX0ludGVycnVwdHMgRkRDQU4gSW50ZXJydXB0cwogICogQHsKICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UeF9JbnRlcnJ1cHRzIEZEQ0FOIFR4IEludGVycnVwdHMKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9JVF9UWF9DT01QTEVURSAgICAgICAgICAgRkRDQU5fSUVfVENFICAgLyohPCBUcmFuc21pc3Npb24gQ29tcGxldGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0lUX1RYX0FCT1JUX0NPTVBMRVRFICAgICBGRENBTl9JRV9UQ0ZFICAvKiE8IFRyYW5zbWlzc2lvbiBDYW5jZWxsYXRpb24gRmluaXNoZWQgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fSVRfVFhfRklGT19FTVBUWSAgICAgICAgIEZEQ0FOX0lFX1RGRUUgIC8qITwgVHggRklGTyBFbXB0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1J4X0ludGVycnVwdHMgRkRDQU4gUnggSW50ZXJydXB0cwogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0lUX1JYX0hJR0hfUFJJT1JJVFlfTVNHICBGRENBTl9JRV9IUE1FICAvKiE8IEhpZ2ggcHJpb3JpdHkgbWVzc2FnZSByZWNlaXZlZCAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fSVRfUlhfQlVGRkVSX05FV19NRVNTQUdFIEZEQ0FOX0lFX0RSWEUgIC8qITwgQXQgbGVhc3Qgb25lIHJlY2VpdmVkIG1lc3NhZ2Ugc3RvcmVkIGludG8gYSBSeCBCdWZmZXIgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX0NvdW50ZXJfSW50ZXJydXB0cyBGRENBTiBDb3VudGVyIEludGVycnVwdHMKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9JVF9USU1FU1RBTVBfV1JBUEFST1VORCAgRkRDQU5fSUVfVFNXRSAgLyohPCBUaW1lc3RhbXAgY291bnRlciB3cmFwcGVkIGFyb3VuZCAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0lUX1RJTUVPVVRfT0NDVVJSRUQgICAgICBGRENBTl9JRV9UT09FICAvKiE8IFRpbWVvdXQgcmVhY2hlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9DbG9ja19DYWxpYnJhdGlvbl9JbnRlcnJ1cHRzIENsb2NrIENhbGlicmF0aW9uIEludGVycnVwdHMKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9JVF9DQUxJQl9TVEFURV9DSEFOR0VEICAoRkRDQU5DQ1VfSUVfQ1NDRSA8PCAzMCkgLyohPCBDbG9jayBjYWxpYnJhdGlvbiBzdGF0ZSBjaGFuZ2VkICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0lUX0NBTElCX1dBVENIRE9HX0VWRU5UIChGRENBTkNDVV9JRV9DV0VFIDw8IDMwKSAvKiE8IENsb2NrIGNhbGlicmF0aW9uIHdhdGNoZG9nIGV2ZW50IG9jY3VycmVkICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UeF9FdmVudF9GaWZvX0ludGVycnVwdHMgRkRDQU4gVHggRXZlbnQgRklGTyBJbnRlcnJ1cHRzCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fSVRfVFhfRVZUX0ZJRk9fRUxUX0xPU1QgIEZEQ0FOX0lFX1RFRkxFIC8qITwgVHggRXZlbnQgRklGTyBlbGVtZW50IGxvc3QgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fSVRfVFhfRVZUX0ZJRk9fRlVMTCAgICAgIEZEQ0FOX0lFX1RFRkZFIC8qITwgVHggRXZlbnQgRklGTyBmdWxsICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fSVRfVFhfRVZUX0ZJRk9fV0FURVJNQVJLIEZEQ0FOX0lFX1RFRldFIC8qITwgVHggRXZlbnQgRklGTyBmaWxsIGxldmVsIHJlYWNoZWQgd2F0ZXJtYXJrICovCiNkZWZpbmUgRkRDQU5fSVRfVFhfRVZUX0ZJRk9fTkVXX0RBVEEgIEZEQ0FOX0lFX1RFRk5FIC8qITwgVHggSGFuZGxlciB3cm90ZSBUeCBFdmVudCBGSUZPIGVsZW1lbnQgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9SeF9GaWZvMF9JbnRlcnJ1cHRzIEZEQ0FOIFJ4IEZJRk8gMCBJbnRlcnJ1cHRzCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fSVRfUlhfRklGTzBfTUVTU0FHRV9MT1NUIEZEQ0FOX0lFX1JGMExFIC8qITwgUnggRklGTyAwIG1lc3NhZ2UgbG9zdCAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9JVF9SWF9GSUZPMF9GVUxMICAgICAgICAgRkRDQU5fSUVfUkYwRkUgLyohPCBSeCBGSUZPIDAgZnVsbCAgICAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0lUX1JYX0ZJRk8wX1dBVEVSTUFSSyAgICBGRENBTl9JRV9SRjBXRSAvKiE8IFJ4IEZJRk8gMCBmaWxsIGxldmVsIHJlYWNoZWQgd2F0ZXJtYXJrICovCiNkZWZpbmUgRkRDQU5fSVRfUlhfRklGTzBfTkVXX01FU1NBR0UgIEZEQ0FOX0lFX1JGME5FIC8qITwgTmV3IG1lc3NhZ2Ugd3JpdHRlbiB0byBSeCBGSUZPIDAgICAgICAgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1J4X0ZpZm8xX0ludGVycnVwdHMgRkRDQU4gUnggRklGTyAxIEludGVycnVwdHMKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9JVF9SWF9GSUZPMV9NRVNTQUdFX0xPU1QgRkRDQU5fSUVfUkYxTEUgLyohPCBSeCBGSUZPIDEgbWVzc2FnZSBsb3N0ICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0lUX1JYX0ZJRk8xX0ZVTEwgICAgICAgICBGRENBTl9JRV9SRjFGRSAvKiE8IFJ4IEZJRk8gMSBmdWxsICAgICAgICAgICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fSVRfUlhfRklGTzFfV0FURVJNQVJLICAgIEZEQ0FOX0lFX1JGMVdFIC8qITwgUnggRklGTyAxIGZpbGwgbGV2ZWwgcmVhY2hlZCB3YXRlcm1hcmsgKi8KI2RlZmluZSBGRENBTl9JVF9SWF9GSUZPMV9ORVdfTUVTU0FHRSAgRkRDQU5fSUVfUkYxTkUgLyohPCBOZXcgbWVzc2FnZSB3cml0dGVuIHRvIFJ4IEZJRk8gMSAgICAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fRXJyb3JfSW50ZXJydXB0cyBGRENBTiBFcnJvciBJbnRlcnJ1cHRzCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fSVRfUkFNX0FDQ0VTU19GQUlMVVJFICAgICAgRkRDQU5fSUVfTVJBRkUgLyohPCBNZXNzYWdlIFJBTSBhY2Nlc3MgZmFpbHVyZSBvY2N1cnJlZCAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9JVF9FUlJPUl9MT0dHSU5HX09WRVJGTE9XICBGRENBTl9JRV9FTE9FICAvKiE8IE92ZXJmbG93IG9mIEZEQ0FOIEVycm9yIExvZ2dpbmcgQ291bnRlciBvY2N1cnJlZCAqLwojZGVmaW5lIEZEQ0FOX0lUX1JBTV9XQVRDSERPRyAgICAgICAgICAgIEZEQ0FOX0lFX1dESUUgIC8qITwgTWVzc2FnZSBSQU0gV2F0Y2hkb2cgZXZlbnQgZHVlIHRvIG1pc3NpbmcgUkVBRFkgICovCiNkZWZpbmUgRkRDQU5fSVRfQVJCX1BST1RPQ09MX0VSUk9SICAgICAgRkRDQU5fSUVfUEVBRSAgLyohPCBQcm90b2NvbCBlcnJvciBpbiBhcmJpdHJhdGlvbiBwaGFzZSBkZXRlY3RlZCAgICAgKi8KI2RlZmluZSBGRENBTl9JVF9EQVRBX1BST1RPQ09MX0VSUk9SICAgICBGRENBTl9JRV9QRURFICAvKiE8IFByb3RvY29sIGVycm9yIGluIGRhdGEgcGhhc2UgZGV0ZWN0ZWQgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX0lUX1JFU0VSVkVEX0FERFJFU1NfQUNDRVNTIEZEQ0FOX0lFX0FSQUUgIC8qITwgQWNjZXNzIHRvIHJlc2VydmVkIGFkZHJlc3Mgb2NjdXJyZWQgICAgICAgICAgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9FcnJvcl9TdGF0dXNfSW50ZXJydXB0cyBGRENBTiBFcnJvciBTdGF0dXMgSW50ZXJydXB0cwogICogQHsKICAqLwojZGVmaW5lIEZEQ0FOX0lUX0VSUk9SX1BBU1NJVkUgRkRDQU5fSUVfRVBFIC8qITwgRXJyb3JfUGFzc2l2ZSBzdGF0dXMgY2hhbmdlZCAqLwojZGVmaW5lIEZEQ0FOX0lUX0VSUk9SX1dBUk5JTkcgRkRDQU5fSUVfRVdFIC8qITwgRXJyb3JfV2FybmluZyBzdGF0dXMgY2hhbmdlZCAqLwojZGVmaW5lIEZEQ0FOX0lUX0JVU19PRkYgICAgICAgRkRDQU5fSUVfQk9FIC8qITwgQnVzX09mZiBzdGF0dXMgY2hhbmdlZCAgICAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVGZsYWdzIEZEQ0FOIFRUIEZsYWdzCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfRkxBR19CQVNJQ19DWUNMRV9TVEFSVCAgICBGRENBTl9UVElSX1NCQyAgLyohPCBTdGFydCBvZiBCYXNpYyBDeWNsZSAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0ZMQUdfTUFUUklYX0NZQ0xFX1NUQVJUICAgRkRDQU5fVFRJUl9TTUMgIC8qITwgU3RhcnQgb2YgTWF0cml4IEN5Y2xlICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9GTEFHX1NZTkNfTU9ERV9DSEFOR0UgICAgIEZEQ0FOX1RUSVJfQ1NNICAvKiE8IENoYW5nZSBvZiBTeW5jaHJvbml6YXRpb24gTW9kZSAgICovCiNkZWZpbmUgRkRDQU5fVFRfRkxBR19TVEFSVF9PRl9HQVAgICAgICAgICBGRENBTl9UVElSX1NPRyAgLyohPCBTdGFydCBvZiBHYXAgICAgICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0ZMQUdfUkVHX1RJTUVfTUFSSyAgICAgICAgRkRDQU5fVFRJUl9SVE1JIC8qITwgUmVnaXN0ZXIgVGltZSBNYXJrIEludGVycnVwdCAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9GTEFHX1RSSUdfVElNRV9NQVJLICAgICAgIEZEQ0FOX1RUSVJfVFRNSSAvKiE8IFRyaWdnZXIgVGltZSBNYXJrIEV2ZW50IEludGVybmFsICovCiNkZWZpbmUgRkRDQU5fVFRfRkxBR19TVE9QX1dBVENIICAgICAgICAgICBGRENBTl9UVElSX1NXRSAgLyohPCBTdG9wIFdhdGNoIEV2ZW50ICAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0ZMQUdfR0xPQkFMX1RJTUVfV1JBUCAgICAgRkRDQU5fVFRJUl9HVFcgIC8qITwgR2xvYmFsIFRpbWUgV3JhcCAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9GTEFHX0dMT0JBTF9USU1FX0RJU0MgICAgIEZEQ0FOX1RUSVJfR1REICAvKiE8IEdsb2JhbCBUaW1lIERpc2NvbnRpbnVpdHkgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfRkxBR19HTE9CQUxfVElNRV9FUlJPUiAgICBGRENBTl9UVElSX0dURSAgLyohPCBHbG9iYWwgVGltZSBFcnJvciAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0ZMQUdfVFhfQ09VTlRfVU5ERVJGTE9XICAgRkRDQU5fVFRJUl9UWFUgIC8qITwgVHggQ291bnQgVW5kZXJmbG93ICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9GTEFHX1RYX0NPVU5UX09WRVJGTE9XICAgIEZEQ0FOX1RUSVJfVFhPICAvKiE8IFR4IENvdW50IE92ZXJmbG93ICAgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfRkxBR19TQ0hFRFVMSU5HX0VSUk9SXzEgICBGRENBTl9UVElSX1NFMSAgLyohPCBTY2hlZHVsaW5nIEVycm9yIDEgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0ZMQUdfU0NIRURVTElOR19FUlJPUl8yICAgRkRDQU5fVFRJUl9TRTIgIC8qITwgU2NoZWR1bGluZyBFcnJvciAyICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9GTEFHX0VSUk9SX0xFVkVMX0NIQU5HRSAgIEZEQ0FOX1RUSVJfRUxDICAvKiE8IEVycm9yIExldmVsIENoYW5nZWQgICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfRkxBR19JTklUX1dBVENIX1RSSUdHRVIgICBGRENBTl9UVElSX0lXVCAgLyohPCBJbml0aWFsaXphdGlvbiBXYXRjaCBUcmlnZ2VyICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0ZMQUdfV0FUQ0hfVFJJR0dFUiAgICAgICAgRkRDQU5fVFRJUl9XVCAgIC8qITwgV2F0Y2ggVHJpZ2dlciAgICAgICAgICAgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9GTEFHX0FQUExJQ0FUSU9OX1dBVENIRE9HIEZEQ0FOX1RUSVJfQVcgICAvKiE8IEFwcGxpY2F0aW9uIFdhdGNoZG9nICAgICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfRkxBR19DT05GSUdfRVJST1IgICAgICAgICBGRENBTl9UVElSX0NFUiAgLyohPCBDb25maWd1cmF0aW9uIEVycm9yICAgICAgICAgICAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRJbnRlcnJ1cHRzIEZEQ0FOIFRUIEludGVycnVwdHMKICAqIEB7CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRTY2hlZHVsZVN5bmNocm9uaXphdGlvbl9JbnRlcnJ1cHRzIEZEQ0FOIFRUIFNjaGVkdWxlIFN5bmNocm9uaXphdGlvbiBJbnRlcnJ1cHRzCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfQkFTSUNfQ1lDTEVfU1RBUlQgIEZEQ0FOX1RUSUVfU0JDRSAvKiE8IFN0YXJ0IG9mIEJhc2ljIEN5Y2xlICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0lUX01BVFJJWF9DWUNMRV9TVEFSVCBGRENBTl9UVElFX1NNQ0UgLyohPCBTdGFydCBvZiBNYXRyaXggQ3ljbGUgICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9JVF9TWU5DX01PREVfQ0hBTkdFICAgRkRDQU5fVFRJRV9DU01FIC8qITwgQ2hhbmdlIG9mIFN5bmNocm9uaXphdGlvbiBNb2RlICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfU1RBUlRfT0ZfR0FQICAgICAgIEZEQ0FOX1RUSUVfU09HRSAvKiE8IFN0YXJ0IG9mIEdhcCAgICAgICAgICAgICAgICAgICAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFRUaW1lTWFya19JbnRlcnJ1cHRzIEZEQ0FOIFRUIFRpbWUgTWFyayBJbnRlcnJ1cHRzCiAgKiBAewogICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfUkVHX1RJTUVfTUFSSyAgRkRDQU5fVFRJRV9SVE1JRSAvKiE8IFJlZ2lzdGVyIFRpbWUgTWFyayBJbnRlcnJ1cHQgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfVFJJR19USU1FX01BUksgRkRDQU5fVFRJRV9UVE1JRSAvKiE8IFRyaWdnZXIgVGltZSBNYXJrIEV2ZW50IEludGVybmFsICovCi8qKgogICogQH0KICAqLwoKLyoqIEBkZWZncm91cCBGRENBTl9UVFN0b3BXYXRjaF9JbnRlcnJ1cHQgRkRDQU4gVFQgU3RvcCBXYXRjaCBJbnRlcnJ1cHQKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9JVF9TVE9QX1dBVENIIEZEQ0FOX1RUSUVfU1dFRSAvKiE8IFN0b3AgV2F0Y2ggRXZlbnQgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RUR2xvYmFsVGltZV9JbnRlcnJ1cHRzIEZEQ0FOIFRUIEdsb2JhbCBUaW1lIEludGVycnVwdHMKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9JVF9HTE9CQUxfVElNRV9XUkFQIEZEQ0FOX1RUSUVfR1RXRSAgLyohPCBHbG9iYWwgVGltZSBXcmFwICAgICAgICAgICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfR0xPQkFMX1RJTUVfRElTQyBGRENBTl9UVElFX0dUREUgIC8qITwgR2xvYmFsIFRpbWUgRGlzY29udGludWl0eSAqLwovKioKICAqIEB9CiAgKi8KCi8qKiBAZGVmZ3JvdXAgRkRDQU5fVFREaXN0dXJiaW5nRXJyb3JfSW50ZXJydXB0cyBGRENBTiBUVCBEaXN0dXJiaW5nIEVycm9yIEludGVycnVwdHMKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9JVF9HTE9CQUxfVElNRV9FUlJPUiAgRkRDQU5fVFRJRV9HVEVFIC8qITwgR2xvYmFsIFRpbWUgRXJyb3IgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0lUX1RYX0NPVU5UX1VOREVSRkxPVyBGRENBTl9UVElFX1RYVUUgLyohPCBUeCBDb3VudCBVbmRlcmZsb3cgICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfVFhfQ09VTlRfT1ZFUkZMT1cgIEZEQ0FOX1RUSUVfVFhPRSAvKiE8IFR4IENvdW50IE92ZXJmbG93ICAgKi8KI2RlZmluZSBGRENBTl9UVF9JVF9TQ0hFRFVMSU5HX0VSUk9SXzEgRkRDQU5fVFRJRV9TRTFFIC8qITwgU2NoZWR1bGluZyBFcnJvciAxICAqLwojZGVmaW5lIEZEQ0FOX1RUX0lUX1NDSEVEVUxJTkdfRVJST1JfMiBGRENBTl9UVElFX1NFMkUgLyohPCBTY2hlZHVsaW5nIEVycm9yIDIgICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfRVJST1JfTEVWRUxfQ0hBTkdFIEZEQ0FOX1RUSUVfRUxDRSAvKiE8IEVycm9yIExldmVsIENoYW5nZWQgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGRlZmdyb3VwIEZEQ0FOX1RURmF0YWxFcnJvcl9JbnRlcnJ1cHRzIEZEQ0FOIFRUIEZhdGFsIEVycm9yIEludGVycnVwdHMKICAqIEB7CiAgKi8KI2RlZmluZSBGRENBTl9UVF9JVF9JTklUX1dBVENIX1RSSUdHRVIgICBGRENBTl9UVElFX0lXVEUgLyohPCBJbml0aWFsaXphdGlvbiBXYXRjaCBUcmlnZ2VyICovCiNkZWZpbmUgRkRDQU5fVFRfSVRfV0FUQ0hfVFJJR0dFUiAgICAgICAgRkRDQU5fVFRJRV9XVEUgIC8qITwgV2F0Y2ggVHJpZ2dlciAgICAgICAgICAgICAgICAqLwojZGVmaW5lIEZEQ0FOX1RUX0lUX0FQUExJQ0FUSU9OX1dBVENIRE9HIEZEQ0FOX1RUSUVfQVdFICAvKiE8IEFwcGxpY2F0aW9uIFdhdGNoZG9nICAgICAgICAgKi8KI2RlZmluZSBGRENBTl9UVF9JVF9DT05GSUdfRVJST1IgICAgICAgICBGRENBTl9UVElFX0NFUkUgLyohPCBDb25maWd1cmF0aW9uIEVycm9yICAgICAgICAgICovCi8qKgogICogQH0KICAqLwoKLyoqCiAgKiBAfQogICovCgovKioKICAqIEB9CiAgKi8KCi8qIEV4cG9ydGVkIG1hY3JvIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qKiBAZGVmZ3JvdXAgRkRDQU5fRXhwb3J0ZWRfTWFjcm9zIEZEQ0FOIEV4cG9ydGVkIE1hY3JvcwogICogQHsKICAqLwoKLyoqIEBicmllZiAgUmVzZXQgRkRDQU4gaGFuZGxlIHN0YXRlLgogICogQHBhcmFtICBfX0hBTkRMRV9fIEZEQ0FOIGhhbmRsZS4KICAqIEByZXR2YWwgTm9uZQogICovCiNpZiBVU0VfSEFMX0ZEQ0FOX1JFR0lTVEVSX0NBTExCQUNLUyA9PSAxCiNkZWZpbmUgX19IQUxfRkRDQU5fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pIGRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fSEFORExFX18pLT5TdGF0ZSA9IEhBTF9GRENBTl9TVEFURV9SRVNFVDsgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX19IQU5ETEVfXyktPk1zcEluaXRDYWxsYmFjayA9IE5VTEw7ICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX0hBTkRMRV9fKS0+TXNwRGVJbml0Q2FsbGJhY2sgPSBOVUxMOyAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCiNlbHNlCiNkZWZpbmUgX19IQUxfRkRDQU5fUkVTRVRfSEFORExFX1NUQVRFKF9fSEFORExFX18pICgoX19IQU5ETEVfXyktPlN0YXRlID0gSEFMX0ZEQ0FOX1NUQVRFX1JFU0VUKQojZW5kaWYgLyogVVNFX0hBTF9GRENBTl9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KCi8qKgogICogQGJyaWVmICBFbmFibGUgdGhlIHNwZWNpZmllZCBGRENBTiBpbnRlcnJ1cHRzLgogICogQHBhcmFtICBfX0hBTkRMRV9fIEZEQ0FOIGhhbmRsZS4KICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBGRENBTiBpbnRlcnJ1cHQuCiAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgQGFyZyBGRENBTl9JbnRlcnJ1cHRzCiAgKiBAcmV0dmFsIE5vbmUKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX0VOQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAgICAgICAgICAgICBcCiAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgIChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklFIHw9ICgoX19JTlRFUlJVUFRfXykgJiBGRENBTl9JUl9NQVNLKTsgXAogICAgRkRDQU5fQ0NVLT5JRSB8PSAoKChfX0lOVEVSUlVQVF9fKSAmIENDVV9JUl9NQVNLKSA+PiAzMCk7ICAgICAgICBcCiAgfXdoaWxlKDApCgoKLyoqCiAgKiBAYnJpZWYgIERpc2FibGUgdGhlIHNwZWNpZmllZCBGRENBTiBpbnRlcnJ1cHRzLgogICogQHBhcmFtICBfX0hBTkRMRV9fIEZEQ0FOIGhhbmRsZS4KICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBGRENBTiBpbnRlcnJ1cHQuCiAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgQGFyZyBGRENBTl9JbnRlcnJ1cHRzCiAgKiBAcmV0dmFsIE5vbmUKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgICAgICAgICAgICAgICBcCiAgZG97ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICgoX19IQU5ETEVfXyktPkluc3RhbmNlLT5JRSkgJj0gfigoX19JTlRFUlJVUFRfXykgJiBGRENBTl9JUl9NQVNLKTsgXAogICAgRkRDQU5fQ0NVLT5JRSAmPSB+KCgoX19JTlRFUlJVUFRfXykgJiBDQ1VfSVJfTUFTSykgPj4gMzApOyAgICAgICAgICBcCiAgfXdoaWxlKDApCgovKioKICAqIEBicmllZiAgQ2hlY2sgd2hldGhlciB0aGUgc3BlY2lmaWVkIEZEQ0FOIGludGVycnVwdCBpcyBzZXQgb3Igbm90LgogICogQHBhcmFtICBfX0hBTkRMRV9fIEZEQ0FOIGhhbmRsZS4KICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBGRENBTiBpbnRlcnJ1cHQuCiAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgQGFyZyBGRENBTl9JbnRlcnJ1cHRzCiAgKiBAcmV0dmFsIElUU3RhdHVzCiAgKi8KI2RlZmluZSBfX0hBTF9GRENBTl9HRVRfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19JTlRFUlJVUFRfXykgPCBGRENBTl9JVF9DQUxJQl9XQVRDSERPR19FVkVOVCkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SVIgJiAoX19JTlRFUlJVUFRfXykpIDogKChGRENBTl9DQ1UtPklSIDw8IDMwKSAmIChfX0lOVEVSUlVQVF9fKSkpCgovKioKICAqIEBicmllZiAgQ2xlYXIgdGhlIHNwZWNpZmllZCBGRENBTiBpbnRlcnJ1cHRzLgogICogQHBhcmFtICBfX0hBTkRMRV9fIEZEQ0FOIGhhbmRsZS4KICAqIEBwYXJhbSAgX19JTlRFUlJVUFRfXyBzcGVjaWZpZXMgdGhlIGludGVycnVwdHMgdG8gY2xlYXIuCiAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgQGFyZyBGRENBTl9JbnRlcnJ1cHRzCiAgKiBAcmV0dmFsIE5vbmUKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX0NMRUFSX0lUKF9fSEFORExFX18sIF9fSU5URVJSVVBUX18pICAgICAgICAgICAgICAgXApkb3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklSKSA9ICgoX19JTlRFUlJVUFRfXykgJiBGRENBTl9JUl9NQVNLKTsgXAogICAgRkRDQU5fQ0NVLT5JUiA9ICgoKF9fSU5URVJSVVBUX18pICYgQ0NVX0lSX01BU0spID4+IDMwKTsgICAgICAgICAgXAogIH13aGlsZSgwKQoKLyoqCiAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBGRENBTiBmbGFnIGlzIHNldCBvciBub3QuCiAgKiBAcGFyYW0gIF9fSEFORExFX18gRkRDQU4gaGFuZGxlLgogICogQHBhcmFtICBfX0ZMQUdfXyBGRENBTiBmbGFnLgogICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIEBhcmcgRkRDQU5fZmxhZ3MKICAqIEByZXR2YWwgRmxhZ1N0YXR1cwogICovCiNkZWZpbmUgX19IQUxfRkRDQU5fR0VUX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKF9fRkxBR19fKSA8IEZEQ0FOX0ZMQUdfQ0FMSUJfV0FUQ0hET0dfRVZFTlQpID8gKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklSICYgKF9fRkxBR19fKSkgOiAoKEZEQ0FOX0NDVS0+SVIgPDwgMzApICYgKF9fRkxBR19fKSkpCgovKioKICAqIEBicmllZiAgQ2xlYXIgdGhlIHNwZWNpZmllZCBGRENBTiBmbGFncy4KICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGRENBTiBoYW5kbGUuCiAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgZmxhZ3MgdG8gY2xlYXIuCiAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgQGFyZyBGRENBTl9mbGFncwogICogQHJldHZhbCBOb25lCiAgKi8KI2RlZmluZSBfX0hBTF9GRENBTl9DTEVBUl9GTEFHKF9fSEFORExFX18sIF9fRkxBR19fKSAgICAgICAgICAgICBcCmRveyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgKChfX0hBTkRMRV9fKS0+SW5zdGFuY2UtPklSKSA9ICgoX19GTEFHX18pICYgRkRDQU5fSVJfTUFTSyk7IFwKICAgIEZEQ0FOX0NDVS0+SVIgPSAoKChfX0ZMQUdfXykgJiBDQ1VfSVJfTUFTSykgPj4gMzApOyAgICAgICAgICBcCiAgfXdoaWxlKDApCgovKiogQGJyaWVmICBDaGVjayBpZiB0aGUgc3BlY2lmaWVkIEZEQ0FOIGludGVycnVwdCBzb3VyY2UgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4KICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGRENBTiBoYW5kbGUuCiAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gc3BlY2lmaWVzIHRoZSBGRENBTiBpbnRlcnJ1cHQgc291cmNlIHRvIGNoZWNrLgogICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAYXJnIEZEQ0FOX0ludGVycnVwdHMKICAqIEByZXR2YWwgSVRTdGF0dXMKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19JTlRFUlJVUFRfXykgPCBGRENBTl9JVF9DQUxJQl9XQVRDSERPR19FVkVOVCkgPyAoKF9fSEFORExFX18pLT5JbnN0YW5jZS0+SUUgJiAoX19JTlRFUlJVUFRfXykpIDogKChGRENBTl9DQ1UtPklFIDw8IDMwKSAmIChfX0lOVEVSUlVQVF9fKSkpCgovKioKICAqIEBicmllZiAgRW5hYmxlIHRoZSBzcGVjaWZpZWQgRkRDQU4gVFQgaW50ZXJydXB0cy4KICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGRENBTiBoYW5kbGUuCiAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRkRDQU4gVFQgaW50ZXJydXB0LgogICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIEBhcmcgRkRDQU5fVFRJbnRlcnJ1cHRzCiAgKiBAcmV0dmFsIE5vbmUKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX1RUX0VOQUJMRV9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKChfX0hBTkRMRV9fKS0+dHRjYW4tPlRUSUUpIHw9IChfX0lOVEVSUlVQVF9fKSkKCi8qKgogICogQGJyaWVmICBEaXNhYmxlIHRoZSBzcGVjaWZpZWQgRkRDQU4gVFQgaW50ZXJydXB0cy4KICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGRENBTiBoYW5kbGUuCiAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRkRDQU4gVFQgaW50ZXJydXB0LgogICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IGNvbWJpbmF0aW9uIG9mIEBhcmcgRkRDQU5fVFRJbnRlcnJ1cHRzCiAgKiBAcmV0dmFsIE5vbmUKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX1RUX0RJU0FCTEVfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19IQU5ETEVfXyktPnR0Y2FuLT5UVElFKSAmPSB+KF9fSU5URVJSVVBUX18pKQoKLyoqCiAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBGRENBTiBUVCBpbnRlcnJ1cHQgaXMgc2V0IG9yIG5vdC4KICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGRENBTiBoYW5kbGUuCiAgKiBAcGFyYW0gIF9fSU5URVJSVVBUX18gRkRDQU4gVFQgaW50ZXJydXB0LgogICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIEBhcmcgRkRDQU5fVFRJbnRlcnJ1cHRzCiAgKiBAcmV0dmFsIElUU3RhdHVzCiAgKi8KI2RlZmluZSBfX0hBTF9GRENBTl9UVF9HRVRfSVQoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19IQU5ETEVfXyktPnR0Y2FuLT5UVElSKSAmIChfX0lOVEVSUlVQVF9fKSkKCi8qKgogICogQGJyaWVmICBDbGVhciB0aGUgc3BlY2lmaWVkIEZEQ0FOIFRUIGludGVycnVwdHMuCiAgKiBAcGFyYW0gIF9fSEFORExFX18gRkRDQU4gaGFuZGxlLgogICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgVFQgaW50ZXJydXB0cyB0byBjbGVhci4KICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSBjb21iaW5hdGlvbiBvZiBAYXJnIEZEQ0FOX1RUSW50ZXJydXB0cwogICogQHJldHZhbCBOb25lCiAgKi8KI2RlZmluZSBfX0hBTF9GRENBTl9UVF9DTEVBUl9JVChfX0hBTkRMRV9fLCBfX0lOVEVSUlVQVF9fKSAoKChfX0hBTkRMRV9fKS0+dHRjYW4tPlRUSVIpID0gKF9fSU5URVJSVVBUX18pKQoKLyoqCiAgKiBAYnJpZWYgIENoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBGRENBTiBUVCBmbGFnIGlzIHNldCBvciBub3QuCiAgKiBAcGFyYW0gIF9fSEFORExFX18gRkRDQU4gaGFuZGxlLgogICogQHBhcmFtICBfX0ZMQUdfXyBGRENBTiBUVCBmbGFnLgogICogICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgb25lIG9mIEBhcmcgRkRDQU5fVFRmbGFncwogICogQHJldHZhbCBGbGFnU3RhdHVzCiAgKi8KI2RlZmluZSBfX0hBTF9GRENBTl9UVF9HRVRfRkxBRyhfX0hBTkRMRV9fLCBfX0ZMQUdfXykgKCgoX19IQU5ETEVfXyktPnR0Y2FuLT5UVElSKSAmIChfX0ZMQUdfXykpCgovKioKICAqIEBicmllZiAgQ2xlYXIgdGhlIHNwZWNpZmllZCBGRENBTiBUVCBmbGFncy4KICAqIEBwYXJhbSAgX19IQU5ETEVfXyBGRENBTiBoYW5kbGUuCiAgKiBAcGFyYW0gIF9fRkxBR19fIHNwZWNpZmllcyB0aGUgVFQgZmxhZ3MgdG8gY2xlYXIuCiAgKiAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgY29tYmluYXRpb24gb2YgQGFyZyBGRENBTl9UVGZsYWdzCiAgKiBAcmV0dmFsIE5vbmUKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX1RUX0NMRUFSX0ZMQUcoX19IQU5ETEVfXywgX19GTEFHX18pICgoKF9fSEFORExFX18pLT50dGNhbi0+VFRJUikgPSAoX19GTEFHX18pKQoKLyoqIEBicmllZiAgQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCBGRENBTiBUVCBpbnRlcnJ1cHQgc291cmNlIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCiAgKiBAcGFyYW0gIF9fSEFORExFX18gRkRDQU4gaGFuZGxlLgogICogQHBhcmFtICBfX0lOVEVSUlVQVF9fIHNwZWNpZmllcyB0aGUgRkRDQU4gVFQgaW50ZXJydXB0IHNvdXJjZSB0byBjaGVjay4KICAqICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQGFyZyBGRENBTl9UVEludGVycnVwdHMKICAqIEByZXR2YWwgSVRTdGF0dXMKICAqLwojZGVmaW5lIF9fSEFMX0ZEQ0FOX1RUX0dFVF9JVF9TT1VSQ0UoX19IQU5ETEVfXywgX19JTlRFUlJVUFRfXykgKCgoX19IQU5ETEVfXyktPnR0Y2FuLT5UVElFKSAmIChfX0lOVEVSUlVQVF9fKSkKCi8qKgogICogQH0KICAqLwoKLyogRXhwb3J0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyoqIEBhZGR0b2dyb3VwIEZEQ0FOX0V4cG9ydGVkX0Z1bmN0aW9ucwogICogQHsKICAqLwoKLyoqIEBhZGR0b2dyb3VwIEZEQ0FOX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDEKICAqIEB7CiAgKi8KLyogSW5pdGlhbGl6YXRpb24gYW5kIGRlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0luaXQoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0RlSW5pdChGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwp2b2lkICAgICAgICAgICAgICBIQUxfRkRDQU5fTXNwSW5pdChGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwp2b2lkICAgICAgICAgICAgICBIQUxfRkRDQU5fTXNwRGVJbml0KEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9FbnRlclBvd2VyRG93bk1vZGUoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0V4aXRQb3dlckRvd25Nb2RlKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CgojaWYgVVNFX0hBTF9GRENBTl9SRUdJU1RFUl9DQUxMQkFDS1MgPT0gMQovKiBDYWxsYmFja3MgUmVnaXN0ZXIvVW5SZWdpc3RlciBmdW5jdGlvbnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fUmVnaXN0ZXJDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIEhBTF9GRENBTl9DYWxsYmFja0lEVHlwZURlZiBDYWxsYmFja0lELCBwRkRDQU5fQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9VblJlZ2lzdGVyQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBIQUxfRkRDQU5fQ2FsbGJhY2tJRFR5cGVEZWYgQ2FsbGJhY2tJRCk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlckNsb2NrQ2FsaWJyYXRpb25DYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHBGRENBTl9DbG9ja0NhbGlicmF0aW9uQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9VblJlZ2lzdGVyQ2xvY2tDYWxpYnJhdGlvbkNhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlclR4RXZlbnRGaWZvQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBwRkRDQU5fVHhFdmVudEZpZm9DYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1VuUmVnaXN0ZXJUeEV2ZW50Rmlmb0NhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlclJ4RmlmbzBDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHBGRENBTl9SeEZpZm8wQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9VblJlZ2lzdGVyUnhGaWZvMENhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlclJ4RmlmbzFDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHBGRENBTl9SeEZpZm8xQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9VblJlZ2lzdGVyUnhGaWZvMUNhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlclR4QnVmZmVyQ29tcGxldGVDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHBGRENBTl9UeEJ1ZmZlckNvbXBsZXRlQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9VblJlZ2lzdGVyVHhCdWZmZXJDb21wbGV0ZUNhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlclR4QnVmZmVyQWJvcnRDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHBGRENBTl9UeEJ1ZmZlckFib3J0Q2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9VblJlZ2lzdGVyVHhCdWZmZXJBYm9ydENhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlckVycm9yU3RhdHVzQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBwRkRDQU5fRXJyb3JTdGF0dXNDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1VuUmVnaXN0ZXJFcnJvclN0YXR1c0NhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlclRUU2NoZWR1bGVTeW5jQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBwRkRDQU5fVFRfU2NoZWR1bGVTeW5jQ2FsbGJhY2tUeXBlRGVmIHBDYWxsYmFjayk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9VblJlZ2lzdGVyVFRTY2hlZHVsZVN5bmNDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fUmVnaXN0ZXJUVFRpbWVNYXJrQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBwRkRDQU5fVFRfVGltZU1hcmtDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1VuUmVnaXN0ZXJUVFRpbWVNYXJrQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1JlZ2lzdGVyVFRTdG9wV2F0Y2hDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHBGRENBTl9UVF9TdG9wV2F0Y2hDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1VuUmVnaXN0ZXJUVFN0b3BXYXRjaENhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZWdpc3RlclRUR2xvYmFsVGltZUNhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgcEZEQ0FOX1RUX0dsb2JhbFRpbWVDYWxsYmFja1R5cGVEZWYgcENhbGxiYWNrKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1VuUmVnaXN0ZXJUVEdsb2JhbFRpbWVDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwojZW5kaWYgLyogVVNFX0hBTF9GRENBTl9SRUdJU1RFUl9DQUxMQkFDS1MgKi8KLyoqCiAgKiBAfQogICovCgovKiogQGFkZHRvZ3JvdXAgRkRDQU5fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMgogICogQHsKICAqLwovKiBDb25maWd1cmF0aW9uIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fQ29uZmlnQ2xvY2tDYWxpYnJhdGlvbihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIEZEQ0FOX0Nsa0NhbFVuaXRUeXBlRGVmICpzQ2N1Q29uZmlnKTsKdWludDMyX3QgICAgICAgICAgSEFMX0ZEQ0FOX0dldENsb2NrQ2FsaWJyYXRpb25TdGF0ZShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fUmVzZXRDbG9ja0NhbGlicmF0aW9uU3RhdGUoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKdWludDMyX3QgICAgICAgICAgSEFMX0ZEQ0FOX0dldENsb2NrQ2FsaWJyYXRpb25Db3VudGVyKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgQ291bnRlcik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9Db25maWdGaWx0ZXIoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBGRENBTl9GaWx0ZXJUeXBlRGVmICpzRmlsdGVyQ29uZmlnKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0NvbmZpZ0dsb2JhbEZpbHRlcihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IE5vbk1hdGNoaW5nU3RkLCB1aW50MzJfdCBOb25NYXRjaGluZ0V4dCwgdWludDMyX3QgUmVqZWN0UmVtb3RlU3RkLCB1aW50MzJfdCBSZWplY3RSZW1vdGVFeHQpOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fQ29uZmlnRXh0ZW5kZWRJZE1hc2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBNYXNrKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0NvbmZpZ1J4Rmlmb092ZXJ3cml0ZShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFJ4RmlmbywgdWludDMyX3QgT3BlcmF0aW9uTW9kZSk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9Db25maWdGaWZvV2F0ZXJtYXJrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgRklGTywgdWludDMyX3QgV2F0ZXJtYXJrKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0NvbmZpZ1JhbVdhdGNoZG9nKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgQ291bnRlclN0YXJ0VmFsdWUpOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fQ29uZmlnVGltZXN0YW1wQ291bnRlcihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRpbWVzdGFtcFByZXNjYWxlcik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9FbmFibGVUaW1lc3RhbXBDb3VudGVyKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgVGltZXN0YW1wT3BlcmF0aW9uKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0Rpc2FibGVUaW1lc3RhbXBDb3VudGVyKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CnVpbnQxNl90ICAgICAgICAgIEhBTF9GRENBTl9HZXRUaW1lc3RhbXBDb3VudGVyKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9SZXNldFRpbWVzdGFtcENvdW50ZXIoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0NvbmZpZ1RpbWVvdXRDb3VudGVyKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgVGltZW91dE9wZXJhdGlvbiwgdWludDMyX3QgVGltZW91dFBlcmlvZCk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9FbmFibGVUaW1lb3V0Q291bnRlcihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fRGlzYWJsZVRpbWVvdXRDb3VudGVyKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CnVpbnQxNl90ICAgICAgICAgIEhBTF9GRENBTl9HZXRUaW1lb3V0Q291bnRlcihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fUmVzZXRUaW1lb3V0Q291bnRlcihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fQ29uZmlnVHhEZWxheUNvbXBlbnNhdGlvbihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRkY09mZnNldCwgdWludDMyX3QgVGRjRmlsdGVyKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0VuYWJsZVR4RGVsYXlDb21wZW5zYXRpb24oRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0Rpc2FibGVUeERlbGF5Q29tcGVuc2F0aW9uKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9FbmFibGVJU09Nb2RlKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9EaXNhYmxlSVNPTW9kZShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fRW5hYmxlRWRnZUZpbHRlcmluZyhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fRGlzYWJsZUVkZ2VGaWx0ZXJpbmcoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKLyoqCiAgKiBAfQogICovCgovKiogQGFkZHRvZ3JvdXAgRkRDQU5fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwMwogICogQHsKICAqLwovKiBDb250cm9sIGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fU3RhcnQoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1N0b3AoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0FkZE1lc3NhZ2VUb1R4Rmlmb1EoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBGRENBTl9UeEhlYWRlclR5cGVEZWYgKnBUeEhlYWRlciwgdWludDhfdCAqcFR4RGF0YSk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9BZGRNZXNzYWdlVG9UeEJ1ZmZlcihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIEZEQ0FOX1R4SGVhZGVyVHlwZURlZiAqcFR4SGVhZGVyLCB1aW50OF90ICpwVHhEYXRhLCB1aW50MzJfdCBCdWZmZXJJbmRleCk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9FbmFibGVUeEJ1ZmZlclJlcXVlc3QoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBCdWZmZXJJbmRleCk7CnVpbnQzMl90IEhBTF9GRENBTl9HZXRMYXRlc3RUeEZpZm9RUmVxdWVzdEJ1ZmZlcihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fQWJvcnRUeFJlcXVlc3QoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBCdWZmZXJJbmRleCk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9HZXRSeE1lc3NhZ2UoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBSeExvY2F0aW9uLCBGRENBTl9SeEhlYWRlclR5cGVEZWYgKnBSeEhlYWRlciwgdWludDhfdCAqcFJ4RGF0YSk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9HZXRUeEV2ZW50KEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgRkRDQU5fVHhFdmVudEZpZm9UeXBlRGVmICpwVHhFdmVudCk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9HZXRIaWdoUHJpb3JpdHlNZXNzYWdlU3RhdHVzKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgRkRDQU5fSHBNc2dTdGF0dXNUeXBlRGVmICpIcE1zZ1N0YXR1cyk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9HZXRQcm90b2NvbFN0YXR1cyhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIEZEQ0FOX1Byb3RvY29sU3RhdHVzVHlwZURlZiAqUHJvdG9jb2xTdGF0dXMpOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fR2V0RXJyb3JDb3VudGVycyhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIEZEQ0FOX0Vycm9yQ291bnRlcnNUeXBlRGVmICpFcnJvckNvdW50ZXJzKTsKdWludDMyX3QgSEFMX0ZEQ0FOX0lzUnhCdWZmZXJNZXNzYWdlQXZhaWxhYmxlKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgUnhCdWZmZXJJbmRleCk7CnVpbnQzMl90IEhBTF9GRENBTl9Jc1R4QnVmZmVyTWVzc2FnZVBlbmRpbmcoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBUeEJ1ZmZlckluZGV4KTsKdWludDMyX3QgSEFMX0ZEQ0FOX0dldFJ4Rmlmb0ZpbGxMZXZlbChGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFJ4Rmlmbyk7CnVpbnQzMl90IEhBTF9GRENBTl9HZXRUeEZpZm9GcmVlTGV2ZWwoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKdWludDMyX3QgSEFMX0ZEQ0FOX0lzUmVzdHJpY3RlZE9wZXJhdGlvbk1vZGUoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0V4aXRSZXN0cmljdGVkT3BlcmF0aW9uTW9kZShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwovKioKICAqIEB9CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBGRENBTl9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA0CiAgKiBAewogICovCi8qIFRUIENvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgZnVuY3Rpb25zKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9Db25maWdPcGVyYXRpb24oRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBGRENBTl9UVF9Db25maWdUeXBlRGVmICpwVFRQYXJhbXMpOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfQ29uZmlnUmVmZXJlbmNlTWVzc2FnZShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IElkVHlwZSwgdWludDMyX3QgSWRlbnRpZmllciwgdWludDMyX3QgUGF5bG9hZCk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9Db25maWdUcmlnZ2VyKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgRkRDQU5fVHJpZ2dlclR5cGVEZWYgKnNUcmlnZ2VyQ29uZmlnKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1RUX1NldEdsb2JhbFRpbWUoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBUaW1lUHJlc2V0KTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1RUX1NldENsb2NrU3luY2hyb25pemF0aW9uKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgTmV3VFVSTnVtZXJhdG9yKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1RUX0NvbmZpZ1N0b3BXYXRjaChGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFNvdXJjZSwgdWludDMyX3QgUG9sYXJpdHkpOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfQ29uZmlnUmVnaXN0ZXJUaW1lTWFyayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRpbWVNYXJrU291cmNlLCB1aW50MzJfdCBUaW1lTWFya1ZhbHVlLCB1aW50MzJfdCBSZXBlYXRGYWN0b3IsIHVpbnQzMl90IFN0YXJ0Q3ljbGUpOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfRW5hYmxlUmVnaXN0ZXJUaW1lTWFya1B1bHNlKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9EaXNhYmxlUmVnaXN0ZXJUaW1lTWFya1B1bHNlKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9FbmFibGVUcmlnZ2VyVGltZU1hcmtQdWxzZShGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfRGlzYWJsZVRyaWdnZXJUaW1lTWFya1B1bHNlKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9FbmFibGVIYXJkd2FyZUdhcENvbnRyb2woRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1RUX0Rpc2FibGVIYXJkd2FyZUdhcENvbnRyb2woRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1RUX0VuYWJsZVRpbWVNYXJrR2FwQ29udHJvbChGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfRGlzYWJsZVRpbWVNYXJrR2FwQ29udHJvbChGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfU2V0TmV4dElzR2FwKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9TZXRFbmRPZkdhcChGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfQ29uZmlnRXh0ZXJuYWxTeW5jUGhhc2UoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBUYXJnZXRQaGFzZSk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9FbmFibGVFeHRlcm5hbFN5bmNocm9uaXphdGlvbihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwpIQUxfU3RhdHVzVHlwZURlZiBIQUxfRkRDQU5fVFRfRGlzYWJsZUV4dGVybmFsU3luY2hyb25pemF0aW9uKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9HZXRPcGVyYXRpb25TdGF0dXMoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCBGRENBTl9UVE9wZXJhdGlvblN0YXR1c1R5cGVEZWYgKlRUT3BTdGF0dXMpOwovKioKICAqIEB9CiAgKi8KCi8qKiBAYWRkdG9ncm91cCBGRENBTl9FeHBvcnRlZF9GdW5jdGlvbnNfR3JvdXA1CiAgKiBAewogICovCi8qIEludGVycnVwdHMgbWFuYWdlbWVudCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9Db25maWdJbnRlcnJ1cHRMaW5lcyhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IElUTGlzdCwgdWludDMyX3QgSW50ZXJydXB0TGluZSk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9Db25maWdJbnRlcnJ1cHRMaW5lcyhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRUSVRMaXN0LCB1aW50MzJfdCBJbnRlcnJ1cHRMaW5lKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0FjdGl2YXRlTm90aWZpY2F0aW9uKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgQWN0aXZlSVRzLCB1aW50MzJfdCBCdWZmZXJJbmRleGVzKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX0RlYWN0aXZhdGVOb3RpZmljYXRpb24oRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBJbmFjdGl2ZUlUcyk7CkhBTF9TdGF0dXNUeXBlRGVmIEhBTF9GRENBTl9UVF9BY3RpdmF0ZU5vdGlmaWNhdGlvbihGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IEFjdGl2ZVRUSVRzKTsKSEFMX1N0YXR1c1R5cGVEZWYgSEFMX0ZEQ0FOX1RUX0RlYWN0aXZhdGVOb3RpZmljYXRpb24oRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBJbmFjdGl2ZVRUSVRzKTsKdm9pZCAgICAgICAgICAgICAgSEFMX0ZEQ0FOX0lSUUhhbmRsZXIoRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKLyoqCiAgKiBAfQogICovCgovKiogQGFkZHRvZ3JvdXAgRkRDQU5fRXhwb3J0ZWRfRnVuY3Rpb25zX0dyb3VwNgogICogQHsKICAqLwovKiBDYWxsYmFjayBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwp2b2lkIEhBTF9GRENBTl9DbG9ja0NhbGlicmF0aW9uQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBDbGtDYWxpYnJhdGlvbklUcyk7CnZvaWQgSEFMX0ZEQ0FOX1R4RXZlbnRGaWZvQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBUeEV2ZW50Rmlmb0lUcyk7CnZvaWQgSEFMX0ZEQ0FOX1J4RmlmbzBDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFJ4RmlmbzBJVHMpOwp2b2lkIEhBTF9GRENBTl9SeEZpZm8xQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBSeEZpZm8xSVRzKTsKdm9pZCBIQUxfRkRDQU5fVHhGaWZvRW1wdHlDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwp2b2lkIEhBTF9GRENBTl9UeEJ1ZmZlckNvbXBsZXRlQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuLCB1aW50MzJfdCBCdWZmZXJJbmRleGVzKTsKdm9pZCBIQUxfRkRDQU5fVHhCdWZmZXJBYm9ydENhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgQnVmZmVySW5kZXhlcyk7CnZvaWQgSEFMX0ZEQ0FOX1J4QnVmZmVyTmV3TWVzc2FnZUNhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CnZvaWQgSEFMX0ZEQ0FOX0hpZ2hQcmlvcml0eU1lc3NhZ2VDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwp2b2lkIEhBTF9GRENBTl9UaW1lc3RhbXBXcmFwYXJvdW5kQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKdm9pZCBIQUxfRkRDQU5fVGltZW91dE9jY3VycmVkQ2FsbGJhY2soRkRDQU5fSGFuZGxlVHlwZURlZiAqaGZkY2FuKTsKdm9pZCBIQUxfRkRDQU5fRXJyb3JDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4pOwp2b2lkIEhBTF9GRENBTl9FcnJvclN0YXR1c0NhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgRXJyb3JTdGF0dXNJVHMpOwp2b2lkIEhBTF9GRENBTl9UVF9TY2hlZHVsZVN5bmNDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRUU2NoZWRTeW5jSVRzKTsKdm9pZCBIQUxfRkRDQU5fVFRfVGltZU1hcmtDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFRUVGltZU1hcmtJVHMpOwp2b2lkIEhBTF9GRENBTl9UVF9TdG9wV2F0Y2hDYWxsYmFjayhGRENBTl9IYW5kbGVUeXBlRGVmICpoZmRjYW4sIHVpbnQzMl90IFNXVGltZSwgdWludDMyX3QgU1dDeWNsZUNvdW50KTsKdm9pZCBIQUxfRkRDQU5fVFRfR2xvYmFsVGltZUNhbGxiYWNrKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbiwgdWludDMyX3QgVFRHbG9iVGltZUlUcyk7Ci8qKgogICogQH0KICAqLwoKLyoqIEBhZGR0b2dyb3VwIEZEQ0FOX0V4cG9ydGVkX0Z1bmN0aW9uc19Hcm91cDcKICAqIEB7CiAgKi8KLyogUGVyaXBoZXJhbCBTdGF0ZSBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KdWludDMyX3QgSEFMX0ZEQ0FOX0dldEVycm9yKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7CkhBTF9GRENBTl9TdGF0ZVR5cGVEZWYgSEFMX0ZEQ0FOX0dldFN0YXRlKEZEQ0FOX0hhbmRsZVR5cGVEZWYgKmhmZGNhbik7Ci8qKgogICogQH0KICAqLwoKLyoqCiAgKiBAfQogICovCgovKiBQcml2YXRlIHR5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiogQGRlZmdyb3VwIEZEQ0FOX1ByaXZhdGVfVHlwZXMgRkRDQU4gUHJpdmF0ZSBUeXBlcwogICogQHsKICAqLwoKLyoqCiAgKiBAfQogICovCgovKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwovKiogQGRlZmdyb3VwIEZEQ0FOX1ByaXZhdGVfVmFyaWFibGVzIEZEQ0FOIFByaXZhdGUgVmFyaWFibGVzCiAgKiBAewogICovCgovKioKICAqIEB9CiAgKi8KCi8qIFByaXZhdGUgY29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi8qKiBAZGVmZ3JvdXAgRkRDQU5fUHJpdmF0ZV9Db25zdGFudHMgRkRDQU4gUHJpdmF0ZSBDb25zdGFudHMKICAqIEB7CiAgKi8KCi8qKgogICogQH0KICAqLwoKLyogUHJpdmF0ZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyoqIEBkZWZncm91cCBGRENBTl9Qcml2YXRlX01hY3JvcyBGRENBTiBQcml2YXRlIE1hY3JvcwogICogQHsKICAqLwojZGVmaW5lIElTX0ZEQ0FOX0ZSQU1FX0ZPUk1BVChGT1JNQVQpICgoKEZPUk1BVCkgPT0gRkRDQU5fRlJBTUVfQ0xBU1NJQyAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRk9STUFUKSA9PSBGRENBTl9GUkFNRV9GRF9OT19CUlMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGT1JNQVQpID09IEZEQ0FOX0ZSQU1FX0ZEX0JSUyAgICkpCiNkZWZpbmUgSVNfRkRDQU5fTU9ERShNT0RFKSAoKChNT0RFKSA9PSBGRENBTl9NT0RFX05PUk1BTCAgICAgICAgICAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9NT0RFX1JFU1RSSUNURURfT1BFUkFUSU9OKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9NT0RFX0JVU19NT05JVE9SSU5HICAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9NT0RFX0lOVEVSTkFMX0xPT1BCQUNLICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9NT0RFX0VYVEVSTkFMX0xPT1BCQUNLICAgKSkKCiNkZWZpbmUgSVNfRkRDQU5fQ0xPQ0tfQ0FMSUJSQVRJT04oQ0FMSUJSQVRJT04pICgoKENBTElCUkFUSU9OKSA9PSBGRENBTl9DTE9DS19DQUxJQlJBVElPTl9ESVNBQkxFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENBTElCUkFUSU9OKSA9PSBGRENBTl9DTE9DS19DQUxJQlJBVElPTl9FTkFCTEUgKSkKCiNkZWZpbmUgSVNfRkRDQU5fQ0tESVYoQ0tESVYpICgoKENLRElWKSA9PSBGRENBTl9DTE9DS19ESVYxICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDS0RJVikgPT0gRkRDQU5fQ0xPQ0tfRElWMiApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0tESVYpID09IEZEQ0FOX0NMT0NLX0RJVjQgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENLRElWKSA9PSBGRENBTl9DTE9DS19ESVY2ICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDS0RJVikgPT0gRkRDQU5fQ0xPQ0tfRElWOCApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0tESVYpID09IEZEQ0FOX0NMT0NLX0RJVjEwKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENLRElWKSA9PSBGRENBTl9DTE9DS19ESVYxMikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDS0RJVikgPT0gRkRDQU5fQ0xPQ0tfRElWMTQpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0tESVYpID09IEZEQ0FOX0NMT0NLX0RJVjE2KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENLRElWKSA9PSBGRENBTl9DTE9DS19ESVYxOCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDS0RJVikgPT0gRkRDQU5fQ0xPQ0tfRElWMjApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0tESVYpID09IEZEQ0FOX0NMT0NLX0RJVjIyKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENLRElWKSA9PSBGRENBTl9DTE9DS19ESVYyNCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDS0RJVikgPT0gRkRDQU5fQ0xPQ0tfRElWMjYpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ0tESVYpID09IEZEQ0FOX0NMT0NLX0RJVjI4KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENLRElWKSA9PSBGRENBTl9DTE9DS19ESVYzMCkpCiNkZWZpbmUgSVNfRkRDQU5fTk9NSU5BTF9QUkVTQ0FMRVIoUFJFU0NBTEVSKSAoKChQUkVTQ0FMRVIpID49IDFVKSAmJiAoKFBSRVNDQUxFUikgPD0gNTEyVSkpCiNkZWZpbmUgSVNfRkRDQU5fTk9NSU5BTF9TSlcoU0pXKSAoKChTSlcpID49IDFVKSAmJiAoKFNKVykgPD0gMTI4VSkpCiNkZWZpbmUgSVNfRkRDQU5fTk9NSU5BTF9UU0VHMShUU0VHMSkgKCgoVFNFRzEpID49IDFVKSAmJiAoKFRTRUcxKSA8PSAyNTZVKSkKI2RlZmluZSBJU19GRENBTl9OT01JTkFMX1RTRUcyKFRTRUcyKSAoKChUU0VHMikgPj0gMVUpICYmICgoVFNFRzIpIDw9IDEyOFUpKQojZGVmaW5lIElTX0ZEQ0FOX0RBVEFfUFJFU0NBTEVSKFBSRVNDQUxFUikgKCgoUFJFU0NBTEVSKSA+PSAxVSkgJiYgKChQUkVTQ0FMRVIpIDw9IDMyVSkpCiNkZWZpbmUgSVNfRkRDQU5fREFUQV9TSlcoU0pXKSAoKChTSlcpID49IDFVKSAmJiAoKFNKVykgPD0gMTZVKSkKI2RlZmluZSBJU19GRENBTl9EQVRBX1RTRUcxKFRTRUcxKSAoKChUU0VHMSkgPj0gMVUpICYmICgoVFNFRzEpIDw9IDMyVSkpCiNkZWZpbmUgSVNfRkRDQU5fREFUQV9UU0VHMihUU0VHMikgKCgoVFNFRzIpID49IDFVKSAmJiAoKFRTRUcyKSA8PSAxNlUpKQojZGVmaW5lIElTX0ZEQ0FOX01BWF9WQUxVRShWQUxVRSwgTUFYKSAoKFZBTFVFKSA8PSAoTUFYKSkKI2RlZmluZSBJU19GRENBTl9NSU5fVkFMVUUoVkFMVUUsIE1JTikgKChWQUxVRSkgPj0gKE1JTikpCiNkZWZpbmUgSVNfRkRDQU5fREFUQV9TSVpFKFNJWkUpICgoKFNJWkUpID09IEZEQ0FOX0RBVEFfQllURVNfOCApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRkRDQU5fREFUQV9CWVRFU18xMikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBGRENBTl9EQVRBX0JZVEVTXzE2KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IEZEQ0FOX0RBVEFfQllURVNfMjApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRkRDQU5fREFUQV9CWVRFU18yNCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBGRENBTl9EQVRBX0JZVEVTXzMyKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJWkUpID09IEZEQ0FOX0RBVEFfQllURVNfNDgpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRkRDQU5fREFUQV9CWVRFU182NCkpCiNkZWZpbmUgSVNfRkRDQU5fVFhfRklGT19RVUVVRV9NT0RFKE1PREUpICgoKE1PREUpID09IEZEQ0FOX1RYX0ZJRk9fT1BFUkFUSU9OICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9UWF9RVUVVRV9PUEVSQVRJT04pKQojZGVmaW5lIElTX0ZEQ0FOX0lEX1RZUEUoSURfVFlQRSkgKCgoSURfVFlQRSkgPT0gRkRDQU5fU1RBTkRBUkRfSUQpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElEX1RZUEUpID09IEZEQ0FOX0VYVEVOREVEX0lEKSkKI2RlZmluZSBJU19GRENBTl9GSUxURVJfQ0ZHKENPTkZJRykgKCgoQ09ORklHKSA9PSBGRENBTl9GSUxURVJfRElTQUJMRSAgICAgICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05GSUcpID09IEZEQ0FOX0ZJTFRFUl9UT19SWEZJRk8wICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENPTkZJRykgPT0gRkRDQU5fRklMVEVSX1RPX1JYRklGTzEgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ09ORklHKSA9PSBGRENBTl9GSUxURVJfUkVKRUNUICAgICAgICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05GSUcpID09IEZEQ0FOX0ZJTFRFUl9IUCAgICAgICAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENPTkZJRykgPT0gRkRDQU5fRklMVEVSX1RPX1JYRklGTzBfSFApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQ09ORklHKSA9PSBGRENBTl9GSUxURVJfVE9fUlhGSUZPMV9IUCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT05GSUcpID09IEZEQ0FOX0ZJTFRFUl9UT19SWEJVRkZFUiAgKSkKI2RlZmluZSBJU19GRENBTl9UWF9MT0NBVElPTihMT0NBVElPTikgKCgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjAgKSB8fCAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIxICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMiApIHx8ICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjMgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVI0ICkgfHwgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSNSApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjYgKSB8fCAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVI3ICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSOCApIHx8ICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjkgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIxMCkgfHwgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMTEpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjEyKSB8fCAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIxMykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMTQpIHx8ICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjE1KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIxNikgfHwgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMTcpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjE4KSB8fCAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIxOSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMjApIHx8ICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjIxKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIyMikgfHwgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMjMpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjI0KSB8fCAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIyNSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMjYpIHx8ICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjI3KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIyOCkgfHwgKChMT0NBVElPTikgPT0gRkRDQU5fVFhfQlVGRkVSMjkpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTE9DQVRJT04pID09IEZEQ0FOX1RYX0JVRkZFUjMwKSB8fCAoKExPQ0FUSU9OKSA9PSBGRENBTl9UWF9CVUZGRVIzMSkpCiNkZWZpbmUgSVNfRkRDQU5fUlhfRklGTyhGSUZPKSAoKChGSUZPKSA9PSBGRENBTl9SWF9GSUZPMCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRklGTykgPT0gRkRDQU5fUlhfRklGTzEpKQojZGVmaW5lIElTX0ZEQ0FOX1JYX0ZJRk9fTU9ERShNT0RFKSAoKChNT0RFKSA9PSBGRENBTl9SWF9GSUZPX0JMT0NLSU5HICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9SWF9GSUZPX09WRVJXUklURSkpCiNkZWZpbmUgSVNfRkRDQU5fU1REX0ZJTFRFUl9UWVBFKFRZUEUpICgoKFRZUEUpID09IEZEQ0FOX0ZJTFRFUl9SQU5HRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBGRENBTl9GSUxURVJfRFVBTCApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gRkRDQU5fRklMVEVSX01BU0sgKSkKI2RlZmluZSBJU19GRENBTl9FWFRfRklMVEVSX1RZUEUoVFlQRSkgKCgoVFlQRSkgPT0gRkRDQU5fRklMVEVSX1JBTkdFICAgICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gRkRDQU5fRklMVEVSX0RVQUwgICAgICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gRkRDQU5fRklMVEVSX01BU0sgICAgICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gRkRDQU5fRklMVEVSX1JBTkdFX05PX0VJRE0pKQojZGVmaW5lIElTX0ZEQ0FOX0ZSQU1FX1RZUEUoVFlQRSkgKCgoVFlQRSkgPT0gRkRDQU5fREFUQV9GUkFNRSAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBGRENBTl9SRU1PVEVfRlJBTUUpKQojZGVmaW5lIElTX0ZEQ0FOX0RMQyhETEMpICgoKERMQykgPT0gRkRDQU5fRExDX0JZVEVTXzAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRExDKSA9PSBGRENBTl9ETENfQllURVNfMSApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChETEMpID09IEZEQ0FOX0RMQ19CWVRFU18yICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKERMQykgPT0gRkRDQU5fRExDX0JZVEVTXzMgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRExDKSA9PSBGRENBTl9ETENfQllURVNfNCApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChETEMpID09IEZEQ0FOX0RMQ19CWVRFU181ICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKERMQykgPT0gRkRDQU5fRExDX0JZVEVTXzYgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRExDKSA9PSBGRENBTl9ETENfQllURVNfNyApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChETEMpID09IEZEQ0FOX0RMQ19CWVRFU184ICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKERMQykgPT0gRkRDQU5fRExDX0JZVEVTXzEyKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRExDKSA9PSBGRENBTl9ETENfQllURVNfMTYpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChETEMpID09IEZEQ0FOX0RMQ19CWVRFU18yMCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKERMQykgPT0gRkRDQU5fRExDX0JZVEVTXzI0KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRExDKSA9PSBGRENBTl9ETENfQllURVNfMzIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChETEMpID09IEZEQ0FOX0RMQ19CWVRFU180OCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKERMQykgPT0gRkRDQU5fRExDX0JZVEVTXzY0KSkKI2RlZmluZSBJU19GRENBTl9FU0koRVNJKSAoKChFU0kpID09IEZEQ0FOX0VTSV9BQ1RJVkUgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRVNJKSA9PSBGRENBTl9FU0lfUEFTU0lWRSkpCiNkZWZpbmUgSVNfRkRDQU5fQlJTKEJSUykgKCgoQlJTKSA9PSBGRENBTl9CUlNfT0ZGKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQlJTKSA9PSBGRENBTl9CUlNfT04gKSkKI2RlZmluZSBJU19GRENBTl9GREYoRkRGKSAoKChGREYpID09IEZEQ0FOX0NMQVNTSUNfQ0FOKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkRGKSA9PSBGRENBTl9GRF9DQU4gICAgICkpCiNkZWZpbmUgSVNfRkRDQU5fRUZDKEVGQykgKCgoRUZDKSA9PSBGRENBTl9OT19UWF9FVkVOVFMgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFRkMpID09IEZEQ0FOX1NUT1JFX1RYX0VWRU5UUykpCiNkZWZpbmUgSVNfRkRDQU5fSVQoSVQpICgoKElUKSAmIH4oRkRDQU5fSVJfTUFTSyB8IENDVV9JUl9NQVNLKSkgPT0gMFUpCiNkZWZpbmUgSVNfRkRDQU5fVFRfSVQoSVQpICgoKElUKSAmIDB4RkZGODAwMDBVKSA9PSAwVSkKI2RlZmluZSBJU19GRENBTl9GSUZPX1dBVEVSTUFSSyhGSUZPKSAoKChGSUZPKSA9PSBGRENBTl9DRkdfVFhfRVZFTlRfRklGTykgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJRk8pID09IEZEQ0FOX0NGR19SWF9GSUZPMCAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRklGTykgPT0gRkRDQU5fQ0ZHX1JYX0ZJRk8xICAgICApKQojZGVmaW5lIElTX0ZEQ0FOX05PTl9NQVRDSElORyhERVNUSU5BVElPTikgKCgoREVTVElOQVRJT04pID09IEZEQ0FOX0FDQ0VQVF9JTl9SWF9GSUZPMCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREVTVElOQVRJT04pID09IEZEQ0FOX0FDQ0VQVF9JTl9SWF9GSUZPMSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoREVTVElOQVRJT04pID09IEZEQ0FOX1JFSkVDVCAgICAgICAgICAgICkpCiNkZWZpbmUgSVNfRkRDQU5fUkVKRUNUX1JFTU9URShERVNUSU5BVElPTikgKCgoREVTVElOQVRJT04pID09IEZEQ0FOX0ZJTFRFUl9SRU1PVEUpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChERVNUSU5BVElPTikgPT0gRkRDQU5fUkVKRUNUX1JFTU9URSkpCiNkZWZpbmUgSVNfRkRDQU5fSVRfTElORShJVF9MSU5FKSAoKChJVF9MSU5FKSA9PSBGRENBTl9JTlRFUlJVUFRfTElORTApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUX0xJTkUpID09IEZEQ0FOX0lOVEVSUlVQVF9MSU5FMSkpCiNkZWZpbmUgSVNfRkRDQU5fVElNRVNUQU1QKE9QRVJBVElPTikgKCgoT1BFUkFUSU9OKSA9PSBGRENBTl9USU1FU1RBTVBfSU5URVJOQUwpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChPUEVSQVRJT04pID09IEZEQ0FOX1RJTUVTVEFNUF9FWFRFUk5BTCkpCiNkZWZpbmUgSVNfRkRDQU5fVElNRVNUQU1QX1BSRVNDQUxFUihQUkVTQ0FMRVIpICgoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzEgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzIgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzMgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzQgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzUgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzYgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzcgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzggKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzkgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzEwKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzExKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzEyKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzEzKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzE0KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzE1KSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBSRVNDQUxFUikgPT0gRkRDQU5fVElNRVNUQU1QX1BSRVNDXzE2KSkKI2RlZmluZSBJU19GRENBTl9USU1FT1VUKE9QRVJBVElPTikgKCgoT1BFUkFUSU9OKSA9PSBGRENBTl9USU1FT1VUX0NPTlRJTlVPVVMgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1BFUkFUSU9OKSA9PSBGRENBTl9USU1FT1VUX1RYX0VWRU5UX0ZJRk8pIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1BFUkFUSU9OKSA9PSBGRENBTl9USU1FT1VUX1JYX0ZJRk8wICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1BFUkFUSU9OKSA9PSBGRENBTl9USU1FT1VUX1JYX0ZJRk8xICAgICApKQojZGVmaW5lIElTX0ZEQ0FOX0NBTElCUkFUSU9OX0ZJRUxEX0xFTkdUSChMRU5HVEgpICgoKExFTkdUSCkgPT0gRkRDQU5fQ0FMSUJfRklFTERfTEVOR1RIXzMyKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTEVOR1RIKSA9PSBGRENBTl9DQUxJQl9GSUVMRF9MRU5HVEhfNjQpKQojZGVmaW5lIElTX0ZEQ0FOX0NBTElCUkFUSU9OX0NPVU5URVIoQ09VTlRFUikgKCgoQ09VTlRFUikgPT0gRkRDQU5fQ0FMSUJfVElNRV9RVUFOVEFfQ09VTlRFUiApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENPVU5URVIpID09IEZEQ0FOX0NBTElCX0NMT0NLX1BFUklPRF9DT1VOVEVSKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChDT1VOVEVSKSA9PSBGRENBTl9DQUxJQl9XQVRDSERPR19DT1VOVEVSICAgICkpCiNkZWZpbmUgSVNfRkRDQU5fVFRfUkVGRVJFTkNFX01FU1NBR0VfUEFZTE9BRChQQVlMT0FEKSAoKChQQVlMT0FEKSA9PSBGRENBTl9UVF9SRUZfTUVTU0FHRV9OT19QQVlMT0FEICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUEFZTE9BRCkgPT0gRkRDQU5fVFRfUkVGX01FU1NBR0VfQUREX1BBWUxPQUQpKQojZGVmaW5lIElTX0ZEQ0FOX1RUX1JFUEVBVF9GQUNUT1IoRkFDVE9SKSAoKChGQUNUT1IpID09IEZEQ0FOX1RUX1JFUEVBVF9FVkVSWV9DWUNMRSAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZBQ1RPUikgPT0gRkRDQU5fVFRfUkVQRUFUX0VWRVJZXzJORF9DWUNMRSApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkFDVE9SKSA9PSBGRENBTl9UVF9SRVBFQVRfRVZFUllfNFRIX0NZQ0xFICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGQUNUT1IpID09IEZEQ0FOX1RUX1JFUEVBVF9FVkVSWV84VEhfQ1lDTEUgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZBQ1RPUikgPT0gRkRDQU5fVFRfUkVQRUFUX0VWRVJZXzE2VEhfQ1lDTEUpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRkFDVE9SKSA9PSBGRENBTl9UVF9SRVBFQVRfRVZFUllfMzJORF9DWUNMRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGQUNUT1IpID09IEZEQ0FOX1RUX1JFUEVBVF9FVkVSWV82NFRIX0NZQ0xFKSkKI2RlZmluZSBJU19GRENBTl9UVF9UUklHR0VSX1RZUEUoVFlQRSkgKCgoVFlQRSkgPT0gRkRDQU5fVFRfVFhfUkVGX1RSSUdHRVIgICAgICAgICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBGRENBTl9UVF9UWF9SRUZfVFJJR0dFUl9HQVAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEZEQ0FOX1RUX1RYX1RSSUdHRVJfU0lOR0xFICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gRkRDQU5fVFRfVFhfVFJJR0dFUl9DT05USU5VT1VTICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBGRENBTl9UVF9UWF9UUklHR0VSX0FSQklUUkFUSU9OKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEZEQ0FOX1RUX1RYX1RSSUdHRVJfTUVSR0VEICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gRkRDQU5fVFRfV0FUQ0hfVFJJR0dFUiAgICAgICAgICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBGRENBTl9UVF9XQVRDSF9UUklHR0VSX0dBUCAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRZUEUpID09IEZEQ0FOX1RUX1JYX1RSSUdHRVIgICAgICAgICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFlQRSkgPT0gRkRDQU5fVFRfVElNRV9CQVNFX1RSSUdHRVIgICAgICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUWVBFKSA9PSBGRENBTl9UVF9FTkRfT0ZfTElTVCAgICAgICAgICAgKSkKI2RlZmluZSBJU19GRENBTl9UVF9UTV9FVkVOVF9JTlRFUk5BTChFVkVOVCkgKCgoRVZFTlQpID09IEZEQ0FOX1RUX1RNX05PX0lOVEVSTkFMX0VWRU5UICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gRkRDQU5fVFRfVE1fR0VOX0lOVEVSTkFMX0VWRU5UKSkKI2RlZmluZSBJU19GRENBTl9UVF9UTV9FVkVOVF9FWFRFUk5BTChFVkVOVCkgKCgoRVZFTlQpID09IEZEQ0FOX1RUX1RNX05PX0VYVEVSTkFMX0VWRU5UICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChFVkVOVCkgPT0gRkRDQU5fVFRfVE1fR0VOX0VYVEVSTkFMX0VWRU5UKSkKI2RlZmluZSBJU19GRENBTl9PUEVSQVRJT05fTU9ERShNT0RFKSAoKChNT0RFKSA9PSBGRENBTl9UVF9DT01NVU5JQ0FUSU9OX0xFVkVMMSApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9UVF9DT01NVU5JQ0FUSU9OX0xFVkVMMiApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGRENBTl9UVF9DT01NVU5JQ0FUSU9OX0xFVkVMMCApKQojZGVmaW5lIElTX0ZEQ0FOX1RUX09QRVJBVElPTihPUEVSQVRJT04pICgoKE9QRVJBVElPTikgPT0gRkRDQU5fU1RSSUNUTFlfVFRfT1BFUkFUSU9OICAgICAgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoT1BFUkFUSU9OKSA9PSBGRENBTl9FWFRfRVZUX1NZTkNfVFRfT1BFUkFUSU9OKSkKI2RlZmluZSBJU19GRENBTl9UVF9USU1FX01BU1RFUihGVU5DVElPTikgKCgoRlVOQ1RJT04pID09IEZEQ0FOX1RUX1NMQVZFICAgICAgICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoRlVOQ1RJT04pID09IEZEQ0FOX1RUX1BPVEVOVElBTF9NQVNURVIpKQojZGVmaW5lIElTX0ZEQ0FOX1RUX0VYVEVSTkFMX0NMS19TWU5DKFNZTkMpICgoKFNZTkMpID09IEZEQ0FOX1RUX0VYVF9DTEtfU1lOQ19ESVNBQkxFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU1lOQykgPT0gRkRDQU5fVFRfRVhUX0NMS19TWU5DX0VOQUJMRSApKQojZGVmaW5lIElTX0ZEQ0FOX1RUX0dMT0JBTF9USU1FX0ZJTFRFUklORyhGSUxURVJJTkcpICgoKEZJTFRFUklORykgPT0gRkRDQU5fVFRfR0xPQl9USU1FX0ZJTFRfRElTQUJMRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEZJTFRFUklORykgPT0gRkRDQU5fVFRfR0xPQl9USU1FX0ZJTFRfRU5BQkxFICkpCiNkZWZpbmUgSVNfRkRDQU5fVFRfQVVUT19DTEtfQ0FMSUJSQVRJT04oQ0FMSUJSQVRJT04pICgoKENBTElCUkFUSU9OKSA9PSBGRENBTl9UVF9BVVRPX0NMS19DQUxJQl9ESVNBQkxFKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENBTElCUkFUSU9OKSA9PSBGRENBTl9UVF9BVVRPX0NMS19DQUxJQl9FTkFCTEUgKSkKI2RlZmluZSBJU19GRENBTl9UVF9FVkVOVF9UUklHR0VSX1BPTEFSSVRZKFBPTEFSSVRZKSAoKChQT0xBUklUWSkgPT0gRkRDQU5fVFRfRVZUX1RSSUdfUE9MX1JJU0lORyApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQT0xBUklUWSkgPT0gRkRDQU5fVFRfRVZUX1RSSUdfUE9MX0ZBTExJTkcpKQojZGVmaW5lIElTX0ZEQ0FOX1RUX0JBU0lDX0NZQ0xFU19OVU1CRVIoTlVNQkVSKSAoKChOVU1CRVIpID09IEZEQ0FOX1RUX0NZQ0xFU19QRVJfTUFUUklYXzEgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5VTUJFUikgPT0gRkRDQU5fVFRfQ1lDTEVTX1BFUl9NQVRSSVhfMiApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlVNQkVSKSA9PSBGRENBTl9UVF9DWUNMRVNfUEVSX01BVFJJWF80ICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOVU1CRVIpID09IEZEQ0FOX1RUX0NZQ0xFU19QRVJfTUFUUklYXzggKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE5VTUJFUikgPT0gRkRDQU5fVFRfQ1lDTEVTX1BFUl9NQVRSSVhfMTYpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTlVNQkVSKSA9PSBGRENBTl9UVF9DWUNMRVNfUEVSX01BVFJJWF8zMikgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChOVU1CRVIpID09IEZEQ0FOX1RUX0NZQ0xFU19QRVJfTUFUUklYXzY0KSkKI2RlZmluZSBJU19GRENBTl9UVF9DWUNMRV9TVEFSVF9TWU5DKFNZTkMpICgoKFNZTkMpID09IEZEQ0FOX1RUX05PX1NZTkNfUFVMU0UgICAgICAgICApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNZTkMpID09IEZEQ0FOX1RUX1NZTkNfQkFTSUNfQ1lDTEVfU1RBUlQpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNZTkMpID09IEZEQ0FOX1RUX1NZTkNfTUFUUklYX1NUQVJUICAgICApKQojZGVmaW5lIElTX0ZEQ0FOX1RUX1RYX0VOQUJMRV9XSU5ET1coTlRVKSAoKChOVFUpID49IDFVKSAmJiAoKE5UVSkgPD0gMTZVKSkKI2RlZmluZSBJU19GRENBTl9UVF9UVVJfTlVNRVJBVE9SKE5VTUVSQVRPUikgKCgoTlVNRVJBVE9SKSA+PSAweDEwMDAwVSkgJiYgKChOVU1FUkFUT1IpIDw9IDB4MUZGRkZVKSkKI2RlZmluZSBJU19GRENBTl9UVF9UVVJfREVOT01JTkFUT1IoREVOT01JTkFUT1IpICgoKERFTk9NSU5BVE9SKSA+PSAweDAwMDFVKSAmJiAoKERFTk9NSU5BVE9SKSA8PSAweDNGRkZVKSkKI2RlZmluZSBJU19GRENBTl9UVF9UVVJfTEVWRUxfMShOQyxEQykgKChOQykgPj0gKDRVICogKERDKSkpCiNkZWZpbmUgSVNfRkRDQU5fVFRfVFVSX0xFVkVMXzBfMihOQyxEQykgKChOQykgPj0gKDhVICogKERDKSkpCiNkZWZpbmUgSVNfRkRDQU5fVFRfU1RPUF9XQVRDSF9UUklHR0VSKFRSSUdHRVIpICgoKFRSSUdHRVIpID09IEZEQ0FOX1RUX1NUT1BfV0FUQ0hfVFJJR0dFUl8wKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IEZEQ0FOX1RUX1NUT1BfV0FUQ0hfVFJJR0dFUl8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IEZEQ0FOX1RUX1NUT1BfV0FUQ0hfVFJJR0dFUl8yKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IEZEQ0FOX1RUX1NUT1BfV0FUQ0hfVFJJR0dFUl8zKSkKI2RlZmluZSBJU19GRENBTl9UVF9FVkVOVF9UUklHR0VSKFRSSUdHRVIpICgoKFRSSUdHRVIpID09IEZEQ0FOX1RUX0VWRU5UX1RSSUdHRVJfMCkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVFJJR0dFUikgPT0gRkRDQU5fVFRfRVZFTlRfVFJJR0dFUl8xKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChUUklHR0VSKSA9PSBGRENBTl9UVF9FVkVOVF9UUklHR0VSXzIpIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFRSSUdHRVIpID09IEZEQ0FOX1RUX0VWRU5UX1RSSUdHRVJfMykpCiNkZWZpbmUgSVNfRkRDQU5fVFRfVElNRV9QUkVTRVQoVElNRSkgKCgoVElNRSkgPD0gMHhGRkZGVSkgJiYgKChUSU1FKSAhPSAweDgwMDBVKSkKI2RlZmluZSBJU19GRENBTl9UVF9TVE9QX1dBVENIX1NPVVJDRShTT1VSQ0UpICgoKFNPVVJDRSkgPT0gRkRDQU5fVFRfU1RPUF9XQVRDSF9ESVNBQkxFRCAgICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU09VUkNFKSA9PSBGRENBTl9UVF9TVE9QX1dBVENIX0NZQ0xFX1RJTUUgKSB8fCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IEZEQ0FOX1RUX1NUT1BfV0FUQ0hfTE9DQUxfVElNRSApIHx8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNPVVJDRSkgPT0gRkRDQU5fVFRfU1RPUF9XQVRDSF9HTE9CQUxfVElNRSkpCiNkZWZpbmUgSVNfRkRDQU5fVFRfU1RPUF9XQVRDSF9QT0xBUklUWShQT0xBUklUWSkgKCgoUE9MQVJJVFkpID09IEZEQ0FOX1RUX1NUT1BfV0FUQ0hfUklTSU5HICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFBPTEFSSVRZKSA9PSBGRENBTl9UVF9TVE9QX1dBVENIX0ZBTExJTkcpKQojZGVmaW5lIElTX0ZEQ0FOX1RUX1JFR0lTVEVSX1RJTUVfTUFSS19TT1VSQ0UoU09VUkNFKSAoKChTT1VSQ0UpID09IEZEQ0FOX1RUX1JFR19USU1FTUFSS19ESUFCTEVEICkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IEZEQ0FOX1RUX1JFR19USU1FTUFSS19DWUNfVElNRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IEZEQ0FOX1RUX1JFR19USU1FTUFSS19MT0NfVElNRSkgfHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTT1VSQ0UpID09IEZEQ0FOX1RUX1JFR19USU1FTUFSS19HTE9fVElNRSkpCi8qKgogICogQH0KICAqLwoKLyogUHJpdmF0ZSBmdW5jdGlvbnMgcHJvdG90eXBlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyoqIEBkZWZncm91cCBGRENBTl9Qcml2YXRlX0Z1bmN0aW9uc19Qcm90b3R5cGVzIEZEQ0FOIFByaXZhdGUgRnVuY3Rpb25zIFByb3RvdHlwZXMKICAqIEB7CiAgKi8KCi8qKgogICogQH0KICAqLwoKLyogUHJpdmF0ZSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLyoqIEBkZWZncm91cCBGRENBTl9Qcml2YXRlX0Z1bmN0aW9ucyBGRENBTiBQcml2YXRlIEZ1bmN0aW9ucwogICogQHsKICAqLwoKLyoqCiAgKiBAfQogICovCi8qKgogICogQH0KICAqLwoKLyoqCiAgKiBAfQogICovCiNlbmRpZiAvKiBGRENBTjEgKi8KCiNpZmRlZiBfX2NwbHVzcGx1cwp9CiNlbmRpZgoKI2VuZGlmIC8qIFNUTTMySDd4eF9IQUxfRkRDQU5fSCAqLwoKCi8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovCg==