LyoNCiAqIFByb2plY3Q6IFZpektpdA0KICogVmVyc2lvbjogMi4zDQogDQogKiBEYXRlOiAyMDA5MDgyMw0KICogRmlsZTogU3RkQWZ4LmgNCiAqDQogKi8NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KDQpDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOSBIZWlrbyBXaWNobWFubiAoaHR0cDovL3d3dy5pbWFnb21hdC5kZS92aXpraXQpDQoNCg0KVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzZWQgb3IgaW1wbGllZCB3YXJyYW50eS4gDQpJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcw0KYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4NCg0KUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsDQppbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0DQpmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6DQoNCjEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgDQogICB5b3UgbXVzdCBub3QgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiANCiAgIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IA0KICAgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCANCiAgIGJ1dCBpcyBub3QgcmVxdWlyZWQuDQoNCjIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgDQogICBhbmQgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLg0KDQozLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLg0KDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyBzdGRhZnguaCA6IEluY2x1ZGUtRGF0ZWkgZvxyIFN0YW5kYXJkLVN5c3RlbS1JbmNsdWRlLURhdGVpZW4sDQovLyAgb2RlciBwcm9qZWt0c3BlemlmaXNjaGUgSW5jbHVkZS1EYXRlaWVuLCBkaWUgaOR1ZmlnIGJlbnV0enQsIGFiZXINCi8vICAgICAgaW4gdW5yZWdlbG3k32lnZW4gQWJzdORuZGVuIGdl5G5kZXJ0IHdlcmRlbi4NCi8vDQoNCiNpZiAhZGVmaW5lZChBRlhfU1REQUZYX0hfXzFDREFCMDMzX0U4QTJfNDYxOV9CMDVCX0Y1N0U5MzY3REQ0Nl9fSU5DTFVERURfKQ0KI2RlZmluZSBBRlhfU1REQUZYX0hfXzFDREFCMDMzX0U4QTJfNDYxOV9CMDVCX0Y1N0U5MzY3REQ0Nl9fSU5DTFVERURfDQoNCiNpZiBfTVNDX1ZFUiA+IDEwMDANCiNwcmFnbWEgb25jZQ0KI2VuZGlmIC8vIF9NU0NfVkVSID4gMTAwMA0KDQojZGVmaW5lIFZDX0VYVFJBTEVBTgkJLy8gU2VsdGVuIHZlcndlbmRldGUgVGVpbGUgZGVyIFdpbmRvd3MtSGVhZGVyIG5pY2h0IGVpbmJpbmRlbg0KDQojaW5jbHVkZSA8YWZ4d2luLmg+ICAgICAgICAgLy8gTUZDLUtlcm4tIHVuZCAtU3RhbmRhcmRrb21wb25lbnRlbg0KI2luY2x1ZGUgPGFmeGV4dC5oPiAgICAgICAgIC8vIE1GQy1FcndlaXRlcnVuZ2VuDQoNCiNpZm5kZWYgX0FGWF9OT19PTEVfU1VQUE9SVA0KI2luY2x1ZGUgPGFmeG9sZS5oPiAgICAgICAgIC8vIE1GQyBPTEUtS2xhc3Nlbg0KI2luY2x1ZGUgPGFmeG9kbGdzLmg+ICAgICAgIC8vIE1GQyBPTEUtRGlhbG9nZmVsZGtsYXNzZW4NCiNpbmNsdWRlIDxhZnhkaXNwLmg+ICAgICAgICAvLyBNRkMgQXV0b21hdGlzaWVydW5nc2tsYXNzZW4NCiNlbmRpZiAvLyBfQUZYX05PX09MRV9TVVBQT1JUDQoNCg0KI2lmbmRlZiBfQUZYX05PX0RCX1NVUFBPUlQNCiNpbmNsdWRlIDxhZnhkYi5oPgkJCS8vIE1GQyBPREJDLURhdGVuYmFua2tsYXNzZW4NCiNlbmRpZiAvLyBfQUZYX05PX0RCX1NVUFBPUlQNCg0KI2lmbmRlZiBfQUZYX05PX0RBT19TVVBQT1JUDQojaW5jbHVkZSA8YWZ4ZGFvLmg+CQkJLy8gTUZDIERBTy1EYXRlbmJhbmtrbGFzc2VuDQojZW5kaWYgLy8gX0FGWF9OT19EQU9fU1VQUE9SVA0KDQojaW5jbHVkZSA8YWZ4ZHRjdGwuaD4JCS8vIE1GQy1VbnRlcnN0/HR6dW5nIGb8ciBhbGxnZW1laW5lIFN0ZXVlcmVsZW1lbnRlIHZvbiBJbnRlcm5ldCBFeHBsb3JlciA0DQojaWZuZGVmIF9BRlhfTk9fQUZYQ01OX1NVUFBPUlQNCiNpbmNsdWRlIDxhZnhjbW4uaD4JCQkvLyBNRkMtVW50ZXJzdPx0enVuZyBm/HIgZ+RuZ2lnZSBXaW5kb3dzLVN0ZXVlcmVsZW1lbnRlDQojZW5kaWYgLy8gX0FGWF9OT19BRlhDTU5fU1VQUE9SVA0KDQoNCi8ve3tBRlhfSU5TRVJUX0xPQ0FUSU9OfX0NCi8vIE1pY3Jvc29mdCBWaXN1YWwgQysrIGb8Z3QgdW5taXR0ZWxiYXIgdm9yIGRlciB2b3JoZXJnZWhlbmRlbiBaZWlsZSB6dXPkdHpsaWNoZSBEZWtsYXJhdGlvbmVuIGVpbi4NCg0KI2VuZGlmIC8vICFkZWZpbmVkKEFGWF9TVERBRlhfSF9fMUNEQUIwMzNfRThBMl80NjE5X0IwNUJfRjU3RTkzNjdERDQ2X19JTkNMVURFRF8pDQo=