PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5jb3JlIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNDwvYT4gJmd0OyA8YSBocmVmPSIuLyI+TW9kdWxlczwvYT48L2Rpdj4KPGRpdiBpZD0icGFnZS1jb250ZW50Ij4KPGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BcGFjaGUgQ29yZSBGZWF0dXJlczwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZGUvbW9kL2NvcmUuaHRtbCIgaHJlZmxhbmc9ImRlIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkRldXRzY2giPiZuYnNwO2RlJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2VuL21vZC9jb3JlLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9lcy9tb2QvY29yZS5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbW9kL2NvcmUuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvY29yZS5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL21vZC9jb3JlLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+Cjx0YWJsZSBjbGFzcz0ibW9kdWxlIj48dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db3JlIEFwYWNoZSBIVFRQIFNlcnZlciBmZWF0dXJlcyB0aGF0IGFyZSBhbHdheXMKYXZhaWxhYmxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+PC90YWJsZT4KPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhY2NlcHRmaWx0ZXIiPkFjY2VwdEZpbHRlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhY2NlcHRwYXRoaW5mbyI+QWNjZXB0UGF0aEluZm88L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYWNjZXNzZmlsZW5hbWUiPkFjY2Vzc0ZpbGVOYW1lPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2FkZGRlZmF1bHRjaGFyc2V0Ij5BZGREZWZhdWx0Q2hhcnNldDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhbGxvd2VuY29kZWRzbGFzaGVzIj5BbGxvd0VuY29kZWRTbGFzaGVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2FsbG93b3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYWxsb3dvdmVycmlkZWxpc3QiPkFsbG93T3ZlcnJpZGVMaXN0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2NnaW1hcGV4dGVuc2lvbiI+Q0dJTWFwRXh0ZW5zaW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2NnaXBhc3NhdXRoIj5DR0lQYXNzQXV0aDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjZ2l2YXIiPkNHSVZhcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjb250ZW50ZGlnZXN0Ij5Db250ZW50RGlnZXN0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RlZmF1bHRydW50aW1lZGlyIj5EZWZhdWx0UnVudGltZURpcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkZWZhdWx0dHlwZSI+RGVmYXVsdFR5cGU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZGVmaW5lIj5EZWZpbmU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkaXJlY3RvcnltYXRjaCI+Jmx0O0RpcmVjdG9yeU1hdGNoJmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkb2N1bWVudHJvb3QiPkRvY3VtZW50Um9vdDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNlbHNlIj4mbHQ7RWxzZSZndDs8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZWxzZWlmIj4mbHQ7RWxzZUlmJmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNlbmFibGVtbWFwIj5FbmFibGVNTUFQPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2VuYWJsZXNlbmRmaWxlIj5FbmFibGVTZW5kZmlsZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNlcnJvciI+RXJyb3I8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZXJyb3Jkb2N1bWVudCI+RXJyb3JEb2N1bWVudDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNlcnJvcmxvZyI+RXJyb3JMb2c8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZXJyb3Jsb2dmb3JtYXQiPkVycm9yTG9nRm9ybWF0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2V4dGVuZGVkc3RhdHVzIj5FeHRlbmRlZFN0YXR1czwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmaWxlZXRhZyI+RmlsZUVUYWc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZmlsZXNtYXRjaCI+Jmx0O0ZpbGVzTWF0Y2gmZ3Q7PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2ZvcmNldHlwZSI+Rm9yY2VUeXBlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2dwcm9mZGlyIj5HcHJvZkRpcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNob3N0bmFtZWxvb2t1cHMiPkhvc3RuYW1lTG9va3VwczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNpZiI+Jmx0O0lmJmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNpZmRlZmluZSI+Jmx0O0lmRGVmaW5lJmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNpZm1vZHVsZSI+Jmx0O0lmTW9kdWxlJmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNpbmNsdWRlIj5JbmNsdWRlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2luY2x1ZGVvcHRpb25hbCI+SW5jbHVkZU9wdGlvbmFsPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2tlZXBhbGl2ZSI+S2VlcEFsaXZlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2tlZXBhbGl2ZXRpbWVvdXQiPktlZXBBbGl2ZVRpbWVvdXQ8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbGltaXQiPiZsdDtMaW1pdCZndDs8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbGltaXRleGNlcHQiPiZsdDtMaW1pdEV4Y2VwdCZndDs8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbGltaXRpbnRlcm5hbHJlY3Vyc2lvbiI+TGltaXRJbnRlcm5hbFJlY3Vyc2lvbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsaW1pdHJlcXVlc3Rib2R5Ij5MaW1pdFJlcXVlc3RCb2R5PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2xpbWl0cmVxdWVzdGZpZWxkcyI+TGltaXRSZXF1ZXN0RmllbGRzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2xpbWl0cmVxdWVzdGZpZWxkc2l6ZSI+TGltaXRSZXF1ZXN0RmllbGRTaXplPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2xpbWl0cmVxdWVzdGxpbmUiPkxpbWl0UmVxdWVzdExpbmU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbGltaXR4bWxyZXF1ZXN0Ym9keSI+TGltaXRYTUxSZXF1ZXN0Qm9keTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsb2NhdGlvbm1hdGNoIj4mbHQ7TG9jYXRpb25NYXRjaCZndDs8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbG9nbGV2ZWwiPkxvZ0xldmVsPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI21heGtlZXBhbGl2ZXJlcXVlc3RzIj5NYXhLZWVwQWxpdmVSZXF1ZXN0czwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNtYXhyYW5nZW92ZXJsYXBzIj5NYXhSYW5nZU92ZXJsYXBzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI21heHJhbmdlcmV2ZXJzYWxzIj5NYXhSYW5nZVJldmVyc2FsczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNtYXhyYW5nZXMiPk1heFJhbmdlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNtZXJnZXRyYWlsZXJzIj5NZXJnZVRyYWlsZXJzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI211dGV4Ij5NdXRleDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNuYW1ldmlydHVhbGhvc3QiPk5hbWVWaXJ0dWFsSG9zdDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNvcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3RvY29sIj5Qcm90b2NvbDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm90b2NvbHMiPlByb3RvY29sczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm90b2NvbHNob25vcm9yZGVyIj5Qcm90b2NvbHNIb25vck9yZGVyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3F1YWxpZnlyZWRpcmVjdHVybCI+UXVhbGlmeVJlZGlyZWN0VVJMPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3JsaW1pdGNwdSI+UkxpbWl0Q1BVPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3JsaW1pdG1lbSI+UkxpbWl0TUVNPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3JsaW1pdG5wcm9jIj5STGltaXROUFJPQzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzY3JpcHRpbnRlcnByZXRlcnNvdXJjZSI+U2NyaXB0SW50ZXJwcmV0ZXJTb3VyY2U8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2VlcmVxdWVzdHRhaWwiPlNlZVJlcXVlc3RUYWlsPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NlcnZlcmFkbWluIj5TZXJ2ZXJBZG1pbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZXJ2ZXJhbGlhcyI+U2VydmVyQWxpYXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2VydmVybmFtZSI+U2VydmVyTmFtZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZXJ2ZXJwYXRoIj5TZXJ2ZXJQYXRoPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NlcnZlcnJvb3QiPlNlcnZlclJvb3Q8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2VydmVyc2lnbmF0dXJlIj5TZXJ2ZXJTaWduYXR1cmU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2VydmVydG9rZW5zIj5TZXJ2ZXJUb2tlbnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2V0aGFuZGxlciI+U2V0SGFuZGxlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZXRpbnB1dGZpbHRlciI+U2V0SW5wdXRGaWx0ZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2V0b3V0cHV0ZmlsdGVyIj5TZXRPdXRwdXRGaWx0ZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdGltZW91dCI+VGltZU91dDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN0cmFjZWVuYWJsZSI+VHJhY2VFbmFibGU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdW5kZWZpbmUiPlVuRGVmaW5lPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdXNlY2Fub25pY2FscGh5c2ljYWxwb3J0Ij5Vc2VDYW5vbmljYWxQaHlzaWNhbFBvcnQ8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdmlydHVhbGhvc3QiPiZsdDtWaXJ0dWFsSG9zdCZndDs8L2E+PC9saT4KPC91bD4KPGgzPkJ1Z2ZpeCBjaGVja2xpc3Q8L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9odHRwZC9DSEFOR0VTXzIuNCI+aHR0cGQgY2hhbmdlbG9nPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPV9fb3Blbl9fJmFtcDtsaXN0X2lkPTE0NDUzMiZhbXA7cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtxdWVyeV9mb3JtYXQ9c3BlY2lmaWMmYW1wO29yZGVyPWNoYW5nZWRkYXRlJTIwREVTQyUyQ3ByaW9yaXR5JTJDYnVnX3NldmVyaXR5JmFtcDtjb21wb25lbnQ9Y29yZSI+S25vd24gaXNzdWVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9QXBhY2hlJTIwaHR0cGQtMiZhbXA7Y29tcG9uZW50PWNvcmUiPlJlcG9ydCBhIGJ1ZzwvYT48L2xpPjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJBY2NlcHRGaWx0ZXIiIGlkPSJBY2NlcHRGaWx0ZXIiPkFjY2VwdEZpbHRlcjwvYT4gPGEgbmFtZT0iYWNjZXB0ZmlsdGVyIiBpZD0iYWNjZXB0ZmlsdGVyIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db25maWd1cmVzIG9wdGltaXphdGlvbnMgZm9yIGEgUHJvdG9jb2wncyBMaXN0ZW5lciBTb2NrZXRzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkFjY2VwdEZpbHRlciA8dmFyPnByb3RvY29sPC92YXI+IDx2YXI+YWNjZXB0X2ZpbHRlcjwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGVuYWJsZXMgb3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGZvciBhCiAgICAgICBsaXN0ZW5pbmcgc29ja2V0IGJ5IHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm90b2NvbDwvY29kZT4gdHlwZS4KICAgICAgIFRoZSBiYXNpYyBwcmVtaXNlIGlzIGZvciB0aGUga2VybmVsIHRvIG5vdCBzZW5kIGEgc29ja2V0IHRvIHRoZSBzZXJ2ZXIKICAgICAgIHByb2Nlc3MgdW50aWwgZWl0aGVyIGRhdGEgaXMgcmVjZWl2ZWQgb3IgYW4gZW50aXJlIEhUVFAgUmVxdWVzdCBpcyBidWZmZXJlZC4KICAgICAgIE9ubHkgPGEgaHJlZj0iaHR0cDovL3d3dy5mcmVlYnNkLm9yZy9jZ2kvbWFuLmNnaT9xdWVyeT1hY2NlcHRfZmlsdGVyJmFtcDtzZWt0aW9uPTkiPgogICAgICAgRnJlZUJTRCdzIEFjY2VwdCBGaWx0ZXJzPC9hPiwgTGludXgncyBtb3JlIHByaW1pdGl2ZQogICAgICAgPGNvZGU+VENQX0RFRkVSX0FDQ0VQVDwvY29kZT4sIGFuZCBXaW5kb3dzJyBvcHRpbWl6ZWQgQWNjZXB0RXgoKQogICAgICAgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuPC9wPgoKICAgIDxwPlVzaW5nIDxjb2RlPm5vbmU8L2NvZGU+IGZvciBhbiBhcmd1bWVudCB3aWxsIGRpc2FibGUgYW55IGFjY2VwdCBmaWx0ZXJzCiAgICAgICBmb3IgdGhhdCBwcm90b2NvbC4gIFRoaXMgaXMgdXNlZnVsIGZvciBwcm90b2NvbHMgdGhhdCByZXF1aXJlIGEgc2VydmVyCiAgICAgICBzZW5kIGRhdGEgZmlyc3QsIHN1Y2ggYXMgPGNvZGU+ZnRwOjwvY29kZT4gb3IgPGNvZGU+bm50cDwvY29kZT46PC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkFjY2VwdEZpbHRlciBubnRwIG5vbmU8L3ByZT4KCgogICAgPHA+VGhlIGRlZmF1bHQgcHJvdG9jb2wgbmFtZXMgYXJlIDxjb2RlPmh0dHBzPC9jb2RlPiBmb3IgcG9ydCA0NDMKICAgICAgIGFuZCA8Y29kZT5odHRwPC9jb2RlPiBmb3IgYWxsIG90aGVyIHBvcnRzLiAgVG8gc3BlY2lmeSB0aGF0IGFub3RoZXIKICAgICAgIHByb3RvY29sIGlzIGJlaW5nIHVzZWQgd2l0aCBhIGxpc3RlbmluZyBwb3J0LCBhZGQgdGhlIDx2YXI+cHJvdG9jb2w8L3Zhcj4KICAgICAgIGFyZ3VtZW50IHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbXBtX2NvbW1vbi5odG1sI2xpc3RlbiI+TGlzdGVuPC9hPjwvY29kZT4KICAgICAgIGRpcmVjdGl2ZS48L3A+CgogICAgPHA+VGhlIGRlZmF1bHQgdmFsdWVzIG9uIEZyZWVCU0QgYXJlOjwvcD4KICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5BY2NlcHRGaWx0ZXIgaHR0cCBodHRwcmVhZHkKQWNjZXB0RmlsdGVyIGh0dHBzIGRhdGFyZWFkeTwvcHJlPgoKCiAgICA8cD5UaGUgPGNvZGU+aHR0cHJlYWR5PC9jb2RlPiBhY2NlcHQgZmlsdGVyIGJ1ZmZlcnMgZW50aXJlIEhUVFAgcmVxdWVzdHMgYXQKICAgICAgIHRoZSBrZXJuZWwgbGV2ZWwuICBPbmNlIGFuIGVudGlyZSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUga2VybmVsIHRoZW4KICAgICAgIHNlbmRzIGl0IHRvIHRoZSBzZXJ2ZXIuIFNlZSB0aGUKICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnJlZWJzZC5vcmcvY2dpL21hbi5jZ2k/cXVlcnk9YWNjZl9odHRwJmFtcDtzZWt0aW9uPTkiPgogICAgICAgYWNjZl9odHRwKDkpPC9hPiBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiAgU2luY2UgSFRUUFMgcmVxdWVzdHMgYXJlCiAgICAgICBlbmNyeXB0ZWQsIG9ubHkgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZnJlZWJzZC5vcmcvY2dpL21hbi5jZ2k/cXVlcnk9YWNjZl9kYXRhJmFtcDtzZWt0aW9uPTkiPgogICAgICAgYWNjZl9kYXRhKDkpPC9hPiBmaWx0ZXIgaXMgdXNlZC48L3A+CgogICAgPHA+VGhlIGRlZmF1bHQgdmFsdWVzIG9uIExpbnV4IGFyZTo8L3A+CiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWNjZXB0RmlsdGVyIGh0dHAgZGF0YQpBY2NlcHRGaWx0ZXIgaHR0cHMgZGF0YTwvcHJlPgoKCiAgICA8cD5MaW51eCdzIDxjb2RlPlRDUF9ERUZFUl9BQ0NFUFQ8L2NvZGU+IGRvZXMgbm90IHN1cHBvcnQgYnVmZmVyaW5nIGh0dHAKICAgICAgIHJlcXVlc3RzLiAgQW55IHZhbHVlIGJlc2lkZXMgPGNvZGU+bm9uZTwvY29kZT4gd2lsbCBlbmFibGUKICAgICAgIDxjb2RlPlRDUF9ERUZFUl9BQ0NFUFQ8L2NvZGU+IG9uIHRoYXQgbGlzdGVuZXIuIEZvciBtb3JlIGRldGFpbHMKICAgICAgIHNlZSB0aGUgTGludXgKICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ob21lcGFnZXMuY3dpLm5sL35hZWIvbGludXgvbWFuMmh0bWwvbWFuNy90Y3AuNy5odG1sIj4KICAgICAgIHRjcCg3KTwvYT4gbWFuIHBhZ2UuPC9wPgoKICAgIDxwPlRoZSBkZWZhdWx0IHZhbHVlcyBvbiBXaW5kb3dzIGFyZTo8L3A+CiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWNjZXB0RmlsdGVyIGh0dHAgZGF0YQpBY2NlcHRGaWx0ZXIgaHR0cHMgZGF0YTwvcHJlPgoKCiAgICA8cD5XaW5kb3cncyBtcG1fd2lubnQgaW50ZXJwcmV0cyB0aGUgQWNjZXB0RmlsdGVyIHRvIHRvZ2dsZSB0aGUgQWNjZXB0RXgoKQogICAgICAgQVBJLCBhbmQgZG9lcyBub3Qgc3VwcG9ydCBodHRwIHByb3RvY29sIGJ1ZmZlcmluZy4gIFRoZXJlIGFyZSB0d28gdmFsdWVzCiAgICAgICB3aGljaCB1dGlsaXplIHRoZSBXaW5kb3dzIEFjY2VwdEV4KCkgQVBJIGFuZCB3aWxsIHJlY3ljbGUgbmV0d29yawogICAgICAgc29ja2V0cyBiZXR3ZWVuIGNvbm5lY3Rpb25zLiAgPGNvZGU+ZGF0YTwvY29kZT4gd2FpdHMgdW50aWwgZGF0YSBoYXMKICAgICAgIGJlZW4gdHJhbnNtaXR0ZWQgYXMgZG9jdW1lbnRlZCBhYm92ZSwgYW5kIHRoZSBpbml0aWFsIGRhdGEgYnVmZmVyIGFuZAogICAgICAgbmV0d29yayBlbmRwb2ludCBhZGRyZXNzZXMgYXJlIGFsbCByZXRyaWV2ZWQgZnJvbSB0aGUgc2luZ2xlIEFjY2VwdEV4KCkKICAgICAgIGludm9jYXRpb24uICA8Y29kZT5jb25uZWN0PC9jb2RlPiB3aWxsIHVzZSB0aGUgQWNjZXB0RXgoKSBBUEksIGFsc28KICAgICAgIHJldHJpZXZlIHRoZSBuZXR3b3JrIGVuZHBvaW50IGFkZHJlc3NlcywgYnV0IGxpa2UgPGNvZGU+bm9uZTwvY29kZT4KICAgICAgIHRoZSA8Y29kZT5jb25uZWN0PC9jb2RlPiBvcHRpb24gZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGluaXRpYWwgZGF0YQogICAgICAgdHJhbnNtaXNzaW9uLjwvcD4KCiAgICA8cD5PbiBXaW5kb3dzLCA8Y29kZT5ub25lPC9jb2RlPiB1c2VzIGFjY2VwdCgpIHJhdGhlciB0aGFuIEFjY2VwdEV4KCkKICAgICAgIGFuZCB3aWxsIG5vdCByZWN5Y2xlIHNvY2tldHMgYmV0d2VlbiBjb25uZWN0aW9ucy4gIFRoaXMgaXMgdXNlZnVsIGZvcgogICAgICAgbmV0d29yayBhZGFwdGVycyB3aXRoIGJyb2tlbiBkcml2ZXIgc3VwcG9ydCwgYXMgd2VsbCBhcyBzb21lIHZpcnR1YWwKICAgICAgIG5ldHdvcmsgcHJvdmlkZXJzIHN1Y2ggYXMgdnBuIGRyaXZlcnMsIG9yIHNwYW0sIHZpcnVzIG9yIHNweXdhcmUKICAgICAgIGZpbHRlcnMuPC9wPgoKCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm90b2NvbCI+UHJvdG9jb2w8L2E+PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJBY2NlcHRQYXRoSW5mbyIgaWQ9IkFjY2VwdFBhdGhJbmZvIj5BY2NlcHRQYXRoSW5mbzwvYT4gPGEgbmFtZT0iYWNjZXB0cGF0aGluZm8iIGlkPSJhY2NlcHRwYXRoaW5mbyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UmVzb3VyY2VzIGFjY2VwdCB0cmFpbGluZyBwYXRobmFtZSBpbmZvcm1hdGlvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5BY2NlcHRQYXRoSW5mbyBPbnxPZmZ8RGVmYXVsdDwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5BY2NlcHRQYXRoSW5mbyBEZWZhdWx0PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KCiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBjb250cm9scyB3aGV0aGVyIHJlcXVlc3RzIHRoYXQgY29udGFpbiB0cmFpbGluZwogICAgcGF0aG5hbWUgaW5mb3JtYXRpb24gdGhhdCBmb2xsb3dzIGFuIGFjdHVhbCBmaWxlbmFtZSAob3IKICAgIG5vbi1leGlzdGVudCBmaWxlIGluIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSkgd2lsbCBiZSBhY2NlcHRlZCBvcgogICAgcmVqZWN0ZWQuICBUaGUgdHJhaWxpbmcgcGF0aG5hbWUgaW5mb3JtYXRpb24gY2FuIGJlIG1hZGUKICAgIGF2YWlsYWJsZSB0byBzY3JpcHRzIGluIHRoZSA8Y29kZT5QQVRIX0lORk88L2NvZGU+IGVudmlyb25tZW50CiAgICB2YXJpYWJsZS48L3A+CgogICAgPHA+Rm9yIGV4YW1wbGUsIGFzc3VtZSB0aGUgbG9jYXRpb24gPGNvZGU+L3Rlc3QvPC9jb2RlPiBwb2ludHMgdG8KICAgIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgb25seSB0aGUgc2luZ2xlIGZpbGUKICAgIDxjb2RlPmhlcmUuaHRtbDwvY29kZT4uICBUaGVuIHJlcXVlc3RzIGZvcgogICAgPGNvZGU+L3Rlc3QvaGVyZS5odG1sL21vcmU8L2NvZGU+IGFuZAogICAgPGNvZGU+L3Rlc3Qvbm90aGVyZS5odG1sL21vcmU8L2NvZGU+IGJvdGggY29sbGVjdAogICAgPGNvZGU+L21vcmU8L2NvZGU+IGFzIDxjb2RlPlBBVEhfSU5GTzwvY29kZT4uPC9wPgoKICAgIDxwPlRoZSB0aHJlZSBwb3NzaWJsZSBhcmd1bWVudHMgZm9yIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+QWNjZXB0UGF0aEluZm88L2NvZGU+IGRpcmVjdGl2ZSBhcmU6PC9wPgogICAgPGRsPgogICAgPGR0Pjxjb2RlPk9mZjwvY29kZT48L2R0PjxkZD5BIHJlcXVlc3Qgd2lsbCBvbmx5IGJlIGFjY2VwdGVkIGlmIGl0CiAgICBtYXBzIHRvIGEgbGl0ZXJhbCBwYXRoIHRoYXQgZXhpc3RzLiAgVGhlcmVmb3JlIGEgcmVxdWVzdCB3aXRoCiAgICB0cmFpbGluZyBwYXRobmFtZSBpbmZvcm1hdGlvbiBhZnRlciB0aGUgdHJ1ZSBmaWxlbmFtZSBzdWNoIGFzCiAgICA8Y29kZT4vdGVzdC9oZXJlLmh0bWwvbW9yZTwvY29kZT4gaW4gdGhlIGFib3ZlIGV4YW1wbGUgd2lsbCByZXR1cm4KICAgIGEgNDA0IE5PVCBGT1VORCBlcnJvci48L2RkPgoKICAgIDxkdD48Y29kZT5PbjwvY29kZT48L2R0PjxkZD5BIHJlcXVlc3Qgd2lsbCBiZSBhY2NlcHRlZCBpZiBhCiAgICBsZWFkaW5nIHBhdGggY29tcG9uZW50IG1hcHMgdG8gYSBmaWxlIHRoYXQgZXhpc3RzLiAgVGhlIGFib3ZlCiAgICBleGFtcGxlIDxjb2RlPi90ZXN0L2hlcmUuaHRtbC9tb3JlPC9jb2RlPiB3aWxsIGJlIGFjY2VwdGVkIGlmCiAgICA8Y29kZT4vdGVzdC9oZXJlLmh0bWw8L2NvZGU+IG1hcHMgdG8gYSB2YWxpZCBmaWxlLjwvZGQ+CgogICAgPGR0Pjxjb2RlPkRlZmF1bHQ8L2NvZGU+PC9kdD48ZGQ+VGhlIHRyZWF0bWVudCBvZiByZXF1ZXN0cyB3aXRoCiAgICB0cmFpbGluZyBwYXRobmFtZSBpbmZvcm1hdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSA8YSBocmVmPSIuLi9oYW5kbGVyLmh0bWwiPmhhbmRsZXI8L2E+IHJlc3BvbnNpYmxlIGZvciB0aGUgcmVxdWVzdC4KICAgIFRoZSBjb3JlIGhhbmRsZXIgZm9yIG5vcm1hbCBmaWxlcyBkZWZhdWx0cyB0byByZWplY3RpbmcKICAgIDxjb2RlPlBBVEhfSU5GTzwvY29kZT4gcmVxdWVzdHMuIEhhbmRsZXJzIHRoYXQgc2VydmUgc2NyaXB0cywgc3VjaCBhcyA8YSBocmVmPSJtb2RfY2dpLmh0bWwiPmNnaS1zY3JpcHQ8L2E+IGFuZCA8YSBocmVmPSJtb2RfaXNhcGkuaHRtbCI+aXNhcGktaGFuZGxlcjwvYT4sIGdlbmVyYWxseSBhY2NlcHQKICAgIDxjb2RlPlBBVEhfSU5GTzwvY29kZT4gYnkgZGVmYXVsdC48L2RkPgogICAgPC9kbD4KCiAgICA8cD5UaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoZSA8Y29kZT5BY2NlcHRQYXRoSW5mbzwvY29kZT4KICAgIGRpcmVjdGl2ZSBpcyB0byBhbGxvdyB5b3UgdG8gb3ZlcnJpZGUgdGhlIGhhbmRsZXIncyBjaG9pY2Ugb2YKICAgIGFjY2VwdGluZyBvciByZWplY3RpbmcgPGNvZGU+UEFUSF9JTkZPPC9jb2RlPi4gVGhpcyBvdmVycmlkZSBpcyByZXF1aXJlZCwKICAgIGZvciBleGFtcGxlLCB3aGVuIHlvdSB1c2UgYSA8YSBocmVmPSIuLi9maWx0ZXIuaHRtbCI+ZmlsdGVyPC9hPiwgc3VjaAogICAgYXMgPGEgaHJlZj0ibW9kX2luY2x1ZGUuaHRtbCI+SU5DTFVERVM8L2E+LCB0byBnZW5lcmF0ZSBjb250ZW50CiAgICBiYXNlZCBvbiA8Y29kZT5QQVRIX0lORk88L2NvZGU+LiAgVGhlIGNvcmUgaGFuZGxlciB3b3VsZCB1c3VhbGx5IHJlamVjdAogICAgdGhlIHJlcXVlc3QsIHNvIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiB0byBlbmFibGUKICAgIHN1Y2ggYSBzY3JpcHQ6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RmlsZXMgIm15cGF0aHMuc2h0bWwiJmd0OwogIE9wdGlvbnMgK0luY2x1ZGVzCiAgU2V0T3V0cHV0RmlsdGVyIElOQ0xVREVTCiAgQWNjZXB0UGF0aEluZm8gT24KJmx0Oy9GaWxlcyZndDs8L3ByZT4KCgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkFjY2Vzc0ZpbGVOYW1lIiBpZD0iQWNjZXNzRmlsZU5hbWUiPkFjY2Vzc0ZpbGVOYW1lPC9hPiA8YSBuYW1lPSJhY2Nlc3NmaWxlbmFtZSIgaWQ9ImFjY2Vzc2ZpbGVuYW1lIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5OYW1lIG9mIHRoZSBkaXN0cmlidXRlZCBjb25maWd1cmF0aW9uIGZpbGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+QWNjZXNzRmlsZU5hbWUgPHZhcj5maWxlbmFtZTwvdmFyPiBbPHZhcj5maWxlbmFtZTwvdmFyPl0gLi4uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkFjY2Vzc0ZpbGVOYW1lIC5odGFjY2VzczwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+V2hpbGUgcHJvY2Vzc2luZyBhIHJlcXVlc3QsIHRoZSBzZXJ2ZXIgbG9va3MgZm9yCiAgICB0aGUgZmlyc3QgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlIGZyb20gdGhpcyBsaXN0IG9mIG5hbWVzIGluCiAgICBldmVyeSBkaXJlY3Rvcnkgb2YgdGhlIHBhdGggdG8gdGhlIGRvY3VtZW50LCBpZiBkaXN0cmlidXRlZAogICAgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgPGEgaHJlZj0iI2FsbG93b3ZlcnJpZGUiPmVuYWJsZWQgZm9yIHRoYXQKICAgIGRpcmVjdG9yeTwvYT4uIEZvciBleGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWNjZXNzRmlsZU5hbWUgLmFjbDwvcHJlPgoKCiAgICA8cD5CZWZvcmUgcmV0dXJuaW5nIHRoZSBkb2N1bWVudAogICAgPGNvZGU+L3Vzci9sb2NhbC93ZWIvaW5kZXguaHRtbDwvY29kZT4sIHRoZSBzZXJ2ZXIgd2lsbCByZWFkCiAgICA8Y29kZT4vLmFjbDwvY29kZT4sIDxjb2RlPi91c3IvLmFjbDwvY29kZT4sCiAgICA8Y29kZT4vdXNyL2xvY2FsLy5hY2w8L2NvZGU+IGFuZCA8Y29kZT4vdXNyL2xvY2FsL3dlYi8uYWNsPC9jb2RlPgogICAgZm9yIGRpcmVjdGl2ZXMgdW5sZXNzIHRoZXkgaGF2ZSBiZWVuIGRpc2FibGVkIHdpdGg6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5ICIvIiZndDsKICAgIEFsbG93T3ZlcnJpZGUgTm9uZQombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjYWxsb3dvdmVycmlkZSI+QWxsb3dPdmVycmlkZTwvYT48L2NvZGU+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2NvbmZpZ3VyaW5nLmh0bWwiPkNvbmZpZ3VyYXRpb24gRmlsZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2hvd3RvL2h0YWNjZXNzLmh0bWwiPi5odGFjY2VzcyBGaWxlczwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQWRkRGVmYXVsdENoYXJzZXQiIGlkPSJBZGREZWZhdWx0Q2hhcnNldCI+QWRkRGVmYXVsdENoYXJzZXQ8L2E+IDxhIG5hbWU9ImFkZGRlZmF1bHRjaGFyc2V0IiBpZD0iYWRkZGVmYXVsdGNoYXJzZXQiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkRlZmF1bHQgY2hhcnNldCBwYXJhbWV0ZXIgdG8gYmUgYWRkZWQgd2hlbiBhIHJlc3BvbnNlCmNvbnRlbnQtdHlwZSBpcyA8Y29kZT50ZXh0L3BsYWluPC9jb2RlPiBvciA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkFkZERlZmF1bHRDaGFyc2V0IE9ufE9mZnw8dmFyPmNoYXJzZXQ8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+QWRkRGVmYXVsdENoYXJzZXQgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIHNwZWNpZmllcyBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBtZWRpYSB0eXBlCiAgICBjaGFyc2V0IHBhcmFtZXRlciAodGhlIG5hbWUgb2YgYSBjaGFyYWN0ZXIgZW5jb2RpbmcpIHRvIGJlIGFkZGVkCiAgICB0byBhIHJlc3BvbnNlIGlmIGFuZCBvbmx5IGlmIHRoZSByZXNwb25zZSdzIGNvbnRlbnQtdHlwZSBpcyBlaXRoZXIKICAgIDxjb2RlPnRleHQvcGxhaW48L2NvZGU+IG9yIDxjb2RlPnRleHQvaHRtbDwvY29kZT4uICBUaGlzIHNob3VsZCBvdmVycmlkZQogICAgYW55IGNoYXJzZXQgc3BlY2lmaWVkIGluIHRoZSBib2R5IG9mIHRoZSByZXNwb25zZSB2aWEgYSA8Y29kZT5NRVRBPC9jb2RlPgogICAgZWxlbWVudCwgdGhvdWdoIHRoZSBleGFjdCBiZWhhdmlvciBpcyBvZnRlbiBkZXBlbmRlbnQgb24gdGhlIHVzZXIncyBjbGllbnQKICAgIGNvbmZpZ3VyYXRpb24uIEEgc2V0dGluZyBvZiA8Y29kZT5BZGREZWZhdWx0Q2hhcnNldCBPZmY8L2NvZGU+CiAgICBkaXNhYmxlcyB0aGlzIGZ1bmN0aW9uYWxpdHkuIDxjb2RlPkFkZERlZmF1bHRDaGFyc2V0IE9uPC9jb2RlPiBlbmFibGVzCiAgICBhIGRlZmF1bHQgY2hhcnNldCBvZiA8Y29kZT5pc28tODg1OS0xPC9jb2RlPi4gQW55IG90aGVyIHZhbHVlIGlzIGFzc3VtZWQKICAgIHRvIGJlIHRoZSA8dmFyPmNoYXJzZXQ8L3Zhcj4gdG8gYmUgdXNlZCwgd2hpY2ggc2hvdWxkIGJlIG9uZSBvZiB0aGUKICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMiPklBTkEgcmVnaXN0ZXJlZAogICAgY2hhcnNldCB2YWx1ZXM8L2E+IGZvciB1c2UgaW4gSW50ZXJuZXQgbWVkaWEgdHlwZXMgKE1JTUUgdHlwZXMpLgogICAgRm9yIGV4YW1wbGU6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5BZGREZWZhdWx0Q2hhcnNldCB1dGYtODwvcHJlPgoKCiAgICA8cD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5BZGREZWZhdWx0Q2hhcnNldDwvY29kZT4gc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGFsbAogICAgb2YgdGhlIHRleHQgcmVzb3VyY2VzIHRvIHdoaWNoIGl0IGFwcGxpZXMgYXJlIGtub3duIHRvIGJlIGluIHRoYXQKICAgIGNoYXJhY3RlciBlbmNvZGluZyBhbmQgaXQgaXMgdG9vIGluY29udmVuaWVudCB0byBsYWJlbCB0aGVpciBjaGFyc2V0CiAgICBpbmRpdmlkdWFsbHkuIE9uZSBzdWNoIGV4YW1wbGUgaXMgdG8gYWRkIHRoZSBjaGFyc2V0IHBhcmFtZXRlcgogICAgdG8gcmVzb3VyY2VzIGNvbnRhaW5pbmcgZ2VuZXJhdGVkIGNvbnRlbnQsIHN1Y2ggYXMgbGVnYWN5IENHSQogICAgc2NyaXB0cywgdGhhdCBtaWdodCBiZSB2dWxuZXJhYmxlIHRvIGNyb3NzLXNpdGUgc2NyaXB0aW5nIGF0dGFja3MKICAgIGR1ZSB0byB1c2VyLXByb3ZpZGVkIGRhdGEgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIG91dHB1dC4gIE5vdGUsIGhvd2V2ZXIsCiAgICB0aGF0IGEgYmV0dGVyIHNvbHV0aW9uIGlzIHRvIGp1c3QgZml4IChvciBkZWxldGUpIHRob3NlIHNjcmlwdHMsIHNpbmNlCiAgICBzZXR0aW5nIGEgZGVmYXVsdCBjaGFyc2V0IGRvZXMgbm90IHByb3RlY3QgdXNlcnMgdGhhdCBoYXZlIGVuYWJsZWQKICAgIHRoZSAiYXV0by1kZXRlY3QgY2hhcmFjdGVyIGVuY29kaW5nIiBmZWF0dXJlIG9uIHRoZWlyIGJyb3dzZXIuPC9wPgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9taW1lLmh0bWwjYWRkY2hhcnNldCI+QWRkQ2hhcnNldDwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkFsbG93RW5jb2RlZFNsYXNoZXMiIGlkPSJBbGxvd0VuY29kZWRTbGFzaGVzIj5BbGxvd0VuY29kZWRTbGFzaGVzPC9hPiA8YSBuYW1lPSJhbGxvd2VuY29kZWRzbGFzaGVzIiBpZD0iYWxsb3dlbmNvZGVkc2xhc2hlcyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGVuY29kZWQgcGF0aCBzZXBhcmF0b3JzIGluIFVSTHMgYXJlIGFsbG93ZWQgdG8KYmUgcGFzc2VkIHRocm91Z2g8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+QWxsb3dFbmNvZGVkU2xhc2hlcyBPbnxPZmZ8Tm9EZWNvZGU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+QWxsb3dFbmNvZGVkU2xhc2hlcyBPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPgpOb0RlY29kZSBvcHRpb24gYXZhaWxhYmxlIGluIDIuMy4xMiBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkFsbG93RW5jb2RlZFNsYXNoZXM8L2NvZGU+IGRpcmVjdGl2ZSBhbGxvd3MgVVJMcwogICAgd2hpY2ggY29udGFpbiBlbmNvZGVkIHBhdGggc2VwYXJhdG9ycyAoPGNvZGU+JTJGPC9jb2RlPiBmb3IgPGNvZGU+LzwvY29kZT4KICAgIGFuZCBhZGRpdGlvbmFsbHkgPGNvZGU+JTVDPC9jb2RlPiBmb3IgPGNvZGU+XDwvY29kZT4gb24gYWNjb3JkYW50IHN5c3RlbXMpCiAgICB0byBiZSB1c2VkIGluIHRoZSBwYXRoIGluZm8uPC9wPgoKICAgIDxwPldpdGggdGhlIGRlZmF1bHQgdmFsdWUsIDxjb2RlPk9mZjwvY29kZT4sIHN1Y2ggVVJMcyBhcmUgcmVmdXNlZAogICAgd2l0aCBhIDQwNCAoTm90IGZvdW5kKSBlcnJvci48L3A+CgogICAgPHA+V2l0aCB0aGUgdmFsdWUgPGNvZGU+T248L2NvZGU+LCBzdWNoIFVSTHMgYXJlIGFjY2VwdGVkLCBhbmQgZW5jb2RlZAogICAgICBzbGFzaGVzIGFyZSBkZWNvZGVkIGxpa2UgYWxsIG90aGVyIGVuY29kZWQgY2hhcmFjdGVycy48L3A+CgogICAgPHA+V2l0aCB0aGUgdmFsdWUgPGNvZGU+Tm9EZWNvZGU8L2NvZGU+LCBzdWNoIFVSTHMgYXJlIGFjY2VwdGVkLCBidXQKICAgICAgZW5jb2RlZCBzbGFzaGVzIGFyZSBub3QgZGVjb2RlZCBidXQgbGVmdCBpbiB0aGVpciBlbmNvZGVkIHN0YXRlLjwvcD4KCiAgICA8cD5UdXJuaW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkFsbG93RW5jb2RlZFNsYXNoZXM8L2NvZGU+IDxjb2RlPk9uPC9jb2RlPiBpcwogICAgbW9zdGx5IHVzZWZ1bCB3aGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZT5QQVRIX0lORk88L2NvZGU+LjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICAgIDxwPklmIGVuY29kZWQgc2xhc2hlcyBhcmUgbmVlZGVkIGluIHBhdGggaW5mbywgdXNlIG9mIDxjb2RlPk5vRGVjb2RlPC9jb2RlPiBpcwogICAgICBzdHJvbmdseSByZWNvbW1lbmRlZCBhcyBhIHNlY3VyaXR5IG1lYXN1cmUuICBBbGxvd2luZyBzbGFzaGVzCiAgICAgIHRvIGJlIGRlY29kZWQgY291bGQgcG90ZW50aWFsbHkgYWxsb3cgdW5zYWZlIHBhdGhzLjwvcD4KICAgIDwvZGl2PgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2FjY2VwdHBhdGhpbmZvIj5BY2NlcHRQYXRoSW5mbzwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkFsbG93T3ZlcnJpZGUiIGlkPSJBbGxvd092ZXJyaWRlIj5BbGxvd092ZXJyaWRlPC9hPiA8YSBuYW1lPSJhbGxvd292ZXJyaWRlIiBpZD0iYWxsb3dvdmVycmlkZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+VHlwZXMgb2YgZGlyZWN0aXZlcyB0aGF0IGFyZSBhbGxvd2VkIGluCjxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+QWxsb3dPdmVycmlkZSBBbGx8Tm9uZXw8dmFyPmRpcmVjdGl2ZS10eXBlPC92YXI+Cls8dmFyPmRpcmVjdGl2ZS10eXBlPC92YXI+XSAuLi48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+QWxsb3dPdmVycmlkZSBOb25lICgyLjMuOSBhbmQgbGF0ZXIpLCBBbGxvd092ZXJyaWRlIEFsbCAoMi4zLjggYW5kIGVhcmxpZXIpPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPmRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5XaGVuIHRoZSBzZXJ2ZXIgZmluZHMgYW4gPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlIChhcwogICAgc3BlY2lmaWVkIGJ5IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNhY2Nlc3NmaWxlbmFtZSI+QWNjZXNzRmlsZU5hbWU8L2E+PC9jb2RlPiksCiAgICBpdCBuZWVkcyB0byBrbm93IHdoaWNoIGRpcmVjdGl2ZXMgZGVjbGFyZWQgaW4gdGhhdCBmaWxlIGNhbiBvdmVycmlkZQogICAgZWFybGllciBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMuPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Pbmx5IGF2YWlsYWJsZSBpbiAmbHQ7RGlyZWN0b3J5Jmd0OyBzZWN0aW9uczwvaDM+CiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5BbGxvd092ZXJyaWRlPC9jb2RlPiBpcyB2YWxpZCBvbmx5IGluCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+CiAgICBzZWN0aW9ucyBzcGVjaWZpZWQgd2l0aG91dCByZWd1bGFyIGV4cHJlc3Npb25zLCBub3QgaW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnltYXRjaCI+Jmx0O0RpcmVjdG9yeU1hdGNoJmd0OzwvYT48L2NvZGU+IG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucy4KICAgIDwvZGl2PgoKICAgIDxwPldoZW4gdGhpcyBkaXJlY3RpdmUgaXMgc2V0IHRvIDxjb2RlPk5vbmU8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjYWxsb3dvdmVycmlkZWxpc3QiPkFsbG93T3ZlcnJpZGVMaXN0PC9hPjwvY29kZT4gaXMgc2V0IHRvCiAgICA8Y29kZT5Ob25lPC9jb2RlPiA8YSBocmVmPSIjYWNjZXNzZmlsZW5hbWUiPi5odGFjY2VzczwvYT4sIGZpbGVzIGFyZQogICAgY29tcGxldGVseSBpZ25vcmVkLiBJbiB0aGlzIGNhc2UsIHRoZSBzZXJ2ZXIgd2lsbCBub3QgZXZlbiBhdHRlbXB0CiAgICB0byByZWFkIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXMgaW4gdGhlIGZpbGVzeXN0ZW0uPC9wPgoKICAgIDxwPldoZW4gdGhpcyBkaXJlY3RpdmUgaXMgc2V0IHRvIDxjb2RlPkFsbDwvY29kZT4sIHRoZW4gYW55CiAgICBkaXJlY3RpdmUgd2hpY2ggaGFzIHRoZSAuaHRhY2Nlc3MgPGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0PC9hPiBpcyBhbGxvd2VkIGluCiAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzLjwvcD4KCiAgICA8cD5UaGUgPHZhcj5kaXJlY3RpdmUtdHlwZTwvdmFyPiBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcKICAgIGdyb3VwaW5ncyBvZiBkaXJlY3RpdmVzLjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD5BdXRoQ29uZmlnPC9kdD4KCiAgICAgIDxkZD4KCiAgICAgIEFsbG93IHVzZSBvZiB0aGUgYXV0aG9yaXphdGlvbiBkaXJlY3RpdmVzICg8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2RibS5odG1sI2F1dGhkYm1ncm91cGZpbGUiPkF1dGhEQk1Hcm91cEZpbGU8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9kYm0uaHRtbCNhdXRoZGJtdXNlcmZpbGUiPkF1dGhEQk1Vc2VyRmlsZTwvYT48L2NvZGU+LAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2dyb3VwZmlsZS5odG1sI2F1dGhncm91cGZpbGUiPkF1dGhHcm91cEZpbGU8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9jb3JlLmh0bWwjYXV0aG5hbWUiPkF1dGhOYW1lPC9hPjwvY29kZT4sCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fY29yZS5odG1sI2F1dGh0eXBlIj5BdXRoVHlwZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2ZpbGUuaHRtbCNhdXRodXNlcmZpbGUiPkF1dGhVc2VyRmlsZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCNyZXF1aXJlIj5SZXF1aXJlPC9hPjwvY29kZT4sIDxlbT5ldGMuPC9lbT4pLjwvZGQ+CgogICAgICA8ZHQ+RmlsZUluZm88L2R0PgoKICAgICAgPGRkPgogICAgICBBbGxvdyB1c2Ugb2YgdGhlIGRpcmVjdGl2ZXMgY29udHJvbGxpbmcgZG9jdW1lbnQgdHlwZXMKICAgICAoPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2Vycm9yZG9jdW1lbnQiPkVycm9yRG9jdW1lbnQ8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2ZvcmNldHlwZSI+Rm9yY2VUeXBlPC9hPjwvY29kZT4sCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbmVnb3RpYXRpb24uaHRtbCNsYW5ndWFnZXByaW9yaXR5Ij5MYW5ndWFnZVByaW9yaXR5PC9hPjwvY29kZT4sCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXRoYW5kbGVyIj5TZXRIYW5kbGVyPC9hPjwvY29kZT4sCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXRpbnB1dGZpbHRlciI+U2V0SW5wdXRGaWx0ZXI8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NldG91dHB1dGZpbHRlciI+U2V0T3V0cHV0RmlsdGVyPC9hPjwvY29kZT4sIGFuZAogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCI+bW9kX21pbWU8L2E+PC9jb2RlPiBBZGQqIGFuZCBSZW1vdmUqIGRpcmVjdGl2ZXMpLAogICAgICBkb2N1bWVudCBtZXRhIGRhdGEgKDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaGVhZGVycy5odG1sI2hlYWRlciI+SGVhZGVyPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaGVhZGVycy5odG1sI3JlcXVlc3RoZWFkZXIiPlJlcXVlc3RIZWFkZXI8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zZXRlbnZpZi5odG1sI3NldGVudmlmIj5TZXRFbnZJZjwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NldGVudmlmLmh0bWwjc2V0ZW52aWZub2Nhc2UiPlNldEVudklmTm9DYXNlPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc2V0ZW52aWYuaHRtbCNicm93c2VybWF0Y2giPkJyb3dzZXJNYXRjaDwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3VzZXJ0cmFjay5odG1sI2Nvb2tpZWV4cGlyZXMiPkNvb2tpZUV4cGlyZXM8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF91c2VydHJhY2suaHRtbCNjb29raWVkb21haW4iPkNvb2tpZURvbWFpbjwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3VzZXJ0cmFjay5odG1sI2Nvb2tpZXN0eWxlIj5Db29raWVTdHlsZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3VzZXJ0cmFjay5odG1sI2Nvb2tpZXRyYWNraW5nIj5Db29raWVUcmFja2luZzwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3VzZXJ0cmFjay5odG1sI2Nvb2tpZW5hbWUiPkNvb2tpZU5hbWU8L2E+PC9jb2RlPiksCiAgICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5tb2RfcmV3cml0ZTwvYT48L2NvZGU+IGRpcmVjdGl2ZXMgKDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVlbmdpbmUiPlJld3JpdGVFbmdpbmU8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZW9wdGlvbnMiPlJld3JpdGVPcHRpb25zPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGViYXNlIj5SZXdyaXRlQmFzZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlY29uZCI+UmV3cml0ZUNvbmQ8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwjcmV3cml0ZXJ1bGUiPlJld3JpdGVSdWxlPC9hPjwvY29kZT4pLAogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FsaWFzLmh0bWwiPm1vZF9hbGlhczwvYT48L2NvZGU+IGRpcmVjdGl2ZXMgKDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYWxpYXMuaHRtbCNyZWRpcmVjdCI+UmVkaXJlY3Q8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hbGlhcy5odG1sI3JlZGlyZWN0dGVtcCI+UmVkaXJlY3RUZW1wPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYWxpYXMuaHRtbCNyZWRpcmVjdHBlcm1hbmVudCI+UmVkaXJlY3RQZXJtYW5lbnQ8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hbGlhcy5odG1sI3JlZGlyZWN0bWF0Y2giPlJlZGlyZWN0TWF0Y2g8L2E+PC9jb2RlPiksIGFuZAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FjdGlvbnMuaHRtbCNhY3Rpb24iPkFjdGlvbjwvYT48L2NvZGU+IGZyb20KICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY3Rpb25zLmh0bWwiPm1vZF9hY3Rpb25zPC9hPjwvY29kZT4uCiAgICAgIDwvZGQ+CgogICAgICA8ZHQ+SW5kZXhlczwvZHQ+CgogICAgICA8ZGQ+CiAgICAgIEFsbG93IHVzZSBvZiB0aGUgZGlyZWN0aXZlcyBjb250cm9sbGluZyBkaXJlY3RvcnkgaW5kZXhpbmcKICAgICAgKDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0b2luZGV4Lmh0bWwjYWRkZGVzY3JpcHRpb24iPkFkZERlc2NyaXB0aW9uPC9hPjwvY29kZT4sCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0b2luZGV4Lmh0bWwjYWRkaWNvbiI+QWRkSWNvbjwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dG9pbmRleC5odG1sI2FkZGljb25ieWVuY29kaW5nIj5BZGRJY29uQnlFbmNvZGluZzwvYT48L2NvZGU+LAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dG9pbmRleC5odG1sI2FkZGljb25ieXR5cGUiPkFkZEljb25CeVR5cGU8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRvaW5kZXguaHRtbCNkZWZhdWx0aWNvbiI+RGVmYXVsdEljb248L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kaXIuaHRtbCNkaXJlY3RvcnlpbmRleCI+RGlyZWN0b3J5SW5kZXg8L2E+PC9jb2RlPiwgPGEgaHJlZj0ibW9kX2F1dG9pbmRleC5odG1sI2luZGV4b3B0aW9ucy5mYW5jeWluZGV4aW5nIj48Y29kZT5GYW5jeUluZGV4aW5nPC9jb2RlPjwvYT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0b2luZGV4Lmh0bWwjaGVhZGVybmFtZSI+SGVhZGVyTmFtZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dG9pbmRleC5odG1sI2luZGV4aWdub3JlIj5JbmRleElnbm9yZTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dG9pbmRleC5odG1sI2luZGV4b3B0aW9ucyI+SW5kZXhPcHRpb25zPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0b2luZGV4Lmh0bWwjcmVhZG1lbmFtZSI+UmVhZG1lTmFtZTwvYT48L2NvZGU+LAogICAgICA8ZW0+ZXRjLjwvZW0+KS48L2RkPgoKICAgICAgPGR0PkxpbWl0PC9kdD4KCiAgICAgIDxkZD4KICAgICAgQWxsb3cgdXNlIG9mIHRoZSBkaXJlY3RpdmVzIGNvbnRyb2xsaW5nIGhvc3QgYWNjZXNzICg8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FjY2Vzc19jb21wYXQuaHRtbCNhbGxvdyI+QWxsb3c8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY2Nlc3NfY29tcGF0Lmh0bWwjZGVueSI+RGVueTwvYT48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FjY2Vzc19jb21wYXQuaHRtbCNvcmRlciI+T3JkZXI8L2E+PC9jb2RlPikuPC9kZD4KCiAgICAgIDxkdD5Ob25mYXRhbD1bT3ZlcnJpZGV8VW5rbm93bnxBbGxdPC9kdD4KCiAgICAgIDxkZD4KICAgICAgQWxsb3cgdXNlIG9mIEFsbG93T3ZlcnJpZGUgb3B0aW9uIHRvIHRyZWF0IHN5bnRheCBlcnJvcnMgaW4KICAgICAgLmh0YWNjZXNzIGFzIG5vbmZhdGFsLiBJbnN0ZWFkIG9mIGNhdXNpbmcgYW4gSW50ZXJuYWwgU2VydmVyCiAgICAgIEVycm9yLCBkaXNhbGxvd2VkIG9yIHVucmVjb2duaXNlZCBkaXJlY3RpdmVzIHdpbGwgYmUgaWdub3JlZAogICAgICBhbmQgYSB3YXJuaW5nIGxvZ2dlZDoKICAgICAgPHVsPgogICAgICAgICAgPGxpPjxzdHJvbmc+Tm9uZmF0YWw9T3ZlcnJpZGU8L3N0cm9uZz4gdHJlYXRzIGRpcmVjdGl2ZXMKICAgICAgICAgICAgICBmb3JiaWRkZW4gYnkgQWxsb3dPdmVycmlkZSBhcyBub25mYXRhbC48L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Tm9uZmF0YWw9VW5rbm93bjwvc3Ryb25nPiB0cmVhdHMgdW5rbm93biBkaXJlY3RpdmVzCiAgICAgICAgICAgICAgYXMgbm9uZmF0YWwuICBUaGlzIGNvdmVycyB0eXBvcyBhbmQgZGlyZWN0aXZlcyBpbXBsZW1lbnRlZAogICAgICAgICAgICAgIGJ5IGEgbW9kdWxlIHRoYXQncyBub3QgcHJlc2VudC48L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Tm9uZmF0YWw9QWxsPC9zdHJvbmc+IHRyZWF0cyBib3RoIHRoZSBhYm92ZSBhcyBub25mYXRhbC48L2xpPgogICAgICA8L3VsPgogICAgICA8cD5Ob3RlIHRoYXQgYSBzeW50YXggZXJyb3IgaW4gYSB2YWxpZCBkaXJlY3RpdmUgd2lsbCBzdGlsbCBjYXVzZQogICAgICBhbiBpbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuPC9wPgogICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+U2VjdXJpdHk8L2gzPgogICAgICAgICAgTm9uZmF0YWwgZXJyb3JzIG1heSBoYXZlIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBmb3IgLmh0YWNjZXNzIHVzZXJzLgogICAgICAgICAgRm9yIGV4YW1wbGUsIGlmIEFsbG93T3ZlcnJpZGUgZGlzYWxsb3dzIEF1dGhDb25maWcsIHVzZXJzJwogICAgICAgICAgY29uZmlndXJhdGlvbiBkZXNpZ25lZCB0byByZXN0cmljdCBhY2Nlc3MgdG8gYSBzaXRlIHdpbGwgYmUgZGlzYWJsZWQuCiAgICAgIDwvZGl2PgogICAgICA8L2RkPgoKICAgICAgPGR0Pk9wdGlvbnNbPTx2YXI+T3B0aW9uPC92YXI+LC4uLl08L2R0PgoKICAgICAgPGRkPgogICAgICBBbGxvdyB1c2Ugb2YgdGhlIGRpcmVjdGl2ZXMgY29udHJvbGxpbmcgc3BlY2lmaWMgZGlyZWN0b3J5CiAgICAgIGZlYXR1cmVzICg8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjb3B0aW9ucyI+T3B0aW9uczwvYT48L2NvZGU+IGFuZAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCN4Yml0aGFjayI+WEJpdEhhY2s8L2E+PC9jb2RlPikuCiAgICAgIEFuIGVxdWFsIHNpZ24gbWF5IGJlIGdpdmVuIGZvbGxvd2VkIGJ5IGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIHdpdGhvdXQgc3BhY2VzLAogICAgICBvZiBvcHRpb25zIHRoYXQgbWF5IGJlIHNldCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI29wdGlvbnMiPk9wdGlvbnM8L2E+PC9jb2RlPiBjb21tYW5kLgoKICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPkltcGxpY2l0IGRpc2FibGluZyBvZiBPcHRpb25zPC9oMz4KICAgICAgPHA+RXZlbiB0aG91Z2ggdGhlIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IG1heSBiZSB1c2VkIGluIC5odGFjY2VzcyBmaWxlcwogICAgICAgICBjYW4gYmUgbGltaXRlZCB3aXRoIHRoaXMgZGlyZWN0aXZlLCBhcyBsb25nIGFzIGFueSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjb3B0aW9ucyI+T3B0aW9uczwvYT48L2NvZGU+IGRpcmVjdGl2ZSBpcyBhbGxvd2VkIGFueQogICAgICAgICBvdGhlciBpbmhlcml0ZWQgb3B0aW9uIGNhbiBiZSBkaXNhYmxlZCBieSB1c2luZyB0aGUgbm9uLXJlbGF0aXZlCiAgICAgICAgIHN5bnRheC4gIEluIG90aGVyIHdvcmRzLCB0aGlzIG1lY2hhbmlzbSBjYW5ub3QgZm9yY2UgYSBzcGVjaWZpYyBvcHRpb24KICAgICAgICAgdG8gcmVtYWluIDxlbT5zZXQ8L2VtPiB3aGlsZSBhbGxvd2luZyBhbnkgb3RoZXJzIHRvIGJlIHNldC4KICAgICAgPC9wPjwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIEFsbG93T3ZlcnJpZGUgT3B0aW9ucz1JbmRleGVzLE11bHRpVmlld3MKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgICAgPC9kZD4KICAgIDwvZGw+CgogICAgPHA+RXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkFsbG93T3ZlcnJpZGUgQXV0aENvbmZpZyBJbmRleGVzPC9wcmU+CgoKICAgIDxwPkluIHRoZSBleGFtcGxlIGFib3ZlLCBhbGwgZGlyZWN0aXZlcyB0aGF0IGFyZSBuZWl0aGVyIGluIHRoZSBncm91cAogICAgPGNvZGU+QXV0aENvbmZpZzwvY29kZT4gbm9yIDxjb2RlPkluZGV4ZXM8L2NvZGU+IGNhdXNlIGFuIGludGVybmFsCiAgICBzZXJ2ZXIgZXJyb3IuPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxwPkZvciBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucywgZG8gbm90IHNldAogICAgPGNvZGU+QWxsb3dPdmVycmlkZTwvY29kZT4gdG8gYW55dGhpbmcgb3RoZXIgdGhhbiA8Y29kZT5Ob25lPC9jb2RlPgogICAgaW4geW91ciA8Y29kZT4mbHQ7RGlyZWN0b3J5ICIvIiZndDs8L2NvZGU+IGJsb2NrLiBJbnN0ZWFkLCBmaW5kIChvcgogICAgY3JlYXRlKSB0aGUgPGNvZGU+Jmx0O0RpcmVjdG9yeSZndDs8L2NvZGU+IGJsb2NrIHRoYXQgcmVmZXJzIHRvIHRoZQogICAgZGlyZWN0b3J5IHdoZXJlIHlvdSdyZSBhY3R1YWxseSBwbGFubmluZyB0byBwbGFjZSBhCiAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGUuPC9wPgogICAgPC9kaXY+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjYWNjZXNzZmlsZW5hbWUiPkFjY2Vzc0ZpbGVOYW1lPC9hPjwvY29kZT48L2xpPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2FsbG93b3ZlcnJpZGVsaXN0Ij5BbGxvd092ZXJyaWRlTGlzdDwvYT48L2NvZGU+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2NvbmZpZ3VyaW5nLmh0bWwiPkNvbmZpZ3VyYXRpb24gRmlsZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2hvd3RvL2h0YWNjZXNzLmh0bWwiPi5odGFjY2VzcyBGaWxlczwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQWxsb3dPdmVycmlkZUxpc3QiIGlkPSJBbGxvd092ZXJyaWRlTGlzdCI+QWxsb3dPdmVycmlkZUxpc3Q8L2E+IDxhIG5hbWU9ImFsbG93b3ZlcnJpZGVsaXN0IiBpZD0iYWxsb3dvdmVycmlkZWxpc3QiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkluZGl2aWR1YWwgZGlyZWN0aXZlcyB0aGF0IGFyZSBhbGxvd2VkIGluCjxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+QWxsb3dPdmVycmlkZUxpc3QgTm9uZXw8dmFyPmRpcmVjdGl2ZTwvdmFyPgpbPHZhcj5kaXJlY3RpdmUtdHlwZTwvdmFyPl0gLi4uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkFsbG93T3ZlcnJpZGVMaXN0IE5vbmU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+ZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPldoZW4gdGhlIHNlcnZlciBmaW5kcyBhbiA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGUgKGFzCiAgICBzcGVjaWZpZWQgYnkgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2FjY2Vzc2ZpbGVuYW1lIj5BY2Nlc3NGaWxlTmFtZTwvYT48L2NvZGU+KSwKICAgIGl0IG5lZWRzIHRvIGtub3cgd2hpY2ggZGlyZWN0aXZlcyBkZWNsYXJlZCBpbiB0aGF0IGZpbGUgY2FuIG92ZXJyaWRlCiAgICBlYXJsaWVyIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcy48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk9ubHkgYXZhaWxhYmxlIGluICZsdDtEaXJlY3RvcnkmZ3Q7IHNlY3Rpb25zPC9oMz4KICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkFsbG93T3ZlcnJpZGVMaXN0PC9jb2RlPiBpcyB2YWxpZCBvbmx5IGluCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+CiAgICBzZWN0aW9ucyBzcGVjaWZpZWQgd2l0aG91dCByZWd1bGFyIGV4cHJlc3Npb25zLCBub3QgaW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnltYXRjaCI+Jmx0O0RpcmVjdG9yeU1hdGNoJmd0OzwvYT48L2NvZGU+IG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucy4KICAgIDwvZGl2PgoKICAgIDxwPldoZW4gdGhpcyBkaXJlY3RpdmUgaXMgc2V0IHRvIDxjb2RlPk5vbmU8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjYWxsb3dvdmVycmlkZSI+QWxsb3dPdmVycmlkZTwvYT48L2NvZGU+IGlzIHNldCB0byA8Y29kZT5Ob25lPC9jb2RlPiwKICAgIHRoZW4gPGEgaHJlZj0iI2FjY2Vzc2ZpbGVuYW1lIj4uaHRhY2Nlc3M8L2E+IGZpbGVzIGFyZSBjb21wbGV0ZWx5CiAgICBpZ25vcmVkLiAgSW4gdGhpcyBjYXNlLCB0aGUgc2VydmVyIHdpbGwgbm90IGV2ZW4gYXR0ZW1wdCB0byByZWFkCiAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzIGluIHRoZSBmaWxlc3lzdGVtLjwvcD4KCiAgICA8cD5FeGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWxsb3dPdmVycmlkZSBOb25lCkFsbG93T3ZlcnJpZGVMaXN0IFJlZGlyZWN0IFJlZGlyZWN0TWF0Y2g8L3ByZT4KCgogICAgPHA+SW4gdGhlIGV4YW1wbGUgYWJvdmUsIG9ubHkgdGhlIDxjb2RlPlJlZGlyZWN0PC9jb2RlPiBhbmQKICAgIDxjb2RlPlJlZGlyZWN0TWF0Y2g8L2NvZGU+IGRpcmVjdGl2ZXMgYXJlIGFsbG93ZWQuIEFsbCBvdGhlcnMgd2lsbAogICAgY2F1c2UgYW4gaW50ZXJuYWwgc2VydmVyIGVycm9yLjwvcD4KCiAgICA8cD5FeGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWxsb3dPdmVycmlkZSBBdXRoQ29uZmlnCkFsbG93T3ZlcnJpZGVMaXN0IENvb2tpZVRyYWNraW5nIENvb2tpZU5hbWU8L3ByZT4KCgogICAgPHA+SW4gdGhlIGV4YW1wbGUgYWJvdmUsIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNhbGxvd292ZXJyaWRlIj5BbGxvd092ZXJyaWRlCiAgICA8L2E+PC9jb2RlPiBncmFudHMgcGVybWlzc2lvbiB0byB0aGUgPGNvZGU+QXV0aENvbmZpZzwvY29kZT4KICAgIGRpcmVjdGl2ZSBncm91cGluZyBhbmQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+QWxsb3dPdmVycmlkZUxpc3Q8L2NvZGU+IGdyYW50cwogICAgcGVybWlzc2lvbiB0byBvbmx5IHR3byBkaXJlY3RpdmVzIGZyb20gdGhlIDxjb2RlPkZpbGVJbmZvPC9jb2RlPiBkaXJlY3RpdmUKICAgIGdyb3VwaW5nLiBBbGwgb3RoZXJzIHdpbGwgY2F1c2UgYW4gaW50ZXJuYWwgc2VydmVyIGVycm9yLjwvcD4KCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNhY2Nlc3NmaWxlbmFtZSI+QWNjZXNzRmlsZU5hbWU8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjYWxsb3dvdmVycmlkZSI+QWxsb3dPdmVycmlkZTwvYT48L2NvZGU+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2NvbmZpZ3VyaW5nLmh0bWwiPkNvbmZpZ3VyYXRpb24gRmlsZXM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2hvd3RvL2h0YWNjZXNzLmh0bWwiPi5odGFjY2VzcyBGaWxlczwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iQ0dJTWFwRXh0ZW5zaW9uIiBpZD0iQ0dJTWFwRXh0ZW5zaW9uIj5DR0lNYXBFeHRlbnNpb248L2E+IDxhIG5hbWU9ImNnaW1hcGV4dGVuc2lvbiIgaWQ9ImNnaW1hcGV4dGVuc2lvbiI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+VGVjaG5pcXVlIGZvciBsb2NhdGluZyB0aGUgaW50ZXJwcmV0ZXIgZm9yIENHSQpzY3JpcHRzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkNHSU1hcEV4dGVuc2lvbiA8dmFyPmNnaS1wYXRoPC92YXI+IDx2YXI+LmV4dGVuc2lvbjwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5kaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+RmlsZUluZm88L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+TmV0V2FyZSBvbmx5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgdXNlZCB0byBjb250cm9sIGhvdyBBcGFjaGUgaHR0cGQgZmluZHMgdGhlCiAgICBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBDR0kgc2NyaXB0cy4gRm9yIGV4YW1wbGUsIHNldHRpbmcKICAgIDxjb2RlPkNHSU1hcEV4dGVuc2lvbiBzeXM6XGZvby5ubG0gLmZvbzwvY29kZT4gd2lsbAogICAgY2F1c2UgYWxsIENHSSBzY3JpcHQgZmlsZXMgd2l0aCBhIDxjb2RlPi5mb288L2NvZGU+IGV4dGVuc2lvbiB0bwogICAgYmUgcGFzc2VkIHRvIHRoZSBGT08gaW50ZXJwcmV0ZXIuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkNHSVBhc3NBdXRoIiBpZD0iQ0dJUGFzc0F1dGgiPkNHSVBhc3NBdXRoPC9hPiA8YSBuYW1lPSJjZ2lwYXNzYXV0aCIgaWQ9ImNnaXBhc3NhdXRoIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5FbmFibGVzIHBhc3NpbmcgSFRUUCBhdXRob3JpemF0aW9uIGhlYWRlcnMgdG8gc2NyaXB0cyBhcyBDR0kKdmFyaWFibGVzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkNHSVBhc3NBdXRoIE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5DR0lQYXNzQXV0aCBPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+ZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkF1dGhDb25maWc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSBIVFRQIFNlcnZlciAyLjQuMTMgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Q0dJUGFzc0F1dGg8L2NvZGU+IGFsbG93cyBzY3JpcHRzIGFjY2VzcyB0byBIVFRQCiAgICBhdXRob3JpemF0aW9uIGhlYWRlcnMgc3VjaCBhcyA8Y29kZT5BdXRob3JpemF0aW9uPC9jb2RlPiwgd2hpY2ggaXMKICAgIHJlcXVpcmVkIGZvciBzY3JpcHRzIHRoYXQgaW1wbGVtZW50IEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24uCiAgICBOb3JtYWxseSB0aGVzZSBIVFRQIGhlYWRlcnMgYXJlIGhpZGRlbiBmcm9tIHNjcmlwdHMuIFRoaXMgaXMgdG8gZGlzYWxsb3cKICAgIHNjcmlwdHMgZnJvbSBzZWVpbmcgdXNlciBpZHMgYW5kIHBhc3N3b3JkcyB1c2VkIHRvIGFjY2VzcyB0aGUgc2VydmVyIHdoZW4KICAgIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgd2ViIHNlcnZlci4gIFRoaXMgZGlyZWN0aXZlCiAgICBzaG91bGQgYmUgdXNlZCB3aGVuIHNjcmlwdHMgYXJlIGFsbG93ZWQgdG8gaW1wbGVtZW50IEhUVFAgQmFzaWMKICAgIGF1dGhlbnRpY2F0aW9uLjwvcD4KCiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBjb21waWxlLXRpbWUgc2V0dGluZwogICAgPGNvZGU+U0VDVVJJVFlfSE9MRV9QQVNTX0FVVEhPUklaQVRJT048L2NvZGU+IHdoaWNoIGhhcyBiZWVuIGF2YWlsYWJsZQogICAgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgQXBhY2hlIEhUVFAgU2VydmVyLjwvcD4KCiAgICA8cD5UaGUgc2V0dGluZyBpcyByZXNwZWN0ZWQgYnkgYW55IG1vZHVsZXMgd2hpY2ggdXNlCiAgICA8Y29kZT5hcF9hZGRfY29tbW9uX3ZhcnMoKTwvY29kZT4sIHN1Y2ggYXMgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jZ2kuaHRtbCI+bW9kX2NnaTwvYT48L2NvZGU+LAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jZ2lkLmh0bWwiPm1vZF9jZ2lkPC9hPjwvY29kZT4sIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfZmNnaS5odG1sIj5tb2RfcHJveHlfZmNnaTwvYT48L2NvZGU+LAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9zY2dpLmh0bWwiPm1vZF9wcm94eV9zY2dpPC9hPjwvY29kZT4sIGFuZCBzbyBvbi4gIE5vdGFibHksIGl0IGFmZmVjdHMKICAgIG1vZHVsZXMgd2hpY2ggZG9uJ3QgaGFuZGxlIHRoZSByZXF1ZXN0IGluIHRoZSB1c3VhbCBzZW5zZSBidXQKICAgIHN0aWxsIHVzZSB0aGlzIEFQSTsgZXhhbXBsZXMgb2YgdGhpcyBhcmUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4KICAgIGFuZCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2V4dF9maWx0ZXIuaHRtbCI+bW9kX2V4dF9maWx0ZXI8L2E+PC9jb2RlPi4gIFRoaXJkLXBhcnR5IG1vZHVsZXMgdGhhdCBkb24ndAogICAgdXNlIDxjb2RlPmFwX2FkZF9jb21tb25fdmFycygpPC9jb2RlPiBtYXkgY2hvb3NlIHRvIHJlc3BlY3QgdGhlIHNldHRpbmcKICAgIGFzIHdlbGwuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkNHSVZhciIgaWQ9IkNHSVZhciI+Q0dJVmFyPC9hPiA8YSBuYW1lPSJjZ2l2YXIiIGlkPSJjZ2l2YXIiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbnRyb2xzIGhvdyBzb21lIENHSSB2YXJpYWJsZXMgYXJlIHNldDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5DR0lWYXIgPHZhcj52YXJpYWJsZTwvdmFyPiA8dmFyPnJ1bGU8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+ZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgMi40LjIxIGFuZCBsYXRlcjwvdGQ+PC90cj4KPC90YWJsZT4KICA8cD5UaGlzIGRpcmVjdGl2ZSBjb250cm9scyBob3cgc29tZSBDR0kgdmFyaWFibGVzIGFyZSBzZXQuPC9wPgoKICA8cD48c3Ryb25nPlJFUVVFU1RfVVJJPC9zdHJvbmc+IHJ1bGVzOjwvcD4KICA8ZGw+CiAgICA8ZHQ+PGNvZGU+b3JpZ2luYWwtdXJpPC9jb2RlPiAoZGVmYXVsdCk8L2R0PgogICAgPGRkPlRoZSB2YWx1ZSBpcyB0YWtlbiBmcm9tIHRoZSBvcmlnaW5hbCByZXF1ZXN0IGxpbmUsIGFuZCB3aWxsIG5vdAogICAgcmVmbGVjdCBpbnRlcm5hbCByZWRpcmVjdHMgb3Igc3VicmVxdWVzdHMgd2hpY2ggY2hhbmdlIHRoZSByZXF1ZXN0ZWQKICAgIHJlc291cmNlLjwvZGQ+CiAgICA8ZHQ+PGNvZGU+Y3VycmVudC11cmk8L2NvZGU+PC9kdD4KICAgIDxkZD5UaGUgdmFsdWUgcmVmbGVjdHMgdGhlIHJlc291cmNlIGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQsCiAgICB3aGljaCBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIG9yaWdpbmFsIHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50CiAgICBkdWUgdG8gaW50ZXJuYWwgcmVkaXJlY3RzIG9yIHN1YnJlcXVlc3RzLjwvZGQ+CiAgPC9kbD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJDb250ZW50RGlnZXN0IiBpZD0iQ29udGVudERpZ2VzdCI+Q29udGVudERpZ2VzdDwvYT4gPGEgbmFtZT0iY29udGVudGRpZ2VzdCIgaWQ9ImNvbnRlbnRkaWdlc3QiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YgPGNvZGU+Q29udGVudC1NRDU8L2NvZGU+IEhUVFAgUmVzcG9uc2UKaGVhZGVyczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Db250ZW50RGlnZXN0IE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Db250ZW50RGlnZXN0IE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5PcHRpb25zPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGVuYWJsZXMgdGhlIGdlbmVyYXRpb24gb2YKICAgIDxjb2RlPkNvbnRlbnQtTUQ1PC9jb2RlPiBoZWFkZXJzIGFzIGRlZmluZWQgaW4gUkZDMTg2NAogICAgcmVzcGVjdGl2ZWx5IFJGQzI2MTYuPC9wPgoKICAgIDxwPk1ENSBpcyBhbiBhbGdvcml0aG0gZm9yIGNvbXB1dGluZyBhICJtZXNzYWdlIGRpZ2VzdCIKICAgIChzb21ldGltZXMgY2FsbGVkICJmaW5nZXJwcmludCIpIG9mIGFyYml0cmFyeS1sZW5ndGggZGF0YSwgd2l0aAogICAgYSBoaWdoIGRlZ3JlZSBvZiBjb25maWRlbmNlIHRoYXQgYW55IGFsdGVyYXRpb25zIGluIHRoZSBkYXRhCiAgICB3aWxsIGJlIHJlZmxlY3RlZCBpbiBhbHRlcmF0aW9ucyBpbiB0aGUgbWVzc2FnZSBkaWdlc3QuPC9wPgoKICAgIDxwPlRoZSA8Y29kZT5Db250ZW50LU1ENTwvY29kZT4gaGVhZGVyIHByb3ZpZGVzIGFuIGVuZC10by1lbmQKICAgIG1lc3NhZ2UgaW50ZWdyaXR5IGNoZWNrIChNSUMpIG9mIHRoZSBlbnRpdHktYm9keS4gQSBwcm94eSBvcgogICAgY2xpZW50IG1heSBjaGVjayB0aGlzIGhlYWRlciBmb3IgZGV0ZWN0aW5nIGFjY2lkZW50YWwKICAgIG1vZGlmaWNhdGlvbiBvZiB0aGUgZW50aXR5LWJvZHkgaW4gdHJhbnNpdC4gRXhhbXBsZSBoZWFkZXI6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICBDb250ZW50LU1ENTogQXVMYjdEcDFycXRSdHh6Mm05a1JwQT09CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPk5vdGUgdGhhdCB0aGlzIGNhbiBjYXVzZSBwZXJmb3JtYW5jZSBwcm9ibGVtcyBvbiB5b3VyIHNlcnZlcgogICAgc2luY2UgdGhlIG1lc3NhZ2UgZGlnZXN0IGlzIGNvbXB1dGVkIG9uIGV2ZXJ5IHJlcXVlc3QgKHRoZQogICAgdmFsdWVzIGFyZSBub3QgY2FjaGVkKS48L3A+CgogICAgPHA+PGNvZGU+Q29udGVudC1NRDU8L2NvZGU+IGlzIG9ubHkgc2VudCBmb3IgZG9jdW1lbnRzIHNlcnZlZAogICAgYnkgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwiPmNvcmU8L2E+PC9jb2RlPiwgYW5kIG5vdCBieSBhbnkgbW9kdWxlLiBGb3IgZXhhbXBsZSwKICAgIFNTSSBkb2N1bWVudHMsIG91dHB1dCBmcm9tIENHSSBzY3JpcHRzLCBhbmQgYnl0ZSByYW5nZSByZXNwb25zZXMKICAgIGRvIG5vdCBoYXZlIHRoaXMgaGVhZGVyLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJEZWZhdWx0UnVudGltZURpciIgaWQ9IkRlZmF1bHRSdW50aW1lRGlyIj5EZWZhdWx0UnVudGltZURpcjwvYT4gPGEgbmFtZT0iZGVmYXVsdHJ1bnRpbWVkaXIiIGlkPSJkZWZhdWx0cnVudGltZWRpciI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBzZXJ2ZXIgcnVuLXRpbWUgZmlsZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+RGVmYXVsdFJ1bnRpbWVEaXIgPHZhcj5kaXJlY3RvcnktcGF0aDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5EZWZhdWx0UnVudGltZURpciBERUZBVUxUX1JFTF9SVU5USU1FRElSIChsb2dzLyk8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gQXBhY2hlIDIuNC4yIGFuZCBsYXRlcjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5EZWZhdWx0UnVudGltZURpcjwvY29kZT4gZGlyZWN0aXZlIHNldHMgdGhlCiAgICBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIHNlcnZlciB3aWxsIGNyZWF0ZSB2YXJpb3VzIHJ1bi10aW1lIGZpbGVzCiAgICAoc2hhcmVkIG1lbW9yeSwgbG9ja3MsIGV0Yy4pLiBJZiBzZXQgYXMgYSByZWxhdGl2ZSBwYXRoLCB0aGUgZnVsbCBwYXRoCiAgICB3aWxsIGJlIHJlbGF0aXZlIHRvIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlcnZlclJvb3Q8L2NvZGU+LjwvcD4KCiAgICA8cD48c3Ryb25nPkV4YW1wbGU8L3N0cm9uZz48L3A+CiAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5EZWZhdWx0UnVudGltZURpciBzY3JhdGNoLzwvcHJlPgoKCiAgICA8cD5UaGUgZGVmYXVsdCBsb2NhdGlvbiBvZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5EZWZhdWx0UnVudGltZURpcjwvY29kZT4gbWF5IGJlCiAgICBtb2RpZmllZCBieSBjaGFuZ2luZyB0aGUgPGNvZGU+REVGQVVMVF9SRUxfUlVOVElNRURJUjwvY29kZT4gI2RlZmluZQogICAgYXQgYnVpbGQgdGltZS48L3A+CgogICA8cD5Ob3RlOiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJSb290PC9jb2RlPiBzaG91bGQgYmUgc3BlY2lmaWVkIGJlZm9yZSB0aGlzCiAgIGRpcmVjdGl2ZSBpcyB1c2VkLiBPdGhlcndpc2UsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlcnZlclJvb3Q8L2NvZGU+CiAgIHdvdWxkIGJlIHVzZWQgdG8gc2V0IHRoZSBiYXNlIGRpcmVjdG9yeS48L3A+CgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iLi4vbWlzYy9zZWN1cml0eV90aXBzLmh0bWwjc2VydmVycm9vdCI+dGhlCiAgICBzZWN1cml0eSB0aXBzPC9hPiBmb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIHByb3Blcmx5IHNldAogICAgcGVybWlzc2lvbnMgb24gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlcnZlclJvb3Q8L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkRlZmF1bHRUeXBlIiBpZD0iRGVmYXVsdFR5cGUiPkRlZmF1bHRUeXBlPC9hPiA8YSBuYW1lPSJkZWZhdWx0dHlwZSIgaWQ9ImRlZmF1bHR0eXBlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5UaGlzIGRpcmVjdGl2ZSBoYXMgbm8gZWZmZWN0IG90aGVyIHRoYW4gdG8gZW1pdCB3YXJuaW5ncwppZiB0aGUgdmFsdWUgaXMgbm90IDxjb2RlPm5vbmU8L2NvZGU+LiBJbiBwcmlvciB2ZXJzaW9ucywgRGVmYXVsdFR5cGUKd291bGQgc3BlY2lmeSBhIGRlZmF1bHQgbWVkaWEgdHlwZSB0byBhc3NpZ24gdG8gcmVzcG9uc2UgY29udGVudCBmb3IKd2hpY2ggbm8gb3RoZXIgbWVkaWEgdHlwZSBjb25maWd1cmF0aW9uIGNvdWxkIGJlIGZvdW5kLgo8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+RGVmYXVsdFR5cGUgPHZhcj5tZWRpYS10eXBlfG5vbmU8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+RGVmYXVsdFR5cGUgbm9uZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5UaGUgYXJndW1lbnQgPGNvZGU+bm9uZTwvY29kZT4gaXMgYXZhaWxhYmxlIGluIEFwYWNoZSBodHRwZCAyLjIuNyBhbmQgbGF0ZXIuICBBbGwgb3RoZXIgY2hvaWNlcyBhcmUgRElTQUJMRUQgZm9yIDIuMy54IGFuZCBsYXRlci48L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBoYXMgYmVlbiBkaXNhYmxlZC4gIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgb2YgY29uZmlndXJhdGlvbiBmaWxlcywgaXQgbWF5IGJlIHNwZWNpZmllZCB3aXRoIHRoZSB2YWx1ZQogICAgPGNvZGU+bm9uZTwvY29kZT4sIG1lYW5pbmcgbm8gZGVmYXVsdCBtZWRpYSB0eXBlLiBGb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkRlZmF1bHRUeXBlIE5vbmU8L3ByZT4KCgogICAgPHA+PGNvZGU+RGVmYXVsdFR5cGUgTm9uZTwvY29kZT4gaXMgb25seSBhdmFpbGFibGUgaW4KICAgIGh0dHBkLTIuMi43IGFuZCBsYXRlci48L3A+CgogICAgPHA+VXNlIHRoZSBtaW1lLnR5cGVzIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCNhZGR0eXBlIj5BZGRUeXBlPC9hPjwvY29kZT4gdG8gY29uZmlndXJlIG1lZGlhCiAgICB0eXBlIGFzc2lnbm1lbnRzIHZpYSBmaWxlIGV4dGVuc2lvbnMsIG9yIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2ZvcmNldHlwZSI+Rm9yY2VUeXBlPC9hPjwvY29kZT4gZGlyZWN0aXZlIHRvIGNvbmZpZ3VyZQogICAgdGhlIG1lZGlhIHR5cGUgZm9yIHNwZWNpZmljIHJlc291cmNlcy4gT3RoZXJ3aXNlLCB0aGUgc2VydmVyIHdpbGwKICAgIHNlbmQgdGhlIHJlc3BvbnNlIHdpdGhvdXQgYSBDb250ZW50LVR5cGUgaGVhZGVyIGZpZWxkIGFuZCB0aGUKICAgIHJlY2lwaWVudCBtYXkgYXR0ZW1wdCB0byBndWVzcyB0aGUgbWVkaWEgdHlwZS48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRGVmaW5lIiBpZD0iRGVmaW5lIj5EZWZpbmU8L2E+IDxhIG5hbWU9ImRlZmluZSIgaWQ9ImRlZmluZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGVmaW5lIGEgdmFyaWFibGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+RGVmaW5lIDx2YXI+cGFyYW1ldGVyLW5hbWU8L3Zhcj4gWzx2YXI+cGFyYW1ldGVyLXZhbHVlPC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5JbiBpdHMgb25lIHBhcmFtZXRlciBmb3JtLCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5EZWZpbmU8L2NvZGU+IGlzIGVxdWl2YWxlbnQKICAgIHRvIHBhc3NpbmcgdGhlIDxjb2RlPi1EPC9jb2RlPiBhcmd1bWVudCB0byA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPi4gSXQKICAgIGNhbiBiZSB1c2VkIHRvIHRvZ2dsZSB0aGUgdXNlIG9mCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjaWZkZWZpbmUiPiZsdDtJZkRlZmluZSZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucwogICAgd2l0aG91dCBuZWVkaW5nIHRvIGFsdGVyIDxjb2RlPi1EPC9jb2RlPiBhcmd1bWVudHMgaW4gYW55IHN0YXJ0dXAKICAgIHNjcmlwdHMuPC9wPgoKICAgIDxwPkluIGFkZGl0aW9uIHRvIHRoYXQsIGlmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIGdpdmVuLCBhIGNvbmZpZyB2YXJpYWJsZQogICAgaXMgc2V0IHRvIHRoaXMgdmFsdWUuIFRoZSB2YXJpYWJsZSBjYW4gYmUgdXNlZCBpbiB0aGUgY29uZmlndXJhdGlvbiB1c2luZwogICAgdGhlIDxjb2RlPiR7VkFSfTwvY29kZT4gc3ludGF4LiBUaGUgdmFyaWFibGUgaXMgYWx3YXlzIGdsb2JhbGx5IGRlZmluZWQKICAgIGFuZCBub3QgbGltaXRlZCB0byB0aGUgc2NvcGUgb2YgdGhlIHN1cnJvdW5kaW5nIGNvbmZpZyBzZWN0aW9uLjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0lmRGVmaW5lIFRFU1QmZ3Q7CiAgRGVmaW5lIHNlcnZlcm5hbWUgdGVzdC5leGFtcGxlLmNvbQombHQ7L0lmRGVmaW5lJmd0OwombHQ7SWZEZWZpbmUgIVRFU1QmZ3Q7CiAgRGVmaW5lIHNlcnZlcm5hbWUgd3d3LmV4YW1wbGUuY29tCiAgRGVmaW5lIFNTTAombHQ7L0lmRGVmaW5lJmd0OwoKRG9jdW1lbnRSb290ICIvdmFyL3d3dy8ke3NlcnZlcm5hbWV9L2h0ZG9jcyI8L3ByZT4KCgogICAgPHA+VmFyaWFibGUgbmFtZXMgbWF5IG5vdCBjb250YWluIGNvbG9uICI6IiBjaGFyYWN0ZXJzLCB0byBhdm9pZCBjbGFzaGVzCiAgICB3aXRoIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVtYXAiPlJld3JpdGVNYXA8L2E+PC9jb2RlPidzIHN5bnRheC48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRGlyZWN0b3J5IiBpZD0iRGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT4gPGEgbmFtZT0iZGlyZWN0b3J5IiBpZD0iZGlyZWN0b3J5Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5FbmNsb3NlIGEgZ3JvdXAgb2YgZGlyZWN0aXZlcyB0aGF0IGFwcGx5IG9ubHkgdG8gdGhlCm5hbWVkIGZpbGUtc3lzdGVtIGRpcmVjdG9yeSwgc3ViLWRpcmVjdG9yaWVzLCBhbmQgdGhlaXIgY29udGVudHMuPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtEaXJlY3RvcnkgIjx2YXI+ZGlyZWN0b3J5LXBhdGg8L3Zhcj4iJmd0OwouLi4gJmx0Oy9EaXJlY3RvcnkmZ3Q7PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7RGlyZWN0b3J5Jmd0OzwvY29kZT4gYW5kCiAgICA8Y29kZT4mbHQ7L0RpcmVjdG9yeSZndDs8L2NvZGU+IGFyZSB1c2VkIHRvIGVuY2xvc2UgYSBncm91cCBvZgogICAgZGlyZWN0aXZlcyB0aGF0IHdpbGwgYXBwbHkgb25seSB0byB0aGUgbmFtZWQgZGlyZWN0b3J5LAogICAgc3ViLWRpcmVjdG9yaWVzIG9mIHRoYXQgZGlyZWN0b3J5LCBhbmQgdGhlIGZpbGVzIHdpdGhpbiB0aGUgcmVzcGVjdGl2ZQogICAgZGlyZWN0b3JpZXMuICBBbnkgZGlyZWN0aXZlIHRoYXQgaXMgYWxsb3dlZAogICAgaW4gYSBkaXJlY3RvcnkgY29udGV4dCBtYXkgYmUgdXNlZC4gPHZhcj5EaXJlY3RvcnktcGF0aDwvdmFyPiBpcwogICAgZWl0aGVyIHRoZSBmdWxsIHBhdGggdG8gYSBkaXJlY3RvcnksIG9yIGEgd2lsZC1jYXJkIHN0cmluZyB1c2luZwogICAgVW5peCBzaGVsbC1zdHlsZSBtYXRjaGluZy4gSW4gYSB3aWxkLWNhcmQgc3RyaW5nLCA8Y29kZT4/PC9jb2RlPiBtYXRjaGVzCiAgICBhbnkgc2luZ2xlIGNoYXJhY3RlciwgYW5kIDxjb2RlPio8L2NvZGU+IG1hdGNoZXMgYW55IHNlcXVlbmNlcyBvZgogICAgY2hhcmFjdGVycy4gWW91IG1heSBhbHNvIHVzZSA8Y29kZT5bXTwvY29kZT4gY2hhcmFjdGVyIHJhbmdlcy4gTm9uZQogICAgb2YgdGhlIHdpbGRjYXJkcyBtYXRjaCBhIGAvJyBjaGFyYWN0ZXIsIHNvIDxjb2RlPiZsdDtEaXJlY3RvcnkKICAgICIvKi9wdWJsaWNfaHRtbCImZ3Q7PC9jb2RlPiB3aWxsIG5vdCBtYXRjaAogICAgPGNvZGU+L2hvbWUvdXNlci9wdWJsaWNfaHRtbDwvY29kZT4sIGJ1dCA8Y29kZT4mbHQ7RGlyZWN0b3J5CiAgICAiL2hvbWUvKi9wdWJsaWNfaHRtbCImZ3Q7PC9jb2RlPiB3aWxsIG1hdGNoLiBFeGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0RpcmVjdG9yeSAiL3Vzci9sb2NhbC9odHRwZC9odGRvY3MiJmd0OwogIE9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1MaW5rcwombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgogICAgPHA+RGlyZWN0b3J5IHBhdGhzIDxlbT5tYXk8L2VtPiBiZSBxdW90ZWQsIGlmIHlvdSBsaWtlLCBob3dldmVyLCBpdAogICAgPGVtPm11c3Q8L2VtPiBiZSBxdW90ZWQgaWYgdGhlIHBhdGggY29udGFpbnMgc3BhY2VzLiBUaGlzIGlzIGJlY2F1c2UgYQogICAgc3BhY2Ugd291bGQgb3RoZXJ3aXNlIGluZGljYXRlIHRoZSBlbmQgb2YgYW4gYXJndW1lbnQuPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPgogICAgICA8cD5CZSBjYXJlZnVsIHdpdGggdGhlIDx2YXI+ZGlyZWN0b3J5LXBhdGg8L3Zhcj4gYXJndW1lbnRzOgogICAgICBUaGV5IGhhdmUgdG8gbGl0ZXJhbGx5IG1hdGNoIHRoZSBmaWxlc3lzdGVtIHBhdGggd2hpY2ggQXBhY2hlIGh0dHBkIHVzZXMKICAgICAgdG8gYWNjZXNzIHRoZSBmaWxlcy4gRGlyZWN0aXZlcyBhcHBsaWVkIHRvIGEgcGFydGljdWxhcgogICAgICA8Y29kZT4mbHQ7RGlyZWN0b3J5Jmd0OzwvY29kZT4gd2lsbCBub3QgYXBwbHkgdG8gZmlsZXMgYWNjZXNzZWQgZnJvbQogICAgICB0aGF0IHNhbWUgZGlyZWN0b3J5IHZpYSBhIGRpZmZlcmVudCBwYXRoLCBzdWNoIGFzIHZpYSBkaWZmZXJlbnQgc3ltYm9saWMKICAgICAgbGlua3MuPC9wPgogICAgPC9kaXY+CgogICAgPHA+PGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCNyZWdleCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+UmVndWxhcgogICAgZXhwcmVzc2lvbnM8L2E+IGNhbiBhbHNvIGJlIHVzZWQsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZQogICAgPGNvZGU+fjwvY29kZT4gY2hhcmFjdGVyLiBGb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtEaXJlY3RvcnkgfiAiXi93d3cvWzAtOV17M30iJmd0OwoKJmx0Oy9EaXJlY3RvcnkmZ3Q7PC9wcmU+CgoKICAgIDxwPndvdWxkIG1hdGNoIGRpcmVjdG9yaWVzIGluIDxjb2RlPi93d3cvPC9jb2RlPiB0aGF0IGNvbnNpc3RlZCBvZgogICAgdGhyZWUgbnVtYmVycy48L3A+CgogICAgPHA+SWYgbXVsdGlwbGUgKG5vbi1yZWd1bGFyIGV4cHJlc3Npb24pIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9jb2RlPiBzZWN0aW9ucwogICAgbWF0Y2ggdGhlIGRpcmVjdG9yeSAob3Igb25lIG9mIGl0cyBwYXJlbnRzKSBjb250YWluaW5nIGEgZG9jdW1lbnQsCiAgICB0aGVuIHRoZSBkaXJlY3RpdmVzIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciBvZiBzaG9ydGVzdCBtYXRjaAogICAgZmlyc3QsIGludGVyc3BlcnNlZCB3aXRoIHRoZSBkaXJlY3RpdmVzIGZyb20gdGhlIDxhIGhyZWY9IiNhY2Nlc3NmaWxlbmFtZSI+Lmh0YWNjZXNzPC9hPiBmaWxlcy4gRm9yIGV4YW1wbGUsCiAgICB3aXRoPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5ICIvIiZndDsKICBBbGxvd092ZXJyaWRlIE5vbmUKJmx0Oy9EaXJlY3RvcnkmZ3Q7CgombHQ7RGlyZWN0b3J5ICIvaG9tZSImZ3Q7CiAgQWxsb3dPdmVycmlkZSBGaWxlSW5mbwombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgogICAgPHA+Zm9yIGFjY2VzcyB0byB0aGUgZG9jdW1lbnQgPGNvZGU+L2hvbWUvd2ViL2Rpci9kb2MuaHRtbDwvY29kZT4KICAgIHRoZSBzdGVwcyBhcmU6PC9wPgoKICAgIDx1bD4KICAgICAgPGxpPkFwcGx5IGRpcmVjdGl2ZSA8Y29kZT5BbGxvd092ZXJyaWRlIE5vbmU8L2NvZGU+CiAgICAgIChkaXNhYmxpbmcgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcykuPC9saT4KCiAgICAgIDxsaT5BcHBseSBkaXJlY3RpdmUgPGNvZGU+QWxsb3dPdmVycmlkZSBGaWxlSW5mbzwvY29kZT4gKGZvcgogICAgICBkaXJlY3RvcnkgPGNvZGU+L2hvbWU8L2NvZGU+KS48L2xpPgoKICAgICAgPGxpPkFwcGx5IGFueSA8Y29kZT5GaWxlSW5mbzwvY29kZT4gZGlyZWN0aXZlcyBpbgogICAgICA8Y29kZT4vaG9tZS8uaHRhY2Nlc3M8L2NvZGU+LCA8Y29kZT4vaG9tZS93ZWIvLmh0YWNjZXNzPC9jb2RlPiBhbmQKICAgICAgPGNvZGU+L2hvbWUvd2ViL2Rpci8uaHRhY2Nlc3M8L2NvZGU+IGluIHRoYXQgb3JkZXIuPC9saT4KICAgIDwvdWw+CgogICAgPHA+UmVndWxhciBleHByZXNzaW9ucyBhcmUgbm90IGNvbnNpZGVyZWQgdW50aWwgYWZ0ZXIgYWxsIG9mIHRoZQogICAgbm9ybWFsIHNlY3Rpb25zIGhhdmUgYmVlbiBhcHBsaWVkLiBUaGVuIGFsbCBvZiB0aGUgcmVndWxhcgogICAgZXhwcmVzc2lvbnMgYXJlIHRlc3RlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXJlZCBpbiB0aGUKICAgIGNvbmZpZ3VyYXRpb24gZmlsZS4gRm9yIGV4YW1wbGUsIHdpdGg8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtEaXJlY3RvcnkgfiAiYWJjJCImZ3Q7CiAgIyAuLi4gZGlyZWN0aXZlcyBoZXJlIC4uLgombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgogICAgPHA+dGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzZWN0aW9uIHdvbid0IGJlIGNvbnNpZGVyZWQgdW50aWwgYWZ0ZXIKICAgIGFsbCBub3JtYWwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0RpcmVjdG9yeSZndDs8L2NvZGU+cyBhbmQKICAgIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXMgaGF2ZSBiZWVuIGFwcGxpZWQuIFRoZW4gdGhlIHJlZ3VsYXIKICAgIGV4cHJlc3Npb24gd2lsbCBtYXRjaCBvbiA8Y29kZT4vaG9tZS9hYmMvcHVibGljX2h0bWwvYWJjPC9jb2RlPiBhbmQKICAgIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9jb2RlPiB3aWxsCiAgICBiZSBhcHBsaWVkLjwvcD4KCiAgIDxwPjxzdHJvbmc+Tm90ZSB0aGF0IHRoZSBkZWZhdWx0IGFjY2VzcyBmb3IKICAgIDxjb2RlPiZsdDtEaXJlY3RvcnkgIi8iJmd0OzwvY29kZT4gaXMgdG8gcGVybWl0IGFsbCBhY2Nlc3MuCiAgICBUaGlzIG1lYW5zIHRoYXQgQXBhY2hlIGh0dHBkIHdpbGwgc2VydmUgYW55IGZpbGUgbWFwcGVkIGZyb20gYW4gVVJMLiBJdCBpcwogICAgcmVjb21tZW5kZWQgdGhhdCB5b3UgY2hhbmdlIHRoaXMgd2l0aCBhIGJsb2NrIHN1Y2gKICAgIGFzPC9zdHJvbmc+PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5ICIvIiZndDsKICBSZXF1aXJlIGFsbCBkZW5pZWQKJmx0Oy9EaXJlY3RvcnkmZ3Q7PC9wcmU+CgoKICAgIDxwPjxzdHJvbmc+YW5kIHRoZW4gb3ZlcnJpZGUgdGhpcyBmb3IgZGlyZWN0b3JpZXMgeW91CiAgICA8ZW0+d2FudDwvZW0+IGFjY2Vzc2libGUuIFNlZSB0aGUgPGEgaHJlZj0iLi4vbWlzYy9zZWN1cml0eV90aXBzLmh0bWwiPlNlY3VyaXR5IFRpcHM8L2E+IHBhZ2UgZm9yIG1vcmUKICAgIGRldGFpbHMuPC9zdHJvbmc+PC9wPgoKICAgIDxwPlRoZSBkaXJlY3Rvcnkgc2VjdGlvbnMgb2NjdXIgaW4gdGhlIDxjb2RlPmh0dHBkLmNvbmY8L2NvZGU+IGZpbGUuCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7RGlyZWN0b3J5Jmd0OzwvY29kZT4gZGlyZWN0aXZlcwogICAgY2Fubm90IG5lc3QsIGFuZCBjYW5ub3QgYXBwZWFyIGluIGEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xpbWl0Ij4mbHQ7TGltaXQmZ3Q7PC9hPjwvY29kZT4gb3IgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xpbWl0ZXhjZXB0Ij4mbHQ7TGltaXRFeGNlcHQmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbi48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48YSBocmVmPSIuLi9zZWN0aW9ucy5odG1sIj5Ib3cgJmx0O0RpcmVjdG9yeSZndDssCiAgICAmbHQ7TG9jYXRpb24mZ3Q7IGFuZCAmbHQ7RmlsZXMmZ3Q7IHNlY3Rpb25zIHdvcms8L2E+IGZvciBhbgogICAgZXhwbGFuYXRpb24gb2YgaG93IHRoZXNlIGRpZmZlcmVudCBzZWN0aW9ucyBhcmUgY29tYmluZWQgd2hlbiBhCiAgICByZXF1ZXN0IGlzIHJlY2VpdmVkPC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkRpcmVjdG9yeU1hdGNoIiBpZD0iRGlyZWN0b3J5TWF0Y2giPiZsdDtEaXJlY3RvcnlNYXRjaCZndDs8L2E+IDxhIG5hbWU9ImRpcmVjdG9yeW1hdGNoIiBpZD0iZGlyZWN0b3J5bWF0Y2giPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkVuY2xvc2UgZGlyZWN0aXZlcyB0aGF0IGFwcGx5IHRvCnRoZSBjb250ZW50cyBvZiBmaWxlLXN5c3RlbSBkaXJlY3RvcmllcyBtYXRjaGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O0RpcmVjdG9yeU1hdGNoIDx2YXI+cmVnZXg8L3Zhcj4mZ3Q7Ci4uLiAmbHQ7L0RpcmVjdG9yeU1hdGNoJmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0RpcmVjdG9yeU1hdGNoJmd0OzwvY29kZT4gYW5kCiAgICA8Y29kZT4mbHQ7L0RpcmVjdG9yeU1hdGNoJmd0OzwvY29kZT4gYXJlIHVzZWQgdG8gZW5jbG9zZSBhIGdyb3VwCiAgICBvZiBkaXJlY3RpdmVzIHdoaWNoIHdpbGwgYXBwbHkgb25seSB0byB0aGUgbmFtZWQgZGlyZWN0b3J5IChhbmQgdGhlIGZpbGVzIHdpdGhpbiksCiAgICB0aGUgc2FtZSBhcyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+LgogICAgSG93ZXZlciwgaXQgdGFrZXMgYXMgYW4gYXJndW1lbnQgYQogICAgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCNyZWdleCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+cmVndWxhciBleHByZXNzaW9uPC9hPi4gIEZvciBleGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0RpcmVjdG9yeU1hdGNoICJeL3d3dy8oLisvKT9bMC05XXszfS8iJmd0OwogICAgIyAuLi4KJmx0Oy9EaXJlY3RvcnlNYXRjaCZndDs8L3ByZT4KCgogICAgPHA+bWF0Y2hlcyBkaXJlY3RvcmllcyBpbiA8Y29kZT4vd3d3LzwvY29kZT4gKG9yIGFueSBzdWJkaXJlY3RvcnkgdGhlcmVvZikKICAgIHRoYXQgY29uc2lzdCBvZiB0aHJlZSBudW1iZXJzLjwvcD4KCiAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Db21wYXRhYmlsaXR5PC9oMz4KICAgICAgUHJpb3IgdG8gMi4zLjksIHRoaXMgZGlyZWN0aXZlIGltcGxpY2l0bHkgYXBwbGllZCB0byBzdWItZGlyZWN0b3JpZXMKICAgICAgKGxpa2UgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPikgYW5kCiAgICAgIGNvdWxkIG5vdCBtYXRjaCB0aGUgZW5kIG9mIGxpbmUgc3ltYm9sICgkKS4gIEluIDIuMy45IGFuZCBsYXRlciwKICAgICAgb25seSBkaXJlY3RvcmllcyB0aGF0IG1hdGNoIHRoZSBleHByZXNzaW9uIGFyZSBhZmZlY3RlZCBieSB0aGUgZW5jbG9zZWQKICAgICAgZGlyZWN0aXZlcy4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5UcmFpbGluZyBTbGFzaDwvaDM+CiAgICAgIFRoaXMgZGlyZWN0aXZlIGFwcGxpZXMgdG8gcmVxdWVzdHMgZm9yIGRpcmVjdG9yaWVzIHRoYXQgbWF5IG9yIG1heQogICAgICBub3QgZW5kIGluIGEgdHJhaWxpbmcgc2xhc2gsIHNvIGV4cHJlc3Npb25zIHRoYXQgYXJlIGFuY2hvcmVkIHRvIHRoZQogICAgICBlbmQgb2YgbGluZSAoJCkgbXVzdCBiZSB3cml0dGVuIHdpdGggY2FyZS4KICAgIDwvZGl2PgoKICAgIDxwPkZyb20gMi40Ljggb253YXJkcywgbmFtZWQgZ3JvdXBzIGFuZCBiYWNrcmVmZXJlbmNlcyBhcmUgY2FwdHVyZWQgYW5kCiAgICB3cml0dGVuIHRvIHRoZSBlbnZpcm9ubWVudCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIG5hbWUgcHJlZml4ZWQgd2l0aAogICAgIk1BVENIXyIgYW5kIGluIHVwcGVyIGNhc2UuIFRoaXMgYWxsb3dzIGVsZW1lbnRzIG9mIHBhdGhzIHRvIGJlIHJlZmVyZW5jZWQKICAgIGZyb20gd2l0aGluIDxhIGhyZWY9Ii4uL2V4cHIuaHRtbCI+ZXhwcmVzc2lvbnM8L2E+IGFuZCBtb2R1bGVzIGxpa2UKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5tb2RfcmV3cml0ZTwvYT48L2NvZGU+LiBJbiBvcmRlciB0byBwcmV2ZW50IGNvbmZ1c2lvbiwgbnVtYmVyZWQKICAgICh1bm5hbWVkKSBiYWNrcmVmZXJlbmNlcyBhcmUgaWdub3JlZC4gVXNlIG5hbWVkIGdyb3VwcyBpbnN0ZWFkLjwvcD4KCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5TWF0Y2ggIl4vdmFyL3d3dy9jb21iaW5lZC8oPyZsdDtzaXRlbmFtZSZndDtbXi9dKykiJmd0OwogICAgUmVxdWlyZSBsZGFwLWdyb3VwIGNuPSV7ZW52Ok1BVENIX1NJVEVOQU1FfSxvdT1jb21iaW5lZCxvPUV4YW1wbGUKJmx0Oy9EaXJlY3RvcnlNYXRjaCZndDs8L3ByZT4KCgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+IGZvcgphIGRlc2NyaXB0aW9uIG9mIGhvdyByZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBtaXhlZCBpbiB3aXRoIG5vcm1hbAo8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7RGlyZWN0b3J5Jmd0OzwvY29kZT5zPC9saT4KPGxpPjxhIGhyZWY9Ii4uL3NlY3Rpb25zLmh0bWwiPkhvdyAmbHQ7RGlyZWN0b3J5Jmd0OywgJmx0O0xvY2F0aW9uJmd0OyBhbmQKJmx0O0ZpbGVzJmd0OyBzZWN0aW9ucyB3b3JrPC9hPiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRoZXNlIGRpZmZlcmVudApzZWN0aW9ucyBhcmUgY29tYmluZWQgd2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQ8L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRG9jdW1lbnRSb290IiBpZD0iRG9jdW1lbnRSb290Ij5Eb2N1bWVudFJvb3Q8L2E+IDxhIG5hbWU9ImRvY3VtZW50cm9vdCIgaWQ9ImRvY3VtZW50cm9vdCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGlyZWN0b3J5IHRoYXQgZm9ybXMgdGhlIG1haW4gZG9jdW1lbnQgdHJlZSB2aXNpYmxlCmZyb20gdGhlIHdlYjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Eb2N1bWVudFJvb3QgPHZhcj5kaXJlY3RvcnktcGF0aDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Eb2N1bWVudFJvb3QgIi91c3IvbG9jYWwvYXBhY2hlL2h0ZG9jcyI8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIHNldHMgdGhlIGRpcmVjdG9yeSBmcm9tIHdoaWNoIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+CiAgICB3aWxsIHNlcnZlIGZpbGVzLiBVbmxlc3MgbWF0Y2hlZCBieSBhIGRpcmVjdGl2ZSBsaWtlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYWxpYXMuaHRtbCNhbGlhcyI+QWxpYXM8L2E+PC9jb2RlPiwgdGhlIHNlcnZlciBhcHBlbmRzIHRoZQogICAgcGF0aCBmcm9tIHRoZSByZXF1ZXN0ZWQgVVJMIHRvIHRoZSBkb2N1bWVudCByb290IHRvIG1ha2UgdGhlCiAgICBwYXRoIHRvIHRoZSBkb2N1bWVudC4gRXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkRvY3VtZW50Um9vdCAiL3Vzci93ZWIiPC9wcmU+CgoKICAgIDxwPnRoZW4gYW4gYWNjZXNzIHRvCiAgICA8Y29kZT5odHRwOi8vbXkuZXhhbXBsZS5jb20vaW5kZXguaHRtbDwvY29kZT4gcmVmZXJzIHRvCiAgICA8Y29kZT4vdXNyL3dlYi9pbmRleC5odG1sPC9jb2RlPi4gSWYgdGhlIDx2YXI+ZGlyZWN0b3J5LXBhdGg8L3Zhcj4gaXMKICAgIG5vdCBhYnNvbHV0ZSB0aGVuIGl0IGlzIGFzc3VtZWQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJyb290Ij5TZXJ2ZXJSb290PC9hPjwvY29kZT4uPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Eb2N1bWVudFJvb3Q8L2NvZGU+IHNob3VsZCBiZSBzcGVjaWZpZWQgd2l0aG91dAogICAgYSB0cmFpbGluZyBzbGFzaC48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48YSBocmVmPSIuLi91cmxtYXBwaW5nLmh0bWwjZG9jdW1lbnRyb290Ij5NYXBwaW5nIFVSTHMgdG8gRmlsZXN5c3RlbQpMb2NhdGlvbnM8L2E+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkVsc2UiIGlkPSJFbHNlIj4mbHQ7RWxzZSZndDs8L2E+IDxhIG5hbWU9ImVsc2UiIGlkPSJlbHNlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db250YWlucyBkaXJlY3RpdmVzIHRoYXQgYXBwbHkgb25seSBpZiB0aGUgY29uZGl0aW9uIG9mIGEKcHJldmlvdXMgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2lmIj4mbHQ7SWYmZ3Q7PC9hPjwvY29kZT4gb3IKPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2Vsc2VpZiI+Jmx0O0Vsc2VJZiZndDs8L2E+PC9jb2RlPiBzZWN0aW9uIGlzIG5vdApzYXRpc2ZpZWQgYnkgYSByZXF1ZXN0IGF0IHJ1bnRpbWU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O0Vsc2UmZ3Q7IC4uLiAmbHQ7L0Vsc2UmZ3Q7PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0Vsc2UmZ3Q7PC9jb2RlPiBhcHBsaWVzIHRoZSBlbmNsb3NlZAogICAgZGlyZWN0aXZlcyBpZiBhbmQgb25seSBpZiB0aGUgbW9zdCByZWNlbnQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtJZiZndDs8L2NvZGU+IG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7RWxzZUlmJmd0OzwvY29kZT4gc2VjdGlvbgogICAgaW4gdGhlIHNhbWUgc2NvcGUgaGFzIG5vdCBiZWVuIGFwcGxpZWQuCiAgICBGb3IgZXhhbXBsZTogSW4gPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7SWYgIi16IHJlcSgnSG9zdCcpIiZndDsKICAjIC4uLgombHQ7L0lmJmd0OwombHQ7RWxzZSZndDsKICAjIC4uLgombHQ7L0Vsc2UmZ3Q7PC9wcmU+CgoKICAgIDxwPiBUaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmJmd0OzwvY29kZT4gd291bGQgbWF0Y2ggSFRUUC8xLjAKICAgICAgICByZXF1ZXN0cyB3aXRob3V0IGEgPHZhcj5Ib3N0OjwvdmFyPiBoZWFkZXIgYW5kIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtFbHNlJmd0OzwvY29kZT4gd291bGQgbWF0Y2ggcmVxdWVzdHMKICAgICAgICB3aXRoIGEgPHZhcj5Ib3N0OjwvdmFyPiBoZWFkZXIuPC9wPgoKCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNpZiI+Jmx0O0lmJmd0OzwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNlbHNlaWYiPiZsdDtFbHNlSWYmZ3Q7PC9hPjwvY29kZT48L2xpPgo8bGk+PGEgaHJlZj0iLi4vc2VjdGlvbnMuaHRtbCI+SG93ICZsdDtEaXJlY3RvcnkmZ3Q7LCAmbHQ7TG9jYXRpb24mZ3Q7LAogICAgJmx0O0ZpbGVzJmd0OyBzZWN0aW9ucyB3b3JrPC9hPiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRoZXNlCiAgICBkaWZmZXJlbnQgc2VjdGlvbnMgYXJlIGNvbWJpbmVkIHdoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkLgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmJmd0OzwvY29kZT4sCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7RWxzZUlmJmd0OzwvY29kZT4sIGFuZAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0Vsc2UmZ3Q7PC9jb2RlPiBhcmUgYXBwbGllZCBsYXN0LjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJFbHNlSWYiIGlkPSJFbHNlSWYiPiZsdDtFbHNlSWYmZ3Q7PC9hPiA8YSBuYW1lPSJlbHNlaWYiIGlkPSJlbHNlaWYiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbnRhaW5zIGRpcmVjdGl2ZXMgdGhhdCBhcHBseSBvbmx5IGlmIGEgY29uZGl0aW9uIGlzIHNhdGlzZmllZApieSBhIHJlcXVlc3QgYXQgcnVudGltZSB3aGlsZSB0aGUgY29uZGl0aW9uIG9mIGEgcHJldmlvdXMKPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2lmIj4mbHQ7SWYmZ3Q7PC9hPjwvY29kZT4gb3IKPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0Vsc2VJZiZndDs8L2NvZGU+IHNlY3Rpb24gaXMgbm90CnNhdGlzZmllZDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT4mbHQ7RWxzZUlmIDx2YXI+ZXhwcmVzc2lvbjwvdmFyPiZndDsgLi4uICZsdDsvRWxzZUlmJmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtFbHNlSWYmZ3Q7PC9jb2RlPiBhcHBsaWVzIHRoZSBlbmNsb3NlZAogICAgZGlyZWN0aXZlcyBpZiBhbmQgb25seSBpZiBib3RoIHRoZSBnaXZlbiBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgYW5kCiAgICB0aGUgbW9zdCByZWNlbnQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmJmd0OzwvY29kZT4gb3IKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtFbHNlSWYmZ3Q7PC9jb2RlPiBzZWN0aW9uIGluIHRoZSBzYW1lIHNjb3BlIGhhcwogICAgbm90IGJlZW4gYXBwbGllZC4gIEZvciBleGFtcGxlOiBJbiA8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtJZiAiLVIgJzEwLjEuMC4wLzE2JyImZ3Q7CiAgIy4uLgombHQ7L0lmJmd0OwombHQ7RWxzZUlmICItUiAnMTAuMC4wLjAvOCciJmd0OwogICMuLi4KJmx0Oy9FbHNlSWYmZ3Q7CiZsdDtFbHNlJmd0OwogICMuLi4KJmx0Oy9FbHNlJmd0OzwvcHJlPgoKCiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0Vsc2VJZiZndDs8L2NvZGU+IHdvdWxkIG1hdGNoIGlmCiAgICB0aGUgcmVtb3RlIGFkZHJlc3Mgb2YgYSByZXF1ZXN0IGJlbG9uZ3MgdG8gdGhlIHN1Ym5ldCAxMC4wLjAuMC84IGJ1dAogICAgbm90IHRvIHRoZSBzdWJuZXQgMTAuMS4wLjAvMTYuPC9wPgoKCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxhIGhyZWY9Ii4uL2V4cHIuaHRtbCI+RXhwcmVzc2lvbnMgaW4gQXBhY2hlIEhUVFAgU2VydmVyPC9hPiwKZm9yIGEgY29tcGxldGUgcmVmZXJlbmNlIGFuZCBtb3JlIGV4YW1wbGVzLjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjaWYiPiZsdDtJZiZndDs8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZWxzZSI+Jmx0O0Vsc2UmZ3Q7PC9hPjwvY29kZT48L2xpPgo8bGk+PGEgaHJlZj0iLi4vc2VjdGlvbnMuaHRtbCI+SG93ICZsdDtEaXJlY3RvcnkmZ3Q7LCAmbHQ7TG9jYXRpb24mZ3Q7LAogICAgJmx0O0ZpbGVzJmd0OyBzZWN0aW9ucyB3b3JrPC9hPiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRoZXNlCiAgICBkaWZmZXJlbnQgc2VjdGlvbnMgYXJlIGNvbWJpbmVkIHdoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkLgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmJmd0OzwvY29kZT4sCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7RWxzZUlmJmd0OzwvY29kZT4sIGFuZAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0Vsc2UmZ3Q7PC9jb2RlPiBhcmUgYXBwbGllZCBsYXN0LjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJFbmFibGVNTUFQIiBpZD0iRW5hYmxlTU1BUCI+RW5hYmxlTU1BUDwvYT4gPGEgbmFtZT0iZW5hYmxlbW1hcCIgaWQ9ImVuYWJsZW1tYXAiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlVzZSBtZW1vcnktbWFwcGluZyB0byByZWFkIGZpbGVzIGR1cmluZyBkZWxpdmVyeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5FbmFibGVNTUFQIE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5FbmFibGVNTUFQIE9uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGNvbnRyb2xzIHdoZXRoZXIgdGhlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IG1heSB1c2UKICAgIG1lbW9yeS1tYXBwaW5nIGlmIGl0IG5lZWRzIHRvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBkdXJpbmcKICAgIGRlbGl2ZXJ5LiAgQnkgZGVmYXVsdCwgd2hlbiB0aGUgaGFuZGxpbmcgb2YgYSByZXF1ZXN0IHJlcXVpcmVzCiAgICBhY2Nlc3MgdG8gdGhlIGRhdGEgd2l0aGluIGEgZmlsZSAtLSBmb3IgZXhhbXBsZSwgd2hlbiBkZWxpdmVyaW5nIGEKICAgIHNlcnZlci1wYXJzZWQgZmlsZSB1c2luZyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPiAtLSBBcGFjaGUgaHR0cGQKICAgIG1lbW9yeS1tYXBzIHRoZSBmaWxlIGlmIHRoZSBPUyBzdXBwb3J0cyBpdC48L3A+CgogICAgPHA+VGhpcyBtZW1vcnktbWFwcGluZyBzb21ldGltZXMgeWllbGRzIGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuCiAgICBCdXQgaW4gc29tZSBlbnZpcm9ubWVudHMsIGl0IGlzIGJldHRlciB0byBkaXNhYmxlIHRoZSBtZW1vcnktbWFwcGluZwogICAgdG8gcHJldmVudCBvcGVyYXRpb25hbCBwcm9ibGVtczo8L3A+CgogICAgPHVsPgogICAgPGxpPk9uIHNvbWUgbXVsdGlwcm9jZXNzb3Igc3lzdGVtcywgbWVtb3J5LW1hcHBpbmcgY2FuIHJlZHVjZSB0aGUKICAgIHBlcmZvcm1hbmNlIG9mIHRoZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPi48L2xpPgogICAgPGxpPkRlbGV0aW5nIG9yIHRydW5jYXRpbmcgYSBmaWxlIHdoaWxlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+CiAgICAgIGhhcyBpdCBtZW1vcnktbWFwcGVkIGNhbiBjYXVzZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPiB0bwogICAgICBjcmFzaCB3aXRoIGEgc2VnbWVudGF0aW9uIGZhdWx0LgogICAgPC9saT4KICAgIDwvdWw+CgogICAgPHA+Rm9yIHNlcnZlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSB2dWxuZXJhYmxlIHRvIHRoZXNlIHByb2JsZW1zLAogICAgeW91IHNob3VsZCBkaXNhYmxlIG1lbW9yeS1tYXBwaW5nIG9mIGRlbGl2ZXJlZCBmaWxlcyBieSBzcGVjaWZ5aW5nOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+RW5hYmxlTU1BUCBPZmY8L3ByZT4KCgogICAgPHA+Rm9yIE5GUyBtb3VudGVkIGZpbGVzLCB0aGlzIGZlYXR1cmUgbWF5IGJlIGRpc2FibGVkIGV4cGxpY2l0bHkgZm9yCiAgICB0aGUgb2ZmZW5kaW5nIGZpbGVzIGJ5IHNwZWNpZnlpbmc6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5ICIvcGF0aC10by1uZnMtZmlsZXMiJmd0OwogIEVuYWJsZU1NQVAgT2ZmCiZsdDsvRGlyZWN0b3J5Jmd0OzwvcHJlPgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJFbmFibGVTZW5kZmlsZSIgaWQ9IkVuYWJsZVNlbmRmaWxlIj5FbmFibGVTZW5kZmlsZTwvYT4gPGEgbmFtZT0iZW5hYmxlc2VuZGZpbGUiIGlkPSJlbmFibGVzZW5kZmlsZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+VXNlIHRoZSBrZXJuZWwgc2VuZGZpbGUgc3VwcG9ydCB0byBkZWxpdmVyIGZpbGVzIHRvIHRoZSBjbGllbnQ8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+RW5hYmxlU2VuZGZpbGUgT258T2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkVuYWJsZVNlbmRmaWxlIE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5EZWZhdWx0IGNoYW5nZWQgdG8gT2ZmIGluCnZlcnNpb24gMi4zLjkuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgY29udHJvbHMgd2hldGhlciA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPiBtYXkgdXNlIHRoZQogICAgc2VuZGZpbGUgc3VwcG9ydCBmcm9tIHRoZSBrZXJuZWwgdG8gdHJhbnNtaXQgZmlsZSBjb250ZW50cyB0byB0aGUgY2xpZW50LgogICAgQnkgZGVmYXVsdCwgd2hlbiB0aGUgaGFuZGxpbmcgb2YgYSByZXF1ZXN0IHJlcXVpcmVzIG5vIGFjY2VzcwogICAgdG8gdGhlIGRhdGEgd2l0aGluIGEgZmlsZSAtLSBmb3IgZXhhbXBsZSwgd2hlbiBkZWxpdmVyaW5nIGEKICAgIHN0YXRpYyBmaWxlIC0tIEFwYWNoZSBodHRwZCB1c2VzIHNlbmRmaWxlIHRvIGRlbGl2ZXIgdGhlIGZpbGUgY29udGVudHMKICAgIHdpdGhvdXQgZXZlciByZWFkaW5nIHRoZSBmaWxlIGlmIHRoZSBPUyBzdXBwb3J0cyBpdC48L3A+CgogICAgPHA+VGhpcyBzZW5kZmlsZSBtZWNoYW5pc20gYXZvaWRzIHNlcGFyYXRlIHJlYWQgYW5kIHNlbmQgb3BlcmF0aW9ucywKICAgIGFuZCBidWZmZXIgYWxsb2NhdGlvbnMuIEJ1dCBvbiBzb21lIHBsYXRmb3JtcyBvciB3aXRoaW4gc29tZQogICAgZmlsZXN5c3RlbXMsIGl0IGlzIGJldHRlciB0byBkaXNhYmxlIHRoaXMgZmVhdHVyZSB0byBhdm9pZAogICAgb3BlcmF0aW9uYWwgcHJvYmxlbXM6PC9wPgoKICAgIDx1bD4KICAgIDxsaT5Tb21lIHBsYXRmb3JtcyBtYXkgaGF2ZSBicm9rZW4gc2VuZGZpbGUgc3VwcG9ydCB0aGF0IHRoZSBidWlsZAogICAgc3lzdGVtIGRpZCBub3QgZGV0ZWN0LCBlc3BlY2lhbGx5IGlmIHRoZSBiaW5hcmllcyB3ZXJlIGJ1aWx0IG9uCiAgICBhbm90aGVyIGJveCBhbmQgbW92ZWQgdG8gc3VjaCBhIG1hY2hpbmUgd2l0aCBicm9rZW4gc2VuZGZpbGUKICAgIHN1cHBvcnQuPC9saT4KICAgIDxsaT5PbiBMaW51eCB0aGUgdXNlIG9mIHNlbmRmaWxlIHRyaWdnZXJzIFRDUC1jaGVja3N1bQogICAgb2ZmbG9hZGluZyBidWdzIG9uIGNlcnRhaW4gbmV0d29ya2luZyBjYXJkcyB3aGVuIHVzaW5nIElQdjYuPC9saT4KICAgIDxsaT5PbiBMaW51eCBvbiBJdGFuaXVtLCA8Y29kZT5zZW5kZmlsZTwvY29kZT4gbWF5IGJlIHVuYWJsZSB0byBoYW5kbGUKICAgIGZpbGVzIG92ZXIgMkdCIGluIHNpemUuPC9saT4KICAgIDxsaT5XaXRoIGEgbmV0d29yay1tb3VudGVkIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkb2N1bWVudHJvb3QiPkRvY3VtZW50Um9vdDwvYT48L2NvZGU+IChlLmcuLCBORlMsIFNNQiwgQ0lGUywgRlVTRSksCiAgICB0aGUga2VybmVsIG1heSBiZSB1bmFibGUgdG8gc2VydmUgdGhlIG5ldHdvcmsgZmlsZSB0aHJvdWdoCiAgICBpdHMgb3duIGNhY2hlLjwvbGk+CiAgICA8L3VsPgoKICAgIDxwPkZvciBzZXJ2ZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgbm90IHZ1bG5lcmFibGUgdG8gdGhlc2UgcHJvYmxlbXMsCiAgICB5b3UgbWF5IGVuYWJsZSB0aGlzIGZlYXR1cmUgYnkgc3BlY2lmeWluZzo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkVuYWJsZVNlbmRmaWxlIE9uPC9wcmU+CgoKICAgIDxwPkZvciBuZXR3b3JrIG1vdW50ZWQgZmlsZXMsIHRoaXMgZmVhdHVyZSBtYXkgYmUgZGlzYWJsZWQgZXhwbGljaXRseQogICAgZm9yIHRoZSBvZmZlbmRpbmcgZmlsZXMgYnkgc3BlY2lmeWluZzo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtEaXJlY3RvcnkgIi9wYXRoLXRvLW5mcy1maWxlcyImZ3Q7CiAgRW5hYmxlU2VuZGZpbGUgT2ZmCiZsdDsvRGlyZWN0b3J5Jmd0OzwvcHJlPgoKICAgIDxwPlBsZWFzZSBub3RlIHRoYXQgdGhlIHBlci1kaXJlY3RvcnkgYW5kIC5odGFjY2VzcyBjb25maWd1cmF0aW9uCiAgICAgICBvZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5FbmFibGVTZW5kZmlsZTwvY29kZT4gaXMgbm90IHN1cHBvcnRlZCBieQogICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jYWNoZV9kaXNrLmh0bWwiPm1vZF9jYWNoZV9kaXNrPC9hPjwvY29kZT4uCiAgICAgICBPbmx5IGdsb2JhbCBkZWZpbml0aW9uIG9mIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkVuYWJsZVNlbmRmaWxlPC9jb2RlPgogICAgICAgaXMgdGFrZW4gaW50byBhY2NvdW50IGJ5IHRoZSBtb2R1bGUuCiAgICA8L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRXJyb3IiIGlkPSJFcnJvciI+RXJyb3I8L2E+IDxhIG5hbWU9ImVycm9yIiBpZD0iZXJyb3IiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFib3J0IGNvbmZpZ3VyYXRpb24gcGFyc2luZyB3aXRoIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+RXJyb3IgPHZhcj5tZXNzYWdlPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+Mi4zLjkgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+SWYgYW4gZXJyb3IgY2FuIGJlIGRldGVjdGVkIHdpdGhpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhpcwogICAgZGlyZWN0aXZlIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgY3VzdG9tIGVycm9yIG1lc3NhZ2UsIGFuZCBoYWx0CiAgICBjb25maWd1cmF0aW9uIHBhcnNpbmcuICBUaGUgdHlwaWNhbCB1c2UgaXMgZm9yIHJlcG9ydGluZyByZXF1aXJlZAogICAgbW9kdWxlcyB3aGljaCBhcmUgbWlzc2luZyBmcm9tIHRoZSBjb25maWd1cmF0aW9uLjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+IyBFeGFtcGxlCiMgZW5zdXJlIHRoYXQgbW9kX2luY2x1ZGUgaXMgbG9hZGVkCiZsdDtJZk1vZHVsZSAhaW5jbHVkZV9tb2R1bGUmZ3Q7CiAgRXJyb3IgIm1vZF9pbmNsdWRlIGlzIHJlcXVpcmVkIGJ5IG1vZF9mb28uICBMb2FkIGl0IHdpdGggTG9hZE1vZHVsZS4iCiZsdDsvSWZNb2R1bGUmZ3Q7CgojIGVuc3VyZSB0aGF0IGV4YWN0bHkgb25lIG9mIFNTTCxOT1NTTCBpcyBkZWZpbmVkCiZsdDtJZkRlZmluZSBTU0wmZ3Q7CiZsdDtJZkRlZmluZSBOT1NTTCZndDsKICBFcnJvciAiQm90aCBTU0wgYW5kIE5PU1NMIGFyZSBkZWZpbmVkLiAgRGVmaW5lIG9ubHkgb25lIG9mIHRoZW0uIgombHQ7L0lmRGVmaW5lJmd0OwombHQ7L0lmRGVmaW5lJmd0OwombHQ7SWZEZWZpbmUgIVNTTCZndDsKJmx0O0lmRGVmaW5lICFOT1NTTCZndDsKICBFcnJvciAiRWl0aGVyIFNTTCBvciBOT1NTTCBtdXN0IGJlIGRlZmluZWQuIgombHQ7L0lmRGVmaW5lJmd0OwombHQ7L0lmRGVmaW5lJmd0OzwvcHJlPgoKCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRXJyb3JEb2N1bWVudCIgaWQ9IkVycm9yRG9jdW1lbnQiPkVycm9yRG9jdW1lbnQ8L2E+IDxhIG5hbWU9ImVycm9yZG9jdW1lbnQiIGlkPSJlcnJvcmRvY3VtZW50Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5XaGF0IHRoZSBzZXJ2ZXIgd2lsbCByZXR1cm4gdG8gdGhlIGNsaWVudAppbiBjYXNlIG9mIGFuIGVycm9yPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkVycm9yRG9jdW1lbnQgPHZhcj5lcnJvci1jb2RlPC92YXI+IDx2YXI+ZG9jdW1lbnQ8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+RmlsZUluZm88L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+SW4gdGhlIGV2ZW50IG9mIGEgcHJvYmxlbSBvciBlcnJvciwgQXBhY2hlIGh0dHBkIGNhbiBiZSBjb25maWd1cmVkCiAgICB0byBkbyBvbmUgb2YgZm91ciB0aGluZ3MsPC9wPgoKICAgIDxvbD4KICAgICAgPGxpPm91dHB1dCBhIHNpbXBsZSBoYXJkY29kZWQgZXJyb3IgbWVzc2FnZTwvbGk+CgogICAgICA8bGk+b3V0cHV0IGEgY3VzdG9taXplZCBtZXNzYWdlPC9saT4KCiAgICAgIDxsaT5pbnRlcm5hbGx5IHJlZGlyZWN0IHRvIGEgbG9jYWwgPHZhcj5VUkwtcGF0aDwvdmFyPiB0byBoYW5kbGUgdGhlCiAgICAgIHByb2JsZW0vZXJyb3I8L2xpPgoKICAgICAgPGxpPnJlZGlyZWN0IHRvIGFuIGV4dGVybmFsIDx2YXI+VVJMPC92YXI+IHRvIGhhbmRsZSB0aGUKICAgICAgcHJvYmxlbS9lcnJvcjwvbGk+CiAgICA8L29sPgoKICAgIDxwPlRoZSBmaXJzdCBvcHRpb24gaXMgdGhlIGRlZmF1bHQsIHdoaWxlIG9wdGlvbnMgMi00IGFyZQogICAgY29uZmlndXJlZCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+RXJyb3JEb2N1bWVudDwvY29kZT4KICAgIGRpcmVjdGl2ZSwgd2hpY2ggaXMgZm9sbG93ZWQgYnkgdGhlIEhUVFAgcmVzcG9uc2UgY29kZSBhbmQgYSBVUkwKICAgIG9yIGEgbWVzc2FnZS4gQXBhY2hlIGh0dHBkIHdpbGwgc29tZXRpbWVzIG9mZmVyIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KICAgIHJlZ2FyZGluZyB0aGUgcHJvYmxlbS9lcnJvci48L3A+CgogICAgPHA+RnJvbSAyLjQuMTMsIDxhIGhyZWY9Ii4uL2V4cHIuaHRtbCI+ZXhwcmVzc2lvbiBzeW50YXg8L2E+IGNhbiBiZQogICAgdXNlZCBpbnNpZGUgdGhlIGRpcmVjdGl2ZSB0byBwcm9kdWNlIGR5bmFtaWMgc3RyaW5ncyBhbmQgVVJMcy48L3A+CgogICAgPHA+VVJMcyBjYW4gYmVnaW4gd2l0aCBhIHNsYXNoICgvKSBmb3IgbG9jYWwgd2ViLXBhdGhzIChyZWxhdGl2ZQogICAgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkb2N1bWVudHJvb3QiPkRvY3VtZW50Um9vdDwvYT48L2NvZGU+KSwgb3IgYmUgYQogICAgZnVsbCBVUkwgd2hpY2ggdGhlIGNsaWVudCBjYW4gcmVzb2x2ZS4gQWx0ZXJuYXRpdmVseSwgYSBtZXNzYWdlCiAgICBjYW4gYmUgcHJvdmlkZWQgdG8gYmUgZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyLiBOb3RlIHRoYXQgZGVjaWRpbmcKICAgIHdoZXRoZXIgdGhlIHBhcmFtZXRlciBpcyBhbiBVUkwsIGEgcGF0aCBvciBhIG1lc3NhZ2UgaXMgcGVyZm9ybWVkCiAgICBiZWZvcmUgYW55IGV4cHJlc3Npb24gaXMgcGFyc2VkLiBFeGFtcGxlczo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkVycm9yRG9jdW1lbnQgNTAwIGh0dHA6Ly9leGFtcGxlLmNvbS9jZ2ktYmluL3NlcnZlci1lcnJvci5jZ2kKRXJyb3JEb2N1bWVudCA0MDQgL2Vycm9ycy9iYWRfdXJscy5waHAKRXJyb3JEb2N1bWVudCA0MDEgL3N1YnNjcmlwdGlvbl9pbmZvLmh0bWwKRXJyb3JEb2N1bWVudCA0MDMgIlNvcnJ5LCBjYW4ndCBhbGxvdyB5b3UgYWNjZXNzIHRvZGF5IgpFcnJvckRvY3VtZW50IDQwMyBGb3JiaWRkZW4hCkVycm9yRG9jdW1lbnQgNDAzIC9lcnJvcnMvZm9yYmlkZGVuLnB5P3JlZmVycmVyPSV7ZXNjYXBlOiV7SFRUUF9SRUZFUkVSfX08L3ByZT4KCgogICAgPHA+QWRkaXRpb25hbGx5LCB0aGUgc3BlY2lhbCB2YWx1ZSA8Y29kZT5kZWZhdWx0PC9jb2RlPiBjYW4gYmUgdXNlZAogICAgdG8gc3BlY2lmeSBBcGFjaGUgaHR0cGQncyBzaW1wbGUgaGFyZGNvZGVkIG1lc3NhZ2UuICBXaGlsZSBub3QgcmVxdWlyZWQKICAgIHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzLCA8Y29kZT5kZWZhdWx0PC9jb2RlPiB3aWxsIHJlc3RvcmUKICAgIEFwYWNoZSBodHRwZCdzIHNpbXBsZSBoYXJkY29kZWQgbWVzc2FnZSBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCB3b3VsZAogICAgb3RoZXJ3aXNlIGluaGVyaXQgYW4gZXhpc3RpbmcgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+RXJyb3JEb2N1bWVudDwvY29kZT4uPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5FcnJvckRvY3VtZW50IDQwNCAvY2dpLWJpbi9iYWRfdXJscy5wbAoKJmx0O0RpcmVjdG9yeSAiL3dlYi9kb2NzIiZndDsKICBFcnJvckRvY3VtZW50IDQwNCBkZWZhdWx0CiZsdDsvRGlyZWN0b3J5Jmd0OzwvcHJlPgoKCiAgICA8cD5Ob3RlIHRoYXQgd2hlbiB5b3Ugc3BlY2lmeSBhbiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5FcnJvckRvY3VtZW50PC9jb2RlPgogICAgdGhhdCBwb2ludHMgdG8gYSByZW1vdGUgVVJMIChpZS4gYW55dGhpbmcgd2l0aCBhIG1ldGhvZCBzdWNoIGFzCiAgICA8Y29kZT5odHRwPC9jb2RlPiBpbiBmcm9udCBvZiBpdCksIEFwYWNoZSBIVFRQIFNlcnZlciB3aWxsIHNlbmQgYSByZWRpcmVjdCB0byB0aGUKICAgIGNsaWVudCB0byB0ZWxsIGl0IHdoZXJlIHRvIGZpbmQgdGhlIGRvY3VtZW50LCBldmVuIGlmIHRoZQogICAgZG9jdW1lbnQgZW5kcyB1cCBiZWluZyBvbiB0aGUgc2FtZSBzZXJ2ZXIuIFRoaXMgaGFzIHNldmVyYWwKICAgIGltcGxpY2F0aW9ucywgdGhlIG1vc3QgaW1wb3J0YW50IGJlaW5nIHRoYXQgdGhlIGNsaWVudCB3aWxsIG5vdAogICAgcmVjZWl2ZSB0aGUgb3JpZ2luYWwgZXJyb3Igc3RhdHVzIGNvZGUsIGJ1dCBpbnN0ZWFkIHdpbGwKICAgIHJlY2VpdmUgYSByZWRpcmVjdCBzdGF0dXMgY29kZS4gVGhpcyBpbiB0dXJuIGNhbiBjb25mdXNlIHdlYgogICAgcm9ib3RzIGFuZCBvdGhlciBjbGllbnRzIHdoaWNoIHRyeSB0byBkZXRlcm1pbmUgaWYgYSBVUkwgaXMKICAgIHZhbGlkIHVzaW5nIHRoZSBzdGF0dXMgY29kZS4gSW4gYWRkaXRpb24sIGlmIHlvdSB1c2UgYSByZW1vdGUKICAgIFVSTCBpbiBhbiA8Y29kZT5FcnJvckRvY3VtZW50IDQwMTwvY29kZT4sIHRoZSBjbGllbnQgd2lsbCBub3QKICAgIGtub3cgdG8gcHJvbXB0IHRoZSB1c2VyIGZvciBhIHBhc3N3b3JkIHNpbmNlIGl0IHdpbGwgbm90CiAgICByZWNlaXZlIHRoZSA0MDEgc3RhdHVzIGNvZGUuIFRoZXJlZm9yZSwgPHN0cm9uZz5pZiB5b3UgdXNlIGFuCiAgICA8Y29kZT5FcnJvckRvY3VtZW50IDQwMTwvY29kZT4gZGlyZWN0aXZlLCB0aGVuIGl0IG11c3QgcmVmZXIgdG8gYSBsb2NhbAogICAgZG9jdW1lbnQuPC9zdHJvbmc+PC9wPgoKICAgIDxwPk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciAoTVNJRSkgd2lsbCBieSBkZWZhdWx0IGlnbm9yZQogICAgc2VydmVyLWdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcyB3aGVuIHRoZXkgYXJlICJ0b28gc21hbGwiIGFuZCBzdWJzdGl0dXRlCiAgICBpdHMgb3duICJmcmllbmRseSIgZXJyb3IgbWVzc2FnZXMuIFRoZSBzaXplIHRocmVzaG9sZCB2YXJpZXMgZGVwZW5kaW5nIG9uCiAgICB0aGUgdHlwZSBvZiBlcnJvciwgYnV0IGluIGdlbmVyYWwsIGlmIHlvdSBtYWtlIHlvdXIgZXJyb3IgZG9jdW1lbnQKICAgIGdyZWF0ZXIgdGhhbiA1MTIgYnl0ZXMsIHRoZW4gTVNJRSB3aWxsIHNob3cgdGhlIHNlcnZlci1nZW5lcmF0ZWQKICAgIGVycm9yIHJhdGhlciB0aGFuIG1hc2tpbmcgaXQuICBNb3JlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbgogICAgTWljcm9zb2Z0IEtub3dsZWRnZSBCYXNlIGFydGljbGUgPGEgaHJlZj0iaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9kZWZhdWx0LmFzcHg/c2NpZD1rYjtlbi11cztRMjk0ODA3Ij5RMjk0ODA3PC9hPi48L3A+CgogICAgPHA+QWx0aG91Z2ggbW9zdCBlcnJvciBtZXNzYWdlcyBjYW4gYmUgb3ZlcnJpZGRlbiwgdGhlcmUgYXJlIGNlcnRhaW4KICAgIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlIGludGVybmFsIG1lc3NhZ2VzIGFyZSB1c2VkIHJlZ2FyZGxlc3Mgb2YgdGhlCiAgICBzZXR0aW5nIG9mIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNlcnJvcmRvY3VtZW50Ij5FcnJvckRvY3VtZW50PC9hPjwvY29kZT4uICBJbgogICAgcGFydGljdWxhciwgaWYgYSBtYWxmb3JtZWQgcmVxdWVzdCBpcyBkZXRlY3RlZCwgbm9ybWFsIHJlcXVlc3QgcHJvY2Vzc2luZwogICAgd2lsbCBiZSBpbW1lZGlhdGVseSBoYWx0ZWQgYW5kIHRoZSBpbnRlcm5hbCBlcnJvciBtZXNzYWdlIHJldHVybmVkLgogICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8gZ3VhcmQgYWdhaW5zdCBzZWN1cml0eSBwcm9ibGVtcyBjYXVzZWQgYnkKICAgIGJhZCByZXF1ZXN0cy48L3A+CgogICAgPHA+SWYgeW91IGFyZSB1c2luZyBtb2RfcHJveHksIHlvdSBtYXkgd2lzaCB0byBlbmFibGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCNwcm94eWVycm9yb3ZlcnJpZGUiPlByb3h5RXJyb3JPdmVycmlkZTwvYT48L2NvZGU+IHNvIHRoYXQgeW91IGNhbiBwcm92aWRlCiAgICBjdXN0b20gZXJyb3IgbWVzc2FnZXMgb24gYmVoYWxmIG9mIHlvdXIgT3JpZ2luIHNlcnZlcnMuIElmIHlvdSBkb24ndCBlbmFibGUgUHJveHlFcnJvck92ZXJyaWRlLAogICAgQXBhY2hlIGh0dHBkIHdpbGwgbm90IGdlbmVyYXRlIGN1c3RvbSBlcnJvciBkb2N1bWVudHMgZm9yIHByb3hpZWQgY29udGVudC48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48YSBocmVmPSIuLi9jdXN0b20tZXJyb3IuaHRtbCI+ZG9jdW1lbnRhdGlvbiBvZgogICAgY3VzdG9taXphYmxlIHJlc3BvbnNlczwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRXJyb3JMb2ciIGlkPSJFcnJvckxvZyI+RXJyb3JMb2c8L2E+IDxhIG5hbWU9ImVycm9ybG9nIiBpZD0iZXJyb3Jsb2ciPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkxvY2F0aW9uIHdoZXJlIHRoZSBzZXJ2ZXIgd2lsbCBsb2cgZXJyb3JzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiBFcnJvckxvZyA8dmFyPmZpbGUtcGF0aDwvdmFyPnxzeXNsb2dbOjx2YXI+ZmFjaWxpdHk8L3Zhcj5dPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkVycm9yTG9nIGxvZ3MvZXJyb3JfbG9nIChVbml4KSBFcnJvckxvZyBsb2dzL2Vycm9yLmxvZyAoV2luZG93cyBhbmQgT1MvMik8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5FcnJvckxvZzwvY29kZT4gZGlyZWN0aXZlIHNldHMgdGhlIG5hbWUgb2YKICAgIHRoZSBmaWxlIHRvIHdoaWNoIHRoZSBzZXJ2ZXIgd2lsbCBsb2cgYW55IGVycm9ycyBpdCBlbmNvdW50ZXJzLiBJZgogICAgdGhlIDx2YXI+ZmlsZS1wYXRoPC92YXI+IGlzIG5vdCBhYnNvbHV0ZSB0aGVuIGl0IGlzIGFzc3VtZWQgdG8gYmUKICAgIHJlbGF0aXZlIHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVycm9vdCI+U2VydmVyUm9vdDwvYT48L2NvZGU+LjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+RXJyb3JMb2cgIi92YXIvbG9nL2h0dHBkL2Vycm9yX2xvZyI8L3ByZT4KCgogICAgPHA+SWYgdGhlIDx2YXI+ZmlsZS1wYXRoPC92YXI+CiAgICBiZWdpbnMgd2l0aCBhIHBpcGUgY2hhcmFjdGVyICI8Y29kZT58PC9jb2RlPiIgdGhlbiBpdCBpcyBhc3N1bWVkIHRvIGJlIGEKICAgIGNvbW1hbmQgdG8gc3Bhd24gdG8gaGFuZGxlIHRoZSBlcnJvciBsb2cuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5FcnJvckxvZyAifC91c3IvbG9jYWwvYmluL2h0dHBkX2Vycm9ycyI8L3ByZT4KCgogICAgPHA+U2VlIHRoZSBub3RlcyBvbiA8YSBocmVmPSIuLi9sb2dzLmh0bWwjcGlwZWQiPnBpcGVkIGxvZ3M8L2E+IGZvcgogICAgbW9yZSBpbmZvcm1hdGlvbi48L3A+CgogICAgPHA+VXNpbmcgPGNvZGU+c3lzbG9nPC9jb2RlPiBpbnN0ZWFkIG9mIGEgZmlsZW5hbWUgZW5hYmxlcyBsb2dnaW5nCiAgICB2aWEgc3lzbG9nZCg4KSBpZiB0aGUgc3lzdGVtIHN1cHBvcnRzIGl0LiBUaGUgZGVmYXVsdCBpcyB0byB1c2UKICAgIHN5c2xvZyBmYWNpbGl0eSA8Y29kZT5sb2NhbDc8L2NvZGU+LCBidXQgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5CiAgICB1c2luZyB0aGUgPGNvZGU+c3lzbG9nOjx2YXI+ZmFjaWxpdHk8L3Zhcj48L2NvZGU+IHN5bnRheCB3aGVyZQogICAgPHZhcj5mYWNpbGl0eTwvdmFyPiBjYW4gYmUgb25lIG9mIHRoZSBuYW1lcyB1c3VhbGx5IGRvY3VtZW50ZWQgaW4KICAgIHN5c2xvZygxKS4gIFRoZSBmYWNpbGl0eSBpcyBlZmZlY3RpdmVseSBnbG9iYWwsIGFuZCBpZiBpdCBpcyBjaGFuZ2VkCiAgICBpbiBpbmRpdmlkdWFsIHZpcnR1YWwgaG9zdHMsIHRoZSBmaW5hbCBmYWNpbGl0eSBzcGVjaWZpZWQgYWZmZWN0cyB0aGUKICAgIGVudGlyZSBzZXJ2ZXIuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5FcnJvckxvZyBzeXNsb2c6dXNlcjwvcHJlPgoKCiAgICA8cD5BZGRpdGlvbmFsIG1vZHVsZXMgY2FuIHByb3ZpZGUgdGhlaXIgb3duIEVycm9yTG9nIHByb3ZpZGVycy4gVGhlIHN5bnRheAogICAgaXMgc2ltaWxhciB0byB0aGUgPGNvZGU+c3lzbG9nPC9jb2RlPiBleGFtcGxlIGFib3ZlLjwvcD4KCiAgICA8cD5TRUNVUklUWTogU2VlIHRoZSA8YSBocmVmPSIuLi9taXNjL3NlY3VyaXR5X3RpcHMuaHRtbCNzZXJ2ZXJyb290Ij5zZWN1cml0eSB0aXBzPC9hPgogICAgZG9jdW1lbnQgZm9yIGRldGFpbHMgb24gd2h5IHlvdXIgc2VjdXJpdHkgY291bGQgYmUgY29tcHJvbWlzZWQKICAgIGlmIHRoZSBkaXJlY3Rvcnkgd2hlcmUgbG9nIGZpbGVzIGFyZSBzdG9yZWQgaXMgd3JpdGFibGUgYnkKICAgIGFueW9uZSBvdGhlciB0aGFuIHRoZSB1c2VyIHRoYXQgc3RhcnRzIHRoZSBzZXJ2ZXIuPC9wPgogICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPk5vdGU8L2gzPgogICAgICA8cD5XaGVuIGVudGVyaW5nIGEgZmlsZSBwYXRoIG9uIG5vbi1Vbml4IHBsYXRmb3JtcywgY2FyZSBzaG91bGQgYmUgdGFrZW4KICAgICAgdG8gbWFrZSBzdXJlIHRoYXQgb25seSBmb3J3YXJkIHNsYXNoZXMgYXJlIHVzZWQgZXZlbiB0aG91Z2ggdGhlIHBsYXRmb3JtCiAgICAgIG1heSBhbGxvdyB0aGUgdXNlIG9mIGJhY2sgc2xhc2hlcy4gSW4gZ2VuZXJhbCBpdCBpcyBhIGdvb2QgaWRlYSB0byBhbHdheXMKICAgICAgdXNlIGZvcndhcmQgc2xhc2hlcyB0aHJvdWdob3V0IHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLjwvcD4KICAgIDwvZGl2PgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvZ2xldmVsIj5Mb2dMZXZlbDwvYT48L2NvZGU+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2xvZ3MuaHRtbCI+QXBhY2hlIEhUVFAgU2VydmVyIExvZyBGaWxlczwvYT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRXJyb3JMb2dGb3JtYXQiIGlkPSJFcnJvckxvZ0Zvcm1hdCI+RXJyb3JMb2dGb3JtYXQ8L2E+IDxhIG5hbWU9ImVycm9ybG9nZm9ybWF0IiBpZD0iZXJyb3Jsb2dmb3JtYXQiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkZvcm1hdCBzcGVjaWZpY2F0aW9uIGZvciBlcnJvciBsb2cgZW50cmllczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT4gRXJyb3JMb2dGb3JtYXQgW2Nvbm5lY3Rpb258cmVxdWVzdF0gPHZhcj5mb3JtYXQ8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkVycm9yTG9nRm9ybWF0PC9jb2RlPiBhbGxvd3MgdG8gc3BlY2lmeSB3aGF0CiAgICBzdXBwbGVtZW50YXJ5IGluZm9ybWF0aW9uIGlzIGxvZ2dlZCBpbiB0aGUgZXJyb3IgbG9nIGluIGFkZGl0aW9uIHRvIHRoZQogICAgYWN0dWFsIGxvZyBtZXNzYWdlLjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+I1NpbXBsZSBleGFtcGxlCkVycm9yTG9nRm9ybWF0ICJbJXRdIFslbF0gW3BpZCAlUF0gJUY6ICVFOiBbY2xpZW50ICVhXSAlTSI8L3ByZT4KCgogICAgPHA+U3BlY2lmeWluZyA8Y29kZT5jb25uZWN0aW9uPC9jb2RlPiBvciA8Y29kZT5yZXF1ZXN0PC9jb2RlPiBhcyBmaXJzdAogICAgcGFyYW1ldGVyIGFsbG93cyB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgZm9ybWF0cywgY2F1c2luZyBhZGRpdGlvbmFsCiAgICBpbmZvcm1hdGlvbiB0byBiZSBsb2dnZWQgd2hlbiB0aGUgZmlyc3QgbWVzc2FnZSBpcyBsb2dnZWQgZm9yIGEgc3BlY2lmaWMKICAgIGNvbm5lY3Rpb24gb3IgcmVxdWVzdCwgcmVzcGVjdGl2ZWx5LiBUaGlzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgb25seQogICAgbG9nZ2VkIG9uY2UgcGVyIGNvbm5lY3Rpb24vcmVxdWVzdC4gSWYgYSBjb25uZWN0aW9uIG9yIHJlcXVlc3QgaXMgcHJvY2Vzc2VkCiAgICB3aXRob3V0IGNhdXNpbmcgYW55IGxvZyBtZXNzYWdlLCB0aGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBub3QgbG9nZ2VkCiAgICBlaXRoZXIuPC9wPgoKICAgIDxwPkl0IGNhbiBoYXBwZW4gdGhhdCBzb21lIGZvcm1hdCBzdHJpbmcgaXRlbXMgZG8gbm90IHByb2R1Y2Ugb3V0cHV0LiAgRm9yCiAgICBleGFtcGxlLCB0aGUgUmVmZXJlciBoZWFkZXIgaXMgb25seSBwcmVzZW50IGlmIHRoZSBsb2cgbWVzc2FnZSBpcwogICAgYXNzb2NpYXRlZCB0byBhIHJlcXVlc3QgYW5kIHRoZSBsb2cgbWVzc2FnZSBoYXBwZW5zIGF0IGEgdGltZSB3aGVuIHRoZQogICAgUmVmZXJlciBoZWFkZXIgaGFzIGFscmVhZHkgYmVlbiByZWFkIGZyb20gdGhlIGNsaWVudC4gIElmIG5vIG91dHB1dCBpcwogICAgcHJvZHVjZWQsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIGRlbGV0ZSBldmVyeXRoaW5nIGZyb20gdGhlIHByZWNlZGluZwogICAgc3BhY2UgY2hhcmFjdGVyIHRvIHRoZSBuZXh0IHNwYWNlIGNoYXJhY3Rlci4gIFRoaXMgbWVhbnMgdGhlIGxvZyBsaW5lIGlzCiAgICBpbXBsaWNpdGx5IGRpdmlkZWQgaW50byBmaWVsZHMgb24gbm9uLXdoaXRlc3BhY2UgdG8gd2hpdGVzcGFjZSB0cmFuc2l0aW9ucy4KICAgIElmIGEgZm9ybWF0IHN0cmluZyBpdGVtIGRvZXMgbm90IHByb2R1Y2Ugb3V0cHV0LCB0aGUgd2hvbGUgZmllbGQgaXMKICAgIG9taXR0ZWQuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHJlbW90ZSBhZGRyZXNzIDxjb2RlPiVhPC9jb2RlPiBpbiB0aGUgbG9nCiAgICBmb3JtYXQgPGNvZGU+WyV0XSBbJWxdIFslYV0gJU0mbmJzcDs8L2NvZGU+IGlzIG5vdCBhdmFpbGFibGUsIHRoZSBzdXJyb3VuZGluZwogICAgYnJhY2tldHMgYXJlIG5vdCBsb2dnZWQgZWl0aGVyLiAgU3BhY2UgY2hhcmFjdGVycyBjYW4gYmUgZXNjYXBlZCB3aXRoIGEKICAgIGJhY2tzbGFzaCB0byBwcmV2ZW50IHRoZW0gZnJvbSBkZWxpbWl0aW5nIGEgZmllbGQuICBUaGUgY29tYmluYXRpb24gJyUmbmJzcDsnCiAgICAocGVyY2VudCBzcGFjZSkgaXMgYSB6ZXJvLXdpZHRoIGZpZWxkIGRlbGltaXRlciB0aGF0IGRvZXMgbm90IHByb2R1Y2UgYW55CiAgICBvdXRwdXQuPC9wPgoKICAgIDxwPlRoZSBhYm92ZSBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBieSBhZGRpbmcgbW9kaWZpZXJzIHRvIHRoZSBmb3JtYXQKICAgIHN0cmluZyBpdGVtLiBBIDxjb2RlPi08L2NvZGU+IChtaW51cykgbW9kaWZpZXIgY2F1c2VzIGEgbWludXMgdG8gYmUgbG9nZ2VkIGlmIHRoZQogICAgcmVzcGVjdGl2ZSBpdGVtIGRvZXMgbm90IHByb2R1Y2UgYW55IG91dHB1dC4gSW4gb25jZS1wZXItY29ubmVjdGlvbi9yZXF1ZXN0CiAgICBmb3JtYXRzLCBpdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSB0aGUgPGNvZGU+KzwvY29kZT4gKHBsdXMpIG1vZGlmaWVyLiBJZiBhbgogICAgaXRlbSB3aXRoIHRoZSBwbHVzIG1vZGlmaWVyIGRvZXMgbm90IHByb2R1Y2UgYW55IG91dHB1dCwgdGhlIHdob2xlIGxpbmUgaXMKICAgIG9taXR0ZWQuPC9wPgoKICAgIDxwPkEgbnVtYmVyIGFzIG1vZGlmaWVyIGNhbiBiZSB1c2VkIHRvIGFzc2lnbiBhIGxvZyBzZXZlcml0eSBsZXZlbCB0byBhCiAgICBmb3JtYXQgaXRlbS4gVGhlIGl0ZW0gd2lsbCBvbmx5IGJlIGxvZ2dlZCBpZiB0aGUgc2V2ZXJpdHkgb2YgdGhlIGxvZwogICAgbWVzc2FnZSBpcyBub3QgaGlnaGVyIHRoYW4gdGhlIHNwZWNpZmllZCBsb2cgc2V2ZXJpdHkgbGV2ZWwuIFRoZSBudW1iZXIgY2FuCiAgICByYW5nZSBmcm9tIDEgKGFsZXJ0KSBvdmVyIDQgKHdhcm4pIGFuZCA3IChkZWJ1ZykgdG8gMTUgKHRyYWNlOCkuPC9wPgoKICAgIDxwPkZvciBleGFtcGxlLCBoZXJlJ3Mgd2hhdCB3b3VsZCBoYXBwZW4gaWYgeW91IGFkZGVkIG1vZGlmaWVycyB0bwogICAgdGhlIDxjb2RlPiV7UmVmZXJlcn1pPC9jb2RlPiB0b2tlbiwgd2hpY2ggbG9ncyB0aGUKICAgIDxjb2RlPlJlZmVyZXI8L2NvZGU+IHJlcXVlc3QgaGVhZGVyLjwvcD4KCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+PHRoPk1vZGlmaWVkIFRva2VuPC90aD48dGg+TWVhbmluZzwvdGg+PC90cj4KPHRyPgogICAgPHRkPjxjb2RlPiUte1JlZmVyZXJ9aTwvY29kZT48L3RkPgogICAgPHRkPkxvZ3MgYSA8Y29kZT4tPC9jb2RlPiBpZiA8Y29kZT5SZWZlcmVyPC9jb2RlPiBpcyBub3Qgc2V0LjwvdGQ+CiAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICA8dGQ+PGNvZGU+JSt7UmVmZXJlcn1pPC9jb2RlPjwvdGQ+CiAgICA8dGQ+T21pdHMgdGhlIGVudGlyZSBsaW5lIGlmIDxjb2RlPlJlZmVyZXI8L2NvZGU+IGlzIG5vdCBzZXQuPC90ZD4KICAgIDwvdHI+Cjx0cj4KICAgIDx0ZD48Y29kZT4lNHtSZWZlcmVyfWk8L2NvZGU+PC90ZD4KICAgIDx0ZD5Mb2dzIHRoZSA8Y29kZT5SZWZlcmVyPC9jb2RlPiBvbmx5IGlmIHRoZSBsb2cgbWVzc2FnZSBzZXZlcml0eQogICAgaXMgaGlnaGVyIHRoYW4gNC48L3RkPgogICAgPC90cj4KPC90YWJsZT4KCiAgICA8cD5Tb21lIGZvcm1hdCBzdHJpbmcgaXRlbXMgYWNjZXB0IGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbiBicmFjZXMuPC9wPgoKICAgIDx0YWJsZSBjbGFzcz0iYm9yZGVyZWQiPjx0ciBjbGFzcz0iaGVhZGVyIj48dGg+Rm9ybWF0Jm5ic3A7U3RyaW5nPC90aD4gPHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPgo8dHI+PHRkPjxjb2RlPiUlPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBwZXJjZW50IHNpZ248L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JWE8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+Q2xpZW50IElQIGFkZHJlc3MgYW5kIHBvcnQgb2YgdGhlIHJlcXVlc3Q8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXtjfWE8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VW5kZXJseWluZyBwZWVyIElQIGFkZHJlc3MgYW5kIHBvcnQgb2YgdGhlIGNvbm5lY3Rpb24gKHNlZSB0aGUKICAgICAgICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZW1vdGVpcC5odG1sIj5tb2RfcmVtb3RlaXA8L2E+PC9jb2RlPiBtb2R1bGUpPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVBPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkxvY2FsIElQLWFkZHJlc3MgYW5kIHBvcnQ8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXs8ZW0+bmFtZTwvZW0+fWU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+UmVxdWVzdCBlbnZpcm9ubWVudCB2YXJpYWJsZSA8ZW0+bmFtZTwvZW0+PC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVFPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkFQUi9PUyBlcnJvciBzdGF0dXMgY29kZSBhbmQgc3RyaW5nPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVGPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlNvdXJjZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyIG9mIHRoZSBsb2cgY2FsbDwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lezxlbT5uYW1lPC9lbT59aTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5SZXF1ZXN0IGhlYWRlciA8ZW0+bmFtZTwvZW0+PC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVrPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPk51bWJlciBvZiBrZWVwLWFsaXZlIHJlcXVlc3RzIG9uIHRoaXMgY29ubmVjdGlvbjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lbDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Mb2dsZXZlbCBvZiB0aGUgbWVzc2FnZTwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lTDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Mb2cgSUQgb2YgdGhlIHJlcXVlc3Q8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXtjfUw8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+TG9nIElEIG9mIHRoZSBjb25uZWN0aW9uPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiV7Q31MPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkxvZyBJRCBvZiB0aGUgY29ubmVjdGlvbiBpZiB1c2VkIGluIGNvbm5lY3Rpb24gc2NvcGUsIGVtcHR5IG90aGVyd2lzZTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lbTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5OYW1lIG9mIHRoZSBtb2R1bGUgbG9nZ2luZyB0aGUgbWVzc2FnZTwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lTTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgYWN0dWFsIGxvZyBtZXNzYWdlPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiV7PGVtPm5hbWU8L2VtPn1uPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlJlcXVlc3Qgbm90ZSA8ZW0+bmFtZTwvZW0+PC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVQPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlByb2Nlc3MgSUQgb2YgY3VycmVudCBwcm9jZXNzPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVUPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRocmVhZCBJRCBvZiBjdXJyZW50IHRocmVhZDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4le2d9VDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5TeXN0ZW0gdW5pcXVlIHRocmVhZCBJRCBvZiBjdXJyZW50IHRocmVhZCAodGhlIHNhbWUgSUQgYXMKICAgICAgICAgICAgZGlzcGxheWVkIGJ5IGUuZy4gPGNvZGU+dG9wPC9jb2RlPjsgY3VycmVudGx5IExpbnV4IG9ubHkpPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiV0PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjdXJyZW50IHRpbWU8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXt1fXQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGN1cnJlbnQgdGltZSBpbmNsdWRpbmcgbWljcm8tc2Vjb25kczwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4le2N1fXQ8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGN1cnJlbnQgdGltZSBpbiBjb21wYWN0IElTTyA4NjAxIGZvcm1hdCwgaW5jbHVkaW5nCiAgICAgICAgICAgIG1pY3JvLXNlY29uZHM8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JXY8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNhbm9uaWNhbCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVybmFtZSI+U2VydmVyTmFtZTwvYT48L2NvZGU+CiAgICAgICAgICAgIG9mIHRoZSBjdXJyZW50IHNlcnZlci48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JVY8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHNlcnZlciBuYW1lIG9mIHRoZSBzZXJ2ZXIgc2VydmluZyB0aGUgcmVxdWVzdCBhY2NvcmRpbmcgdG8gdGhlCiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN1c2VjYW5vbmljYWxuYW1lIj5Vc2VDYW5vbmljYWxOYW1lPC9hPjwvY29kZT4KICAgICAgICAgICAgc2V0dGluZy48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+XCZuYnNwOzwvY29kZT4gKGJhY2tzbGFzaCBzcGFjZSk8L3RkPgogICAgICAgIDx0ZD5Ob24tZmllbGQgZGVsaW1pdGluZyBzcGFjZTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lJm5ic3A7PC9jb2RlPiAocGVyY2VudCBzcGFjZSk8L3RkPgogICAgICAgIDx0ZD5GaWVsZCBkZWxpbWl0ZXIgKG5vIG91dHB1dCk8L3RkPjwvdHI+CjwvdGFibGU+CgogICAgPHA+VGhlIGxvZyBJRCBmb3JtYXQgPGNvZGU+JUw8L2NvZGU+IHByb2R1Y2VzIGEgdW5pcXVlIGlkIGZvciBhIGNvbm5lY3Rpb24KICAgIG9yIHJlcXVlc3QuIFRoaXMgY2FuIGJlIHVzZWQgdG8gY29ycmVsYXRlIHdoaWNoIGxvZyBsaW5lcyBiZWxvbmcgdG8gdGhlCiAgICBzYW1lIGNvbm5lY3Rpb24gb3IgcmVxdWVzdCwgd2hpY2ggcmVxdWVzdCBoYXBwZW5zIG9uIHdoaWNoIGNvbm5lY3Rpb24uCiAgICBBIDxjb2RlPiVMPC9jb2RlPiBmb3JtYXQgc3RyaW5nIGlzIGFsc28gYXZhaWxhYmxlIGluCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCI+bW9kX2xvZ19jb25maWc8L2E+PC9jb2RlPiB0byBhbGxvdyB0byBjb3JyZWxhdGUgYWNjZXNzIGxvZyBlbnRyaWVzCiAgICB3aXRoIGVycm9yIGxvZyBsaW5lcy4gSWYgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF91bmlxdWVfaWQuaHRtbCI+bW9kX3VuaXF1ZV9pZDwvYT48L2NvZGU+IGlzIGxvYWRlZCwgaXRzCiAgICB1bmlxdWUgaWQgd2lsbCBiZSB1c2VkIGFzIGxvZyBJRCBmb3IgcmVxdWVzdHMuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4jRXhhbXBsZSAoZGVmYXVsdCBmb3JtYXQgZm9yIHRocmVhZGVkIE1QTXMpCkVycm9yTG9nRm9ybWF0ICJbJXt1fXRdIFslLW06JWxdIFtwaWQgJVA6dGlkICVUXSAlN0Y6ICVFOiBbY2xpZW50XCAlYV0gJU0loCxcoHJlZmVyZXJcoCV7UmVmZXJlcn1pIjwvcHJlPgoKCiAgICA8cD5UaGlzIHdvdWxkIHJlc3VsdCBpbiBlcnJvciBtZXNzYWdlcyBzdWNoIGFzOjwvcD4KCgk8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgIFtUaHUgTWF5IDEyIDA4OjI4OjU3LjY1MjExOCAyMDExXSBbY29yZTplcnJvcl0gW3BpZCA4Nzc3OnRpZCA0MzI2NDkwMTEyXSBbY2xpZW50IDo6MTo1ODYxOV0gRmlsZSBkb2VzIG5vdCBleGlzdDogL3Vzci9sb2NhbC9hcGFjaGUyL2h0ZG9jcy9mYXZpY29uLmljbwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5Ob3RpY2UgdGhhdCwgYXMgZGlzY3Vzc2VkIGFib3ZlLCBzb21lIGZpZWxkcyBhcmUgb21pdHRlZAogICAgZW50aXJlbHkgYmVjYXVzZSB0aGV5IGFyZSBub3QgZGVmaW5lZC48L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiNFeGFtcGxlIChzaW1pbGFyIHRvIHRoZSAyLjIueCBmb3JtYXQpCkVycm9yTG9nRm9ybWF0ICJbJXRdIFslbF0gJTdGOiAlRTogW2NsaWVudFwgJWFdICVNJaAsXKByZWZlcmVyXKAle1JlZmVyZXJ9aSI8L3ByZT4KCgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiNBZHZhbmNlZCBleGFtcGxlIHdpdGggcmVxdWVzdC9jb25uZWN0aW9uIGxvZyBJRHMKRXJyb3JMb2dGb3JtYXQgIlsle3VjfXRdIFslLW06JS1sXSBbUjolTF0gW0M6JXtDfUxdICU3RjogJUU6ICVNIgpFcnJvckxvZ0Zvcm1hdCByZXF1ZXN0ICJbJXt1Y310XSBbUjolTF0gUmVxdWVzdCAlayBvbiBDOiV7Y31MIHBpZDolUCB0aWQ6JVQiCkVycm9yTG9nRm9ybWF0IHJlcXVlc3QgIlsle3VjfXRdIFtSOiVMXSBVQTonJSt7VXNlci1BZ2VudH1pJyIKRXJyb3JMb2dGb3JtYXQgcmVxdWVzdCAiWyV7dWN9dF0gW1I6JUxdIFJlZmVyZXI6JyUre1JlZmVyZXJ9aSciCkVycm9yTG9nRm9ybWF0IGNvbm5lY3Rpb24gIlsle3VjfXRdIFtDOiV7Y31MXSBsb2NhbFwgJWEgcmVtb3RlXCAlQSI8L3ByZT4KCgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2Vycm9ybG9nIj5FcnJvckxvZzwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsb2dsZXZlbCI+TG9nTGV2ZWw8L2E+PC9jb2RlPjwvbGk+CjxsaT48YSBocmVmPSIuLi9sb2dzLmh0bWwiPkFwYWNoZSBIVFRQIFNlcnZlciBMb2cgRmlsZXM8L2E+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkV4dGVuZGVkU3RhdHVzIiBpZD0iRXh0ZW5kZWRTdGF0dXMiPkV4dGVuZGVkU3RhdHVzPC9hPiA8YSBuYW1lPSJleHRlbmRlZHN0YXR1cyIgaWQ9ImV4dGVuZGVkc3RhdHVzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5LZWVwIHRyYWNrIG9mIGV4dGVuZGVkIHN0YXR1cyBpbmZvcm1hdGlvbiBmb3IgZWFjaApyZXF1ZXN0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkV4dGVuZGVkU3RhdHVzIE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5FeHRlbmRlZFN0YXR1cyBPZmZbKl08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIG9wdGlvbiB0cmFja3MgYWRkaXRpb25hbCBkYXRhIHBlciB3b3JrZXIgYWJvdXQgdGhlCiAgICBjdXJyZW50bHkgZXhlY3V0aW5nIHJlcXVlc3QgYW5kIGNyZWF0ZXMgYSB1dGlsaXphdGlvbiBzdW1tYXJ5LgogICAgWW91IGNhbiBzZWUgdGhlc2UgdmFyaWFibGVzIGR1cmluZyBydW50aW1lIGJ5IGNvbmZpZ3VyaW5nCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3N0YXR1cy5odG1sIj5tb2Rfc3RhdHVzPC9hPjwvY29kZT4uICBOb3RlIHRoYXQgb3RoZXIgbW9kdWxlcyBtYXkKICAgIHJlbHkgb24gdGhpcyBzY29yZWJvYXJkLjwvcD4KCiAgICA8cD5UaGlzIHNldHRpbmcgYXBwbGllcyB0byB0aGUgZW50aXJlIHNlcnZlciBhbmQgY2Fubm90IGJlCiAgICBlbmFibGVkIG9yIGRpc2FibGVkIG9uIGEgdmlydHVhbGhvc3QtYnktdmlydHVhbGhvc3QgYmFzaXMuCiAgICBUaGUgY29sbGVjdGlvbiBvZiBleHRlbmRlZCBzdGF0dXMgaW5mb3JtYXRpb24gY2FuIHNsb3cgZG93bgogICAgdGhlIHNlcnZlci4gIEFsc28gbm90ZSB0aGF0IHRoaXMgc2V0dGluZyBjYW5ub3QgYmUgY2hhbmdlZAogICAgZHVyaW5nIGEgZ3JhY2VmdWwgcmVzdGFydC48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+CiAgICA8cD5Ob3RlIHRoYXQgbG9hZGluZyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3N0YXR1cy5odG1sIj5tb2Rfc3RhdHVzPC9hPjwvY29kZT4gd2lsbCBjaGFuZ2UKICAgIHRoZSBkZWZhdWx0IGJlaGF2aW9yIHRvIEV4dGVuZGVkU3RhdHVzIE9uLCB3aGlsZSBvdGhlcgogICAgdGhpcmQgcGFydHkgbW9kdWxlcyBtYXkgZG8gdGhlIHNhbWUuICBTdWNoIG1vZHVsZXMgcmVseSBvbgogICAgY29sbGVjdGluZyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RhdGUgb2YgYWxsIHdvcmtlcnMuCiAgICBUaGUgZGVmYXVsdCBpcyBjaGFuZ2VkIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc3RhdHVzLmh0bWwiPm1vZF9zdGF0dXM8L2E+PC9jb2RlPiBiZWdpbm5pbmcKICAgIHdpdGggdmVyc2lvbiAyLjMuNi4gVGhlIHByZXZpb3VzIGRlZmF1bHQgd2FzIGFsd2F5cyBPZmYuPC9wPgogICAgPC9kaXY+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkZpbGVFVGFnIiBpZD0iRmlsZUVUYWciPkZpbGVFVGFnPC9hPiA8YSBuYW1lPSJmaWxlZXRhZyIgaWQ9ImZpbGVldGFnIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5GaWxlIGF0dHJpYnV0ZXMgdXNlZCB0byBjcmVhdGUgdGhlIEVUYWcKSFRUUCByZXNwb25zZSBoZWFkZXIgZm9yIHN0YXRpYyBmaWxlczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5GaWxlRVRhZyA8dmFyPmNvbXBvbmVudDwvdmFyPiAuLi48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+RmlsZUVUYWcgTVRpbWUgU2l6ZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5UaGUgZGVmYXVsdCB1c2VkIHRvIGJlICJJTm9kZSZuYnNwO01UaW1lJm5ic3A7U2l6ZSIgaW4gMi4zLjE0IGFuZAplYXJsaWVyLjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPgogICAgVGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkZpbGVFVGFnPC9jb2RlPiBkaXJlY3RpdmUgY29uZmlndXJlcyB0aGUgZmlsZQogICAgYXR0cmlidXRlcyB0aGF0IGFyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgPGNvZGU+RVRhZzwvY29kZT4gKGVudGl0eQogICAgdGFnKSByZXNwb25zZSBoZWFkZXIgZmllbGQgd2hlbiB0aGUgZG9jdW1lbnQgaXMgYmFzZWQgb24gYSBzdGF0aWMgZmlsZS4KICAgIChUaGUgPGNvZGU+RVRhZzwvY29kZT4gdmFsdWUgaXMgdXNlZCBpbiBjYWNoZSBtYW5hZ2VtZW50IHRvIHNhdmUKICAgIG5ldHdvcmsgYmFuZHdpZHRoLikgVGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5GaWxlRVRhZzwvY29kZT4gZGlyZWN0aXZlIGFsbG93cyB5b3UgdG8gY2hvb3NlCiAgICB3aGljaCBvZiB0aGVzZSAtLSBpZiBhbnkgLS0gc2hvdWxkIGJlIHVzZWQuIFRoZSByZWNvZ25pemVkIGtleXdvcmRzIGFyZToKICAgIDwvcD4KCiAgICA8ZGw+CiAgICAgPGR0PjxzdHJvbmc+SU5vZGU8L3N0cm9uZz48L2R0PgogICAgIDxkZD5UaGUgZmlsZSdzIGktbm9kZSBudW1iZXIgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY2FsY3VsYXRpb248L2RkPgogICAgIDxkdD48c3Ryb25nPk1UaW1lPC9zdHJvbmc+PC9kdD4KICAgICA8ZGQ+VGhlIGRhdGUgYW5kIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgbW9kaWZpZWQgd2lsbCBiZSBpbmNsdWRlZDwvZGQ+CiAgICAgPGR0PjxzdHJvbmc+U2l6ZTwvc3Ryb25nPjwvZHQ+CiAgICAgPGRkPlRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGZpbGUgd2lsbCBiZSBpbmNsdWRlZDwvZGQ+CiAgICAgPGR0PjxzdHJvbmc+QWxsPC9zdHJvbmc+PC9kdD4KICAgICA8ZGQ+QWxsIGF2YWlsYWJsZSBmaWVsZHMgd2lsbCBiZSB1c2VkLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG86CiAgICAgICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5GaWxlRVRhZyBJTm9kZSBNVGltZSBTaXplPC9wcmU+CjwvZGQ+CiAgICAgPGR0PjxzdHJvbmc+Tm9uZTwvc3Ryb25nPjwvZHQ+CiAgICAgPGRkPklmIGEgZG9jdW1lbnQgaXMgZmlsZS1iYXNlZCwgbm8gPGNvZGU+RVRhZzwvY29kZT4gZmllbGQgd2lsbCBiZQogICAgICAgaW5jbHVkZWQgaW4gdGhlIHJlc3BvbnNlPC9kZD4KICAgIDwvZGw+CgogICAgPHA+VGhlIDxjb2RlPklOb2RlPC9jb2RlPiwgPGNvZGU+TVRpbWU8L2NvZGU+LCBhbmQgPGNvZGU+U2l6ZTwvY29kZT4KICAgIGtleXdvcmRzIG1heSBiZSBwcmVmaXhlZCB3aXRoIGVpdGhlciA8Y29kZT4rPC9jb2RlPiBvciA8Y29kZT4tPC9jb2RlPiwKICAgIHdoaWNoIGFsbG93IGNoYW5nZXMgdG8gYmUgbWFkZSB0byB0aGUgZGVmYXVsdCBzZXR0aW5nIGluaGVyaXRlZAogICAgZnJvbSBhIGJyb2FkZXIgc2NvcGUuIEFueSBrZXl3b3JkIGFwcGVhcmluZyB3aXRob3V0IHN1Y2ggYSBwcmVmaXgKICAgIGltbWVkaWF0ZWx5IGFuZCBjb21wbGV0ZWx5IGNhbmNlbHMgdGhlIGluaGVyaXRlZCBzZXR0aW5nLjwvcD4KCiAgICA8cD5JZiBhIGRpcmVjdG9yeSdzIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMKICAgIDxjb2RlPkZpbGVFVGFnJm5ic3A7SU5vZGUmbmJzcDtNVGltZSZuYnNwO1NpemU8L2NvZGU+LCBhbmQgYQogICAgc3ViZGlyZWN0b3J5J3MgaW5jbHVkZXMgPGNvZGU+RmlsZUVUYWcmbmJzcDstSU5vZGU8L2NvZGU+LAogICAgdGhlIHNldHRpbmcgZm9yIHRoYXQgc3ViZGlyZWN0b3J5ICh3aGljaCB3aWxsIGJlIGluaGVyaXRlZCBieQogICAgYW55IHN1Yi1zdWJkaXJlY3RvcmllcyB0aGF0IGRvbid0IG92ZXJyaWRlIGl0KSB3aWxsIGJlIGVxdWl2YWxlbnQgdG8KICAgIDxjb2RlPkZpbGVFVGFnJm5ic3A7TVRpbWUmbmJzcDtTaXplPC9jb2RlPi48L3A+CiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+V2FybmluZzwvaDM+CiAgICBEbyBub3QgY2hhbmdlIHRoZSBkZWZhdWx0IGZvciBkaXJlY3RvcmllcyBvciBsb2NhdGlvbnMgdGhhdCBoYXZlIFdlYkRBVgogICAgZW5hYmxlZCBhbmQgdXNlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfZGF2X2ZzLmh0bWwiPm1vZF9kYXZfZnM8L2E+PC9jb2RlPiBhcyBhIHN0b3JhZ2UgcHJvdmlkZXIuCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2Rhdl9mcy5odG1sIj5tb2RfZGF2X2ZzPC9hPjwvY29kZT4gdXNlcyA8Y29kZT5NVGltZSZuYnNwO1NpemU8L2NvZGU+CiAgICBhcyBhIGZpeGVkIGZvcm1hdCBmb3IgPGNvZGU+RVRhZzwvY29kZT4gY29tcGFyaXNvbnMgb24gY29uZGl0aW9uYWwgcmVxdWVzdHMuCiAgICBUaGVzZSBjb25kaXRpb25hbCByZXF1ZXN0cyB3aWxsIGJyZWFrIGlmIHRoZSA8Y29kZT5FVGFnPC9jb2RlPiBmb3JtYXQgaXMKICAgIGNoYW5nZWQgdmlhIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkZpbGVFVGFnPC9jb2RlPi4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPlNlcnZlciBTaWRlIEluY2x1ZGVzPC9oMz4KICAgIEFuIEVUYWcgaXMgbm90IGdlbmVyYXRlZCBmb3IgcmVzcG9uc2VzIHBhcnNlZCBieSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPgogICAgc2luY2UgdGhlIHJlc3BvbnNlIGVudGl0eSBjYW4gY2hhbmdlIHdpdGhvdXQgYSBjaGFuZ2Ugb2YgdGhlIElOb2RlLCBNVGltZSwgb3IgU2l6ZQogICAgb2YgdGhlIHN0YXRpYyBmaWxlIHdpdGggZW1iZWRkZWQgU1NJIGRpcmVjdGl2ZXMuCiAgICA8L2Rpdj4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRmlsZXMiIGlkPSJGaWxlcyI+Jmx0O0ZpbGVzJmd0OzwvYT4gPGEgbmFtZT0iZmlsZXMiIGlkPSJmaWxlcyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29udGFpbnMgZGlyZWN0aXZlcyB0aGF0IGFwcGx5IHRvIG1hdGNoZWQKZmlsZW5hbWVzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtGaWxlcyAiPHZhcj5maWxlbmFtZTwvdmFyPiImZ3Q7IC4uLiAmbHQ7L0ZpbGVzJmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtGaWxlcyZndDs8L2NvZGU+IGRpcmVjdGl2ZQogICAgbGltaXRzIHRoZSBzY29wZSBvZiB0aGUgZW5jbG9zZWQgZGlyZWN0aXZlcyBieSBmaWxlbmFtZS4gSXQgaXMgY29tcGFyYWJsZQogICAgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnkiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9hPjwvY29kZT4KICAgIGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9jYXRpb24iPiZsdDtMb2NhdGlvbiZndDs8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlcy4gSXQgc2hvdWxkIGJlIG1hdGNoZWQgd2l0aCBhIDxjb2RlPiZsdDsvRmlsZXMmZ3Q7PC9jb2RlPgogICAgZGlyZWN0aXZlLiBUaGUgZGlyZWN0aXZlcyBnaXZlbiB3aXRoaW4gdGhpcyBzZWN0aW9uIHdpbGwgYmUgYXBwbGllZCB0bwogICAgYW55IG9iamVjdCB3aXRoIGEgYmFzZW5hbWUgKGxhc3QgY29tcG9uZW50IG9mIGZpbGVuYW1lKSBtYXRjaGluZyB0aGUKICAgIHNwZWNpZmllZCBmaWxlbmFtZS4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0ZpbGVzJmd0OzwvY29kZT4KICAgIHNlY3Rpb25zIGFyZSBwcm9jZXNzZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyIGluIHRoZQogICAgY29uZmlndXJhdGlvbiBmaWxlLCBhZnRlciB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucyBhbmQKICAgIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZXMgYXJlIHJlYWQsIGJ1dCBiZWZvcmUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbnMuIE5vdGUKICAgIHRoYXQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0ZpbGVzJmd0OzwvY29kZT4gY2FuIGJlIG5lc3RlZAogICAgaW5zaWRlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnkiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbnMgdG8gcmVzdHJpY3QgdGhlCiAgICBwb3J0aW9uIG9mIHRoZSBmaWxlc3lzdGVtIHRoZXkgYXBwbHkgdG8uPC9wPgoKICAgIDxwPlRoZSA8dmFyPmZpbGVuYW1lPC92YXI+IGFyZ3VtZW50IHNob3VsZCBpbmNsdWRlIGEgZmlsZW5hbWUsIG9yCiAgICBhIHdpbGQtY2FyZCBzdHJpbmcsIHdoZXJlIDxjb2RlPj88L2NvZGU+IG1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIsCiAgICBhbmQgPGNvZGU+KjwvY29kZT4gbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMuPC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtGaWxlcyAiY2F0Lmh0bWwiJmd0OwogICAgIyBJbnNlcnQgc3R1ZmYgdGhhdCBhcHBsaWVzIHRvIGNhdC5odG1sIGhlcmUKJmx0Oy9GaWxlcyZndDsKCiZsdDtGaWxlcyAiP2F0LioiJmd0OwogICAgIyBUaGlzIHdvdWxkIGFwcGx5IHRvIGNhdC5odG1sLCBiYXQuaHRtbCwgaGF0LnBocCBhbmQgc28gb24uCiZsdDsvRmlsZXMmZ3Q7PC9wcmU+CgogICAgPHA+PGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCNyZWdleCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+UmVndWxhciBleHByZXNzaW9uczwvYT4KICAgIGNhbiBhbHNvIGJlIHVzZWQsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZQogICAgPGNvZGU+fjwvY29kZT4gY2hhcmFjdGVyLiBGb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtGaWxlcyB+ICJcLihnaWZ8anBlP2d8cG5nKSQiJmd0OwogICAgIy4uLgombHQ7L0ZpbGVzJmd0OzwvcHJlPgoKCiAgICA8cD53b3VsZCBtYXRjaCBtb3N0IGNvbW1vbiBJbnRlcm5ldCBncmFwaGljcyBmb3JtYXRzLiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZmlsZXNtYXRjaCI+Jmx0O0ZpbGVzTWF0Y2gmZ3Q7PC9hPjwvY29kZT4gaXMgcHJlZmVycmVkLAogICAgaG93ZXZlci48L3A+CgogICAgPHA+Tm90ZSB0aGF0IHVubGlrZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9jYXRpb24iPiZsdDtMb2NhdGlvbiZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucywgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0ZpbGVzJmd0OzwvY29kZT4gc2VjdGlvbnMgY2FuIGJlIHVzZWQgaW5zaWRlCiAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzLiBUaGlzIGFsbG93cyB1c2VycyB0byBjb250cm9sIGFjY2VzcyB0bwogICAgdGhlaXIgb3duIGZpbGVzLCBhdCBhIGZpbGUtYnktZmlsZSBsZXZlbC48L3A+CgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iLi4vc2VjdGlvbnMuaHRtbCI+SG93ICZsdDtEaXJlY3RvcnkmZ3Q7LCAmbHQ7TG9jYXRpb24mZ3Q7CiAgICBhbmQgJmx0O0ZpbGVzJmd0OyBzZWN0aW9ucyB3b3JrPC9hPiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRoZXNlCiAgICBkaWZmZXJlbnQgc2VjdGlvbnMgYXJlIGNvbWJpbmVkIHdoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkPC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkZpbGVzTWF0Y2giIGlkPSJGaWxlc01hdGNoIj4mbHQ7RmlsZXNNYXRjaCZndDs8L2E+IDxhIG5hbWU9ImZpbGVzbWF0Y2giIGlkPSJmaWxlc21hdGNoIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db250YWlucyBkaXJlY3RpdmVzIHRoYXQgYXBwbHkgdG8gcmVndWxhci1leHByZXNzaW9uIG1hdGNoZWQKZmlsZW5hbWVzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtGaWxlc01hdGNoIDx2YXI+cmVnZXg8L3Zhcj4mZ3Q7IC4uLiAmbHQ7L0ZpbGVzTWF0Y2gmZ3Q7PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0ZpbGVzTWF0Y2gmZ3Q7PC9jb2RlPiBkaXJlY3RpdmUKICAgIGxpbWl0cyB0aGUgc2NvcGUgb2YgdGhlIGVuY2xvc2VkIGRpcmVjdGl2ZXMgYnkgZmlsZW5hbWUsIGp1c3QgYXMgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9jb2RlPiBkaXJlY3RpdmUKICAgIGRvZXMuIEhvd2V2ZXIsIGl0IGFjY2VwdHMgYSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuLi9nbG9zc2FyeS5odG1sI3JlZ2V4IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5yZWd1bGFyCiAgICBleHByZXNzaW9uPC9hPi4gRm9yIGV4YW1wbGU6PC9wPgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtGaWxlc01hdGNoICIuK1wuKGdpZnxqcGU/Z3xwbmcpJCImZ3Q7CiAgICAjIC4uLgombHQ7L0ZpbGVzTWF0Y2gmZ3Q7PC9wcmU+CgoKICAgIDxwPndvdWxkIG1hdGNoIG1vc3QgY29tbW9uIEludGVybmV0IGdyYXBoaWNzIGZvcm1hdHMuPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoZSA8Y29kZT4uKzwvY29kZT4gYXQgdGhlIHN0YXJ0IG9mIHRoZSByZWdleCBlbnN1cmVzIHRoYXQKICAgIGZpbGVzIG5hbWVkIDxjb2RlPi5wbmc8L2NvZGU+LCBvciA8Y29kZT4uZ2lmPC9jb2RlPiwgZm9yIGV4YW1wbGUsCiAgICBhcmUgbm90IG1hdGNoZWQuPC9kaXY+CgogICAgPHA+RnJvbSAyLjQuOCBvbndhcmRzLCBuYW1lZCBncm91cHMgYW5kIGJhY2tyZWZlcmVuY2VzIGFyZSBjYXB0dXJlZCBhbmQKICAgIHdyaXR0ZW4gdG8gdGhlIGVudmlyb25tZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbmFtZSBwcmVmaXhlZCB3aXRoCiAgICAiTUFUQ0hfIiBhbmQgaW4gdXBwZXIgY2FzZS4gVGhpcyBhbGxvd3MgZWxlbWVudHMgb2YgZmlsZXMgdG8gYmUgcmVmZXJlbmNlZAogICAgZnJvbSB3aXRoaW4gPGEgaHJlZj0iLi4vZXhwci5odG1sIj5leHByZXNzaW9uczwvYT4gYW5kIG1vZHVsZXMgbGlrZQogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4uIEluIG9yZGVyIHRvIHByZXZlbnQgY29uZnVzaW9uLCBudW1iZXJlZAogICAgKHVubmFtZWQpIGJhY2tyZWZlcmVuY2VzIGFyZSBpZ25vcmVkLiBVc2UgbmFtZWQgZ3JvdXBzIGluc3RlYWQuPC9wPgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtGaWxlc01hdGNoICJeKD8mbHQ7c2l0ZW5hbWUmZ3Q7W14vXSspIiZndDsKICAgIHJlcXVpcmUgbGRhcC1ncm91cCBjbj0le2VudjpNQVRDSF9TSVRFTkFNRX0sb3U9Y29tYmluZWQsbz1FeGFtcGxlCiZsdDsvRmlsZXNNYXRjaCZndDs8L3ByZT4KCgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48YSBocmVmPSIuLi9zZWN0aW9ucy5odG1sIj5Ib3cgJmx0O0RpcmVjdG9yeSZndDssICZsdDtMb2NhdGlvbiZndDsKICAgIGFuZCAmbHQ7RmlsZXMmZ3Q7IHNlY3Rpb25zIHdvcms8L2E+IGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cgdGhlc2UKICAgIGRpZmZlcmVudCBzZWN0aW9ucyBhcmUgY29tYmluZWQgd2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQ8L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iRm9yY2VUeXBlIiBpZD0iRm9yY2VUeXBlIj5Gb3JjZVR5cGU8L2E+IDxhIG5hbWU9ImZvcmNldHlwZSIgaWQ9ImZvcmNldHlwZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Rm9yY2VzIGFsbCBtYXRjaGluZyBmaWxlcyB0byBiZSBzZXJ2ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCm1lZGlhIHR5cGUgaW4gdGhlIEhUVFAgQ29udGVudC1UeXBlIGhlYWRlciBmaWVsZDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Gb3JjZVR5cGUgPHZhcj5tZWRpYS10eXBlPC92YXI+fE5vbmU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+ZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPldoZW4gcGxhY2VkIGludG8gYW4gPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlIG9yIGEKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnkiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9hPjwvY29kZT4sIG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9jYXRpb24iPiZsdDtMb2NhdGlvbiZndDs8L2E+PC9jb2RlPiBvcgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2ZpbGVzIj4mbHQ7RmlsZXMmZ3Q7PC9hPjwvY29kZT4KICAgIHNlY3Rpb24sIHRoaXMgZGlyZWN0aXZlIGZvcmNlcyBhbGwgbWF0Y2hpbmcgZmlsZXMgdG8gYmUgc2VydmVkCiAgICB3aXRoIHRoZSBjb250ZW50IHR5cGUgaWRlbnRpZmljYXRpb24gZ2l2ZW4gYnkKICAgIDx2YXI+bWVkaWEtdHlwZTwvdmFyPi4gRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYSBkaXJlY3RvcnkgZnVsbCBvZgogICAgR0lGIGZpbGVzLCBidXQgZGlkIG5vdCB3YW50IHRvIGxhYmVsIHRoZW0gYWxsIHdpdGggPGNvZGU+LmdpZjwvY29kZT4sCiAgICB5b3UgbWlnaHQgd2FudCB0byB1c2U6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5Gb3JjZVR5cGUgaW1hZ2UvZ2lmPC9wcmU+CgoKICAgIDxwPk5vdGUgdGhhdCB0aGlzIGRpcmVjdGl2ZSBvdmVycmlkZXMgb3RoZXIgaW5kaXJlY3QgbWVkaWEgdHlwZQogICAgYXNzb2NpYXRpb25zIGRlZmluZWQgaW4gbWltZS50eXBlcyBvciB2aWEgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCNhZGR0eXBlIj5BZGRUeXBlPC9hPjwvY29kZT4uPC9wPgoKICAgIDxwPllvdSBjYW4gYWxzbyBvdmVycmlkZSBtb3JlIGdlbmVyYWwKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkZvcmNlVHlwZTwvY29kZT4gc2V0dGluZ3MKICAgIGJ5IHVzaW5nIHRoZSB2YWx1ZSBvZiA8Y29kZT5Ob25lPC9jb2RlPjo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiMgZm9yY2UgYWxsIGZpbGVzIHRvIGJlIGltYWdlL2dpZjoKJmx0O0xvY2F0aW9uICIvaW1hZ2VzIiZndDsKICBGb3JjZVR5cGUgaW1hZ2UvZ2lmCiZsdDsvTG9jYXRpb24mZ3Q7CgojIGJ1dCBub3JtYWwgbWltZS10eXBlIGFzc29jaWF0aW9ucyBoZXJlOgombHQ7TG9jYXRpb24gIi9pbWFnZXMvbWl4ZWQiJmd0OwogIEZvcmNlVHlwZSBOb25lCiZsdDsvTG9jYXRpb24mZ3Q7PC9wcmU+CgoKICAgIDxwPlRoaXMgZGlyZWN0aXZlIHByaW1hcmlseSBvdmVycmlkZXMgdGhlIGNvbnRlbnQgdHlwZXMgZ2VuZXJhdGVkIGZvcgogICAgc3RhdGljIGZpbGVzIHNlcnZlZCBvdXQgb2YgdGhlIGZpbGVzeXN0ZW0uICBGb3IgcmVzb3VyY2VzIG90aGVyIHRoYW4KICAgIHN0YXRpYyBmaWxlcywgd2hlcmUgdGhlIGdlbmVyYXRvciBvZiB0aGUgcmVzcG9uc2UgdHlwaWNhbGx5IHNwZWNpZmllcwogICAgYSBDb250ZW50LVR5cGUsIHRoaXMgZGlyZWN0aXZlIGhhcyBubyBlZmZlY3QuPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgIDxwPldoZW4gZXhwbGljaXQgZGlyZWN0aXZlcyBzdWNoIGFzCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2V0aGFuZGxlciI+U2V0SGFuZGxlcjwvYT48L2NvZGU+IG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCNhZGRoYW5kbGVyIj5BZGRIYW5kbGVyPC9hPjwvY29kZT4gZG8gbm90IGFwcGx5CiAgICB0byB0aGUgY3VycmVudCByZXF1ZXN0LCB0aGUgaW50ZXJuYWwgaGFuZGxlciBuYW1lIG5vcm1hbGx5IHNldCBieSB0aG9zZQogICAgZGlyZWN0aXZlcyBpcyBzZXQgdG8gbWF0Y2ggdGhlIGNvbnRlbnQgdHlwZSBzcGVjaWZpZWQgYnkgdGhpcyBkaXJlY3RpdmUuCiAgICBUaGlzIGlzIGEgaGlzdG9yaWNhbCBiZWhhdmlvciB0aGF0IHNvbWUgdGhpcmQtcGFydHkgbW9kdWxlcwogICAgKHN1Y2ggYXMgbW9kX3BocCkgbWF5IHVzZSAibWFnaWMiIGNvbnRlbnQgdHlwZXMgdXNlZCBvbmx5IHRvIHNpZ25hbCB0aGUKICAgIG1vZHVsZSB0byB0YWtlIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgbWF0Y2hpbmcgcmVxdWVzdC4gIENvbmZpZ3VyYXRpb25zCiAgICB0aGF0IHJlbHkgb24gc3VjaCAibWFnaWMiIHR5cGVzIHNob3VsZCBiZSBhdm9pZGVkIGJ5IHRoZSB1c2Ugb2YKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXRoYW5kbGVyIj5TZXRIYW5kbGVyPC9hPjwvY29kZT4gb3IKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI2FkZGhhbmRsZXIiPkFkZEhhbmRsZXI8L2E+PC9jb2RlPi4gPC9wPgogICAgPC9kaXY+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ikdwcm9mRGlyIiBpZD0iR3Byb2ZEaXIiPkdwcm9mRGlyPC9hPiA8YSBuYW1lPSJncHJvZmRpciIgaWQ9Imdwcm9mZGlyIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EaXJlY3RvcnkgdG8gd3JpdGUgZ21vbi5vdXQgcHJvZmlsaW5nIGRhdGEgdG8uICA8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+R3Byb2ZEaXIgPHZhcj4vdG1wL2dwcm9mLzwvdmFyPnw8dmFyPi90bXAvZ3Byb2YvPC92YXI+JTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+V2hlbiB0aGUgc2VydmVyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggZ3Byb2YgcHJvZmlsaW5nIHN1cHBvcnQsCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5HcHJvZkRpcjwvY29kZT4gY2F1c2VzIDxjb2RlPmdtb24ub3V0PC9jb2RlPiBmaWxlcyB0bwogICAgYmUgd3JpdHRlbiB0byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSB3aGVuIHRoZSBwcm9jZXNzIGV4aXRzLiAgSWYgdGhlCiAgICBhcmd1bWVudCBlbmRzIHdpdGggYSBwZXJjZW50IHN5bWJvbCAoJyUnKSwgc3ViZGlyZWN0b3JpZXMgYXJlIGNyZWF0ZWQKICAgIGZvciBlYWNoIHByb2Nlc3MgaWQuPC9wPgoKICAgIDxwPlRoaXMgZGlyZWN0aXZlIGN1cnJlbnRseSBvbmx5IHdvcmtzIHdpdGggdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9wcmVmb3JrLmh0bWwiPnByZWZvcms8L2E+PC9jb2RlPgogICAgTVBNLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJIb3N0bmFtZUxvb2t1cHMiIGlkPSJIb3N0bmFtZUxvb2t1cHMiPkhvc3RuYW1lTG9va3VwczwvYT4gPGEgbmFtZT0iaG9zdG5hbWVsb29rdXBzIiBpZD0iaG9zdG5hbWVsb29rdXBzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5FbmFibGVzIEROUyBsb29rdXBzIG9uIGNsaWVudCBJUCBhZGRyZXNzZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+SG9zdG5hbWVMb29rdXBzIE9ufE9mZnxEb3VibGU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+SG9zdG5hbWVMb29rdXBzIE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBlbmFibGVzIEROUyBsb29rdXBzIHNvIHRoYXQgaG9zdCBuYW1lcyBjYW4gYmUKICAgIGxvZ2dlZCAoYW5kIHBhc3NlZCB0byBDR0lzL1NTSXMgaW4gPGNvZGU+UkVNT1RFX0hPU1Q8L2NvZGU+KS4KICAgIFRoZSB2YWx1ZSA8Y29kZT5Eb3VibGU8L2NvZGU+IHJlZmVycyB0byBkb2luZyBkb3VibGUtcmV2ZXJzZQogICAgRE5TIGxvb2t1cC4gVGhhdCBpcywgYWZ0ZXIgYSByZXZlcnNlIGxvb2t1cCBpcyBwZXJmb3JtZWQsIGEgZm9yd2FyZAogICAgbG9va3VwIGlzIHRoZW4gcGVyZm9ybWVkIG9uIHRoYXQgcmVzdWx0LiBBdCBsZWFzdCBvbmUgb2YgdGhlIElQCiAgICBhZGRyZXNzZXMgaW4gdGhlIGZvcndhcmQgbG9va3VwIG11c3QgbWF0Y2ggdGhlIG9yaWdpbmFsCiAgICBhZGRyZXNzLiAoSW4gInRjcHdyYXBwZXJzIiB0ZXJtaW5vbG9neSB0aGlzIGlzIGNhbGxlZAogICAgPGNvZGU+UEFSQU5PSUQ8L2NvZGU+Lik8L3A+CgogICAgPHA+UmVnYXJkbGVzcyBvZiB0aGUgc2V0dGluZywgd2hlbiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2hvc3QuaHRtbCI+bW9kX2F1dGh6X2hvc3Q8L2E+PC9jb2RlPiBpcwogICAgdXNlZCBmb3IgY29udHJvbGxpbmcgYWNjZXNzIGJ5IGhvc3RuYW1lLCBhIGRvdWJsZSByZXZlcnNlIGxvb2t1cAogICAgd2lsbCBiZSBwZXJmb3JtZWQuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3Igc2VjdXJpdHkuIE5vdGUgdGhhdCB0aGUKICAgIHJlc3VsdCBvZiB0aGlzIGRvdWJsZS1yZXZlcnNlIGlzbid0IGdlbmVyYWxseSBhdmFpbGFibGUgdW5sZXNzIHlvdQogICAgc2V0IDxjb2RlPkhvc3RuYW1lTG9va3VwcyBEb3VibGU8L2NvZGU+LiBGb3IgZXhhbXBsZSwgaWYgb25seQogICAgPGNvZGU+SG9zdG5hbWVMb29rdXBzIE9uPC9jb2RlPiBhbmQgYSByZXF1ZXN0IGlzIG1hZGUgdG8gYW4gb2JqZWN0CiAgICB0aGF0IGlzIHByb3RlY3RlZCBieSBob3N0bmFtZSByZXN0cmljdGlvbnMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlcgogICAgdGhlIGRvdWJsZS1yZXZlcnNlIGZhaWxzIG9yIG5vdCwgQ0dJcyB3aWxsIHN0aWxsIGJlIHBhc3NlZCB0aGUKICAgIHNpbmdsZS1yZXZlcnNlIHJlc3VsdCBpbiA8Y29kZT5SRU1PVEVfSE9TVDwvY29kZT4uPC9wPgoKICAgIDxwPlRoZSBkZWZhdWx0IGlzIDxjb2RlPk9mZjwvY29kZT4gaW4gb3JkZXIgdG8gc2F2ZSB0aGUgbmV0d29yawogICAgdHJhZmZpYyBmb3IgdGhvc2Ugc2l0ZXMgdGhhdCBkb24ndCB0cnVseSBuZWVkIHRoZSByZXZlcnNlCiAgICBsb29rdXBzIGRvbmUuIEl0IGlzIGFsc28gYmV0dGVyIGZvciB0aGUgZW5kIHVzZXJzIGJlY2F1c2UgdGhleQogICAgZG9uJ3QgaGF2ZSB0byBzdWZmZXIgdGhlIGV4dHJhIGxhdGVuY3kgdGhhdCBhIGxvb2t1cCBlbnRhaWxzLgogICAgSGVhdmlseSBsb2FkZWQgc2l0ZXMgc2hvdWxkIGxlYXZlIHRoaXMgZGlyZWN0aXZlCiAgICA8Y29kZT5PZmY8L2NvZGU+LCBzaW5jZSBETlMgbG9va3VwcyBjYW4gdGFrZSBjb25zaWRlcmFibGUKICAgIGFtb3VudHMgb2YgdGltZS4gVGhlIHV0aWxpdHkgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2xvZ3Jlc29sdmUuaHRtbCI+bG9ncmVzb2x2ZTwvYT48L2NvZGU+LCBjb21waWxlZCBieQogICAgZGVmYXVsdCB0byB0aGUgPGNvZGU+YmluPC9jb2RlPiBzdWJkaXJlY3Rvcnkgb2YgeW91ciBpbnN0YWxsYXRpb24KICAgIGRpcmVjdG9yeSwgY2FuIGJlIHVzZWQgdG8gbG9vayB1cCBob3N0IG5hbWVzIGZyb20gbG9nZ2VkIElQIGFkZHJlc3NlcwogICAgb2ZmbGluZS48L3A+CgogICAgPHA+RmluYWxseSwgaWYgeW91IGhhdmUgPGEgaHJlZj0ibW9kX2F1dGh6X2hvc3QuaHRtbCNyZXFob3N0Ij5ob3N0bmFtZS1iYXNlZCBSZXF1aXJlCiAgICBkaXJlY3RpdmVzPC9hPiwgYSBob3N0bmFtZSBsb29rdXAgd2lsbCBiZSBwZXJmb3JtZWQgcmVnYXJkbGVzcyBvZgogICAgdGhlIHNldHRpbmcgb2YgPGNvZGU+SG9zdG5hbWVMb29rdXBzPC9jb2RlPi48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iSWYiIGlkPSJJZiI+Jmx0O0lmJmd0OzwvYT4gPGEgbmFtZT0iaWYiIGlkPSJpZiI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29udGFpbnMgZGlyZWN0aXZlcyB0aGF0IGFwcGx5IG9ubHkgaWYgYSBjb25kaXRpb24gaXMKc2F0aXNmaWVkIGJ5IGEgcmVxdWVzdCBhdCBydW50aW1lPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtJZiA8dmFyPmV4cHJlc3Npb248L3Zhcj4mZ3Q7IC4uLiAmbHQ7L0lmJmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtJZiZndDs8L2NvZGU+IGRpcmVjdGl2ZQogICAgZXZhbHVhdGVzIGFuIGV4cHJlc3Npb24gYXQgcnVudGltZSwgYW5kIGFwcGxpZXMgdGhlIGVuY2xvc2VkCiAgICBkaXJlY3RpdmVzIGlmIGFuZCBvbmx5IGlmIHRoZSBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0cnVlLgogICAgRm9yIGV4YW1wbGU6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7SWYgIi16IHJlcSgnSG9zdCcpIiZndDs8L3ByZT4KCgogICAgPHA+d291bGQgbWF0Y2ggSFRUUC8xLjAgcmVxdWVzdHMgd2l0aG91dCBhIDx2YXI+SG9zdDo8L3Zhcj4gaGVhZGVyLgogICAgRXhwcmVzc2lvbnMgbWF5IGNvbnRhaW4gdmFyaW91cyBzaGVsbC1saWtlIG9wZXJhdG9ycyBmb3Igc3RyaW5nCiAgICBjb21wYXJpc29uICg8Y29kZT49PTwvY29kZT4sIDxjb2RlPiE9PC9jb2RlPiwgPGNvZGU+Jmx0OzwvY29kZT4sIC4uLiksCiAgICBpbnRlZ2VyIGNvbXBhcmlzb24gKDxjb2RlPi1lcTwvY29kZT4sIDxjb2RlPi1uZTwvY29kZT4sIC4uLiksCiAgICBhbmQgb3RoZXJzICg8Y29kZT4tbjwvY29kZT4sIDxjb2RlPi16PC9jb2RlPiwgPGNvZGU+LWY8L2NvZGU+LCAuLi4pLgogICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byB1c2UgcmVndWxhciBleHByZXNzaW9ucywgPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7SWYgIiV7UVVFUllfU1RSSU5HfSA9fiAvKGRlbGV0ZXxjb21taXQpPS4qP2VsZW0vIiZndDs8L3ByZT4KCgogICAgPHA+c2hlbGwtbGlrZSBwYXR0ZXJuIG1hdGNoZXMgYW5kIG1hbnkgb3RoZXIgb3BlcmF0aW9ucy4gVGhlc2Ugb3BlcmF0aW9ucwogICAgY2FuIGJlIGRvbmUgb24gcmVxdWVzdCBoZWFkZXJzICg8Y29kZT5yZXE8L2NvZGU+KSwgZW52aXJvbm1lbnQgdmFyaWFibGVzCiAgICAoPGNvZGU+ZW52PC9jb2RlPiksIGFuZCBhIGxhcmdlIG51bWJlciBvZiBvdGhlciBwcm9wZXJ0aWVzLiBUaGUgZnVsbAogICAgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgaW4gPGEgaHJlZj0iLi4vZXhwci5odG1sIj5FeHByZXNzaW9ucyBpbgogICAgQXBhY2hlIEhUVFAgU2VydmVyPC9hPi48L3A+CgogICAgPHA+T25seSBkaXJlY3RpdmVzIHRoYXQgc3VwcG9ydCB0aGUgPGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5kaXJlY3RvcnkgY29udGV4dDwvYT4gY2FuIGJlIHVzZWQgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbiBzZWN0aW9uLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj4KICAgIENlcnRhaW4gdmFyaWFibGVzLCBzdWNoIGFzIDxjb2RlPkNPTlRFTlRfVFlQRTwvY29kZT4gYW5kIG90aGVyCiAgICByZXNwb25zZSBoZWFkZXJzLCBhcmUgc2V0IGFmdGVyICZsdDtJZiZndDsgY29uZGl0aW9ucyBoYXZlIGFscmVhZHkKICAgIGJlZW4gZXZhbHVhdGVkLCBhbmQgc28gd2lsbCBub3QgYmUgYXZhaWxhYmxlIHRvIHVzZSBpbiB0aGlzCiAgICBkaXJlY3RpdmUuCiAgICA8L2Rpdj4KCgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48YSBocmVmPSIuLi9leHByLmh0bWwiPkV4cHJlc3Npb25zIGluIEFwYWNoZSBIVFRQIFNlcnZlcjwvYT4sCmZvciBhIGNvbXBsZXRlIHJlZmVyZW5jZSBhbmQgbW9yZSBleGFtcGxlcy48L2xpPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2Vsc2VpZiI+Jmx0O0Vsc2VJZiZndDs8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZWxzZSI+Jmx0O0Vsc2UmZ3Q7PC9hPjwvY29kZT48L2xpPgo8bGk+PGEgaHJlZj0iLi4vc2VjdGlvbnMuaHRtbCI+SG93ICZsdDtEaXJlY3RvcnkmZ3Q7LCAmbHQ7TG9jYXRpb24mZ3Q7LAogICAgJmx0O0ZpbGVzJmd0OyBzZWN0aW9ucyB3b3JrPC9hPiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgaG93IHRoZXNlCiAgICBkaWZmZXJlbnQgc2VjdGlvbnMgYXJlIGNvbWJpbmVkIHdoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkLgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmJmd0OzwvY29kZT4sCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7RWxzZUlmJmd0OzwvY29kZT4sIGFuZAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0Vsc2UmZ3Q7PC9jb2RlPiBhcmUgYXBwbGllZCBsYXN0LjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJJZkRlZmluZSIgaWQ9IklmRGVmaW5lIj4mbHQ7SWZEZWZpbmUmZ3Q7PC9hPiA8YSBuYW1lPSJpZmRlZmluZSIgaWQ9ImlmZGVmaW5lIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5FbmNsb3NlcyBkaXJlY3RpdmVzIHRoYXQgd2lsbCBiZSBwcm9jZXNzZWQgb25seQppZiBhIHRlc3QgaXMgdHJ1ZSBhdCBzdGFydHVwPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtJZkRlZmluZSBbIV08dmFyPnBhcmFtZXRlci1uYW1lPC92YXI+Jmd0OyAuLi4KICAgICZsdDsvSWZEZWZpbmUmZ3Q7PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGU+Jmx0O0lmRGVmaW5lIDx2YXI+dGVzdDwvdmFyPiZndDsuLi4mbHQ7L0lmRGVmaW5lJmd0OwogICAgPC9jb2RlPiBzZWN0aW9uIGlzIHVzZWQgdG8gbWFyayBkaXJlY3RpdmVzIHRoYXQgYXJlIGNvbmRpdGlvbmFsLiBUaGUKICAgIGRpcmVjdGl2ZXMgd2l0aGluIGFuIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtJZkRlZmluZSZndDs8L2NvZGU+CiAgICBzZWN0aW9uIGFyZSBvbmx5IHByb2Nlc3NlZCBpZiB0aGUgPHZhcj50ZXN0PC92YXI+IGlzIHRydWUuIElmIDx2YXI+CiAgICB0ZXN0PC92YXI+IGlzIGZhbHNlLCBldmVyeXRoaW5nIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgbWFya2VycyBpcwogICAgaWdub3JlZC48L3A+CgogICAgPHA+VGhlIDx2YXI+dGVzdDwvdmFyPiBpbiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmRGVmaW5lJmd0OzwvY29kZT4gc2VjdGlvbiBkaXJlY3RpdmUgY2FuIGJlIG9uZSBvZiB0d28gZm9ybXM6PC9wPgoKICAgIDx1bD4KICAgICAgPGxpPjx2YXI+cGFyYW1ldGVyLW5hbWU8L3Zhcj48L2xpPgoKICAgICAgPGxpPjxjb2RlPiE8L2NvZGU+PHZhcj5wYXJhbWV0ZXItbmFtZTwvdmFyPjwvbGk+CiAgICA8L3VsPgoKICAgIDxwPkluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIGRpcmVjdGl2ZXMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgbWFya2VycyBhcmUgb25seSBwcm9jZXNzZWQgaWYgdGhlIHBhcmFtZXRlciBuYW1lZAogICAgPHZhcj5wYXJhbWV0ZXItbmFtZTwvdmFyPiBpcyBkZWZpbmVkLiBUaGUgc2Vjb25kIGZvcm1hdCByZXZlcnNlcwogICAgdGhlIHRlc3QsIGFuZCBvbmx5IHByb2Nlc3NlcyB0aGUgZGlyZWN0aXZlcyBpZgogICAgPHZhcj5wYXJhbWV0ZXItbmFtZTwvdmFyPiBpcyA8c3Ryb25nPm5vdDwvc3Ryb25nPiBkZWZpbmVkLjwvcD4KCiAgICA8cD5UaGUgPHZhcj5wYXJhbWV0ZXItbmFtZTwvdmFyPiBhcmd1bWVudCBpcyBhIGRlZmluZSBhcyBnaXZlbiBvbiB0aGUKICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IGNvbW1hbmQgbGluZSB2aWEgPGNvZGU+LUQ8dmFyPnBhcmFtZXRlcjwvdmFyPgogICAgPC9jb2RlPiBhdCB0aGUgdGltZSB0aGUgc2VydmVyIHdhcyBzdGFydGVkIG9yIGJ5IHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGVmaW5lIj5EZWZpbmU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgoKICAgIDxwPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtJZkRlZmluZSZndDs8L2NvZGU+IHNlY3Rpb25zIGFyZQogICAgbmVzdC1hYmxlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgc2ltcGxlCiAgICBtdWx0aXBsZS1wYXJhbWV0ZXIgdGVzdHMuIEV4YW1wbGU6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPmh0dHBkIC1EUmV2ZXJzZVByb3h5IC1EVXNlQ2FjaGUgLURNZW1DYWNoZSAuLi48L2NvZGU+PC9wPjwvZGl2PgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtJZkRlZmluZSBSZXZlcnNlUHJveHkmZ3Q7CiAgTG9hZE1vZHVsZSBwcm94eV9tb2R1bGUgICBtb2R1bGVzL21vZF9wcm94eS5zbwogIExvYWRNb2R1bGUgcHJveHlfaHR0cF9tb2R1bGUgICBtb2R1bGVzL21vZF9wcm94eV9odHRwLnNvCiAgJmx0O0lmRGVmaW5lIFVzZUNhY2hlJmd0OwogICAgTG9hZE1vZHVsZSBjYWNoZV9tb2R1bGUgICBtb2R1bGVzL21vZF9jYWNoZS5zbwogICAgJmx0O0lmRGVmaW5lIE1lbUNhY2hlJmd0OwogICAgICBMb2FkTW9kdWxlIG1lbV9jYWNoZV9tb2R1bGUgICBtb2R1bGVzL21vZF9tZW1fY2FjaGUuc28KICAgICZsdDsvSWZEZWZpbmUmZ3Q7CiAgICAmbHQ7SWZEZWZpbmUgIU1lbUNhY2hlJmd0OwogICAgICBMb2FkTW9kdWxlIGNhY2hlX2Rpc2tfbW9kdWxlICAgbW9kdWxlcy9tb2RfY2FjaGVfZGlzay5zbwogICAgJmx0Oy9JZkRlZmluZSZndDsKICAmbHQ7L0lmRGVmaW5lJmd0OwombHQ7L0lmRGVmaW5lJmd0OzwvcHJlPgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJJZk1vZHVsZSIgaWQ9IklmTW9kdWxlIj4mbHQ7SWZNb2R1bGUmZ3Q7PC9hPiA8YSBuYW1lPSJpZm1vZHVsZSIgaWQ9ImlmbW9kdWxlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5FbmNsb3NlcyBkaXJlY3RpdmVzIHRoYXQgYXJlIHByb2Nlc3NlZCBjb25kaXRpb25hbCBvbiB0aGUKcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBhIHNwZWNpZmljIG1vZHVsZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT4mbHQ7SWZNb2R1bGUgWyFdPHZhcj5tb2R1bGUtZmlsZTwvdmFyPnw8dmFyPm1vZHVsZS1pZGVudGlmaWVyPC92YXI+Jmd0OyAuLi4KICAgICZsdDsvSWZNb2R1bGUmZ3Q7PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5Nb2R1bGUgaWRlbnRpZmllcnMgYXJlIGF2YWlsYWJsZSBpbiB2ZXJzaW9uIDIuMSBhbmQKbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlPiZsdDtJZk1vZHVsZSA8dmFyPnRlc3Q8L3Zhcj4mZ3Q7Li4uJmx0Oy9JZk1vZHVsZSZndDs8L2NvZGU+CiAgICBzZWN0aW9uIGlzIHVzZWQgdG8gbWFyayBkaXJlY3RpdmVzIHRoYXQgYXJlIGNvbmRpdGlvbmFsIG9uIHRoZSBwcmVzZW5jZSBvZgogICAgYSBzcGVjaWZpYyBtb2R1bGUuIFRoZSBkaXJlY3RpdmVzIHdpdGhpbiBhbiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7SWZNb2R1bGUmZ3Q7PC9jb2RlPiBzZWN0aW9uIGFyZSBvbmx5IHByb2Nlc3NlZCBpZiB0aGUgPHZhcj50ZXN0PC92YXI+CiAgICBpcyB0cnVlLiBJZiA8dmFyPnRlc3Q8L3Zhcj4gaXMgZmFsc2UsIGV2ZXJ5dGhpbmcgYmV0d2VlbiB0aGUgc3RhcnQgYW5kCiAgICBlbmQgbWFya2VycyBpcyBpZ25vcmVkLjwvcD4KCiAgICA8cD5UaGUgPHZhcj50ZXN0PC92YXI+IGluIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7SWZNb2R1bGUmZ3Q7PC9jb2RlPiBzZWN0aW9uIGRpcmVjdGl2ZSBjYW4gYmUgb25lIG9mIHR3byBmb3Jtczo8L3A+CgogICAgPHVsPgogICAgICA8bGk+PHZhcj5tb2R1bGU8L3Zhcj48L2xpPgoKICAgICAgPGxpPiE8dmFyPm1vZHVsZTwvdmFyPjwvbGk+CiAgICA8L3VsPgoKICAgIDxwPkluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIGRpcmVjdGl2ZXMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZAogICAgbWFya2VycyBhcmUgb25seSBwcm9jZXNzZWQgaWYgdGhlIG1vZHVsZSBuYW1lZCA8dmFyPm1vZHVsZTwvdmFyPgogICAgaXMgaW5jbHVkZWQgaW4gQXBhY2hlIGh0dHBkIC0tIGVpdGhlciBjb21waWxlZCBpbiBvcgogICAgZHluYW1pY2FsbHkgbG9hZGVkIHVzaW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc28uaHRtbCNsb2FkbW9kdWxlIj5Mb2FkTW9kdWxlPC9hPjwvY29kZT4uIFRoZSBzZWNvbmQgZm9ybWF0IHJldmVyc2VzIHRoZSB0ZXN0LAogICAgYW5kIG9ubHkgcHJvY2Vzc2VzIHRoZSBkaXJlY3RpdmVzIGlmIDx2YXI+bW9kdWxlPC92YXI+IGlzCiAgICA8c3Ryb25nPm5vdDwvc3Ryb25nPiBpbmNsdWRlZC48L3A+CgogICAgPHA+VGhlIDx2YXI+bW9kdWxlPC92YXI+IGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgdGhlIG1vZHVsZSBpZGVudGlmaWVyIG9yCiAgICB0aGUgZmlsZSBuYW1lIG9mIHRoZSBtb2R1bGUsIGF0IHRoZSB0aW1lIGl0IHdhcyBjb21waWxlZC4gIEZvciBleGFtcGxlLAogICAgPGNvZGU+cmV3cml0ZV9tb2R1bGU8L2NvZGU+IGlzIHRoZSBpZGVudGlmaWVyIGFuZAogICAgPGNvZGU+bW9kX3Jld3JpdGUuYzwvY29kZT4gaXMgdGhlIGZpbGUgbmFtZS4gSWYgYSBtb2R1bGUgY29uc2lzdHMgb2YKICAgIHNldmVyYWwgc291cmNlIGZpbGVzLCB1c2UgdGhlIG5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgc3RyaW5nCiAgICA8Y29kZT5TVEFOREFSRDIwX01PRFVMRV9TVFVGRjwvY29kZT4uPC9wPgoKICAgIDxwPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtJZk1vZHVsZSZndDs8L2NvZGU+IHNlY3Rpb25zIGFyZQogICAgbmVzdC1hYmxlLCB3aGljaCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgc2ltcGxlIG11bHRpcGxlLW1vZHVsZQogICAgdGVzdHMuPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPlRoaXMgc2VjdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGlmIHlvdSBuZWVkIHRvIGhhdmUgb25lCiAgICBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCB3b3JrcyB3aGV0aGVyIG9yIG5vdCBhIHNwZWNpZmljIG1vZHVsZQogICAgaXMgYXZhaWxhYmxlLiBJbiBub3JtYWwgb3BlcmF0aW9uLCBkaXJlY3RpdmVzIG5lZWQgbm90IGJlCiAgICBwbGFjZWQgaW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0lmTW9kdWxlJmd0OzwvY29kZT4KICAgIHNlY3Rpb25zLjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkluY2x1ZGUiIGlkPSJJbmNsdWRlIj5JbmNsdWRlPC9hPiA8YSBuYW1lPSJpbmNsdWRlIiBpZD0iaW5jbHVkZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+SW5jbHVkZXMgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIHdpdGhpbgp0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+SW5jbHVkZSA8dmFyPmZpbGUtcGF0aDwvdmFyPnw8dmFyPmRpcmVjdG9yeS1wYXRoPC92YXI+fDx2YXI+d2lsZGNhcmQ8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3Rvcnk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+RGlyZWN0b3J5CndpbGRjYXJkIG1hdGNoaW5nIGF2YWlsYWJsZSBpbiAyLjMuNiBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBhbGxvd3MgaW5jbHVzaW9uIG9mIG90aGVyIGNvbmZpZ3VyYXRpb24gZmlsZXMKICAgIGZyb20gd2l0aGluIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmaWxlcy48L3A+CgogICAgPHA+U2hlbGwtc3R5bGUgKDxjb2RlPmZubWF0Y2goKTwvY29kZT4pIHdpbGRjYXJkIGNoYXJhY3RlcnMgY2FuIGJlIHVzZWQKICAgIGluIHRoZSBmaWxlbmFtZSBvciBkaXJlY3RvcnkgcGFydHMgb2YgdGhlIHBhdGggdG8gaW5jbHVkZSBzZXZlcmFsIGZpbGVzCiAgICBhdCBvbmNlLCBpbiBhbHBoYWJldGljYWwgb3JkZXIuIEluIGFkZGl0aW9uLCBpZgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+SW5jbHVkZTwvY29kZT4gcG9pbnRzIHRvIGEgZGlyZWN0b3J5LCByYXRoZXIgdGhhbiBhIGZpbGUsCiAgICBBcGFjaGUgaHR0cGQgd2lsbCByZWFkIGFsbCBmaWxlcyBpbiB0aGF0IGRpcmVjdG9yeSBhbmQgYW55IHN1YmRpcmVjdG9yeS4KICAgIEhvd2V2ZXIsIGluY2x1ZGluZyBlbnRpcmUgZGlyZWN0b3JpZXMgaXMgbm90IHJlY29tbWVuZGVkLCBiZWNhdXNlIGl0IGlzCiAgICBlYXN5IHRvIGFjY2lkZW50YWxseSBsZWF2ZSB0ZW1wb3JhcnkgZmlsZXMgaW4gYSBkaXJlY3RvcnkgdGhhdCBjYW4gY2F1c2UKICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+IHRvIGZhaWwuIEluc3RlYWQsIHdlIGVuY291cmFnZSB5b3UgdG8gdXNlIHRoZQogICAgd2lsZGNhcmQgc3ludGF4IHNob3duIGJlbG93LCB0byBpbmNsdWRlIGZpbGVzIHRoYXQgbWF0Y2ggYSBwYXJ0aWN1bGFyCiAgICBwYXR0ZXJuLCBzdWNoIGFzICouY29uZiwgZm9yIGV4YW1wbGUuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjaW5jbHVkZSI+SW5jbHVkZTwvYT48L2NvZGU+IGRpcmVjdGl2ZSB3aWxsCiAgICA8c3Ryb25nPmZhaWwgd2l0aCBhbiBlcnJvcjwvc3Ryb25nPiBpZiBhIHdpbGRjYXJkIGV4cHJlc3Npb24gZG9lcyBub3QKICAgIG1hdGNoIGFueSBmaWxlLiBUaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2luY2x1ZGVvcHRpb25hbCI+SW5jbHVkZU9wdGlvbmFsPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCBpZiBub24tbWF0Y2hpbmcgd2lsZGNhcmRzIHNob3VsZCBiZSBpZ25vcmVkLjwvcD4KCiAgICA8cD5UaGUgZmlsZSBwYXRoIHNwZWNpZmllZCBtYXkgYmUgYW4gYWJzb2x1dGUgcGF0aCwgb3IgbWF5IGJlIHJlbGF0aXZlCiAgICB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NlcnZlcnJvb3QiPlNlcnZlclJvb3Q8L2E+PC9jb2RlPiBkaXJlY3RvcnkuPC9wPgoKICAgIDxwPkV4YW1wbGVzOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+SW5jbHVkZSAvdXNyL2xvY2FsL2FwYWNoZTIvY29uZi9zc2wuY29uZgpJbmNsdWRlIC91c3IvbG9jYWwvYXBhY2hlMi9jb25mL3Zob3N0cy8qLmNvbmY8L3ByZT4KCgogICAgPHA+T3IsIHByb3ZpZGluZyBwYXRocyByZWxhdGl2ZSB0byB5b3VyIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJyb290Ij5TZXJ2ZXJSb290PC9hPjwvY29kZT4gZGlyZWN0b3J5OjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+SW5jbHVkZSBjb25mL3NzbC5jb25mCkluY2x1ZGUgY29uZi92aG9zdHMvKi5jb25mPC9wcmU+CgoKICAgIDxwPldpbGRjYXJkcyBtYXkgYmUgaW5jbHVkZWQgaW4gdGhlIGRpcmVjdG9yeSBvciBmaWxlIHBvcnRpb24gb2YgdGhlCiAgICBwYXRoLiBUaGlzIGV4YW1wbGUgd2lsbCBmYWlsIGlmIHRoZXJlIGlzIG5vIHN1YmRpcmVjdG9yeSBpbiBjb25mL3Zob3N0cwogICAgdGhhdCBjb250YWlucyBhdCBsZWFzdCBvbmUgKi5jb25mIGZpbGU6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5JbmNsdWRlIGNvbmYvdmhvc3RzLyovKi5jb25mPC9wcmU+CgoKICAgIDxwPkFsdGVybmF0aXZlbHksIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIGp1c3QgYmUgaWdub3JlZCBpbiBjYXNlIG9mCiAgICBtaXNzaW5nIGZpbGVzIG9yIGRpcmVjdG9yaWVzOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+SW5jbHVkZU9wdGlvbmFsIGNvbmYvdmhvc3RzLyovKi5jb25mPC9wcmU+CgoKCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNpbmNsdWRlb3B0aW9uYWwiPkluY2x1ZGVPcHRpb25hbDwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9hcGFjaGVjdGwuaHRtbCI+YXBhY2hlY3RsPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iSW5jbHVkZU9wdGlvbmFsIiBpZD0iSW5jbHVkZU9wdGlvbmFsIj5JbmNsdWRlT3B0aW9uYWw8L2E+IDxhIG5hbWU9ImluY2x1ZGVvcHRpb25hbCIgaWQ9ImluY2x1ZGVvcHRpb25hbCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+SW5jbHVkZXMgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlcyBmcm9tIHdpdGhpbgp0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+SW5jbHVkZU9wdGlvbmFsIDx2YXI+ZmlsZS1wYXRoPC92YXI+fDx2YXI+ZGlyZWN0b3J5LXBhdGg8L3Zhcj58PHZhcj53aWxkY2FyZDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gMi4zLjYgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgYWxsb3dzIGluY2x1c2lvbiBvZiBvdGhlciBjb25maWd1cmF0aW9uIGZpbGVzCiAgICBmcm9tIHdpdGhpbiB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEl0IHdvcmtzIGlkZW50aWNhbGx5IHRvIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2luY2x1ZGUiPkluY2x1ZGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUsIHdpdGggdGhlCiAgICBleGNlcHRpb24gdGhhdCBpZiB3aWxkY2FyZHMgZG8gbm90IG1hdGNoIGFueSBmaWxlIG9yIGRpcmVjdG9yeSwgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjaW5jbHVkZW9wdGlvbmFsIj5JbmNsdWRlT3B0aW9uYWw8L2E+PC9jb2RlPiBkaXJlY3RpdmUgd2lsbCBiZQogICAgc2lsZW50bHkgaWdub3JlZCBpbnN0ZWFkIG9mIGNhdXNpbmcgYW4gZXJyb3IuPC9wPgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2luY2x1ZGUiPkluY2x1ZGU8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvYXBhY2hlY3RsLmh0bWwiPmFwYWNoZWN0bDwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IktlZXBBbGl2ZSIgaWQ9IktlZXBBbGl2ZSI+S2VlcEFsaXZlPC9hPiA8YSBuYW1lPSJrZWVwYWxpdmUiIGlkPSJrZWVwYWxpdmUiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkVuYWJsZXMgSFRUUCBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPktlZXBBbGl2ZSBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+S2VlcEFsaXZlIE9uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgS2VlcC1BbGl2ZSBleHRlbnNpb24gdG8gSFRUUC8xLjAgYW5kIHRoZSBwZXJzaXN0ZW50CiAgICBjb25uZWN0aW9uIGZlYXR1cmUgb2YgSFRUUC8xLjEgcHJvdmlkZSBsb25nLWxpdmVkIEhUVFAgc2Vzc2lvbnMKICAgIHdoaWNoIGFsbG93IG11bHRpcGxlIHJlcXVlc3RzIHRvIGJlIHNlbnQgb3ZlciB0aGUgc2FtZSBUQ1AKICAgIGNvbm5lY3Rpb24uIEluIHNvbWUgY2FzZXMgdGhpcyBoYXMgYmVlbiBzaG93biB0byByZXN1bHQgaW4gYW4KICAgIGFsbW9zdCA1MCUgc3BlZWR1cCBpbiBsYXRlbmN5IHRpbWVzIGZvciBIVE1MIGRvY3VtZW50cyB3aXRoCiAgICBtYW55IGltYWdlcy4gVG8gZW5hYmxlIEtlZXAtQWxpdmUgY29ubmVjdGlvbnMsIHNldAogICAgPGNvZGU+S2VlcEFsaXZlIE9uPC9jb2RlPi48L3A+CgogICAgPHA+Rm9yIEhUVFAvMS4wIGNsaWVudHMsIEtlZXAtQWxpdmUgY29ubmVjdGlvbnMgd2lsbCBvbmx5IGJlCiAgICB1c2VkIGlmIHRoZXkgYXJlIHNwZWNpZmljYWxseSByZXF1ZXN0ZWQgYnkgYSBjbGllbnQuIEluCiAgICBhZGRpdGlvbiwgYSBLZWVwLUFsaXZlIGNvbm5lY3Rpb24gd2l0aCBhbiBIVFRQLzEuMCBjbGllbnQgY2FuCiAgICBvbmx5IGJlIHVzZWQgd2hlbiB0aGUgbGVuZ3RoIG9mIHRoZSBjb250ZW50IGlzIGtub3duIGluCiAgICBhZHZhbmNlLiBUaGlzIGltcGxpZXMgdGhhdCBkeW5hbWljIGNvbnRlbnQgc3VjaCBhcyBDR0kgb3V0cHV0LAogICAgU1NJIHBhZ2VzLCBhbmQgc2VydmVyLWdlbmVyYXRlZCBkaXJlY3RvcnkgbGlzdGluZ3Mgd2lsbAogICAgZ2VuZXJhbGx5IG5vdCB1c2UgS2VlcC1BbGl2ZSBjb25uZWN0aW9ucyB0byBIVFRQLzEuMCBjbGllbnRzLgogICAgRm9yIEhUVFAvMS4xIGNsaWVudHMsIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMgYXJlIHRoZSBkZWZhdWx0CiAgICB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gSWYgdGhlIGNsaWVudCByZXF1ZXN0cyBpdCwgY2h1bmtlZAogICAgZW5jb2Rpbmcgd2lsbCBiZSB1c2VkIGluIG9yZGVyIHRvIHNlbmQgY29udGVudCBvZiB1bmtub3duCiAgICBsZW5ndGggb3ZlciBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zLjwvcD4KCiAgICA8cD5XaGVuIGEgY2xpZW50IHVzZXMgYSBLZWVwLUFsaXZlIGNvbm5lY3Rpb24sIGl0IHdpbGwgYmUgY291bnRlZAogICAgYXMgYSBzaW5nbGUgInJlcXVlc3QiIGZvciB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21wbV9jb21tb24uaHRtbCNtYXhjb25uZWN0aW9uc3BlcmNoaWxkIj5NYXhDb25uZWN0aW9uc1BlckNoaWxkPC9hPjwvY29kZT4gZGlyZWN0aXZlLCByZWdhcmRsZXNzCiAgICBvZiBob3cgbWFueSByZXF1ZXN0cyBhcmUgc2VudCB1c2luZyB0aGUgY29ubmVjdGlvbi48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbWF4a2VlcGFsaXZlcmVxdWVzdHMiPk1heEtlZXBBbGl2ZVJlcXVlc3RzPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iS2VlcEFsaXZlVGltZW91dCIgaWQ9IktlZXBBbGl2ZVRpbWVvdXQiPktlZXBBbGl2ZVRpbWVvdXQ8L2E+IDxhIG5hbWU9ImtlZXBhbGl2ZXRpbWVvdXQiIGlkPSJrZWVwYWxpdmV0aW1lb3V0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5BbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHdpbGwgd2FpdCBmb3Igc3Vic2VxdWVudApyZXF1ZXN0cyBvbiBhIHBlcnNpc3RlbnQgY29ubmVjdGlvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5LZWVwQWxpdmVUaW1lb3V0IDx2YXI+bnVtPC92YXI+W21zXTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5LZWVwQWxpdmVUaW1lb3V0IDU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSBudW1iZXIgb2Ygc2Vjb25kcyBBcGFjaGUgaHR0cGQgd2lsbCB3YWl0IGZvciBhIHN1YnNlcXVlbnQKICAgIHJlcXVlc3QgYmVmb3JlIGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24uIEJ5IGFkZGluZyBhIHBvc3RmaXggb2YgbXMgdGhlCiAgICB0aW1lb3V0IGNhbiBiZSBhbHNvIHNldCBpbiBtaWxsaXNlY29uZHMuIE9uY2UgYSByZXF1ZXN0IGhhcyBiZWVuCiAgICByZWNlaXZlZCwgdGhlIHRpbWVvdXQgdmFsdWUgc3BlY2lmaWVkIGJ5IHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3RpbWVvdXQiPlRpbWVvdXQ8L2E+PC9jb2RlPiBkaXJlY3RpdmUgYXBwbGllcy48L3A+CgogICAgPHA+U2V0dGluZyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5LZWVwQWxpdmVUaW1lb3V0PC9jb2RlPiB0byBhIGhpZ2ggdmFsdWUKICAgIG1heSBjYXVzZSBwZXJmb3JtYW5jZSBwcm9ibGVtcyBpbiBoZWF2aWx5IGxvYWRlZCBzZXJ2ZXJzLiBUaGUKICAgIGhpZ2hlciB0aGUgdGltZW91dCwgdGhlIG1vcmUgc2VydmVyIHByb2Nlc3NlcyB3aWxsIGJlIGtlcHQKICAgIG9jY3VwaWVkIHdhaXRpbmcgb24gY29ubmVjdGlvbnMgd2l0aCBpZGxlIGNsaWVudHMuPC9wPgoKICAgIDxwPklmIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPktlZXBBbGl2ZVRpbWVvdXQ8L2NvZGU+IGlzIDxzdHJvbmc+bm90PC9zdHJvbmc+CiAgICBzZXQgZm9yIGEgbmFtZS1iYXNlZCB2aXJ0dWFsIGhvc3QsIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZGVmaW5lZAogICAgdmlydHVhbCBob3N0IGJlc3QgbWF0Y2hpbmcgdGhlIGxvY2FsIElQIGFuZCBwb3J0IHdpbGwgYmUgdXNlZC48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTGltaXQiIGlkPSJMaW1pdCI+Jmx0O0xpbWl0Jmd0OzwvYT4gPGEgbmFtZT0ibGltaXQiIGlkPSJsaW1pdCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UmVzdHJpY3QgZW5jbG9zZWQgYWNjZXNzIGNvbnRyb2xzIHRvIG9ubHkgY2VydGFpbiBIVFRQCm1ldGhvZHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O0xpbWl0IDx2YXI+bWV0aG9kPC92YXI+IFs8dmFyPm1ldGhvZDwvdmFyPl0gLi4uICZndDsgLi4uCiAgICAmbHQ7L0xpbWl0Jmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5kaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QXV0aENvbmZpZywgTGltaXQ8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+QWNjZXNzIGNvbnRyb2xzIGFyZSBub3JtYWxseSBlZmZlY3RpdmUgZm9yCiAgICA8c3Ryb25nPmFsbDwvc3Ryb25nPiBhY2Nlc3MgbWV0aG9kcywgYW5kIHRoaXMgaXMgdGhlIHVzdWFsCiAgICBkZXNpcmVkIGJlaGF2aW9yLiA8c3Ryb25nPkluIHRoZSBnZW5lcmFsIGNhc2UsIGFjY2VzcyBjb250cm9sCiAgICBkaXJlY3RpdmVzIHNob3VsZCBub3QgYmUgcGxhY2VkIHdpdGhpbiBhCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TGltaXQmZ3Q7PC9jb2RlPiBzZWN0aW9uLjwvc3Ryb25nPjwvcD4KCiAgICA8cD5UaGUgcHVycG9zZSBvZiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0xpbWl0Jmd0OzwvY29kZT4KICAgIGRpcmVjdGl2ZSBpcyB0byByZXN0cmljdCB0aGUgZWZmZWN0IG9mIHRoZSBhY2Nlc3MgY29udHJvbHMgdG8gdGhlCiAgICBub21pbmF0ZWQgSFRUUCBtZXRob2RzLiBGb3IgYWxsIG90aGVyIG1ldGhvZHMsIHRoZSBhY2Nlc3MKICAgIHJlc3RyaWN0aW9ucyB0aGF0IGFyZSBlbmNsb3NlZCBpbiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0xpbWl0Jmd0OzwvY29kZT4gYnJhY2tldCA8c3Ryb25nPndpbGwgaGF2ZSBubwogICAgZWZmZWN0PC9zdHJvbmc+LiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgYXBwbGllcyB0aGUgYWNjZXNzIGNvbnRyb2wKICAgIG9ubHkgdG8gdGhlIG1ldGhvZHMgPGNvZGU+UE9TVDwvY29kZT4sIDxjb2RlPlBVVDwvY29kZT4sIGFuZAogICAgPGNvZGU+REVMRVRFPC9jb2RlPiwgbGVhdmluZyBhbGwgb3RoZXIgbWV0aG9kcyB1bnByb3RlY3RlZDo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMaW1pdCBQT1NUIFBVVCBERUxFVEUmZ3Q7CiAgUmVxdWlyZSB2YWxpZC11c2VyCiZsdDsvTGltaXQmZ3Q7PC9wcmU+CgoKICAgIDxwPlRoZSBtZXRob2QgbmFtZXMgbGlzdGVkIGNhbiBiZSBvbmUgb3IgbW9yZSBvZjogPGNvZGU+R0VUPC9jb2RlPiwKICAgIDxjb2RlPlBPU1Q8L2NvZGU+LCA8Y29kZT5QVVQ8L2NvZGU+LCA8Y29kZT5ERUxFVEU8L2NvZGU+LAogICAgPGNvZGU+Q09OTkVDVDwvY29kZT4sIDxjb2RlPk9QVElPTlM8L2NvZGU+LAogICAgPGNvZGU+UEFUQ0g8L2NvZGU+LCA8Y29kZT5QUk9QRklORDwvY29kZT4sIDxjb2RlPlBST1BQQVRDSDwvY29kZT4sCiAgICA8Y29kZT5NS0NPTDwvY29kZT4sIDxjb2RlPkNPUFk8L2NvZGU+LCA8Y29kZT5NT1ZFPC9jb2RlPiwKICAgIDxjb2RlPkxPQ0s8L2NvZGU+LCBhbmQgPGNvZGU+VU5MT0NLPC9jb2RlPi4gPHN0cm9uZz5UaGUgbWV0aG9kIG5hbWUgaXMKICAgIGNhc2Utc2Vuc2l0aXZlLjwvc3Ryb25nPiBJZiA8Y29kZT5HRVQ8L2NvZGU+IGlzIHVzZWQsIGl0IHdpbGwgYWxzbwogICAgcmVzdHJpY3QgPGNvZGU+SEVBRDwvY29kZT4gcmVxdWVzdHMuIFRoZSA8Y29kZT5UUkFDRTwvY29kZT4gbWV0aG9kCiAgICBjYW5ub3QgYmUgbGltaXRlZCAoc2VlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN0cmFjZWVuYWJsZSI+VHJhY2VFbmFibGU8L2E+PC9jb2RlPikuPC9wPgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPkEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xpbWl0ZXhjZXB0Ij4mbHQ7TGltaXRFeGNlcHQmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbiBzaG91bGQgYWx3YXlzIGJlCiAgICB1c2VkIGluIHByZWZlcmVuY2UgdG8gYSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TGltaXQmZ3Q7PC9jb2RlPgogICAgc2VjdGlvbiB3aGVuIHJlc3RyaWN0aW5nIGFjY2Vzcywgc2luY2UgYSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbGltaXRleGNlcHQiPiZsdDtMaW1pdEV4Y2VwdCZndDs8L2E+PC9jb2RlPiBzZWN0aW9uIHByb3ZpZGVzIHByb3RlY3Rpb24KICAgIGFnYWluc3QgYXJiaXRyYXJ5IG1ldGhvZHMuPC9kaXY+CgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtMaW1pdCZndDs8L2NvZGU+IGFuZAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xpbWl0ZXhjZXB0Ij4mbHQ7TGltaXRFeGNlcHQmZ3Q7PC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZXMgbWF5IGJlIG5lc3RlZC4gIEluIHRoaXMgY2FzZSwgZWFjaCBzdWNjZXNzaXZlIGxldmVsIG9mCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TGltaXQmZ3Q7PC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbGltaXRleGNlcHQiPiZsdDtMaW1pdEV4Y2VwdCZndDs8L2E+PC9jb2RlPiBkaXJlY3RpdmVzIG11c3QKICAgIGZ1cnRoZXIgcmVzdHJpY3QgdGhlIHNldCBvZiBtZXRob2RzIHRvIHdoaWNoIGFjY2VzcyBjb250cm9scyBhcHBseS48L3A+CgogICAgPGRpdiBjbGFzcz0id2FybmluZyI+V2hlbiB1c2luZwogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0xpbWl0Jmd0OzwvY29kZT4gb3IKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtMaW1pdEV4Y2VwdCZndDs8L2NvZGU+IGRpcmVjdGl2ZXMgd2l0aAogICAgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPiBkaXJlY3RpdmUsCiAgICBub3RlIHRoYXQgdGhlIGZpcnN0IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPgogICAgdG8gc3VjY2VlZCBhdXRob3JpemVzIHRoZSByZXF1ZXN0LCByZWdhcmRsZXNzIG9mIHRoZSBwcmVzZW5jZSBvZiBvdGhlcgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZSI+UmVxdWlyZTwvYT48L2NvZGU+IGRpcmVjdGl2ZXMuPC9kaXY+CgogICAgPHA+Rm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiwgYWxsIHVzZXJzIHdpbGwKICAgIGJlIGF1dGhvcml6ZWQgZm9yIDxjb2RlPlBPU1Q8L2NvZGU+IHJlcXVlc3RzLCBhbmQgdGhlCiAgICA8Y29kZT5SZXF1aXJlIGdyb3VwIGVkaXRvcnM8L2NvZGU+IGRpcmVjdGl2ZSB3aWxsIGJlIGlnbm9yZWQKICAgIGluIGFsbCBjYXNlczo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMaW1pdEV4Y2VwdCBHRVQmZ3Q7CiAgUmVxdWlyZSB2YWxpZC11c2VyCiZsdDsvTGltaXRFeGNlcHQmZ3Q7CiZsdDtMaW1pdCBQT1NUJmd0OwogIFJlcXVpcmUgZ3JvdXAgZWRpdG9ycwombHQ7L0xpbWl0Jmd0OzwvcHJlPgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMaW1pdEV4Y2VwdCIgaWQ9IkxpbWl0RXhjZXB0Ij4mbHQ7TGltaXRFeGNlcHQmZ3Q7PC9hPiA8YSBuYW1lPSJsaW1pdGV4Y2VwdCIgaWQ9ImxpbWl0ZXhjZXB0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5SZXN0cmljdCBhY2Nlc3MgY29udHJvbHMgdG8gYWxsIEhUVFAgbWV0aG9kcwpleGNlcHQgdGhlIG5hbWVkIG9uZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O0xpbWl0RXhjZXB0IDx2YXI+bWV0aG9kPC92YXI+IFs8dmFyPm1ldGhvZDwvdmFyPl0gLi4uICZndDsgLi4uCiAgICAmbHQ7L0xpbWl0RXhjZXB0Jmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5kaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QXV0aENvbmZpZywgTGltaXQ8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0xpbWl0RXhjZXB0Jmd0OzwvY29kZT4gYW5kCiAgICA8Y29kZT4mbHQ7L0xpbWl0RXhjZXB0Jmd0OzwvY29kZT4gYXJlIHVzZWQgdG8gZW5jbG9zZQogICAgYSBncm91cCBvZiBhY2Nlc3MgY29udHJvbCBkaXJlY3RpdmVzIHdoaWNoIHdpbGwgdGhlbiBhcHBseSB0byBhbnkKICAgIEhUVFAgYWNjZXNzIG1ldGhvZCA8c3Ryb25nPm5vdDwvc3Ryb25nPiBsaXN0ZWQgaW4gdGhlIGFyZ3VtZW50czsKICAgIGkuZS4sIGl0IGlzIHRoZSBvcHBvc2l0ZSBvZiBhIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsaW1pdCI+Jmx0O0xpbWl0Jmd0OzwvYT48L2NvZGU+IHNlY3Rpb24gYW5kIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wKICAgIGJvdGggc3RhbmRhcmQgYW5kIG5vbnN0YW5kYXJkL3VucmVjb2duaXplZCBtZXRob2RzLiBTZWUgdGhlCiAgICBkb2N1bWVudGF0aW9uIGZvciA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbGltaXQiPiZsdDtMaW1pdCZndDs8L2E+PC9jb2RlPiBmb3IgbW9yZSBkZXRhaWxzLjwvcD4KCiAgICA8cD5Gb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMaW1pdEV4Y2VwdCBQT1NUIEdFVCZndDsKICBSZXF1aXJlIHZhbGlkLXVzZXIKJmx0Oy9MaW1pdEV4Y2VwdCZndDs8L3ByZT4KCgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkxpbWl0SW50ZXJuYWxSZWN1cnNpb24iIGlkPSJMaW1pdEludGVybmFsUmVjdXJzaW9uIj5MaW1pdEludGVybmFsUmVjdXJzaW9uPC9hPiA8YSBuYW1lPSJsaW1pdGludGVybmFscmVjdXJzaW9uIiBpZD0ibGltaXRpbnRlcm5hbHJlY3Vyc2lvbiI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGV0ZXJtaW5lIG1heGltdW0gbnVtYmVyIG9mIGludGVybmFsIHJlZGlyZWN0cyBhbmQgbmVzdGVkCnN1YnJlcXVlc3RzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkxpbWl0SW50ZXJuYWxSZWN1cnNpb24gPHZhcj5udW1iZXI8L3Zhcj4gWzx2YXI+bnVtYmVyPC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5MaW1pdEludGVybmFsUmVjdXJzaW9uIDEwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5BbiBpbnRlcm5hbCByZWRpcmVjdCBoYXBwZW5zLCBmb3IgZXhhbXBsZSwgd2hlbiB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY3Rpb25zLmh0bWwjYWN0aW9uIj5BY3Rpb248L2E+PC9jb2RlPiBkaXJlY3RpdmUsIHdoaWNoIGludGVybmFsbHkKICAgIHJlZGlyZWN0cyB0aGUgb3JpZ2luYWwgcmVxdWVzdCB0byBhIENHSSBzY3JpcHQuIEEgc3VicmVxdWVzdCBpcyBBcGFjaGUgaHR0cGQncwogICAgbWVjaGFuaXNtIHRvIGZpbmQgb3V0IHdoYXQgd291bGQgaGFwcGVuIGZvciBzb21lIFVSSSBpZiBpdCB3ZXJlIHJlcXVlc3RlZC4KICAgIEZvciBleGFtcGxlLCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2Rpci5odG1sIj5tb2RfZGlyPC9hPjwvY29kZT4gdXNlcyBzdWJyZXF1ZXN0cyB0byBsb29rIGZvciB0aGUKICAgIGZpbGVzIGxpc3RlZCBpbiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kaXIuaHRtbCNkaXJlY3RvcnlpbmRleCI+RGlyZWN0b3J5SW5kZXg8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlLjwvcD4KCiAgICA8cD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5MaW1pdEludGVybmFsUmVjdXJzaW9uPC9jb2RlPiBwcmV2ZW50cyB0aGUgc2VydmVyCiAgICBmcm9tIGNyYXNoaW5nIHdoZW4gZW50ZXJpbmcgYW4gaW5maW5pdGUgbG9vcCBvZiBpbnRlcm5hbCByZWRpcmVjdHMgb3IKICAgIHN1YnJlcXVlc3RzLiBTdWNoIGxvb3BzIGFyZSB1c3VhbGx5IGNhdXNlZCBieSBtaXNjb25maWd1cmF0aW9ucy48L3A+CgogICAgPHA+VGhlIGRpcmVjdGl2ZSBzdG9yZXMgdHdvIGRpZmZlcmVudCBsaW1pdHMsIHdoaWNoIGFyZSBldmFsdWF0ZWQgb24KICAgIHBlci1yZXF1ZXN0IGJhc2lzLiBUaGUgZmlyc3QgPHZhcj5udW1iZXI8L3Zhcj4gaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mCiAgICBpbnRlcm5hbCByZWRpcmVjdHMgdGhhdCBtYXkgZm9sbG93IGVhY2ggb3RoZXIuIFRoZSBzZWNvbmQgPHZhcj5udW1iZXI8L3Zhcj4KICAgIGRldGVybWluZXMgaG93IGRlZXBseSBzdWJyZXF1ZXN0cyBtYXkgYmUgbmVzdGVkLiBJZiB5b3Ugc3BlY2lmeSBvbmx5IG9uZQogICAgPHZhcj5udW1iZXI8L3Zhcj4sIGl0IHdpbGwgYmUgYXNzaWduZWQgdG8gYm90aCBsaW1pdHMuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5MaW1pdEludGVybmFsUmVjdXJzaW9uIDU8L3ByZT4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTGltaXRSZXF1ZXN0Qm9keSIgaWQ9IkxpbWl0UmVxdWVzdEJvZHkiPkxpbWl0UmVxdWVzdEJvZHk8L2E+IDxhIG5hbWU9ImxpbWl0cmVxdWVzdGJvZHkiIGlkPSJsaW1pdHJlcXVlc3Rib2R5Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5SZXN0cmljdHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIEhUVFAgcmVxdWVzdCBib2R5IHNlbnQKZnJvbSB0aGUgY2xpZW50PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkxpbWl0UmVxdWVzdEJvZHkgPHZhcj5ieXRlczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5MaW1pdFJlcXVlc3RCb2R5IDA8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIDx2YXI+Ynl0ZXM8L3Zhcj4gZnJvbSAwCiAgICAobWVhbmluZyB1bmxpbWl0ZWQpIHRvIDIxNDc0ODM2NDcgKDJHQikgdGhhdCBhcmUgYWxsb3dlZCBpbiBhCiAgICByZXF1ZXN0IGJvZHkuIFNlZSB0aGUgbm90ZSBiZWxvdyBmb3IgdGhlIGxpbWl0ZWQgYXBwbGljYWJpbGl0eQogICAgdG8gcHJveHkgcmVxdWVzdHMuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5MaW1pdFJlcXVlc3RCb2R5PC9jb2RlPiBkaXJlY3RpdmUgYWxsb3dzCiAgICB0aGUgdXNlciB0byBzZXQgYSBsaW1pdCBvbiB0aGUgYWxsb3dlZCBzaXplIG9mIGFuIEhUVFAgcmVxdWVzdAogICAgbWVzc2FnZSBib2R5IHdpdGhpbiB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUgZGlyZWN0aXZlIGlzIGdpdmVuCiAgICAoc2VydmVyLCBwZXItZGlyZWN0b3J5LCBwZXItZmlsZSBvciBwZXItbG9jYXRpb24pLiBJZiB0aGUgY2xpZW50CiAgICByZXF1ZXN0IGV4Y2VlZHMgdGhhdCBsaW1pdCwgdGhlIHNlcnZlciB3aWxsIHJldHVybiBhbiBlcnJvcgogICAgcmVzcG9uc2UgaW5zdGVhZCBvZiBzZXJ2aWNpbmcgdGhlIHJlcXVlc3QuIFRoZSBzaXplIG9mIGEgbm9ybWFsCiAgICByZXF1ZXN0IG1lc3NhZ2UgYm9keSB3aWxsIHZhcnkgZ3JlYXRseSBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZgogICAgdGhlIHJlc291cmNlIGFuZCB0aGUgbWV0aG9kcyBhbGxvd2VkIG9uIHRoYXQgcmVzb3VyY2UuIENHSSBzY3JpcHRzCiAgICB0eXBpY2FsbHkgdXNlIHRoZSBtZXNzYWdlIGJvZHkgZm9yIHJldHJpZXZpbmcgZm9ybSBpbmZvcm1hdGlvbi4KICAgIEltcGxlbWVudGF0aW9ucyBvZiB0aGUgPGNvZGU+UFVUPC9jb2RlPiBtZXRob2Qgd2lsbCByZXF1aXJlCiAgICBhIHZhbHVlIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGFueSByZXByZXNlbnRhdGlvbiB0aGF0IHRoZSBzZXJ2ZXIKICAgIHdpc2hlcyB0byBhY2NlcHQgZm9yIHRoYXQgcmVzb3VyY2UuPC9wPgoKICAgIDxwPlRoaXMgZGlyZWN0aXZlIGdpdmVzIHRoZSBzZXJ2ZXIgYWRtaW5pc3RyYXRvciBncmVhdGVyCiAgICBjb250cm9sIG92ZXIgYWJub3JtYWwgY2xpZW50IHJlcXVlc3QgYmVoYXZpb3IsIHdoaWNoIG1heSBiZQogICAgdXNlZnVsIGZvciBhdm9pZGluZyBzb21lIGZvcm1zIG9mIGRlbmlhbC1vZi1zZXJ2aWNlCiAgICBhdHRhY2tzLjwvcD4KCiAgICA8cD5JZiwgZm9yIGV4YW1wbGUsIHlvdSBhcmUgcGVybWl0dGluZyBmaWxlIHVwbG9hZCB0byBhIHBhcnRpY3VsYXIKICAgIGxvY2F0aW9uIGFuZCB3aXNoIHRvIGxpbWl0IHRoZSBzaXplIG9mIHRoZSB1cGxvYWRlZCBmaWxlIHRvIDEwMEssCiAgICB5b3UgbWlnaHQgdXNlIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TGltaXRSZXF1ZXN0Qm9keSAxMDI0MDA8L3ByZT4KCgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PHA+Rm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiBob3cgdGhpcyBkaXJlY3RpdmUgaXMgaW50ZXJwcmV0ZWQgYnkKICAgIHByb3h5IHJlcXVlc3RzLCBzZWUgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT4gZG9jdW1lbnRhdGlvbi48L3A+CiAgICA8L2Rpdj4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTGltaXRSZXF1ZXN0RmllbGRzIiBpZD0iTGltaXRSZXF1ZXN0RmllbGRzIj5MaW1pdFJlcXVlc3RGaWVsZHM8L2E+IDxhIG5hbWU9ImxpbWl0cmVxdWVzdGZpZWxkcyIgaWQ9ImxpbWl0cmVxdWVzdGZpZWxkcyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TGltaXRzIHRoZSBudW1iZXIgb2YgSFRUUCByZXF1ZXN0IGhlYWRlciBmaWVsZHMgdGhhdAp3aWxsIGJlIGFjY2VwdGVkIGZyb20gdGhlIGNsaWVudDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MaW1pdFJlcXVlc3RGaWVsZHMgPHZhcj5udW1iZXI8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+TGltaXRSZXF1ZXN0RmllbGRzIDEwMDwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+PHZhcj5OdW1iZXI8L3Zhcj4gaXMgYW4gaW50ZWdlciBmcm9tIDAgKG1lYW5pbmcgdW5saW1pdGVkKSB0bwogICAgMzI3NjcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGRlZmluZWQgYnkgdGhlIGNvbXBpbGUtdGltZQogICAgY29uc3RhbnQgPGNvZGU+REVGQVVMVF9MSU1JVF9SRVFVRVNUX0ZJRUxEUzwvY29kZT4gKDEwMCBhcwogICAgZGlzdHJpYnV0ZWQpLjwvcD4KCiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TGltaXRSZXF1ZXN0RmllbGRzPC9jb2RlPiBkaXJlY3RpdmUgYWxsb3dzCiAgICB0aGUgc2VydmVyIGFkbWluaXN0cmF0b3IgdG8gbW9kaWZ5IHRoZSBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mCiAgICByZXF1ZXN0IGhlYWRlciBmaWVsZHMgYWxsb3dlZCBpbiBhbiBIVFRQIHJlcXVlc3QuIEEgc2VydmVyIG5lZWRzCiAgICB0aGlzIHZhbHVlIHRvIGJlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgZmllbGRzIHRoYXQgYSBub3JtYWwKICAgIGNsaWVudCByZXF1ZXN0IG1pZ2h0IGluY2x1ZGUuIFRoZSBudW1iZXIgb2YgcmVxdWVzdCBoZWFkZXIgZmllbGRzCiAgICB1c2VkIGJ5IGEgY2xpZW50IHJhcmVseSBleGNlZWRzIDIwLCBidXQgdGhpcyBtYXkgdmFyeSBhbW9uZwogICAgZGlmZmVyZW50IGNsaWVudCBpbXBsZW1lbnRhdGlvbnMsIG9mdGVuIGRlcGVuZGluZyB1cG9uIHRoZSBleHRlbnQKICAgIHRvIHdoaWNoIGEgdXNlciBoYXMgY29uZmlndXJlZCB0aGVpciBicm93c2VyIHRvIHN1cHBvcnQgZGV0YWlsZWQKICAgIGNvbnRlbnQgbmVnb3RpYXRpb24uIE9wdGlvbmFsIEhUVFAgZXh0ZW5zaW9ucyBhcmUgb2Z0ZW4gZXhwcmVzc2VkCiAgICB1c2luZyByZXF1ZXN0IGhlYWRlciBmaWVsZHMuPC9wPgoKICAgIDxwPlRoaXMgZGlyZWN0aXZlIGdpdmVzIHRoZSBzZXJ2ZXIgYWRtaW5pc3RyYXRvciBncmVhdGVyCiAgICBjb250cm9sIG92ZXIgYWJub3JtYWwgY2xpZW50IHJlcXVlc3QgYmVoYXZpb3IsIHdoaWNoIG1heSBiZQogICAgdXNlZnVsIGZvciBhdm9pZGluZyBzb21lIGZvcm1zIG9mIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MuCiAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIGluY3JlYXNlZCBpZiBub3JtYWwgY2xpZW50cyBzZWUgYW4gZXJyb3IKICAgIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciB0aGF0IGluZGljYXRlcyB0b28gbWFueSBmaWVsZHMgd2VyZQogICAgc2VudCBpbiB0aGUgcmVxdWVzdC48L3A+CgogICAgPHA+Rm9yIGV4YW1wbGU6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5MaW1pdFJlcXVlc3RGaWVsZHMgNTA8L3ByZT4KCgogICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgICA8cD4gV2hlbiBuYW1lLWJhc2VkIHZpcnR1YWwgaG9zdGluZyBpcyB1c2VkLCB0aGUgdmFsdWUgZm9yIHRoaXMKICAgICBkaXJlY3RpdmUgaXMgdGFrZW4gZnJvbSB0aGUgZGVmYXVsdCAoZmlyc3QtbGlzdGVkKSB2aXJ0dWFsIGhvc3QgZm9yIHRoZQogICAgIGxvY2FsIElQIGFuZCBwb3J0IGNvbWJpbmF0aW9uLjwvcD4KICAgICA8L2Rpdj4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTGltaXRSZXF1ZXN0RmllbGRTaXplIiBpZD0iTGltaXRSZXF1ZXN0RmllbGRTaXplIj5MaW1pdFJlcXVlc3RGaWVsZFNpemU8L2E+IDxhIG5hbWU9ImxpbWl0cmVxdWVzdGZpZWxkc2l6ZSIgaWQ9ImxpbWl0cmVxdWVzdGZpZWxkc2l6ZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TGltaXRzIHRoZSBzaXplIG9mIHRoZSBIVFRQIHJlcXVlc3QgaGVhZGVyIGFsbG93ZWQgZnJvbSB0aGUKY2xpZW50PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkxpbWl0UmVxdWVzdEZpZWxkU2l6ZSA8dmFyPmJ5dGVzPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkxpbWl0UmVxdWVzdEZpZWxkU2l6ZSA4MTkwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiA8dmFyPmJ5dGVzPC92YXI+CiAgICB0aGF0IHdpbGwgYmUgYWxsb3dlZCBpbiBhbiBIVFRQIHJlcXVlc3QgaGVhZGVyLjwvcD4KCiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TGltaXRSZXF1ZXN0RmllbGRTaXplPC9jb2RlPiBkaXJlY3RpdmUKICAgIGFsbG93cyB0aGUgc2VydmVyIGFkbWluaXN0cmF0b3IgdG8gc2V0IHRoZSBsaW1pdAogICAgb24gdGhlIGFsbG93ZWQgc2l6ZSBvZiBhbiBIVFRQIHJlcXVlc3QgaGVhZGVyIGZpZWxkLiBBIHNlcnZlcgogICAgbmVlZHMgdGhpcyB2YWx1ZSB0byBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbnkgb25lIGhlYWRlciBmaWVsZAogICAgZnJvbSBhIG5vcm1hbCBjbGllbnQgcmVxdWVzdC4gVGhlIHNpemUgb2YgYSBub3JtYWwgcmVxdWVzdCBoZWFkZXIKICAgIGZpZWxkIHdpbGwgdmFyeSBncmVhdGx5IGFtb25nIGRpZmZlcmVudCBjbGllbnQgaW1wbGVtZW50YXRpb25zLAogICAgb2Z0ZW4gZGVwZW5kaW5nIHVwb24gdGhlIGV4dGVudCB0byB3aGljaCBhIHVzZXIgaGFzIGNvbmZpZ3VyZWQKICAgIHRoZWlyIGJyb3dzZXIgdG8gc3VwcG9ydCBkZXRhaWxlZCBjb250ZW50IG5lZ290aWF0aW9uLiBTUE5FR08KICAgIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMgY2FuIGJlIHVwIHRvIDEyMzkyIGJ5dGVzLjwvcD4KCiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBnaXZlcyB0aGUgc2VydmVyIGFkbWluaXN0cmF0b3IgZ3JlYXRlcgogICAgY29udHJvbCBvdmVyIGFibm9ybWFsIGNsaWVudCByZXF1ZXN0IGJlaGF2aW9yLCB3aGljaCBtYXkgYmUKICAgIHVzZWZ1bCBmb3IgYXZvaWRpbmcgc29tZSBmb3JtcyBvZiBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzLjwvcD4KCiAgICA8cD5Gb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkxpbWl0UmVxdWVzdEZpZWxkU2l6ZSA0MDk0PC9wcmU+CgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPlVuZGVyIG5vcm1hbCBjb25kaXRpb25zLCB0aGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGZyb20KICAgIHRoZSBkZWZhdWx0LjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgIDxwPiBXaGVuIG5hbWUtYmFzZWQgdmlydHVhbCBob3N0aW5nIGlzIHVzZWQsIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgZGlyZWN0aXZlIGlzIHRha2VuIGZyb20gdGhlIGRlZmF1bHQgKGZpcnN0LWxpc3RlZCkgdmlydHVhbCBob3N0IGJlc3QKICAgIG1hdGNoaW5nIHRoZSBjdXJyZW50IElQIGFkZHJlc3MgYW5kIHBvcnQgY29tYmluYXRpb24uPC9wPgogICAgPC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTGltaXRSZXF1ZXN0TGluZSIgaWQ9IkxpbWl0UmVxdWVzdExpbmUiPkxpbWl0UmVxdWVzdExpbmU8L2E+IDxhIG5hbWU9ImxpbWl0cmVxdWVzdGxpbmUiIGlkPSJsaW1pdHJlcXVlc3RsaW5lIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5MaW1pdCB0aGUgc2l6ZSBvZiB0aGUgSFRUUCByZXF1ZXN0IGxpbmUgdGhhdCB3aWxsIGJlIGFjY2VwdGVkCmZyb20gdGhlIGNsaWVudDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5MaW1pdFJlcXVlc3RMaW5lIDx2YXI+Ynl0ZXM8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+TGltaXRSZXF1ZXN0TGluZSA4MTkwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBzZXRzIHRoZSBudW1iZXIgb2YgPHZhcj5ieXRlczwvdmFyPiB0aGF0IHdpbGwgYmUKICAgIGFsbG93ZWQgb24gdGhlIEhUVFAgcmVxdWVzdC1saW5lLjwvcD4KCiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TGltaXRSZXF1ZXN0TGluZTwvY29kZT4gZGlyZWN0aXZlIGFsbG93cwogICAgdGhlIHNlcnZlciBhZG1pbmlzdHJhdG9yIHRvIHNldCB0aGUgbGltaXQgb24gdGhlIGFsbG93ZWQgc2l6ZQogICAgb2YgYSBjbGllbnQncyBIVFRQIHJlcXVlc3QtbGluZS4gU2luY2UgdGhlIHJlcXVlc3QtbGluZSBjb25zaXN0cyBvZiB0aGUKICAgIEhUVFAgbWV0aG9kLCBVUkksIGFuZCBwcm90b2NvbCB2ZXJzaW9uLCB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkxpbWl0UmVxdWVzdExpbmU8L2NvZGU+IGRpcmVjdGl2ZSBwbGFjZXMgYQogICAgcmVzdHJpY3Rpb24gb24gdGhlIGxlbmd0aCBvZiBhIHJlcXVlc3QtVVJJIGFsbG93ZWQgZm9yIGEgcmVxdWVzdAogICAgb24gdGhlIHNlcnZlci4gQSBzZXJ2ZXIgbmVlZHMgdGhpcyB2YWx1ZSB0byBiZSBsYXJnZSBlbm91Z2ggdG8KICAgIGhvbGQgYW55IG9mIGl0cyByZXNvdXJjZSBuYW1lcywgaW5jbHVkaW5nIGFueSBpbmZvcm1hdGlvbiB0aGF0CiAgICBtaWdodCBiZSBwYXNzZWQgaW4gdGhlIHF1ZXJ5IHBhcnQgb2YgYSA8Y29kZT5HRVQ8L2NvZGU+IHJlcXVlc3QuPC9wPgoKICAgIDxwPlRoaXMgZGlyZWN0aXZlIGdpdmVzIHRoZSBzZXJ2ZXIgYWRtaW5pc3RyYXRvciBncmVhdGVyCiAgICBjb250cm9sIG92ZXIgYWJub3JtYWwgY2xpZW50IHJlcXVlc3QgYmVoYXZpb3IsIHdoaWNoIG1heSBiZQogICAgdXNlZnVsIGZvciBhdm9pZGluZyBzb21lIGZvcm1zIG9mIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MuPC9wPgoKICAgIDxwPkZvciBleGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TGltaXRSZXF1ZXN0TGluZSA0MDk0PC9wcmU+CgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPlVuZGVyIG5vcm1hbCBjb25kaXRpb25zLCB0aGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGZyb20KICAgIHRoZSBkZWZhdWx0LjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgIDxwPiBXaGVuIG5hbWUtYmFzZWQgdmlydHVhbCBob3N0aW5nIGlzIHVzZWQsIHRoZSB2YWx1ZSBmb3IgdGhpcwogICAgZGlyZWN0aXZlIGlzIHRha2VuIGZyb20gdGhlIGRlZmF1bHQgKGZpcnN0LWxpc3RlZCkgdmlydHVhbCBob3N0IGJlc3QKICAgIG1hdGNoaW5nIHRoZSBjdXJyZW50IElQIGFkZHJlc3MgYW5kIHBvcnQgY29tYmluYXRpb24uPC9wPgogICAgPC9kaXY+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkxpbWl0WE1MUmVxdWVzdEJvZHkiIGlkPSJMaW1pdFhNTFJlcXVlc3RCb2R5Ij5MaW1pdFhNTFJlcXVlc3RCb2R5PC9hPiA8YSBuYW1lPSJsaW1pdHhtbHJlcXVlc3Rib2R5IiBpZD0ibGltaXR4bWxyZXF1ZXN0Ym9keSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TGltaXRzIHRoZSBzaXplIG9mIGFuIFhNTC1iYXNlZCByZXF1ZXN0IGJvZHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+TGltaXRYTUxSZXF1ZXN0Qm9keSA8dmFyPmJ5dGVzPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkxpbWl0WE1MUmVxdWVzdEJvZHkgMTAwMDAwMDwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+TGltaXQgKGluIGJ5dGVzKSBvbiBtYXhpbXVtIHNpemUgb2YgYW4gWE1MLWJhc2VkIHJlcXVlc3QKICAgIGJvZHkuIEEgdmFsdWUgb2YgPGNvZGU+MDwvY29kZT4gd2lsbCBkaXNhYmxlIGFueSBjaGVja2luZy48L3A+CgogICAgPHA+RXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkxpbWl0WE1MUmVxdWVzdEJvZHkgMDwvcHJlPgoKCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTG9jYXRpb24iIGlkPSJMb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT4gPGEgbmFtZT0ibG9jYXRpb24iIGlkPSJsb2NhdGlvbiI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QXBwbGllcyB0aGUgZW5jbG9zZWQgZGlyZWN0aXZlcyBvbmx5IHRvIG1hdGNoaW5nClVSTHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O0xvY2F0aW9uCiAgICAiPHZhcj5VUkwtcGF0aDwvdmFyPnw8dmFyPlVSTDwvdmFyPiImZ3Q7IC4uLiAmbHQ7L0xvY2F0aW9uJmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtMb2NhdGlvbiZndDs8L2NvZGU+IGRpcmVjdGl2ZQogICAgbGltaXRzIHRoZSBzY29wZSBvZiB0aGUgZW5jbG9zZWQgZGlyZWN0aXZlcyBieSBVUkwuIEl0IGlzIHNpbWlsYXIgdG8gdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+CiAgICBkaXJlY3RpdmUsIGFuZCBzdGFydHMgYSBzdWJzZWN0aW9uIHdoaWNoIGlzIHRlcm1pbmF0ZWQgd2l0aCBhCiAgICA8Y29kZT4mbHQ7L0xvY2F0aW9uJmd0OzwvY29kZT4gZGlyZWN0aXZlLiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TG9jYXRpb24mZ3Q7PC9jb2RlPiBzZWN0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIHRoZQogICAgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSwgYWZ0ZXIgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnkiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbnMgYW5kCiAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzIGFyZSByZWFkLCBhbmQgYWZ0ZXIgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNmaWxlcyI+Jmx0O0ZpbGVzJmd0OzwvYT48L2NvZGU+IHNlY3Rpb25zLjwvcD4KCiAgICA8cD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TG9jYXRpb24mZ3Q7PC9jb2RlPiBzZWN0aW9ucyBvcGVyYXRlCiAgICBjb21wbGV0ZWx5IG91dHNpZGUgdGhlIGZpbGVzeXN0ZW0uICBUaGlzIGhhcyBzZXZlcmFsIGNvbnNlcXVlbmNlcy4KICAgIE1vc3QgaW1wb3J0YW50bHksIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtMb2NhdGlvbiZndDs8L2NvZGU+CiAgICBkaXJlY3RpdmVzIHNob3VsZCBub3QgYmUgdXNlZCB0byBjb250cm9sIGFjY2VzcyB0byBmaWxlc3lzdGVtCiAgICBsb2NhdGlvbnMuICBTaW5jZSBzZXZlcmFsIGRpZmZlcmVudCBVUkxzIG1heSBtYXAgdG8gdGhlIHNhbWUKICAgIGZpbGVzeXN0ZW0gbG9jYXRpb24sIHN1Y2ggYWNjZXNzIGNvbnRyb2xzIG1heSBieSBjaXJjdW12ZW50ZWQuPC9wPgoKICAgIDxwPlRoZSBlbmNsb3NlZCBkaXJlY3RpdmVzIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVxdWVzdCBpZiB0aGUgcGF0aCBjb21wb25lbnQKICAgIG9mIHRoZSBVUkwgbWVldHMgPGVtPmFueTwvZW0+IG9mIHRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6CiAgICA8L3A+CiAgICA8dWw+CiAgICAgIDxsaT5UaGUgc3BlY2lmaWVkIGxvY2F0aW9uIG1hdGNoZXMgZXhhY3RseSB0aGUgcGF0aCBjb21wb25lbnQgb2YgdGhlIFVSTC4KICAgICAgPC9saT4KICAgICAgPGxpPlRoZSBzcGVjaWZpZWQgbG9jYXRpb24sIHdoaWNoIGVuZHMgaW4gYSBmb3J3YXJkIHNsYXNoLCBpcyBhIHByZWZpeAogICAgICBvZiB0aGUgcGF0aCBjb21wb25lbnQgb2YgdGhlIFVSTCAodHJlYXRlZCBhcyBhIGNvbnRleHQgcm9vdCkuCiAgICAgIDwvbGk+CiAgICAgIDxsaT5UaGUgc3BlY2lmaWVkIGxvY2F0aW9uLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhIHRyYWlsaW5nIHNsYXNoLCBpcyBhCiAgICAgIHByZWZpeCBvZiB0aGUgcGF0aCBjb21wb25lbnQgb2YgdGhlIFVSTCAoYWxzbyB0cmVhdGVkIGFzIGEgY29udGV4dCByb290KS4KICAgICAgPC9saT4KICAgIDwvdWw+CiAgICA8cD4KICAgIEluIHRoZSBleGFtcGxlIGJlbG93LCB3aGVyZSBubyB0cmFpbGluZyBzbGFzaCBpcyB1c2VkLCByZXF1ZXN0cyB0bwogICAgL3ByaXZhdGUxLCAvcHJpdmF0ZTEvIGFuZCAvcHJpdmF0ZTEvZmlsZS50eHQgd2lsbCBoYXZlIHRoZSBlbmNsb3NlZAogICAgZGlyZWN0aXZlcyBhcHBsaWVkLCBidXQgL3ByaXZhdGUxb3RoZXIgd291bGQgbm90LgogICAgPC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMb2NhdGlvbiAiL3ByaXZhdGUxIiZndDsKICAgICMgIC4uLgombHQ7L0xvY2F0aW9uJmd0OzwvcHJlPgoKICAgIDxwPgogICAgSW4gdGhlIGV4YW1wbGUgYmVsb3csIHdoZXJlIGEgdHJhaWxpbmcgc2xhc2ggaXMgdXNlZCwgcmVxdWVzdHMgdG8KICAgIC9wcml2YXRlMi8gYW5kIC9wcml2YXRlMi9maWxlLnR4dCB3aWxsIGhhdmUgdGhlIGVuY2xvc2VkCiAgICBkaXJlY3RpdmVzIGFwcGxpZWQsIGJ1dCAvcHJpdmF0ZTIgYW5kIC9wcml2YXRlMm90aGVyIHdvdWxkIG5vdC4KICAgIDwvcD4KICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7TG9jYXRpb24gIi9wcml2YXRlMjxlbT4vPC9lbT4iJmd0OwogICAgIyAuLi4KJmx0Oy9Mb2NhdGlvbiZndDs8L3ByZT4KCgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPldoZW4gdG8gdXNlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtMb2NhdGlvbiZndDs8L2NvZGU+PC9oMz4KCiAgICA8cD5Vc2UgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0xvY2F0aW9uJmd0OzwvY29kZT4gdG8gYXBwbHkKICAgIGRpcmVjdGl2ZXMgdG8gY29udGVudCB0aGF0IGxpdmVzIG91dHNpZGUgdGhlIGZpbGVzeXN0ZW0uICBGb3IKICAgIGNvbnRlbnQgdGhhdCBsaXZlcyBpbiB0aGUgZmlsZXN5c3RlbSwgdXNlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnkiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9hPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNmaWxlcyI+Jmx0O0ZpbGVzJmd0OzwvYT48L2NvZGU+LiAgQW4gZXhjZXB0aW9uIGlzCiAgICA8Y29kZT4mbHQ7TG9jYXRpb24gIi8iJmd0OzwvY29kZT4sIHdoaWNoIGlzIGFuIGVhc3kgd2F5IHRvCiAgICBhcHBseSBhIGNvbmZpZ3VyYXRpb24gdG8gdGhlIGVudGlyZSBzZXJ2ZXIuPC9wPgogICAgPC9kaXY+CgogICAgPHA+Rm9yIGFsbCBvcmlnaW4gKG5vbi1wcm94eSkgcmVxdWVzdHMsIHRoZSBVUkwgdG8gYmUgbWF0Y2hlZCBpcyBhCiAgICBVUkwtcGF0aCBvZiB0aGUgZm9ybSA8Y29kZT4vcGF0aC88L2NvZGU+LiAgPGVtPk5vIHNjaGVtZSwgaG9zdG5hbWUsCiAgICBwb3J0LCBvciBxdWVyeSBzdHJpbmcgbWF5IGJlIGluY2x1ZGVkLjwvZW0+ICBGb3IgcHJveHkgcmVxdWVzdHMsIHRoZQogICAgVVJMIHRvIGJlIG1hdGNoZWQgaXMgb2YgdGhlIGZvcm0KICAgIDxjb2RlPnNjaGVtZTovL3NlcnZlcm5hbWUvcGF0aDwvY29kZT4sIGFuZCB5b3UgbXVzdCBpbmNsdWRlIHRoZQogICAgcHJlZml4LjwvcD4KCiAgICA8cD5UaGUgVVJMIG1heSB1c2Ugd2lsZGNhcmRzLiBJbiBhIHdpbGQtY2FyZCBzdHJpbmcsIDxjb2RlPj88L2NvZGU+IG1hdGNoZXMKICAgIGFueSBzaW5nbGUgY2hhcmFjdGVyLCBhbmQgPGNvZGU+KjwvY29kZT4gbWF0Y2hlcyBhbnkgc2VxdWVuY2VzIG9mCiAgICBjaGFyYWN0ZXJzLiBOZWl0aGVyIHdpbGRjYXJkIGNoYXJhY3RlciBtYXRjaGVzIGEgLyBpbiB0aGUgVVJMLXBhdGguPC9wPgoKICAgIDxwPjxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjcmVnZXgiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPlJlZ3VsYXIgZXhwcmVzc2lvbnM8L2E+CiAgICBjYW4gYWxzbyBiZSB1c2VkLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgPGNvZGU+fjwvY29kZT4KICAgIGNoYXJhY3Rlci4gRm9yIGV4YW1wbGU6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7TG9jYXRpb24gfiAiLyhleHRyYXxzcGVjaWFsKS9kYXRhIiZndDsKICAgICMuLi4KJmx0Oy9Mb2NhdGlvbiZndDs8L3ByZT4KCgogICAgPHA+d291bGQgbWF0Y2ggVVJMcyB0aGF0IGNvbnRhaW5lZCB0aGUgc3Vic3RyaW5nIDxjb2RlPi9leHRyYS9kYXRhPC9jb2RlPgogICAgb3IgPGNvZGU+L3NwZWNpYWwvZGF0YTwvY29kZT4uIFRoZSBkaXJlY3RpdmUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvY2F0aW9ubWF0Y2giPiZsdDtMb2NhdGlvbk1hdGNoJmd0OzwvYT48L2NvZGU+IGJlaGF2ZXMKICAgIGlkZW50aWNhbCB0byB0aGUgcmVnZXggdmVyc2lvbiBvZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TG9jYXRpb24mZ3Q7PC9jb2RlPiwgYW5kIGlzIHByZWZlcnJlZCwgZm9yIHRoZQogICAgc2ltcGxlIHJlYXNvbiB0aGF0IDxjb2RlPn48L2NvZGU+IGlzIGhhcmQgdG8gZGlzdGluZ3Vpc2ggZnJvbQogICAgPGNvZGU+LTwvY29kZT4gaW4gbWFueSBmb250cy48L3A+CgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtMb2NhdGlvbiZndDs8L2NvZGU+CiAgICBmdW5jdGlvbmFsaXR5IGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gY29tYmluZWQgd2l0aCB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXRoYW5kbGVyIj5TZXRIYW5kbGVyPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZS4gRm9yIGV4YW1wbGUsIHRvIGVuYWJsZSBzdGF0dXMgcmVxdWVzdHMgYnV0IGFsbG93IHRoZW0KICAgIG9ubHkgZnJvbSBicm93c2VycyBhdCA8Y29kZT5leGFtcGxlLmNvbTwvY29kZT4sIHlvdSBtaWdodCB1c2U6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7TG9jYXRpb24gIi9zdGF0dXMiJmd0OwogIFNldEhhbmRsZXIgc2VydmVyLXN0YXR1cwogIFJlcXVpcmUgaG9zdCBleGFtcGxlLmNvbQombHQ7L0xvY2F0aW9uJmd0OzwvcHJlPgoKCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZSBhYm91dCAvIChzbGFzaCk8L2gzPgogICAgICA8cD5UaGUgc2xhc2ggY2hhcmFjdGVyIGhhcyBzcGVjaWFsIG1lYW5pbmcgZGVwZW5kaW5nIG9uIHdoZXJlIGluIGEKICAgICAgVVJMIGl0IGFwcGVhcnMuIFBlb3BsZSBtYXkgYmUgdXNlZCB0byBpdHMgYmVoYXZpb3IgaW4gdGhlIGZpbGVzeXN0ZW0KICAgICAgd2hlcmUgbXVsdGlwbGUgYWRqYWNlbnQgc2xhc2hlcyBhcmUgZnJlcXVlbnRseSBjb2xsYXBzZWQgdG8gYSBzaW5nbGUKICAgICAgc2xhc2ggKDxlbT5pLmUuPC9lbT4sIDxjb2RlPi9ob21lLy8vZm9vPC9jb2RlPiBpcyB0aGUgc2FtZSBhcwogICAgICA8Y29kZT4vaG9tZS9mb288L2NvZGU+KS4gSW4gVVJMLXNwYWNlIHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUuCiAgICAgIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9jYXRpb25tYXRjaCI+Jmx0O0xvY2F0aW9uTWF0Y2gmZ3Q7PC9hPjwvY29kZT4KICAgICAgZGlyZWN0aXZlIGFuZCB0aGUgcmVnZXggdmVyc2lvbiBvZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TG9jYXRpb24mZ3Q7PC9jb2RlPiByZXF1aXJlIHlvdSB0byBleHBsaWNpdGx5IHNwZWNpZnkgbXVsdGlwbGUKICAgICAgc2xhc2hlcyBpZiB0aGF0IGlzIHlvdXIgaW50ZW50aW9uLjwvcD4KCiAgICAgIDxwPkZvciBleGFtcGxlLCA8Y29kZT4mbHQ7TG9jYXRpb25NYXRjaCAiXi9hYmMiJmd0OzwvY29kZT4gd291bGQgbWF0Y2gKICAgICAgdGhlIHJlcXVlc3QgVVJMIDxjb2RlPi9hYmM8L2NvZGU+IGJ1dCBub3QgdGhlIHJlcXVlc3QgVVJMIDxjb2RlPgogICAgICAvL2FiYzwvY29kZT4uIFRoZSAobm9uLXJlZ2V4KSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7TG9jYXRpb24mZ3Q7PC9jb2RlPiBkaXJlY3RpdmUgYmVoYXZlcyBzaW1pbGFybHkgd2hlbiB1c2VkIGZvcgogICAgICBwcm94eSByZXF1ZXN0cy4gQnV0IHdoZW4gKG5vbi1yZWdleCkgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O0xvY2F0aW9uJmd0OzwvY29kZT4gaXMgdXNlZCBmb3Igbm9uLXByb3h5IHJlcXVlc3RzIGl0IHdpbGwKICAgICAgaW1wbGljaXRseSBtYXRjaCBtdWx0aXBsZSBzbGFzaGVzIHdpdGggYSBzaW5nbGUgc2xhc2guIEZvciBleGFtcGxlLAogICAgICBpZiB5b3Ugc3BlY2lmeSA8Y29kZT4mbHQ7TG9jYXRpb24gIi9hYmMvZGVmIiZndDs8L2NvZGU+IGFuZCB0aGUKICAgICAgcmVxdWVzdCBpcyB0byA8Y29kZT4vYWJjLy9kZWY8L2NvZGU+IHRoZW4gaXQgd2lsbCBtYXRjaC48L3A+CiAgICA8L2Rpdj4KCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxhIGhyZWY9Ii4uL3NlY3Rpb25zLmh0bWwiPkhvdyAmbHQ7RGlyZWN0b3J5Jmd0OywgJmx0O0xvY2F0aW9uJmd0OwogICAgYW5kICZsdDtGaWxlcyZndDsgc2VjdGlvbnMgd29yazwvYT4gZm9yIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyB0aGVzZQogICAgZGlmZmVyZW50IHNlY3Rpb25zIGFyZSBjb21iaW5lZCB3aGVuIGEgcmVxdWVzdCBpcyByZWNlaXZlZC48L2xpPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvY2F0aW9ubWF0Y2giPkxvY2F0aW9uTWF0Y2g8L2E+PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMb2NhdGlvbk1hdGNoIiBpZD0iTG9jYXRpb25NYXRjaCI+Jmx0O0xvY2F0aW9uTWF0Y2gmZ3Q7PC9hPiA8YSBuYW1lPSJsb2NhdGlvbm1hdGNoIiBpZD0ibG9jYXRpb25tYXRjaCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QXBwbGllcyB0aGUgZW5jbG9zZWQgZGlyZWN0aXZlcyBvbmx5IHRvIHJlZ3VsYXItZXhwcmVzc2lvbgptYXRjaGluZyBVUkxzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtMb2NhdGlvbk1hdGNoCiAgICA8dmFyPnJlZ2V4PC92YXI+Jmd0OyAuLi4gJmx0Oy9Mb2NhdGlvbk1hdGNoJmd0OzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtMb2NhdGlvbk1hdGNoJmd0OzwvY29kZT4gZGlyZWN0aXZlCiAgICBsaW1pdHMgdGhlIHNjb3BlIG9mIHRoZSBlbmNsb3NlZCBkaXJlY3RpdmVzIGJ5IFVSTCwgaW4gYW4gaWRlbnRpY2FsIG1hbm5lcgogICAgdG8gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4uIEhvd2V2ZXIsCiAgICBpdCB0YWtlcyBhIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjcmVnZXgiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPnJlZ3VsYXIgZXhwcmVzc2lvbjwvYT4KICAgIGFzIGFuIGFyZ3VtZW50IGluc3RlYWQgb2YgYSBzaW1wbGUgc3RyaW5nLiBGb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMb2NhdGlvbk1hdGNoICIvKGV4dHJhfHNwZWNpYWwpL2RhdGEiJmd0OwogICAgIyAuLi4KJmx0Oy9Mb2NhdGlvbk1hdGNoJmd0OzwvcHJlPgoKCiAgICA8cD53b3VsZCBtYXRjaCBVUkxzIHRoYXQgY29udGFpbmVkIHRoZSBzdWJzdHJpbmcgPGNvZGU+L2V4dHJhL2RhdGE8L2NvZGU+CiAgICBvciA8Y29kZT4vc3BlY2lhbC9kYXRhPC9jb2RlPi48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PHA+SWYgdGhlIGludGVudCBpcyB0aGF0IGEgVVJMIDxzdHJvbmc+c3RhcnRzIHdpdGg8L3N0cm9uZz4KICAgIDxjb2RlPi9leHRyYS9kYXRhPC9jb2RlPiwgcmF0aGVyIHRoYW4gbWVyZWx5CiAgICA8c3Ryb25nPmNvbnRhaW5zPC9zdHJvbmc+IDxjb2RlPi9leHRyYS9kYXRhPC9jb2RlPiwgcHJlZml4IHRoZQogICAgcmVndWxhciBleHByZXNzaW9uIHdpdGggYSA8Y29kZT5ePC9jb2RlPiB0byByZXF1aXJlIHRoaXMuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7TG9jYXRpb25NYXRjaCAiXi8oZXh0cmF8c3BlY2lhbCkvZGF0YSImZ3Q7PC9wcmU+CgogICAgPC9kaXY+CgogICAgPHA+RnJvbSAyLjQuOCBvbndhcmRzLCBuYW1lZCBncm91cHMgYW5kIGJhY2tyZWZlcmVuY2VzIGFyZSBjYXB0dXJlZCBhbmQKICAgIHdyaXR0ZW4gdG8gdGhlIGVudmlyb25tZW50IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbmFtZSBwcmVmaXhlZCB3aXRoCiAgICAiTUFUQ0hfIiBhbmQgaW4gdXBwZXIgY2FzZS4gVGhpcyBhbGxvd3MgZWxlbWVudHMgb2YgVVJMcyB0byBiZSByZWZlcmVuY2VkCiAgICBmcm9tIHdpdGhpbiA8YSBocmVmPSIuLi9leHByLmh0bWwiPmV4cHJlc3Npb25zPC9hPiBhbmQgbW9kdWxlcyBsaWtlCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCI+bW9kX3Jld3JpdGU8L2E+PC9jb2RlPi4gSW4gb3JkZXIgdG8gcHJldmVudCBjb25mdXNpb24sIG51bWJlcmVkCiAgICAodW5uYW1lZCkgYmFja3JlZmVyZW5jZXMgYXJlIGlnbm9yZWQuIFVzZSBuYW1lZCBncm91cHMgaW5zdGVhZC48L3A+Cgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0xvY2F0aW9uTWF0Y2ggIl4vY29tYmluZWQvKD8mbHQ7c2l0ZW5hbWUmZ3Q7W14vXSspIiZndDsKICAgIHJlcXVpcmUgbGRhcC1ncm91cCBjbj0le2VudjpNQVRDSF9TSVRFTkFNRX0sb3U9Y29tYmluZWQsbz1FeGFtcGxlCiZsdDsvTG9jYXRpb25NYXRjaCZndDs8L3ByZT4KCgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48YSBocmVmPSIuLi9zZWN0aW9ucy5odG1sIj5Ib3cgJmx0O0RpcmVjdG9yeSZndDssICZsdDtMb2NhdGlvbiZndDsKICAgIGFuZCAmbHQ7RmlsZXMmZ3Q7IHNlY3Rpb25zIHdvcms8L2E+IGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cgdGhlc2UKICAgIGRpZmZlcmVudCBzZWN0aW9ucyBhcmUgY29tYmluZWQgd2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQ8L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTG9nTGV2ZWwiIGlkPSJMb2dMZXZlbCI+TG9nTGV2ZWw8L2E+IDxhIG5hbWU9ImxvZ2xldmVsIiBpZD0ibG9nbGV2ZWwiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbnRyb2xzIHRoZSB2ZXJib3NpdHkgb2YgdGhlIEVycm9yTG9nPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkxvZ0xldmVsIFs8dmFyPm1vZHVsZTwvdmFyPjpdPHZhcj5sZXZlbDwvdmFyPgogICAgWzx2YXI+bW9kdWxlPC92YXI+Ojx2YXI+bGV2ZWw8L3Zhcj5dIC4uLgo8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+TG9nTGV2ZWwgd2FybjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5QZXItbW9kdWxlIGFuZCBwZXItZGlyZWN0b3J5IGNvbmZpZ3VyYXRpb24gaXMgYXZhaWxhYmxlIGluCiAgICBBcGFjaGUgSFRUUCBTZXJ2ZXIgMi4zLjYgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nTGV2ZWw8L2NvZGU+IGFkanVzdHMgdGhlIHZlcmJvc2l0eSBvZiB0aGUKICAgIG1lc3NhZ2VzIHJlY29yZGVkIGluIHRoZSBlcnJvciBsb2dzIChzZWUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2Vycm9ybG9nIj5FcnJvckxvZzwvYT48L2NvZGU+IGRpcmVjdGl2ZSkuIFRoZSBmb2xsb3dpbmcKICAgIDx2YXI+bGV2ZWw8L3Zhcj5zIGFyZSBhdmFpbGFibGUsIGluIG9yZGVyIG9mIGRlY3JlYXNpbmcKICAgIHNpZ25pZmljYW5jZTo8L3A+CgogICAgPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+CiAgICAKICAgICAgPHRyPgogICAgICAgIDx0aD48c3Ryb25nPkxldmVsPC9zdHJvbmc+IDwvdGg+CgogICAgICAgIDx0aD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+IDwvdGg+CgogICAgICAgIDx0aD48c3Ryb25nPkV4YW1wbGU8L3N0cm9uZz4gPC90aD4KICAgICAgPC90cj4KCiAgICAgIDx0cj4KICAgICAgICA8dGQ+PGNvZGU+ZW1lcmc8L2NvZGU+IDwvdGQ+CgogICAgICAgIDx0ZD5FbWVyZ2VuY2llcyAtIHN5c3RlbSBpcyB1bnVzYWJsZS48L3RkPgoKICAgICAgICA8dGQ+IkNoaWxkIGNhbm5vdCBvcGVuIGxvY2sgZmlsZS4gRXhpdGluZyI8L3RkPgogICAgICA8L3RyPgoKICAgICAgPHRyPgogICAgICAgIDx0ZD48Y29kZT5hbGVydDwvY29kZT4gPC90ZD4KCiAgICAgICAgPHRkPkFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5LjwvdGQ+CgogICAgICAgIDx0ZD4iZ2V0cHd1aWQ6IGNvdWxkbid0IGRldGVybWluZSB1c2VyIG5hbWUgZnJvbSB1aWQiPC90ZD4KICAgICAgPC90cj4KCiAgICAgIDx0cj4KICAgICAgICA8dGQ+PGNvZGU+Y3JpdDwvY29kZT4gPC90ZD4KCiAgICAgICAgPHRkPkNyaXRpY2FsIENvbmRpdGlvbnMuPC90ZD4KCiAgICAgICAgPHRkPiJzb2NrZXQ6IEZhaWxlZCB0byBnZXQgYSBzb2NrZXQsIGV4aXRpbmcgY2hpbGQiPC90ZD4KICAgICAgPC90cj4KCiAgICAgIDx0cj4KICAgICAgICA8dGQ+PGNvZGU+ZXJyb3I8L2NvZGU+IDwvdGQ+CgogICAgICAgIDx0ZD5FcnJvciBjb25kaXRpb25zLjwvdGQ+CgogICAgICAgIDx0ZD4iUHJlbWF0dXJlIGVuZCBvZiBzY3JpcHQgaGVhZGVycyI8L3RkPgogICAgICA8L3RyPgoKICAgICAgPHRyPgogICAgICAgIDx0ZD48Y29kZT53YXJuPC9jb2RlPiA8L3RkPgoKICAgICAgICA8dGQ+V2FybmluZyBjb25kaXRpb25zLjwvdGQ+CgogICAgICAgIDx0ZD4iY2hpbGQgcHJvY2VzcyAxMjM0IGRpZCBub3QgZXhpdCwgc2VuZGluZyBhbm90aGVyCiAgICAgICAgU0lHSFVQIjwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxjb2RlPm5vdGljZTwvY29kZT4gPC90ZD4KCiAgICAgICAgPHRkPk5vcm1hbCBidXQgc2lnbmlmaWNhbnQgY29uZGl0aW9uLjwvdGQ+CgogICAgICAgIDx0ZD4iaHR0cGQ6IGNhdWdodCBTSUdCVVMsIGF0dGVtcHRpbmcgdG8gZHVtcCBjb3JlIGluCiAgICAgICAgLi4uIjwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxjb2RlPmluZm88L2NvZGU+IDwvdGQ+CgogICAgICAgIDx0ZD5JbmZvcm1hdGlvbmFsLjwvdGQ+CgogICAgICAgIDx0ZD4iU2VydmVyIHNlZW1zIGJ1c3ksICh5b3UgbWF5IG5lZWQgdG8gaW5jcmVhc2UKICAgICAgICBTdGFydFNlcnZlcnMsIG9yIE1pbi9NYXhTcGFyZVNlcnZlcnMpLi4uIjwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxjb2RlPmRlYnVnPC9jb2RlPiA8L3RkPgoKICAgICAgICA8dGQ+RGVidWctbGV2ZWwgbWVzc2FnZXM8L3RkPgoKICAgICAgICA8dGQ+Ik9wZW5pbmcgY29uZmlnIGZpbGUgLi4uIjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+PGNvZGU+dHJhY2UxPC9jb2RlPiA8L3RkPgoKICAgICAgICA8dGQ+VHJhY2UgbWVzc2FnZXM8L3RkPgoKICAgICAgICA8dGQ+InByb3h5OiBGVFA6IGNvbnRyb2wgY29ubmVjdGlvbiBjb21wbGV0ZSI8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPjxjb2RlPnRyYWNlMjwvY29kZT4gPC90ZD4KCiAgICAgICAgPHRkPlRyYWNlIG1lc3NhZ2VzPC90ZD4KCiAgICAgICAgPHRkPiJwcm94eTogQ09OTkVDVDogc2VuZGluZyB0aGUgQ09OTkVDVCByZXF1ZXN0IHRvIHRoZSByZW1vdGUgcHJveHkiPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD48Y29kZT50cmFjZTM8L2NvZGU+IDwvdGQ+CgogICAgICAgIDx0ZD5UcmFjZSBtZXNzYWdlczwvdGQ+CgogICAgICAgIDx0ZD4ib3BlbnNzbDogSGFuZHNoYWtlOiBzdGFydCI8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPjxjb2RlPnRyYWNlNDwvY29kZT4gPC90ZD4KCiAgICAgICAgPHRkPlRyYWNlIG1lc3NhZ2VzPC90ZD4KCiAgICAgICAgPHRkPiJyZWFkIGZyb20gYnVmZmVyZWQgU1NMIGJyaWdhZGUsIG1vZGUgMCwgMTcgYnl0ZXMiPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD48Y29kZT50cmFjZTU8L2NvZGU+IDwvdGQ+CgogICAgICAgIDx0ZD5UcmFjZSBtZXNzYWdlczwvdGQ+CgogICAgICAgIDx0ZD4ibWFwIGxvb2t1cCBGQUlMRUQ6IG1hcD1yZXdyaXRlbWFwIGtleT1rZXluYW1lIjwvdGQ+CiAgICAgIDwvdHI+CiAgICAgIDx0cj4KICAgICAgICA8dGQ+PGNvZGU+dHJhY2U2PC9jb2RlPiA8L3RkPgoKICAgICAgICA8dGQ+VHJhY2UgbWVzc2FnZXM8L3RkPgoKICAgICAgICA8dGQ+ImNhY2hlIGxvb2t1cCBGQUlMRUQsIGZvcmNpbmcgbmV3IG1hcCBsb29rdXAiPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD48Y29kZT50cmFjZTc8L2NvZGU+IDwvdGQ+CgogICAgICAgIDx0ZD5UcmFjZSBtZXNzYWdlcywgZHVtcGluZyBsYXJnZSBhbW91bnRzIG9mIGRhdGE8L3RkPgoKICAgICAgICA8dGQ+InwgMDAwMDogMDIgMjMgNDQgMzAgMTMgNDAgYWMgMzQgZGYgM2QgYmYgOWEgMTkgNDkgMzkgMTUgfCI8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPjxjb2RlPnRyYWNlODwvY29kZT4gPC90ZD4KCiAgICAgICAgPHRkPlRyYWNlIG1lc3NhZ2VzLCBkdW1waW5nIGxhcmdlIGFtb3VudHMgb2YgZGF0YTwvdGQ+CgogICAgICAgIDx0ZD4ifCAwMDAwOiAwMiAyMyA0NCAzMCAxMyA0MCBhYyAzNCBkZiAzZCBiZiA5YSAxOSA0OSAzOSAxNSB8IjwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgoKICAgIDxwPldoZW4gYSBwYXJ0aWN1bGFyIGxldmVsIGlzIHNwZWNpZmllZCwgbWVzc2FnZXMgZnJvbSBhbGwKICAgIG90aGVyIGxldmVscyBvZiBoaWdoZXIgc2lnbmlmaWNhbmNlIHdpbGwgYmUgcmVwb3J0ZWQgYXMgd2VsbC4KICAgIDxlbT5FLmcuPC9lbT4sIHdoZW4gPGNvZGU+TG9nTGV2ZWwgaW5mbzwvY29kZT4gaXMgc3BlY2lmaWVkLAogICAgdGhlbiBtZXNzYWdlcyB3aXRoIGxvZyBsZXZlbHMgb2YgPGNvZGU+bm90aWNlPC9jb2RlPiBhbmQKICAgIDxjb2RlPndhcm48L2NvZGU+IHdpbGwgYWxzbyBiZSBwb3N0ZWQuPC9wPgoKICAgIDxwPlVzaW5nIGEgbGV2ZWwgb2YgYXQgbGVhc3QgPGNvZGU+Y3JpdDwvY29kZT4gaXMKICAgIHJlY29tbWVuZGVkLjwvcD4KCiAgICA8cD5Gb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkxvZ0xldmVsIG5vdGljZTwvcHJlPgoKCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICAgIDxwPldoZW4gbG9nZ2luZyB0byBhIHJlZ3VsYXIgZmlsZSwgbWVzc2FnZXMgb2YgdGhlIGxldmVsCiAgICAgIDxjb2RlPm5vdGljZTwvY29kZT4gY2Fubm90IGJlIHN1cHByZXNzZWQgYW5kIHRodXMgYXJlIGFsd2F5cwogICAgICBsb2dnZWQuIEhvd2V2ZXIsIHRoaXMgZG9lc24ndCBhcHBseSB3aGVuIGxvZ2dpbmcgaXMgZG9uZQogICAgICB1c2luZyA8Y29kZT5zeXNsb2c8L2NvZGU+LjwvcD4KICAgIDwvZGl2PgoKICAgIDxwPlNwZWNpZnlpbmcgYSBsZXZlbCB3aXRob3V0IGEgbW9kdWxlIG5hbWUgd2lsbCByZXNldCB0aGUgbGV2ZWwKICAgIGZvciBhbGwgbW9kdWxlcyB0byB0aGF0IGxldmVsLiAgU3BlY2lmeWluZyBhIGxldmVsIHdpdGggYSBtb2R1bGUKICAgIG5hbWUgd2lsbCBzZXQgdGhlIGxldmVsIGZvciB0aGF0IG1vZHVsZSBvbmx5LiBJdCBpcyBwb3NzaWJsZSB0bwogICAgdXNlIHRoZSBtb2R1bGUgc291cmNlIGZpbGUgbmFtZSwgdGhlIG1vZHVsZSBpZGVudGlmaWVyLCBvciB0aGUKICAgIG1vZHVsZSBpZGVudGlmaWVyIHdpdGggdGhlIHRyYWlsaW5nIDxjb2RlPl9tb2R1bGU8L2NvZGU+IG9taXR0ZWQKICAgIGFzIG1vZHVsZSBzcGVjaWZpY2F0aW9uLiBUaGlzIG1lYW5zIHRoZSBmb2xsb3dpbmcgdGhyZWUgc3BlY2lmaWNhdGlvbnMKICAgIGFyZSBlcXVpdmFsZW50OjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TG9nTGV2ZWwgaW5mbyBzc2w6d2FybgpMb2dMZXZlbCBpbmZvIG1vZF9zc2wuYzp3YXJuCkxvZ0xldmVsIGluZm8gc3NsX21vZHVsZTp3YXJuPC9wcmU+CgoKICAgIDxwPkl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hhbmdlIHRoZSBsZXZlbCBwZXIgZGlyZWN0b3J5OjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TG9nTGV2ZWwgaW5mbwombHQ7RGlyZWN0b3J5ICIvdXNyL2xvY2FsL2FwYWNoZS9odGRvY3MvYXBwIiZndDsKICBMb2dMZXZlbCBkZWJ1ZwombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgogICAgPGRpdiBjbGFzcz0ibm90ZSI+CiAgICAgICAgUGVyIGRpcmVjdG9yeSBsb2dsZXZlbCBjb25maWd1cmF0aW9uIG9ubHkgYWZmZWN0cyBtZXNzYWdlcyB0aGF0IGFyZQoJbG9nZ2VkIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIHBhcnNlZCBhbmQgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoCgl0aGUgcmVxdWVzdC4gTG9nIG1lc3NhZ2VzIHdoaWNoIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gb3IKCXRoZSBzZXJ2ZXIgYXJlIG5vdCBhZmZlY3RlZC4KICAgIDwvZGl2PgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2Vycm9ybG9nIj5FcnJvckxvZzwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNlcnJvcmxvZ2Zvcm1hdCI+RXJyb3JMb2dGb3JtYXQ8L2E+PC9jb2RlPjwvbGk+CjxsaT48YSBocmVmPSIuLi9sb2dzLmh0bWwiPkFwYWNoZSBIVFRQIFNlcnZlciBMb2cgRmlsZXM8L2E+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ik1heEtlZXBBbGl2ZVJlcXVlc3RzIiBpZD0iTWF4S2VlcEFsaXZlUmVxdWVzdHMiPk1heEtlZXBBbGl2ZVJlcXVlc3RzPC9hPiA8YSBuYW1lPSJtYXhrZWVwYWxpdmVyZXF1ZXN0cyIgaWQ9Im1heGtlZXBhbGl2ZXJlcXVlc3RzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5OdW1iZXIgb2YgcmVxdWVzdHMgYWxsb3dlZCBvbiBhIHBlcnNpc3RlbnQKY29ubmVjdGlvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5NYXhLZWVwQWxpdmVSZXF1ZXN0cyA8dmFyPm51bWJlcjwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5NYXhLZWVwQWxpdmVSZXF1ZXN0cyAxMDA8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5NYXhLZWVwQWxpdmVSZXF1ZXN0czwvY29kZT4gZGlyZWN0aXZlCiAgICBsaW1pdHMgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBhbGxvd2VkIHBlciBjb25uZWN0aW9uIHdoZW4KICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNrZWVwYWxpdmUiPktlZXBBbGl2ZTwvYT48L2NvZGU+IGlzIG9uLiBJZiBpdCBpcwogICAgc2V0IHRvIDxjb2RlPjA8L2NvZGU+LCB1bmxpbWl0ZWQgcmVxdWVzdHMgd2lsbCBiZSBhbGxvd2VkLiBXZQogICAgcmVjb21tZW5kIHRoYXQgdGhpcyBzZXR0aW5nIGJlIGtlcHQgdG8gYSBoaWdoIHZhbHVlIGZvciBtYXhpbXVtCiAgICBzZXJ2ZXIgcGVyZm9ybWFuY2UuPC9wPgoKICAgIDxwPkZvciBleGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TWF4S2VlcEFsaXZlUmVxdWVzdHMgNTAwPC9wcmU+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ik1heFJhbmdlT3ZlcmxhcHMiIGlkPSJNYXhSYW5nZU92ZXJsYXBzIj5NYXhSYW5nZU92ZXJsYXBzPC9hPiA8YSBuYW1lPSJtYXhyYW5nZW92ZXJsYXBzIiBpZD0ibWF4cmFuZ2VvdmVybGFwcyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TnVtYmVyIG9mIG92ZXJsYXBwaW5nIHJhbmdlcyAoZWc6IDxjb2RlPjEwMC0yMDAsMTUwLTMwMDwvY29kZT4pIGFsbG93ZWQgYmVmb3JlIHJldHVybmluZyB0aGUgY29tcGxldGUKICAgICAgICByZXNvdXJjZSA8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+TWF4UmFuZ2VPdmVybGFwcyBkZWZhdWx0IHwgdW5saW1pdGVkIHwgbm9uZSB8IDx2YXI+bnVtYmVyLW9mLXJhbmdlczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5NYXhSYW5nZU92ZXJsYXBzIDIwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgMi4zLjE1IGFuZCBsYXRlcjwvdGQ+PC90cj4KPC90YWJsZT4KICAgICAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TWF4UmFuZ2VPdmVybGFwczwvY29kZT4gZGlyZWN0aXZlCiAgICAgICAgICAgIGxpbWl0cyB0aGUgbnVtYmVyIG9mIG92ZXJsYXBwaW5nIEhUVFAgcmFuZ2VzIHRoZSBzZXJ2ZXIgaXMgd2lsbGluZyB0bwogICAgICAgICAgICByZXR1cm4gdG8gdGhlIGNsaWVudC4gSWYgbW9yZSBvdmVybGFwcGluZyByYW5nZXMgdGhhbiBwZXJtaXR0ZWQgYXJlIHJlcXVlc3RlZCwKICAgICAgICAgICAgdGhlIGNvbXBsZXRlIHJlc291cmNlIGlzIHJldHVybmVkIGluc3RlYWQuPC9wPgoKICAgICAgICA8ZGw+CiAgICAgICAgICAgIDxkdD48c3Ryb25nPmRlZmF1bHQ8L3N0cm9uZz48L2R0PgogICAgICAgICAgICA8ZGQ+TGltaXRzIHRoZSBudW1iZXIgb2Ygb3ZlcmxhcHBpbmcgcmFuZ2VzIHRvIGEgY29tcGlsZS10aW1lIGRlZmF1bHQgb2YgMjAuPC9kZD4KCiAgICAgICAgICAgIDxkdD48c3Ryb25nPm5vbmU8L3N0cm9uZz48L2R0PgogICAgICAgICAgICA8ZGQ+Tm8gb3ZlcmxhcHBpbmcgUmFuZ2UgaGVhZGVycyBhcmUgYWxsb3dlZC48L2RkPgoKICAgICAgICAgICAgPGR0PjxzdHJvbmc+dW5saW1pdGVkPC9zdHJvbmc+PC9kdD4KICAgICAgICAgICAgPGRkPlRoZSBzZXJ2ZXIgZG9lcyBub3QgbGltaXQgdGhlIG51bWJlciBvZiBvdmVybGFwcGluZyByYW5nZXMgaXQgaXMKICAgICAgICAgICAgICAgIHdpbGxpbmcgdG8gc2F0aXNmeS48L2RkPgoKICAgICAgICAgICAgPGR0Pjx2YXI+bnVtYmVyLW9mLXJhbmdlczwvdmFyPjwvZHQ+CiAgICAgICAgICAgIDxkZD5BIHBvc2l0aXZlIG51bWJlciByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIG92ZXJsYXBwaW5nIHJhbmdlcyB0aGUKICAgICAgICAgICAgICAgIHNlcnZlciBpcyB3aWxsaW5nIHRvIHNhdGlzZnkuPC9kZD4KICAgICAgICA8L2RsPgogICAgCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJNYXhSYW5nZVJldmVyc2FscyIgaWQ9Ik1heFJhbmdlUmV2ZXJzYWxzIj5NYXhSYW5nZVJldmVyc2FsczwvYT4gPGEgbmFtZT0ibWF4cmFuZ2VyZXZlcnNhbHMiIGlkPSJtYXhyYW5nZXJldmVyc2FscyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TnVtYmVyIG9mIHJhbmdlIHJldmVyc2FscyAoZWc6IDxjb2RlPjEwMC0yMDAsNTAtNzA8L2NvZGU+KSBhbGxvd2VkIGJlZm9yZSByZXR1cm5pbmcgdGhlIGNvbXBsZXRlCiAgICAgICAgcmVzb3VyY2UgPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPk1heFJhbmdlUmV2ZXJzYWxzIGRlZmF1bHQgfCB1bmxpbWl0ZWQgfCBub25lIHwgPHZhcj5udW1iZXItb2YtcmFuZ2VzPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPk1heFJhbmdlUmV2ZXJzYWxzIDIwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgMi4zLjE1IGFuZCBsYXRlcjwvdGQ+PC90cj4KPC90YWJsZT4KICAgICAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TWF4UmFuZ2VSZXZlcnNhbHM8L2NvZGU+IGRpcmVjdGl2ZQogICAgICAgICAgICBsaW1pdHMgdGhlIG51bWJlciBvZiBIVFRQIFJhbmdlIHJldmVyc2FscyB0aGUgc2VydmVyIGlzIHdpbGxpbmcgdG8KICAgICAgICAgICAgcmV0dXJuIHRvIHRoZSBjbGllbnQuIElmIG1vcmUgcmFuZ2VzIHJldmVyc2FscyB0aGFuIHBlcm1pdHRlZCBhcmUgcmVxdWVzdGVkLAogICAgICAgICAgICB0aGUgY29tcGxldGUgcmVzb3VyY2UgaXMgcmV0dXJuZWQgaW5zdGVhZC48L3A+CgogICAgICAgIDxkbD4KICAgICAgICAgICAgPGR0PjxzdHJvbmc+ZGVmYXVsdDwvc3Ryb25nPjwvZHQ+CiAgICAgICAgICAgIDxkZD5MaW1pdHMgdGhlIG51bWJlciBvZiByYW5nZSByZXZlcnNhbHMgdG8gYSBjb21waWxlLXRpbWUgZGVmYXVsdCBvZiAyMC48L2RkPgoKICAgICAgICAgICAgPGR0PjxzdHJvbmc+bm9uZTwvc3Ryb25nPjwvZHQ+CiAgICAgICAgICAgIDxkZD5ObyBSYW5nZSByZXZlcnNhbHMgaGVhZGVycyBhcmUgYWxsb3dlZC48L2RkPgoKICAgICAgICAgICAgPGR0PjxzdHJvbmc+dW5saW1pdGVkPC9zdHJvbmc+PC9kdD4KICAgICAgICAgICAgPGRkPlRoZSBzZXJ2ZXIgZG9lcyBub3QgbGltaXQgdGhlIG51bWJlciBvZiByYW5nZSByZXZlcnNhbHMgaXQgaXMKICAgICAgICAgICAgICAgIHdpbGxpbmcgdG8gc2F0aXNmeS48L2RkPgoKICAgICAgICAgICAgPGR0Pjx2YXI+bnVtYmVyLW9mLXJhbmdlczwvdmFyPjwvZHQ+CiAgICAgICAgICAgIDxkZD5BIHBvc2l0aXZlIG51bWJlciByZXByZXNlbnRpbmcgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJhbmdlIHJldmVyc2FscyB0aGUKICAgICAgICAgICAgICAgIHNlcnZlciBpcyB3aWxsaW5nIHRvIHNhdGlzZnkuPC9kZD4KICAgICAgICA8L2RsPgogICAgCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJNYXhSYW5nZXMiIGlkPSJNYXhSYW5nZXMiPk1heFJhbmdlczwvYT4gPGEgbmFtZT0ibWF4cmFuZ2VzIiBpZD0ibWF4cmFuZ2VzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5OdW1iZXIgb2YgcmFuZ2VzIGFsbG93ZWQgYmVmb3JlIHJldHVybmluZyB0aGUgY29tcGxldGUKcmVzb3VyY2UgPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPk1heFJhbmdlcyBkZWZhdWx0IHwgdW5saW1pdGVkIHwgbm9uZSB8IDx2YXI+bnVtYmVyLW9mLXJhbmdlczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5NYXhSYW5nZXMgMjAwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiBBcGFjaGUgSFRUUCBTZXJ2ZXIgMi4zLjE1IGFuZCBsYXRlcjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5NYXhSYW5nZXM8L2NvZGU+IGRpcmVjdGl2ZQogICAgbGltaXRzIHRoZSBudW1iZXIgb2YgSFRUUCByYW5nZXMgdGhlIHNlcnZlciBpcyB3aWxsaW5nIHRvCiAgICByZXR1cm4gdG8gdGhlIGNsaWVudC4gSWYgbW9yZSByYW5nZXMgdGhhbiBwZXJtaXR0ZWQgYXJlIHJlcXVlc3RlZCwKICAgIHRoZSBjb21wbGV0ZSByZXNvdXJjZSBpcyByZXR1cm5lZCBpbnN0ZWFkLjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48c3Ryb25nPmRlZmF1bHQ8L3N0cm9uZz48L2R0PgogICAgICA8ZGQ+TGltaXRzIHRoZSBudW1iZXIgb2YgcmFuZ2VzIHRvIGEgY29tcGlsZS10aW1lIGRlZmF1bHQgb2YgMjAwLjwvZGQ+CgogICAgICA8ZHQ+PHN0cm9uZz5ub25lPC9zdHJvbmc+PC9kdD4KICAgICAgPGRkPlJhbmdlIGhlYWRlcnMgYXJlIGlnbm9yZWQuPC9kZD4KCiAgICAgIDxkdD48c3Ryb25nPnVubGltaXRlZDwvc3Ryb25nPjwvZHQ+CiAgICAgIDxkZD5UaGUgc2VydmVyIGRvZXMgbm90IGxpbWl0IHRoZSBudW1iZXIgb2YgcmFuZ2VzIGl0IGlzCiAgICAgICAgICB3aWxsaW5nIHRvIHNhdGlzZnkuPC9kZD4KCiAgICAgIDxkdD48dmFyPm51bWJlci1vZi1yYW5nZXM8L3Zhcj48L2R0PgogICAgICA8ZGQ+QSBwb3NpdGl2ZSBudW1iZXIgcmVwcmVzZW50aW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiByYW5nZXMgdGhlCiAgICAgIHNlcnZlciBpcyB3aWxsaW5nIHRvIHNhdGlzZnkuPC9kZD4KICAgIDwvZGw+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iTWVyZ2VUcmFpbGVycyIgaWQ9Ik1lcmdlVHJhaWxlcnMiPk1lcmdlVHJhaWxlcnM8L2E+IDxhIG5hbWU9Im1lcmdldHJhaWxlcnMiIGlkPSJtZXJnZXRyYWlsZXJzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZXRlcm1pbmVzIHdoZXRoZXIgdHJhaWxlcnMgYXJlIG1lcmdlZCBpbnRvIGhlYWRlcnM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+TWVyZ2VUcmFpbGVycyBbb258b2ZmXTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5NZXJnZVRyYWlsZXJzIG9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+Mi40LjExIGFuZCBsYXRlcjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGNvbnRyb2xzIHdoZXRoZXIgSFRUUCB0cmFpbGVycyBhcmUgY29waWVkIGludG8gdGhlCiAgICBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBIVFRQIGhlYWRlcnMuIFRoaXMgbWVyZ2luZyBvY2N1cnMgd2hlbiB0aGUgCiAgICByZXF1ZXN0IGJvZHkgaGFzIGJlZW4gY29tcGxldGVseSBjb25zdW1lZCwgbG9uZyBhZnRlciBtb3N0IGhlYWRlciAKICAgIHByb2Nlc3Npbmcgd291bGQgaGF2ZSBhIGNoYW5jZSB0byBleGFtaW5lIG9yIG1vZGlmeSByZXF1ZXN0IGhlYWRlcnMuPC9wPgogICAgPHA+VGhpcyBvcHRpb24gaXMgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCByZWxlYXNlcyBwcmlvciB0byAyLjQuMTEsCiAgICB3aGVyZSB0cmFpbGVycyB3ZXJlIGFsd2F5cyBtZXJnZWQuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ik11dGV4IiBpZD0iTXV0ZXgiPk11dGV4PC9hPiA8YSBuYW1lPSJtdXRleCIgaWQ9Im11dGV4Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db25maWd1cmVzIG11dGV4IG1lY2hhbmlzbSBhbmQgbG9jayBmaWxlIGRpcmVjdG9yeSBmb3IgYWxsCm9yIHNwZWNpZmllZCBtdXRleGVzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPk11dGV4IDx2YXI+bWVjaGFuaXNtPC92YXI+IFtkZWZhdWx0fDx2YXI+bXV0ZXgtbmFtZTwvdmFyPl0gLi4uIFtPbWl0UElEXTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5NdXRleCBkZWZhdWx0PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSBIVFRQIFNlcnZlciAyLjMuNCBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TXV0ZXg8L2NvZGU+IGRpcmVjdGl2ZSBzZXRzIHRoZSBtZWNoYW5pc20sCiAgICBhbmQgb3B0aW9uYWxseSB0aGUgbG9jayBmaWxlIGxvY2F0aW9uLCB0aGF0IGh0dHBkIGFuZCBtb2R1bGVzIHVzZQogICAgdG8gc2VyaWFsaXplIGFjY2VzcyB0byByZXNvdXJjZXMuICBTcGVjaWZ5IDxjb2RlPmRlZmF1bHQ8L2NvZGU+IGFzCiAgICB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGNoYW5nZSB0aGUgc2V0dGluZ3MgZm9yIGFsbCBtdXRleGVzOyBzcGVjaWZ5CiAgICBhIG11dGV4IG5hbWUgKHNlZSB0YWJsZSBiZWxvdykgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBvdmVycmlkZQogICAgZGVmYXVsdHMgb25seSBmb3IgdGhhdCBtdXRleC48L3A+CgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPk11dGV4PC9jb2RlPiBkaXJlY3RpdmUgaXMgdHlwaWNhbGx5IHVzZWQgaW4KICAgIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uYWwgc2l0dWF0aW9uczo8L3A+CgogICAgPHVsPgogICAgICAgIDxsaT5jaGFuZ2UgdGhlIG11dGV4IG1lY2hhbmlzbSB3aGVuIHRoZSBkZWZhdWx0IG1lY2hhbmlzbSBzZWxlY3RlZAogICAgICAgIGJ5IDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjYXByIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5BUFI8L2E+IGhhcyBhIGZ1bmN0aW9uYWwgb3IgcGVyZm9ybWFuY2UKICAgICAgICBwcm9ibGVtPC9saT4KCiAgICAgICAgPGxpPmNoYW5nZSB0aGUgZGlyZWN0b3J5IHVzZWQgYnkgZmlsZS1iYXNlZCBtdXRleGVzIHdoZW4gdGhlCiAgICAgICAgZGVmYXVsdCBkaXJlY3RvcnkgZG9lcyBub3Qgc3VwcG9ydCBsb2NraW5nPC9saT4KICAgIDwvdWw+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPlN1cHBvcnRlZCBtb2R1bGVzPC9oMz4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIG9ubHkgY29uZmlndXJlcyBtdXRleGVzIHdoaWNoIGhhdmUgYmVlbiByZWdpc3RlcmVkCiAgICB3aXRoIHRoZSBjb3JlIHNlcnZlciB1c2luZyB0aGUgPGNvZGU+YXBfbXV0ZXhfcmVnaXN0ZXIoKTwvY29kZT4gQVBJLgogICAgQWxsIG1vZHVsZXMgYnVuZGxlZCB3aXRoIGh0dHBkIHN1cHBvcnQgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPk11dGV4PC9jb2RlPgogICAgZGlyZWN0aXZlLCBidXQgdGhpcmQtcGFydHkgbW9kdWxlcyBtYXkgbm90LiAgQ29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbgogICAgb2YgdGhlIHRoaXJkLXBhcnR5IG1vZHVsZSwgd2hpY2ggbXVzdCBpbmRpY2F0ZSB0aGUgbXV0ZXggbmFtZShzKSB3aGljaAogICAgY2FuIGJlIGNvbmZpZ3VyZWQgaWYgdGhpcyBkaXJlY3RpdmUgaXMgc3VwcG9ydGVkLjwvcD4KICAgIDwvZGl2PgoKICAgIDxwPlRoZSBmb2xsb3dpbmcgbXV0ZXggPGVtPm1lY2hhbmlzbXM8L2VtPiBhcmUgYXZhaWxhYmxlOjwvcD4KICAgIDx1bD4KICAgICAgICA8bGk+PGNvZGU+ZGVmYXVsdCB8IHllczwvY29kZT4KICAgICAgICA8cD5UaGlzIHNlbGVjdHMgdGhlIGRlZmF1bHQgbG9ja2luZyBpbXBsZW1lbnRhdGlvbiwgYXMgZGV0ZXJtaW5lZCBieQogICAgICAgIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjYXByIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5BUFI8L2E+LiAgVGhlIGRlZmF1bHQgbG9ja2luZyBpbXBsZW1lbnRhdGlvbiBjYW4KICAgICAgICBiZSBkaXNwbGF5ZWQgYnkgcnVubmluZyA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPiB3aXRoIHRoZQogICAgICAgIDxjb2RlPi1WPC9jb2RlPiBvcHRpb24uPC9wPjwvbGk+CgogICAgICAgIDxsaT48Y29kZT5ub25lIHwgbm88L2NvZGU+CiAgICAgICAgPHA+VGhpcyBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGUgbXV0ZXgsIGFuZCBpcyBvbmx5IGFsbG93ZWQgZm9yIGEKICAgICAgICBtdXRleCBpZiB0aGUgbW9kdWxlIGluZGljYXRlcyB0aGF0IGl0IGlzIGEgdmFsaWQgY2hvaWNlLiAgQ29uc3VsdCB0aGUKICAgICAgICBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L3A+PC9saT4KCiAgICAgICAgPGxpPjxjb2RlPnBvc2l4c2VtPC9jb2RlPgogICAgICAgIDxwPlRoaXMgaXMgYSBtdXRleCB2YXJpYW50IGJhc2VkIG9uIGEgUG9zaXggc2VtYXBob3JlLjwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPldhcm5pbmc8L2gzPgogICAgICAgIDxwPlRoZSBzZW1hcGhvcmUgb3duZXJzaGlwIGlzIG5vdCByZWNvdmVyZWQgaWYgYSB0aHJlYWQgaW4gdGhlIHByb2Nlc3MKICAgICAgICBob2xkaW5nIHRoZSBtdXRleCBzZWdmYXVsdHMsIHJlc3VsdGluZyBpbiBhIGhhbmcgb2YgdGhlIHdlYiBzZXJ2ZXIuPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDwvbGk+CgogICAgICAgIDxsaT48Y29kZT5zeXN2c2VtPC9jb2RlPgogICAgICAgIDxwPlRoaXMgaXMgYSBtdXRleCB2YXJpYW50IGJhc2VkIG9uIGEgU3lzdGVtViBJUEMgc2VtYXBob3JlLjwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPldhcm5pbmc8L2gzPgogICAgICAgIDxwPkl0IGlzIHBvc3NpYmxlIHRvICJsZWFrIiBTeXNWIHNlbWFwaG9yZXMgaWYgcHJvY2Vzc2VzIGNyYXNoCiAgICAgICAgYmVmb3JlIHRoZSBzZW1hcGhvcmUgaXMgcmVtb3ZlZC48L3A+Cgk8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPlNlY3VyaXR5PC9oMz4KICAgICAgICA8cD5UaGUgc2VtYXBob3JlIEFQSSBhbGxvd3MgZm9yIGEgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrIGJ5IGFueQogICAgICAgIENHSXMgcnVubmluZyB1bmRlciB0aGUgc2FtZSB1aWQgYXMgdGhlIHdlYnNlcnZlciAoPGVtPmkuZS48L2VtPiwKICAgICAgICBhbGwgQ0dJcywgdW5sZXNzIHlvdSB1c2Ugc29tZXRoaW5nIGxpa2UgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+PC9jb2RlPgogICAgICAgIG9yIDxjb2RlPmNnaXdyYXBwZXI8L2NvZGU+KS48L3A+Cgk8L2Rpdj4KICAgICAgICA8L2xpPgoKICAgICAgICA8bGk+PGNvZGU+c2VtPC9jb2RlPgogICAgICAgIDxwPlRoaXMgc2VsZWN0cyB0aGUgImJlc3QiIGF2YWlsYWJsZSBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24sIGNob29zaW5nCiAgICAgICAgYmV0d2VlbiBQb3NpeCBhbmQgU3lzdGVtViBJUEMgc2VtYXBob3JlcywgaW4gdGhhdCBvcmRlci48L3A+PC9saT4KCiAgICAgICAgPGxpPjxjb2RlPnB0aHJlYWQ8L2NvZGU+CiAgICAgICAgPHA+VGhpcyBpcyBhIG11dGV4IHZhcmlhbnQgYmFzZWQgb24gY3Jvc3MtcHJvY2VzcyBQb3NpeCB0aHJlYWQKICAgICAgICBtdXRleGVzLjwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPldhcm5pbmc8L2gzPgogICAgICAgIDxwPk9uIG1vc3Qgc3lzdGVtcywgaWYgYSBjaGlsZCBwcm9jZXNzIHRlcm1pbmF0ZXMgYWJub3JtYWxseSB3aGlsZQogICAgICAgIGhvbGRpbmcgYSBtdXRleCB0aGF0IHVzZXMgdGhpcyBpbXBsZW1lbnRhdGlvbiwgdGhlIHNlcnZlciB3aWxsIGRlYWRsb2NrCiAgICAgICAgYW5kIHN0b3AgcmVzcG9uZGluZyB0byByZXF1ZXN0cy4gIFdoZW4gdGhpcyBvY2N1cnMsIHRoZSBzZXJ2ZXIgd2lsbAogICAgICAgIHJlcXVpcmUgYSBtYW51YWwgcmVzdGFydCB0byByZWNvdmVyLjwvcD4KICAgICAgICA8cD5Tb2xhcmlzIGFuZCBMaW51eCBhcmUgbm90YWJsZSBleGNlcHRpb25zIGFzIHRoZXkgcHJvdmlkZSBhIG1lY2hhbmlzbSB3aGljaAogICAgICAgIHVzdWFsbHkgYWxsb3dzIHRoZSBtdXRleCB0byBiZSByZWNvdmVyZWQgYWZ0ZXIgYSBjaGlsZCBwcm9jZXNzCiAgICAgICAgdGVybWluYXRlcyBhYm5vcm1hbGx5IHdoaWxlIGhvbGRpbmcgYSBtdXRleC48L3A+CiAgICAgICAgPHA+SWYgeW91ciBzeXN0ZW0gaXMgUE9TSVggY29tcGxpYW50IG9yIGlmIGl0IGltcGxlbWVudHMgdGhlCiAgICAgICAgPGNvZGU+cHRocmVhZF9tdXRleGF0dHJfc2V0cm9idXN0X25wKCk8L2NvZGU+IGZ1bmN0aW9uLCB5b3UgbWF5IGJlIGFibGUKICAgICAgICB0byB1c2UgdGhlIDxjb2RlPnB0aHJlYWQ8L2NvZGU+IG9wdGlvbiBzYWZlbHkuPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDwvbGk+CgogICAgICAgIDxsaT48Y29kZT5mY250bDovcGF0aC90by9tdXRleDwvY29kZT4KICAgICAgICA8cD5UaGlzIGlzIGEgbXV0ZXggdmFyaWFudCB3aGVyZSBhIHBoeXNpY2FsIChsb2NrLSlmaWxlIGFuZCB0aGUKICAgICAgICA8Y29kZT5mY250bCgpPC9jb2RlPiBmdW5jdGlvbiBhcmUgdXNlZCBhcyB0aGUgbXV0ZXguPC9wPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+V2FybmluZzwvaDM+CiAgICAgICAgPHA+V2hlbiBtdWx0aXBsZSBtdXRleGVzIGJhc2VkIG9uIHRoaXMgbWVjaGFuaXNtIGFyZSB1c2VkIHdpdGhpbgogICAgICAgIG11bHRpLXRocmVhZGVkLCBtdWx0aS1wcm9jZXNzIGVudmlyb25tZW50cywgZGVhZGxvY2sgZXJyb3JzIChFREVBRExLKQogICAgICAgIGNhbiBiZSByZXBvcnRlZCBmb3IgdmFsaWQgbXV0ZXggb3BlcmF0aW9ucyBpZiA8Y29kZT5mY250bCgpPC9jb2RlPgogICAgICAgIGlzIG5vdCB0aHJlYWQtYXdhcmUsIHN1Y2ggYXMgb24gU29sYXJpcy48L3A+Cgk8L2Rpdj4KICAgICAgICA8L2xpPgoKICAgICAgICA8bGk+PGNvZGU+ZmxvY2s6L3BhdGgvdG8vbXV0ZXg8L2NvZGU+CiAgICAgICAgPHA+VGhpcyBpcyBzaW1pbGFyIHRvIHRoZSA8Y29kZT5mY250bDovcGF0aC90by9tdXRleDwvY29kZT4gbWV0aG9kCiAgICAgICAgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIDxjb2RlPmZsb2NrKCk8L2NvZGU+IGZ1bmN0aW9uIGlzIHVzZWQgdG8KICAgICAgICBwcm92aWRlIGZpbGUgbG9ja2luZy48L3A+PC9saT4KCiAgICAgICAgPGxpPjxjb2RlPmZpbGU6L3BhdGgvdG8vbXV0ZXg8L2NvZGU+CiAgICAgICAgPHA+VGhpcyBzZWxlY3RzIHRoZSAiYmVzdCIgYXZhaWxhYmxlIGZpbGUgbG9ja2luZyBpbXBsZW1lbnRhdGlvbiwKICAgICAgICBjaG9vc2luZyBiZXR3ZWVuIDxjb2RlPmZjbnRsPC9jb2RlPiBhbmQgPGNvZGU+ZmxvY2s8L2NvZGU+LCBpbiB0aGF0CiAgICAgICAgb3JkZXIuPC9wPjwvbGk+CiAgICA8L3VsPgoKICAgIDxwPk1vc3QgbWVjaGFuaXNtcyBhcmUgb25seSBhdmFpbGFibGUgb24gc2VsZWN0ZWQgcGxhdGZvcm1zLCB3aGVyZSB0aGUKICAgIHVuZGVybHlpbmcgcGxhdGZvcm0gYW5kIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwjYXByIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5BUFI8L2E+IHN1cHBvcnQgaXQuICBNZWNoYW5pc21zCiAgICB3aGljaCBhcmVuJ3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgYXJlIDxlbT5wb3NpeHNlbTwvZW0+LAogICAgPGVtPnN5c3ZzZW08L2VtPiwgPGVtPnNlbTwvZW0+LCA8ZW0+cHRocmVhZDwvZW0+LCA8ZW0+ZmNudGw8L2VtPiwKICAgIDxlbT5mbG9jazwvZW0+LCBhbmQgPGVtPmZpbGU8L2VtPi48L3A+CgogICAgPHA+V2l0aCB0aGUgZmlsZS1iYXNlZCBtZWNoYW5pc21zIDxlbT5mY250bDwvZW0+IGFuZCA8ZW0+ZmxvY2s8L2VtPiwKICAgIHRoZSBwYXRoLCBpZiBwcm92aWRlZCwgaXMgYSBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxvY2sgZmlsZSB3aWxsIGJlIGNyZWF0ZWQuCiAgICBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgaXMgaHR0cGQncyBydW4tdGltZSBmaWxlIGRpcmVjdG9yeSByZWxhdGl2ZSB0bwogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NlcnZlcnJvb3QiPlNlcnZlclJvb3Q8L2E+PC9jb2RlPi4gIEFsd2F5cyB1c2UgYSBsb2NhbCBkaXNrCiAgICBmaWxlc3lzdGVtIGZvciA8Y29kZT4vcGF0aC90by9tdXRleDwvY29kZT4gYW5kIG5ldmVyIGEgZGlyZWN0b3J5IHJlc2lkaW5nCiAgICBvbiBhIE5GUy0gb3IgQUZTLWZpbGVzeXN0ZW0uICBUaGUgYmFzZW5hbWUgb2YgdGhlIGZpbGUgd2lsbCBiZSB0aGUgbXV0ZXgKICAgIHR5cGUsIGFuIG9wdGlvbmFsIGluc3RhbmNlIHN0cmluZyBwcm92aWRlZCBieSB0aGUgbW9kdWxlLCBhbmQgdW5sZXNzIHRoZQogICAgPGNvZGU+T21pdFBJRDwvY29kZT4ga2V5d29yZCBpcyBzcGVjaWZpZWQsIHRoZSBwcm9jZXNzIGlkIG9mIHRoZSBodHRwZAogICAgcGFyZW50IHByb2Nlc3Mgd2lsbCBiZSBhcHBlbmRlZCB0byBtYWtlIHRoZSBmaWxlIG5hbWUgdW5pcXVlLCBhdm9pZGluZwogICAgY29uZmxpY3RzIHdoZW4gbXVsdGlwbGUgaHR0cGQgaW5zdGFuY2VzIHNoYXJlIGEgbG9jayBmaWxlIGRpcmVjdG9yeS4gIEZvcgogICAgZXhhbXBsZSwgaWYgdGhlIG11dGV4IG5hbWUgaXMgPGNvZGU+bXBtLWFjY2VwdDwvY29kZT4gYW5kIHRoZSBsb2NrIGZpbGUKICAgIGRpcmVjdG9yeSBpcyA8Y29kZT4vdmFyL2h0dHBkL2xvY2tzPC9jb2RlPiwgdGhlIGxvY2sgZmlsZSBuYW1lIGZvciB0aGUKICAgIGh0dHBkIGluc3RhbmNlIHdpdGggcGFyZW50IHByb2Nlc3MgaWQgMTIzNDUgd291bGQgYmUKICAgIDxjb2RlPi92YXIvaHR0cGQvbG9ja3MvbXBtLWFjY2VwdC4xMjM0NTwvY29kZT4uPC9wPgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5TZWN1cml0eTwvaDM+CiAgICA8cD5JdCBpcyBiZXN0IHRvIDxlbT5hdm9pZDwvZW0+IHB1dHRpbmcgbXV0ZXggZmlsZXMgaW4gYSB3b3JsZC13cml0YWJsZQogICAgZGlyZWN0b3J5IHN1Y2ggYXMgPGNvZGU+L3Zhci90bXA8L2NvZGU+IGJlY2F1c2Ugc29tZW9uZSBjb3VsZCBjcmVhdGUKICAgIGEgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrIGFuZCBwcmV2ZW50IHRoZSBzZXJ2ZXIgZnJvbSBzdGFydGluZyBieQogICAgY3JlYXRpbmcgYSBsb2NrZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG9uZSB0aGUgc2VydmVyIHdpbGwgdHJ5CiAgICB0byBjcmVhdGUuPC9wPgogICAgPC9kaXY+CgogICAgPHA+VGhlIGZvbGxvd2luZyB0YWJsZSBkb2N1bWVudHMgdGhlIG5hbWVzIG9mIG11dGV4ZXMgdXNlZCBieSBodHRwZAogICAgYW5kIGJ1bmRsZWQgbW9kdWxlcy48L3A+CgogICAgPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+PHRyIGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgICA8dGg+TXV0ZXggbmFtZTwvdGg+CiAgICAgICAgICAgIDx0aD5Nb2R1bGUocyk8L3RoPgogICAgICAgICAgICA8dGg+UHJvdGVjdGVkIHJlc291cmNlPC90aD4KCTwvdHI+Cjx0cj4KICAgICAgICAgICAgPHRkPjxjb2RlPm1wbS1hY2NlcHQ8L2NvZGU+PC90ZD4KICAgICAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9wcmVmb3JrLmh0bWwiPnByZWZvcms8L2E+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL3dvcmtlci5odG1sIj53b3JrZXI8L2E+PC9jb2RlPiBNUE1zPC90ZD4KICAgICAgICAgICAgPHRkPmluY29taW5nIGNvbm5lY3Rpb25zLCB0byBhdm9pZCB0aGUgdGh1bmRlcmluZyBoZXJkIHByb2JsZW07CiAgICAgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUKICAgICAgICAgICAgPGEgaHJlZj0iLi4vbWlzYy9wZXJmLXR1bmluZy5odG1sIj5wZXJmb3JtYW5jZSB0dW5pbmc8L2E+CiAgICAgICAgICAgIGRvY3VtZW50YXRpb248L3RkPgoJPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgICA8dGQ+PGNvZGU+YXV0aGRpZ2VzdC1jbGllbnQ8L2NvZGU+PC90ZD4KICAgICAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aF9kaWdlc3QuaHRtbCI+bW9kX2F1dGhfZGlnZXN0PC9hPjwvY29kZT48L3RkPgogICAgICAgICAgICA8dGQ+Y2xpZW50IGxpc3QgaW4gc2hhcmVkIG1lbW9yeTwvdGQ+Cgk8L3RyPgo8dHI+CiAgICAgICAgICAgIDx0ZD48Y29kZT5hdXRoZGlnZXN0LW9wYXF1ZTwvY29kZT48L3RkPgogICAgICAgICAgICA8dGQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoX2RpZ2VzdC5odG1sIj5tb2RfYXV0aF9kaWdlc3Q8L2E+PC9jb2RlPjwvdGQ+CiAgICAgICAgICAgIDx0ZD5jb3VudGVyIGluIHNoYXJlZCBtZW1vcnk8L3RkPgoJPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgICA8dGQ+PGNvZGU+bGRhcC1jYWNoZTwvY29kZT48L3RkPgogICAgICAgICAgICA8dGQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9sZGFwLmh0bWwiPm1vZF9sZGFwPC9hPjwvY29kZT48L3RkPgogICAgICAgICAgICA8dGQ+TERBUCByZXN1bHQgY2FjaGU8L3RkPgoJPC90cj4KPHRyPgogICAgICAgICAgICA8dGQ+PGNvZGU+cmV3cml0ZS1tYXA8L2NvZGU+PC90ZD4KICAgICAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5tb2RfcmV3cml0ZTwvYT48L2NvZGU+PC90ZD4KICAgICAgICAgICAgPHRkPmNvbW11bmljYXRpb24gd2l0aCBleHRlcm5hbCBtYXBwaW5nIHByb2dyYW1zLCB0byBhdm9pZAogICAgICAgICAgICBpbnRlcm1peGVkIEkvTyBmcm9tIG11bHRpcGxlIHJlcXVlc3RzPC90ZD4KCTwvdHI+Cjx0ciBjbGFzcz0ib2RkIj4KICAgICAgICAgICAgPHRkPjxjb2RlPnNzbC1jYWNoZTwvY29kZT48L3RkPgogICAgICAgICAgICA8dGQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zc2wuaHRtbCI+bW9kX3NzbDwvYT48L2NvZGU+PC90ZD4KICAgICAgICAgICAgPHRkPlNTTCBzZXNzaW9uIGNhY2hlPC90ZD4KCTwvdHI+Cjx0cj4KICAgICAgICAgICAgPHRkPjxjb2RlPnNzbC1zdGFwbGluZzwvY29kZT48L3RkPgogICAgICAgICAgICA8dGQ+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zc2wuaHRtbCI+bW9kX3NzbDwvYT48L2NvZGU+PC90ZD4KICAgICAgICAgICAgPHRkPk9DU1Agc3RhcGxpbmcgcmVzcG9uc2UgY2FjaGU8L3RkPgoJPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgICA8dGQ+PGNvZGU+d2F0Y2hkb2ctY2FsbGJhY2s8L2NvZGU+PC90ZD4KICAgICAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfd2F0Y2hkb2cuaHRtbCI+bW9kX3dhdGNoZG9nPC9hPjwvY29kZT48L3RkPgogICAgICAgICAgICA8dGQ+Y2FsbGJhY2sgZnVuY3Rpb24gb2YgYSBwYXJ0aWN1bGFyIGNsaWVudCBtb2R1bGU8L3RkPgoJPC90cj4KPC90YWJsZT4KCiAgICA8cD5UaGUgPGNvZGU+T21pdFBJRDwvY29kZT4ga2V5d29yZCBzdXBwcmVzc2VzIHRoZSBhZGRpdGlvbiBvZiB0aGUgaHR0cGQKICAgIHBhcmVudCBwcm9jZXNzIGlkIGZyb20gdGhlIGxvY2sgZmlsZSBuYW1lLjwvcD4KCiAgICA8cD5JbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBtdXRleCBtZWNoYW5pc20gZm9yIHRoZSBNUE0gYWNjZXB0CiAgICBtdXRleCB3aWxsIGJlIGNoYW5nZWQgZnJvbSB0aGUgY29tcGlsZWQtaW4gZGVmYXVsdCB0byA8Y29kZT5mY250bDwvY29kZT4sCiAgICB3aXRoIHRoZSBhc3NvY2lhdGVkIGxvY2sgZmlsZSBjcmVhdGVkIGluIGRpcmVjdG9yeQogICAgPGNvZGU+L3Zhci9odHRwZC9sb2NrczwvY29kZT4uICBUaGUgbXV0ZXggbWVjaGFuaXNtIGZvciBhbGwgb3RoZXIgbXV0ZXhlcwogICAgd2lsbCBiZSBjaGFuZ2VkIGZyb20gdGhlIGNvbXBpbGVkLWluIGRlZmF1bHQgdG8gPGNvZGU+c3lzdnNlbTwvY29kZT4uPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5NdXRleCBzeXN2c2VtIGRlZmF1bHQKTXV0ZXggZmNudGw6L3Zhci9odHRwZC9sb2NrcyBtcG0tYWNjZXB0PC9wcmU+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ik5hbWVWaXJ0dWFsSG9zdCIgaWQ9Ik5hbWVWaXJ0dWFsSG9zdCI+TmFtZVZpcnR1YWxIb3N0PC9hPiA8YSBuYW1lPSJuYW1ldmlydHVhbGhvc3QiIGlkPSJuYW1ldmlydHVhbGhvc3QiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkRFUFJFQ0FURUQ6IERlc2lnbmF0ZXMgYW4gSVAgYWRkcmVzcyBmb3IgbmFtZS12aXJ0dWFsCmhvc3Rpbmc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+TmFtZVZpcnR1YWxIb3N0IDx2YXI+YWRkcjwvdmFyPls6PHZhcj5wb3J0PC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KCjxwPlByaW9yIHRvIDIuMy4xMSwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TmFtZVZpcnR1YWxIb3N0PC9jb2RlPiB3YXMgcmVxdWlyZWQKdG8gaW5zdHJ1Y3QgdGhlIHNlcnZlciB0aGF0IGEgcGFydGljdWxhciBJUCBhZGRyZXNzIGFuZCBwb3J0IGNvbWJpbmF0aW9uCndhcyB1c2FibGUgYXMgYSBuYW1lLWJhc2VkIHZpcnR1YWwgaG9zdC4gIEluIDIuMy4xMSBhbmQgbGF0ZXIsCmFueSB0aW1lIGFuIElQIGFkZHJlc3MgYW5kIHBvcnQgY29tYmluYXRpb24gaXMgdXNlZCBpbiBtdWx0aXBsZSB2aXJ0dWFsCmhvc3RzLCBuYW1lLWJhc2VkIHZpcnR1YWwgaG9zdGluZyBpcyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgZm9yIHRoYXQgYWRkcmVzcy48L3A+Cgo8cD5UaGlzIGRpcmVjdGl2ZSBjdXJyZW50bHkgaGFzIG5vIGVmZmVjdC48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48YSBocmVmPSIuLi92aG9zdHMvIj5WaXJ0dWFsIEhvc3RzCmRvY3VtZW50YXRpb248L2E+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Ik9wdGlvbnMiIGlkPSJPcHRpb25zIj5PcHRpb25zPC9hPiA8YSBuYW1lPSJvcHRpb25zIiBpZD0ib3B0aW9ucyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29uZmlndXJlcyB3aGF0IGZlYXR1cmVzIGFyZSBhdmFpbGFibGUgaW4gYSBwYXJ0aWN1bGFyCmRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5PcHRpb25zCiAgICBbK3wtXTx2YXI+b3B0aW9uPC92YXI+IFtbK3wtXTx2YXI+b3B0aW9uPC92YXI+XSAuLi48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+T3B0aW9ucyBGb2xsb3dTeW1saW5rczwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5PcHRpb25zPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPlRoZSBkZWZhdWx0IHdhcyBjaGFuZ2VkIGZyb20gQWxsIHRvIEZvbGxvd1N5bWxpbmtzIGluIDIuMy4xMTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5PcHRpb25zPC9jb2RlPiBkaXJlY3RpdmUgY29udHJvbHMgd2hpY2gKICAgIHNlcnZlciBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlIGluIGEgcGFydGljdWxhciBkaXJlY3RvcnkuPC9wPgoKICAgIDxwPjx2YXI+b3B0aW9uPC92YXI+IGNhbiBiZSBzZXQgdG8gPGNvZGU+Tm9uZTwvY29kZT4sIGluIHdoaWNoCiAgICBjYXNlIG5vbmUgb2YgdGhlIGV4dHJhIGZlYXR1cmVzIGFyZSBlbmFibGVkLCBvciBvbmUgb3IgbW9yZSBvZgogICAgdGhlIGZvbGxvd2luZzo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+QWxsPC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+QWxsIG9wdGlvbnMgZXhjZXB0IGZvciA8Y29kZT5NdWx0aVZpZXdzPC9jb2RlPi48L2RkPgoKICAgICAgPGR0Pjxjb2RlPkV4ZWNDR0k8L2NvZGU+PC9kdD4KCiAgICAgIDxkZD4KICAgICAgRXhlY3V0aW9uIG9mIENHSSBzY3JpcHRzIHVzaW5nIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2dpLmh0bWwiPm1vZF9jZ2k8L2E+PC9jb2RlPgogICAgICBpcyBwZXJtaXR0ZWQuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5Gb2xsb3dTeW1MaW5rczwvY29kZT48L2R0PgoKICAgICAgPGRkPgogICAgICBUaGUgc2VydmVyIHdpbGwgZm9sbG93IHN5bWJvbGljIGxpbmtzIGluIHRoaXMgZGlyZWN0b3J5LiBUaGlzIGlzCiAgICAgIHRoZSBkZWZhdWx0IHNldHRpbmcuCiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPgogICAgICA8cD5FdmVuIHRob3VnaCB0aGUgc2VydmVyIGZvbGxvd3MgdGhlIHN5bWxpbmsgaXQgZG9lcyA8ZW0+bm90PC9lbT4KICAgICAgY2hhbmdlIHRoZSBwYXRobmFtZSB1c2VkIHRvIG1hdGNoIGFnYWluc3QgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucy48L3A+CgogICAgICA8cD5UaGUgPGNvZGU+Rm9sbG93U3ltTGlua3M8L2NvZGU+IGFuZAogICAgICA8Y29kZT5TeW1MaW5rc0lmT3duZXJNYXRjaDwvY29kZT4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI29wdGlvbnMiPk9wdGlvbnM8L2E+PC9jb2RlPiB3b3JrIG9ubHkgaW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucyBvcgogICAgICA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzLjwvcD4KCiAgICAgIDxwPk9taXR0aW5nIHRoaXMgb3B0aW9uIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBhIHNlY3VyaXR5IHJlc3RyaWN0aW9uLAogICAgICBzaW5jZSBzeW1saW5rIHRlc3RpbmcgaXMgc3ViamVjdCB0byByYWNlIGNvbmRpdGlvbnMgdGhhdCBtYWtlIGl0CiAgICAgIGNpcmN1bXZlbnRhYmxlLjwvcD4KICAgICAgPC9kaXY+PC9kZD4KCiAgICAgIDxkdD48Y29kZT5JbmNsdWRlczwvY29kZT48L2R0PgoKICAgICAgPGRkPgogICAgICBTZXJ2ZXItc2lkZSBpbmNsdWRlcyBwcm92aWRlZCBieSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPgogICAgICBhcmUgcGVybWl0dGVkLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+SW5jbHVkZXNOT0VYRUM8L2NvZGU+PC9kdD4KCiAgICAgIDxkZD4KCiAgICAgIFNlcnZlci1zaWRlIGluY2x1ZGVzIGFyZSBwZXJtaXR0ZWQsIGJ1dCB0aGUgPGNvZGU+I2V4ZWMKICAgICAgY21kPC9jb2RlPiBhbmQgPGNvZGU+I2V4ZWMgY2dpPC9jb2RlPiBhcmUgZGlzYWJsZWQuIEl0IGlzIHN0aWxsCiAgICAgIHBvc3NpYmxlIHRvIDxjb2RlPiNpbmNsdWRlIHZpcnR1YWw8L2NvZGU+IENHSSBzY3JpcHRzIGZyb20KICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hbGlhcy5odG1sI3NjcmlwdGFsaWFzIj5TY3JpcHRBbGlhczwvYT48L2NvZGU+ZWQKICAgICAgZGlyZWN0b3JpZXMuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5JbmRleGVzPC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+CiAgICAgIElmIGEgVVJMIHdoaWNoIG1hcHMgdG8gYSBkaXJlY3RvcnkgaXMgcmVxdWVzdGVkIGFuZCB0aGVyZQogICAgICBpcyBubyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2Rpci5odG1sI2RpcmVjdG9yeWluZGV4Ij5EaXJlY3RvcnlJbmRleDwvYT48L2NvZGU+CiAgICAgICg8ZW0+ZS5nLjwvZW0+LCA8Y29kZT5pbmRleC5odG1sPC9jb2RlPikgaW4gdGhhdCBkaXJlY3RvcnksIHRoZW4KICAgICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRvaW5kZXguaHRtbCI+bW9kX2F1dG9pbmRleDwvYT48L2NvZGU+IHdpbGwgcmV0dXJuIGEgZm9ybWF0dGVkIGxpc3RpbmcKICAgICAgb2YgdGhlIGRpcmVjdG9yeS48L2RkPgoKICAgICAgPGR0Pjxjb2RlPk11bHRpVmlld3M8L2NvZGU+PC9kdD4KCiAgICAgIDxkZD4KICAgICAgPGEgaHJlZj0iLi4vY29udGVudC1uZWdvdGlhdGlvbi5odG1sIj5Db250ZW50IG5lZ290aWF0ZWQ8L2E+CiAgICAgICJNdWx0aVZpZXdzIiBhcmUgYWxsb3dlZCB1c2luZwogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwiPm1vZF9uZWdvdGlhdGlvbjwvYT48L2NvZGU+LgogICAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+IDxwPlRoaXMgb3B0aW9uIGdldHMgaWdub3JlZCBpZiBzZXQKICAgICAgYW55d2hlcmUgb3RoZXIgdGhhbiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+LCBhcyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX25lZ290aWF0aW9uLmh0bWwiPm1vZF9uZWdvdGlhdGlvbjwvYT48L2NvZGU+CiAgICAgIG5lZWRzIHJlYWwgcmVzb3VyY2VzIHRvIGNvbXBhcmUgYWdhaW5zdCBhbmQgZXZhbHVhdGUgZnJvbS48L3A+PC9kaXY+CiAgICAgIDwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+U3ltTGlua3NJZk93bmVyTWF0Y2g8L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5UaGUgc2VydmVyIHdpbGwgb25seSBmb2xsb3cgc3ltYm9saWMgbGlua3MgZm9yIHdoaWNoIHRoZQogICAgICB0YXJnZXQgZmlsZSBvciBkaXJlY3RvcnkgaXMgb3duZWQgYnkgdGhlIHNhbWUgdXNlciBpZCBhcyB0aGUKICAgICAgbGluay4KCiAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgICAgPHA+VGhlIDxjb2RlPkZvbGxvd1N5bUxpbmtzPC9jb2RlPiBhbmQKICAgICAgPGNvZGU+U3ltTGlua3NJZk93bmVyTWF0Y2g8L2NvZGU+IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNvcHRpb25zIj5PcHRpb25zPC9hPjwvY29kZT4gd29yayBvbmx5IGluIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNkaXJlY3RvcnkiPiZsdDtEaXJlY3RvcnkmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbnMgb3IKICAgICAgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcy48L3A+CgogICAgICA8cD5UaGlzIG9wdGlvbiBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYSBzZWN1cml0eSByZXN0cmljdGlvbiwKICAgICAgc2luY2Ugc3ltbGluayB0ZXN0aW5nIGlzIHN1YmplY3QgdG8gcmFjZSBjb25kaXRpb25zIHRoYXQgbWFrZSBpdAogICAgICBjaXJjdW12ZW50YWJsZS48L3A+CiAgICAgIDwvZGl2PiA8L2RkPgogICAgPC9kbD4KCiAgICA8cD5Ob3JtYWxseSwgaWYgbXVsdGlwbGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+T3B0aW9uczwvY29kZT4gY291bGQKICAgIGFwcGx5IHRvIGEgZGlyZWN0b3J5LCB0aGVuIHRoZSBtb3N0IHNwZWNpZmljIG9uZSBpcyB1c2VkIGFuZAogICAgb3RoZXJzIGFyZSBpZ25vcmVkOyB0aGUgb3B0aW9ucyBhcmUgbm90IG1lcmdlZC4gKFNlZSA8YSBocmVmPSIuLi9zZWN0aW9ucy5odG1sI21lcmdpbiI+aG93IHNlY3Rpb25zIGFyZSBtZXJnZWQ8L2E+LikKICAgIEhvd2V2ZXIgaWYgPGVtPmFsbDwvZW0+IHRoZSBvcHRpb25zIG9uIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+T3B0aW9uczwvY29kZT4gZGlyZWN0aXZlIGFyZSBwcmVjZWRlZCBieSBhCiAgICA8Y29kZT4rPC9jb2RlPiBvciA8Y29kZT4tPC9jb2RlPiBzeW1ib2wsIHRoZSBvcHRpb25zIGFyZQogICAgbWVyZ2VkLiBBbnkgb3B0aW9ucyBwcmVjZWRlZCBieSBhIDxjb2RlPis8L2NvZGU+IGFyZSBhZGRlZCB0byB0aGUKICAgIG9wdGlvbnMgY3VycmVudGx5IGluIGZvcmNlLCBhbmQgYW55IG9wdGlvbnMgcHJlY2VkZWQgYnkgYQogICAgPGNvZGU+LTwvY29kZT4gYXJlIHJlbW92ZWQgZnJvbSB0aGUgb3B0aW9ucyBjdXJyZW50bHkgaW4KICAgIGZvcmNlLiA8L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgPHA+TWl4aW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPk9wdGlvbnM8L2NvZGU+IHdpdGggYSA8Y29kZT4rPC9jb2RlPiBvcgogICAgPGNvZGU+LTwvY29kZT4gd2l0aCB0aG9zZSB3aXRob3V0IGlzIG5vdCB2YWxpZCBzeW50YXggYW5kIHdpbGwgYmUKICAgIHJlamVjdGVkIGR1cmluZyBzZXJ2ZXIgc3RhcnR1cCBieSB0aGUgc3ludGF4IGNoZWNrIHdpdGggYW4gYWJvcnQuPC9wPgogICAgPC9kaXY+CgogICAgPHA+Rm9yIGV4YW1wbGUsIHdpdGhvdXQgYW55IDxjb2RlPis8L2NvZGU+IGFuZCA8Y29kZT4tPC9jb2RlPiBzeW1ib2xzOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0RpcmVjdG9yeSAiL3dlYi9kb2NzIiZndDsKICBPcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3MKJmx0Oy9EaXJlY3RvcnkmZ3Q7CgombHQ7RGlyZWN0b3J5ICIvd2ViL2RvY3Mvc3BlYyImZ3Q7CiAgT3B0aW9ucyBJbmNsdWRlcwombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgogICAgPHA+dGhlbiBvbmx5IDxjb2RlPkluY2x1ZGVzPC9jb2RlPiB3aWxsIGJlIHNldCBmb3IgdGhlCiAgICA8Y29kZT4vd2ViL2RvY3Mvc3BlYzwvY29kZT4gZGlyZWN0b3J5LiBIb3dldmVyIGlmIHRoZSBzZWNvbmQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPk9wdGlvbnM8L2NvZGU+IGRpcmVjdGl2ZSB1c2VzIHRoZSA8Y29kZT4rPC9jb2RlPiBhbmQKICAgIDxjb2RlPi08L2NvZGU+IHN5bWJvbHM6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5ICIvd2ViL2RvY3MiJmd0OwogIE9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1MaW5rcwombHQ7L0RpcmVjdG9yeSZndDsKCiZsdDtEaXJlY3RvcnkgIi93ZWIvZG9jcy9zcGVjIiZndDsKICBPcHRpb25zICtJbmNsdWRlcyAtSW5kZXhlcwombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgogICAgPHA+dGhlbiB0aGUgb3B0aW9ucyA8Y29kZT5Gb2xsb3dTeW1MaW5rczwvY29kZT4gYW5kCiAgICA8Y29kZT5JbmNsdWRlczwvY29kZT4gYXJlIHNldCBmb3IgdGhlIDxjb2RlPi93ZWIvZG9jcy9zcGVjPC9jb2RlPgogICAgZGlyZWN0b3J5LjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICAgIDxwPlVzaW5nIDxjb2RlPi1JbmNsdWRlc05PRVhFQzwvY29kZT4gb3IKICAgICAgPGNvZGU+LUluY2x1ZGVzPC9jb2RlPiBkaXNhYmxlcyBzZXJ2ZXItc2lkZSBpbmNsdWRlcyBjb21wbGV0ZWx5CiAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXZpb3VzIHNldHRpbmcuPC9wPgogICAgPC9kaXY+CgogICAgPHA+VGhlIGRlZmF1bHQgaW4gdGhlIGFic2VuY2Ugb2YgYW55IG90aGVyIHNldHRpbmdzIGlzCiAgICA8Y29kZT5Gb2xsb3dTeW1saW5rczwvY29kZT4uPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3RvY29sIiBpZD0iUHJvdG9jb2wiPlByb3RvY29sPC9hPiA8YSBuYW1lPSJwcm90b2NvbCIgaWQ9InByb3RvY29sIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Qcm90b2NvbCBmb3IgYSBsaXN0ZW5pbmcgc29ja2V0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3RvY29sIDx2YXI+cHJvdG9jb2w8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiBBcGFjaGUgMi4xLjUgYW5kIGxhdGVyLgpPbiBXaW5kb3dzLCBmcm9tIEFwYWNoZSAyLjMuMyBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBwcm90b2NvbCB1c2VkIGZvciBhIHNwZWNpZmljIGxpc3RlbmluZyBzb2NrZXQuCiAgICAgICBUaGUgcHJvdG9jb2wgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbW9kdWxlIHNob3VsZCBoYW5kbGUgYSByZXF1ZXN0IGFuZAogICAgICAgdG8gYXBwbHkgcHJvdG9jb2wgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyB3aXRoIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5BY2NlcHRGaWx0ZXI8L2NvZGU+CiAgICAgICBkaXJlY3RpdmUuPC9wPgoKICAgIDxwPllvdSBvbmx5IG5lZWQgdG8gc2V0IHRoZSBwcm90b2NvbCBpZiB5b3UgYXJlIHJ1bm5pbmcgb24gbm9uLXN0YW5kYXJkIHBvcnRzOwogICAgICAgb3RoZXJ3aXNlLCA8Y29kZT5odHRwPC9jb2RlPiBpcyBhc3N1bWVkIGZvciBwb3J0IDgwIGFuZCA8Y29kZT5odHRwczwvY29kZT4KICAgICAgIGZvciBwb3J0IDQ0My48L3A+CgogICAgPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcnVubmluZyA8Y29kZT5odHRwczwvY29kZT4gb24gYSBub24tc3RhbmRhcmQgcG9ydCwgc3BlY2lmeSB0aGUgcHJvdG9jb2wgZXhwbGljaXRseTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlByb3RvY29sIGh0dHBzPC9wcmU+CgoKICAgIDxwPllvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSBwcm90b2NvbCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21wbV9jb21tb24uaHRtbCNsaXN0ZW4iPkxpc3RlbjwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjYWNjZXB0ZmlsdGVyIj5BY2NlcHRGaWx0ZXI8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbXBtX2NvbW1vbi5odG1sI2xpc3RlbiI+TGlzdGVuPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJvdG9jb2xzIiBpZD0iUHJvdG9jb2xzIj5Qcm90b2NvbHM8L2E+IDxhIG5hbWU9InByb3RvY29scyIgaWQ9InByb3RvY29scyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UHJvdG9jb2xzIGF2YWlsYWJsZSBmb3IgYSBzZXJ2ZXIvdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3RvY29scyA8dmFyPnByb3RvY29sPC92YXI+IC4uLjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm90b2NvbHMgaHR0cC8xLjE8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPk9ubHkgYXZhaWxhYmxlIGZyb20gQXBhY2hlIDIuNC4xNyBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgICAgIDxwPlRoaXMgZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgbGlzdCBvZiBwcm90b2NvbHMgc3VwcG9ydGVkIGZvciBhCiAgICAgICAgICAgIHNlcnZlci92aXJ0dWFsIGhvc3QuIFRoZSBsaXN0IGRldGVybWluZXMgdGhlIGFsbG93ZWQgcHJvdG9jb2xzCiAgICAgICAgICAgIGEgY2xpZW50IG1heSBuZWdvdGlhdGUgZm9yIHRoaXMgc2VydmVyL2hvc3QuPC9wPgogICAgICAgIAogICAgICAgIDxwPllvdSBuZWVkIHRvIHNldCBwcm90b2NvbHMgaWYgeW91IHdhbnQgdG8gZXh0ZW5kIHRoZSBhdmFpbGFibGUKICAgICAgICAgICAgcHJvdG9jb2xzIGZvciBhIHNlcnZlci9ob3N0LiBCeSBkZWZhdWx0LCBvbmx5IHRoZSBodHRwLzEuMSBwcm90b2NvbAogICAgICAgICAgICAod2hpY2ggaW5jbHVkZXMgdGhlIGNvbXBhdGliaWxpdHkgd2l0aCAxLjAgYW5kIDAuOSBjbGllbnRzKSBpcwogICAgICAgICAgICBhbGxvd2VkLjwvcD4KICAgICAgICAKICAgICAgICA8cD5Gb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBIVFRQLzIgZm9yIGEgc2VydmVyIHdpdGggVExTLCAKICAgICAgICAgICAgc3BlY2lmeTo8L3A+CiAgICAgICAgCiAgICAgICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlByb3RvY29scyBoMiBodHRwLzEuMTwvcHJlPgoKCiAgICAgICAgPHA+VmFsaWQgcHJvdG9jb2xzIGFyZSA8Y29kZT5odHRwLzEuMTwvY29kZT4gZm9yIGh0dHAgYW5kIGh0dHBzIGNvbm5lY3Rpb25zLAogICAgICAgICAgICA8Y29kZT5oMjwvY29kZT4gb24gaHR0cHMgY29ubmVjdGlvbnMgYW5kIDxjb2RlPmgyYzwvY29kZT4gZm9yIGh0dHAKICAgICAgICAgICAgY29ubmVjdGlvbnMuIE1vZHVsZXMgbWF5IGVuYWJsZSBtb3JlIHByb3RvY29scy48L3A+CiAgICAgICAgCiAgICAgICAgPHA+SXQgaXMgc2FmZSB0byBzcGVjaWZ5IHByb3RvY29scyB0aGF0IGFyZSB1bmF2YWlsYWJsZS9kaXNhYmxlZC4gU3VjaAogICAgICAgIHByb3RvY29sIG5hbWVzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQuPC9wPgogICAgICAgIAogICAgICAgIDxwPlByb3RvY29scyBzcGVjaWZpZWQgaW4gYmFzZSBzZXJ2ZXJzIGFyZSBpbmhlcml0ZWQgZm9yIHZpcnR1YWwgaG9zdHMgCiAgICAgICAgICAgIG9ubHkgaWYgdGhlIHZpcnR1YWwgaG9zdCBoYXMgbm8gb3duIFByb3RvY29scyBkaXJlY3RpdmUuIE9yLCB0aGUgb3RoZXIKICAgICAgICAgICAgd2F5IGFyb3VuZCwgUHJvdG9jb2xzIGRpcmVjdGl2ZXMgaW4gdmlydHVhbCBob3N0cyByZXBsYWNlIGFueQogICAgICAgICAgICBzdWNoIGRpcmVjdGl2ZSBpbiB0aGUgYmFzZSBzZXJ2ZXIuCiAgICAgICAgPC9wPgoKICAgIAo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJvdG9jb2xzaG9ub3JvcmRlciI+UHJvdG9jb2xzSG9ub3JPcmRlcjwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3RvY29sc0hvbm9yT3JkZXIiIGlkPSJQcm90b2NvbHNIb25vck9yZGVyIj5Qcm90b2NvbHNIb25vck9yZGVyPC9hPiA8YSBuYW1lPSJwcm90b2NvbHNob25vcm9yZGVyIiBpZD0icHJvdG9jb2xzaG9ub3JvcmRlciI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGV0ZXJtaW5lcyBpZiBvcmRlciBvZiBQcm90b2NvbHMgZGV0ZXJtaW5lcyBwcmVjZWRlbmNlIGR1cmluZyBuZWdvdGlhdGlvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm90b2NvbHNIb25vck9yZGVyIE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm90b2NvbHNIb25vck9yZGVyIE9uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5Pbmx5IGF2YWlsYWJsZSBmcm9tIEFwYWNoZSAyLjQuMTcgYW5kIGxhdGVyLjwvdGQ+PC90cj4KPC90YWJsZT4KICAgICAgICA8cD5UaGlzIGRpcmVjdGl2ZSBzcGVjaWZpZXMgaWYgdGhlIHNlcnZlciBzaG91bGQgaG9ub3IgdGhlIG9yZGVyIGluIHdoaWNoCiAgICAgICAgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3RvY29sczwvY29kZT4gZGlyZWN0aXZlIGxpc3RzIHByb3RvY29scy48L3A+CiAgICAgICAgCiAgICAgICAgPHA+SWYgY29uZmlndXJlZCBPZmYsIHRoZSBjbGllbnQgc3VwcGxpZWQgbGlzdCBvcmRlciBvZiBwcm90b2NvbHMgaGFzIAogICAgICAgICAgICBwcmVjZWRlbmNlIG92ZXIgdGhlIG9yZGVyIGluIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbi48L3A+CiAgICAgICAgCiAgICAgICAgPHA+V2l0aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm90b2NvbHNIb25vck9yZGVyPC9jb2RlPiBzZXQgdG8gPGNvZGU+b248L2NvZGU+IAogICAgICAgICAgICAoZGVmYXVsdCksIHRoZSBjbGllbnQgb3JkZXJpbmcgZG9lcyBub3QgbWF0dGVyIGFuZCBvbmx5IHRoZSBvcmRlcmluZyAKICAgICAgICAgICAgaW4gdGhlIHNlcnZlciBzZXR0aW5ncyBpbmZsdWVuY2VzIHRoZSBvdXRjb21lIG9mIHRoZSBwcm90b2NvbCAKICAgICAgICAgICAgbmVnb3RpYXRpb24uPC9wPgogICAgICAgIAogICAgCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm90b2NvbHMiPlByb3RvY29sczwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlF1YWxpZnlSZWRpcmVjdFVSTCIgaWQ9IlF1YWxpZnlSZWRpcmVjdFVSTCI+UXVhbGlmeVJlZGlyZWN0VVJMPC9hPiA8YSBuYW1lPSJxdWFsaWZ5cmVkaXJlY3R1cmwiIGlkPSJxdWFsaWZ5cmVkaXJlY3R1cmwiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbnRyb2xzIHdoZXRoZXIgdGhlIFJFRElSRUNUX1VSTCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcwpmdWxseSBxdWFsaWZpZWQ8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UXVhbGlmeVJlZGlyZWN0VVJMIE9OfE9GRjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5RdWFsaWZ5UmVkaXJlY3RVUkwgT0ZGPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5EaXJlY3RpdmUgc3VwcG9ydGVkIGluIDIuNC4xOCBhbmQgbGF0ZXIuIDIuNC4xNyBhY3RlZAphcyBpZiAnUXVhbGlmeVJlZGlyZWN0VVJMIE9OJyB3YXMgY29uZmlndXJlZC48L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBjb250cm9scyB3aGV0aGVyIHRoZSBzZXJ2ZXIgd2lsbCBlbnN1cmUgdGhhdCB0aGUgCiAgICBSRURJUkVDVF9VUkwgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgZnVsbHkgcXVhbGlmaWVkLiAgQnkgZGVmYXVsdCwgCiAgICB0aGUgdmFyaWFibGUgY29udGFpbnMgdGhlIHZlcmJhdGltIFVSTCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCwgCiAgICBzdWNoIGFzICIvaW5kZXguaHRtbCIuICBXaXRoIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNxdWFsaWZ5cmVkaXJlY3R1cmwgb24iPlF1YWxpZnlSZWRpcmVjdFVSTCBPTjwvYT48L2NvZGU+LCB0aGUgc2FtZSByZXF1ZXN0IHdvdWxkIHJlc3VsdCBpbiBhCiAgICB2YWx1ZSBzdWNoIGFzICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2luZGV4Lmh0bWwiLjwvcD4KICAgIDxwPkV2ZW4gd2l0aG91dCB0aGlzIGRpcmVjdGl2ZSBzZXQsIHdoZW4gYSByZXF1ZXN0IGlzIGlzc3VlZCBhZ2FpbnN0IGEgCiAgICBmdWxseSBxdWFsaWZpZWQgVVJMLCBSRURJUkVDVF9VUkwgd2lsbCByZW1haW4gZnVsbHkgcXVhbGlmaWVkLgogICAgPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlJMaW1pdENQVSIgaWQ9IlJMaW1pdENQVSI+UkxpbWl0Q1BVPC9hPiA8YSBuYW1lPSJybGltaXRjcHUiIGlkPSJybGltaXRjcHUiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkxpbWl0cyB0aGUgQ1BVIGNvbnN1bXB0aW9uIG9mIHByb2Nlc3NlcyBsYXVuY2hlZApieSBBcGFjaGUgaHR0cGQgY2hpbGRyZW48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UkxpbWl0Q1BVIDx2YXI+c2Vjb25kczwvdmFyPnxtYXggWzx2YXI+c2Vjb25kczwvdmFyPnxtYXhdPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlVuc2V0OyB1c2VzIG9wZXJhdGluZyBzeXN0ZW0gZGVmYXVsdHM8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRha2VzIDEgb3IgMiBwYXJhbWV0ZXJzLiBUaGUgZmlyc3QgcGFyYW1ldGVyIHNldHMgdGhlIHNvZnQKICAgIHJlc291cmNlIGxpbWl0IGZvciBhbGwgcHJvY2Vzc2VzIGFuZCB0aGUgc2Vjb25kIHBhcmFtZXRlciBzZXRzCiAgICB0aGUgbWF4aW11bSByZXNvdXJjZSBsaW1pdC4gRWl0aGVyIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIsCiAgICBvciA8Y29kZT5tYXg8L2NvZGU+IHRvIGluZGljYXRlIHRvIHRoZSBzZXJ2ZXIgdGhhdCB0aGUgbGltaXQgc2hvdWxkCiAgICBiZSBzZXQgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbQogICAgY29uZmlndXJhdGlvbi4gUmFpc2luZyB0aGUgbWF4aW11bSByZXNvdXJjZSBsaW1pdCByZXF1aXJlcyB0aGF0CiAgICB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgYXMgPGNvZGU+cm9vdDwvY29kZT4gb3IgaW4gdGhlIGluaXRpYWwgc3RhcnR1cAogICAgcGhhc2UuPC9wPgoKICAgIDxwPlRoaXMgYXBwbGllcyB0byBwcm9jZXNzZXMgZm9ya2VkIGZyb20gQXBhY2hlIGh0dHBkIGNoaWxkcmVuCiAgICBzZXJ2aWNpbmcgcmVxdWVzdHMsIG5vdCB0aGUgQXBhY2hlIGh0dHBkIGNoaWxkcmVuIHRoZW1zZWx2ZXMuIFRoaXMKICAgIGluY2x1ZGVzIENHSSBzY3JpcHRzIGFuZCBTU0kgZXhlYyBjb21tYW5kcywgYnV0IG5vdCBhbnkKICAgIHByb2Nlc3NlcyBmb3JrZWQgZnJvbSB0aGUgQXBhY2hlIGh0dHBkIHBhcmVudCwgc3VjaCBhcyBwaXBlZAogICAgbG9ncy48L3A+CgogICAgPHA+Q1BVIHJlc291cmNlIGxpbWl0cyBhcmUgZXhwcmVzc2VkIGluIHNlY29uZHMgcGVyCiAgICBwcm9jZXNzLjwvcD4KCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNybGltaXRtZW0iPlJMaW1pdE1FTTwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNybGltaXRucHJvYyI+UkxpbWl0TlBST0M8L2E+PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJSTGltaXRNRU0iIGlkPSJSTGltaXRNRU0iPlJMaW1pdE1FTTwvYT4gPGEgbmFtZT0icmxpbWl0bWVtIiBpZD0icmxpbWl0bWVtIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5MaW1pdHMgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBwcm9jZXNzZXMgbGF1bmNoZWQKYnkgQXBhY2hlIGh0dHBkIGNoaWxkcmVuPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlJMaW1pdE1FTSA8dmFyPmJ5dGVzPC92YXI+fG1heCBbPHZhcj5ieXRlczwvdmFyPnxtYXhdPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlVuc2V0OyB1c2VzIG9wZXJhdGluZyBzeXN0ZW0gZGVmYXVsdHM8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRha2VzIDEgb3IgMiBwYXJhbWV0ZXJzLiBUaGUgZmlyc3QgcGFyYW1ldGVyIHNldHMgdGhlIHNvZnQKICAgIHJlc291cmNlIGxpbWl0IGZvciBhbGwgcHJvY2Vzc2VzIGFuZCB0aGUgc2Vjb25kIHBhcmFtZXRlciBzZXRzCiAgICB0aGUgbWF4aW11bSByZXNvdXJjZSBsaW1pdC4gRWl0aGVyIHBhcmFtZXRlciBjYW4gYmUgYSBudW1iZXIsCiAgICBvciA8Y29kZT5tYXg8L2NvZGU+IHRvIGluZGljYXRlIHRvIHRoZSBzZXJ2ZXIgdGhhdCB0aGUgbGltaXQgc2hvdWxkCiAgICBiZSBzZXQgdG8gdGhlIG1heGltdW0gYWxsb3dlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbQogICAgY29uZmlndXJhdGlvbi4gUmFpc2luZyB0aGUgbWF4aW11bSByZXNvdXJjZSBsaW1pdCByZXF1aXJlcyB0aGF0CiAgICB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgYXMgPGNvZGU+cm9vdDwvY29kZT4gb3IgaW4gdGhlIGluaXRpYWwgc3RhcnR1cAogICAgcGhhc2UuPC9wPgoKICAgIDxwPlRoaXMgYXBwbGllcyB0byBwcm9jZXNzZXMgZm9ya2VkIGZyb20gQXBhY2hlIGh0dHBkIGNoaWxkcmVuCiAgICBzZXJ2aWNpbmcgcmVxdWVzdHMsIG5vdCB0aGUgQXBhY2hlIGh0dHBkIGNoaWxkcmVuIHRoZW1zZWx2ZXMuIFRoaXMKICAgIGluY2x1ZGVzIENHSSBzY3JpcHRzIGFuZCBTU0kgZXhlYyBjb21tYW5kcywgYnV0IG5vdCBhbnkKICAgIHByb2Nlc3NlcyBmb3JrZWQgZnJvbSB0aGUgQXBhY2hlIGh0dHBkIHBhcmVudCwgc3VjaCBhcyBwaXBlZAogICAgbG9ncy48L3A+CgogICAgPHA+TWVtb3J5IHJlc291cmNlIGxpbWl0cyBhcmUgZXhwcmVzc2VkIGluIGJ5dGVzIHBlcgogICAgcHJvY2Vzcy48L3A+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcmxpbWl0Y3B1Ij5STGltaXRDUFU8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcmxpbWl0bnByb2MiPlJMaW1pdE5QUk9DPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUkxpbWl0TlBST0MiIGlkPSJSTGltaXROUFJPQyI+UkxpbWl0TlBST0M8L2E+IDxhIG5hbWU9InJsaW1pdG5wcm9jIiBpZD0icmxpbWl0bnByb2MiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkxpbWl0cyB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyB0aGF0IGNhbiBiZSBsYXVuY2hlZCBieQpwcm9jZXNzZXMgbGF1bmNoZWQgYnkgQXBhY2hlIGh0dHBkIGNoaWxkcmVuPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlJMaW1pdE5QUk9DIDx2YXI+bnVtYmVyPC92YXI+fG1heCBbPHZhcj5udW1iZXI8L3Zhcj58bWF4XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5VbnNldDsgdXNlcyBvcGVyYXRpbmcgc3lzdGVtIGRlZmF1bHRzPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UYWtlcyAxIG9yIDIgcGFyYW1ldGVycy4gVGhlIGZpcnN0IHBhcmFtZXRlciBzZXRzIHRoZSBzb2Z0CiAgICByZXNvdXJjZSBsaW1pdCBmb3IgYWxsIHByb2Nlc3NlcywgYW5kIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHNldHMKICAgIHRoZSBtYXhpbXVtIHJlc291cmNlIGxpbWl0LiBFaXRoZXIgcGFyYW1ldGVyIGNhbiBiZSBhIG51bWJlciwKICAgIG9yIDxjb2RlPm1heDwvY29kZT4gdG8gaW5kaWNhdGUgdG8gdGhlIHNlcnZlciB0aGF0IHRoZSBsaW1pdAogICAgc2hvdWxkIGJlIHNldCB0byB0aGUgbWF4aW11bSBhbGxvd2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtCiAgICBjb25maWd1cmF0aW9uLiBSYWlzaW5nIHRoZSBtYXhpbXVtIHJlc291cmNlIGxpbWl0IHJlcXVpcmVzIHRoYXQKICAgIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBhcyA8Y29kZT5yb290PC9jb2RlPiBvciBpbiB0aGUgaW5pdGlhbCBzdGFydHVwCiAgICBwaGFzZS48L3A+CgogICAgPHA+VGhpcyBhcHBsaWVzIHRvIHByb2Nlc3NlcyBmb3JrZWQgZnJvbSBBcGFjaGUgaHR0cGQgY2hpbGRyZW4KICAgIHNlcnZpY2luZyByZXF1ZXN0cywgbm90IHRoZSBBcGFjaGUgaHR0cGQgY2hpbGRyZW4gdGhlbXNlbHZlcy4gVGhpcwogICAgaW5jbHVkZXMgQ0dJIHNjcmlwdHMgYW5kIFNTSSBleGVjIGNvbW1hbmRzLCBidXQgbm90IGFueQogICAgcHJvY2Vzc2VzIGZvcmtlZCBmcm9tIHRoZSBBcGFjaGUgaHR0cGQgcGFyZW50LCBzdWNoIGFzIHBpcGVkCiAgICBsb2dzLjwvcD4KCiAgICA8cD5Qcm9jZXNzIGxpbWl0cyBjb250cm9sIHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIHBlciB1c2VyLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICAgIDxwPklmIENHSSBwcm9jZXNzZXMgYXJlIDxzdHJvbmc+bm90PC9zdHJvbmc+IHJ1bm5pbmcKICAgICAgdW5kZXIgdXNlciBpZHMgb3RoZXIgdGhhbiB0aGUgd2ViIHNlcnZlciB1c2VyIGlkLCB0aGlzIGRpcmVjdGl2ZQogICAgICB3aWxsIGxpbWl0IHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIHRoYXQgdGhlIHNlcnZlciBpdHNlbGYgY2FuCiAgICAgIGNyZWF0ZS4gRXZpZGVuY2Ugb2YgdGhpcyBzaXR1YXRpb24gd2lsbCBiZSBpbmRpY2F0ZWQgYnkKICAgICAgPHN0cm9uZz48Y29kZT5jYW5ub3QgZm9yazwvY29kZT48L3N0cm9uZz4gbWVzc2FnZXMgaW4gdGhlCiAgICAgIDxjb2RlPmVycm9yX2xvZzwvY29kZT4uPC9wPgogICAgPC9kaXY+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcmxpbWl0bWVtIj5STGltaXRNRU08L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcmxpbWl0Y3B1Ij5STGltaXRDUFU8L2E+PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTY3JpcHRJbnRlcnByZXRlclNvdXJjZSIgaWQ9IlNjcmlwdEludGVycHJldGVyU291cmNlIj5TY3JpcHRJbnRlcnByZXRlclNvdXJjZTwvYT4gPGEgbmFtZT0ic2NyaXB0aW50ZXJwcmV0ZXJzb3VyY2UiIGlkPSJzY3JpcHRpbnRlcnByZXRlcnNvdXJjZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+VGVjaG5pcXVlIGZvciBsb2NhdGluZyB0aGUgaW50ZXJwcmV0ZXIgZm9yIENHSQpzY3JpcHRzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlNjcmlwdEludGVycHJldGVyU291cmNlIFJlZ2lzdHJ5fFJlZ2lzdHJ5LVN0cmljdHxTY3JpcHQ8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2NyaXB0SW50ZXJwcmV0ZXJTb3VyY2UgU2NyaXB0PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPldpbjMyIG9ubHkuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgdXNlZCB0byBjb250cm9sIGhvdyBBcGFjaGUgaHR0cGQgZmluZHMgdGhlCiAgICBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBDR0kgc2NyaXB0cy4gVGhlIGRlZmF1bHQgc2V0dGluZyBpcwogICAgPGNvZGU+U2NyaXB0PC9jb2RlPi4gVGhpcyBjYXVzZXMgQXBhY2hlIGh0dHBkIHRvIHVzZSB0aGUgaW50ZXJwcmV0ZXIgcG9pbnRlZCB0bwogICAgYnkgdGhlIHNoZWJhbmcgbGluZSAoZmlyc3QgbGluZSwgc3RhcnRpbmcgd2l0aCA8Y29kZT4jITwvY29kZT4pIGluIHRoZQogICAgc2NyaXB0LiBPbiBXaW4zMiBzeXN0ZW1zIHRoaXMgbGluZSB1c3VhbGx5IGxvb2tzIGxpa2U6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctcGVybCI+IyFDOi9QZXJsL2Jpbi9wZXJsLmV4ZTwvcHJlPgoKCiAgICA8cD5vciwgaWYgPGNvZGU+cGVybDwvY29kZT4gaXMgaW4gdGhlIDxjb2RlPlBBVEg8L2NvZGU+LCBzaW1wbHk6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctcGVybCI+IyFwZXJsPC9wcmU+CgoKICAgIDxwPlNldHRpbmcgPGNvZGU+U2NyaXB0SW50ZXJwcmV0ZXJTb3VyY2UgUmVnaXN0cnk8L2NvZGU+IHdpbGwKICAgIGNhdXNlIHRoZSBXaW5kb3dzIFJlZ2lzdHJ5IHRyZWUgPGNvZGU+SEtFWV9DTEFTU0VTX1JPT1Q8L2NvZGU+IHRvIGJlCiAgICBzZWFyY2hlZCB1c2luZyB0aGUgc2NyaXB0IGZpbGUgZXh0ZW5zaW9uIChlLmcuLCA8Y29kZT4ucGw8L2NvZGU+KSBhcyBhCiAgICBzZWFyY2gga2V5LiBUaGUgY29tbWFuZCBkZWZpbmVkIGJ5IHRoZSByZWdpc3RyeSBzdWJrZXkKICAgIDxjb2RlPlNoZWxsXEV4ZWNDR0lcQ29tbWFuZDwvY29kZT4gb3IsIGlmIGl0IGRvZXMgbm90IGV4aXN0LCBieSB0aGUgc3Via2V5CiAgICA8Y29kZT5TaGVsbFxPcGVuXENvbW1hbmQ8L2NvZGU+IGlzIHVzZWQgdG8gb3BlbiB0aGUgc2NyaXB0IGZpbGUuIElmIHRoZQogICAgcmVnaXN0cnkga2V5cyBjYW5ub3QgYmUgZm91bmQsIEFwYWNoZSBodHRwZCBmYWxscyBiYWNrIHRvIHRoZSBiZWhhdmlvciBvZiB0aGUKICAgIDxjb2RlPlNjcmlwdDwvY29kZT4gb3B0aW9uLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+U2VjdXJpdHk8L2gzPgogICAgPHA+QmUgY2FyZWZ1bCB3aGVuIHVzaW5nIDxjb2RlPlNjcmlwdEludGVycHJldGVyU291cmNlCiAgICBSZWdpc3RyeTwvY29kZT4gd2l0aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FsaWFzLmh0bWwjc2NyaXB0YWxpYXMiPlNjcmlwdEFsaWFzPC9hPjwvY29kZT4nZWQgZGlyZWN0b3JpZXMsIGJlY2F1c2UKICAgIEFwYWNoZSBodHRwZCB3aWxsIHRyeSB0byBleGVjdXRlIDxzdHJvbmc+ZXZlcnk8L3N0cm9uZz4gZmlsZSB3aXRoaW4gdGhpcwogICAgZGlyZWN0b3J5LiBUaGUgPGNvZGU+UmVnaXN0cnk8L2NvZGU+IHNldHRpbmcgbWF5IGNhdXNlIHVuZGVzaXJlZAogICAgcHJvZ3JhbSBjYWxscyBvbiBmaWxlcyB3aGljaCBhcmUgdHlwaWNhbGx5IG5vdCBleGVjdXRlZC4gRm9yCiAgICBleGFtcGxlLCB0aGUgZGVmYXVsdCBvcGVuIGNvbW1hbmQgb24gPGNvZGU+Lmh0bTwvY29kZT4gZmlsZXMgb24KICAgIG1vc3QgV2luZG93cyBzeXN0ZW1zIHdpbGwgZXhlY3V0ZSBNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIsIHNvCiAgICBhbnkgSFRUUCByZXF1ZXN0IGZvciBhbiA8Y29kZT4uaHRtPC9jb2RlPiBmaWxlIGV4aXN0aW5nIHdpdGhpbiB0aGUKICAgIHNjcmlwdCBkaXJlY3Rvcnkgd291bGQgc3RhcnQgdGhlIGJyb3dzZXIgaW4gdGhlIGJhY2tncm91bmQgb24gdGhlCiAgICBzZXJ2ZXIuIFRoaXMgaXMgYSBnb29kIHdheSB0byBjcmFzaCB5b3VyIHN5c3RlbSB3aXRoaW4gYSBtaW51dGUgb3IKICAgIHNvLjwvcD4KICAgIDwvZGl2PgoKICAgIDxwPlRoZSBvcHRpb24gPGNvZGU+UmVnaXN0cnktU3RyaWN0PC9jb2RlPiB3aGljaCBpcyBuZXcgaW4gQXBhY2hlIEhUVFAgU2VydmVyCiAgICAyLjAgZG9lcyB0aGUgc2FtZSB0aGluZyBhcyA8Y29kZT5SZWdpc3RyeTwvY29kZT4gYnV0IHVzZXMgb25seSB0aGUKICAgIHN1YmtleSA8Y29kZT5TaGVsbFxFeGVjQ0dJXENvbW1hbmQ8L2NvZGU+LiBUaGUKICAgIDxjb2RlPkV4ZWNDR0k8L2NvZGU+IGtleSBpcyBub3QgYSBjb21tb24gb25lLiBJdCBtdXN0IGJlCiAgICBjb25maWd1cmVkIG1hbnVhbGx5IGluIHRoZSB3aW5kb3dzIHJlZ2lzdHJ5IGFuZCBoZW5jZSBwcmV2ZW50cwogICAgYWNjaWRlbnRhbCBwcm9ncmFtIGNhbGxzIG9uIHlvdXIgc3lzdGVtLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZWVSZXF1ZXN0VGFpbCIgaWQ9IlNlZVJlcXVlc3RUYWlsIj5TZWVSZXF1ZXN0VGFpbDwvYT4gPGEgbmFtZT0ic2VlcmVxdWVzdHRhaWwiIGlkPSJzZWVyZXF1ZXN0dGFpbCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RGV0ZXJtaW5lIGlmIG1vZF9zdGF0dXMgZGlzcGxheXMgdGhlIGZpcnN0IDYzIGNoYXJhY3RlcnMKb2YgYSByZXF1ZXN0IG9yIHRoZSBsYXN0IDYzLCBhc3N1bWluZyB0aGUgcmVxdWVzdCBpdHNlbGYgaXMgZ3JlYXRlciB0aGFuCjYzIGNoYXJzLjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZWVSZXF1ZXN0VGFpbCBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2VlUmVxdWVzdFRhaWwgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSBodHRwZCAyLjIuNyBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+bW9kX3N0YXR1cyB3aXRoIDxjb2RlPkV4dGVuZGVkU3RhdHVzIE9uPC9jb2RlPgogICAgZGlzcGxheXMgdGhlIGFjdHVhbCByZXF1ZXN0IGJlaW5nIGhhbmRsZWQuCiAgICBGb3IgaGlzdG9yaWNhbCBwdXJwb3Nlcywgb25seSA2MyBjaGFyYWN0ZXJzIG9mIHRoZSByZXF1ZXN0CiAgICBhcmUgYWN0dWFsbHkgc3RvcmVkIGZvciBkaXNwbGF5IHB1cnBvc2VzLiBUaGlzIGRpcmVjdGl2ZQogICAgY29udHJvbHMgd2hldGhlciB0aGUgMXN0IDYzIGNoYXJhY3RlcnMgYXJlIHN0b3JlZCAodGhlIHByZXZpb3VzCiAgICBiZWhhdmlvciBhbmQgdGhlIGRlZmF1bHQpIG9yIGlmIHRoZSBsYXN0IDYzIGNoYXJhY3RlcnMgYXJlLiBUaGlzCiAgICBpcyBvbmx5IGFwcGxpY2FibGUsIG9mIGNvdXJzZSwgaWYgdGhlIGxlbmd0aCBvZiB0aGUgcmVxdWVzdCBpcwogICAgNjQgY2hhcmFjdGVycyBvciBncmVhdGVyLjwvcD4KCiAgICA8cD5JZiBBcGFjaGUgaHR0cGQgaXMgaGFuZGxpbmcgPGNvZGU+R0VUJm5ic3A7L2Rpc2sxL3N0b3JhZ2UvYXBhY2hlL2h0ZG9jcy9pbWFnZXMvaW1hZ2VzdG9yZTEvZm9vZC9hcHBsZXMuanBnJm5ic3A7SFRUUC8xLjE8L2NvZGU+IG1vZF9zdGF0dXMgZGlzcGxheXMgYXMgZm9sbG93czoKICAgIDwvcD4KCiAgICA8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj4KICAgICAgPHRyPgogICAgICAgIDx0aD5PZmYgKGRlZmF1bHQpPC90aD4KICAgICAgICA8dGQ+R0VUJm5ic3A7L2Rpc2sxL3N0b3JhZ2UvYXBhY2hlL2h0ZG9jcy9pbWFnZXMvaW1hZ2VzdG9yZTEvZm9vZC9hcHBsZXM8L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRoPk9uPC90aD4KICAgICAgICA8dGQ+b3JhZ2UvYXBhY2hlL2h0ZG9jcy9pbWFnZXMvaW1hZ2VzdG9yZTEvZm9vZC9hcHBsZXMuanBnJm5ic3A7SFRUUC8xLjE8L3RkPgogICAgICA8L3RyPgogICAgPC90YWJsZT4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU2VydmVyQWRtaW4iIGlkPSJTZXJ2ZXJBZG1pbiI+U2VydmVyQWRtaW48L2E+IDxhIG5hbWU9InNlcnZlcmFkbWluIiBpZD0ic2VydmVyYWRtaW4iPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkVtYWlsIGFkZHJlc3MgdGhhdCB0aGUgc2VydmVyIGluY2x1ZGVzIGluIGVycm9yCm1lc3NhZ2VzIHNlbnQgdG8gdGhlIGNsaWVudDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXJ2ZXJBZG1pbiA8dmFyPmVtYWlsLWFkZHJlc3M8L3Zhcj58PHZhcj5VUkw8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJBZG1pbjwvY29kZT4gc2V0cyB0aGUgY29udGFjdCBhZGRyZXNzCiAgICB0aGF0IHRoZSBzZXJ2ZXIgaW5jbHVkZXMgaW4gYW55IGVycm9yIG1lc3NhZ2VzIGl0IHJldHVybnMgdG8gdGhlCiAgICBjbGllbnQuIElmIHRoZSA8Y29kZT5odHRwZDwvY29kZT4gZG9lc24ndCByZWNvZ25pemUgdGhlIHN1cHBsaWVkIGFyZ3VtZW50CiAgICBhcyBhbiBVUkwsIGl0CiAgICBhc3N1bWVzLCB0aGF0IGl0J3MgYW4gPHZhcj5lbWFpbC1hZGRyZXNzPC92YXI+IGFuZCBwcmVwZW5kcyBpdCB3aXRoCiAgICA8Y29kZT5tYWlsdG86PC9jb2RlPiBpbiBoeXBlcmxpbmsgdGFyZ2V0cy4gSG93ZXZlciwgaXQncyByZWNvbW1lbmRlZCB0bwogICAgYWN0dWFsbHkgdXNlIGFuIGVtYWlsIGFkZHJlc3MsIHNpbmNlIHRoZXJlIGFyZSBhIGxvdCBvZiBDR0kgc2NyaXB0cyB0aGF0CiAgICBtYWtlIHRoYXQgYXNzdW1wdGlvbi4gSWYgeW91IHdhbnQgdG8gdXNlIGFuIFVSTCwgaXQgc2hvdWxkIHBvaW50IHRvIGFub3RoZXIKICAgIHNlcnZlciB1bmRlciB5b3VyIGNvbnRyb2wuIE90aGVyd2lzZSB1c2VycyBtYXkgbm90IGJlIGFibGUgdG8gY29udGFjdCB5b3UgaW4KICAgIGNhc2Ugb2YgZXJyb3JzLjwvcD4KCiAgICA8cD5JdCBtYXkgYmUgd29ydGggc2V0dGluZyB1cCBhIGRlZGljYXRlZCBhZGRyZXNzIGZvciB0aGlzLCBlLmcuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5TZXJ2ZXJBZG1pbiB3d3ctYWRtaW5AZm9vLmV4YW1wbGUuY29tPC9wcmU+CgogICAgPHA+YXMgdXNlcnMgZG8gbm90IGFsd2F5cyBtZW50aW9uIHRoYXQgdGhleSBhcmUgdGFsa2luZyBhYm91dCB0aGUKICAgIHNlcnZlciE8L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU2VydmVyQWxpYXMiIGlkPSJTZXJ2ZXJBbGlhcyI+U2VydmVyQWxpYXM8L2E+IDxhIG5hbWU9InNlcnZlcmFsaWFzIiBpZD0ic2VydmVyYWxpYXMiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFsdGVybmF0ZSBuYW1lcyBmb3IgYSBob3N0IHVzZWQgd2hlbiBtYXRjaGluZyByZXF1ZXN0cwp0byBuYW1lLXZpcnR1YWwgaG9zdHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2VydmVyQWxpYXMgPHZhcj5ob3N0bmFtZTwvdmFyPiBbPHZhcj5ob3N0bmFtZTwvdmFyPl0gLi4uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2VydmVyQWxpYXM8L2NvZGU+IGRpcmVjdGl2ZSBzZXRzIHRoZQogICAgYWx0ZXJuYXRlIG5hbWVzIGZvciBhIGhvc3QsIGZvciB1c2Ugd2l0aCA8YSBocmVmPSIuLi92aG9zdHMvbmFtZS1iYXNlZC5odG1sIj5uYW1lLWJhc2VkIHZpcnR1YWwgaG9zdHM8L2E+LiBUaGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlcnZlckFsaWFzPC9jb2RlPiBtYXkgaW5jbHVkZSB3aWxkY2FyZHMsIGlmIGFwcHJvcHJpYXRlLjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O1ZpcnR1YWxIb3N0ICo6ODAmZ3Q7CiAgU2VydmVyTmFtZSBzZXJ2ZXIuZXhhbXBsZS5jb20KICBTZXJ2ZXJBbGlhcyBzZXJ2ZXIgc2VydmVyMi5leGFtcGxlLmNvbSBzZXJ2ZXIyCiAgU2VydmVyQWxpYXMgKi5leGFtcGxlLmNvbQogIFVzZUNhbm9uaWNhbE5hbWUgT2ZmCiAgIyAuLi4KJmx0Oy9WaXJ0dWFsSG9zdCZndDs8L3ByZT4KCgogICAgPHA+TmFtZS1iYXNlZCB2aXJ0dWFsIGhvc3RzIGZvciB0aGUgYmVzdC1tYXRjaGluZyBzZXQgb2YgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN2aXJ0dWFsaG9zdCI+Jmx0O3ZpcnR1YWxob3N0Jmd0OzwvYT48L2NvZGU+cyBhcmUgcHJvY2Vzc2VkCiAgICBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICBUaGUgZmlyc3QgbWF0Y2hpbmcgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NlcnZlcm5hbWUiPlNlcnZlck5hbWU8L2E+PC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVyYWxpYXMiPlNlcnZlckFsaWFzPC9hPjwvY29kZT4gaXMgdXNlZCwgd2l0aCBubyBkaWZmZXJlbnQgcHJlY2VkZW5jZSBmb3Igd2lsZGNhcmRzCiAgICAobm9yIGZvciBTZXJ2ZXJOYW1lIHZzLiBTZXJ2ZXJBbGlhcykuICA8L3A+CgogICAgPHA+VGhlIGNvbXBsZXRlIGxpc3Qgb2YgbmFtZXMgaW4gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN2aXJ0dWFsaG9zdCI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvYT48L2NvZGU+CiAgICBkaXJlY3RpdmUgYXJlIHRyZWF0ZWQganVzdCBsaWtlIGEgKG5vbiB3aWxkY2FyZCkgCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJBbGlhczwvY29kZT4uPC9wPgoKCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN1c2VjYW5vbmljYWxuYW1lIj5Vc2VDYW5vbmljYWxOYW1lPC9hPjwvY29kZT48L2xpPgo8bGk+PGEgaHJlZj0iLi4vdmhvc3RzLyI+QXBhY2hlIEhUVFAgU2VydmVyIFZpcnR1YWwgSG9zdCBkb2N1bWVudGF0aW9uPC9hPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXJ2ZXJOYW1lIiBpZD0iU2VydmVyTmFtZSI+U2VydmVyTmFtZTwvYT4gPGEgbmFtZT0ic2VydmVybmFtZSIgaWQ9InNlcnZlcm5hbWUiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkhvc3RuYW1lIGFuZCBwb3J0IHRoYXQgdGhlIHNlcnZlciB1c2VzIHRvIGlkZW50aWZ5Cml0c2VsZjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXJ2ZXJOYW1lIFs8dmFyPnNjaGVtZTwvdmFyPjovL108dmFyPmRvbWFpbi1uYW1lPC92YXI+fDx2YXI+aXAtYWRkcmVzczwvdmFyPls6PHZhcj5wb3J0PC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlcnZlck5hbWU8L2NvZGU+IGRpcmVjdGl2ZSBzZXRzIHRoZQogICAgcmVxdWVzdCBzY2hlbWUsIGhvc3RuYW1lIGFuZCBwb3J0IHRoYXQgdGhlIHNlcnZlciB1c2VzIHRvIGlkZW50aWZ5IGl0c2VsZi4KICAgIDwvcD4KCiAgICA8cD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJOYW1lPC9jb2RlPiBpcyB1c2VkIChwb3NzaWJseQogICAgaW4gY29uanVuY3Rpb24gd2l0aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVyYWxpYXMiPlNlcnZlckFsaWFzPC9hPjwvY29kZT4pIHRvIHVuaXF1ZWx5CiAgICBpZGVudGlmeSBhIHZpcnR1YWwgaG9zdCwgd2hlbiB1c2luZyA8YSBocmVmPSIuLi92aG9zdHMvbmFtZS1iYXNlZC5odG1sIj5uYW1lLWJhc2VkIHZpcnR1YWwgaG9zdHM8L2E+LjwvcD4KCiAgICA8cD5BZGRpdGlvbmFsbHksIHRoaXMgaXMgdXNlZCB3aGVuCiAgICBjcmVhdGluZyBzZWxmLXJlZmVyZW50aWFsIHJlZGlyZWN0aW9uIFVSTHMgd2hlbiAKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN1c2VjYW5vbmljYWxuYW1lIj5Vc2VDYW5vbmljYWxOYW1lPC9hPjwvY29kZT4gaXMgc2V0IHRvIGEgbm9uLWRlZmF1bHQKICAgIHZhbHVlLjwvcD4KCiAgICA8cD5Gb3IgZXhhbXBsZSwgaWYgdGhlIG5hbWUgb2YgdGhlCiAgICBtYWNoaW5lIGhvc3RpbmcgdGhlIHdlYiBzZXJ2ZXIgaXMgPGNvZGU+c2ltcGxlLmV4YW1wbGUuY29tPC9jb2RlPiwKICAgIGJ1dCB0aGUgbWFjaGluZSBhbHNvIGhhcyB0aGUgRE5TIGFsaWFzIDxjb2RlPnd3dy5leGFtcGxlLmNvbTwvY29kZT4KICAgIGFuZCB5b3Ugd2lzaCB0aGUgd2ViIHNlcnZlciB0byBiZSBzbyBpZGVudGlmaWVkLCB0aGUgZm9sbG93aW5nCiAgICBkaXJlY3RpdmUgc2hvdWxkIGJlIHVzZWQ6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5TZXJ2ZXJOYW1lIHd3dy5leGFtcGxlLmNvbTwvcHJlPgoKCiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2VydmVyTmFtZTwvY29kZT4gZGlyZWN0aXZlCiAgICBtYXkgYXBwZWFyIGFueXdoZXJlIHdpdGhpbiB0aGUgZGVmaW5pdGlvbiBvZiBhIHNlcnZlci4gSG93ZXZlciwKICAgIGVhY2ggYXBwZWFyYW5jZSBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGFwcGVhcmFuY2UgKHdpdGhpbiB0aGF0CiAgICBzZXJ2ZXIpLjwvcD4KCiAgICA8cD5JZiBubyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJOYW1lPC9jb2RlPiBpcyBzcGVjaWZpZWQsIHRoZQogICAgc2VydmVyIGF0dGVtcHRzIHRvIGRlZHVjZSB0aGUgY2xpZW50IHZpc2libGUgaG9zdG5hbWUgYnkgZmlyc3QgYXNraW5nIAogICAgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZm9yIHRoZSBzeXN0ZW0gaG9zdG5hbWUsIGFuZCBpZiB0aGF0IGZhaWxzLCAKICAgIHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCBvbiBhbiBJUCBhZGRyZXNzIHByZXNlbnQgb24gdGhlIHN5c3RlbS48L3A+CiAgICAKICAgIDxwPklmIG5vIHBvcnQgaXMgc3BlY2lmaWVkIGluIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2VydmVyTmFtZTwvY29kZT4sIHRoZW4gdGhlIHNlcnZlciB3aWxsIHVzZSB0aGUKICAgIHBvcnQgZnJvbSB0aGUgaW5jb21pbmcgcmVxdWVzdC4gRm9yIG9wdGltYWwgcmVsaWFiaWxpdHkgYW5kCiAgICBwcmVkaWN0YWJpbGl0eSwgeW91IHNob3VsZCBzcGVjaWZ5IGFuIGV4cGxpY2l0IGhvc3RuYW1lIGFuZCBwb3J0CiAgICB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2VydmVyTmFtZTwvY29kZT4gZGlyZWN0aXZlLjwvcD4KCiAgICA8cD5JZiB5b3UgYXJlIHVzaW5nIDxhIGhyZWY9Ii4uL3Zob3N0cy9uYW1lLWJhc2VkLmh0bWwiPm5hbWUtYmFzZWQgdmlydHVhbCBob3N0czwvYT4sCiAgICB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2VydmVyTmFtZTwvY29kZT4gaW5zaWRlIGEKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN2aXJ0dWFsaG9zdCI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvYT48L2NvZGU+CiAgICBzZWN0aW9uIHNwZWNpZmllcyB3aGF0IGhvc3RuYW1lIG11c3QgYXBwZWFyIGluIHRoZSByZXF1ZXN0J3MKICAgIDxjb2RlPkhvc3Q6PC9jb2RlPiBoZWFkZXIgdG8gbWF0Y2ggdGhpcyB2aXJ0dWFsIGhvc3QuPC9wPgoKICAgIDxwPlNvbWV0aW1lcywgdGhlIHNlcnZlciBydW5zIGJlaGluZCBhIGRldmljZSB0aGF0IHByb2Nlc3NlcyBTU0wsCiAgICBzdWNoIGFzIGEgcmV2ZXJzZSBwcm94eSwgbG9hZCBiYWxhbmNlciBvciBTU0wgb2ZmbG9hZAogICAgYXBwbGlhbmNlLiBXaGVuIHRoaXMgaXMgdGhlIGNhc2UsIHNwZWNpZnkgdGhlCiAgICA8Y29kZT5odHRwczovLzwvY29kZT4gc2NoZW1lIGFuZCB0aGUgcG9ydCBudW1iZXIgdG8gd2hpY2ggdGhlCiAgICBjbGllbnRzIGNvbm5lY3QgaW4gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlcnZlck5hbWU8L2NvZGU+IGRpcmVjdGl2ZQogICAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHNlcnZlciBnZW5lcmF0ZXMgdGhlIGNvcnJlY3QKICAgIHNlbGYtcmVmZXJlbnRpYWwgVVJMcy4KICAgIDwvcD4KCiAgICA8cD5TZWUgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPiBhbmQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN1c2VjYW5vbmljYWxwaHlzaWNhbHBvcnQiPlVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydDwvYT48L2NvZGU+IGRpcmVjdGl2ZXMgZm9yCiAgICBzZXR0aW5ncyB3aGljaCBkZXRlcm1pbmUgd2hldGhlciBzZWxmLXJlZmVyZW50aWFsIFVSTHMgKGUuZy4sIGJ5IHRoZQogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kaXIuaHRtbCI+bW9kX2RpcjwvYT48L2NvZGU+IG1vZHVsZSkgd2lsbCByZWZlciB0byB0aGUKICAgIHNwZWNpZmllZCBwb3J0LCBvciB0byB0aGUgcG9ydCBudW1iZXIgZ2l2ZW4gaW4gdGhlIGNsaWVudCdzIHJlcXVlc3QuCiAgICA8L3A+CgogICAgPGRpdiBjbGFzcz0id2FybmluZyI+CiAgICA8cD5GYWlsdXJlIHRvIHNldCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJOYW1lPC9jb2RlPiB0byBhIG5hbWUgdGhhdAogICAgeW91ciBzZXJ2ZXIgY2FuIHJlc29sdmUgdG8gYW4gSVAgYWRkcmVzcyB3aWxsIHJlc3VsdCBpbiBhIHN0YXJ0dXAKICAgIHdhcm5pbmcuIDxjb2RlPmh0dHBkPC9jb2RlPiB3aWxsIHRoZW4gdXNlIHdoYXRldmVyIGhvc3RuYW1lIGl0IGNhbgogICAgZGV0ZXJtaW5lLCB1c2luZyB0aGUgc3lzdGVtJ3MgPGNvZGU+aG9zdG5hbWU8L2NvZGU+IGNvbW1hbmQuIFRoaXMKICAgIHdpbGwgYWxtb3N0IG5ldmVyIGJlIHRoZSBob3N0bmFtZSB5b3UgYWN0dWFsbHkgd2FudC48L3A+CiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgIGh0dHBkOiBDb3VsZCBub3QgcmVsaWFibHkgZGV0ZXJtaW5lIHRoZSBzZXJ2ZXIncyBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUsIHVzaW5nIHJvY2luYW50ZS5sb2NhbCBmb3IgU2VydmVyTmFtZQogICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgIDwvZGl2PgoKCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxhIGhyZWY9Ii4uL2Rucy1jYXZlYXRzLmh0bWwiPklzc3VlcyBSZWdhcmRpbmcgRE5TIGFuZAogICAgQXBhY2hlIEhUVFAgU2VydmVyPC9hPjwvbGk+CjxsaT48YSBocmVmPSIuLi92aG9zdHMvIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgdmlydHVhbCBob3N0CiAgICBkb2N1bWVudGF0aW9uPC9hPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjdXNlY2Fub25pY2FsbmFtZSI+VXNlQ2Fub25pY2FsTmFtZTwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN1c2VjYW5vbmljYWxwaHlzaWNhbHBvcnQiPlVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydDwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJhbGlhcyI+U2VydmVyQWxpYXM8L2E+PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXJ2ZXJQYXRoIiBpZD0iU2VydmVyUGF0aCI+U2VydmVyUGF0aDwvYT4gPGEgbmFtZT0ic2VydmVycGF0aCIgaWQ9InNlcnZlcnBhdGgiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkxlZ2FjeSBVUkwgcGF0aG5hbWUgZm9yIGEgbmFtZS1iYXNlZCB2aXJ0dWFsIGhvc3QgdGhhdAppcyBhY2Nlc3NlZCBieSBhbiBpbmNvbXBhdGlibGUgYnJvd3NlcjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXJ2ZXJQYXRoIDx2YXI+VVJMLXBhdGg8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+dmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJQYXRoPC9jb2RlPiBkaXJlY3RpdmUgc2V0cyB0aGUgbGVnYWN5CiAgICBVUkwgcGF0aG5hbWUgZm9yIGEgaG9zdCwgZm9yIHVzZSB3aXRoIDxhIGhyZWY9Ii4uL3Zob3N0cy8iPm5hbWUtYmFzZWQgdmlydHVhbCBob3N0czwvYT4uPC9wPgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iLi4vdmhvc3RzLyI+QXBhY2hlIEhUVFAgU2VydmVyIFZpcnR1YWwgSG9zdCBkb2N1bWVudGF0aW9uPC9hPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXJ2ZXJSb290IiBpZD0iU2VydmVyUm9vdCI+U2VydmVyUm9vdDwvYT4gPGEgbmFtZT0ic2VydmVycm9vdCIgaWQ9InNlcnZlcnJvb3QiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkJhc2UgZGlyZWN0b3J5IGZvciB0aGUgc2VydmVyIGluc3RhbGxhdGlvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXJ2ZXJSb290IDx2YXI+ZGlyZWN0b3J5LXBhdGg8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2VydmVyUm9vdCAvdXNyL2xvY2FsL2FwYWNoZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJSb290PC9jb2RlPiBkaXJlY3RpdmUgc2V0cyB0aGUKICAgIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgc2VydmVyIGxpdmVzLiBUeXBpY2FsbHkgaXQgd2lsbCBjb250YWluIHRoZQogICAgc3ViZGlyZWN0b3JpZXMgPGNvZGU+Y29uZi88L2NvZGU+IGFuZCA8Y29kZT5sb2dzLzwvY29kZT4uIFJlbGF0aXZlCiAgICBwYXRocyBpbiBvdGhlciBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMgKHN1Y2ggYXMgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2luY2x1ZGUiPkluY2x1ZGU8L2E+PC9jb2RlPiBvciA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NvLmh0bWwjbG9hZG1vZHVsZSI+TG9hZE1vZHVsZTwvYT48L2NvZGU+LCBmb3IgZXhhbXBsZSkgYXJlIHRha2VuIGFzCiAgICByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS48L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPlNlcnZlclJvb3QgIi9ob21lL2h0dHBkIjwvcHJlPgoKCiAgICA8cD5UaGUgZGVmYXVsdCBsb2NhdGlvbiBvZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJSb290PC9jb2RlPiBtYXkgYmUKICAgIG1vZGlmaWVkIGJ5IHVzaW5nIHRoZSA8Y29kZT4tLXByZWZpeDwvY29kZT4gYXJndW1lbnQgdG8KICAgIDxhIGhyZWY9Ii4uL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIj48Y29kZT5jb25maWd1cmU8L2NvZGU+PC9hPiwgYW5kCiAgICBtb3N0IHRoaXJkLXBhcnR5IGRpc3RyaWJ1dGlvbnMgb2YgdGhlIHNlcnZlciBoYXZlIGEgZGlmZmVyZW50CiAgICBkZWZhdWx0IGxvY2F0aW9uIGZyb20gdGhlIG9uZSBsaXN0ZWQgYWJvdmUuPC9wPgoKCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxhIGhyZWY9Ii4uL2ludm9raW5nLmh0bWwiPnRoZSA8Y29kZT4tZDwvY29kZT4KICAgIG9wdGlvbiB0byA8Y29kZT5odHRwZDwvY29kZT48L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL21pc2Mvc2VjdXJpdHlfdGlwcy5odG1sI3NlcnZlcnJvb3QiPnRoZQogICAgc2VjdXJpdHkgdGlwczwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBwcm9wZXJseSBzZXQKICAgIHBlcm1pc3Npb25zIG9uIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJSb290PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXJ2ZXJTaWduYXR1cmUiIGlkPSJTZXJ2ZXJTaWduYXR1cmUiPlNlcnZlclNpZ25hdHVyZTwvYT4gPGEgbmFtZT0ic2VydmVyc2lnbmF0dXJlIiBpZD0ic2VydmVyc2lnbmF0dXJlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db25maWd1cmVzIHRoZSBmb290ZXIgb24gc2VydmVyLWdlbmVyYXRlZCBkb2N1bWVudHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2VydmVyU2lnbmF0dXJlIE9ufE9mZnxFTWFpbDwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5TZXJ2ZXJTaWduYXR1cmUgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2VydmVyU2lnbmF0dXJlPC9jb2RlPiBkaXJlY3RpdmUgYWxsb3dzIHRoZQogICAgY29uZmlndXJhdGlvbiBvZiBhIHRyYWlsaW5nIGZvb3RlciBsaW5lIHVuZGVyIHNlcnZlci1nZW5lcmF0ZWQKICAgIGRvY3VtZW50cyAoZXJyb3IgbWVzc2FnZXMsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT4gZnRwIGRpcmVjdG9yeQogICAgbGlzdGluZ3MsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5mby5odG1sIj5tb2RfaW5mbzwvYT48L2NvZGU+IG91dHB1dCwgLi4uKS4gVGhlIHJlYXNvbiB3aHkgeW91CiAgICB3b3VsZCB3YW50IHRvIGVuYWJsZSBzdWNoIGEgZm9vdGVyIGxpbmUgaXMgdGhhdCBpbiBhIGNoYWluIG9mIHByb3hpZXMsCiAgICB0aGUgdXNlciBvZnRlbiBoYXMgbm8gcG9zc2liaWxpdHkgdG8gdGVsbCB3aGljaCBvZiB0aGUgY2hhaW5lZCBzZXJ2ZXJzCiAgICBhY3R1YWxseSBwcm9kdWNlZCBhIHJldHVybmVkIGVycm9yIG1lc3NhZ2UuPC9wPgoKICAgIDxwPlRoZSA8Y29kZT5PZmY8L2NvZGU+CiAgICBzZXR0aW5nLCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgc3VwcHJlc3NlcyB0aGUgZm9vdGVyIGxpbmUgKGFuZCBpcwogICAgdGhlcmVmb3JlIGNvbXBhdGlibGUgd2l0aCB0aGUgYmVoYXZpb3Igb2YgQXBhY2hlLTEuMiBhbmQKICAgIGJlbG93KS4gVGhlIDxjb2RlPk9uPC9jb2RlPiBzZXR0aW5nIHNpbXBseSBhZGRzIGEgbGluZSB3aXRoIHRoZQogICAgc2VydmVyIHZlcnNpb24gbnVtYmVyIGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVybmFtZSI+U2VydmVyTmFtZTwvYT48L2NvZGU+IG9mIHRoZSBzZXJ2aW5nIHZpcnR1YWwgaG9zdCwKICAgIGFuZCB0aGUgPGNvZGU+RU1haWw8L2NvZGU+IHNldHRpbmcgYWRkaXRpb25hbGx5IGNyZWF0ZXMgYQogICAgIm1haWx0bzoiIHJlZmVyZW5jZSB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NlcnZlcmFkbWluIj5TZXJ2ZXJBZG1pbjwvYT48L2NvZGU+IG9mIHRoZSByZWZlcmVuY2VkCiAgICBkb2N1bWVudC48L3A+CgogICAgPHA+QWZ0ZXIgdmVyc2lvbiAyLjAuNDQsIHRoZSBkZXRhaWxzIG9mIHRoZSBzZXJ2ZXIgdmVyc2lvbiBudW1iZXIKICAgIHByZXNlbnRlZCBhcmUgY29udHJvbGxlZCBieSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NlcnZlcnRva2VucyI+U2VydmVyVG9rZW5zPC9hPjwvY29kZT4gZGlyZWN0aXZlLjwvcD4KCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJ0b2tlbnMiPlNlcnZlclRva2VuczwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlNlcnZlclRva2VucyIgaWQ9IlNlcnZlclRva2VucyI+U2VydmVyVG9rZW5zPC9hPiA8YSBuYW1lPSJzZXJ2ZXJ0b2tlbnMiIGlkPSJzZXJ2ZXJ0b2tlbnMiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbmZpZ3VyZXMgdGhlIDxjb2RlPlNlcnZlcjwvY29kZT4gSFRUUCByZXNwb25zZQpoZWFkZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2VydmVyVG9rZW5zIE1ham9yfE1pbm9yfE1pbltpbWFsXXxQcm9kW3VjdE9ubHldfE9TfEZ1bGw8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2VydmVyVG9rZW5zIEZ1bGw8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBjb250cm9scyB3aGV0aGVyIDxjb2RlPlNlcnZlcjwvY29kZT4gcmVzcG9uc2UKICAgIGhlYWRlciBmaWVsZCB3aGljaCBpcyBzZW50IGJhY2sgdG8gY2xpZW50cyBpbmNsdWRlcyBhCiAgICBkZXNjcmlwdGlvbiBvZiB0aGUgZ2VuZXJpYyBPUy10eXBlIG9mIHRoZSBzZXJ2ZXIgYXMgd2VsbCBhcwogICAgaW5mb3JtYXRpb24gYWJvdXQgY29tcGlsZWQtaW4gbW9kdWxlcy48L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+U2VydmVyVG9rZW5zIEZ1bGw8L2NvZGU+IChvciBub3Qgc3BlY2lmaWVkKTwvZHQ+CgogICAgICA8ZGQ+U2VydmVyIHNlbmRzICg8ZW0+ZS5nLjwvZW0+KTogPGNvZGU+U2VydmVyOiBBcGFjaGUvMi40LjIKICAgICAgKFVuaXgpIFBIUC80LjIuMiBNeU1vZC8xLjI8L2NvZGU+PC9kZD4KCiAgICAgIDxkdD48Y29kZT5TZXJ2ZXJUb2tlbnMgUHJvZFt1Y3RPbmx5XTwvY29kZT48L2R0PgoKICAgICAgPGRkPlNlcnZlciBzZW5kcyAoPGVtPmUuZy48L2VtPik6IDxjb2RlPlNlcnZlcjoKICAgICAgQXBhY2hlPC9jb2RlPjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+U2VydmVyVG9rZW5zIE1ham9yPC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+U2VydmVyIHNlbmRzICg8ZW0+ZS5nLjwvZW0+KTogPGNvZGU+U2VydmVyOgogICAgICBBcGFjaGUvMjwvY29kZT48L2RkPgoKICAgICAgPGR0Pjxjb2RlPlNlcnZlclRva2VucyBNaW5vcjwvY29kZT48L2R0PgoKICAgICAgPGRkPlNlcnZlciBzZW5kcyAoPGVtPmUuZy48L2VtPik6IDxjb2RlPlNlcnZlcjoKICAgICAgQXBhY2hlLzIuNDwvY29kZT48L2RkPgoKICAgICAgPGR0Pjxjb2RlPlNlcnZlclRva2VucyBNaW5baW1hbF08L2NvZGU+PC9kdD4KCiAgICAgIDxkZD5TZXJ2ZXIgc2VuZHMgKDxlbT5lLmcuPC9lbT4pOiA8Y29kZT5TZXJ2ZXI6CiAgICAgIEFwYWNoZS8yLjQuMjwvY29kZT48L2RkPgoKICAgICAgPGR0Pjxjb2RlPlNlcnZlclRva2VucyBPUzwvY29kZT48L2R0PgoKICAgICAgPGRkPlNlcnZlciBzZW5kcyAoPGVtPmUuZy48L2VtPik6IDxjb2RlPlNlcnZlcjogQXBhY2hlLzIuNC4yCiAgICAgIChVbml4KTwvY29kZT48L2RkPgoKICAgIDwvZGw+CgogICAgPHA+VGhpcyBzZXR0aW5nIGFwcGxpZXMgdG8gdGhlIGVudGlyZSBzZXJ2ZXIsIGFuZCBjYW5ub3QgYmUKICAgIGVuYWJsZWQgb3IgZGlzYWJsZWQgb24gYSB2aXJ0dWFsaG9zdC1ieS12aXJ0dWFsaG9zdCBiYXNpcy48L3A+CgogICAgPHA+QWZ0ZXIgdmVyc2lvbiAyLjAuNDQsIHRoaXMgZGlyZWN0aXZlIGFsc28gY29udHJvbHMgdGhlCiAgICBpbmZvcm1hdGlvbiBwcmVzZW50ZWQgYnkgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJzaWduYXR1cmUiPlNlcnZlclNpZ25hdHVyZTwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+U2V0dGluZyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXJ2ZXJUb2tlbnM8L2NvZGU+IHRvIGxlc3MgdGhhbgogICAgPGNvZGU+bWluaW1hbDwvY29kZT4gaXMgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UgaXQgbWFrZXMgaXQgbW9yZQogICAgZGlmZmljdWx0IHRvIGRlYnVnIGludGVyb3BlcmF0aW9uYWwgcHJvYmxlbXMuIEFsc28gbm90ZSB0aGF0CiAgICBkaXNhYmxpbmcgdGhlIFNlcnZlcjogaGVhZGVyIGRvZXMgbm90aGluZyBhdCBhbGwgdG8gbWFrZSB5b3VyCiAgICBzZXJ2ZXIgbW9yZSBzZWN1cmUuIFRoZSBpZGVhIG9mICJzZWN1cml0eSB0aHJvdWdoIG9ic2N1cml0eSIKICAgIGlzIGEgbXl0aCBhbmQgbGVhZHMgdG8gYSBmYWxzZSBzZW5zZSBvZiBzYWZldHkuPC9kaXY+CgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NlcnZlcnNpZ25hdHVyZSI+U2VydmVyU2lnbmF0dXJlPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU2V0SGFuZGxlciIgaWQ9IlNldEhhbmRsZXIiPlNldEhhbmRsZXI8L2E+IDxhIG5hbWU9InNldGhhbmRsZXIiIGlkPSJzZXRoYW5kbGVyIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3JjZXMgYWxsIG1hdGNoaW5nIGZpbGVzIHRvIGJlIHByb2Nlc3NlZCBieSBhCmhhbmRsZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2V0SGFuZGxlciA8dmFyPmhhbmRsZXItbmFtZTwvdmFyPnxub25lfDx2YXI+ZXhwcmVzc2lvbjwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5GaWxlSW5mbzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5leHByZXNzaW9uIGFyZ3VtZW50IDIuNC4xOSBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5XaGVuIHBsYWNlZCBpbnRvIGFuIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZSBvciBhCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+IG9yCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9jYXRpb24iPiZsdDtMb2NhdGlvbiZndDs8L2E+PC9jb2RlPgogICAgc2VjdGlvbiwgdGhpcyBkaXJlY3RpdmUgZm9yY2VzIGFsbCBtYXRjaGluZyBmaWxlcyB0byBiZSBwYXJzZWQKICAgIHRocm91Z2ggdGhlIDxhIGhyZWY9Ii4uL2hhbmRsZXIuaHRtbCI+aGFuZGxlcjwvYT4gZ2l2ZW4gYnkKICAgIDx2YXI+aGFuZGxlci1uYW1lPC92YXI+LiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIGRpcmVjdG9yeSB5b3UKICAgIHdhbnRlZCB0byBiZSBwYXJzZWQgZW50aXJlbHkgYXMgaW1hZ2VtYXAgcnVsZSBmaWxlcywgcmVnYXJkbGVzcwogICAgb2YgZXh0ZW5zaW9uLCB5b3UgbWlnaHQgcHV0IHRoZSBmb2xsb3dpbmcgaW50byBhbgogICAgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlIGluIHRoYXQgZGlyZWN0b3J5OjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+U2V0SGFuZGxlciBpbWFwLWZpbGU8L3ByZT4KCgogICAgPHA+QW5vdGhlciBleGFtcGxlOiBpZiB5b3Ugd2FudGVkIHRvIGhhdmUgdGhlIHNlcnZlciBkaXNwbGF5IGEKICAgIHN0YXR1cyByZXBvcnQgd2hlbmV2ZXIgYSBVUkwgb2YKICAgIDxjb2RlPmh0dHA6Ly9zZXJ2ZXJuYW1lL3N0YXR1czwvY29kZT4gd2FzIGNhbGxlZCwgeW91IG1pZ2h0IHB1dAogICAgdGhlIGZvbGxvd2luZyBpbnRvIDxjb2RlPmh0dHBkLmNvbmY8L2NvZGU+OjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0xvY2F0aW9uICIvc3RhdHVzIiZndDsKICBTZXRIYW5kbGVyIHNlcnZlci1zdGF0dXMKJmx0Oy9Mb2NhdGlvbiZndDs8L3ByZT4KCgogICAgPHA+WW91IGNvdWxkIGFsc28gdXNlIHRoaXMgZGlyZWN0aXZlIHRvIGNvbmZpZ3VyZSBhIHBhcnRpY3VsYXIKICAgIGhhbmRsZXIgZm9yIGZpbGVzIHdpdGggYSBwYXJ0aWN1bGFyIGZpbGUgZXh0ZW5zaW9uLiBGb3IgZXhhbXBsZTo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtGaWxlc01hdGNoICJcLnBocCQiJmd0OwogICAgU2V0SGFuZGxlciBhcHBsaWNhdGlvbi94LWh0dHBkLXBocAombHQ7L0ZpbGVzTWF0Y2gmZ3Q7PC9wcmU+CgoKICAgIDxwPlN0cmluZy12YWx1ZWQgZXhwcmVzc2lvbnMgY2FuIGJlIHVzZWQgdG8gcmVmZXJlbmNlIHBlci1yZXF1ZXN0IAogICAgdmFyaWFibGVzLCBpbmNsdWRpbmcgYmFja3JlZmVyZW5jZXMgdG8gbmFtZWQgcmVndWxhciBleHByZXNzaW9uczo8L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtMb2NhdGlvbk1hdGNoIF4vYXBwLyg/Jmx0O3N1YiZndDtbXi9dKykvJmd0OwogICAgIFNldEhhbmRsZXIgInByb3h5OnVuaXg6L3Zhci9ydW4vYXBwXyV7ZW52Ok1BVENIX3N1Yn0uc29ja3xmY2dpOi8vbG9jYWxob3N0OjgwODAiCiZsdDsvTG9jYXRpb25NYXRjaCZndDs8L3ByZT4KCgogICAgPHA+WW91IGNhbiBvdmVycmlkZSBhbiBlYXJsaWVyIGRlZmluZWQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2V0SGFuZGxlcjwvY29kZT4KICAgIGRpcmVjdGl2ZSBieSB1c2luZyB0aGUgdmFsdWUgPGNvZGU+Tm9uZTwvY29kZT4uPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgIDxwPkJlY2F1c2UgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2V0SGFuZGxlcjwvY29kZT4gb3ZlcnJpZGVzIGRlZmF1bHQgaGFuZGxlcnMsCiAgICBub3JtYWwgYmVoYXZpb3Igc3VjaCBhcyBoYW5kbGluZyBvZiBVUkxzIGVuZGluZyBpbiBhIHNsYXNoICgvKSBhcwogICAgZGlyZWN0b3JpZXMgb3IgaW5kZXggZmlsZXMgaXMgc3VwcHJlc3NlZC48L3A+PC9kaXY+Cgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCNhZGRoYW5kbGVyIj5BZGRIYW5kbGVyPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU2V0SW5wdXRGaWx0ZXIiIGlkPSJTZXRJbnB1dEZpbHRlciI+U2V0SW5wdXRGaWx0ZXI8L2E+IDxhIG5hbWU9InNldGlucHV0ZmlsdGVyIiBpZD0ic2V0aW5wdXRmaWx0ZXIiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlNldHMgdGhlIGZpbHRlcnMgdGhhdCB3aWxsIHByb2Nlc3MgY2xpZW50IHJlcXVlc3RzIGFuZCBQT1NUCmlucHV0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlNldElucHV0RmlsdGVyIDx2YXI+ZmlsdGVyPC92YXI+Wzs8dmFyPmZpbHRlcjwvdmFyPi4uLl08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+RmlsZUluZm88L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNldElucHV0RmlsdGVyPC9jb2RlPiBkaXJlY3RpdmUgc2V0cyB0aGUKICAgIGZpbHRlciBvciBmaWx0ZXJzIHdoaWNoIHdpbGwgcHJvY2VzcyBjbGllbnQgcmVxdWVzdHMgYW5kIFBPU1QKICAgIGlucHV0IHdoZW4gdGhleSBhcmUgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci4gVGhpcyBpcyBpbiBhZGRpdGlvbiB0bwogICAgYW55IGZpbHRlcnMgZGVmaW5lZCBlbHNld2hlcmUsIGluY2x1ZGluZyB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI2FkZGlucHV0ZmlsdGVyIj5BZGRJbnB1dEZpbHRlcjwvYT48L2NvZGU+CiAgICBkaXJlY3RpdmUuPC9wPgoKICAgIDxwPklmIG1vcmUgdGhhbiBvbmUgZmlsdGVyIGlzIHNwZWNpZmllZCwgdGhleSBtdXN0IGJlIHNlcGFyYXRlZAogICAgYnkgc2VtaWNvbG9ucyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBzaG91bGQgcHJvY2VzcyB0aGUKICAgIGNvbnRlbnQuPC9wPgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iLi4vZmlsdGVyLmh0bWwiPkZpbHRlcnM8L2E+IGRvY3VtZW50YXRpb248L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU2V0T3V0cHV0RmlsdGVyIiBpZD0iU2V0T3V0cHV0RmlsdGVyIj5TZXRPdXRwdXRGaWx0ZXI8L2E+IDxhIG5hbWU9InNldG91dHB1dGZpbHRlciIgaWQ9InNldG91dHB1dGZpbHRlciI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U2V0cyB0aGUgZmlsdGVycyB0aGF0IHdpbGwgcHJvY2VzcyByZXNwb25zZXMgZnJvbSB0aGUKc2VydmVyPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlNldE91dHB1dEZpbHRlciA8dmFyPmZpbHRlcjwvdmFyPls7PHZhcj5maWx0ZXI8L3Zhcj4uLi5dPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkZpbGVJbmZvPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXRPdXRwdXRGaWx0ZXI8L2NvZGU+IGRpcmVjdGl2ZSBzZXRzIHRoZSBmaWx0ZXJzCiAgICB3aGljaCB3aWxsIHByb2Nlc3MgcmVzcG9uc2VzIGZyb20gdGhlIHNlcnZlciBiZWZvcmUgdGhleSBhcmUKICAgIHNlbnQgdG8gdGhlIGNsaWVudC4gVGhpcyBpcyBpbiBhZGRpdGlvbiB0byBhbnkgZmlsdGVycyBkZWZpbmVkCiAgICBlbHNld2hlcmUsIGluY2x1ZGluZyB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI2FkZG91dHB1dGZpbHRlciI+QWRkT3V0cHV0RmlsdGVyPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZS48L3A+CgogICAgPHA+Rm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiB3aWxsIHByb2Nlc3MgYWxsIGZpbGVzCiAgICBpbiB0aGUgPGNvZGU+L3d3dy9kYXRhLzwvY29kZT4gZGlyZWN0b3J5IGZvciBzZXJ2ZXItc2lkZQogICAgaW5jbHVkZXMuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5ICIvd3d3L2RhdGEvIiZndDsKICBTZXRPdXRwdXRGaWx0ZXIgSU5DTFVERVMKJmx0Oy9EaXJlY3RvcnkmZ3Q7PC9wcmU+CgoKICAgIDxwPklmIG1vcmUgdGhhbiBvbmUgZmlsdGVyIGlzIHNwZWNpZmllZCwgdGhleSBtdXN0IGJlIHNlcGFyYXRlZAogICAgYnkgc2VtaWNvbG9ucyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBzaG91bGQgcHJvY2VzcyB0aGUKICAgIGNvbnRlbnQuPC9wPgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iLi4vZmlsdGVyLmh0bWwiPkZpbHRlcnM8L2E+IGRvY3VtZW50YXRpb248L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iVGltZU91dCIgaWQ9IlRpbWVPdXQiPlRpbWVPdXQ8L2E+IDxhIG5hbWU9InRpbWVvdXQiIGlkPSJ0aW1lb3V0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5BbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHdpbGwgd2FpdCBmb3IKY2VydGFpbiBldmVudHMgYmVmb3JlIGZhaWxpbmcgYSByZXF1ZXN0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlRpbWVPdXQgPHZhcj5zZWNvbmRzPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlRpbWVPdXQgNjA8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5UaW1lT3V0PC9jb2RlPiBkaXJlY3RpdmUgZGVmaW5lcyB0aGUgbGVuZ3RoCiAgICBvZiB0aW1lIEFwYWNoZSBodHRwZCB3aWxsIHdhaXQgZm9yIEkvTyBpbiB2YXJpb3VzIGNpcmN1bXN0YW5jZXM6PC9wPgoKICAgIDx1bD4KICAgICAgPGxpPjxwPldoZW4gcmVhZGluZyBkYXRhIGZyb20gdGhlIGNsaWVudCwgdGhlIGxlbmd0aCBvZiB0aW1lIHRvCiAgICAgIHdhaXQgZm9yIGEgVENQIHBhY2tldCB0byBhcnJpdmUgaWYgdGhlIHJlYWQgYnVmZmVyIGlzCiAgICAgIGVtcHR5LjwvcD4KICAgICAgPHA+IEZvciBpbml0aWFsIGRhdGEgb24gYSBuZXcgY29ubmVjdGlvbiwgdGhpcyBkaXJlY3RpdmUgZG9lc24ndAogICAgICB0YWtlIGVmZmVjdCB1bnRpbCBhZnRlciBhbnkgY29uZmlndXJlZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjYWNjZXB0ZmlsdGVyIj4KICAgICAgQWNjZXB0RmlsdGVyPC9hPjwvY29kZT4gaGFzIHBhc3NlZCB0aGUgbmV3IGNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlci48L3A+CiAgICAgIDwvbGk+CgogICAgICA8bGk+V2hlbiB3cml0aW5nIGRhdGEgdG8gdGhlIGNsaWVudCwgdGhlIGxlbmd0aCBvZiB0aW1lIHRvIHdhaXQKICAgICAgZm9yIGFuIGFja25vd2xlZGdlbWVudCBvZiBhIHBhY2tldCBpZiB0aGUgc2VuZCBidWZmZXIgaXMKICAgICAgZnVsbC48L2xpPgoKICAgICAgPGxpPkluIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2dpLmh0bWwiPm1vZF9jZ2k8L2E+PC9jb2RlPiwgdGhlIGxlbmd0aCBvZiB0aW1lIHRvIHdhaXQgZm9yCiAgICAgIG91dHB1dCBmcm9tIGEgQ0dJIHNjcmlwdC48L2xpPgoKICAgICAgPGxpPkluIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfZXh0X2ZpbHRlci5odG1sIj5tb2RfZXh0X2ZpbHRlcjwvYT48L2NvZGU+LCB0aGUgbGVuZ3RoIG9mIHRpbWUgdG8KICAgICAgd2FpdCBmb3Igb3V0cHV0IGZyb20gYSBmaWx0ZXJpbmcgcHJvY2Vzcy48L2xpPgoKICAgICAgPGxpPkluIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT4sIHRoZSBkZWZhdWx0IHRpbWVvdXQgdmFsdWUgaWYKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sI3Byb3h5dGltZW91dCI+UHJveHlUaW1lb3V0PC9hPjwvY29kZT4gaXMgbm90CiAgICAgIGNvbmZpZ3VyZWQuPC9saT4KICAgIDwvdWw+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlRyYWNlRW5hYmxlIiBpZD0iVHJhY2VFbmFibGUiPlRyYWNlRW5hYmxlPC9hPiA8YSBuYW1lPSJ0cmFjZWVuYWJsZSIgaWQ9InRyYWNlZW5hYmxlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZXRlcm1pbmVzIHRoZSBiZWhhdmlvciBvbiA8Y29kZT5UUkFDRTwvY29kZT4gcmVxdWVzdHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+VHJhY2VFbmFibGUgPHZhcj5bb258b2ZmfGV4dGVuZGVkXTwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5UcmFjZUVuYWJsZSBvbjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZiA8Y29kZT5UUkFDRTwvY29kZT4gZm9yIGJvdGgKICAgIHRoZSBjb3JlIHNlcnZlciBhbmQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPi4gIFRoZSBkZWZhdWx0CiAgICA8Y29kZT5UcmFjZUVuYWJsZSBvbjwvY29kZT4gcGVybWl0cyA8Y29kZT5UUkFDRTwvY29kZT4gcmVxdWVzdHMgcGVyCiAgICBSRkMgMjYxNiwgd2hpY2ggZGlzYWxsb3dzIGFueSByZXF1ZXN0IGJvZHkgdG8gYWNjb21wYW55IHRoZSByZXF1ZXN0LgogICAgPGNvZGU+VHJhY2VFbmFibGUgb2ZmPC9jb2RlPiBjYXVzZXMgdGhlIGNvcmUgc2VydmVyIGFuZAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPiB0byByZXR1cm4gYSA8Y29kZT40MDU8L2NvZGU+IChNZXRob2Qgbm90CiAgICBhbGxvd2VkKSBlcnJvciB0byB0aGUgY2xpZW50LjwvcD4KCiAgICA8cD5GaW5hbGx5LCBmb3IgdGVzdGluZyBhbmQgZGlhZ25vc3RpYyBwdXJwb3NlcyBvbmx5LCByZXF1ZXN0CiAgICBib2RpZXMgbWF5IGJlIGFsbG93ZWQgdXNpbmcgdGhlIG5vbi1jb21wbGlhbnQgPGNvZGU+VHJhY2VFbmFibGUKICAgIGV4dGVuZGVkPC9jb2RlPiBkaXJlY3RpdmUuICBUaGUgY29yZSAoYXMgYW4gb3JpZ2luIHNlcnZlcikgd2lsbAogICAgcmVzdHJpY3QgdGhlIHJlcXVlc3QgYm9keSB0byA2NGsgKHBsdXMgOGsgZm9yIGNodW5rIGhlYWRlcnMgaWYKICAgIDxjb2RlPlRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkPC9jb2RlPiBpcyB1c2VkKS4gIFRoZSBjb3JlIHdpbGwKICAgIHJlZmxlY3QgdGhlIGZ1bGwgaGVhZGVycyBhbmQgYWxsIGNodW5rIGhlYWRlcnMgd2l0aCB0aGUgcmVzcG9uc2UKICAgIGJvZHkuICBBcyBhIHByb3h5IHNlcnZlciwgdGhlIHJlcXVlc3QgYm9keSBpcyBub3QgcmVzdHJpY3RlZCB0byA2NGsuPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgIDxwPkRlc3BpdGUgY2xhaW1zIHRvIHRoZSBjb250cmFyeSwgPGNvZGU+VFJBQ0U8L2NvZGU+IGlzIG5vdAogICAgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LCBhbmQgdGhlcmUgaXMgbm8gdmlhYmxlIHJlYXNvbiBmb3IKICAgIGl0IHRvIGJlIGRpc2FibGVkLiBEb2luZyBzbyBuZWNlc3NhcmlseSBtYWtlcyB5b3VyIHNlcnZlcgogICAgbm9uY29tcGxpYW50LjwvcD4KICAgIDwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlVuRGVmaW5lIiBpZD0iVW5EZWZpbmUiPlVuRGVmaW5lPC9hPiA8YSBuYW1lPSJ1bmRlZmluZSIgaWQ9InVuZGVmaW5lIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5VbmRlZmluZSB0aGUgZXhpc3RlbmNlIG9mIGEgdmFyaWFibGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+VW5EZWZpbmUgPHZhcj5wYXJhbWV0ZXItbmFtZTwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlVuZG9lcyB0aGUgZWZmZWN0IG9mIGEgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2RlZmluZSI+RGVmaW5lPC9hPjwvY29kZT4gb3IKICAgIG9mIHBhc3NpbmcgYSA8Y29kZT4tRDwvY29kZT4gYXJndW1lbnQgdG8gPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4uPC9wPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgY2FuIGJlIHVzZWQgdG8gdG9nZ2xlIHRoZSB1c2Ugb2YgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2lmZGVmaW5lIj4mbHQ7SWZEZWZpbmUmZ3Q7PC9hPjwvY29kZT4gc2VjdGlvbnMgd2l0aG91dCBuZWVkaW5nIHRvIGFsdGVyCiAgICA8Y29kZT4tRDwvY29kZT4gYXJndW1lbnRzIGluIGFueSBzdGFydHVwIHNjcmlwdHMuPC9wPgogICAgPHA+V2hpbGUgdGhpcyBkaXJlY3RpdmUgaXMgc3VwcG9ydGVkIGluIHZpcnR1YWwgaG9zdCBjb250ZXh0LAogICAgICAgdGhlIGNoYW5nZXMgaXQgbWFrZXMgYXJlIHZpc2libGUgdG8gYW55IGxhdGVyIGNvbmZpZ3VyYXRpb24KICAgICAgIGRpcmVjdGl2ZXMsIGJleW9uZCBhbnkgZW5jbG9zaW5nIHZpcnR1YWwgaG9zdC48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iVXNlQ2Fub25pY2FsTmFtZSIgaWQ9IlVzZUNhbm9uaWNhbE5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+IDxhIG5hbWU9InVzZWNhbm9uaWNhbG5hbWUiIGlkPSJ1c2VjYW5vbmljYWxuYW1lIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db25maWd1cmVzIGhvdyB0aGUgc2VydmVyIGRldGVybWluZXMgaXRzIG93biBuYW1lIGFuZApwb3J0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlVzZUNhbm9uaWNhbE5hbWUgT258T2ZmfEROUzwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Vc2VDYW5vbmljYWxOYW1lIE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5Db3JlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPmNvcmU8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5JbiBtYW55IHNpdHVhdGlvbnMgQXBhY2hlIGh0dHBkIG11c3QgY29uc3RydWN0IGEgPGVtPnNlbGYtcmVmZXJlbnRpYWw8L2VtPgogICAgVVJMIC0tIHRoYXQgaXMsIGEgVVJMIHRoYXQgcmVmZXJzIGJhY2sgdG8gdGhlIHNhbWUgc2VydmVyLiBXaXRoCiAgICA8Y29kZT5Vc2VDYW5vbmljYWxOYW1lIE9uPC9jb2RlPiBBcGFjaGUgaHR0cGQgd2lsbCB1c2UgdGhlIGhvc3RuYW1lIGFuZCBwb3J0CiAgICBzcGVjaWZpZWQgaW4gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJuYW1lIj5TZXJ2ZXJOYW1lPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSB0byBjb25zdHJ1Y3QgdGhlIGNhbm9uaWNhbCBuYW1lIGZvciB0aGUgc2VydmVyLiBUaGlzIG5hbWUKICAgIGlzIHVzZWQgaW4gYWxsIHNlbGYtcmVmZXJlbnRpYWwgVVJMcywgYW5kIGZvciB0aGUgdmFsdWVzIG9mCiAgICA8Y29kZT5TRVJWRVJfTkFNRTwvY29kZT4gYW5kIDxjb2RlPlNFUlZFUl9QT1JUPC9jb2RlPiBpbiBDR0lzLjwvcD4KCiAgICA8cD5XaXRoIDxjb2RlPlVzZUNhbm9uaWNhbE5hbWUgT2ZmPC9jb2RlPiBBcGFjaGUgaHR0cGQgd2lsbCBmb3JtCiAgICBzZWxmLXJlZmVyZW50aWFsIFVSTHMgdXNpbmcgdGhlIGhvc3RuYW1lIGFuZCBwb3J0IHN1cHBsaWVkIGJ5CiAgICB0aGUgY2xpZW50IGlmIGFueSBhcmUgc3VwcGxpZWQgKG90aGVyd2lzZSBpdCB3aWxsIHVzZSB0aGUKICAgIGNhbm9uaWNhbCBuYW1lLCBhcyBkZWZpbmVkIGFib3ZlKS4gVGhlc2UgdmFsdWVzIGFyZSB0aGUgc2FtZQogICAgdGhhdCBhcmUgdXNlZCB0byBpbXBsZW1lbnQgPGEgaHJlZj0iLi4vdmhvc3RzL25hbWUtYmFzZWQuaHRtbCI+bmFtZS1iYXNlZCB2aXJ0dWFsIGhvc3RzPC9hPgogICAgYW5kIGFyZSBhdmFpbGFibGUgd2l0aCB0aGUgc2FtZSBjbGllbnRzLiBUaGUgQ0dJIHZhcmlhYmxlcwogICAgPGNvZGU+U0VSVkVSX05BTUU8L2NvZGU+IGFuZCA8Y29kZT5TRVJWRVJfUE9SVDwvY29kZT4gd2lsbCBiZQogICAgY29uc3RydWN0ZWQgZnJvbSB0aGUgY2xpZW50IHN1cHBsaWVkIHZhbHVlcyBhcyB3ZWxsLjwvcD4KCiAgICA8cD5BbiBleGFtcGxlIHdoZXJlIHRoaXMgbWF5IGJlIHVzZWZ1bCBpcyBvbiBhbiBpbnRyYW5ldCBzZXJ2ZXIKICAgIHdoZXJlIHlvdSBoYXZlIHVzZXJzIGNvbm5lY3RpbmcgdG8gdGhlIG1hY2hpbmUgdXNpbmcgc2hvcnQKICAgIG5hbWVzIHN1Y2ggYXMgPGNvZGU+d3d3PC9jb2RlPi4gWW91J2xsIG5vdGljZSB0aGF0IGlmIHRoZSB1c2VycwogICAgdHlwZSBhIHNob3J0bmFtZSBhbmQgYSBVUkwgd2hpY2ggaXMgYSBkaXJlY3RvcnksIHN1Y2ggYXMKICAgIDxjb2RlPmh0dHA6Ly93d3cvc3BsYXQ8L2NvZGU+LCA8ZW0+d2l0aG91dCB0aGUgdHJhaWxpbmcKICAgIHNsYXNoPC9lbT4sIHRoZW4gQXBhY2hlIGh0dHBkIHdpbGwgcmVkaXJlY3QgdGhlbSB0bwogICAgPGNvZGU+aHR0cDovL3d3dy5leGFtcGxlLmNvbS9zcGxhdC88L2NvZGU+LiBJZiB5b3UgaGF2ZQogICAgYXV0aGVudGljYXRpb24gZW5hYmxlZCwgdGhpcyB3aWxsIGNhdXNlIHRoZSB1c2VyIHRvIGhhdmUgdG8KICAgIGF1dGhlbnRpY2F0ZSB0d2ljZSAob25jZSBmb3IgPGNvZGU+d3d3PC9jb2RlPiBhbmQgb25jZSBhZ2FpbgogICAgZm9yIDxjb2RlPnd3dy5leGFtcGxlLmNvbTwvY29kZT4gLS0gc2VlIDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRI1doeV9kb2VzX0FwYWNoZV9hc2tfZm9yX215X3Bhc3N3b3JkX3R3aWNlX2JlZm9yZV9zZXJ2aW5nX2FfZmlsZS4zRiI+CiAgICB0aGUgRkFRIG9uIHRoaXMgc3ViamVjdCBmb3IgbW9yZSBpbmZvcm1hdGlvbjwvYT4pLiBCdXQgaWYKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlVzZUNhbm9uaWNhbE5hbWU8L2NvZGU+IGlzIHNldCA8Y29kZT5PZmY8L2NvZGU+LCB0aGVuCiAgICBBcGFjaGUgaHR0cGQgd2lsbCByZWRpcmVjdCB0byA8Y29kZT5odHRwOi8vd3d3L3NwbGF0LzwvY29kZT4uPC9wPgoKICAgIDxwPlRoZXJlIGlzIGEgdGhpcmQgb3B0aW9uLCA8Y29kZT5Vc2VDYW5vbmljYWxOYW1lIEROUzwvY29kZT4sCiAgICB3aGljaCBpcyBpbnRlbmRlZCBmb3IgdXNlIHdpdGggbWFzcyBJUC1iYXNlZCB2aXJ0dWFsIGhvc3RpbmcgdG8KICAgIHN1cHBvcnQgYW5jaWVudCBjbGllbnRzIHRoYXQgZG8gbm90IHByb3ZpZGUgYQogICAgPGNvZGU+SG9zdDo8L2NvZGU+IGhlYWRlci4gV2l0aCB0aGlzIG9wdGlvbiwgQXBhY2hlIGh0dHBkIGRvZXMgYQogICAgcmV2ZXJzZSBETlMgbG9va3VwIG9uIHRoZSBzZXJ2ZXIgSVAgYWRkcmVzcyB0aGF0IHRoZSBjbGllbnQKICAgIGNvbm5lY3RlZCB0byBpbiBvcmRlciB0byB3b3JrIG91dCBzZWxmLXJlZmVyZW50aWFsIFVSTHMuPC9wPgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgIDxwPklmIENHSXMgbWFrZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgdmFsdWVzIG9mIDxjb2RlPlNFUlZFUl9OQU1FPC9jb2RlPiwKICAgIHRoZXkgbWF5IGJlIGJyb2tlbiBieSB0aGlzIG9wdGlvbi4gVGhlIGNsaWVudCBpcyBlc3NlbnRpYWxseSBmcmVlCiAgICB0byBnaXZlIHdoYXRldmVyIHZhbHVlIHRoZXkgd2FudCBhcyBhIGhvc3RuYW1lLiBCdXQgaWYgdGhlIENHSSBpcwogICAgb25seSB1c2luZyA8Y29kZT5TRVJWRVJfTkFNRTwvY29kZT4gdG8gY29uc3RydWN0IHNlbGYtcmVmZXJlbnRpYWwgVVJMcywKICAgIHRoZW4gaXQgc2hvdWxkIGJlIGp1c3QgZmluZS48L3A+CiAgICA8L2Rpdj4KCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN1c2VjYW5vbmljYWxwaHlzaWNhbHBvcnQiPlVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydDwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJuYW1lIj5TZXJ2ZXJOYW1lPC9hPjwvY29kZT48L2xpPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21wbV9jb21tb24uaHRtbCNsaXN0ZW4iPkxpc3RlbjwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydCIgaWQ9IlVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydCI+VXNlQ2Fub25pY2FsUGh5c2ljYWxQb3J0PC9hPiA8YSBuYW1lPSJ1c2VjYW5vbmljYWxwaHlzaWNhbHBvcnQiIGlkPSJ1c2VjYW5vbmljYWxwaHlzaWNhbHBvcnQiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbmZpZ3VyZXMgaG93IHRoZSBzZXJ2ZXIgZGV0ZXJtaW5lcyBpdHMgb3duIHBvcnQ8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+VXNlQ2Fub25pY2FsUGh5c2ljYWxQb3J0IE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Vc2VDYW5vbmljYWxQaHlzaWNhbFBvcnQgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkNvcmU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+Y29yZTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPkluIG1hbnkgc2l0dWF0aW9ucyBBcGFjaGUgaHR0cGQgbXVzdCBjb25zdHJ1Y3QgYSA8ZW0+c2VsZi1yZWZlcmVudGlhbDwvZW0+CiAgICBVUkwgLS0gdGhhdCBpcywgYSBVUkwgdGhhdCByZWZlcnMgYmFjayB0byB0aGUgc2FtZSBzZXJ2ZXIuIFdpdGgKICAgIDxjb2RlPlVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydCBPbjwvY29kZT4sIEFwYWNoZSBodHRwZCB3aWxsLCB3aGVuCiAgICBjb25zdHJ1Y3RpbmcgdGhlIGNhbm9uaWNhbCBwb3J0IGZvciB0aGUgc2VydmVyIHRvIGhvbm9yCiAgICB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPiBkaXJlY3RpdmUsCiAgICBwcm92aWRlIHRoZSBhY3R1YWwgcGh5c2ljYWwgcG9ydCBudW1iZXIgYmVpbmcgdXNlZCBieSB0aGlzIHJlcXVlc3QKICAgIGFzIGEgcG90ZW50aWFsIHBvcnQuIFdpdGggPGNvZGU+VXNlQ2Fub25pY2FsUGh5c2ljYWxQb3J0IE9mZjwvY29kZT4sCiAgICBBcGFjaGUgaHR0cGQgd2lsbCBub3QgZXZlciB1c2UgdGhlIGFjdHVhbCBwaHlzaWNhbCBwb3J0IG51bWJlciwgaW5zdGVhZAogICAgcmVseWluZyBvbiBhbGwgY29uZmlndXJlZCBpbmZvcm1hdGlvbiB0byBjb25zdHJ1Y3QgYSB2YWxpZCBwb3J0IG51bWJlci48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgPHA+VGhlIG9yZGVyaW5nIG9mIHRoZSBsb29rdXAgd2hlbiB0aGUgcGh5c2ljYWwgcG9ydCBpcyB1c2VkIGlzIGFzCiAgICBmb2xsb3dzOjwvcD4KICAgICA8ZGw+CiAgICAgPGR0Pjxjb2RlPlVzZUNhbm9uaWNhbE5hbWUgT248L2NvZGU+PC9kdD4KICAgICA8ZGQ+CiAgICAgPG9sPgogICAgICA8bGk+UG9ydCBwcm92aWRlZCBpbiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVybmFtZSI+U2VydmVybmFtZTwvYT48L2NvZGU+PC9saT4KICAgICAgPGxpPlBoeXNpY2FsIHBvcnQ8L2xpPgogICAgICA8bGk+RGVmYXVsdCBwb3J0PC9saT4KICAgICA8L29sPgogICAgIDwvZGQ+CiAgICAgPGR0Pjxjb2RlPlVzZUNhbm9uaWNhbE5hbWUgT2ZmIHwgRE5TPC9jb2RlPjwvZHQ+CiAgICAgPGRkPgogICAgIDxvbD4KICAgICAgPGxpPlBhcnNlZCBwb3J0IGZyb20gPGNvZGU+SG9zdDo8L2NvZGU+IGhlYWRlcjwvbGk+CiAgICAgIDxsaT5QaHlzaWNhbCBwb3J0PC9saT4KICAgICAgPGxpPlBvcnQgcHJvdmlkZWQgaW4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3NlcnZlcm5hbWUiPlNlcnZlcm5hbWU8L2E+PC9jb2RlPjwvbGk+CiAgICAgIDxsaT5EZWZhdWx0IHBvcnQ8L2xpPgogICAgIDwvb2w+CiAgICAgPC9kZD4KICAgICA8L2RsPgoKICAgIDxwPldpdGggPGNvZGU+VXNlQ2Fub25pY2FsUGh5c2ljYWxQb3J0IE9mZjwvY29kZT4sIHRoZQogICAgcGh5c2ljYWwgcG9ydHMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgb3JkZXJpbmcuPC9wPgogICAgPC9kaXY+CgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVybmFtZSI+U2VydmVyTmFtZTwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tcG1fY29tbW9uLmh0bWwjbGlzdGVuIj5MaXN0ZW48L2E+PC9jb2RlPjwvbGk+CjwvdWw+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJWaXJ0dWFsSG9zdCIgaWQ9IlZpcnR1YWxIb3N0Ij4mbHQ7VmlydHVhbEhvc3QmZ3Q7PC9hPiA8YSBuYW1lPSJ2aXJ0dWFsaG9zdCIgaWQ9InZpcnR1YWxob3N0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db250YWlucyBkaXJlY3RpdmVzIHRoYXQgYXBwbHkgb25seSB0byBhIHNwZWNpZmljCmhvc3RuYW1lIG9yIElQIGFkZHJlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Jmx0O1ZpcnR1YWxIb3N0CiAgICA8dmFyPmFkZHI8L3Zhcj5bOjx2YXI+cG9ydDwvdmFyPl0gWzx2YXI+YWRkcjwvdmFyPls6PHZhcj5wb3J0PC92YXI+XV0KICAgIC4uLiZndDsgLi4uICZsdDsvVmlydHVhbEhvc3QmZ3Q7PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+Q29yZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5jb3JlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvY29kZT4gYW5kCiAgICA8Y29kZT4mbHQ7L1ZpcnR1YWxIb3N0Jmd0OzwvY29kZT4gYXJlIHVzZWQgdG8gZW5jbG9zZSBhIGdyb3VwIG9mCiAgICBkaXJlY3RpdmVzIHRoYXQgd2lsbCBhcHBseSBvbmx5IHRvIGEgcGFydGljdWxhciB2aXJ0dWFsIGhvc3QuIEFueQogICAgZGlyZWN0aXZlIHRoYXQgaXMgYWxsb3dlZCBpbiBhIHZpcnR1YWwgaG9zdCBjb250ZXh0IG1heSBiZQogICAgdXNlZC4gV2hlbiB0aGUgc2VydmVyIHJlY2VpdmVzIGEgcmVxdWVzdCBmb3IgYSBkb2N1bWVudCBvbiBhCiAgICBwYXJ0aWN1bGFyIHZpcnR1YWwgaG9zdCwgaXQgdXNlcyB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzCiAgICBlbmNsb3NlZCBpbiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvY29kZT4KICAgIHNlY3Rpb24uIDx2YXI+QWRkcjwvdmFyPiBjYW4gYmUgYW55IG9mIHRoZSBmb2xsb3dpbmcsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkKICAgIGEgY29sb24gYW5kIGEgcG9ydCBudW1iZXIgKG9yICopOjwvcD4KCiAgICA8dWw+CiAgICAgIDxsaT5UaGUgSVAgYWRkcmVzcyBvZiB0aGUgdmlydHVhbCBob3N0OzwvbGk+CgogICAgICA8bGk+QSBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUgZm9yIHRoZSBJUCBhZGRyZXNzIG9mIHRoZQogICAgICB2aXJ0dWFsIGhvc3QgKG5vdCByZWNvbW1lbmRlZCk7PC9saT4KCiAgICAgIDxsaT5UaGUgY2hhcmFjdGVyIDxjb2RlPio8L2NvZGU+LCB3aGljaCBhY3RzIGFzIGEgd2lsZGNhcmQgYW5kIG1hdGNoZXMKICAgICAgYW55IElQIGFkZHJlc3MuPC9saT4KCiAgICAgIDxsaT5UaGUgc3RyaW5nIDxjb2RlPl9kZWZhdWx0XzwvY29kZT4sIHdoaWNoIGlzIGFuIGFsaWFzIGZvciA8Y29kZT4qPC9jb2RlPjwvbGk+CgogICAgPC91bD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O1ZpcnR1YWxIb3N0IDEwLjEuMi4zOjgwJmd0OwogIFNlcnZlckFkbWluIHdlYm1hc3RlckBob3N0LmV4YW1wbGUuY29tCiAgRG9jdW1lbnRSb290ICIvd3d3L2RvY3MvaG9zdC5leGFtcGxlLmNvbSIKICBTZXJ2ZXJOYW1lIGhvc3QuZXhhbXBsZS5jb20KICBFcnJvckxvZyAibG9ncy9ob3N0LmV4YW1wbGUuY29tLWVycm9yX2xvZyIKICBUcmFuc2ZlckxvZyAibG9ncy9ob3N0LmV4YW1wbGUuY29tLWFjY2Vzc19sb2ciCiZsdDsvVmlydHVhbEhvc3QmZ3Q7PC9wcmU+CgoKCiAgICA8cD5JUHY2IGFkZHJlc3NlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiBzcXVhcmUgYnJhY2tldHMgYmVjYXVzZQogICAgdGhlIG9wdGlvbmFsIHBvcnQgbnVtYmVyIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkIG90aGVyd2lzZS4gIEFuCiAgICBJUHY2IGV4YW1wbGUgaXMgc2hvd24gYmVsb3c6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7VmlydHVhbEhvc3QgWzIwMDE6ZGI4OjphMDA6MjBmZjpmZWE3OmNjZWFdOjgwJmd0OwogIFNlcnZlckFkbWluIHdlYm1hc3RlckBob3N0LmV4YW1wbGUuY29tCiAgRG9jdW1lbnRSb290ICIvd3d3L2RvY3MvaG9zdC5leGFtcGxlLmNvbSIKICBTZXJ2ZXJOYW1lIGhvc3QuZXhhbXBsZS5jb20KICBFcnJvckxvZyAibG9ncy9ob3N0LmV4YW1wbGUuY29tLWVycm9yX2xvZyIKICBUcmFuc2ZlckxvZyAibG9ncy9ob3N0LmV4YW1wbGUuY29tLWFjY2Vzc19sb2ciCiZsdDsvVmlydHVhbEhvc3QmZ3Q7PC9wcmU+CgoKICAgIDxwPkVhY2ggVmlydHVhbCBIb3N0IG11c3QgY29ycmVzcG9uZCB0byBhIGRpZmZlcmVudCBJUCBhZGRyZXNzLAogICAgZGlmZmVyZW50IHBvcnQgbnVtYmVyLCBvciBhIGRpZmZlcmVudCBob3N0IG5hbWUgZm9yIHRoZSBzZXJ2ZXIsCiAgICBpbiB0aGUgZm9ybWVyIGNhc2UgdGhlIHNlcnZlciBtYWNoaW5lIG11c3QgYmUgY29uZmlndXJlZCB0bwogICAgYWNjZXB0IElQIHBhY2tldHMgZm9yIG11bHRpcGxlIGFkZHJlc3Nlcy4gKElmIHRoZSBtYWNoaW5lIGRvZXMKICAgIG5vdCBoYXZlIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcywgdGhlbiB0aGlzIGNhbiBiZQogICAgYWNjb21wbGlzaGVkIHdpdGggdGhlIDxjb2RlPmlmY29uZmlnIGFsaWFzPC9jb2RlPiBjb21tYW5kIC0tIGlmCiAgICB5b3VyIE9TIHN1cHBvcnRzIGl0KS48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgPHA+VGhlIHVzZSBvZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7VmlydHVhbEhvc3QmZ3Q7PC9jb2RlPiBkb2VzCiAgICA8c3Ryb25nPm5vdDwvc3Ryb25nPiBhZmZlY3Qgd2hhdCBhZGRyZXNzZXMgQXBhY2hlIGh0dHBkIGxpc3RlbnMgb24uIFlvdQogICAgbWF5IG5lZWQgdG8gZW5zdXJlIHRoYXQgQXBhY2hlIGh0dHBkIGlzIGxpc3RlbmluZyBvbiB0aGUgY29ycmVjdCBhZGRyZXNzZXMKICAgIHVzaW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tcG1fY29tbW9uLmh0bWwjbGlzdGVuIj5MaXN0ZW48L2E+PC9jb2RlPi48L3A+CiAgICA8L2Rpdj4KCiAgICA8cD5BIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzZXJ2ZXJuYW1lIj5TZXJ2ZXJOYW1lPC9hPjwvY29kZT4gc2hvdWxkIGJlCiAgICBzcGVjaWZpZWQgaW5zaWRlIGVhY2ggPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O1ZpcnR1YWxIb3N0Jmd0OzwvY29kZT4gYmxvY2suIElmIGl0IGlzIGFic2VudCwgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc2VydmVybmFtZSI+U2VydmVyTmFtZTwvYT48L2NvZGU+IGZyb20gdGhlICJtYWluIgogICAgc2VydmVyIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBpbmhlcml0ZWQuPC9wPgoKICAgIDxwPldoZW4gYSByZXF1ZXN0IGlzIHJlY2VpdmVkLCB0aGUgc2VydmVyIGZpcnN0IG1hcHMgaXQgdG8gdGhlIGJlc3QgbWF0Y2hpbmcKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPiZsdDtWaXJ0dWFsSG9zdCZndDs8L2NvZGU+IGJhc2VkIG9uIHRoZSBsb2NhbAogICAgSVAgYWRkcmVzcyBhbmQgcG9ydCBjb21iaW5hdGlvbiBvbmx5LiAgTm9uLXdpbGRjYXJkcyBoYXZlIGEgaGlnaGVyCiAgICBwcmVjZWRlbmNlLiBJZiBubyBtYXRjaCBiYXNlZCBvbiBJUCBhbmQgcG9ydCBvY2N1cnMgYXQgYWxsLCB0aGUKICAgICJtYWluIiBzZXJ2ZXIgY29uZmlndXJhdGlvbiBpcyB1c2VkLjwvcD4KCiAgICA8cD5JZiBtdWx0aXBsZSB2aXJ0dWFsIGhvc3RzIGNvbnRhaW4gdGhlIGJlc3QgbWF0Y2hpbmcgSVAgYWRkcmVzcyBhbmQgcG9ydCwKICAgIHRoZSBzZXJ2ZXIgc2VsZWN0cyBmcm9tIHRoZXNlIHZpcnR1YWwgaG9zdHMgdGhlIGJlc3QgbWF0Y2ggYmFzZWQgb24gdGhlCiAgICByZXF1ZXN0ZWQgaG9zdG5hbWUuICBJZiBubyBtYXRjaGluZyBuYW1lLWJhc2VkIHZpcnR1YWwgaG9zdCBpcyBmb3VuZCwKICAgIHRoZW4gdGhlIGZpcnN0IGxpc3RlZCB2aXJ0dWFsIGhvc3QgdGhhdCBtYXRjaGVkIHRoZSBJUCBhZGRyZXNzIHdpbGwgYmUKICAgIHVzZWQuICBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgZmlyc3QgbGlzdGVkIHZpcnR1YWwgaG9zdCBmb3IgYSBnaXZlbiBJUCBhZGRyZXNzCiAgICBhbmQgcG9ydCBjb21iaW5hdGlvbiBpcyB0aGUgZGVmYXVsdCB2aXJ0dWFsIGhvc3QgZm9yIHRoYXQgSVAgYW5kIHBvcnQKICAgIGNvbWJpbmF0aW9uLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+U2VjdXJpdHk8L2gzPgogICAgPHA+U2VlIHRoZSA8YSBocmVmPSIuLi9taXNjL3NlY3VyaXR5X3RpcHMuaHRtbCI+c2VjdXJpdHkgdGlwczwvYT4KICAgIGRvY3VtZW50IGZvciBkZXRhaWxzIG9uIHdoeSB5b3VyIHNlY3VyaXR5IGNvdWxkIGJlIGNvbXByb21pc2VkIGlmIHRoZQogICAgZGlyZWN0b3J5IHdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkIGlzIHdyaXRhYmxlIGJ5IGFueW9uZSBvdGhlcgogICAgdGhhbiB0aGUgdXNlciB0aGF0IHN0YXJ0cyB0aGUgc2VydmVyLjwvcD4KICAgIDwvZGl2PgoKPGgzPlNlZSBhbHNvPC9oMz4KPHVsPgo8bGk+PGEgaHJlZj0iLi4vdmhvc3RzLyI+QXBhY2hlIEhUVFAgU2VydmVyIFZpcnR1YWwgSG9zdCBkb2N1bWVudGF0aW9uPC9hPjwvbGk+CjxsaT48YSBocmVmPSIuLi9kbnMtY2F2ZWF0cy5odG1sIj5Jc3N1ZXMgUmVnYXJkaW5nIEROUyBhbmQKICAgIEFwYWNoZSBIVFRQIFNlcnZlcjwvYT48L2xpPgo8bGk+PGEgaHJlZj0iLi4vYmluZC5odG1sIj5TZXR0aW5nCiAgICB3aGljaCBhZGRyZXNzZXMgYW5kIHBvcnRzIEFwYWNoZSBIVFRQIFNlcnZlciB1c2VzPC9hPjwvbGk+CjxsaT48YSBocmVmPSIuLi9zZWN0aW9ucy5odG1sIj5Ib3cgJmx0O0RpcmVjdG9yeSZndDssICZsdDtMb2NhdGlvbiZndDsKICAgIGFuZCAmbHQ7RmlsZXMmZ3Q7IHNlY3Rpb25zIHdvcms8L2E+IGZvciBhbiBleHBsYW5hdGlvbiBvZiBob3cgdGhlc2UKICAgIGRpZmZlcmVudCBzZWN0aW9ucyBhcmUgY29tYmluZWQgd2hlbiBhIHJlcXVlc3QgaXMgcmVjZWl2ZWQ8L2xpPgo8L3VsPgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZGUvbW9kL2NvcmUuaHRtbCIgaHJlZmxhbmc9ImRlIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkRldXRzY2giPiZuYnNwO2RlJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2VuL21vZC9jb3JlLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9lcy9tb2QvY29yZS5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbW9kL2NvcmUuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvY29yZS5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL21vZC9jb3JlLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvY29yZS5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==