ZGlmZiAtLWdpdCBhL2F1dGh6LWZzL3BvbS54bWwgYi9hdXRoei1mcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjg0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRoei1mcy9wb20ueG1sCkBAIC0wLDAgKzEsMTkwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgID09PT09PT09PT09PUxJQ0VOU0VfU1RBUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIG9yZy5vbmFwLmFhZg0KKyAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogQ29weXJpZ2h0IMKpIDIwMTcgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisgICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICogDQorICAgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgKiANCisgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisgICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisgICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICAqID09PT09PT09PT09PUxJQ0VOU0VfRU5EPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKg0KKyAgKiBFQ09NUCBpcyBhIHRyYWRlbWFyayBhbmQgc2VydmljZSBtYXJrIG9mIEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAgKg0KKy0tPg0KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPg0KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorCTxwYXJlbnQ+DQorCQk8Z3JvdXBJZD5vcmcub25hcC5hYWYuYXV0aHo8L2dyb3VwSWQ+DQorCQk8YXJ0aWZhY3RJZD5wYXJlbnQ8L2FydGlmYWN0SWQ+DQorCQk8dmVyc2lvbj4xLjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCisJCTxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKwk8L3BhcmVudD4NCisJCQ0KKwk8YXJ0aWZhY3RJZD5hdXRoei1mczwvYXJ0aWZhY3RJZD4NCisJPG5hbWU+QXV0aHogRmlsZSBTZXJ2ZXI8L25hbWU+DQorCTxkZXNjcmlwdGlvbj5JbmRlcGVuZGVudCBGaWxlU2VydmVyIHZpYSBIVFRQIChub3QgUykgZm9yIFB1YmxpYyBGaWxlcyAoaS5lLiBDUkxzKTwvZGVzY3JpcHRpb24+DQorCQk8dXJsPmh0dHBzOi8vZ2l0aHViLmNvbS9hdHQvQUFGPC91cmw+DQorCTxsaWNlbnNlcz4NCisJCTxsaWNlbnNlPg0KKwkJPG5hbWU+QlNEIExpY2Vuc2U8L25hbWU+DQorCQk8dXJsPiA8L3VybD4NCisJCTwvbGljZW5zZT4NCisJPC9saWNlbnNlcz4NCisJPGRldmVsb3BlcnM+DQorCQk8ZGV2ZWxvcGVyPg0KKwkJPG5hbWU+Sm9uYXRoYW4gR2F0aG1hbjwvbmFtZT4NCisJCTxlbWFpbD48L2VtYWlsPg0KKwk8b3JnYW5pemF0aW9uPkFUVDwvb3JnYW5pemF0aW9uPg0KKwk8b3JnYW5pemF0aW9uVXJsPjwvb3JnYW5pemF0aW9uVXJsPg0KKwkJPC9kZXZlbG9wZXI+DQorCTwvZGV2ZWxvcGVycz4NCisNCisJPHByb3BlcnRpZXM+DQorCQk8bWF2ZW4udGVzdC5mYWlsdXJlLmlnbm9yZT50cnVlPC9tYXZlbi50ZXN0LmZhaWx1cmUuaWdub3JlPg0KKwkJPHByb2plY3Quc3dtVmVyc2lvbj45PC9wcm9qZWN0LnN3bVZlcnNpb24+DQorCQkJPHByb2plY3QuY2FkaVZlcnNpb24+MS4wLjAtU05BUFNIT1Q8L3Byb2plY3QuY2FkaVZlcnNpb24+DQorICAgICAgICA8bmV4dXNwcm94eT5odHRwczovL25leHVzLm9uYXAub3JnPC9uZXh1c3Byb3h5Pg0KKwkJPHNuYXBzaG90TmV4dXNQYXRoPi9jb250ZW50L3JlcG9zaXRvcmllcy9zbmFwc2hvdHMvPC9zbmFwc2hvdE5leHVzUGF0aD4NCisJCTxyZWxlYXNlTmV4dXNQYXRoPi9jb250ZW50L3JlcG9zaXRvcmllcy9yZWxlYXNlcy88L3JlbGVhc2VOZXh1c1BhdGg+DQorCQk8c3RhZ2luZ05leHVzUGF0aD4vY29udGVudC9yZXBvc2l0b3JpZXMvc3RhZ2luZy88L3N0YWdpbmdOZXh1c1BhdGg+DQorCQk8c2l0ZVBhdGg+L2NvbnRlbnQvc2l0ZXMvc2l0ZS8ke3Byb2plY3QuZ3JvdXBJZH0vJHtwcm9qZWN0LmFydGlmYWN0SWR9LyR7cHJvamVjdC52ZXJzaW9ufTwvc2l0ZVBhdGg+DQorCTwvcHJvcGVydGllcz4NCisJDQorCQkNCisJPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5vbmFwLmFhZi5hdXRoejwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hdXRoei1jb3JlPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+IA0KKwkJCTxncm91cElkPm9yZy5vbmFwLmFhZi5jYWRpPC9ncm91cElkPg0KKwkJCTxhcnRpZmFjdElkPmNhZGktY29yZTwvYXJ0aWZhY3RJZD4NCisJCTwvZGVwZW5kZW5jeT4NCisJCTxkZXBlbmRlbmN5Pg0KKwkJICAgIDxncm91cElkPmNvbS5hdHQuYWZ0PC9ncm91cElkPg0KKyAgCQkJPGFydGlmYWN0SWQ+ZG1lMjwvYXJ0aWZhY3RJZD4NCisgIAkJPC9kZXBlbmRlbmN5Pg0KKwk8L2RlcGVuZGVuY2llcz4NCisJDQorCTxidWlsZD4NCisJCTxwbHVnaW5zPg0KKyAgICAgICAgICAgIDxwbHVnaW4+DQorCQkJCTxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisJCQkJPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisJCQkJCTxjb25maWd1cmF0aW9uPg0KKwkgICAgICAgICAgICAgICAgCTxpbmNsdWRlcz4NCisJICAgICAgICAgICAgICAgIAkJPGluY2x1ZGU+KiovKi5jbGFzczwvaW5jbHVkZT4NCisJICAgICAgICAgICAgICAgIAk8L2luY2x1ZGVzPg0KKwkJCQkJPC9jb25maWd1cmF0aW9uPg0KKwkJCQkJPHZlcnNpb24+Mi4zLjE8L3ZlcnNpb24+DQorCQkJCTwvcGx1Z2luPg0KKw0KKwkJCSAgICA8cGx1Z2luPg0KKwkJCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKwkJCQkJPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisJCQkJCTxjb25maWd1cmF0aW9uPg0KKwkJCQkJCTxza2lwPnRydWU8L3NraXA+DQorCQkJCQk8L2NvbmZpZ3VyYXRpb24+DQorCQkJICAgIDwvcGx1Z2luPg0KKwkJCQkNCisJCQkJDQorCQkJCQkJCQkJPHBsdWdpbj4NCisJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorCQkJPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+DQorCQkJPGNvbmZpZ3VyYXRpb24+DQorCQkJPGZhaWxPbkVycm9yPmZhbHNlPC9mYWlsT25FcnJvcj4NCisJCQk8L2NvbmZpZ3VyYXRpb24+DQorCQkJPGV4ZWN1dGlvbnM+DQorCQkJCTxleGVjdXRpb24+DQorCQkJCQk8aWQ+YXR0YWNoLWphdmFkb2NzPC9pZD4NCisJCQkJCTxnb2Fscz4NCisJCQkJCQk8Z29hbD5qYXI8L2dvYWw+DQorCQkJCQk8L2dvYWxzPg0KKwkJCQk8L2V4ZWN1dGlvbj4NCisJCQk8L2V4ZWN1dGlvbnM+DQorCQk8L3BsdWdpbj4gDQorCSAgIA0KKwkgICANCisJICAgICAgIDxwbHVnaW4+DQorCQkgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorCQkgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zb3VyY2UtcGx1Z2luPC9hcnRpZmFjdElkPg0KKwkJICAgICAgPHZlcnNpb24+Mi4yLjE8L3ZlcnNpb24+DQorCQkgICAgICA8ZXhlY3V0aW9ucz4NCisJCQk8ZXhlY3V0aW9uPg0KKwkJCSAgPGlkPmF0dGFjaC1zb3VyY2VzPC9pZD4NCisJCQkgIDxnb2Fscz4NCisJCQkgICAgPGdvYWw+amFyLW5vLWZvcms8L2dvYWw+DQorCQkJICA8L2dvYWxzPg0KKwkJCTwvZXhlY3V0aW9uPg0KKwkJICAgICAgPC9leGVjdXRpb25zPg0KKwkJICAgIDwvcGx1Z2luPg0KKwkJCSA8cGx1Z2luPg0KKwkJCQk8Z3JvdXBJZD5vcmcuc29uYXR5cGUucGx1Z2luczwvZ3JvdXBJZD4NCisJCQkJPGFydGlmYWN0SWQ+bmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQorCQkJCTx2ZXJzaW9uPjEuNi43PC92ZXJzaW9uPg0KKwkJCQk8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPg0KKwkJCQk8Y29uZmlndXJhdGlvbj4NCisJCQkJCTxuZXh1c1VybD4ke25leHVzcHJveHl9PC9uZXh1c1VybD4NCisJCQkJCTxzdGFnaW5nUHJvZmlsZUlkPjE3NmMzMWRmZTE5MGE8L3N0YWdpbmdQcm9maWxlSWQ+DQorCQkJCQk8c2VydmVySWQ+ZWNvbXAtc3RhZ2luZzwvc2VydmVySWQ+DQorCQkJCTwvY29uZmlndXJhdGlvbj4NCisJCQk8L3BsdWdpbj4NCisJCQk8L3BsdWdpbnM+DQorDQorCTwvYnVpbGQ+DQorPGRpc3RyaWJ1dGlvbk1hbmFnZW1lbnQ+DQorCQk8cmVwb3NpdG9yeT4NCisJCQk8aWQ+ZWNvbXAtcmVsZWFzZXM8L2lkPg0KKwkJCTxuYW1lPkFBRiBSZWxlYXNlIFJlcG9zaXRvcnk8L25hbWU+DQorCQkJPHVybD4ke25leHVzcHJveHl9JHtyZWxlYXNlTmV4dXNQYXRofTwvdXJsPg0KKwkJPC9yZXBvc2l0b3J5Pg0KKwkJPHNuYXBzaG90UmVwb3NpdG9yeT4NCisJCQk8aWQ+ZWNvbXAtc25hcHNob3RzPC9pZD4NCisJCQk8bmFtZT5BQUYgU25hcHNob3QgUmVwb3NpdG9yeTwvbmFtZT4NCisJCQk8dXJsPiR7bmV4dXNwcm94eX0ke3NuYXBzaG90TmV4dXNQYXRofTwvdXJsPg0KKwkJPC9zbmFwc2hvdFJlcG9zaXRvcnk+DQorCQk8c2l0ZT4NCisJCQk8aWQ+ZWNvbXAtc2l0ZTwvaWQ+DQorCQkJPHVybD5kYXY6JHtuZXh1c3Byb3h5fSR7c2l0ZVBhdGh9PC91cmw+DQorCQk8L3NpdGU+DQorCTwvZGlzdHJpYnV0aW9uTWFuYWdlbWVudD4NCis8cGx1Z2luUmVwb3NpdG9yaWVzPg0KKyAgICAgICAgPHBsdWdpblJlcG9zaXRvcnk+DQorICAgICAgICAgICAgPGlkPm9uYXAtcGx1Z2luLXNuYXBzaG90czwvaWQ+DQorICAgICAgICAgICAgPHVybD5odHRwczovL25leHVzLm9uYXAub3JnL2NvbnRlbnQvcmVwb3NpdG9yaWVzL3NuYXBzaG90cy88L3VybD4NCisgICAgICAgIDwvcGx1Z2luUmVwb3NpdG9yeT4NCisgICAgPC9wbHVnaW5SZXBvc2l0b3JpZXM+DQorCQ0KKwk8cmVwb3NpdG9yaWVzPg0KKwkJPHJlcG9zaXRvcnk+DQorCQkJPGlkPmNlbnRyYWw8L2lkPg0KKwkJCTxuYW1lPk1hdmVuIDIgcmVwb3NpdG9yeSAyPC9uYW1lPg0KKwkJCTx1cmw+aHR0cDovL3JlcG8yLm1hdmVuLm9yZy9tYXZlbjIvPC91cmw+DQorCQk8L3JlcG9zaXRvcnk+DQorCQk8cmVwb3NpdG9yeT4NCisgICAgICAgICAgICA8aWQ+b25hcC1qYXItc25hcHNob3RzPC9pZD4NCisgICAgICAgICAgICA8dXJsPmh0dHBzOi8vbmV4dXMub25hcC5vcmcvY29udGVudC9yZXBvc2l0b3JpZXMvc25hcHNob3RzPC91cmw+DQorICAgICAgICA8L3JlcG9zaXRvcnk+DQorCQk8cmVwb3NpdG9yeT4NCisJCQk8aWQ+c3ByaW5nLXJlcG88L2lkPg0KKwkJCTxuYW1lPlNwcmluZyByZXBvPC9uYW1lPg0KKwkJCTx1cmw+aHR0cHM6Ly9hcnRpZmFjdHMuYWxmcmVzY28uY29tL25leHVzL2NvbnRlbnQvcmVwb3NpdG9yaWVzL3B1YmxpYy88L3VybD4NCisJCTwvcmVwb3NpdG9yeT4NCisJCTxyZXBvc2l0b3J5Pg0KKwkJCTxpZD5yZXBvc2l0b3J5Lmpib3NzLm9yZy1wdWJsaWM8L2lkPg0KKwkJCTxuYW1lPkpCb3NzLm9yZyBNYXZlbiByZXBvc2l0b3J5PC9uYW1lPg0KKwkJCTx1cmw+aHR0cHM6Ly9yZXBvc2l0b3J5Lmpib3NzLm9yZy9uZXh1cy9jb250ZW50L2dyb3Vwcy9wdWJsaWM8L3VybD4NCisJCTwvcmVwb3NpdG9yeT4NCisJPC9yZXBvc2l0b3JpZXM+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9GaWxlU2VydmVyLnByb3BzIGIvYXV0aHotZnMvc3JjL21haW4vY29uZmlnL0ZpbGVTZXJ2ZXIucHJvcHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxNTA2ZQotLS0gL2Rldi9udWxsCisrKyBiL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9GaWxlU2VydmVyLnByb3BzCkBAIC0wLDAgKzEsMjAgQEAKKyMjCisjIyBBVVRIWiBBUEkgKGF1dGh6LXNlcnZpY2UpIFByb3BlcnRpZXMKKyMjCisKK2hvc3RuYW1lPV9IT1NUTkFNRV8KKworIyMgRElTQ09WRVJZIChETUUyKSBQYXJhbWV0ZXJzIG9uIHRoZSBDb21tYW5kIExpbmUKK0FGVF9MQVRJVFVERT1fQUZUX0xBVElUVURFXworQUZUX0xPTkdJVFVERT1fQUZUX0xPTkdJVFVERV8KK0FGVF9FTlZJUk9OTUVOVD1fQUZUX0VOVklST05NRU5UXworREVQTE9ZRURfVkVSU0lPTj1fQVJUSUZBQ1RfVkVSU0lPTl8KKworRE1FU2VydmljZU5hbWU9c2VydmljZT1jb20uYXR0LmF1dGh6LmF1dGh6LWZzL3ZlcnNpb249X01BSk9SX1ZFUl8uX01JTk9SX1ZFUl8uX1BBVENIX1ZFUl8vZW52Q29udGV4dD1fRU5WX0NPTlRFWFRfL3JvdXRlT2ZmZXI9X1JPVVRFX09GRkVSXworQUZUX0RNRTJfUE9SVF9SQU5HRT1fQVVUSFpfRlNfUE9SVF9SQU5HRV8KK0FGVF9ETUUyX1NTTF9FTkFCTEU9ZmFsc2UKK0FGVF9ETUUyX0RJU0FCTEVfUEVSU0lTVEVOVF9DQUNIRT10cnVlCisKK0NGQV9XZWJQYXRoPV9ST09UX0RJUl8vZGF0YQorQ0ZBX0NsZWFyQ29tbWFuZD1GbXpZUHBNWTkxOE13RTFoeWFjb2lGU3QKK0NGQV9NYXhTaXplPTIwMDAwMDAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbG9nNGoucHJvcGVydGllcyBiL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9sb2c0ai5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YTRjYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbG9nNGoucHJvcGVydGllcwpAQCAtMCwwICsxLDkwIEBACisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMgPT09PT09PT09PT09TElDRU5TRV9TVEFSVD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICogb3JnLm9uYXAuYWFmDQorIyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgKiBDb3B5cmlnaHQgqSAyMDE3IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyMgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorIyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisjICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyAqIA0KKyMgICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjICogDQorIyAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorIyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyMgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorIyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMgKiA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICoNCisjICogRUNPTVAgaXMgYSB0cmFkZW1hcmsgYW5kIHNlcnZpY2UgbWFyayBvZiBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4NCisjICoNCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisjIENvcHlyaWdodCAoYykgMjAxNiBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorIw0KKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMNCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMNCitsb2c0ai5hcHBlbmRlci5JTklUPW9yZy5hcGFjaGUubG9nNGouRGFpbHlSb2xsaW5nRmlsZUFwcGVuZGVyIA0KK2xvZzRqLmFwcGVuZGVyLklOSVQuRmlsZT1fTE9HX0RJUl8vJHtMT0c0Sl9GSUxFTkFNRV9pbml0fQ0KK2xvZzRqLmFwcGVuZGVyLklOSVQuRGF0ZVBhdHRlcm49Jy4neXl5eS1NTS1kZA0KKyNsb2c0ai5hcHBlbmRlci5JTklULk1heEZpbGVTaXplPV9NQVhfTE9HX0ZJTEVfU0laRV8NCisjbG9nNGouYXBwZW5kZXIuSU5JVC5NYXhCYWNrdXBJbmRleD1fTUFYX0xPR19GSUxFX0JBQ0tVUF9DT1VOVF8NCitsb2c0ai5hcHBlbmRlci5JTklULmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQgDQorbG9nNGouYXBwZW5kZXIuSU5JVC5sYXlvdXQuQ29udmVyc2lvblBhdHRlcm49JWR7eXl5eS1NTS1kZCBISDptbTpzcyxTU1NafSAlbSAlbg0KKw0KKw0KK2xvZzRqLmFwcGVuZGVyLkZTPW9yZy5hcGFjaGUubG9nNGouRGFpbHlSb2xsaW5nRmlsZUFwcGVuZGVyIA0KK2xvZzRqLmFwcGVuZGVyLkZTLkZpbGU9bG9ncy8ke0xPRzRKX0ZJTEVOQU1FX2F1dGh6fQ0KK2xvZzRqLmFwcGVuZGVyLkZTLkRhdGVQYXR0ZXJuPScuJ3l5eXktTU0tZGQNCisjbG9nNGouYXBwZW5kZXIuRlMuTWF4RmlsZVNpemU9X01BWF9MT0dfRklMRV9TSVpFXw0KKyNsb2c0ai5hcHBlbmRlci5GUy5NYXhCYWNrdXBJbmRleD1fTUFYX0xPR19GSUxFX0JBQ0tVUF9DT1VOVF8NCitsb2c0ai5hcHBlbmRlci5GUy5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0IA0KK2xvZzRqLmFwcGVuZGVyLkZTLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHt5eXl5LU1NLWRkIEhIOm1tOnNzLFNTU1p9ICVwIFslY10gJW0gJW4NCisNCitsb2c0ai5hcHBlbmRlci5BVURJVD1vcmcuYXBhY2hlLmxvZzRqLkRhaWx5Um9sbGluZ0ZpbGVBcHBlbmRlcg0KK2xvZzRqLmFwcGVuZGVyLkFVRElULkZpbGU9X0xPR19ESVJfLyR7TE9HNEpfRklMRU5BTUVfYXVkaXR9DQorbG9nNGouYXBwZW5kZXIuQVVESVQuRGF0ZVBhdHRlcm49Jy4neXl5eS1NTS1kZA0KKyNsb2c0ai5hcHBlbmRlci5BVURJVC5NYXhGaWxlU2l6ZT1fTUFYX0xPR19GSUxFX1NJWkVfDQorI2xvZzRqLmFwcGVuZGVyLkFVRElULk1heEJhY2t1cEluZGV4PV9NQVhfTE9HX0ZJTEVfQkFDS1VQX0NPVU5UXw0KK2xvZzRqLmFwcGVuZGVyLkFVRElULmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQgDQorbG9nNGouYXBwZW5kZXIuQVVESVQubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVke3l5eXktTU0tZGQgSEg6bW06c3MsU1NTWn0gJW0gJW4NCisNCitsb2c0ai5hcHBlbmRlci5UUkFDRT1vcmcuYXBhY2hlLmxvZzRqLkRhaWx5Um9sbGluZ0ZpbGVBcHBlbmRlcg0KK2xvZzRqLmFwcGVuZGVyLlRSQUNFLkZpbGU9bG9ncy8ke0xPRzRKX0ZJTEVOQU1FX3RyYWNlfQ0KK2xvZzRqLmFwcGVuZGVyLlRSQUNFLkRhdGVQYXR0ZXJuPScuJ3l5eXktTU0tZGQNCisjbG9nNGouYXBwZW5kZXIuVFJBQ0UuTWF4RmlsZVNpemU9X01BWF9MT0dfRklMRV9TSVpFXw0KKyNsb2c0ai5hcHBlbmRlci5UUkFDRS5NYXhCYWNrdXBJbmRleD1fTUFYX0xPR19GSUxFX0JBQ0tVUF9DT1VOVF8NCitsb2c0ai5hcHBlbmRlci5UUkFDRS5sYXlvdXQ9b3JnLmFwYWNoZS5sb2c0ai5QYXR0ZXJuTGF5b3V0IA0KK2xvZzRqLmFwcGVuZGVyLlRSQUNFLmxheW91dC5Db252ZXJzaW9uUGF0dGVybj0lZHt5eXl5LU1NLWRkIEhIOm1tOnNzLFNTU1p9ICVtICVuDQorDQorbG9nNGouYXBwZW5kZXIuc3Rkb3V0PW9yZy5hcGFjaGUubG9nNGouQ29uc29sZUFwcGVuZGVyDQorbG9nNGouYXBwZW5kZXIuc3Rkb3V0LmxheW91dD1vcmcuYXBhY2hlLmxvZzRqLlBhdHRlcm5MYXlvdXQNCitsb2c0ai5hcHBlbmRlci5zdGRvdXQubGF5b3V0LkNvbnZlcnNpb25QYXR0ZXJuPSVkICVwIFslY10gJW0gJW4NCisNCisjIEdlbmVyYWwgQXBhY2hlIGxpYnJhcmllcw0KK2xvZzRqLnJvb3RMb2dnZXI9V0FSTg0KK2xvZzRqLmxvZ2dlci5vcmcuYXBhY2hlPVdBUk4sSU5JVA0KK2xvZzRqLmxvZ2dlci5kbWUyPVdBUk4sSU5JVA0KK2xvZzRqLmxvZ2dlci5pbml0PUlORk8sSU5JVA0KK2xvZzRqLmxvZ2dlci5hdXRoej1fTE9HNEpfTEVWRUxfLEZTDQorbG9nNGoubG9nZ2VyLmF1ZGl0PUlORk8sQVVESVQNCitsb2c0ai5sb2dnZXIudHJhY2U9VFJBQ0UsVFJBQ0UNCisNCisNCmRpZmYgLS1naXQgYS9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbHJtLWF1dGh6LWZzLnhtbCBiL2F1dGh6LWZzL3NyYy9tYWluL2NvbmZpZy9scm0tYXV0aHotZnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDFmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRoei1mcy9zcmMvbWFpbi9jb25maWcvbHJtLWF1dGh6LWZzLnhtbApAQCAtMCwwICsxLDgyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQorPCEtLQ0KKyAgPT09PT09PT09PT09TElDRU5TRV9TVEFSVD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgICogb3JnLm9uYXAuYWFmDQorICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAgKiBDb3B5cmlnaHQgwqkgMjAxNyBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgKiANCisgICAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAqIA0KKyAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisgICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgICogPT09PT09PT09PT09TElDRU5TRV9FTkQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICAqDQorICAqIEVDT01QIGlzIGEgdHJhZGVtYXJrIGFuZCBzZXJ2aWNlIG1hcmsgb2YgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorICAqDQorLS0+DQorPG5zMjpNYW5hZ2VkUmVzb3VyY2VMaXN0IHhtbG5zOm5zMj0iaHR0cDovL3NjbGQuYXR0LmNvbS9scm0vdXRpbCIgeG1sbnM9Imh0dHA6Ly9zY2xkLmF0dC5jb20vbHJtL2NvbW1vbnR5cGVzIiB4bWxuczpuczM9Imh0dHA6Ly9zY2xkLmF0dC5jb20vbHJtL3R5cGVzIj4NCisgICAgPG5zMjpNYW5hZ2VkUmVzb3VyY2U+DQorICAgICAgICA8UmVzb3VyY2VEZXNjcmlwdG9yPg0KKyAgICAgICAgICAgIDxSZXNvdXJjZU5hbWU+Y29tLmF0dC5hdXRoei5fQVJUSUZBQ1RfSURfPC9SZXNvdXJjZU5hbWU+DQorICAgICAgICAgICAgPFJlc291cmNlVmVyc2lvbj4NCisgICAgICAgICAgICAgICAgPE1ham9yPl9NQUpPUl9WRVJfPC9NYWpvcj4NCisgICAgICAgICAgICAgICAgPE1pbm9yPl9NSU5PUl9WRVJfPC9NaW5vcj4NCisgICAgICAgICAgICAgICAgPFBhdGNoPl9QQVRDSF9WRVJfPC9QYXRjaD4gICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgPC9SZXNvdXJjZVZlcnNpb24+DQorICAgICAgICAgICAgPFJvdXRlT2ZmZXI+X1JPVVRFX09GRkVSXzwvUm91dGVPZmZlcj4NCisgICAgICAgIDwvUmVzb3VyY2VEZXNjcmlwdG9yPg0KKyAgICAgICAgPFJlc291cmNlVHlwZT5KYXZhPC9SZXNvdXJjZVR5cGU+DQorICAgICAgICA8UmVzb3VyY2VQYXRoPmNvbS5hdHQuYXV0aHouZnMuRmlsZVNlcnZlcjwvUmVzb3VyY2VQYXRoPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5wcm9jZXNzLndvcmtkaXI8L1RhZz4NCisgICAgICAgICAgICA8VmFsdWU+X1JPT1RfRElSXzwvVmFsdWU+DQorICAgICAgICA8L1Jlc291cmNlUHJvcHM+ICAgIAkgICAgICAgDQorICAgICAgICA8UmVzb3VyY2VQcm9wcz4NCisgICAgICAgICAgICA8VGFnPmp2bS52ZXJzaW9uPC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPjEuODwvVmFsdWU+DQorICAgICAgICA8L1Jlc291cmNlUHJvcHM+DQorICAgICAgICA8UmVzb3VyY2VQcm9wcz4NCisgICAgICAgICAgICA8VGFnPmp2bS5hcmdzPC9UYWc+DQorICAgICAgICAgICAgPFZhbHVlPi1EQUZUX0xBVElUVURFPV9BRlRfTEFUSVRVREVfIC1EQUZUX0xPTkdJVFVERT1fQUZUX0xPTkdJVFVERV8gLURBRlRfRU5WSVJPTk1FTlQ9X0FGVF9FTlZJUk9OTUVOVF8gLURwbGF0Zm9ybT1fU0NMRF9QTEFURk9STV8gLURjb20uc3VuLmpuZGkubGRhcC5jb25uZWN0LnBvb2wubWF4c2l6ZT0yMCAgLURjb20uc3VuLmpuZGkubGRhcC5jb25uZWN0LnBvb2wucHJlZnNpemU9MTAgLURjb20uc3VuLmpuZGkubGRhcC5jb25uZWN0LnBvb2wudGltZW91dD0zMDAwIDwvVmFsdWU+DQorICAgICAgICA8L1Jlc291cmNlUHJvcHM+DQorICAgICAgICA8UmVzb3VyY2VQcm9wcz4NCisgICAgICAgICAgICA8VGFnPmp2bS5jbGFzc3BhdGg8L1RhZz4NCisgICAgICAgICAgICA8VmFsdWU+X1JPT1RfRElSXy9ldGM6X1JPT1RfRElSXy9saWIvKjo8L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5qdm0uaGVhcC5taW48L1RhZz4NCisgICAgICAgICAgICA8VmFsdWU+MTAyNG08L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5qdm0uaGVhcC5tYXg8L1RhZz4NCisgICAgICAgICAgICA8VmFsdWU+MjA0OG08L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5zdGFydC5jbGFzczwvVGFnPg0KKyAgICAgICAgICAgIDxWYWx1ZT5jb20uYXR0LmF1dGh6LmZzLkZpbGVTZXJ2ZXI8L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5zdGRvdXQucmVkaXJlY3Q8L1RhZz4NCisgICAgICAgICAgICA8VmFsdWU+X1JPT1RfRElSXy9sb2dzL1N5c3RlbU91dC5sb2c8L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlUHJvcHM+DQorICAgICAgICAgICAgPFRhZz5zdGRlcnIucmVkaXJlY3Q8L1RhZz4NCisgICAgICAgICAgICA8VmFsdWU+X1JPT1RfRElSXy9sb2dzL1N5c3RlbUVyci5sb2c8L1ZhbHVlPg0KKyAgICAgICAgPC9SZXNvdXJjZVByb3BzPg0KKyAgICAgICAgPFJlc291cmNlT1NJRD5hZnQ8L1Jlc291cmNlT1NJRD4NCisgICAgICAgIDxSZXNvdXJjZVN0YXJ0VHlwZT5BVVRPPC9SZXNvdXJjZVN0YXJ0VHlwZT4NCisgICAgICAgIDxSZXNvdXJjZVN0YXJ0UHJpb3JpdHk+MjwvUmVzb3VyY2VTdGFydFByaW9yaXR5Pg0KKwkJPFJlc291cmNlTWluQ291bnQ+X1JFU09VUkNFX01JTl9DT1VOVF88L1Jlc291cmNlTWluQ291bnQ+DQorCQk8UmVzb3VyY2VNYXhDb3VudD5fUkVTT1VSQ0VfTUFYX0NPVU5UXzwvUmVzb3VyY2VNYXhDb3VudD4gICAgICAgIA0KKwkJPFJlc291cmNlUmVnaXN0cmF0aW9uPl9SRVNPVVJDRV9SRUdJU1RSQVRJT05fPC9SZXNvdXJjZVJlZ2lzdHJhdGlvbj4NCisgICAgICAgIDxSZXNvdXJjZVNXTUNvbXBvbmVudD5jb20uYXR0LmF1dGh6Ol9BUlRJRkFDVF9JRF88L1Jlc291cmNlU1dNQ29tcG9uZW50Pg0KKyAgICAgICAgPFJlc291cmNlU1dNQ29tcG9uZW50VmVyc2lvbj5fQVJUSUZBQ1RfVkVSU0lPTl88L1Jlc291cmNlU1dNQ29tcG9uZW50VmVyc2lvbj4NCisgICAgPC9uczI6TWFuYWdlZFJlc291cmNlPg0KKzwvbnMyOk1hbmFnZWRSZXNvdXJjZUxpc3Q+DQpkaWZmIC0tZ2l0IGEvYXV0aHotZnMvc3JjL21haW4vZGF0YS90ZXN0Lmh0bWwgYi9hdXRoei1mcy9zcmMvbWFpbi9kYXRhL3Rlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWE3MzAyCi0tLSAvZGV2L251bGwKKysrIGIvYXV0aHotZnMvc3JjL21haW4vZGF0YS90ZXN0Lmh0bWwKQEAgLTAsMCArMSw0MiBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjID09PT09PT09PT09PUxJQ0VOU0VfU1RBUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorIyAqIG9yZy5vbmFwLmFhZg0KKyMgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisjICogQ29weXJpZ2h0IMKpIDIwMTcgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorIyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCisjICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyMgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjICogDQorIyAgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgKiANCisjICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisjICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisjICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisjICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorIyAqID09PT09PT09PT09PUxJQ0VOU0VfRU5EPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyMgKg0KKyMgKiBFQ09NUCBpcyBhIHRyYWRlbWFyayBhbmQgc2VydmljZSBtYXJrIG9mIEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyMgKg0KKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorPGh0bWw+DQorICA8aGVhZD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luIGhlYWQgLS0+DQorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCisgICAgPHRpdGxlPkFUJmFtcDtUIEF1dGhlbnRpY2F0aW9uL0F1dGhvcml6YXRpb24gVG9vbDwvdGl0bGU+DQorICAgIDwhLS0gDQorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iX0FVVEhaX0dVSV9VUkxfL3RoZW1lL2FhZjUuY3NzIj4NCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iX0FVVEhaX0dVSV9VUkxfL3RoZW1lL2NvbW0uanMiPjwvc2NyaXB0Pg0KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJfQVVUSFpfR1VJX1VSTF8vdGhlbWUvY29uc29sZS5qcyI+PC9zY3JpcHQ+DQorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Il9BVVRIWl9HVUlfVVJMXy90aGVtZS9jb21tb24uanMiPjwvc2NyaXB0Pg0KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Il9BVVRIWl9HVUlfVVJMXy90aGVtZS9hYWY1RGVza3RvcC5jc3MiPg0KKyAgICAgLS0+DQorICA8L2hlYWQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGVuZCBoZWFkIC0tPg0KKyAgPGJvZHk+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbiBib2R5IC0tPg0KKyAgICA8aGVhZGVyPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbiBoZWFkZXIgLS0+DQorICAgICAgICAgICAgPGgxPkFUJmFtcDtUIEF1dGggVG9vbCBvbiBfRU5WX0NPTlRFWFRfPC9oMT4NCisgICAgICA8cCBpZD0idmVyc2lvbiI+QUFGIFZlcnNpb246IF9BUlRJRkFDVF9WRVJTSU9OXzwvcD4NCisgICAgPC9oZWFkZXI+DQorICA8aDE+U3VjY2VzcyBmb3IgRmlsZSBTZXJ2ZXIgQWNjZXNzPC9oMT4NCisgIDwvYm9keT4NCis8L2h0bWw+DQpkaWZmIC0tZ2l0IGEvYXV0aHotZnMvc3JjL21haW4vamF2YS9vcmcvb25hcC9hYWYvYXV0aHovZnMvRmlsZVNlcnZlci5qYXZhIGIvYXV0aHotZnMvc3JjL21haW4vamF2YS9vcmcvb25hcC9hYWYvYXV0aHovZnMvRmlsZVNlcnZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODU0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9hdXRoei1mcy9zcmMvbWFpbi9qYXZhL29yZy9vbmFwL2FhZi9hdXRoei9mcy9GaWxlU2VydmVyLmphdmEKQEAgLTAsMCArMSwxNTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQorICogPT09PT09PT09PT09TElDRU5TRV9TVEFSVD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKiAqIG9yZy5vbmFwLmFhZg0KKyAqICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICogKiBDb3B5cmlnaHQgwqkgMjAxNyBBVCZUIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisgKiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQorICogKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQorICogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiAqIA0KKyAqICAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogKiANCisgKiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorICogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyAqICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorICogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisgKiAqID09PT09PT09PT09PUxJQ0VOU0VfRU5EPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqICoNCisgKiAqIEVDT01QIGlzIGEgdHJhZGVtYXJrIGFuZCBzZXJ2aWNlIG1hcmsgb2YgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuDQorICogKg0KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQorcGFja2FnZSBvcmcub25hcC5hYWYuYXV0aHouZnM7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcub25hcC5hYWYuY3NzYS5yc2Vydi5IdHRwTWV0aG9kcy5HRVQ7DQorDQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEubmV0LlVSTDsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkVudW1TZXQ7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCisNCitpbXBvcnQgb3JnLm9uYXAuYWFmLmF1dGh6LmVudi5BdXRoekVudjsNCitpbXBvcnQgb3JnLm9uYXAuYWFmLmF1dGh6LmVudi5BdXRoelRyYW5zOw0KK2ltcG9ydCBvcmcub25hcC5hYWYuYXV0aHouZW52LkF1dGh6VHJhbnNPbmx5RmlsdGVyOw0KK2ltcG9ydCBvcmcub25hcC5hYWYuY3NzYS5yc2Vydi5DYWNoaW5nRmlsZUFjY2VzczsNCitpbXBvcnQgb3JnLm9uYXAuYWFmLmNzc2EucnNlcnYuUlNlcnZsZXQ7DQorDQoraW1wb3J0IGNvbS5hdHQuYWZ0LmRtZTIuYXBpLkRNRTJNYW5hZ2VyOw0KK2ltcG9ydCBjb20uYXR0LmFmdC5kbWUyLmFwaS5ETUUyU2VydmVyOw0KK2ltcG9ydCBjb20uYXR0LmFmdC5kbWUyLmFwaS5ETUUyU2VydmVyUHJvcGVydGllczsNCitpbXBvcnQgY29tLmF0dC5hZnQuZG1lMi5hcGkuRE1FMlNlcnZpY2VIb2xkZXI7DQoraW1wb3J0IGNvbS5hdHQuYWZ0LmRtZTIuYXBpLnV0aWwuRE1FMkZpbHRlckhvbGRlcjsNCitpbXBvcnQgY29tLmF0dC5hZnQuZG1lMi5hcGkudXRpbC5ETUUyRmlsdGVySG9sZGVyLlJlcXVlc3REaXNwYXRjaGVyVHlwZTsNCitpbXBvcnQgY29tLmF0dC5hZnQuZG1lMi5hcGkudXRpbC5ETUUyU2VydmxldEhvbGRlcjsNCitpbXBvcnQgb3JnLm9uYXAuYWFmLmlubm8uZW52LkFQSUV4Y2VwdGlvbjsNCisNCisNCitwdWJsaWMgY2xhc3MgRmlsZVNlcnZlciBleHRlbmRzIFJTZXJ2bGV0PEF1dGh6VHJhbnM+ICB7DQorCXB1YmxpYyBGaWxlU2VydmVyKGZpbmFsIEF1dGh6RW52IGVudikgdGhyb3dzIEFQSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gew0KKwkJdHJ5IHsNCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgDQorCQkJLy8gRmlsZSBTZXJ2ZXIgDQorCQkJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCisJCQkNCisJCQlDYWNoaW5nRmlsZUFjY2VzczxBdXRoelRyYW5zPiBjZmEgPSBuZXcgQ2FjaGluZ0ZpbGVBY2Nlc3M8QXV0aHpUcmFucz4oZW52KTsNCisJCQlyb3V0ZShlbnYsR0VULCIvOmtleSIsIGNmYSk7IA0KKwkJCXJvdXRlKGVudixHRVQsIi86a2V5LzpjbWQiLCBjZmEpOyANCisJCQkvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkNCisJDQorCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKwkJCWUucHJpbnRTdGFja1RyYWNlKCk7DQorCQl9DQorCX0NCisJDQorCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsNCisJCXRyeSB7DQorCQkJLy8gTG9hZCBQcm9wZXJ0aWVzIGZyb20gYXV0aEZyYW1ld29yay5wcm9wZXJ0aWVzLiAgTmVlZGVkIGZvciBETUUyIGFuZCBBdXRoekVudg0KKwkJCVByb3BlcnRpZXMgcHJvcHMgPSBuZXcgUHJvcGVydGllcygpOw0KKwkJCVVSTCByc3JjID0gQ2xhc3NMb2FkZXIuZ2V0U3lzdGVtUmVzb3VyY2UoIkZpbGVTZXJ2ZXIucHJvcHMiKTsNCisJCQlpZihyc3JjPT1udWxsKSB7DQorCQkJCVN5c3RlbS5lcnIucHJpbnRsbigiRm9sZGVyIGNvbnRhaW5pbmcgRmlsZVNlcnZlci5wcm9wcyBtdXN0IGJlIG9uIENsYXNzcGF0aCIpOw0KKwkJCQlTeXN0ZW0uZXhpdCgxKTsNCisJCQl9DQorCQkJSW5wdXRTdHJlYW0gaXMgPSByc3JjLm9wZW5TdHJlYW0oKTsNCisJCQl0cnkgew0KKwkJCQlwcm9wcy5sb2FkKGlzKTsNCisJCQl9IGZpbmFsbHkgew0KKwkJCQlpcy5jbG9zZSgpOw0KKwkJCX0NCisJCQkNCisJCQkvLyBMb2FkIFByb3BlcnRpZXMgaW50byBBdXRoekVudg0KKwkJCUF1dGh6RW52IGVudiA9IG5ldyBBdXRoekVudihwcm9wcyk7IA0KKwkJCWVudi5zZXRMb2c0Sk5hbWVzKCJsb2c0ai5wcm9wZXJ0aWVzIiwiYXV0aHoiLCJmcyIsImF1ZGl0IiwiaW5pdCIsbnVsbCk7DQorCQkJDQorCQkJLy8gQUZUIERpc2NvdmVyeSBMaWJyYXJpZXMgb25seSByZWFkIFN5c3RlbSBQcm9wcw0KKwkJCWVudi5sb2FkVG9TeXN0ZW1Qcm9wc1N0YXJ0c1dpdGgoIkFGVF8iLCJETUUyXyIpOw0KKwkJCWVudi5pbml0KCkubG9nKCJETUUyIHVzaW5nICIgKyBlbnYuZ2V0UHJvcGVydHkoIkRNRVNlcnZpY2VOYW1lIiwidW5rbm93biIpICsgIiBVUkkiKTsNCisJCQkNCisJCQkvLyBTdGFydCBETUUyIChETUUyIG5lZWRzIFByb3BlcnRpZXMgZm9ybSBvZiBwcm9wcykNCisJCSAgICBETUUyTWFuYWdlciBkbWUyID0gbmV3IERNRTJNYW5hZ2VyKCJSU2VydkRNRTJNYW5hZ2VyIixwcm9wcyk7DQorCQkgICAgDQorCQkgICAgRE1FMlNlcnZpY2VIb2xkZXIgc3ZjSG9sZGVyOw0KKwkJICAgIExpc3Q8RE1FMlNlcnZsZXRIb2xkZXI+IHNsaXN0ID0gbmV3IEFycmF5TGlzdDxETUUyU2VydmxldEhvbGRlcj4oKTsNCisJCSAgICBzdmNIb2xkZXIgPSBuZXcgRE1FMlNlcnZpY2VIb2xkZXIoKTsNCisJCSAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBlbnYuZ2V0UHJvcGVydHkoIkRNRVNlcnZpY2VOYW1lIixudWxsKTsNCisJCQlpZihzZXJ2aWNlTmFtZSE9bnVsbCkgew0KKwkJICAgIAlzdmNIb2xkZXIuc2V0U2VydmljZVVSSShzZXJ2aWNlTmFtZSk7DQorCQkgICAgICAgIHN2Y0hvbGRlci5zZXRNYW5hZ2VyKGRtZTIpOw0KKwkJICAgICAgICBzdmNIb2xkZXIuc2V0Q29udGV4dCgiLyIpOw0KKwkJICAgICAgICANCisJCSAgICAgICAgRmlsZVNlcnZlciBmcyA9IG5ldyBGaWxlU2VydmVyKGVudik7DQorCQkgICAgICAgIERNRTJTZXJ2bGV0SG9sZGVyIHNydkhvbGRlciA9IG5ldyBETUUyU2VydmxldEhvbGRlcihmcyk7DQorCQkgICAgICAgIHNydkhvbGRlci5zZXRDb250ZXh0UGF0aCgiLyoiKTsNCisJCSAgICAgICAgc2xpc3QuYWRkKHNydkhvbGRlcik7DQorCQkgICAgICAgIA0KKwkJICAgICAgICBFbnVtU2V0PFJlcXVlc3REaXNwYXRjaGVyVHlwZT4gZWRsaXN0ID0gRW51bVNldC5vZigNCisJCSAgICAgICAgCQlSZXF1ZXN0RGlzcGF0Y2hlclR5cGUuUkVRVUVTVCwNCisJCSAgICAgICAgCQlSZXF1ZXN0RGlzcGF0Y2hlclR5cGUuRk9SV0FSRCwNCisJCSAgICAgICAgCQlSZXF1ZXN0RGlzcGF0Y2hlclR5cGUuQVNZTkMNCisJCSAgICAgICAgCQkpOw0KKw0KKwkJICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KKwkJICAgICAgICAvLyBBcHBseSBGaWx0ZXJzDQorCQkgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQorCQkgICAgICAgIExpc3Q8RE1FMkZpbHRlckhvbGRlcj4gZmxpc3QgPSBuZXcgQXJyYXlMaXN0PERNRTJGaWx0ZXJIb2xkZXI+KCk7DQorCQkgICAgICAgIA0KKwkJICAgIAkvLyBOZWVkIFRyYW5zRmlsdGVyDQorCQkgICAgCWZsaXN0LmFkZChuZXcgRE1FMkZpbHRlckhvbGRlcihuZXcgQXV0aHpUcmFuc09ubHlGaWx0ZXIoZW52KSwiLyoiLGVkbGlzdCkpOw0KKwkJICAgICAgICBzdmNIb2xkZXIuc2V0RmlsdGVycyhmbGlzdCk7DQorCQkgICAgICAgIHN2Y0hvbGRlci5zZXRTZXJ2bGV0SG9sZGVycyhzbGlzdCk7DQorCQkgICAgICAgIA0KKwkJICAgICAgICBETUUyU2VydmVyIGRtZTJzdnIgPSBkbWUyLmdldFNlcnZlcigpOw0KKwkJICAgICAgICBETUUyU2VydmVyUHJvcGVydGllcyBkc3Byb3BzID0gZG1lMnN2ci5nZXRTZXJ2ZXJQcm9wZXJ0aWVzKCk7DQorCQkgICAgICAgIGRzcHJvcHMuc2V0R3JhY2VmdWxTaHV0ZG93blRpbWVNcygxMDAwKTsNCisNCisJCSAgICAgICAgZW52LmluaXQoKS5sb2coIlN0YXJ0aW5nIEFBRiBGaWxlU2VydmVyIHdpdGggSmV0dHkvRE1FMiBzZXJ2ZXIuLi4iKTsNCisJCSAgICAgICAgZG1lMnN2ci5zdGFydCgpOw0KKwkJICAgICAgICB0cnkgew0KKy8vCQkgICAgICAgIAlpZihlbnYuZ2V0UHJvcGVydHkoIk5PX1JFR0lTVEVSIixudWxsKSE9bnVsbCkNCisJCSAgICAgICAgCWRtZTIuYmluZFNlcnZpY2Uoc3ZjSG9sZGVyKTsNCisJCSAgICAgICAgCWVudi5pbml0KCkubG9nKCJETUUyIGlzIGF2YWlsYWJsZSBhcyBIVFRQIisoZHNwcm9wcy5pc1NzbEVuYWJsZSgpPyIvUyI6IiIpLCJvbiBwb3J0OiIsZHNwcm9wcy5nZXRQb3J0KCkpOw0KKw0KKwkJICAgICAgICAgICAgd2hpbGUodHJ1ZSkgeyAvLyBQZXIgRE1FMiBFeGFtcGxlcy4uLg0KKwkJICAgICAgICAgICAgCVRocmVhZC5zbGVlcCg1MDAwKTsNCisJCSAgICAgICAgICAgIH0NCisJCSAgICAgICAgfSBjYXRjaChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7DQorCQkgICAgICAgICAgICBlbnYuaW5pdCgpLmxvZygiQUFGIEpldHR5IFNlcnZlciBpbnRlcnJ1cHRlZCEiKTsNCisJCSAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeyAvLyBFcnJvciBiaW5kaW5nIHNlcnZpY2UgZG9lc24ndCBzZWVtIHRvIHN0b3AgRE1FMiBvciBQcm9jZXNzDQorCQkgICAgICAgICAgICBlbnYuaW5pdCgpLmxvZyhlLCJETUUyIEluaXRpYWxpemF0aW9uIEVycm9yIik7DQorCQkgICAgICAgIAlkbWUyc3ZyLnN0b3AoKTsNCisJCSAgICAgICAgCVN5c3RlbS5leGl0KDEpOw0KKwkJICAgICAgICB9DQorCQkJfSBlbHNlIHsNCisJCQkJZW52LmluaXQoKS5sb2coIlByb3BlcnRpZXMgbXVzdCBjb250YWluIERNRVNlcnZpY2VOYW1lIik7DQorCQkJfQ0KKw0KKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisJCQllLnByaW50U3RhY2tUcmFjZShTeXN0ZW0uZXJyKTsNCisJCQlTeXN0ZW0uZXhpdCgxKTsNCisJCX0NCisJfQ0KK30NCmRpZmYgLS1naXQgYS9hdXRoei1mcy9zcmMvdGVzdC9qYXZhL29yZy9vbmFwL2FhZi9hdXRoei9mcy9KVV9GaWxlU2VydmVyLmphdmEgYi9hdXRoei1mcy9zcmMvdGVzdC9qYXZhL29yZy9vbmFwL2FhZi9hdXRoei9mcy9KVV9GaWxlU2VydmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg4NThlNwotLS0gL2Rldi9udWxsCisrKyBiL2F1dGh6LWZzL3NyYy90ZXN0L2phdmEvb3JnL29uYXAvYWFmL2F1dGh6L2ZzL0pVX0ZpbGVTZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDgzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKyAqID09PT09PT09PT09PUxJQ0VOU0VfU1RBUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorICogKiBvcmcub25hcC5hYWYNCisgKiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKyAqICogQ29weXJpZ2h0IMKpIDIwMTcgQVQmVCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQorICogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAqICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KKyAqICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogKiANCisgKiAgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqICogDQorICogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAqICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgKiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAqICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAqICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorICogKiA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisgKiAqDQorICogKiBFQ09NUCBpcyBhIHRyYWRlbWFyayBhbmQgc2VydmljZSBtYXJrIG9mIEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5Lg0KKyAqICoNCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KK3BhY2thZ2Ugb3JnLm9uYXAuYWFmLmF1dGh6LmZzOw0KKw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC4qOw0KK2ltcG9ydCBzdGF0aWMgb3JnLm9uYXAuYWFmLmNzc2EucnNlcnYuSHR0cE1ldGhvZHMuR0VUOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEubmV0LlVSTDsNCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQorDQoraW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7DQoraW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7DQoraW1wb3J0IG9yZy5tb2NraXRvLkluamVjdE1vY2tzOw0KK2ltcG9ydCBvcmcubW9ja2l0by5NYXRjaGVyczsNCitpbXBvcnQgb3JnLm1vY2tpdG8uTW9jazsNCitpbXBvcnQgb3JnLm1vY2tpdG8uTW9ja2l0bzsNCitpbXBvcnQgb3JnLm1vY2tpdG8ucnVubmVycy5Nb2NraXRvSlVuaXRSdW5uZXI7DQoraW1wb3J0IG9yZy5vbmFwLmFhZi5hdXRoei5lbnYuQXV0aHpFbnY7DQoraW1wb3J0IG9yZy5vbmFwLmFhZi5hdXRoei5lbnYuQXV0aHpUcmFuczsNCitpbXBvcnQgb3JnLm9uYXAuYWFmLmF1dGh6LmZzLio7DQoraW1wb3J0IG9yZy5vbmFwLmFhZi5jc3NhLnJzZXJ2LkNhY2hpbmdGaWxlQWNjZXNzOw0KK2ltcG9ydCBvcmcucG93ZXJtb2NrLmFwaS5tb2NraXRvLlBvd2VyTW9ja2l0bzsNCitpbXBvcnQgb3JnLnBvd2VybW9jay5tb2R1bGVzLmp1bml0NC5Qb3dlck1vY2tSdW5uZXI7DQorDQoraW1wb3J0IG9yZy5vbmFwLmFhZi5pbm5vLmVudi5BUElFeGNlcHRpb247DQorDQorQFJ1bldpdGgoTW9ja2l0b0pVbml0UnVubmVyLmNsYXNzKQ0KK3B1YmxpYyBjbGFzcyBKVV9GaWxlU2VydmVyIHsJDQorCUBNb2NrDQorCUF1dGh6RW52IGF1dGh6RW52TW9jazsNCisJQXV0aHpFbnYgYXV0aHpFbnYgPSBuZXcgQXV0aHpFbnYoKTsNCisJDQorCUBCZWZvcmUNCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgQVBJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbnsNCisNCisJfQ0KKwkNCisJQFN1cHByZXNzV2FybmluZ3MoInN0YXRpYy1hY2Nlc3MiKQ0KKwlAVGVzdA0KKwlwdWJsaWMgdm9pZCB0ZXN0TWFpbigpIHRocm93cyBFeGNlcHRpb257DQorCQkNCisJCVN0cmluZ1tdIGFyZ3MgPSBudWxsOw0KKwkJUHJvcGVydGllcyBwcm9wcyA9IG5ldyBQcm9wZXJ0aWVzKCk7DQorCQlDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsNCisJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGNsYXNzTG9hZGVyLmdldFJlc291cmNlKCJGaWxlU2VydmVyLnByb3BzIikuZ2V0RmlsZSgpKTsNCisNCisvL1Bvd2VyTW9ja2l0by53aGVuTmV3KFNvbWV0aGluZy5jbGFzcykud2l0aEFyZ3VtZW50cyhhcmd1bWVudCkudGhlblJldHVybihtb2NrU29tZXRoaW5nKTsNCisJCS8vCQkJZW52LnNldExvZzRKTmFtZXMoImxvZzRqLnByb3BlcnRpZXMiLCJhdXRoeiIsImZzIiwiYXVkaXQiLCJpbml0IixudWxsKTsNCisgICAgLy8gUG93ZXJNb2NraXRvLndoZW5OZXcoQXV0aHpFbnYuY2xhc3MpLndpdGhBcmd1bWVudHMocHJvcHMpLnRoZW5SZXR1cm4oYXV0aHpFbnZNb2NrKTsNCisgICAvLyAgUG93ZXJNb2NraXRvLmRvTm90aGluZygpLndoZW4oYXV0aHpFbnZNb2NrLnNldExvZzRKTmFtZXMoTWF0Y2hlcnMuYW55U3RyaW5nKCksIE1hdGNoZXJzLmFueVN0cmluZygpLCBNYXRjaGVycy5hbnlTdHJpbmcoKSwgTWF0Y2hlcnMuYW55U3RyaW5nKCksIE1hdGNoZXJzLmFueVN0cmluZygpLCBNYXRjaGVycy5hbnlTdHJpbmcoKSkpOw0KKyAgLy8gUG93ZXJNb2NraXRvLndoZW4obmV3IEF1dGh6RW52KHByb3BzKSkudGhlblJldHVybihhdXRoekVudk1vY2spOw0KKwkJLy9Qb3dlck1vY2tpdG8uZG9Ob3RoaW5nKCkud2hlbihhdXRoekVudikuc2V0TG9nNEpOYW1lcyhNYXRjaGVycy5hbnlTdHJpbmcoKSwgTWF0Y2hlcnMuYW55U3RyaW5nKCksIE1hdGNoZXJzLmFueVN0cmluZygpLCBNYXRjaGVycy5hbnlTdHJpbmcoKSwgTWF0Y2hlcnMuYW55U3RyaW5nKCksIE1hdGNoZXJzLmFueVN0cmluZygpKTsNCisJLy9Qb3dlck1vY2tpdG8uZG9Ob3RoaW5nKCkud2hlbihhdXRoekVudk1vY2spLnNldExvZzRKTmFtZXMoIiAiLCIgIiwiICIsIiAiLCIgIiwiICIpOw0KKw0KKwkJRmlsZVNlcnZlci5tYWluKGFyZ3MpOw0KKwkJLy9hc3NlcnRUcnVlKHRydWUpOw0KKwkJDQorCX0NCisJDQorfQ0K