LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIEZyZWVSVE9TK1RyYWNlIHYyLjIuMyBSZWNvcmRlciBMaWJyYXJ5DQogKiBQZXJjZXBpbyBBQiwgd3d3LnBlcmNlcGlvLnNlDQogKg0KICogdHJjVXNlci5oDQogKiBUaGUgcHVibGljIEFQSSBvZiB0aGUgdHJhY2UgcmVjb3JkZXIgbGlicmFyeS4NCiAqDQogKiBUZXJtcyBvZiBVc2UNCiAqIFRoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0IFBlcmNlcGlvIEFCLiBUaGUgcmVjb3JkZXIgbGlicmFyeSBpcyBmcmVlIGZvcg0KICogdXNlIHRvZ2V0aGVyIHdpdGggUGVyY2VwaW8gcHJvZHVjdHMuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcmVjb3JkZXIgbGlicmFyeQ0KICogaW4gaXRzIG9yaWdpbmFsIGZvcm0sIGluY2x1ZGluZyBtb2RpZmljYXRpb25zIGluIHRyY1BvcnQuYyBhbmQgdHJjUG9ydC5oDQogKiBnaXZlbiB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbiBhcmUgY2xlYXJseSBtYXJrZWQgYXMgeW91ciBvd24gbW9kaWZpY2F0aW9ucw0KICogYW5kIGRvY3VtZW50ZWQgaW4gdGhlIGluaXRpYWwgY29tbWVudCBzZWN0aW9uIG9mIHRoZXNlIHNvdXJjZSBmaWxlcy4gDQogKiBUaGlzIHNvZnR3YXJlIGlzIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgUGVyY2VwaW8gQUIgYW5kIG1heSBub3QgYmUgDQogKiBzb2xkIG9yIGluIG90aGVyIHdheXMgY29tbWVyY2lhbGx5IHJlZGlzdHJpYnV0ZWQgd2l0aG91dCBleHBsaWNpdCB3cml0dGVuIA0KICogcGVybWlzc2lvbiBieSBQZXJjZXBpbyBBQi4NCiAqDQogKiBEaXNjbGFpbWVyIA0KICogVGhlIHRyYWNlIHRvb2wgYW5kIHJlY29yZGVyIGxpYnJhcnkgaXMgYmVpbmcgZGVsaXZlcmVkIHRvIHlvdSBBUyBJUyBhbmQgDQogKiBQZXJjZXBpbyBBQiBtYWtlcyBubyB3YXJyYW50eSBhcyB0byBpdHMgdXNlIG9yIHBlcmZvcm1hbmNlLiBQZXJjZXBpbyBBQiBkb2VzIA0KICogbm90IGFuZCBjYW5ub3Qgd2FycmFudCB0aGUgcGVyZm9ybWFuY2Ugb3IgcmVzdWx0cyB5b3UgbWF5IG9idGFpbiBieSB1c2luZyB0aGUgDQogKiBzb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uLiBQZXJjZXBpbyBBQiBtYWtlIG5vIHdhcnJhbnRpZXMsIGV4cHJlc3Mgb3IgDQogKiBpbXBsaWVkLCBhcyB0byBub25pbmZyaW5nZW1lbnQgb2YgdGhpcmQgcGFydHkgcmlnaHRzLCBtZXJjaGFudGFiaWxpdHksIG9yIA0KICogZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4gSW4gbm8gZXZlbnQgd2lsbCBQZXJjZXBpbyBBQiwgaXRzIA0KICogdGVjaG5vbG9neSBwYXJ0bmVycywgb3IgZGlzdHJpYnV0b3JzIGJlIGxpYWJsZSB0byB5b3UgZm9yIGFueSBjb25zZXF1ZW50aWFsLCANCiAqIGluY2lkZW50YWwgb3Igc3BlY2lhbCBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGxvc3QgcHJvZml0cyBvciBsb3N0IHNhdmluZ3MsIA0KICogZXZlbiBpZiBhIHJlcHJlc2VudGF0aXZlIG9mIFBlcmNlcGlvIEFCIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IA0KICogb2Ygc3VjaCBkYW1hZ2VzLCBvciBmb3IgYW55IGNsYWltIGJ5IGFueSB0aGlyZCBwYXJ0eS4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIA0KICogbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsIG9yIHNwZWNpYWwgDQogKiBkYW1hZ2VzLCBvciB0aGUgZXhjbHVzaW9uIG9mIGltcGxpZWQgd2FycmFudGllcyBvciBsaW1pdGF0aW9ucyBvbiBob3cgbG9uZyBhbiANCiAqIGltcGxpZWQgd2FycmFudHkgbWF5IGxhc3QsIHNvIHRoZSBhYm92ZSBsaW1pdGF0aW9ucyBtYXkgbm90IGFwcGx5IHRvIHlvdS4NCiAqDQogKiBGcmVlUlRPUytUcmFjZSBpcyBhdmFpbGFibGUgYXMgRnJlZSBFZGl0aW9uIGFuZCBpbiB0d28gcHJlbWl1bSBlZGl0aW9ucy4NCiAqIFlvdSBtYXkgdXNlIHRoZSBwcmVtaXVtIGZlYXR1cmVzIGR1cmluZyAzMCBkYXlzIGZvciBldmFsdWF0aW9uLg0KICogRG93bmxvYWQgRnJlZVJUT1MrVHJhY2UgYXQgaHR0cDovL3d3dy5wZXJjZXBpby5zZS9pbmRleC5waHA/cGFnZT1kb3dubG9hZHMNCiAqDQogKiBDb3B5cmlnaHQgUGVyY2VwaW8gQUIsIDIwMTIuDQogKiB3d3cucGVyY2VwaW8uc2UNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiNpZm5kZWYgVFJDVVNFUl9IDQojZGVmaW5lIFRSQ1VTRVJfSA0KDQojaW5jbHVkZSAiRnJlZVJUT1MuaCINCg0KI2lmIChjb25maWdVU0VfVFJBQ0VfRkFDSUxJVFkgPT0gMSkNCg0KI2luY2x1ZGUgInRyY0Jhc2UuaCINCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiIHsNCiNlbmRpZg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdWlUcmFjZVN0YXJ0DQogKg0KICogU3RhcnRzIHRoZSByZWNvcmRlci4gVGhlIHJlY29yZGVyIHdpbGwgbm90IGJlIHN0YXJ0ZWQgaWYgYW4gZXJyb3IgaGFzIGJlZW4NCiAqIGluZGljYXRlZCB1c2luZyB2VHJhY2VFcnJvciwgZS5nLiBpZiBhbnkgb2YgdGhlIE54IGNvbnN0YW50cyBpbiB0cmNDb25maWcuaCANCiAqIGhhcyBhIHRvbyBzbWFsbCB2YWx1ZSAoTlRBU0ssIE5RVUVVRSwgZXRjKS4NCiAqIA0KICogUmV0dXJucyAxIGlmIHRoZSByZWNvcmRlciB3YXMgc3RhcnRlZCBzdWNjZXNzZnVsbHkuDQogKiBSZXR1cm5zIDAgaWYgdGhlIHJlY29yZGVyIHN0YXJ0IHdhcyBwcmV2ZW50ZWQgZHVlIHRvIGEgcHJldmlvdXMgaW50ZXJuYWwgDQogKiBlcnJvci4gSW4gdGhhdCBjYXNlLCBjaGVjayB2VHJhY2VHZXRMYXN0RXJyb3IgdG8gZ2V0IHRoZSBlcnJvciBtZXNzYWdlLg0KICogQW55IGVycm9yIG1lc3NhZ2UgaXMgYWxzbyBwcmVzZW50ZWQgd2hlbiBvcGVuaW5nIGEgdHJhY2UgZmlsZSBpbiANCiAqIEZyZWVSVE9TK1RyYWNlIHYyLjIuMiBvciBsYXRlci4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp1aW50MzJfdCB1aVRyYWNlU3RhcnQodm9pZCk7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VTdGFydCANCiAqDQogKiBTdGFydHMgdGhlIHJlY29yZGVyLiBUaGUgcmVjb3JkZXIgd2lsbCBub3QgYmUgc3RhcnRlZCBpZiBhbiBlcnJvciBoYXMgYmVlbg0KICogaW5kaWNhdGVkIHVzaW5nIHZUcmFjZUVycm9yLCBlLmcuIGlmIGFueSBvZiB0aGUgTnggY29uc3RhbnRzIGluIHRyY0NvbmZpZy5oIA0KICogaGFzIGEgdG9vIHNtYWxsIHZhbHVlIChOVEFTSywgTlFVRVVFLCBldGMpLg0KICogDQogKiBUaGlzIGZ1bmN0aW9uIGlzIG9ic29sZXRlLCBidXQgaGFzIGJlZW4gc2F2ZWQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiANCiAqIFdlIHJlY29tbWVuZCB1c2luZyB1aVRyYWNlU3RhcnQgaW5zdGVhZC4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZVN0YXJ0KHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlU3RhcnRTdGF0dXNNb25pdG9yDQogKg0KICogVGhpcyBzdGFydHMgYSB0YXNrIHRvIG1vbml0b3IgdGhlIHN0YXR1cyBvZiB0aGUgcmVjb3JkZXIgbW9kdWxlLiANCiAqIFRoaXMgdGFzayBwZXJpb2RpY2FsbHkgcHJpbnRzIGEgbGluZSB0byB0aGUgY29uc29sZSB3aW5kb3csIHdoaWNoIHNob3dzIHRoZSANCiAqIHJlY29yZGVyIHN0YXR1cywgdGhlIG51bWJlciBvZiBldmVudHMgcmVjb3JkZWQgYW5kIHRoZSBsYXRlc3QgdGltZXN0YW1wLiANCiAqIFRoaXMgdGFzayBjYWxscyB2VHJhY2VQb3J0RW5kICh0cmNQb3J0LmMpIHdoZW4gaXQgZGV0ZWN0cyB0aGF0IHRoZSByZWNvcmRlciANCiAqIGhhcyBiZWVuIHN0b3BwZWQuIFRoaXMgYWxsb3dzIGZvciBhZGRpbmcgY3VzdG9tIGFjdGlvbnMsIGUuZy4sIHRvIHN0b3JlIHRoZQ0KICogdHJhY2UgdG8gYSBmaWxlIGluIGNhc2UgYSBmaWxlIHN5c3RlbSBpcyBhdmFpbGFibGUgb24gdGhlIGRldmljZS4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZVN0YXJ0U3RhdHVzTW9uaXRvcih2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVN0b3ANCiAqDQogKiBTdG9wcyB0aGUgcmVjb3JkZXIuIFRoZSByZWNvcmRpbmcgY2FuIGJlIHJlc3VtZWQgYnkgY2FsbGluZyB2VHJhY2VTdGFydC4NCiAqIFRoaXMgZG9lcyBub3QgcmVzZXQgdGhlIHJlY29yZGVyLiBVc2UgdlRyYWNlQ2xlYXIgaXMgdGhhdCBpcyBkZXNpcmVkLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlU3RvcCh2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZUNsZWFyDQogKg0KICogUmVzZXRzIHRoZSByZWNvcmRlci4gT25seSBuZWNlc3NhcnkgaWYgYSByZXN0YXJ0IGlzIGRlc2lyZWQgLSB0aGlzIGlzIG5vdCANCiAqIG5lZWRlZCBpbiB0aGUgc3RhcnR1cCBpbml0aWFsaXphdGlvbi4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZUNsZWFyKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlU2V0UXVldWVOYW1lDQogKg0KICogQXNzaWducyBhIG5hbWUgdG8gYSBGcmVlUlRPUyBRdWV1ZSwgU2VtYXBob3JlIG9yIE11dGV4LiBUaGlzIGZ1bmN0aW9uIHNob3VsZA0KICogYmUgY2FsbGVkIHJpZ2h0IGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBxdWV1ZS9tdXRleC9zZW1hcGhvcmUuIElmIG5vdCB1c2luZyANCiAqIHRoaXMgZnVuY3Rpb24sIHRoZSBxdWV1ZXMvbXV0ZXhlcy9zZW1hcGhvcmVzIHdpbGwgYmUgcHJlc2VudGVkIGJ5IHRoZWlyDQogKiBudW1lcmljIGhhbmRsZSBvbmx5Lg0KICoNCiAqIEV4YW1wbGU6DQogKiAgICAgYWN0dWF0b3JRID0geFF1ZXVlQ3JlYXRlKDMsIHNpemVvZihRdWV1ZU1lc3NhZ2UpKTsNCiAqICAgICB2VHJhY2VTZXRRdWV1ZU5hbWUoYWN0dWF0b3JRLCAiQWN0dWF0b3JRdWV1ZSIpOw0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlU2V0UXVldWVOYW1lKHZvaWQqIHF1ZXVlLCBjb25zdCBjaGFyKiBuYW1lKTsNCg0KI2lmIChJTkNMVURFX0lTUl9UUkFDSU5HID09IDEpDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VTZXRJU1JQcm9wZXJ0aWVzDQogKiANCiAqIFJlZ2lzdGVycyBhbiBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lIGluIHRoZSByZWNvcmRlciBsaWJyYXJ5LCBUaGlzIG11c3QgYmUNCiAqIGNhbGxlZCBiZWZvcmUgdXNpbmcgdlRyYWNlU3RvcmVJU1JCZWdpbiB0byBzdG9yZSBJU1IgZXZlbnRzLiBUaGlzIGlzIA0KICogdHlwaWNhbGx5IGNhbGxlZCBpbiB0aGUgc3RhcnR1cCBvZiB0aGUgc3lzdGVtLCBiZWZvcmUgdGhlIHNjaGVkdWxlciBpcyANCiAqIHN0YXJ0ZWQuDQogKg0KICogRXhhbXBsZToNCiAqICAgICAjZGVmaW5lIElEX0lTUl9USU1FUjEgMSAgICAgICAvLyBsb3dlc3QgdmFsaWQgSUQgaXMgMQ0KICogICAgICNkZWZpbmUgUFJJT19PRl9JU1JfVElNRVIxIDMgIC8vIHRoZSBoYXJkd2FyZSBwcmlvcml0eSBvZiB0aGUgaW50ZXJydXB0DQogKiAgICAgLi4uDQogKiAgICAgdlRyYWNlU2V0SVNSUHJvcGVydGllcyhJRF9JU1JfVElNRVIxLCAiSVNSVGltZXIxIiwgUFJJT19PRl9JU1JfVElNRVIxKTsNCiAqICAgICAuLi4NCiAqICAgICB2b2lkIElTUl9oYW5kbGVyKCkNCiAqICAgICB7DQogKiAgICAgICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOyAvLyBSZXF1aXJlZCBpZiBuZXN0ZWQgSVNScyBhcmUgYWxsb3dlZA0KICogICAgICAgICB2VHJhY2VTdG9yZUlTUkJlZ2luKElEX09GX0lTUl9USU1FUjEpOw0KICogICAgICAgICBwb3J0RVhJVF9DUklUSUNBTCgpOw0KICogICAgICAgICAuLi4NCiAqICAgICAgICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7IC8vIFJlcXVpcmVkIGlmIG5lc3RlZCBJU1JzIGFyZSBhbGxvd2VkDQogKiAgICAgICAgIHZUcmFjZVN0b3JlSVNSRW5kKCk7DQogKiAgICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7DQogKiAgICAgfQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlU2V0SVNSUHJvcGVydGllcyhvYmplY3RIYW5kbGVUeXBlIGhhbmRsZSwgY2hhciogbmFtZSwgY2hhciBwcmlvcml0eSk7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VTdG9yZUlTUkJlZ2luDQogKiANCiAqIFJlZ2lzdGVycyB0aGUgYmVnaW5uaW5nIG9mIGFuIEludGVycnVwdCBTZXJ2aWNlIFJvdXRpbmUuIFRoaXMgbXVzdCBub3QgYmUNCiAqIGludGVycnVwdGVkIGJ5IGFub3RoZXIgSVNSIGNvbnRhaW5pbmcgcmVjb3JkZXIgbGlicmFyeSBjYWxscywgc28gaWYgYWxsb3dpbmcNCiAqIG5lc3RlZCBJU1JzIHRoaXMgbXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLg0KICoNCiAqIEV4YW1wbGU6DQogKiAgICAgI2RlZmluZSBJRF9JU1JfVElNRVIxIDEgICAgICAgLy8gbG93ZXN0IHZhbGlkIElEIGlzIDENCiAqICAgICAjZGVmaW5lIFBSSU9fT0ZfSVNSX1RJTUVSMSAzICAvLyB0aGUgaGFyZHdhcmUgcHJpb3JpdHkgb2YgdGhlIGludGVycnVwdA0KICogICAgIC4uLg0KICogICAgIHZUcmFjZVNldElTUlByb3BlcnRpZXMoSURfSVNSX1RJTUVSMSwgIklTUlRpbWVyMSIsIFBSSU9fT0ZfSVNSX1RJTUVSMSk7DQogKiAgICAgLi4uDQogKiAgICAgdm9pZCBJU1JfaGFuZGxlcigpDQogKiAgICAgew0KICogICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsgLy8gUmVxdWlyZWQgaWYgbmVzdGVkIElTUnMgYXJlIGFsbG93ZWQNCiAqICAgICAgICAgdlRyYWNlU3RvcmVJU1JCZWdpbihJRF9PRl9JU1JfVElNRVIxKTsNCiAqICAgICAgICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCiAqICAgICAgICAgLi4uDQogKiAgICAgICAgIHBvcnRFTlRFUl9DUklUSUNBTCgpOyAvLyBSZXF1aXJlZCBpZiBuZXN0ZWQgSVNScyBhcmUgYWxsb3dlZA0KICogICAgICAgICB2VHJhY2VTdG9yZUlTUkVuZCgpOw0KICogICAgICAgICBwb3J0RVhJVF9DUklUSUNBTCgpOw0KICogICAgIH0NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZVN0b3JlSVNSQmVnaW4ob2JqZWN0SGFuZGxlVHlwZSBpZCk7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VTdG9yZUlTUkVuZA0KICogDQogKiBSZWdpc3RlcnMgdGhlIGVuZCBvZiBhbiBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lLiBUaGlzIG11c3Qgbm90IGJlDQogKiBpbnRlcnJ1cHRlZCBieSBhbm90aGVyIElTUiBjb250YWluaW5nIHJlY29yZGVyIGxpYnJhcnkgY2FsbHMsIHNvIGlmIGFsbG93aW5nDQogKiBuZXN0ZWQgSVNScyB0aGlzIG11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4NCiAqDQogKiBFeGFtcGxlOg0KICogICAgICNkZWZpbmUgSURfSVNSX1RJTUVSMSAxICAgICAgIC8vIGxvd2VzdCB2YWxpZCBJRCBpcyAxDQogKiAgICAgI2RlZmluZSBQUklPX09GX0lTUl9USU1FUjEgMyAgLy8gdGhlIGhhcmR3YXJlIHByaW9yaXR5IG9mIHRoZSBpbnRlcnJ1cHQNCiAqICAgICAuLi4NCiAqICAgICB2VHJhY2VTZXRJU1JQcm9wZXJ0aWVzKElEX0lTUl9USU1FUjEsICJJU1JUaW1lcjEiLCBQUklPX09GX0lTUl9USU1FUjEpOw0KICogICAgIC4uLg0KICogICAgIHZvaWQgSVNSX2hhbmRsZXIoKQ0KICogICAgIHsNCiAqICAgICAgICAgcG9ydEVOVEVSX0NSSVRJQ0FMKCk7IC8vIFJlcXVpcmVkIGlmIG5lc3RlZCBJU1JzIGFyZSBhbGxvd2VkDQogKiAgICAgICAgIHZUcmFjZVN0b3JlSVNSQmVnaW4oSURfT0ZfSVNSX1RJTUVSMSk7DQogKiAgICAgICAgIHBvcnRFWElUX0NSSVRJQ0FMKCk7DQogKiAgICAgICAgIC4uLg0KICogICAgICAgICBwb3J0RU5URVJfQ1JJVElDQUwoKTsgLy8gUmVxdWlyZWQgaWYgbmVzdGVkIElTUnMgYXJlIGFsbG93ZWQNCiAqICAgICAgICAgdlRyYWNlU3RvcmVJU1JFbmQoKTsNCiAqICAgICAgICAgcG9ydEVYSVRfQ1JJVElDQUwoKTsNCiAqICAgICB9DQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VTdG9yZUlTUkVuZCh2b2lkKTsNCg0KI2Vsc2UNCg0KICAgLyogSWYgbm90IGluY2x1ZGluZyB0aGUgSVNSIHJlY29yZGluZyAqLw0KDQogICAjZGVmaW5lIHZUcmFjZVNldElTUlByb3BlcnRpZXMoaGFuZGxlLCBuYW1lLCBwcmlvcml0eSkNCiAgICNkZWZpbmUgdlRyYWNlU3RvcmVJU1JCZWdpbihpZCkNCiAgICNkZWZpbmUgdlRyYWNlU3RvcmVJU1JFbmQoKQ0KDQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZ2VHJhY2VUYXNrU2tpcERlZmF1bHRJbnN0YW5jZUZpbmlzaGVkRXZlbnRzDQogKg0KICogVGhpcyBpcyB1c2VmdWwgaWYgdGhlcmUgYXJlIGltcGxpY2l0IEluc3RhbmNlIEZpbmlzaCBFdmVudHMsIHN1Y2ggYXMgDQogKiB2VGFza0RlbGF5VW50aWwgb3IgeFF1ZXVlUmVjZWl2ZSwgaW4gYSB0YXNrIHdoZXJlIGFuIGV4cGxpY2l0IEluc3RhbmNlIEZpbmlzaCANCiAqIEV2ZW50IGhhcyBiZWVuIGRlZmluZWQuIFRoaXMgZnVuY3Rpb24gdGVsbHMgdGhlIHJlY29yZGVyIHRoYXQgb25seSB0aGUgDQogKiBleHBsaWNpdGx5IGRlZmluZWQgZnVuY3Rpb25zICh1c2luZyB2VHJhY2VUYXNrSW5zdGFuY2VJc0ZpbmlzaGVkKSBzaG91bGQgYmUNCiAqIHRyZWF0ZWQgYXMgSW5zdGFuY2UgRmluaXNoIEV2ZW50cyBmb3IgdGhpcyB0YXNrLiBUaGUgaW1wbGljaXQgSW5zdGFuY2UgRmluaXNoIA0KICogRXZlbnRzIGFyZSB0aHVzIGRpc3JlZ2FyZGVkIGZvciB0aGlzIHRhc2suDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VUYXNrU2tpcERlZmF1bHRJbnN0YW5jZUZpbmlzaGVkRXZlbnRzKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlVGFza0luc3RhbmNlSXNGaW5pc2hlZA0KICogDQogKiBUaGlzIGRlZmluZXMgYW4gZXhwbGljaXQgSW5zdGFuY2UgRmluaXNoIEV2ZW50IGZvciB0aGUgY3VycmVudCB0YXNrLiBJdCB0ZWxscyANCiAqIHRoZSByZWNvcmRlciB0aGF0IHRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoaXMgdGFzayBpcyBmaW5pc2hlZCBhdCB0aGUgbmV4dCANCiAqIGtlcm5lbCBjYWxsIG9mIHRoZSB0YXNrLCBlLmcuLCBhIHRhc2tEZWxheSBvciBhIHF1ZXVlIHJlY2VpdmUuIFRoaXMgZnVuY3Rpb24gDQogKiBzaG91bGQgYmUgY2FsbGVkIHJpZ2h0IGJlZm9yZSB0aGUgYXBpIGZ1bmN0aW9uIGNhbGwgY29uc2lkZXJlZCB0byBiZSB0aGUgZW5kIA0KICogb2YgdGhlIHRhc2sgaW5zdGFtY2UsIGkuZS4sIHRoZSBJbnN0YW5jZSBGaW5pc2ggRXZlbnQuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VUYXNrSW5zdGFuY2VJc0ZpbmlzaGVkKHZvaWQpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlR2V0VHJhY2VCdWZmZXINCiAqIA0KICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJlY29yZGVyIGRhdGEgc3RydWN0dXJlLiBVc2UgdGhpcyB0b2dldGhlciB3aXRoIA0KICogdWlUcmFjZUdldFRyYWNlQnVmZmVyU2l6ZSBpZiB5b3Ugd2lzaCB0byBpbXBsZW1lbnQgYW4gb3duIHN0b3JlL3VwbG9hZCANCiAqIHNvbHV0aW9uLCBlLmcuLCBpbiBjYXNlIGEgZGVidWdnZXIgY29ubmVjdGlvbiBpcyBub3QgYXZhaWxhYmxlIGZvciB1cGxvYWRpbmcgDQogKiB0aGUgZGF0YS4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkKiB2VHJhY2VHZXRUcmFjZUJ1ZmZlcih2b2lkKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHVpVHJhY2VHZXRUcmFjZUJ1ZmZlclNpemUNCiAqIA0KICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgcmVjb3JkZXIgZGF0YSBzdHJ1Y3R1cmUuIEZvciB1c2UgdG9nZXRoZXIgd2l0aCANCiAqIHZUcmFjZUdldFRyYWNlQnVmZmVyIGlmIHlvdSB3aXNoIHRvIGltcGxlbWVudCBhbiBvd24gc3RvcmUvdXBsb2FkIHNvbHV0aW9uLCANCiAqIGUuZy4sIGluIGNhc2UgYSBkZWJ1Z2dlciBjb25uZWN0aW9uIGlzIG5vdCBhdmFpbGFibGUgZm9yIHVwbG9hZGluZyB0aGUgZGF0YS4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp1aW50MzJfdCB1aVRyYWNlR2V0VHJhY2VCdWZmZXJTaXplKHZvaWQpOw0KDQojaWYgKElOQ0xVREVfVVNFUl9FVkVOVFMgPT0gMSkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHhUcmFjZU9wZW5MYWJlbA0KICogDQogKiBDcmVhdGVzIHVzZXIgZXZlbnQgbGFiZWxzIGZvciB1c2VyIGV2ZW50IGNoYW5uZWxzIG9yIGZvciBpbmRpdmlkdWFsIGV2ZW50cy4NCiAqIFVzZXIgZXZlbnRzIGNhbiBiZSB1c2VkIHRvIGxvZyBhcHBsaWNhdGlvbiBldmVudHMgYW5kIGRhdGEgZm9yIGRpc3BsYXkgaW4NCiAqIHRoZSB2aXN1YWxpemF0aW9uIHRvb2wuIEEgdXNlciBldmVudCBpcyBpZGVudGlmaWVkIGJ5IGEgbGFiZWwsIGkuZS4sIGEgc3RyaW5nLA0KICogd2hpY2ggaXMgc3RvcmVkIGluIHRoZSByZWNvcmRlcidzIHN5bWJvbCB0YWJsZS4NCiAqIFdoZW4gbG9nZ2luZyBhIHVzZXIgZXZlbnQsIGEgbnVtZXJpYyBoYW5kbGUgKHJlZmVyZW5jZSkgdG8gdGhpcyBzdHJpbmcgaXMNCiAqIHVzZWQgdG8gaWRlbnRpZnkgdGhlIGV2ZW50LiBUaGlzIGlzIG9idGFpbmVkIGJ5IGNhbGxpbmcgDQogKiANCiAqICAgICB4VHJhY2VPcGVuTGFiZWwoKQ0KICoNCiAqIHdoaWhjIGFkZHMgdGhlIHN0cmluZyB0byB0aGUgc3ltYm9sIHRhYmxlIChpZiBub3QgYWxyZWFkeSBwcmVzZW50KQ0KICogYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgaGFuZGxlLg0KICoNCiAqIFRoaXMgY2FuIGJlIHVzZWQgaW4gdHdvIHdheXM6DQogKg0KICogMS4gVGhlIGhhbmRsZSBpcyBsb29rZWQgdXAgZXZlcnkgdGltZSwgd2hlbiBzdG9yaW5nIHRoZSB1c2VyIGV2ZW50Lg0KICoNCiAqIEV4YW1wbGU6DQogKiAgICAgdlRyYWNlVXNlckV2ZW50KHhUcmFjZU9wZW5MYWJlbCgiTXlVc2VyRXZlbnQiKSk7DQogKg0KICogMi4gVGhlIGxhYmVsIGlzIHJlZ2lzdGVyZWQganVzdCBvbmNlLCB3aXRoIHRoZSBoYW5kbGUgc3RvcmVkIGluIGFuDQogKiAgYXBwbGljYXRpb24gdmFyaWFibGUgLSBtdWNoIGxpa2UgdXNpbmcgYSBmaWxlIGhhbmRsZS4NCiAqDQogKiBFeGFtcGxlOg0KICogICAgIG15RXZlbnRIYW5kbGUgPSB4VHJhY2VPcGVuTGFiZWwoIk15VXNlckV2ZW50Iik7DQogKiAgICAgLi4uDQogKiAgICAgdlRyYWNlVXNlckV2ZW50KG15RXZlbnRIYW5kbGUpOw0KICoNCiAqIFRoZSBzZWNvbmQgb3B0aW9uIGlzIGZhc3RlciBzaW5jZSBubyBsb29rdXAgaXMgcmVxdWlyZWQgb24gZWFjaCBldmVudCwgYW5kIA0KICogdGhlcmVmb3JlIHJlY29tbWVuZGVkIGZvciB1c2VyIGV2ZW50cyB0aGF0IGFyZSBmcmVxdWVudGx5DQogKiBleGVjdXRlZCBhbmQvb3IgbG9jYXRlZCBpbiB0aW1lLWNyaXRpY2FsIGNvZGUuIFRoZSBsb29rdXAgb3BlcmF0aW9uIGlzDQogKiBob3dldmVyIGZhaXJseSBmYXN0IGR1ZSB0byB0aGUgZGVzaWduIG9mIHRoZSBzeW1ib2wgdGFibGUuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KdHJhY2VMYWJlbCB4VHJhY2VPcGVuTGFiZWwoY2hhciogbGFiZWwpOw0KDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlVXNlckV2ZW50DQogKg0KICogQmFzaWMgdXNlciBldmVudCAoU3RhbmRhcmQgYW5kIFByb2Zlc3Npb25hbCBFZGl0aW9uIG9ubHkpDQogKiANCiAqIEdlbmVyYXRlcyBhIFVzZXIgRXZlbnQgd2l0aCBhIHRleHQgbGFiZWwuIFRoZSBsYWJlbCBpcyBjcmVhdGVkL2xvb2tlZCB1cA0KICogaW4gdGhlIHN5bWJvbCB0YWJsZSB1c2luZyB4VHJhY2VPcGVuTGFiZWwuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VVc2VyRXZlbnQodHJhY2VMYWJlbCBldmVudExhYmVsKTsNCg0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVByaW50RiANCiAqIA0KICogQWR2YW5jZWQgdXNlciBldmVudHMgKFByb2Zlc3Npb25hbCBFZGl0aW9uIG9ubHkpDQogKg0KICogR2VuZXJhdGVzIFVzZXIgRXZlbnQgd2l0aCBmb3JtYXR0ZWQgdGV4dCBhbmQgZGF0YSwgc2ltaWxhciB0byBhICJwcmludGYiLg0KICogSXQgaXMgdmVyeSBmYXN0IGNvbXBhcmVkIHRvIGEgbm9ybWFsICJwcmludGYiIHNpbmNlIHRoaXMgZnVuY3Rpb24gb25seSANCiAqIHN0b3JlcyB0aGUgYXJndW1lbnRzLiBUaGUgYWN0dWFsIGZvcm1hdHRpbmcgaXMgZG9uZQ0KICogb24gdGhlIGhvc3QgUEMgd2hlbiB0aGUgdHJhY2UgaXMgZGlzcGxheWVkIGluIHRoZSB2aWV3ZXIgdG9vbC4gDQogKg0KICogVXNlciBFdmVudCBsYWJlbHMgYXJlIGNyZWF0ZWQgdXNpbmcgeFRyYWNlT3BlbkxhYmVsLg0KICogRXhhbXBsZToNCiAqDQogKiAgICAgdHJhY2VMYWJlbCBhZGNfdWVjaGFubmVsID0geFRyYWNlT3BlbkxhYmVsKCJBREMgVXNlciBFdmVudHMiKTsNCiAqICAgICAuLi4NCiAqICAgICB2VHJhY2VQcmludChhZGNfdWVjaGFubmVsLCANCiAqICAgICAgICAgICAgICAgICAiQURDIGNoYW5uZWwgJWQ6ICVsZiB2b2x0cyIsIA0KICogICAgICAgICAgICAgICAgIGNoLCAoZG91YmxlKWFkY19yZWFkaW5nLyhkb3VibGUpc2NhbGUpOw0KICoNCiAqIFRoaXMgY2FuIGJlIGNvbWJpbmVkIGludG8gb25lIGxpbmUsIGlmIGRlc2lyZWQsIGJ1dCB0aGlzIGlzIHNsb3dlcjoNCiAqDQogKiAgICAgdlRyYWNlUHJpbnQoeFRyYWNlT3BlbkxhYmVsKCJBREMgVXNlciBFdmVudHMiKSwgDQogKiAgICAgICAgICAgICAgICAgIkFEQyBjaGFubmVsICVkOiAlbGYgdm9sdHMiLCANCiAqICAgICAgICAgICAgICAgICBjaCwgKGRvdWJsZSlhZGNfcmVhZGluZy8oZG91YmxlKXNjYWxlKTsNCiAqDQogKiBDYWxsaW5nIHhUcmFjZU9wZW5MYWJlbCBtdWx0aXBsZSB0aW1lcyB3aWxsIG5vdCBjcmVhdGUgZHVwbGljYXRlIGVudHJpZXMsIGJ1dA0KICogaXQgaXMgb2YgY291cnNlIGZhc3RlciB0byBqdXN0IGRvIGl0IG9uY2UsIGFuZCB0aGVuIGtlZXAgdGhlIGhhbmRsZSBmb3IgbGF0ZXIgDQogKiB1c2UuIElmIHlvdSBkb260dCBoYXZlIGFueSBkYXRhIGFyZ3VtZW50cywgb25seSBhIHRleHQgbGFiZWwvc3RyaW5nLCBpdCBpcyANCiAqIGJldHRlciB0byB1c2UgdlRyYWNlVXNlckV2ZW50IC0gaXQgaXMgZmFzdGVyLg0KICoNCiAqIEZvcm1hdCBzcGVjaWZpZXJzIHN1cHBvcnRlZDoNCiAqICAlZCAtIDMyIGJpdCBzaWduZWQgaW50ZWdlcg0KICogICV1IC0gMzIgYml0IHVuc2lnbmVkIGludGVnZXINCiAqICAlZiAtIDMyIGJpdCBmbG9hdA0KICogICVzIC0gc3RyaW5nIChpcyBjb3BpZWQgdG8gdGhlIHJlY29yZGVyIHN5bWJvbCB0YWJsZSkNCiAqICAlaGQgLSAxNiBiaXQgc2lnbmVkIGludGVnZXINCiAqICAlaHUgLSAxNiBiaXQgdW5zaWduZWQgaW50ZWdlcg0KICogICViZCAtIDggYml0IHNpZ25lZCBpbnRlZ2VyDQogKiAgJWJ1IC0gOCBiaXQgdW5zaWduZWQgaW50ZWdlcg0KICogICVsZiAtIGRvdWJsZS1wcmVjaXNpb24gZmxvYXQNCiAqIA0KICogVXAgdG8gMTUgZGF0YSBhcmd1bWVudHMgYXJlIGFsbG93ZWQsIHdpdGggYSB0b3RhbCBzaXplIG9mIG1heGltdW0gMzIgYnl0ZS4NCiAqIEluIGNhc2UgdGhpcyBpcyBleGNlZWRlZCwgdGhlIHVzZXIgZXZlbnQgaXMgY2hhbmdlZCBpbnRvIGFuIGVycm9yIG1lc3NhZ2UuDQogKiANCiAqIFRoZSBkYXRhIGlzIHN0b3JlZCBpbiB0cmFjZSBidWZmZXIsIGFuZCBpcyBwYWNrZWQgdG8gYWxsb3cgc3RvcmluZyBtdWx0aXBsZSANCiAqIHNtYWxsZXIgZGF0YSBlbnRyaWVzIGluIHRoZSBzYW1lIDQtYnl0ZSByZWNvcmQsIGUuZy4sIGZvdXIgOC1iaXQgdmFsdWVzLg0KICogQSBzdHJpbmcgcmVxdWlyZXMgdHdvIGJ5dGVzLCBhcyB0aGUgc3ltYm9sIHRhYmxlIGlzIGxpbWl0ZWQgdG8gNjRLLiBTdG9yaW5nIGEgDQogKiBkb3VibGUgKCVsZikgdXNlcyB0d28gcmVjb3Jkcywgc28gdGhpcyBpcyBxdWl0ZSBjb3N0bHkuIFVzZSBmbG9hdCAoJWYpIHVubGVzcw0KICogdGhlIGhpZ2hlciBwcmVjaXNpb24gaXMgcmVhbGx5IG5lY2Vzc2FyeS4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovIA0Kdm9pZCB2VHJhY2VQcmludEYodHJhY2VMYWJlbCBldmVudExhYmVsLCBjb25zdCBjaGFyKiBmb3JtYXRTdHIsIC4uLik7DQoNCiNlbHNlDQoNCiNkZWZpbmUgdlRyYWNlUHJpbnRGKGV2ZW50TGFiZWwsIGZvcm1hdFN0ciwgLi4uKTsNCiNkZWZpbmUgeFRyYWNlT3BlbkxhYmVsKGxhYmVsKSAwDQojZGVmaW5lIHZUcmFjZVVzZXJFdmVudChldmVudExhYmVsKSANCg0KI2VuZGlmDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZUV4Y2x1ZGVUYXNrDQogKg0KICogRXhjbHVkZXMgYSB0YXNrIGZyb20gdGhlIHJlY29yZGluZyB1c2luZyBhIGZsYWcgaW4gdGhlIE9iamVjdCBQcm9wZXJ0eSBUYWJsZS4NCiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiBzb21lIGlycmVsZXZhbnQgdGFzayBpcyB2ZXJ5IGZyZXF1ZW50IGFuZCBpcyAiZWF0aW5nDQogKiB1cCB0aGUgYnVmZmVyIi4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIHRoZSB0YXNrIGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCANCiAqIGJlZm9yZSBzdGFydGluZyB0aGUgRnJlZVJUT1Mgc2NoZWR1bGVyLg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VFeGNsdWRlVGFza0Zyb21TY2hlZHVsaW5nVHJhY2UoY29uc3QgY2hhciogbmFtZSk7DQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbHNlDQoNCiNpbmNsdWRlICJ0cmNQb3J0LmgiDQoNCiNkZWZpbmUgdlRyYWNlSW5pdCgpDQojZGVmaW5lIHZUcmFjZVN0YXJ0KCkNCiNkZWZpbmUgdlRyYWNlU3RvcCgpDQojZGVmaW5lIHZUcmFjZUNsZWFyKCkNCiNkZWZpbmUgdlRyYWNlR2V0VHJhY2VCdWZmZXIoKSAoKHZvaWQqKTApDQojZGVmaW5lIHVpVHJhY2VHZXRUcmFjZUJ1ZmZlclNpemUoKSAwDQojZGVmaW5lIHhUcmFjZU9wZW5MYWJlbChsYWJlbCkgMA0KI2RlZmluZSB2VHJhY2VVc2VyRXZlbnQoZXZlbnRMYWJlbCkNCiNkZWZpbmUgdlRyYWNlUHJpbnRGKGV2ZW50TGFiZWwsZm9ybWF0U3RyLC4uLikNCiNkZWZpbmUgdlRyYWNlRXhjbHVkZVRhc2tGcm9tU2NoZWR1bGluZ1RyYWNlKG5hbWUpDQojZGVmaW5lIHZUcmFjZVNldFF1ZXVlTmFtZShxdWV1ZSwgbmFtZSkNCiNkZWZpbmUgdlRyYWNlVGFza1NraXBEZWZhdWx0SW5zdGFuY2VGaW5pc2hlZEV2ZW50cygpDQojZGVmaW5lIHZUcmFjZVNldElTUlByb3BlcnRpZXMoaGFuZGxlLCBuYW1lLCBwcmlvcml0eSkNCiNkZWZpbmUgdlRyYWNlU3RvcmVJU1JCZWdpbihpZCkNCiNkZWZpbmUgdlRyYWNlU3RvcmVJU1JFbmQoKQ0KI2VuZGlmDQojZW5kaWYNCg==