LyoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIKkgMjAxMyBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIGFuZCBpdHMgc3Vic2lkaWFyaWVzLg0KKiBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBhbnkgZGVyaXZhdGl2ZXMgZXhjbHVzaXZlbHkgd2l0aA0KKiBNaWNyb2NoaXAgcHJvZHVjdHMuDQoqIFRISVMgU09GVFdBUkUgSVMgU1VQUExJRUQgQlkgTUlDUk9DSElQICJBUyBJUyIuDQoqIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIEFQUExZIFRPIFRISVMgU09GVFdBUkUsDQoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwNCiogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBJVFMgSU5URVJBQ1RJT04gV0lUSCBNSUNST0NISVANCiogUFJPRFVDVFMsIENPTUJJTkFUSU9OIFdJVEggQU5ZIE9USEVSIFBST0RVQ1RTLCBPUiBVU0UgSU4gQU5ZIEFQUExJQ0FUSU9OLg0KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsDQoqIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBMT1NTLCBEQU1BR0UsIENPU1QgT1IgRVhQRU5TRSBPRiBBTlkgS0lORA0KKiBXSEFUU09FVkVSIFJFTEFURUQgVE8gVEhFIFNPRlRXQVJFLCBIT1dFVkVSIENBVVNFRCwgRVZFTiBJRiBNSUNST0NISVAgSEFTDQoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLg0KKiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgQUxMT1dFRCBCWSBMQVcsIE1JQ1JPQ0hJUCdTIFRPVEFMIExJQUJJTElUWSBPTiBBTEwNCiogQ0xBSU1TIElOIEFOWSBXQVkgUkVMQVRFRCBUTyBUSElTIFNPRlRXQVJFIFdJTEwgTk9UIEVYQ0VFRCBUSEUgQU1PVU5UIE9GDQoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4NCiogTUlDUk9DSElQIFBST1ZJREVTIFRISVMgU09GVFdBUkUgQ09ORElUSU9OQUxMWSBVUE9OIFlPVVIgQUNDRVBUQU5DRQ0KKiBPRiBUSEVTRSBURVJNUy4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiAgZGVmcy5oDQogKiAgICAgIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gaGVhZGVyIGZpbGUgZm9yIGdlbmVyaWMgdXNhZ2VzDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogICN4eA0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqICRGaWxlOiAvL2RlcG90X3Bjcy9GV0VuZy9wcm9qZWN0cy9NRUMyMDE2L1BsYXlncm91bmQvcHJhbWFucy8xNjA2MjNfRnJlZVJUT1NfTWljcm9jaGlwX01FQzE3MHgvRGVtby9DT1JURVhfTVBVX01FQzE3MDFfS2VpbF9HQ0MvcGVyaXBoZXJhbF9saWJyYXJ5L2RlZnMuaCAkDQogKi8NCg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqIEBkZWZncm91cCBkZWZzIGRlZnMNCiAqICBAew0KICovDQoNCi8qKiBAZmlsZSBkZWZzLmgNCiogXGJyaWVmIGRlZmluaXRpb24gaGVhZGVyIGZpbGUgZm9yIGdlbmVyaWMgdXNhZ2VzDQoqIFxhdXRob3IgQXBwIEZpcm13YXJlIFRlYW0NCiogDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2lmbmRlZiBfREVGU19IXw0KI2RlZmluZSBfREVGU19IXw0KDQovKiBiaXQgb3BlcmF0aW9uIE1BQ1JPLCB4dmFyIGNvdWxkIGJlIGJ5dGUsIHdvcmQgb3IgZHdvcmQgKi8NCiNkZWZpbmUgbVNFVF9CSVQoeCwgeHZhcikJCSggeHZhciB8PSB4ICkNCiNkZWZpbmUgbUNMUl9CSVQoeCwgeHZhcikJCSggeHZhciAmPSB+eCApDQojZGVmaW5lIG1HRVRfQklUKHgsIHh2YXIpCQkoIHh2YXIgJiB4ICkNCiNkZWZpbmUgbUNMUl9TUkNfQklUKHgsIHh2YXIpCSggeHZhciA9IHggKQ0KI2RlZmluZSBtVE9HR0xFX0JJVCh4LCB4dmFyKQl7aWYobUdFVF9CSVQoeCwgeHZhcikpe21DTFJfQklUKHgsIHh2YXIpO31lbHNle21TRVRfQklUKHgsIHh2YXIpO319DQoNCiNlbmRpZiAvKl9ERUZTX0hfKi8NCg0KLyoqICAgQH0NCiAqLw0KDQo=