LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMyZjEweF9mc21jLmgNCiAgKiBAYXV0aG9yICBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KICAqIEB2ZXJzaW9uIFYzLjQuMA0KICAqIEBkYXRlICAgIDEwLzE1LzIwMTANCiAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIEZTTUMgZmlybXdhcmUgDQogICogICAgICAgICAgbGlicmFyeS4NCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICogQGNvcHkNCiAgKg0KICAqIFRIRSBQUkVTRU5UIEZJUk1XQVJFIFdISUNIIElTIEZPUiBHVUlEQU5DRSBPTkxZIEFJTVMgQVQgUFJPVklESU5HIENVU1RPTUVSUw0KICAqIFdJVEggQ09ESU5HIElORk9STUFUSU9OIFJFR0FSRElORyBUSEVJUiBQUk9EVUNUUyBJTiBPUkRFUiBGT1IgVEhFTSBUTyBTQVZFDQogICogVElNRS4gQVMgQSBSRVNVTFQsIFNUTUlDUk9FTEVDVFJPTklDUyBTSEFMTCBOT1QgQkUgSEVMRCBMSUFCTEUgRk9SIEFOWQ0KICAqIERJUkVDVCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIFdJVEggUkVTUEVDVCBUTyBBTlkgQ0xBSU1TIEFSSVNJTkcNCiAgKiBGUk9NIFRIRSBDT05URU5UIE9GIFNVQ0ggRklSTVdBUkUgQU5EL09SIFRIRSBVU0UgTUFERSBCWSBDVVNUT01FUlMgT0YgVEhFDQogICogQ09ESU5HIElORk9STUFUSU9OIENPTlRBSU5FRCBIRVJFSU4gSU4gQ09OTkVDVElPTiBXSVRIIFRIRUlSIFBST0RVQ1RTLg0KICAqDQogICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDEwIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQogICovIA0KDQovKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KI2lmbmRlZiBfX1NUTTMyRjEweF9GU01DX0gNCiNkZWZpbmUgX19TVE0zMkYxMHhfRlNNQ19IDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KIGV4dGVybiAiQyIgew0KI2VuZGlmDQoNCi8qIEluY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQojaW5jbHVkZSAic3RtMzJmMTB4LmgiDQoNCi8qKiBAYWRkdG9ncm91cCBTVE0zMkYxMHhfU3RkUGVyaXBoX0RyaXZlcg0KICAqIEB7DQogICovDQoNCi8qKiBAYWRkdG9ncm91cCBGU01DDQogICogQHsNCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0V4cG9ydGVkX1R5cGVzDQogICogQHsNCiAgKi8NCg0KLyoqIA0KICAqIEBicmllZiAgVGltaW5nIHBhcmFtZXRlcnMgRm9yIE5PUi9TUkFNIEJhbmtzICANCiAgKi8NCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgdWludDMyX3QgRlNNQ19BZGRyZXNzU2V0dXBUaW1lOyAgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkdXJhdGlvbiBvZiB0aGUgYWRkcmVzcyBzZXR1cCB0aW1lLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGU6IEl0IGlzIG5vdCB1c2VkIHdpdGggc3luY2hyb25vdXMgTk9SIEZsYXNoIG1lbW9yaWVzLiAqLw0KDQogIHVpbnQzMl90IEZTTUNfQWRkcmVzc0hvbGRUaW1lOyAgICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZHVyYXRpb24gb2YgdGhlIGFkZHJlc3MgaG9sZCB0aW1lLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEYuIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGU6IEl0IGlzIG5vdCB1c2VkIHdpdGggc3luY2hyb25vdXMgTk9SIEZsYXNoIG1lbW9yaWVzLiovDQoNCiAgdWludDMyX3QgRlNNQ19EYXRhU2V0dXBUaW1lOyAgICAgICAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBkdXJhdGlvbiBvZiB0aGUgZGF0YSBzZXR1cCB0aW1lLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEZGLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGU6IEl0IGlzIHVzZWQgZm9yIFNSQU1zLCBST01zIGFuZCBhc3luY2hyb25vdXMgbXVsdGlwbGV4ZWQgTk9SIEZsYXNoIG1lbW9yaWVzLiAqLw0KDQogIHVpbnQzMl90IEZTTUNfQnVzVHVybkFyb3VuZER1cmF0aW9uOyAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZHVyYXRpb24gb2YgdGhlIGJ1cyB0dXJuYXJvdW5kLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEYuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbm90ZTogSXQgaXMgb25seSB1c2VkIGZvciBtdWx0aXBsZXhlZCBOT1IgRmxhc2ggbWVtb3JpZXMuICovDQoNCiAgdWludDMyX3QgRlNNQ19DTEtEaXZpc2lvbjsgICAgICAgICAgICAvKiE8IERlZmluZXMgdGhlIHBlcmlvZCBvZiBDTEsgY2xvY2sgb3V0cHV0IHNpZ25hbCwgZXhwcmVzc2VkIGluIG51bWJlciBvZiBIQ0xLIGN5Y2xlcy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMHhGLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5vdGU6IFRoaXMgcGFyYW1ldGVyIGlzIG5vdCB1c2VkIGZvciBhc3luY2hyb25vdXMgTk9SIEZsYXNoLCBTUkFNIG9yIFJPTSBhY2Nlc3Nlcy4gKi8NCg0KICB1aW50MzJfdCBGU01DX0RhdGFMYXRlbmN5OyAgICAgICAgICAgIC8qITwgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIG1lbW9yeSBjbG9jayBjeWNsZXMgdG8gaXNzdWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBtZW1vcnkgYmVmb3JlIGdldHRpbmcgdGhlIGZpcnN0IGRhdGEuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgZGVwZW5kcyBvbiB0aGUgbWVtb3J5IHR5cGUgYXMgc2hvd24gYmVsb3c6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJdCBtdXN0IGJlIHNldCB0byAwIGluIGNhc2Ugb2YgYSBDUkFNDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJdCBpcyBkb26SdCBjYXJlIGluIGFzeW5jaHJvbm91cyBOT1IsIFNSQU0gb3IgUk9NIGFjY2Vzc2VzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBJdCBtYXkgYXNzdW1lIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAweEYgaW4gTk9SIEZsYXNoIG1lbW9yaWVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN5bmNocm9ub3VzIGJ1cnN0IG1vZGUgZW5hYmxlICovDQoNCiAgdWludDMyX3QgRlNNQ19BY2Nlc3NNb2RlOyAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgYXN5bmNocm9ub3VzIGFjY2VzcyBtb2RlLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19BY2Nlc3NfTW9kZSAqLw0KfUZTTUNfTk9SU1JBTVRpbWluZ0luaXRUeXBlRGVmOw0KDQovKiogDQogICogQGJyaWVmICBGU01DIE5PUi9TUkFNIEluaXQgc3RydWN0dXJlIGRlZmluaXRpb24NCiAgKi8NCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgdWludDMyX3QgRlNNQ19CYW5rOyAgICAgICAgICAgICAgICAvKiE8IFNwZWNpZmllcyB0aGUgTk9SL1NSQU0gbWVtb3J5IGJhbmsgdGhhdCB3aWxsIGJlIHVzZWQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfTk9SU1JBTV9CYW5rICovDQoNCiAgdWludDMyX3QgRlNNQ19EYXRhQWRkcmVzc011eDsgICAgICAvKiE8IFNwZWNpZmllcyB3aGV0aGVyIHRoZSBhZGRyZXNzIGFuZCBkYXRhIHZhbHVlcyBhcmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxleGVkIG9uIHRoZSBkYXRhYnVzIG9yIG5vdC4gDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfRGF0YV9BZGRyZXNzX0J1c19NdWx0aXBsZXhpbmcgKi8NCg0KICB1aW50MzJfdCBGU01DX01lbW9yeVR5cGU7ICAgICAgICAgIC8qITwgU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGV4dGVybmFsIG1lbW9yeSBhdHRhY2hlZCB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgbWVtb3J5IGJhbmsuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfTWVtb3J5X1R5cGUgKi8NCg0KICB1aW50MzJfdCBGU01DX01lbW9yeURhdGFXaWR0aDsgICAgIC8qITwgU3BlY2lmaWVzIHRoZSBleHRlcm5hbCBtZW1vcnkgZGV2aWNlIHdpZHRoLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX0RhdGFfV2lkdGggKi8NCg0KICB1aW50MzJfdCBGU01DX0J1cnN0QWNjZXNzTW9kZTsgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYnVyc3QgYWNjZXNzIG1vZGUgZm9yIEZsYXNoIG1lbW9yeSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG9ubHkgd2l0aCBzeW5jaHJvbm91cyBidXJzdCBGbGFzaCBtZW1vcmllcy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19CdXJzdF9BY2Nlc3NfTW9kZSAqLw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIHVpbnQzMl90IEZTTUNfQXN5bmNocm9ub3VzV2FpdDsgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB3YWl0IHNpZ25hbCBkdXJpbmcgYXN5bmNocm9ub3VzIHRyYW5zZmVycywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkIG9ubHkgd2l0aCBhc3luY2hyb25vdXMgRmxhc2ggbWVtb3JpZXMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfQXN5bmNocm9ub3VzV2FpdCAqLw0KDQogIHVpbnQzMl90IEZTTUNfV2FpdFNpZ25hbFBvbGFyaXR5OyAgLyohPCBTcGVjaWZpZXMgdGhlIHdhaXQgc2lnbmFsIHBvbGFyaXR5LCB2YWxpZCBvbmx5IHdoZW4gYWNjZXNzaW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgRmxhc2ggbWVtb3J5IGluIGJ1cnN0IG1vZGUuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSB2YWx1ZSBvZiBAcmVmIEZTTUNfV2FpdF9TaWduYWxfUG9sYXJpdHkgKi8NCg0KICB1aW50MzJfdCBGU01DX1dyYXBNb2RlOyAgICAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgV3JhcHBlZCBidXJzdCBhY2Nlc3MgbW9kZSBmb3IgRmxhc2gNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeSwgdmFsaWQgb25seSB3aGVuIGFjY2Vzc2luZyBGbGFzaCBtZW1vcmllcyBpbiBidXJzdCBtb2RlLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX1dyYXBfTW9kZSAqLw0KDQogIHVpbnQzMl90IEZTTUNfV2FpdFNpZ25hbEFjdGl2ZTsgICAgLyohPCBTcGVjaWZpZXMgaWYgdGhlIHdhaXQgc2lnbmFsIGlzIGFzc2VydGVkIGJ5IHRoZSBtZW1vcnkgb25lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9jayBjeWNsZSBiZWZvcmUgdGhlIHdhaXQgc3RhdGUgb3IgZHVyaW5nIHRoZSB3YWl0IHN0YXRlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgb25seSB3aGVuIGFjY2Vzc2luZyBtZW1vcmllcyBpbiBidXJzdCBtb2RlLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19XYWl0X1RpbWluZyAqLw0KDQogIHVpbnQzMl90IEZTTUNfV3JpdGVPcGVyYXRpb247ICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSB3cml0ZSBvcGVyYXRpb24gaW4gdGhlIHNlbGVjdGVkIGJhbmsgYnkgdGhlIEZTTUMuIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX1dyaXRlX09wZXJhdGlvbiAqLw0KDQogIHVpbnQzMl90IEZTTUNfV2FpdFNpZ25hbDsgICAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSB3YWl0LXN0YXRlIGluc2VydGlvbiB2aWEgd2FpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmFsLCB2YWxpZCBmb3IgRmxhc2ggbWVtb3J5IGFjY2VzcyBpbiBidXJzdCBtb2RlLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19XYWl0X1NpZ25hbCAqLw0KDQogIHVpbnQzMl90IEZTTUNfRXh0ZW5kZWRNb2RlOyAgICAgICAgLyohPCBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBleHRlbmRlZCBtb2RlLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX0V4dGVuZGVkX01vZGUgKi8NCg0KICB1aW50MzJfdCBGU01DX1dyaXRlQnVyc3Q7ICAgICAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgd3JpdGUgYnVyc3Qgb3BlcmF0aW9uLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgdmFsdWUgb2YgQHJlZiBGU01DX1dyaXRlX0J1cnN0ICovIA0KDQogIEZTTUNfTk9SU1JBTVRpbWluZ0luaXRUeXBlRGVmKiBGU01DX1JlYWRXcml0ZVRpbWluZ1N0cnVjdDsgLyohPCBUaW1pbmcgUGFyYW1ldGVycyBmb3Igd3JpdGUgYW5kIHJlYWQgYWNjZXNzIGlmIHRoZSAgRXh0ZW5kZWRNb2RlIGlzIG5vdCB1c2VkKi8gIA0KDQogIEZTTUNfTk9SU1JBTVRpbWluZ0luaXRUeXBlRGVmKiBGU01DX1dyaXRlVGltaW5nU3RydWN0OyAgICAgLyohPCBUaW1pbmcgUGFyYW1ldGVycyBmb3Igd3JpdGUgYWNjZXNzIGlmIHRoZSAgRXh0ZW5kZWRNb2RlIGlzIHVzZWQqLyAgICAgIA0KfUZTTUNfTk9SU1JBTUluaXRUeXBlRGVmOw0KDQovKiogDQogICogQGJyaWVmICBUaW1pbmcgcGFyYW1ldGVycyBGb3IgRlNNQyBOQU5EIGFuZCBQQ0NBUkQgQmFua3MNCiAgKi8NCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgdWludDMyX3QgRlNNQ19TZXR1cFRpbWU7ICAgICAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gc2V0dXAgYWRkcmVzcyBiZWZvcmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgY29tbWFuZCBhc3NlcnRpb24gZm9yIE5BTkQtRmxhc2ggcmVhZCBvciB3cml0ZSBhY2Nlc3MNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjb21tb24vQXR0cmlidXRlIG9yIEkvTyBtZW1vcnkgc3BhY2UgKGRlcGVuZGluZyBvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtZW1vcnkgc3BhY2UgdGltaW5nIHRvIGJlIGNvbmZpZ3VyZWQpLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRi4qLw0KDQogIHVpbnQzMl90IEZTTUNfV2FpdFNldHVwVGltZTsgIC8qITwgRGVmaW5lcyB0aGUgbWluaW11bSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gYXNzZXJ0IHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgZm9yIE5BTkQtRmxhc2ggcmVhZCBvciB3cml0ZSBhY2Nlc3MgdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb24vQXR0cmlidXRlIG9yIEkvTyBtZW1vcnkgc3BhY2UgKGRlcGVuZGluZyBvbiB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnkgc3BhY2UgdGltaW5nIHRvIGJlIGNvbmZpZ3VyZWQpLiANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIgYmV0d2VlbiAweDAwIGFuZCAweEZGICovDQoNCiAgdWludDMyX3QgRlNNQ19Ib2xkU2V0dXBUaW1lOyAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjbG9jayBjeWNsZXMgdG8gaG9sZCBhZGRyZXNzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCBkYXRhIGZvciB3cml0ZSBhY2Nlc3MpIGFmdGVyIHRoZSBjb21tYW5kIGRlYXNzZXJ0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIE5BTkQtRmxhc2ggcmVhZCBvciB3cml0ZSBhY2Nlc3MgdG8gY29tbW9uL0F0dHJpYnV0ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEkvTyBtZW1vcnkgc3BhY2UgKGRlcGVuZGluZyBvbiB0aGUgbWVtb3J5IHNwYWNlIHRpbWluZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGJlIGNvbmZpZ3VyZWQpLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDB4MDAgYW5kIDB4RkYgKi8NCg0KICB1aW50MzJfdCBGU01DX0hpWlNldHVwVGltZTsgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGNsb2NrIGN5Y2xlcyBkdXJpbmcgd2hpY2ggdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWJ1cyBpcyBrZXB0IGluIEhpWiBhZnRlciB0aGUgc3RhcnQgb2YgYSBOQU5ELUZsYXNoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUgYWNjZXNzIHRvIGNvbW1vbi9BdHRyaWJ1dGUgb3IgSS9PIG1lbW9yeSBzcGFjZSAoZGVwZW5kaW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIG1lbW9yeSBzcGFjZSB0aW1pbmcgdG8gYmUgY29uZmlndXJlZCkuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMHgwMCBhbmQgMHhGRiAqLw0KfUZTTUNfTkFORF9QQ0NBUkRUaW1pbmdJbml0VHlwZURlZjsNCg0KLyoqIA0KICAqIEBicmllZiAgRlNNQyBOQU5EIEluaXQgc3RydWN0dXJlIGRlZmluaXRpb24NCiAgKi8NCg0KdHlwZWRlZiBzdHJ1Y3QNCnsNCiAgdWludDMyX3QgRlNNQ19CYW5rOyAgICAgICAgICAgICAgLyohPCBTcGVjaWZpZXMgdGhlIE5BTkQgbWVtb3J5IGJhbmsgdGhhdCB3aWxsIGJlIHVzZWQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIG9mIEByZWYgRlNNQ19OQU5EX0JhbmsgKi8NCg0KICB1aW50MzJfdCBGU01DX1dhaXRmZWF0dXJlOyAgICAgIC8qITwgRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgV2FpdCBmZWF0dXJlIGZvciB0aGUgTkFORCBNZW1vcnkgQmFuay4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGU01DX1dhaXRfZmVhdHVyZSAqLw0KDQogIHVpbnQzMl90IEZTTUNfTWVtb3J5RGF0YVdpZHRoOyAgLyohPCBTcGVjaWZpZXMgdGhlIGV4dGVybmFsIG1lbW9yeSBkZXZpY2Ugd2lkdGguDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRlNNQ19EYXRhX1dpZHRoICovDQoNCiAgdWludDMyX3QgRlNNQ19FQ0M7ICAgICAgICAgICAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIEVDQyBjb21wdXRhdGlvbi4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhbnkgdmFsdWUgb2YgQHJlZiBGU01DX0VDQyAqLw0KDQogIHVpbnQzMl90IEZTTUNfRUNDUGFnZVNpemU7ICAgICAgLyohPCBEZWZpbmVzIHRoZSBwYWdlIHNpemUgZm9yIHRoZSBleHRlbmRlZCBFQ0MuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmUgYW55IHZhbHVlIG9mIEByZWYgRlNNQ19FQ0NfUGFnZV9TaXplICovDQoNCiAgdWludDMyX3QgRlNNQ19UQ0xSU2V0dXBUaW1lOyAgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxheSBiZXR3ZWVuIENMRSBsb3cgYW5kIFJFIGxvdy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRi4gKi8NCg0KICB1aW50MzJfdCBGU01DX1RBUlNldHVwVGltZTsgICAgIC8qITwgRGVmaW5lcyB0aGUgbnVtYmVyIG9mIEhDTEsgY3ljbGVzIHRvIGNvbmZpZ3VyZSB0aGUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGJldHdlZW4gQUxFIGxvdyBhbmQgUkUgbG93Lg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMHgwIGFuZCAweEZGICovIA0KDQogIEZTTUNfTkFORF9QQ0NBUkRUaW1pbmdJbml0VHlwZURlZiogIEZTTUNfQ29tbW9uU3BhY2VUaW1pbmdTdHJ1Y3Q7ICAgLyohPCBGU01DIENvbW1vbiBTcGFjZSBUaW1pbmcgKi8gDQoNCiAgRlNNQ19OQU5EX1BDQ0FSRFRpbWluZ0luaXRUeXBlRGVmKiAgRlNNQ19BdHRyaWJ1dGVTcGFjZVRpbWluZ1N0cnVjdDsgLyohPCBGU01DIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcgKi8NCn1GU01DX05BTkRJbml0VHlwZURlZjsNCg0KLyoqIA0KICAqIEBicmllZiAgRlNNQyBQQ0NBUkQgSW5pdCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbg0KICAqLw0KDQp0eXBlZGVmIHN0cnVjdA0Kew0KICB1aW50MzJfdCBGU01DX1dhaXRmZWF0dXJlOyAgICAvKiE8IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIFdhaXQgZmVhdHVyZSBmb3IgdGhlIE1lbW9yeSBCYW5rLg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGFueSB2YWx1ZSBvZiBAcmVmIEZTTUNfV2FpdF9mZWF0dXJlICovDQoNCiAgdWludDMyX3QgRlNNQ19UQ0xSU2V0dXBUaW1lOyAgLyohPCBEZWZpbmVzIHRoZSBudW1iZXIgb2YgSENMSyBjeWNsZXMgdG8gY29uZmlndXJlIHRoZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGF5IGJldHdlZW4gQ0xFIGxvdyBhbmQgUkUgbG93Lg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMHhGRi4gKi8NCg0KICB1aW50MzJfdCBGU01DX1RBUlNldHVwVGltZTsgICAvKiE8IERlZmluZXMgdGhlIG51bWJlciBvZiBIQ0xLIGN5Y2xlcyB0byBjb25maWd1cmUgdGhlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsYXkgYmV0d2VlbiBBTEUgbG93IGFuZCBSRSBsb3cuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMHgwIGFuZCAweEZGICovIA0KDQogIA0KICBGU01DX05BTkRfUENDQVJEVGltaW5nSW5pdFR5cGVEZWYqICBGU01DX0NvbW1vblNwYWNlVGltaW5nU3RydWN0OyAvKiE8IEZTTUMgQ29tbW9uIFNwYWNlIFRpbWluZyAqLw0KDQogIEZTTUNfTkFORF9QQ0NBUkRUaW1pbmdJbml0VHlwZURlZiogIEZTTUNfQXR0cmlidXRlU3BhY2VUaW1pbmdTdHJ1Y3Q7ICAvKiE8IEZTTUMgQXR0cmlidXRlIFNwYWNlIFRpbWluZyAqLyANCiAgDQogIEZTTUNfTkFORF9QQ0NBUkRUaW1pbmdJbml0VHlwZURlZiogIEZTTUNfSU9TcGFjZVRpbWluZ1N0cnVjdDsgLyohPCBGU01DIElPIFNwYWNlIFRpbWluZyAqLyAgDQp9RlNNQ19QQ0NBUkRJbml0VHlwZURlZjsNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0V4cG9ydGVkX0NvbnN0YW50cw0KICAqIEB7DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19OT1JTUkFNX0JhbmsgDQogICogQHsNCiAgKi8NCiNkZWZpbmUgRlNNQ19CYW5rMV9OT1JTUkFNMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KI2RlZmluZSBGU01DX0JhbmsxX05PUlNSQU0yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQojZGVmaW5lIEZTTUNfQmFuazFfTk9SU1JBTTMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwNCkNCiNkZWZpbmUgRlNNQ19CYW5rMV9OT1JTUkFNNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA2KQ0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX05BTkRfQmFuayANCiAgKiBAew0KICAqLyAgDQojZGVmaW5lIEZTTUNfQmFuazJfTkFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCiNkZWZpbmUgRlNNQ19CYW5rM19OQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX1BDQ0FSRF9CYW5rIA0KICAqIEB7DQogICovICAgIA0KI2RlZmluZSBGU01DX0Jhbms0X1BDQ0FSRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDEwMDApDQovKioNCiAgKiBAfQ0KICAqLw0KDQojZGVmaW5lIElTX0ZTTUNfTk9SU1JBTV9CQU5LKEJBTkspICgoKEJBTkspID09IEZTTUNfQmFuazFfTk9SU1JBTTEpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFOSykgPT0gRlNNQ19CYW5rMV9OT1JTUkFNMikgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGU01DX0JhbmsxX05PUlNSQU0zKSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZTTUNfQmFuazFfTk9SU1JBTTQpKQ0KDQojZGVmaW5lIElTX0ZTTUNfTkFORF9CQU5LKEJBTkspICgoKEJBTkspID09IEZTTUNfQmFuazJfTkFORCkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGU01DX0JhbmszX05BTkQpKQ0KDQojZGVmaW5lIElTX0ZTTUNfR0VURkxBR19CQU5LKEJBTkspICgoKEJBTkspID09IEZTTUNfQmFuazJfTkFORCkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChCQU5LKSA9PSBGU01DX0JhbmszX05BTkQpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFOSykgPT0gRlNNQ19CYW5rNF9QQ0NBUkQpKQ0KDQojZGVmaW5lIElTX0ZTTUNfSVRfQkFOSyhCQU5LKSAoKChCQU5LKSA9PSBGU01DX0JhbmsyX05BTkQpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEJBTkspID09IEZTTUNfQmFuazNfTkFORCkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQkFOSykgPT0gRlNNQ19CYW5rNF9QQ0NBUkQpKQ0KDQovKiogQGRlZmdyb3VwIE5PUl9TUkFNX0NvbnRyb2xsZXIgDQogICogQHsNCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0RhdGFfQWRkcmVzc19CdXNfTXVsdGlwbGV4aW5nIA0KICAqIEB7DQogICovDQoNCiNkZWZpbmUgRlNNQ19EYXRhQWRkcmVzc011eF9EaXNhYmxlICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQojZGVmaW5lIEZTTUNfRGF0YUFkZHJlc3NNdXhfRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAyKQ0KI2RlZmluZSBJU19GU01DX01VWChNVVgpICgoKE1VWCkgPT0gRlNNQ19EYXRhQWRkcmVzc011eF9EaXNhYmxlKSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICgoTVVYKSA9PSBGU01DX0RhdGFBZGRyZXNzTXV4X0VuYWJsZSkpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19NZW1vcnlfVHlwZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIEZTTUNfTWVtb3J5VHlwZV9TUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCiNkZWZpbmUgRlNNQ19NZW1vcnlUeXBlX1BTUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KI2RlZmluZSBGU01DX01lbW9yeVR5cGVfTk9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQojZGVmaW5lIElTX0ZTTUNfTUVNT1JZKE1FTU9SWSkgKCgoTUVNT1JZKSA9PSBGU01DX01lbW9yeVR5cGVfU1JBTSkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1FTU9SWSkgPT0gRlNNQ19NZW1vcnlUeXBlX1BTUkFNKXx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNRU1PUlkpID09IEZTTUNfTWVtb3J5VHlwZV9OT1IpKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfRGF0YV9XaWR0aCANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIEZTTUNfTWVtb3J5RGF0YVdpZHRoXzhiICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCiNkZWZpbmUgRlNNQ19NZW1vcnlEYXRhV2lkdGhfMTZiICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDEwKQ0KI2RlZmluZSBJU19GU01DX01FTU9SWV9XSURUSChXSURUSCkgKCgoV0lEVEgpID09IEZTTUNfTWVtb3J5RGF0YVdpZHRoXzhiKSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChXSURUSCkgPT0gRlNNQ19NZW1vcnlEYXRhV2lkdGhfMTZiKSkNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0J1cnN0X0FjY2Vzc19Nb2RlIA0KICAqIEB7DQogICovDQoNCiNkZWZpbmUgRlNNQ19CdXJzdEFjY2Vzc01vZGVfRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKSANCiNkZWZpbmUgRlNNQ19CdXJzdEFjY2Vzc01vZGVfRW5hYmxlICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMTAwKQ0KI2RlZmluZSBJU19GU01DX0JVUlNUTU9ERShTVEFURSkgKCgoU1RBVEUpID09IEZTTUNfQnVyc3RBY2Nlc3NNb2RlX0Rpc2FibGUpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBGU01DX0J1cnN0QWNjZXNzTW9kZV9FbmFibGUpKQ0KLyoqDQogICogQH0NCiAgKi8NCiAgDQovKiogQGRlZmdyb3VwIEZTTUNfQXN5bmNocm9ub3VzV2FpdCANCiAgKiBAew0KICAqLw0KI2RlZmluZSBGU01DX0FzeW5jaHJvbm91c1dhaXRfRGlzYWJsZSAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQojZGVmaW5lIEZTTUNfQXN5bmNocm9ub3VzV2FpdF9FbmFibGUgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwODAwMCkNCiNkZWZpbmUgSVNfRlNNQ19BU1lOV0FJVChTVEFURSkgKCgoU1RBVEUpID09IEZTTUNfQXN5bmNocm9ub3VzV2FpdF9EaXNhYmxlKSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBGU01DX0FzeW5jaHJvbm91c1dhaXRfRW5hYmxlKSkNCg0KLyoqDQogICogQH0NCiAgKi8NCiAgDQovKiogQGRlZmdyb3VwIEZTTUNfV2FpdF9TaWduYWxfUG9sYXJpdHkgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBGU01DX1dhaXRTaWduYWxQb2xhcml0eV9Mb3cgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQojZGVmaW5lIEZTTUNfV2FpdFNpZ25hbFBvbGFyaXR5X0hpZ2ggICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDIwMCkNCiNkZWZpbmUgSVNfRlNNQ19XQUlUX1BPTEFSSVRZKFBPTEFSSVRZKSAoKChQT0xBUklUWSkgPT0gRlNNQ19XYWl0U2lnbmFsUG9sYXJpdHlfTG93KSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUE9MQVJJVFkpID09IEZTTUNfV2FpdFNpZ25hbFBvbGFyaXR5X0hpZ2gpKSANCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX1dyYXBfTW9kZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIEZTTUNfV3JhcE1vZGVfRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCiNkZWZpbmUgRlNNQ19XcmFwTW9kZV9FbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwNDAwKSANCiNkZWZpbmUgSVNfRlNNQ19XUkFQX01PREUoTU9ERSkgKCgoTU9ERSkgPT0gRlNNQ19XcmFwTW9kZV9EaXNhYmxlKSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZTTUNfV3JhcE1vZGVfRW5hYmxlKSkNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX1dhaXRfVGltaW5nIA0KICAqIEB7DQogICovDQoNCiNkZWZpbmUgRlNNQ19XYWl0U2lnbmFsQWN0aXZlX0JlZm9yZVdhaXRTdGF0ZSAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KI2RlZmluZSBGU01DX1dhaXRTaWduYWxBY3RpdmVfRHVyaW5nV2FpdFN0YXRlICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDA4MDApIA0KI2RlZmluZSBJU19GU01DX1dBSVRfU0lHTkFMX0FDVElWRShBQ1RJVkUpICgoKEFDVElWRSkgPT0gRlNNQ19XYWl0U2lnbmFsQWN0aXZlX0JlZm9yZVdhaXRTdGF0ZSkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKEFDVElWRSkgPT0gRlNNQ19XYWl0U2lnbmFsQWN0aXZlX0R1cmluZ1dhaXRTdGF0ZSkpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19Xcml0ZV9PcGVyYXRpb24gDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBGU01DX1dyaXRlT3BlcmF0aW9uX0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQojZGVmaW5lIEZTTUNfV3JpdGVPcGVyYXRpb25fRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMTAwMCkNCiNkZWZpbmUgSVNfRlNNQ19XUklURV9PUEVSQVRJT04oT1BFUkFUSU9OKSAoKChPUEVSQVRJT04pID09IEZTTUNfV3JpdGVPcGVyYXRpb25fRGlzYWJsZSkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE9QRVJBVElPTikgPT0gRlNNQ19Xcml0ZU9wZXJhdGlvbl9FbmFibGUpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfV2FpdF9TaWduYWwgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBGU01DX1dhaXRTaWduYWxfRGlzYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDApDQojZGVmaW5lIEZTTUNfV2FpdFNpZ25hbF9FbmFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMjAwMCkgDQojZGVmaW5lIElTX0ZTTUNfV0FJVEVfU0lHTkFMKFNJR05BTCkgKCgoU0lHTkFMKSA9PSBGU01DX1dhaXRTaWduYWxfRGlzYWJsZSkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNJR05BTCkgPT0gRlNNQ19XYWl0U2lnbmFsX0VuYWJsZSkpDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfRXh0ZW5kZWRfTW9kZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIEZTTUNfRXh0ZW5kZWRNb2RlX0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCiNkZWZpbmUgRlNNQ19FeHRlbmRlZE1vZGVfRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDA0MDAwKQ0KDQojZGVmaW5lIElTX0ZTTUNfRVhURU5ERURfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBGU01DX0V4dGVuZGVkTW9kZV9EaXNhYmxlKSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGU01DX0V4dGVuZGVkTW9kZV9FbmFibGUpKSANCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX1dyaXRlX0J1cnN0IA0KICAqIEB7DQogICovDQoNCiNkZWZpbmUgRlNNQ19Xcml0ZUJ1cnN0X0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KI2RlZmluZSBGU01DX1dyaXRlQnVyc3RfRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwODAwMDApIA0KI2RlZmluZSBJU19GU01DX1dSSVRFX0JVUlNUKEJVUlNUKSAoKChCVVJTVCkgPT0gRlNNQ19Xcml0ZUJ1cnN0X0Rpc2FibGUpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoQlVSU1QpID09IEZTTUNfV3JpdGVCdXJzdF9FbmFibGUpKQ0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0FkZHJlc3NfU2V0dXBfVGltZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIElTX0ZTTUNfQUREUkVTU19TRVRVUF9USU1FKFRJTUUpICgoVElNRSkgPD0gMHhGKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfQWRkcmVzc19Ib2xkX1RpbWUgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBJU19GU01DX0FERFJFU1NfSE9MRF9USU1FKFRJTUUpICgoVElNRSkgPD0gMHhGKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfRGF0YV9TZXR1cF9UaW1lIA0KICAqIEB7DQogICovDQoNCiNkZWZpbmUgSVNfRlNNQ19EQVRBU0VUVVBfVElNRShUSU1FKSAoKChUSU1FKSA+IDApICYmICgoVElNRSkgPD0gMHhGRikpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19CdXNfVHVybl9hcm91bmRfRHVyYXRpb24gDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBJU19GU01DX1RVUk5BUk9VTkRfVElNRShUSU1FKSAoKFRJTUUpIDw9IDB4RikNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0NMS19EaXZpc2lvbiANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIElTX0ZTTUNfQ0xLX0RJVihESVYpICgoRElWKSA8PSAweEYpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19EYXRhX0xhdGVuY3kgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBJU19GU01DX0RBVEFfTEFURU5DWShMQVRFTkNZKSAoKExBVEVOQ1kpIDw9IDB4RikNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0FjY2Vzc19Nb2RlIA0KICAqIEB7DQogICovDQoNCiNkZWZpbmUgRlNNQ19BY2Nlc3NNb2RlX0EgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KI2RlZmluZSBGU01DX0FjY2Vzc01vZGVfQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MTAwMDAwMDApIA0KI2RlZmluZSBGU01DX0FjY2Vzc01vZGVfQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MjAwMDAwMDApDQojZGVmaW5lIEZTTUNfQWNjZXNzTW9kZV9EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgzMDAwMDAwMCkNCiNkZWZpbmUgSVNfRlNNQ19BQ0NFU1NfTU9ERShNT0RFKSAoKChNT0RFKSA9PSBGU01DX0FjY2Vzc01vZGVfQSkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKE1PREUpID09IEZTTUNfQWNjZXNzTW9kZV9CKSB8fCBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoTU9ERSkgPT0gRlNNQ19BY2Nlc3NNb2RlX0MpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChNT0RFKSA9PSBGU01DX0FjY2Vzc01vZGVfRCkpIA0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKioNCiAgKiBAfQ0KICAqLw0KICANCi8qKiBAZGVmZ3JvdXAgTkFORF9QQ0NBUkRfQ29udHJvbGxlciANCiAgKiBAew0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfV2FpdF9mZWF0dXJlIA0KICAqIEB7DQogICovDQoNCiNkZWZpbmUgRlNNQ19XYWl0ZmVhdHVyZV9EaXNhYmxlICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDAwKQ0KI2RlZmluZSBGU01DX1dhaXRmZWF0dXJlX0VuYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDIpDQojZGVmaW5lIElTX0ZTTUNfV0FJVF9GRUFUVVJFKEZFQVRVUkUpICgoKEZFQVRVUkUpID09IEZTTUNfV2FpdGZlYXR1cmVfRGlzYWJsZSkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGRUFUVVJFKSA9PSBGU01DX1dhaXRmZWF0dXJlX0VuYWJsZSkpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCg0KLyoqIEBkZWZncm91cCBGU01DX0VDQyANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIEZTTUNfRUNDX0Rpc2FibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCiNkZWZpbmUgRlNNQ19FQ0NfRW5hYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDQwKQ0KI2RlZmluZSBJU19GU01DX0VDQ19TVEFURShTVEFURSkgKCgoU1RBVEUpID09IEZTTUNfRUNDX0Rpc2FibGUpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFNUQVRFKSA9PSBGU01DX0VDQ19FbmFibGUpKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfRUNDX1BhZ2VfU2l6ZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIEZTTUNfRUNDUGFnZVNpemVfMjU2Qnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMCkNCiNkZWZpbmUgRlNNQ19FQ0NQYWdlU2l6ZV81MTJCeXRlcyAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDIwMDAwKQ0KI2RlZmluZSBGU01DX0VDQ1BhZ2VTaXplXzEwMjRCeXRlcyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwNDAwMDApDQojZGVmaW5lIEZTTUNfRUNDUGFnZVNpemVfMjA0OEJ5dGVzICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDA2MDAwMCkNCiNkZWZpbmUgRlNNQ19FQ0NQYWdlU2l6ZV80MDk2Qnl0ZXMgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDgwMDAwKQ0KI2RlZmluZSBGU01DX0VDQ1BhZ2VTaXplXzgxOTJCeXRlcyAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwQTAwMDApDQojZGVmaW5lIElTX0ZTTUNfRUNDUEFHRV9TSVpFKFNJWkUpICgoKFNJWkUpID09IEZTTUNfRUNDUGFnZVNpemVfMjU2Qnl0ZXMpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoU0laRSkgPT0gRlNNQ19FQ0NQYWdlU2l6ZV81MTJCeXRlcykgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBGU01DX0VDQ1BhZ2VTaXplXzEwMjRCeXRlcykgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBGU01DX0VDQ1BhZ2VTaXplXzIwNDhCeXRlcykgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBGU01DX0VDQ1BhZ2VTaXplXzQwOTZCeXRlcykgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChTSVpFKSA9PSBGU01DX0VDQ1BhZ2VTaXplXzgxOTJCeXRlcykpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19UQ0xSX1NldHVwX1RpbWUgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBJU19GU01DX1RDTFJfVElNRShUSU1FKSAoKFRJTUUpIDw9IDB4RkYpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19UQVJfU2V0dXBfVGltZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIElTX0ZTTUNfVEFSX1RJTUUoVElNRSkgKChUSU1FKSA8PSAweEZGKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfU2V0dXBfVGltZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIElTX0ZTTUNfU0VUVVBfVElNRShUSU1FKSAoKFRJTUUpIDw9IDB4RkYpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19XYWl0X1NldHVwX1RpbWUgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBJU19GU01DX1dBSVRfVElNRShUSU1FKSAoKFRJTUUpIDw9IDB4RkYpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19Ib2xkX1NldHVwX1RpbWUgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBJU19GU01DX0hPTERfVElNRShUSU1FKSAoKFRJTUUpIDw9IDB4RkYpDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19IaVpfU2V0dXBfVGltZSANCiAgKiBAew0KICAqLw0KDQojZGVmaW5lIElTX0ZTTUNfSElaX1RJTUUoVElNRSkgKChUSU1FKSA8PSAweEZGKQ0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfSW50ZXJydXB0X3NvdXJjZXMgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBGU01DX0lUX1Jpc2luZ0VkZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDgpDQojZGVmaW5lIEZTTUNfSVRfTGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAxMCkNCiNkZWZpbmUgRlNNQ19JVF9GYWxsaW5nRWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDIwKQ0KI2RlZmluZSBJU19GU01DX0lUKElUKSAoKCgoSVQpICYgKHVpbnQzMl90KTB4RkZGRkZGQzcpID09IDB4MDAwMDAwMDApICYmICgoSVQpICE9IDB4MDAwMDAwMDApKQ0KI2RlZmluZSBJU19GU01DX0dFVF9JVChJVCkgKCgoSVQpID09IEZTTUNfSVRfUmlzaW5nRWRnZSkgfHwgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoSVQpID09IEZTTUNfSVRfTGV2ZWwpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKElUKSA9PSBGU01DX0lUX0ZhbGxpbmdFZGdlKSkgDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKiogQGRlZmdyb3VwIEZTTUNfRmxhZ3MgDQogICogQHsNCiAgKi8NCg0KI2RlZmluZSBGU01DX0ZMQUdfUmlzaW5nRWRnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwMDEpDQojZGVmaW5lIEZTTUNfRkxBR19MZXZlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDMyX3QpMHgwMDAwMDAwMikNCiNkZWZpbmUgRlNNQ19GTEFHX0ZhbGxpbmdFZGdlICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDAwMDAwMDA0KQ0KI2RlZmluZSBGU01DX0ZMQUdfRkVNUFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHVpbnQzMl90KTB4MDAwMDAwNDApDQojZGVmaW5lIElTX0ZTTUNfR0VUX0ZMQUcoRkxBRykgKCgoRkxBRykgPT0gRlNNQ19GTEFHX1Jpc2luZ0VkZ2UpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBGU01DX0ZMQUdfTGV2ZWwpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBGU01DX0ZMQUdfRmFsbGluZ0VkZ2UpIHx8IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChGTEFHKSA9PSBGU01DX0ZMQUdfRkVNUFQpKQ0KDQojZGVmaW5lIElTX0ZTTUNfQ0xFQVJfRkxBRyhGTEFHKSAoKCgoRkxBRykgJiAodWludDMyX3QpMHhGRkZGRkZGOCkgPT0gMHgwMDAwMDAwMCkgJiYgKChGTEFHKSAhPSAweDAwMDAwMDAwKSkNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBkZWZncm91cCBGU01DX0V4cG9ydGVkX01hY3Jvcw0KICAqIEB7DQogICovDQoNCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAZGVmZ3JvdXAgRlNNQ19FeHBvcnRlZF9GdW5jdGlvbnMNCiAgKiBAew0KICAqLw0KDQp2b2lkIEZTTUNfTk9SU1JBTURlSW5pdCh1aW50MzJfdCBGU01DX0JhbmspOw0Kdm9pZCBGU01DX05BTkREZUluaXQodWludDMyX3QgRlNNQ19CYW5rKTsNCnZvaWQgRlNNQ19QQ0NBUkREZUluaXQodm9pZCk7DQp2b2lkIEZTTUNfTk9SU1JBTUluaXQoRlNNQ19OT1JTUkFNSW5pdFR5cGVEZWYqIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QpOw0Kdm9pZCBGU01DX05BTkRJbml0KEZTTUNfTkFOREluaXRUeXBlRGVmKiBGU01DX05BTkRJbml0U3RydWN0KTsNCnZvaWQgRlNNQ19QQ0NBUkRJbml0KEZTTUNfUENDQVJESW5pdFR5cGVEZWYqIEZTTUNfUENDQVJESW5pdFN0cnVjdCk7DQp2b2lkIEZTTUNfTk9SU1JBTVN0cnVjdEluaXQoRlNNQ19OT1JTUkFNSW5pdFR5cGVEZWYqIEZTTUNfTk9SU1JBTUluaXRTdHJ1Y3QpOw0Kdm9pZCBGU01DX05BTkRTdHJ1Y3RJbml0KEZTTUNfTkFOREluaXRUeXBlRGVmKiBGU01DX05BTkRJbml0U3RydWN0KTsNCnZvaWQgRlNNQ19QQ0NBUkRTdHJ1Y3RJbml0KEZTTUNfUENDQVJESW5pdFR5cGVEZWYqIEZTTUNfUENDQVJESW5pdFN0cnVjdCk7DQp2b2lkIEZTTUNfTk9SU1JBTUNtZCh1aW50MzJfdCBGU01DX0JhbmssIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQp2b2lkIEZTTUNfTkFORENtZCh1aW50MzJfdCBGU01DX0JhbmssIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQp2b2lkIEZTTUNfUENDQVJEQ21kKEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQp2b2lkIEZTTUNfTkFOREVDQ0NtZCh1aW50MzJfdCBGU01DX0JhbmssIEZ1bmN0aW9uYWxTdGF0ZSBOZXdTdGF0ZSk7DQp1aW50MzJfdCBGU01DX0dldEVDQyh1aW50MzJfdCBGU01DX0JhbmspOw0Kdm9pZCBGU01DX0lUQ29uZmlnKHVpbnQzMl90IEZTTUNfQmFuaywgdWludDMyX3QgRlNNQ19JVCwgRnVuY3Rpb25hbFN0YXRlIE5ld1N0YXRlKTsNCkZsYWdTdGF0dXMgRlNNQ19HZXRGbGFnU3RhdHVzKHVpbnQzMl90IEZTTUNfQmFuaywgdWludDMyX3QgRlNNQ19GTEFHKTsNCnZvaWQgRlNNQ19DbGVhckZsYWcodWludDMyX3QgRlNNQ19CYW5rLCB1aW50MzJfdCBGU01DX0ZMQUcpOw0KSVRTdGF0dXMgRlNNQ19HZXRJVFN0YXR1cyh1aW50MzJfdCBGU01DX0JhbmssIHVpbnQzMl90IEZTTUNfSVQpOw0Kdm9pZCBGU01DX0NsZWFySVRQZW5kaW5nQml0KHVpbnQzMl90IEZTTUNfQmFuaywgdWludDMyX3QgRlNNQ19JVCk7DQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZiAvKl9fU1RNMzJGMTB4X0ZTTUNfSCAqLw0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqDQogICogQH0NCiAgKi8gDQoNCi8qKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgMjAxMCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQo=