LyoqKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgMjAwNyBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKioqKioqKioqKioqKioqKioNCiogRmlsZSBOYW1lICAgICAgICAgIDogc3RtMzJmMTB4X2V4dGkuYw0KKiBBdXRob3IgICAgICAgICAgICAgOiBNQ0QgQXBwbGljYXRpb24gVGVhbQ0KKiBEYXRlIEZpcnN0IElzc3VlZCAgOiAwOS8yOS8yMDA2DQoqIERlc2NyaXB0aW9uICAgICAgICA6IFRoaXMgZmlsZSBwcm92aWRlcyBhbGwgdGhlIEVYVEkgZmlybXdhcmUgZnVuY3Rpb25zLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogSGlzdG9yeToNCiogMDQvMDIvMjAwNzogVjAuMg0KKiAwMi8wNS8yMDA3OiBWMC4xDQoqIDA5LzI5LzIwMDY6IFYwLjAxDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiBUSEUgUFJFU0VOVCBTT0ZUV0FSRSBXSElDSCBJUyBGT1IgR1VJREFOQ0UgT05MWSBBSU1TIEFUIFBST1ZJRElORyBDVVNUT01FUlMNCiogV0lUSCBDT0RJTkcgSU5GT1JNQVRJT04gUkVHQVJESU5HIFRIRUlSIFBST0RVQ1RTIElOIE9SREVSIEZPUiBUSEVNIFRPIFNBVkUgVElNRS4NCiogQVMgQSBSRVNVTFQsIFNUTUlDUk9FTEVDVFJPTklDUyBTSEFMTCBOT1QgQkUgSEVMRCBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsDQoqIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBXSVRIIFJFU1BFQ1QgVE8gQU5ZIENMQUlNUyBBUklTSU5HIEZST00gVEhFDQoqIENPTlRFTlQgT0YgU1VDSCBTT0ZUV0FSRSBBTkQvT1IgVEhFIFVTRSBNQURFIEJZIENVU1RPTUVSUyBPRiBUSEUgQ09ESU5HDQoqIElORk9STUFUSU9OIENPTlRBSU5FRCBIRVJFSU4gSU4gQ09OTkVDVElPTiBXSVRIIFRIRUlSIFBST0RVQ1RTLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiNpbmNsdWRlICJzdG0zMmYxMHhfZXh0aS5oIg0KDQovKiBQcml2YXRlIHR5cGVkZWYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogUHJpdmF0ZSBkZWZpbmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiNkZWZpbmUgRVhUSV9MaW5lTm9uZSAgICAoKHUzMikweDAwMDAwKSAgLyogTm8gaW50ZXJydXB0IHNlbGVjdGVkICovDQoNCi8qIFByaXZhdGUgbWFjcm8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQovKiBQcml2YXRlIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KLyogUHJpdmF0ZSBmdW5jdGlvbiBwcm90b3R5cGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi8qIFByaXZhdGUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIEZ1bmN0aW9uIE5hbWUgIDogRVhUSV9EZUluaXQNCiogRGVzY3JpcHRpb24gICAgOiBEZWluaXRpYWxpemVzIHRoZSBFWFRJIHBlcmlwaGVyYWwgcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgDQoqICAgICAgICAgICAgICAgICAgcmVzZXQgdmFsdWVzLg0KKiBJbnB1dCAgICAgICAgICA6IE5vbmUNCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogTm9uZQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgRVhUSV9EZUluaXQodm9pZCkNCnsNCiAgRVhUSS0+SU1SID0gMHgwMDAwMDAwMDsNCiAgRVhUSS0+RU1SID0gMHgwMDAwMDAwMDsNCiAgRVhUSS0+UlRTUiA9IDB4MDAwMDAwMDA7IA0KICBFWFRJLT5GVFNSID0gMHgwMDAwMDAwMDsgDQogIEVYVEktPlBSID0gMHgwMDA3RkZGRjsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBFWFRJX0luaXQNCiogRGVzY3JpcHRpb24gICAgOiBJbml0aWFsaXplcyB0aGUgRVhUSSBwZXJpcGhlcmFsIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkDQoqICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycyBpbiB0aGUgRVhUSV9Jbml0U3RydWN0Lg0KKiBJbnB1dCAgICAgICAgICA6IC0gRVhUSV9Jbml0U3RydWN0OiBwb2ludGVyIHRvIGEgRVhUSV9Jbml0VHlwZURlZiBzdHJ1Y3R1cmUNCiogICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbnMgdGhlIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBFWFRJDQoqICAgICAgICAgICAgICAgICAgICBwZXJpcGhlcmFsLg0KKiBPdXRwdXQgICAgICAgICA6IE5vbmUNCiogUmV0dXJuICAgICAgICAgOiBOb25lDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCBFWFRJX0luaXQoRVhUSV9Jbml0VHlwZURlZiogRVhUSV9Jbml0U3RydWN0KQ0Kew0KICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KICBhc3NlcnQoSVNfRVhUSV9NT0RFKEVYVElfSW5pdFN0cnVjdC0+RVhUSV9Nb2RlKSk7DQogIGFzc2VydChJU19FWFRJX1RSSUdHRVIoRVhUSV9Jbml0U3RydWN0LT5FWFRJX1RyaWdnZXIpKTsNCiAgYXNzZXJ0KElTX0VYVElfTElORShFWFRJX0luaXRTdHJ1Y3QtPkVYVElfTGluZSkpOyAgDQogIGFzc2VydChJU19GVU5DVElPTkFMX1NUQVRFKEVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lQ21kKSk7DQogICAgIA0KICBpZiAoRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmVDbWQgIT0gRElTQUJMRSkNCiAgew0KICAgICoodTMyICopKEVYVElfQkFTRSArICh1MzIpRVhUSV9Jbml0U3RydWN0LT5FWFRJX01vZGUpfD0gRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmU7DQoNCiAgICAvKiBDbGVhciBSaXNpbmcgRmFsbGluZyBlZGdlIGNvbmZpZ3VyYXRpb24gKi8NCiAgICBFWFRJLT5SVFNSICY9IH5FWFRJX0luaXRTdHJ1Y3QtPkVYVElfTGluZTsNCiAgICBFWFRJLT5GVFNSICY9IH5FWFRJX0luaXRTdHJ1Y3QtPkVYVElfTGluZTsNCiAgICANCiAgICAvKiBTZWxlY3QgdGhlIHRyaWdnZXIgZm9yIHRoZSBzZWxlY3RlZCBleHRlcm5hbCBpbnRlcnJ1cHRzICovDQogICAgaWYgKEVYVElfSW5pdFN0cnVjdC0+RVhUSV9UcmlnZ2VyID09IEVYVElfVHJpZ2dlcl9SaXNpbmdfRmFsbGluZykNCiAgICB7DQogICAgICAvKiBSaXNpbmcgRmFsbGluZyBlZGdlICovDQogICAgICBFWFRJLT5SVFNSIHw9IEVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lOw0KICAgICAgRVhUSS0+RlRTUiB8PSBFWFRJX0luaXRTdHJ1Y3QtPkVYVElfTGluZTsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgICoodTMyICopKEVYVElfQkFTRSArICh1MzIpRVhUSV9Jbml0U3RydWN0LT5FWFRJX1RyaWdnZXIpfD0gRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmU7DQogICAgfQ0KICB9DQogIGVsc2UNCiAgew0KICAgIC8qIERpc2FibGUgdGhlIHNlbGVjdGVkIGV4dGVybmFsIGxpbmVzICovDQogICAgKih1MzIgKikoRVhUSV9CQVNFICsgKHUzMilFWFRJX0luaXRTdHJ1Y3QtPkVYVElfTW9kZSkmPSB+RVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmU7DQogIH0NCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBFWFRJX1N0cnVjdEluaXQNCiogRGVzY3JpcHRpb24gICAgOiBGaWxscyBlYWNoIEVYVElfSW5pdFN0cnVjdCBtZW1iZXIgd2l0aCBpdHMgcmVzZXQgdmFsdWUuDQoqIElucHV0ICAgICAgICAgIDogLSBFWFRJX0luaXRTdHJ1Y3Q6IHBvaW50ZXIgdG8gYSBFWFRJX0luaXRUeXBlRGVmIHN0cnVjdHVyZQ0KKiAgICAgICAgICAgICAgICAgICAgd2hpY2ggd2lsbCBiZSBpbml0aWFsaXplZC4NCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogTm9uZQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgRVhUSV9TdHJ1Y3RJbml0KEVYVElfSW5pdFR5cGVEZWYqIEVYVElfSW5pdFN0cnVjdCkNCnsNCiAgRVhUSV9Jbml0U3RydWN0LT5FWFRJX0xpbmUgPSBFWFRJX0xpbmVOb25lOw0KICBFWFRJX0luaXRTdHJ1Y3QtPkVYVElfTW9kZSA9IEVYVElfTW9kZV9JbnRlcnJ1cHQ7DQogIEVYVElfSW5pdFN0cnVjdC0+RVhUSV9UcmlnZ2VyID0gRVhUSV9UcmlnZ2VyX0ZhbGxpbmc7DQogIEVYVElfSW5pdFN0cnVjdC0+RVhUSV9MaW5lQ21kID0gRElTQUJMRTsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBFWFRJX0dlbmVyYXRlU1dJbnRlcnJ1cHQNCiogRGVzY3JpcHRpb24gICAgOiBHZW5lcmF0ZXMgYSBTb2Z0d2FyZSBpbnRlcnJ1cHQuDQoqIElucHV0ICAgICAgICAgIDogLSBFWFRJX0xpbmU6IHNwZWNpZmllcyB0aGUgRVhUSSBsaW5lcyB0byBiZSBlbmFibGVkIG9yDQoqICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZC4NCiogICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToNCiogICAgICAgICAgICAgICAgICAgICAgIC0gRVhUSV9MaW5leDogRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgeCB3aGVyZSB4KDAuLjE4KQ0KKiBPdXRwdXQgICAgICAgICA6IE5vbmUNCiogUmV0dXJuICAgICAgICAgOiBOb25lDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCBFWFRJX0dlbmVyYXRlU1dJbnRlcnJ1cHQodTMyIEVYVElfTGluZSkNCnsNCiAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCiAgYXNzZXJ0KElTX0VYVElfTElORShFWFRJX0xpbmUpKTsNCiAgDQogIEVYVEktPlNXSUVSIHw9IEVYVElfTGluZTsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiogRnVuY3Rpb24gTmFtZSAgOiBFWFRJX0dldEZsYWdTdGF0dXMNCiogRGVzY3JpcHRpb24gICAgOiBDaGVja3Mgd2hldGhlciB0aGUgc3BlY2lmaWVkIEVYVEkgbGluZSBmbGFnIGlzIHNldCBvciBub3QuDQoqIElucHV0ICAgICAgICAgIDogLSBFWFRJX0xpbmU6IHNwZWNpZmllcyB0aGUgRVhUSSBsaW5lcyBmbGFnIHRvIGNoZWNrLg0KKiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOg0KKiAgICAgICAgICAgICAgICAgICAgICAgLSBFWFRJX0xpbmV4OiBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSB4IHdoZXJlIHgoMC4uMTgpDQoqIE91dHB1dCAgICAgICAgIDogTm9uZQ0KKiBSZXR1cm4gICAgICAgICA6IFRoZSBuZXcgc3RhdGUgb2YgRVhUSV9MaW5lIChTRVQgb3IgUkVTRVQpLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCkZsYWdTdGF0dXMgRVhUSV9HZXRGbGFnU3RhdHVzKHUzMiBFWFRJX0xpbmUpDQp7DQogIEZsYWdTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQoNCiAgLyogQ2hlY2sgdGhlIHBhcmFtZXRlcnMgKi8NCiAgYXNzZXJ0KElTX0dFVF9FWFRJX0xJTkUoRVhUSV9MaW5lKSk7DQogIA0KICBpZiAoKEVYVEktPlBSICYgRVhUSV9MaW5lKSAhPSAodTMyKVJFU0VUKQ0KICB7DQogICAgYml0c3RhdHVzID0gU0VUOw0KICB9DQogIGVsc2UNCiAgew0KICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KICB9DQogIHJldHVybiBiaXRzdGF0dXM7DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIEZ1bmN0aW9uIE5hbWUgIDogRVhUSV9DbGVhckZsYWcNCiogRGVzY3JpcHRpb24gICAgOiBDbGVhcnMgdGhlIEVYVEmScyBsaW5lIHBlbmRpbmcgZmxhZ3MuDQoqIElucHV0ICAgICAgICAgIDogLSBFWFRJX0xpbmU6IHNwZWNpZmllcyB0aGUgRVhUSSBsaW5lcyBmbGFncyB0byBjbGVhci4NCiogICAgICAgICAgICAgICAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZToNCiogICAgICAgICAgICAgICAgICAgICAgIC0gRVhUSV9MaW5leDogRXh0ZXJuYWwgaW50ZXJydXB0IGxpbmUgeCB3aGVyZSB4KDAuLjE4KQ0KKiBPdXRwdXQgICAgICAgICA6IE5vbmUNCiogUmV0dXJuICAgICAgICAgOiBOb25lDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCBFWFRJX0NsZWFyRmxhZyh1MzIgRVhUSV9MaW5lKQ0Kew0KICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KICBhc3NlcnQoSVNfRVhUSV9MSU5FKEVYVElfTGluZSkpOw0KICANCiAgRVhUSS0+UFIgPSBFWFRJX0xpbmU7DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIEZ1bmN0aW9uIE5hbWUgIDogRVhUSV9HZXRJVFN0YXR1cw0KKiBEZXNjcmlwdGlvbiAgICA6IENoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgRVhUSSBsaW5lIGlzIGFzc2VydGVkIG9yIG5vdC4NCiogSW5wdXQgICAgICAgICAgOiAtIEVYVElfTGluZTogc3BlY2lmaWVzIHRoZSBFWFRJIGxpbmVzIHRvIGNoZWNrLg0KKiAgICAgICAgICAgICAgICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlOg0KKiAgICAgICAgICAgICAgICAgICAgICAgLSBFWFRJX0xpbmV4OiBFeHRlcm5hbCBpbnRlcnJ1cHQgbGluZSB4IHdoZXJlIHgoMC4uMTgpDQoqIE91dHB1dCAgICAgICAgIDogTm9uZQ0KKiBSZXR1cm4gICAgICAgICA6IFRoZSBuZXcgc3RhdGUgb2YgRVhUSV9MaW5lIChTRVQgb3IgUkVTRVQpLg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCklUU3RhdHVzIEVYVElfR2V0SVRTdGF0dXModTMyIEVYVElfTGluZSkNCnsNCiAgSVRTdGF0dXMgYml0c3RhdHVzID0gUkVTRVQ7DQogIHUzMiBlbmFibGVzdGF0dXMgPSAwOw0KDQogIC8qIENoZWNrIHRoZSBwYXJhbWV0ZXJzICovDQogIGFzc2VydChJU19HRVRfRVhUSV9MSU5FKEVYVElfTGluZSkpOw0KICANCiAgZW5hYmxlc3RhdHVzID0gIEVYVEktPklNUiAmIEVYVElfTGluZTsNCg0KICBpZiAoKChFWFRJLT5QUiAmIEVYVElfTGluZSkgIT0gKHUzMilSRVNFVCkgJiYgZW5hYmxlc3RhdHVzKQ0KICB7DQogICAgYml0c3RhdHVzID0gU0VUOw0KICB9DQogIGVsc2UNCiAgew0KICAgIGJpdHN0YXR1cyA9IFJFU0VUOw0KICB9DQogIHJldHVybiBiaXRzdGF0dXM7DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqIEZ1bmN0aW9uIE5hbWUgIDogRVhUSV9DbGVhcklUUGVuZGluZ0JpdA0KKiBEZXNjcmlwdGlvbiAgICA6IENsZWFycyB0aGUgRVhUSZJzIGxpbmUgcGVuZGluZyBiaXRzLg0KKiBJbnB1dCAgICAgICAgICA6IC0gRVhUSV9MaW5lOiBzcGVjaWZpZXMgdGhlIEVYVEkgbGluZXMgdG8gY2xlYXIuDQoqICAgICAgICAgICAgICAgICAgICBUaGlzIHBhcmFtZXRlciBjYW4gYmU6DQoqICAgICAgICAgICAgICAgICAgICAgICAtIEVYVElfTGluZXg6IEV4dGVybmFsIGludGVycnVwdCBsaW5lIHggd2hlcmUgeCgwLi4xOCkNCiogT3V0cHV0ICAgICAgICAgOiBOb25lDQoqIFJldHVybiAgICAgICAgIDogTm9uZQ0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgRVhUSV9DbGVhcklUUGVuZGluZ0JpdCh1MzIgRVhUSV9MaW5lKQ0Kew0KICAvKiBDaGVjayB0aGUgcGFyYW1ldGVycyAqLw0KICBhc3NlcnQoSVNfRVhUSV9MSU5FKEVYVElfTGluZSkpOw0KICANCiAgRVhUSS0+UFIgPSBFWFRJX0xpbmU7DQp9DQoNCi8qKioqKioqKioqKioqKioqKioqIChDKSBDT1BZUklHSFQgMjAwNyBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQo=