LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKiBGaWxlIERlc2NyaXB0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogRmlsZSBOYW1lOgkJJFdvcmtmaWxlOiAgIGhteF91cHJhZGVfbnZyYW0uaCAgJA0KICogVmVyc2lvbjoJCQkkUmV2aXNpb246ICAgMS4wICAkDQogKiBPcmlnaW5hbCBBdXRob3I6IFlhbmcgSHl1biBVayAkDQogKiBDdXJyZW50IEF1dGhvcjoJJEF1dGhvcjogaHV5YW5nQGh1bWF4ZGlnaXRhbC5jb20gJA0KICogRGF0ZToJCQkkRGF0ZTogMjAxMS4xMS4wNw0KICogRmlsZSBEZXNjcmlwdGlvbjoJVXBncmFkZSBBUElzDQogKiBNb2R1bGU6DQogKiBSZW1hcmtzOg0KICovDQoNCg0KLyoqDQogKiBAYXV0aG9yIEh5dW51ayBZYW5nKGh1eWFuZ0BodW1heGRpZ2l0YWwuY29tKQ0KICogQGRhdGUgMDcgTm92IDIwMTENCiAqLw0KDQovKioNCiAqIEBub3RlDQogKiBDb3B5cmlnaHQgKEMpIDIwMTEgSHVtYXggQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIDxicj4NCiAqIFRoaXMgc29mdHdhcmUgaXMgdGhlIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24NCiAqIG9mIEh1bWF4IENvcnBvcmF0aW9uLiBZb3UgbWF5IG5vdCB1c2Ugb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlDQogKiBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiBhbnkgYXBwbGljYWJsZSBsaWNlbnNlDQogKiBhZ3JlZW1lbnQgaW4gd3JpdGluZyBiZXR3ZWVuIEh1bWF4IENvcnBvcmF0aW9uIGFuZCB5b3UuDQogKi8NCg0KIC8qQHsqLw0KDQovKioNCiAqIEBmaWxlIGhteF91cGdyYWRlX252cmFtLmgNCiAqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqIEhlYWRlciBGaWxlcyoqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBTdGFydCBJbmNsdWRpbmcgSGVhZGVyIEZpbGVzICovDQovKiBFbmQgSW5jbHVkaW5nIEhlYWRlcnMqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKiogRXh0ZXJuIHZhcmlhYmxlcyAqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKiBTdGFydCBFeHRlcm4gdmFyaWFibGVlICovDQpleHRlcm4gaW50IGxpYnVwZ3JhZGVfdmVyYm9zZTsNCg0KLyogRW5kIEV4dGVybiB2YXJpYWJsZSAqLw0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKiBNYWNybyBEZWZpbml0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qIFN0YXJ0IE1hY3JvIGRlZmluaXRpb24gKi8NCg0KLyogRW5kIE1hY3JvIGRlZmluaXRpb24gKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHR5cGVkZWYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyogU3RhcnQgdHlwZWRlZiAqLw0KDQp0eXBlZGVmIGVudW0NCnsNCglOVlJBTV9PU0RfT04gPSAwLA0KCU5WUkFNX09TRF9PRkYNCn1OVlJBTV9PU0RfRElTUExBWV9FOw0KDQp0eXBlZGVmIGVudW0NCnsNCglOVlJBTV9GUk9OVFBBTkVMX0RJU1BMQVlfT04gPSAwLA0KCU5WUkFNX0ZST05UUEFORUxfRElTUExBWV9PRkYNCn1OVlJBTV9GUk9OVFBBTkVMX0RJU1BMQVlfRTsNCg0KdHlwZWRlZiBlbnVtDQp7DQoJTlZSQU1fQVNQRUNUX1JBVElPXzRfMyA9IDAsDQoJTlZSQU1fQVNQRUNUX1JBVElPXzE2XzkNCn1OVlJBTV9BU1BFQ1RfUkFUSU9fRTsNCg0KdHlwZWRlZiBlbnVtDQp7DQoJTlZSQU1fT1RBX1NTVSA9IDEsDQoJTlZSQU1fT1RBX0RURyA9IDIsDQoJTlZSQU1fT1RBX0hVTUFYID0gMywNCglOVlJBTV9PVEFfTk9SRElHID0gNCwNCglOVlJBTV9PVEFfRklMRSA9IDUsDQoJTlZSQU1fT1RBX1NLWUQgPSA2LA0KCU5WUkFNX09UQV9NQVgNCn1OVlJBTV9PVEFfVFlQRV9FOw0KDQoNCnR5cGVkZWYgZW51bQ0Kew0KCU5WUkFNX09UQV9DSEFOTkVMX1NBVAkJPSAxLA0KCU5WUkFNX09UQV9DSEFOTkVMX0NBQgkJPSAyLA0KCU5WUkFNX09UQV9DSEFOTkVMX1RFUgkJPSAzLA0KCU5WUkFNX09UQV9DSEFOTkVMX0ZMQVNICQk9IDQsDQoJTlZSQU1fT1RBX0NIQU5ORUxfRlRQCQk9IDUNCn1OVlJBTV9PVEFfQ0hBTk5FTF9FOw0KDQp0eXBlZGVmIGVudW0NCnsNCglOVlJBTV9SRVNPTFVUSU9OX1Vua25vd24JCQk9MHgwMDAwMDAwMCwNCglOVlJBTV9SRVNPTFVUSU9OXzcyMHgyNDBQCQk9MHgwMDAwMDAwMSwNCglOVlJBTV9SRVNPTFVUSU9OXzI4ODB4MjQwUAkJPTB4MDAwMDAwMDIsDQoJTlZSQU1fUkVTT0xVVElPTl82NDB4NDgwUAkJPTB4MDAwMDAwMDQsDQoJTlZSQU1fUkVTT0xVVElPTl83MjB4NDgwSQkJPTB4MDAwMDAwMDgsDQoJTlZSQU1fUkVTT0xVVElPTl83MjB4NDgwUAkJPTB4MDAwMDAwMTAsDQoJTlZSQU1fUkVTT0xVVElPTl8xNDQweDQ4MFAJCT0weDAwMDAwMDIwLA0KCU5WUkFNX1JFU09MVVRJT05fMjg4MHg0ODBJCQk9MHgwMDAwMDA0MCwNCglOVlJBTV9SRVNPTFVUSU9OXzI4ODB4NDgwUAkJPTB4MDAwMDAwODAsDQoJTlZSQU1fUkVTT0xVVElPTl83MjB4Mjg4UAkJPTB4MDAwMDAxMDAsDQoJTlZSQU1fUkVTT0xVVElPTl8yODgweDI4OFAgCQk9MHgwMDAwMDIwMCwNCglOVlJBTV9SRVNPTFVUSU9OXzcyMHg1NzZJCQk9MHgwMDAwMDQwMCwNCglOVlJBTV9SRVNPTFVUSU9OXzcyMHg1NzZQCQk9MHgwMDAwMDgwMCwNCglOVlJBTV9SRVNPTFVUSU9OXzE0NDB4NTc2UAkJPTB4MDAwMDEwMDAsDQoJTlZSQU1fUkVTT0xVVElPTl8yODgweDU3NkkgCQk9MHgwMDAwMjAwMCwNCglOVlJBTV9SRVNPTFVUSU9OXzI4ODB4NTc2UAkJPTB4MDAwMDQwMDAsDQoJTlZSQU1fUkVTT0xVVElPTl8xMDgweDcyMFAJCT0weDAwMDA4MDAwLA0KCU5WUkFNX1JFU09MVVRJT05fMTI4MHg3MjBQCQk9MHgwMDAxMDAwMCwNCglOVlJBTV9SRVNPTFVUSU9OXzE5MjB4MTA4MEkJCT0weDAwMDIwMDAwLA0KCU5WUkFNX1JFU09MVVRJT05fMTkyMHgxMDgwUAkJPTB4MDAwNDAwMDAsDQoJTlZSQU1fUkVTT0xVVElPTl9EVU1NWQkJCT0weDAwMEZGRkZGDQp9IE5WUkFNX1ZJREVPX1JFU09MVVRJT05fRTsNCg0KdHlwZWRlZiBlbnVtDQp7DQoJTlZSQU1fSERNSV9GSUVMRF9SQVRFX1Vua25vd24JPTB4MDAwMCwNCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfMjRIWgkJPTB4MDAwMSwNCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfMjVIWiAJCT0weDAwMDIsDQoJTlZSQU1fSERNSV9GSUVMRF9SQVRFXzMwSFogCQk9MHgwMDA0LA0KCU5WUkFNX0hETUlfRklFTERfUkFURV81MEhaIAkJPTB4MDAwOCwNCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfNjBIWiAJCT0weDAwMTAsDQoJTlZSQU1fSERNSV9GSUVMRF9SQVRFXzEwMEhaIAkJPTB4MDAyMCwNCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfMTIwSFogCQk9MHgwMDQwLA0KCU5WUkFNX0hETUlfRklFTERfUkFURV8yMDBIWgkJPTB4MDA4MCwNCglOVlJBTV9IRE1JX0ZJRUxEX1JBVEVfMjQwSFoJCT0weDAxMDAsDQoJTlZSQU1fSERNSV9GSUVMRF9SQVRFX0RVTU1ZCQk9MHhGRkZGDQp9IE5WUkFNX0hETUlfVklERU9fRklFTERfUkFURV9FOw0KDQoNCnR5cGVkZWYgZW51bQ0Kew0KCU5WUkFNX0hETUlfVklERU9fQVJfZU5vRGF0YSA9IDAsDQoJTlZSQU1fSERNSV9WSURFT19BUl9lNF8zLA0KCU5WUkFNX0hETUlfVklERU9fQVJfZTE2XzkNCn1OVlJBTV9IRE1JX1ZJREVPX0FSX0U7DQoNCg0KdHlwZWRlZiBlbnVtDQp7DQoJTlZSQU1fU0NBUlRfT1VUUFVUX0NWQlM9MywNCglOVlJBTV9TQ0FSVF9PVVRQVVRfUkdCLA0KCU5WUkFNX1NDQVJUX09VVFBVVF9TVklERU8sDQoNCglOVlJBTV9TQ0FSVF9NQVgNCn0gTlZSQU1fU0NBUlRfU0VUVElOR19WQUxVRTsNCg0KdHlwZWRlZiBlbnVtIHRhZ05WUkFNX0ZJRUxEDQp7DQoJTlZSQU1fRklFTERfU1lTVEVNX0lEID0gMCwJCQkJCS8vIHVuc2lnbmVkIGludAkJCQkvLyA0CQkJCS8vIFN5c3RlbSBJZA0KCU5WUkFNX0ZJRUxEX1NGTEFTSCwNCglOVlJBTV9GSUVMRF9TRVJJQUxfTk8sDQoJTlZSQU1fRklFTERfTUFDX0FERFIsDQoJTlZSQU1fRklFTERfSERDUF9LRVksDQoJTlZSQU1fRklFTERfRFRDUF9LRVksDQoJTlZSQU1fRklFTERfQ0lfUExVU19LRVksDQoJTlZSQU1fRklFTERfUEFSSU5HX0RBVEEsDQoJTlZSQU1fRklFTERfUFJJVkFURSwNCglOVlJBTV9GSUVMRF9DU0NfS0VZLA0KCU5WUkFNX0ZJRUxEXzFTVF9TRVJJQUxfTlVNQkVSLA0KCU5WUkFNX0ZJRUxEXzJORF9TRVJJQUxfTlVNQkVSLA0KCU5WUkFNX0ZJRUxEX0dQTiwNCglOVlJBTV9GSUVMRF9NQUNfQUREUl9NT0NBLA0KCU5WUkFNX0ZJRUxEX01BQ19BRERSX0JULA0KCU5WUkFNX0ZJRUxEX0dPT0dMRV9TU0xfUEVNLA0KCU5WUkFNX0ZJRUxEX0dPT0dMRV9TU0xfQ1JULA0KCU5WUkFNX0ZJRUxEX0NNX1NFUklBTF9OTywNCglOVlJBTV9GSUVMRF9DTV9NQUNfQUREUiwNCglOVlJBTV9GSUVMRF9DTV9NQUNfQUREUl9BTk9USEVSLA0KCU5WUkFNX0ZJRUxEX0lSREVUT19CQkNCLA0KDQoJTlZSQU1fRklFTERfT1RBX1RZUEUxID0gMHgxMDAsCQkJCS8vIE5WUkFNX09UQV9UWVBFX0UNCglOVlJBTV9GSUVMRF9PVEFfVFlQRTIsIAkJCQkJCS8vIE5WUkFNX09UQV9UWVBFX0UNCglOVlJBTV9GSUVMRF9PVEFfVFlQRTMsCQkJCQkJLy8gTlZSQU1fT1RBX1RZUEVfRQ0KCU5WUkFNX0ZJRUxEX0NIX1RZUEUxLAkJCQkJCS8vIE5WUkFNX09UQV9DSEFOTkVMX0UNCglOVlJBTV9GSUVMRF9DSF9UWVBFMiwJCQkJCQkvLyBOVlJBTV9PVEFfQ0hBTk5FTF9FDQoJTlZSQU1fRklFTERfQ0hfVFlQRTMsCQkJCQkJLy8gTlZSQU1fT1RBX0NIQU5ORUxfRQ0KCU5WUkFNX0ZJRUxEX09UQV9GTEFHMSwJCQkJCQkvLyBOVlJBTV9PVEFfRkxBR19FDQoJTlZSQU1fRklFTERfT1RBX0ZMQUcyLAkJCQkJCS8vIE5WUkFNX09UQV9GTEFHX0UNCglOVlJBTV9GSUVMRF9PVEFfRkxBRzMsCQkJCQkJLy8gTlZSQU1fT1RBX0ZMQUdfRQ0KCU5WUkFNX0ZJRUxEX1RVTkVSX0lEMSwJCQkJCQkvLyBUdW5lciBJZA0KCU5WUkFNX0ZJRUxEX1RVTkVSX0lEMiwJCQkJCQkvLyBUdW5lciBJZA0KCU5WUkFNX0ZJRUxEX1RVTkVSX0lEMywJCQkJCQkvLyBUdW5lciBJZA0KCU5WUkFNX0ZJRUxEX0FOVEVOQV9QT1dFUjEsCQkJCQkvLyBFeHRlcm5hbCBBbnRlbmEgUG93ZXIgZm9yIFRlciwgMDpPZmYvMTpPbg0KCU5WUkFNX0ZJRUxEX0FOVEVOQV9QT1dFUjIsCQkJCQkvLyBFeHRlcm5hbCBBbnRlbmEgUG93ZXIgZm9yIFRlciwgMDpPZmYvMTpPbg0KCU5WUkFNX0ZJRUxEX0FOVEVOQV9QT1dFUjMsCQkJCQkvLyBFeHRlcm5hbCBBbnRlbmEgUG93ZXIgZm9yIFRlciwgMDpPZmYvMTpPbg0KCU5WUkFNX0ZJRUxEX0VTX1BJRDEsCQkJCQkJCS8vIEVsZW1lbnQgU3RyZWFtIFBJRCBmb3IgT1RBDQoJTlZSQU1fRklFTERfRVNfUElEMiwJCQkJCQkJLy8gRWxlbWVudCBTdHJlYW0gUElEIGZvciBPVEENCglOVlJBTV9GSUVMRF9FU19QSUQzLAkJCQkJCQkvLyBFbGVtZW50IFN0cmVhbSBQSUQgZm9yIE9UQQ0KCU5WUkFNX0ZJRUxEX1RSQU5TQUNUSU9OX0lEMSwJCQkJCS8vIFRyYW5zYWN0aW9uIElkIGZvciBOb3JkaWMgT1RBDQoJTlZSQU1fRklFTERfVFJBTlNBQ1RJT05fSUQyLAkJCQkJLy8gVHJhbnNhY3Rpb24gSWQgZm9yIE5vcmRpYyBPVEENCglOVlJBTV9GSUVMRF9UUkFOU0FDVElPTl9JRDMsCQkJCQkvLyBUcmFuc2FjdGlvbiBJZCBmb3IgTm9yZGljIE9UQQ0KCU5WUkFNX0ZJRUxEX0NIX0lORk9fUywJCQkJCQkvLyBESV9DSEFOTkVMX1BBUkFNDQoJTlZSQU1fRklFTERfQ0hfSU5GT19ULAkJCQkJCS8vIERJX0NIQU5ORUxfUEFSQU0NCglOVlJBTV9GSUVMRF9DSF9JTkZPX0MsCQkJCQkJLy8gRElfQ0hBTk5FTF9QQVJBTQ0KCU5WUkFNX0ZJRUxEX05FVF9QT1JUQUxfSVAsCQkJCQkvLyBwb3J0YWwgaXAgYWRkcmVzcw0KCU5WUkFNX0ZJRUxEX05FVF9ET1dOX1BBVEgsCQkJCQkvLyBOZXR3b3JrIERvd25sb2FkIFBhdGgNCglOVlJBTV9GSUVMRF9ORVRfREVWSUNFX0lELAkJCQkJLy8gZXRoZXJuZXQgZGV2aWNlIGlkIDAgPSBldGgwDQoJTlZSQU1fRklFTERfTkVUX0lQX0NPTkZJRywJCQkJCS8vIERIQ1AvTWFudWFsDQoJTlZSQU1fRklFTERfTkVUX0lQX1NFVFRJTkcsCQkJCQkvLyBNYW51YWwgSVAgc2V0dGluZw0KCU5WUkFNX0ZJRUxEX09UQV9GVFBfSU5GTywJCQkJCS8vIE5WUkFNX0ZUUF9PVEFfU0VUVElOR19UDQoJTlZSQU1fRklFTERfRklMRV9TSVpFLAkJCQkJCS8vIGZpbGUgc2l6ZSBvZiBiYWNrZ3JvdWxkIG90YQ0KDQoJTlZSQU1fRklFTERfTE9BREVSX1ZFUlNJT04sCQkJCQkvLyBWZXJzaW9uIG9mIGJvb3QgTG9hZGVyDQoJTlZSQU1fRklFTERfQVBQX1ZFUlNJT04sCQkJCQkJLy8gVmVyc2lvbiBudW1iZXIgb2YgQXBwbGljYXRpb24NCglOVlJBTV9GSUVMRF9PVEFMRFJfVkVSU0lPTiwJCQkJCS8vIFZlcnNpb24gb2YgT1RBIExvYWRlcg0KCU5WUkFNX0ZJRUxEX0NVUl9PVEFJTUFHRV9WRVJTSU9OLAkJCS8vIFZlcnNpb24gbnVtYmVyIG9mIE9UQSBpbWFnZQ0KCU5WUkFNX0ZJRUxEX0xPQURFUl9WRVIsDQoJTlZSQU1fRklFTERfQVBQX1ZFUiwNCg0KCU5WUkFNX0ZJRUxEX0xBTkdVQUdFLAkJCQkJCS8vIE9TRCBsYW5ndWFnZSBjb2RlIGluIElTTyA2MzkgY29kZQ0KCU5WUkFNX0ZJRUxEX0NPVU5UUllfQ09ERSwJCQkJCS8vIHVuc2lnbmVkIGNoYXIgYVszXQ0KCU5WUkFNX0ZJRUxEX1RWX1NUQU5EQVJELAkJCQkJCS8vIERJX1ZJREVPX1NEX1NUQU5EQVJEDQoJTlZSQU1fRklFTERfU0NBUlRfUkdCLAkJCQkJCS8vIE5WUkFNX1NDQVJUX1NFVFRJTkdfVkFMVUUNCglOVlJBTV9GSUVMRF9IRF9SRVNPVUxUSU9OLAkJCQkJLy8gTlZSQU1fVklERU9fUkVTT0xVVElPTl9FDQoJTlZSQU1fRklFTERfRklFTERfUkFURSwJCQkJCQkvLyBOVlJBTV9IRE1JX1ZJREVPX0ZJRUxEX1JBVEVfRQ0KCU5WUkFNX0ZJRUxEX09BRF9WRVJTSU9OLAkJCQkJCS8vIGZvciBNSEVHID8/Pw0KCU5WUkFNX0ZJRUxEX1JDVV9DVVNUT01fQ09ERSwJCQkJCS8vIGZvciBSQ1UgY3VzdG9tIGNvZGUNCglOVlJBTV9GSUVMRF9SQ1VfQ1VTVE9NX0NPREUyLAkJCQkvLyBmb3IgYWx0ZXJuYXRpdmUgUkNVIGN1c3RvbSBjb2RlDQoJTlZSQU1fRklFTERfUEFORUxfRElTUExBWSwJCQkJCS8vIERJX09UQV9QQU5FTERJU1BMQVlfdA0KCU5WUkFNX0ZJRUxEX1BBTkVMX0RJTU1JTkcsCQkJCQkvLyB1bnNpZ25lZCBjaGFyDQoJTlZSQU1fRklFTERfT1NEX0RJU1BMQVksCQkJCQkJLy8gTlZSQU1fT1NEX0RJU1BMQVlfRQ0KCU5WUkFNX0ZJRUxEX1NUQVJUX0JBTktfRkxBRywJCQkJCS8vILXOILCzwMcgYmFua8HfIL7utfC3ziC6zsbDIMfSIMH2ILDhwaQNCglOVlJBTV9GSUVMRF9DSEVDS19VU0IsCQkJCQkJLy8gus7GwyC9wyBVU0IguLa/7saux9i8rSBoZGa4piCwy7vnx9LB9iC4u8H2ILDhwaQNCglOVlJBTV9GSUVMRF9DSEVDS19VU0JfQ09VTlQsCQkJCQkvLyDApyC1v8DbIL3HxtAgvcMguO4gufggwOcgvcO1tSDH0sH2IGNvdW50uKYgwPrA5Q0KCU5WUkFNX0ZJRUxEX0FTUEVDVF9SQVRJTywJCQkJCS8vIE5WUkFNX0FTUEVDVF9SQVRJT19FDQoJTlZSQU1fRklFTERfVVNBR0VfSUQsCQkJCQkJLy8gZm9yIFVQQyBPVEENCglOVlJBTV9GSUVMRF9CSU44SywJCQkJCQkJLy8gZm9yIGVlcHJvbSBlbXVsYXRpb24NCglOVlJBTV9GSUVMRF9JUkRFVE9fQ1BDQiwJCQkJCQkvLyBmb3IgSVJERVRPIENQQ0INCglOVlJBTV9GSUVMRF9JUkRFVE9fQ1BDQl9FTkNSWVBURUQsIAkJCS8vIGZvciBJUkRFVE8gQ1BDQiAoZW5jcnlwdGVkKQ0KDQoJTlZSQU1fRklFTERfQUNUSVZBVEVEX0tFUk5FTF9OVU0sIAkJCS8vIEFDVElWQVRFRF9LRVJORUxfTlVNDQoJTlZSQU1fRklFTERfTVREX1RZUEVfRk9SX0tFUk5FTCwgCQkJLy8gTVREX1RZUEVfRk9SX0tFUk5FTA0KCU5WUkFNX0ZJRUxEX0FDVElWQVRFRF9LRVJORUxfTkFNRSwJCQkvLyAia2VybmVsMCIsIGxvb2t1cCBtdGQgcGFydGl0aW9uDQoJTlZSQU1fRklFTERfUExBVEZPUk1fTkFNRSwJCQkgICAgICAgIC8vIFBsYXRmb3JtIG5hbWUsIGUuZy4gImdmaGQxMDAiDQoJTlZSQU1fRklFTERfRVhUUkFfS0VSTkVMX09QVCwJCSAgICAgICAgCS8vIHN0cmluZyB0byBhcHBlbmQgdG8gY21kbGluZQ0KDQoJTlZSQU1fRklFTERfUkFXRlMgPSAweDEwMDAsDQoJTlZSQU1fRklFTERfRFVNTVkgPSAweEZGRkYNCn0gTlZSQU1fRklFTERfVDsNCg0KdHlwZWRlZiBlbnVtDQp7DQoJTlZSQU1fT1RBX0ZMQUdfTk9fT1RBCQkJPSAweDAwLA0KCU5WUkFNX09UQV9GTEFHX0RFVEVDVEVECQkJPSAweDAxLA0KCU5WUkFNX09UQV9GTEFHX0NPTVBMRVRFRAkJCT0gMHgwMiwNCglOVlJBTV9PVEFfRkxBR19GT1JDRV9VUEdSQURFCQk9IDB4MDQsDQoJTlZSQU1fT1RBX0ZMQUdfTkFHUkFfUkVDT1ZFUlkJPSAweDA4LA0KCU5WUkFNX09UQV9GTEFHX0RPV05MT0FESU5HCQk9IDB4MTAsDQoJTlZSQU1fT1RBX0ZMQUdfV1JJVElORwkJCT0gMHgyMCwNCglOVlJBTV9PVEFfRkxBR19FUlJPUgkJCQk9IDB4ODANCn0gTlZSQU1fT1RBX0ZMQUdfRTsNCg0KdHlwZWRlZiBzdHJ1Y3QgTlZSQU1fTkVUX0lQX1NFVFRJTkdfVGFnDQp7DQojZGVmaW5lIE5FVF9BRERSX0xFTkdUSCA0DQoJdW5zaWduZWQgY2hhcgkJaXBbTkVUX0FERFJfTEVOR1RIXTsNCgl1bnNpZ25lZCBjaGFyCQltYXNrW05FVF9BRERSX0xFTkdUSF07DQoJdW5zaWduZWQgY2hhciAJCWdhdGV3YXlbTkVUX0FERFJfTEVOR1RIXTsNCgl1bnNpZ25lZCBjaGFyCQlkbnNbTkVUX0FERFJfTEVOR1RIXTsNCn0gTlZSQU1fTkVUX0lQX1NFVFRJTkdfVDsNCg0KdHlwZWRlZiBzdHJ1Y3QgTlZSQU1fRlRQX09UQV9TRVRUSU5HX1RhZw0Kew0KI2RlZmluZSBOVlJBTV9GVFBfVVNFUl9MRU5HVEggCQkyMA0KI2RlZmluZSBOVlJBTV9GVFBfUEFTU1dEX0xFTkdUSCAJCTIwDQojZGVmaW5lIE5WUkFNX0ZUUF9ESVJfUEFUSF9MRU5HVEggCTIwMA0KI2RlZmluZSBOVlJBTV9GVFBfRklMRV9OQU1FX0xFTkdUSCAJNTANCgl1bnNpZ25lZCBjaGFyCQlhU2VydmVySXBbTkVUX0FERFJfTEVOR1RIXTsNCgl1bnNpZ25lZCBjaGFyIAkJYVVzZXJOYW1lW05WUkFNX0ZUUF9VU0VSX0xFTkdUSF07DQoJdW5zaWduZWQgY2hhciAJCWFQYXNzd2RbTlZSQU1fRlRQX1BBU1NXRF9MRU5HVEhdOw0KCXVuc2lnbmVkIGNoYXIgCQlhRGlyUGF0aFtOVlJBTV9GVFBfRElSX1BBVEhfTEVOR1RIXTsNCgl1bnNpZ25lZCBjaGFyIAkJYUZpbGVOYW1lW05WUkFNX0ZUUF9GSUxFX05BTUVfTEVOR1RIXTsNCn0gTlZSQU1fRlRQX09UQV9TRVRUSU5HX1Q7DQoNCnR5cGVkZWYgZW51bQ0Kew0KCU5WUkFNX0lQX0RIQ1AgPSAwLA0KCU5WUkFNX0lQX01BTlVBTA0KfSBOVlJBTV9ORVRfSVBfQ09ORklHX0U7DQoNCi8qIFN0YXJ0IGdsb2JhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovDQp0eXBlZGVmIGVudW0gSE1YX05WUkFNX1BBUlRJVElPTl9lDQp7DQoJSE1YX05WUkFNX1BBUlRJVElPTl9STywNCglITVhfTlZSQU1fUEFSVElUSU9OX1JXLA0KCUhNWF9OVlJBTV9QQVJUSVRJT05fV19SQVdGUywNCglITVhfTlZSQU1fUEFSVElUSU9OX01BWA0KfUhNWF9OVlJBTV9QQVJUSVRJT05fRTsNCg0KDQp0eXBlZGVmIGVudW0NCnsNCglEUlZfT0sJCQk9CTAsDQogCURSVl9FUlIsDQoNCglEUlZfRVJSX0lOVkFMSURfUEFSQU1FVEVSLA0KCURSVl9FUlJfSU5JVElBTElaQVRJT04sDQoJRFJWX0VSUl9FVkVOVF9JTklUSUFMSVpBVElPTiwNCglEUlZfRVJSX09VVE9GTUVNT1JZLA0KCURSVl9FUlJfRVhURVJOQUxfRVJST1INCg0KfURSVl9FcnJvcjsNCg0KLyogRW5kIHR5cGVkZWYgKi8NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKiBnbG9iYWwgZnVuY3Rpb24gcHJvdG90eXBlICoqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpleHRlcm4gaW50IEhNWF9VUEdSQURFX05WUkFNX1dyaXRlKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyICogZGF0YSwgdW5zaWduZWQgaW50IHNpemUgKTsNCmV4dGVybiBpbnQgSE1YX1VQR1JBREVfTlZSQU1fUmVhZCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgY2hhciAqIGRhdGEsIHVuc2lnbmVkIGludCBzaXplICk7DQoNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQovKioqKioqKioqKioqKioqKioqKiogZ2xvYmFsIGZ1bmN0aW9uIHByb3RvdHlwZSAqKioqKioqKioqKioqKioqKioqKi8NCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KRFJWX0Vycm9yCUhNWF9OVlJBTV9Jbml0KHZvaWQpOw0KRFJWX0Vycm9yCUhNWF9OVlJBTV9Xcml0ZShITVhfTlZSQU1fUEFSVElUSU9OX0UgcGFydGl0aW9uLCB1bnNpZ25lZCBjaGFyICpwTmFtZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgY2hhciAqcFZhbHVlLCB1bnNpZ25lZCBpbnQgdWxTaXplKTsNCkRSVl9FcnJvcglITVhfTlZSQU1fUmVhZChITVhfTlZSQU1fUEFSVElUSU9OX0UgcGFydGl0aW9uLCB1bnNpZ25lZCBjaGFyICpwTmFtZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgY2hhciAqcFZhbHVlLCB1bnNpZ25lZCBpbnQgdWxTaXplKTsNCkRSVl9FcnJvcglITVhfTlZSQU1fR2V0RmllbGQoTlZSQU1fRklFTERfVCBmaWVsZCwgdW5zaWduZWQgaW50IG9mZnNldCwgdm9pZCAqZGF0YSwgaW50IG5EYXRhU2l6ZSk7DQpEUlZfRXJyb3IJSE1YX05WUkFNX1NldEZpZWxkKE5WUkFNX0ZJRUxEX1QgZmllbGQsIHVuc2lnbmVkIGludCBvZmZzZXQsIHZvaWQgKmRhdGEsIGludCBuRGF0YVNpemUpOw0KRFJWX0Vycm9yCUhNWF9OVlJBTV9HZXRMZW5ndGgoTlZSQU1fRklFTERfVCBmaWVsZCwgaW50ICpwTGVuKTsNCkRSVl9FcnJvcglITVhfTlZSQU1fUmVtb3ZlKEhNWF9OVlJBTV9QQVJUSVRJT05fRSBwYXJ0aXRpb24sIHVuc2lnbmVkIGNoYXIgKnBOYW1lKTsNCkRSVl9FcnJvcglITVhfTlZSQU1fRGlyKHZvaWQpOw0KDQoNCi8qIEVuZCBnbG9iYWwgZnVuY3Rpb24gcHJvdG90eXBlcyAqLw0KDQoNCi8qQH0qLw0K