PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IS0tCgogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wCiAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAtLT4KPHByb2plY3QgbmFtZT0iTWF2ZW4iIHhtbG5zPSJodHRwczovL21hdmVuLmFwYWNoZS5vcmcveHNkL2RlY29yYXRpb24tMS43LjAueHNkIj4KCiAgICA8IS0tIFVzZSB0aGUgbmljZXIgbG9va2luZyBmbHVpZG8gc2tpbiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IC0tPgogICAgPHNraW4+CiAgICAgICAgPGdyb3VwSWQ+bHQudmVseWtpcy5tYXZlbi5za2luczwvZ3JvdXBJZD4KICAgICAgICA8YXJ0aWZhY3RJZD5yZWZsb3ctbWF2ZW4tc2tpbjwvYXJ0aWZhY3RJZD4KICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4KICAgIDwvc2tpbj4KCiAgICA8IS0tCiAgICAgICAgRGV0YWlscyBvbiBob3cgdG8gY29uZmlndXJlIHRoZSByZWZsb3cgc2tpbjoKICAgICAgICBodHRwOi8vYW5kcml1c3ZlbHlraXMuZ2l0aHViLmlvL3JlZmxvdy1tYXZlbi1za2luL3NraW4vCiAgICAtLT4KICAgIDxjdXN0b20+CiAgICAgICAgPHJlZmxvd1NraW4+CiAgICAgICAgICAgIDx0aGVtZT5zaXRlPC90aGVtZT4KICAgICAgICAgICAgPHRpdGxlVGVtcGxhdGU+QXBhY2hlIFJveWFsZa4gLSAlMiRzPC90aXRsZVRlbXBsYXRlPgogICAgICAgICAgICA8YnJlYWRjcnVtYnM+ZmFsc2U8L2JyZWFkY3J1bWJzPgogICAgICAgICAgICA8aGlnaGxpZ2h0SnM+dHJ1ZTwvaGlnaGxpZ2h0SnM+CiAgICAgICAgPC9yZWZsb3dTa2luPgogICAgPC9jdXN0b20+CgogICAgPGJhbm5lckxlZnQ+CiAgICAgICAgPG5hbWU+QXBhY2hlIFJveWFsZTwvbmFtZT4KICAgICAgICA8c3JjPmltZy9sb2dvLXJveWFsZS5wbmc8L3NyYz4KICAgICAgICA8aHJlZj5odHRwOi8vcm95YWxlLmFwYWNoZS5vcmcvPC9ocmVmPgogICAgPC9iYW5uZXJMZWZ0PgoKICAgIDxiYW5uZXJSaWdodD4KICAgICAgICA8bmFtZT5BbiBBcGFjaGUgUHJvamVjdDwvbmFtZT4KICAgICAgICA8c3JjPmltZy9sb2dvLWFzZi5wbmc8L3NyYz4KICAgICAgICA8aHJlZj5odHRwOi8vd3d3LmFwYWNoZS5vcmc8L2hyZWY+CiAgICA8L2Jhbm5lclJpZ2h0PgoKICAgIDxib2R5PgogICAgICAgIDxoZWFkPgogICAgICAgICAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iaW1nL2Zhdmljb24uaWNvIi8+CiAgICAgICAgICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgaHJlZj0iaW1nL2FwcGxlLXRvdWNoLWljb24tNjAucG5nIi8+CiAgICAgICAgICAgIDxsaW5rIHJlbD0iYXBwbGUtdG91Y2gtaWNvbiIgc2l6ZXM9Ijc2eDc2IiBocmVmPSJpbWcvYXBwbGUtdG91Y2gtaWNvbi03Ni5wbmciLz4KICAgICAgICAgICAgPGxpbmsgcmVsPSJhcHBsZS10b3VjaC1pY29uIiBzaXplcz0iMTIweDEyMCIgaHJlZj0iaW1nL2FwcGxlLXRvdWNoLWljb24tMTIwLnBuZyIvPgogICAgICAgICAgICA8bGluayByZWw9ImFwcGxlLXRvdWNoLWljb24iIHNpemVzPSIxNTJ4MTUyIiBocmVmPSJpbWcvYXBwbGUtdG91Y2gtaWNvbi0xNTIucG5nIi8+CiAgICAgICAgPC9oZWFkPgoKICAgICAgICA8bGlua3M+CiAgICAgICAgICAgIDxpdGVtIG5hbWU9IkFwYWNoZSBSb3lhbGUgSG9tZXBhZ2UiIGhyZWY9Imh0dHA6Ly9yb3lhbGUuYXBhY2hlLm9yZy8iIC8+CiAgICAgICAgICAgIDxpdGVtIG5hbWU9IkFwYWNoZSBSb3lhbGUgRG9jdW1lbnRhdGlvbiIgaHJlZj0iaHR0cHM6Ly9hcGFjaGUuZ2l0aHViLmlvL3JveWFsZS1kb2NzLyIvPgogICAgICAgIDwvbGlua3M+CgogICAgICAgIDxtZW51IG5hbWU9IlJveWFsZSI+CiAgICAgICAgICAgIDxpdGVtIG5hbWU9IkludHJvZHVjdGlvbiIgaHJlZj0iaW5kZXguaHRtbCIvPgogICAgICAgICAgICA8IS0taXRlbSBuYW1lPSJEb3dubG9hZCIgaHJlZj0iZG93bmxvYWQuaHRtbCIvPgogICAgICAgICAgICA8aXRlbSBuYW1lPSJSZWxlYXNlIE5vdGVzIiBocmVmPSJyZWxlYXNlLW5vdGVzLmh0bWwiIC8+CiAgICAgICAgICAgIDxpdGVtIG5hbWU9IkdlbmVyYWwgSW5mb3JtYXRpb24iIGhyZWY9ImFib3V0Lmh0bWwiLy0tPgogICAgICAgIDwvbWVudT4KCiAgICAgICAgPG1lbnUgbmFtZT0iRGV2ZWxvcG1lbnQiPgogICAgICAgICAgICA8IS0tIEdlbmVyYXRlZCBmcm9tIHNyYy9zaXRlL2FzY2lpZG9jL2J1aWxkLmFkb2MgLS0+CiAgICAgICAgICAgIDxpdGVtIG5hbWU9IkJ1aWxkaW5nIGZyb20gU291cmNlIiBocmVmPSJidWlsZC5odG1sIi8+CiAgICAgICAgICAgIDxpdGVtIG5hbWU9IkZlYXR1cmVicmFuY2ggQXV0b2J1aWxkcyIgaHJlZj0iZmVhdHVyZWJyYW5jaC1hdXRvYnVpbGQuaHRtbCIvPgogICAgICAgICAgICA8aXRlbSBuYW1lPSJCdWlsZCBzdHJ1Y3R1cmUiIGhyZWY9InN0cnVjdHVyZS5odG1sIi8+CiAgICAgICAgPC9tZW51PgoKICAgICAgICA8bWVudSByZWY9InJlcG9ydHMiIC8+CiAgICAgICAgPG1lbnUgcmVmPSJwYXJlbnQiIC8+CiAgICAgICAgPG1lbnUgcmVmPSJtb2R1bGVzIiAvPgogICAgPC9ib2R5Pgo8L3Byb2plY3Q+Cg==